Видео ролики бесплатно онлайн

Смотреть казахский видео

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

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

11.09.09 04:42 bobry

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 рисовать нужные нам смайлики нужно сделать три вещи:
  1. создать регулярное выражение, связывающее regexp'ы смайликов с нужными нам файлами
  2. указать директорию, содержащую файлы смайликов
  3. при необходимости добавить расширение в список поддерживаемых типов файлов
Реализация каждого пункта по порядку:

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


Теги:

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

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 92)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1887 из 148 городов)
            Топ пользователей Топ блогов

            Новенькие: psyhomo, neclude, alff31, dix75, svolik
            welinux.ru

            Смотреть онлайн бесплатно

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


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

            Online video HD

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

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

            Full HD video online

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

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

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