Я не могу заставить Emacs запомнить историю *ielm*
буферов между сессиями. Насколько я могу судить, такая история записана в буферной локальной переменной comint-input-ring
. Поэтому я добавил следующее выражение в мой файл инициализации:
(setq desktop-locals-to-save
(append desktop-locals-to-save
'((comint-input-ring . 50))))
Не работает Я знаю, что desktop
пакет работает, потому что Emacs запоминает глобальные переменные, которые я добавил desktop-globals-to-save
в мой файл инициализации.
-
РЕДАКТИРОВАТЬ: savehist
не работает либо. Я полагаю, это потому, что comint-input-ring
это локальная переменная буфера.
savehist.el
и добавить эту переменную в список переменных для сохранения.savehist
(извините, что не упомянул это). Насколько я мог видеть, это было только для глобальных переменных, в то времяcomint-input-ring
как локально для буфера. Теперь я все равно попробовал, но безуспешно.comint.el
следующие две строки кода:(put 'comint-input-ring 'permanent-local t)
и(make-local-variable 'comint-input-ring)
. Затем добавьтеcomint-input-ring
вdesktop-locals-to-save
. Наконец, повторно скомпилируйте соответствующие файлы, перезапустите Emacs и наслаждайтесь полной жизнью.Ответы:
Вы можете сохранить локальное значение буфера
comint-input-ring
в глобальной переменной, когда*ielm*
буфер уничтожен, и восстановить его вinferior-emacs-lisp-mode-hook
:Теперь вы должны иметь возможность добавлять
ielm-comint-input-ring
кsavehist-additional-variables
получить поведение , которое вы хотите. (Я проверил этот подход; вы должны также использовать егоdesktop-locals-to-save
.)источник
LOCAL
аргументadd-hook
, а не вручную вызоваmake-local-variable
наkill-buffer-hook
. Последнее может вызвать проблемы при последующей попытке добавить обратные вызовы к хуку глобально.inf-mongo
также (или, по-видимому, для любого другого режима, который используетcomint
), что очень полезно, и также научило меня немного больше elisp ... спасибо!