Видео смотреть бесплатно

Смотреть 4k видео

Официальный сайт isprras 24/7/365

Смотреть видео бесплатно

bobry 11.09.2009 04:42

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 тому, чего мне так не хватало.

Решение №1 (для минималистов)



На бескрайних просторах EmacsWiki было обнаружено занятное дополнение, именуемое Autosmiley, заменяющее все смайлоподобные конструкции в буфере на соответствующие изображения. Для работы оно использует пакет smiley, который идет в стандартной поставке Emacs, вместе с почтовым клиентом gnus. Для его использования достаточно добавить в ваш файл конфигурации что нибудь в духе:



 1
2
3
4
5
6
7
8
9
10
11
12
13
(require 'autosmiley)

(require 'jabber)



(defun my-jc-mode-hook ()

(autosmiley-mode))



(add-hook 'jabber-chat-mode-hook 'my-jc-mode-hook)



Решение №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 дадут требуемое имя файла

Значит, чтобы заставить Autosmiley рисовать нужные нам смайлики нужно сделать три вещи:

создать регулярное выражение, связывающее 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)



(defun smiley-parse-node (node)

"Extracts smiley data of type (REGEXP 1 FILENAME) from a node."

(when (listp node)

(let* ((filename

(cdr (assq 'file (xml-node-attributes node))))

(smilies

(mapcar

(lambda (data) (car (last data)))

(xml-get-children node 'string))))

(list

(concat (regexp-opt smilies "\\(") "\\W")

1 filename)

)))



(defun smiley-parse-file (filename)

"Returns smiley data list for smiley-regexp-alist."

(let ((root (xml-parse-file filename)))

(mapcar 'smiley-parse-node

(xml-get-children

(car root) ;; we skip <messaging-emoticon-map>

'emoticon))

))





 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

"Directory containing smiley packs (folders).")



(defun smiley-load-theme (pack)

"Loads smiley theme PACK into smiley.el.

Each theme should be a folder inside smiley-data-directory. For example

smiley-data-directory is set to '/home/bobry/.emacs.d/smileys, so possible

directory structure could be:

.

|-- default

|-- kolobok

`-- tango

default, kolobok and tango are valid PACK values."

(interactive "sTheme: ")

(when smiley-base-directory

(let* ((smiley-dir (format "%s/%s/" smiley-base-directory pack ))

(smiley-path (concat smiley-dir "emoticons.xml")))

(when (file-exists-p smiley-path)

(setq

smiley-style 'low-color ;; this is done for compatibility reasons

smiley-data-directory smiley-dir

smiley-regexp-alist (smiley-parse-file smiley-path))

(smiley-update-cache))

)))





1
2
3
4
5
(setq smiley-base-directory (concat (getenv "HOME") "/.emacs.d/smileys/"))

(add-to-list 'gnus-smiley-file-types "gif")

(smiley-load-theme "kolobok")





Результатат получается примерно следующий:







code


Тэги: emacs Jabber
+ 7 -
Похожие Поделиться

Aesdana 11.09.2009 05:19 #
+ 3 -
Вот набор смайлов без это ужасной светлой обводки.
http://rapidshare.com/files/278362245/smiles.tar.gz.html
bobry 11.09.2009 05:21 #
+ 0 -
лично меня она не очень смущает, думаю что прицепить другой пак с соответствующим xml не сложно
Aesdana 11.09.2009 05:24 #
+ 4 -
Вроде как xml менять не придётся, там просто подправленные гифы.
Отличаются только смайлы *CRAZY* и *IN LOVE*. Могу подправить оригинальные, если кому надо )
bobry 11.09.2009 05:24 #
+ 1 -
думаю никто против не будет :)
Aesdana 11.09.2009 05:42 #
+ 2 -
*CRAZY*
http://img9.imageshack.us/img9/8554/95155837.gif
С *IN LOVE* всё нормально, это я с другим паком спутала.
Juev 11.09.2009 13:31 #
+ 1 -
прикольно! спасибо!
только я использую чисто текстовые смайлы в jabber-el, привычнее как-то...
krig 11.09.2009 14:41 #
+ 0 -
Буквально вчерапрочитал туториал по емаксу в емаксе.
На досуге попробую начать постепенно мигрировать на эту ОСь =)

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн