Ich suche nach einer Möglichkeit, einer vorhandenen (geteilten) Fensterkonfiguration eine neue Fensteraufteilung in voller Höhe hinzuzufügen. Da ich nicht weiß, wie ich es richtig erklären soll, werde ich nur einige ASCII-Grafiken veröffentlichen, die das gewünschte Verhalten für zwei Beispielfensterkonfigurationen zeigen:
from to +-------------------------+ +---------------------+---+ | | | | | | | | | | | A | => | A | E | | | | | | | | | | | +-------------------------+ +---------------------+---+ +------------+------------+ +----------+----------+---+ | | B | | | B | | | A +------------+ | A +----------+ | | | C | => | | C | E | +------------+------------+ +----------+----------+ | | D | | D | | +-------------------------+ +---------------------+---+
wo übernimmt die Funktion die gewünschte Breite des neuen Fensters E
und schrumpft die Breiten A
, B
, C
, und sich D
entsprechend. Bearbeiten2 : Beachten Sie, dass die beiden obigen Zeichnungen Beispiele für das erwartete Verhalten für einen konkreten Fall sind. Ich suche nach einer allgemeinen Funktion, die dies unabhängig von der Konfiguration in der from- Spalte ausführt (dh die Anzahl der Fenster [Teilungen] in der from-Spalte sollte beliebig sein).
Ich suche diese Funktionalität auch auf der linken Seite und oben und unten in einem Rahmen.
Bearbeiten: Aus @ Nsukamis Kommentar wurde mir klar, dass die Funktionalität, die ich suche, ein Sonderfall eines abstrakteren Problems ist. Also werde ich dieses Problem formulieren:
Wie speichert man eine Fensterkonfiguration (bestehend aus einer beliebigen Anzahl von Fenstern und Puffern) und "fügt" die gespeicherte Konfiguration in ein vorhandenes Fenster ein?
Das "Einfügen" sollte dann die relativen Fenstergrößen und die Aufteilung beibehalten; Natürlich ist die resultierende eingefügte Konfiguration eine skalierte Kopie.
split-window-right
as übergeben wirdC-u -width C-x 3
. Ändern Sie daswidth
zu was Sie wollen und notieren Sie das negative Vorzeichen.A
,B
,C
, undD
) und dann Einsatz dieses Layouts in ein neues Fenster? Dann könnte mein Problem gelöst werden, indem 1) die aktuelle Fensterkonfiguration gespeichert wird, 2) das Layout so geändert wird, dass nur ein Fenster angezeigt wird, das dann horizontal geteilt wird [im Wesentlichen das Fenster fürE
und das Platzhalterfenster für die anderen bilden, nennen wir esZ
], 3 ) Endlich Einfügen des ursprünglichen Layouts in das linke Fenster (Z
)Antworten:
Die folgende Funktion sollte tun, was Sie wollen. Der Trick besteht darin, das Stammfenster des aktuellen Frames zu teilen.
Rufen Sie die Funktion mit der Richtung auf, in die Sie das Fenster und die Größe des neuen Fensters teilen möchten. Das obige gibt das neu erstellte Fenster zurück. Das Konzept sowie die Fenster und Rahmen werden im GNU Emacs Lisp-Referenzhandbuch sehr gut erklärt .
quelle
Ich bin mir nicht sicher, ob die beste Lösung, da sie nicht ausreichend abstrahiert ist, tatsächlich nur einen Anwendungsfall löst. Der Trick besteht darin, eine Funktion zu schreiben, um von layoutX zu layoutY zu wechseln, und eine andere, um von layoutY zu layoutX zu wechseln
Ich hoffe, dass diese Lösung helfen wird
Ich habe gerade ein Paket mit dem Namen layout.el gefunden . Ich habe es noch nie verwendet, aber es scheint das zu sein, wonach Sie suchen. Sie werden uns sagen, ob es in Ordnung ist.
BEARBEITEN:
Wenn Sie versuchen, eine allgemeinere Lösung zu finden, können Sie anscheinend
M-x switch-to-buffer-other-frame
von einem Puffer in einem Frame, beispielsweise mit einem Layout X, zu einem anderen Puffer in einem anderen Frame mit einem Layout Y wechseln.Sie können sich auch in einem Layout X befinden, dieses Layout in einem Register speichern
C-x r f
(Frame-Konfiguration-zu-Register), zu einem anderen Layout wechseln und bei Bedarf zum vorherigen zurückschalten und das, was sich im Register befindet, aufrufenC-x r j
(jump- zu registrieren)quelle
layout.el
geschieht Folgendeswinner
: (erneutes) Speichern der Fensterkonfiguration des gesamten Frames, nicht Speichern der vollständigen Konfiguration und Wiederherstellen in einem vorhandenen Fenster. Die Funktion, die Sie andererseits geschrieben haben, sind in der Tat nicht die allgemeinen Lösungen, nach denen ich suche. Sie lösen mein zweites Beispiel, das nicht als konkretes Problem gedacht war, sondern nur als Beispiel. Ich suche nach einer Lösung, die im allgemeinen Fall funktioniert.switch-to-buffer-other-frame
wenn 'von' ein Rahmen und 'bis' ein anderer Rahmen ist