Emacs kann den Verlauf der zuletzt besuchten Dateien, die in der aktuellen Sitzung vor dem Herunterfahren geöffnet wurden, nicht speichern


8

Ich habe ein Problem mit Emacs, die als Daemon mit Systemd gestartet wurden.

Bei jedem Herunterfahren / Neustart geht der Verlauf der zuletzt geöffneten Dateien in der aktuellen Sitzung verloren, wenn ich den Emacs-Daemon-Dienst nicht manuell beende. Ich denke, das liegt an der Systemd, die Emacs im Shutdown-Zustand nicht richtig töten kann.

Was kann ich tun, um dieses Problem zu lösen?

Meine aktuelle Konfiguration in init.el:

(use-package recentf
    :config (progn (setq recentf-auto-cleanup 'never
                         recentf-max-menu-items 50
                         recentf-max-saved-items 400
                         recentf-save-file
                         (expand-file-name "temp/.recentf" user-emacs-directory))
                   (recentf-mode t)))

Systemd emacs service config:

[Unit]
Description=Emacs: the extensible, self-documenting text editor

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"

Restart=always
User=%i
#WorkingDirectory=%h

[Install]
WantedBy=multi-user.target

1
Sollten Sie dies nicht in einem systemd-Forum fragen? Angenommen, Ihr use-packageCode funktioniert unter anderen Umständen (?), Dann scheint das einzige Problem darin zu bestehen, dass systemdIhr ExecStopBefehl nicht ausgeführt wird .
Phils

Antworten:


4

Sie können die letzten Dateien kurz vor dem Herunterfahren speichern, indem Sie aufrufen recentf-save-list

M-x recentf-save-list RET

Dadurch werden Ihre letzten Dateien zum Verlauf der letzten Datei hinzugefügt.

Wenn Sie dies nicht manuell tun möchten, können Sie einen Timer hinzufügen, der dies alle 5 Minuten für Sie erledigt.

(run-at-time (current-time) 300 'recentf-save-list)

Fügen Sie dies Ihrer Konfiguration hinzu. Wenn Sie also Emacs öffnen, wird die Funktion aufgerufen und alle 5 Minuten (oder 300 Sekunden) wird diese Funktion weiter aufgerufen.

Quelle: https://emacs.stackexchange.com/a/15115/5187


1

Ich weiß, dass dieser Thread alt ist, aber ich bin auf dasselbe Problem in MS Windows gestoßen (dh Windows weiß, wie man den Emacs-Daemon ordnungsgemäß beendet). Ich löste das für mich durch Einhaken recentf-save-listin terminal-delete-functions. In meiner Init-Datei habe ich also die folgende Zeile:

(add-hook 'delete-terminal-functions (lambda (terminal) (recentf-save-list)))

Dann wird die recentf-listaktuelle Sitzung gespeichert, wenn Sie den Emacs-Client schließen. Das hat mir gereicht, weil ich es gewohnt bin, Emacs vor dem Herunterfahren meines PCs zu schließen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.