Emacs桌面保存模式-仅在完全还原以前的桌面时保存桌面


11

我的内容如下.emacs

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

通常,我会打开很多缓冲区(大约100个),这确实有帮助-因为emacs仅在不忙于其他事务时才加载缓冲区。

现在,有时会发生以下情况:在关闭笔记本电脑之前,我关闭了emacs。然后我意识到-我需要快速编辑另一个文件-因此我再次打开emacs,执行编辑,然后将其关闭。如果这是在短时间内发生的,则desktop-save-mode无法还原所有先前保存的缓冲区。在这种情况下,当我现在再次关闭emacs时,仅保存已还原的缓冲区,并且丢失初始关闭之前的状态。

desktop-save如果先前保存的桌面已完全还原,是否有办法做到这一点?

Answers:


3

您可以使用一个钩子:desktop-after-read-hook。恢复桌面状态后,添加功能以设置变量。使用defadvicearound 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技能有限。你能可能扩大你的答案,包括一个口齿不清片段从中我可以开始试验....
基督教Herenz

1
我已经编辑了答案,为您的.emacs添加了代码。
Faried Nawaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.