本节所介绍的函数主要用于文档记录,你可以通过重新定义它们来自定义备份文件的命名规则。 如果修改了其中一个,通常也需要同步修改其余相关函数。
该函数在 filename 可能为备份文件名时返回非 nil 值。
它仅检查名称本身,不检查该文件是否实际存在。
(backup-file-name-p "foo")
⇒ nil
(backup-file-name-p "foo~")
⇒ 3
该函数的标准定义如下:
(defun backup-file-name-p (file) "Return non-nil if FILE is a backup file \ name (numeric or not)..." (string-match "~\\'" file))
可见,该函数在文件名以 ‘~’ 结尾时返回非 nil 值。
(我们使用反斜杠将文档字符串的第一行拆分为文本中的两行,但字符串本身仍为单行。)
这一简单表达式被独立为一个函数,便于重新定义以实现自定义。
该函数返回一个字符串,作为文件 filename 的无编号备份文件名。 在类 Unix 系统上,仅需在 filename 后追加波浪号。
大多数操作系统中,该函数的标准定义如下:
(defun make-backup-file-name (file) "Create the non-numeric backup file name for FILE..." (concat file "~"))
你可以通过重定义此函数来修改备份文件命名规则。下面示例重定义 make-backup-file-name,
使其在追加波浪号的同时在文件名前添加 ‘.’:
(defun make-backup-file-name (filename)
(expand-file-name
(concat "." (file-name-nondirectory filename) "~")
(file-name-directory filename)))
(make-backup-file-name "backups.texi")
⇒ ".backups.texi~"
Emacs 的部分功能(包括部分 Dired 命令)假定备份文件名以 ‘~’ 结尾。 若不遵循该约定,不会导致严重问题,但这些命令的效果可能不如预期。
该函数计算 filename 新备份文件的文件名,同时可能提议删除部分已有备份文件。
find-backup-file-name 返回一个列表,其 CAR 为新备份文件名,CDR 为建议删除的备份文件列表。
返回值也可为 nil,表示不创建备份。
变量 kept-old-versions 和 kept-new-versions 决定应保留的备份版本,
本函数会将这些版本排除在 CDR 列表之外。See 创建与删除编号备份文件。
下例中,返回值表示新备份文件名为 ~rms/foo.~5~, ~rms/foo.~3~ 为多余版本,调用方可考虑删除。
(find-backup-file-name "~rms/foo")
⇒ ("~rms/foo.~5~" "~rms/foo.~3~")
该函数返回 filename 所有备份文件名的列表,若无备份则返回 nil。
文件按修改时间降序排列,最新文件排在最前。
该函数返回 file-backup-file-names 所返回列表的第一个元素。
部分文件比较命令使用该函数,以便自动将文件与其最新备份进行对比。