When display-buffer
必须在现有窗格中创建一个新窗口,Emacs手册指出split-height-threshold
首先查看以确定新窗口是否可以位于当前窗口下方,then split-width-threshold
对于并排窗口以相同的方式进行评估。
如果宽度足够高,有没有办法让 Emacs 首先尝试并排放置窗口?我可以设置split-height-threshold
to 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)
变量split-window-preferred-function
指定一个用于分割窗口的函数,以便创建一个新窗口来显示缓冲区。它由以下人员使用display-buffer-pop-up-window
实际分割窗口的操作函数。
默认情况下,它设置为split-window-sensibly
。我上面提供的功能是一个修改版本split-window-sensibly
(定义于window.el),它只是反转了原始函数的步骤,导致 Emacs“更喜欢”并排窗口分割而不是堆叠窗口分割。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)