当emacs告诉我“文件模式规范错误”时,它是什么意思?

时间:2010-11-14 22:39:00

标签: emacs

这是我见过的最无用的错误消息。

我认为它转化为......“错误”。

来自 * 消息 * 缓冲区的完整错误消息为:

File mode specification error: (wrong-type-argument characterp "string value here")

我认为该消息的后半部分意味着emacs期待一个角色并获得一个字符串。

但是,当emacs告诉我“文件模式规范错误”时,我该如何诊断它意味着什么呢?以及如何缩小此错误的起源?

这两个错误(文件模式错误,期待字符和字符串)如何相关?

3 个答案:

答案 0 :(得分:34)

当发生此(或任何)错误时,使用 Mx toggle-debug-on-error RET 进入调试器 - 假设这是一个正确的错误,而不是只是一条消息。这会给你堆栈跟踪,所以你可以找出导致它的原因,并从那里继续(可能有edebug,一旦你确定了要测试的功能,你可以用常规调试器做很多事情)。 / p>

标准调试器命令: M - : (info "(elisp) Debugger Commands") RET

调试lisp(包括edebug)的主要手册条目: M - : (info "(elisp) Debugging") RET

仅供参考,rgrep告诉我,NTEmacs 23.2.1的* .el文件中唯一的字符串“文件模式规范错误”出现在normal-mode函数定义中:
M-x find-function RET normal-mode RET

答案 1 :(得分:4)

您可能想说出您正在使用的Emacs版本。

如果它是GNU Emacs 23,则相关代码位于normal-mode中的files.el函数中,如下所示:

(report-errors "File mode specification error: %s"
  (set-auto-mode))

因此,函数set-auto-mode(或从那里调用的某个函数)表示wrong-type-argument错误,而normal-mode正在添加文本File mode specification error,以帮助您跟踪它失败了,但遗憾的是它没有帮助,因为set-auto-mode的功能是确定缓冲区应该具有哪种主要模式,然后打开该模式。我希望这是模式本身发出错误的信号。

所以phils建议开启debug-on-error并查看回溯是一个很好的建议:这应该会给你一个关于发生了什么的线索。

答案 2 :(得分:0)

对我而言,之所以发生这种情况,是因为我在我编写的函数体周围有一对attributes: array:6 [▼ "username" => "qweqwe" "email" => "haikalhikmi@gmail.com" "name" => "qweqweqew" "password" => "$2y$10$Ci5usZFP6ANCyBfQhN3Gzexh98Wb8R9n4AmVEvq8x/4bakfGF8l/y" "cover" => "wallpaper-27058.jpg" "roles_id" => 1 ]括号。我想这会使lisp尝试执行函数体的返回值。所以要注意你的括号数!