Saya tidak bisa membuat Emacs mengingat sejarah untuk *ielm*
buffer di antara sesi. Sejauh yang saya tahu, sejarah tersebut dicatat dalam variabel buffer-local comint-input-ring
. Karena itu saya telah menambahkan ekspresi berikut ke file init saya:
(setq desktop-locals-to-save
(append desktop-locals-to-save
'((comint-input-ring . 50))))
Itu tidak bekerja. Saya tahu bahwa desktop
paket itu berfungsi karena Emacs mengingat variabel global yang telah saya tambahkan ke desktop-globals-to-save
dalam file init saya.
-
EDIT: savehist
tidak berfungsi juga. Saya kira itu karena comint-input-ring
variabel penyangga-lokal.
comint
desktop
history-variables
Elena
sumber
sumber
savehist.el
dan menambahkan variabel ini ke daftar vars untuk menyimpan.savehist
(maaf karena tidak menyebutkannya). Sejauh yang saya bisa lihat, itu hanya untuk variabel global, sedangkancomint-input-ring
buffer-lokal. Sekarang, saya sudah mencobanya, tanpa hasil.comint.el
dalam dua baris kode berikut:(put 'comint-input-ring 'permanent-local t)
dan(make-local-variable 'comint-input-ring)
. Lalu, tambahkancomint-input-ring
kedesktop-locals-to-save
. Terakhir, kompilasi ulang byte file yang berlaku, mulai ulang Emacs dan nikmati kehidupan semaksimal mungkin.Jawaban:
Anda bisa menyimpan nilai buffer-local
comint-input-ring
dalam variabel global ketika*ielm*
buffer terbunuh dan mengembalikannya diinferior-emacs-lisp-mode-hook
:Sekarang Anda harus dapat menambahkan
ielm-comint-input-ring
untuksavehist-additional-variables
mendapatkan perilaku yang Anda inginkan. (Saya menguji pendekatan ini; Anda seharusnya bisa menggunakannyadesktop-locals-to-save
juga.)sumber
LOCAL
argumen untukadd-hook
, bukan manual memanggilmake-local-variable
dikill-buffer-hook
. Yang terakhir dapat menyebabkan masalah ketika kemudian mencoba untuk menambahkan panggilan balik ke hook secara global.inf-mongo
dengan baik (atau, mungkin, mode lain yang menggunakancomint
) Itu sangat membantu, dan juga mengajari saya sedikit lebih banyak ... terima kasih!