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-windowpara 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.