Penafian: Saya tidak menggunakan eshell, jadi ambil ini dengan sebutir garam.
eshell
tampaknya memanggil eshell-write-history
untuk menulis riwayat, yang mengambil argumen opsional append
yang secara default nil
. Argumen ini tampaknya tidak digunakan pada eshell
saat ini, tetapi tampaknya berfungsi (ia melewati argumen sampai write-region
, yang tidak benar ditambahkan).
Ada beberapa opsi di sini.
(setq eshell-save-history-on-exit nil)
dan panggil eshell-write-history
dirimu sendiri
- Tetapkan ulang
eshell-write-history
untuk memenuhi kebutuhan Anda.
Secara pribadi, saya akan pergi dengan 1.
Sebagai contoh:
(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)
Terima kasih kepada @ joseph-garvin untuk fungsi yang diperbaiki dan eshell-append-history
berfungsi
Ini tidak menangani secara dinamis memuat konten sejarah baru ke dalam shell (misalnya menjalankan perintah X
di shell A, dan memiliki itu muncul dalam sejarah di shell B tanpa memuat ulang; seperti SHARE_HISTORY zsh). Saya tidak tahu seberapa efisiennya eshell-read-history
, jadi saya akan ragu menjalankannya.
Mungkin juga Anda akan berakhir dengan entri duplikat dengan eshell-append-history
fungsi ini . Anda mungkin perlu melakukan beberapa gangguan dengan menghapus semua entri kecuali yang paling baru eshell-history-ring
, kemudian mengatur ulang ke nilai lama setelah menulis sejarah.
Misalnya
(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
ke nil karena ini secara otomatis akan dimuat ketika eshell dimulai:(add-hook 'eshell-exit-hook 'eshell-write-history nil t)
. Saya menetapkan hook menjadi nihil lokal seperti itu (secara global nihil secara default):(add-hook 'eshell-mode-hook '(lambda () (setq eshell-exit-hook nil)))