2012-04-22 85 views
3

在Emacs 24+的開發版本中,通過ELPA使用jtags-mode(版本0.96),我似乎無法以編程方式啓用次要模式(手動調用可以正常工作)。在我鑽研了我所嘗試過的血淋淋的細節以及我期望能夠工作的設置之前,最重要的是,在向Java鉤子變量添加jtags-mode之後,當我第一次訪問Java源代碼時,我得到了Emacs的以下抱怨文件:如何自動啓用Emacs jtags-mode?

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,無濟於事。

如果沒有明顯或簡單的解決方案,我很樂意指出如何調試此問題。

回答

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,這個答案是基於小模式如何工作的一般知識。

+0

是的,這是我嘗試過的許多事情之一,再次無濟於事。謝謝。 – pajato0 2012-04-22 20:19:15

+0

嘗試清除'java-mode-hook'變量(或重新啓動Emacs)。如果你不這樣做,你仍然會調用添加到它的所有函數(包括'jtags-mode')。 – Lindydancer 2012-04-23 05:44:16

+0

這是問題!謝謝,很好地完成。 – pajato0 2012-04-23 05:46:52

0

順便說一句,如果你用Emacs-24重新編譯了jtags-mode文件,這個問題應該會消失,因爲Emacs-24在這方面改變了次要模式的工作方式,所以缺少參數並不意味着再切換。這個改變是因爲你遇到的問題而產生的。