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 recursourgentOnBell
precisa ser definido comoTrue
. Paraxterm
, é o recursobellIsUrgent
. Você pode definir recursos em~/.Xresources
ou~/.Xdefaults
, dependendo da sua distribuição.XTerm*bellIsUrgent: True URxvt.urgentOnBell: True
Execute
xrdb ~/.Xresources
ou reinicie sua sessão X para ativar as alterações (para novos terminais). -
Para
termite
, isso pode ser ativado configurando a opçãourgent_on_bell
paratrue
em sua configuração -~/.config/termite/config
:[options] urgent_on_bell = true
Isso 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
\a
no 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_alert
Isso 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.