【问题标题】:spacemacs "file mode specification error"spacemacs“文件模式规范错误”
【发布时间】:2018-04-27 21:05:27
【问题描述】:

我正在 master 分支上运行最新版本的 spacemacs。在我的 init 文件中,我有许多 cc-mode 设置,包括(作为 c-offsets-alist 的一部分)“(innamespace . 0)”。我发现当我打开一个 C++ 文件时,我收到错误“文件模式规范错误:(void-function innamespace)”。

这是完整的 c-offsets-alist 修改集:

(c-offsets-alist            . ((access-label . -3)
                                 (brace-list-close . 0)
                                 (brace-list-entry . 0)
                                 (brace-list-intro . +)
                                 (class-close . 0)
                                 (class-open . 0)
                                 (defun-block-intro . +)
                                 (defun-close . 0)
                                 (defun-open . 0)
                                 (inclass . +)
                                 (label . 0)
                                 (statement . 0)
                                 (statement-cont . *)
                                 (topmost-intro-cont . 0)
                                 (arglist-close . c-lineup-arglist)
                                 (block-open . 0)
                                 (case-label . +)
                                 (func-decl-cont . c-lineup-java-throws)
                                 (inexpr-class . 0)
                                 (inher-cont . c-lineup-java-inher)
                                 (inline-open . 0)
                                 (substatement-open . 0)
                                 (innamespace . 0)
                                 ))

这是来自调试器的回溯:

Debugger entered--Lisp error: (void-function innamespace)
  (innamespace 0)
  (lambda nil (innamespace 0))()
  run-hooks(change-major-mode-after-body-hook prog-mode-hook c-mode-common-hook c++-mode-hook)
  apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook c-mode-common-hook c++-mode-hook))
  run-mode-hooks(c++-mode-hook)
  c++-mode()
  set-auto-mode-0(c++-mode nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(nil t)
  find-file-noselect-1(#<buffer geometry.cpp> "~/sandbox/cpp/geometry.cpp" nil nil "~/sandbox/cpp/geometry.cpp" (85065815 2049))
.
.
.

有趣的是,如果我实际上在命名空间中,cc-mode 会尊重我的命名空间设置。我什至在我的初始化文件中注释掉了设置,但仍然得到错误。有关如何处理此问题的任何想法?

【问题讨论】:

  • 我建议您将完整的c-offsets-alist 代码编辑/粘贴到您的问题中。听起来 Emacs 正在尝试评估 (innamespace . 0),但如果我们能看到整个表单,就会更容易看出你哪里出错了。
  • run-hooks 交给 C 代码,因此我们在该帐户的堆栈跟踪中丢失了一些细节。我将开始查看正在处理的钩子变量的值(针对相关缓冲区)(从c++-mode-hook 开始)。
  • @phils 感谢您的建议。明天我会挖一些东西。这很有趣 - 我使用 stow 来维护几个 .emacs.d 设置,但是这个“innamespace”问题仅限于 spacemacs。

标签: emacs spacemacs


【解决方案1】:

事实证明,毫不奇怪,问题不在于我所寻找的地方。除了我在原始问题中显示的包含 c-offsets-alist 值的设置包之外,还有一个我不记得添加的表单:

  (setq c++-mode-hook
        '(lambda ()
           (innamespace 0)))

我希望我把它放在不小心 - 很可能是复制和粘贴事故。让这成为一个警示故事 - 在发布我的问题之前我应该​​抓住这种方式。

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多