¿Cómo puedo hacer que el modo reciente funcione con el servidor / cliente emacs?

9

Me gusta usar el recentf modo en Emacs que produce una lista de archivos que he abierto recientemente. Esta lista es persistente entre sesiones, por lo que puedo acceder a los archivos que utilicé hace bastante tiempo.

Sin embargo, recientemente comencé a usar Emacsclient para conectarme a un servidor Emacs que se enciende automáticamente cuando lo registro. En general, esta fue una gran mejora. Sin embargo, el recentfmodo comenzó a perder la mayoría de los archivos que abría cada vez que reiniciaba mi computadora. Recuerda algunos de ellos, y no puedo ver un patrón en el que se graben los archivos.

¿Cómo puedo solucionar este comportamiento? ¿Cómo puedo hacer que grabe todos los archivos que visito y los recuerde entre sesiones?

Tikhon Jelvis
fuente
3
Tengo el mismo problema, ¡sería genial ver una solución!
estudiante
Intenté esto usando emacs -nw, cargando el servidor y recientef, luego ejecuté recentf-mode 1y server-starten ese orden y no pude reproducir su problema. ¿Puede publicar su archivo .emacs en algún lugar (como un pastebin) junto con un ejemplo de cómo está iniciando emacs y emacsclient?
jlp
Aquí está mi archivo .emacs . Estoy usando Fedora e instalé Emacs con Yum; creó un lanzador para Emacs Client y eso es lo que uso. El lanzador simplemente se ejecuta emacsclient -c --alternate-editor="" %f. El problema podría ser que no cierre Emacs antes de apagar mi computadora, pero no estoy seguro. Matar manualmente Emacs antes de apagarlo parece ayudar, pero esa no es una gran solución.
Tikhon Jelvis
Hmmm, no vi el inicio del servidor en tus .emacs, supongo que está comenzando con --daemon cuando inicias sesión. Sospecho que hay algún tipo de problema de pedido al habilitar recientef e iniciar el servidor.
jlp

Respuestas:

8

Estaba teniendo exactamente el mismo problema y lo resolví haciendo dos cambios. Primero siguiendo esta publicación , creé una función para invocar automáticamente recentf-save-listen un temporizador. Por lo tanto, cada pocos minutos, reescribimos automáticamente el archivo ~ / .recentf:

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

La otra cosa que hice fue agregar un script de apagado a mi administrador de pantalla (lightdm) que cerraba con gracia el servidor de emacs cada vez que me desconectaba o apagaba. La forma en que haga esto dependerá de su administrador de pantalla, pero mi script simplemente se ve así

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

También sería bueno tener un gancho que se vuelva a ejecutar automáticamente recentf-save-listcada vez que un cliente se "desconecta" del servidor, pero no pude descubrir los ganchos adecuados.

jarvisschultz
fuente
2
Es server-done-hook. Personalmente usoserver-visit-hook
tungd