Emacs no puede guardar el historial de los archivos visitados recientemente abiertos en la sesión actual antes del apagado

8

Tengo un problema con emacs que comenzó como demonio usando Systemd.

Cada apagado / reinicio si no detengo el servicio emacs daemon manualmente, se pierde el historial de archivos abiertos recientemente en la sesión actual. Creo que esto se debe a que Systemd no puede matar adecuadamente a Emacs cuando está apagado.

¿Qué puedo hacer para resolver este problema?

Mi configuración reciente en 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)))

Configuración del servicio Systemd emacs:

[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
fuente
1
¿No deberías preguntar esto en un foro systemd? Suponiendo que su use-packagecódigo funciona en otras circunstancias (?), Entonces parece que el único problema es que systemdno ejecuta su ExecStopcomando.
phils

Respuestas:

4

Puede guardar archivos recientes justo antes del apagado llamando a recentf-save-list

M-x recentf-save-list RET

Esto agrega sus archivos recientes al historial reciente.

Si no desea hacer esto manualmente, puede agregar un temporizador que lo hará por usted cada 5 minutos.

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

Agregue esto a su configuración. Entonces, cada vez que abra emacs, llamará a la función y cada 5 minutos (o 300 segundos) continuará llamando a esa función.

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

ChillarAnand
fuente
1

Sé que este hilo es antiguo, pero me encontré con el mismo problema en MS Windows (es decir, Windows sabe cómo salir de Emacs daemon con gracia). He resuelto esto para mí enganchando recentf-save-listen terminal-delete-functions. Entonces en mi archivo init tengo la siguiente línea:

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

Luego, la recentf-listsesión actual se guarda cada vez que cierra el cliente Emacs. Esto fue suficiente para mí, porque estoy acostumbrado a cerrar Emacs antes de apagar mi PC.

Wolfgang
fuente
0

Otra solución es guardar la lista de archivos recientes cada vez que visita un archivo nuevo. El siguiente cuadro agregado al archivo init hará el trabajo:

(add-hook 'find-file-hook 'recentf-save-list)
Thdox
fuente