Traga todas as janelas do terminal aberto para frente usando um script

1

Estou tentando usar um script sugerido para uma resposta que fiz anteriormente, mas estou com dificuldades para trabalho.

O script deve trazer todas as instâncias de um programa (cujo nome é passado como argumento) para a frente.

Aqui está uma cópia do script:

#!/bin/bash

Program=$@

wmctrl -l | while read Window; do
    if [[ "$Window" == *"$Program"* ]]; then
        echo "DEBUG: I bring $Window"
        code='echo "$Window" | cut -f 1 -d " "'
        wmctrl -i -a $code
    fi
done

Eu adicionei um atalho de teclado nas preferências cujo comando é:

bash /home/michael/Scripts/bring-all-windows.bash  terminal

Funciona bem para outras aplicações como o gedit, mas não obtenho resposta quando o tento com terminal, terminal ou gnome-terminal.

Alguém sabe por que isso pode acontecer?

    
por TomSelleck 16.09.2013 / 14:12

1 resposta

2

O script da pergunta funciona perfeitamente, mas o problema está no título da janela do terminal que não contém a palavra (string) "Terminal". Para superar essa "inadequação", você tem três possibilidades:

  1. Faça a sua janela de terminal para conter a palavra "terminal". Para fazer isso, quando estiver no terminal, vá para Editar Preferências de perfil (ou pressione Alt + E e, em seguida, O ), selecione a guia Título e Comando e siga as instruções da imagem abaixo:

  2. Como eu vejo em esta imagem , o título da sua janela de terminal é o mesmo que o seu prompt de terminal. Portanto, o script funcionará como esperado se você executar o seguinte comando:

    /home/michael/Scripts/bring-all-windows.bash michael@michael

    (você não precisa prefixar o comando acima com bash ).

  3. Ou, talvez a melhor escolha, no script, combine com a identidade da janela e não com o título da janela:

    #!/bin/bash
    
    Program=" $(pidof $@) "
    
    wmctrl -lp | while read Window; do
        if [ "${Program/ 'echo "$Window" | cut -f 4 -d " "' }" != "$Program" ]; then
            echo "DEBUG: I bring $Window"
            code='echo "$Window" | cut -f 1 -d " "'
            wmctrl -i -a $code
        fi
    done
    

    Em seguida, execute o script usando o seguinte comando:

    /home/michael/Scripts/bring-all-windows.bash gnome-terminal
por Radu Rădeanu 17.09.2013 / 12:43