如何自动启用Emacs jtags-mode?

3
使用ELPA中的jtags-mode(版本0.96)在Emacs 24+的开发版本中,我似乎无法通过编程方式启用此次要模式(手动调用可以正常工作)。在我详细介绍我尝试过的和我期望能够工作的设置之前,底线是,在将jtags-mode添加到Java钩子变量后,当我首次访问Java源文件时,我会从Emacs得到以下投诉:
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)
...

但是这引起了上述的抱怨。我已经尝试直接在java-setup()函数中调用jtags-mode,但结果不尽如人意。

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

2个回答

4

xxx-mode 函数通常是 切换 函数,即在没有参数调用时,如果该模式关闭,则打开该模式,反之亦然。由于您将此函数添加到钩子中,因此它被这样调用。几个次要模式提供了一个名为 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,这个答案基于我对次要模式工作方式的一般了解。


是的,这是我尝试过的许多事情之一,不过还是无济于事。谢谢。 - pajato0
尝试清除java-mode-hook变量(或重新启动Emacs)。如果不这样做,您仍将调用添加到其中的所有函数(包括jtags-mode)。 - Lindydancer

0

顺便提一句,如果你使用Emacs-24重新编译jtags-mode文件,问题应该就会消失了。因为Emacs-24在此方面改变了次要模式的工作方式,所以缺少参数不再意味着切换。这个改变是专门针对像你遇到的这种问题而做出的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接