1/27/2009

Уведомление о новых сообщения в Jabber в Emacs

Если у вас в системе есть библиотека libnotify, то можно заставить emacs показывать красивенькие уведомления о новых сообщениях от пользователей.
Чтобы проверить, установлена ли библиотека, нужно написать which notify-send, в консоли, и узнать ответ =).

А теперь к самому главному.
Emacs поддерживает замечательную концепцию Хуков (Hook). Хук, это реакция на некоторое событие, которые может возникнуть во время работы текстового редактора. Например, вы можете определить реакцию emacs'a, когда возникает событие нажатия клавиши, повесив на это событие какой нибудь хук. Например перевод вводимого символа в верхний регистр.

Предупреждаю сразу, что я в Lisp пока не силен, так что, если что написано не так, то просьба поправлять:
Теперь непосредственно о том, как сделать уведомление:
;; Определяем, переменную для использования иконки в уведомлении
(defvar jabber-libnotify-icon ""
"*Icon to be used on the notification pop-up. Default is empty")

;; определеям переменную, сколько милисекунд будет висеть уведомление
(defvar jabber-libnotify-timeout "2000"
"*Specifies the timeout of the pop up window in millisecond")

;; определяем функцию, которая непосредственно отображает уведомление
(defun jabber-libnotify-message (from msg)
"Show MSG using libnotify"
(let ((process-connection-type nil))
;; запускаем утилиту notify-send и передаем ее параметры:
;; -t время отображения
;; -i отображаемая иконка
;; from - заголовок оповещения
;; msg - непосредственно сообщение оповещения.
(start-process "notification" nil "notify-send"
"-t" jabber-libnotify-timeout
"-i" jabber-libnotify-icon
from msg)))

;; определяем прототип функции, согласно тому как того требует описание в jabber.el
(defun jabber-libnotify-message-display (from buffer text propsed-alert)
(jabber-libnotify-message from text))

Эта функция будет вызвана из модуля Jabber.el, при возникновении определенного события. Далее нам надо указать при возникновении какого события вызывать нашу функцию, нам нужно повесить хук:
;; вешаем хук на событие jabber-alert-message-hooks
(add-to-list 'jabber-alert-message-hooks
'jabber-libnotify-message-display)

Теперь, при получении нового сообщение вы будете получать вот такое уведомление:

4 комментария:

  1. Пасиба) оч. пригодилось

    ОтветитьУдалить
  2. На данный момент jabber.el уже включает стандартную функцию jjabber-libnotify, хотя из имеющейся документации совершенно непонятно как её использовать.
    Из преимуществ - по идее должна корректно показывать аватарку :)

    ОтветитьУдалить
  3. Интересно, надо попробовать. Я давно не следил за этим модом.

    ОтветитьУдалить