是否可以自动保存未访问文件的临时缓冲区?
问题描述:
假设我在没有访问文件的缓冲区中输入一堆文本(它可能是一个新的org2blog文章,或者只是一些临时缓冲区)。是否有可能在发生灾难和Emacs死亡的情况下自动保存它?是否可以自动保存未访问文件的临时缓冲区?
答
auto-save-mode
实际适用于非文件缓冲区。它只是默认不启用 - 通常发生在(after-find-file)
。
所以:的Mxauto-save-mode
RET
默认情况下自动保存的文件将被写入缓冲区的default-directory
(或/var/tmp
或~/
,这取决于写权限;看到章vbuffer-auto-save-file-name
RET)这可能是一个有点尴尬弄清楚崩溃后,所以设置为标准的东西可能是一个好主意。
下将确保这些自动保存的文件被写入到你的主目录(或M-Xcustomize-variable
RETmy-non-file-buffer-auto-save-dir
RET),如果auto-save-mode
交互式的调用。这将有希望避免与具有非文件缓冲区的auto-save-mode
的任何其他用途相冲突(例如代码提及邮件模式)。
(defcustom my-non-file-buffer-auto-save-dir (expand-file-name "~/")
"Directory in which to store auto-save files for non-file buffers,
when `auto-save-mode' is invoked manually.")
(defadvice auto-save-mode (around use-my-non-file-buffer-auto-save-dir)
"Use a standard location for auto-save files for non-file buffers"
(if (and (not buffer-file-name)
(called-interactively-p 'any))
(let ((default-directory my-non-file-buffer-auto-save-dir))
ad-do-it)
ad-do-it))
(ad-activate 'auto-save-mode)
答
phils' answer清除了我的东西,但我最终使用了一种不同的方法。为了文档的目的,我将它作为单独的答案发布。这是我的自动保存节:
;; Put autosave files (ie #foo#) in one place
(defvar autosave-dir (concat "~/.emacs.d/autosave.1"))
(defvar autosave-dir-nonfile (concat "~/.emacs.d/autosave.nonfile"))
(make-directory autosave-dir t)
(make-directory autosave-dir-nonfile t)
(defun auto-save-file-name-p (filename) (string-match "^#.*#$" (file-name-nondirectory filename)))
(defun make-auto-save-file-name()
(if buffer-file-name (concat autosave-dir "/" "#" (file-name-nondirectory buffer-file-name) "#")
(expand-file-name (concat autosave-dir-nonfile "/" "#%"
(replace-regexp-in-string "[*]\\|/" "" (buffer-name)) "#"))))
在此上下文中为非访问文件缓冲区创建单独的目录是可选的;他们也可以进入*位置(在这种情况下,autosave-dir
)。还要注意,如果临时缓冲区名称是“* foo/bar *”(带有星号和/或斜杠),我必须进行一些基本的文件名清理。
最后,可以自动打开,使用一些特定的模式中临时缓冲区自动保存像
(add-hook 'org2blog/wp-mode-hook '(lambda() (auto-save-mode t)))
伟大的信息。自动保存模式有点神秘,因为它非常不显眼(这是件好事)。我使用make-auto-save-file-name来控制缓冲区的保存位置,而不是defadvice。 – 2012-01-13 22:15:40