27.1.1 创建备份文件

Function: backup-buffer

该函数在合适时为当前缓冲区所访问的文件创建备份。它会在 save-buffer 首次保存缓冲区前被调用。

若备份通过重命名方式创建,返回值为形如 (modes extra-alist backupname) 的 cons 单元, 其中 modes 是原文件的权限位,与 file-modes 返回值一致(see 测试文件可访问性); extra-alist 是描述原文件扩展属性的 alist,与 file-extended-attributes 返回值一致(see 文件扩展属性); backupname 为备份文件名称。

在其他所有情况下(即通过复制创建备份或未创建备份),该函数返回 nil

Variable: buffer-backed-up

该缓冲区局部变量标记该缓冲区对应的文件是否已因本缓冲区而创建过备份。若其值非 nil, 表示备份文件已写入;否则文件应在下次保存时进行备份(前提是备份已启用)。 该变量为永久局部变量,kill-all-local-variables 不会改变它。

User Option: make-backup-files

该变量决定是否创建备份文件。若其值非 nil,则 Emacs 在每个文件首次保存时创建备份, 前提是 backup-inhibitednil(见下文)。

下面示例展示如何仅在 Rmail 缓冲区中关闭 make-backup-files,其他位置保持不变。 将其设为 nil 可阻止 Emacs 为这些文件创建备份,从而节省磁盘空间。(可将此代码放入初始化文件。)

(add-hook 'rmail-mode-hook
          (lambda () (setq-local make-backup-files nil)))
Variable: backup-enable-predicate

该变量的值为一个函数,会在特定时机被调用,以决定某文件是否需要创建备份文件。 该函数接收一个参数:待判断的绝对文件名。若函数返回 nil,则该文件禁用备份; 否则由本节其他变量决定是否以及如何创建备份。

默认值为 normal-backup-enable-predicate,它会排除 temporary-file-directorysmall-temporary-file-directory 中的文件。

Variable: backup-inhibited

若该变量非 nil,则禁用备份。它记录了对被访问文件应用 backup-enable-predicate 的判断结果。 其他基于所访问文件控制备份的机制也可合理使用该变量。例如,VC 会将其设为非 nil, 以避免为版本控制系统管理的文件创建备份。

该变量为永久局部变量,因此切换主模式不会丢失其值。主模式不应直接设置此变量, 而应修改 make-backup-files

User Option: backup-directory-alist

该变量的值是一个由文件名匹配规则和备份目录组成的 alist。每个元素格式为:

(regexp . directory)

名称匹配 regexp 的文件,其备份将保存在 directory 中。directory 可以是相对或绝对路径。 若为绝对路径,则所有匹配文件的备份都会存入同一目录;目录中的备份文件名将使用原文件完整路径, 并将所有目录分隔符替换为 ‘!’ 以避免冲突。若文件系统会截断过长名称,则该方式可能无法正常工作。

若希望所有备份统一存入一个目录,alist 可只包含一个元素,将 ‘"."’ 与对应目录关联。

若该变量为 nil(默认值)或无法匹配某文件名,则备份会创建在原文件所在目录。

在不支持长文件名的 MS-DOS 文件系统中,该变量始终被忽略。

User Option: make-backup-file-name-function

该变量的值为用于生成备份文件名的函数。函数 make-backup-file-name 会调用它。 See 备份文件命名

该变量可设为缓冲区局部变量,以便对特定文件执行特殊处理。若修改此函数, 通常也需要同步修改 backup-file-name-pfile-name-sans-versions


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike