【发布时间】:2014-05-11 14:10:08
【问题描述】:
我经常使用 emacsclient 编辑 /tmp 中的临时文件,并希望像处理其他文件一样自动创建我的文件的备份副本。我敢肯定有办法做到这一点 - 但怎么做? :)
(我搜索了 Emacs 手册、emacswiki 和 SO,但找不到任何有用的东西)
【问题讨论】:
标签: emacs configuration backup
我经常使用 emacsclient 编辑 /tmp 中的临时文件,并希望像处理其他文件一样自动创建我的文件的备份副本。我敢肯定有办法做到这一点 - 但怎么做? :)
(我搜索了 Emacs 手册、emacswiki 和 SO,但找不到任何有用的东西)
【问题讨论】:
标签: emacs configuration backup
查看normal-backup-enable-predicate 函数,它是backup-enable-predicate 变量的默认值。
由于默认函数的唯一目的是禁止对各种临时目录中的文件进行备份,您可能只想设置一个无条件返回 t 的替换。
(setq backup-enable-predicate (lambda (name) t))
files.el 中的用法向我表明,您也可以将此变量设置为nil。这在文档中没有说明,所以它可能不可靠,但是 Emacs 中的任何其他库都没有引用该变量,所以它可能很好(但我仍然建议使用 lambda,因为它在做什么更明显)。
另见 C-hig (elisp) Making Backups RET
n.b.我实际上并不熟悉small-temporary-file-directory(请参阅该变量的文档字符串),但temporary-file-directory 的值通常是/tmp/,所以这两种情况通常是相同的。
如果您确实想为某些临时目录保留默认行为,而不是其他的,您应该定义原始函数的修改副本:(defun my-backup-enable-predicate ...),然后是(setq backup-enable-predicate 'my-backup-enable-predicate)
【讨论】:
将此粘贴到您的 .emacs 文件中:
;; create an invisible backup directory so our directories
;; look a bit cleaner
;; thanks to #emacs in irc.freenode.org, Ryan Barrett of snarfed.org
;; and freethegnu.wordpress.com
(defun make-backup-file-name (filename)
(defvar backups-dir "/tmp/")
(make-directory backups-dir t)
(expand-file-name
(concat backups-dir (file-name-nondirectory filename) "~")
(file-name-directory filename)))
【讨论】:
(setq backup-directory-alist '(("." . "~/.backup"))),但请仔细阅读How do I control how Emacs makes backup files? 的各种答案,因为这不太可能是您想要配置的唯一选项。