(请注意,与此相反,此问题与“ 如何在守护程序模式下启动并禁止交互对话框?”相同,因为提交者“回答”了该问题,从而消除了导致出现特定提示的原因。)
我想知道是否有一种通用方法可以防止emacs --daemon
永远挂起,等待对尚未存在的微型缓冲区中显示的提示的答案。
与emacsclient连接以回答这些提示是不可能的,因为直到Emacs完成启动顺序服务器才启动。(这意味着,如果您将ALTERNATE_EDITOR设置为空字符串,这将导致emacsclient
找不到服务器启动新的守护程序,则最终可能会导致多个Emacs守护程序被卡住并等待。)我必须killall emacs
解决此问题。在继续之前。
我可以在识别到每件事的过程中对每件事都进行重击(通过在非守护程序模式下启动Emacs并查看其要求),但这不是解决方案,因为它无法停止下一个守护程序因新原因而挂在启动上。
举个例子:当系统重新启动或Emacs崩溃后,它挂起的常见原因是第一次重新启动后,Emacs想知道是否可以从已失效的Emacs窃取锁定文件。我可以通过创建建议来解决该问题,以使该提示始终在没有交互的情况下回答“是”。但是随后,在上一个会话保存中打开的文件之一是需要使用sudo或SSH密码的TRAMP文件,因此,守护程序一直在等待密码提示。因此,我通过手动编辑会话文件(使用vi
或emacs -q
!)来删除有问题的文件来解决此问题,但这并不能阻止它下次发生。
因此,我可以在启动时自动停止加载会话,并将其更改为必须从第一个emacsclient手动执行的命令。但是,如果它不是在后台加载我的会话,那么在我准备使用它的时候就已经准备好了,守护程序的全部目的都将丢失!
所以我想要的是:
- (最佳)以某种方式将最小缓冲区提示延迟到我打开emacsclient时,同时仍完成其余的初始化。
- (确定)以某种方式使所有我没有告知过的小缓冲区提示,否则如上所述,
no
除非正在运行emacsclient,否则只是返回。只要它可以正常工作,我就可以忍受TRAMP缓冲区出错。
有什么方法可以实现这些目标之一?
(read-desktop)
,然后在运行之前emacs --daemon
通过将一个整数放入.emacs.desktop.lock中来创建伪造的锁定文件(不幸的是,该文件的放置位置取决于您的配置,但可能或者您的主目录或〜/ .emacs.d /。