Emacs每帧制作ibuffer过滤器

时间:2013-11-08 05:35:40

标签: emacs elisp

我使用ibuffer以及打开了几个帧。我ibuffer的常见用例是按名称/文件名过滤缓冲区列表(C-x C-b)。问题是过滤器对所有帧的工作方式相同(我相信这是预测的)。我想要为每个帧都应用ibuffer列表过滤器。

E.g。在第一帧中,我希望看到按文件名过滤的缓冲区列表,在第二帧中按模式过滤。

环顾ibuffer.el我发现了一个名为ibuffer-filtering-qualifiers的实体,其中包含当前应用过滤器的关联列表。我试过玩过:

(let ((ibuffer-filtering-qualifiers '())) ;;; Imitate that there are no filters applied
   (call-interactively 'ibuffer))

但这对我没用。

请您指出如何实现ibuffer的理想行为?

2 个答案:

答案 0 :(得分:2)

你遇到的问题不是ibuffer对所有帧都以相同的方式工作。问题是ibuffer缓冲区对于所有帧都是相同(每个帧都有一个单独的窗口(带有光标)显示你的ibuffer唯一实例)。

一个简单的解决方案是克隆ibuffer缓冲区(M-x克隆缓冲区)。那就是:你有两个不同的缓冲区,你可以独立地对它们应用过滤器。

答案 1 :(得分:2)

函数ibuffer-update使用buffer-list,其中包含所有帧。修改使用ibuffer-updatebuffer-list的{​​{1}}会接近您正在寻找的行为。基于相同概念的ibuffer过滤器也应该是可能的。

在我看来,每帧缓冲列表(frame-parameter (selected-frame) 'buffer-list)不是将缓冲区与帧关联的最佳方法,因为它太容易修改。我见过的最好的方法是Al Parker的frame-bufs:https://github.com/alpaker/Frame-Bufs这已经更新,可以与当前版本的Emacs一起使用,但是,我正在使用一个稍微修改过的版本来满足我自己的需求。

因此,我知道回答您问题的最简单方法是使用Al Parker的frame-bufs组合,并使用(frame-parameter (selected-frame) 'buffer-list)中的frame-bufs-buffer-list。这给你两全其美。下面是一个示例,它将为您提供一个漂亮的ibuffer,只有与给定帧关联的缓冲区 - 所有其他缓冲区都不会显示。 [仅供参考:frame-bufs也按模式或文件名排序。]

ibuffer-update