Я очень полагаюсь на wmctrl для переключения между окнами, в основном, чтобы избежать многократного ввода alt-tab. Я всегда использовал одно рабочее пространство, но теперь я хочу начать использовать более одного.
Мне было интересно, можно ли изменить контекст wmctrl, чтобы при вводе wmctrl -l
отображались только окна из текущего рабочего пространства, а не все окна из всех рабочих пространств.
Например, при условии, что у меня открыто окно Firefox в рабочей области 1. У меня есть комбинация клавиш на ctrl+alt+f
, которая выполняет wmctrl -a firefox
, которая переключается на Firefox. Если я открою новое окно Firefox в рабочей области 2 и наберу ctrl+alt+f
, оно переключится на окно в рабочей области 1, что мне не нужно.
Любые предложения / идеи о том, как решить эту проблему?
РЕДАКТИРОВАТЬ : я использую compiz (Unity)
Если вы используете Compiz (запустите wmctrl -m
, если не уверены), wmctrl видит только 1 рабочий стол (2-е поле wmctrl -l, т.е. 0), но вы можете использовать опцию geometry (-G), чтобы узнать, какое окно есть на каком виртуальном десктопе. Все окна на вашем текущем рабочем столе будут иметь х-позицию между 0 и шириной вашего экрана. То же самое для y-позиции между 0 и высотой вашего экрана. Таким образом, вы можете использовать что-то подобное
#!/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
Вы можете жестко указать ширину и высоту экрана, если хотите, и ИМЯ, если вы хотите использовать одну строку. Я не уверен, как вы хотите обрабатывать несколько окон, соответствующих NAME. Это сфокусирует их всех.
Для метасити число окон рабочего стола можно найти, используя wmctrl -l
и добавив второе поле.