web-dev-qa-db-fra.com

Faire en sorte que wmctrl ignore les fenêtres de l'espace de travail autre que l'actuel

Je compte beaucoup sur wmctrl pour passer d’une fenêtre à l’autre, mais surtout pour éviter de saisir plusieurs fois alt-tab. J'ai toujours utilisé un seul espace de travail mais je souhaite maintenant en utiliser plusieurs.

Je me demandais s'il était possible de modifier le contexte de wmctrl afin que, lorsque je tape wmctrl -l, seules les fenêtres de l'espace de travail actuel soient affichées, au lieu de toutes les fenêtres de tous les espaces de travail.

Par exemple, supposons qu'une fenêtre Firefox soit ouverte dans l'espace de travail 1. J'ai un raccourci clavier sur ctrl+alt+f qui exécute wmctrl -a firefox, qui bascule vers Firefox. Si j'ouvre une nouvelle fenêtre Firefox sur l'espace de travail 2 et que je tape ctrl+alt+f, il basculera dans la fenêtre de l'espace de travail 1, ce qui n'est pas ce que je veux.

Des suggestions/idées sur la façon de résoudre ce problème?

EDIT: J'utilise compiz (Unity)

5
ivotron

Si vous utilisez Compiz (exécutez wmctrl -m si vous n’êtes pas sûr), wmctrl ne voit qu’un bureau (le second champ de wmctrl -l, c’est-à-dire 0), mais vous pouvez utiliser l’option geometry (-G) pour savoir quelle fenêtre est sur quel bureau virtuel. Toutes les fenêtres de votre bureau actuel auront une position x comprise entre 0 et la largeur de votre écran. Même chose pour la position y comprise entre 0 et la hauteur de votre écran. Donc, vous pouvez utiliser quelque chose comme ça

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME='Navigator.Firefox'

wmctrl -xlG | awk -v W="$SCREEN_W" -v H="$SCREEN_H" -v NAME="$NAME" '$7==NAME && $3>=0 && $3<W && $4>=0 && $4<H {print $1}' | while read WINS; do wmctrl -ia "$WINS"; done

exit 0

Vous pouvez coder en dur la largeur et la hauteur de votre écran si vous voulez, et NOM si vous voulez une ligne. Je ne sais pas comment vous voulez gérer plusieurs fenêtres correspondant à NAME. Cela les concentrera tous.

Pour plus de précision, le nombre de fenêtres sur le bureau peut être trouvé en utilisant wmctrl -l et en mettant le deuxième champ en vert.

5
user55822