Comportamento inconsistente de “wmctrl -i -a WIN”

3

Estou tentando usar dmenu e wmctrl para escrever um script que me apresentará uma lista de todas as janelas abertas no momento e, em seguida, mude para a que eu selecionar. Parece algo assim:

Agora,estouusandoaiddajanelaquerecebodewmctrl-l(porexemplo,o"0x00c0005c" visível na captura de tela na segunda linha) para determinar exatamente qual janela foi selecionada (não estou usando a classe de janela porque 2 janelas pertencentes ao mesmo aplicativo terão a mesma classe, mas ids diferentes).

O único problema é: wmctrl -i -a funciona algumas vezes, mas não funciona outras vezes - e algumas vezes, muda, mas para a janela errada! É bastante aleatório. Depois de pesquisar on-line, a única página da Web que descobri que até mesmo menciona que o problema é este . Diz:

WIN as a numerical window ID doesn't seem to work consistently. Perhaps not all options support it or something crazy is going on. It used to work very well for me. Re-test.

Alguém pode me dizer como posso resolver ou contornar esse problema?

Estou usando a versão 1.07-3 de wmctrl dos repositórios oficiais em uma máquina Arch Linux atualizada e o Awesome Window Manager, se isso ajudar. Obrigado

    
por Vicky Chijwani 11.10.2012 / 04:13

1 resposta

1

Eu tenho a coisa trabalhando depois de brincar com isso hoje, mas eu não fui capaz de identificar qual era o problema quando eu tentei da última vez (eu mudei para o Linux Mint no intervalo; talvez isso tenha resolvido o problema de alguma forma.)

Este é o script de trabalho para qualquer pessoa interessada:

#!/bin/sh

# source dmenu config file if it exists
if [ -f $HOME/.dmenurc ]; then
    . $HOME/.dmenurc
else
    DMENU='dmenu -i'
fi

# get list of all windows, and their count
wmctrl_output=$(wmctrl -lx)
win_count=$(echo "$wmctrl_output" | wc -l)
# get rid of the hostname and the number in the 2nd column
hostname=$(uname -n)
win_list=$(echo "$wmctrl_output" | \
    sed -r -e 's/[^@]'$hostname'//' | \
    sed -r -e 's/ [0-9][0-9]? / /')

# select a window ($target) and extract its id ($target_id)
target=$(echo "$win_list" | $DMENU -l $win_count -p "Switch to: ")
target_id=$(echo "$target" | cut -d' ' -f1)

# switch to target window
cmd="wmctrl -i -a \"$target_id\""
eval "$cmd"

e meu ~/.dmenurc :

DMENU_FONT='-*-*-medium-r-*-*-18-*-*-*-*-*-*-*'
DMENU="dmenu -i -fn $DMENU_FONT -nb #1E2320 -nf #DBDBDB -sb #3f3f3f -sf #ffffff"

Tudo o que você precisa é colocar o script em algum lugar em seu $ PATH, torná-lo executável e vincular uma chave a ele.

    
por 14.06.2013 / 14:58