Überblick über die Emacs-Fensterverwaltung
Ruf und Potenzial der Fensterverwaltung
- Die Fensterverwaltung von Emacs hat keinen guten Ruf
- Das liegt größtenteils daran, dass sie ein sehr flexibles und fein granular aufgebautes Layout-System mit grober Steuerung kombiniert
- Dadurch bleibt Raum, Werkzeuge zu entwickeln und zu nutzen, die bessere Metaphern und bessere Bedienmöglichkeiten für den Umgang mit Fenstern bieten
Grundlegende Optionen zur Fensterverwaltung
other-window und „nächstes Fenster“
other-window (C-x o) bietet die grundlegende Erfahrung zum Wechseln zwischen Fenstern
- Es wird im Emacs-Tutorial vermittelt und funktioniert gut, wenn es nur wenige Fenster gibt
- Die Fensterauswahl durchläuft den gesamten Frame (ungefähr) im Uhrzeigersinn
windmove
windmove ist eine integrierte Emacs-Bibliothek, um den Fokus abhängig von der Richtung zwischen Fenstern zu verschieben und Buffer zwischen Fenstern zu bewegen
- Das ist eine Funktion, die Vim-Nutzer erwarten, und
evil-mode-Nutzer verwenden Windmove in der Regel bereits
- Man verwendet es, indem man
windmove-left, -right, -up, -down auf Tasten bindet, die mit den Richtungen verknüpft sind
frames-only-mode
frames-only-mode erlaubt es, die Behandlung von Emacs-Fenstern dem Betriebssystem zu überlassen
- Wenn alle Buffer in neuen Frames geöffnet werden, wird das zur Aufgabe des Window-Managers
- Dadurch werden Emacs-Buffer im Grunde zu OS-Fenstern und können mit denselben Tasten verwaltet werden
winum-mode
- Winum ist die natürliche Weiterentwicklung des Aufwands, zwischen n Fenstern zu wechseln: von O(n) (
other-window) über O(√n) (windmove) zu O(1)
- Es fügt der Mode-Line Fensternummern hinzu, sodass Fenster per Nummer ausgewählt werden können
- Wenn der Minibuffer aktiv ist, wird ihm immer die Nummer 0 zugewiesen
ace-window
- ace-window ist die Königsklasse der tastaturbasierten Emacs-Fenstersteuerung
- Es platziert „Hinweise“ am oberen Rand jedes Fensters, und nach Eingabe der entsprechenden Taste wechselt der Fokus zu diesem Fenster
- Es „wählt“ Fenster auf allgemeine Weise aus, und der Nutzer entscheidet anschließend, was mit diesem Fenster geschehen soll
- Zusätzlich zu eingebauten Aktionen wie Fenster löschen, verschieben oder austauschen, teilen oder Buffer anzeigen lassen sich auch benutzerdefinierte Aktionen hinzufügen
Verwendung der Maus
- Die Vorteile der Maus für die Fensterverwaltung sind unmittelbar und offensichtlich
- Ein Fenster auszuwählen ist eine natürliche Erweiterung der grundlegenden Mausnutzung, und das Ändern der Fenstergröße ist einfach
- Kontextmenüs und Drag-and-Drop-Unterstützung sind sehr intuitiv
- Um die Nachteile abzumildern: Wenn die Maus ohnehin bereits für andere Aufgaben genutzt wird, ist die Bedienung von Emacs mit der Maus tatsächlich oft der Weg des geringsten Widerstands
transpose-frame (drehen, spiegeln und kippen)
- transpose-frame bietet Befehle, um das Fensterlayout in einem Frame zu drehen oder zu spiegeln
rotate-frame, flip-frame, flop-frame werden häufig verwendet, wenn sie auf passende Tasten gebunden sind
window-prefix-map
window-prefix-map ist standardmäßig an C-x w gebunden und bündelt einige nützliche Befehle zur Fensterverwaltung
split-root-window-right und split-root-window-below teilen das Root-Fenster eines Frames
tab-detach und tear-off-window sind praktische Befehle, um ein Fenster in einen neuen Tab oder einen neuen Frame zu verschieben
other-window-prefix
other-window-prefix bietet eine Möglichkeit, die Fensterauswahl von der Buffer-Anzeige zu entkoppeln, und löst drei Unannehmlichkeiten rund um Fenster
- Viele Emacs-Befehle koppeln Standardaktion, Buffer und Fenster eng miteinander. Mit
other-window-prefix kann der Buffer eines Befehls in einem anderen Fenster angezeigt werden
- Mit
other-window-prefix kann beim Aktivieren von Objekten wie Links das Ziel-Fenster ausgewählt werden
- Mit
other-window-prefix lassen sich „Link“-Objekte einheitlich öffnen, ohne sich an die Arbeitsweise jedes Paketautors anpassen oder sie anpassen zu müssen
Fensterkonfiguration speichern und wiederherstellen
window-configuration-to-register ist ein etwas stumpfes Werkzeug, aber perfekt als großer roter Reset-Knopf
- Mit diesem Befehl kann jederzeit die aktuelle Fensterkonfiguration in einem Register gespeichert und anschließend mit
jump-to-register wiederhergestellt werden
- Mit
winner-mode kann Emacs einen Stack früherer Fensteranordnungen verwalten
Tiefergehende Betrachtung
Vor und zurück wechseln
- Unabhängig davon, wie viele Fenster gleichzeitig offen sind, muss man in den meisten Fällen nur zwischen zwei Fenstern wechseln
- Mit dem Befehl
other-window-mru kann zwischen Fensterpaaren umgeschaltet werden
other-window verbessern
other-window kann so angepasst werden, dass es den Frame teilt, wenn nur ein einzelnes Fenster vorhanden ist
- Es kann Fenster nach der zuletzt erfolgten Nutzung statt nach räumlicher Reihenfolge durchlaufen (
switchy-window-Paket)
- Die Wechselfolge kann bei jedem Aufruf umgekehrt werden, sodass sich natürlich zwischen zwei Fenstern alternieren lässt
Fenstermagie mit ace-window-Dispatch nutzen
ace-window verhält sich zu Fenstern so, wie completing-read zu Listen von Strings
aw-select ist ideal für die ersten beiden der drei Schritte — Filtern und Auswählen — um jede Aktion auf jedes Fenster anzuwenden
- Mit
ace-window-one-command kann man per ace-window ein Fenster auswählen und dann jeden einfachen Befehl in diesem Fenster ausführen
ace-window-prefix ähnelt other-window-prefix, erlaubt aber die explizite Auswahl des Fensters, in dem der Buffer des nächsten Befehls angezeigt werden soll
Muss man überhaupt Fenster wechseln?
- Fensterunabhängige Navigation mit Avy ist ein Spezialfall einer allgemeineren Idee
- Fenster als Textcontainer könnten eine unnötige Abstraktion sein
mark-ring und global-mark-ring verfolgen besuchte Positionen, sodass man bei Bedarf fensterübergreifend navigieren kann
- Mit
point-to-register und jump-to-register lassen sich Positionen, zu denen man später springen möchte, manuell festhalten
- Das Erstellen und Anspringen von Lesezeichen bietet viele Möglichkeiten, fensterübergreifend zu bedeutungsvollen Positionen zu navigieren, die Emacs oder der Nutzer markiert haben
Fenster behandeln, ohne mit Fenstern zu interagieren
- Mit
display-buffer-alist und automatischem Fensterverhalten lässt sich das Problem der Whac-A-Mole-Fenster lösen
- Wenn Regeln für alle Buffer-Typen festgelegt werden, die man täglich in Emacs sieht, ist der Großteil der Fensterverwaltung bereits gelöst
- Das Problem von
display-buffer-alist ist nicht, dass es nicht funktioniert, sondern dass es viel Arbeit erfordert
- Das Paket Shackle überdeckt die Eigenheiten von
display-buffer-alist und bietet eine vereinfachte Elisp-Schnittstelle zum Festlegen von Fensterregeln
- Emacs-Distributionen bieten in der Regel einfache Oberflächen, um solche Einstellungen festzulegen
Popper, Popwin, shell-pop und vterm-toggle
- Popwin und Popper basieren auf der Beobachtung, dass nicht alle Buffer gleich sind
- Mit diesen Paketen können Popup-Buffer definiert werden, die Hilfsfenster verwenden und bei Bedarf ein- und ausgeblendet werden können
Was fehlt
window-tree
- Es gibt einen grundlegenden Unterschied zwischen der Art, wie Emacs Fenster intern darstellt, und der Art, wie Fenster mit den oben diskutierten Ansätzen manipuliert werden
- Die Fenster eines Frames sind als Baum organisiert; die Blattknoten sind die „echten“ Fenster, der Rest sind „interne“ Fenster
- Das Hinzufügen von Befehlen für Operationen auf dem Fensterbaum würde viele neue Möglichkeiten eröffnen
Integrator für Tiling-Window-Manager
- Das Fensterbaum-Modell von Emacs ist nahezu identisch mit dem Modell manueller Tiling-Window-Manager wie i3 oder bspwm
- Dadurch stellt sich ganz natürlich die Frage, warum man einen weiteren Tiling-Window-Manager innerhalb eines Tiling-Window-Managers verwenden sollte
- Eine sauberere und einheitlichere Schnittstelle in Emacs zur Integration mit beliebigen Window-Managern könnte vieles deutlich einfacher machen
Ausblick
- Es gibt viele Möglichkeiten, Fenster zu wechseln, zu bewegen, zu überspringen, zu erzeugen, zu löschen und zu manipulieren, verschiedene Methoden, die Fensteranzeige beim Aufruf von Befehlen spontan zu steuern, Wege, in Fenstern zu arbeiten, und sogar Wege, überhaupt nicht über Fenster nachzudenken
- Fensterverwaltung ist weniger kompliziert als vielmehr offen
- Emacs liefert die Zutaten und einige Hinweise, und die Zutaten können für sich genommen bereits als einfache Mahlzeit dienen
- Mit ein wenig Zubereitung lässt sich daraus jedoch etwas Köstliches machen
Meinung von GN⁺
- Die Fensterverwaltung ist eine der größten Schwächen von Emacs und nicht benutzerfreundlich. Besonders für Einsteiger kann sie verwirrend sein.
- Die vorgestellten Methoden können die Probleme der Emacs-Fensterverwaltung abmildern, stellen aber keine grundlegende Lösung dar. Es braucht ein intuitiveres und leichter nutzbares System zur Fensterverwaltung.
- Die Fensterverwaltung von Emacs ist sehr u
1 Kommentare
Hacker-News-Kommentare
Im Folgenden eine Zusammenfassung der Kommentare auf Hacker News:
ace-window,ace-window-display-modeundframes-only-modeauszuprobieren.windmove-modezu aktivieren und mit(windmove-default-keybindings 'control)die Fensterbewegung per Strg+Pfeiltasten zu ermöglichen.zygosporenach dem Schließen eines Fensters mitC-x 1durch erneutes Drücken vonC-x 1das vorherige Fensterlayout wiederherstellen kann.hledger-balance-sheetdie Journal-Datei links geöffnet halten lässt, während das Ergebnis rechts in einer auf 30 % geteilten Ansicht angezeigt wird.