我知道 Emacs 试图变得聪明,并根据窗口的哪个尺寸更大来打开它的辅助缓冲区,因此如果当前宽度大于高度,它可能会出现在垂直拆分窗口中,否则会出现在水平拆分窗口中。
但我更希望它始终以水平拆分打开该列表,因为当缓冲区放置在垂直拆分时,我看不到长路径。我怎样才能做到这一点?
最佳答案
我相信您已经将水平/垂直拆分术语从后到前(我永远不记得哪个是哪个),但是由于您的目标是保留原始窗口的宽度,所以我强制进行垂直拆分。
见 C-hf split-window-sensibly
RET。它告诉你该怎么做:
You can enforce this function to not split WINDOW horizontally,
by setting (or binding) the variable `split-width-threshold' to
nil. If, in addition, you set `split-height-threshold' to zero,
chances increase that this function does split WINDOW vertically.
所以作为一个永久设置:
(setq split-width-threshold nil)
(setq split-height-threshold 0)
对于特定功能,您可以建议该功能(但请参阅下面的编辑 2!):
(defadvice list-buffers (around list-buffers-split-vertically)
"Always split vertically when displaying the buffer list.
See `split-window-sensibly'."
(let ((split-width-threshold nil)
(split-height-threshold 0))
ad-do-it))
(ad-activate 'list-buffers)
编辑:实际上,在这种情况下,我怀疑您只关心交互式案例,在这种情况下,最好定义一个函数并重新映射绑定(bind):
(defun my-list-buffers-vertical-split ()
"`list-buffers', but forcing a vertical split.
See `split-window-sensibly'."
(interactive)
(let ((split-width-threshold nil)
(split-height-threshold 0))
(call-interactively 'list-buffers)))
(global-set-key [remap list-buffers] 'my-list-buffers-vertical-split)
编辑 2: Stefan 指出
display-buffer-alist
在不建议功能的情况下促进此类事情(当然避免不必要的建议总是一件好事)。我相信我们仍然需要一个自定义操作,所以:(defun my-display-buffer-pop-up-same-width-window (buffer alist)
"A `display-buffer' ACTION forcing a vertical window split.
See `split-window-sensibly' and `display-buffer-pop-up-window'."
(let ((split-width-threshold nil)
(split-height-threshold 0))
(display-buffer-pop-up-window buffer alist)))
(add-to-list 'display-buffer-alist
'("\\*Buffer List\\*" my-display-buffer-pop-up-same-width-window))
关于emacs - 使 *Buffer List* 始终出现在水平拆分中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542914/