Oświadczenie: Nie używam skorupy, więc weź to z odrobiną soli.
eshell
zdaje się wywoływać eshell-write-history
zapisywanie historii, która przyjmuje opcjonalny argument append
domyślnie nil
. Ten argument wydaje się być eshell
obecnie nieużywany , ale wydaje się, że działa (przekazuje argument do write-region
, który właściwie dołącza).
Jest tu kilka opcji.
(setq eshell-save-history-on-exit nil)
i zadzwoń do eshell-write-history
siebie
- Przedefiniuj,
eshell-write-history
aby spełnić Twoje wymagania.
Osobiście wybrałbym 1.
Jako przykład:
(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)
Podziękowania dla @ Joseph-Garvin za poprawioną, działającą eshell-append-history
funkcję
Nie obsługuje to dynamicznego ładowania nowej zawartości historii do powłoki (np. Uruchom polecenie X
w powłoce A i wyświetlenie jej w historii w powłoce B bez ponownego ładowania; jak SHARE_HISTORY zsh). Nie wiem, jak skuteczny eshell-read-history
jest, więc wahałbym się, żeby go uruchomić.
Możliwe jest również, że dzięki tej eshell-append-history
funkcji skończą się zduplikowane wpisy . Być może będziesz musiał zrobić kilka shenaniganów, usuwając wszystko oprócz najnowszego wpisu z eshell-history-ring
, a następnie resetując go do starej wartości po zapisaniu historii.
Na przykład
(let ((old-ring (copy-list eshell-history-ring)))
(setq eshell-history-ring (list (car eshell-history-ring)))
; write
(setq eshell-history-ring old-ring))