gpt4 book ai didi

emacs - 如何一起使用 dart-mode 和 d-mode(为什么我们不能相处?)

转载 作者:行者123 更新时间:2023-12-03 21:40:10 35 4
gpt4 key购买 nike

我正在尝试在 emacs 24 中使用 dart 模式和 d 模式。如果我单独使用任何一种模式,一切都很好。如果我分别对每种类型的文件使用这两种模式,我在尝试缩进 D 代码时会出错。

以下是在初始化时需要以下内容后的错误:

(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 Dart 模式来自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) 进行调试,它提供了如下所示的调用堆栈。我说 like 是因为有些行很大,看起来像二进制编码,所以我省略了一些文本。但是,希望这里的内容有助于指出罪魁祸首?

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)

最佳答案

问题出在 Dart 模式。它使用如下代码:

(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 周围的括号被移除。

关于emacs - 如何一起使用 dart-mode 和 d-mode(为什么我们不能相处?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155013/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com