Come posso far funzionare la modalità recentf con emacs server / client?


9

Mi piace usare la recentf modalità in Emacs che produce un elenco di file che ho aperto di recente. Questo elenco è persistente tra le sessioni, quindi posso accedere ai file che ho usato molto tempo fa.

Tuttavia, di recente ho iniziato a utilizzare Emacsclient per connettermi a un server Emacs che si accende automaticamente quando lo accedo. Nel complesso, questo è stato un grande miglioramento. Tuttavia, la recentfmodalità ha iniziato a perdere la maggior parte dei file che ho aperto ogni volta che ho riavviato il mio computer. Ne ricorda alcuni e non riesco a vedere uno schema in cui i file vengono registrati.

Come posso risolvere questo comportamento? Come posso ottenerlo per registrare tutti i file che visito e ricordarli tra le sessioni?


3
Ho lo stesso problema, sarebbe bello vedere una soluzione!
studente,

Ci ho provato usando emacs -nw, caricando server e recentf, quindi eseguendo recentf-mode 1e server-startin quell'ordine e non sono riuscito a riprodurre il tuo problema. Puoi pubblicare il tuo file .emacs da qualche parte (come un pastebin) insieme ad un esempio di come stai iniziando emacs ed emacsclient?
jlp

Ecco il mio file .emacs . Sto usando Fedora e ho installato Emacs con Yum; ha creato un launcher per Emacs Client ed è quello che uso. Il programma di avvio funziona emacsclient -c --alternate-editor="" %f. Il problema potrebbe essere con la mia mancata chiusura di Emacs prima di spegnere il computer, ma non sono sicuro. Uccidere manualmente Emacs prima di spegnerlo sembra aiutare, ma non è un'ottima soluzione.
Tikhon Jelvis,

Hmmm, non ho visto l'avvio del server nel tuo .emacs, presumo che inizi con --daemon quando effettui il login.
jlp,

Risposte:


8

Stavo avendo lo stesso identico problema e l'ho risolto apportando due modifiche. In primo luogo seguendo questo post , ho creato una funzione per invocare automaticamente recentf-save-listun timer. Pertanto, ogni pochi minuti, riscriviamo automaticamente il file ~ / .recentf:

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

L'altra cosa che ho fatto è stata quella di aggiungere uno script di spegnimento al mio display manager (lightdm) che chiudeva con grazia il server emacs ogni volta che mi disconnettevo o spegnevo. Il modo in cui lo fai dipenderà dal tuo display manager, ma il mio script sembra semplicemente

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

Sarebbe anche bello avere un hook che si ripetesse automaticamente recentf-save-listogni volta che un client si "disconnetteva" dal server, ma non riuscivo a capire gli hook appropriati.


2
Lo è server-done-hook. Personalmente usoserver-visit-hook
tungd il
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.