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?


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.


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)

0

To sprawi, że wolisz pionowe podziały

(setq split-width-threshold 1)

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.