Ich verwende sr-speedbar mit Emacs und habe den Frame oft in 2-3 verschiedene Fenster aufgeteilt. Wenn ich auf eine Datei in sr-speedbar klicke, wird immer der neue Puffer im untersten Fenster geöffnet. Ich versuche, das Fenster ganz rechts unten als relativ kleinen Ansi-Term beizubehalten, und emacs besteht weiterhin darauf, neue Puffer im kleinen Termfenster zu öffnen, anstatt in dem viel größeren Bereich, den ich zum Bearbeiten von Puffern verwenden möchte.
Gibt es eine Möglichkeit, die Puffererstellungslogik so zu konfigurieren, dass höhere Fenster niedrigeren Fenstern vorgezogen werden?
Ich habe bereits versucht, mein unterstes Fenster zu nehmen und es als geschützt zu markieren, und das hat Emacs dazu gebracht, es in zwei unangemessen kleine Teile aufzuteilen. Dann habe ich versucht, die Fenstergröße zu aktivieren, und anstatt Emacs den Puffer über diesem Fenster öffnen zu lassen, habe ich nur den Fehler erhalten, dass das Fenster zu klein war, um geteilt zu werden. Gut, ich denke, dass es aufgehört hat, mein unterstes Fenster zu verstopfen, aber dumm, dass es mich davon abhält, stattdessen neue Puffer zu öffnen.
Im Idealfall möchte ich Emacs zwingen können, das Fenster ganz oben rechts für die Anzeige neu erstellter Puffer auszuwählen, und nicht versuchen, das Fenster ganz unten rechts zu teilen.
Antworten:
Ich gehe davon aus, dass Sie Emacs 24 verwenden. Ich habe diese Antwort in keiner früheren Version getestet und weiß nicht, wann das Konzept der dedizierten Fenster zu Emacs hinzugefügt wurde. Ich habe Erwähnungen seiner Verwendung gesehen, die aus dem Jahr 2011 stammen, daher gehe ich davon aus, dass Emacs 23 (zumindest) ebenfalls über die entsprechenden Funktionen verfügt.
Sie können verhindern, dass Emacs einen neuen Puffer in einem bestimmten Fenster öffnet, indem Sie das Fenster seinem Puffer zuweisen .
Im einfachsten Fall können Sie dies tun, indem Sie das Fenster auswählen, das Sie zuweisen möchten, sicherstellen, dass derzeit der Puffer angezeigt wird, dem Sie es zuweisen möchten, und dann ausführen
M-: (set-window-dedicated-p (selected-window) t)
. Dadurch wird verhindert, dass Emacs das so geänderte Fenster berücksichtigt, wenn entschieden wird, in welchem Fenster ein Puffer angezeigt werden soll. Um die Widmung zu entfernen, bewerten Sie denselben Ausdruck und ersetzen Sie das zweite Argument durchnil
.Sie können verhindern, dass Emacs versucht, ein Fenster zu teilen, in dem ein bestimmter Puffer angezeigt wird, wobei die pufferlokale Variable Fenstergröße auf einen Wert ungleich Null festgelegt wird.
Im einfachsten Fall können Sie dies tun, indem Sie das Fenster auswählen und ausführen
M-: (setq window-size-fixed t)
. Um nur die Höhe oder Breite von Fenstern festzulegen, in denen der Puffer angezeigt wird, bewerten Sie denselben Ausdruck, indem Sie ihn übergeben'height
oder'width
als zweites Argument verwenden. Um die Einschränkung aufzuheben, ersetzen Sie das zweite Argument durchnil
.Im allgemeinen Fall fand ich Ihr Problem interessant genug, um eine Lösung zu finden , die Sie in Ihren Ladepfad einfügen
(require)
und verwenden können:quelle
In den letzten Emacs-Versionen wurde die Option
display-buffer-alist
hinzugefügt. Es bietet eine fein abgestimmte Steuerung der Pufferanzeige, der verwendeten Fenster usw. Da Sie jedoch so viele Aufgaben ausführen können, ist es auch recht komplex und schwer zu beschreiben. Konsultieren Sie die Dokumentation :C-h v display-buffer-alist
.quelle