Сделать wmctrl игнорировать окна рабочего пространства, отличного от текущего

5

Я полагаюсь на wmctrl много, чтобы переключаться между окнами, в основном, чтобы не набирать alt-tab много раз. Я всегда использовал одно рабочее пространство, но теперь я хочу начать использовать более одного.

Мне было интересно, можно ли изменить контекст wmctrl, чтобы при вводе wmctrl -l отображались только окна из текущей рабочей области, а не все окна из всех рабочих областей.

Например, если у меня есть окно Firefox, открытое в рабочей области 1. У меня есть комбинация клавиш на ctrl+alt+f , которая выполняет wmctrl -a firefox , которая переключается на Firefox. Если я открою новое окно Firefox на рабочей области 2 и наберу ctrl+alt+f , он переключится на окно в рабочей области 1, что не то, что я хочу.

Любые предложения / идеи о том, как решить эту проблему?

EDIT : я использую compiz (Unity)

    
задан ivotron 30.09.2012 в 09:19
источник

1 ответ

5

Если вы используете Compiz (запустите wmctrl -m , если не уверены), wmctrl видит только 1 рабочий стол (второе поле wmctrl -l, т.е. 0), но вы можете использовать опцию geometry (-G), чтобы узнать, какое окно находится на том, что виртуальный рабочий стол. Все окна вашего текущего рабочего стола будут иметь x-позицию между 0 и шириной экрана. То же самое для y-позиции между 0 и высотой экрана. Таким образом, вы можете использовать что-то вроде этого

#!/bin/bash

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

NAME='Navigator.Firefox'

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

exit 0

Вы можете жестко кодировать ширину и высоту экрана, если хотите, и NAME, если вы хотите использовать однострочный. Я не уверен, как вы хотите обрабатывать несколько окон, соответствующих NAME. Это будет сосредоточено на всех.

Для metacity число компьютеров в Windows может быть найдено с помощью wmctrl -l и grepping второго поля.

    
ответ дан user55822 01.10.2012 в 17:10
источник