如何自动启用Emacs jtags模式?
在Emacs 24+的开发版本中,通过ELPA使用如何自动启用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模式设置的文档后,我认为以
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模式
)。