Faz com que o wmctrl ignore janelas do espaço de trabalho que não sejam as atuais

5

Eu confio muito no wmctrl para alternar entre janelas, basicamente para evitar digitar alt-tab várias vezes. Eu sempre usei um espaço de trabalho, mas agora quero começar a usar mais de um.

Eu queria saber se é possível modificar o contexto do wmctrl para que, quando eu digitar wmctrl -l , apenas janelas da área de trabalho atual sejam mostradas, em vez de todas as janelas de todas as áreas de trabalho.

Por exemplo, supondo que eu tenha uma janela do Firefox aberta na área de trabalho 1. Eu tenho um atalho de teclado em ctrl+alt+f que executa wmctrl -a firefox , que alterna para o Firefox. Se eu abrir uma nova janela do Firefox na área de trabalho 2 e digitar ctrl+alt+f , ela mudará para a janela na área de trabalho 1, que não é o que eu quero.

Alguma sugestão / ideia de como resolver isso?

EDITAR : estou usando o compiz (Unity)

    
por ivotron 30.09.2012 / 09:19

1 resposta

5

Se você estiver usando o Compiz (execute wmctrl -m se não tiver certeza), o wmctrl só verá 1 desktop (2º campo de wmctrl -l, ie 0) mas você pode usar a opção geometry (-G) para saber qual janela está em que área de trabalho virtual. Todas as janelas na sua área de trabalho atual terão uma posição x entre 0 e a largura da sua tela. O mesmo para a posição y entre 0 e a altura da sua tela. Então você pode usar algo assim

#!/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

Você pode codificar a largura e a altura de sua tela, se quiser, e NAME se quiser uma linha única. Não tenho certeza de como você deseja lidar com várias janelas correspondentes a NAME. Isso irá focar todos eles.

Para o metacity, o número da área de trabalho do Windows pode ser encontrado usando wmctrl -l e grepping o segundo campo.

    
por user55822 01.10.2012 / 17:10