Emacs ne peut pas enregistrer l'historique des fichiers visités récents ouverts dans la session en cours avant l'arrêt

8

J'ai un problème avec emacs démarré en tant que démon en utilisant Systemd.

À chaque arrêt / redémarrage, si je n'arrête pas le service démon emacs manuellement, l'historique des fichiers ouverts récents dans la session en cours est perdu. Je pense que c'est à cause de Systemd qui ne peut pas tuer correctement Emacs lorsqu'il est dans un état d'arrêt.

Que puis-je faire pour résoudre ce problème?

Ma config récente dans 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)))

Configuration du service 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
la source
1
Ne devriez-vous pas demander cela sur un forum systemd? En supposant que votre use-packagecode fonctionne dans d'autres circonstances (?), Il semblerait que le seul problème est que systemdla ExecStopcommande ne s'exécute pas .
phils

Réponses:

4

Vous pouvez enregistrer les fichiers récents juste avant l'arrêt en appelant recentf-save-list

M-x recentf-save-list RET

Cela ajoute vos fichiers récents à l'historique recentf.

Si vous ne voulez pas le faire manuellement, vous pouvez ajouter une minuterie qui le fera pour vous toutes les 5 minutes.

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

Ajoutez ceci à votre configuration. Donc, chaque fois que vous ouvrez emacs, il appellera la fonction et toutes les 5 minutes (ou 300 secondes), il continuera d'appeler cette fonction.

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

ChillarAnand
la source
1

Je sais que ce fil est ancien, mais j'ai rencontré le même problème dans MS Windows (c'est-à-dire que Windows sait comment quitter le démon Emacs avec élégance). Je résolu ce problème pour moi en accrochant recentf-save-listdans terminal-delete-functions. Donc, dans mon fichier init, j'ai la ligne suivante:

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

Ensuite, la recentf-listsession en cours est enregistrée chaque fois que vous fermez le client Emacs. Cela m'a suffi, car j'ai l'habitude de fermer Emacs avant d'arrêter mon PC.

Wolfgang
la source
0

Une autre solution consiste à enregistrer la liste des fichiers recentf chaque fois que vous visitez un nouveau fichier. La ligne ci-dessous ajoutée au fichier init fera le travail:

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