Instant Messaging и Emacs

ICQ

ICQ — средство для быстрого обмена сообщениями, особенно популярное среди пользователей Windows, также может использоваться и из Emacs. В настоящее время существует одна реализация ICQ — eicq, но она может использоваться только с XEmacs. Данная реализация поддерживает следующие возможности:

  • Поддержку протокола ICQ версии 8 (версия из CVS);

  • Регистрацию новых пользователей и смену пароля;

  • Передавать сообщения и URL;

  • Авторизовывать пользователей, обновлять мета-информацию и получать список контактов;

  • Преобразовывать список контактов micq и licq в собственный формат;

  • Изменять привязки клавиш, и писать функции на Emacs Lisp.

К сожалению данная реализация не поддерживает чаты, передачу файлов.

В связи с тем, что я не пользуюсь XEmacs, я не смог протестировать данную реализацию, но судя по документации, она достаточно просто устанавливается и настраивается.

Yahoo! Chat Messenger

Существует две реализации клиента Yahoo! Chat для Emacs. Первая из них называется ElGyach и доступна с http://www.nongnu.org/elgyach, а вторая называется yod.el и доступна с http://users.starpower.net/marti1/yod.el.html, однако ElGyach имеет больше возможностей по сравнению с yod.el, поэтому я остановлюсь на его описании более подробно.

Возможности ElGyach

ElGyach поддерживает следующие возможности:

  • Сохранение буферов с сообщениями в файлах;

  • Проверка грамматики;

  • Подсветка сообщений;

  • Поддержка шифрования с помощью AES;

  • Механизм дополнений имен, команд и текста;

  • Настройка цветов и атрибутов текста;

  • Одновременное использование разных учетных записей;

  • История сообщений, по которой можно перемещаться вперед и назад;

  • Игнорирование сообщений от пользователей;

  • Интеграция с другими модулями Emacs.

Более подробную информацию вы можете найти на страницах, относящихся к разработке ElGyach.

Установка ElGyach

Для установки ElGyach необходимо скачать его с http://savannah.nongnu.org/projects/elgyach, развернуть и скомпилировать (поскольку для общения с сервером Yahoo, ElGyach использует реализацию на языке С). Вот так будет выглядеть загрузка ElGyach в вашем файле инициализации:

(add-to-list 'load-path "path_to_elgyach")
(autoload "gyach" "gyach" "Autoload for ElGyach")

После загрузки вы можете задать необходимые параметры с помощью команд настройки Emacs — M-x customize-group gyach. Здесь вы можете задать имя и пароль пользователя Yahoo! Chat, а также имя программы elgyach, если она стоит в нестандартном месте.

Использование ElGyach

Для запуска ElGyach используется команда M-x gyach, которая создаст буфер процесса. Вы также можете использовать несколько процессов ElGyach одновременно. Это произойдет, если вы перед выполнением команды зададите префикс, вот так C-u M-x gyach. Однако вы не можете войти больше чем в один чат, используя одно и то же имя — это ограничение Yahoo! Chat.

Команды ElGyach

ElGyach поддерживает выполнение различных команд, задаваемых в форме /имя. В настоящее время доступны следующие команды:

  • /ignore User и /unignore User — для игнорирования сообщений от определенных пользователей, и для отмены этого ограничения;

  • /highlight User и /unhighlight User — для подсветки сообщений от определенного пользователя, и окончания использования данной настройки;

  • /version — печатает номер версии ElGyach.

Настройка ElGyach

Основным параметром настройки являются имя и пароль пользователя, которые используются для подключения к Yahoo! Chat. Эти значения хранятся в переменных gyach-yahoo-username и gyach-yahoo-password.

Для обеспечения настройки параметров буфера ElGyach может использоваться код, который будет выполняться с помощью хука gyach-mode-hook.

ElGyach легко расширяется. При каждом вызове команды вида /КОМАНДА, будет вызываться функция gyach-custom-КОМАНДА. Таким образом, вы можете добавить свою функциональность с помощью небольшого объема кода.

AOL Instant Messaging (AIM)

Поддержка AIM в Emacs осуществляется пакетом TNT. Он позволяет обмениваться сообщениями, и участвовать в групповых чатах.

Установка пакета

Получить данный пакет можно с его домашней страницы, расположенной по адресу http://tnt.sourceforge.net/. Установка пакета достаточно проста — надо раскрыть архив, и настроить Emacs для его использования. Это выполняется с помощью следующих команд:

(add-to-list 'load-path "path_to_tnt_dir") 
(require 'tnt) 

Вот и все.

Работа с пакетом

Для работы с AIM вам нужно иметь уже зарегистрированное имя. Если у вас его нет, то вы можете зарегистрировать новое имя по адресу http://www.aol.com/aim.

Основная работа с пакетом осуществляется с помощью сочетаний клавиш, что позволяет удобно работать с пакетом. Все команды можно разделить на несколько частей, которые представлены в виде соответствующих разделов.

Подключение, отключение и статус

Подключение к сервису AIM выполняется с помощью команды tnt-open (C-x t o). При подключении вам необходимо указать ваше имя и пароль, и если все пройдет нормально, то пакет сообщит о том, что вы подключились к системе. Чтобы каждый раз не вводить имя и пароль, вы можете задать их с помощью переменных tnt-default-username и tnt-default-password. вы также можете использовать несколько разных имен для входа в систему. Более подробную информацию вы можете найти в разделе Настройка.

После подключения, вы можете выполнять стандартные задачи — ведение переговоров, общение в чатах и т.п.

Изменение статуса с "доступен" в "занят" производится с помощью команды tnt-away-toggle (или C-x t A). вы можете задать сообщение, которое будет отображаться для пользователей, которые будут пытаться соединиться с вами, когда вы находитесь в данном режиме.

Прекращение работы с AIM выполняется с помощью команды tnt-kill (C-x t q).

Обмен информацией

TNT поддерживает два типа обмена информацией — прямые беседы между двумя пользователями, и общение к чатах.

Для прямого общения используется команда tnt-im (или сочетание клавиш C-x t i). При этом у вас запросят имя пользователя с которым вы хотите пообщаться, и после установления связи, будет открыт буфер, в котором вы сможете печатать свои сообщения и видеть ответы. Если пользователь есть в вашем списке пользователей, то вы можете использовать механизм дополнения для ввода имени.

Для начала общения в чатах используется команда tnt-join-chat (или сочетание C-x t j). вы можете ввести имя существующего чата, или ввести новое, и тогда чат будет создан. Как и в предыдущем случае, создается новый буфер, в котором и ведутся все переговоры. Для выхода из чата вы можете использовать tnt-leave-chat (или C-x t l).

В том случае, если кто-то другой присылает вам приглашение в чат, или сообщение, то вы можете принять его с помощью tnt-accept (C-x t a) или отклонить с помощью tnt-reject (C-x t r) — это может быть полезным, если вы заняты, или не хотите беседовать с данным пользователем. В том случае, если вы получаете несколько сообщений, или приглашений в чат, то они накапливаются в очереди, в которой их можно просматривать с помощью команд tnt-next-event (C-x t n) — для получения следующего сообщения, и tnt-prev-event (C-x t p) — для получения предыдущего сообщения.

Прочие команды

Вы можете формировать списки друзей, для того, чтобы быстро набирать их имена. Для просмотра существующего списка используется команда tnt-show-buddies (C-x t b), а для редактирования — команда tnt-edit-buddies (C-x t B). Имена заданные в этом списке будут использованы для реализации механизма дополнений в строках ввода, там, где необходим ввод имен пользователей.

TNT может также работать как мост между AIM и электронной почтой. Это очень удобно, если вы хотите получать сообщения из AIM на ваш почтовый адрес. Это выполняется с помощью команды tnt-toggle-email (C-x t M). И для ее работы нужно задать две переменные tnt-email-to-pipe-to и tnt-email-binary.

В том случае, если у вас несколько зарегистрированных имен, то вы можете использовать команду tnt-switch-user (C-x t s) для переключения между разными именами.

Команда tnt-mute (C-x t m) может использоваться для включения и отключения звуковых сигналов, используемых TNT для оповещения пользователя.

Настройка

Настройку TNT можно осуществлять как с помощью стандартных механизмов настройки Emacs, так и с помощью кода на Emacs Lisp. Для вызова настройки можно использовать команду M-x tnt-customize, или M-x customize-group tnt.

Настройка входа в систему

TNT позволяет пользователю использовать несколько учетных записей для использования. Для задания имени и пароля для входа, сразу после запуска TNT, используются переменные tnt-default-username и tnt-default-password. А для задания связей между именами и паролями в учетных записях, используется ассоциативный список tnt-username-alist. Но будьте осторожны с этими переменными — помните, что они хранятся в вашем файле настройки как обычный текст, и в случае установки неправильных прав на файл, могут быть прочитаны другими пользователями.

Настройка звука

TNT позволяет настроить проигрывание разных сигналов в зависимости от разных событий. Настройка сигналов управляется с помощью переменных tnt-beep-on-..., например tnt-beep-on-incoming-message. Кроме этого, вы можете настроить то, с помощью какой программы будут проигрываться звуковые сигналы. Эти настройки определяются переменными tnt-sound-exec и tnt-sound-exec-args.

Прочие настройки

Пользователь имеет возможность настроить множество других параметров, полное описание которых доступно в файле README из поставки TNT, и которые можно настроить используя буфер настройки Emacs.

Jabber

Поддержку сервиса Jabber в настоящее время осуществляют несколько пакетов для Emacs — ejab, который уже не развивается (замороженная версия доступна с http://ejab.sourceforge.net), smyrno, который также почти не развивается, но обладает достаточным набором возможностей (он доступен с http://www.nongnu.org/smyrno/) и Jabber.el, который активно развивается и представляет достаточно полную и расширяемую поддержку протокола Jabber. Поскольку Jabber.el динамично развивается, то я сосредоточусь исключительно на данном пакете.

Получение и установка

Пакет требует для своей работы GNU Emacs 21 и Gnus 5.10.x (из него нужно только пара файлов — sha1-el.el и hex-util.el, так что вы можете их установить не устанавливая весь Gnus), или XEmacs с поддержкой Mule, а также установленными пакетами gnus, net-utils и mule-ucs. Кроме этого, если установлен пакет FLIM, то Jabber.el может использовать его для поддержки SASL.

Установка пакета достаточно проста — надо просто скачать его дистрибутив с http://emacs-jabber.sourceforge.net, развернуть его и настроить загрузку в стартовом скрипте Emacs'а, например следующими командами:

;; если вы установили jabber.el в нестандартное место
(add-to-list 'load-path "path_to_jabber.el_dir") 
(require 'jabber) 

После загрузки пакета, необходимо задать имя пользователя и сервера, что делается с помощью команды M-x jabber-customize. С помощью этой команды можно и зарегистрировать нового пользователя, если перед выполнением команды задать префикс.

Основные действия

После настройки, Jabber.el готов к работе, необходимо только подключиться к выбранному серверу Jabber.

Подключение, отключение и состояние

Подключение к серверу выполняется одной командой — M-x jabber-connect, после подключения с помощью команды M-x jabber-send-presence можно отправить на сервер уведомление о присутствии. Эта команда дает возможность вам указать статус присутствия, если вы оставили статус пустым, то будет установлено значение по умолчанию равное Online.

Для отключения от сервера Jabber, просто выполните команду M-x jabber-disconnect, и ваше подключение будет закрыто.

Jabber.el позволяет вам изменять состояние вашей доступности. Это можно сделать как явно, с помощью команды M-x jabber-send-presence, так и программно, с помощью этой же функции. Кроме этого, вы можете запрограммировать сервер Jabber на уведомление вас, об изменении статуса нужного вам человека. Это выполняется с помощью команды M-x jabber-send-subscription-request.

Переговоры (chatting)

После подключения, пользователю становится доступен буфер roster'а, находясь в котором он может выполняться различные действия. Одно из таких действий — переговоры (или chatting). Для начала переговоров, нужно лишь выбрать персону с кем вы будете переговариваться и набрать C-c C-c, и будет создан буфер с именем *-jabber-chat-:-ИМЯПЕРСОНЫ-*, в котором вы и сможете вести переговоры.

Групповые чаты

Для подключения к групповому чату пользователь может использовать команду M-x jabber-groupchat-join, или использовать сочетание клавиш C-c C-m находясь в буфере roster'а. После подключения к чату, будет создан буфер с именем *-jabber-groupchat-:-ИМЯЧАТА-*, что позволяет одновременно участвовать в нескольких обсуждениях. Работа с буфером осуществляется точно так же, как и при обычных переговорах. Для выхода из группового чата просто наберите M-x jabber-groupchat-leave.

Кроме этого, если вы являетесь владельцем данного чата, пакет позволяет произвести его настройку, используя команду M-x jabber-groupchat-get-config.

Работа с буфером roster

Буфер roster'а называется *-jabber-*, и содержит в себе список контактов вашего roster'а. С использованием данного буфера проводятся все операции, которые требуют указания Jabber ID, такие как переговоры, групповые и многопользовательские чаты, получение информации roster'а и работа с сервисами.

Работа с сервисами jabber

Jabber.el позволяет пользователю получить доступ к большинству возможностей предоставляемых Jabber. Сюда входят — просмотр списка сервисов, поиск в каталогах, регистрация для использования сервисов, а также поддержка набора специализированных команд (ad-hoc).

Для использования каких-либо сервисов, вам сначала нужно их найти. Это может выполняться двумя способами — поиском (discovering) и просмотром (browsing). Первый способ является предпочтительным, поскольку использует новые протоколы. Для поиска сервисов могут использоваться две команды — M-x jabber-get-disco-items и M-x jabber-get-disco-info, которые выдают информацию либо о конкретном сервисе, либо о сервисах, относящихся к выбранному сервису. Эти же команды доступны через меню, которое вызывается сочетанием клавиш C-c C-i из буфера roster'а.

Поиск по сервисам выполняется с помощью команды M-x jabber-get-search, или выбором пункта меню, отображаемого с помощью сочетания клавиш C-c C-s. После выполнения запроса, вам будет показана форма поиска, которую необходимо заполнить для его выполнения.

Регистрация производится аналогично проведению поиска, только используется команда M-x jabber-get-register. С помощью данного сервиса, вы можете например, сменить свой пароль, или зарегистрироваться для использования конкретного сервиса. Как и в случае с поиском, при регистрации, модуль отобразит форму регистрации, которую вам необходимо будет заполнить.

Для работы со специализированными командами, пользователь сначала должен получить их список, поддерживаемых сервером. Это выполняется с помощью команды M-x jabber-ahc-get-list. Для выполнения специализированной команды, используется команда M-x jabber-ahc-execute-command. Специализированные команды могут использоваться, например, для того, чтобы удаленно изменить состояние вашего клиента, или другие вещи.

Настройка и расширение возможностей

Настройка клиента

Настройка клиента выполняется с помощью команды M-x jabber-customize или, что тоже самое, с помощью команды M-x customize-group jabber. Переходя по разделам группы, вы можете настроить как основные параметры, такие как имя, сервер, так и другие, например уведомления о событиях, параметры начертаний (faces) и различные хуки.

Этот процесс является интуитивно-понятным, и поэтому я не буду заострять на нем внимание. Список переменных, которые используются для настройки с помощью этих команд, приведен в руководстве для Jabber.el.

Расширение возможностей пакета

Jabber.el позволяет пользователю расширять возможности пакета, предоставляя возможности по приему и отправке новых типов запросов и ответов, осуществлять доступ к данным соединения и многое другое.

XML, который используется для общения с сервером jabber, представляется в виде списков, которые создаются модулем xml.el — каждый тег представляется в виде списка, первым элементом которого является символ представляющий тег, за тем следует список из списков атрибутов, и затем идут вложенные тэги и содержимое.

Текущее состояние roster'а представляется списком с именем *jabber-roster*. В данном списке можно найти подробную информацию о группах, состоянии соединения и прочих параметрах.

Подробное описание процесса расширения возможностей пакета приведено в разделе "Hacking and extending" справочной страницы Jabber.el

MSN

Судя по информации в Internet, кроме вышеперечисленных модулей, также существует и рудиментарная поддержка служб мгновенного обмена сообщениями MSN. Реализация этого сервиса доступна с http://www.geocities.co.jp/SiliconValley-SanJose/7474/EmacsLisp.html, но страницы написаны на японском языке, и поэтому информации не так уж и много, хотя по скриншоту видно, что клиент работает.