Finch и оповещения

23 Янв
2012

Здравствуй, Сообщество!
Сменив давно используемый Pidgin на его консольный аналог Finch столкнулся с отсутствием оповещений о новых сообщениях. Увы, по результатам Google вопрос решался либо возвратом обратно к Pidgin, либо простынями перловых скриптов, перехватывающих dbus — сообщения, «парсящих» самих себя ну и т.д. Для себя я нашел гораздо более простое решение.

Оговоримся сразу — мне требовалась лишь индикация о приходе нового сообщения. Если бы я хотел видеть иконки контактов, их статусы и прочие интересности я бы остался на Pidgin.
Оповещения можно (как я понял из результатов своих поисков) выводить через DBus. Немного полистав форумы, наткнулся на довольно интересную, на мой взгляд, библиотеку — libnotify. Смысл в том, что эта библиотека выдает сообщения из dbus, при этом оформляя их в соответствии с системными настройками нотификации. Если в предыдущем примере все понятно — графическое приложение, в принципе, должно уметь взаимодействовать с пользователем средствами оповещений, то консольный Finch даже не подозревал о такой возможности. Научим!
Шаг 1. Установили библиотеку. Тут все понятно.
Шаг 2. Тестируем. Выполните
notify-send test
, почитайте man. Тоже ничего сложного.
Шаг 3. Привязываем нотификацию к Finch. В меню клиента идем в категорию звуки, в открывшемся окне создаем собственный профиль оповещения, метод — команда, в строку «команда для воспроизведения звука» пишем уже известное тестовое
 notify-send test
. Изменения сохраняем, тестируем. Работает!
Шаг 4. Наводим красоту. Меня смутили 2 вещи. Первая — сообщение пропадало через 10 секунд (зазевался -> пропустил нотификацию -> не ответил на сообщение). Вторая — путь к звуковому файлу в нижней строке. И если первое решалось указанием параметра
-t <сколько секунд выводить сообщение>
, решения для второй неприятности я так и не нашел. Я думаю, Finch передает команде путь к стандартному звуковому файлу при отсутствии иных указаний, что и выводится в notify — сообщении. ОК, если параметр передается и не может быть игнорирован командой, «обернем» ее в простенький скрипт:
#!/bin/bash
killall dbus-launch
sleep 3
notify-send -t 0 "Finch - Есть новые сообщения!"

Сразу говорю, скрипты я не знаю вообще, плюс к этому использую два огромных, на мой взгляд, костыля — поскольку сообщение висит на экране до тех пор, пока я его не закрою, в случае прихода новых сообщений нотификации будут выстраиваться колонками на моем десктопе, по-этому перед каждым запускам скрипта убиваются все выведенные сообщения. Если пропустить строку
sleep 3
, то сообщения не выводятся. Опытным путем было взято наименьшее время.
Шаг 5. Дальнейшие украшательства. Теперь можно указать положение текста, иконку и т.д. Спасибо за внимание!
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх