也能收到模式名称在Emacs

问题描述:

切换缓冲区时,我有奇怪的事情在我的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

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