在Emacs中切换缓冲区时保持获取模式名称

在Emacs中切换缓冲区时保持获取模式名称,emacs,buffer,elisp,major-mode,Emacs,Buffer,Elisp,Major Mode,我的Emacs中有一个奇怪的东西,我找不到它,每次切换缓冲区时,我都会收到带有主模式名称的消息,即使我调用函数“我得到的是minibuffer非活动模式” 在我的.emacs文件中(我认为)唯一的全局函数(适用于所有模式)是: 如何找到添加这个烦人东西的地方?在每个模式上可以执行哪些不同的钩子?在普通的Emacs中没有主模式函数。无论配置中的函数是什么,它都可能负责显示您看到的消息 您希望修复代码(根据Stefan的评论),但您可能还希望研究该非标准函数: M-xfind函数RETmain模式R

我的Emacs中有一个奇怪的东西,我找不到它,每次切换缓冲区时,我都会收到带有主模式名称的消息,即使我调用函数“我得到的是
minibuffer非活动模式”

在我的.emacs文件中(我认为)唯一的全局函数(适用于所有模式)是:


如何找到添加这个烦人东西的地方?在每个模式上可以执行哪些不同的钩子?

在普通的Emacs中没有
主模式
函数。无论配置中的函数是什么,它都可能负责显示您看到的消息

您希望修复代码(根据Stefan的评论),但您可能还希望研究该非标准函数:


M-x
find函数
RET
main模式
RET

在“emacs-q”中会发生这种情况吗?如果是这样的话,“emacs-Q”会发生这种情况吗?如果“emacs-q”删除了这一点,我建议您对配置文件进行“二进制搜索”(有选择地评估部分配置文件,直到找到罪魁祸首)。
主模式
不是一个函数,因此在您引用的代码中,您希望将
(intern(主模式))
替换为
主模式
(因为
主模式
的值已经是一个内部符号)。您看到的最烦人的消息是什么?您在使用的源代码中尝试了
grep
ping该消息了吗?@Stefan它告诉我们主模式是一个函数和一个变量。@绘制消息是主模式变量的值。我不能grep它。是的,我有
(defun major mode()(交互式)(消息(符号名称主模式)))
在my functions.el.TanksI中,我会去掉这个函数——它看起来是这样写的,你可以用
M-x主模式RET
检查当前缓冲区的模式符号,但是你可以用
M-:主模式RET
做同样的事情,所以真的不需要它。此外,
message
返回
nil
始终,因此该值不会是变量
主模式
的值(更不用说该变量的值是一个符号,因此它不需要是
intern
ed)。总之,该代码在多个方面被误导。
(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))))