Come si implementa il layout con l'avvio automatico delle applicazioni nel gestore di finestre i3?


23

Questo è il seguito di una domanda precedente su come avviare automaticamente le applicazioni in singole aree di lavoro con il gestore di finestre i3 e cosa può e non può essere fatto all'interno del ~/.i3/configfile di configurazione.

Innanzitutto, la soluzione fornita basata sulla documentazione di Arch Linux e un aggiornamento fornito da op dove spinge ulteriormente la logica:

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'

Inoltre è interessante questo scambio sull'utilizzo di parte di quello direttamente sulla riga di comando senza duplicare:

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

Ma non ho mai visto una configurazione che avvii automaticamente molte finestre / app in ogni area di lavoro in base al layout verticale o orizzontale desiderato. Il mio obiettivo è quello di avviare automaticamente questa semplice configurazione che utilizzo:

 _____ _____     ___________     ___________
| 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

Quindi inizia con qualcosa di simile nel configfile:

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'

Ma come si fa a ottenere il tipo di layout e la divisione verticale / orizzontale che si desidera? Ci sto provando, ma non è chiaro come "mischi" l'esecuzione e il layout. La sintassi sembra idiosincratica da avviare perché stai eseguendo i3-imgall'interno della configurazione di i3. Usi split h(o v) - layout split v- exec layout split v- focus down(o destra) tra una execchiamata e l'altra ??

Per un singolo spazio di lavoro, la configurazione avvia tutte le applicazioni in verticale o in orizzontale e non riesco a influenzare il layout - o l'ultimo splitcomando nella catena decide se le finestre vengono aggiunte in verticale o in orizzontale. i3-msgapparentemente ignora parti del comando che non sono formattate correttamente in alcuni casi, quindi è difficile eseguire il debug. Ciò è ulteriormente aggravato dal fatto che è davvero necessario uscire da X e di startxnuovo ogni volta per verificare i risultati poiché il solo aggiornamento della configurazione mod+shift+Rnon lo taglierà anche se si chiude tutto su ciascuna delle aree di lavoro.

Qual è il modo corretto di configurarlo? Qualcuno ha una soluzione che implementa qualcosa del genere? La documentazione è abbastanza buona, ma non mi fornisce un esempio dettagliato che combina l'esecuzione e il layout su più aree di lavoro.


Si espande anche su questo .

Non è necessario utilizzare FF o urxvt per fornire una soluzione. Per quanto ne so, non c'è nulla di speciale in quei programmi, quindi qualcuno potrebbe riprodurre il layout n. 2 con qualunque programma, salvare un file json, rimuoverlo, vedere se può essere avviato dal file di configurazione all'accesso, quindi semplicemente cambiare i nomi dei programmi prima di inviare una risposta ...

puoi caricare la parte nel tuo file i3 in combinazione con il layout json salvato / ripristinato per favore? Ho lo stesso problema .. ma non farlo funzionare. Usi display multipli nel tuo file config / json?

Risposte:


11

Credo che tu stia cercando la nuova funzionalità di salvataggio del layout introdotta in i3 v4.8 (2014-06-15). La documentazione collegata sembra abbastanza approfondita.

Citando dalla documentazione:

Il salvataggio / ripristino del layout consente di caricare un file di layout JSON in modo da poter disporre di un layout di base con cui iniziare a lavorare dopo aver acceso il computer. Vengono anche in mente casi d'uso dinamici: se spesso (ma non sempre!) È necessario un layout a griglia di terminali con comandi ping / traceroute per diagnosticare problemi di rete, è possibile automatizzare facilmente l'apertura di queste finestre nel layout giusto.

... e le note di rilascio :

tl; dr: esporta 1 il tuo layout attuale come file JSON, caricalo in nuove sessioni i3, ottieni finestre segnaposto che verranno sostituite dalle app effettive una volta avviate.


1. Potresti richiedere i pacchetti perl-anyevent-i3 e perl-json-xs per usare l' i3-save-treeutilità.


3
La funzionalità di layout è sorprendentemente impegnativa da usare. Il loro concetto di finestra segnaposto che "ingoia" le app significa che se si desidera molte volte la stessa app lxterminalo urxvtper un singolo spazio di lavoro, è necessario differenziarle utilizzando --name somethingquando le si esegue in .i3 / config. L'esempio nel documento funziona ma quando uso un'esportazione da una delle mie aree di lavoro non riesco a farlo funzionare. Usi la classe per il nome e l' istanza per quello che hai usato con --name. In questo caso posso solo sperare seriamente in uno strumento gui, dato che il formato json ha così tante parentesi !!

1
Ora ho aggiornato a 4.8 e sono abbastanza contento di questa nuova funzionalità. Ho sempre avuto dei problemi con l'avvio delle cose in modo affidabile all'accesso .i3/configanche con le versioni precedenti, ma una volta effettuato l'accesso correttamente, tutto funziona bene. Quello che ho fatto è stato organizzare alcuni layout e salvarli, quindi modificare solo le variabili di classe dei file json. Quindi qualcosa di simile i3-msg workspace 2\; append_layout mylayout.json\;e quindi i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditdovrebbe ripristinare il primo layout desiderato. // Grazie per aver migliorato la mia risposta, tra l'altro.
Damiano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.