emacs-jabber/jabber.texi

572 lines
22 KiB
Plaintext
Raw Normal View History

2004-01-15 00:11:04 +00:00
\input texinfo @c -*-texinfo-*-
2004-01-30 21:25:13 +00:00
@c $Id: jabber.texi,v 1.3 2004/01/30 21:25:13 legoscia Exp $
2004-01-15 00:11:04 +00:00
@c %**start of header
@setfilename jabber.info
@settitle jabber.el manual 0.4
@c %**end of header
@syncodeindex fn cp
@dircategory Emacs
@direntry
* jabber.el: (jabber). Emacs Jabber client
@end direntry
@copying
This manual is for jabber.el, version 0.4.
Copyright @copyright{} 2004 Magnus Henoch, Tom Berger.
@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
@sp 10
@titlefont{jabber.el}
@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::
* Services::
* Customization::
* Hacking and extending::
2004-01-15 00:11:04 +00:00
* Index::
@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).
Main unfeatures of jabber.el are SASL, SSL and TLS. Beyond that,
there is nearly no support for advanced MUC features required for
moderation and other things.
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
2004-01-29 13:04:21 +00:00
@code{legoscia@@charente.de}). 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.
@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
@cindex Connecting
@cindex Registering with server
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
@code{(require 'jabber.el)} in your @file{.emacs}.
Now, type @kbd{M-x jabber-customize}. This brings up a customize
buffer for jabber.el. The most important variables to customize are
@code{jabber-username} and @code{jabber-server}. If for some reason
the JID of your server is not the same as its network name, change
@code{jabber-network-server} also. Save your changes, and type
@kbd{M-x jabber-connect} to connect.
If you do not yet have a Jabber account, you can register one. Enter
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
jabber-connect}. If the server supports in-band registration, you
will be presented with a registration form to fill out and send.
There you will have to enter your username again. Enter the same
username in both places, otherwise jabber.el will be confused.
If you successfully connect, jabber.el will download your roster and
display it in a buffer called @code{*-jabber-*}.
Now that you are connected, you can send @dfn{initial presence}. This
means sending a notification of you being online to everyone on your
roster. You don't have to do that, and if you don't noone can see
that you are online. This is usually not what you want, but it is
occasionally useful. To send presence, type @kbd{M-x
jabber-send-presence}. You will be asked three questions; the
defaults will do for now. @xref{Presence}, for more information.
2004-01-29 13:04:21 +00:00
To disconnect, type @kbd{M-x jabber-disconnect}.
@node Chatting, Presence, Connecting, Basic operation
@section Chatting
@cindex Chatting
2004-01-15 00:11:04 +00:00
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.
Now, try opening a chat with someone. In the default configuration,
you will hear a beep and see ``Message from @var{person}'' in the echo
area. This is exactly the same message you receive if the other
person sends a message to you. In any case, go to the buffer
@code{*-jabber-chat-:-@var{person}-*} and start chatting. Most
normal keystrokes open the minibuffer where you can type a message.
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
``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-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
@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
menu, by typing @kbd{C-c C-r} in the roster buffer.
2004-01-30 21:25:13 +00:00
@node Roster buffer, , Presence subscription, Basic operation
@section The roster buffer
@cindex Roster buffer
@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,
simply press the second mouse button over the JID in question. 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.
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.
2004-01-29 13:04:21 +00:00
@node Groupchat, Services, Basic operation, Top
@chapter Groupchat
@cindex Groupchat
@cindex MUC
@findex jabber-groupchat-join
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.
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
that only moderators can see your JID.
Groupchat messages will be displayed in a buffer called
@code{*-jabber-groupchat-:-@var{groupchat}-*}. It works much like the
chat buffer.
To leave a groupchat, type @kbd{M-x jabber-groupchat-leave}.
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.
@node Services, Customization, Groupchat, Top
@chapter Services
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}-*},
sometimes with a numerical suffix. They have the same keybindings as
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.
@menu
* Service discovery and browsing::
* Registering::
* Searching::
@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.
To start browsing, type @kbd{M-x jabber-get-browse} and enter the JID
you want to browse. For service discovery there are two commands,
@code{jabber-get-disco-items} and @code{jabber-get-disco-info},
depending on whether you want information about that specific JID or
about services related to it, respectively.
These commands can be accessed from the Info menu, which is opened by
typing @kbd{C-c C-i}.
@node Registering, Searching, Service discovery and browsing, Services
@section Registering
@cindex Registration
@cindex Cancelling registration
@cindex Changing password
@cindex Gateway registration
@cindex Password change
@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
service.
Please note that any passwords sent in this way will be sent in
cleartext to your Jabber server, as jabber.el doesn't support
encryption yet, and possibly sent in cleartext from your server to the
server hosting the service.
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.
@node Searching, , Registering, Services
@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.
@node Customization, Hacking and extending, Services, Top
@chapter Customization
2004-01-15 00:11:04 +00:00
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
* Connection settings::
* Customizing the roster buffer::
* Customizing alerts::
@end menu
@node Connection settings, Customizing the roster buffer, Customization, Customization
@section Connection settings
@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-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. This
is 5222 in almost all cases.
@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.
@node Customizing the roster buffer, Customizing alerts, Connection settings, Customization
@section Customizing the roster buffer
@code{jabber-debug} toggles extended debug output. Currently, this
means two things. In the roster buffer, you can see the properties of
each contact. All XML stanzas sent and received are logged in the
buffer @code{*-jabber-xml-log-*} in list format. @xref{XML
representation}.
@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.
@node Customizing alerts, , Customizing the roster buffer, Customization
@section Customizing alerts
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
section and just read @ref{Provided alerts}.
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.
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.
Was that confusing enough? The preceding paragraph will be expressed
in code in the following subsections.
@menu
* Provided alerts::
* Presence alerts::
* Message alerts::
* Info alerts::
@end menu
@node Standard alerts, Presence alerts, Customizing alerts, Customizing alerts
@subsection Standard alerts
Six alerts are already written for all three alert categories. These
all obey the result from the corresponding message function.
The @code{beep} alerts simply sound the terminal bell by calling
@code{ding}. They are enabled by default.
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.
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
with another window manager, the calls to ratpoison will stall
indefinitely. Avoid that.
All these functions are near the end of the @file{jabber.el} file.
You can use them as templates or inspiration for your own alerts.
@node Presence alerts, Message alerts, Provided alerts, Customizing alerts
@subsection Presence alerts
Set @code{jabber-alerts-presence-message-function} to your desired
function. This function should take four arguments, @var{who},
@var{oldstatus}, @var{newstatus} and @var{statustext}. @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.
@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.
@node Message alerts, Info alerts, Presence alerts, Customizing alerts
@subsection Message alerts
@node Info alerts, , Message alerts, Customizing alerts
@subsection Info alerts
2004-01-29 13:04:21 +00:00
@node Hacking and extending, Index, Customization, Top
@chapter Hacking and extending
2004-01-15 00:11:04 +00:00
2004-01-30 21:25:13 +00:00
@menu
* XML representation::
* Roster structure::
* Listening for new requests::
* Sending new requests::
@end menu
@node XML representation, Roster structure, Hacking and extending, Hacking and extending
@section XML representation
@node Roster structure, Listening for new requests, XML representation, Hacking and extending
@section Roster structure
@node Listening for new requests, Sending new requests, Roster structure, Hacking and extending
@section Listening for new requests
@node Sending new requests, , Listening for new requests, Hacking and extending
@section Sending new requests
2004-01-29 13:04:21 +00:00
@node Index, , Hacking and extending, Top
2004-01-15 00:11:04 +00:00
@unnumbered Index
@printindex cp
@bye