emacs - 使 *Buffer List* 始终出现在水平拆分中

标签 emacs

我知道 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/

相关文章:

Emacs 键绑定(bind)中的 Qt Creator

emacs - emacs 告诉我 "File mode specification error"是什么意思?

emacs - 如何获得基本的 App<->Emacs 集成?

Emacs - 相互切换段落

emacs - 如何在emacs中强制语法高亮刷新?

vim - 有没有可视化的二维码编辑器?

emacs - 自定义 dired 缓冲区的缓冲区名称

emacs - 使用 Paredit 包装现有表达式

emacs - hl-line-mode emacs颜色更改

emacs - 如何获得有关组织模式导出的智能报价?