डिस्क्लेमर: मैं एसहेल का उपयोग नहीं करता, इसलिए इसे नमक के दाने के साथ लें।
eshell
eshell-write-history
इतिहास लिखने के लिए कॉल करना प्रतीत होता है , जो एक वैकल्पिक तर्क लेता है append
जो चूक करता है nil
। यह तर्क eshell
वर्तमान में अप्रयुक्त प्रतीत होता है , लेकिन यह काम करता दिखाई देता है (यह तर्क को write-region
उस तक पहुंचाता है, जो ठीक से करता है)।
यहां कुछ विकल्प हैं।
(setq eshell-save-history-on-exit nil)
और eshell-write-history
अपने आप को बुलाओ
eshell-write-history
अपनी आवश्यकता को पूरा करने के लिए फिर से परिभाषित करें।
व्यक्तिगत रूप से, मैं 1 के साथ जाऊंगा।
उदहारण के लिए:
(setq eshell-save-history-on-exit nil)
(defun eshell-append-history ()
"Call `eshell-write-history' with the `append' parameter set to `t'."
(when eshell-history-ring
(let ((newest-cmd-ring (make-ring 1)))
(ring-insert newest-cmd-ring (car (ring-elements eshell-history-ring)))
(let ((eshell-history-ring newest-cmd-ring))
(eshell-write-history eshell-history-file-name t)))))
(add-hook eshell-pre-command-hook #'eshell-append-history)
सही, काम कर रहे eshell-append-history
समारोह के लिए @ जोसेफ-गार्विन के लिए धन्यवाद
यह गतिशील रूप से नए इतिहास सामग्री को शेल में लोड नहीं करता है (जैसे X
शेल ए में कमांड चलाएँ , और इसे शेल बी में इतिहास में पुनः लोड किए बिना दिखाई देता है; जैसे zsh का SHARE_HISTORY)। मुझे नहीं पता कि यह कितना कुशल eshell-read-history
है, इसलिए मैं इसे एक हुक में चलाने में संकोच करूंगा।
यह भी संभव है कि आप इस eshell-append-history
फ़ंक्शन के साथ डुप्लिकेट प्रविष्टियों को समाप्त कर देंगे । आपको सभी क्लीयरिंग के साथ कुछ शेंनिगन्स करने की आवश्यकता हो सकती है, लेकिन सबसे हालिया प्रविष्टि से eshell-history-ring
, फिर इसे इतिहास लिखने के बाद पुराने मान पर रीसेट करना होगा।
उदाहरण के लिए
(let ((old-ring (copy-list eshell-history-ring)))
(setq eshell-history-ring (list (car eshell-history-ring)))
; write
(setq eshell-history-ring old-ring))