summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--Makefile.am2
-rw-r--r--Makefile.in32
-rw-r--r--README14
-rwxr-xr-xconfigure23
-rw-r--r--configure.ac4
-rw-r--r--debian/changelog67
-rw-r--r--debian/compat1
-rw-r--r--debian/control17
-rw-r--r--debian/copyright79
-rw-r--r--debian/dirs2
-rw-r--r--debian/docs3
-rwxr-xr-xdebian/emacs-jabber.emacsen-install30
-rw-r--r--debian/emacs-jabber.emacsen-remove14
-rw-r--r--debian/emacs-jabber.emacsen-startup14
-rwxr-xr-xdebian/rules56
-rw-r--r--jabber-autoloads.el35
-rw-r--r--jabber-bookmarks.el44
-rw-r--r--jabber-conn.el51
-rw-r--r--jabber-core.el6
-rw-r--r--jabber-history.el7
-rw-r--r--jabber-muc.el14
-rw-r--r--jabber-ourversion.el7
-rw-r--r--jabber-ourversion.el.in7
-rw-r--r--jabber-roster.el10
-rw-r--r--jabber-vcard-avatars.el29
-rw-r--r--jabber-version.el6
-rw-r--r--jabber.el6
-rw-r--r--jabber.info524
-rw-r--r--jabber.texi254
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/Makefile.in4
-rw-r--r--tests/history.el39
-rw-r--r--tests/load-all.el8
34 files changed, 1008 insertions, 406 deletions
diff --git a/AUTHORS b/AUTHORS
index 3aa9f60..ccb69c2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -20,5 +20,6 @@ Andrey Slusar
Valery V. Vorotyntsev
Milan Zamazal
Xavier Maillard
+Vitaly Mayatskikh
arch-tag: 15700144-3BD9-11D9-871C-000A95C2FCD0
diff --git a/Makefile.am b/Makefile.am
index 2703d81..9e0e3a2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,7 +27,7 @@ if USE_OUR_HEX_UTIL
compat_lisp_sources += compat/hex-util.el
endif
-dist_lisp_LISP=$(my_lisp_sources) $(compat_lisp_sources) jabber-autoloads.el
+dist_lisp_LISP=$(my_lisp_sources) $(compat_lisp_sources) jabber-autoloads.el jabber-ourversion.el
MAINTAINERCLEANFILES=jabber-autoloads.el
EXTRA_DIST = jabber-pkg.el.in
diff --git a/Makefile.in b/Makefile.in
index 8eef8a7..5d13e54 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -36,8 +36,9 @@ POST_UNINSTALL = :
subdir = .
DIST_COMMON = README $(am__configure_deps) $(am__dist_lisp_LISP_DIST) \
$(dist_libexec_SCRIPTS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS NEWS \
- elisp-comp install-sh missing texinfo.tex
+ $(srcdir)/Makefile.in $(srcdir)/jabber-ourversion.el.in \
+ $(top_srcdir)/configure AUTHORS NEWS elisp-comp install-sh \
+ missing texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/emacs-lib.m4 \
$(top_srcdir)/configure.ac
@@ -46,7 +47,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = jabber-ourversion.el
am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(infodir)" \
"$(DESTDIR)$(lispdir)"
dist_libexecSCRIPT_INSTALL = $(INSTALL_SCRIPT)
@@ -99,7 +100,7 @@ am__dist_lisp_LISP_DIST = fsm.el jabber-activity.el \
jabber-vcard.el jabber-version.el jabber-watch.el \
jabber-widget.el jabber-wmii.el jabber-xmessage.el \
jabber-xml.el jabber.el srv.el compat/sha1.el \
- compat/hex-util.el jabber-autoloads.el
+ compat/hex-util.el jabber-autoloads.el jabber-ourversion.el
dist_lispLISP_INSTALL = $(INSTALL_DATA)
LISP = $(dist_lisp_LISP)
am__ELFILES = compat/hex-util.el compat/sha1.el fsm.el \
@@ -114,15 +115,16 @@ am__ELFILES = compat/hex-util.el compat/sha1.el fsm.el \
jabber-history.el jabber-iq.el jabber-keepalive.el \
jabber-keymap.el jabber-logon.el jabber-menu.el \
jabber-modeline.el jabber-muc-nick-completion.el jabber-muc.el \
- jabber-newdisco.el jabber-osd.el jabber-presence.el \
- jabber-private.el jabber-ratpoison.el jabber-register.el \
- jabber-roster.el jabber-sasl.el jabber-sawfish.el \
- jabber-screen.el jabber-search.el jabber-si-client.el \
- jabber-si-common.el jabber-si-server.el jabber-socks5.el \
- jabber-time.el jabber-truncate.el jabber-util.el \
- jabber-vcard-avatars.el jabber-vcard.el jabber-version.el \
- jabber-watch.el jabber-widget.el jabber-wmii.el \
- jabber-xmessage.el jabber-xml.el jabber.el srv.el
+ jabber-newdisco.el jabber-osd.el jabber-ourversion.el \
+ jabber-presence.el jabber-private.el jabber-ratpoison.el \
+ jabber-register.el jabber-roster.el jabber-sasl.el \
+ jabber-sawfish.el jabber-screen.el jabber-search.el \
+ jabber-si-client.el jabber-si-common.el jabber-si-server.el \
+ jabber-socks5.el jabber-time.el jabber-truncate.el \
+ jabber-util.el jabber-vcard-avatars.el jabber-vcard.el \
+ jabber-version.el jabber-watch.el jabber-widget.el \
+ jabber-wmii.el jabber-xmessage.el jabber-xml.el jabber.el \
+ srv.el
am__ELCFILES = $(am__ELFILES:.el=.elc)
ELCFILES = $(LISP:.el=.elc)
elisp_comp = $(top_srcdir)/elisp-comp
@@ -237,7 +239,7 @@ jabber-watch.el jabber-widget.el jabber-wmii.el jabber-xmessage.el \
jabber-xml.el jabber.el srv.el
compat_lisp_sources = $(am__append_1) $(am__append_2)
-dist_lisp_LISP = $(my_lisp_sources) $(compat_lisp_sources) jabber-autoloads.el
+dist_lisp_LISP = $(my_lisp_sources) $(compat_lisp_sources) jabber-autoloads.el jabber-ourversion.el
MAINTAINERCLEANFILES = jabber-autoloads.el
EXTRA_DIST = jabber-pkg.el.in
info_TEXINFOS = jabber.texi
@@ -284,6 +286,8 @@ $(top_srcdir)/configure: $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+jabber-ourversion.el: $(top_builddir)/config.status $(srcdir)/jabber-ourversion.el.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
install-dist_libexecSCRIPTS: $(dist_libexec_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
diff --git a/README b/README
index 32d5588..600d9fc 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This is jabber.el 0.7.90, a Jabber client for Emacs. Note that this
+This is jabber.el 0.7.91, a Jabber client for Emacs. Note that this
is a pretest version; testing and bug reports are very welcome.
Jabber (also known as XMPP) is an instant messaging system; see
@@ -71,11 +71,21 @@ they're in. To install the Info documentation, copy jabber.info to
/usr/local/info and run "install-info /usr/local/info/jabber.info".
After installation by either method, add (load "jabber-autoloads") to
-your .emacs file.
+your .emacs file. (If you got the code from CVS, you still need the
+makefile to generate jabber-autoloads.el.)
If you are upgrading from 0.7-0.7.x, you need to update your
configuration. See the section "Account settings" in the manual.
+Special notes for CVS version
+=============================
+If you are running jabber.el from CVS, you need to generate the
+jabber-autoloads.el file yourself. The simplest way to do this is by
+using the "./configure && make" process.
+
+To generate the configure script, make sure that autoconf and automake
+are installed and run "autoreconf -i".
+
Usage
=====
diff --git a/configure b/configure
index 9154a9e..e84d35d 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.62 for jabber.el 0.7.90.
+# Generated by GNU Autoconf 2.62 for jabber.el 0.7.91.
#
# Report bugs to <emacs-jabber-general@lists.sourceforge.net>.
#
@@ -596,8 +596,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='jabber.el'
PACKAGE_TARNAME='emacs-jabber'
-PACKAGE_VERSION='0.7.90'
-PACKAGE_STRING='jabber.el 0.7.90'
+PACKAGE_VERSION='0.7.91'
+PACKAGE_STRING='jabber.el 0.7.91'
PACKAGE_BUGREPORT='emacs-jabber-general@lists.sourceforge.net'
ac_subst_vars='SHELL
@@ -1231,7 +1231,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures jabber.el 0.7.90 to adapt to many kinds of systems.
+\`configure' configures jabber.el 0.7.91 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1297,7 +1297,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of jabber.el 0.7.90:";;
+ short | recursive ) echo "Configuration of jabber.el 0.7.91:";;
esac
cat <<\_ACEOF
@@ -1377,7 +1377,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-jabber.el configure 0.7.90
+jabber.el configure 0.7.91
generated by GNU Autoconf 2.62
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1391,7 +1391,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by jabber.el $as_me 0.7.90, which was
+It was created by jabber.el $as_me 0.7.91, which was
generated by GNU Autoconf 2.62. Invocation command line was
$ $0 $@
@@ -2105,7 +2105,7 @@ fi
# Define the identity of the package.
PACKAGE='emacs-jabber'
- VERSION='0.7.90'
+ VERSION='0.7.91'
cat >>confdefs.h <<_ACEOF
@@ -2457,7 +2457,7 @@ else
fi
-ac_config_files="$ac_config_files Makefile tests/Makefile"
+ac_config_files="$ac_config_files Makefile tests/Makefile jabber-ourversion.el"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -2928,7 +2928,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by jabber.el $as_me 0.7.90, which was
+This file was extended by jabber.el $as_me 0.7.91, which was
generated by GNU Autoconf 2.62. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -2971,7 +2971,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-jabber.el config.status 0.7.90
+jabber.el config.status 0.7.91
configured by $0, generated by GNU Autoconf 2.62,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@@ -3079,6 +3079,7 @@ do
case $ac_config_target in
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "jabber-ourversion.el") CONFIG_FILES="$CONFIG_FILES jabber-ourversion.el" ;;
*) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
diff --git a/configure.ac b/configure.ac
index 3e489d9..93075df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([jabber.el], [0.7.90], [emacs-jabber-general@lists.sourceforge.net], [emacs-jabber])
+AC_INIT([jabber.el], [0.7.91], [emacs-jabber-general@lists.sourceforge.net], [emacs-jabber])
AM_INIT_AUTOMAKE([-Wall -Werror foreign dist-zip])
AC_CONFIG_MACRO_DIR([m4])
@@ -11,5 +11,5 @@ AX_CHECK_EMACS_LIB([hex-util], [HAVE_HEX_UTIL=yes], [HAVE_HEX_UTIL=no])
AM_CONDITIONAL([USE_OUR_SHA1], [test x$HAVE_SHA1 = xno -a x$HAVE_SHA1_EL = xno])
AM_CONDITIONAL([USE_OUR_HEX_UTIL], [test x$HAVE_HEX_UTIL = xno])
-AC_CONFIG_FILES([Makefile tests/Makefile])
+AC_CONFIG_FILES([Makefile tests/Makefile jabber-ourversion.el])
AC_OUTPUT
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..bd49226
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,67 @@
+emacs-jabber (0.7.91-1) unstable; urgency=low
+
+ * New upstream (pretest) version.
+
+ -- Milan Zamazal <pdm@debian.org> Sat, 31 May 2008 09:48:51 +0200
+
+emacs-jabber (0.7.90-1) unstable; urgency=low
+
+ * New upstream (pretest) version.
+ * debian/copyright updated.
+ * Standards 3.7.3 (no real change).
+ * Home page URL moved from description to control fields.
+
+ -- Milan Zamazal <pdm@debian.org> Wed, 30 Apr 2008 16:59:07 +0200
+
+emacs-jabber (0.7.1-5) unstable; urgency=low
+
+ * Fix of TLS connection creation, thanks to Valery V. Vorotyntsev.
+ Closes: #476333.
+
+ -- Milan Zamazal <pdm@debian.org> Wed, 23 Apr 2008 10:47:43 +0200
+
+emacs-jabber (0.7.1-4) unstable; urgency=low
+
+ * jabber-keepalive.el updated from upstream CVS. This avoids annoying
+ verbosity when keepalive is enabled.
+
+ -- Milan Zamazal <pdm@debian.org> Mon, 18 Feb 2008 20:28:44 +0100
+
+emacs-jabber (0.7.1-3) unstable; urgency=low
+
+ * Prefer emacs22 in emacsen dependencies; closes: #434023.
+
+ -- Milan Zamazal <pdm@debian.org> Sat, 21 Jul 2007 10:08:00 +0200
+
+emacs-jabber (0.7.1-2) unstable; urgency=low
+
+ * Updated for emacs22.
+
+ -- Milan Zamazal <pdm@debian.org> Tue, 22 May 2007 20:39:45 +0200
+
+emacs-jabber (0.7.1-1) experimental; urgency=low
+
+ * New upstream version.
+ * Upload to experimental because etch is in freeze.
+
+ -- Milan Zamazal <pdm@debian.org> Mon, 5 Feb 2007 10:12:18 +0100
+
+emacs-jabber (0.7-3) unstable; urgency=low
+
+ * Upstream CVS backport: fix of jabber-password rewriting.
+
+ -- Milan Zamazal <pdm@debian.org> Wed, 5 Jul 2006 15:15:30 +0200
+
+emacs-jabber (0.7-2) unstable; urgency=low
+
+ * Don't depend on flim, recommend it.
+ * Upstream CVS backport: jabber-autoaway.el added.
+
+ -- Milan Zamazal <pdm@debian.org> Wed, 28 Jun 2006 08:30:13 +0200
+
+emacs-jabber (0.7-1) unstable; urgency=low
+
+ * Initial release, based on unofficial packaging by Magnus Henoch;
+ closes: #372882.
+
+ -- Milan Zamazal <pdm@debian.org> Mon, 12 Jun 2006 19:01:19 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..cc27572
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,17 @@
+Source: emacs-jabber
+Section: net
+Priority: optional
+Maintainer: Milan Zamazal <pdm@debian.org>
+Build-Depends: debhelper (>= 4.0.0)
+Build-Depends-Indep: texinfo
+Standards-Version: 3.7.3
+Homepage: http://emacs-jabber.sourceforge.net/
+
+Package: emacs-jabber
+Architecture: all
+Depends: emacs22 | emacs21 | xemacs21-basesupport (>= 2004.02.02) | emacs-snapshot, emacs22 | gnus (>= 5.10.6-1.NO.20050713-1) | emacs-snapshot
+Recommends: flim, xprintidle
+Description: Jabber client for Emacsen
+ jabber.el (emacs-jabber) is a Jabber client for Emacs and XEmacs.
+ While this is still a development version, it offers all the basic
+ instant messaging functions and is highly customizable.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..b5fac98
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,79 @@
+This package was debianized by Milan Zamazal <pdm@debian.org> on
+Mon, 12 Jun 2006 19:01:19 +0200.
+
+It was downloaded from http://sourceforge.net/projects/emacs-jabber/.
+
+Copyright Holders:
+
+- Primary authors:
+
+ Tom Berger <object@intelectronica.net>
+ Magnus Henoch <mange@freemail.hu>
+
+- Other contributors (in no particular order):
+
+ Mathias Dahl
+ Mario Domenech Goulart
+ Nolan Eakins
+ François Fleuret
+ Justin Kirby
+ Carl Henrik Lunde
+ Andrey Slusar
+ Georg Lehner
+ Valery V. Vorotyntsev
+ Detlev Zundel
+ Terechkov Evgenii
+ Kirill A. Korinskiy
+ Serguei Jidkov
+
+License:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+On Debian systems, you can find the GNU General Public License, version 2, in
+the file /usr/share/common-licenses/GPL-2.
+
+To make Lintian happy, here is the list of all copyright headers:
+
+ Copyright (C) 2002, 2003, 2004 - tom berger - object@intelectronica.net
+ Copyright (C) 2003, 2004 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2003, 2004, 2005, 2007 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2003, 2004, 2007 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2003, 2004, 2007, 2008 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2004 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2004 - Mathias Dahl
+ Copyright (C) 2004 Carl Henrik Lunde - <chlunde+jabber+@ping.uio.no>
+ Copyright (C) 2004, 2005, 2006, 2007, 2008 Magnus Henoch, Tom Berger.
+ Copyright (C) 2004, 2007 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2004, 2007, 2008 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2005 Magnus Henoch
+ Copyright (C) 2005 - Carl Henrik Lunde - chlunde+jabber+@ping.uio.no
+ Copyright (C) 2005 - Georg Lehner - jorge@magma.com.ni
+ Copyright (C) 2005 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2005 - Mario Domenech Goulart
+ Copyright (C) 2005, 2007 Magnus Henoch
+ Copyright (C) 2005, 2007 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2005, 2007, 2008 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2005, 2008 Magnus Henoch
+ Copyright (C) 2006 Magnus Henoch
+ Copyright (C) 2006 - Kirill A. Kroinskiy - catap@catap.ru
+ Copyright (C) 2006 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2006, 2007 Magnus Henoch
+ Copyright (C) 2006, 2008 Magnus Henoch
+ Copyright (C) 2007 Valery V. Vorotyntsev <valery.vv@gmail.com>
+ Copyright (C) 2007 - Detlev Zundel - dzu@gnu.org
+ Copyright (C) 2007 - Kirill A. Korinskiy - catap@catap.ru
+ Copyright (C) 2007 - Magnus Henoch - mange@freemail.hu
+ Copyright (C) 2007 - Serguei Jidkov - jsv@e-mail.ru
+ Copyright (C) 2007, 2008 - Kirill A. Korinskiy - catap@catap.ru
+ Copyright (C) 2008 Magnus Henoch <mange@freemail.hu>
+ Copyright (C) 2008 - Magnus Henoch
+ Copyright (C) 2008 - Terechkov Evgenii - evg@altlinux.org
diff --git a/debian/dirs b/debian/dirs
new file mode 100644
index 0000000..104b9f0
--- /dev/null
+++ b/debian/dirs
@@ -0,0 +1,2 @@
+etc/emacs/site-start.d
+usr/share/emacs/site-lisp/emacs-jabber
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..6f83607
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,3 @@
+AUTHORS
+NEWS
+README
diff --git a/debian/emacs-jabber.emacsen-install b/debian/emacs-jabber.emacsen-install
new file mode 100755
index 0000000..2adfdd0
--- /dev/null
+++ b/debian/emacs-jabber.emacsen-install
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+set -e
+
+FLAVOR=$1
+PACKAGE=emacs-jabber
+
+BYTE_COMPILE_OPTIONS="-batch -f batch-byte-compile"
+EL_FILES=`echo *.el`
+EL_DIR=/usr/share/emacs/site-lisp/$PACKAGE
+ELC_DIR=/usr/share/${FLAVOR}/site-lisp/$PACKAGE
+
+if [ "${FLAVOR}" = emacs21 ] || [ "${FLAVOR}" = emacs22 ] || [ "${FLAVOR}" = emacs-snapshot ]; then
+ echo "install/$PACKAGE: byte-compiling for ${FLAVOR}..."
+
+ # Copy the temp .el files
+ if [ ! -d ${ELC_DIR} ]; then
+ mkdir ${ELC_DIR}
+ fi
+ cp ${EL_DIR}/*.el ${ELC_DIR}/
+
+ # Byte compile them
+ cd ${ELC_DIR}
+ ${FLAVOR} -q --no-site-file --batch --eval "(setq load-path (cons \"${ELC_DIR}\" load-path))" -f batch-byte-compile *.el >>/tmp/${PACKAGE}.log 2>&1 || true
+ # remove the redundant .el files
+ # presumes that any .el files in the <flavor> dir are trash.
+ rm ${ELC_DIR}/*.el
+fi
+
+exit 0
diff --git a/debian/emacs-jabber.emacsen-remove b/debian/emacs-jabber.emacsen-remove
new file mode 100644
index 0000000..a838123
--- /dev/null
+++ b/debian/emacs-jabber.emacsen-remove
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+FLAVOR=$1
+PACKAGE=emacs-jabber
+
+if [ "${FLAVOR}" != emacs ]; then
+ echo "Purging $PACKAGE byte-compiled files for ${FLAVOR}..."
+ rm -f /usr/share/${FLAVOR}/site-lisp/$PACKAGE/*.elc
+ echo "Done."
+fi
+
+exit 0
diff --git a/debian/emacs-jabber.emacsen-startup b/debian/emacs-jabber.emacsen-startup
new file mode 100644
index 0000000..7bb2aca
--- /dev/null
+++ b/debian/emacs-jabber.emacsen-startup
@@ -0,0 +1,14 @@
+;; -*-emacs-lisp-*-
+;;
+;; Emacs startup file for the Debian emacs-jabber package.
+
+(if (file-exists-p "/usr/share/emacs/site-lisp/emacs-jabber")
+ (progn
+ (debian-pkg-add-load-path-item
+ (concat "/usr/share/" (symbol-name flavor) "/site-lisp/emacs-jabber"))
+ ;; Make sure that the uncompiled files are also in the load-path, near the
+ ;; end. This is for moving point to the code when view help.
+ (setq load-path
+ (append load-path '("/usr/share/emacs/site-lisp/emacs-jabber")))
+ (load "jabber-autoloads"))
+ (message "Package emacs-jabber removed but not purged. Skipping setup."))
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..6a4f7ec
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,56 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Prevent making *.elc files by setting EMACS to `no'
+ EMACS=no ./configure --prefix=/usr --with-lispdir='$${datarootdir}/emacs/site-lisp/emacs-jabber' --libexecdir='$${prefix}/lib/emacs-jabber'
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+ $(MAKE)
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+ [ ! -f Makefile ] || $(MAKE) distclean
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/emacs-jabber
+ # Automake doesn't install *.el files when they are not compiled
+ install -m 644 *.el $(CURDIR)/debian/emacs-jabber/usr/share/emacs/site-lisp/emacs-jabber/
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installemacsen
+ dh_installinfo jabber.info*
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+# Build architecture-dependent files here.
+binary-arch: build install
+# We have nothing to do by default.
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/jabber-autoloads.el b/jabber-autoloads.el
index f010a51..48bc238 100644
--- a/jabber-autoloads.el
+++ b/jabber-autoloads.el
@@ -4,7 +4,7 @@
;;;### (autoloads (jabber-info jabber-customize jabber-account-list)
-;;;;;; "jabber" "jabber.el" (18447 53546))
+;;;;;; "jabber" "jabber.el" (18488 8726))
;;; Generated autoloads from jabber.el
(defvar jabber-account-list nil "\
@@ -75,8 +75,9 @@ With a numeric arg, enable this display if arg is positive.
;;;***
-;;;### (autoloads (jabber-edit-bookmarks jabber-get-bookmarks jabber-get-conference-data)
-;;;;;; "jabber-bookmarks" "jabber-bookmarks.el" (18442 56829))
+;;;### (autoloads (jabber-edit-bookmarks jabber-get-bookmarks-from-cache
+;;;;;; jabber-get-bookmarks jabber-get-conference-data) "jabber-bookmarks"
+;;;;;; "jabber-bookmarks.el" (18478 46781))
;;; Generated autoloads from jabber-bookmarks.el
(autoload 'jabber-get-conference-data "jabber-bookmarks" "\
@@ -84,7 +85,8 @@ Get bookmark data for CONFERENCE-JID.
KEY may be nil or one of :name, :autojoin, :nick and :password.
If KEY is nil, a plist containing the above keys is returned.
CONT is called when the result is available, with JC and the
-result as arguments.
+result as arguments. If CONT is nil, return the requested data
+immediately, and return nil if it is not in the cache.
\(fn JC CONFERENCE-JID CONT &optional KEY)" nil nil)
@@ -96,6 +98,13 @@ If REFRESH is non-nil, always fetch bookmarks.
\(fn JC CONT &optional REFRESH)" nil nil)
+(autoload 'jabber-get-bookmarks-from-cache "jabber-bookmarks" "\
+Return cached bookmarks for JC.
+If bookmarks have not yet been fetched by `jabber-get-bookmarks',
+return nil.
+
+\(fn JC)" nil nil)
+
(autoload 'jabber-edit-bookmarks "jabber-bookmarks" "\
Create a buffer for editing bookmarks interactively.
@@ -114,7 +123,7 @@ Create a buffer for composing a Jabber message.
;;;***
-;;;### (autoloads nil "jabber-core" "jabber-core.el" (18447 53755))
+;;;### (autoloads nil "jabber-core" "jabber-core.el" (18496 26128))
;;; Generated autoloads from jabber-core.el
(autoload 'jabber-connect-all "jabber" "Connect to all configured Jabber accounts.\nSee `jabber-account-list'.\nIf no accounts are configured (or ARG supplied), call `jabber-connect' interactively." t)
(autoload 'jabber-connect "jabber" "Connect to the Jabber server and start a Jabber XML stream.\nWith prefix argument, register a new account.\nWith double prefix argument, specify more connection details." t)
@@ -211,15 +220,15 @@ ERROR-CLOSURE-DATA are used as in `jabber-send-iq'.
;;;;;; "jabber-ft-client.el" "jabber-ft-common.el" "jabber-ft-server.el"
;;;;;; "jabber-history.el" "jabber-iq.el" "jabber-keepalive.el"
;;;;;; "jabber-logon.el" "jabber-menu.el" "jabber-modeline.el" "jabber-muc.el"
-;;;;;; "jabber-newdisco.el" "jabber-osd.el" "jabber-presence.el"
-;;;;;; "jabber-ratpoison.el" "jabber-register.el" "jabber-roster.el"
-;;;;;; "jabber-sasl.el" "jabber-sawfish.el" "jabber-screen.el" "jabber-search.el"
-;;;;;; "jabber-si-client.el" "jabber-si-common.el" "jabber-si-server.el"
-;;;;;; "jabber-socks5.el" "jabber-time.el" "jabber-truncate.el"
-;;;;;; "jabber-util.el" "jabber-vcard-avatars.el" "jabber-vcard.el"
-;;;;;; "jabber-version.el" "jabber-watch.el" "jabber-widget.el"
+;;;;;; "jabber-newdisco.el" "jabber-osd.el" "jabber-ourversion.el"
+;;;;;; "jabber-presence.el" "jabber-ratpoison.el" "jabber-register.el"
+;;;;;; "jabber-roster.el" "jabber-sasl.el" "jabber-sawfish.el" "jabber-screen.el"
+;;;;;; "jabber-search.el" "jabber-si-client.el" "jabber-si-common.el"
+;;;;;; "jabber-si-server.el" "jabber-socks5.el" "jabber-time.el"
+;;;;;; "jabber-truncate.el" "jabber-util.el" "jabber-vcard-avatars.el"
+;;;;;; "jabber-vcard.el" "jabber-version.el" "jabber-watch.el" "jabber-widget.el"
;;;;;; "jabber-wmii.el" "jabber-xmessage.el" "jabber-xml.el" "srv.el")
-;;;;;; (18454 52856 349895))
+;;;;;; (18496 31002 700675))
;;;***
diff --git a/jabber-bookmarks.el b/jabber-bookmarks.el
index 9fc4277..bb63d8d 100644
--- a/jabber-bookmarks.el
+++ b/jabber-bookmarks.el
@@ -1,6 +1,6 @@
;; jabber-bookmarks.el - bookmarks according to XEP-0048
-;; Copyright (C) 2007 - Magnus Henoch - mange@freemail.hu
+;; Copyright (C) 2007, 2008 - Magnus Henoch - mange@freemail.hu
;; This file is a part of jabber.el.
@@ -35,22 +35,30 @@ and t if no bookmarks where found.")
KEY may be nil or one of :name, :autojoin, :nick and :password.
If KEY is nil, a plist containing the above keys is returned.
CONT is called when the result is available, with JC and the
-result as arguments."
- (jabber-get-bookmarks
- jc
- (lexical-let ((conference-jid conference-jid)
- (key key)
- (cont cont))
- (lambda (jc result)
- (let ((entry
- (dolist (node result)
+result as arguments. If CONT is nil, return the requested data
+immediately, and return nil if it is not in the cache."
+ (if (null cont)
+ (jabber-get-conference-data-internal
+ (jabber-get-bookmarks-from-cache jc)
+ conference-jid
+ key)
+ (jabber-get-bookmarks
+ jc
+ (lexical-let ((conference-jid conference-jid)
+ (key key)
+ (cont cont))
+ (lambda (jc result)
+ (let ((entry (jabber-get-conference-data-internal result conference-jid key)))
+ (funcall cont jc entry)))))))
+
+(defun jabber-get-conference-data-internal (result conference-jid key)
+ (let ((entry (dolist (node result)
(when (and (eq (jabber-xml-node-name node) 'conference)
(string= (jabber-xml-get-attribute node 'jid) conference-jid))
(return (jabber-parse-conference-bookmark node))))))
- (funcall cont jc
- (if key
- (plist-get entry key)
- entry)))))))
+ (if key
+ (plist-get entry key)
+ entry)))
(defun jabber-parse-conference-bookmark (node)
"Convert a <conference/> tag into a plist.
@@ -89,6 +97,13 @@ If REFRESH is non-nil, always fetch bookmarks."
(puthash my-jid value jabber-bookmarks)
(funcall cont jc (when (listp value) value))))
+;;;###autoload
+(defun jabber-get-bookmarks-from-cache (jc)
+ "Return cached bookmarks for JC.
+If bookmarks have not yet been fetched by `jabber-get-bookmarks',
+return nil."
+ (gethash (jabber-connection-bare-jid jc) jabber-bookmarks))
+
(defun jabber-set-bookmarks (jc bookmarks &optional callback)
"Set bookmarks to BOOKMARKS, which is a list of XML elements.
If CALLBACK is non-nil, call it with JC and t or nil as arguments
@@ -96,6 +111,7 @@ on success or failure, respectively."
(unless callback
(setq callback #'ignore))
(jabber-private-set
+ jc
`(storage ((xmlns . "storage:bookmarks"))
,@bookmarks)
callback t
diff --git a/jabber-conn.el b/jabber-conn.el
index ed82e9b..db23890 100644
--- a/jabber-conn.el
+++ b/jabber-conn.el
@@ -123,12 +123,18 @@ connection fails."
(catch 'connected
(dolist (target targets)
(condition-case e
- (let ((connection
- (open-network-stream
- "jabber"
- (generate-new-buffer jabber-process-buffer)
- (car target)
- (cdr target))))
+ (let ((process-buffer (generate-new-buffer jabber-process-buffer))
+ connection)
+ (unwind-protect
+ (setq connection (open-network-stream
+ "jabber"
+ process-buffer
+ (car target)
+ (cdr target)))
+
+ (unless (or connection jabber-debug-keep-process-buffers)
+ (kill-buffer process-buffer)))
+
(when connection
(fsm-send fsm (list :connected connection))
(throw 'connected connection)))
@@ -161,12 +167,16 @@ connection fails."
'open-ssl-stream)
(t
(error "Neither TLS nor SSL connect functions available")))))
- (let ((connection
- (funcall connect-function
- "jabber"
- (generate-new-buffer jabber-process-buffer)
- (or network-server server)
- (or port 5223))))
+ (let ((process-buffer (generate-new-buffer jabber-process-buffer))
+ connection)
+ (unwind-protect
+ (setq connection (funcall connect-function
+ "jabber"
+ process-buffer
+ (or network-server server)
+ (or port 5223)))
+ (unless (or connection jabber-debug-keep-process-buffers)
+ (kill-buffer process-buffer)))
(if connection
(fsm-send fsm (list :connected connection))
(fsm-send fsm :connection-failed)))))
@@ -190,12 +200,17 @@ connection fails."
(catch 'connected
(dolist (target targets)
(condition-case e
- (let ((connection
- (starttls-open-stream
- "jabber"
- (generate-new-buffer jabber-process-buffer)
- (car target)
- (cdr target))))
+ (let ((process-buffer (generate-new-buffer jabber-process-buffer))
+ connection)
+ (unwind-protect
+ (setq connection
+ (starttls-open-stream
+ "jabber"
+ process-buffer
+ (car target)
+ (cdr target)))
+ (unless (or connection jabber-debug-keep-process-buffers)
+ (kill-buffer process-buffer)))
(when connection
(fsm-send fsm (list :connected connection))
(throw 'connected connection)))
diff --git a/jabber-core.el b/jabber-core.el
index ba168c7..fc39c08 100644
--- a/jabber-core.el
+++ b/jabber-core.el
@@ -255,7 +255,11 @@ With double prefix argument, specify more connection details."
;; Close the network connection.
(let ((connection (plist-get state-data :connection)))
(when (processp connection)
- (delete-process connection)))
+ (let ((process-buffer (process-buffer connection)))
+ (delete-process connection)
+ (when (and (bufferp process-buffer)
+ (not jabber-debug-keep-process-buffers))
+ (kill-buffer process-buffer)))))
(setq state-data (plist-put state-data :connection nil))
;; Remove lost connections from the roster buffer.
(jabber-display-roster)
diff --git a/jabber-history.el b/jabber-history.el
index 8b854bd..b84d183 100644
--- a/jabber-history.el
+++ b/jabber-history.el
@@ -1,6 +1,6 @@
;; jabber-history.el - recording message history
-;; Copyright (C) 2004, 2007 - Magnus Henoch - mange@freemail.hu
+;; Copyright (C) 2004, 2007, 2008 - Magnus Henoch - mange@freemail.hu
;; Copyright (C) 2004 - Mathias Dahl
;; This file is a part of jabber.el.
@@ -160,7 +160,10 @@ Jabber history files."
(make-directory jabber-history-dir))
(when (jabber-rotate-history-p history-file)
(jabber-history-rotate history-file))
- (write-region (point-min) (point-max) history-file t 'quiet))))
+ (condition-case e
+ (write-region (point-min) (point-max) history-file t 'quiet)
+ (error
+ (message "Unable to write history: %s" (error-message-string e)))))))
(defun jabber-history-query (start-time
end-time
diff --git a/jabber-muc.el b/jabber-muc.el
index b00b17d..64de966 100644
--- a/jabber-muc.el
+++ b/jabber-muc.el
@@ -408,7 +408,7 @@ groupchat buffer."
(interactive
(let ((account (jabber-read-account))
(group (jabber-read-jid-completing "group: ")))
- (list account group (jabber-muc-read-my-nickname group (plist-get (fsm-get-state-data account) :username)) t)))
+ (list account group (jabber-muc-read-my-nickname account group) t)))
;; If the user is already in the room, we don't need as many checks.
(if (or (assoc group *jabber-active-groupchats*)
@@ -450,7 +450,9 @@ groupchat buffer."
(let ((password
;; Is the room password-protected?
(when (member "muc_passwordprotected" features)
- (read-passwd (format "Password for %s: " (jabber-jid-displayname group))))))
+ (or
+ (jabber-get-conference-data jc group nil :password)
+ (read-passwd (format "Password for %s: " (jabber-jid-displayname group)))))))
(jabber-groupchat-join-3 jc group nickname password popup)))))
@@ -479,12 +481,12 @@ groupchat buffer."
(let ((buffer (jabber-muc-create-buffer jc group)))
(switch-to-buffer buffer))))
-(defun jabber-muc-read-my-nickname (group default)
+(defun jabber-muc-read-my-nickname (jc group)
"Read nickname for joining GROUP."
(let ((default-nickname (or
- ;; XXX: use bookmarks
+ (jabber-get-conference-data jc group nil :nick)
(cdr (assoc group jabber-muc-default-nicknames))
- default)))
+ (plist-get (fsm-get-state-data jc) :username))))
(jabber-read-with-input-method (format "Nickname: (default %s) "
default-nickname)
nil nil default-nickname)))
@@ -647,7 +649,7 @@ group, else it is a JID."
(let ((action
`(lambda (&rest ignore) (interactive)
(jabber-groupchat-join jabber-buffer-connection ,group
- (jabber-muc-read-my-nickname ,group ,(plist-get (fsm-get-state-data jabber-buffer-connection) :username))))))
+ (jabber-muc-read-my-nickname ,jabber-buffer-connection ,group)))))
(if (fboundp 'insert-button)
(insert-button "Accept"
'action action)
diff --git a/jabber-ourversion.el b/jabber-ourversion.el
new file mode 100644
index 0000000..a7d8688
--- /dev/null
+++ b/jabber-ourversion.el
@@ -0,0 +1,7 @@
+;; jabber-ourversion.el. Generated from jabber-ourversion.el.in by configure.
+
+;; This value gets updated automatically when configure.ac is changed.
+(defconst jabber-version "0.7.91"
+ "version returned to those who query us")
+
+(provide 'jabber-ourversion)
diff --git a/jabber-ourversion.el.in b/jabber-ourversion.el.in
new file mode 100644
index 0000000..742e50c
--- /dev/null
+++ b/jabber-ourversion.el.in
@@ -0,0 +1,7 @@
+;; @configure_input@
+
+;; This value gets updated automatically when configure.ac is changed.
+(defconst jabber-version "@PACKAGE_VERSION@"
+ "version returned to those who query us")
+
+(provide 'jabber-ourversion)
diff --git a/jabber-roster.el b/jabber-roster.el
index cd1ae8e..3aa1a8a 100644
--- a/jabber-roster.el
+++ b/jabber-roster.el
@@ -269,6 +269,16 @@ See `jabber-sort-order' for order used."
((string= a-name b-name) 0)
(t 1))))
+(defun jabber-roster-sort-by-group (a b)
+ "Sort roster items by group membership."
+ (flet ((first-group (item) (or (car (get item 'groups)) "")))
+ (let ((a-group (first-group a))
+ (b-group (first-group b)))
+ (cond
+ ((string-lessp a-group b-group) -1)
+ ((string= a-group b-group) 0)
+ (t 1)))))
+
(defun jabber-fix-status (status)
"Make status strings more readable"
(when status
diff --git a/jabber-vcard-avatars.el b/jabber-vcard-avatars.el
index 8d259a9..bbdec60 100644
--- a/jabber-vcard-avatars.el
+++ b/jabber-vcard-avatars.el
@@ -1,6 +1,6 @@
;;; jabber-vcard-avatars.el --- Avatars by JEP-0153
-;; Copyright (C) 2006, 2007 Magnus Henoch
+;; Copyright (C) 2006, 2007, 2008 Magnus Henoch
;; Author: Magnus Henoch <mange@freemail.hu>
@@ -52,19 +52,25 @@ Keys are full JIDs.")
(let* ((from (jabber-jid-user (jabber-xml-get-attribute xml-data 'from)))
(photo (jabber-xml-path xml-data '(("vcard-temp:x:update" . "x") photo)))
(sha1-hash (car (jabber-xml-node-children photo))))
- (if (null sha1-hash)
- ;; User has removed avatar
- (jabber-avatar-set from nil)
- (if (jabber-avatar-find-cached sha1-hash)
- ;; Avatar is cached
- (jabber-avatar-set from sha1-hash)
- ;; Avatar is not cached; retrieve it
- (jabber-vcard-avatars-fetch jc from sha1-hash))))))
+ (cond
+ ((null sha1-hash)
+ ;; User has removed avatar
+ (jabber-avatar-set from nil))
+ ((string= sha1-hash (get (jabber-jid-symbol from) 'avatar-hash))
+ ;; Same avatar as before; do nothing
+ )
+ ((jabber-avatar-find-cached sha1-hash)
+ ;; Avatar is cached
+ (jabber-avatar-set from sha1-hash))
+ (t
+ ;; Avatar is not cached; retrieve it
+ (jabber-vcard-avatars-fetch jc from sha1-hash))))))
(defun jabber-vcard-avatars-fetch (jc who sha1-hash)
"Fetch WHO's vCard, and extract avatar."
(interactive (list (jabber-read-account)
- (jabber-read-jid-completing "Fetch whose vCard avatar: ")))
+ (jabber-read-jid-completing "Fetch whose vCard avatar: ")
+ nil))
(jabber-send-iq jc who "get" '(vCard ((xmlns . "vcard-temp")))
#'jabber-vcard-avatars-vcard (cons who sha1-hash)
#'ignore nil))
@@ -77,7 +83,8 @@ Keys are full JIDs.")
(if photo
(let ((avatar (jabber-avatar-from-base64-string (nth 2 photo)
(nth 1 photo))))
- (unless (string= sha1-hash (avatar-sha1-sum avatar))
+ (unless (or (null sha1-hash)
+ (string= sha1-hash (avatar-sha1-sum avatar)))
(when jabber-avatar-verbose
(message "%s's avatar should have SHA1 sum %s, but has %s"
(jabber-jid-displayname from)
diff --git a/jabber-version.el b/jabber-version.el
index f641ad3..ed0295f 100644
--- a/jabber-version.el
+++ b/jabber-version.el
@@ -1,7 +1,7 @@
;; jabber-version.el - version reporting by JEP-0092
+;; Copyright (C) 2003, 2004, 2008 - Magnus Henoch - mange@freemail.hu
;; Copyright (C) 2002, 2003, 2004 - tom berger - object@intelectronica.net
-;; Copyright (C) 2003, 2004 - Magnus Henoch - mange@freemail.hu
;; This file is a part of jabber.el.
@@ -21,9 +21,7 @@
(require 'jabber-iq)
(require 'jabber-util)
-
-(defconst jabber-version "0.7.1-dev1"
- "version returned to those who query us")
+(require 'jabber-ourversion)
(add-to-list 'jabber-jid-info-menu
(cons "Request software version" 'jabber-get-version))
diff --git a/jabber.el b/jabber.el
index 86bc72f..3db9868 100644
--- a/jabber.el
+++ b/jabber.el
@@ -194,6 +194,12 @@ configure a Google Talk account like this:
:type 'boolean
:group 'jabber-debug)
+(defcustom jabber-debug-keep-process-buffers nil
+ "If nil, kill process buffers when the process dies.
+Contents of process buffers might be useful for debugging."
+ :type 'boolean
+ :group 'jabber-debug)
+
(defconst jabber-presence-faces
'(("" . jabber-roster-user-online)
("away" . jabber-roster-user-away)
diff --git a/jabber.info b/jabber.info
index 90866d1..5f018b3 100644
--- a/jabber.info
+++ b/jabber.info
@@ -1,4 +1,4 @@
-This is ./jabber.info, produced by makeinfo version 4.7 from
+Detta är ./jabber.info, skapad av makeinfo version 4.7 från
./jabber.texi.
INFO-DIR-SECTION Emacs
@@ -106,8 +106,8 @@ File: jabber.info, Node: Basic operation, Next: Groupchat, Prev: Introduction
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.
+terminology, you might find it a bit too basic--in that case, just skim
+it, making sure to pick up the commands mentioned.
I'll assume that you have already successfully installed jabber.el;
if not, consult the `README' file. Also, make sure you have `(require
@@ -142,7 +142,7 @@ Examples:
configuration.
* LJ Talk (of Livejournal) uses Jabber. Your Jabber ID is
- ``ljusername'@livejournal.com'.
+ `LJUSERNAME@livejournal.com'.

File: jabber.info, Node: Registering an account, Next: Connecting, Prev: Do you have a Jabber account?, Up: Basic operation
@@ -150,15 +150,16 @@ File: jabber.info, Node: Registering an account, Next: Connecting, Prev: Do y
2.2 Registering an account
==========================
-TBD
+If you do not yet have a Jabber account, you can register one. The
+registration processes for various servers differ, but many servers
+support so-called "in-band registration", which is described in this
+section.
- If you do not yet have a Jabber account, you can register one. Enter
-your desired username and the server you wish to use in
-`jabber-account-list', save, and type `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 the username you chose
-will be prefilled. Don't change it, otherwise jabber.el will be
-confused.
+ To register an account, type `C-u M-x jabber-connect' and enter your
+desired JID in the form `USERNAME@SERVER'. You will be presented with
+a registration form to fill out and send. There the username you chose
+will be prefilled. After registration, you can connect to the server
+as usual.

File: jabber.info, Node: Connecting, Next: Chatting, Prev: Registering an account, Up: Basic operation
@@ -183,7 +184,7 @@ save it in the variable `jabber-account-list'. *Note Account
settings::. If you configure more than one account, all of them will be
connected when you type `C-x C-j C-c', as that key is bound to
`jabber-connect-all'. To connect only one account, possibly one that's
-not in your list, type `M-x jabber-connect'.
+not in your list, type `M-x jabber-connect' or `C-u C-x C-j C-c'.

File: jabber.info, Node: Chatting, Next: Presence, Prev: Connecting, Up: Basic operation
@@ -195,6 +196,12 @@ 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 the function `jabber-chat-with'. This function is
+bound to `C-x C-j C-j' in the global keymap. You will be asked to
+enter a JID in the minibuffer. You can also enter the roster name of
+one of your contacts. All JIDs and names in your roster can be
+tab-completed.
+
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
@@ -202,18 +209,15 @@ can bring up the "chat menu" by typing `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.
- You can also use the function `jabber-chat-with', which is what the
-menu item is bound to. This function is bound to `C-x C-j C-j' in the
-global keymap.
-
Now, try opening a chat with someone. A buffer named
`*-jabber-chat-:-PERSON-*' will be created and selected. Type your
message at the end of the buffer, and hit `RET' to send it. To include
a newline in your message, use `C-j'.
When you receive a message from someone, you will see a red
-indicator in the mode line. You can click this indicator or type `C-x
-C-j C-l' to switch to the relevant buffer.
+indicator in the mode line. You can click this indicator with the
+mouse, or type `C-x C-j C-l' to switch to the relevant buffer. *Note
+Tracking activity::.

File: jabber.info, Node: Presence, Next: Presence subscription, Prev: Chatting, Up: Basic operation
@@ -223,10 +227,10 @@ File: jabber.info, Node: Presence, Next: Presence subscription, Prev: Chattin
"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
+elements to presence: availability state (called "show"), status
message, and priority.
- Your show status may either be empty (meaning simply "online"), or
+ Your show state may either be empty (meaning simply "online"), or
one of `away', `xa', `dnd' and `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
@@ -240,25 +244,77 @@ 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.
+Jabber client at a time accessing the same account. *Note Resources
+and priority::.
+
+ To set your presence, use the function `jabber-send-presence' (bound
+to `C-x C-j C-p'). It can be called both interactively and in Lisp
+code. For the latter case, use something like `(jabber-send-presence
+"away" "idle for 10 minutes" 10)'. There are a few shortcuts:
+`C-x C-j C-a'
+ Send "away" presence (with prefix argument, specify status text)
- To set your presence, use the function `jabber-send-presence'. It
-can be called both interactively and in Lisp code. For the latter
-case, use something like `(jabber-send-presence "away" "idle for 10
-minutes" 10)'.
+`C-x C-j C-x'
+ Send "extended away" presence (with prefix argument, specify status
+ text)
+
+`C-x C-j C-o'
+ Send default presence (see below)
By default, jabber.el sets your presence when you connect. If you
-want it not to do that, remove `jabber-send-default-presence' from
-`jabber-post-connect-hook'. If you want to change the presence that is
-sent, change the variables `jabber-default-show',
+want it not to do that, remove `jabber-send-current-presence' from
+`jabber-post-connect-hooks'. If you want to change the presence that
+is sent, change the variables `jabber-default-show',
`jabber-default-status' and `jabber-default-priority'.
With jabber.el, you can set your presence remotely. *Note Ad-Hoc
Commands::.
- You can send "directed presence" with `M-x
+* Menu:
+
+* Resources and priority::
+* Directed presence::
+
+
+File: jabber.info, Node: Resources and priority, Next: Directed presence, Prev: Presence, Up: Presence
+
+2.5.1 Resources and priority
+----------------------------
+
+Every connection to an account has a specific name, a "resource". The
+account itself has a JID of the form `USERNAME@SERVER' (a "bare JID"),
+but the connections have JIDs of the form `USERNAME@SERVER/RESOURCE' (a
+"full JID"). You can choose the resource name yourself by entering a
+JID of the latter form at the connection prompt (*note Connecting::),
+or by configuring it in `jabber-account-list' (*note Account settings::)
+
+ Each session has a "priority". The priority determines what happens
+when a message is sent to the bare JID (i.e. without specifying what
+connection should receive message). Such messages are delivered to the
+connection with the highest non-negative priority value. If there are
+no connections, or if all connections have negative priority, the
+message is either stored on the server for later delivery or bounced to
+the sender, depending on the server configuration.
+
+ If there are several connections with the same priority, the
+behaviour depends on the server. Some server implementations deliver
+the message to all such connections, while others choose one connection
+depending on certain rules.
+
+ Note that these rules do not apply when a message is sent to a full
+JID. Such messages are sent to the specified resource, if it is still
+connected, and otherwise treated as messages to the bare JID. In the
+chat buffers of jabber.el, messages are sent to whatever JID the last
+message came from (usually a full JID), or to the bare JID if no message
+has been received yet. Other clients may have different behaviour.
+
+
+File: jabber.info, Node: Directed presence, Prev: Resources and priority, Up: Presence
+
+2.5.2 Directed presence
+-----------------------
+
+You can send "directed presence" with `M-x
jabber-send-directed-presence'. This is mostly useful to manage
transports--sending directed presence is a way to turn them on and off.
You can also send directed presence to an annoying contact to appear
@@ -274,11 +330,20 @@ File: jabber.info, Node: Presence subscription, Next: Roster buffer, Prev: Pr
Having permission to view the presence status of a person is called
"subscribing to his presence". Presence subscription between two
-persons can be asymmetric.
+persons can be asymmetric. Subscription state is shown in the roster
+display by arrows (*note Customizing the roster buffer::). A
+left-pointing arrow means that the contact can see your presence
+("from"). A right-pointing arrow means that you can see the contact's
+presence ("to"). The most common case is mutual subscription, a
+double-ended arrow ("both").
When jabber.el receives a presence subscription request, it will
-present it to you in an chat buffer, and offer you to choose
+present it to you in a chat buffer, and offer you to choose
subscription mode and send a subscription request back to that person.
+The "Mutual" button accepts the request and sends a reciprocal
+request.(1) The "One-way" button accepts the request, but doesn't ask
+for a subscription in return. The "Decline" button declines the
+request.
To request subscription to someone, type `M-x
jabber-send-subscription-request'. You will be prompted for the JID to
@@ -288,6 +353,11 @@ probably want to give the contact a more readable name. The command
for that is `jabber-roster-change', which is also available in the
Roster menu or by typing `e' on a person in the roster buffer.
+ ---------- Footnotes ----------
+
+ (1) If this request is superfluous, the server will drop it without
+bothering the contact.
+

File: jabber.info, Node: Roster buffer, Prev: Presence subscription, Up: Basic operation
@@ -295,7 +365,8 @@ File: jabber.info, Node: Roster buffer, Prev: Presence subscription, Up: Basi
=====================
The roster buffer is called `*-jabber-*'. It simply contains a list of
-the contacts on your roster.
+the contacts on your roster. If you have several accounts connected,
+contacts will be grouped by account.
In the roster buffer, any command which requires a JID will default
to the JID under point when called. These commands can be called
@@ -310,9 +381,9 @@ respectively.
A list of keybindings is displayed at the top of the roster buffer.
You can turn it off by setting `jabber-roster-show-bindings' to nil.
- You can call `jabber-display-roster' to redisplay your roster
-according to changed preferences (*note Customizing the roster
-buffer::). This will not refetch your roster from the server.
+ You can call `jabber-display-roster' (bound to `g') to redisplay
+your roster according to changed preferences (*note 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.
@@ -326,7 +397,7 @@ hide them, customize `jabber-show-offline-contacts' variable.
---------- Footnotes ----------
- (1) For some reason, mouse menus don't work in XEmacs. Patches
+ (1) For some reason, mouse menus don't work in XEmacs. Patches are
welcome.

@@ -338,20 +409,12 @@ File: jabber.info, Node: Groupchat, Next: Composing messages, Prev: Basic ope
The groupchat menu can be accessed by typing `C-c C-m' in the roster
buffer. You can also type the commands directly, as will be shown here.
- Also, to save from repeating unnesesary typing you can press `Tab'
-key to complete nick of groupchat member, you a talking with. You can
-customize your form of personal talking in MUC
-(`jabber-muc-completion-delimiter') and form of personal talking to you
-(`jabber-muc-looks-personaling-symbols') - see "jabber-chat"
-customization group. Defaults are sane, so unlikely you could change
-this, but... it is Emacs!
-
To join a groupchat, type `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. You can change your nickname with `M-x
-jabber-muc-nick'. *Note Automation::, for setting default nicknames.
+jabber-muc-nick'. *Note Configuration::, for setting default nicknames.
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
@@ -359,11 +422,24 @@ 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
-`jabber-muc-disable-disco-check' to t; however, the bug should be
+`jabber-muc-disable-disco-check' to `t'; however, the bug should be
unearthed and fixed.
Groupchat messages will be displayed in a buffer called
-`*-jabber-groupchat-:-GROUPCHAT-*'. It works much like the chat buffer.
+`*-jabber-groupchat-:-GROUPCHAT-*'. By default, the buffer name is
+based on the JID of the chat room. If you want a shorter name, you can
+add the chat room to your roster and give it a name, using the command
+`M-x jabber-roster-change'. The groupchat buffer works much like the
+chat buffer. It has its own class of alerts (*note Customizing
+alerts::), and uses activity tracking (*note Tracking activity::).
+
+ Also, to save from repeating unnesesary typing you can press `Tab'
+key to complete nick of a groupchat member that you are talking with.
+You can customize your form of personal talking in MUC
+(`jabber-muc-completion-delimiter') and form of personal talking to you
+(`jabber-muc-looks-personaling-symbols')--see "jabber-chat"
+customization group. Defaults are sane, so it is unlikely that you would
+want to change this, but... it is Emacs!
To change the topic of a groupchat, type `M-x jabber-muc-set-topic'.
The current topic is shown in the header line.
@@ -381,53 +457,52 @@ affiliations.
* Menu:
-* Automation::
-* Bookmarks::
+* Configuration::
* Invitations::
* Private messages::
* MUC Administration::

-File: jabber.info, Node: Automation, Next: Bookmarks, Prev: Groupchat, Up: Groupchat
-
-3.1 Automation
-==============
+File: jabber.info, Node: Configuration, Next: Invitations, Prev: Groupchat, Up: Groupchat
-You can select a default nickname by setting `jabber-account-list'
-(part of JID before `@'). Additionally, you can set different
-nicknames for different groups, by customizing
-`jabber-muc-default-nicknames'. There you specify the JID of the
-group, and your preferred nickname.
+3.1 Configuration
+=================
- If you want to automatically join certain rooms when connecting, you
-can set `jabber-muc-autojoin' to a list containing the JIDs of the
-rooms you want to enter. To disable this feature, remove
-`jabber-muc-autojoin' from `jabber-post-connect-hook'.
+You can configure jabber.el to use a certain nickname for a certain
+room, or to automatically join a certain room when you connect. You can
+do this either by storing bookmarks on the server or by setting Emacs
+variables.
- Please note, that `jabber-muc-default-nicknames' and
-`jabber-muc-autojoin' are machine-local. To make them available to any
-client on any machine, import them in your bookmarks. See *Note
-Bookmarks::.
+ Type `M-x jabber-edit-bookmarks' to add bookmarks. You can specify
+the JID of the conference, the name of the conference (not used by
+jabber.el), whether to automatically join the room, your desired
+nickname (or leave empty), and the room password (or leave empty).
-
-File: jabber.info, Node: Bookmarks, Next: Invitations, Prev: Automation, Up: Groupchat
+ The default nickname for groupchats is the username part of your JID.
+If you don't use bookmarks, you can set different nicknames for
+different groups by customizing `jabber-muc-default-nicknames'. There
+you specify the JID of the group, and your preferred nickname.
-3.2 Bookmarks
-=============
+ Automatically joining certain rooms when connecting can be
+accomplished by setting `jabber-muc-autojoin' to a list containing the
+JIDs of the rooms you want to enter. To disable this feature, remove
+`jabber-muc-autojoin' from `jabber-post-connect-hooks'.
-You can store your conference settings on server-side to make them
-available from any machine and client. Use `M-x jabber-edit-bookmarks'
-to edit server-side bookmarks.
+ Please note, that `jabber-muc-default-nicknames' and
+`jabber-muc-autojoin' are machine-local, but apply to _all_
+accounts--if you connect several accounts, both will try to connect to
+the same chat rooms, or use the same nickname. This will lead to
+confusion.

-File: jabber.info, Node: Invitations, Next: Private messages, Prev: Bookmarks, Up: Groupchat
+File: jabber.info, Node: Invitations, Next: Private messages, Prev: Configuration, Up: Groupchat
-3.3 Invitations
+3.2 Invitations
===============
You can invite someone to a groupchat with `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
+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.
@@ -439,7 +514,7 @@ to state the reason why you're not joining.

File: jabber.info, Node: Private messages, Next: MUC Administration, Prev: Invitations, Up: Groupchat
-3.4 Private messages
+3.3 Private messages
====================
You can open a private chat with a participant in a chat room with `M-x
@@ -455,14 +530,14 @@ sends a private message to you.

File: jabber.info, Node: MUC Administration, Prev: Private messages, Up: Groupchat
-3.5 Administration
+3.4 Administration
==================
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.
-3.5.1 Roles
+3.4.1 Roles
-----------
If you have moderator privileges, you can change the role of a
@@ -486,7 +561,7 @@ obviously.
`none'
Not in room.
-3.5.2 Affiliations
+3.4.2 Affiliations
------------------
If you have admin or owner privileges, you can change the affiliation of
@@ -511,7 +586,7 @@ changes, and maybe not in one step.
members-only, or grant voice only to members.
`outcast'
- Banned from the room
+ Banned from the room.

File: jabber.info, Node: Composing messages, Next: File transfer, Prev: Groupchat, Up: Top
@@ -862,8 +937,8 @@ haven't used your computer for a while. This lets your contacts know
that you might not answer immediately.
To activate this feature, add `jabber-autoaway-start' to
-`jabber-post-connect-hook', e.g:
- (add-hook 'jabber-post-connect-hook 'jabber-autoaway-start)
+`jabber-post-connect-hooks', e.g:
+ (add-hook 'jabber-post-connect-hooks 'jabber-autoaway-start)
There are different methods to find how long you have been "idle".
The method to use is specified by `jabber-autoaway-method'. The value
@@ -1636,10 +1711,11 @@ File: jabber.info, Node: Hooks, Next: Debug options, Prev: Customizing alerts
jabber.el provides various hooks that you can use for whatever purpose.
-`jabber-post-connect-hook'
+`jabber-post-connect-hooks'
This hook is called after successful connection and authentication.
By default it contains `jabber-send-default-presence' (*note
- Presence::).
+ Presence::). The hook functions get the connection object as
+ argument.
`jabber-lost-connection-hook'
This hook is called when you have been disconnected for unknown
@@ -2268,18 +2344,18 @@ Concept index
* Alert hooks: Customizing alerts. (line 6)
* Alerts: Standard alerts. (line 6)
* autoaway: Autoaway. (line 6)
-* Autojoin chat rooms: Automation. (line 6)
+* Autojoin chat rooms: Configuration. (line 6)
* avatars: Avatars. (line 6)
* Backlog: Message history. (line 6)
* Banning, MUC: MUC Administration. (line 37)
* Body printers: Chat printers. (line 6)
-* Bookmarks: Bookmarks. (line 6)
+* Bookmarks, MUC: Configuration. (line 6)
* Browse buffers: Services. (line 6)
* browser integration: XMPP URIs. (line 6)
* Browsing: Service discovery and browsing.
(line 6)
* Cancelling registration: Registering. (line 6)
-* Changing nickname: Groupchat. (line 17)
+* Changing nickname: Groupchat. (line 9)
* Changing password: Registering. (line 6)
* Chat buffer: Customizing the chat buffer.
(line 6)
@@ -2290,10 +2366,10 @@ Concept index
* composing messages: Composing messages. (line 6)
* Connecting: Connecting. (line 6)
* Customization: Customization. (line 6)
-* Default MUC nickname: Automation. (line 6)
+* Default MUC nickname: Configuration. (line 6)
* Delivered: Typing notifications. (line 13)
* Detecting lost connections: Keepalive. (line 6)
-* directed presence: Presence. (line 43)
+* directed presence: Directed presence. (line 6)
* Displayed: Typing notifications. (line 13)
* Export roster: Roster import and export.
(line 6)
@@ -2307,6 +2383,8 @@ Concept index
* Gateway registration: Registering. (line 6)
* Google Talk: Account settings. (line 41)
* Groupchat: Groupchat. (line 6)
+* Groupchat completion: Groupchat. (line 33)
+* Hiding offline contacts: Roster buffer. (line 33)
* History: Message history. (line 6)
* idle: Autoaway. (line 6)
* idle time, query: Time queries. (line 13)
@@ -2314,22 +2392,24 @@ Concept index
(line 6)
* Invitations: Invitations. (line 6)
* JID: Account settings. (line 6)
-* Joining a groupchat: Groupchat. (line 17)
+* Joining a groupchat: Groupchat. (line 9)
* Keepalive: Keepalive. (line 6)
* Key bindings: Roster buffer. (line 6)
* Kicking, MUC: MUC Administration. (line 13)
* last online: Time queries. (line 10)
* links: XMPP URIs. (line 6)
-* Menus <1>: Miscellaneous settings.
+* Menus <1>: Roster buffer. (line 6)
+* Menus: Miscellaneous settings.
(line 6)
-* Menus: Roster buffer. (line 6)
* message composition: Composing messages. (line 6)
* Modeline: Modeline status. (line 6)
* Moderator, MUC: MUC Administration. (line 13)
* Mozilla integration: XMPP URIs. (line 6)
* MUC: Groupchat. (line 6)
* Network server: Account settings. (line 6)
-* Nickname, changing: Groupchat. (line 17)
+* Nick completion in groupchat: Groupchat. (line 33)
+* Nickname, changing: Groupchat. (line 9)
+* Offline contacts, hiding: Roster buffer. (line 33)
* Online notifications: Watch buddies. (line 6)
* Password: Account settings. (line 6)
* Password change: Registering. (line 6)
@@ -2337,15 +2417,19 @@ Concept index
* Presence: Presence. (line 6)
* Presence subscription: Presence subscription.
(line 6)
+* Priority: Resources and priority.
+ (line 6)
* Private MUC messages: Private messages. (line 6)
* proxy, file transfer: Sending files. (line 6)
-* query groupchat: Groupchat. (line 24)
+* Query groupchat: Groupchat. (line 16)
* Reconnect: Reconnecting. (line 6)
* Reconnecting: Reconnecting. (line 6)
* Registering an account: Registering an account.
(line 6)
* Registration: Registering. (line 6)
* Removing an account: Registering. (line 6)
+* Resource <1>: Resources and priority.
+ (line 6)
* Resource: Account settings. (line 6)
* Roles, MUC: MUC Administration. (line 13)
* Roster buffer, basics: Roster buffer. (line 6)
@@ -2354,7 +2438,7 @@ Concept index
* Rotation: Message history. (line 6)
* Scroll: Standard alerts. (line 6)
* Searching: Searching. (line 6)
-* send directed presence: Presence. (line 43)
+* send directed presence: Directed presence. (line 6)
* Sending files: File transfer. (line 6)
* Sending presence: Presence. (line 6)
* Service discovery: Service discovery and browsing.
@@ -2368,7 +2452,7 @@ Concept index
* time query: Time queries. (line 6)
* Timestamps: Customizing the chat buffer.
(line 6)
-* Topic, MUC: Groupchat. (line 36)
+* Topic, MUC: Groupchat. (line 41)
* Truncate: Message history. (line 6)
* Truncation: Message history. (line 6)
* uptime, query: Time queries. (line 13)
@@ -2405,8 +2489,8 @@ Function index
* jabber-customize: Customization. (line 6)
* jabber-disconnect: Connecting. (line 6)
* jabber-disconnect-one: Connecting. (line 6)
-* jabber-display-roster: Roster buffer. (line 6)
-* jabber-edit-bookmarks: Bookmarks. (line 6)
+* jabber-display-roster: Roster buffer. (line 23)
+* jabber-edit-bookmarks: Configuration. (line 6)
* jabber-export-roster: Roster import and export.
(line 6)
* jabber-ft-send: Sending files. (line 17)
@@ -2421,9 +2505,9 @@ Function index
* jabber-get-register: Registering. (line 6)
* jabber-get-search: Searching. (line 6)
* jabber-get-time: Time queries. (line 6)
-* jabber-groupchat-get-config: Groupchat. (line 41)
-* jabber-groupchat-join: Groupchat. (line 17)
-* jabber-groupchat-leave: Groupchat. (line 39)
+* jabber-groupchat-get-config: Groupchat. (line 46)
+* jabber-groupchat-join: Groupchat. (line 9)
+* jabber-groupchat-leave: Groupchat. (line 44)
* jabber-handle-uri: XMPP URIs. (line 6)
* jabber-import-roster: Roster import and export.
(line 6)
@@ -2434,14 +2518,14 @@ Function index
(line 6)
* jabber-message-default-message: Message alerts. (line 6)
* jabber-mode-line-mode: Modeline status. (line 6)
-* jabber-muc-autojoin: Automation. (line 6)
+* jabber-muc-autojoin: Configuration. (line 6)
* jabber-muc-default-message: MUC alerts. (line 6)
* jabber-muc-invite: Invitations. (line 6)
-* jabber-muc-names: Groupchat. (line 45)
+* jabber-muc-names: Groupchat. (line 50)
* jabber-muc-private: Private messages. (line 6)
* jabber-muc-set-affiliation: MUC Administration. (line 37)
* jabber-muc-set-role: MUC Administration. (line 13)
-* jabber-muc-set-topic: Groupchat. (line 36)
+* jabber-muc-set-topic: Groupchat. (line 41)
* jabber-my-jid-p: Extending service discovery.
(line 6)
* jabber-presence-default-message: Presence alerts. (line 6)
@@ -2451,7 +2535,7 @@ Function index
* jabber-process-iq: Sending new requests. (line 6)
* jabber-report-success: Sending new requests. (line 6)
* jabber-send-default-presence: Presence. (line 6)
-* jabber-send-directed-presence: Presence. (line 43)
+* jabber-send-directed-presence: Directed presence. (line 6)
* jabber-send-iq <1>: Sending new requests. (line 6)
* jabber-send-iq: Listening for new requests.
(line 6)
@@ -2506,7 +2590,7 @@ Variable index
(line 55)
* jabber-chat-local-prompt-format: Customizing the chat buffer.
(line 16)
-* jabber-chat-mode-hook: Hooks. (line 26)
+* jabber-chat-mode-hook: Hooks. (line 27)
* jabber-chat-printers: Chat printers. (line 6)
* jabber-chat-prompt-foreign: Customizing the chat buffer.
(line 13)
@@ -2515,7 +2599,7 @@ Variable index
* jabber-chat-text-foreign: Customizing the chat buffer.
(line 10)
* jabber-chat-text-local: Customizing the chat buffer.
- (line 10)
+ (line 49)
* jabber-chat-time-format: Customizing the chat buffer.
(line 38)
* jabber-chatstates-confirm: Typing notifications. (line 41)
@@ -2545,21 +2629,23 @@ Variable index
* jabber-keepalive-interval: Keepalive. (line 6)
* jabber-keepalive-timeout: Keepalive. (line 6)
* jabber-log-lines-to-keep: Message history. (line 6)
-* jabber-lost-connection-hook: Hooks. (line 13)
+* jabber-lost-connection-hook: Hooks. (line 14)
* jabber-message-alert-same-buffer: Message alerts. (line 6)
* jabber-message-chain: Stanza chains. (line 6)
* jabber-mode-line-compact: Modeline status. (line 6)
* jabber-mode-line-mode: Modeline status. (line 6)
* jabber-muc-alert-self: MUC alerts. (line 6)
-* jabber-muc-autojoin: Automation. (line 6)
-* jabber-muc-default-nicknames: Automation. (line 6)
-* jabber-muc-disable-disco-check: Groupchat. (line 24)
+* jabber-muc-autojoin: Configuration. (line 6)
+* jabber-muc-completion-delimiter: Groupchat. (line 33)
+* jabber-muc-default-nicknames: Configuration. (line 6)
+* jabber-muc-disable-disco-check: Groupchat. (line 16)
* jabber-muc-header-line-format: Customizing the chat buffer.
(line 55)
+* jabber-muc-looks-personaling-symbols: Groupchat. (line 33)
* jabber-muc-printers: Chat printers. (line 6)
-* jabber-post-connect-hook: Hooks. (line 8)
-* jabber-post-disconnect-hook: Hooks. (line 22)
-* jabber-pre-disconnect-hook: Hooks. (line 17)
+* jabber-post-connect-hooks: Hooks. (line 8)
+* jabber-post-disconnect-hook: Hooks. (line 23)
+* jabber-pre-disconnect-hook: Hooks. (line 18)
* jabber-presence-chain: Stanza chains. (line 6)
* jabber-print-rare-time: Customizing the chat buffer.
(line 49)
@@ -2571,10 +2657,12 @@ Variable index
(line 6)
* jabber-roster-line-format: Customizing the roster buffer.
(line 6)
+* jabber-roster-show-bindings <1>: Roster buffer. (line 20)
* jabber-roster-show-bindings: Customizing the roster buffer.
(line 6)
* jabber-roster-sort-functions: Customizing the roster buffer.
(line 6)
+* jabber-show-offline-contacts: Roster buffer. (line 33)
* jabber-show-resources: Customizing the roster buffer.
(line 6)
* jabber-socks5-proxies: Sending files. (line 13)
@@ -2587,104 +2675,106 @@ Variable index

Tag Table:
-Node: Top517
-Node: Introduction1348
-Node: Contact2203
-Node: Basic operation2905
-Node: Do you have a Jabber account?3802
-Node: Registering an account4423
-Node: Connecting5028
-Node: Chatting6075
-Node: Presence7320
-Node: Presence subscription9633
-Node: Roster buffer10618
-Ref: Roster buffer-Footnote-112251
-Node: Groupchat12328
-Node: Automation14707
-Node: Bookmarks15568
-Node: Invitations15861
-Node: Private messages16537
-Node: MUC Administration17160
-Node: Composing messages18762
-Node: File transfer19387
-Ref: File transfer-Footnote-120140
-Node: Receiving files20308
-Node: Sending files21672
-Ref: Sending files-Footnote-123311
-Node: Services23471
-Node: Service discovery and browsing24381
-Node: Registering25577
-Node: Searching27277
-Node: Ad-Hoc Commands27988
-Ref: Ad-Hoc Commands-Footnote-129202
-Ref: Ad-Hoc Commands-Footnote-229338
-Node: Personal information29445
-Node: Avatars30250
-Node: Time queries31237
-Node: Useful features31842
-Node: Autoaway32219
-Node: Modeline status34249
-Node: Keepalive34961
-Node: Reconnecting35861
-Node: Tracking activity36369
-Node: Watch buddies37905
-Node: Spell checking38602
-Node: Message history39086
-Node: Typing notifications41536
-Node: Roster import and export43389
-Node: XMPP URIs44339
-Node: Customization45916
-Node: Account settings46389
-Node: Miscellaneous settings48335
-Node: Customizing the roster buffer48819
-Node: Customizing the chat buffer50799
-Node: Customizing alerts53201
-Node: Standard alerts55359
-Node: Presence alerts58301
-Node: Message alerts59319
-Ref: Message alerts-Footnote-160436
-Node: MUC alerts60539
-Node: Info alerts61419
-Node: Hooks61949
-Node: Debug options62941
-Node: Hacking and extending63365
-Node: XML representation63948
-Node: Roster structure65094
-Node: Listening for new requests66383
-Node: Sending new requests67535
-Node: Extending service discovery69475
-Node: Chat printers70859
-Node: Stanza chains72046
-Node: Protocol support72594
-Node: RFC 392074211
-Node: RFC 392174926
-Node: XEP-000475478
-Node: XEP-001276227
-Node: XEP-002076500
-Node: XEP-002276727
-Node: XEP-003077098
-Node: XEP-004577395
-Node: XEP-004977856
-Node: XEP-005078120
-Node: XEP-005478485
-Node: XEP-005578784
-Node: XEP-006579187
-Node: XEP-006679721
-Node: XEP-006880114
-Node: XEP-007780444
-Node: XEP-007881005
-Node: XEP-008281339
-Node: XEP-008581623
-Node: XEP-008681946
-Node: XEP-009082258
-Node: XEP-009182508
-Node: XEP-009282794
-Node: XEP-009583109
-Node: XEP-009683431
-Node: XEP-014683891
-Node: XEP-015384125
-Node: Concept index84396
-Node: Function index93467
-Node: Variable index98977
+Node: Top518
+Node: Introduction1349
+Node: Contact2204
+Node: Basic operation2906
+Node: Do you have a Jabber account?3801
+Node: Registering an account4420
+Node: Connecting5117
+Node: Chatting6185
+Node: Presence7604
+Node: Resources and priority9762
+Node: Directed presence11492
+Node: Presence subscription12032
+Ref: Presence subscription-Footnote-113595
+Node: Roster buffer13690
+Ref: Roster buffer-Footnote-115416
+Node: Groupchat15497
+Node: Configuration18235
+Node: Invitations19660
+Node: Private messages20338
+Node: MUC Administration20961
+Node: Composing messages22564
+Node: File transfer23189
+Ref: File transfer-Footnote-123942
+Node: Receiving files24110
+Node: Sending files25474
+Ref: Sending files-Footnote-127113
+Node: Services27273
+Node: Service discovery and browsing28183
+Node: Registering29379
+Node: Searching31079
+Node: Ad-Hoc Commands31790
+Ref: Ad-Hoc Commands-Footnote-133004
+Ref: Ad-Hoc Commands-Footnote-233140
+Node: Personal information33247
+Node: Avatars34052
+Node: Time queries35039
+Node: Useful features35644
+Node: Autoaway36021
+Node: Modeline status38053
+Node: Keepalive38765
+Node: Reconnecting39665
+Node: Tracking activity40173
+Node: Watch buddies41709
+Node: Spell checking42406
+Node: Message history42890
+Node: Typing notifications45340
+Node: Roster import and export47193
+Node: XMPP URIs48143
+Node: Customization49720
+Node: Account settings50193
+Node: Miscellaneous settings52139
+Node: Customizing the roster buffer52623
+Node: Customizing the chat buffer54603
+Node: Customizing alerts57005
+Node: Standard alerts59163
+Node: Presence alerts62105
+Node: Message alerts63123
+Ref: Message alerts-Footnote-164240
+Node: MUC alerts64343
+Node: Info alerts65223
+Node: Hooks65753
+Node: Debug options66810
+Node: Hacking and extending67234
+Node: XML representation67817
+Node: Roster structure68963
+Node: Listening for new requests70252
+Node: Sending new requests71404
+Node: Extending service discovery73344
+Node: Chat printers74728
+Node: Stanza chains75915
+Node: Protocol support76463
+Node: RFC 392078080
+Node: RFC 392178795
+Node: XEP-000479347
+Node: XEP-001280096
+Node: XEP-002080369
+Node: XEP-002280596
+Node: XEP-003080967
+Node: XEP-004581264
+Node: XEP-004981725
+Node: XEP-005081989
+Node: XEP-005482354
+Node: XEP-005582653
+Node: XEP-006583056
+Node: XEP-006683590
+Node: XEP-006883983
+Node: XEP-007784313
+Node: XEP-007884874
+Node: XEP-008285208
+Node: XEP-008585492
+Node: XEP-008685815
+Node: XEP-009086127
+Node: XEP-009186377
+Node: XEP-009286663
+Node: XEP-009586978
+Node: XEP-009687300
+Node: XEP-014687760
+Node: XEP-015387994
+Node: Concept index88265
+Node: Function index97904
+Node: Variable index103414

End Tag Table
diff --git a/jabber.texi b/jabber.texi
index 7f141e8..ae8315a 100644
--- a/jabber.texi
+++ b/jabber.texi
@@ -118,7 +118,7 @@ jabber-groupchat-join} and entering the address.
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
+terminology, you might find it a bit too basic---in that case, just
skim it, making sure to pick up the commands mentioned.
I'll assume that you have already successfully installed jabber.el; if
@@ -154,7 +154,7 @@ a Jabber ID. @xref{Account settings}, for Google-specific configuration.
@item
LJ Talk (of Livejournal) uses Jabber. Your Jabber ID is
-@code{@samp{ljusername}@@livejournal.com}.
+@samp{@var{ljusername}@@livejournal.com}.
@end itemize
@node Registering an account, Connecting, Do you have a Jabber account?, Basic operation
@@ -162,15 +162,16 @@ LJ Talk (of Livejournal) uses Jabber. Your Jabber ID is
@cindex Registering an account
-TBD
+If you do not yet have a Jabber account, you can register one. The
+registration processes for various servers differ, but many servers
+support so-called ``in-band registration'', which is described in this
+section.
-If you do not yet have a Jabber account, you can register one. Enter
-your desired username and the server you wish
-to use in @code{jabber-account-list}, 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 the username you chose will be prefilled.
-Don't change it, otherwise jabber.el will be confused.
+To register an account, type @kbd{C-u M-x jabber-connect} and enter your
+desired JID in the form @samp{@var{username}@@@var{server}}. You will
+be presented with a registration form to fill out and send. There the
+username you chose will be prefilled. After registration, you can
+connect to the server as usual.
@node Connecting, Chatting, Registering an account, Basic operation
@section Connecting
@@ -198,7 +199,8 @@ it in the variable @code{jabber-account-list}. @xref{Account
settings}. If you configure more than one account, all of them will be
connected when you type @kbd{C-x C-j C-c}, as that key is bound to
@code{jabber-connect-all}. To connect only one account, possibly one
-that's not in your list, type @kbd{M-x jabber-connect}.
+that's not in your list, type @kbd{M-x jabber-connect} or @kbd{C-u C-x
+C-j C-c}.
@node Chatting, Presence, Connecting, Basic operation
@section Chatting
@@ -210,6 +212,12 @@ 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 the function @code{jabber-chat-with}. This function is
+bound to @kbd{C-x C-j C-j} in the global keymap. You will be asked to
+enter a JID in the minibuffer. You can also enter the roster name of
+one of your contacts. All JIDs and names in your roster can be
+tab-completed.
+
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
@@ -217,18 +225,15 @@ 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.
-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.
-
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}.
When you receive a message from someone, you will see a red indicator in
-the mode line. You can click this indicator or type @kbd{C-x C-j C-l}
-to switch to the relevant buffer.
+the mode line. You can click this indicator with the mouse, or type
+@kbd{C-x C-j C-l} to switch to the relevant buffer. @xref{Tracking
+activity}.
@node Presence, Presence subscription, Chatting, Basic operation
@section Presence
@@ -241,12 +246,12 @@ to switch to the relevant buffer.
@vindex jabber-default-status
@vindex jabber-default-priority
-``Presence'' is the Jabber term for letting other people know that you
+@dfn{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''),
+three elements to presence: availability state (called ``show''),
status message, and priority.
-Your show status may either be empty (meaning simply ``online''), or
+Your show state 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
@@ -259,25 +264,77 @@ 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.
+The priority is only interesting if you are running more than one Jabber
+client at a time accessing the same account. @xref{Resources and
+priority}.
-To set your presence, use the function @code{jabber-send-presence}.
+To set your presence, use the function @code{jabber-send-presence}
+(bound to @kbd{C-x C-j C-p}).
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)}.
+10 minutes" 10)}. There are a few shortcuts:
+@table @kbd
+@item C-x C-j C-a
+Send ``away'' presence (with prefix argument, specify status text)
+@item C-x C-j C-x
+Send ``extended away'' presence (with prefix argument, specify status
+text)
+@item C-x C-j C-o
+Send default presence (see below)
+@end table
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
+want it not to do that, remove @code{jabber-send-current-presence}
+from @code{jabber-post-connect-hooks}. 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}.
With jabber.el, you can set your presence remotely. @xref{Ad-Hoc Commands}.
+@menu
+* Resources and priority::
+* Directed presence::
+@end menu
+
+@node Resources and priority, Directed presence, Presence, Presence
+@subsection Resources and priority
+
+@cindex Resource
+@cindex Priority
+
+Every connection to an account has a specific name, a @dfn{resource}.
+The account itself has a JID of the form
+@samp{@var{username}@@@var{server}} (a @dfn{bare JID}), but the
+connections have JIDs of the form
+@samp{@var{username}@@@var{server}/@var{resource}} (a @dfn{full JID}).
+You can choose the resource name yourself by entering a JID of the
+latter form at the connection prompt (@pxref{Connecting}), or by
+configuring it in @code{jabber-account-list} (@pxref{Account settings})
+
+Each session has a @dfn{priority}. The priority determines what happens
+when a message is sent to the bare JID (i.e. without specifying what
+connection should receive message). Such messages are delivered to the
+connection with the highest non-negative priority value. If there are
+no connections, or if all connections have negative priority, the
+message is either stored on the server for later delivery or bounced to
+the sender, depending on the server configuration.
+
+If there are several connections with the same priority, the behaviour
+depends on the server. Some server implementations deliver the message
+to all such connections, while others choose one connection depending on
+certain rules.
+
+Note that these rules do not apply when a message is sent to a full
+JID. Such messages are sent to the specified resource, if it is still
+connected, and otherwise treated as messages to the bare JID. In the
+chat buffers of jabber.el, messages are sent to whatever JID the last
+message came from (usually a full JID), or to the bare JID if no message
+has been received yet. Other clients may have different behaviour.
+
+@node Directed presence, , Resources and priority, Presence
+@subsection Directed presence
+
@cindex directed presence
@cindex send directed presence
@findex jabber-send-directed-presence
@@ -298,11 +355,21 @@ presence update.
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.
+persons can be asymmetric. Subscription state is shown in the roster
+display by arrows (@pxref{Customizing the roster buffer}). A
+left-pointing arrow means that the contact can see your presence
+(``from''). A right-pointing arrow means that you can see the contact's
+presence (``to''). The most common case is mutual subscription, a
+double-ended arrow (``both'').
When jabber.el receives a presence subscription request, it will present
-it to you in an chat buffer, and offer you to choose subscription mode
-and send a subscription request back to that person.
+it to you in a chat buffer, and offer you to choose subscription mode
+and send a subscription request back to that person. The ``Mutual''
+button accepts the request and sends a reciprocal request.@footnote{If this
+request is superfluous, the server will drop it without bothering the
+contact.} The ``One-way'' button accepts the request, but doesn't ask
+for a subscription in return. The ``Decline'' button declines the
+request.
To request subscription to someone, type @kbd{M-x
jabber-send-subscription-request}. You will be prompted for the JID
@@ -319,36 +386,41 @@ roster buffer.
@cindex Roster buffer, basics
@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.
+list of the contacts on your roster. If you have several accounts
+connected, contacts will be grouped by account.
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.@footnote{For some reason, mouse menus don't work in XEmacs.
-Patches welcome.} This will bring up a menu with all available
+Patches are 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.
+@vindex jabber-roster-show-bindings
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.
-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.
+@findex jabber-display-roster
+You can call @code{jabber-display-roster} (bound to @kbd{g}) 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.
+@vindex jabber-show-offline-contacts
+@cindex Hiding offline contacts
+@cindex Offline contacts, hiding
Please note, that by default offline contacts showed in roster as any
others. To hide them, you can use @kbd{o} in roster buffer. To
permanently hide them, customize @code{jabber-show-offline-contacts}
@@ -365,14 +437,6 @@ 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.
-Also, to save from repeating unnesesary typing you can press @kbd{Tab}
-key to complete nick of groupchat member, you a talking with. You can
-customize your form of personal talking in MUC
-(@code{jabber-muc-completion-delimiter}) and form of personal talking
-to you (@code{jabber-muc-looks-personaling-symbols}) - see
-``jabber-chat'' customization group. Defaults are sane, so unlikely
-you could change this, but... it is Emacs!
-
@findex jabber-groupchat-join
@cindex Joining a groupchat
@cindex Changing nickname
@@ -382,10 +446,10 @@ 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. You can change your nickname
-with @kbd{M-x jabber-muc-nick}. @xref{Automation}, for setting default
+with @kbd{M-x jabber-muc-nick}. @xref{Configuration}, for setting default
nicknames.
-@cindex query groupchat
+@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
@@ -393,12 +457,29 @@ 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
+@code{jabber-muc-disable-disco-check} to @code{t}; however, the bug should be
unearthed and fixed.
Groupchat messages will be displayed in a buffer called
-@code{*-jabber-groupchat-:-@var{groupchat}-*}. It works much like the
-chat buffer.
+@code{*-jabber-groupchat-:-@var{groupchat}-*}. By default, the buffer
+name is based on the JID of the chat room. If you want a shorter name,
+you can add the chat room to your roster and give it a name, using the
+command @kbd{M-x jabber-roster-change}. The groupchat buffer works much
+like the chat buffer. It has its own class of alerts
+(@pxref{Customizing alerts}), and uses activity tracking
+(@pxref{Tracking activity}).
+
+@vindex jabber-muc-completion-delimiter
+@vindex jabber-muc-looks-personaling-symbols
+@cindex Groupchat completion
+@cindex Nick completion in groupchat
+Also, to save from repeating unnesesary typing you can press @kbd{Tab}
+key to complete nick of a groupchat member that you are talking with.
+You can customize your form of personal talking in MUC
+(@code{jabber-muc-completion-delimiter}) and form of personal talking to
+you (@code{jabber-muc-looks-personaling-symbols})---see ``jabber-chat''
+customization group. Defaults are sane, so it is unlikely that you would
+want to change this, but... it is Emacs!
@cindex Topic, MUC
@findex jabber-muc-set-topic
@@ -421,49 +502,50 @@ the meaning of roles and affiliations.
@menu
-* Automation::
-* Bookmarks::
+* Configuration::
* Invitations::
* Private messages::
* MUC Administration::
@end menu
-@node Automation, Bookmarks, Groupchat, Groupchat
-@section Automation
+@node Configuration, Invitations, Groupchat, Groupchat
+@section Configuration
@vindex jabber-muc-default-nicknames
@vindex jabber-muc-autojoin
@findex jabber-muc-autojoin
@cindex Default MUC nickname
@cindex Autojoin chat rooms
+@cindex Bookmarks, MUC
+@findex jabber-edit-bookmarks
-You can select a default nickname by setting
-@code{jabber-account-list} (part of JID before @code{@@}).
-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}.
+You can configure jabber.el to use a certain nickname for a certain
+room, or to automatically join a certain room when you connect. You can
+do this either by storing bookmarks on the server or by setting Emacs
+variables.
-Please note, that @code{jabber-muc-default-nicknames} and
-@code{jabber-muc-autojoin} are machine-local. To make them available
-to any client on any machine, import them in your bookmarks. See
-@xref{Bookmarks}.
+Type @kbd{M-x jabber-edit-bookmarks} to add bookmarks. You can specify
+the JID of the conference, the name of the conference (not used by
+jabber.el), whether to automatically join the room, your desired
+nickname (or leave empty), and the room password (or leave empty).
-@node Bookmarks, Invitations, Automation, Groupchat
-@section Bookmarks
+The default nickname for groupchats is the username part of your JID.
+If you don't use bookmarks, 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.
-@cindex Bookmarks
-@findex jabber-edit-bookmarks
+Automatically joining certain rooms when connecting can be accomplished
+by setting @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-hooks}.
-You can store your conference settings on server-side to make them
-available from any machine and client. Use @code{M-x
-jabber-edit-bookmarks} to edit server-side bookmarks.
+Please note, that @code{jabber-muc-default-nicknames} and
+@code{jabber-muc-autojoin} are machine-local, but apply to @emph{all}
+accounts---if you connect several accounts, both will try to connect to
+the same chat rooms, or use the same nickname. This will lead to
+confusion.
-@node Invitations, Private messages, Bookmarks, Groupchat
+@node Invitations, Private messages, Configuration, Groupchat
@section Invitations
@cindex Invitations
@@ -471,7 +553,7 @@ jabber-edit-bookmarks} to edit server-side bookmarks.
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
+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.
@@ -562,7 +644,7 @@ Rights depend on room configuration. The room might be members-only, or
grant voice only to members.
@item outcast
-Banned from the room
+Banned from the room.
@end table
@@ -928,9 +1010,9 @@ 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:
+@code{jabber-post-connect-hooks}, e.g:
@example
-(add-hook 'jabber-post-connect-hook 'jabber-autoaway-start)
+(add-hook 'jabber-post-connect-hooks 'jabber-autoaway-start)
@end example
There are different methods to find how long you have been ``idle''.
@@ -1357,7 +1439,6 @@ this is Emacs. To open a customization buffer for jabber.el, type
@cindex Resource
@cindex Password
@cindex JID
-@cindex Resource
@cindex Network server
All account settings reside in @code{jabber-account-list} variable.
@@ -1811,11 +1892,12 @@ jabber.el provides various hooks that you can use for whatever
purpose.
@table @code
-@vindex jabber-post-connect-hook
-@item jabber-post-connect-hook
+@vindex jabber-post-connect-hooks
+@item jabber-post-connect-hooks
This hook is called after successful connection and authentication.
By default it contains @code{jabber-send-default-presence}
-(@pxref{Presence}).
+(@pxref{Presence}). The hook functions get the connection object as
+argument.
@vindex jabber-lost-connection-hook
@item jabber-lost-connection-hook
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3892e34..4ecdb78 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,3 +1,3 @@
-TESTS_ENVIRONMENT = $(EMACS) -batch -L $(top_builddir) -l
-TESTS = skip-tag-forward.el
+TESTS_ENVIRONMENT = env top_builddir=$(top_builddir) $(EMACS) -batch -L $(top_builddir) -L $(top_srcdir) -l
+TESTS = load-all.el skip-tag-forward.el history.el
dist_noinst_DATA = $(TESTS)
diff --git a/tests/Makefile.in b/tests/Makefile.in
index b922873..829215c 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -118,8 +118,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-TESTS_ENVIRONMENT = $(EMACS) -batch -L $(top_builddir) -l
-TESTS = skip-tag-forward.el
+TESTS_ENVIRONMENT = env top_builddir=$(top_builddir) $(EMACS) -batch -L $(top_builddir) -L $(top_srcdir) -l
+TESTS = load-all.el skip-tag-forward.el history.el
dist_noinst_DATA = $(TESTS)
all: all-am
diff --git a/tests/history.el b/tests/history.el
new file mode 100644
index 0000000..149aa9a
--- /dev/null
+++ b/tests/history.el
@@ -0,0 +1,39 @@
+;; Tests for history
+
+(require 'jabber-history)
+
+;; 1. Smoke test
+(let ((jabber-use-global-history t)
+ (jabber-global-history-filename (make-temp-file "history-test"))
+ ;; Jabber's birthday :)
+ (our-time (encode-time 0 0 0 4 1 1999 0)))
+ (unwind-protect
+ (progn
+ (jabber-history-log-message "in" "romeo@montague.net/Balcony" nil "hi" our-time)
+ (with-temp-buffer
+ (insert-file-contents-literally jabber-global-history-filename)
+ (let ((expected "\\[\"\\([^\"]+\\)\" \"in\" \"romeo@montague.net/Balcony\" \"me\" \"hi\"]\n")
+ (actual (buffer-string)))
+ (unless (string-match expected actual)
+ (error "Testcase 1 failed; %S doesn't match %S" actual expected))
+ ;; The timestamps don't match for some reason...
+ ;; (let ((timestamp (match-string 1 actual)))
+;; (unless (equal (jabber-parse-time timestamp) our-time)
+;; (error "Testcase 1 failed; timestamp %S didn't match %S (%S vs %S)" timestamp (jabber-encode-time our-time) (jabber-parse-time timestamp) our-time)))
+ )))
+ (delete-file jabber-global-history-filename)))
+
+;; 2. Test with unwritable history file - should not signal an error
+;; This should reflect out-of-disk condition too.
+(let ((jabber-use-global-history t)
+ (jabber-global-history-filename (make-temp-file "history-test")))
+ (set-file-modes jabber-global-history-filename #o444)
+ (unwind-protect
+ (progn
+ (jabber-history-log-message "in" "romeo@montague.net/Balcony" nil "hi" nil)
+ (message "Please ignore the preceding \"Unable to write history\" error message.")
+ ;; No error signalled - we're done.
+ )
+ (delete-file jabber-global-history-filename)))
+
+;; arch-tag: 43dd7ffe-22d7-11dd-9a7c-000a95c2fcd0
diff --git a/tests/load-all.el b/tests/load-all.el
new file mode 100644
index 0000000..77006d9
--- /dev/null
+++ b/tests/load-all.el
@@ -0,0 +1,8 @@
+;; Test that all files can be loaded
+
+(let* ((default-directory (expand-file-name (getenv "top_builddir")))
+ (elc-files (file-expand-wildcards "*.elc" t)))
+ (dolist (f elc-files)
+ (load f nil t)))
+
+;; arch-tag: 509c4808-2e92-11dd-9c8c-000a95c2fcd0