Este é um script que eu uso para fazer isso com o irssi, com lógica extra já que eu o uso dentro de uma sessão do tmux, mas algumas partes são aplicáveis. Na verdade, ele também contém código para fazê-lo funcionar remotamente por SSH e controlar a notificação GUI de novas mensagens irssi, mas eu tentei eliminar isso (incluindo instruções de uso e manipulação de argumentos) para maior clareza. Deixo alguns depurativos printf
afirmações.
#!/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
Em suma, usa xdotool (pacote: xdotool
no Debian) para procurar uma janela com o título "irssi" e depois ativar essa janela. Existem outras propriedades que o nome da janela que você pode procurar, se elas se adequarem melhor às suas necessidades.
Eu estou usando um pequeno "truque" para nomear o terminal "irssi" quando ele é iniciado pela primeira vez (veja o printf
declaração em attach_irssi()
).
A última linha tenta
- Levante uma sessão de terminal existente e, se não for encontrado
- anexar um existente
tmux
sessão, e se não for encontrado
- começar um
tmux
sessão e depois
- anexá-lo.
Eu vinculo este script a Mod4 + Eu (exatamente como isso é feito depende do seu gerenciador de janelas).
Com algum esforço, isso deve ser possível para converter para o seu caso.
EDITAR: Especificamente, você pode remover o completo attach_irssi
função se você não usa o tmux ou o GNU Screen. Se você não executá-lo através de SSH ou como um plugin irssi, você pode facilmente jogar fora o 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