Es gibt mehrere ähnliche Fragen. Ich habe sie alle gelesen und sie geben keine Antwort auf mein Szenario. Ich möchte, dass Emacs vertikale Teilungen (Aufteilen von Fenstern in linke und rechte Teile) gegenüber horizontalen Teilen bevorzugen, auch wenn sowohl horizontale als auch vertikale Teilungen möglich sind . Dies ist, was das Handbuch sagt:
Die Aufteilung kann entweder vertikal oder horizontal sein, abhängig von den Variablen Aufteilungshöhenschwelle und Aufteilungsbreitenschwelle. Diese Variablen sollten ganzzahlige Werte haben. Wenn der Schwellenwert für die Teilungshöhe kleiner als die Höhe des ausgewählten Fensters ist, wird durch die Teilung das neue Fenster darunter platziert. Wenn der Schwellenwert für die Teilungsbreite kleiner als die Breite des Fensters ist, wird das neue Fenster durch die Teilung rechts angezeigt.
Wenn also beide split-height-threshold
und split-width-threshold
kleiner als die Breite und Höhe des Fensters sind, führen Emacs eine horizontale Aufteilung durch. Ich will das Gegenteil. Wenn beide Schwellenwerte kleiner sind, führen Sie eine vertikale Aufteilung durch.
Eine Möglichkeit, dies zu erreichen, ist die Einstellung split-height-threshold
auf nil
, aber das gefällt mir nicht, weil dadurch die horizontale Aufteilung vollständig deaktiviert wird.
Ich habe mir die split-window-sensibly
Funktion angesehen, bin aber nicht gut genug in elisp, um meine eigene my-split-window-sensibly
Funktion zu schreiben, die so funktioniert, wie ich es möchte.
quelle
split-window-preferred-function
die so eingestellt werden kann, dass eine benutzerdefinierte Funktion verwendet wird. Schauen Sie sich die Funktion genau ansplit-window-sensibly
und prüfen Sie, ob sie Ihren Anforderungen entspricht, indem Sie bestimmte Variablen wie in Ihrer Frage erwähnt anpassen. Lesen Sie auch die Dokumentzeichenfolge dieser Funktion ... wenn sie nicht Ihren Anforderungen entsprechen kann, dann Sie können eine andere schreiben oder Hilfe beim Schreiben einer anderen Funktion erhalten ...Antworten:
Nach meiner Erfahrung ist dies ein schwierigeres Problem, als man denken könnte, da es nicht immer einfach ist, eine intuitive Vorstellung davon, was sinnvoll ist, genau zu formulieren. Ich werde nur beschreiben, was ich am Ende habe, aber Sie müssen vielleicht herumspielen.
Erstens: Die vorhandene
split-window-sensibly
Funktion zieht es immer vor, einen horizontalen Stapel von Fenstern (der verwirrenderweise eine vertikale "Teilung" nennt, obwohl die Teilung horizontal ist ...) über eine nebeneinander angeordnete Anordnung zu erhalten. Es ist einfach genug, eine Funktion mit der entgegengesetzten Präferenz zu erstellen, die im Wesentlichen nur eine Kopiesplit-window-sensibly
mit umgekehrten Präferenzen ist:Jetzt haben wir zwei Funktionen: das Original, das einen vertikalen Stapel "bevorzugt", und das neue, das einen horizontalen Stapel "bevorzugt".
Als nächstes brauchen wir eine Funktion, die diejenige bevorzugt, die wir lieber verwenden würden.
Sie müssen hier mit den Werten herumspielen, aber die Grundidee ist, dass wir eine vertikale Anordnung bevorzugen, wenn mindestens doppelt so viel Breite wie Höhe vorhanden ist. Sie könnten denken, Sie wollten es überall dort haben, wo das vorhandene Fenster breiter als hoch ist, aber meiner Erfahrung nach ist das nicht richtig und lässt Sie mit viel zu dünnen Fenstern enden.
Schließlich brauchen wir auch ein paar vernünftige Mindestanforderungen. Ich setze eine
split-height-threshold
von 4 (dh ich möchte nicht, wenn es nicht unvermeidlich ist, weniger als 2 Zeilen in einem Fenster zu haben) und einesplit-width-threshold
von 40 (dh ich möchte nicht, wenn es nicht unvermeidlich ist, weniger als 20 Zeichen im Durchmesser haben in einem Fenster) - zumindest denke ich, dass dies das ist, was diese bedeuten.Dann , eines nur bindet
split-window-preferred-function
ansplit-window-really-sensibly
Eine andere Idee (die Sie vielleicht bevorzugen) wäre, einfach die "Präferenz für Side-by-Side" -Anordnung zu ersetzen und
split-width-threshold
auf 80 zu setzen: Dann würden Sie Side-by-Side-Fenster erhalten, wenn Platz für sie vorhanden ist, denke ich.quelle
split-height/width-threshold
Werte auf ihrem Standard halten, sonst würde diepop-to-buffer
Funktion neue Teilungen erstellen, anstatt alte wiederzuverwenden. Ich bevorzuge eine einzelne Aufteilung von rechts nach links und möchte nicht, dass Emacs-Funktionen damit herumspielen.Sie können mein Paket verwenden
el-patch
, um die Funktion so zu implementierensplit-window-sensibly-prefer-horizontal
, dass deutlich wird, was sich gegenüber dem Original geändert hatsplit-window-sensibly
, und Sie können auch feststellen, ob sich die ursprüngliche Definition in einer zukünftigen Emacs-Version ändert:quelle
Ich habe diese Lösung in der Emacs- Mailingliste gefunden und sie wirkt Wunder:
Ein großes Lob an Alexander, den ursprünglichen Autor.
quelle