Emacs tidak dapat menyimpan riwayat file yang terakhir dikunjungi dibuka di sesi saat ini sebelum shutdown

8

Saya punya masalah dengan emacs yang dimulai sebagai daemon menggunakan Systemd.

Setiap shutdown / reboot jika saya tidak menghentikan layanan daemon emacs secara manual, riwayat file yang dibuka baru-baru ini di sesi saat ini hilang. Saya pikir ini karena Systemd yang tidak dapat membunuh Emacs dengan benar ketika dalam keadaan shutdown.

Apa yang bisa saya lakukan untuk mengatasi masalah ini?

Konfigurasi Recentf saya di init.el:

(use-package recentf
    :config (progn (setq recentf-auto-cleanup 'never
                         recentf-max-menu-items 50
                         recentf-max-saved-items 400
                         recentf-save-file
                         (expand-file-name "temp/.recentf" user-emacs-directory))
                   (recentf-mode t)))

Konfigurasi layanan emacs Systemd:

[Unit]
Description=Emacs: the extensible, self-documenting text editor

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"

Restart=always
User=%i
#WorkingDirectory=%h

[Install]
WantedBy=multi-user.target
Maglight
sumber
1
Bukankah Anda seharusnya menanyakan ini di forum systemd? Dengan asumsi use-packagekode Anda berfungsi dalam keadaan lain (?) Maka sepertinya satu-satunya masalah adalah systemdtidak menjalankan ExecStopperintah Anda .
phils

Jawaban:

4

Anda dapat menyimpan file terbaru sebelum dimatikan dengan menelepon recentf-save-list

M-x recentf-save-list RET

Ini menambahkan file terbaru Anda ke riwayat terkini.

Jika Anda tidak ingin melakukan ini secara manual, Anda dapat menambahkan timer yang akan melakukannya untuk Anda setiap 5 menit.

(run-at-time (current-time) 300 'recentf-save-list)

Tambahkan ini ke konfigurasi Anda. Jadi, setiap kali Anda membuka emacs, ia akan memanggil fungsi dan setiap 5 menit (atau 300 detik) ia akan memanggil fungsi itu.

Sumber: https://emacs.stackexchange.com/a/15115/5187

ChillarAnand
sumber
1

Saya tahu utas ini sudah lama, tetapi saya menemukan masalah yang sama di MS Windows (yaitu Windows tidak tahu cara keluar dari daemon Emacs dengan anggun). Saya memecahkan ini untuk saya dengan menghubungkan recentf-save-listke terminal-delete-functions. Jadi dalam file init saya, saya memiliki baris berikut:

(add-hook 'delete-terminal-functions (lambda (terminal) (recentf-save-list)))

Kemudian recentf-listsesi saat ini disimpan setiap kali Anda menutup klien Emacs. Ini cukup bagi saya, karena saya terbiasa menutup Emacs sebelum mematikan PC saya.

Wolfgang
sumber
0

Solusi lain adalah menyimpan daftar file terkini setiap kali Anda mengunjungi file baru. Baris di bawah ini ditambahkan ke file init akan melakukan pekerjaan:

(add-hook 'find-file-hook 'recentf-save-list)
thdox
sumber