Comment implémentez-vous la mise en page avec le démarrage automatique des applications dans le gestionnaire de fenêtres i3?

23

Il s'agit d'un suivi d'une question précédente sur la façon de démarrer automatiquement des applications sur des espaces de travail individuels avec le gestionnaire de fenêtres i3 et ce qui peut et ne peut pas être fait à l'intérieur du ~/.i3/configfichier de configuration.

Tout d'abord, la solution fournie basée sur la documentation Arch Linux et une mise à jour fournie par op où il pousse la logique plus loin:

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'

Cet échange est également intéressant pour tirer parti de certains de ces éléments directement sur la ligne de commande sans les dupliquer:

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

Mais je n'ai jamais vu de configuration qui démarre automatiquement de nombreuses fenêtres / applications dans chaque espace de travail selon une disposition verticale ou horizontale souhaitée. Mon objectif est de démarrer automatiquement cette configuration simple que j'utilise:

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

Cela commence donc par quelque chose comme ça dans le configfichier:

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'

Mais comment dans le monde obtenez-vous le type de mise en page et de séparation vert / horizontal que vous souhaitez? J'essaye, mais il n'est pas clair comment vous "mélangez" l'exécution et la disposition. La syntaxe semble idiosyncratique pour démarrer car vous exécutez i3-imgdans la configuration d'i3. Utilisez-vous split h(ou v) - layout split v- exec layout split v- focus down(ou à droite) entre chaque execappel ??

Pour un seul espace de travail, la configuration démarre toutes les applications verticalement ou horizontalement et je n'arrive pas à influencer la disposition - ou la dernière splitcommande de la chaîne décide si les fenêtres sont ajoutées verticalement ou horizontalement. i3-msgignore apparemment les parties de la commande qui ne sont pas correctement formatées dans certains cas, il est donc difficile de déboguer. Ceci est encore aggravé par le fait que vous devez vraiment quitter X et startxà chaque fois pour vérifier les résultats, car l'actualisation de la configuration mod+shift+Rne la coupera pas même si vous fermez tout sur chacun des espaces de travail.

Quelle est la bonne façon de configurer cela? Quelqu'un at-il une solution qui implémente quelque chose comme ça? La documentation est assez bonne mais elle ne fournit pas que je puisse voir un exemple détaillé qui mélange l'exécution et la mise en page sur plusieurs espaces de travail.

Communauté
la source
Développe également à ce sujet .
Il n'est pas nécessaire d'utiliser FF ou urxvt pour fournir une solution. Autant que je sache, ces programmes n'ont rien de spécial pour que quelqu'un puisse reproduire la disposition # 2 avec n'importe quel programme, enregistrer un fichier json, le supprimer, voir s'il peut être lancé à partir du fichier de configuration lors de la connexion, puis simplement changer les noms de programme avant de soumettre une réponse ...
pouvez-vous télécharger la pièce dans votre fichier i3 en combinaison avec la disposition json enregistrée / restaurée, s'il vous plaît? J'ai le même problème .. mais ne le faites pas fonctionner. Utilisez-vous des affichages multiples dans votre fichier config / json?

Réponses:

11

Je pense que vous recherchez la nouvelle fonctionnalité d'économie de mise en page qui a été introduite dans i3 v4.8 (2014-06-15). La documentation liée semble assez complète.

Citant de la documentation:

La sauvegarde / restauration de la mise en page vous permet de charger un fichier de mise en page JSON afin que vous puissiez avoir une mise en page de base pour commencer à travailler après avoir allumé votre ordinateur. Des cas d'utilisation dynamiques viennent également à l'esprit: si vous avez souvent (mais pas toujours!) Une disposition de grille de terminaux avec des commandes ping / traceroute pour diagnostiquer les problèmes de réseau, vous pouvez facilement automatiser l'ouverture de ces fenêtres dans la bonne disposition.

... et les notes de version :

tl; dr: exportez 1 votre disposition actuelle en tant que fichier JSON, chargez-la dans de nouvelles sessions i3, obtenez des fenêtres d'espace réservé qui seront remplacées par les applications réelles une fois que vous les aurez démarrées.


1. Vous pouvez avoir besoin des packages perl-anyevent-i3 et perl-json-xs pour utiliser l' i3-save-treeutilitaire.

damien
la source
3
La fonctionnalité de mise en page est étonnamment difficile à utiliser. Leur concept de fenêtre d'espace réservé qui "avale" les applications signifie que si vous voulez plusieurs fois la même application comme lxterminalou urxvtpour un seul espace de travail, vous devez les différencier en les utilisant --name somethinglorsque vous les exécutez dans .i3 / config. L'exemple dans la doc fonctionne mais lorsque j'utilise une exportation depuis l'un de mes espaces de travail, je n'arrive pas à le faire fonctionner. Vous utilisez classe pour le nom et l' instance pour ce que vous avez utilisé avec --name. Dans ce cas, je ne peux qu'espérer sérieusement un outil gui, car le format json a tellement de crochets !!
1
J'ai maintenant mis à jour à 4.8 et je suis assez content de cette nouvelle fonctionnalité. J'ai toujours eu du mal à démarrer les choses de manière fiable lors de la connexion à partir .i3/configdes versions antérieures également, mais une fois que je suis correctement connecté, tout fonctionne bien. Ce que j'ai fait, c'est d'organiser quelques dispositions et de les enregistrer, puis de ne modifier que les variables de classe des fichiers json. Ensuite, quelque chose comme i3-msg workspace 2\; append_layout mylayout.json\;et i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditdevrait alors restaurer votre première mise en page souhaitée. // Merci d'avoir amélioré ma réponse, btw.
damien