.emacs.desktop文件被自定义函数销毁
我使用Emacs桌面模块在会话之间保存打开的缓冲区。但是,我发现这会积累比我想要的更多的缓冲区,所以我编写了一个小函数,在保存到桌面文件之前立即清理缓冲区列表。这正如预期的那样工作,但出于奇怪的原因,.emacs.desktop偶尔会被置乱,即它在开始时包含另一个缓冲区的一部分,然后是预期的内容,然后是另一个缓冲区的结果。我一点也不知道为什么会这样。以下是我的.emacs文件的摘录:.emacs.desktop文件被自定义函数销毁,emacs,dot-emacs,Emacs,Dot Emacs,我使用Emacs桌面模块在会话之间保存打开的缓冲区。但是,我发现这会积累比我想要的更多的缓冲区,所以我编写了一个小函数,在保存到桌面文件之前立即清理缓冲区列表。这正如预期的那样工作,但出于奇怪的原因,.emacs.desktop偶尔会被置乱,即它在开始时包含另一个缓冲区的一部分,然后是预期的内容,然后是另一个缓冲区的结果。我一点也不知道为什么会这样。以下是我的.emacs文件的摘录: (defun kill-old-buffers () "Kill buffers from end of b
(defun kill-old-buffers ()
"Kill buffers from end of buffer list (not used recently) until no more than 50 buffers are left. Remove temporary buffers first"
(interactive)
(let* (desktop-buffer (current-buffer))
(dolist (buffer (buffer-list))
(if (or (string-match "^\*" (buffer-name buffer)) (string-match "\.hpp$" (buffer-name buffer)))
(kill-buffer buffer)
)
)
(setq all-buffers (reverse (buffer-list)))
(while (> (safe-length all-buffers) 50)
(setq buffer (pop all-buffers))
(if (not (string-equal (buffer-name buffer) (buffer-name (current-buffer))))
(kill-buffer buffer)
)
)
(switch-to-buffer desktop-buffer)
))
;; Kill old rarely-used buffers before saving
(add-hook 'desktop-save-hook
'(lambda () (kill-old-buffers)))
任何帮助都将不胜感激。它可能无法解决您所有的问题,但对于初学者,您需要在
let*
语句中围绕变量使用另一组参数
(let* ((desktop-buffer (current-buffer)))
我不确定你的功能是否真的是问题的原因。如果是这样的话,scottfrazer指出的
let*
的错误用法可能就是原因。但是你甚至根本不需要让*
(和切换到buffer
),因为
保存游览
,以及let
而不是setq
s,因为setq
将改变封闭词法范围中的变量。在这种情况下,您很可能在执行桌面保存钩子的函数中踩踏了缓冲区
变量,这是问题的另一个潜在原因
但是您也不需要这些let
s,因为您可以使用另一个dolist
执行第二个循环。您可以去掉前50个不想循环使用的缓冲区nthcdr
这是我改进的杀死旧缓冲区的版本:
(defun kill-old-buffers ()
"Kill buffers from end of buffer list (not used recently) until
no more than 50 buffers are left. Remove temporary buffers first."
(interactive)
(save-excursion
(dolist (buffer (buffer-list))
(if (or (string-match "^\*" (buffer-name buffer))
(string-match "\.hpp$" (buffer-name buffer)))
(kill-buffer buffer)))
(dolist (buffer (reverse (nthcdr 50 (buffer-list))))
(unless (eq buffer (current-buffer))
(kill-buffer buffer)))))
谢谢。正如您可能已经猜到的,Lisp不是我的主要编程语言;-)我已经用你的版本替换了我的版本,但只有时间会告诉我,如果这结束了我偶尔的问题。如果在一两周内再次发生这种情况,我会报告。在使用您的解决方案三周后,我只需做一个简短的更新:它现在似乎可以正常工作,但我仍然不明白最初的问题是什么原因造成的。再次非常感谢。