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.