Como posso obter uma política sensata de janelas divididas?

13

O Emacs está constantemente criando novas janelas e está arruinando meu dia ultimamente. Como posso dizer ao emacs para usar a seguinte política ao criar janelas?

  • Preferir divisões verticais
  • Pare de fazer divisões verticais quando as janelas tiverem menos de 80 colunas.
  • Pare de fazer divisões horizontais quando a janela tiver menos de 60 linhas.
  • Quando eu chegar a essa grade 6x6, no meu monitor de 27 ", comece a reutilizar as janelas!

Além disso, prefiro que minhas janelas estejam sempre equilibradas, mas cada divisão deixa os tamanhos da viúva desequilibrados. Prefiro ter três janelas de tamanho igual a uma grande e duas pequenas demais! Existe um cenário para isso, ou um lugar sensato para colocar um conselho das janelas de equilíbrio?

expez
fonte
Quais operações estão criando as janelas divididas?
Andrew Swann
Ultimamente, estou fazendo programação clojure ultimamente, para comandos de cidra como: cider-test-run-tests, cider-find-var, cider-doc, cider-switch-to-repl-buffer etc etc
expez
1
A maioria das pessoas não está interessada em abrir o código fonte - por exemplo, a sidra - material - para personalizá-lo para atender às suas necessidades. Em vez disso, eles procuram correções simples como personalizar o display-buffer-alist. Outros apenas corrigem programaticamente após o fato - por exemplo, delete-windowe switch-to-buffer, dividem verticalmente / horizontalmente e assim por diante. E existem algumas bibliotecas adicionais para ajudar a gerenciar as janelas e / ou reverter para o layout anterior. Prefiro a primeira opção - ou seja, modificar a fonte e torná-la absolutamente perfeita, mas estou na rara minoria de pessoas.
lawlist
5
Dê uma olhada na seção do manual sobre divisão de janelas - split-height-thresholde split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
lawlist
1
Parece que você deseja definir uma função ACTION personalizada para usar com um CONDITION muito genérico no display-buffer-alist. Consulte display-bufferos requisitos dessa função ACTION (e a lista de funções padrão, o código para o qual você pode examinar), mas será responsável por exibir o buffer da maneira que desejar (e certamente equilibrará as janelas posteriormente) .
phils 29/05

Respostas:

2

Estou usando o seguinte há muito tempo. Pode ser necessário editá-lo para acomodar seu 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
fonte
1

Um pouco tarde, mas porque eu também procurei por isso e não consegui encontrar uma solução pronta:

Você pode definir sua própria split-window-sensiblyfunção.
Para fazer isso, coloque o seguinte em seu 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: os limites precisam ser duas vezes maiores que a menor janela permitida, porque as novas janelas usam metade do tamanho da janela anterior.
A última linha diz ao emacs para usar a função de divisão definida.

jue
fonte
0

Isso fará com que você prefira divisões verticais

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

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

  • Definindo split-height-thresholdpara basicamente nunca querer dividir horizontalmente
  • 200 parece um número alto o suficiente para que, mesmo em um monitor externo grande, o Emacs só se divida no máximo uma vez.
Christabella Irwanto
fonte