Jak mogę uzyskać rozsądną politykę podziału okien?

15

Emacs stale tworzy nowe okna i ostatnio rujnuje mi dzień. Jak mogę powiedzieć emacsowi, aby podczas tworzenia systemu Windows używał następujących zasad?

  • Wolę podziały pionowe
  • Przestań robić podziały pionowe, gdy okna będą miały mniej niż 80 kolumn.
  • Przestań robić podziały w poziomie, gdy okno będzie mniejsze niż 60 wierszy.
  • Kiedy dotrę do tej siatki 6x6, na moim 27-calowym monitorze zacznij ponownie używać okien!

Wolałbym też, aby moje okna były zawsze wyważone, ale każdy podział pozostawia nierówne rozmiary wdów. Wolę mieć 3 równe okna niż 1 duże i dwa, które są zbyt małe! Czy jest na to odpowiednie miejsce lub rozsądne miejsce na udzielenie porady na temat bilansu?

expez
źródło
Jakie operacje tworzą podzielone okna?
Andrew Swann
Ostatnio zajmuję się głównie programowaniem clojure, więc polecenia cydru takie jak: cydr-test-uruchom-testy, cydr-znajdź-var, cydr-doc, cydr-zmień-na-repl-bufor itp.
expez
1
Większość ludzi nie interesuje otwarcie kodu źródłowego - np na cydr -stuff - aby dostosować go do swoich potrzeb. Zamiast tego szukają prostych poprawek, takich jak dostosowywanie display-buffer-alist. Inni po prostu programowo naprawiają to po fakcie - np. delete-windowI switch-to-bufferdzielą pionowo / poziomo i tak dalej. Istnieją również dodatkowe biblioteki, które pomagają zarządzać oknami i / lub przywracać poprzedni układ. Wolę pierwszą opcję - tj. Zmodyfikować źródło i uczynić go absolutnie idealnym, ale jestem w rzadkiej mniejszości ludzi.
prawnik
5
Zajrzyj do sekcji instrukcji dotyczącej podziału okien - split-height-thresholdi split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
lista prawników
1
Wygląda na to, że chcesz zdefiniować niestandardową funkcję AKCJA, która ma być używana z bardzo ogólnym STANEM w display-buffer-alist. Sprawdź display-bufferwymagania dla takiej funkcji AKCJI (i listę standardowych funkcji, kod, który możesz sprawdzić), ale będzie ona odpowiedzialna za wyświetlanie bufora w dowolny sposób (z pewnością może później zrównoważyć okna) .
phils

Odpowiedzi:

3

Trochę późno, ale ponieważ szukałem tego i nie mogłem znaleźć gotowego rozwiązania:

Możesz zdefiniować własną split-window-sensiblyfunkcję.
Aby to zrobić, umieść w swoim 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)

Uwaga: progi muszą być dwa razy większe niż najmniejsze dozwolone okno, ponieważ każde nowe okno wykorzystuje połowę poprzedniego rozmiaru okna.
Ostatni wiersz mówi emacsowi, aby używał zdefiniowanej funkcji podziału.

Jue
źródło
2

Używam następujących od dłuższego czasu. Być może trzeba będzie go edytować, aby dostosować go do własnego preferowanego stylu.

;; ------------------------------------------------------------------
;; 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
źródło
0

To sprawi, że wolisz pionowe podziały

(setq split-width-threshold 1)
CESCO
źródło
0

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

  • Ustawienie split-height-thresholdzasadniczo nigdy nie chce dzielić się w poziomie
  • 200 wydaje się wystarczająco dużą liczbą, która nawet na dużym wyświetlaczu zewnętrznym Emacs dzieli się tylko raz.
Christabella Irwanto
źródło