changeset 83484:a380ca43a190

Merged from emacs@sv.gnu.org Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-128 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-129 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-130 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-131 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-132 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-133 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-134 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-135 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-43 Munge arch explicit ids in etc/images to match Emacs * emacs@sv.gnu.org/gnus--rel--5.10--patch-44 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-45 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-46 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-47 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-48 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-524
author Karoly Lorentey <lorentey@elte.hu>
date Sat, 04 Mar 2006 23:07:13 +0000
parents 8976b9f5eda1 (current diff) b52e0cc8af61 (diff)
children f4e40bc8606b
files ChangeLog admin/FOR-RELEASE configure lisp/ChangeLog lisp/allout.el lisp/font-lock.el lisp/mh-e/ChangeLog lisp/net/rcirc.el lisp/progmodes/gdb-ui.el lispref/ChangeLog man/ChangeLog src/frame.h src/window.c src/xdisp.c src/xselect.c
diffstat 55 files changed, 1410 insertions(+), 656 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,12 @@
+2006-03-03  Claudio Fontana  <claudio@gnu.org>
+
+	* Makefile.in (install, uninstall): Add DESTDIR variable to
+	support staged installations.
+
+2006-02-14  Eli Zaretskii  <eliz@gnu.org>
+
+	* configure: Regenerated.
+
 2006-02-14  Richard M. Stallman  <rms@gnu.org>
 
 	* configure.in (s390x-*-linux-gnu*): New configuration.
--- a/Makefile.in	Tue Feb 28 17:35:08 2006 +0000
+++ b/Makefile.in	Sat Mar 04 23:07:13 2006 +0000
@@ -250,7 +250,7 @@
 # avoid nuking an existing dir file, so we don't do that here;
 # instead, we have written out explicit code in the `install' targets.
 COPYDIR = ${srcdir}/etc ${srcdir}/lisp
-COPYDESTS = ${etcdir} ${lispdir}
+COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir}
 
 all: ${SUBDIR} leim
 
@@ -375,20 +375,20 @@
 	    exec_prefix=${exec_prefix} bindir=${bindir} \
 	    libexecdir=${libexecdir} archlibdir=${archlibdir} \
 	    INSTALL_STRIP=${INSTALL_STRIP})
-	${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} ${bindir}/$(EMACSFULL)
-	-chmod 1755  ${bindir}/$(EMACSFULL)
-	rm -f ${bindir}/$(EMACS)
-	-ln ${bindir}/$(EMACSFULL) ${bindir}/$(EMACS)
+	${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL)
+	-chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL)
+	rm -f $(DESTDIR)${bindir}/$(EMACS)
+	-ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS)
 	-unset CDPATH; \
 	for f in `cd lib-src && echo fns-*.el`; do \
 	  if test -r lib-src/$$f ; then \
-	    ${INSTALL_DATA} lib-src/$$f ${archlibdir}/$$f; \
+	    ${INSTALL_DATA} lib-src/$$f $(DESTDIR)${archlibdir}/$$f; \
 	  else true; fi ; \
 	done
 	if test "${carbon_appdir}" != ""; then \
-	  umask 022; mkdir -p ${carbon_appdir}/Emacs.app; \
+	  umask 022; mkdir -p $(DESTDIR)${carbon_appdir}/Emacs.app; \
 	  (cd mac/Emacs.app; (tar -chf - . | \
-		(cd ${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
+		(cd $(DESTDIR)${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
 			&& cat > /dev/null))) || exit 1; \
 	fi
 
@@ -439,86 +439,86 @@
 		rm -f  $${subdir}/dired.todo ; \
 	      done) ; \
 	done
-	-rm -f ${lispdir}/subdirs.el
-	$(srcdir)/update-subdirs ${lispdir}
-	if [ -f ${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
+	-rm -f $(DESTDIR)${lispdir}/subdirs.el
+	$(srcdir)/update-subdirs $(DESTDIR)${lispdir}
+	if [ -f $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
 	then true; \
 	else \
 	  (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
 	   echo "    (normal-top-level-add-subdirs-to-load-path))") \
-	    > ${datadir}/emacs/${version}/site-lisp/subdirs.el; \
+	    > $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el; \
 	fi
-	chmod a+r ${datadir}/emacs/${version}/site-lisp/subdirs.el
-	-if [ -f ${datadir}/emacs/site-lisp/subdirs.el ]; \
+	chmod a+r $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el
+	-if [ -f $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el ]; \
 	then true; \
 	else \
 	  (echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
 	   echo "    (normal-top-level-add-subdirs-to-load-path))") \
-	    > ${datadir}/emacs/site-lisp/subdirs.el; \
+	    > $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el; \
 	fi
-	-chmod a+r ${datadir}/emacs/site-lisp/subdirs.el
+	-chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el
 	-unset CDPATH; \
-	if [ `(cd ./etc; /bin/pwd)` != `(cd ${docdir}; /bin/pwd)` ]; \
+	if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
 	then \
-	   echo "Copying etc/DOC-* to ${docdir} ..." ; \
+	   echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \
 	   (cd ./etc; tar -chf - DOC*) \
-	     |(cd ${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
-	   (cd $(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
+	     |(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
+	   (cd $(DESTDIR)$(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
 	    if test "`echo DOC-*`" != "DOC-*"; then rm DOC; fi); \
 	else true; fi
 	-unset CDPATH; \
 	if [ -r ./lisp ] \
 	   && [ -r ./lisp/simple.el ] \
-	   && [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \
+	   && [ x`(cd ./lisp; /bin/pwd)` != x`(cd $(DESTDIR)${lispdir}; /bin/pwd)` ] \
 	   && [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \
 	then \
-	   echo "Copying lisp/*.el and lisp/*.elc to ${lispdir} ..." ; \
+	   echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
 	   (cd lisp; tar -chf - *.el *.elc) \
-	     |(cd ${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
-	   (cd ${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
+	     |(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
+	   (cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
 	else true; fi
 	-unset CDPATH; \
 	if [ -n "${GZIP_PROG}" ]; \
 	then \
 	   echo "Compressing *.el ..." ; \
-	   (cd ${lispdir}; for f in `find . -name "*.elc" -print`; do \
+	   (cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \
 		${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \
 	    done) \
 	else true; fi
 	-unset CDPATH; \
 	thisdir=`/bin/pwd`; \
-	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
+	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
 	then \
-	  (cd ${infodir};  \
+	  (cd $(DESTDIR)${infodir};  \
 	   if [ -f dir ]; then true; \
 	   else	\
 	     (cd $${thisdir}; \
-	      ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir; \
-	      chmod a+r ${infodir}/dir); \
+	      ${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
+	      chmod a+r $(DESTDIR)${infodir}/dir); \
 	   fi; \
 	   cd ${srcdir}/info ; \
 	   for f in ada-mode* autotype* calc* ccmode* cl* dired-x* ebrowse* ediff* efaq* eintr* elisp* emacs* emacs-mime* emacs-xtra* eshell* eudc* flymake* forms* gnus* idlwave* info* message* mh-e* newsticker* org* pcl-cvs* pgg* reftex* sc* ses* sieve* speedbar* tramp* vip* widget* woman* smtpmail* url* rcirc* erc*; do \
 	     (cd $${thisdir}; \
-	      ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
-	      chmod a+r ${infodir}/$$f); \
+	      ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f; \
+	      chmod a+r $(DESTDIR)${infodir}/$$f); \
 	   done); \
 	else true; fi
 	-unset CDPATH; \
 	thisdir=`/bin/pwd`; \
-	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
+	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
 	then \
 	  for f in ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq elisp eintr emacs emacs-mime emacs-xtra eshell eudc flymake forms gnus idlwave info message mh-e newsticker org pcl-cvs pgg reftex sc ses sieve speedbar tramp vip viper widget woman smtpmail url rcirc erc; do \
 	    (cd $${thisdir}; \
-	     ${INSTALL_INFO} --info-dir=${infodir} ${infodir}/$$f); \
+	     ${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$f); \
 	  done; \
 	else true; fi
-	-chmod -R a+r ${datadir}/emacs ${COPYDESTS} ${infodir}
+	-chmod -R a+r $(DESTDIR)${datadir}/emacs ${COPYDESTS} $(DESTDIR)${infodir}
 	thisdir=`/bin/pwd`; \
 	cd ${srcdir}/etc; \
 	for page in emacs emacsclient etags ctags ; do \
 	  (cd $${thisdir}; \
-	   ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${man1dir}/$${page}${manext}; \
-	   chmod a+r ${man1dir}/$${page}${manext}); \
+	   ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \
+	   chmod a+r $(DESTDIR)${man1dir}/$${page}${manext}); \
 	done
 
 ### Install LEIM files.  Although they are machine-independent, we
@@ -537,15 +537,15 @@
 ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use mkinstalldirs
 ### instead of mkdir.  Not all systems' mkdir programs have the `-p' flag.
 mkdir: FRC
-	if [ -d ${datadir} ]; then true; else \
-	  $(srcdir)/mkinstalldirs ${datadir}; \
-	  chmod a+r ${datadir};\
+	if [ -d $(DESTDIR)${datadir} ]; then true; else \
+	  $(srcdir)/mkinstalldirs $(DESTDIR)${datadir}; \
+	  chmod a+r $(DESTDIR)${datadir};\
 	fi
-	$(srcdir)/mkinstalldirs ${COPYDESTS} ${infodir} ${man1dir} \
-	  ${bindir} ${docdir} ${libexecdir} \
-	  ${datadir}/emacs/site-lisp \
-	  ${datadir}/emacs/${version}/site-lisp \
-	  `echo ${locallisppath} | sed 's/:/ /g'`
+	$(srcdir)/mkinstalldirs ${COPYDESTS} $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \
+	  $(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \
+	  $(DESTDIR)${datadir}/emacs/site-lisp \
+	  $(DESTDIR)${datadir}/emacs/${version}/site-lisp \
+	  $(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'`
 
 ### Delete all the installed files that the `install' target would
 ### create (but not the noninstalled files such as `make all' would
@@ -558,24 +558,24 @@
 	    prefix=${prefix} exec_prefix=${exec_prefix}	\
 	    bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir})
 	-unset CDPATH; \
-	for dir in ${lispdir} ${etcdir} ; do 		\
+	for dir in $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do 	\
 	  if [ -d $${dir} ]; then			\
 	    case `(cd $${dir} ; /bin/pwd)` in		\
 	      `(cd ${srcdir} ; /bin/pwd)`* ) ;;		\
 	      * ) rm -rf $${dir} ;;			\
 	    esac ;					\
 	    case $${dir} in				\
-	      ${datadir}/emacs/${version}/* )		\
-	        rm -rf ${datadir}/emacs/${version}	\
+	      $(DESTDIR)${datadir}/emacs/${version}/* )		\
+	        rm -rf $(DESTDIR)${datadir}/emacs/${version}	\
 	      ;;					\
 	    esac ;					\
 	  fi ;						\
 	done
-	(cd ${archlibdir} && rm -f fns-*)
-	-rm -rf ${libexecdir}/emacs/${version}
-	(cd ${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* newsticker* org* sc* ses* vip* smtpmail* url* rcirc* erc*)
-	(cd ${man1dir}  && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
-	(cd ${bindir}  && rm -f $(EMACSFULL) $(EMACS))
+	(cd $(DESTDIR)${archlibdir} && rm -f fns-*)
+	-rm -rf $(DESTDIR)${libexecdir}/emacs/${version}
+	(cd $(DESTDIR)${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* newsticker* org* sc* ses* vip* smtpmail* url* rcirc* erc*)
+	(cd $(DESTDIR)${man1dir}  && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
+	(cd $(DESTDIR)${bindir}  && rm -f $(EMACSFULL) $(EMACS))
 
 
 FRC:
--- a/admin/FOR-RELEASE	Tue Feb 28 17:35:08 2006 +0000
+++ b/admin/FOR-RELEASE	Sat Mar 04 23:07:13 2006 +0000
@@ -36,9 +36,6 @@
 ** Reiner Steib's 23 Jan 2006 bug report that tool bar icons don't update.
 URL/MID: http://mid.gmane.org/v9acdmrcse.fsf@marauder.physik.uni-ulm.de
 
-** Ralf Angeli's 4 Jul 2005 bug report about scroll-preserve-screen-position.
-URL/MID: http://mid.gmane.org/877jg6o7k4.fsf@neutrino.iwi.uni-sb.de
-
 ** Problems with moving point across invisible text,
 including Ralf Angeli's 21 Feb bug report
 and Martin Rudalics' 14 Feb bug report "Re: moving point and invisible text"
--- a/configure	Tue Feb 28 17:35:08 2006 +0000
+++ b/configure	Sat Mar 04 23:07:13 2006 +0000
@@ -2136,6 +2136,9 @@
   s390-*-linux-gnu* )
     machine=ibms390 opsys=gnu-linux
   ;;
+  s390x-*-linux-gnu* )
+    machine=ibms390x opsys=gnu-linux
+  ;;
   rs6000-ibm-aix3.1* | powerpc-ibm-aix3.1*  )
     machine=ibmrs6000 opsys=aix3-1
   ;;
--- a/etc/orgcard.tex	Tue Feb 28 17:35:08 2006 +0000
+++ b/etc/orgcard.tex	Sat Mar 04 23:07:13 2006 +0000
@@ -1,4 +1,4 @@
-% Reference Card for Org Mode 4.06
+% Reference Card for Org Mode 4.07
 %
 %**start of header
 \newcount\columnsperpage
@@ -58,7 +58,7 @@
 % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik
 % for their many good ideas.
 
-\def\orgversionnumber{4.06}
+\def\orgversionnumber{4.07}
 \def\year{2006}
 
 \def\shortcopyrightnotice{\vskip 1ex plus 2 fill
--- a/leim/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/leim/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,8 @@
+2006-03-03  Claudio Fontana  <claudio@gnu.org>
+
+	* Makefile.in (install): Add DESTDIR variable to support staged
+	installations.
+
 2005-12-17  Eli Zaretskii  <eliz@gnu.org>
 
 	* makefile.w32-in ($(TIT), leim-list.el): Warn that parts of
--- a/leim/Makefile.in	Tue Feb 28 17:35:08 2006 +0000
+++ b/leim/Makefile.in	Sat Mar 04 23:07:13 2006 +0000
@@ -33,7 +33,7 @@
 srcdir=@srcdir@
 
 # Where to install LEIM files.
-INSTALLDIR=${datadir}/emacs/${version}/leim
+INSTALLDIR=$(DESTDIR)${datadir}/emacs/${version}/leim
 
 GZIP_PROG = @GZIP_PROG@
 
--- a/lib-src/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/lib-src/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,8 @@
+2006-02-23  Claudio Fontana  <claudio@gnu.org>
+
+	* Makefile.in (install, uninstall): Add DESTDIR variable to
+	support staged installations.
+
 2005-12-30  Eli Zaretskii  <eliz@gnu.org>
 
 	* makefile.w32-in (MOUSE_SUPPORT): Add tooltip.elc.
--- a/lib-src/Makefile.in	Tue Feb 28 17:35:08 2006 +0000
+++ b/lib-src/Makefile.in	Sat Mar 04 23:07:13 2006 +0000
@@ -285,11 +285,11 @@
 maybe-blessmail: BLESSMAIL
 #ifdef MOVEMAIL_NEEDS_BLESSING
 /* Don\'t charge ahead and do it!  Let the installer decide.
-	  ./blessmail ${archlibdir}/movemail${EXEEXT}  */
+	  ./blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT}  */
 	@if [ `wc -l <blessmail` != 2 ] ; then \
 	  dir=`sed -n -e 's/echo mail directory = \(.*\)/\1/p' blessmail`; \
 	  echo Assuming $$dir is really the mail spool directory, you should; \
-	  echo run  lib-src/blessmail ${archlibdir}/movemail${EXEEXT}; \
+	  echo run  lib-src/blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT}; \
 	  echo as root, to give  movemail${EXEEXT}  appropriate permissions.; \
 	  echo Do that after running  make install.; \
 	fi
@@ -297,50 +297,50 @@
 
 /* Install the internal utilities.  Until they are installed, we can
    just run them directly from lib-src.  */
-${archlibdir}: all
+$(DESTDIR)${archlibdir}: all
 	@echo
 	@echo "Installing utilities run internally by Emacs."
-	$(top_srcdir)/mkinstalldirs ${archlibdir}
-	if [ `(cd ${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \
+	$(top_srcdir)/mkinstalldirs $(DESTDIR)${archlibdir}
+	if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \
 	  for file in ${UTILITIES}; do \
-	    $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file ${archlibdir}/$$file ; \
+	    $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \
 	  done ; \
         fi
-	$(top_srcdir)/mkinstalldirs ${gamedir}
-	touch ${gamedir}/snake-scores
-	touch ${gamedir}/tetris-scores
+	$(top_srcdir)/mkinstalldirs $(DESTDIR)${gamedir}
+	touch $(DESTDIR)${gamedir}/snake-scores
+	touch $(DESTDIR)${gamedir}/tetris-scores
 /* If the following commands fail, that is not a big deal.
    update-game-score will detect at runtime that it is not setuid,
    and handle things accordingly. */
-	-if chown ${gameuser} ${archlibdir}/update-game-score && chmod u+s ${archlibdir}/update-game-score; then \
-	  chown ${gameuser} ${gamedir}; \
-	  chmod u=rwx,g=rwx,o=rx ${gamedir}; \
+	-if chown ${gameuser} $(DESTDIR)${archlibdir}/update-game-score && chmod u+s $(DESTDIR)${archlibdir}/update-game-score; then \
+	  chown ${gameuser} $(DESTDIR)${gamedir}; \
+	  chmod u=rwx,g=rwx,o=rx $(DESTDIR)${gamedir}; \
 	fi
-        if [ `(cd ${archlibdir} && /bin/pwd)` \
+        if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` \
              != `(cd ${srcdir} && /bin/pwd)` ]; then \
 	  for file in ${SCRIPTS}; do \
-	    $(INSTALL_PROGRAM) ${srcdir}/$$file ${archlibdir}/$$file; \
+	    $(INSTALL_PROGRAM) ${srcdir}/$$file $(DESTDIR)${archlibdir}/$$file; \
 	  done ; \
 	fi
 
-install: ${archlibdir}
+install: $(DESTDIR)${archlibdir}
 	@echo
 	@echo "Installing utilities for users to run."
 	for file in ${INSTALLABLES} ; do \
-	  $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} ${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \
-	  chmod a+rx ${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \
+	  $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \
+	  chmod a+rx $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \
 	done
 	for file in ${INSTALLABLE_SCRIPTS} ; do \
-	  $(INSTALL_PROGRAM) ${srcdir}/$${file} ${bindir}/`echo $${file} | sed '$(TRANSFORM)'`  ; \
-	  chmod a+rx ${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \
+	  $(INSTALL_PROGRAM) ${srcdir}/$${file} $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`  ; \
+	  chmod a+rx $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \
 	done
 
 uninstall:
-	(cd ${bindir}; \
+	(cd $(DESTDIR)${bindir}; \
 	for file in ${INSTALLABLES} ${INSTALLABLE_SCRIPTS}; do \
-	  rm -f ${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \
+	  rm -f $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \
 	done)
-	(cd ${archlibdir}; \
+	(cd $(DESTDIR)${archlibdir}; \
 	 rm -f ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS})
 
 mostlyclean:
--- a/lisp/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,109 @@
+2006-03-03  Agustin Martin  <agustin.martin@hispalinux.es>
+
+	textmodes/flyspell.el (flyspell-process-localwords): Be
+	case-sensitive.
+
+2006-03-03  Martin Rudalics  <rudalics@gmx.at>
+
+	* cus-edit.el (custom-quote): Remove function, since it has been
+	moved to custom.el.
+
+	* font-lock.el (lisp-font-lock-keywords-2)
+	* emacs-lisp/rx.el (rx-check-any, rx-check-not)
+	* generic-x.el (reg-generic-mode): Quote "]"s in regexps when
+	they have no special meaning.
+
+	* midnight.el (clean-buffer-list): Handle case where base-buffer of
+        indirect buffer gets killed before indirect buffer.  Use dolist.
+
+2006-03-03  Ken Manheimer  <ken.manheimer@gmail.com>
+
+	* emacs-lisp/edebug.el (edebug-display): Use `edebug-sit-for-seconds'
+	value instead of a literal constant (1) on more pauses.
+
+2006-03-03  Slawomir Nowaczyk  <slawomir.nowaczyk.847@student.lu.se>  (tiny change)
+
+	* textmodes/flyspell.el (flyspell-external-point-words): Be
+	case-sensitive.
+
+2006-03-03  Ryan Yeske  <rcyeske@gmail.com>
+
+	* net/rcirc.el (rcirc-url-regexp): Match entire url when it starts
+	with "www".
+
+2006-03-03  Ken Manheimer  <ken.manheimer@gmail.com>
+
+	allout.el: Restablished intermediate missing comment header to
+	preserve outline structure.
+	(allout-beginning-of-current-entry): Wasn't skipping invisible
+	text - fixed.
+	(allout-open-topic): Was failing when opening a topic at
+	end-of-buffer - fixed.
+	(allout-minor-mode): Moved nearer to allout-mode function.
+
+2006-03-02  Carsten Dominik  <dominik@science.uva.nl>
+
+	* textmodes/org.el (org-paste-subtree): Removed forgotten (debug)
+	form.
+
+2006-03-02  Nick Roberts  <nickrob@snap.net.nz>
+
+	* dframe.el (dframe-frame-mode): Don't burp when menu-bar-lines
+	is nil.
+
+	* progmodes/gud.el (gud-speedbar-menu-items): Use
+	buffer-local-value and add missing :visible keyword.
+
+	* progmodes/gdb-ui.el (gdb-speedbar-refresh): Quieten
+	speedbar-refresh.
+
+2006-03-01  Carsten Dominik  <dominik@science.uva.nl>
+
+	* textmodes/reftex-index.el (reftex-index-map): `follow-mouse'
+	must be `follow-link'.
+
+	* textmodes/reftex-toc.el (reftex-toc-map): `follow-mouse' must be
+	`follow-link'.
+
+	* textmodes/org.el (org-export-as-html): Fix bugs in HTML
+	formatting: No nested anchors.
+	(org-all-targets): Fix bug with XEmacs compatibility.
+	(org-read-date): Add (require 'parse-time).
+	(org-set-tags): Fix bug with extra inserted space.
+	(org-export-html-style): Define a style class for targets.
+	(org-agenda-keymap, org-mouse-map): Add a binding for
+	`follow-link'.
+	(org-hide-leading-stars): New option.
+	(org-hide): New face.
+	(org-set-font-lock-defaults): Allow to hide leading stars.
+	(org-get-legal-level, org-tr-level): New functions.
+	(org-odd-levels-only): New option.
+	(org-level-faces, org-paste-subtree, org-convert-to-odd-levels)
+	(org-demote, org-promote): Deal with double-star levels.
+	(org-convert-to-odd-levels): New command.
+
+2006-03-01  Nick Roberts  <nickrob@snap.net.nz>
+
+	* speedbar.el (speedbar-update-localized-contents): Try to
+	preserve window-start.
+	(speedbar-update-directory-contents): Try to preserve window-start
+	and window-point.
+	(speedbar-update-special-contents): Don't move back to start of
+	window.
+
+	* progmodes/gdb-ui.el (gdb-speedbar-refresh): Rename from
+	gdb-speedbar-timer-fn.  Use speedbar-refresh instead of
+	speedbar-timer-fn
+	(gdb-var-update-handler, gdb-var-update-handler-1): Use it.
+	(gdb-speedbar-expand-node): Use speedbar-delete-subblock
+	instead of gdb-speedbar-timer-fn.
+
+2006-02-28  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calccomp.el (math-compose-tex-matrix): Add a latex option.
+	(math-compose-expr): Use latex option when calling
+	`math-compose-tex-matrix' for latex mode.
+
 2006-02-28  Nick Roberts  <nickrob@snap.net.nz>
 
 	* speedbar.el: Re-instate comments about developing for speedbar
@@ -21,7 +127,7 @@
 
 2006-02-27  Nick Roberts  <nickrob@snap.net.nz>
 
-	* progmodes/gdb-ui.el: (gdb-source-window): New variable.
+	* progmodes/gdb-ui.el (gdb-source-window): New variable.
 	Re-introduce the concept of a source window.
 	(gdb-get-buffer-create): Rename from gdb-get-create-buffer for
 	consistency with get-buffer-create.
@@ -43,8 +149,8 @@
 	* textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse'
 	binding.
 
-	* textmodes/reftex-sel.el (reftex-select-label-map,
-	reftex-select-bib-map): Add `follow-mouse' binding.
+	* textmodes/reftex-sel.el (reftex-select-label-map)
+	(reftex-select-bib-map): Add `follow-mouse' binding.
 
 2006-02-26  Luc Teirlinck  <teirllm@auburn.edu>
 
@@ -103,7 +209,7 @@
 
 2006-02-24  Alan Mackenzie  <bug-cc-mode@gnu.org>
 
-	* progmodes/cc-mode.el (c-postprocess-file-styles): bind
+	* progmodes/cc-mode.el (c-postprocess-file-styles): Bind
 	inhibit-read-only to t, around the call to
 	c-remove-any-local-eval-or-mode-variables, so that it works on a
 	RO file.
@@ -136,8 +242,8 @@
 	* progmodes/cc-mode.el: File Local variables: Solve the problem
 	where both `mode' and c-file-offsets are specified: `mode' will
 	overwrite c-f-o's settings:
-	(c-remove-any-local-eval-or-mode-variables): new function.
-	(c-postprocess-file-styles): call the above new function, within
+	(c-remove-any-local-eval-or-mode-variables): New function.
+	(c-postprocess-file-styles): Call the above new function, within
 	c-tentative-buffer-change, to splat `mode' and `eval' before the
 	second hack-local-variables.
 
@@ -176,15 +282,15 @@
 	Sometimes, c-s-i got separated from the mode name on the mode
 	line.
 
-	* progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma,
-	c-electric-colon): Correct doc-strings: "/ln" -> "/la".
+	* progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma)
+	(c-electric-colon): Correct doc-strings: "/ln" -> "/la".
 
 2006-02-24  Martin Stjernholm  <bug-cc-mode@gnu.org>
 
-	* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improved the
+	* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improve the
 	error message when there's an evaluation error to show whether
 	it's loaded from source or not.
-	(c-filter-ops): Made it available at runtime too to work when
+	(c-filter-ops): Make it available at runtime too to work when
 	`c-make-init-lang-vars-fun' needs to evaluate from source.
 
 2006-02-24  Juanma Barranquero  <lekktu@gmail.com>
@@ -269,7 +375,7 @@
 	fail silently when there is no valid argument at point.
 	(reftex-view-crossref-when-idle): Call `reftex-view-crossref' with
 	`fail-silently' argument.  From a patch by David Reiter.
-	
+
 	* textmodes/org.el (org-mark-ring-push, org-mark-ring-goto):
 	New commands.
 	(org-mark-ring): New variable.
--- a/lisp/allout.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/allout.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1605,6 +1605,8 @@
     allout-mode
     )					; let*
   )  					; defun
+;;;_  > allout-minor-mode
+(defalias 'allout-minor-mode 'allout-mode)
 
 ;;;_  - Position Assessment
 ;;;_   > allout-hidden-p (&optional pos)
@@ -1612,9 +1614,6 @@
   "Non-nil if the character after point is invisible."
   (get-char-property (or pos (point)) 'invisible))
 
-;;;_  > allout-minor-mode
-(defalias 'allout-minor-mode 'allout-mode)
-
 ;;;_  > allout-overlay-insert-in-front-handler (ol after beg end
 ;;;                                                &optional prelen)
 (defun allout-overlay-insert-in-front-handler (ol after beg end
@@ -1753,6 +1752,7 @@
 
 ;;;_ #4 Navigation
 
+;;;_  - Position Assessment
 ;;;_   : Location Predicates
 ;;;_    > allout-on-current-heading-p ()
 (defun allout-on-current-heading-p ()
@@ -2236,9 +2236,10 @@
   "When not already there, position point at beginning of current topic header.
 
 If already there, move cursor to bullet for hot-spot operation.
-\(See `allout-mode' doc string for details on hot-spot operation.)"
+\(See `allout-mode' doc string for details of hot-spot operation.)"
   (interactive)
   (let ((start-point (point)))
+    (move-beginning-of-line 1)
     (allout-end-of-prefix)
     (if (and (interactive-p)
 	     (= (point) start-point))
@@ -2927,7 +2928,9 @@
             ;; Going inwards - double-space if first offspring is
             ;; double-spaced, otherwise snug up.
             (allout-end-of-entry)
-            (line-move 1)
+            (if (eobp)
+                (newline 1)
+              (line-move 1))
             (allout-beginning-of-current-line)
             (backward-char 1)
             (if (bolp)
--- a/lisp/calc/calccomp.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/calc/calccomp.el	Sat Mar 04 23:07:13 2006 +0000
@@ -286,10 +286,10 @@
                                      (> calc-language-option 1)
                                      (< calc-language-option -1)))
                             (append '(vleft 0 "\\begin{pmatrix}")
-                                    (math-compose-tex-matrix (cdr a))
+                                    (math-compose-tex-matrix (cdr a) t)
                                     '("\\end{pmatrix}"))
                           (append '(horiz "\\begin{pmatrix} ")
-                                  (math-compose-tex-matrix (cdr a))
+                                  (math-compose-tex-matrix (cdr a) t)
                                   '(" \\end{pmatrix}")))
                       (if (and (eq calc-language 'eqn)
                                (math-matrixp a))
@@ -1015,10 +1015,11 @@
 		(math-compose-expr (car a) math-comp-vector-prec)
 		(concat " " math-comp-right-bracket)))))
 
-(defun math-compose-tex-matrix (a)
+(defun math-compose-tex-matrix (a &optional ltx)
   (if (cdr a)
-      (cons (append (math-compose-vector (cdr (car a)) " & " 0) '(" \\\\ "))
-            (math-compose-tex-matrix (cdr a)))
+      (cons (append (math-compose-vector (cdr (car a)) " & " 0) 
+                    (if ltx '(" \\\\ ") '(" \\cr ")))
+            (math-compose-tex-matrix (cdr a) ltx))
     (list (math-compose-vector (cdr (car a)) " & " 0))))
 
 (defun math-compose-eqn-matrix (a)
--- a/lisp/cus-edit.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/cus-edit.el	Sat Mar 04 23:07:13 2006 +0000
@@ -468,21 +468,6 @@
 
 ;;; Utilities.
 
-(defun custom-quote (sexp)
-  "Quote SEXP iff it is not self quoting."
-  (if (or (memq sexp '(t nil))
-	  (keywordp sexp)
-	  (and (listp sexp)
-	       (memq (car sexp) '(lambda)))
-	  (stringp sexp)
-	  (numberp sexp)
-	  (vectorp sexp)
-;;;  	  (and (fboundp 'characterp)
-;;;  	       (characterp sexp))
-	  )
-      sexp
-    (list 'quote sexp)))
-
 (defun custom-split-regexp-maybe (regexp)
   "If REGEXP is a string, split it to a list at `\\|'.
 You can get the original back with from the result with:
--- a/lisp/dframe.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/dframe.el	Sat Mar 04 23:07:13 2006 +0000
@@ -422,7 +422,7 @@
 			    parameters
 			  (append
 			   parameters
-			   (list (cons 'height (+ mh (frame-height)))))))
+			   (list (cons 'height (+ (or mh 0) (frame-height)))))))
 		       (params
 			;; Only add a guessed width if one is not specified
 			;; in the input parameters.
--- a/lisp/emacs-lisp/edebug.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/emacs-lisp/edebug.el	Sat Mar 04 23:07:13 2006 +0000
@@ -2660,13 +2660,14 @@
 		;; Display result of previous evaluation.
 		(if (and edebug-break
 			 (not (eq edebug-execution-mode 'Continue-fast)))
-		    (sit-for 1))	; Show break message.
+                    (edebug-sit-for edebug-sit-for-seconds)) ; Show message.
 		(edebug-previous-result)))
 
 	  (cond
 	   (edebug-break
 	    (cond
-	     ((eq edebug-execution-mode 'continue) (edebug-sit-for 1))
+	     ((eq edebug-execution-mode 'continue)
+              (edebug-sit-for edebug-sit-for-seconds))
 	     ((eq edebug-execution-mode 'Continue-fast) (edebug-sit-for 0))
 	     (t (setq edebug-stop t))))
 	   ;; not edebug-break
--- a/lisp/emacs-lisp/rx.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/emacs-lisp/rx.el	Sat Mar 04 23:07:13 2006 +0000
@@ -372,8 +372,8 @@
      (if (eq ?^ (aref arg 0))
 	 (setq arg (concat "\\" arg)))
      ;; Remove ] and set flag for adding it to start of overall result.
-     (when (string-match "]" arg)
-       (setq arg (replace-regexp-in-string "]" "" arg)
+     (when (string-match "\\]" arg)
+       (setq arg (replace-regexp-in-string "\\]" "" arg)
 	     rx-bracket "]")))
    (when (symbolp arg)
      (let ((translation (condition-case nil
@@ -405,7 +405,7 @@
 (defun rx-check-not (arg)
   "Check arg ARG for Rx `not'."
   (unless (or (and (symbolp arg)
-		   (string-match "\\`\\[\\[:[-a-z]:]]\\'"
+		   (string-match "\\`\\[\\[:[-a-z]:\\]\\]\\'"
 				 (condition-case nil
 				     (rx-to-string arg 'no-group)
 				   (error ""))))
--- a/lisp/font-lock.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/font-lock.el	Sat Mar 04 23:07:13 2006 +0000
@@ -2120,7 +2120,7 @@
        ;; Erroneous structures.
        ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>" 1 font-lock-warning-face)
        ;; Words inside \\[] tend to be for `substitute-command-keys'.
-       ("\\\\\\\\\\[\\(\\sw+\\)]" 1 font-lock-constant-face prepend)
+       ("\\\\\\\\\\[\\(\\sw+\\)\\]" 1 font-lock-constant-face prepend)
        ;; Words inside `' tend to be symbol names.
        ("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)
        ;; Constant values.
--- a/lisp/generic-x.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/generic-x.el	Sat Mar 04 23:07:13 2006 +0000
@@ -433,7 +433,7 @@
 (define-generic-mode reg-generic-mode
   '(?\;)
   '("key" "classes_root" "REGEDIT" "REGEDIT4")
-  '(("\\(\\[.*]\\)"          1 font-lock-constant-face)
+  '(("\\(\\[.*\\]\\)"        1 font-lock-constant-face)
     ("^\\([^\n\r]*\\)\\s-*=" 1 font-lock-variable-name-face))
   '("\\.[rR][eE][gG]\\'")
   (list
--- a/lisp/gnus/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,56 @@
+2006-03-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* mm-decode.el (mm-get-part): Don't use
+	mm-with-unibyte-current-buffer.
+
+	* gnus-sum.el (gnus-summary-set-display-table): Don't nix out
+	characters 160 through 255 in Emacs 23.
+
+2006-03-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* mml.el (mml-generate-mime-1): Encode parts other than text/* or
+	message/* containing non-ASCII text properly.
+
+2006-02-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* mm-util.el (mm-with-unibyte-current-buffer): Add note.
+
+2006-02-28  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	* nnweb.el (nnweb-gmane-create-mapping): Don't choke on ^M.
+
+2006-02-28  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* nnweb.el (nnweb-type-definition, nnweb-gmane-search): Use new
+	nov.php.
+
+2006-02-28  Andreas Seltenreich  <uwi7@stud.uni-karlsruhe.de>
+
+	* nnweb.el (nnweb-type-definition, nnweb-gmane-create-mapping)
+	(nnweb-gmane-wash-article, nnweb-gmane-search): Fix Gmane web
+	groups.  Kudos to Olly Betts <olly@survex.com> for providing NOV
+	output on the server side.
+	(nnweb-google-create-mapping): Update regexps and add some
+	progress indication.
+
+2006-02-28  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* message.el (message-user-fqdn): Remove useless * in doc string.
+
+	* gnus-draft.el (gnus-draft-send): Bind message-signature to avoid
+	unnecessary interaction when sending queued mails.  Reported by
+	TAKAHASHI Yoshio <tkh@jp.fujitsu.com>.
+
+2006-02-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+	* gnus-int.el (gnus-open-server): Respect gnus-batch-mode.
+	Merge of 2006-02-20 change from the trunk.
+
+2006-02-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+	* dns.el (query-dns): Protect more against buggy tcp output.
+	Merge of 2006-02-20 change from the trunk.
+
 2006-02-27  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-sum.el (gnus-sequence-of-unread-articles): Return nil if
--- a/lisp/gnus/dns.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/dns.el	Sat Mar 04 23:07:13 2006 +0000
@@ -347,7 +347,7 @@
 		     (>= (buffer-size) 2))
 	    (goto-char (point-min))
 	    (delete-region (point) (+ (point) 2)))
-	  (unless (zerop (buffer-size))
+	  (when (>= (buffer-size) 2)
 	    (let ((result (dns-read (buffer-string))))
 	      (if fullp
 		  result
--- a/lisp/gnus/gnus-draft.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/gnus-draft.el	Sat Mar 04 23:07:13 2006 +0000
@@ -146,6 +146,8 @@
                                  message-send-hook))
          (message-setup-hook (and (not is-queue)
                                   message-setup-hook))
+	 (message-signature (and (not is-queue)
+				 message-signature))
          (gnus-agent-queue-mail (and (not is-queue)
                                      gnus-agent-queue-mail))
 	 (rfc2047-encode-encoded-words nil)
--- a/lisp/gnus/gnus-int.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/gnus-int.el	Sat Mar 04 23:07:13 2006 +0000
@@ -250,10 +250,12 @@
                               ;; recurse to open the agent's backend.
                               (setq open-offline (eq gnus-server-unopen-status 'offline))
                               gnus-server-unopen-status)
-                             ((gnus-y-or-n-p
-                               (format "Unable to open %s:%s, go offline? "
-                                       (car gnus-command-method)
-                                       (cadr gnus-command-method)))
+                             ((and
+			       (not gnus-batch-mode)
+			       (gnus-y-or-n-p
+				(format "Unable to open %s:%s, go offline? "
+					(car gnus-command-method)
+					(cadr gnus-command-method))))
                               (setq open-offline t)
                               'offline)
                              (t
--- a/lisp/gnus/gnus-sum.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/gnus-sum.el	Sat Mar 04 23:07:13 2006 +0000
@@ -3098,8 +3098,11 @@
     (aset table ?\r nil)
     ;; We keep TAB as well.
     (aset table ?\t nil)
-    ;; We nix out any glyphs over 126 that are not set already.
-    (let ((i 256))
+    ;; We nix out any glyphs 127 through 255, or 127 through 159 in
+    ;; Emacs 23, that are not set already.
+    (let ((i (if (ignore-errors (= (make-char 'latin-iso8859-1 160) 160))
+		 160
+	       256)))
       (while (>= (setq i (1- i)) 127)
 	;; Only modify if the entry is nil.
 	(unless (aref table i)
--- a/lisp/gnus/mm-decode.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/mm-decode.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1084,14 +1084,16 @@
 
 (defun mm-get-part (handle)
   "Return the contents of HANDLE as a string."
-  (mm-with-unibyte-buffer
-    (insert (with-current-buffer (mm-handle-buffer handle)
-	      (mm-with-unibyte-current-buffer
-		(buffer-string))))
-    (mm-decode-content-transfer-encoding
-     (mm-handle-encoding handle)
-     (mm-handle-media-type handle))
-    (buffer-string)))
+  (let ((default-enable-multibyte-characters
+	  (with-current-buffer (mm-handle-buffer handle)
+	    (mm-multibyte-p))))
+    (with-temp-buffer
+      (insert-buffer-substring (mm-handle-buffer handle))
+      (mm-disable-multibyte)
+      (mm-decode-content-transfer-encoding
+       (mm-handle-encoding handle)
+       (mm-handle-media-type handle))
+      (buffer-string))))
 
 (defun mm-insert-part (handle)
   "Insert the contents of HANDLE in the current buffer."
--- a/lisp/gnus/mm-util.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/mm-util.el	Sat Mar 04 23:07:13 2006 +0000
@@ -796,11 +796,17 @@
 (defmacro mm-with-unibyte-current-buffer (&rest forms)
   "Evaluate FORMS with current buffer temporarily made unibyte.
 Also bind `default-enable-multibyte-characters' to nil.
-Equivalent to `progn' in XEmacs"
+Equivalent to `progn' in XEmacs
+
+NOTE: Use this macro with caution in multibyte buffers (it is not
+worth using this macro in unibyte buffers of course).  Use of
+`(set-buffer-multibyte t)', which is run finally, is generally
+harmful since it is likely to modify existing data in the buffer.
+For instance, it converts \"\\300\\255\" into \"\\255\" in Emacs 23."
   (let ((multibyte (make-symbol "multibyte"))
 	(buffer (make-symbol "buffer")))
     `(if mm-emacs-mule
- 	 (let ((,multibyte enable-multibyte-characters)
+	 (let ((,multibyte enable-multibyte-characters)
 	       (,buffer (current-buffer)))
 	   (unwind-protect
 	       (let (default-enable-multibyte-characters)
--- a/lisp/gnus/mml.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/mml.el	Sat Mar 04 23:07:13 2006 +0000
@@ -507,7 +507,15 @@
 		(let ((coding-system-for-read mm-binary-coding-system))
 		  (mm-insert-file-contents filename nil nil nil nil t)))
 	       (t
-		(insert (cdr (assq 'contents cont)))))
+		(let ((contents (cdr (assq 'contents cont))))
+		  (if (if (featurep 'xemacs)
+			  (string-match "[^\000-\377]" contents)
+			(mm-multibyte-string-p contents))
+		      (progn
+			(mm-enable-multibyte)
+			(insert contents)
+			(setq charset (mm-encode-body)))
+		    (insert contents)))))
 	      (setq encoding (mm-encode-buffer type)
 		    coded (mm-string-as-multibyte (buffer-string))))
 	    (mml-insert-mime-headers cont type charset encoding nil)
--- a/lisp/gnus/nnweb.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/gnus/nnweb.el	Sat Mar 04 23:07:13 2006 +0000
@@ -27,9 +27,6 @@
 
 ;; Note: You need to have `w3' installed for some functions to work.
 
-;; FIXME: Due to changes in the HTML output of Gmane, stuff related to Gmane
-;; web groups (`gnus-group-make-web-group') doesn't work anymore.
-
 ;;; Code:
 
 (eval-when-compile (require 'cl))
@@ -82,7 +79,7 @@
      (reference . identity)
      (map . nnweb-gmane-create-mapping)
      (search . nnweb-gmane-search)
-     (address . "http://gmane.org/")
+     (address . "http://search.gmane.org/nov.php")
      (identifier . nnweb-gmane-identity)))
   "Type-definition alist.")
 
@@ -99,7 +96,7 @@
 
 (defvoo nnweb-articles nil)
 (defvoo nnweb-buffer nil)
-(defvar nnweb-group-alist nil)
+(defvoo nnweb-group-alist nil)
 (defvoo nnweb-group nil)
 (defvoo nnweb-hashtb nil)
 
@@ -309,22 +306,26 @@
 
 (defun nnweb-google-wash-article ()
   ;; We have Google's masked e-mail addresses here.  :-/
-  (let ((case-fold-search t))
+  (let ((case-fold-search t)
+	(start-re "<pre>\n *")
+	(end-re "\n *</pre>"))
     (goto-char (point-min))
     (if (save-excursion
 	  (or (re-search-forward "The requested message.*could not be found."
 				 nil t)
-	      (not (and (re-search-forward "^<pre>" nil t)
-			(re-search-forward "^</pre>" nil t)))))
+	      (not (and (re-search-forward start-re nil t)
+			(re-search-forward end-re nil t)))))
 	;; FIXME: Don't know how to indicate "not found".
 	;; Should this function throw an error?  --rsteib
 	(progn
 	  (gnus-message 3 "Requested article not found")
 	  (erase-buffer))
       (delete-region (point-min)
-		     (1+ (re-search-forward "^<pre>" nil t)))
+		     (re-search-forward start-re))
       (goto-char (point-min))
-      (delete-region (- (re-search-forward "^</pre>" nil t) (length "</pre>"))
+      (delete-region (progn
+		       (re-search-forward end-re)
+		       (match-beginning 0))
 		     (point-max))
       (mm-url-decode-entities))))
 
@@ -403,6 +404,7 @@
   (save-excursion
     (set-buffer nnweb-buffer)
     (erase-buffer)
+    (nnheader-message 7 "Searching google...")
     (when (funcall (nnweb-definition 'search) nnweb-search)
 	(let ((more t)
 	      (i 0))
@@ -413,15 +415,18 @@
 	    (goto-char (point-min))
 	    (incf i 100)
 	    (if (or (not (re-search-forward
-			  "<td><a href=\"\n\\([^>\"]+\\)\"><img src=\"/img/nav_next" nil t))
+			  "<a href=\"\n\\([^>\"]+\\)\"><img src=\"[^\"]+next"
+			  nil t))
 		    (>= i nnweb-max-hits))
 		(setq more nil)
 	      ;; Yup, there are more articles
 	      (setq more (concat (nnweb-definition 'base) (match-string 1)))
 	    (when more
 	      (erase-buffer)
+	      (nnheader-message 7 "Searching google...(%d)" i)
 	      (mm-url-insert more))))
 	  ;; Return the articles in the right order.
+	  (nnheader-message 7 "Searching google...done")
 	  (setq nnweb-articles
 		(sort nnweb-articles 'car-less-than-car))))))
 
@@ -454,46 +459,61 @@
   "Perform the search and create a number-to-url alist."
   (save-excursion
     (set-buffer nnweb-buffer)
-    (erase-buffer)
-    (when (funcall (nnweb-definition 'search) nnweb-search)
-      (let ((more t)
-	    (case-fold-search t)
-	    (active (or (cadr (assoc nnweb-group nnweb-group-alist))
-			(cons 1 0)))
-	    subject group url
-	    map)
-	  ;; Remove stuff from the beginning of results
-	(goto-char (point-min))
-	(search-forward "Search Results</h1><ul>" nil t)
-	(delete-region (point-min) (point))
+    (let ((case-fold-search t)
+	  (active (or (cadr (assoc nnweb-group nnweb-group-alist))
+		      (cons 1 0)))
+	  map)
+      (erase-buffer)
+      (nnheader-message 7 "Searching Gmane..." )
+      (when (funcall (nnweb-definition 'search) nnweb-search)
 	(goto-char (point-min))
-	;; Iterate over the actual hits
-	(while (re-search-forward ".*href=\"\\([^\"]+\\)\">\\(.*\\)" nil t)
-	    (setq url (concat "http://gmane.org/" (match-string 1)))
-	    (setq subject (match-string 2))
-	  (unless (nnweb-get-hashtb url)
-	    (push
-	     (list
-	      (incf (cdr active))
-	      (make-full-mail-header
-	       (cdr active) (concat  "(" group ") " subject) nil nil
-	       nil nil 0 0 url))
-	     map)
-	    (nnweb-set-hashtb (cadar map) (car map))))
-	;; Return the articles in the right order.
-	(setq nnweb-articles
-	      (sort (nconc nnweb-articles map) 'car-less-than-car))))))
+	;; Skip the status line
+	(forward-line 1)
+	;; Thanks to Olly Betts we now have NOV lines in our buffer!
+	(while (not (eobp))
+	  (unless (or (eolp) (looking-at "\x0d"))
+	    (let ((header (nnheader-parse-nov)))
+	      (let ((xref (mail-header-xref header))
+		    (from (mail-header-from header))
+		    (subject (mail-header-subject header))
+		    (rfc2047-encoding-type 'mime))
+		(when (string-match " \\([^:]+\\):\\([0-9]+\\)" xref)
+		  (mail-header-set-xref
+		   header
+		   (format "http://article.gmane.org/%s/%s/raw"
+			   (match-string 1 xref)
+			   (match-string 2 xref))))
+
+		;; Add host part to gmane-encrypted addresses
+		(when (string-match "@$" from)
+		  (mail-header-set-from header
+					(concat from "public.gmane.org")))
+
+		(mail-header-set-subject header
+					 (rfc2047-encode-string subject))
+
+		(unless (nnweb-get-hashtb (mail-header-xref header))
+		  (push
+		   (list
+		    (incf (cdr active))
+		    header)
+		   map)
+		  (nnweb-set-hashtb (cadar map) (car map))))))
+	  (forward-line 1)))
+      (nnheader-message 7 "Searching Gmane...done")
+      (setq nnweb-articles
+	    (sort (nconc nnweb-articles map) 'car-less-than-car)))))
 
 (defun nnweb-gmane-wash-article ()
   (let ((case-fold-search t))
     (goto-char (point-min))
-    (re-search-forward "<!--X-Head-of-Message-->" nil t)
-    (delete-region (point-min) (point))
-    (goto-char (point-min))
-    (while (looking-at "^<li><em>\\([^ ]+\\)</em>.*</li>")
-      (replace-match "\\1\\2" t)
-      (forward-line 1))
-    (mm-url-remove-markup)))
+    (when (search-forward "<!--X-Head-of-Message-->" nil t)
+      (delete-region (point-min) (point))
+      (goto-char (point-min))
+      (while (looking-at "^<li><em>\\([^ ]+\\)</em>.*</li>")
+	(replace-match "\\1\\2" t)
+	(forward-line 1))
+      (mm-url-remove-markup))))
 
 (defun nnweb-gmane-search (search)
   (mm-url-insert
@@ -501,11 +521,13 @@
     (nnweb-definition 'address)
     "?"
     (mm-url-encode-www-form-urlencoded
-     `(("query" . ,search)))))
+     `(("query" . ,search)
+       ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))))))
   (setq buffer-file-name nil)
+  (set-buffer-multibyte t)
+  (mm-decode-coding-region (point-min) (point-max) 'utf-8)
   t)
 
-
 (defun nnweb-gmane-identity (url)
   "Return a unique identifier based on URL."
   (if (string-match "group=\\(.+\\)" url)
--- a/lisp/mh-e/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,9 +1,78 @@
+2006-03-03  Bill Wohler  <wohler@newt.com>
+
+	* mh-folder.el (mh-folder-mode):  Rename mh-image-load-path to
+	mh-image-load-path-for-library.
+
+	* mh-letter.el (mh-letter-mode): Rename mh-image-load-path to
+	mh-image-load-path-for-library.
+
+	* mh-utils.el (mh-image-load-path): Rename to
+	mh-image-load-path-for-library. Add example to docstring. Rename
+	local variable mh-image-directory to image-directory. Move error
+	checks to default case in cond and simplify.
+
+	* mh-comp.el (mh-send-letter, mh-insert-auto-fields): Sync
+	docstrings with manual.
+
+2006-03-02  Bill Wohler  <wohler@newt.com>
+
+	* mh-folder.el (mh-tool-bar-init): Autoload.
+	(mh-folder-mode): Call mh-tool-bar-init conditionally in XEmacs.
+	Set scoped variables image-load-path and load-path with updated
+	mh-image-load-path before calling mh-tool-bar-folder-buttons-init.
+
+	* mh-letter.el (mh-tool-bar-init): Autoload.
+	(mh-letter-mode): Call mh-tool-bar-init conditionally in XEmacs.
+	Set scoped variables image-load-path and load-path with updated
+	mh-image-load-path before calling mh-tool-bar-letter-buttons-init.
+
+	* mh-show.el (mh-tool-bar-init): Autoload.
+	(mh-show-mode): Perform tool bar stuff conditionally in XEmacs and
+	GNU Emacs.
+
+	* mh-tool-bar.el (mh-tool-bar-define): Don't quote stuff in error
+	messages per conventions.
+	(mh-tool-bar-folder-buttons-init)
+	(mh-tool-bar-letter-buttons-init): Don't call mh-image-load-path.
+	(mh-tool-bar-define call): Format.
+
+	* mh-utils.el (mh-image-directory,
+	mh-image-load-path-called-flag): Delete.
+	(mh-image-load-path): Incorporate changes from Gnus team. Biggest
+	changes are that it no longer uses/sets mh-image-directory or
+	mh-image-load-path-called-flag, and returns the updated path
+	rather than change it.
+	(mh-logo-display): Change usage of mh-image-load-path.
+
+2006-02-28  Bill Wohler  <wohler@newt.com>
+
+	* mh-limit.el (mh-narrow-to-cc, mh-narrow-to-from)
+	(mh-narrow-to-subject, mh-narrow-to-to): Fix inability to narrow
+	to subjects with special characters by quoting regular expression
+	characters in pick expression derived from existing subjects and
+	other fields (closes SF #1432548).
+	(mh-narrow-to-subject): Remove Re: string from subject so that
+	pick can find originating message (closes SF #1438369).
+
+	* mh-utils.el (mh-image-load-path): Rename variable to
+	mh-image-directory.
+	(mh-image-load-path): Access mh-image-directory instead of
+	mh-image-load-path.
+	(mh-folder-list): Fix problem with passing in a folder and getting
+	nothing back. Fix problem with passing in empty string and getting
+	the entire filesystem (or infinite loop). Don't append slash to
+	folder. These fixes fix problems observed with the pick search.
+	Thanks to Thomas Baumann for the help (closes SF #1435381).
+	(mh-pick-regexp-chars, mh-quote-pick-expr): New variable and
+	function for quoting pick regular expression characters (closes SF
+	#1432548).
+
 2006-02-27  Bill Wohler  <wohler@newt.com>
 
 	* mh-e.el (mh-default-folder-for-message-function): Sync docstring
 	with manual.
 
-	* mh-mime.el (mh-minibuffer-read-type): Deleted comment in
+	* mh-mime.el (mh-minibuffer-read-type): Delete comment in
 	docstring about obsolete variable mh-mime-content-types.
 
 	* mh-e.el (mh-variant): Sync docstring with manual.
@@ -17,12 +86,12 @@
 
 2006-02-21  Eric Ding  <ericding@alum.mit.edu>
 
-	* mh-e.el (mh-invisible-header-fields-internal): Added entry
+	* mh-e.el (mh-invisible-header-fields-internal): Add entry
 	"X-Sasl-enc:"
 
 2006-02-20  Eric Ding  <ericding@alum.mit.edu>
 
-	* mh-e.el (mh-invisible-header-fields-internal): Added entries
+	* mh-e.el (mh-invisible-header-fields-internal): Add entries
 	"X-Authenticated-Sender:", "X-Barracuda-", "X-EFL-Spamscore",
 	"X-IronPort-AV:", "X-Mail-from:", "X-Mailman-Approved-At:",
 	"X-Resolved-to:", and "X-SA-Exim".  Fixed "X-Bugzilla-" and
@@ -128,7 +197,7 @@
 
 2006-02-04  Eric Ding  <ericding@alum.mit.edu>
 
-	* mh-mime.el (mh-file-mime-type-substitutions): Added entries to
+	* mh-mime.el (mh-file-mime-type-substitutions): Add entries to
 	handle OpenOffice documents.
 
 2006-02-03  Bill Wohler  <wohler@newt.com>
--- a/lisp/mh-e/mh-comp.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-comp.el	Sat Mar 04 23:07:13 2006 +0000
@@ -230,6 +230,13 @@
 this command. For example, if you want to check your spelling in
 your message before sending, add the function `ispell-message'.
 
+Unless `mh-insert-auto-fields' had previously been called
+manually, the function `mh-insert-auto-fields' is called to
+insert fields based upon the recipients. If fields are added, you
+are given a chance to see and to confirm these fields before the
+message is actually sent. You can do away with this confirmation
+by turning off the option `mh-auto-fields-prompt-flag'.
+
 In case the MH \"send\" program is installed under a different name,
 use `mh-send-prog' to tell MH-E the name."
   (interactive "P")
@@ -979,14 +986,16 @@
 (defun mh-insert-auto-fields (&optional non-interactive)
   "Insert custom fields if recipient is found in `mh-auto-fields-list'.
 
-Sets buffer-local `mh-insert-auto-fields-done-local' if header
-fields were added. If NON-INTERACTIVE is non-nil, perform actions
-quietly and only if `mh-insert-auto-fields-done-local' is nil.
+Once the header contains one or more recipients, you may run this
+command to insert these fields manually. However, if you use this
+command, the automatic insertion when the message is sent is
+disabled.
 
-An `identity' entry is skipped if one was already entered
-manually.
-
-Return t if fields added; otherwise return nil."
+In a program, set buffer-local `mh-insert-auto-fields-done-local'
+if header fields were added. If NON-INTERACTIVE is non-nil,
+perform actions quietly and only if
+`mh-insert-auto-fields-done-local' is nil. Return t if fields
+added; otherwise return nil."
   (interactive)
   (when (or (not non-interactive)
             (not mh-insert-auto-fields-done-local))
--- a/lisp/mh-e/mh-folder.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-folder.el	Sat Mar 04 23:07:13 2006 +0000
@@ -36,8 +36,9 @@
 (require 'mh-scan)
 (mh-require-cl)
 
-;; Dynamically-created function not found in mh-loaddefs.el.
+;; Dynamically-created functions not found in mh-loaddefs.el.
 (autoload 'mh-tool-bar-folder-buttons-init "mh-tool-bar")
+(autoload 'mh-tool-bar-init "mh-tool-bar")
 
 (require 'gnus-util)
 (autoload 'message-fetch-field "message")
@@ -589,9 +590,16 @@
 
 \\{mh-folder-mode-map}"
   (mh-do-in-gnu-emacs
-   (unless mh-folder-buttons-init-flag
-     (mh-tool-bar-folder-buttons-init)
-     (setq mh-folder-buttons-init-flag t)))
+    (unless mh-folder-buttons-init-flag
+      (let ((load-path (mh-image-load-path-for-library
+                        "mh-e" "mh-logo.xpm" 'load-path))
+            (image-load-path (mh-image-load-path-for-library
+                              "mh-e" "mh-logo.xpm" 'image-load-path)))
+        (mh-tool-bar-folder-buttons-init)
+        (setq mh-folder-buttons-init-flag t)))
+    (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map))
+  (mh-do-in-xemacs
+    (mh-tool-bar-init :folder))
   (make-local-variable 'font-lock-defaults)
   (setq font-lock-defaults '(mh-folder-font-lock-keywords t))
   (make-local-variable 'desktop-save-buffer)
@@ -652,8 +660,6 @@
   (easy-menu-add mh-folder-message-menu)
   (easy-menu-add mh-folder-folder-menu)
   (mh-inc-spool-make)
-  (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map)
-  (mh-funcall-if-exists mh-tool-bar-init :folder)
   (mh-set-help mh-folder-mode-help-messages)
   (if (and mh-xemacs-flag
            font-lock-auto-fontify)
--- a/lisp/mh-e/mh-letter.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-letter.el	Sat Mar 04 23:07:13 2006 +0000
@@ -42,8 +42,9 @@
 
 (require 'gnus-util)
 
-;; Dynamically-created function not found in mh-loaddefs.el.
+;; Dynamically-created functions not found in mh-loaddefs.el.
 (autoload 'mh-tool-bar-letter-buttons-init "mh-tool-bar")
+(autoload 'mh-tool-bar-init "mh-tool-bar")
 
 (autoload 'mml-insert-tag "mml")
 
@@ -311,9 +312,16 @@
   (make-local-variable 'mh-sent-from-folder)
   (make-local-variable 'mh-sent-from-msg)
   (mh-do-in-gnu-emacs
-   (unless mh-letter-buttons-init-flag
-     (mh-tool-bar-letter-buttons-init)
-     (setq mh-letter-buttons-init-flag t)))
+    (unless mh-letter-buttons-init-flag
+      (let ((load-path (mh-image-load-path-for-library
+                        "mh-e" "mh-logo.xpm" 'load-path))
+            (image-load-path (mh-image-load-path-for-library
+                              "mh-e" "mh-logo.xpm" 'image-load-path)))
+        (mh-tool-bar-letter-buttons-init)
+        (setq mh-letter-buttons-init-flag t)))
+    (set (make-local-variable 'tool-bar-map) mh-letter-tool-bar-map))
+  (mh-do-in-xemacs
+    (mh-tool-bar-init :letter))
   ;; Set the local value of mh-mail-header-separator according to what is
   ;; present in the buffer...
   (set (make-local-variable 'mh-mail-header-separator)
@@ -328,8 +336,6 @@
 
   ;; Enable undo since a show-mode buffer might have been reused.
   (buffer-enable-undo)
-  (set (make-local-variable 'tool-bar-map) mh-letter-tool-bar-map)
-  (mh-funcall-if-exists mh-tool-bar-init :letter)
   (make-local-variable 'font-lock-defaults)
   (cond
    ((or (equal mh-highlight-citation-style 'font-lock)
--- a/lisp/mh-e/mh-limit.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-limit.el	Sat Mar 04 23:07:13 2006 +0000
@@ -89,7 +89,8 @@
 
 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
   (interactive
-   (list (mh-edit-pick-expr (mh-current-message-header-field 'cc))))
+   (list (mh-edit-pick-expr
+          (mh-quote-pick-expr (mh-current-message-header-field 'cc)))))
   (mh-narrow-to-header-field 'cc pick-expr))
 
 ;;;###mh-autoload
@@ -99,7 +100,8 @@
 
 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
   (interactive
-   (list (mh-edit-pick-expr (mh-current-message-header-field 'from))))
+   (list (mh-edit-pick-expr
+          (mh-quote-pick-expr (mh-current-message-header-field 'from)))))
   (mh-narrow-to-header-field 'from pick-expr))
 
 ;;;###mh-autoload
@@ -119,10 +121,16 @@
 (defun mh-narrow-to-subject (&optional pick-expr)
   "Limit to messages with same subject.
 With a prefix argument, edit PICK-EXPR.
+The string Re: is removed from the search.
 
 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
   (interactive
-   (list (mh-edit-pick-expr (mh-current-message-header-field 'subject))))
+   (list (mh-edit-pick-expr
+          (mh-quote-pick-expr (mh-current-message-header-field 'subject)))))
+  (setq pick-expr
+        (let ((case-fold-search t))
+          (loop for s in pick-expr
+                collect (mh-replace-regexp-in-string "re: *" "" s))))
   (mh-narrow-to-header-field 'subject pick-expr))
 
 ;;;###mh-autoload
@@ -132,7 +140,8 @@
 
 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
   (interactive
-   (list (mh-edit-pick-expr (mh-current-message-header-field 'to))))
+   (list (mh-edit-pick-expr
+          (mh-quote-pick-expr (mh-current-message-header-field 'to)))))
   (mh-narrow-to-header-field 'to pick-expr))
 
 
--- a/lisp/mh-e/mh-show.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-show.el	Sat Mar 04 23:07:13 2006 +0000
@@ -36,6 +36,9 @@
 (require 'mh-e)
 (require 'mh-scan)
 
+;; Dynamically-created function not found in mh-loaddefs.el.
+(autoload 'mh-tool-bar-init "mh-tool-bar")
+
 (require 'font-lock)
 (require 'gnus-cite)
 (require 'gnus-util)
@@ -830,6 +833,10 @@
 See also `mh-folder-mode'.
 
 \\{mh-show-mode-map}"
+  (mh-do-in-gnu-emacs
+    (set (make-local-variable 'tool-bar-map) mh-show-tool-bar-map))
+  (mh-do-in-xemacs
+    (mh-tool-bar-init :show))
   (set (make-local-variable 'mail-header-separator) mh-mail-header-separator)
   (setq paragraph-start (default-value 'paragraph-start))
   (mh-show-unquote-From)
@@ -853,8 +860,6 @@
   (if (and mh-xemacs-flag
            font-lock-auto-fontify)
       (turn-on-font-lock))
-  (set (make-local-variable 'tool-bar-map) mh-show-tool-bar-map)
-  (mh-funcall-if-exists mh-tool-bar-init :show)
   (when mh-decode-mime-flag
     (mh-make-local-hook 'kill-buffer-hook)
     (add-hook 'kill-buffer-hook 'mh-mime-cleanup nil t))
--- a/lisp/mh-e/mh-tool-bar.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-tool-bar.el	Sat Mar 04 23:07:13 2006 +0000
@@ -204,10 +204,10 @@
           letter-vectors (nreverse letter-vectors))
     (dolist (x folder-defaults)
       (unless (memq x folder-buttons)
-        (error "Folder defaults contains unknown button '%s'" x)))
+        (error "Folder defaults contains unknown button %s" x)))
     (dolist (x letter-defaults)
       (unless (memq x letter-buttons)
-        (error "Letter defaults contains unknown button '%s'" x)))
+        (error "Letter defaults contains unknown button %s" x)))
     `(eval-when (compile load eval)
        (defun mh-buffer-exists-p (mode)
          "Test whether a buffer with major mode MODE is present."
@@ -222,7 +222,6 @@
          ;; Tool bar initialization functions
          (defun mh-tool-bar-folder-buttons-init ()
            (when (mh-buffer-exists-p 'mh-folder-mode)
-             (mh-image-load-path)
              (setq mh-folder-tool-bar-map
                    (let ((tool-bar-map (make-sparse-keymap)))
                      ,@(nreverse folder-button-setter)
@@ -241,7 +240,6 @@
                      tool-bar-map))))
          (defun mh-tool-bar-letter-buttons-init ()
            (when (mh-buffer-exists-p 'mh-letter-mode)
-             (mh-image-load-path)
              (setq mh-letter-tool-bar-map
                    (let ((tool-bar-map (make-sparse-keymap)))
                      ,@(nreverse letter-button-setter)
@@ -334,84 +332,82 @@
                             collect `(const :tag ,y ,x)))))))
 
 (mh-tool-bar-define
-    ((:folder mh-inc-folder mh-mime-save-parts mh-previous-undeleted-msg
-              mh-page-msg  mh-next-undeleted-msg mh-delete-msg mh-refile-msg
-              mh-undo mh-execute-commands mh-toggle-tick mh-reply
-              mh-alias-grab-from-field mh-send mh-rescan-folder
-              mh-tool-bar-search mh-visit-folder
-              mh-tool-bar-customize mh-tool-bar-folder-help mh-widen)
-     (:letter mh-send-letter mh-compose-insertion ispell-message save-buffer
-              undo kill-region menu-bar-kill-ring-save yank mh-fully-kill-draft
-              mh-tool-bar-customize mh-tool-bar-letter-help))
-  ;; Folder/Show buffer buttons
-  (mh-inc-folder (folder) "mail"
-    "Incorporate new mail in Inbox
+ ((:folder mh-inc-folder mh-mime-save-parts mh-previous-undeleted-msg
+           mh-page-msg  mh-next-undeleted-msg mh-delete-msg mh-refile-msg
+           mh-undo mh-execute-commands mh-toggle-tick mh-reply
+           mh-alias-grab-from-field mh-send mh-rescan-folder
+           mh-tool-bar-search mh-visit-folder
+           mh-tool-bar-customize mh-tool-bar-folder-help mh-widen)
+  (:letter mh-send-letter mh-compose-insertion ispell-message save-buffer
+           undo kill-region menu-bar-kill-ring-save yank mh-fully-kill-draft
+           mh-tool-bar-customize mh-tool-bar-letter-help))
+ ;; Folder/Show buffer buttons
+ (mh-inc-folder (folder) "mail" "Incorporate new mail in Inbox
 This button runs `mh-inc-folder' which drags any
-new mail into your Inbox folder.")
-  (mh-mime-save-parts (folder) "attach"
-    "Save MIME parts from this message
+new mail into your Inbox folder")
+ (mh-mime-save-parts (folder) "attach" "Save MIME parts from this message
 This button runs `mh-mime-save-parts' which saves a message's
-different parts into separate files.")
-  (mh-previous-undeleted-msg (folder) "left-arrow"
-    "Go to the previous undeleted message
+different parts into separate files")
+ (mh-previous-undeleted-msg (folder) "left-arrow"
+                            "Go to the previous undeleted message
 This button runs `mh-previous-undeleted-msg'")
-  (mh-page-msg (folder) "page-down"
-    "Page the current message forwards\nThis button runs `mh-page-msg'")
-  (mh-next-undeleted-msg (folder) "right-arrow"
-    "Go to the next undeleted message\nThe button runs `mh-next-undeleted-msg'")
-  (mh-delete-msg (folder) "close"
-    "Mark this message for deletion\nThis button runs `mh-delete-msg'")
-  (mh-refile-msg (folder) "mail/refile"
-    "Refile this message\nThis button runs `mh-refile-msg'")
-  (mh-undo (folder) "undo" "Undo last operation\nThis button runs `undo'"
-    (mh-outstanding-commands-p))
-  (mh-execute-commands (folder) "execute"
-    "Perform moves and deletes\nThis button runs `mh-execute-commands'"
-    (mh-outstanding-commands-p))
-  (mh-toggle-tick (folder) "highlight"
-    "Toggle tick mark\nThis button runs `mh-toggle-tick'")
-  (mh-toggle-showing (folder) "show"
-    "Toggle showing message\nThis button runs `mh-toggle-showing'")
-  (mh-tool-bar-reply-from (folder) "mail/reply-from" "Reply to \"from\"")
-  (mh-tool-bar-reply-to (folder) "mail/reply-to" "Reply to \"to\"")
-  (mh-tool-bar-reply-all (folder) "mail/reply-all" "Reply to \"all\"")
-  (mh-reply (folder) "mail/reply"
-    "Reply to this message\nThis button runs `mh-reply'")
-  (mh-alias-grab-from-field (folder) "mail/alias"
-    "Grab From alias\nThis button runs `mh-alias-grab-from-field'"
-    (and (mh-extract-from-header-value) (not (mh-alias-for-from-p))))
-  (mh-send (folder) "mail/compose"
-    "Compose new message\nThis button runs `mh-send'")
-  (mh-rescan-folder (folder) "refresh"
-    "Rescan this folder\nThis button runs `mh-rescan-folder'")
-  (mh-pack-folder (folder) "mail/repack"
-    "Repack this folder\nThis button runs `mh-pack-folder'")
-  (mh-tool-bar-search (folder) "search"
-    "Search\nThis button runs `mh-tool-bar-search-function'")
-  (mh-visit-folder (folder) "fld-open"
-    "Visit other folder\nThis button runs `mh-visit-folder'")
-  ;; Letter buffer buttons
-  (mh-send-letter (letter) "mail/send" "Send this letter")
-  (mh-compose-insertion (letter) "attach" "Insert attachment")
-  (ispell-message (letter) "spell" "Check spelling")
-  (save-buffer (letter) "save" "Save current buffer to its file"
-    (buffer-modified-p))
-  (undo (letter) "undo" "Undo last operation")
-  (kill-region (letter) "cut"
-    "Cut (kill) text in region between mark and current position")
-  (menu-bar-kill-ring-save (letter) "copy"
-    "Copy text in region between mark and current position")
-  (yank (letter) "paste" "Paste (yank) text cut or copied earlier")
-  (mh-fully-kill-draft (letter) "close" "Kill this draft")
-  ;; Common buttons
-  (mh-tool-bar-customize (folder letter) "preferences" "MH-E Preferences")
-  (mh-tool-bar-folder-help (folder) "help"
-    "Help! (general help)\nThis button runs `info'")
-  (mh-tool-bar-letter-help (letter) "help"
-    "Help! (general help)\nThis button runs `info'")
-  ;; Folder narrowed to sequence buttons
-  (mh-widen (sequence) "widen"
-    "Widen from the sequence\nThis button runs `mh-widen'"))
+ (mh-page-msg (folder) "page-down" "Page the current message forwards
+This button runs `mh-page-msg'")
+ (mh-next-undeleted-msg (folder) "right-arrow" "Go to the next undeleted message
+The button runs `mh-next-undeleted-msg'")
+ (mh-delete-msg (folder) "close" "Mark this message for deletion
+This button runs `mh-delete-msg'")
+ (mh-refile-msg (folder) "mail/refile" "Refile this message
+This button runs `mh-refile-msg'")
+ (mh-undo (folder) "undo" "Undo last operation
+This button runs `undo'"
+          (mh-outstanding-commands-p))
+ (mh-execute-commands (folder) "execute" "Perform moves and deletes
+This button runs `mh-execute-commands'"
+                      (mh-outstanding-commands-p))
+ (mh-toggle-tick (folder) "highlight" "Toggle tick mark
+This button runs `mh-toggle-tick'")
+ (mh-toggle-showing (folder) "show" "Toggle showing message
+This button runs `mh-toggle-showing'")
+ (mh-tool-bar-reply-from (folder) "mail/reply-from" "Reply to \"from\"")
+ (mh-tool-bar-reply-to (folder) "mail/reply-to" "Reply to \"to\"")
+ (mh-tool-bar-reply-all (folder) "mail/reply-all" "Reply to \"all\"")
+ (mh-reply (folder) "mail/reply" "Reply to this message
+This button runs `mh-reply'")
+ (mh-alias-grab-from-field (folder) "mail/alias" "Grab From alias
+This button runs `mh-alias-grab-from-field'"
+                           (and (mh-extract-from-header-value)
+                                (not (mh-alias-for-from-p))))
+ (mh-send (folder) "mail/compose" "Compose new message
+This button runs `mh-send'")
+ (mh-rescan-folder (folder) "refresh" "Rescan this folder
+This button runs `mh-rescan-folder'")
+ (mh-pack-folder (folder) "mail/repack" "Repack this folder
+This button runs `mh-pack-folder'")
+ (mh-tool-bar-search (folder) "search" "Search
+This button runs `mh-tool-bar-search-function'")
+ (mh-visit-folder (folder) "fld-open" "Visit other folder
+This button runs `mh-visit-folder'")
+ ;; Letter buffer buttons
+ (mh-send-letter (letter) "mail/send" "Send this letter")
+ (mh-compose-insertion (letter) "attach" "Insert attachment")
+ (ispell-message (letter) "spell" "Check spelling")
+ (save-buffer (letter) "save" "Save current buffer to its file"
+              (buffer-modified-p))
+ (undo (letter) "undo" "Undo last operation")
+ (kill-region (letter) "cut" "Cut (kill) text in region")
+ (menu-bar-kill-ring-save (letter) "copy" "Copy text in region")
+ (yank (letter) "paste" "Paste (yank) text cut or copied earlier")
+ (mh-fully-kill-draft (letter) "close" "Kill this draft")
+ ;; Common buttons
+ (mh-tool-bar-customize (folder letter) "preferences" "MH-E Preferences")
+ (mh-tool-bar-folder-help (folder) "help" "Help! (general help)
+This button runs `info'")
+ (mh-tool-bar-letter-help (letter) "help" "Help! (general help)
+This button runs `info'")
+ ;; Folder narrowed to sequence buttons
+ (mh-widen (sequence) "widen" "Widen from the sequence
+This button runs `mh-widen'"))
 
 (provide 'mh-tool-bar)
 
--- a/lisp/mh-e/mh-utils.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/mh-e/mh-utils.el	Sat Mar 04 23:07:13 2006 +0000
@@ -81,69 +81,80 @@
   "Delete the next LINES lines."
   (delete-region (point) (progn (forward-line lines) (point))))
 
-(defvar mh-image-load-path nil
-  "Directory where images for MH-E are found.
-If nil, then the function `mh-image-load-path' will search for
-the images in \"../../etc/images\" relative to the files in
-\"lisp/mh-e\".")
+;;;###mh-autoload
+(defun mh-image-load-path-for-library (library image &optional path)
+  "Return a suitable search path for images of LIBRARY.
 
-(defvar mh-image-load-path-called-flag nil
-  "Non-nil means that the function `mh-image-load-path' has been called.
-This variable is used by that function to avoid doing the work repeatedly.")
+Images for LIBRARY are searched for in \"../../etc/images\" and
+\"../etc/images\" relative to the files in \"lisp/LIBRARY\", in
+`image-load-path', or in `load-path'.
 
-;;;###mh-autoload
-(defun mh-image-load-path ()
-  "Ensure that the MH-E images are accessible by `find-image'.
+This function returns value of `load-path' augmented with the
+path to IMAGE.  If PATH is given, it is used instead of
+`load-path'.
 
-Images for MH-E are found in \"../../etc/images\" relative to the
-files in \"lisp/mh-e\", in `image-load-path', or in `load-path'.
-This function saves the actual location found in the variable
-`mh-image-load-path'. If the images on your system are actually
-located elsewhere, then set the variable `mh-image-load-path'
-before starting MH-E.
+Here is an example that uses a common idiom to provide
+compatibility with versions of Emacs that lack the variable
+`image-load-path':
 
-If `image-load-path' exists (since Emacs 22), then the contents
-of the variable `mh-image-load-path' is added to it if isn't
-already there. Otherwise, the contents of the variable
-`mh-image-load-path' is added to the `load-path' if it isn't
-already there.
-
-See also variable `mh-image-load-path-called-flag'."
-  (unless mh-image-load-path-called-flag
+  (let ((load-path
+         (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\" 'load-path))
+        (image-load-path
+         (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\" 'image-load-path)))
+    (mh-tool-bar-folder-buttons-init))"
+  (unless library (error "No library specified"))
+  (unless image   (error "No image specified"))
+  (let ((image-directory))
     (cond
-     (mh-image-load-path)               ; user setting exists
-     ((let (mh-library-name)            ; try relative setting
-        ;; First, find mh-e in the load-path.
-        (setq mh-library-name (locate-library "mh-e"))
-        (if (not mh-library-name)
-            (error "Can not find MH-E in load-path"))
-        ;; And then set mh-image-load-path relative to that.
-        (setq mh-image-load-path
-              (expand-file-name (concat
-                                 (file-name-directory mh-library-name)
-                                 "../../etc/images")))
-        (file-exists-p (expand-file-name "mh-logo.xpm" mh-image-load-path))))
-     ((mh-image-search-load-path "mh-logo.xpm")
-      ;; Images in image-load-path.
-      (setq mh-image-load-path
-	    (file-name-directory (mh-image-search-load-path "mh-logo.xpm"))))
-     ((locate-library "mh-logo.xpm")
-      ;; Images in load-path.
-      (setq mh-image-load-path
-	    (file-name-directory (locate-library "mh-logo.xpm")))))
+     ;; Try relative setting.
+     ((let (library-name d1ei d2ei)
+        ;; First, find library in the load-path.
+        (setq library-name (locate-library library))
+        (if (not library-name)
+            (error "Cannot find library %s in load-path" library))
+        ;; And then set image-directory relative to that.
+        (setq
+         ;; Go down 2 levels.
+         d2ei (expand-file-name
+               (concat (file-name-directory library-name) "../../etc/images"))
+         ;; Go down 1 level.
+         d1ei (expand-file-name
+               (concat (file-name-directory library-name) "../etc/images")))
+        (setq image-directory
+              ;; Set it to nil if image is not found.
+              (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
+                    ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
+     ;; Check for images in image-load-path or load-path.
+     ((let ((img image)
+            (dir (or
+                  ;; Images in image-load-path.
+                  (mh-image-search-load-path image)
+                  ;; Images in load-path.
+                  (locate-library image)))
+            parent)
+        ;; Since the image might be in a nested directory (for
+        ;; example, mail/attach.pbm), adjust `image-directory'
+        ;; accordingly.
+        (and dir
+             (setq dir (file-name-directory dir))
+             (progn
+               (while (setq parent (file-name-directory img))
+                 (setq img (directory-file-name parent)
+                       dir (expand-file-name "../" dir)))
+               (setq image-directory dir)))))
+     (t
+      (error "Could not find image %s for library %s" image library)))
 
-    (if (not (file-exists-p mh-image-load-path))
-        (error "Directory %s in mh-image-load-path does not exist"
-               mh-image-load-path))
-    (if (not (file-exists-p
-              (expand-file-name "mh-logo.xpm" mh-image-load-path)))
-      (error "Directory %s in mh-image-load-path does not contain MH-E images"
-             mh-image-load-path))
-    (if (boundp 'image-load-path)
-        (add-to-list 'image-load-path mh-image-load-path)
-      (add-to-list 'load-path mh-image-load-path))
-
-    (setq mh-image-load-path-called-flag t)))
+    ;; Return augmented `image-load-path' or `load-path'.
+    (cond ((and path (symbolp path))
+           (nconc (list image-directory)
+                  (delete image-directory
+                          (if (boundp path)
+                              (copy-sequence (symbol-value path))
+                            nil))))
+          (t
+           (nconc (list image-directory)
+                  (delete image-directory (copy-sequence load-path)))))))
 
 ;;;###mh-autoload
 (defun mh-make-local-vars (&rest pairs)
@@ -159,6 +170,23 @@
     (funcall function (car list))
     (setq list (cdr list))))
 
+(defvar mh-pick-regexp-chars ".*$["
+  "List of special characters in pick regular expressions.")
+
+;;;###mh-autoload
+(defun mh-quote-pick-expr (pick-expr)
+  "Quote `mh-pick-regexp-chars' in PICK-EXPR.
+PICK-EXPR is a list of strings. Return nil if PICK-EXPR is nil."
+  (let ((quoted-pick-expr))
+    (dolist (string pick-expr)
+      (when (and string
+                 (not (string-equal string "")))
+        (loop for i from 0 to (1- (length mh-pick-regexp-chars)) do
+              (let ((s (string ?\\ (aref mh-pick-regexp-chars i))))
+                (setq string (mh-replace-regexp-in-string s s string t t))))
+        (setq quoted-pick-expr (append quoted-pick-expr (list string)))))
+    quoted-pick-expr))
+
 ;;;###mh-autoload
 (defun mh-replace-string (old new)
   "Replace all occurrences of OLD with NEW in the current buffer.
@@ -177,23 +205,26 @@
 ;;;###mh-autoload
 (defun mh-logo-display ()
   "Modify mode line to display MH-E logo."
-  (mh-image-load-path)
   (mh-do-in-gnu-emacs
-   (add-text-properties
-    0 2
-    `(display ,(or mh-logo-cache
-                   (setq mh-logo-cache
-                         (mh-funcall-if-exists
-                          find-image '((:type xpm :ascent center
-                                              :file "mh-logo.xpm"))))))
-    (car mode-line-buffer-identification)))
+    (let ((load-path (mh-image-load-path-for-library
+                      "mh-e" "mh-logo.xpm" 'load-path))
+          (image-load-path (mh-image-load-path-for-library
+                            "mh-e" "mh-logo.xpm" 'image-load-path)))
+      (add-text-properties
+       0 2
+       `(display ,(or mh-logo-cache
+                      (setq mh-logo-cache
+                            (mh-funcall-if-exists
+                             find-image '((:type xpm :ascent center
+                                                 :file "mh-logo.xpm"))))))
+       (car mode-line-buffer-identification))))
   (mh-do-in-xemacs
-   (setq modeline-buffer-identification
-         (list
-          (if mh-modeline-glyph
-              (cons modeline-buffer-id-left-extent mh-modeline-glyph)
-            (cons modeline-buffer-id-left-extent "XEmacs%N:"))
-          (cons modeline-buffer-id-right-extent " %17b")))))
+    (setq modeline-buffer-identification
+          (list
+           (if mh-modeline-glyph
+               (cons modeline-buffer-id-left-extent mh-modeline-glyph)
+             (cons modeline-buffer-id-left-extent "XEmacs%N:"))
+           (cons modeline-buffer-id-right-extent " %17b")))))
 
 
 
@@ -526,14 +557,19 @@
 ;;;###mh-autoload
 (defun mh-folder-list (folder)
   "Return FOLDER and its descendents.
-Returns a list of strings. For example,
-
-  '(\"inbox\" \"lists\" \"lists/mh-e\").
+FOLDER may have a + prefix. Returns a list of strings without the
++ prefix. If FOLDER is nil, then all folders are considered. For
+example, if your Mail directory only contains the folders +inbox,
++outbox, +lists, and +lists/mh-e, then
 
-If folder is nil, then all folders are considered. Respects the
-value of `mh-recursive-folders-flag'. If this flag is nil, and
-the sub-folders have not been explicitly viewed, then they will
-not be returned."
+  (mh-folder-list nil)
+       => (\"inbox\" \"lists\" \"lists/mh-e\" \"outbox\")
+  (mh-folder-list \"+lists\")
+       => (\"lists/mh-e\")
+
+Respects the value of `mh-recursive-folders-flag'. If this flag
+is nil, and the sub-folders have not been explicitly viewed, then
+they will not be returned."
   (let ((folder-list))
     ;; Normalize folder. Strip leading +. Add trailing slash (done in
     ;; two steps to avoid infinite loops when replacing "/*$" with "/"
@@ -542,16 +578,16 @@
     ;; returns all the files in / if given an empty string or +.
     (when folder
       (setq folder (mh-replace-regexp-in-string "^\+" "" folder))
-      (setq folder (mh-replace-regexp-in-string "/+$" "" folder))
-      (setq folder (concat folder "/"))
-      (if (equal folder "")
-        (setq folder nil)))
+      (setq folder (mh-replace-regexp-in-string "/+$" "" folder)))
+    ;; Add provided folder to list, unless all folders are asked for.
+    (unless (null folder)
+      (setq folder-list (list folder)))
     (loop for f in (mh-sub-folders folder) do
-          (setq folder-list (append folder-list (list (concat folder (car f)))))
-          (if (mh-children-p f)
-              (setq folder-list
-                    (append folder-list
-                            (mh-folder-list (concat folder (car f)))))))
+          (setq folder-list
+                (append folder-list
+                        (if (mh-children-p f)
+                            (mh-folder-list (concat folder "/" (car f)))
+                          (list (concat folder "/" (car f)))))))
     folder-list))
 
 ;;;###mh-autoload
--- a/lisp/midnight.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/midnight.el	Sat Mar 04 23:07:13 2006 +0000
@@ -179,20 +179,21 @@
 lifetime, i.e., its \"age\" when it will be purged."
   (interactive)
   (let ((tm (float-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
-        (bufs (buffer-list)) buf delay cbld bn)
-    (while (setq buf (pop bufs))
-      (setq bts (midnight-buffer-display-time buf) bn (buffer-name buf)
-            delay (if bts (- tm bts) 0) cbld (clean-buffer-list-delay bn))
-      (message "[%s] `%s' [%s %d]" ts bn (if bts (round delay)) cbld)
-      (unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
-                                 'string-match)
-                  (midnight-find bn clean-buffer-list-kill-never-buffer-names
-                                 'string-equal)
-                  (get-buffer-process buf)
-                  (and (buffer-file-name buf) (buffer-modified-p buf))
-                  (get-buffer-window buf 'visible) (< delay cbld))
-        (message "[%s] killing `%s'" ts bn)
-        (kill-buffer buf)))))
+        delay cbld bn)
+    (dolist (buf (buffer-list))
+      (when (buffer-live-p buf)
+	(setq bts (midnight-buffer-display-time buf) bn (buffer-name buf)
+	      delay (if bts (- tm bts) 0) cbld (clean-buffer-list-delay bn))
+	(message "[%s] `%s' [%s %d]" ts bn (if bts (round delay)) cbld)
+	(unless (or (midnight-find bn clean-buffer-list-kill-never-regexps
+				   'string-match)
+		    (midnight-find bn clean-buffer-list-kill-never-buffer-names
+				   'string-equal)
+		    (get-buffer-process buf)
+		    (and (buffer-file-name buf) (buffer-modified-p buf))
+		    (get-buffer-window buf 'visible) (< delay cbld))
+	  (message "[%s] killing `%s'" ts bn)
+	  (kill-buffer buf))))))
 
 ;;; midnight hook
 
--- a/lisp/net/rcirc.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/net/rcirc.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1635,12 +1635,13 @@
 (defvar rcirc-url-regexp
   (rx-to-string
    `(and word-boundary
-	 (or "www."
-	     (and (or "http" "https" "ftp" "file" "gopher" "news" "telnet" 
-		      "wais" "mailto")
-		  "://"
-		  (1+ (char "-a-zA-Z0-9_."))
-		  (optional ":" (1+ (char "0-9"))))
+	 (or (and 
+	      (or (and (or "http" "https" "ftp" "file" "gopher" "news" 
+			   "telnet" "wais" "mailto")
+		       "://")
+		  "www.")
+	      (1+ (char "-a-zA-Z0-9_."))
+	      (optional ":" (1+ (char "0-9"))))
 	     (and (1+ (char "-a-zA-Z0-9_."))
 		  (or ".com" ".net" ".org")
 		  word-boundary))
--- a/lisp/progmodes/gdb-ui.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/progmodes/gdb-ui.el	Sat Mar 04 23:07:13 2006 +0000
@@ -71,17 +71,17 @@
 ;;; Known Bugs:
 
 ;; 1) Strings that are watched don't update in the speedbar when their
-;; contents change.
+;; contents change unless the first character changes.
 ;; 2) Cannot handle multiple debug sessions.
-
-;;; Problems with watch expressions:
+;; 3) Initially, the assembler buffer does not display the cursor at the
+;; current line if the line is not visible in the window (but when testing
+;; gdb-assembler-custom with a lisp debugger it does!).
+
+;;; Problems with watch expressions, GDB/MI:
 
 ;; 1) They go out of scope when the inferior is re-run.
-;; 2) -var-update reports that an out of scope variable has changed:
-;;    changelist=[{name="var1",in_scope="false"}], but the value can't be accessed.
-;;    (-var-list-children, in contrast allows you to create variable objects of
-;;      the children when they are out of scope and get their values).
-;; 3) VARNUM increments even when vaiable object is not created (maybe trivial).
+;; 2) -stack-list-locals has a type field but also prints type in values field.
+;; 3) VARNUM increments even when vairable object is not created (maybe trivial).
 
 ;;; TODO:
 
@@ -750,15 +750,17 @@
 	(delq 'gdb-var-update gdb-pending-triggers))
   (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
     ;; Dummy command to update speedbar at right time.
-    (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn))
+    (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh))
     ;; Keep gdb-pending-triggers non-nil till end.
-    (push 'gdb-speedbar-timer gdb-pending-triggers)))
-
-(defun gdb-speedbar-timer-fn ()
+    (push 'gdb-speedbar-refresh gdb-pending-triggers)))
+
+(defun gdb-speedbar-refresh ()
   (setq gdb-pending-triggers
-	(delq 'gdb-speedbar-timer gdb-pending-triggers))
+	(delq 'gdb-speedbar-refresh gdb-pending-triggers))
   (with-current-buffer gud-comint-buffer
-    (speedbar-timer-fn)))
+    (let ((speedbar-verbosity-level 0))
+      (save-excursion
+	(speedbar-refresh)))))
 
 (defun gdb-var-delete ()
   "Delete watch expression at point from the speedbar."
@@ -819,9 +821,10 @@
 	 (dolist (var gdb-var-list)
 	   (if (string-match (concat token "\\.") (nth 1 var))
 	       (setq gdb-var-list (delq var gdb-var-list))))
-	 (setq gdb-force-update t)
-	 (with-current-buffer gud-comint-buffer
-	   (speedbar-timer-fn)))))
+	 (speedbar-change-expand-button-char ?+)
+	 (speedbar-delete-subblock indent))
+	(t (error "Ooops...  not sure what to do")))
+  (speedbar-center-buffer-smartly))
 
 (defun gdb-get-target-string ()
   (with-current-buffer gud-comint-buffer
@@ -1250,7 +1253,8 @@
   "An annotation handler for `post-prompt'.
 This begins the collection of output from the current command if that
 happens to be appropriate."
-  ;; Don't add to queue if there outstanding items or GDB is not known yet.
+  ;; Don't add to queue if there outstanding items or gdb-version is not known
+  ;; yet.
   (unless (or gdb-pending-triggers gdb-first-post-prompt)
     (gdb-get-selected-frame)
     (gdb-invalidate-frames)
@@ -2694,7 +2698,7 @@
 
 (defun gdb-reset ()
   "Exit a debugging session cleanly.
-Kills the gdb buffers and resets the source buffers."
+Kills the gdb buffers, and resets variables and the source buffers."
   (dolist (buffer (buffer-list))
     (unless (eq buffer gud-comint-buffer)
       (with-current-buffer buffer
@@ -3144,9 +3148,9 @@
    (delq 'gdb-var-update gdb-pending-triggers))
   (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
     ;; dummy command to update speedbar at right time
-    (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn))
+    (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh))
     ;; keep gdb-pending-triggers non-nil till end
-    (push 'gdb-speedbar-timer gdb-pending-triggers)))
+    (push 'gdb-speedbar-refresh gdb-pending-triggers)))
 
 ;; Registers buffer.
 ;;
--- a/lisp/progmodes/gud.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/progmodes/gud.el	Sat Mar 04 23:07:13 2006 +0000
@@ -406,18 +406,18 @@
 
 (defvar gud-speedbar-menu-items
   '(["Jump to stack frame" speedbar-edit-line
-     :visible (with-current-buffer gud-comint-buffer
-		(not (memq gud-minor-mode '(gdbmi gdba))))]
+     :visible (not (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
+		    '(gdbmi gdba)))]
     ["Edit value" speedbar-edit-line
-     :visible (with-current-buffer gud-comint-buffer
-		(memq gud-minor-mode '(gdbmi gdba)))]
+     :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
+		    '(gdbmi gdba))]
     ["Delete expression" gdb-var-delete
-     (with-current-buffer gud-comint-buffer
-       (memq gud-minor-mode '(gdbmi gdba)))]
+     :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
+		    '(gdbmi gdba))]
     ["Auto raise frame" gdb-speedbar-auto-raise
      :style toggle :selected gdb-speedbar-auto-raise
-     :visible (with-current-buffer gud-comint-buffer
-       (memq gud-minor-mode '(gdbmi gdba)))])
+     :visible (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer)
+		    '(gdbmi gdba))])
   "Additional menu items to add to the speedbar frame.")
 
 ;; Make sure our special speedbar mode is loaded
--- a/lisp/speedbar.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/speedbar.el	Sat Mar 04 23:07:13 2006 +0000
@@ -2534,20 +2534,19 @@
 	(set-buffer speedbar-buffer)
 	(speedbar-with-writable
 	  (let* ((window (get-buffer-window speedbar-buffer 0))
-		 (p (window-point window)))
+		 (p (window-point window))
+		 (start (window-start window)))
 	    (erase-buffer)
 	    (dolist (func funclst)
 	      (setq default-directory cbd)
 	      (funcall func cbd 0))
 	    (speedbar-reconfigure-keymaps)
-	    (set-window-point window p)))
+	    (set-window-point window p)
+	    (set-window-start window start)))
 	))))
 
 (defun speedbar-update-directory-contents ()
   "Update the contents of the speedbar buffer based on the current directory."
-
-  (save-excursion
-
     (let ((cbd (expand-file-name default-directory))
 	  cbd-parent
 	  (funclst (speedbar-initial-expansion-list))
@@ -2608,17 +2607,21 @@
 		 (speedbar-directory-line cbd))
 	    ;; Open it.
 	    (speedbar-expand-line)
-	  (erase-buffer)
-	  (cond (use-cache
-		 (setq default-directory
-		       (nth (1- (length speedbar-shown-directories))
-			    speedbar-shown-directories))
-		 (insert (cdr cache)))
-		(t
-	  (dolist (func funclst)
-	    (setq default-directory cbd)
-	    (funcall func cbd 0)))))
-	(goto-char (point-min)))))
+	  (let* ((window (get-buffer-window speedbar-buffer 0))
+		 (p (window-point window))
+		 (start (window-start window)))
+	    (erase-buffer)
+	    (cond (use-cache
+		   (setq default-directory
+			 (nth (1- (length speedbar-shown-directories))
+			      speedbar-shown-directories))
+		   (insert (cdr cache)))
+		  (t
+		   (dolist (func funclst)
+		     (setq default-directory cbd)
+	    (funcall func cbd 0))))
+	    (set-window-point window p)
+	    (set-window-start window start)))))
   (speedbar-reconfigure-keymaps))
 
 (defun speedbar-update-special-contents ()
@@ -2643,8 +2646,7 @@
 	  (dolist (func funclst)
 	    ;; We do not erase the buffer because these functions may
 	    ;; decide NOT to update themselves.
-	    (funcall func specialbuff)))
-      (goto-char (point-min))))
+	    (funcall func specialbuff)))))
   (speedbar-reconfigure-keymaps))
 
 (defun speedbar-set-timer (timeout)
--- a/lisp/textmodes/flyspell.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/textmodes/flyspell.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1322,7 +1322,8 @@
 The buffer to mark them in is `flyspell-large-region-buffer'."
   (let (words-not-found
 	(ispell-otherchars (ispell-get-otherchars))
-	(buffer-scan-pos flyspell-large-region-beg))
+	(buffer-scan-pos flyspell-large-region-beg)
+	(case-fold-search nil))
     (with-current-buffer flyspell-external-ispell-buffer
       (goto-char (point-min))
       ;; Loop over incorrect words, in the order they were reported,
@@ -1409,6 +1410,7 @@
 ;;*---------------------------------------------------------------------*/
 (defun flyspell-process-localwords (misspellings-buffer)
   (let (localwords
+	(case-fold-search nil)
 	(ispell-casechars (ispell-get-casechars)))
     ;; Get localwords from the original buffer
     (save-excursion
--- a/lisp/textmodes/org.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/textmodes/org.el	Sat Mar 04 23:07:13 2006 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.06
+;; Version: 4.07
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -81,6 +81,12 @@
 ;;
 ;; Changes since version 4.00:
 ;; ---------------------------
+;; Version 4.07
+;;    - Bug fixes.
+;;    - Leading stars in headlines can be hidden, so make the outline look
+;;      cleaner.
+;;    - Mouse-1 can be used to follow links.
+;;     
 ;; Version 4.06
 ;;    - HTML exporter treats targeted internal links.
 ;;    - Bug fixes.
@@ -130,7 +136,7 @@
 
 ;;; Customization variables
 
-(defvar org-version "4.06"
+(defvar org-version "4.07"
   "The version number of the file org.el.")
 (defun org-version ()
   (interactive)
@@ -794,6 +800,24 @@
   :group 'org-structure
   :type 'boolean)
 
+(defcustom org-hide-leading-stars nil
+  "Non-nil means, hide the first N-1 stars in a headline.
+This works by using the face `org-hide' for these stars.  This
+face is white for a light background, and black for a dark
+background.  You may have to customize the face `org-hide' to
+make this work.
+Changing the variable requires restart of Emacs to become effective."
+  :group 'org-structure
+  :type 'boolean)
+
+(defcustom org-odd-levels-only nil
+  "Non-nil means, skip even levels and only use odd levels for the outline.
+This has the effect that two stars are being added/taken away in
+promotion/demotion commands.  It also influences how levels are
+handled by the exporters."
+  :group 'org-structure
+  :type 'boolean)
+
 (defcustom org-adapt-indentation t
   "Non-nil means, adapt indentation when promoting and demoting.
 When this is set and the *entire* text in an entry is indented, the
@@ -1409,6 +1433,7 @@
   .title { text-align: center; }
   .todo, .deadline { color: red; }
   .done { color: green; }
+  .target { background-color: lavender; }
   pre {
 	border: 1pt solid #AEBDCC;
 	background-color: #F3F5F7;
@@ -1633,7 +1658,7 @@
 
 (defcustom org-export-html-with-timestamp nil
   "If non-nil, write `org-export-html-html-helper-timestamp'
-into the exported html text.  Otherwise, the buffer will just be saved
+into the exported HTML text.  Otherwise, the buffer will just be saved
 to a file."
   :group 'org-export
   :type 'boolean)
@@ -1651,7 +1676,7 @@
   :type 'boolean)
 
 (defcustom org-export-html-show-new-buffer nil
-  "Non-nil means, popup buffer containing the exported HTML text.
+  "Non-nil means, popup buffer containing the exported html text.
 Otherwise, the buffer will just be saved to a file and stay hidden."
   :group 'org-export
   :type 'boolean)
@@ -1677,6 +1702,16 @@
   :tag "Org Faces"
   :group 'org)
 
+(defface org-hide
+  '((((type tty) (class color)) (:foreground "blue" :weight bold))
+    (((class color) (background light)) (:foreground "white"))
+    (((class color) (background dark)) (:foreground "black"))
+;    (((class color) (background light)) (:foreground "grey90"))
+;    (((class color) (background dark)) (:foreground "grey10"))
+    (t (:inverse-video nil)))
+  "Face used for level 1 headlines."
+  :group 'org-faces)
+
 (defface org-level-1 ;; font-lock-function-name-face
   '((((type tty) (class color)) (:foreground "blue" :weight bold))
     (((class color) (background light)) (:foreground "Blue"))
@@ -1844,17 +1879,25 @@
   "Face used for time grids."
   :group 'org-faces)
 
-(defvar org-level-faces
-  '(
-    org-level-1
-    org-level-2
-    org-level-3
-    org-level-4
-    org-level-5
-    org-level-6
-    org-level-7
-    org-level-8
-    ))
+(defvar org-level-faces nil)
+
+(when (not org-level-faces)
+  (setq org-level-faces
+	'(
+	  org-level-1
+	  org-level-2
+	  org-level-3
+	  org-level-4
+	  org-level-5
+	  org-level-6
+	  org-level-7
+	  org-level-8
+	  ))
+  (when org-odd-levels-only
+    (setq org-level-faces (apply 'append (mapcar (lambda (x) (list x x))
+						 org-level-faces)))
+    (setq org-level-faces (append (cdr org-level-faces) (list 'org-level-1)))))
+
 (defvar org-n-levels (length org-level-faces))
 
 (defun org-set-regexps-and-options ()
@@ -1985,7 +2028,6 @@
   (defvar remember-data-file)
   (defvar last-arg))
 
-
 ;;; Define the mode
 
 (defvar org-mode-map (copy-keymap outline-mode-map)
@@ -2000,7 +2042,7 @@
 (defvar org-table-may-need-update t
   "Indicates that a table might need an update.
 This variable is set by `org-before-change-function'.
-`org-table-align'sets it back to nil.")
+`org-table-align' sets it back to nil.")
 (defvar org-mode-hook nil)
 (defvar org-inhibit-startup nil)        ; Dynamically-scoped param.
 (defvar org-agenda-keep-modes nil)      ; Dynamically-scoped param.
@@ -2090,6 +2132,7 @@
   (if org-xemacs-p [button2] [mouse-2]) 'org-open-at-mouse)
 (define-key org-mouse-map
   (if org-xemacs-p [button3] [mouse-3]) 'org-find-file-at-mouse)
+(define-key org-mouse-map [follow-link] 'mouse-face)
 (when org-tab-follows-link
   (define-key org-mouse-map [(tab)] 'org-open-at-point)
   (define-key org-mouse-map "\C-i" 'org-open-at-point))
@@ -2200,7 +2243,10 @@
     (save-excursion
       (goto-char (point-min))
       (while (re-search-forward re nil t)
-	(add-to-list 'rtn (downcase (match-string-no-properties 1))))
+	(add-to-list 'rtn (downcase
+                           (if (fboundp 'match-string-no-properties)
+                               (match-string-no-properties 1)
+                             (match-string 1)))))
       rtn)))
 
 (defun org-make-target-link-regexp (targets)
@@ -2274,8 +2320,6 @@
 	  ;; (3 'italic))
 	  ;; '("\\(\\s-\\|^\\)\\(_\\([a-zA-Z]+\\)_\\)\\([^a-zA-Z*]\\|$\\)"
 	  ;; (3 'underline))
-;	  (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>")
-;		'(1 'org-warning t))
 	  (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string
 			"\\|" org-quote-string "\\)\\>")
 		'(1 'org-special-keyword t))
@@ -2290,24 +2334,25 @@
 	  '("^[ \t]*\\(:.*\\)" (1 'org-table t))
 	  '("| *\\(:?=[^|\n]*\\)" (1 'org-formula t))
 	  '("^[ \t]*| *\\([#!$*_^]\\) *|" (1 'org-formula t))
-	  )))
+	  ))
+	(exp
+	 ;; The font-lock expression for headlines is complicated.  It depends
+	 ;; on two user options, and it needs to determine the level in
+	 ;; order to compute the level.
+	 (cond
+	  ((and org-level-color-stars-only (not org-hide-leading-stars))
+	   '("^\\(\\*+\\).*" 1 (nth (% (- (match-end 1) (match-beginning 1) 1) org-n-levels) org-level-faces) nil t))
+	  ((and (not org-level-color-stars-only) org-hide-leading-stars)
+	   '("^\\(\\**\\)\\(\\*.*\\)" (1 'org-hide) (2 (nth (% (- (match-end 1) (match-beginning 1)) org-n-levels) org-level-faces) nil t)))
+	  ((and org-level-color-stars-only org-hide-leading-stars)
+	   '("^\\(\\**\\)\\(\\*\\).*" (1 'org-hide) (2 (nth (% (- (match-end 1) (match-beginning 1)) org-n-levels) org-level-faces) nil t)))
+	  (t
+	   '("^\\(\\*+\\).*" 0 (nth (% (- (match-end 1) (match-beginning 1) 1) org-n-levels) org-level-faces) nil t)))))
+    
+    ;; Now set the full font-lock-keywords
     (set (make-local-variable 'org-font-lock-keywords)
 	 (append
-	  (if org-noutline-p     ; FIXME:  I am not sure if eval will work
-				 ; on XEmacs if noutline is ever ported
-	      `((eval . (list "^\\(\\*+\\).*"
-			      ,(if org-level-color-stars-only 1 0)
-			      '(nth
-				  (% (- (match-end 1) (match-beginning 1) 1)
-				     org-n-levels)
-				  org-level-faces)
-			      nil t)))
-	    `(("^\\(\\(\\*+\\)[^\r\n]*\\)[\n\r]"
-	       (,(if org-level-color-stars-only 2 0)
-	        (nth (% (- (match-end 2) (match-beginning 2) 1)
-			org-n-levels)
-		     org-level-faces)
-		nil t))))
+	  (if org-xemacs-p (list exp) (list (cons 'eval (list 'quote exp))))
 	  org-font-lock-extra-keywords))
     (set (make-local-variable 'font-lock-defaults)
 	 '(org-font-lock-keywords t nil nil backward-paragraph))
@@ -2731,19 +2776,32 @@
        (equal (char-before) ?*)
        (forward-char 1)))
 
+(defun org-get-legal-level (level change)
+  "Rectify a level change under the influence of `org-odd-levels-only'
+LEVEL is a current level, CHANGE is by how much the level should be
+modified.  Even if CHANGE is nil, LEVEL may be returned modified because
+even level numbers will become the next higher odd number."
+  (if org-odd-levels-only
+      (cond ((not change) (1+ (* 2 (/ level 2))))
+	    ((> change 0) (1+ (* 2 (/ (+ level (* 2 change)) 2))))
+	    ((< change 0) (max 1 (1+ (* 2 (/ (+ level (* 2 change)) 2))))))
+    (max 1 (+ level change))))
+
 (defun org-promote ()
   "Promote the current heading higher up the tree.
 If the region is active in `transient-mark-mode', promote all headings
 in the region."
   (org-back-to-heading t)
   (let* ((level (save-match-data (funcall outline-level)))
-	 (up-head (make-string (1- level) ?*)))
+	 (up-head (make-string (org-get-legal-level level -1) ?*))
+	 (diff (abs (- level (length up-head)))))
     (if (= level 1) (error "Cannot promote to level 0. UNDO to recover"))
     (replace-match up-head nil t)
     ;; Fixup tag positioning
     (and org-auto-align-tags (org-set-tags nil t))
     (if org-adapt-indentation
-	(org-fixup-indentation "^ " "" "^ ?\\S-"))))
+	(org-fixup-indentation (if (> diff 1) "^  " "^ ") ""
+			       (if (> diff 1) "^ ? ?\\S-" "^ ?\\S-")))))
 
 (defun org-demote ()
   "Demote the current heading lower down the tree.
@@ -2751,12 +2809,13 @@
 in the region."
   (org-back-to-heading t)
   (let* ((level (save-match-data (funcall outline-level)))
-	 (down-head (make-string (1+ level) ?*)))
+	 (down-head (make-string (org-get-legal-level level 1) ?*))
+	 (diff (abs (- level (length down-head)))))
     (replace-match down-head nil t)
     ;; Fixup tag positioning
     (and org-auto-align-tags (org-set-tags nil t))
     (if org-adapt-indentation
-	(org-fixup-indentation "^ " "  " "^\\S-"))))
+	(org-fixup-indentation "^ " (if (> diff 1) "   " "  ") "^\\S-"))))
 
 (defun org-map-tree (fun)
   "Call FUN for every heading underneath the current one."
@@ -2885,6 +2944,7 @@
 	       (if cut "Cut" "Copied")
 	       (length org-subtree-clip)))))
 
+;; FIXME: this needs to be adapted for the odd-level-only stuff.
 (defun org-paste-subtree (&optional level tree)
   "Paste the clipboard as a subtree, with modification of headline level.
 The entire subtree is promoted or demoted in order to match a new headline
@@ -2945,6 +3005,7 @@
 	 (shift1 shift)
 	 (delta (if (> shift 0) -1 1))
 	 (func (if (> shift 0) 'org-demote 'org-promote))
+	 (org-odd-levels-only nil)
 	 beg end)
     ;; Remove the forces level indicator
     (if force-level
@@ -3827,6 +3888,7 @@
 enter a time, and this function will inform the calling routine about
 this change.  The calling routine may then choose to change the format
 used to insert the time stamp into the buffer to include the time."
+  (require 'parse-time)
   (let* ((default-time
 	   ;; Default time is either today, or, when entering a range,
 	   ;; the range start.
@@ -4348,7 +4410,7 @@
   (if org-xemacs-p [(button2)] [(mouse-2)]) 'org-agenda-goto-mouse)
 (define-key org-agenda-keymap
   (if org-xemacs-p [(button3)] [(mouse-3)]) 'org-agenda-show-mouse)
-
+(define-key org-agenda-keymap [follow-link] 'mouse-face)
 (easy-menu-define org-agenda-menu org-agenda-mode-map "Agenda menu"
   '("Agenda"
     ("Agenda Files")
@@ -6625,10 +6687,11 @@
 		(completing-read "Tags: " 'org-tags-completion-function
 				 nil nil current 'org-tags-history)))
 	(while (string-match "[-+&]+" tags)
-	  (setq tags (replace-match ":" t t tags)))
-	(unless (setq empty (string-match "\\`[\t ]*\\'" tags))
-	  (unless (string-match ":$" tags) (setq tags (concat tags ":")))
-	  (unless (string-match "^:" tags) (setq tags (concat ":" tags)))))
+	  (setq tags (replace-match ":" t t tags))))
+      ;; FIXME: still optimize this byt not checking when JUST-ALIGN?
+      (unless (setq empty (string-match "\\`[\t ]*\\'" tags))
+	(unless (string-match ":$" tags) (setq tags (concat tags ":")))
+	(unless (string-match "^:" tags) (setq tags (concat ":" tags))))
       (if (equal current "")
 	  (progn
 	    (end-of-line 1)
@@ -7192,8 +7255,8 @@
       (mh-show-buffer-message-number))))
 
 (defun org-mhe-get-header (header)
-  "Return a header of the message in folder mode.  This will create a
-show buffer for the corresponding message.  If you have a more clever
+  "Return a header of the message in folder mode. This will create a
+show buffer for the corresponding message. If you have a more clever
 idea..."
   (let* ((folder (org-mhe-get-message-folder))
          (num (org-mhe-get-message-num))
@@ -10454,10 +10517,11 @@
       (erase-buffer)
       (insert string)
       (org-mode)
-      ;; Find targets in comments and move them out of comments
+      ;; Find targets in comments and move them out of comments,
+      ;; but mark them as targets that should be invisible
       (goto-char (point-min))
       (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
-	(replace-match "\\1"))
+	(replace-match "\\1(INVISIBLE)"))
       ;; Find matches for radio targets and turn them into links
       (goto-char (point-min))
       (while (re-search-forward re-radio nil t)
@@ -10475,12 +10539,34 @@
     (kill-buffer " org-mode-tmp")
     rtn))
 
-(defun org-solidify-link-text (s)
+(defun org-solidify-link-text (s &optional alist)
   "Take link text and make a safe target out of it."
   (save-match-data
-    (mapconcat
-     'identity
-     (org-split-string s "[ \t\r\n]+") "--")))
+    (let* ((rtn
+	    (mapconcat
+	     'identity
+	     (org-split-string s "[ \t\r\n]+") "--"))
+	   (a (assoc rtn alist)))
+      (or (cdr a) rtn))))
+
+(defun org-convert-to-odd-levels ()
+  "Convert an org-mode file with all levels allowed to one with odd levels.
+This will leave level 1 alone, convert level 2 to level 3, level 3 to
+level 5 etc."
+  (interactive)
+  (when (yes-or-no-p "Are you sure you want to globally change levels? ")
+    (let ((org-odd-levels-only nil) n)
+      (save-excursion
+	(goto-char (point-min))
+	(while (re-search-forward "^\\*\\*+" nil t)
+	  (setq n (1- (length (match-string 0))))
+	  (while (>= (setq n (1- n)) 0)
+	    (org-demote))
+	  (end-of-line 1))))))
+
+(defun org-tr-level (n)
+  "Make N odd if required."
+  (if org-odd-levels-only (1+ (/ n 2)) n))
 
 (defvar org-last-level nil) ; dynamically scoped variable
 
@@ -10561,6 +10647,7 @@
 			 ;; This is a headline
 			 (progn
 			   (setq level (- (match-end 1) (match-beginning 1))
+				 level (org-tr-level level)
 				 txt (match-string 3 line)
 				 todo
 				 (or (and (match-beginning 2)
@@ -10599,7 +10686,7 @@
       (cond
        ((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line)
 	;; a Headline
-	(setq level (- (match-end 1) (match-beginning 1))
+	(setq level (org-tr-level (- (match-end 1) (match-beginning 1)))
 	      txt (match-string 2 line))
 	(org-ascii-level-start level txt umax))
        (t (insert line "\n"))))
@@ -10860,6 +10947,7 @@
          (language    org-export-default-language)
 	 (text        nil)
          (lang-words  nil)
+	 (target-alist nil) tg
 	 (head-count  0) cnt
 	 (start       0)
 	 ;; FIXME: The following returns always nil under XEmacs
@@ -10923,11 +11011,13 @@
 	  (progn
 	    (insert (format "<H2>%s</H2>\n" (nth 3 lang-words)))
 	    (insert "<ul>\n")
+	    (setq lines
 	    (mapcar '(lambda (line)
 		       (if (string-match org-todo-line-regexp line)
 			   ;; This is a headline
 			   (progn
 			     (setq level (- (match-end 1) (match-beginning 1))
+				   level (org-tr-level level)
 				   txt (save-match-data
 					 (org-html-expand
 					  (match-string 3 line)))
@@ -10957,15 +11047,28 @@
 					 (while (>= (setq cnt (1- cnt)) 0)
 					   (insert "</ul>"))
 					 (insert "\n")))
+				   ;; Check for targets
+				   (while (string-match org-target-regexp line)
+				     (setq tg (match-string 1 line)
+					   line (replace-match
+						 (concat "@<span class=\"target\">" tg "@</span> ")
+						 t t line))
+				     (push (cons (org-solidify-link-text tg)
+						 (format "sec-%d" head-count))
+					   target-alist))
+				   (while (string-match "&lt;\\(&lt;\\)+\\|&gt;\\(&gt;\\)+" txt)
+				     (setq txt (replace-match "" t t txt)))
 				   (insert
 				    (format
 				     (if todo
 					 "<li><a href=\"#sec-%d\"><span class=\"todo\">%s</span></a>\n"
 				       "<li><a href=\"#sec-%d\">%s</a>\n")
 				     head-count txt))
+
 				   (setq org-last-level level))
-			       ))))
-		    lines)
+			       )))
+		       line)
+		    lines))
 	    (while (> org-last-level 0)
 	      (setq org-last-level (1- org-last-level))
 	      (insert "</ul>\n"))
@@ -11001,18 +11104,31 @@
 
 
 	  ;; make targets to anchors
-	  (while (string-match "<<<?\\([^<>]*\\)>>>?[ \t]*\n?" line)
-	    (setq line (replace-match
-			(concat "@<a name=\""
-				(org-solidify-link-text (match-string 1 line))
-				"\">\\nbsp@</a>")
-			t t line)))
+	  (while (string-match "<<<?\\([^<>]*\\)>>>?\\((INVISIBLE)\\)?[ \t]*\n?" line)
+	    (cond
+	     ((match-end 2)
+	      (setq line (replace-match
+			  (concat "@<a name=\"" 
+				  (org-solidify-link-text (match-string 1 line))
+				  "\">\\nbsp@</a>")
+			  t t line)))
+	     ((and org-export-with-toc (equal (string-to-char line) ?*))
+	      (setq line (replace-match
+			  (concat "@<span class=\"target\">" (match-string 1 line) "@</span> ")
+;			  (concat "@<i>" (match-string 1 line) "@</i> ")
+			  t t line)))
+	     (t
+	      (setq line (replace-match
+			  (concat "@<a name=\"" 
+				  (org-solidify-link-text (match-string 1 line))
+				  "\" class=\"target\">" (match-string 1 line) "@</a> ")
+			  t t line)))))	      
 	  ;; Replace internal links
 	  (while (string-match org-bracket-link-regexp line)
 	    (setq line (replace-match
 			(concat
 			    "@<a href=\"#"
-			    (org-solidify-link-text (match-string 1 line))
+			    (org-solidify-link-text (match-string 1 line) target-alist)
 			    "\">"
 			    (match-string (if (match-end 3) 3 1) line)
 			    "@</a>")
@@ -11087,7 +11203,7 @@
 	  (cond
 	   ((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line)
 	    ;; This is a headline
-	    (setq level (- (match-end 1) (match-beginning 1))
+	    (setq level (org-tr-level (- (match-end 1) (match-beginning 1)))
 		  txt (match-string 2 line))
 	    (if (<= level umax) (setq head-count (+ head-count 1)))
 	    (when in-local-list
@@ -11822,6 +11938,7 @@
 (define-key org-mode-map "\C-c\C-xb"      'org-export-as-html-and-open)
 (define-key org-mode-map "\C-c\C-x\C-b"   'org-export-as-html-and-open)
 
+(define-key org-mode-map "\C-c\C-x\C-k"   'org-cut-special)
 (define-key org-mode-map "\C-c\C-x\C-w"   'org-cut-special)
 (define-key org-mode-map "\C-c\C-x\M-w"   'org-copy-special)
 (define-key org-mode-map "\C-c\C-x\C-y"   'org-paste-special)
@@ -12244,7 +12361,9 @@
      ["Demote Heading"  org-metaright (not (org-at-table-p))]
      ["Demote Subtree"  org-shiftmetaright (not (org-at-table-p))]
      "--"
-     ["Archive Subtree" org-archive-subtree t])
+     ["Archive Subtree" org-archive-subtree t]
+     "--"
+     ["Convert file to odd levels" org-convert-to-odd-levels t])
     "--"
     ("TODO Lists"
      ["TODO/DONE/-" org-todo t]
--- a/lisp/textmodes/reftex-index.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/textmodes/reftex-index.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1034,7 +1034,7 @@
 ;; Index map
 (define-key reftex-index-map (if (featurep 'xemacs) [(button2)] [(mouse-2)])
   'reftex-index-mouse-goto-line-and-hide)
-(define-key reftex-index-map [follow-mouse] 'mouse-face)
+(define-key reftex-index-map [follow-link] 'mouse-face)
 
 (substitute-key-definition
  'next-line 'reftex-index-next reftex-index-map global-map)
--- a/lisp/textmodes/reftex-toc.el	Tue Feb 28 17:35:08 2006 +0000
+++ b/lisp/textmodes/reftex-toc.el	Sat Mar 04 23:07:13 2006 +0000
@@ -1011,7 +1011,7 @@
 ;; Table of Contents map
 (define-key reftex-toc-map (if (featurep 'xemacs) [(button2)] [(mouse-2)])
   'reftex-toc-mouse-goto-line-and-hide)
-(define-key reftex-toc-map [follow-mouse] 'mouse-face)
+(define-key reftex-toc-map [follow-link] 'mouse-face)
 
 (substitute-key-definition
  'next-line 'reftex-toc-next reftex-toc-map global-map)
--- a/lispref/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/lispref/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,11 @@
+2006-03-02  Kim F. Storm  <storm@cua.dk>
+
+	* keymaps.texi (Tool Bar): Add tool-bar-border.
+
+2006-02-28  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* loading.texi (Load Suffixes): Rephrase last paragraph.  Fix typos.
+
 2006-02-27  Luc Teirlinck  <teirllm@auburn.edu>
 
 	* elisp.texi (Top): Include "Load Suffixes" in the detailed menu.
--- a/lispref/keymaps.texi	Tue Feb 28 17:35:08 2006 +0000
+++ b/lispref/keymaps.texi	Sat Mar 04 23:07:13 2006 +0000
@@ -2498,6 +2498,15 @@
 The value is an integer, a number of pixels.  The default is 1.
 @end defvar
 
+@tindex tool-bar-border
+@defvar tool-bar-border
+This variable specifies the height of the border drawn below the tool
+bar area.  An integer value specifies height as a number of pixels.
+If the value is one of @code{internal-border-width} (the default) or
+@code{border-width}, the tool bar border height corresponds to the
+corresponding frame parameter.
+@end defvar
+
   You can define a special meaning for clicking on a tool bar item with
 the shift, control, meta, etc., modifiers.  You do this by setting up
 additional items that relate to the original item through the fake
--- a/lispref/loading.texi	Tue Feb 28 17:35:08 2006 +0000
+++ b/lispref/loading.texi	Sat Mar 04 23:07:13 2006 +0000
@@ -180,7 +180,7 @@
 This is a list of suffixes indicating (compiled or source) Emacs Lisp
 files.  It should not include the empty string.  @code{load} uses
 these suffixes in order when it appends Lisp suffixes to the specified
-file name.  The standard value is @code{(".elc" "el")} which produces
+file name.  The standard value is @code{(".elc" ".el")} which produces
 the behavior described in the previous section.
 @end defvar
 
@@ -206,17 +206,16 @@
 This takes both @code{load-suffixes} and @code{load-file-rep-suffixes}
 into account.  If @code{load-suffixes}, @code{jka-compr-load-suffixes}
 and @code{load-file-rep-suffixes} all have their standard values, this
-function returns @code{(".elc" "elc.gz" ".el" ".el.gz")} if Auto
+function returns @code{(".elc" ".elc.gz" ".el" ".el.gz")} if Auto
 Compression mode is enabled and @code{(".elc" ".el")} if Auto
 Compression mode is disabled.
 @end defun
 
-To summarize, if both its @var{nosuffix} and @var{must-suffix}
-arguments are @code{nil}, @code{load} first tries the suffixes in the
-return value of @code{get-load-suffixes} and then those in
+To summarize, @code{load} normally first tries the suffixes in the
+value of @code{(get-load-suffixes)} and then those in
 @code{load-file-rep-suffixes}.  If @var{nosuffix} is non-@code{nil},
-it only tries the latter and is @var{must-suffix} is non-@code{nil},
-only the former.
+it skips the former group, and if @var{must-suffix} is non-@code{nil},
+it skips the latter group.
 
 @node Library Search
 @section Library Search
@@ -753,7 +752,7 @@
 with @code{load}.  If @var{filename} is not supplied, then the name of
 the symbol @var{feature} is used as the base file name to load.
 However, in this case, @code{require} insists on finding @var{feature}
-with an added @samp{el} or @samp{.elc} suffix (possibly extended with
+with an added @samp{.el} or @samp{.elc} suffix (possibly extended with
 a compression suffix); a file whose name is just @var{feature} won't
 be used.  (The variable @code{load-suffixes} specifies the exact
 required Lisp suffixes.)
--- a/man/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/man/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,13 @@
+2006-03-01  Carsten Dominik  <dominik@science.uva.nl>
+
+	* org.texi: (Interaction): Added item about `org-mouse.el' by
+	Piotr Zielinski.
+	(Managing links): Documented that also mouse-1 can be used to
+	activate a link.
+	(Headlines, FAQ): Added entry about hiding leading stars.
+	(Miscellaneous): Resorted the sections in this chapter to a more
+	logical sequence.
+
 2006-02-28  Andre Spiegel  <spiegel@gnu.org>
 
 	* files.texi (Old Versions): Clarify operation of C-x v =.
--- a/man/org.texi	Tue Feb 28 17:35:08 2006 +0000
+++ b/man/org.texi	Sat Mar 04 23:07:13 2006 +0000
@@ -4,8 +4,8 @@
 @setfilename ../info/org
 @settitle Org Mode Manual
 
-@set VERSION 4.06
-@set DATE February 2006
+@set VERSION 4.07
+@set DATE March 2006
 
 @dircategory Emacs
 @direntry
@@ -188,9 +188,10 @@
 
 * Completion::                  M-TAB knows what you need
 * Customization::               Adapting Org-mode to your taste
+* Clean view::                  Getting rid of leading stars in the outline
+* TTY keys::                    Using Org-mode on a tty
 * FAQ::                         Frequently asked questions
 * Interaction::                 Other Emacs packages
-* TTY keys::                    Using Org-mode on a tty
 * Bugs::                        Things which do not work perfectly
 * Acknowledgments::             These people provided feedback and more
 
@@ -378,6 +379,9 @@
     more text
 * Another top level headline
 @end example
+@noindent Some people find the many stars too noisy and would prefer an
+outline that has whitespace followed by a single star as headline
+starters.  @ref{Clean view} describes a setup to realize this.
 
 @node Visibility cycling, Motion, Headlines, Document Structure
 @section Visibility cycling
@@ -512,7 +516,9 @@
 @item M-S-@key{down}
 Move subtree down (swap with next subtree of same level)
 @kindex C-c C-x C-w
+@kindex C-c C-x C-k
 @item C-c C-x C-w
+@itemx C-c C-x C-k
 Kill subtree, i.e. remove it from buffer but save in kill ring.
 @kindex C-c C-x M-w
 @item C-c C-x M-w
@@ -627,7 +633,7 @@
 If you wish to implement a tag system to cross-correlate information,
 this can be done as well in Org-mode.  Every headline can contain a
 list of tags, at the end of the headline.  Tags are normal words
-containing letters and @samp{_}, but no numbers.  Tags must be
+containing letters, numbers, @samp{_}, and @samp{@@}.  Tags must be
 preceded and followed by a single colon; like @samp{:WORK:}.  Several
 tags can be specified like @samp{:WORK:URGENT:}.
 
@@ -709,16 +715,20 @@
 editing such lists, and the HTML exporter (@pxref{Exporting}) does
 parse and format them.
 
-Org-mode knows ordered and unordered lists.  Unordered list items
-start with @samp{-}, @samp{+}, or @samp{*}@footnote{When using
-@samp{*} as a bullet, lines must be indented or they will be seen as
-top-level headlines.} as bullets.  Ordered list items start with
-@samp{1.} or @samp{1)}.  Items belonging to the same list must have
-the same indentation on the first line.  In particular, if an ordered
-list reaches number @samp{10.}, also the 2--digit numbers must be
-written left-aligned with the other numbers in the list.  Indentation
-also determines the end of a list item.  It ends before the next line
-that is indented like the bullet/number, or less.  For example:
+Org-mode knows ordered and unordered lists.  Unordered list items start
+with @samp{-}, @samp{+}, or @samp{*}@footnote{When using @samp{*} as a
+bullet, lines must be indented or they will be seen as top-level
+headlines.  Also, when you are hiding leading stars to get a clean
+outline view, plain list items starting with a star are visually
+indistinguishable from true headlines.  In short: Even though @samp{*}
+is supported, it may be better to not use it for plain list items} as
+bullets.  Ordered list items start with @samp{1.} or @samp{1)}.  Items
+belonging to the same list must have the same indentation on the first
+line.  In particular, if an ordered list reaches number @samp{10.}, also
+the 2--digit numbers must be written left-aligned with the other numbers
+in the list.  Indentation also determines the end of a list item.  It
+ends before the next line that is indented like the bullet/number, or
+less.  For example:
 
 @example
 ** Lord of the Rings
@@ -1050,10 +1060,12 @@
 @cindex syntax, of formulas
 
 A formula can be any algebraic expression understood by the Emacs
-@file{calc} package.  Before evaluation by @code{calc-eval}
-(@pxref{Calling Calc from Your Lisp Programs,calc-eval,Calling calc
-from Your Lisp Programs,calc,GNU Emacs Calc Manual}), variable
-substitution takes place:
+@file{calc} package.  Note that @file{calc} has the slightly
+non-standard conversion that @samp{/} has lower precedence than
+@samp{*}, so that @samp{a/b*c} is interpreted as @samp{a/(b*c)}.  Before
+evaluation by @code{calc-eval} (@pxref{Calling Calc from Your Lisp
+Programs,calc-eval,Calling calc from Your Lisp Programs,calc,GNU Emacs
+Calc Manual}), variable substitution takes place:
 
 @example
   $        @r{refers to the current field}
@@ -1521,9 +1533,7 @@
 
 @cindex following links
 @kindex C-c C-o
-@kindex mouse-2
 @item C-c C-o
-@itemx mouse-2
 Open link at point.  This will launch a web browser for URLs (using
 @command{browse-url-at-point}), run vm/gnus/bbdb for the corresponding
 links, and execute the command in a shell link.  When the cursor is on
@@ -1542,8 +1552,11 @@
 shell link.
 
 @kindex mouse-2
+@kindex mouse-1
 @item mouse-2
-On links, @kbd{mouse-2} will open the link just like @kbd{C-c C-o} would.
+@itemx mouse-1
+On links, @kbd{mouse-2} will open the link just like @kbd{C-c C-o}
+would.  Under Emacs 22, also @kbd{mouse-1} will follow a link.
 
 @kindex mouse-3
 @item mouse-3
@@ -2487,10 +2500,13 @@
 Display original location and recenter that window.
 
 @kindex mouse-2
+@kindex mouse-1
 @kindex @key{TAB}
 @item mouse-2
+@itemx mouse-1
 @itemx @key{TAB}
-Go to the original location of the item in another window.
+Go to the original location of the item in another window.  Under Emacs
+22, also @kbd{mouse-1} will works for this.
 
 @kindex @key{RET}
 @itemx @key{RET}
@@ -2952,9 +2968,10 @@
 @menu
 * Completion::                  M-TAB knows what you need
 * Customization::               Adapting Org-mode to your taste
+* Clean view::                  Getting rid of leading stars in the outline
+* TTY keys::                    Using Org-mode on a tty
 * FAQ::                         Frequently asked questions
 * Interaction::                 Other Emacs packages
-* TTY keys::                    Using Org-mode on a tty
 * Bugs::                        Things which do not work perfectly
 * Acknowledgments::             These people provided feedback and more
 @end menu
@@ -3002,7 +3019,8 @@
 @end itemize
 @end table
 
-@node Customization, FAQ, Completion, Miscellaneous
+
+@node Customization, Clean view, Completion, Miscellaneous
 @section Customization
 @cindex customization
 @cindex options, for customization
@@ -3014,7 +3032,126 @@
 variables is available with @kbd{M-x org-customize}.  Or select
 @code{Browse Org Group} from the @code{Org->Customization} menu.
 
-@node FAQ, Interaction, Customization, Miscellaneous
+@node Clean view, TTY keys, Customization, Miscellaneous
+@section A cleaner outline view
+@cindex hiding leading stars
+@cindex clean outline view
+
+Some people find it noisy and distracting that the Org-mode headlines
+are starting with a potentially large number of stars.  For example in
+the example tree from @ref{Headlines}:
+
+@example
+* Top level headline
+** Second level
+*** 3rd level
+    some text
+*** 3rd level
+    more text
+* Another top level headline
+@end example
+
+@noindent
+Unfortunately this is deeply ingrained into the code of Org-mode and
+cannot be easily changed.  You can, however, modify the display in such
+a way that all leading stars become invisible and the outline more easy
+to read.  To do this, customize the variable
+@code{org-hide-leading-stars} like this:
+
+@lisp
+(setq org-hide-leading-stars t)
+@end lisp
+
+@noindent
+and restart emacs (this is necessary to make this change effective).
+The tree then becomes
+
+@example
+* Top level headline
+ * Second level
+  * 3rd level
+    some text
+  * 3rd level
+    more text
+* Another top level headline
+@end example
+
+@noindent
+Note that the leading stars are not truly replaced by whitespace, they
+are only fontified with the face @code{org-hide} that uses the
+background color as font color.  If are are not using either white or
+black background, you may have to customize this face to get the wanted
+effect.  Another possibility is to set this font such that the extra
+stars are @i{almost} invisible, for example using the color
+@code{grey90} on a white background.
+
+Things become cleaner still if you skip all the even levels and use only
+odd levels 1, 3, 5..., effectively adding two stars to go from one
+outline level to the next:
+
+@example
+* Top level headline
+  * Second level
+    * 3rd level
+      some text
+    * 3rd level
+      more text
+* Another top level headline
+@end example
+
+@noindent
+In order to make the structure editing and export commands handle this
+convention correctly, use (again a restart of emacs will be needed)
+
+@lisp
+(setq org-odd-levels-only t)
+@end lisp
+
+@noindent
+You can convert an Org-mode file from single-star-per-level to
+double-star-per-level convention with @kbd{M-x org-convert-to-odd-levels
+RET} in that file.  It is not possible to use this setting on a
+file-local basis, so you need to decide which format to use.
+
+@node TTY keys, FAQ, Clean view, Miscellaneous
+@section Using org-mode on a tty
+@cindex tty keybindings
+
+Org-mode uses a number of keys that are not accessible on a tty.  This
+applies to most special keys like cursor keys, @key{TAB} and
+@key{RET}, when these are combined with modifier keys like @key{Meta}
+and/or @key{Shift}.  Org-mode uses these bindings because it needs to
+provide keys for a large number of commands, and because these keys
+appeared particularly easy to remember.  In order to still be able to
+access the core functionality of Org-mode on a tty, alternative
+bindings are provided.  Here is a complete list of these bindings,
+which are obviously more cumbersome to use.  Note that sometimes a
+work-around can be better.  For example changing a time stamp is
+really only fun with @kbd{S-@key{cursor}} keys.  On a tty you would
+rather use @kbd{C-c .}  to re-insert the timestamp.
+
+@page
+@multitable @columnfractions 0.15 0.2 0.2
+@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2}
+@item @kbd{S-@key{TAB}}     @tab @kbd{C-u @key{TAB}}       @tab
+@item @kbd{M-@key{left}}    @tab @kbd{C-c C-x l}           @tab @kbd{@key{Esc} @key{left}}
+@item @kbd{M-S-@key{left}}  @tab @kbd{C-c C-x L}           @tab
+@item @kbd{M-@key{right}}   @tab @kbd{C-c C-x r}           @tab @kbd{@key{Esc} @key{right}}
+@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R}           @tab
+@item @kbd{M-@key{up}}      @tab @kbd{C-c C-x u}           @tab @kbd{@key{Esc} @key{up}}
+@item @kbd{M-S-@key{up}}    @tab @kbd{C-c C-x U}           @tab
+@item @kbd{M-@key{down}}    @tab @kbd{C-c C-x d}           @tab @kbd{@key{Esc} @key{down}}
+@item @kbd{M-S-@key{down}}  @tab @kbd{C-c C-x D}           @tab
+@item @kbd{S-@key{RET}}     @tab @kbd{C-c C-x c}           @tab
+@item @kbd{M-@key{RET}}     @tab @kbd{C-c C-x m}           @tab @kbd{@key{Esc} @key{RET}}
+@item @kbd{M-S-@key{RET}}   @tab @kbd{C-c C-x M}           @tab
+@item @kbd{S-@key{left}}    @tab @kbd{C-c C-x @key{left}}  @tab
+@item @kbd{S-@key{right}}   @tab @kbd{C-c C-x @key{right}} @tab
+@item @kbd{S-@key{up}}      @tab @kbd{C-c C-x @key{up}}    @tab
+@item @kbd{S-@key{down}}    @tab @kbd{C-c C-x @key{down}}  @tab
+@end multitable
+
+@node FAQ, Interaction, TTY keys, Miscellaneous
 @section Frequently asked questions
 @cindex FAQ
 
@@ -3026,6 +3163,11 @@
 (add-to-list 'auto-mode-alist '("README$" . org-mode))
 @end example
 
+@item @b{All these stars are driving me mad, I just find the Emacs
+outlines unreadable. Can't you just put white space and a single star as a
+starter for headlines?}@*
+See @ref{Clean view}.
+
 @item @b{I would like to have two windows on the same Org-mode
 file, but with different outline visibility.  Is that possible?}@*
 @cindex @code{make-indirect-buffer}
@@ -3138,15 +3280,23 @@
 @end enumerate
 
 
-@node Interaction, TTY keys, FAQ, Miscellaneous
+@node Interaction, Bugs, FAQ, Miscellaneous
 @section Interaction with other packages
 @cindex packages, interaction with other
 Org-mode can cooperate with the following packages:
 
 @table @asis
+@cindex @file{org-mouse.el}
+@item @file{org-mouse.el} by Piotr Zielinski
+This package implements extended mouse functionality for Org-mode.  It
+allows to cycle visibility and to edit the document structure with the
+mouse.  It also provides a context-sensitive menu that changes depending
+on the context of a mouse-click.  Use a search engine to find this
+package on the web.
 @cindex @file{table.el}
 @item @file{table.el} by Takaaki Ota
-Org mode cooperates with table.el, see @ref{table.el}.
+Org mode cooperates with table.el, see @ref{table.el}.  @file{table.el}
+is part of Emacs 22.
 @cindex @file{calc.el}
 @item @file{calc.el} by Dave Gillespie
 Org-mode uses the calc package for implementing spreadsheet
@@ -3189,6 +3339,7 @@
 @code{org-disputed-keys}.
 @item @file{remember.el} by John Wiegley
 Org mode cooperates with remember, see @ref{Remember}.
+@file{remember.el} is not part of Emacs, find it on the web.
 @cindex @file{planner.el}
 @item @file{planner.el} by John Wiegley
 Planner is another tool to plan work and keep track of tasks.  Planner
@@ -3197,48 +3348,11 @@
 display the agenda entries resulting from org files in day-pages of
 the planner.  This can be done through the diary of the calendar:
 Integrate org files into the diary as described above, and then turn
-on the diary support of planner.
+on the diary support of planner.  Planner is not part of Emacs, find it
+on the web.
 @end table
 
-@node TTY keys, Bugs, Interaction, Miscellaneous
-@section Using org-mode on a tty
-@cindex tty keybindings
-
-Org-mode uses a number of keys that are not accessible on a tty.  This
-applies to most special keys like cursor keys, @key{TAB} and
-@key{RET}, when these are combined with modifier keys like @key{Meta}
-and/or @key{Shift}.  Org-mode uses these bindings because it needs to
-provide keys for a large number of commands, and because these keys
-appeared particularly easy to remember.  In order to still be able to
-access the core functionality of Org-mode on a tty, alternative
-bindings are provided.  Here is a complete list of these bindings,
-which are obviously more cumbersome to use.  Note that sometimes a
-work-around can be better.  For example changing a time stamp is
-really only fun with @kbd{S-@key{cursor}} keys.  On a tty you would
-rather use @kbd{C-c .}  to re-insert the timestamp.
-
-@page
-@multitable @columnfractions 0.15 0.2 0.2
-@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2}
-@item @kbd{S-@key{TAB}}     @tab @kbd{C-u @key{TAB}}       @tab
-@item @kbd{M-@key{left}}    @tab @kbd{C-c C-x l}           @tab @kbd{@key{Esc} @key{left}}
-@item @kbd{M-S-@key{left}}  @tab @kbd{C-c C-x L}           @tab
-@item @kbd{M-@key{right}}   @tab @kbd{C-c C-x r}           @tab @kbd{@key{Esc} @key{right}}
-@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R}           @tab
-@item @kbd{M-@key{up}}      @tab @kbd{C-c C-x u}           @tab @kbd{@key{Esc} @key{up}}
-@item @kbd{M-S-@key{up}}    @tab @kbd{C-c C-x U}           @tab
-@item @kbd{M-@key{down}}    @tab @kbd{C-c C-x d}           @tab @kbd{@key{Esc} @key{down}}
-@item @kbd{M-S-@key{down}}  @tab @kbd{C-c C-x D}           @tab
-@item @kbd{S-@key{RET}}     @tab @kbd{C-c C-x c}           @tab
-@item @kbd{M-@key{RET}}     @tab @kbd{C-c C-x m}           @tab @kbd{@key{Esc} @key{RET}}
-@item @kbd{M-S-@key{RET}}   @tab @kbd{C-c C-x M}           @tab
-@item @kbd{S-@key{left}}    @tab @kbd{C-c C-x @key{left}}  @tab
-@item @kbd{S-@key{right}}   @tab @kbd{C-c C-x @key{right}} @tab
-@item @kbd{S-@key{up}}      @tab @kbd{C-c C-x @key{up}}    @tab
-@item @kbd{S-@key{down}}    @tab @kbd{C-c C-x @key{down}}  @tab
-@end multitable
-
-@node Bugs, Acknowledgments, TTY keys, Miscellaneous
+@node Bugs, Acknowledgments, Interaction, Miscellaneous
 @section Bugs
 @cindex bugs
 
@@ -3246,13 +3360,6 @@
 have found too hard to fix.
 
 @itemize @bullet
-@c @item
-@c If you call @code{fill-paragraph} (bound to @kbd{M-q}) in a table, the
-@c filling is correctly disabled.  However, if some text directly
-@c (without an empty line in between) precedes or follows a table, calling
-@c @code{fill-paragraph} in that text will also fill the table like
-@c normal text.  Also, @code{fill-region} does bypass the
-@c @code{fill-paragraph} code and will fill tables like normal text.
 @item
 Text in an entry protected with the @samp{QUOTE} keyword should not
 autowrap.
@@ -3261,6 +3368,10 @@
 (for example because the application does not exits or refuses to open
 the file), it does so silently.  No error message is displayed.
 @item
+Plain list items should be able to hold a TODO item.  Unfortunately this
+has so many technical problems that I will only consider this change for
+the next major release (5.0).
+@item
 The remote-editing commands in the agenda buffer cannot be undone with
 @code{undo} called from within the agenda buffer.  But you can go to
 the corresponding buffer (using @key{TAB} or @key{RET} and execute
@@ -3276,11 +3387,9 @@
 However, from Org-mode's timeline and agenda buffers (created with
 @kbd{C-c C-r} and @kbd{C-c a}), things do work correctly.
 @item
-Linux should also have a default viewer application, using mailcap.
-Maybe we can use GNUS or VM mime code?  Or dired's guessing commands?
-Any hints (or even patches) are appreciated.
-@item
-When you write @samp{x = a /b/ c}, b will be exported in italics.
+You can only make a single word boldface or italic.  To emphasize
+several words in a row, each much have the emphasize markers, like in
+@samp{*three* *bold* *words*}.
 @item
 The exporters work well, but could be made more efficient.
 @end itemize
@@ -3353,6 +3462,9 @@
 @item 
 Roland Winkler pointed out that additional keybindings are needed to
 use Org-mode on a tty.
+@item
+Piotr Zielinski wrote @file{org-mouse.el} and pointed out to me that
+Emacs 22 can be made to follow links using mouse-1 clicks.
 @c @item
 @c Nic Ferrier and Christian Egli implemented XML export.
 @end itemize
--- a/src/ChangeLog	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/ChangeLog	Sat Mar 04 23:07:13 2006 +0000
@@ -1,3 +1,39 @@
+2006-03-02  Kim F. Storm  <storm@cua.dk>
+
+	* frame.h (struct frame): New member n_tool_bar_rows.
+
+	* xdisp.c: Minimize the unpleasent visual impact of the requirement
+	that non-toolkit tool-bars must occupy an integral number of screen
+	lines, by distributing the rows evenly over the tool-bar screen	area.
+	(Vtool_bar_border): New variable.
+	(syms_of_xdisp): DEFVAR_LISP it.
+	(display_tool_bar_line): Add HEIGHT arg for desired row height.  Make
+	tool-bar row the desired height.  Use default face for border below
+	tool-bar.
+	(tool_bar_lines_needed): Add N_ROWS arg.  Use it to return number of
+	actual tool-bar rows.
+	(redisplay_tool_bar): Calculate f->n_tool_bar_rows initially.
+	Adjust the height of the tool-bar rows to fill tool-bar screen area.
+	(redisplay_tool_bar): Calculate f->n_tool_bar_rows when tool-bar area
+	is resized.
+
+2006-03-01  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* search.c (Fregexp_quote): Do not precede a literal `]' with two
+	backslashes to try to make clear that it has a literal meaning; it
+	does not do that.  (It could close a character alternative
+	containing a backslash.)
+
+2006-02-28  Chong Yidong  <cyd@stupidchicken.com>
+
+	* xselect.c (x_catch_errors_unwind): New function.
+	(x_reply_selection_request): Put x_uncatch_errors in an unwind.
+	(Fx_get_atom_name): Call x_uncatch_errors earlier.
+
+	* window.c (Qscroll_up, Qscroll_down): New syms.
+	(window_scroll_pixel_based): Make preserve_y static to avoid
+	getting point stuck when scrolling 1 line.
+
 2006-02-26  Chong Yidong  <cyd@stupidchicken.com>
 
 	* xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary
--- a/src/frame.h	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/frame.h	Sat Mar 04 23:07:13 2006 +0000
@@ -205,6 +205,7 @@
   /* Margin at the top of the frame.  Used to display the tool-bar.  */
   int tool_bar_lines;
 
+  int n_tool_bar_rows;
   int n_tool_bar_items;
 
   /* A buffer for decode_mode_line. */
--- a/src/search.c	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/search.c	Sat Mar 04 23:07:13 2006 +0000
@@ -3066,7 +3066,7 @@
 
   for (; in != end; in++)
     {
-      if (*in == '[' || *in == ']'
+      if (*in == '['
 	  || *in == '*' || *in == '.' || *in == '\\'
 	  || *in == '?' || *in == '+'
 	  || *in == '^' || *in == '$')
--- a/src/window.c	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/window.c	Sat Mar 04 23:07:13 2006 +0000
@@ -52,6 +52,7 @@
 
 
 Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;
+Lisp_Object Qscroll_up, Qscroll_down;
 Lisp_Object Qwindow_size_fixed;
 extern Lisp_Object Qleft_margin, Qright_margin;
 
@@ -4723,9 +4724,9 @@
   struct text_pos start;
   Lisp_Object tem;
   int this_scroll_margin;
-  int preserve_y;
   /* True if we fiddled the window vscroll field without really scrolling.   */
   int vscrolled = 0;
+  static int preserve_y = -1;
 
   SET_TEXT_POS_FROM_MARKER (start, w->start);
 
@@ -4789,9 +4790,18 @@
      point in the same window line as it is now, so get that line.  */
   if (!NILP (Vscroll_preserve_screen_position))
     {
-      start_display (&it, w, start);
-      move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
-      preserve_y = it.current_y;
+      /* We preserve the goal pixel coordinate across consecutive
+	 calls to scroll-up or scroll-down.  This avoids the
+	 possibility of point becoming "stuck" on a tall line when
+	 scrolling by one line.  */
+      if (preserve_y < 0
+	  || (current_kboard->Vlast_command != Qscroll_up
+	      && current_kboard->Vlast_command != Qscroll_down))
+	{
+	  start_display (&it, w, start);
+	  move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
+	  preserve_y = it.current_y;
+	}
     }
   else
     preserve_y = -1;
@@ -4928,10 +4938,9 @@
 	{
 	  /* If we have a header line, take account of it.
 	     This is necessary because we set it.current_y to 0, above.  */
-	  if (WINDOW_WANTS_HEADER_LINE_P (w))
-	    preserve_y -= CURRENT_HEADER_LINE_HEIGHT (w);
-
-	  move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y);
+	  move_it_to (&it, -1, -1,
+		      preserve_y - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ),
+		      -1, MOVE_TO_Y);
 	  SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
 	}
       else
@@ -4985,15 +4994,9 @@
 	{
 	  SET_TEXT_POS_FROM_MARKER (start, w->start);
 	  start_display (&it, w, start);
-#if 0  /* It's wrong to subtract this here
-	  because we called start_display again
-	  and did not alter it.current_y this time.  */
-
-	  /* If we have a header line, take account of it.  */
-	  if (WINDOW_WANTS_HEADER_LINE_P (w))
-	    preserve_y -= CURRENT_HEADER_LINE_HEIGHT (w);
-#endif
-
+	  /* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT
+	     here because we called start_display again and did not
+	     alter it.current_y this time.  */
 	  move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y);
 	  SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
 	}
@@ -6990,6 +6993,12 @@
 void
 syms_of_window ()
 {
+  Qscroll_up = intern ("scroll-up");
+  staticpro (&Qscroll_up);
+
+  Qscroll_down = intern ("scroll-down");
+  staticpro (&Qscroll_down);
+
   Qwindow_size_fixed = intern ("window-size-fixed");
   staticpro (&Qwindow_size_fixed);
   Fset (Qwindow_size_fixed, Qnil);
--- a/src/xdisp.c	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/xdisp.c	Sat Mar 04 23:07:13 2006 +0000
@@ -269,6 +269,12 @@
 
 int make_cursor_line_fully_visible_p;
 
+/* Margin below tool bar in pixels.  0 or nil means no margin.
+   If value is `internal-border-width' or `border-width',
+   the corresponding frame parameter is used.  */
+
+Lisp_Object Vtool_bar_border;
+
 /* Margin around tool bar buttons in pixels.  */
 
 Lisp_Object Vtool_bar_button_margin;
@@ -839,7 +845,7 @@
 static int store_mode_line_noprop P_ ((const unsigned char *, int, int));
 static void x_consider_frame_title P_ ((Lisp_Object));
 static void handle_stop P_ ((struct it *));
-static int tool_bar_lines_needed P_ ((struct frame *));
+static int tool_bar_lines_needed P_ ((struct frame *, int *));
 static int single_display_spec_intangible_p P_ ((Lisp_Object));
 static void ensure_echo_area_buffers P_ ((void));
 static Lisp_Object unwind_with_echo_area_buffer P_ ((Lisp_Object));
@@ -950,7 +956,7 @@
 static void update_tool_bar P_ ((struct frame *, int));
 static void build_desired_tool_bar_string P_ ((struct frame *f));
 static int redisplay_tool_bar P_ ((struct frame *));
-static void display_tool_bar_line P_ ((struct it *));
+static void display_tool_bar_line P_ ((struct it *, int));
 static void notice_overwritten_cursor P_ ((struct window *,
 					   enum glyph_row_area,
 					   int, int, int, int));
@@ -9429,11 +9435,17 @@
 }
 
 
-/* Display one line of the tool-bar of frame IT->f.  */
-
-static void
-display_tool_bar_line (it)
-     struct it *it;
+/* Display one line of the tool-bar of frame IT->f.
+
+   HEIGHT specifies the desired height of the tool-bar line.
+   If the actual height of the glyph row is less than HEIGHT, the
+   row's height is increased to HEIGHT, and the icons are centered
+   vertically in the new height.  */
+
+static void
+display_tool_bar_line (it, height)
+     struct it *it;
+     int height;
 {
   struct glyph_row *row = it->glyph_row;
   int max_x = it->last_visible_x;
@@ -9489,11 +9501,22 @@
  out:;
 
   row->displays_text_p = row->used[TEXT_AREA] != 0;
+  /* Use default face for the border below the tool bar.  */
+  if (!row->displays_text_p)
+    it->face_id = DEFAULT_FACE_ID;
   extend_face_to_end_of_line (it);
   last = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA] - 1;
   last->right_box_line_p = 1;
   if (last == row->glyphs[TEXT_AREA])
     last->left_box_line_p = 1;
+
+  /* Make line the desired height and center it vertically.  */
+  if ((height -= it->max_ascent + it->max_descent) > 0)
+    {
+      it->max_ascent += height / 2;
+      it->max_descent += (height + 1) / 2;
+    }
+
   compute_line_metrics (it);
 
   /* If line is empty, make it occupy the rest of the tool-bar.  */
@@ -9517,11 +9540,13 @@
 
 
 /* Value is the number of screen lines needed to make all tool-bar
-   items of frame F visible.  */
-
-static int
-tool_bar_lines_needed (f)
+   items of frame F visible.  The number of actual rows needed is
+   returned in *N_ROWS if non-NULL.  */
+
+static int
+tool_bar_lines_needed (f, n_rows)
      struct frame *f;
+     int *n_rows;
 {
   struct window *w = XWINDOW (f->tool_bar_window);
   struct it it;
@@ -9537,8 +9562,11 @@
     {
       it.glyph_row = w->desired_matrix->rows;
       clear_glyph_row (it.glyph_row);
-      display_tool_bar_line (&it);
-    }
+      display_tool_bar_line (&it, 0);
+    }
+
+  if (n_rows)
+    *n_rows = it.vpos;
 
   return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f);
 }
@@ -9568,7 +9596,7 @@
       if (f->n_tool_bar_items)
 	{
 	  build_desired_tool_bar_string (f);
-	  nlines = tool_bar_lines_needed (f);
+	  nlines = tool_bar_lines_needed (f, NULL);
 	}
     }
 
@@ -9613,9 +9641,50 @@
   build_desired_tool_bar_string (f);
   reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
 
+  if (f->n_tool_bar_rows == 0)
+    {
+      (void)tool_bar_lines_needed (f, &f->n_tool_bar_rows);
+      if (f->n_tool_bar_rows == 0)
+	f->n_tool_bar_rows = -1;
+    }
+
   /* Display as many lines as needed to display all tool-bar items.  */
-  while (it.current_y < it.last_visible_y)
-    display_tool_bar_line (&it);
+
+  if (f->n_tool_bar_rows > 0)
+    {
+      int border, rows, height, extra;
+
+      if (INTEGERP (Vtool_bar_border))
+	border = XINT (Vtool_bar_border);
+      else if (EQ (Vtool_bar_border, Qinternal_border_width))
+	border = FRAME_INTERNAL_BORDER_WIDTH (f);
+      else if (EQ (Vtool_bar_border, Qborder_width))
+	border = f->border_width;
+      else
+	border = 0;
+      if (border < 0)
+	border = 0;
+
+      rows = f->n_tool_bar_rows;
+      height = (it.last_visible_y - border) / rows;
+      extra = it.last_visible_y - border - height * rows;
+
+      while (it.current_y < it.last_visible_y)
+	{
+	  int h = 0;
+	  if (extra > 0 && rows-- > 0)
+	    {
+	      h = (extra + rows - 1) / rows;
+	      extra -= h;
+	    }
+	  display_tool_bar_line (&it, height + h);
+	}
+    }
+  else
+    {
+      while (it.current_y < it.last_visible_y)
+	display_tool_bar_line (&it, 0);
+    }
 
   /* It doesn't make much sense to try scrolling in the tool-bar
      window, so don't do it.  */
@@ -9648,7 +9717,7 @@
       /* Resize windows as needed by changing the `tool-bar-lines'
 	 frame parameter.  */
       if (change_height_p
-	  && (nlines = tool_bar_lines_needed (f),
+	  && (nlines = tool_bar_lines_needed (f, &f->n_tool_bar_rows),
 	      nlines != WINDOW_TOTAL_LINES (w)))
 	{
 	  extern Lisp_Object Qtool_bar_lines;
@@ -23661,6 +23730,14 @@
     doc: /* *Non-nil means to scroll (recenter) cursor line if it is not fully visible.  */);
   make_cursor_line_fully_visible_p = 1;
 
+  DEFVAR_LISP ("tool-bar-border", &Vtool_bar_border,
+    doc: /* *Border below tool-bar in pixels.
+If an integer, use it as the height of the border.
+If it is one of `internal-border-width' or `border-width', use the
+value of the corresponding frame parameter.
+Otherwise, no border is added below the tool-bar.  */);
+  Vtool_bar_border = Qinternal_border_width;
+
   DEFVAR_LISP ("tool-bar-button-margin", &Vtool_bar_button_margin,
     doc: /* *Margin around tool-bar buttons in pixels.
 If an integer, use that for both horizontal and vertical margins.
--- a/src/xselect.c	Tue Feb 28 17:35:08 2006 +0000
+++ b/src/xselect.c	Sat Mar 04 23:07:13 2006 +0000
@@ -55,6 +55,7 @@
 static Lisp_Object x_selection_request_lisp_error P_ ((Lisp_Object));
 static Lisp_Object queue_selection_requests_unwind P_ ((Lisp_Object));
 static Lisp_Object some_frame_on_display P_ ((struct x_display_info *));
+static Lisp_Object x_catch_errors_unwind P_ ((Lisp_Object));
 static void x_reply_selection_request P_ ((struct input_event *, int,
 					   unsigned char *, int, Atom));
 static int waiting_for_other_props_on_window P_ ((Display *, Window));
@@ -618,6 +619,15 @@
     x_decline_selection_request (x_selection_current_request);
   return Qnil;
 }
+
+static Lisp_Object
+x_catch_errors_unwind (dummy)
+     Lisp_Object dummy;
+{
+  BLOCK_INPUT;
+  x_uncatch_errors ();
+  UNBLOCK_INPUT;
+}
 
 
 /* This stuff is so that INCR selections are reentrant (that is, so we can
@@ -711,8 +721,11 @@
   if (reply.property == None)
     reply.property = reply.target;
 
-  /* #### XChangeProperty can generate BadAlloc, and we must handle it! */
   BLOCK_INPUT;
+  /* The protected block contains wait_for_property_change, which can
+     run random lisp code (process handlers) or signal.  Therefore, we
+     put the x_uncatch_errors call in an unwind.  */
+  record_unwind_protect (x_catch_errors_unwind, Qnil);
   x_catch_errors (display);
 
 #ifdef TRACE_SELECTION
@@ -866,9 +879,8 @@
      UNBLOCK to enter the event loop and get possible errors delivered,
      and then BLOCK again because x_uncatch_errors requires it.  */
   BLOCK_INPUT;
-
+  /* This calls x_uncatch_errors.  */
   unbind_to (count, Qnil);
-  x_uncatch_errors ();
   UNBLOCK_INPUT;
 }
 
@@ -1378,7 +1390,7 @@
   Atom selection_atom;
   Atom type_atom;
   int secs, usecs;
-  int count;
+  int count = SPECPDL_INDEX ();
   Lisp_Object frame;
 
   if (! FRAME_X_P (sf))
@@ -1409,6 +1421,10 @@
 
   BLOCK_INPUT;
 
+  /* The protected block contains wait_reading_process_output, which
+     can run random lisp code (process handlers) or signal.
+     Therefore, we put the x_uncatch_errors call in an unwind.  */
+  record_unwind_protect (x_catch_errors_unwind, Qnil);
   x_catch_errors (display);
 
   TRACE2 ("Get selection %s, type %s",
@@ -1426,8 +1442,6 @@
 
   frame = some_frame_on_display (dpyinfo);
 
-  count = SPECPDL_INDEX ();
-
   /* If the display no longer has frames, we can't expect
      to get many more selection requests from it, so don't
      bother trying to queue them.  */
@@ -1449,9 +1463,10 @@
   TRACE1 ("  Got event = %d", !NILP (XCAR (reading_selection_reply)));
 
   BLOCK_INPUT;
+  if (x_had_errors_p (display))
+    error ("Cannot get selection");
+  /* This calls x_uncatch_errors.  */
   unbind_to (count, Qnil);
-  x_check_errors (display, "Cannot get selection: %s");
-  x_uncatch_errors ();
   UNBLOCK_INPUT;
 
   if (NILP (XCAR (reading_selection_reply)))
@@ -2687,6 +2702,7 @@
   Lisp_Object ret = Qnil;
   Display *dpy = FRAME_X_DISPLAY (f);
   Atom atom;
+  int had_errors;
 
   if (INTEGERP (value))
     atom = (Atom) XUINT (value);
@@ -2699,14 +2715,13 @@
 
   BLOCK_INPUT;
   x_catch_errors (dpy);
-
   name = atom ? XGetAtomName (dpy, atom) : "";
-
-  if (! x_had_errors_p (dpy))
+  had_errors = x_had_errors_p (dpy);
+  x_uncatch_errors ();
+
+  if (!had_errors)
     ret = make_string (name, strlen (name));
 
-  x_uncatch_errors ();
-
   if (atom && name) XFree (name);
   if (NILP (ret)) ret = make_string ("", 0);