Tecla de atalho / atalho personalizado para abrir / trazer para frente de um aplicativo

9

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 essa tecla de atalho 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 acabei fazendo, caso seja de ajuda para 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 não sou bash wiz. 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!

    
por Ivan 01.08.2009 / 01:08

3 respostas

9

O programa wmctrl é exatamente o que você está procurando ( sudo apt-get install wmctrl ). Você pode usar o comando wmctrl -a "AppTitle" para trazer o aplicativo para a frente. wmctrl -l listará todas as janelas disponíveis, portanto, deve ser fácil escrever um script de shell que verifique se o programa está em execução e inicie-o ou leve-o para a frente. Então você pode apenas ligar isso a um atalho de teclado.

Primeiro salve o seguinte script 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 subseqüência do título da janela do programa. Se não houver uma string única 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 em seu diretório atual, execute chmod +x bringToFront para tornar o script executável. Então, verifique se funciona; para iniciar / focar o firefox, você pode executar ./bringToFront firefox "Mozilla Firefox" .

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

  3. Clique duas vezes no primeiro command com 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_keybindings , a próxima pasta para cima. Encontre a entrada run correspondente ao comando que você acabou de definir, provavelmente run_command_1 . Clique duas vezes e digite o atalho de teclado que você deseja usar. Coloque os modificadores em colchetes angulares, por ex. <Ctrl><Alt>F .

Agora Control + Alt + F trará sua janela do firefox para a frente, ou iniciará se ela ainda não estiver rodando.

    
por 01.08.2009 / 01:15
3

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

#!/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
    
por 02.10.2011 / 17:03
0

obrigado por isso. Eu uso uma versão modificada dele para criar um script de atalho de janela que também suporta o ciclo através de várias instâncias. Se você estiver interessado:

link

aplausos:)

    
por 02.12.2009 / 22:39