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?


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)

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.


0

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

(setq split-width-threshold 1)

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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.