Muitos terminais podem definir o sinalizador de urgência em suas janelas se o caractere da campainha - \a - for impresso. Então
me-runs-long-time.sh ; echo -e '\a'
Deve fazer o truque. Lembre-se de que i3 removerá imediatamente o sinalizador urgente quando a janela estiver focada ou quando já estiver focada. Então você pode testar se isso funciona executando
sleep 3; echo -e '\a'
e imediatamente focando outra janela.
Nota : o terminal pode precisar ser configurado para esse comportamento:
-
Para
rxvt-unicode, o recursourgentOnBellprecisa ser definido comoTrue. Paraxterm, é o recursobellIsUrgent. Você pode definir recursos em~/.Xresourcesou~/.Xdefaults, dependendo da sua distribuição.XTerm*bellIsUrgent: True URxvt.urgentOnBell: TrueExecute
xrdb ~/.Xresourcesou reinicie sua sessão X para ativar as alterações (para novos terminais). -
Para
termite, isso pode ser ativado configurando a opçãourgent_on_bellparatrueem sua configuração -~/.config/termite/config:[options] urgent_on_bell = trueIsso funcionará imediatamente em qualquer nova janela de cupins.
Naturalmente, a solução acima depende de você lembrar de acrescentar ; echo -e '\a' a cada vez. Existem algumas maneiras de automatizar isso. Por exemplo:
-
Uma saída fácil seria apenas exibir
\ano momento apropriado no próprio script. Isso, obviamente, requer acesso de gravação e precisa ser feito para cada script separadamente. -
Se você usar
zsh, poderá adicionar o seguinte ao seu~/.zshrc(na máquina remota):# this may already be in your ~/.zshrc autoload -Uz add-zsh-hook # duration in seconds after which a bell should be sent typeset -i LONGRUNTIME=60 # function to save time at which a command was started save_starttime () { starttime=$SECONDS } # function to print \a if the command took longer than LONGRUNTIME set_longrunning_alert () { if ((LONGRUNTIME > 0 && SECONDS - starttime >= LONGRUNTIME)); then print "\a" fi } # run save_starttime before a command is executed add-zsh-hook preexec save_starttime # run set_longrunning_alert after a command finishes (before the prompt) add-zsh-hook precmd set_longrunning_alertIsso imprimirá automaticamente um caractere de campainha se um comando demorar mais de um minuto.
-
Se você usa
bash, pode usar o seguinte na máquina remota.PROMPT_COMMAND='echo -e "\a"'Isso executará
echo -e "\a"a cada tempo antes que o prompt principal seja emitido. Embora isso marque a janela como urgente após cada comando, ela não deve ser perceptível na maioria dos casos porque não manterá o sinalizador urgente nas janelas focadas.
Se você usar as configurações para bash ou zsh também em sua máquina local, você também será notificado em caso de morte da conexão SSH (no caso de zsh somente se ele morrer após LONGRUNTIME segundos). Assumindo, é claro, que você inicia ssh do seu shell.