rocks - Orden de evaluación inversa de split-height-threshold y split-width-threshold en Emacs para display-buffer
emacs windows installer (1)
Puede hacer que Emacs haga esto mediante la personalización de la variable 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)
La variable split-window-preferred-function
especifica una función para dividir una ventana, con el fin de crear una nueva ventana para mostrar un búfer. Es utilizado por la función de acción
display-buffer-pop-up-window
para dividir realmente la ventana.
Por defecto, está configurado para split-window-sensibly
. La función que proporciono arriba es una versión modificada de " split-window-sensibly
window.el
(definida en window.el
) que simplemente invierte los pasos de la función original, haciendo que Emacs "prefiera" las divisiones lado a lado de las ventanas sobre las apiladas.
Cuando display-buffer
tiene que crear una nueva ventana en un panel existente, el manual de Emacs establece que el split-height-threshold
se busca primero para determinar si la nueva ventana puede estar debajo de la actual, luego se evalúa el split-width-threshold
de la misma manera para ventanas lado a lado.
¿Hay alguna manera de hacer que Emacs intente primero poner las ventanas una al lado de la otra si el ancho es lo suficientemente alto? Puedo establecer el split-height-threshold
en nil
para inhibir por completo la división vertical, pero eso hace que Emacs robe otra ventana si la actual no es lo suficientemente amplia.