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
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.
OdpowiedzUsuńCzyli nie pojawiają się alerty z konsoli, na której pracuję, ale ze wszystkich innych już tak.
@Marcin Milewski:
OdpowiedzUsuń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 :)