2013-09-24 44 views
0

切換緩衝區時,我有奇怪的事情在我的Emacs,我無法找到它,每次我切換緩衝區,我得到消息,主要模式的名字,甚至當我調用該函數,我得到minibuffer-inactive-mode也能收到模式名稱在Emacs

全球唯一的功能(適用於所有模式)在我的.emacs文件(我認爲)是這樣的:

(add-hook 'after-change-major-mode-hook (lambda() 
             (if (not (memql (intern (major-mode)) 
                 '(fundamental-mode 
                 erc-mode 
                 text-mode 
                 sql-mode))) 
              (local-set-key (kbd "RET") 
                 'new-line-and-indent-fix)))) 

如何查找添加這個討厭的事的地方?什麼樣的鉤子可以在每種模式下執行?

+0

不那發生在「emacs -q」?如果是這樣,它是否發生在「emacs -Q」?如果「emacs -q」刪除了這個,我會建議用你的配置文件做一個「二分搜索」(有選擇地評估它的一部分,直到找到罪魁禍首)。 – juanleon

+1

'major-mode'不是一個函數,所以在你引用的代碼中你想用'major-mode'替換'(intern(major-mode))'(因爲'major-mode'的值已經是實習符號)。 – Stefan

+0

你看到什麼令人討厭的消息?您是否嘗試過在您使用的源代碼中對該消息進行grep處理? – Drew

回答

1

vanilla Emacs中沒有major-mode函數。無論您的配置中有哪個功能,它都可能負責顯示您所看到的消息。

你想修復你的代碼(按照斯特凡的評論),但你可能也想看看非標準功能:

的Mxfind-functionRETmajor-modeRET

+0

是的,我有'(defun major-mode() (interactive) (message(symbol-name major-mode)))'在我的functions.el中。坦克 – jcubic

+0

我會擺脫那個函數 - 它看起來像寫了這樣你可以用'Mx major-mode RET'來檢查當前緩衝區的模式符號,但是你可以用'M-:major-模式RET',所以真的不需要它。 – phils

+0

另外,'message'總是返回'nil',所以這個值不會是變量'major-mode'的值。 (更不用說那個變量的值是一個符號,所以它不需要'intern'ed。)總之,這個代碼被誤導的方式不止一種。 – Drew