Emacsはシャットダウン前に現在のセッションで開かれた最近訪れたファイルの履歴を保存できません


8

Systemdを使用してデーモンとして起動したemacsに問題があります。

emacsデーモンサービスを手動で停止しない場合、シャットダウン/再起動するたびに、現在のセッションで最近開いたファイルの履歴が失われます。これは、シャットダウン状態のときにSystemdがEmacsを適切に強制終了できないためだと思います。

この問題を解決するにはどうすればよいですか?

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サービス構成:

[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
あなたはsystemdフォーラムでこれを尋ねるべきではありませんか?use-packageコードが他の状況(?)で機能すると仮定すると、唯一の問題はsystemdExecStopコマンドが実行されないことです。
phils 2015

回答:


4

を呼び出すことにより、シャットダウンの直前に最近のファイルを保存できます recentf-save-list

M-x recentf-save-list RET

これにより、最近のファイルが最近の履歴に追加されます。

これを手動で実行したくない場合は、5分ごとに実行するタイマーを追加できます。

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

これを設定に追加します。したがって、emacsを開くたびに関数が呼び出され、5分(または300秒)ごとにその関数が呼び出されます。

ソース:https : //emacs.stackexchange.com/a/15115/5187


1

私はこのスレッドが古いことを知っていますが、MS Windowsで同じ問題に遭遇しました(つまり、WindowsはEmacsデーモンを正常に終了する方法を知っています)。私はにフックrecentf-save-listすることでこれを解決しましたterminal-delete-functions。したがって、私のinitファイルには次の行があります。

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

次に、recentf-listEmacsクライアントを閉じると、現在のセッションのが保存されます。PCをシャットダウンする前にEmacsを閉じることに慣れているので、これで十分でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.