Emacs 自动保存文件
目前比较流行的 Emacs 自动保存文件的包有 super-save 和 buffer-guardian.el 等。
这些包实现的核心功能是,在切换窗口、空闲一段时间或者切换到其他应用时,自动将已修改的 buffer 保存到对应的文件。
我自己核心的诉求就是,空闲几秒后,自动将修改保存到文件就可以了,使用 Emacs 内置的 auto-save 就可以满足我的诉求。
Emacs 有两种自动保存的保存的模式: auto-save-mode 和 auto-save-visited-mode ,区别是前者空闲时将修改的 buffer 保存到指定的目录下完成备份,在通过 recover-file 进行恢复,后者是直接保存到 buffer 对应的文件。相比而下前者不仅麻烦而且会产生不少临时文件,后者就能比较直接的达到目的。
(setq auto-save-visited-predicate (lambda () (and (not (buffer-live-p (get-buffer " *vundo tree*"))) (not (string-suffix-p "gpg" (file-name-extension (buffer-name)) t)) (not (eq (buffer-base-buffer (get-buffer (concat "CAPTURE-" (buffer-name)))) (current-buffer))) (or (not (boundp 'corfu--total)) (zerop corfu--total))))) (add-hook 'after-init-hook #'auto-save-visited-mode)
设置在 Emacs 启动后全局使能自动保存功能,通过设定 auto-save-visited-predicate 函数来排除一些不要自动保存的场景。另外,通过设置 auto-save-visited-interval 来指定空闲保存的时间,默认是 5 秒。