【问题标题】:Keep getting mode name when switching buffers in Emacs在 Emacs 中切换缓冲区时不断获取模式名称
【发布时间】:2013-09-24 10:28:08
【问题描述】:

我的 Emacs 中有奇怪的东西,我找不到它,每次我切换缓冲区时,我都会收到带有主要模式名称的消息,即使我调用函数时也会收到 minibuffer-inactive-mode

我的 .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))))

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

【问题讨论】:

  • “emacs -q”会发生这种情况吗?如果是这样,“emacs -Q”是否会发生这种情况?如果“emacs -q”删除了这个,我建议对你的配置文件进行“二进制搜索”(选择性地评估它的一部分,直到找到罪魁祸首)。
  • major-mode 不是函数,因此在您引用的代码中,您希望将(intern (major-mode)) 替换为major-mode(因为major-mode 的值已经是一个内部符号)。跨度>
  • 您看到的烦人信息是什么?您是否尝试过 grepping 在您使用的源代码中处理该消息?
  • @Stefan 它表明主要模式是一个函数和一个变量。
  • @Draw 消息是主模式变量的值。我不能grep它。

标签: emacs buffer elisp major-mode


【解决方案1】:

原版 Emacs 中没有 major-mode 函数。无论您的配置中有什么功能,它都可能负责显示您看到的消息。

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

M-x find-function RET major-mode RET

【讨论】:

  • 是的,我的functions.el中有(defun major-mode () (interactive) (message (symbol-name major-mode)))。坦克
  • 我会去掉那个函数——看起来它是这样写的,所以你可以用M-x major-mode RET检查当前缓冲区的模式符号,但你可以用M-: major-mode RET简单地做同样的事情,所以真的没必要。
  • 另外,message总是返回nil,所以值不会是变量major-mode的值。 (更不用说那个变量的值无论如何都是一个符号,所以它不需要是interned。)总之,这段代码在不止一个方面被误导了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多