Atalho / atalho personalizado para abrir / trazer para a frente um aplicativo

11

Eu não imagino que isso esteja embutido no sistema, mas é possível fazê-lo sem muito trabalho?

Digamos que eu abro um programa específico com uma tecla de atalho e, quando pressiono novamente, a janela do programa é trazida para a frente.

Eu quero fazer isso no Ubuntu 9.04.

Talvez com o D-Bus? Algum especialista?

Atualização : Aqui está o que eu acabei no caso de ajudar alguém:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Certamente isso pode ser simplificado, mas eu não sou bashinteligente. Além disso, para o meu exemplo funcionar, criei um perfil personalizado no Terminal que aplica um título exclusivo à janela para que possa ser encontrado posteriormente. As possibilidades são infinitas!

Ivan
fonte
11
Para esta tarefa simples, o método jtb funciona melhor, porque o xdotools às vezes gera erros X e o wmctrl é mais rápido.
Ivan

Respostas:

10

O wmctrlprograma é exatamente o que você está procurando ( sudo apt-get install wmctrl). Você pode usar o wmctrl -a "AppTitle"comando para trazer o aplicativo para a frente. wmctrl -llistará todas as janelas disponíveis; portanto, deve ser fácil escrever um script de shell que verifique se o seu programa está sendo executado e o inicia ou o traz à frente. Em seguida, você pode vincular isso a um atalho de teclado.

Primeiro salve o script a seguir em algum lugar, eu usarei /home/jtb/code/bringToFront. São necessários dois argumentos, o primeiro é o que você digitaria no terminal para iniciar o programa, o segundo é uma substring do título da janela do programa. Se não houver uma seqüência única e constante no título, você precisará trabalhar um pouco mais para encontrar a janela do programa.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Com o script no diretório atual, execute chmod +x bringToFrontpara tornar o script executável. Então verifique se funciona; para iniciar / focar o firefox que você pode executar ./bringToFront firefox "Mozilla Firefox".

  2. Agora precisamos vincular uma tecla de atalho. Execute gconf-editore navegue na estrutura de pastas à esquerda para /apps/metacity/keybinding_commands.

  3. Clique duas vezes no primeiro commandcom um valor em branco, provavelmente command_1. Digite o caminho completo para o script e forneça os dois parâmetros, por exemplo /home/jtb/code/bringToFront firefox Firefox.

  4. No painel à esquerda, selecione global_keybindingsa próxima pasta para cima. Encontre a runentrada correspondente ao comando que você acabou de definir, provavelmente run_command_1. Clique duas vezes nele e digite o atalho do teclado que você deseja usar. Coloque os modificadores entre colchetes, por exemplo <Ctrl><Alt>F.

Agora o Control+ Alt+ Ftrará a janela do firefox para a frente ou a inicie se ainda não estiver em execução.

jtb
fonte
Sim, eu descobri isso há alguns minutos atrás, mas fui com o xdotool. Obrigado!
317 Ivan
Esqueci de mencionar que também usei os atalhos e comandos globais no gconf para obter o efeito completo (o console do Quake de um homem pobre!).
317 Ivan
Ah, sim, eu não usei o xdotool, mas parece que isso lhe daria mais flexibilidade. Bom ponto sobre o gconf. Como isso é bastante óbvio, é melhor editar a resposta para incluir mais detalhes para qualquer pessoa que queira fazer isso.
jtb
Console do Poort Man's Quake? Você quer dizer como Tilda? freshmeat.net/projects/tilda
prestomation 03/08/09
Sim, também uso o Tilda, mas trabalho em vários projetos durante a semana e, para cada um, sempre abro três ou quatro guias, alternando rapidamente para o console do projeto ("espaço de trabalho") sem bagunçar o Tilda é muito útil para mim.
Ivan
3

Aqui está outra maneira de fazer isso xdotools. O processo de pop-up é reconhecido pela linha de comando emitida para executá-lo (nenhum arquivo pid ou título exclusivo da janela é necessário).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi
etuardu
fonte
0

A resposta postada por jtb anteriormente é excelente, mas às vezes você deseja combinar títulos exatos (por exemplo, você deseja abrir "GitKraken", mas o título do seu navegador "GitKraken vs CLI" também corresponde à consulta).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Então agora você pode chamar seu script bringToFront da seguinte maneira:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>

Sufiano
fonte
0

Esta solução não é parametrizada, mas eu a usei para focar ou iniciar a calculadora gnome.

A opção -R localiza a janela ou falha, se encontrada, é movida para a área de trabalho atual, aumentada e focada. O nome da calculadora gnome é sua janela com o nome Calculadora , poderia ser facilmente parametrizado, mas eu nunca achei necessário fazê-lo. Eu tenho isso mapeado para Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi
X Tian
fonte