Vincular atalho para abrir a janela de um aplicativo específico

Vincular atalho para abrir a janela de um aplicativo específico

Normalmente tenho vários aplicativos em execução na minha estação de trabalho. Geralmente euprecisar VIMe alguns outros aplicativos que nem sempre preciso, por exemplo, cliente de email, IM, VLC, Google Chromeetc.Terminal

Seria muito útil se eu pudesse mudar para os aplicativos que sempre preciso VIMcom apenas um atalho (digamos, Ctrl+ Shift+ V).

Como isso pode ser alcançado?

Responder1

Este é um script que uso para fazer isso com o irssi, com lógica extra, já que o uso em uma sessão tmux, mas algumas partes são aplicáveis. Na verdade, ele também contém código para fazê-lo funcionar remotamente por meio de SSH e controlar a notificação da GUI de novas mensagens irssi, mas tentei eliminar isso (incluindo instruções de uso e manipulação de argumentos) para maior clareza. Deixo algumas printfinstruções de depuração.

#!/bin/sh
# Locally raise/attach/start irssi session.
#
# Designed for use with tmux and irssi.

TMUX="/usr/bin/tmux"
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"

WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}

tty -s && TTY=true || TTY=false
ttyprint()
{
    ${TTY} && printf -- '%s: %s\n' "${0##*/}" "${1}"
}

start_irssi()
{
    ttyprint 'Starting irssi...'
    if ( ${TMUX} new-session -d -s "${SESSIONNAME}" "${IRSSI}" && ${TMUX} rename-window -t "${SESSIONNAME}:0" "${SESSIONNAME}" ); then
        ttyprint ' done.'
        return 0
    else
        ttyprint ' failed.'
        return 1
    fi
}

attach_irssi()
{
    if ${TTY}; then
        ttyprint 'Attaching irssi...'
        if printf -- '\033]0;%s\007' ${WINDOWNAME} && ${TMUX} attach-session -t "${SESSIONNAME}"; then
            ttyprint ' done.'
            return 0
        else
            ttyprint ' failed.'
            return 1
        fi
    elif ${TERMINAL} -title "${WINDOWNAME}" -e ${TMUX} attach-session -t "${SESSIONNAME}"; then
        return 0
    else
        return 1
    fi
}

raise_irssi()
{
    ttyprint 'Searching for available session...'
    if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
        ttyprint ' found, activating.'
        xdotool windowactivate "${WID}"
        return 0
    else
        ttyprint ' not found.'
        return 1
    fi
}

! raise_irssi && ! attach_irssi && start_irssi && attach_irssi

Resumindo, ele usa xdotool (pacote: xdotoolno Debian) para procurar uma janela com o título "irssi" e então ativa essa janela. Existem outras propriedades além do nome da janela que você pode pesquisar se elas atenderem melhor às suas necessidades.

Estou usando um pequeno "truque" para nomear o terminal como "irssi" quando ele é iniciado pela primeira vez (veja a printfinstrução em attach_irssi()).

A última linha tenta

  1. Crie uma sessão de terminal existente e, se não for encontrada
  2. anexe uma tmuxsessão existente e, se não for encontrada
  3. iniciar uma tmuxsessão e depois
  4. anexe-o.

Eu vinculo esse script a Mod4+ I(exatamente como isso é feito depende do seu gerenciador de janelas).

Com algum esforço, isso deverá ser possível converter para o seu caso.


EDITAR:Especificamente, você pode remover a attach_irssifunção completa se não usar o tmux ou o GNU Screen. Se você não executá-lo por SSH ou como um plugin irssi, poderá facilmente descartar a TTYlógica. Muito condensado, isso funcionaria para irssi sem tmux (mas não foi testado):

#!/bin/sh
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"
WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}

start_irssi()
{
    ${TERMINAL} -title "${WINDOWNAME}" -e "${IRSSI}"
}

raise_irssi()
{
    if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
        xdotool windowactivate "${WID}"
        return 0
    else
        return 1
    fi
}

! raise_irssi && start_irssi

Responder2

Se você ainda não possui o gconf-editor instalado:

sudo apt-get install gconf-editor

Em seguida, inicie-o como um usuário normal (os atalhos são uma configuração por usuário):

gconf-editor

Usaremos um dos comandos de espaço reservado para fazer o que quiser, então navegue até:

apps > metacity > keybinding_commands

Escolha command_1e edite-o para iniciar o comando escolhido:

/usr/bin/vim

Então vá para

apps > metacity > global_keybindings

Encontre command_1e altere o valor da chave que deseja usar:

<Control><Alt>v

(Mudei para Control-alt-v, pois control-shift-v é frequentemente usado para colar, onde control-v é usado para outras coisas).

Responder3

Com base na resposta de @Daniel_Andersson, este é o script que vinculei aos meus atalhos de teclado para abrir a janela do Firefox (e passar o mouse sobre ela, porque esquecerei facilmente em qual tela ela estava antes de mudar).

#!/bin/bash
if WIDS=$(xdotool search --name 'Firefox$'); then
  for WID in $WIDS
  do
    if $(xwininfo -id $WID | grep -q IsViewable) 
    then
        xdotool windowactivate "${WID}" mousemove --window "${WID}" 50 50 
        break
    fi
  done
else
    notify-send "Firefox not running" 
fi

Como o Firefox sempre retorna uma série de resultados xdotools, é preciso encontrar um que seja uma janela real. Descobri que xwininfo(package x11-utils) retornou um IsViewablesinalizador útil, que uso para encontrar a primeira janela visível. O notify-send(package libnotify-bin) é obviamente opcional, também é possível iniciar uma sessão do Firefox se estiver inativa (veja o script de @Daniel_Andersson).

informação relacionada