当display-buffer必须在现有窗格中创建一个新窗口时,Emacs 手册规定split-height-threshold首先查看以确定新窗口是否可以低于当前窗口,然后 split-width-threshold以相同的方式评估并排窗口。
如果宽度足够高,有没有办法让 Emacs 先尝试将窗口并排放置?我可以设置split-height-threshold为nil完全禁止垂直拆分,但是如果当前窗口不够宽,这会使 Emacs 窃取另一个窗口。
您可以通过自定义变量让 Emacs 做到这一点split-window-preferred-function:
(defun my-split-window-sensibly (&optional window)
(let ((window (or window (selected-window))))
(or (and (window-splittable-p window t)
;; Split window horizontally.
(with-selected-window window
(split-window-right)))
(and (window-splittable-p window)
;; Split window vertically.
(with-selected-window window
(split-window-below)))
(and (eq window (frame-root-window (window-frame window)))
(not (window-minibuffer-p window))
;; If WINDOW is the only window on its frame and is not the
;; minibuffer window, try to split it horizontally disregarding
;; the value of `split-width-threshold'.
(let ((split-width-threshold 0))
(when (window-splittable-p window t)
(with-selected-window window
(split-window-right))))))))
(setq split-window-preferred-function 'my-split-window-sensibly)
Run Code Online (Sandbox Code Playgroud)
变量 split-window-preferred-function
指定用于拆分窗口的函数,以便创建一个用于显示缓冲区的新窗口。
display-buffer-pop-up-window动作函数使用它来实际分割窗口。
默认情况下,它设置为split-window-sensibly。我在上面提供的函数是split-window-sensibly(在 中定义的window.el)的修改版本,它只是颠倒了原始函数的步骤,导致 Emacs “更喜欢”并排窗口拆分而不是堆叠窗口拆分。
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |