Comment faire fonctionner le mode recentf avec le serveur / client emacs?

9

J'aime utiliser le recentf mode dans Emacs qui produit une liste de fichiers que j'ai récemment ouverts. Cette liste est persistante entre les sessions, donc je peux accéder aux fichiers que j'ai utilisés il y a assez longtemps.

Cependant, j'ai récemment commencé à utiliser Emacsclient pour me connecter à un serveur Emacs qui est automatiquement activé lorsque je le connecte. Dans l'ensemble, ce fut une grande amélioration. Cependant, le recentfmode a commencé à manquer la plupart des fichiers que j'ouvrais à chaque redémarrage de mon ordinateur. Il se souvient de certains d'entre eux et je ne vois pas de modèle d'enregistrement des fichiers.

Comment puis-je résoudre ce problème? Comment puis-je le faire enregistrer tous les fichiers que je visite et les mémoriser entre les sessions?

Tikhon Jelvis
la source
3
J'ai le même problème, ce serait formidable de voir une solution!
étudiant
J'ai essayé ceci en utilisant emacs -nw, en chargeant server et recentf, puis en cours d'exécution recentf-mode 1et server-startdans cet ordre et je n'ai pas pu reproduire votre problème. Pouvez-vous publier votre fichier .emacs quelque part (comme un pastebin) avec un exemple de la façon dont vous démarrez emacs et emacsclient?
jlp
Voici mon fichier .emacs . J'utilise Fedora et j'ai installé Emacs avec Yum; il a créé un lanceur pour Emacs Client et c'est ce que j'utilise. Le lanceur s'exécute emacsclient -c --alternate-editor="" %f. Le problème peut être dû au fait que je ne ferme pas Emacs avant d'éteindre mon ordinateur, mais je ne suis pas sûr. Tuer manuellement Emacs avant de fermer semble aider, mais ce n'est pas une excellente solution.
Tikhon Jelvis
Hmmm, je n'ai pas vu le démarrage du serveur dans votre .emacs, je suppose qu'il démarre avec --daemon lorsque vous vous connectez. Je soupçonne une sorte de problème de commande avec l'activation de recentf et le démarrage du serveur.
jlp

Réponses:

8

J'avais exactement le même problème et je l'ai résolu en faisant deux changements. Après avoir suivi ce post , j'ai créé une fonction pour invoquer automatiquement recentf-save-listun timer. Ainsi, toutes les quelques minutes, nous réécrivons automatiquement le fichier ~ / .recentf:

(run-at-time nil (* 5 60) 'recentf-save-list)

L'autre chose que j'ai faite a été d'ajouter un script d'arrêt à mon gestionnaire d'affichage (lightdm) qui fermait avec élégance le serveur emacs à chaque déconnexion ou arrêt. La façon dont vous le ferez dépendra de votre gestionnaire d'affichage, mais mon script ressemble simplement à

#!/bin/bash
emacsclient -e "(save-buffers-kill-emacs)"

Il serait également bien d'avoir un hook qui se réexécute automatiquement recentf-save-listchaque fois qu'un client se "déconnecte" du serveur, mais je n'arrive pas à trouver les hooks appropriés.

jarvisschultz
la source
2
Ça l'est server-done-hook. Personnellement, j'utiliseserver-visit-hook
tungd