Emacs non può salvare la cronologia dei file visitati di recente aperti nella sessione corrente prima dell'arresto


8

Ho un problema con emacs avviato come demone usando Systemd.

Ogni arresto / riavvio se non interrompo manualmente il servizio daemon emacs, la cronologia dei file aperti di recente nella sessione corrente viene persa. Penso che ciò sia dovuto al Systemd che non può uccidere correttamente Emacs quando è in stato di arresto.

Cosa posso fare per risolvere questo problema?

La mia recente configurazione in 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)))

Systemd emacs service config:

[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

1
Non dovresti chiedere questo su un forum systemd? Supponendo che il use-packagecodice funzioni in altre circostanze (?), Sembrerebbe che l'unico problema sia che systemdnon viene eseguito il ExecStopcomando.
phils,

Risposte:


4

È possibile salvare i file recenti appena prima dell'arresto chiamando recentf-save-list

M-x recentf-save-list RET

Questo aggiunge i tuoi file recenti alla cronologia recente.

Se non vuoi farlo manualmente, puoi aggiungere un timer che lo farà per te ogni 5 minuti.

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

Aggiungi questo alla tua configurazione. Quindi ogni volta che apri emacs, chiamerà la funzione e ogni 5 minuti (o 300 secondi) continuerà a chiamare quella funzione.

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


1

So che questo thread è vecchio, ma ho riscontrato lo stesso problema in MS Windows (ovvero Windows sa come uscire con grazia dal demone Emacs). Ho risolto questo per me agganciando recentf-save-listin terminal-delete-functions. Quindi nel mio file init ho la seguente riga:

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

Quindi la recentf-listsessione corrente viene salvata ogni volta che si chiude il client Emacs. Questo mi è bastato, perché sono abituato a chiudere Emacs prima di spegnere il mio PC.


0

Un'altra soluzione è quella di salvare l'elenco dei file recenti ogni volta che si visita un nuovo file. Il seguente allineato aggiunto al file init farà il lavoro:

(add-hook 'find-file-hook 'recentf-save-list)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.