3

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-mode は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

これは、2 つのモード間に互換性がないこと、またはその他のセットアップの問題があることを意味しますか? --no-site-file を試してみましたが、まだうまくいきません。


別の言い方をすれば、次のように、D ファイルとMx 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)を追加してデバッグを試みました。一部の行が大きく、バイナリ エンコードされているように見えたので、一部のテキストを省略しました。しかし、うまくいけば、ここにある何かが犯人を指摘するのに役立つでしょうか?

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)
4

1 に答える 1

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

于 2013-04-24T14:36:30.150 に答える