Atalho para trazer todos os terminais abertos para a frente

17

Depois de navegar para uma página da web ou editor, existe alguma maneira de trazer todos os terminais abertos de volta para a frente em suas posições originais? É um pouco doloroso clicar no ícone do terminal e trazer cada um de volta individualmente.

Obrigado!

Exemplo:

  • Pré-atalho:

Atalho de pré-imagem


  • Pós-atalho:

Atalho pós-imagem

Tom Selleck
fonte
1
Com uma pergunta muito interessante, você pode achar útil esta resposta para uma pergunta não relacionada - o programa devilspie pode ser relevante para esse problema se não houver uma ferramenta GUI existente.
Evilsoup 16/09
Para o arquivo morto : gist.github.com/psi-4ward/18c3a596d28a3cfa772101af755545df Um script que respeita aplicativos usados ​​recentemente
Psi

Respostas:

9

Você pode pressionar Alt+ Tabpara alternar entre janelas e Alt+ Shift+ Tabpara alternar entre janelas. Esse atalho foi criado para funcionar em quase todos os sistemas operacionais gráficos. Você também pode usar as teclas de seta Super+ We para a mesma finalidade.

Depois de colocar uma janela do terminal na frente, pressione Alt+ ~para trazer todas as outras janelas do terminal uma por uma:

mudar para o windows


Para trazer automaticamente todos os terminais abertos na frente (não um por um, como eu descrevi antes) você precisará adicionar um atalho de teclado para o seguinte script (roteiro retirado Adobe 's resposta e melhor considerando que versão do script não funcionou para mim):

#!/bin/bash

if [ $# -ne 1 ];then
  echo -e "Usage: `basename $0` PROGRAM_NAME\n
           For example:\n\t
           '`basename $0` gnome-terminal' for Terminal\n\t
           '`basename $0` firefox' for Firefox\n\t
           '`basename $0` chromium-browser' for Chromium\n\t..."
  exit 1
fi

pids=" $(pidof $@) "

if [ "$pids" = "  " ]; then # the string "  " contain two spaces
    echo "There is no program named '$@' opened at the moment."
    exit 1
fi

wmctrl -lp | while read identity desktop_number PID window_title; do 
    if [ "${pids/ $PID }" != "$pids" ]; then
        wmctrl -ia $identity
    fi
done

Não se esqueça de tornar o script executável:

chmod +x /path/to/script/script_name

Depois de testar o script no terminal, você deve ver:

Radu Rădeanu
fonte
3
Obrigado, mas isso é essencialmente o mesmo que clicar no ícone do terminal e selecionar cada um para trazer para a frente. Quero dizer um atalho que trará todos os terminais abertos para a frente. Um exemplo é que eu poderia escrever código no gedit, deseja compilá-lo em um terminal enquanto observa a saída de um log em outro terminal.
precisa saber é o seguinte
"A
captura de
1
@ Tomcelic Veja minhas novas edições. Quero dizer que eu estava trabalhando em um script desse tipo enquanto a Adobe publicou o seu How to Answer (que para mim não funcionou); portanto, não leve isso a sério.
Radu Rădeanu
8

Aqui está um pequeno script bash que traz todas as janelas cujo título corresponde ao ARG para a frente:

bring-all-windows.bash ARG

O 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

Você pode ligar

bring-all-windows.bash Terminal

para uma tecla de atalho (não esqueça de colocar o script em um shell de login PATH ou escreva um caminho completo para ele).

O script precisa wmctrlestar instalado.

Editar :

Para executar algo no terminal, navegue até o diretório em que você colocou o script e, em seguida,

chmod +x bring-all-windows.bash
./bring-all-windows.bash Terminal

Quando tiver certeza de que funciona no terminal, tente vinculá-lo a uma tecla de atalho, fornecendo o caminho completo. Quando você tiver certeza de que funciona com uma tecla de atalho e o caminho completo para o script, tente adicioná-lo dir ao PATH do shell de logon e verifique se funciona dessa maneira.

Adobe
fonte
Isso parece bom! Vou tentar em breve e retornar para você. Ainda estou um pouco perplexo com o motivo de não haver um método nativo para isso, parece que deveria ser natural.
precisa saber é o seguinte
@ Tomcelic: Existe um wmctrle bash: isso é natural.
Adobe
É verdade, mas não é nativo: P
TomSelleck 16/09
Existe alguma chance de você se importar em executar como usar esse script? Eu criei o script e salvei-o na minha pasta pessoal e adicionei o caminho para / etc / shells. Também adicionei um atalho nas configurações do teclado com o nome bring_terminals_forward e o comando bash /home/michael/Scripts/bring-all-windows.bash Terminal
TomSelleck
Executando o script diretamente de um terminal de execução não parece que quer trabalhar ... Ele funciona para programas como o gedit, mas não para Terminal
Tom Selleck
0

Outra maneira é usar xdotool. Você deve instalá-lo primeiro, portanto sudo apt-get install xdotoolé obrigatório.

xdotool search --class "terminal" windowactivate %@
xdotool search --name "braiam@bt" windowactivate %@

A primeira procura por qualquer binário chamado *terminal*, a segunda procura por qualquer janela que tenha como título *braiam@bt*. Então, se você colocar isso em um script bash:

#!/bin/bash

set -e
program=$@

xdotool search --class '$program' windowactivate %@
xdotool search --name '$program' windowactivate %@

Você pode saber mais sobre isso no xdotoolmanual.

Braiam
fonte
0

Graficamente, na área de trabalho do Ubuntu, tenho meus ícones dispostos verticalmente na margem esquerda da área de trabalho. Se você clicar com o botão esquerdo no ícone do terminal, verá todas as janelas do terminal. Depois, você pode escolher qual deles trabalhar. Se você clicar com o botão direito do mouse no ícone do terminal, verá uma lista de menus com um "Novo terminal" na parte superior e todo o seu terminal aberto na parte inferior da lista. Você pode selecionar o que for seu terminal ativo.

Esse mesmo método deve funcionar para qualquer outro aplicativo, como o seu navegador.

Kemin Zhou
fonte