如何自动启用Emacs jtags模式?

时间:2012-04-22 19:54:56

标签: emacs elisp

在Emacs 24+的开发版本中通过ELPA使用jtags-mode(版本0.96),我似乎无法以编程方式启用次要模式(手动调用工作正常)。在我用我尝试的内容和我希望工作的设置深入了解血腥细节之前,最重要的是,在将jtags-mode添加到Java钩子变量之后,当我第一次从Emacs收到以下投诉时访问Java源文件:

Toggling jtags-mode off; better pass an explicit argument. [2 times]

在彻底阅读jtags-mode设置文档后,我预计以下内容就足够了:

;; Support for Java coding. 
(autoload 'jtags-mode "jtags" "Toggle jtags mode." 1)

(defun java-setup ()
  (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92)
    indent-tabs-mode nil
    tab-width 4
    fill-column 96
    c-comment-start-regexp "\\(@\\|/\\(/\\|[*][*]?\\)\\)"
    jtags-display-menu-flag t
    jtags-mode 1)
  (java-mode-indent-annotations-setup))

(add-hook 'java-mode-hook 'java-setup)
(add-hook 'java-mode-hook 'jtags-mode)
...

但这导致了上述投诉。我已经尝试直接在jtags-mode函数中调用java-setup(),但无济于事。

如果没有明显或简单的解决方案,我很乐意指出如何调试此问题。

2 个答案:

答案 0 :(得分:4)

在没有参数的情况下调用时,名为xxx-mode的函数通常是 toggle 函数,即如果它关闭则打开模式,反之亦然。正如您已将此函数添加到钩子中一样,这就是它的调用方式。几个次要模式提供了turn-on-xxx-mode之类的功能,旨在直接添加到钩子中。

当使用参数调用时,1通常会激活它们并且-1取消激活。尝试从设置函数调用它,而不是将jtags-mode函数添加到钩子

我建议您从设置功能中激活次要模式。此外,在您的设置代码中,您将jtags-mode 变量设置为1,这也不是正确的做法。例如:

(defun java-setup ()
  (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92)
    indent-tabs-mode nil
    tab-width 4
    fill-column 96
    c-comment-start-regexp "\\(@\\|/\\(/\\|[*][*]?\\)\\)"
    jtags-display-menu-flag t)
  (jtags-mode 1)
  (java-mode-indent-annotations-setup))

(add-hook 'java-mode-hook 'java-setup)

最后,保留。我没有使用jtags-mode,这个答案是基于关于小模式如何工作的一般知识。

答案 1 :(得分:0)

顺便说一句,如果你用Emacs-24重新编译jtags-mode文件,问题应该会消失,因为Emacs-24改变了方式,这方面的小模式工作,所以没有参数并不意味着再切换。这种变化是由于遇到的问题而特别做出的。