Emacsデスクトップ保存モード-以前のデスクトップが完全に復元されたときにのみデスクトップを保存します


10

私には次のものがあります.emacs

(desktop-save-mode 1)
(setq desktop-restore-eager 10)
(setq desktop-save t)

多くの場合、多くのバッファを開いています(100程度)。これは本当に役立ちます。emacsは、他のことでビジー状態でないときにのみバッファをロードするためです。

さて、ときどき次のことが起こります。ラップトップをシャットダウンする前に、emacsを閉じます。次に、もう1つのファイルをすばやく編集する必要があることに気づきました。もう一度emacsを開き、編集を実行してから閉じます。これが短時間内に発生した場合、desktop-save-mode以前に保存されたすべてのバッファを復元できませんでした。この場合、再びemacsを閉じると、復元されたバッファーのみが保存され、最初のシャットダウン前の状態が失われます。

desktop-save以前に保存されたデスクトップが完全に復元された場合にのみ、これを実行する方法はありますか?

回答:


3

使用できるフックがありますdesktop-after-read-hook。デスクトップの状態が復元された後に変数を設定する関数を追加します。defadvice周りを使用してdesktop-save、状態を保存する前に変数が設定されているかどうかを確認してください。

私はEmacs 25.3.1を使用しています。これは私が使用したコードです。

(defvar *my-desktop-save* nil
  "Should I save the desktop when Emacs is shutting down?")

(add-hook 'desktop-after-read-hook
          (lambda () (setq *my-desktop-save* t)))

(advice-add 'desktop-save :around
            (lambda (fn &rest args)
              (if (bound-and-true-p *my-desktop-save*)
                  (apply fn args))))

それをに追加して.emacs、再起動します。


こんにちはありがとう、これは確かにトリックを行う必要があります。ただし、私のemacs Lispスキルは少し制限されています。答えを拡張して、私が実験を開始できるlispスニペットを含めることができますか?
クリスチャンヘレンツ

1
私はあなたの.emacsのコードを追加するために私の答えを編集しました。
Faried Nawaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.