我在守护进程模式下使用emacs,我也有一个initial-buffer-choice
变量集。有时emacs会在我编辑文件时崩溃
我用于initial-buffer-choice
。在这种情况下,当我开始
使用--daemon的emacs,它将挂起消息:
"todo.org has auto save data; consider M-x recover-this-file"
由于我主要是从init脚本启动守护进程,所以我无法确认或 拒绝此对话框,因此守护程序将永久挂起。我怎么能绕过 在这种情况下自动保存数据的通知?我不介意失去 必要时自动保存数据。
我试图这样做:
(defadvice command-line
(around my-command-line-advice)
"Be non-interactive while starting a daemon."
(if (and (daemonp)
(not server-process))
(let ((noninteractive t))
ad-do-it)
ad-do-it))
(ad-activate 'command-line)
然而,这不起作用。我仍然得到相同的悬挂行为。 实际上,在建议中加入“消息”调用会显示建议 根本没有被调用。
类似的问题:emacs-daemon startup freezes if file has auto-save data。但是,此解决方案不适用于initial-buffer-choice
。接受的答案似乎是从以前的版本编辑过来的,这个版本可能已经成功定义了command-line
的建议,但是很遗憾,这个版本现已不复存在,取而代之的是desktop.el特有的版本。
答案 0 :(得分:1)
一种可能性是将它放在.emacs中:
(setq auto-save-default nil)
另一个(可能更好的解决方案)是通过使用它来查找文件来禁止显示警告消息:
(find-file-noselect FILENAME &optional NOWARN RAWFILE WILDCARDS)
正如您在此处所看到的,您可以使用可选的NOWARN参数来抑制警告消息(因为这是导致问题的原因)。
如果我要为自己解决这个问题,您可以做出改变。 在.emacs设置中定义:
(defun find-file (filename &optional wildcards)
(interactive
(find-file-read-args "Find file: "
(confirm-nonexistent-file-or-buffer)))
; the "t" here is normally set to "nil", this should solve the problem
(let ((value (find-file-noselect filename t nil wildcards)))
(if (listp value)
(mapcar 'switch-to-buffer (nreverse value))
(switch-to-buffer value))))
编辑:到目前为止,这对任何人都没有帮助,但为了完整起见,它可能有所帮助。
提问者确认的当前方式是使用emacs-startup-hook
并将其与(kill-buffer "*scratch*")
和(find-file "~/.../todo.org")
结合使用。
答案 1 :(得分:1)
根据问题中原始海报报告给该主题的行为的描述,当使用--daemon
激活Emacs时,initial-buffer-choice
(即,{{1}在启动序列之前激活[请find-file-noselect "~/.../todo.org"
])可以使用... lisp/startup.el
禁用默认设置自动保存。如果更改顺序没有效果[即,将(setq auto-save-default nil)
置于初始化文件中的优先级,使其位于(setq auto-save-default nil)
]之前,则下一步是采取肯定行动以确保在打开文件之前禁用自动保存(例如,initial-buffer-choice
)。这可以通过将todo.org
和(setq initial-buffer-choice t)
放在(setq auto-save-default nil)
或init.el
文件中(没有挂钩)来实现 - 然后,确保首先加载所有其他设置,使用.emacs
至emacs-startup-hook
和(kill-buffer "*scratch*")
- 这可确保在调用 (find-file "~/.../todo.org")
之前禁用自动保存(使用{{ 1}} [见find-file
])。
答案 2 :(得分:0)
由于“ ...有自动保存数据;考虑M-x recover-this-file ”只是一条消息,我不确定该问题是否与自动保存文件有关。但是,如果是这种情况,您可以构建一个测试,以确定emacs的自动保存目录是否为空(directory-files
)到您的服务器init文件中。如果自动保存目录不为空,请将所有文件移至另一个位置并继续(rename-file
)。
我真的好奇这是否能解决这个问题。
真正的问题是:如何调试emacs中的服务器问题。调试和edebug在servermode中非常不敏感。最好将所有内容跟踪到文件(例如日志记录)。