wmctrl ignora outras áreas de trabalho

5

Minha pergunta é muito parecida com Faz com que o wmctrl ignore janelas do espaço de trabalho que não sejam as atuais .

O fato é que eu uso o XFCE, então wmctrl realmente vê mais desktops.

petr@sova:~$ wmctrl -d
0  * DG: 1600x900  VP: 0,0  WA: 62,21 1538x879  1
1  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  2
2  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  3
3  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  4
4  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  5
5  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  6
6  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  7
7  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  8
8  - DG: 1600x900  VP: N/A  WA: 62,21 1538x879  9

Tenho toneladas de atalhos como este:

wmctrl -xa Chromium || chromium-browser

Como posso ter wmctrl apenas pesquisar no espaço de trabalho atual? Estou aberto para agrupar wmctrl em um comando personalizado.

    
por mreq 26.03.2013 / 10:00

1 resposta

7

Ok, eu criei meu próprio roteiro. Pelo menos eu aprendi alguns scripts bash do Ubuntu;)

#!/bin/bash
num='wmctrl -d | grep '\*' | cut -d' ' -f 1'
name='wmctrl -lx | grep  | grep " $num " | tail -1'
host='hostname'
out='echo ${name##*$host}'

if [[ -n "${out}" ]]
    then
        'wmctrl -a "$out"'
    else
        
fi

O que faz:

  1. obtém o número atual da área de trabalho
  2. procura na área de trabalho atual pelo nome fornecido (parâmetro um)
  3. depois, dependendo do resultado:

    • alterna para o aplicativo encontrado
    • ou lança o aplicativo fornecido (parâmetro dois)

Uso (esperando que o nome do script seja switch_to_app :

switch_to_app LookForThisString LaunchThisIfNotFound

por exemplo

switch_to_app Chromium chromium-browser

EDIT: versão mais impressionante - quando você iniciar o comando novamente (por exemplo, pressione o pressionamento de tecla novamente), ele muda para outra instância da janela

#!/bin/bash
app_name=
workspace_number='wmctrl -d | grep '\*' | cut -d' ' -f 1'
win_list='wmctrl -lx | grep $app_name | grep " $workspace_number " | awk '{print }''

active_win_id='xprop -root | grep '^_NET_ACTIVE_W' | awk -F'# 0x' '{print }' | awk -F', ' '{print }''
if [ "$active_win_id" == "0" ]; then
    active_win_id=""
fi

# get next window to focus on, removing id active
switch_to='echo $win_list | sed s/.*$active_win_id// | awk '{print }''
# if the current window is the last in the list ... take the first one
if [ "$switch_to" == "" ];then
    switch_to='echo $win_list | awk '{print }''
fi

if [[ -n "${switch_to}" ]]
    then
        (wmctrl -ia "$switch_to") &
    else
        if [[ -n "" ]]
            then
                () &
        fi
fi

exit 0
    
por mreq 27.03.2013 / 23:58