ICQ — средство для быстрого обмена сообщениями, особенно популярное среди пользователей Windows, также может использоваться и из Emacs. В настоящее время существует одна реализация ICQ — eicq, но она может использоваться только с XEmacs. Данная реализация поддерживает следующие возможности:
Поддержку протокола ICQ версии 8 (версия из CVS);
Регистрацию новых пользователей и смену пароля;
Передавать сообщения и URL;
Авторизовывать пользователей, обновлять мета-информацию и получать список контактов;
Преобразовывать список контактов micq и licq в собственный формат;
Изменять привязки клавиш, и писать функции на Emacs Lisp.
К сожалению данная реализация не поддерживает чаты, передачу файлов.
В связи с тем, что я не пользуюсь XEmacs, я не смог протестировать данную реализацию, но судя по документации, она достаточно просто устанавливается и настраивается.
Существует две реализации клиента Yahoo! Chat для Emacs. Первая из них называется ElGyach и доступна с http://www.nongnu.org/elgyach, а вторая называется yod.el и доступна с http://users.starpower.net/marti1/yod.el.html, однако ElGyach имеет больше возможностей по сравнению с yod.el, поэтому я остановлюсь на его описании более подробно.
ElGyach поддерживает следующие возможности:
Сохранение буферов с сообщениями в файлах;
Проверка грамматики;
Подсветка сообщений;
Поддержка шифрования с помощью AES;
Механизм дополнений имен, команд и текста;
Настройка цветов и атрибутов текста;
Одновременное использование разных учетных записей;
История сообщений, по которой можно перемещаться вперед и назад;
Игнорирование сообщений от пользователей;
Интеграция с другими модулями Emacs.
Более подробную информацию вы можете найти на страницах, относящихся к разработке 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 используется команда
        M+x
        gyach, которая создаст буфер процесса. Вы также можете
        использовать несколько процессов ElGyach одновременно.  Это
        произойдет, если вы перед выполнением команды зададите префикс, вот
        так
        C+u
        M+x
        gyach. Однако вы не можете войти больше чем в один чат, используя одно и то же имя —  это ограничение
        Yahoo! Chat.
ElGyach поддерживает выполнение различных команд, задаваемых в форме /имя. В настоящее время доступны следующие команды:
/ignore User и /unignore User — для игнорирования сообщений от определенных пользователей, и для отмены этого ограничения;
/highlight User и /unhighlight User — для подсветки сообщений от определенного пользователя, и окончания использования данной настройки;
/version — печатает номер версии ElGyach.
Основным параметром настройки являются имя и пароль
        пользователя, которые используются для подключения к Yahoo!
        Chat.  Эти значения хранятся в переменных
        gyach-yahoo-username и
        gyach-yahoo-password.
Для обеспечения настройки параметров буфера ElGyach
        может использоваться код, который будет выполняться с помощью
        хука gyach-mode-hook.
ElGyach легко расширяется. При каждом вызове команды
        вида /КОМАНДА, будет вызываться функция
        gyach-custom-КОМАНДА. Таким образом, вы
        можете добавить свою функциональность с помощью небольшого
        объема кода.
Поддержка 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.
Поддержку сервиса 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.
После подключения, пользователю становится доступен буфер 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'а называется
          *-jabber-*, и содержит в себе список
          контактов вашего roster'а.  С использованием данного буфера
          проводятся все операции, которые требуют указания Jabber ID,
          такие как переговоры, групповые и многопользовательские
          чаты, получение информации roster'а и работа с
          сервисами.
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
Судя по информации в Internet, кроме вышеперечисленных модулей, также существует и рудиментарная поддержка служб мгновенного обмена сообщениями MSN. Реализация этого сервиса доступна с http://www.geocities.co.jp/SiliconValley-SanJose/7474/EmacsLisp.html, но страницы написаны на японском языке, и поэтому информации не так уж и много, хотя по скриншоту видно, что клиент работает.