如何使任意的Emacs缓冲区“隐藏”?

9
几个emacs扩展程序会创建“垃圾”缓冲区,我需要手动从各种缓冲区列表中删除它们。
Emacs有一个“隐藏缓冲区”的概念,比如用于minibuffer。
我如何让任意缓冲区变成隐藏缓冲区?

@Ahmed 这是一个正确的提问地点,只是表述有些不太清晰。 - Trey Jackson
2
@Trey Jackson 为什么?我认为它非常清晰。 - sabof
不清楚您认为什么是垃圾缓冲区,以及为什么需要/想要从列表中删除它们。换句话说,您描述了一个问题(没有太多细节),然后提出了一个解决方案,并询问如何实施该解决方案。这就是我认为它写得很差的原因 - 您有两个问题。1)修复您想要修复的问题,2)如何隐藏任意缓冲区。 - Trey Jackson
@TreyJackson:我认为可以合理地假设sabof知道他想要隐藏哪些缓冲区,尽管如果他想按名称引用它们,他应该指定...或者使用某种触发器或钩子来确定他想要自动隐藏哪个。 - Arafangion
@Arafangion 显然他知道要手动删除哪些缓冲区。问题在于这里有两个问题,“隐藏”缓冲区可能无法解决他的第一个问题。 - Trey Jackson
2个回答

13

Emacs有一个不感兴趣/隐藏缓冲区的概念 - 并通过让它们的名称以空格开头来指定它们。请参阅buffer names文档。您可以通过将其名称更改为以空格开头来使缓冲区“不感兴趣”。

尝试M-x make-buffer-uninteresting

(defun make-buffer-uninteresting ()
  "rename the current buffer to begin with a space"
  (interactive)
  (unless (string-match-p "^ " (buffer-name))
    (rename-buffer (concat " " (buffer-name)))))

一个问题:如果你像这样重命名一个缓冲区,原始扩展如何知道你已经改变了它。或者说,是否有一种简单的方法可以隐藏一个缓冲区,而不会让使用它的任何扩展程序感到困惑? - Tikhon Jelvis
很可能它会在某个地方保留对缓冲区对象的引用,并通过这种方式找到它。 由于如果打开了第二个本应命名相同的缓冲区,则名称会更改,因此这种做法应该非常普遍。 - sabof
@Tikhon - 这就是我说这个问题写得很差的原因,如果它们正在寻找缓冲区名称,那么这个例程可能会破坏扩展(无论它们是什么)。如果它们按值跟踪缓冲区,那么只有名称改变了,它们就没问题了... - Trey Jackson

4
如果您启用了ido(因为我不知道为什么您会在没有它的情况下使用emacs),那么您可以使用ido-ignore-buffers列表配置要忽略哪些缓冲区进行普通缓冲区切换。这是一个正则表达式列表。 (如果您还没有使用ido,真的应该使用它)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接