вівторок, 2 квітня 2013 р.

Привлечение внимание к Терминалу в Unity Launcher

Для значков в Unity Launcher существует возможность привлечь внимание пользователя к произошедшему событию. Когда значок в Unity Launcher прыгает как сумасшедший и горит дьявольским пламенем, то это и есть - Urgency. Ваши долговыполняющиеся команды в Gnome Terminal не имеют возможности "потрясти" иконку Терминала и привлечь вас к выполнившейся задаче. Вот это мы и поправим ...

Terminal Urgency

Мы напишем небольшую программу на Python 3 и она поможет в поставленной задаче. Питон 3 взят, с прицелом на будущее, из-за тотального Unicode и беспроблемной работы с русскими буквами.

Наша программулька не только потрясёт значком Unity Launcher'а, но и выведет уведомление. Если что-то из этого не нужно, то смело правьте исходник. Для работы с уведомлениями в Python 3 нам, возможно, понадобится пакет python3-notify2, который нужно установить sudo apt-get install python3-notify2

Вот тот не идеальный код на Питоне 3, который нужно скопировать и вставить в файл bell. Наш звоночек нужно сохранить к себе в ~/bin/ и сделать исполняемым.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
# need packages python3-notify2   -  sudo apt-get install python3-notify2
from gi.repository import Unity, GObject
import sys
import notify2
counti = 0
loop = GObject.MainLoop()
launcher = Unity.LauncherEntry.get_for_desktop_id("gnome-terminal.desktop")
def update_urgency():
 global counti
 global launcher
 counti=counti+1
 if counti >= 2:
     loop.quit()
 launcher.set_property("urgent", True)
 return True
GObject.timeout_add_seconds(2, update_urgency)
loop.run()
if not notify2.init("icon-summary-body"):
    sys.exit(1)
n = notify2.Notification(
    "Терминал",
    "Была выполнена ваша задача",
    "notification-message-im")
n.show()

Почему в ~/bin/ ? У нас есть у каждого в домашней папке файл .profile, в котором установлено при наличии папки ~/bin/ добавить её в переменную PATH и тогда программы из этой папки не нужно указывать с полным путём и достаточно указать только имя файла программы, что весьма удобно.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Файл bell лежит в ~/bin/ и обладает битом исполнимости. Теперь можно запускать имитацию длительной команды и протестировать колокольный звон нашего bell.

Пингаем свой шлюз 5 пакетами и наблюдаем работу bell.

ping -c 5 `ip route show default | awk '/default/ {print $3}'` && bell

Если вам не нужно трясьти значком Терминала и достаточно только уведомления, то можно поступить проще. В файле ~/.bashrc есть алиас с именем alert.

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

Нужно удалить знак комментария # перед ним, а если алиаса alert нет, то добавить и перезайти в Терминал. Теперь при использовании алиаса alert в длительных операциях в виде

sleep 5; alert
выведет уведомление в правом верхнем углу.

Теперь с помощью bell или alert вы всегда будете предупреждены о завершении длительных во времени команд в Терминале.

Дополнительные материалы:
Unity Ubuntu изнутри. Launcher.
Terminal с нужными размерами и положением.
Отключить подтверждение gnome-terminal.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments