Inferior Emacs Lisp Modundaki oturumlar arasındaki geçmişi hatırlamak


9

Emacs'ın *ielm*oturumlar arasındaki arabelleklerin geçmişini hatırlamasını sağlayamıyorum . Anlayabildiğim kadarıyla böyle bir tarih tampon-yerel değişkenine kaydedilir comint-input-ring. Bu nedenle init dosyama aşağıdaki ifadeyi ekledim:

(setq desktop-locals-to-save
    (append desktop-locals-to-save
            '((comint-input-ring . 50))))

Çalışmıyor. desktopEmacs desktop-globals-to-saveinit dosyama eklediğim global değişkenleri hatırladığından paketin çalıştığını biliyorum .

-

EDIT: de savehistçalışmıyor. comint-input-ringBir tampon-yerel değişken olduğu için sanırım .


1
Artık masaüstü için neden işe yaramayabileceğini kontrol etmek için zaman yok. Ancak savehist.elbu değişkeni kullanmayı ve kaydedilecek değişkenler listesine eklemeyi deneyebilirsiniz .
Drew

Teşekkürler Drew, ama savehistzaten düşündüm (bahsetmediğim için üzgünüm). Görebildiğim kadarıyla bu sadece global değişkenler içindi comint-input-ring, tampon-yereldi. Şimdi yine de denedim, başarı olmadan.
Elena

UYARI: Aşağıdaki çözüm küfürdür !!!! İçeride dışında açıklama comint.elaşağıdaki iki kod hatları: (put 'comint-input-ring 'permanent-local t)ve (make-local-variable 'comint-input-ring). Ardından eklemek comint-input-ringiçin desktop-locals-to-save. Son olarak, uygulanabilir dosyaları yeniden baytlayın, Emacs'ı yeniden başlatın ve hayatın tadını sonuna kadar çıkarın.
hukukçu

Yanıtlar:


5

comint-input-ringBir *ielm*arabellek öldürüldüğünde arabellek-yerel değerini global bir değişkene kaydedebilir ve içine geri yükleyebilirsiniz inferior-emacs-lisp-mode-hook:

;; global copy of the buffer-local variable
(defvar ielm-comint-input-ring nil)

(defun set-ielm-comint-input-ring ()
  ;; create a buffer-local binding of kill-buffer-hook
  (make-local-variable 'kill-buffer-hook)
  ;; save the value of comint-input-ring when this buffer is killed
  (add-hook 'kill-buffer-hook #'save-ielm-comint-input-ring)
  ;; restore saved value (if available)
  (when ielm-comint-input-ring
    (message "Restoring comint-input-ring...")
    (setq comint-input-ring ielm-comint-input-ring)))

(defun save-ielm-comint-input-ring ()
  (message "Saving comint-input-ring...")
  (setq ielm-comint-input-ring comint-input-ring))

(require 'ielm)
(add-hook 'inferior-emacs-lisp-mode-hook #'set-ielm-comint-input-ring)

Şimdi istediğiniz davranışı elde ielm-comint-input-ringetmek savehist-additional-variablesiçin ekleyebilmeniz gerekir . (Bu yaklaşımı test ettim; desktop-locals-to-saveyine de kullanabilmelisin .)


1
Sen kullanmalıdır LOCALiçin argüman add-hookelle çağırmak yerine, make-local-variableüzerinde kill-buffer-hook. İkincisi, daha sonra küresel olarak çağrıyı geri çağırmaya çalışırken sorunlara neden olabilir.
phils

Bunun da işe yaradığını bulmaktan çok memnun kaldım inf-mongo(ya da muhtemelen başka bir mod kullanıyor comint) Bu çok yardımcı oldu ve bana biraz daha elisp öğretti ... teşekkürler!
Blake Miller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.