12 października 2010

notify & autofocus window

Bardzo często jestem zmuszony czekać na zakończenie jakiegoś polecenia wydanego w konsoli. Czasami to trwa tak długo, że zabieram się za coś innego. Zaraz po zakończeniu owego zadania chciałbym powrócić do pracy. Jednak nie zawsze jestem w stanie dostrzec, że coś się skończyło, skoro od 5 minut czytam jakiegoś bloga :)

na dzisiaj mam dla Was dwa według mnie mnie godne uwagi polecenia.



By osiągnąć efekt taki jak widać na załączonym obrazku wystarczy zdefiniować sobie:

alias alert='notify-send -t 15000 -i /usr/share/icons/gnome/32x32/apps/gnome-terminal.png "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'

i później już tylko wywołać sobie:

make all -j4; alert

co spowoduje wyświetlenie notyfikacji o zakończonym poleceniu poprzedzającym nasz alert.


Natomiast poniższa funkcja (wklejona np. do ~/.bashrc, lub generalnie wklejona do konsoli) przywoła nam okno konsoli po zakończeniu danego zadania.

function focus() {
   winID=`xprop -root |awk '/_NET_ACTIVE_WINDOW/ {print $5; exit;}'`;
   $@;
   wmctrl -i -a $winID;
}
 
sposób użycia (analogiczny jak polecenie time - bez średnika):

focus make all -j4 


PS.
Podobny temat był omawiany na devPytaniach w wątku Wielozadaniowość programisty. Czyli jak sobie radzić z 5-10 minutowymi “przerwami”?

[EDIT] (17.01.2011):

na proźbę, która została wyrażona w komentarzu tutaj jest jeszcze kod, który przywołuje alerta tylko wtedy, jeżeli nasze okno nie miało focusa :)

function alert_if_hidden() {
   winID=`xprop -root |awk '/_NET_ACTIVE_WINDOW/ {print $5; exit;}'`;
   $@;
   winID_new=`xprop -root |awk '/_NET_ACTIVE_WINDOW/ {print $5; exit;}'`;

   if [ $winID != $winID_new ];
   then
     alert;  
   fi
}

sposób użycia:

alert_if_hidden make all -j4
Related Posts Plugin for WordPress, Blogger...

2 komentarze:

  1. Fajnie byłoby gdyby dało się taki alert robić automatycznie. To znaczy: alert pojawia się, jeśli zadanie w konsoli zakończyło się ale to nie jest aktywna konsola.
    Czyli nie pojawiają się alerty z konsoli, na której pracuję, ale ze wszystkich innych już tak.

    OdpowiedzUsuń
  2. @Marcin Milewski:

    Dodałem do posta, coś na wzór tego o co prosiłeś. Jednak, jeżeli chciałbyś dostać powiadomienie o każdym takim poleceniu, bez konieczności wpisywania polecenia poprzedzającego, to obawiam się, że trzeba było by zrobić jakiś emulator konsoli. A biorąc pod uwagę, że to nie trywialna sprawa, to nie zdziwiłbym się, gdyby najszybciej było zedytować jakieś źródła już istniejącej :)

    OdpowiedzUsuń