Come posso ottenere una politica a finestra divisa ragionevole?


13

Emacs crea costantemente nuove finestre e ultimamente mi ha rovinato la giornata. Come posso dire a emacs di utilizzare i seguenti criteri durante la creazione di Windows?

  • Preferisci divisioni verticali
  • Smetti di fare divisioni verticali quando windows sarebbe inferiore a 80 colonne.
  • Smetti di fare divisioni orizzontali quando la finestra sarebbe inferiore a 60 righe.
  • Quando raggiungo questa griglia 6x6, sul mio monitor da 27 ", inizio a riutilizzare Windows!

Inoltre, preferirei che le mie finestre fossero sempre bilanciate, ma ogni divisione lascia sbilanciate le dimensioni della vedova. Preferirei avere 3 finestre di dimensioni uguali rispetto a 1 grande e due che sono troppo piccole! Esiste un'impostazione per questo, o un posto ragionevole per dare un consiglio di equilibrio?


Quali operazioni stanno creando le finestre divise?
Andrew Swann,

Ultimamente sto facendo programmazione clojure ultimamente, quindi comandi di sidro come: sidro-test-run-test, sidro-find-var, sidro-doc, sidro-switch-to-repl-buffer ecc ecc.
expez

1
La maggior parte delle persone non è interessata ad aprire il codice sorgente - ad esempio, il sidro - per personalizzarlo in base alle proprie esigenze. Invece, cercano semplici soluzioni come la personalizzazione di display-buffer-alist. Altri semplicemente lo risolvono programmaticamente dopo il fatto, ad esempio, delete-windowe switch-to-bufferdiviso verticalmente / orizzontalmente e così via. E ci sono alcune librerie aggiuntive per aiutare a gestire le finestre e / o tornare al layout precedente. Preferisco la prima opzione, ovvero modificare la fonte e renderla assolutamente perfetta, ma sono nella rara minoranza di persone.
elenco delle leggi

5
Dai un'occhiata alla sezione nel manuale relativa alla suddivisione delle finestre - split-height-thresholde split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
elenco delle leggi

1
Sembra che tu voglia definire una funzione AZIONE personalizzata da usare con una CONDIZIONE molto generica in display-buffer-alist. Verifica display-bufferi requisiti di tale funzione AZIONE (e l'elenco delle funzioni standard, il codice per il quale puoi esaminare), ma sarà responsabile della visualizzazione del buffer nel modo che desideri (e può sicuramente bilanciare le finestre in seguito) .
phils,

Risposte:


2

Sto usando quanto segue da molto tempo. Potrebbe essere necessario modificarlo per adattarlo al tuo stile preferito.

;; ------------------------------------------------------------------
;; 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)

2

Un po 'in ritardo, ma perché ho anche cercato questo e non sono riuscito a trovare una soluzione pronta:

Potresti definire la tua split-window-sensiblyfunzione.
Per fare ciò, inserisci quanto segue nel tuo 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: le soglie devono essere due volte più grandi della finestra più piccola consentita, poiché le nuove finestre utilizzano ciascuna metà delle dimensioni della finestra precedente.
L'ultima riga dice a emacs di usare la funzione split definita.


0

Questo ti farà preferire le divisioni verticali

(setq split-width-threshold 1)

0

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

  • L'impostazione split-height-thresholdpraticamente non vuole mai dividere orizzontalmente
  • 200 sembra un numero abbastanza alto che anche su un grande display esterno Emacs si dividerà al massimo una sola volta.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.