我有emacs自动保存并备份到我的主目录中的单个目录。出于某种原因,当我尝试退出我设置的变量名称时,保存目录正在传递给ido-mode,它不会让我退出emacs。我已经尝试删除我的ido.last文件的旧版本(和符号链接。#ido.last),但这似乎并没有始终处理问题。我拥有存储文件的目录和文件本身的完全权限和所有权。这种情况发生在我处理emacs主要版本21,22和24的几个系统上。
以下是我的emacs配置的相关部分:
(defvar home (concat (getenv "HOME") "/"))
(defvar emacs-dir (concat home ".emacs.d/"))
(defvar savedir (concat home ".saves/"))
(setq backup-directory-alist `((".*" . savedir)))
(setq auto-save-file-name-transforms `((".*" ,savedir t)))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-new-versions 10
kept-old-versions 6
version-control t)
(setq ido-save-directory-list-file (concat emacs-dir "cache/ido.last"))
(ido-mode t)
(setq ido-enable-flex-matching t
ido-everywhere t)
这是问题发生时调试器输出的样子。
Debugger entered--Lisp error: (wrong-type-argument stringp savedir)
expand-file-name(savedir "/home/pinyaka/.emacs.d/cache/")
make-backup-file-name-1("/home/pinyaka/.emacs.d/cache/ido.last")
make-backup-file-name("/home/pinyaka/.emacs.d/cache/ido.last")
find-backup-file-name("/home/pinyaka/.emacs.d/cache/ido.last")
backup-buffer()
basic-save-buffer-2()
basic-save-buffer-1()
basic-save-buffer()
save-buffer()
write-file("/home/pinyaka/.emacs.d/cache/ido.last" nil)
ido-save-history()
ido-kill-emacs-hook()
run-hooks(kill-emacs-hook)
kill-emacs()
save-buffers-kill-emacs(nil)
call-interactively(save-buffers-kill-emacs)
你可以看到,由于某些原因,ido已经获得了savedir
,尽管我从来没有使用过与ido模式相关的变量(我已经包含了使用该变量的所有地方以及所有ido叫我做的)。为什么ido对saveir做任何事情?
答案 0 :(得分:3)
我认为问题是:
(setq backup-directory-alist `((".*" . savedir)))
应该是
(setq backup-directory-alist `((".*" . ,savedir)))
说明:当Emacs退出时,Ido正在尝试保存其历史记录; Emacs的标准备份程序启动并尝试备份该文件。但是,您忘记在savedir
的配置中取消引用backup-directory-alist
,因此cons单元格是一对字符串和符号,而不是预期的一对字符串。