altera o espaço de trabalho do i3wm / status do windows para urgente

0

Eu tenho um script de shell que executo em um servidor distante, e gostaria que o status da janela do i3 se tornasse urgente para que o botão do espaço de trabalho ficasse vermelho. Como posso conseguir isso?

    
por greg0ire 16.03.2016 / 15:57

1 resposta

2

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 recurso urgentOnBell precisa ser definido como True . Para xterm , é o recurso bellIsUrgent . 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ção urgent_on_bell para true 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.

    
por 21.03.2016 / 11:16