Normalmente tenho vários aplicativos em execução na minha estação de trabalho. Geralmente euprecisar VIM
e alguns outros aplicativos que nem sempre preciso, por exemplo, cliente de email, IM, VLC, Google Chrome
etc.Terminal
Seria muito útil se eu pudesse mudar para os aplicativos que sempre preciso VIM
com 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 printf
instruçõ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: xdotool
no 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 printf
instrução em attach_irssi()
).
A última linha tenta
- Crie uma sessão de terminal existente e, se não for encontrada
- anexe uma
tmux
sessão existente e, se não for encontrada - iniciar uma
tmux
sessão e depois - 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_irssi
funçã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 TTY
ló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_1
e edite-o para iniciar o comando escolhido:
/usr/bin/vim
Então vá para
apps > metacity > global_keybindings
Encontre command_1
e 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 IsViewable
sinalizador ú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).