Emacs — Смайлики в jabber.el
Наверное в рядах суровых пользователей Emacs'a не найдется того, кто ничего не слышал о не менее суровом jabber.el. Но учитывая вероятность того, что этот пост могут читать люди, далекие от geekовых дел, смело отправляю всех незнающих в блог Alex Ott. Вкратце, jabber.el - это пакет, добавляющий к Emacs функционал необходимый для работы с XMPP протоколом. Естественно, как это часто бывает - он далеко не одинок на поприще IM пакетов для Emacs'a, но какого то реального, активно разрабатываемого конкурента, у jabber.el на данный момент нет.
Итак, ближе к делу. Несмотря на всю свою исключительность и удобство, jabber.el лишен такой, казалось бы элементарной для IM клиента вещи, как поддержка смайлов. Лично меня такое упущение сильно опечалило, ибо избалованный pidginами и qutIMами я привык получать и отправлять эти маленькие бесполезные картинки. Посему было решено научить jabber.el тому, чего мне так не хватало.
На бескрайних просторах EmacsWiki было обнаружено занятное дополнение, именуемое Autosmiley, заменяющее все смайлоподобные конструкции в буфере на соответствующие изображения. Для работы оно использует пакет smiley, который идет в стандартной поставке Emacs, вместе с почтовым клиентом gnus. Для его использования достаточно добавить в ваш файл конфигурации что нибудь в духе:
И все было бы хорошо и замечательно, если бы не одно НО: зависимость от gnus накладывает на Autosmiley одно очень неприятное ограничение: он отображает смайлики, используя стандартные ресурсы gnus. Выглядит это довольно не сексуально:
Крайнее отвращение к изображенному выше сподвигло меня на написание дополнения к Autosmiley которое бы добавляло к нему возможность смены схемы смайликов на что нибудь более привлекательное. Код, приведенный ниже читает схему смайликов из xml файла Kopete, но думаю, сделать так чтобы он поддерживал формат qutIM или pidgin не составит труда.
Оказалось, что smiley.el, отвечающий за отрисовку смайлов, использует несколько важных переменные, для получения информации о том какие смайлы на что заменять:
Результатат получается примерно следующий:
code
Итак, ближе к делу. Несмотря на всю свою исключительность и удобство, jabber.el лишен такой, казалось бы элементарной для IM клиента вещи, как поддержка смайлов. Лично меня такое упущение сильно опечалило, ибо избалованный pidginами и qutIMами я привык получать и отправлять эти маленькие бесполезные картинки. Посему было решено научить jabber.el тому, чего мне так не хватало.
Решение №1 (для минималистов)
На бескрайних просторах EmacsWiki было обнаружено занятное дополнение, именуемое Autosmiley, заменяющее все смайлоподобные конструкции в буфере на соответствующие изображения. Для работы оно использует пакет smiley, который идет в стандартной поставке Emacs, вместе с почтовым клиентом gnus. Для его использования достаточно добавить в ваш файл конфигурации что нибудь в духе:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
(require 'autosmiley) |
Решение №2
И все было бы хорошо и замечательно, если бы не одно НО: зависимость от gnus накладывает на Autosmiley одно очень неприятное ограничение: он отображает смайлики, используя стандартные ресурсы gnus. Выглядит это довольно не сексуально:
Крайнее отвращение к изображенному выше сподвигло меня на написание дополнения к Autosmiley которое бы добавляло к нему возможность смены схемы смайликов на что нибудь более привлекательное. Код, приведенный ниже читает схему смайликов из xml файла Kopete, но думаю, сделать так чтобы он поддерживал формат qutIM или pidgin не составит труда.
Оказалось, что smiley.el, отвечающий за отрисовку смайлов, использует несколько важных переменные, для получения информации о том какие смайлы на что заменять:
- smiley-regexp-alist список элементов вида (regexp количество_повторений filename), где filename - имя соответствующего файла, без расширения
- smiley-data-directory путь к директории со смайликами, именно там будет производиться поиск указанного в smiley-regexp-alist filename
- gnus-smiley-file-types список типов файлов, которые в совокупности с filename дадут требуемое имя файла
- создать регулярное выражение, связывающее regexp'ы смайликов с нужными нам файлами
- указать директорию, содержащую файлы смайликов
- при необходимости добавить расширение в список поддерживаемых типов файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
(require 'xml) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
(defvar smiley-base-directory nil |
1 2 3 4 5 |
(setq smiley-base-directory (concat (getenv "HOME") "/.emacs.d/smileys/")) |
Результатат получается примерно следующий:
code