É possível usar xsetroot e dwm para definir as barras superior e inferior em diferentes intervalos de tempo?

4

Estou usando o dwm com o patch dualstatus . Isso adiciona uma barra de status na parte inferior da tela, além da barra padrão na parte superior. O texto em cada barra é definido em ~ / .xinitrc (por exemplo) assim:

xsetroot -name “top text;bottom text”

Existe uma maneira no bash de definir o texto superior e o texto inferior em intervalos diferentes? Por exemplo, tenho um script topbar que exibe informações do sistema, por ex. saída do comando uptime e um script bottombar que exibe informações como clima, estado da bateria, etc.

O objetivo é que a barra superior seja atualizada a cada segundo, enquanto a barra inferior só atualiza a cada minuto porque suas informações vêm de processos mais caros (por exemplo, consultando meu music player, verificando o estado da bateria etc.) /.xinitrc tem esta aparência:

while true; do
    bottomdisp=$(bottombar)
    for s in {1..60}
    do
        xsetroot -name "$(topbar);$bottomdisp";
    sleep 1;
    done
done &

xbindkeys
( ( sleep 5 && /usr/bin/xscreensaver -no-splash -display :0.0 ) & )

exec rundwm

Isso atualiza a cada segundo, no entanto. Existe uma maneira mais simples de fazer isso? As ideias que eu conseguia pensar eram

  1. Talvez seja uma maneira de dizer ao xsetroot para preservar o que quer que esteja na barra inferior? Como último recurso, posso ajustar alguns dos códigos no patch dualstatus para permitir que ele preserve o estado atual das barras superior / inferior se algo como xsetroot -name ';bottom text' for passado, mas isso não é ideal porque meu C está enferrujado e ainda uso o comando acima para limpar as barras às vezes.

  2. Use um cronjob para atualizar um cache do texto na barra inferior e executá-lo uma vez por minuto. Mesmo que as barras superior / inferior fossem exibidas a cada segundo, somente a barra superior seria alterada a cada segundo.

Algum outro método para isso? Existe uma maneira simples (r) de fazer isso em bash que eu perdi?

    
por Michael A 02.12.2013 / 03:58

1 resposta

4

Eu sugiro que o bash monitore sua última string inferior e atualize-a apenas uma vez por minuto (quando o segundo módulo atual 60 for igual a 0 neste código).

while true; do 
    (( 10#$(date +%s) % 60 )) || bottomdisp=$(date)
    xsetroot -name "$(topbar);$bottomdisp";
    sleep 1;
done  &

Esta sintaxe facilita a modificação da frequência dos intervalos secundários (ou múltiplos), por ex. apenas mude de 60 a 15 para atualizações 4 vezes por minuto.

    
por 21.12.2014 / 06:37

Tags