Я только что проверил это, и он работает с использованием списка, и add-to-list
Это также устраняет дубликаты записей. Это отвечает вашим потребностям?
(defvar closed-files (list))
(defun track-closed-file ()
(message buffer-file-name)
(and buffer-file-name
(add-to-list 'closed-files buffer-file-name)))
(defun last-closed-files ()
(interactive)
(find-file (ido-completing-read "Last closed: " closed-files)))
(add-hook 'kill-buffer-hook 'track-closed-file)
Обновление
Мне очень нравится эта функциональность, и я поместил ее в мою конфигурацию emacs. Вы также можете извлечь выгоду из изменений, которые я сделал.
Это добавление помещает последние закрытые файлы в начало списка, даже если они были ранее закрыты (и уже находятся в списке closed-files
).
(defun track-closed-file ()
(and buffer-file-name
(message buffer-file-name)
(or (delete buffer-file-name closed-files) t)
(add-to-list 'closed-files buffer-file-name)))
Ваша первоначальная проблема заключалась в том, что cons
вернет вам новый список, а не манипулирует списком ввода:
(setq mylist '(2 3))
=> (2 3)
(cons 1 mylist)
=> (1 2 3)
mylist
=> (2 3)
в этом случае вам нужно будет сделать:
(setq mylist (cons 1 mylist))
=> (1 2 3)
mylist
=> (1 2 3)