Wie implementieren Sie das Layout beim Autostart von Anwendungen im i3 Window Manager?

23

Dies ist eine Fortsetzung einer vorherigen Frage zum automatischen Starten von Anwendungen in einzelnen Arbeitsbereichen mit dem i3- Fenstermanager und zu den in der ~/.i3/configKonfigurationsdatei möglichen und nicht möglichen Aktionen .

Zunächst die bereitgestellte Lösung, die auf Arch Linux- Dokumentation und einem von op bereitgestellten Update basiert, bei dem er die Logik weiter vorantreibt:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

Interessant ist auch dieser Austausch über die Nutzung eines Teils davon direkt in der Befehlszeile, ohne Folgendes zu duplizieren:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

Ich habe jedoch noch nie eine Konfiguration gesehen, die viele Fenster / Apps in jedem Arbeitsbereich entsprechend einem gewünschten vertikalen oder horizontalen Layout automatisch startet. Mein Ziel ist es, diese einfache Konfiguration, die ich verwende, automatisch zu starten:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

Also fängt es in der configDatei so an:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

Aber wie um alles in der Welt erreichen Sie die gewünschte Art von Layout und vertikaler / horizontaler Aufteilung? Ich versuche es, aber es ist nicht klar, wie Sie Ausführung und Layout "mischen". Die Syntax fühlt sich beim Starten eigenartig an, da Sie i3-imginnerhalb der i3-Konfiguration ausgeführt werden. Verwenden Sie split h(oder v) - layout split v- exec layout split v- focus down(oder rechts) zwischen jedem execAnruf?

Für einen einzelnen Arbeitsbereich startet die Konfiguration alle Anwendungen entweder vertikal oder horizontal und ich kann das Layout anscheinend nicht beeinflussen - oder der letzte splitBefehl in der Kette entscheidet, ob die Fenster vertikal oder horizontal hinzugefügt werden. i3-msgIgnoriert scheinbar Teile des Befehls, die in einigen Fällen nicht richtig formatiert sind, sodass das Debuggen schwierig ist. Dies wird durch die Tatsache noch verstärkt, dass Sie X wirklich startxjedes Mal beenden müssen, um die Ergebnisse zu überprüfen, da das Aktualisieren der Konfiguration mit mod+shift+Rnicht zu einer Kürzung führt, selbst wenn Sie alle Arbeitsbereiche schließen.

Wie kann man das richtig konfigurieren? Hat jemand eine Lösung, die so etwas umsetzt? Die Dokumentation ist ziemlich gut, aber es ist nicht vorgesehen, dass ich ein detailliertes Beispiel sehe, das Ausführung und Layout auf mehreren Arbeitsbereichen mischt.

Gemeinschaft
quelle
Erweitert auch dies .
Man muss nicht FF oder urxvt verwenden, um eine Lösung bereitzustellen. Soweit ich weiß, sind diese Programme nichts Besonderes, sodass jemand Layout 2 mit beliebigen Programmen reproduzieren, eine JSON-Datei speichern, entfernen, prüfen kann, ob sie beim Anmelden über die Konfigurationsdatei gestartet werden kann, und dann einfach die Programmnamen ändern kann vor dem Absenden einer Antwort ...
Kannst du das Teil in deiner i3-Datei in Kombination mit dem gespeicherten / wiederhergestellten json-Layout bitte hochladen? Ich habe das gleiche Problem .. aber nicht zum Laufen bringen. Verwenden Sie in Ihrer config / json-Datei Mehrfachanzeigen?

Antworten:

11

Ich glaube, Sie suchen nach der neuen Funktion zum Speichern von Layouts , die in i3 v4.8 (15.06.2014) eingeführt wurde. Die verknüpfte Dokumentation scheint ziemlich gründlich zu sein.

Zitat aus der Dokumentation:

Durch Speichern / Wiederherstellen des Layouts können Sie eine JSON-Layoutdatei laden, sodass Sie ein Basislayout haben, mit dem Sie nach dem Einschalten Ihres Computers arbeiten können. Denken Sie auch an dynamische Anwendungsfälle: Wenn Sie häufig (aber nicht immer!) Ein Grid-Layout von Terminals mit Ping- / Traceroute-Befehlen benötigen, um Netzwerkprobleme zu diagnostizieren, können Sie das Öffnen dieser Fenster im richtigen Layout ganz einfach automatisieren.

... und die Release Notes :

tl; dr: Exportiere 1 dein aktuelles Layout als JSON-Datei, lade es in neue i3-Sitzungen und erhalte Platzhalterfenster, die durch die tatsächlichen Apps ersetzt werden, sobald du sie startest.


1. Sie benötigen möglicherweise die Pakete perl-anyevent-i3 und perl-json-xs , um das i3-save-treeDienstprogramm zu verwenden.

damien
quelle
3
Die Layout-Funktion ist überraschend schwierig zu bedienen. Ihr Konzept eines Platzhalterfensters, das Apps "verschluckt", bedeutet, dass Sie, wenn Sie mehrmals die gleiche App wie lxterminaloder urxvtfür einen einzelnen Arbeitsbereich möchten , diese unterscheiden müssen, --name somethingwenn Sie sie in .i3 / config ausführen. Das Beispiel in der Dokumentation funktioniert, aber wenn ich einen Export aus einem meiner Arbeitsbereiche verwende, scheint es nicht zu funktionieren. Sie verwenden class für den Namen und die Instanz für das, was Sie mit --name verwendet haben. In diesem Fall kann ich nur ernsthaft auf ein GUI-Tool hoffen, da das JSON- Format so viele Klammern enthält !!
1
Ich habe jetzt auf 4.8 aktualisiert und bin ziemlich zufrieden mit dieser neuen Funktion. Ich hatte .i3/configauch bei früheren Versionen immer Probleme, die Dinge beim Anmelden zuverlässig zu starten , aber sobald ich richtig angemeldet bin, funktioniert alles einwandfrei. Was ich getan habe, ist, ein paar Layouts anzuordnen und sie zu speichern und dann nur die Klassenvariablen der JSON-Dateien zu bearbeiten. Dann sollte sowas wie i3-msg workspace 2\; append_layout mylayout.json\;und dann i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditdein erstes gewünschtes Layout wiederherstellen. // Danke, dass du meine Antwort verbessert hast, übrigens.
Damien