Elisp:如果启动时出错,是否可以自动打开Emacs初始化文件?

Elisp:如果启动时出错,是否可以自动打开Emacs初始化文件?,emacs,error-handling,elisp,Emacs,Error Handling,Elisp,这里的想法是:如果我在更改Emacs init文件后重新启动Emacs,如果在启动时出现错误,Emacs会自动打开我的init文件进行编辑,这将非常方便 例如,如果启动时出现错误,Emacs可以在一个窗口中显示错误/调试消息,在另一个窗口中显示我的init文件 我是Emacs Lisp新手,不熟悉错误处理过程。是否有任何可能有用的错误处理机制/设置?(老实说,我不知道从哪里开始这篇文章,因此这篇文章中没有任何实验性的代码…如果你真的想这么做,你可以试试这个: 将init文件的内容包装在此,其中c

这里的想法是:如果我在更改Emacs init文件后重新启动Emacs,如果在启动时出现错误,Emacs会自动打开我的init文件进行编辑,这将非常方便

例如,如果启动时出现错误,Emacs可以在一个窗口中显示错误/调试消息,在另一个窗口中显示我的init文件


我是Emacs Lisp新手,不熟悉错误处理过程。是否有任何可能有用的错误处理机制/设置?(老实说,我不知道从哪里开始这篇文章,因此这篇文章中没有任何实验性的代码…

如果你真的想这么做,你可以试试这个:

将init文件的内容包装在此,其中
contents
是原始init文件,file是init文件的绝对名称(即位置):

(condition-case err
     (progn
        (setq debug-on-error  t)
        CONTENTS
     )
  (error (find-file FILE)
         (error "*INIT ERROR*: %s" (error-message-string err))))
(condition-case err
     (progn (setq debug-on-error  t)
            (load-file ORIG-INIT))
  (error (find-file ORIG-INIT)
         (error "*INIT ERROR*: %s" (error-message-string err))))
或者更好一点:现在将init文件中的内容放在另一个名为ORIG-init的文件中(这里也是一个绝对文件名),并将其用作init文件的(唯一)内容:

(condition-case err
     (progn
        (setq debug-on-error  t)
        CONTENTS
     )
  (error (find-file FILE)
         (error "*INIT ERROR*: %s" (error-message-string err))))
(condition-case err
     (progn (setq debug-on-error  t)
            (load-file ORIG-INIT))
  (error (find-file ORIG-INIT)
         (error "*INIT ERROR*: %s" (error-message-string err))))

实际上,我通常会打开一个带有.emacs文件的emacs。然后,每次进行更改时,我都会打开和关闭一个新的emacs。我知道没那么酷,但即使你的光标也会在你工作的地方


我要做的另一件事是在废弃缓冲区(scratch或新创建的临时文件)中编辑一段代码,然后使用C-x C-e(站在表达式的末尾)执行它。

我建议首先将它放在
.emacs
文件的开头:
(setq debug on error t)
解决问题后,您可以再次对其进行注释,直到需要时为止。
error
会停止Emacs,因此您需要重新定义error signal函数,以便在退出正在运行的任何函数之前执行其他操作。lawlist-您能将您的帖子变成一个答案,以便我可以接受吗?谢谢,实际上,我刚刚在下面看到了Drew的答案。他的答案包括你建议的方法的实现,如果未来的访问者被引导到那个帖子,那么这个方法可能很好。