Emacs 特定于某个缓冲区的键绑定

Emacs 特定于某个缓冲区的键绑定,emacs,Emacs,我使用一种模式(merlin,但这并不重要),当在其中显示类型信息时,它会打开一个名为*merlin type*的缓冲区。我希望能够在缓冲区中键入q来关闭它。没有特定于缓冲区的模式可以挂接;我想做的是创建一个缓冲区本地键绑定;我该怎么做/我还应该做什么?有一些钩子,它们不是特定于模式的。比如说 (add-hook 'post-self-insert-hook #'DWIM) 或 然后 或 有点困惑-你说你运行一个模式-你运行的模式是如何定义的?是否定义了模式挂钩?如果是这样,您可以创建特定于模

我使用一种模式(merlin,但这并不重要),当在其中显示类型信息时,它会打开一个名为
*merlin type*
的缓冲区。我希望能够在缓冲区中键入
q
来关闭它。没有特定于缓冲区的模式可以挂接;我想做的是创建一个缓冲区本地键绑定;我该怎么做/我还应该做什么?

有一些钩子,它们不是特定于模式的。比如说

(add-hook 'post-self-insert-hook #'DWIM)

然后


有点困惑-你说你运行一个模式-你运行的模式是如何定义的?是否定义了模式挂钩?如果是这样,您可以创建特定于模式的键映射,并使用该键映射在本地绑定q以退出模式。没有足够的细节来更具体地说明。merlin(在C-C-t上)打开的缓冲区本身并不运行merlin模式。在我看来,它只是一个包含表单类型的消息缓冲区。据我所知,当这个类型的缓冲区打开时,不会调用任何钩子。我能想到的唯一一件事是它有一个一致的名称。只是一个想法:你能自己派生一个合适的模式,并在
自动模式列表中添加一个条目,将缓冲区置于该模式吗?不确定这是否是正确的处理方式,但它应该非常简单。@AaronHarris这绝对是一个不错的选择,但如果有一种不太重的方式来处理,我宁愿不创建次要模式。您想要做的可能非常简单。问题在于了解您的环境以便知道如何做到这一点。通常,缓冲区会有一个本地键映射或一个特定于模式的键映射,然后您可以定义一个未使用的键来关闭缓冲区。您是否做了C-h b以列出缓冲区中的所有可用绑定-可能会提供将密钥绑定放置在何处的线索,因此它仅在该缓冲区中处于活动状态。对于*-映射的解释可能会像对Merlin的解释一样有用。C-C-t密钥绑定是如何定义的/在哪里定义的?问题是缓冲区没有切换到,因此它不是当前缓冲区。@Isaac如果特定的密钥绑定应该在某个缓冲区中处于活动状态,则只有在它是当前的情况下才有意义。阿法尤:只有在那个时候才能设定。
(add-hook 'post-command-hook #'DWIM)
(defun DWIM ()
  (when (string= MyPrefferedName (buffer-name (get-buffer (current-buffer))))
    DoWhatIWant))
(defun DWIM ()
      (when (buffer-live-p MyPrefferedBuffer)
        DoWhatIWant))