我正在尝试在emacs 24中使用dart-mode和d-mode。如果我单独使用任何一种模式,一切都很好。如果我分别在每种类型的文件上使用这两种模式,那么在尝试缩进D代码时会出现错误。
以下是在init之后需要以下内容时的错误:
(require 'd-mode)
(require 'dart-mode)
然后我在第一个加载的D文件上打开d模式。
Error during redisplay: (jit-lock-function 1) signaled (invalid-function (setq ad-return-value (with-no-warnings (funcall ad--addoit-function))))
再次 - 如果我不需要'dart-mode 一切正常。
d模式来自https://raw.github.com/Emacs-D-Mode-Maintainers/Emacs-D-Mode/master/d-mode.el,而飞镖模式来自https://github.com/nex3/dart-mode/blob/master/dart-mode.el
这是否意味着两种模式之间存在某些不兼容性,或者某些其他设置问题?我尝试过--no-site-file,但仍然没有运气。
另一种方式,如果给出以下内容,如果我在其中显示D文件和 M-x d-mode ,我就会遇到问题:
user@user-thinkpad:/tmp/breakEmacs$ ls
dart-mode.el d-mode.el emacs_test.el
user@user-thinkpad:/tmp/breakEmacs$ cat emacs_test.el
(add-to-list 'load-path "/tmp/breakEmacs")
(require 'd-mode)
(require 'dart-mode)
user@user-thinkpad:/tmp/breakEmacs$ emacs-snapshot --no-init-file --no-site-file -l /tmp/breakEmacs/emacs_test.el
我希望通过这种方式成功消除任何我的.emacs内容的潜在问题?
根据@ wvxvw的建议,我尝试通过添加(setq debug-on-error t)来调试,它提供了如下所示的callstack。我说喜欢,因为有些行很大,看起来像二进制编码,所以我省略了一些文字。但是,希望这里有什么东西可以指出罪魁祸首?
Debugger entered--Lisp error: (invalid-function (setq ad-return-value (with-no-warnings (funcall ad--addoit-function))))
(setq ad-return-value (with-no-warnings (funcall ad--addoit-function)))()
ad-Advice-c-parse-state(#[nil ...] 5])
apply(ad-Advice-c-parse-state #[nil ...] nil)
c-parse-state()
#[nil ...] 8 ("/usr/share/emacs/24.3.50/lisp/progmodes/cc-engine.elc" . 156151)]()
ad-Advice-c-guess-basic-syntax(#[nil ...] 8 ("/usr/share/emacs/24.3.50/lisp/progmodes/cc-engine.elc" . 156151)])
apply(ad-Advice-c-guess-basic-syntax #[nil ...] 8 ("/usr/share/emacs/24.3.50/lisp/progmodes/cc-engine.elc" . 156151)] nil)
c-guess-basic-syntax()
c-indent-line()
c-indent-command(nil)
c-indent-line-or-region(nil nil)
call-interactively(c-indent-line-or-region nil nil)
command-execute(c-indent-line-or-region)
答案 0 :(得分:4)
问题出在飞镖模式。它使用如下代码:
(if (not (c-major-mode-is 'dart-mode))
(ad-do-it)
然而它应该是
(if (not (c-major-mode-is 'dart-mode))
ad-do-it
请注意删除ad-do-it
附近的括号。