2004-01-15 00:11:04 +00:00
|
|
|
\input texinfo @c -*-texinfo-*-
|
|
|
|
@c %**start of header
|
|
|
|
@setfilename jabber.info
|
2007-01-05 22:12:15 +00:00
|
|
|
@settitle jabber.el manual 0.7.1
|
2004-01-15 00:11:04 +00:00
|
|
|
@c %**end of header
|
|
|
|
|
|
|
|
@dircategory Emacs
|
|
|
|
@direntry
|
|
|
|
* jabber.el: (jabber). Emacs Jabber client
|
|
|
|
@end direntry
|
|
|
|
|
|
|
|
@copying
|
2007-01-05 22:12:15 +00:00
|
|
|
This manual is for jabber.el, version 0.7.1.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2007-01-12 19:46:30 +00:00
|
|
|
Copyright @copyright{} 2004, 2005, 2006, 2007 Magnus Henoch, Tom Berger.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
@quotation
|
|
|
|
Permission is granted to make and distribute verbatim copies or
|
|
|
|
modified versions of this manual, provided the copyright notice and
|
|
|
|
this permission notice are preserved on all copies.
|
|
|
|
@end quotation
|
|
|
|
@end copying
|
|
|
|
|
|
|
|
@titlepage
|
2004-02-02 22:56:55 +00:00
|
|
|
@title jabber.el
|
|
|
|
@subtitle where Emacs and Jabber meet
|
|
|
|
@author by Magnus Henoch and Tom Berger
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
@page
|
|
|
|
@vskip 0pt plus 1filll
|
|
|
|
@insertcopying
|
|
|
|
@end titlepage
|
|
|
|
|
|
|
|
@contents
|
|
|
|
|
|
|
|
@ifnottex
|
|
|
|
@node Top, Introduction, (dir), (dir)
|
|
|
|
@top jabber.el manual
|
|
|
|
|
|
|
|
@insertcopying
|
|
|
|
|
|
|
|
@end ifnottex
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Introduction::
|
2004-01-29 13:04:21 +00:00
|
|
|
* Basic operation::
|
|
|
|
* Groupchat::
|
2007-01-31 20:36:37 +00:00
|
|
|
* Composing messages::
|
2004-01-29 13:04:21 +00:00
|
|
|
* Services::
|
2005-06-23 20:27:08 +00:00
|
|
|
* Personal information::
|
2007-01-05 22:12:15 +00:00
|
|
|
* Avatars::
|
2005-10-26 19:07:43 +00:00
|
|
|
* Useful features::
|
2004-12-22 21:36:34 +00:00
|
|
|
* Message history::
|
2005-12-27 21:44:30 +00:00
|
|
|
* Message events::
|
|
|
|
* Roster import and export::
|
2006-06-22 23:54:54 +00:00
|
|
|
* XMPP URIs::
|
2004-01-29 13:04:21 +00:00
|
|
|
* Customization::
|
|
|
|
* Hacking and extending::
|
2004-12-15 00:11:07 +00:00
|
|
|
* Protocol support::
|
2004-06-26 11:33:02 +00:00
|
|
|
* Concept index::
|
|
|
|
* Function index::
|
|
|
|
* Variable index::
|
2004-01-15 00:11:04 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@node Introduction, Basic operation, Top, Top
|
2004-01-15 00:11:04 +00:00
|
|
|
@chapter Introduction
|
|
|
|
|
|
|
|
jabber.el is a Jabber client running under Emacs. For more
|
|
|
|
information on the open-protocol instant messaging network Jabber,
|
2004-01-30 21:25:13 +00:00
|
|
|
please visit @uref{http://www.jabber.org}.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
As a Jabber client, jabber.el is mostly just a face in the crowd,
|
|
|
|
except that it uses buffers where GUI clients have windows. There is
|
|
|
|
a roster buffer, and to chat with someone you open a chat buffer, and
|
|
|
|
there are browse buffers (increasingly inexactly named) for
|
|
|
|
interaction with servers and services. Then again, jabber.el delivers
|
|
|
|
excellent console performance and customizable hooks (if you have
|
|
|
|
speech synthesizer software, hook it up to your presence alerts).
|
|
|
|
|
2006-01-03 20:10:33 +00:00
|
|
|
jabber.el does not yet support GPG, sending and receiving
|
2005-06-23 17:22:47 +00:00
|
|
|
roster items, and various other things.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@menu
|
|
|
|
* Contact::
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Contact, , Introduction, Introduction
|
|
|
|
@section Contact
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
jabber.el is developed by Tom Berger (e-mail
|
2004-01-29 13:04:21 +00:00
|
|
|
@email{object@@intellectronica.net}, JID @code{object@@jabber.org.uk}) and
|
2004-01-15 00:11:04 +00:00
|
|
|
Magnus Henoch (e-mail @email{mange@@freemail.hu}, JID
|
2005-05-29 19:46:17 +00:00
|
|
|
@code{legoscia@@jabber.cd.chalmers.se}). There is a web page at
|
2004-01-30 21:25:13 +00:00
|
|
|
@uref{http://intellectronica.net/emacs-jabber/}, and a Sourceforge
|
|
|
|
project page at @uref{http://sourceforge.net/projects/emacs-jabber}.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@node Basic operation, Groupchat, Introduction, Top
|
|
|
|
@chapter Basic operation
|
|
|
|
|
|
|
|
This chapter is intended as an introduction to basic usage of
|
|
|
|
jabber.el. If you have used Jabber before and are familiar with the
|
|
|
|
terminology, you might find it a bit too basic --- in that case, just
|
|
|
|
skim it, making sure to pick up the commands mentioned.
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
There are a handful of global keybindings for common commands. They
|
|
|
|
start with @kbd{C-x C-j}, and you can get a list of them by typing
|
|
|
|
@kbd{C-x C-j C-h}.
|
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@menu
|
|
|
|
* Connecting::
|
|
|
|
* Chatting::
|
|
|
|
* Presence::
|
|
|
|
* Presence subscription::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Roster buffer::
|
2004-01-29 13:04:21 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Connecting, Chatting, Basic operation, Basic operation
|
|
|
|
@section Connecting
|
|
|
|
|
|
|
|
@findex jabber-connect
|
|
|
|
@findex jabber-disconnect
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@cindex Connecting
|
2004-06-26 11:33:02 +00:00
|
|
|
@cindex Registering an account
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
I'll assume that you have already successfully installed jabber.el; if
|
|
|
|
not, consult the @file{README} file. Also, make sure you have
|
2004-03-23 21:24:28 +00:00
|
|
|
@code{(require 'jabber)} in your @file{.emacs}.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
Now, type @kbd{M-x jabber-customize}. This brings up a customize
|
|
|
|
buffer for jabber.el. The most important variables to customize are
|
2005-03-21 14:29:47 +00:00
|
|
|
@code{jabber-username} and
|
|
|
|
@code{jabber-server}.@footnote{@xref{Connection settings}, for other
|
|
|
|
things you might have to change.} Save your changes, and type
|
2004-01-15 00:11:04 +00:00
|
|
|
@kbd{M-x jabber-connect} to connect.
|
|
|
|
|
|
|
|
If you do not yet have a Jabber account, you can register one. Enter
|
2005-10-26 19:07:43 +00:00
|
|
|
your desired username for @code{jabber-username} and the server you wish
|
|
|
|
to use for @code{jabber-server}, save, and type @kbd{C-u M-x
|
2005-12-27 21:44:30 +00:00
|
|
|
jabber-connect} or @kbd{C-u C-x C-j C-c}. If the server supports
|
|
|
|
in-band registration, you will be presented with a registration form to
|
|
|
|
fill out and send. There the username you chose will be prefilled.
|
|
|
|
Don't change it, otherwise jabber.el will be confused.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
If you successfully connect, jabber.el will download your roster and
|
|
|
|
display it in a buffer called @code{*-jabber-*}.
|
|
|
|
|
2004-09-12 10:56:08 +00:00
|
|
|
By default, you will appear as ``online'' to your contacts. To change
|
2007-01-12 19:46:30 +00:00
|
|
|
this to e.g. ``away'', type @kbd{M-x jabber-send-presence} or @kbd{C-x
|
|
|
|
C-j C-p}. @xref{Presence}, for more information.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
To disconnect, type @kbd{M-x jabber-disconnect} or @kbd{C-x C-j C-d}.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
@node Chatting, Presence, Connecting, Basic operation
|
|
|
|
@section Chatting
|
|
|
|
|
|
|
|
@cindex Chatting
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-chat-with
|
2004-01-29 13:04:21 +00:00
|
|
|
|
2004-08-08 20:48:06 +00:00
|
|
|
There are several ways to open a chat buffer. The shortest way is to
|
|
|
|
put point over the person you want to chat with in the roster display
|
|
|
|
and hit RET.
|
|
|
|
|
|
|
|
You can also use menus to access commands. In the roster display, you
|
|
|
|
can access several menus through keystrokes or mouse clicks. You can
|
|
|
|
bring one big menu up by pressing the second mouse button, or you can
|
|
|
|
bring up the ``chat menu'' by typing @kbd{C-c C-c}. If you do the
|
|
|
|
latter while point is on a roster entry, that entry will be the
|
|
|
|
default value when you are asked for whom to chat with.
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
You can also use the function @code{jabber-chat-with}, which is what the
|
|
|
|
menu item is bound to. This function is bound to @kbd{C-x C-j C-j} in
|
|
|
|
the global keymap.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-10-01 22:12:32 +00:00
|
|
|
Now, try opening a chat with someone. A buffer named
|
|
|
|
@code{*-jabber-chat-:-@var{person}-*} will be created and selected.
|
|
|
|
Type your message at the end of the buffer, and hit @kbd{RET} to send
|
|
|
|
it. To include a newline in your message, use @kbd{C-j}.
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@node Presence, Presence subscription, Chatting, Basic operation
|
|
|
|
@section Presence
|
|
|
|
|
|
|
|
@cindex Presence
|
|
|
|
@cindex Sending presence
|
|
|
|
@findex jabber-send-presence
|
2004-09-12 10:56:08 +00:00
|
|
|
@findex jabber-send-default-presence
|
|
|
|
@vindex jabber-default-show
|
|
|
|
@vindex jabber-default-status
|
|
|
|
@vindex jabber-default-priority
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
``Presence'' is the Jabber term for letting other people know that you
|
|
|
|
are online, and additionally how ``available'' you are. There are
|
|
|
|
three elements to presence: availability status (called ``show''),
|
|
|
|
status message, and priority.
|
|
|
|
|
|
|
|
Your show status may either be empty (meaning simply ``online''), or
|
|
|
|
one of @code{away}, @code{xa}, @code{dnd} and @code{chat}, meaning
|
|
|
|
``away'', ``extended away'' (i.e. away for an extended period), ``do
|
|
|
|
not disturb'', and ``free for chat'', respectively. This information
|
|
|
|
is available to everyone subscribing to your presence, but technically
|
|
|
|
it does not restrict anyone's actions. You can chat with people even
|
|
|
|
if you claim to be away.
|
|
|
|
|
|
|
|
The status message is a short text complementing your show status,
|
|
|
|
such as ``at home'', ``working'', ``phone'', ``playing games'' or
|
|
|
|
whatever you want. It is sent to everyone subscribing to your
|
|
|
|
presence, but not all clients prominently display it to the user.
|
|
|
|
|
|
|
|
The priority is only interesting if you are running more than one
|
|
|
|
Jabber client at a time accessing the same account. In that case,
|
|
|
|
messages sent to you without an indication of which client to send to
|
|
|
|
are sent to the client with the highest priority.
|
|
|
|
|
|
|
|
To set your presence, use the function @code{jabber-send-presence}.
|
|
|
|
It can be called both interactively and in Lisp code. For the latter
|
|
|
|
case, use something like @code{(jabber-send-presence "away" "idle for
|
|
|
|
10 minutes" 10)}.
|
|
|
|
|
2004-09-12 10:56:08 +00:00
|
|
|
By default, jabber.el sets your presence when you connect. If you
|
|
|
|
want it not to do that, remove @code{jabber-send-default-presence}
|
|
|
|
from @code{jabber-post-connect-hook}. If you want to change the
|
|
|
|
presence that is sent, change the variables
|
|
|
|
@code{jabber-default-show}, @code{jabber-default-status} and
|
|
|
|
@code{jabber-default-priority}.
|
|
|
|
|
2004-05-15 19:52:02 +00:00
|
|
|
With jabber.el, you can set your presence remotely. @xref{Ad-Hoc Commands}.
|
2004-03-23 21:24:28 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@node Presence subscription, Roster buffer, Presence, Basic operation
|
2004-01-29 13:04:21 +00:00
|
|
|
@section Presence subscription
|
|
|
|
|
|
|
|
@cindex Presence subscription
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Subscribing to someone's presence
|
2004-01-29 13:04:21 +00:00
|
|
|
@findex jabber-send-subscription-request
|
|
|
|
|
|
|
|
Having permission to view the presence status of a person is called
|
|
|
|
@dfn{subscribing to his presence}. Presence subscription between two
|
|
|
|
persons can be asymmetric.
|
|
|
|
|
|
|
|
When jabber.el receives a presence subscription request, it will
|
|
|
|
present it to you in an alert requiring immediate response, and offer
|
|
|
|
you to send a subscription request back to that person.
|
|
|
|
|
|
|
|
To request subscription to someone, type @kbd{M-x
|
|
|
|
jabber-send-subscription-request}. You will be prompted for the JID
|
|
|
|
to send it to. This command can also be accessed through the Roster
|
2005-10-26 19:07:43 +00:00
|
|
|
menu, by typing @kbd{C-c C-r} in the roster buffer. After that, you
|
|
|
|
will probably want to give the contact a more readable name. The
|
2007-01-12 19:46:30 +00:00
|
|
|
command for that is @code{jabber-roster-change}, which is also
|
|
|
|
available in the Roster menu or by typing @kbd{e} on a person in the
|
|
|
|
roster buffer.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@node Roster buffer, , Presence subscription, Basic operation
|
|
|
|
@section The roster buffer
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Roster buffer, basics
|
2004-01-30 21:25:13 +00:00
|
|
|
@cindex Menus
|
|
|
|
@cindex Key bindings
|
|
|
|
@findex jabber-display-roster
|
|
|
|
|
|
|
|
The roster buffer is called @code{*-jabber-*}. It simply contains a
|
|
|
|
list of the contacts on your roster.
|
|
|
|
|
|
|
|
In the roster buffer, any command which requires a JID will default to
|
|
|
|
the JID under point when called. These commands can be called through
|
|
|
|
either keyboard menus or mouse menus. To open a menu with the mouse,
|
2004-02-16 21:03:17 +00:00
|
|
|
simply press the second mouse button over the JID in
|
|
|
|
question.@footnote{For some reason, mouse menus don't work in XEmacs.
|
|
|
|
Patches welcome.} This will bring up a menu with all available
|
|
|
|
actions. The keyboard menus are split into categories: Chat, Roster,
|
|
|
|
Information, MUC (Multi-User Chat, or groupchat) and Services, opened
|
|
|
|
by @kbd{C-c C-c}, @kbd{C-c C-r}, @kbd{C-c C-i}, @kbd{C-c C-m} and
|
|
|
|
@kbd{C-c C-s}, respectively.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
2005-06-23 17:22:47 +00:00
|
|
|
A list of keybindings is displayed at the top of the roster buffer.
|
|
|
|
You can turn it off by setting @code{jabber-roster-show-bindings} to
|
|
|
|
nil.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
You can call @code{jabber-display-roster} to redisplay your roster
|
|
|
|
according to changed preferences (@pxref{Customizing the roster
|
|
|
|
buffer}). This will not refetch your roster from the server.
|
|
|
|
Refetching the roster is usually not needed, since updates are pushed
|
|
|
|
to clients automatically.
|
|
|
|
|
|
|
|
You can choose not to have the roster updated automatically on
|
|
|
|
presence changes (@pxref{Presence alerts}). In that case, you need to
|
|
|
|
call @code{jabber-display-roster} manually.
|
|
|
|
|
2007-01-31 20:36:37 +00:00
|
|
|
@node Groupchat, Composing messages, Basic operation, Top
|
2004-01-29 13:04:21 +00:00
|
|
|
@chapter Groupchat
|
|
|
|
|
|
|
|
@cindex Groupchat
|
|
|
|
@cindex MUC
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Chatrooms
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
The groupchat menu can be accessed by typing @kbd{C-c C-m} in the
|
|
|
|
roster buffer. You can also type the commands directly, as will be
|
|
|
|
shown here.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@findex jabber-groupchat-join
|
|
|
|
@cindex Joining a groupchat
|
|
|
|
@cindex Changing nickname
|
|
|
|
@cindex Nickname, changing
|
2004-01-29 13:04:21 +00:00
|
|
|
To join a groupchat, type @kbd{M-x jabber-groupchat-join}. You will
|
|
|
|
be prompted for the groupchat to join, and your nickname in the
|
|
|
|
groupchat. This nickname doesn't need to have any correlation to your
|
|
|
|
JID; in fact, groupchats are usually (but not always) configured such
|
2005-06-23 17:22:47 +00:00
|
|
|
that only moderators can see your JID. You can change your nickname
|
2006-01-13 20:07:51 +00:00
|
|
|
with @kbd{M-x jabber-muc-nick}. @xref{Automation}, for setting default
|
|
|
|
nicknames.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
2007-01-31 20:37:06 +00:00
|
|
|
@cindex query groupchat
|
|
|
|
@vindex jabber-muc-disable-disco-check
|
|
|
|
When trying to join a room, jabber.el first sends a service discovery
|
|
|
|
info request to the room, to find out whether it exists and what
|
|
|
|
features are enabled (in particular whether the room is
|
|
|
|
password-protected). However, this can cause problems with some buggy
|
|
|
|
MUC services (or services that respond in a way that jabber.el doesn't
|
|
|
|
expect). A workaround for that is to set
|
|
|
|
@code{jabber-muc-disable-disco-check} to t; however, the bug should be
|
|
|
|
unearthed and fixed.
|
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
Groupchat messages will be displayed in a buffer called
|
|
|
|
@code{*-jabber-groupchat-:-@var{groupchat}-*}. It works much like the
|
|
|
|
chat buffer.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Topic, MUC
|
|
|
|
@findex jabber-muc-set-topic
|
|
|
|
To change the topic of a groupchat, type @kbd{M-x jabber-muc-set-topic}.
|
|
|
|
The current topic is shown in the header line.
|
2005-10-17 19:13:25 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@findex jabber-groupchat-leave
|
2004-01-29 13:04:21 +00:00
|
|
|
To leave a groupchat, type @kbd{M-x jabber-groupchat-leave}.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@findex jabber-groupchat-get-config
|
2004-01-29 13:04:21 +00:00
|
|
|
If you are the owner of a groupchat, you can change its configuration
|
|
|
|
by typing @kbd{M-x jabber-groupchat-get-config}. A configuration form
|
|
|
|
will be rendered in new buffer.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@findex jabber-muc-names
|
2004-12-21 16:09:43 +00:00
|
|
|
To see which people are in a groupchat, type @kbd{M-x
|
|
|
|
jabber-muc-names}. This gives a list of nicknames, ``roles'',
|
2005-10-26 19:07:43 +00:00
|
|
|
``affiliations'', and possibly JIDs. @xref{MUC Administration}, for
|
|
|
|
the meaning of roles and affiliations.
|
2005-06-23 17:22:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Automation::
|
|
|
|
* Invitations::
|
|
|
|
* Private messages::
|
2005-10-26 19:07:43 +00:00
|
|
|
* MUC Administration::
|
2005-06-23 17:22:47 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Automation, Invitations, Groupchat, Groupchat
|
|
|
|
@section Automation
|
|
|
|
|
|
|
|
@vindex jabber-muc-default-nicknames
|
|
|
|
@vindex jabber-muc-autojoin
|
|
|
|
@findex jabber-muc-autojoin
|
|
|
|
@cindex Default MUC nickname
|
|
|
|
@cindex Autojoin chat rooms
|
|
|
|
|
|
|
|
You can select a default nickname by setting @code{jabber-nickname}.
|
|
|
|
Additionally, you can set different nicknames for different groups, by
|
|
|
|
customizing @code{jabber-muc-default-nicknames}. There you specify
|
|
|
|
the JID of the group, and your preferred nickname.
|
|
|
|
|
|
|
|
If you want to automatically join certain rooms when connecting, you
|
|
|
|
can set @code{jabber-muc-autojoin} to a list containing the JIDs of
|
|
|
|
the rooms you want to enter. To disable this feature, remove
|
|
|
|
@code{jabber-muc-autojoin} from @code{jabber-post-connect-hook}.
|
|
|
|
|
|
|
|
@node Invitations, Private messages, Automation, Groupchat
|
|
|
|
@section Invitations
|
|
|
|
|
|
|
|
@cindex Invitations
|
|
|
|
@findex jabber-muc-invite
|
|
|
|
|
|
|
|
You can invite someone to a groupchat with @kbd{M-x jabber-muc-invite}
|
|
|
|
(also available in the MUC menu). Pay attention to the order of the
|
|
|
|
arguments --- as both users and rooms are just JIDs, it is technically
|
|
|
|
possible to invite a room to a user, but that's probably not what you
|
|
|
|
want.
|
|
|
|
|
|
|
|
When you receive an invitation, it appears in the chat buffer along
|
|
|
|
with two buttons, ``Accept'' and ``Decline''. Pressing ``Accept''
|
|
|
|
enters the room, as you would expect. Pressing ``Decline'' gives you
|
|
|
|
an opportunity to state the reason why you're not joining.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node Private messages, MUC Administration, Invitations, Groupchat
|
2005-06-23 17:22:47 +00:00
|
|
|
@section Private messages
|
|
|
|
|
|
|
|
@cindex Private MUC messages
|
|
|
|
@findex jabber-muc-private
|
|
|
|
|
|
|
|
You can open a private chat with a participant in a chat room with
|
|
|
|
@kbd{M-x jabber-muc-private} (or by using the MUC menu). This creates
|
|
|
|
a buffer with the name
|
|
|
|
@code{*-jabber-muc-priv-@var{group}-@var{nickname}-*} (customizable by
|
|
|
|
@code{jabber-muc-private-buffer-format}), which behaves mostly like an
|
|
|
|
ordinary chat buffer. This buffer will also be created if someone
|
|
|
|
sends a private message to you.
|
|
|
|
|
|
|
|
Private MUC messages use the same alerts as normal chat messages.
|
|
|
|
@xref{Message alerts}.
|
2004-02-03 13:22:26 +00:00
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node MUC Administration, , Private messages, Groupchat
|
|
|
|
@section Administration
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
Administration of a MUC room mostly consists of managing roles and
|
|
|
|
affiliations. Roles are temporary, and apply until the user leaves the
|
|
|
|
room. Affiliations are permanent, and based on JIDs.
|
|
|
|
|
|
|
|
@subsection Roles
|
|
|
|
|
|
|
|
@findex jabber-muc-set-role
|
|
|
|
@cindex Kicking, MUC
|
|
|
|
@cindex Voice, MUC
|
|
|
|
@cindex Moderator, MUC
|
|
|
|
@cindex Roles, MUC
|
|
|
|
If you have moderator privileges, you can change the role of a
|
|
|
|
participant with @kbd{M-x jabber-muc-set-role}. Kicking means setting
|
|
|
|
the role to ``none''. Granting and revoking voice are ``participant''
|
|
|
|
and ``visitor'', respectively. ``moderator'' gives moderator
|
|
|
|
privileges, obviously.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
The possible roles are:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item moderator
|
|
|
|
Has voice, can change other people's roles.
|
|
|
|
|
|
|
|
@item participant
|
|
|
|
Has voice.
|
|
|
|
|
|
|
|
@item visitor
|
|
|
|
Doesn't have voice (can't send messages to everyone, but can send
|
|
|
|
private messages)
|
|
|
|
|
|
|
|
@item none
|
|
|
|
Not in room.
|
|
|
|
@end table
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@subsection Affiliations
|
|
|
|
|
|
|
|
@findex jabber-muc-set-affiliation
|
|
|
|
@cindex Affiliations, MUC
|
|
|
|
@cindex Banning, MUC
|
|
|
|
If you have admin or owner privileges, you can change the affiliation of
|
|
|
|
a user with @kbd{M-x jabber-muc-set-affiliation}. Affiliation is
|
|
|
|
persistent, and based on JIDs. Depending of your affiliation and the
|
|
|
|
MUC implementation, you might not be allowed to perform all kinds of
|
|
|
|
changes, and maybe not in one step.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
Affiliations are:
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
@item owner
|
|
|
|
Can destroy room, appoint admins, make people members, ban people.
|
|
|
|
|
|
|
|
@item admin
|
|
|
|
Can make people members or ban people.
|
|
|
|
|
|
|
|
@item member
|
2006-01-13 20:07:51 +00:00
|
|
|
Can enter the room, and has voice by default.
|
2005-10-26 19:07:43 +00:00
|
|
|
|
|
|
|
@item none
|
2006-01-13 20:07:51 +00:00
|
|
|
Rights depend on room configuration. The room might be members-only, or
|
|
|
|
grant voice only to members.
|
2005-10-26 19:07:43 +00:00
|
|
|
|
|
|
|
@item outcast
|
|
|
|
Banned from the room
|
|
|
|
@end table
|
|
|
|
|
|
|
|
|
2007-01-31 20:36:37 +00:00
|
|
|
@node Composing messages, Services, Groupchat, Top
|
|
|
|
@chapter Composing messages
|
2005-10-26 19:07:43 +00:00
|
|
|
|
2007-01-31 20:36:37 +00:00
|
|
|
@findex jabber-compose
|
|
|
|
@cindex composing messages
|
|
|
|
@cindex message composition
|
|
|
|
|
|
|
|
The chat buffer interface can be inconvenient for some purposes. As you
|
|
|
|
can't use @kbd{RET} to insert a newline (use @kbd{C-j} for that),
|
|
|
|
writing a longer message can be painful. Also, it is not possible to
|
|
|
|
include a subject in the message, or send the message to multiple
|
|
|
|
recipients.
|
|
|
|
|
|
|
|
These features are implemented by the message composing tool. Type
|
|
|
|
@kbd{M-x jabber-compose} to start it. In the buffer that comes up, you
|
|
|
|
can specify recipients, enter a subject, and type your message.
|
|
|
|
|
|
|
|
@node Services, Personal information, Composing messages, Top
|
2004-01-29 13:04:21 +00:00
|
|
|
@chapter Services
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@cindex Browse buffers
|
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
Not every Jabber entity is a physical person. There are many
|
|
|
|
automatic entities, called servers, services, components, agents,
|
|
|
|
transports and other names. The use of these is described here.
|
|
|
|
|
|
|
|
The functions described in this chapter use @dfn{browse buffers}.
|
|
|
|
Browse buffers are named @code{*-jabber-browse-:-@var{service}-*},
|
2005-10-26 19:07:43 +00:00
|
|
|
sometimes with a numerical suffix. The different menus have the same
|
|
|
|
keybindings as in the roster buffer, and if you call a function
|
|
|
|
operating on a JID while point is over a JID, that JID will be the
|
|
|
|
default value, so you don't have to type it or copy it yourself.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
@menu
|
|
|
|
* Service discovery and browsing::
|
|
|
|
* Registering::
|
|
|
|
* Searching::
|
2004-03-23 21:24:28 +00:00
|
|
|
* Ad-Hoc Commands::
|
2004-01-29 13:04:21 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Service discovery and browsing, Registering, Services, Services
|
|
|
|
@section Service discovery and browsing
|
|
|
|
|
|
|
|
@cindex Service discovery
|
|
|
|
@cindex Browsing
|
|
|
|
@findex jabber-get-browse
|
|
|
|
@findex jabber-get-disco-items
|
|
|
|
@findex jabber-get-disco-info
|
|
|
|
|
|
|
|
To find services you want to use, you need to discover them first.
|
|
|
|
This can be done with either service discovery or browsing. Service
|
|
|
|
discovery is the newer and preferred protocol, while browsing is still
|
|
|
|
used by much software. The use of both is very similar.
|
|
|
|
|
|
|
|
The most common use of service discovery is to browse your home
|
|
|
|
server, to see what services are provided locally. Note, however,
|
|
|
|
that this is no restriction; you can use services from all over the
|
|
|
|
network.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
For service discovery there are two commands,
|
2004-01-29 13:04:21 +00:00
|
|
|
@code{jabber-get-disco-items} and @code{jabber-get-disco-info},
|
|
|
|
depending on whether you want information about that specific JID or
|
2005-10-26 19:07:43 +00:00
|
|
|
about services related to it, respectively. To start browsing, type
|
|
|
|
@kbd{M-x jabber-get-browse} and enter the JID you want to browse.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
These commands can be accessed from the Info menu, which is opened by
|
|
|
|
typing @kbd{C-c C-i}.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
If you think that the interface to service discovery is awkward and
|
|
|
|
should be replaced with something better, you are completely right.
|
|
|
|
|
2004-01-29 13:04:21 +00:00
|
|
|
@node Registering, Searching, Service discovery and browsing, Services
|
|
|
|
@section Registering
|
|
|
|
|
|
|
|
@cindex Registration
|
|
|
|
@cindex Cancelling registration
|
|
|
|
@cindex Changing password
|
|
|
|
@cindex Gateway registration
|
|
|
|
@cindex Password change
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Account removal
|
|
|
|
@cindex Removing an account
|
2004-01-29 13:04:21 +00:00
|
|
|
@findex jabber-get-register
|
|
|
|
|
|
|
|
Some services, in particular user directories and gateways to legacy
|
|
|
|
IM systems, require registration. To register with such a service,
|
|
|
|
either type @kbd{M-x jabber-get-register} or select it from the
|
|
|
|
Service menu, which is opened by typing @kbd{C-c C-s}. You have to
|
|
|
|
know the service's JID, possibly from service discovery.
|
|
|
|
(@pxref{Service discovery and browsing})
|
|
|
|
|
|
|
|
This is also the way to change your registration details, e.g. your
|
|
|
|
password --- just ask to register with that service again. To change
|
|
|
|
the password of your Jabber account, ask to register with your Jabber
|
2004-03-28 13:20:07 +00:00
|
|
|
server.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
Please note that any passwords sent in this way will be sent in
|
2005-10-26 19:07:43 +00:00
|
|
|
cleartext to your Jabber server, unless you have enabled SSL encryption
|
|
|
|
(@pxref{Connection settings}), and possibly sent in cleartext from your
|
|
|
|
server to the server hosting the service.
|
2004-01-29 13:04:21 +00:00
|
|
|
|
|
|
|
jabber.el will then request a registration form from that service. If
|
|
|
|
for some reason the service does not answer (maybe network problems,
|
|
|
|
or some services neither support registration nor report errors about
|
|
|
|
that) that will be the last thing you saw about it. jabber.el will
|
|
|
|
not report timeout errors, but rather simply wait until you shut it
|
|
|
|
down.
|
|
|
|
|
|
|
|
Once the response arrives, the form will be rendered in a browse
|
|
|
|
buffer. Just fill out the fields, and hit Submit. You will receive
|
|
|
|
confirmation of your registration in the echo area.
|
|
|
|
|
|
|
|
To cancel an existing registration (and also for cancelling your
|
|
|
|
Jabber account, if you sent a registration request to your server),
|
|
|
|
hit Cancel. The unregistration will be confirmed in the echo area.
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
@node Searching, Ad-Hoc Commands, Registering, Services
|
2004-01-29 13:04:21 +00:00
|
|
|
@section Searching
|
|
|
|
|
|
|
|
@cindex Searching
|
|
|
|
@findex jabber-get-search
|
|
|
|
|
|
|
|
Some services, notably user directories and gateways to legacy IM
|
|
|
|
systems, allow searching. Searching in Jabber generally means
|
|
|
|
searching for someone's JID, but the protocol is general enough to
|
|
|
|
support most databases.
|
|
|
|
|
|
|
|
To search a service, either type @kbd{M-x jabber-get-search} or select
|
|
|
|
it from the Service menu, which is opened by typing @kbd{C-c C-s}.
|
|
|
|
|
|
|
|
Just like with registration, this command sends a request for a search
|
|
|
|
form, and displays it if and when the response arrives. Enter your
|
|
|
|
search and submit it. Search results will be displayed in a different
|
|
|
|
browse buffer.
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
@node Ad-Hoc Commands, , Searching, Services
|
|
|
|
@section Ad-Hoc Commands
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@cindex Ad-Hoc Commands
|
|
|
|
@findex jabber-ahc-get-list
|
|
|
|
@findex jabber-ahc-execute-command
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
jabber.el supports a subset of JEP-0050, the standard for Ad-Hoc
|
|
|
|
Commands. As the name implies, this can be used for just about
|
2005-10-26 19:07:43 +00:00
|
|
|
anything. It has been used for remote-controlling clients (e.g. Psi),
|
|
|
|
and administering services (e.g. PyMSNt).
|
2004-03-23 21:24:28 +00:00
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
Currently, jabber.el uses ad-hoc commands for setting presence remotely.
|
|
|
|
If you realize that you forgot to set your client to ``away'' with a low
|
|
|
|
priority, you can do it remotely.@footnote{Most Jabber servers also
|
|
|
|
support kicking a client off the net by logging in with another client
|
|
|
|
with exactly the same resource.}
|
2004-03-23 21:24:28 +00:00
|
|
|
|
|
|
|
The commands for executing ad-hoc commands are available under the
|
|
|
|
Service menu, which is opened by typing @kbd{C-c C-s}.
|
|
|
|
|
|
|
|
To find which commands are available, run ``Request command-list''
|
|
|
|
(@code{jabber-ahc-get-list}).@footnote{This is the same thing as a
|
|
|
|
disco items request to the node
|
|
|
|
@code{http://jabber.org/protocol/commands}.}
|
|
|
|
|
|
|
|
To run a command from the list, put point over it and run ``Execute
|
|
|
|
command'' (@code{jabber-ahc-execute-command}), accepting the defaults
|
|
|
|
for JID and node. (If you already know those, you could of course
|
|
|
|
enter them yourself) The form you get should hopefully be
|
|
|
|
self-explanatory.
|
|
|
|
|
2007-01-05 22:12:15 +00:00
|
|
|
@node Personal information, Avatars, Services, Top
|
2005-06-23 17:22:47 +00:00
|
|
|
@chapter Personal information
|
|
|
|
|
|
|
|
@cindex vCard
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Personal information
|
2005-06-23 17:22:47 +00:00
|
|
|
@findex jabber-vcard-get
|
|
|
|
@findex jabber-vcard-edit
|
|
|
|
|
|
|
|
The Jabber way of handling personal information (name, addresses,
|
|
|
|
phone numbers, etc) is ``vCards'' encoded in XML. You can get
|
|
|
|
information about a user by running @kbd{M-x jabber-vcard-get}, and
|
|
|
|
you can edit your own information by running @kbd{M-x
|
|
|
|
jabber-vcard-edit}.
|
|
|
|
|
|
|
|
The form for editing your information can be slightly confusing ---
|
|
|
|
you are allowed to enter any number of addresses, phone numbers and
|
|
|
|
e-mail addresses, each of which has a set of orthogonal properties.
|
|
|
|
You can add and remove items with the [INS] and [DEL] buttons,
|
|
|
|
respectively.
|
|
|
|
|
2007-01-05 22:12:15 +00:00
|
|
|
This is also where you set your avatar (@pxref{Avatars}). The size of
|
|
|
|
your avatar file is limited to 8 kilobytes.
|
|
|
|
|
|
|
|
@node Avatars, Useful features, Personal information, Top
|
|
|
|
@chapter Avatars
|
|
|
|
|
|
|
|
@cindex avatars
|
|
|
|
@vindex jabber-vcard-avatars-retrieve
|
|
|
|
@vindex jabber-vcard-avatars-publish
|
|
|
|
@vindex jabber-avatar-cache-directory
|
|
|
|
|
|
|
|
jabber.el supports viewing and publishing avatars according to XEP-0153,
|
|
|
|
vCard-Based Avatars. By default, if you have an avatar in your vCard
|
|
|
|
(@pxref{Personal information}), it will be published for others to see,
|
|
|
|
and if other people publish their avatars, they will be displayed in the
|
|
|
|
roster buffer and in the header line of chat buffers, assuming that your
|
|
|
|
Emacs can display images.
|
|
|
|
|
|
|
|
To disable retrieval of other people's avatars, set
|
|
|
|
@code{jabber-vcard-avatars-retrieve} to nil. To disable publishing of
|
|
|
|
your own avatar, set @code{jabber-vcard-avatars-publish} to nil.
|
|
|
|
|
|
|
|
Avatars are cached in the directory specified by
|
|
|
|
@code{jabber-avatar-cache-directory}, by default
|
|
|
|
@file{~/.jabber-avatars/}. The cache is never cleaned, so you might
|
|
|
|
want to do that yourself from time to time.
|
|
|
|
|
|
|
|
@node Useful features, Message history, Avatars, Top
|
2005-10-26 19:07:43 +00:00
|
|
|
@chapter Useful features
|
|
|
|
|
|
|
|
jabber.el includes a number of features meant to improve the user
|
|
|
|
interface and do other useful things.
|
|
|
|
|
|
|
|
@menu
|
2007-01-05 22:12:07 +00:00
|
|
|
* Autoaway::
|
2005-10-26 19:07:43 +00:00
|
|
|
* Modeline status::
|
|
|
|
* Keepalive::
|
|
|
|
* Tracking activity::
|
|
|
|
* Watch buddies::
|
2005-12-27 21:44:30 +00:00
|
|
|
* Spell checking::
|
2005-10-26 19:07:43 +00:00
|
|
|
@end menu
|
|
|
|
|
2007-01-05 22:12:07 +00:00
|
|
|
@node Autoaway, Modeline status, Useful features, Useful features
|
|
|
|
@section Autoaway
|
|
|
|
|
|
|
|
@cindex autoaway
|
|
|
|
@cindex idle
|
|
|
|
@cindex xprintidle
|
|
|
|
@vindex jabber-autoaway-method
|
|
|
|
|
|
|
|
It is possible to automatically set your status to ``away'' when you
|
|
|
|
haven't used your computer for a while. This lets your contacts know
|
|
|
|
that you might not answer immediately.
|
|
|
|
|
|
|
|
To activate this feature, add @code{jabber-autoaway-start} to
|
|
|
|
@code{jabber-post-connect-hook}, e.g:
|
|
|
|
@example
|
|
|
|
(add-hook 'jabber-post-connect-hook 'jabber-autoaway-start)
|
|
|
|
@end example
|
|
|
|
|
|
|
|
There are different methods to find how long you have been ``idle''.
|
|
|
|
The method to use is specified by @code{jabber-autoaway-method}. The
|
|
|
|
value of this variable should be a function that returns the number of
|
|
|
|
seconds you have been idle. Three functions are provided.
|
|
|
|
|
|
|
|
If you are running Emacs 22 and thus have the @code{current-idle-time}
|
|
|
|
function, it is used by default. Note that this method only measures
|
|
|
|
the time since you last interacted with Emacs, and thus disregards
|
|
|
|
activity in other programs.
|
|
|
|
|
|
|
|
If you are using the X Window System, you can use the
|
|
|
|
@uref{http://www.dtek.chalmers.se/~henoch/text/xprintidle.html,
|
|
|
|
xprintidle} program. Make sure that @code{jabber-xprintidle-program} is
|
|
|
|
set to the correct file name. This uses the same method as XScreensaver
|
|
|
|
to find your idle time.
|
|
|
|
|
|
|
|
If you are using Emacs on a GNU/Linux terminal, the function
|
|
|
|
@code{jabber-termatime-get-idle-time} is used by default.
|
|
|
|
|
|
|
|
@node Modeline status, Keepalive, Autoaway, Useful features
|
2005-10-26 19:07:43 +00:00
|
|
|
@section Modeline status
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Modeline
|
2005-10-26 19:07:43 +00:00
|
|
|
@findex jabber-mode-line-mode
|
|
|
|
@vindex jabber-mode-line-mode
|
|
|
|
@vindex jabber-mode-line-compact
|
|
|
|
|
|
|
|
By typing @kbd{M-x jabber-mode-line-mode} you toggle display of some
|
|
|
|
status in mode lines. The information is your own presence status,
|
|
|
|
and some numbers showing the status of your roster contacts. By
|
|
|
|
default, there are three numbers, for ``online'' (chatty and online),
|
|
|
|
``away'' (away, extended away and do not disturb) and offline
|
|
|
|
contacts.
|
|
|
|
|
|
|
|
If you set @code{jabber-mode-line-compact} to nil, you get a complete
|
|
|
|
breakdown of presence status. That gives you six numbers indicating
|
|
|
|
the number of chatty, online, away, extended away, dnd, and offline
|
|
|
|
contacts, respectively.
|
|
|
|
|
|
|
|
@node Keepalive, Tracking activity, Modeline status, Useful features
|
|
|
|
@section Keepalive
|
2004-07-03 17:22:02 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Keepalive
|
|
|
|
@cindex Detecting lost connections
|
2004-07-03 17:22:02 +00:00
|
|
|
@findex jabber-keepalive-start
|
|
|
|
@findex jabber-keepalive-stop
|
|
|
|
@vindex jabber-keepalive-interval
|
|
|
|
@vindex jabber-keepalive-timeout
|
|
|
|
|
|
|
|
Sometimes network connections are lost without you noticing. This is
|
|
|
|
especially true with Jabber, as it is quite reasonable to keep the
|
|
|
|
connection open for a long time without either sending or receiving
|
|
|
|
any data.
|
|
|
|
|
|
|
|
If you want to detect a lost connection earlier, you can use the
|
|
|
|
keepalive functions. Type @kbd{M-x jabber-keepalive-start} to start
|
|
|
|
it, and @kbd{M-x jabber-keepalive-stop} to stop it.
|
|
|
|
|
|
|
|
These functions work by asking your server for the time once in a
|
|
|
|
while (by default every ten minutes), and considering the connection
|
|
|
|
lost if the server doesn't answer within reasonable time (by default
|
|
|
|
20 seconds).
|
|
|
|
|
|
|
|
You can customize the interval and the timeout with the variables
|
|
|
|
@code{jabber-keepalive-interval} and @code{jabber-keepalive-timeout},
|
|
|
|
respectively.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node Tracking activity, Watch buddies, Keepalive, Useful features
|
|
|
|
@section Tracking activity
|
2004-11-18 14:26:41 +00:00
|
|
|
|
|
|
|
@cindex Activity
|
|
|
|
@findex jabber-activity-mode
|
2004-12-22 21:25:07 +00:00
|
|
|
@vindex jabber-activity-make-strings
|
|
|
|
@vindex jabber-activity-query-unread
|
2005-12-27 21:44:30 +00:00
|
|
|
@vindex jabber-activity-count-in-title
|
|
|
|
@vindex jabber-activity-count-in-title-format
|
2004-11-18 14:26:41 +00:00
|
|
|
|
|
|
|
When you're working on something important you might want to delay
|
|
|
|
responding to incoming messages. However, when you're done working,
|
|
|
|
will you remember them? If you're anything like me, you'll have a lot
|
|
|
|
of buffers in your Emacs session, and a jabber chat buffer can easily
|
|
|
|
get lost.
|
|
|
|
|
|
|
|
When you type @kbd{M-x jabber-activity-mode} Emacs starts keeping
|
2005-12-27 21:44:30 +00:00
|
|
|
track of the buddies which have messaged you since last you visited
|
2004-11-18 14:26:41 +00:00
|
|
|
their buffer, and will display them in mode line. As soon as you
|
|
|
|
visit their buffer they disappear from the mode line, indicating that
|
|
|
|
you've read their message.
|
|
|
|
|
2004-12-22 21:25:07 +00:00
|
|
|
If your mode line fills over because of these notifications, you can
|
|
|
|
customize @code{jabber-activity-make-strings} to shorten them to the
|
2005-01-15 09:12:46 +00:00
|
|
|
shortest possibly unambiguous form.
|
2004-12-22 21:25:07 +00:00
|
|
|
|
|
|
|
If you try to exit Emacs while you still have unread messages, you
|
|
|
|
will be notified and asked about this. If you don't like that, set
|
|
|
|
@code{jabber-activity-query-unread} to nil.
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
If you want to display the number of unread buffers in the frame title,
|
|
|
|
set @code{jabber-activity-count-in-title} to t. The format of the
|
|
|
|
number can be changed through
|
|
|
|
@code{jabber-activity-count-in-title-format}.
|
|
|
|
|
|
|
|
For complete customizability, write a hook function for
|
|
|
|
@code{jabber-activity-update-hook}. From that function, you can take
|
|
|
|
action based on @code{jabber-activity-jids},
|
|
|
|
@code{jabber-activity-mode-string}, and
|
|
|
|
@code{jabber-activity-count-string}.
|
|
|
|
|
|
|
|
@node Watch buddies, Spell checking, Tracking activity, Useful features
|
2005-10-26 19:07:43 +00:00
|
|
|
@section Watch buddies
|
2004-11-05 23:22:07 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Watch
|
|
|
|
@cindex Online notifications
|
2004-11-05 23:22:07 +00:00
|
|
|
@findex jabber-watch-add
|
|
|
|
@findex jabber-watch-remove
|
|
|
|
|
|
|
|
Sometimes you might be waiting for a certain person to come online,
|
|
|
|
and you don't want that occasion to get lost in the noise. To get an
|
|
|
|
obtrusive message when that happens, type @kbd{M-x jabber-watch-add}
|
2004-12-21 22:38:25 +00:00
|
|
|
and select the person in question. You can enter a comment, to
|
|
|
|
remember why you added the watch.
|
2004-11-05 23:22:07 +00:00
|
|
|
|
|
|
|
You will get a message whenever that person goes from offline to
|
|
|
|
online. jabber.el will remember this for the rest of your Emacs
|
|
|
|
session (it's not saved to disk, though), but if you want to get rid
|
|
|
|
of it, type @kbd{M-x jabber-watch-remove}.
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
@node Spell checking, , Watch buddies, Useful features
|
|
|
|
@section Spell checking
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex flyspell
|
|
|
|
@cindex Spell checking
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
You can activate spell checking in a chat buffer with @kbd{M-x
|
|
|
|
flyspell-mode}. It will check only what you are currently writing, not
|
|
|
|
what you receive or what you have already sent. You may want to add
|
|
|
|
@code{flyspell-mode} to @code{jabber-chat-mode-hook}.
|
|
|
|
|
|
|
|
For more information about Emacs spell checking, @xref{Spelling, ,
|
|
|
|
Checking and Correcting Spelling, emacs, GNU Emacs Manual}.
|
|
|
|
|
|
|
|
@node Message history, Message events, Useful features, Top
|
2004-12-22 21:36:34 +00:00
|
|
|
@chapter Message history
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex History
|
|
|
|
@cindex Backlog
|
|
|
|
@cindex Rotation
|
2004-12-22 21:36:34 +00:00
|
|
|
@vindex jabber-history-enabled
|
2005-01-15 09:12:46 +00:00
|
|
|
@vindex jabber-global-history-filename
|
|
|
|
@vindex jabber-use-global-history
|
|
|
|
@vindex jabber-history-dir
|
|
|
|
@vindex jabber-history-enable-rotation
|
|
|
|
@vindex jabber-history-size-limit
|
|
|
|
@vindex jabber-backlog-number
|
|
|
|
@vindex jabber-backlog-days
|
2004-12-22 21:36:34 +00:00
|
|
|
|
|
|
|
If you want a record of messages sent and received, set
|
2005-01-15 09:12:46 +00:00
|
|
|
@code{jabber-history-enabled} to t. By default all messages to will
|
|
|
|
be saved to a global history file specified by
|
|
|
|
@code{jabber-global-history-filename}
|
|
|
|
(@file{~/.jabber_global_message_log} by default). If you prefer to
|
|
|
|
store your chats' history in per-contact files, you can set the
|
|
|
|
@code{jabber-use-global-history} variable to @code{nil}. When using
|
|
|
|
per-contact history, files are named by the contact JID and saved
|
|
|
|
under the directory specified by the variable
|
|
|
|
@code{jabber-history-dir} (default is @file{~/.emacs-jabber}).
|
|
|
|
|
|
|
|
There is no facility for reading old messages yet, but just reading
|
|
|
|
the file as text should be enough for many purposes.
|
2004-12-22 21:36:34 +00:00
|
|
|
|
|
|
|
When you open a new chat buffer and have entries in your history file,
|
|
|
|
the last few messages you recently exchanged with the contact in
|
|
|
|
question will be inserted. You can control how many messages with
|
|
|
|
@code{jabber-backlog-number} (by default 10), and how old messages
|
|
|
|
with @code{jabber-backlog-days} (by default 3 days).
|
|
|
|
|
2005-01-15 09:12:46 +00:00
|
|
|
If you worry about your history file(s) size, you can enable history
|
|
|
|
rotation feature by setting the variable
|
|
|
|
@code{jabber-history-enable-rotation} to @code{t} (default is
|
|
|
|
@code{nil}). This feature ``rotates'' your history files according to
|
|
|
|
the following rule: When @code{jabber-history-size-limit} (in
|
|
|
|
kilobytes) is reached, the history file is renamed to
|
|
|
|
<history-file>-<number>, where <number> is 1 or the smallest number
|
|
|
|
after the last rotation. For example, suppose you set the
|
|
|
|
@code{jabber-history-size-limit} variable to 512 and you chat with
|
|
|
|
your buddy foo@@jabber.server using the per-contact strategy to store
|
|
|
|
history files. So, when the history file (@file{foo@@jabber-server})
|
|
|
|
reaches 512K bytes, it will be renamed to @file{foo@@jabber-server-1}
|
|
|
|
and @file{foo@@jabber-server} will be set empty. Next time
|
|
|
|
@file{foo@@jabber-server} grows to 512K bytes, it will be saved as
|
|
|
|
@file{foo@@jabber-server-2} and so on. Although the example was
|
|
|
|
presented with the per-contact history file strategy, history rotation
|
|
|
|
works for both per-contact and global history logging strategies.
|
|
|
|
|
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
@node Message events, Roster import and export, Message history, Top
|
|
|
|
@chapter Message events
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Composing
|
|
|
|
@cindex Delivered
|
|
|
|
@cindex Displayed
|
2005-12-27 21:44:30 +00:00
|
|
|
@vindex jabber-events-request-these
|
|
|
|
@vindex jabber-events-confirm-delivered
|
|
|
|
@vindex jabber-events-confirm-displayed
|
|
|
|
@vindex jabber-events-confirm-composing
|
|
|
|
|
|
|
|
In the status line of the chat buffer, you can sometimes see
|
|
|
|
notifications about the progress of the message you just sent. These
|
|
|
|
states are possible:
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
Delivered to offline storage (the user will receive it on next logon)
|
|
|
|
|
|
|
|
@item
|
|
|
|
Delivered to user's client (but not necessarily displayed)
|
|
|
|
|
|
|
|
@item
|
|
|
|
Displayed to user
|
|
|
|
|
|
|
|
@item
|
|
|
|
User is composing a reply
|
|
|
|
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
The first state is only reported by servers; the other three are
|
|
|
|
reported by clients. jabber.el can report all three of them, and can
|
|
|
|
display all four; not all clients support all states, though.
|
|
|
|
|
|
|
|
If you don't want jabber.el to send out this information about you, set
|
|
|
|
the variables @code{jabber-events-confirm-delivered},
|
|
|
|
@code{jabber-events-confirm-displayed}, and/or
|
|
|
|
@code{jabber-events-confirm-composing} to nil. You can make jabber.el
|
|
|
|
not to request such information by customizing
|
|
|
|
@code{jabber-events-request-these}.
|
|
|
|
|
2006-06-22 23:54:54 +00:00
|
|
|
@node Roster import and export, XMPP URIs, Message events, Top
|
2005-12-27 21:44:30 +00:00
|
|
|
@chapter Roster import and export
|
|
|
|
|
|
|
|
@findex jabber-export-roster
|
|
|
|
@findex jabber-import-roster
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Export roster
|
|
|
|
@cindex Import roster
|
2005-12-27 21:44:30 +00:00
|
|
|
|
|
|
|
Your roster is saved on the Jabber server, and usually not in the
|
|
|
|
client. However, you might want to save the roster to a file anyway.
|
|
|
|
The most common reason for this is probably to copy it to another
|
|
|
|
account.
|
|
|
|
|
|
|
|
To export your roster to a file, type @kbd{M-x jabber-export-roster}.
|
|
|
|
A buffer will appear in which you can edit the data to be exported.
|
|
|
|
Changes done in that buffer will not affect your real roster.
|
|
|
|
|
|
|
|
To import your roster from a file, type @kbd{M-x jabber-import-roster}.
|
|
|
|
You will be able to edit the data before importing it. Items not in the
|
|
|
|
roster will be added; items in the roster will be modified to match
|
|
|
|
imported data. Subscriptions will be updated.
|
|
|
|
|
|
|
|
The format of the roster files is the XML used by roster pushes in the
|
|
|
|
XMPP protocol, in UTF-8 encoding.
|
|
|
|
|
2006-06-22 23:54:54 +00:00
|
|
|
@node XMPP URIs, Customization, Roster import and export, Top
|
|
|
|
@chapter XMPP URIs
|
|
|
|
|
|
|
|
@cindex URIs
|
|
|
|
@cindex URLs
|
|
|
|
@cindex links
|
|
|
|
@cindex xmpp: links
|
|
|
|
@cindex Mozilla integration
|
|
|
|
@cindex web browser integration
|
|
|
|
@cindex browser integration
|
|
|
|
@findex jabber-handle-uri
|
|
|
|
|
|
|
|
Many web page authors use links starting with @samp{xmpp:} for JIDs.
|
|
|
|
Your web browser could be made to pass such links to jabber.el, so that
|
|
|
|
such links are actually useful and not just decoration. How to do that
|
|
|
|
depends on your operating system and web browser.
|
|
|
|
|
|
|
|
@section Mozilla and Unix
|
|
|
|
|
|
|
|
If you use a Mozilla-based web browser on a Unix-like operating system,
|
|
|
|
follow these steps.
|
|
|
|
|
|
|
|
@enumerate
|
|
|
|
@item
|
|
|
|
Make sure you are running the Emacs server. @xref{Emacs Server, , Using
|
|
|
|
Emacs as a Server, emacs, GNU Emacs Manual}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Note the path of the @file{xmppuri.sh} file in the jabber.el
|
|
|
|
distribution, and make sure it is executable.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Set the Mozilla preference @samp{network.protocol-handler.app.xmpp} to
|
|
|
|
the path of @file{xmppuri.sh}. There are two ways to do this:
|
|
|
|
|
|
|
|
@itemize
|
|
|
|
@item
|
|
|
|
Go to the URL @samp{about:config}, right-click in the list, choose ``New
|
|
|
|
string'', and enter @samp{network.protocol-handler.app.xmpp} and the
|
|
|
|
path in the following dialogs.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Open or create the file @file{user.js} in your Mozilla profile directory
|
|
|
|
(in the same directory as @file{prefs.js}), and add the following line:
|
|
|
|
|
|
|
|
@example
|
|
|
|
user_pref("network.protocol-handler.app.xmpp", "@var{/path/to}/xmppuri.sh");
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Restart Mozilla for this change to take effect.
|
|
|
|
@end itemize
|
|
|
|
@end enumerate
|
|
|
|
|
|
|
|
@section Other systems
|
|
|
|
|
|
|
|
If you know how to pass an XMPP URI from your browser to the function
|
|
|
|
@code{jabber-handle-uri}, your contribution for this section would be
|
|
|
|
appreciated.
|
|
|
|
|
|
|
|
@node Customization, Hacking and extending, XMPP URIs, Top
|
2004-01-29 13:04:21 +00:00
|
|
|
@chapter Customization
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-customize
|
|
|
|
@cindex Customization
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
jabber.el is intended to be customizable for many tastes. After all,
|
|
|
|
this is Emacs. To open a customization buffer for jabber.el, type
|
|
|
|
@kbd{M-x jabber-customize}.
|
|
|
|
|
|
|
|
@menu
|
2005-03-21 14:29:47 +00:00
|
|
|
* Account settings::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Connection settings::
|
2005-10-17 19:13:14 +00:00
|
|
|
* Miscellaneous settings::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Customizing the roster buffer::
|
2004-09-02 06:11:39 +00:00
|
|
|
* Customizing the chat buffer::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Customizing alerts::
|
2004-09-12 10:56:08 +00:00
|
|
|
* Hooks::
|
2004-05-06 19:15:56 +00:00
|
|
|
* Debug options::
|
2004-01-30 21:25:13 +00:00
|
|
|
@end menu
|
|
|
|
|
2005-03-21 14:29:47 +00:00
|
|
|
@node Account settings, Connection settings, Customization, Customization
|
|
|
|
@section Account settings
|
2004-01-30 21:25:13 +00:00
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-username
|
|
|
|
@vindex jabber-server
|
|
|
|
@vindex jabber-password
|
|
|
|
@vindex jabber-resource
|
|
|
|
@vindex jabber-default-priority
|
|
|
|
@vindex jabber-nickname
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Username
|
|
|
|
@cindex Resource
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@code{jabber-username} is the username part of your JID.
|
|
|
|
|
|
|
|
@code{jabber-server} is the JID of your server, i.e. the hostname part
|
|
|
|
of your JID. This is usually, but not necessarily, the same as the
|
|
|
|
hostname of the server.
|
|
|
|
|
|
|
|
@code{jabber-password} is your password. You have the option to set
|
|
|
|
it here, in which case it will be stored in cleartext in your
|
|
|
|
@file{.emacs} file. If this is set to @code{nil}, you will be prompted for
|
|
|
|
your password every time you connect.
|
|
|
|
|
|
|
|
@code{jabber-resource} is the resource you want to log in under. This
|
|
|
|
only matters if you are connected to the same account from different
|
|
|
|
clients or different computers, since each connection must have a
|
|
|
|
unique resource. You might want to set this to your hostname.
|
|
|
|
|
|
|
|
@code{jabber-default-priority} is the default priority sent with your
|
|
|
|
presence. Regardless of what you have here, you can change your
|
|
|
|
priority during a session with @code{jabber-send-presence}.
|
|
|
|
@xref{Presence}, for more information on priority.
|
|
|
|
|
|
|
|
@code{jabber-nickname} is your default nickname for groupchats.
|
|
|
|
|
2005-10-17 19:13:14 +00:00
|
|
|
@node Connection settings, Miscellaneous settings, Account settings, Customization
|
2005-03-21 14:29:47 +00:00
|
|
|
@section Connection settings
|
|
|
|
|
|
|
|
@vindex jabber-network-server
|
|
|
|
@vindex jabber-port
|
|
|
|
@vindex jabber-connection-type
|
2005-09-25 10:39:32 +00:00
|
|
|
@vindex jabber-connection-ssl-program
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Connection settings
|
|
|
|
@cindex Network settings
|
2005-03-21 14:29:47 +00:00
|
|
|
@cindex SSL
|
|
|
|
@cindex TLS
|
2006-01-03 20:10:33 +00:00
|
|
|
@cindex STARTTLS
|
2007-01-05 22:12:07 +00:00
|
|
|
@cindex SRV records
|
2005-03-21 14:29:47 +00:00
|
|
|
|
|
|
|
@code{jabber-network-server} is the hostname or IP address of your
|
|
|
|
server. If it is set to @code{nil}, jabber.el will use the name in
|
|
|
|
@code{jabber-server}.
|
|
|
|
|
|
|
|
@code{jabber-port} is the TCP port of the server to connect to. If
|
|
|
|
@code{nil}, the default port is selected based on the chosen
|
|
|
|
connection method.
|
|
|
|
|
2006-04-23 15:09:56 +00:00
|
|
|
If both @code{jabber-network-server} and @code{jabber-port} are nil, and
|
|
|
|
a sufficiently modern @code{dns.el} is available, jabber.el will use SRV
|
|
|
|
records to find the right hostname and port.
|
|
|
|
|
2005-03-21 14:29:47 +00:00
|
|
|
@code{jabber-connection-type} specifies what kind of connection to
|
|
|
|
use. @code{network} means normal unencrypted network connection
|
|
|
|
(usually on port 5222), and @code{ssl} means encrypted connection
|
2006-01-03 20:10:33 +00:00
|
|
|
through GnuTLS or OpenSSL (port 5223), while @code{starttls} will
|
|
|
|
initiate an unencrypted connection and switch to encrypted if offered
|
|
|
|
by the server. You can change the settings of the encryption program
|
2006-01-10 12:33:54 +00:00
|
|
|
through @kbd{M-x customize-group RET tls}, @kbd{M-x customize-group RET starttls}
|
|
|
|
or @kbd{M-x customize-group RET ssl}, respectively.
|
2005-03-21 14:29:47 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex GnuTLS
|
|
|
|
@cindex OpenSSL
|
2005-09-25 10:39:32 +00:00
|
|
|
By default, GnuTLS will be used if the @code{tls} library is available,
|
|
|
|
and if that fails, OpenSSL will be used if the @code{ssl} library is
|
|
|
|
available. You can force the use of either program by setting
|
|
|
|
@code{jabber-connection-ssl-program} to @code{gnutls} or @code{openssl},
|
2006-01-03 20:10:33 +00:00
|
|
|
respectively. If you use @code{starttls} the library with the same name is
|
|
|
|
required, and it depends on the GnuTLS command line client.
|
2005-09-25 10:39:32 +00:00
|
|
|
|
2005-10-17 19:13:14 +00:00
|
|
|
@node Miscellaneous settings, Customizing the roster buffer, Connection settings, Customization
|
|
|
|
@section Miscellaneous settings
|
|
|
|
|
|
|
|
@findex jabber-menu
|
|
|
|
@cindex Menus
|
|
|
|
|
|
|
|
If you want a Jabber menu on the menu bar with some common commands,
|
|
|
|
type @kbd{M-x jabber-menu}. You can remove it again with @kbd{C-u M-x
|
|
|
|
jabber-menu}. Unfortunately, this cannot be changed through Customize
|
|
|
|
settings, so you need to add @code{(jabber-menu)} to your @file{.emacs}
|
|
|
|
to enable it permanently.
|
|
|
|
|
|
|
|
@node Customizing the roster buffer, Customizing the chat buffer, Miscellaneous settings, Customization
|
2004-01-30 21:25:13 +00:00
|
|
|
@section Customizing the roster buffer
|
|
|
|
|
2005-10-20 10:20:58 +00:00
|
|
|
@vindex jabber-roster-sort-functions
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-sort-order
|
|
|
|
@vindex jabber-show-resources
|
2004-08-07 17:29:02 +00:00
|
|
|
@vindex jabber-roster-line-format
|
|
|
|
@vindex jabber-resource-line-format
|
2004-10-10 10:20:08 +00:00
|
|
|
@vindex jabber-roster-buffer
|
2005-06-23 17:22:47 +00:00
|
|
|
@vindex jabber-roster-show-bindings
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Roster buffer, customizing
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Sorting the roster
|
2005-10-20 10:20:58 +00:00
|
|
|
@code{jabber-roster-sort-functions} controls how roster items are
|
|
|
|
sorted. By default, contacts are sorted first by presence, and then
|
|
|
|
alphabetically by displayed name.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@code{jabber-sort-order} controls how roster items are sorted by
|
|
|
|
presence. It is a list containing strings corresponding to show
|
|
|
|
status (@pxref{Presence}) or @code{nil}, which represents offline.
|
|
|
|
|
|
|
|
@code{jabber-show-resources} controls when your contacts' resources
|
|
|
|
are shown in the roster buffer. The default is to show resources when
|
|
|
|
a contact has more than one connected resource.
|
|
|
|
|
2004-08-07 17:29:02 +00:00
|
|
|
@code{jabber-roster-line-format} specifies how the entry for each
|
|
|
|
contact looks. It is a string where some characters are special if
|
|
|
|
preceded by a percent sign:
|
|
|
|
|
|
|
|
@table @code
|
2007-01-12 19:46:30 +00:00
|
|
|
@item %a
|
|
|
|
Avatar of contact, if any
|
2004-08-07 17:29:02 +00:00
|
|
|
@item %c
|
|
|
|
"*" if the contact is connected, or " " if not
|
2007-01-12 19:46:30 +00:00
|
|
|
@item %u
|
|
|
|
Subscription state - see below
|
2004-08-07 17:29:02 +00:00
|
|
|
@item %n
|
|
|
|
Nickname of contact, or JID if no nickname
|
|
|
|
@item %j
|
|
|
|
Bare JID of contact (without resource)
|
|
|
|
@item %r
|
|
|
|
Highest-priority resource of contact
|
|
|
|
@item %s
|
|
|
|
Availability of contact as string ("Online", "Away" etc)
|
|
|
|
@item %S
|
|
|
|
Status string specified by contact
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@code{jabber-resource-line-format} is nearly identical, except that
|
|
|
|
the values correspond to the values of the resource in question, and
|
|
|
|
that the @code{%p} escape is available, which inserts the priority of
|
|
|
|
the resource.
|
2004-05-06 19:15:38 +00:00
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@code{jabber-roster-buffer} specifies the name of the roster buffer.
|
|
|
|
If you change this, the new name will be used the next time you
|
|
|
|
connect.
|
|
|
|
|
|
|
|
@code{jabber-roster-show-bindings} controls whether to show a list of
|
|
|
|
keybindings at the top of the roster buffer. You need to run @kbd{M-x
|
|
|
|
jabber-display-roster} after changing this variable to update the display.
|
|
|
|
|
2007-01-12 19:46:30 +00:00
|
|
|
@code{%u} is replaced by one of the strings given by
|
|
|
|
`jabber-roster-subscription-display'.
|
|
|
|
|
2004-09-02 06:11:39 +00:00
|
|
|
@node Customizing the chat buffer, Customizing alerts, Customizing the roster buffer, Customization
|
|
|
|
@section Customizing the chat buffer
|
|
|
|
|
2005-09-13 18:20:19 +00:00
|
|
|
@cindex Chat buffer
|
|
|
|
@cindex Timestamps
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Faces, chat buffer
|
2004-09-02 06:11:39 +00:00
|
|
|
|
|
|
|
You can customize the look of the prompts in the chat buffer. There
|
|
|
|
are separate settings for local (i.e. your own messages) and foreign
|
|
|
|
prompts.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-text-local
|
|
|
|
@vindex jabber-chat-text-foreign
|
|
|
|
@code{jabber-chat-text-local} and @code{jabber-chat-text-foreign}
|
|
|
|
determine the faces used for chat messages.
|
|
|
|
|
|
|
|
@vindex jabber-chat-prompt-local
|
|
|
|
@vindex jabber-chat-prompt-foreign
|
2004-09-02 06:11:39 +00:00
|
|
|
@code{jabber-chat-prompt-local} and @code{jabber-chat-prompt-foreign}
|
|
|
|
determine the faces used for the prompts.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-local-prompt-format
|
|
|
|
@vindex jabber-chat-foreign-prompt-format
|
2004-09-02 06:11:39 +00:00
|
|
|
@code{jabber-chat-local-prompt-format} and
|
|
|
|
@code{jabber-chat-foreign-prompt-format} determine what text is
|
|
|
|
displayed in the prompts. They are format strings, with the following
|
|
|
|
special sequences defined:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item %t
|
|
|
|
The time when the message was sent or received
|
|
|
|
@item %n
|
|
|
|
The nickname of the user. For the foreign prompt, this is the name of
|
|
|
|
the contact in the roster, or the JID if no name set. For the local
|
|
|
|
prompt, this is the username part of your JID.
|
2007-01-12 19:46:30 +00:00
|
|
|
@item %u
|
|
|
|
The username of the user.
|
|
|
|
@item %r
|
|
|
|
The resource.
|
2004-09-02 06:11:39 +00:00
|
|
|
@item %j
|
|
|
|
The bare JID of the user
|
|
|
|
@end table
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-time-format
|
2004-09-02 06:11:39 +00:00
|
|
|
@code{jabber-chat-time-format} defines how @code{%t} shows time. Its
|
|
|
|
format is identical to that passed to @code{format-time-string}.
|
|
|
|
@xref{Time Conversion, , Time Conversion, elisp, GNU Emacs Lisp
|
|
|
|
Reference Manual}.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-delayed-time-format
|
2005-09-13 18:20:19 +00:00
|
|
|
@code{jabber-chat-delayed-time-format} is used instead of
|
|
|
|
@code{jabber-chat-time-format} for delayed messages (messages sent while
|
|
|
|
you were offline, or fetched from history). This way you can have short
|
|
|
|
timestamps everywhere except where you need long ones. You can always
|
|
|
|
see the complete timestamp in a tooltip by hovering over the prompt with
|
|
|
|
the mouse.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-print-rare-time
|
|
|
|
@vindex jabber-rare-time-format
|
|
|
|
@vindex jabber-chat-text-localBy default, timestamps are printed in the chat buffer every hour (at
|
2005-09-13 18:20:19 +00:00
|
|
|
``rare'' times). This can be toggled with
|
|
|
|
@code{jabber-print-rare-time}. You can customize the displayed time by
|
|
|
|
setting @code{jabber-rare-time-format}. Rare timestamps will be printed
|
|
|
|
whenever time formatted by that format string would change.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-header-line-format
|
|
|
|
@vindex jabber-muc-header-line-format
|
2004-10-09 12:33:51 +00:00
|
|
|
You can also customize the header line of chat buffers, by modifying
|
|
|
|
the variable @code{jabber-chat-header-line-format}. The format of
|
|
|
|
that variable is the same as that of @code{mode-line-format} and
|
|
|
|
@code{header-line-format}. @xref{Mode Line Format, , Mode-Line
|
2005-10-17 19:13:25 +00:00
|
|
|
Format, elisp, GNU Emacs Lisp Reference Manual}. For MUC buffers,
|
|
|
|
@code{jabber-muc-header-line-format} is used instead.
|
2004-10-09 12:33:51 +00:00
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-fill-long-lines
|
|
|
|
@cindex Filling long lines in chat buffer
|
2005-09-13 18:20:19 +00:00
|
|
|
The variable @code{jabber-chat-fill-long-lines} controls whether long
|
|
|
|
lines in the chat buffer are filled.
|
|
|
|
|
2004-09-12 10:56:08 +00:00
|
|
|
@node Customizing alerts, Hooks, Customizing the chat buffer, Customization
|
2004-01-30 21:25:13 +00:00
|
|
|
@section Customizing alerts
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@cindex Alert hooks
|
2005-01-02 22:57:36 +00:00
|
|
|
@findex define-jabber-alert
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
When an event happens (currently including presence changes, incoming
|
|
|
|
messages, and completed queries) you will usually want to be
|
|
|
|
notified. Since tastes in this area vary wildly, these alerts are
|
|
|
|
implemented as hooks, so you can choose which ones you want, or write
|
|
|
|
your own if none fit.
|
|
|
|
|
|
|
|
Actually, if you don't want to write your own, stop reading this
|
2004-02-02 22:56:55 +00:00
|
|
|
section and just read @ref{Standard alerts}.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
|
|
|
Many kinds of alerts consist in displaying a text message through a
|
|
|
|
certain mechanism. This text message is provided by a function which
|
|
|
|
you can rewrite or replace. If this function returns @code{nil}, no
|
|
|
|
message is displayed, and non-textual alerts refrain from action.
|
|
|
|
|
2005-01-02 22:57:36 +00:00
|
|
|
If you want to write alert hooks that do nothing except displaying the
|
|
|
|
supplied message in some way, use the macro
|
|
|
|
@code{define-jabber-alert}. For example, if @var{foo} is a function
|
|
|
|
that takes a string as an argument, write
|
|
|
|
@example
|
|
|
|
(define-jabber-alert foo
|
|
|
|
"Display a message in a fooish way"
|
|
|
|
'foo)
|
|
|
|
@end example
|
|
|
|
and all details will be taken care of for you.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
The hooks take different arguments depending on category. However,
|
|
|
|
they all have in common that the last argument is the result of the
|
|
|
|
message function. The message function for each category takes the
|
|
|
|
same arguments as the corresponding hooks, except for that last
|
|
|
|
argument.
|
|
|
|
|
2005-01-02 22:57:36 +00:00
|
|
|
Alert hook contributions are very welcome. You can send them to the
|
|
|
|
mailing list, or to the Sourceforge patch tracker.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
2004-12-23 16:58:17 +00:00
|
|
|
Alert hooks are meant for optional UI things, that are subject to
|
|
|
|
varying user tastes, and that can be toggled by simply adding or
|
2007-01-12 19:46:30 +00:00
|
|
|
removing the function to and from the hook. For other things, there
|
|
|
|
are corresponding general hooks, that are defvars instead of
|
|
|
|
defcustoms, and that are to be managed by Lisp code. They have the
|
|
|
|
same name as the alert hooks minus the @code{-alert} part,
|
2005-10-26 19:07:43 +00:00
|
|
|
i.e. @code{jabber-message-hooks} vs @code{jabber-alert-message-hooks},
|
|
|
|
etc.
|
2004-12-23 16:58:17 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@menu
|
2004-02-02 22:56:55 +00:00
|
|
|
* Standard alerts::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Presence alerts::
|
|
|
|
* Message alerts::
|
2004-11-20 18:00:19 +00:00
|
|
|
* MUC alerts::
|
2004-01-30 21:25:13 +00:00
|
|
|
* Info alerts::
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Standard alerts, Presence alerts, Customizing alerts, Customizing alerts
|
|
|
|
@subsection Standard alerts
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Alerts
|
|
|
|
@cindex Scroll
|
2005-12-27 21:44:30 +00:00
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
Eight alerts are already written for all four alert categories. These
|
2004-01-30 21:25:13 +00:00
|
|
|
all obey the result from the corresponding message function.
|
|
|
|
|
|
|
|
The @code{beep} alerts simply sound the terminal bell by calling
|
2005-06-22 17:15:52 +00:00
|
|
|
@code{ding}. They are disabled by default.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
|
|
|
The @code{echo} alerts display a message in the echo area by calling
|
|
|
|
@code{message}. They are enabled by default.
|
|
|
|
|
|
|
|
The @code{switch} alerts switch to the buffer where the event occurred
|
|
|
|
(chat buffer for incoming messages, roster buffer for presence
|
|
|
|
changes, browse buffer for completed queries). They are disabled by
|
|
|
|
default. Take care when using them, as they may interrupt your
|
|
|
|
editing.
|
|
|
|
|
2004-03-02 13:08:25 +00:00
|
|
|
The @code{display} alerts display but do not select the buffer in
|
|
|
|
question, using the function @code{display-buffer}. @xref{Choosing
|
|
|
|
Window, , Choosing a Window for Display, elisp, GNU Emacs Lisp
|
|
|
|
Reference Manual}, for information about customizing its behaviour.
|
2005-06-22 17:15:52 +00:00
|
|
|
This is enabled by default for info requests.
|
2004-03-02 13:08:25 +00:00
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
The @code{wave} alerts play a sound file by calling
|
|
|
|
@code{play-sound-file}. No sound files are provided. To use this,
|
|
|
|
enter the names of the sound files in
|
|
|
|
@code{jabber-alert-message-wave}, @code{jabber-alert-presence-wave}
|
|
|
|
and @code{jabber-alert-info-wave}, respectively.
|
|
|
|
|
|
|
|
The @code{screen} alerts send a message through the Screen terminal
|
|
|
|
manager (see @uref{http://www.gnu.org/software/screen/}). They do no
|
|
|
|
harm if called when you don't use Screen.
|
|
|
|
|
|
|
|
The @code{ratpoison} alerts send a message through the Ratpoison
|
|
|
|
window manager (see @uref{http://ratpoison.sourceforge.net/}). They
|
|
|
|
do no harm if used when you're not running X, but if you are running X
|
2004-02-11 21:37:28 +00:00
|
|
|
with another window manager, the ratpoison processes will never exit.
|
2005-01-02 22:57:36 +00:00
|
|
|
You can look at them with @code{list-processes}.
|
|
|
|
|
|
|
|
The @code{sawfish} alerts send a message through the Sawfish window
|
|
|
|
manager.
|
|
|
|
|
|
|
|
The @code{festival} alerts speak the message using the Emacs interface
|
|
|
|
of the Festival speech synthesis system (see
|
|
|
|
@uref{http://www.cstr.ed.ac.uk/projects/festival/}).
|
2004-01-30 21:25:13 +00:00
|
|
|
|
2005-12-27 21:44:30 +00:00
|
|
|
Additionally, for one-to-one and MUC messages, there are @code{scroll}
|
|
|
|
alerts (enabled by default), that aim to do the right thing with chat
|
|
|
|
buffers that are visible but not active. Sometimes you want point to
|
|
|
|
scroll down, and sometimes not. These functions should do what you
|
|
|
|
mean; if they don't, it's a bug.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
Some of these functions are in the @file{jabber-alert.el} file, and the
|
|
|
|
others are in their own files. You can use them as templates or
|
|
|
|
inspiration for your own alerts.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
@node Presence alerts, Message alerts, Standard alerts, Customizing alerts
|
2004-01-30 21:25:13 +00:00
|
|
|
@subsection Presence alerts
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@vindex jabber-alert-presence-message-function
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-presence-default-message
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
Set @code{jabber-alert-presence-message-function} to your desired
|
2004-02-03 12:33:27 +00:00
|
|
|
function. This function should look like:
|
|
|
|
|
|
|
|
@example
|
2005-10-26 19:07:43 +00:00
|
|
|
(defun @var{function} (@var{who} @var{oldstatus} @var{newstatus} @var{statustext})
|
|
|
|
...
|
|
|
|
)
|
2004-02-03 12:33:27 +00:00
|
|
|
@end example
|
|
|
|
|
|
|
|
@var{who} is the JID symbol (@pxref{Roster structure}),
|
|
|
|
@var{oldstatus} and @var{newstatus} are the previous and current
|
|
|
|
stati, respectively, and @var{statustext} is the status message if
|
|
|
|
provided, otherwise nil.
|
2004-01-30 21:25:13 +00:00
|
|
|
|
|
|
|
@var{newstatus} can also be one of @code{"subscribe"},
|
|
|
|
@code{"subscribed"}, @code{"unsubscribe"} and @code{"unsubscribed"}.
|
|
|
|
|
|
|
|
The default function, @code{jabber-presence-default-message}, returns
|
|
|
|
@code{nil} if @var{oldstatus} and @var{newstatus} are the same, and in
|
|
|
|
other cases constructs a message from the given data.
|
|
|
|
|
|
|
|
All presence alert hooks take the same arguments plus the additional
|
|
|
|
@var{proposed-alert}, which is the result of the specified message
|
|
|
|
function. This last argument is usually the only one they use.
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@node Message alerts, MUC alerts, Presence alerts, Customizing alerts
|
2004-01-30 21:25:13 +00:00
|
|
|
@subsection Message alerts
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@vindex jabber-alert-message-function
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-message-default-message
|
2004-10-28 18:26:46 +00:00
|
|
|
@vindex jabber-message-alert-same-buffer
|
|
|
|
|
|
|
|
If you don't want message alerts when the chat buffer in question is
|
2005-10-26 19:07:43 +00:00
|
|
|
already the current buffer, set @code{jabber-message-alert-same-buffer}
|
|
|
|
to nil. This affects the behaviour of the default message function, so
|
|
|
|
you'll have to reimplement this functionality if you write your own
|
|
|
|
message function.
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
Set @code{jabber-alert-message-function} to your desired
|
2004-02-02 22:56:55 +00:00
|
|
|
function.@footnote{Logically it should be
|
2004-11-20 18:00:19 +00:00
|
|
|
@code{jabber-alert-message-message-function}, but that would be
|
2004-02-03 12:33:27 +00:00
|
|
|
really ugly.} This function should look like:
|
|
|
|
|
|
|
|
@example
|
2005-10-26 19:07:43 +00:00
|
|
|
(defun @var{function} (@var{from} @var{buffer} @var{text})
|
|
|
|
...
|
|
|
|
)
|
2004-02-03 12:33:27 +00:00
|
|
|
@end example
|
|
|
|
|
2005-05-11 14:02:00 +00:00
|
|
|
@var{from} is the JID symbol (@pxref{Roster structure}), @var{buffer}
|
|
|
|
is the buffer where the message is displayed, and @var{text} is the
|
|
|
|
text of the message.
|
2004-02-02 22:56:55 +00:00
|
|
|
|
|
|
|
The default function, @code{jabber-message-default-message}, returns
|
|
|
|
``Message from @var{person}'', where @var{person} is the name of the
|
|
|
|
person if specified in the roster, otherwise the JID.
|
|
|
|
|
|
|
|
All message alert hooks take the same arguments plus the additional
|
|
|
|
@var{proposed-alert}, which is the result of the specified message
|
|
|
|
function.
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@node MUC alerts, Info alerts, Message alerts, Customizing alerts
|
|
|
|
@subsection MUC alerts
|
|
|
|
|
|
|
|
@vindex jabber-alert-muc-function
|
2007-01-31 20:36:51 +00:00
|
|
|
@vindex jabber-muc-alert-self
|
2004-11-20 18:00:19 +00:00
|
|
|
@findex jabber-muc-default-message
|
|
|
|
|
|
|
|
Set @code{jabber-alert-muc-function} to your desired
|
|
|
|
function. This function should look like:
|
|
|
|
|
|
|
|
@example
|
2005-10-26 19:07:43 +00:00
|
|
|
(defun @var{function} (@var{nick} @var{group} @var{buffer} @var{text})
|
|
|
|
...
|
|
|
|
)
|
2004-11-20 18:00:19 +00:00
|
|
|
@end example
|
|
|
|
|
2005-05-11 14:02:00 +00:00
|
|
|
@var{nick} is the nickname, @var{group} is the JID of the group,
|
|
|
|
@var{buffer} is the buffer where the message is displayed, and
|
|
|
|
@var{text} is the text of the message.
|
2004-11-20 18:00:19 +00:00
|
|
|
|
|
|
|
The default function, @code{jabber-muc-default-message}, returns
|
|
|
|
``Message from @var{nick} in @var{group}'' or ``Message in
|
|
|
|
@var{group}'', the latter for messages from the room itself.
|
|
|
|
|
|
|
|
All MUC alert hooks take the same arguments plus the additional
|
|
|
|
@var{proposed-alert}, which is the result of the specified message
|
|
|
|
function.
|
|
|
|
|
2007-01-31 20:36:51 +00:00
|
|
|
By default, no alert is made for messages from yourself. To change
|
|
|
|
that, customize the variable @code{jabber-muc-alert-self}.
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@node Info alerts, , MUC alerts, Customizing alerts
|
2004-01-30 21:25:13 +00:00
|
|
|
@subsection Info alerts
|
|
|
|
|
2004-11-20 18:00:19 +00:00
|
|
|
@vindex jabber-alert-info-message-function
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-info-default-message
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
Info alerts are sadly underdeveloped. The message function,
|
2004-11-20 18:00:19 +00:00
|
|
|
@code{jabber-alert-info-message-function}, takes two arguments,
|
2004-02-02 22:56:55 +00:00
|
|
|
@var{infotype} and @var{buffer}. @var{buffer} is the buffer where
|
|
|
|
something happened, and @var{infotype} is either @code{'roster} for
|
|
|
|
roster updates, or @code{'browse} for anything that uses the browse
|
|
|
|
buffer (basically anything except chatting).
|
|
|
|
|
|
|
|
The info alert hooks take an extra argument, as could be expected.
|
|
|
|
|
2004-09-12 10:56:08 +00:00
|
|
|
@node Hooks, Debug options, Customizing alerts, Customization
|
|
|
|
@section Hooks
|
|
|
|
|
|
|
|
jabber.el provides various hooks that you can use for whatever
|
|
|
|
purpose.
|
|
|
|
|
|
|
|
@table @code
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-post-connect-hook
|
2004-09-12 10:56:08 +00:00
|
|
|
@item jabber-post-connect-hook
|
|
|
|
This hook is called after successful connection and authentication.
|
|
|
|
By default it contains @code{jabber-send-default-presence}
|
|
|
|
(@pxref{Presence}).
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-lost-connection-hook
|
2004-09-12 10:56:08 +00:00
|
|
|
@item jabber-lost-connection-hook
|
|
|
|
This hook is called when you have been disconnected for unknown
|
|
|
|
reasons. Usually this isn't noticed for quite a long time.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-pre-disconnect-hook
|
2004-09-12 10:56:08 +00:00
|
|
|
@item jabber-pre-disconnect-hook
|
|
|
|
This hook is called just before voluntary disconnection. This might
|
|
|
|
be due to failed authentication, so check
|
|
|
|
@code{*jabber-authenticated*} if you want to send a stanza.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-post-disconnect-hook
|
2004-09-12 10:56:08 +00:00
|
|
|
@item jabber-post-disconnect-hook
|
|
|
|
This hook is called after disconnection of any kind, possibly just
|
|
|
|
after @code{jabber-lost-connection-hook}.
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@vindex jabber-chat-mode-hook
|
|
|
|
@item jabber-chat-mode-hook
|
|
|
|
This hook is called when a new chat buffer is created.
|
|
|
|
|
2004-09-12 10:56:08 +00:00
|
|
|
@end table
|
|
|
|
|
|
|
|
@node Debug options, , Hooks, Customization
|
2004-05-06 19:15:56 +00:00
|
|
|
@section Debug options
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-debug-log-xml
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex XML log
|
2004-06-26 11:33:02 +00:00
|
|
|
|
2004-05-06 19:15:56 +00:00
|
|
|
These settings provide a lot of information which is usually not very
|
|
|
|
interesting, but can be useful for debugging various things.
|
|
|
|
|
|
|
|
@code{jabber-debug-log-xml} activates XML logging. All XML stanzas
|
|
|
|
sent and received are logged in the buffer @code{*-jabber-xml-log-*}
|
|
|
|
in list format. @xref{XML representation}.
|
|
|
|
|
2004-12-15 00:11:07 +00:00
|
|
|
@node Hacking and extending, Protocol support, Customization, Top
|
2004-01-29 13:04:21 +00:00
|
|
|
@chapter Hacking and extending
|
2004-01-15 00:11:04 +00:00
|
|
|
|
2004-02-03 12:33:27 +00:00
|
|
|
This part of the manual is an attempt to explain parts of the source
|
|
|
|
code. It is not meant to discourage you from reading the code
|
|
|
|
yourself and trying to figure it out, but as a guide on where to
|
|
|
|
look. Knowledge of Jabber protocols is assumed.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@menu
|
|
|
|
* XML representation::
|
|
|
|
* Roster structure::
|
|
|
|
* Listening for new requests::
|
|
|
|
* Sending new requests::
|
2004-03-23 21:24:28 +00:00
|
|
|
* Extending service discovery::
|
2005-10-26 19:07:43 +00:00
|
|
|
* Chat printers::
|
2004-04-02 19:36:09 +00:00
|
|
|
* Stanza chains::
|
2004-01-30 21:25:13 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node XML representation, Roster structure, Hacking and extending, Hacking and extending
|
|
|
|
@section XML representation
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@cindex XML representation
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
The XML representation is the one generated by @file{xml.el} in Emacs,
|
|
|
|
namely the following. Each tag is a list. The first element of the
|
|
|
|
list is a symbol, the name of which is the name of the tag. The
|
|
|
|
second element is an alist of attributes, where the keys are the
|
|
|
|
attribute names in symbol form, and the values are strings. The
|
|
|
|
remaining elements are the tags and data contained within the tag.
|
|
|
|
|
|
|
|
For example,
|
|
|
|
@example
|
|
|
|
<foo bar='baz'>
|
|
|
|
<frobozz/>Fnord
|
|
|
|
</foo>
|
|
|
|
@end example
|
|
|
|
is represented as
|
|
|
|
@example
|
|
|
|
(foo ((bar . "baz")) (frobozz nil "") "Fnord
|
|
|
|
")
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Note the empty string as the third element of the @code{frobozz}
|
|
|
|
list. It is not present in newer (post-21.3) versions of
|
|
|
|
@file{xml.el}, but it's probably best to assume it might be there.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
If you want to see what an XML tag would look like, use
|
|
|
|
@code{jabber-sexp2xml}, which takes a tag and returns a string. You
|
|
|
|
will usually not need it in your code, as you can use
|
|
|
|
@code{jabber-send-sexp} to send away your tags to the server.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@node Roster structure, Listening for new requests, XML representation, Hacking and extending
|
|
|
|
@section Roster structure
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex *jabber-roster*
|
|
|
|
@vindex jabber-jid-obarray
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
Roster entries are contained in the list @code{*jabber-roster*}.
|
|
|
|
|
|
|
|
A roster entry is a symbol. Its name is the JID, and it is interned
|
|
|
|
in @code{jabber-jid-obarray}. A roster entry can have the following
|
|
|
|
properties:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item xml
|
|
|
|
The XML tag received from the server on roster update
|
|
|
|
|
|
|
|
@item name
|
|
|
|
The name of the roster item (just like the XML attribute)
|
|
|
|
|
|
|
|
@item subscription
|
|
|
|
The subscription state (also copied)
|
|
|
|
|
|
|
|
@item ask
|
|
|
|
The ask state (copied)
|
|
|
|
|
|
|
|
@item groups
|
|
|
|
A list of strings (possibly empty) containing all the groups the
|
|
|
|
contact is in
|
|
|
|
|
|
|
|
@item connected
|
|
|
|
Boolean, true if any resource is connected
|
|
|
|
|
|
|
|
@item show
|
|
|
|
Presence show status for highest-priority connected resource
|
|
|
|
|
|
|
|
@item status
|
|
|
|
Presence status message for highest-priority connected resource
|
|
|
|
|
|
|
|
@item resources
|
|
|
|
Alist. Keys are strings (resource names), values are plists with
|
|
|
|
properties @code{connected}, @code{show}, @code{status} and
|
|
|
|
@code{priority}.
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
Incoming presence information is inserted in @code{resources}, and the
|
|
|
|
information from the resource with the highest priority is inserted in
|
|
|
|
@code{show} and @code{status} by the function
|
|
|
|
@code{jabber-prioritize-resources}.
|
|
|
|
|
2004-01-30 21:25:13 +00:00
|
|
|
@node Listening for new requests, Sending new requests, Roster structure, Hacking and extending
|
|
|
|
@section Listening for new requests
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
@findex jabber-send-iq
|
|
|
|
@findex jabber-process-iq
|
2004-03-23 21:24:28 +00:00
|
|
|
@findex jabber-signal-error
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-iq-get-xmlns-alist
|
|
|
|
@vindex jabber-iq-set-xmlns-alist
|
2004-02-02 22:56:55 +00:00
|
|
|
|
|
|
|
To listen for new IQ requests, add the appropriate entry in
|
|
|
|
@code{jabber-iq-get-xmlns-alist} or @code{jabber-iq-set-xmlns-alist}.
|
|
|
|
The key is the namespace of the request, and the value is a function
|
|
|
|
that takes one argument, the entire IQ stanza in list format.
|
|
|
|
@code{jabber-process-iq} reads these alists to determine which
|
|
|
|
function to call on incoming packets.
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
For example, the Ad-Hoc Commands module contains the following:
|
|
|
|
|
|
|
|
@example
|
|
|
|
(add-to-list 'jabber-iq-set-xmlns-alist
|
|
|
|
(cons "http://jabber.org/protocol/commands" 'jabber-ahc-process))
|
|
|
|
@end example
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
To send a response to an IQ request, use @samp{(jabber-send-iq
|
|
|
|
@var{sender} "result" @var{query} nil nil nil nil @var{id})}, where
|
|
|
|
@var{query} is the query in list format. @code{jabber-send-iq} will
|
|
|
|
encapsulate the query in an IQ packet with the specified id.
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
To return an error to the Jabber entity that sent the query, use
|
|
|
|
@code{jabber-signal-error}. The signal is caught by
|
|
|
|
@code{jabber-process-iq}, which takes care of sending the error.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node Sending new requests, Extending service discovery, Listening for new requests, Hacking and extending
|
2004-01-30 21:25:13 +00:00
|
|
|
@section Sending new requests
|
|
|
|
|
2004-02-02 22:56:55 +00:00
|
|
|
@findex jabber-send-iq
|
|
|
|
@findex jabber-process-iq
|
2004-06-26 11:33:02 +00:00
|
|
|
@findex jabber-report-success
|
|
|
|
@findex jabber-process-data
|
2004-02-02 22:56:55 +00:00
|
|
|
|
|
|
|
To send an IQ request, use @code{jabber-send-iq}. It will generate an
|
|
|
|
id, and create a mapping for it for use when the response comes. The
|
|
|
|
syntax is:
|
|
|
|
|
|
|
|
@example
|
|
|
|
(jabber-send-iq @var{to} @var{type} @var{query}
|
|
|
|
@var{success-callback} @var{success-closure}
|
|
|
|
@var{failure-callback} @var{failure-closure})
|
|
|
|
@end example
|
|
|
|
|
|
|
|
Both callbacks take two arguments, the IQ stanza returned and the
|
|
|
|
closure item mentioned here.
|
|
|
|
|
|
|
|
Two standard callbacks are provided. @code{jabber-report-success}
|
|
|
|
takes a string as closure item, and reports success or failure in the
|
|
|
|
echo area. @code{jabber-process-data} prepares a browse buffer. If
|
|
|
|
its closure argument is a function, it calls that function with point
|
|
|
|
in this browse buffer. If it's a string, it prints that string along
|
|
|
|
with the error message in the IQ response. If it's anything else
|
|
|
|
(e.g. @code{nil}), it just dumps the XML in the browse buffer.
|
|
|
|
|
|
|
|
Examples follow. This is the hypothetical Jabber protocol ``frob'',
|
|
|
|
for which only success report is needed:
|
|
|
|
@example
|
|
|
|
(jabber-send-iq "someone@@somewhere.org" "set"
|
|
|
|
'(query ((xmlns . "frob")))
|
|
|
|
'jabber-report-success "Frobbing"
|
|
|
|
'jabber-report-success "Frobbing")
|
|
|
|
@end example
|
|
|
|
This will print ``Frobbing succeeded'' or ``Frobbing failed: reason'',
|
|
|
|
respectively, in the echo area.
|
|
|
|
|
|
|
|
The protocol ``investigate'' needs to parse results and show them in a
|
|
|
|
browse buffer:
|
|
|
|
@example
|
|
|
|
(jabber-send-iq "someone@@somewhere.org" "get"
|
|
|
|
'(query ((xmlns . "investigate")))
|
|
|
|
'jabber-process-data 'jabber-process-investigate
|
|
|
|
'jabber-process-data "Investigation failed")
|
|
|
|
@end example
|
|
|
|
Of course, the previous example could have used
|
|
|
|
@code{jabber-report-success} for the error message. It's a matter of
|
|
|
|
UI taste.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node Extending service discovery, Chat printers, Sending new requests, Hacking and extending
|
2004-03-23 21:24:28 +00:00
|
|
|
@section Service discovery
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-advertised-features
|
|
|
|
@vindex jabber-disco-items-nodes
|
|
|
|
@vindex jabber-disco-info-nodes
|
|
|
|
@findex jabber-my-jid-p
|
|
|
|
|
2004-03-23 21:24:28 +00:00
|
|
|
Your new handlers will likely want to advertise their existence
|
|
|
|
through service discovery.
|
|
|
|
|
|
|
|
To have an additional feature reported in response to disco info
|
|
|
|
requests, add a string to @code{jabber-advertised-features}.
|
|
|
|
|
|
|
|
By default, the service discovery functions reject all requests
|
|
|
|
containing a node identifier with an ``Item not found'' error. To
|
|
|
|
make them respond, add the appropriate entries to
|
|
|
|
@code{jabber-disco-items-nodes} and @code{jabber-disco-info-nodes}.
|
|
|
|
Both variables work in the same way. They are alists, where the keys
|
|
|
|
are the node names, and the values are lists of two items.
|
|
|
|
|
|
|
|
The first item is the data to return --- either a list or a function
|
|
|
|
taking the entire IQ stanza and returning a list, this list containing
|
|
|
|
the XML nodes to include in the @code{<query/>} node in the response.
|
|
|
|
|
|
|
|
The second item is the access control function. An access control
|
|
|
|
function receives the JID as its only argument, and returns non-nil if
|
|
|
|
access is to be granted. If nil is specified instead of a function,
|
|
|
|
access is always granted. One such function is provided,
|
|
|
|
@code{jabber-my-jid-p}, which grants access for JIDs where the
|
|
|
|
username and server (not necessarily resource) are equal to those of
|
|
|
|
the user.
|
|
|
|
|
2005-10-26 19:07:43 +00:00
|
|
|
@node Chat printers, Stanza chains, Extending service discovery, Hacking and extending
|
|
|
|
@section Chat printers
|
|
|
|
|
|
|
|
@vindex jabber-chat-printers
|
|
|
|
@vindex jabber-muc-printers
|
|
|
|
@vindex jabber-body-printers
|
|
|
|
@cindex Chat printers
|
|
|
|
@cindex Body printers
|
|
|
|
|
|
|
|
Chat printers are functions that print a certain aspect of an incoming
|
|
|
|
message in a chat buffer. Included are functions for printing subjects
|
|
|
|
(@code{jabber-chat-print-subject}), bodies
|
|
|
|
(@code{jabber-chat-print-body}, and @code{jabber:x:oob}-style URLs
|
|
|
|
(@code{jabber-chat-print-url}). The functions in
|
|
|
|
@code{jabber-chat-printers} are called in order, with the entire
|
|
|
|
@code{<message/>} stanza as argument, and are expected to call
|
|
|
|
@code{insert} if they have anything to add.
|
|
|
|
|
|
|
|
For MUC, the functions in @code{jabber-muc-printers} are prepended to
|
|
|
|
those in @code{jabber-chat-printers}.
|
|
|
|
|
|
|
|
Body printers are a subgroup of chat printers. They are exclusive; only
|
|
|
|
one of them applies to any given message. The idea is that
|
|
|
|
``higher-quality'' parts of the message override pieces included for
|
|
|
|
backwards compatibility. Included are @code{jabber-muc-print-invite}
|
|
|
|
and @code{jabber-chat-normal-body}; functions for XHTML-IM and PGP
|
|
|
|
encrypted messages may be written in the future. The functions in
|
|
|
|
@code{jabber-body-printers} are called in order until one of them
|
|
|
|
returns non-nil.
|
|
|
|
|
|
|
|
@node Stanza chains, , Chat printers, Hacking and extending
|
2004-04-02 19:35:14 +00:00
|
|
|
@section Stanza chains
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@vindex jabber-message-chain
|
|
|
|
@vindex jabber-iq-chain
|
|
|
|
@vindex jabber-presence-chain
|
|
|
|
|
2004-04-02 19:35:14 +00:00
|
|
|
If you really need to get under the skin of jabber.el, you can add
|
|
|
|
functions to the lists @code{jabber-message-chain},
|
2005-10-26 19:07:43 +00:00
|
|
|
@code{jabber-iq-chain} and @code{jabber-presence-chain}. The functions
|
|
|
|
in these lists will be called in order when an XML stanza of the
|
|
|
|
corresponding type arrives, with the entire XML stanza passed as the
|
|
|
|
only argument. Earlier functions can modify the stanza to change the
|
|
|
|
behaviour of downstream functions.
|
2004-04-02 19:35:14 +00:00
|
|
|
|
2004-12-15 00:11:07 +00:00
|
|
|
@node Protocol support, Concept index, Hacking and extending, Top
|
|
|
|
@appendix Protocol support
|
|
|
|
|
2006-01-13 20:07:51 +00:00
|
|
|
@cindex Supported protocols
|
|
|
|
|
2004-12-15 00:11:07 +00:00
|
|
|
These are the protocols currently supported (in full or partially) by
|
|
|
|
jabber.el.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* RFC 3920 (XMPP-CORE)::
|
|
|
|
* RFC 3921 (XMPP-IM)::
|
|
|
|
* JEP-0004 (Data Forms)::
|
|
|
|
* JEP-0020 (Feature Negotiation)::
|
2005-06-23 20:27:08 +00:00
|
|
|
* JEP-0022 (Message Events)::
|
2004-12-15 00:11:07 +00:00
|
|
|
* JEP-0030 (Service Discovery)::
|
|
|
|
* JEP-0045 (Multi-User Chat)::
|
|
|
|
* JEP-0050 (Ad-Hoc Commands)::
|
2005-06-23 20:27:08 +00:00
|
|
|
* JEP-0054 (vcard-temp)::
|
2004-12-15 00:11:07 +00:00
|
|
|
* JEP-0055 (Jabber Search)::
|
|
|
|
* JEP-0065 (SOCKS5 Bytestreams)::
|
2005-06-24 07:34:38 +00:00
|
|
|
* JEP-0066 (Out of Band Data)::
|
2004-12-15 00:11:07 +00:00
|
|
|
* JEP-0068 (Field Standardization for Data Forms)::
|
|
|
|
* JEP-0077 (In-Band Registration)::
|
|
|
|
* JEP-0078 (Non-SASL Authentication)::
|
|
|
|
* JEP-0082 (Jabber Date and Time Profiles)::
|
|
|
|
* JEP-0086 (Error Condition Mappings)::
|
|
|
|
* JEP-0091 (Delayed Delivery)::
|
|
|
|
* JEP-0092 (Software Version)::
|
|
|
|
* JEP-0095 (Stream Initiation)::
|
|
|
|
* JEP-0096 (File Transfer)::
|
2006-04-09 17:20:43 +00:00
|
|
|
* JEP-0146 (Remote Controlling Clients)::
|
2004-12-15 00:11:07 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node RFC 3920 (XMPP-CORE), RFC 3921 (XMPP-IM), Protocol support, Protocol support
|
|
|
|
@section RFC 3920 (XMPP-CORE)
|
|
|
|
|
|
|
|
Most of RFC 3920 is supported, with the following exceptions.
|
|
|
|
|
|
|
|
SASL is supported only when an external SASL library from FLIM or Gnus
|
|
|
|
is present. As SASL is an essential part to XMPP, jabber.el will send
|
|
|
|
pre-XMPP stream headers if it is not available.
|
|
|
|
|
|
|
|
None of the stringprep profiles are implemented. jabber.el changes
|
|
|
|
JIDs to lowercase internally; that's all.
|
|
|
|
|
|
|
|
jabber.el doesn't interpret namespace prefixes.
|
|
|
|
|
|
|
|
The @code{xml:lang} attribute is neither interpreted nor generated.
|
|
|
|
|
2006-04-23 15:09:56 +00:00
|
|
|
SRV records are used if a modern version of @code{dns.el} is installed.
|
2004-12-15 00:11:07 +00:00
|
|
|
|
|
|
|
@node RFC 3921 (XMPP-IM), JEP-0004 (Data Forms), RFC 3920 (XMPP-CORE), Protocol support
|
|
|
|
@section RFC 3921 (XMPP-IM)
|
|
|
|
|
|
|
|
Most of RFC 3921 is supported, with the following exceptions.
|
|
|
|
|
|
|
|
Messages of type ``headline'' are not treated in any special way.
|
|
|
|
|
|
|
|
The @code{<thread/>} element is not used or generated.
|
|
|
|
|
|
|
|
Neither sending nor receiving ``directed presence'' is supported.
|
|
|
|
|
|
|
|
Privacy lists are not supported at all.
|
|
|
|
|
|
|
|
jabber.el doesn't support XMPP-E2E or ``im:'' CPIM URIs.
|
|
|
|
|
|
|
|
@node JEP-0004 (Data Forms), JEP-0020 (Feature Negotiation), RFC 3921 (XMPP-IM), Protocol support
|
|
|
|
@section JEP-0004 (Data Forms)
|
|
|
|
|
|
|
|
JEP-0004 support is good enough for many purposes. Limitations are
|
|
|
|
the following.
|
|
|
|
|
|
|
|
Forms in incoming messages are not interpreted. See each specific
|
|
|
|
protocol for whether forms are accepted in that context.
|
|
|
|
|
|
|
|
``Cancel'' messages are probably not consistently generated when they
|
|
|
|
should be. This is partly a paradigm clash, as jabber.el doesn't use
|
|
|
|
modal dialog boxes but buffers which can easily be buried.
|
|
|
|
|
|
|
|
@code{<required/>} elements are not enforced.
|
|
|
|
|
|
|
|
The field types ``jid-single'', ``jid-multi'' and ``list-multi'' are
|
|
|
|
not implemented, due to programmer laziness. Let us know if you need
|
|
|
|
them.
|
|
|
|
|
2005-06-23 20:27:08 +00:00
|
|
|
@node JEP-0020 (Feature Negotiation), JEP-0022 (Message Events), JEP-0004 (Data Forms), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0020 (Feature Negotiation)
|
|
|
|
|
|
|
|
There are no known limitations or bugs in JEP-0020 support.
|
|
|
|
|
2005-06-23 20:27:08 +00:00
|
|
|
@node JEP-0022 (Message Events), JEP-0030 (Service Discovery), JEP-0020 (Feature Negotiation), Protocol support
|
|
|
|
@section JEP-0022 (Message Events)
|
|
|
|
|
|
|
|
jabber.el understands all four specified kinds of message events
|
|
|
|
(offline, delivered, displayed, and composing) and by default requests
|
|
|
|
all of them. It also reports those three events that make sense for
|
|
|
|
clients.
|
|
|
|
|
|
|
|
@node JEP-0030 (Service Discovery), JEP-0045 (Multi-User Chat), JEP-0022 (Message Events), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0030 (Service Discovery)
|
|
|
|
|
|
|
|
Service discovery is supported, both as client and server, with the
|
|
|
|
following limitations. Currently, the client part is not used by any
|
|
|
|
code, but is provided only as a user tool. The user interface is not
|
|
|
|
appealing.
|
|
|
|
|
|
|
|
Publishing items is not supported.
|
|
|
|
|
|
|
|
@node JEP-0045 (Multi-User Chat), JEP-0050 (Ad-Hoc Commands), JEP-0030 (Service Discovery), Protocol support
|
|
|
|
@section JEP-0045 (Multi-User Chat)
|
|
|
|
|
2004-12-21 16:09:43 +00:00
|
|
|
jabber.el supports parts of JEP-0045. Entering, leaving and chatting
|
2005-06-23 20:27:08 +00:00
|
|
|
work. So do invitations and private messages. Room configuration is
|
|
|
|
supported. Changing roles of participants (basic moderation) is
|
|
|
|
implemented, as is changing affiliations, but requesting affiliation
|
|
|
|
lists is not yet supported.
|
2004-12-15 00:11:07 +00:00
|
|
|
|
2005-06-23 20:27:08 +00:00
|
|
|
@node JEP-0050 (Ad-Hoc Commands), JEP-0054 (vcard-temp), JEP-0045 (Multi-User Chat), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0050 (Ad-Hoc Commands)
|
|
|
|
|
|
|
|
jabber.el is probably the first implementation of JEP-0050 (see
|
|
|
|
@uref{http://article.gmane.org/gmane.network.jabber.devel/21413, post
|
|
|
|
on jdev from 2004-03-10}). Both the client and server parts are
|
|
|
|
supported.
|
|
|
|
|
2005-06-23 20:27:08 +00:00
|
|
|
@node JEP-0054 (vcard-temp), JEP-0055 (Jabber Search), JEP-0050 (Ad-Hoc Commands), Protocol support
|
|
|
|
@section JEP-0054 (vcard-temp)
|
|
|
|
|
|
|
|
Both displaying other users' vCards and editing your own vCard are
|
|
|
|
supported. The implementation tries to follow the schema in the JEP
|
|
|
|
accurately.
|
|
|
|
|
|
|
|
@node JEP-0055 (Jabber Search), JEP-0065 (SOCKS5 Bytestreams), JEP-0054 (vcard-temp), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0055 (Jabber Search)
|
|
|
|
|
|
|
|
JEP-0055 is supported, both with traditional fields and with Data
|
|
|
|
Forms (@pxref{JEP-0004 (Data Forms)}). As the traditional fields
|
|
|
|
specified by the JEP is a subset of those allowed in JEP-0077,
|
2007-01-05 22:12:15 +00:00
|
|
|
handling of those two form types are merged. @xref{JEP-0077 (In-Band
|
2004-12-15 00:11:07 +00:00
|
|
|
Registration)}.
|
|
|
|
|
2005-06-24 07:34:38 +00:00
|
|
|
@node JEP-0065 (SOCKS5 Bytestreams), JEP-0066 (Out of Band Data), JEP-0055 (Jabber Search), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0065 (SOCKS5 Bytestreams)
|
|
|
|
|
|
|
|
JEP-0065 support seems to work, but it is not yet enabled by default.
|
|
|
|
|
|
|
|
Currently jabber.el cannot act as a server, not even on on Emacsen
|
2005-03-21 14:29:47 +00:00
|
|
|
that support server sockets (GNU Emacs 22 and up). Therefore it
|
2004-12-15 00:11:07 +00:00
|
|
|
relies on proxies. Proxies have to be entered and queried manually.
|
|
|
|
|
|
|
|
Psi's ``fast mode''
|
|
|
|
(@uref{http://delta.affinix.com/specs/stream.html}), which gives
|
|
|
|
greater flexibility with regards to NAT, is not implemented.
|
|
|
|
|
2005-06-24 07:34:38 +00:00
|
|
|
@node JEP-0066 (Out of Band Data), JEP-0068 (Field Standardization for Data Forms), JEP-0065 (SOCKS5 Bytestreams), Protocol support
|
|
|
|
@section JEP-0066 (Out of Band Data)
|
|
|
|
|
|
|
|
jabber.el will display URLs sent in message stanzas qualified by
|
|
|
|
the @code{jabber:x:oob} namespace, as described in this JEP. Sending
|
|
|
|
such URLs or doing anything with iq stanzas (using the
|
|
|
|
@code{jabber:iq:oob} namespace) is not supported.
|
|
|
|
|
|
|
|
@node JEP-0068 (Field Standardization for Data Forms), JEP-0077 (In-Band Registration), JEP-0066 (Out of Band Data), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0068 (Field Standardization for Data Forms)
|
|
|
|
|
|
|
|
JEP-0068 is only used in the context of creating a new Jabber account,
|
|
|
|
to prefill the username field of the registration form.
|
|
|
|
|
|
|
|
@node JEP-0077 (In-Band Registration), JEP-0078 (Non-SASL Authentication), JEP-0068 (Field Standardization for Data Forms), Protocol support
|
|
|
|
@section JEP-0077 (In-Band Registration)
|
|
|
|
|
|
|
|
In-band registration is supported for all purposes. That means
|
|
|
|
registering a new Jabber account, changing Jabber password, removing a
|
|
|
|
Jabber account, registering with a service, and cancelling
|
|
|
|
registration to a service. Data forms are supported as well. URL
|
|
|
|
redirections are not.
|
|
|
|
|
|
|
|
jabber.el will not prevent or alert a user trying to change a password
|
|
|
|
over an unencrypted connection.
|
|
|
|
|
|
|
|
@node JEP-0078 (Non-SASL Authentication), JEP-0082 (Jabber Date and Time Profiles), JEP-0077 (In-Band Registration), Protocol support
|
|
|
|
@section JEP-0078 (Non-SASL Authentication)
|
|
|
|
|
|
|
|
Non-SASL authentication is supported, both plaintext and digest.
|
|
|
|
Digest is preferred, and a warning is displayed to the user if only
|
|
|
|
plaintext is available.
|
|
|
|
|
|
|
|
@node JEP-0082 (Jabber Date and Time Profiles), JEP-0086 (Error Condition Mappings), JEP-0078 (Non-SASL Authentication), Protocol support
|
|
|
|
@section JEP-0082 (Jabber Date and Time Profiles)
|
|
|
|
|
|
|
|
The DateTime profile of JEP-0082 is supported. Currently this is only
|
|
|
|
used for file transfer.
|
|
|
|
|
|
|
|
@node JEP-0086 (Error Condition Mappings), JEP-0091 (Delayed Delivery), JEP-0082 (Jabber Date and Time Profiles), Protocol support
|
|
|
|
@section JEP-0086 (Error Condition Mappings)
|
|
|
|
|
|
|
|
Legacy errors are interpreted, but never generated. XMPP style error
|
|
|
|
messages take precedence when errors are reported to the user.
|
|
|
|
|
|
|
|
@node JEP-0091 (Delayed Delivery), JEP-0092 (Software Version), JEP-0086 (Error Condition Mappings), Protocol support
|
|
|
|
@section JEP-0091 (Delayed Delivery)
|
|
|
|
|
|
|
|
The time specified on delayed incoming messages is interpreted, and
|
|
|
|
displayed in chat buffers instead of the current time.
|
|
|
|
|
|
|
|
@node JEP-0092 (Software Version), JEP-0095 (Stream Initiation), JEP-0091 (Delayed Delivery), Protocol support
|
|
|
|
@section JEP-0092 (Software Version)
|
|
|
|
|
|
|
|
The user can request the version of any entity. jabber.el answers
|
|
|
|
version requests to anyone, giving ``jabber.el'' as name, and the
|
|
|
|
Emacs version as OS.
|
|
|
|
|
|
|
|
@node JEP-0095 (Stream Initiation), JEP-0096 (File Transfer), JEP-0092 (Software Version), Protocol support
|
|
|
|
@section JEP-0095 (Stream Initiation)
|
|
|
|
|
|
|
|
JEP-0095 is supported, both incoming and outgoing, with the following
|
|
|
|
exceptions. It is not enabled by default, as it hasn't received much
|
|
|
|
testing.
|
|
|
|
|
|
|
|
jabber.el doesn't check service discovery results before sending a
|
|
|
|
stream initiation request.
|
|
|
|
|
2006-04-09 17:20:43 +00:00
|
|
|
@node JEP-0096 (File Transfer), JEP-0146 (Remote Controlling Clients), JEP-0095 (Stream Initiation), Protocol support
|
2004-12-15 00:11:07 +00:00
|
|
|
@section JEP-0096 (File Transfer)
|
|
|
|
|
|
|
|
Both sending and receiving files is supported, though not enabled by
|
|
|
|
default. The following limitations apply.
|
|
|
|
|
|
|
|
The hash of a file being sent is not calculated and sent in the
|
|
|
|
request.
|
|
|
|
|
|
|
|
Ranged transfers are not supported.
|
|
|
|
|
|
|
|
In-band bytestreams are not yet supported, even though JEP-0096
|
|
|
|
requires them.
|
|
|
|
|
2006-04-09 17:20:43 +00:00
|
|
|
@node JEP-0146 (Remote Controlling Clients), , JEP-0096 (File Transfer), Protocol support
|
|
|
|
@section JEP-0146 (Remote Controlling Clients)
|
|
|
|
|
|
|
|
The ``set-status'' command in JEP-0146 is supported.
|
|
|
|
|
2004-12-15 00:11:07 +00:00
|
|
|
@node Concept index, Function index, Protocol support, Top
|
2004-06-26 11:33:02 +00:00
|
|
|
@unnumbered Concept index
|
2004-01-15 00:11:04 +00:00
|
|
|
|
|
|
|
@printindex cp
|
|
|
|
|
2004-06-26 11:33:02 +00:00
|
|
|
@node Function index, Variable index, Concept index, Top
|
|
|
|
@unnumbered Function index
|
|
|
|
|
|
|
|
@printindex fn
|
|
|
|
|
|
|
|
@node Variable index, , Function index, Top
|
|
|
|
@unnumbered Variable index
|
|
|
|
|
|
|
|
@printindex vr
|
|
|
|
|
2004-01-15 00:11:04 +00:00
|
|
|
@bye
|
2004-04-15 23:15:21 +00:00
|
|
|
|
|
|
|
@ignore
|
|
|
|
arch-tag: 995bf3da-0e87-4b15-895a-1e85fac139a2
|
|
|
|
@end ignore
|