Wie kann ich eine vernünftige Split-Window-Richtlinie erhalten?

13

Emacs macht ständig neue Fenster und es hat meinen Tag in letzter Zeit ruiniert. Wie kann ich Emacs anweisen, beim Erstellen von Fenstern die folgenden Richtlinien zu verwenden?

  • Vertikale Teilungen bevorzugen
  • Unterbrechen Sie die vertikale Aufteilung, wenn die Fenstergröße weniger als 80 Spalten beträgt.
  • Unterbrechen Sie die horizontale Aufteilung, wenn das Fenster weniger als 60 Zeilen enthält.
  • Wenn ich dieses 6x6-Raster auf meinem 27-Zoll-Monitor erreiche, können Sie Windows wiederverwenden.

Außerdem wäre es mir lieber, wenn meine Fenster immer ausgeglichen wären, aber bei jeder Aufteilung sind die Witwengrößen nicht ausgeglichen. Ich hätte lieber 3 gleich große Fenster als 1 großes und zwei zu kleine! Gibt es eine Einstellung dafür oder einen vernünftigen Ort, um einen Balance-Windows-Rat zu geben?

Expez
quelle
Welche Operationen erzeugen die geteilten Fenster?
Andrew Swann
Ich mache in letzter Zeit hauptsächlich Clojure-Programmierung, also Cidre-Befehle wie: Cidre-Test-Run-Tests, Cidre-Find-Var, Cidre-Doc, Cidre-Switch-to-Repl-Buffer usw. usw.
voraussichtlich
1
Die meisten Menschen sind nicht daran interessiert, den Quellcode - z. B. den Apfelwein - zu öffnen, um ihn an ihre Bedürfnisse anzupassen. Stattdessen suchen sie nach einfachen Korrekturen wie dem Anpassen der display-buffer-alist. Andere reparieren es einfach programmgesteuert nachträglich - z. B. delete-windowund switch-to-buffer, vertikal / horizontal geteilt, und so weiter. Außerdem gibt es einige zusätzliche Bibliotheken, mit denen Sie die Fenster verwalten und / oder zum vorherigen Layout zurückkehren können. Ich bevorzuge die erste Option, dh die Quelle zu ändern und sie absolut perfekt zu machen, aber ich gehöre zur seltenen Minderheit der Menschen.
Gesetzesliste
5
Werfen Sie einen Blick auf den Abschnitt im Handbuch in Bezug auf Fenster-Splitting - split-height-thresholdund split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/...
lawlist
1
Es hört sich so an, als ob Sie eine benutzerdefinierte ACTION-Funktion definieren möchten, die mit einem sehr allgemeinen CONDITION in verwendet wird display-buffer-alist. Informationen display-bufferzu den Anforderungen einer solchen ACTION-Funktion (und der Liste der Standardfunktionen, deren Code Sie überprüfen können) finden Sie hier. Sie ist jedoch für die Anzeige des Puffers auf die von Ihnen gewünschte Weise verantwortlich (und kann die Fenster anschließend sicher ausgleichen). .
Phils

Antworten:

2

Ich benutze die folgenden seit langer Zeit. Möglicherweise müssen Sie es bearbeiten, um Ihrem bevorzugten Stil zu entsprechen.

;; ------------------------------------------------------------------
;; 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
quelle
1

Ein bisschen spät, aber weil ich auch danach gesucht habe und keine fertige Lösung gefunden habe:

Sie können Ihre eigene split-window-sensiblyFunktion definieren .
Geben Sie dazu Folgendes in Ihr Feld ein 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)

Hinweis: Die Schwellenwerte müssen doppelt so groß sein wie das kleinste zulässige Fenster, da die neuen Fenster jeweils die Hälfte der früheren Fenstergröße verwenden.
Die letzte Zeile weist Emacs an, die definierte Split-Funktion zu verwenden.

jue
quelle
0

Dadurch bevorzugen Sie vertikale Teilungen

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

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

  • Einstellung split-height-thresholdim Grunde nie wollen horizontal geteilt
  • 200 Es scheint eine ausreichend hohe Zahl zu sein, die selbst auf einem großen externen Display den Emacs höchstens einmal aufteilt.
Christabella Irwanto
quelle