¿Cómo puedo obtener una política sensata de ventana dividida?

13

Emacs está constantemente haciendo nuevas ventanas y últimamente ha estado arruinando mi día. ¿Cómo puedo decirle a emacs que use la siguiente política al crear ventanas?

  • Prefiere divisiones verticales
  • Deje de hacer divisiones verticales cuando las ventanas tengan menos de 80 columnas.
  • Deje de hacer divisiones horizontales cuando la ventana tenga menos de 60 filas.
  • Cuando llegue a esta cuadrícula de 6x6, en mi monitor de 27 ", ¡empiece a reutilizar Windows!

Además, preferiría que mis ventanas siempre estén equilibradas, pero cada división deja el tamaño de la viuda desequilibrado. ¡Prefiero tener 3 ventanas de igual tamaño que 1 grande y dos que son demasiado pequeñas! ¿Hay una configuración para esto, o un lugar sensato para poner un consejo de ventanas de equilibrio?

expez
fuente
¿Qué operaciones están creando las ventanas divididas?
Andrew Swann
Estoy todo haciendo clojure programación últimamente así como comandos de sidra: pruebas administradas de sidra de la prueba, sidra-hallazgo-var, sidra, sidra-doc-switch-to-repl-buffer, etc, etc
expez
1
La mayoría de las personas no están interesadas en abrir el código fuente, por ejemplo, el producto de sidra , para personalizarlo para satisfacer sus necesidades. En cambio, buscan soluciones simples como personalizar el display-buffer-alist. Otros simplemente lo arreglan programáticamente después del hecho, por ejemplo, delete-windowy switch-to-buffer, dividido verticalmente / horizontalmente, y así sucesivamente. Y, hay algunas bibliotecas adicionales para ayudar a administrar las ventanas y / o volver al diseño anterior. Prefiero la primera opción, es decir, modificar la fuente y hacerla absolutamente perfecta, pero pertenezco a una minoría rara de personas.
ley
55
Eche un vistazo a la sección del manual sobre la división de ventanas - split-height-thresholdy split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
lawlist
1
Parece que desea definir una función ACCIÓN personalizada para usar con una CONDICIÓN muy genérica display-buffer-alist. Consulte display-bufferlos requisitos de dicha función ACTION (y la lista de funciones estándar, el código que puede examinar), pero será responsable de mostrar el búfer de la forma que desee (y ciertamente puede equilibrar las ventanas después) .
phils

Respuestas:

2

He estado usando lo siguiente durante mucho tiempo. Es posible que deba editarlo para adaptarlo a su propio estilo preferido.

;; ------------------------------------------------------------------
;; display-buffer

;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.

(setq pop-up-windows nil)

(defun my-display-buffer-function (buf not-this-window)
  (if (and (not pop-up-frames)
           (one-window-p)
           (or not-this-window
               (not (eq (window-buffer (selected-window)) buf)))
           (> (frame-width) 162))
      (split-window-horizontally))
  ;; Note: Some modules sets `pop-up-windows' to t before calling
  ;; `display-buffer' -- Why, oh, why!
  (let ((display-buffer-function nil)
        (pop-up-windows nil))
    (display-buffer buf not-this-window)))

(setq display-buffer-function 'my-display-buffer-function)
Lindydancer
fuente
2

Un poco tarde, pero porque también busqué esto y no pude encontrar una solución lista:

Podrías definir tu propia split-window-sensiblyfunción.
Para hacerlo, ponga lo siguiente en su init.el:

(setq split-height-threshold 120
      split-width-threshold 160)

(defun my-split-window-sensibly (&optional window)
    "replacement `split-window-sensibly' function which prefers vertical splits"
    (interactive)
    (let ((window (or window (selected-window))))
        (or (and (window-splittable-p window t)
                 (with-selected-window window
                     (split-window-right)))
            (and (window-splittable-p window)
                 (with-selected-window window
                     (split-window-below))))))

(setq split-window-preferred-function #'my-split-window-sensibly)

Nota: los umbrales deben ser dos veces más grandes que la ventana más pequeña permitida, porque cada una de las nuevas ventanas usa la mitad del tamaño de la ventana anterior.
La última línea le dice a emacs que use la función de división definida.

jue
fuente
0

Esto te hará preferir divisiones verticales

(setq split-width-threshold 1)
CESCO
fuente
0

(setq split-height-threshold nil) (setq split-width-threshold 200)

  • Ajuste split-height-thresholda básicamente sin querer dividir horizontalmente
  • 200 parece un número suficientemente alto que incluso en una pantalla externa grande, Emacs solo se dividirá como máximo una vez.
Christabella Irwanto
fuente