summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Makefile.in104
-rw-r--r--admin/FOR-RELEASE3
-rwxr-xr-xconfigure3
-rw-r--r--etc/orgcard.tex4
-rw-r--r--leim/ChangeLog5
-rw-r--r--leim/Makefile.in2
-rw-r--r--lib-src/ChangeLog5
-rw-r--r--lib-src/Makefile.in44
-rw-r--r--lisp/ChangeLog128
-rw-r--r--lisp/allout.el13
-rw-r--r--lisp/calc/calccomp.el11
-rw-r--r--lisp/cus-edit.el15
-rw-r--r--lisp/dframe.el2
-rw-r--r--lisp/emacs-lisp/edebug.el5
-rw-r--r--lisp/emacs-lisp/rx.el6
-rw-r--r--lisp/font-lock.el2
-rw-r--r--lisp/generic-x.el2
-rw-r--r--lisp/gnus/ChangeLog53
-rw-r--r--lisp/gnus/dns.el2
-rw-r--r--lisp/gnus/gnus-draft.el2
-rw-r--r--lisp/gnus/gnus-int.el10
-rw-r--r--lisp/gnus/gnus-sum.el7
-rw-r--r--lisp/gnus/mm-decode.el18
-rw-r--r--lisp/gnus/mm-util.el10
-rw-r--r--lisp/gnus/mml.el10
-rw-r--r--lisp/gnus/nnweb.el118
-rw-r--r--lisp/mh-e/ChangeLog77
-rw-r--r--lisp/mh-e/mh-comp.el23
-rw-r--r--lisp/mh-e/mh-folder.el18
-rw-r--r--lisp/mh-e/mh-letter.el18
-rw-r--r--lisp/mh-e/mh-limit.el17
-rw-r--r--lisp/mh-e/mh-show.el9
-rw-r--r--lisp/mh-e/mh-tool-bar.el154
-rw-r--r--lisp/mh-e/mh-utils.el222
-rw-r--r--lisp/midnight.el29
-rw-r--r--lisp/net/rcirc.el13
-rw-r--r--lisp/progmodes/gdb-ui.el42
-rw-r--r--lisp/progmodes/gud.el16
-rw-r--r--lisp/speedbar.el38
-rw-r--r--lisp/textmodes/flyspell.el4
-rw-r--r--lisp/textmodes/org.el249
-rw-r--r--lisp/textmodes/reftex-index.el2
-rw-r--r--lisp/textmodes/reftex-toc.el2
-rw-r--r--lispref/ChangeLog8
-rw-r--r--lispref/keymaps.texi9
-rw-r--r--lispref/loading.texi15
-rw-r--r--man/ChangeLog10
-rw-r--r--man/org.texi270
-rw-r--r--src/ChangeLog36
-rw-r--r--src/frame.h1
-rw-r--r--src/search.c2
-rw-r--r--src/window.c43
-rw-r--r--src/xdisp.c99
-rw-r--r--src/xselect.c39
55 files changed, 1406 insertions, 652 deletions
diff --git a/ChangeLog b/ChangeLog
index cf4d78a6069..50ba76a774b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/Makefile.in b/Makefile.in
index 8468d13b803..f4478308a42 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -250,7 +250,7 @@ SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile lispref/Makefile lispintro/Make
# 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 @@ install-arch-dep: mkdir
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 @@ install-arch-indep: mkdir info
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 @@ install-strip:
### /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 @@ uninstall:
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:
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index 3aa3708c45e..3f035d1d55a 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -36,9 +36,6 @@ Assigned to Bill Wohler <wohler@newt.com>.
** 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"
diff --git a/configure b/configure
index 9c9bf68eb53..fb8ca620365 100755
--- a/configure
+++ b/configure
@@ -2136,6 +2136,9 @@ _ACEOF
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
;;
diff --git a/etc/orgcard.tex b/etc/orgcard.tex
index 75ff98514b5..1e39ea23327 100644
--- a/etc/orgcard.tex
+++ b/etc/orgcard.tex
@@ -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
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 6b83a887350..589024ba860 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -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
diff --git a/leim/Makefile.in b/leim/Makefile.in
index 59237114414..657ef41ec42 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -33,7 +33,7 @@ datadir=@datadir@
srcdir=@srcdir@
# Where to install LEIM files.
-INSTALLDIR=${datadir}/emacs/${version}/leim
+INSTALLDIR=$(DESTDIR)${datadir}/emacs/${version}/leim
GZIP_PROG = @GZIP_PROG@
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index df8639f31fa..e4e74030200 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -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.
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 33af87019e0..85a7c13c95a 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -285,11 +285,11 @@ blessmail:
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 @@ maybe-blessmail: BLESSMAIL
/* 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:
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3344bca5ba3..9a539543947 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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.
diff --git a/lisp/allout.el b/lisp/allout.el
index edce1e8d61e..6690456123e 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -1605,6 +1605,8 @@ OPEN: A topic that is not closed, though its offspring or body may be."
allout-mode
) ; let*
) ; defun
+;;;_ > allout-minor-mode
+(defalias 'allout-minor-mode 'allout-mode)
;;;_ - Position Assessment
;;;_ > allout-hidden-p (&optional pos)
@@ -1612,9 +1614,6 @@ OPEN: A topic that is not closed, though its offspring or body may be."
"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 @@ to return the current depth of the most recently matched topic."
;;;_ #4 Navigation
+;;;_ - Position Assessment
;;;_ : Location Predicates
;;;_ > allout-on-current-heading-p ()
(defun allout-on-current-heading-p ()
@@ -2236,9 +2236,10 @@ Returns the value of point."
"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 @@ Nuances:
;; 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)
diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el
index 548fe83882d..9b5eab5b133 100644
--- a/lisp/calc/calccomp.el
+++ b/lisp/calc/calccomp.el
@@ -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)
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index feacc9adf0d..60705b30552 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -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:
diff --git a/lisp/dframe.el b/lisp/dframe.el
index e238a469dd5..f77a5059026 100644
--- a/lisp/dframe.el
+++ b/lisp/dframe.el
@@ -422,7 +422,7 @@ CREATE-HOOK are hooks to run after creating a frame."
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.
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 49cf4115923..444c310920d 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -2660,13 +2660,14 @@ MSG is printed after `::::} '."
;; 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
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 763aa97f214..694544e3c52 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -372,8 +372,8 @@ FORM is of the form `(and FORM1 ...)'."
(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 @@ ARG is optional."
(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 ""))))
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 427a4f2fb12..a2dd58d5c92 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -2120,7 +2120,7 @@ other modes in which C preprocessor directives are used. e.g. `asm-mode' and
;; 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.
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index 5b1d0bfb93d..55c4e482803 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -433,7 +433,7 @@ like an INI file. You can add this hook to `find-file-hook'."
(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
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 003504b2f12..dce2a5ae07f 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -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
diff --git a/lisp/gnus/dns.el b/lisp/gnus/dns.el
index d6c41ea823e..5069230e736 100644
--- a/lisp/gnus/dns.el
+++ b/lisp/gnus/dns.el
@@ -347,7 +347,7 @@ If FULLP, return the entire record returned."
(>= (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
diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el
index f9ff9d7122e..125e5bebd49 100644
--- a/lisp/gnus/gnus-draft.el
+++ b/lisp/gnus/gnus-draft.el
@@ -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)
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index b59a3c1530b..8af0aa2cca2 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -250,10 +250,12 @@ If it is down, start it up (again)."
;; 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
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 70dabcd525b..226a9bd50f1 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -3098,8 +3098,11 @@ display only a single character."
(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)
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index fa77b7776f0..01557659fd6 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1084,14 +1084,16 @@ external if displayed external."
(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."
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index a7f375aeba8..e4c87067872 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -796,11 +796,17 @@ Use multibyte mode for this."
(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)
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index 0ceda113f49..cf2f527c9d1 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -507,7 +507,15 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
(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)
diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el
index bf49aba7f08..13901e22f6d 100644
--- a/lisp/gnus/nnweb.el
+++ b/lisp/gnus/nnweb.el
@@ -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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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 @@ Valid types include `google', `dejanews', and `gmane'.")
"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 @@ Valid types include `google', `dejanews', and `gmane'.")
(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)
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index bf45042ecf2..bf6dfd95e6e 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -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>
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 5d2730f4afa..0cedc83719c 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -230,6 +230,13 @@ The hook `mh-before-send-letter-hook' is run at the beginning of
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 @@ sequence."
(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.
-
-An `identity' entry is skipped if one was already entered
-manually.
+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.
-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))
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 59526986d35..dcf88670f90 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -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 @@ perform the operation on all messages in that region.
\\{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 @@ perform the operation on all messages in that region.
(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)
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index c6af5c323a9..11aef2b51df 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -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 @@ order).
(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 @@ order).
;; 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)
diff --git a/lisp/mh-e/mh-limit.el b/lisp/mh-e/mh-limit.el
index 7a90b890cad..64a61ce499a 100644
--- a/lisp/mh-e/mh-limit.el
+++ b/lisp/mh-e/mh-limit.el
@@ -89,7 +89,8 @@ With a prefix argument, edit PICK-EXPR.
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 @@ With a prefix argument, edit PICK-EXPR.
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 @@ Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command."
(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 @@ With a prefix argument, edit PICK-EXPR.
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))
diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el
index 3ae609d9204..d7b656d3462 100644
--- a/lisp/mh-e/mh-show.el
+++ b/lisp/mh-e/mh-show.el
@@ -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 @@ The hook `mh-show-mode-hook' is called upon entry to this mode.
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 @@ See also `mh-folder-mode'.
(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))
diff --git a/lisp/mh-e/mh-tool-bar.el b/lisp/mh-e/mh-tool-bar.el
index 20b239189fa..d72fe8e06ce 100644
--- a/lisp/mh-e/mh-tool-bar.el
+++ b/lisp/mh-e/mh-tool-bar.el
@@ -204,10 +204,10 @@ where,
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 @@ where,
;; 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 @@ where,
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 @@ where,
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)
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index c00558860d1..b23a8f3f613 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -81,69 +81,80 @@ used in lieu of `search' in the CL package."
"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\".")
-
-(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.")
-
;;;###mh-autoload
-(defun mh-image-load-path ()
- "Ensure that the MH-E images are accessible by `find-image'.
-
-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.
-
-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
+(defun mh-image-load-path-for-library (library image &optional path)
+ "Return a suitable search path for images of LIBRARY.
+
+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'.
+
+This function returns value of `load-path' augmented with the
+path to IMAGE. If PATH is given, it is used instead of
+`load-path'.
+
+Here is an example that uses a common idiom to provide
+compatibility with versions of Emacs that lack the variable
+`image-load-path':
+
+ (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")))))
-
- (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)))
+ ;; 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)))
+
+ ;; 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 @@ See also variable `mh-image-load-path-called-flag'."
(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 @@ Ignores case when searching for OLD."
;;;###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 @@ number of sub-folders. XXX"
;;;###mh-autoload
(defun mh-folder-list (folder)
"Return FOLDER and its descendents.
-Returns a list of strings. For example,
-
- '(\"inbox\" \"lists\" \"lists/mh-e\").
-
-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."
+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
+
+ (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 @@ not be returned."
;; 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
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 1d5974f686f..1d9e1efbf2c 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -179,20 +179,21 @@ displayed (can be nil if the buffer was never displayed) and its
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
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index f2eff379d14..f5cf1ecb7e0 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -1635,12 +1635,13 @@ ones added to the list automatically are marked with an asterisk."
(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))
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index a110b2b6d42..cbff1835ca6 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -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.
+;; 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:
+;;; 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 @@ type=\"\\(.*?\\)\"")
(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)))
-(defun gdb-speedbar-timer-fn ()
+(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 @@ INDENT is the current indentation depth."
(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 @@ sink to `user' in `gdb-stopping', that is fine."
"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 @@ This arrangement depends on the value of `gdb-many-windows'."
(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 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}")
(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.
;;
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index a342eb0b6fc..31c8fe0e8a2 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -406,18 +406,18 @@ t means that there is no stack, and we are in display-file mode.")
(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
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 6a9ecbc542d..2e55c4929d5 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -2534,20 +2534,19 @@ name will have the function FIND-FUN and not token."
(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 @@ name will have the function FIND-FUN and not token."
(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 @@ This should only be used by modes classified as special."
(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)
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 16c50397824..96862b9c671 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -1322,7 +1322,8 @@ The list of incorrect words should be in `flyspell-external-ispell-buffer'.
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 @@ The buffer to mark them in is `flyspell-large-region-buffer'."
;;*---------------------------------------------------------------------*/
(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
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el
index cecfe7f5164..cc822ddb436 100644
--- a/lisp/textmodes/org.el
+++ b/lisp/textmodes/org.el
@@ -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 @@ Changing it requires restart of Emacs to become effective."
: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 @@ This should have an association in `org-export-language-setup'."
.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 @@ This option can also be set with the +OPTIONS line, e.g. \"TeX:nil\"."
(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 @@ Otherwise the buffer will just be saved to a file and stay hidden."
: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 @@ This file is created with the command \\[org-export-icalendar-all-agenda-files].
: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 @@ When this is non-nil, the headline after the keyword is set to the
"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 @@ When this is non-nil, the headline after the keyword is set to the
(defvar remember-data-file)
(defvar last-arg))
-
;;; Define the mode
(defvar org-mode-map (copy-keymap outline-mode-map)
@@ -2000,7 +2042,7 @@ When this is non-nil, the headline after the keyword is set to the
(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 @@ The following commands are available:
(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 @@ With optional argument RADIO, only find radio targets."
(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 @@ between words."
;; (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 @@ between words."
'("^[ \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 @@ in the region."
(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 @@ If the region is active in `transient-mark-mode', demote all headings
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 is non nil, actually cut the subtree."
(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 @@ If optional TREE is given, use this text instead of the kill ring."
(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 @@ insert a time. Note that when WITH-TIME is not set, you can still
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 @@ The following commands are available:
(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 @@ With prefix ARG, realign all tags in headings in the current buffer."
(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 @@ use sequences."
(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 @@ translations. There is currently no way for users to extend this.")
(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 @@ translations. There is currently no way for users to extend this.")
(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 @@ underlined headlines. The default is 3."
;; 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 @@ underlined headlines. The default is 3."
(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 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(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 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(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 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(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 @@ headlines. The default is 3. Lower levels will become bulleted lists."
;; 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 @@ headlines. The default is 3. Lower levels will become bulleted lists."
(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 @@ a time), or the day by one (if it does not contain a time)."
(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 @@ See the individual commands for more information."
["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]
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index 3601e584aad..5616d4f454c 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -1034,7 +1034,7 @@ When index is restricted, select the previous section as restriction criterion."
;; 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)
diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el
index 50ccdab7632..7508351fb35 100644
--- a/lisp/textmodes/reftex-toc.el
+++ b/lisp/textmodes/reftex-toc.el
@@ -1011,7 +1011,7 @@ always show the current section in connection with the option
;; 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)
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index 87b03ee48d5..a56517535f1 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -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.
diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi
index b7bc34ece84..b1e2f7fbaea 100644
--- a/lispref/keymaps.texi
+++ b/lispref/keymaps.texi
@@ -2498,6 +2498,15 @@ This variable specifies the shadow width for tool bar items.
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
diff --git a/lispref/loading.texi b/lispref/loading.texi
index e12d44c71de..544bb0875b1 100644
--- a/lispref/loading.texi
+++ b/lispref/loading.texi
@@ -180,7 +180,7 @@ We now describe some technical details about the exact suffixes that
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 @@ try, in order, when its @var{must-suffix} argument is non-@code{nil}.
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 @@ If the feature is not present, then @code{require} loads @var{filename}
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.)
diff --git a/man/ChangeLog b/man/ChangeLog
index f899bbe6b1a..6b4127e35d7 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -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 =.
diff --git a/man/org.texi b/man/org.texi
index ecb3480efa1..1f5ab0deeba 100644
--- a/man/org.texi
+++ b/man/org.texi
@@ -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 @@ Miscellaneous
* 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 @@ example
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 @@ level)
@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 @@ printed in any desired way.
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 @@ sometimes easier to read with hand-formatted lists. Org-mode supports
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 @@ recalculation can be automated.
@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 @@ can type or paste them straight into the buffer.
@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 @@ that date.
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 the original location of the item in another window.
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 @@ to make iCal re-read the calendar files each time a new version of
@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 @@ Elsewhere, complete dictionary words using ispell.
@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 @@ describing the variables here. A structured overview of customization
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 @@ turn it on for all @file{README} files?}
(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 @@ also the documentation of the @command{org-diary} function.
@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 @@ to have other replacement keys, look at the variable
@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 @@ on Emacs-Wiki. If Planner is your primary tool, it can be useful to
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 @@ Here is a list of things which should work differently, but which I
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 @@ When the application called by @kbd{C-c C-o} to open a file link fails
(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 @@ the text properties are lost when the fancy-diary-display is used.
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 @@ to GNUS.
@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
diff --git a/src/ChangeLog b/src/ChangeLog
index 79db6d09d0b..11fe6f910e4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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
diff --git a/src/frame.h b/src/frame.h
index ae80c03f9ca..aa4a00d6dfa 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -205,6 +205,7 @@ struct frame
/* 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. */
diff --git a/src/search.c b/src/search.c
index 04b58c78d3f..b92812597d5 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3066,7 +3066,7 @@ DEFUN ("regexp-quote", Fregexp_quote, Sregexp_quote, 1, 1, 0,
for (; in != end; in++)
{
- if (*in == '[' || *in == ']'
+ if (*in == '['
|| *in == '*' || *in == '.' || *in == '\\'
|| *in == '?' || *in == '+'
|| *in == '^' || *in == '$')
diff --git a/src/window.c b/src/window.c
index 29701a1ac62..36050ac649e 100644
--- a/src/window.c
+++ b/src/window.c
@@ -52,6 +52,7 @@ Boston, MA 02110-1301, USA. */
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 @@ window_scroll_pixel_based (window, n, whole, noerror)
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 @@ window_scroll_pixel_based (window, n, whole, noerror)
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 @@ window_scroll_pixel_based (window, n, whole, noerror)
{
/* 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 @@ window_scroll_pixel_based (window, n, whole, noerror)
{
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 @@ init_window ()
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);
diff --git a/src/xdisp.c b/src/xdisp.c
index 1361607010a..41c8546aac9 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -269,6 +269,12 @@ int auto_raise_tool_bar_buttons_p;
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 void store_mode_line_noprop_char P_ ((char));
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 int in_ellipses_for_invisible_text_p P_ ((struct display_pos *,
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 @@ build_desired_tool_bar_string (f)
}
-/* Display one line of the tool-bar of frame IT->f. */
+/* 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)
+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 @@ display_tool_bar_line (it)
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 @@ display_tool_bar_line (it)
/* Value is the number of screen lines needed to make all tool-bar
- items of frame F visible. */
+ 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)
+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,9 +9562,12 @@ tool_bar_lines_needed (f)
{
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 @@ DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed,
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 @@ redisplay_tool_bar (f)
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 @@ redisplay_tool_bar (f)
/* 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 @@ otherwise. */);
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.
diff --git a/src/xselect.c b/src/xselect.c
index 8c82a4b85d3..6776e732734 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -55,6 +55,7 @@ static void x_decline_selection_request P_ ((struct input_event *));
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_selection_request_lisp_error (ignore)
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 @@ x_reply_selection_request (event, format, data, size, type)
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 @@ x_reply_selection_request (event, format, data, size, type)
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 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
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 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
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 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
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 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
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 @@ If the value is 0 or the atom is not known, return the empty string. */)
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 @@ If the value is 0 or the atom is not known, return the empty string. */)
BLOCK_INPUT;
x_catch_errors (dpy);
-
name = atom ? XGetAtomName (dpy, atom) : "";
+ had_errors = x_had_errors_p (dpy);
+ x_uncatch_errors ();
- if (! x_had_errors_p (dpy))
+ if (!had_errors)
ret = make_string (name, strlen (name));
- x_uncatch_errors ();
-
if (atom && name) XFree (name);
if (NILP (ret)) ret = make_string ("", 0);