我想实现一个功能,让我只循环打开打开的目录缓冲区,跳过文件或暂存缓冲区。我该怎么做呢?
4 回答
看看标签栏模式——您可以将组定义为您想要的任何内容(例如, ),并使用和dired
在组之间循环:tabbar-backward-group
tabbar-forward-group
http://www.emacswiki.org/emacs/TabBarMode
tabbar-buffer-list-function
可用于进一步定义是否显示(或隐藏)某些文件。
tabbar-buffer-groups
是可以修改setq
为任何你想要的默认组。如果要创建替代的分组方法,可以使用tabbar-buffer-groups-function
.
如果dired
是一个组,那么您可以使用(setq tabbar-cycle-scope 'tabs)
withtabbar-backward
和来在这些缓冲区之间切换tabbar-forward
。
我为此使用缓冲区堆栈。
我编写了两个使用该包的不同函数:一个用于在 dired 缓冲区之间切换,另一个用于在与我相同模式的缓冲区之间切换。我都大量使用。我就是这样做的:
;; For shorter keybindings
(defmacro command (&rest body)
`(lambda ()
(interactive)
,@body))
(defvar buffer-stack-mode)
(defun buffer-op-by-mode (op &optional mode)
(let ((buffer-stack-filter 'buffer-stack-filter-by-mode)
(buffer-stack-mode (or mode major-mode)))
(funcall op)))
(defun buffer-stack-filter-by-mode (buffer)
(with-current-buffer buffer
(equal major-mode buffer-stack-mode)))
(global-set-key [(meta kp-7)]
(command (buffer-op-by-mode 'buffer-stack-up)))
(global-set-key [(meta kp-9)]
(command (buffer-op-by-mode 'buffer-stack-down)))
(global-set-key [(meta kp-3)]
(command (buffer-op-by-mode 'buffer-stack-down 'dired-mode)))
(global-set-key [(meta kp-1)]
(command (buffer-op-by-mode 'buffer-stack-up 'dired-mode)))
编辑:
我包括用于命令键绑定的宏
Icicles提供了几种方法来做到这一点。
从 Dired 缓冲区开始并执行
C-0 C-x b TAB
C-x b
, 然后C-x m +
, 然后输入dired-mode
(使用完成), 然后TAB
这些只为您提供 Dired 缓冲区作为可用的候选者,然后您可以按名称匹配它们。C-up
您可以使用箭头键 ( , C-down
)在与您的输入匹配的缓冲区之间循环。使用RET
或C-g
结束。
前缀 arg
0
表示候选是与当前缓冲区模式相同的缓冲区 --- 因此上面的第一个选项。完成时,
C-x C-m +
提示您输入模式,然后过滤掉所有模式与您输入的模式不同或派生自您输入的模式的候选人(在本例中为dired-mode
)——因此是上面的第二个选项。
C-x b
在Icicle
模式下绑定到icicle-buffer
。如果要在不同窗口中打开缓冲区,请使用C-x 4 b
( icicle-buffer-other-window
)。
有关更多信息,请参见http://www.emacswiki.org/emacs/Icicles__-_Buffer-Name_Input。
如果您想尝试实施某些东西,请查看Buffer-menu-mode
. 它已经有了一个T只显示文件的开关。然后只需要看看它是如何构建列表并过滤它的
(eq major-mode 'dired-mode)
源非常小,奇怪的是 665 行。