इंफ़ेक्टर एमॅक्स लिस्प मोड में सत्रों के बीच के इतिहास को याद करना


9

मैं Emacs को *ielm*सत्रों के बीच बफ़र्स के लिए इतिहास याद नहीं करवा सकता । जहां तक ​​मैं बता सकता हूं, इस तरह के इतिहास को बफर-लोकल वेरिएबल में रिकॉर्ड किया गया है comint-input-ring। इसलिए मैंने अपनी init फ़ाइल में निम्न अभिव्यक्ति जोड़ी है:

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

यह काम नहीं करता है। मुझे पता है कि desktopपैकेज काम कर रहा है क्योंकि Emacs ने उन वैश्विक चरों को याद किया है जिन्हें मैंने desktop-globals-to-saveअपनी इनिट फ़ाइल में जोड़ा है ।

-

संपादित करें: savehistया तो काम नहीं करता है। मुझे लगता है कि क्योंकि comint-input-ringएक बफर-स्थानीय चर है।


1
अब यह जांचने का समय नहीं है कि यह डेस्कटॉप के लिए काम क्यों नहीं कर सकता है। लेकिन आप 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 को पुनरारंभ करें और पूरी तरह से जीवन जीने का आनंद लें।
कानून व्यवस्था

जवाबों:


5

आप के बफर-स्थानीय मूल्य बचा सकता है comint-input-ringएक वैश्विक चर में जब एक *ielm*बफर मार दिया जाता है और में बहाल 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)

अब आप को जोड़ने के लिए सक्षम होना चाहिए ielm-comint-input-ringकरने के लिए savehist-additional-variablesव्यवहार आप चाहते हैं पाने के लिए। (मैंने इस दृष्टिकोण का परीक्षण किया है; आपको इसका उपयोग करने में सक्षम होना चाहिए desktop-locals-to-save, हालांकि।)


1
आप का उपयोग करना चाहिए LOCALकरने के लिए तर्क add-hookमैन्युअल बुला से, बल्कि make-local-variableपर kill-buffer-hook। उत्तरार्द्ध समस्याओं का कारण बन सकता है जब बाद में वैश्विक रूप से हुक में कॉलबैक जोड़ने की कोशिश की जा रही है।
फिल्स

मुझे यह जानकर बहुत खुशी हुई कि यह inf-mongo(या, संभवतः, किसी भी अन्य विधा का उपयोग करता है comint) के लिए काम किया है जो इतना उपयोगी है, और मुझे थोड़ा और अधिक सटीक भी सिखाया ... धन्यवाद!
ब्लेक मिलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.