Я использую модуль рабочего стола Emacs для сохранения открытых буферов между сеансами. Однако я обнаружил, что при этом накапливается больше буферов, чем мне нужно, поэтому я написал небольшую функцию для очистки списка буферов непосредственно перед сохранением в файл на рабочем столе. Это работает, как и ожидалось, но по странным причинам .emacs.desktop иногда скремблируется, т. е. в начале он содержит часть другого буфера, затем предполагаемое содержимое, а затем результат другого буфера. Я не имею ни малейшего представления, почему это происходит. Вот выдержка из моего файла .emacs:
(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)))
Любая помощь будет оценена по достоинству.