如何自动启用Emacs jtags模式?

如何自动启用Emacs jtags模式?,emacs,elisp,Emacs,Elisp,在Emacs 24+的开发版本中,通过ELPA使用jtags模式(版本0.96),我似乎无法以编程方式启用次要模式(手动调用工作正常)。在我深入了解我尝试过的内容和我期望能够工作的设置之前,底线是,在将jtags mode添加到Java hook变量后,当我第一次访问Java源文件时,Emacs抱怨如下: Toggling jtags-mode off; better pass an explicit argument. [2 times] 在彻底阅读了关于jtags模式设置的文档后,我认为以

在Emacs 24+的开发版本中,通过ELPA使用
jtags模式(版本0.96),我似乎无法以编程方式启用次要模式(手动调用工作正常)。在我深入了解我尝试过的内容和我期望能够工作的设置之前,底线是,在将
jtags mode
添加到Java hook变量后,当我第一次访问Java源文件时,Emacs抱怨如下:

Toggling jtags-mode off; better pass an explicit argument. [2 times]
在彻底阅读了关于
jtags模式设置的文档后,我认为以下内容就足够了:

;; 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)
...
但这导致了上述抱怨。此后,我尝试在
java-setup()
函数中直接调用
jtags模式
,但没有成功


如果没有明显或简单的解决方案,我很乐意就如何调试这个问题提供一些建议。

名为
xxx mode
的函数在无参数调用时通常是切换函数,也就是说,它们在关闭模式时打开模式,反之亦然。当您将这个函数添加到钩子中时,它就是这样被调用的。几个次要模式提供了一个功能,如
打开xxx模式
,设计用于直接添加到hook

当使用参数调用时,1通常会激活它们,-1会停用它们。尝试从设置函数调用它,而不是将
jtags模式
函数添加到挂钩中

我建议从设置功能中激活次要模式。另外,在设置代码中,您将
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模式
,这个答案是基于关于次要模式如何工作的一般知识。

顺便说一句,如果你用Emacs-24重新编译jtags模式文件,这个问题应该会消失,因为Emacs-24在这方面改变了次要模式的工作方式,所以没有参数并不意味着切换。做出此更改是因为您遇到了类似的问题。

是的,这是我尝试过的许多事情之一,但再次失败。谢谢。请尝试清除
java模式挂钩
变量(或重新启动Emacs)。如果不这样做,您仍将调用添加到其中的所有函数(包括
jtags模式
)。