Ich verlasse mich sehr auf wmctrl, um zwischen Fenstern zu wechseln, im Grunde, um zu vermeiden, dass ich oft alt-tab tippe. Ich habe immer nur einen Arbeitsbereich verwendet, aber jetzt möchte ich mehr als einen verwenden.
Ich habe mich gefragt, ob es möglich ist, den Kontext von wmctrl so zu ändern, dass wenn ich wmctrl -l
eingebe , werden nur Fenster aus dem aktuellen Arbeitsbereich angezeigt, anstatt alle Fenster aus allen Arbeitsbereichen.
Angenommen, ich habe in Arbeitsbereich 1 ein Firefox-Fenster geöffnet. Ich habe eine Tastenkombination für ctrl+alt+f
der wmctrl -a firefox
ausführt , das zu Firefox wechselt. Wenn ich ein neues Firefox-Fenster auf Arbeitsbereich 2 öffne und ctrl+alt+f
eingebe , es wird auf das Fenster in Arbeitsbereich 1 umgeschaltet, was ich nicht möchte.
Irgendwelche Vorschläge/Ideen zur Lösung dieses Problems?
BEARBEITEN :Ich verwende compiz (Unity)
Akzeptierte Antwort:
Wenn Sie Compiz verwenden (führen Sie wmctrl -m
aus wenn Sie sich nicht sicher sind), sieht wmctrl nur 1 Desktop (2. Feld von wmctrl -l, dh 0), aber Sie können die Option geometry (-G) verwenden, um zu wissen, welches Fenster sich auf welchem virtuellen Desktop befindet. Alle Fenster auf Ihrem aktuellen Desktop haben eine x-Position zwischen 0 und der Breite Ihres Bildschirms. Gleiches gilt für die y-Position zwischen 0 und der Höhe Ihres Bildschirms.
Sie können also so etwas verwenden
#!/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
Sie können die Breite und Höhe Ihres Bildschirms fest codieren, wenn Sie möchten, und NAME, wenn Sie einen Einzeiler wünschen.
Ich bin mir nicht sicher, wie Sie mit mehreren Fenstern umgehen möchten, die mit NAME übereinstimmen. Das wird sie alle fokussieren.
Für Metacity kann die Anzahl der Desktop-Fenster mit wmctrl -l
gefunden werden und gruppieren Sie das 2. Feld.