Wie kann ich den RecentF-Modus dazu bringen, mit Emacs Server / Client zu arbeiten?

9

Ich verwende gerne den recentf Modus in Emacs, der eine Liste der Dateien erstellt, die ich kürzlich geöffnet habe. Diese Liste bleibt zwischen den Sitzungen bestehen, sodass ich zu Dateien gelangen kann, die ich vor einiger Zeit verwendet habe.

Vor kurzem habe ich jedoch begonnen, Emacsclient zu verwenden, um eine Verbindung zu einem Emacs-Server herzustellen, der beim Protokollieren automatisch aktiviert wird. Insgesamt war dies eine große Verbesserung. Im recentfModus fehlten jedoch die meisten Dateien, die ich beim Neustart meines Computers geöffnet hatte. Es erinnert sich an einige von ihnen, und ich kann kein Muster sehen, in dem Dateien aufgezeichnet werden.

Wie kann ich dieses Verhalten beheben? Wie kann ich alle Dateien, die ich besuche , aufzeichnen und zwischen den Sitzungen speichern?

Tikhon Jelvis
quelle
3
Ich habe das gleiche Problem, wäre toll, eine Lösung zu sehen!
Student
Ich habe dies versucht, indem ich emacs -nwServer und Recentf geladen, dann ausgeführt recentf-mode 1und server-startin dieser Reihenfolge ausgeführt habe und konnte Ihr Problem nicht reproduzieren. Können Sie Ihre .emacs-Datei irgendwo veröffentlichen (z. B. in einem Pastebin), zusammen mit einem Beispiel dafür, wie Sie Emacs und Emacsclient starten?
jlp
Hier ist meine .emacs- Datei. Ich benutze Fedora und habe Emacs mit Yum installiert. Es wurde ein Launcher für Emacs Client erstellt, und das verwende ich. Der Launcher läuft einfach emacsclient -c --alternate-editor="" %f. Das Problem könnte sein, dass ich Emacs nicht schließe, bevor ich meinen Computer ausschalte, aber ich bin mir nicht sicher. Das manuelle Töten von Emacs vor dem Abschalten scheint zu helfen, aber das ist keine gute Lösung.
Tikhon Jelvis
Hmmm, ich habe in Ihren .emacs keinen Serverstart gesehen. Ich gehe davon aus, dass er beim Anmelden mit --daemon gestartet wird. Ich vermute, dass beim Aktivieren von Recentf und Starten des Servers ein Bestellproblem aufgetreten ist.
JLP

Antworten:

8

Ich hatte genau das gleiche Problem und habe es durch zwei Änderungen gelöst. Als erstes habe ich nach diesem Beitrag eine Funktion erstellt, die automatisch recentf-save-listfür einen Timer aufgerufen wird. Daher schreiben wir alle paar Minuten die ~ / .recentf-Datei automatisch neu:

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

Das andere, was ich getan habe, war, meinem Display-Manager (lightdm) ein Skript zum Herunterfahren hinzuzufügen, das den Emacs-Server bei jedem Abmelden oder Herunterfahren ordnungsgemäß schloss. Wie Sie dies tun, hängt von Ihrem Display-Manager ab, aber mein Skript sieht einfach so aus

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

Es wäre auch schön, einen Hook zu haben, der recentf-save-listjedes Mal automatisch neu ausgeführt wird, wenn ein Client vom Server "getrennt" wird, aber ich konnte die richtigen Hooks nicht herausfinden.

jarvisschultz
quelle
2
Es ist server-done-hook. Persönlich benutze ichserver-visit-hook
Tungd