Oświadczenie: Nie używam skorupy, więc weź to z odrobiną soli.
eshellzdaje się wywoływać eshell-write-historyzapisywanie historii, która przyjmuje opcjonalny argument appenddomyślnie nil. Ten argument wydaje się być eshellobecnie 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-historysiebie
- Przedefiniuj,
eshell-write-historyaby 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-historyfunkcję
Nie obsługuje to dynamicznego ładowania nowej zawartości historii do powłoki (np. Uruchom polecenie Xw 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-historyjest, więc wahałbym się, żeby go uruchomić.
Możliwe jest również, że dzięki tej eshell-append-historyfunkcji 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))