如何防止emacs在开始时加载已保存的桌面?


1

我知道我们可以在不打开上一个会话的文件和状态的情况下启动emacs,启动它:

emacs --no-desktop

但是我们如何在init.el文件中做到这一点?


您可以删除附加到其上的桌面加载/读取功能,after-init-hook并确保在after-init-hook运行之前将其删除。因为它是从第1513行开始lambda定义的函数desktop.el,所以您可能需要以相同的方式将其删除。您的Emacs版本可能与我的版本不同,因此,您应该打开desktop.el并复制它 - 您的代码将添加到您的init.el遗嘱中,可能看起来像(remove-hook 'after-init-hook (lambda () (let ((key "--no-desktop")) (when (member key command-line-args) . . .) 我实际上没有尝试过。
立法会2015年

你也可以desktop.elafter-init-hook已经运行之后尝试加载/要求- 例如,加载/要求desktop.el使用emacs-startup-hook,之后运行after-init-hook。这只有在desktop.el事先没有其他任何加载/需要的情况下才有效。我再次尝试过它。
立法会2015年

谢谢!事实证明它是由persp模式引起的,我禁用了它,现在emacs不会尝试加载所有内容。
godblessfq 2015年

Answers:


2

只需确保desktop-save-mode在init文件中关闭。如果在Emacs启动时该模式处于启用状态,则会加载已保存的桌面文件。如果模式关闭则不加载。

然后,您可以随时打开模式,以启用自动保存。或者您可以M-x desktop-save随时使用手动保存它。

从以下文档字符串desktop-save-mode

启用桌面保存模式后,Emacs的状态将从一个会话保存到另一个会话。特别是,Emacs将在退出时保存桌面(这可能会提示您;请参阅“desktop-save”选项)。 下次Emacs启动时,如果此模式处于活动状态,它将恢复桌面。


是的,这种自动加载设计与自动保存相结合有点奇怪,恕我直言。但这并不是desktop.el设计中最离奇的事情。

这种区别属于假设(内置于函数的签名中),每个目录最多只有一个桌面文件。

用户可能觉得每个目录最多只有一个这样的文件是一回事。但要使功能依赖于这种假设是坚果。

例如,看看功能desktop-read。然后想象一下,您想使用它来读取可能位于任何地方的桌面文件,并传递绝对文件名。我不得不滚动自己的函数来做(bmkp-desktop-read使用文件名作为参数)。

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.