在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()
,但无济于事。
如果没有明显或简单的解决方案,我很乐意指出如何调试此问题。
答案 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)