Haftungsausschluss: Ich benutze keine Schale, also nimm das mit einem Körnchen Salz.
eshell
scheint aufzurufen eshell-write-history
, um den Verlauf zu schreiben, der ein optionales Argument verwendet, append
das standardmäßig verwendet wird nil
. Dieses Argument scheint eshell
derzeit nicht verwendet zu werden, scheint jedoch zu funktionieren (es leitet das Argument an weiter write-region
, das ordnungsgemäß angehängt wird).
Hier gibt es einige Möglichkeiten.
(setq eshell-save-history-on-exit nil)
und ruf eshell-write-history
dich an
- Definieren Sie neu
eshell-write-history
, um Ihre Anforderungen zu erfüllen.
Persönlich würde ich mit 1 gehen.
Als Beispiel:
(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)
Dank @ joseph-garvin für die korrigierte, eshell-append-history
Arbeitsfunktion
Dies behandelt das dynamische Laden des neuen Verlaufsinhalts in eine Shell nicht (z. B. Ausführen eines Befehls X
in Shell A und Anzeigen des Verlaufs in Shell B ohne erneutes Laden; wie z. B. SHARE_HISTORY von zsh). Ich weiß nicht, wie effizient es eshell-read-history
ist, also würde ich zögern, es in einem Haken laufen zu lassen.
Es ist auch möglich, dass Sie mit dieser eshell-append-history
Funktion doppelte Einträge erhalten . Möglicherweise müssen Sie einige Spielereien ausführen, indem Sie alle bis auf den letzten Eintrag löschen eshell-history-ring
und ihn dann nach dem Schreiben des Verlaufs auf den alten Wert zurücksetzen.
Z.B
(let ((old-ring (copy-list eshell-history-ring)))
(setq eshell-history-ring (list (car eshell-history-ring)))
; write
(setq eshell-history-ring old-ring))
eshell-exit-hook
auf Null setzen , da diese automatisch geladen wird, wenn eshell startet :(add-hook 'eshell-exit-hook 'eshell-write-history nil t)
. Ich habe den Haken so eingestellt, dass er lokal null ist (standardmäßig ist er global null):(add-hook 'eshell-mode-hook '(lambda () (setq eshell-exit-hook nil)))