1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-05 11:45:45 +00:00
Patches applied:

 * emacs@sv.gnu.org/emacs--devo--0--patch-128
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-129
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-130
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-131
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-132
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-133
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-134
   Merge from gnus--rel--5.10

 * emacs@sv.gnu.org/emacs--devo--0--patch-135
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-43
   Munge arch explicit ids in etc/images to match Emacs

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-44
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-45
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-46
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-47
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-48
   Update from CVS

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-524
This commit is contained in:
Karoly Lorentey 2006-03-04 23:07:13 +00:00
commit 00bc10dab1
55 changed files with 1401 additions and 647 deletions

View File

@ -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.

View File

@ -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:

View File

@ -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"

3
configure vendored
View File

@ -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
;;

View File

@ -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

View File

@ -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

View File

@ -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@

View File

@ -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.

View File

@ -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:

View File

@ -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.

View File

@ -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)

View File

@ -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)

View File

@ -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:

View File

@ -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.

View File

@ -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

View File

@ -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 ""))))

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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."

View File

@ -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)

View File

@ -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)

View File

@ -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
(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))
(search-forward "Search Results</h1><ul>" nil t)
(delete-region (point-min) (point))
(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)

View File

@ -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>

View File

@ -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.
Once the header contains one or more recipients, you may run this
command to insert these fields manually. However, if you use this
command, the automatic insertion when the message is sent is
disabled.
An `identity' entry is skipped if one was already entered
manually.
Return t if fields added; otherwise return nil."
In a program, set buffer-local `mh-insert-auto-fields-done-local'
if header fields were added. If NON-INTERACTIVE is non-nil,
perform actions quietly and only if
`mh-insert-auto-fields-done-local' is nil. Return t if fields
added; otherwise return nil."
(interactive)
(when (or (not non-interactive)
(not mh-insert-auto-fields-done-local))

View File

@ -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)

View File

@ -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)

View File

@ -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))

View File

@ -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))

View File

@ -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)

View File

@ -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'.
(defun mh-image-load-path-for-library (library image &optional path)
"Return a suitable search path for images of LIBRARY.
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.
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'.
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.
This function returns value of `load-path' augmented with the
path to IMAGE. If PATH is given, it is used instead of
`load-path'.
See also variable `mh-image-load-path-called-flag'."
(unless mh-image-load-path-called-flag
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")))))
;; Try relative setting.
((let (library-name d1ei d2ei)
;; First, find library in the load-path.
(setq library-name (locate-library library))
(if (not library-name)
(error "Cannot find library %s in load-path" library))
;; And then set image-directory relative to that.
(setq
;; Go down 2 levels.
d2ei (expand-file-name
(concat (file-name-directory library-name) "../../etc/images"))
;; Go down 1 level.
d1ei (expand-file-name
(concat (file-name-directory library-name) "../etc/images")))
(setq image-directory
;; Set it to nil if image is not found.
(cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
((file-exists-p (expand-file-name image d1ei)) d1ei)))))
;; Check for images in image-load-path or load-path.
((let ((img image)
(dir (or
;; Images in image-load-path.
(mh-image-search-load-path image)
;; Images in load-path.
(locate-library image)))
parent)
;; Since the image might be in a nested directory (for
;; example, mail/attach.pbm), adjust `image-directory'
;; accordingly.
(and dir
(setq dir (file-name-directory dir))
(progn
(while (setq parent (file-name-directory img))
(setq img (directory-file-name parent)
dir (expand-file-name "../" dir)))
(setq image-directory dir)))))
(t
(error "Could not find image %s for library %s" image library)))
(if (not (file-exists-p mh-image-load-path))
(error "Directory %s in mh-image-load-path does not exist"
mh-image-load-path))
(if (not (file-exists-p
(expand-file-name "mh-logo.xpm" mh-image-load-path)))
(error "Directory %s in mh-image-load-path does not contain MH-E images"
mh-image-load-path))
(if (boundp 'image-load-path)
(add-to-list 'image-load-path mh-image-load-path)
(add-to-list 'load-path mh-image-load-path))
(setq mh-image-load-path-called-flag t)))
;; Return augmented `image-load-path' or `load-path'.
(cond ((and path (symbolp path))
(nconc (list image-directory)
(delete image-directory
(if (boundp path)
(copy-sequence (symbol-value path))
nil))))
(t
(nconc (list image-directory)
(delete image-directory (copy-sequence load-path)))))))
;;;###mh-autoload
(defun mh-make-local-vars (&rest pairs)
@ -159,6 +170,23 @@ 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,
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
'(\"inbox\" \"lists\" \"lists/mh-e\").
(mh-folder-list nil)
=> (\"inbox\" \"lists\" \"lists/mh-e\" \"outbox\")
(mh-folder-list \"+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."
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

View File

@ -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

View File

@ -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))

View File

@ -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.
;;

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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]

View File

@ -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)

View File

@ -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)

View File

@ -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.

View File

@ -2496,6 +2496,15 @@ The value is an integer, a number of pixels. The default is 4.
@defvar tool-bar-button-relief
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

View File

@ -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.)

View File

@ -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 =.

View File

@ -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

View File

@ -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

View File

@ -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. */

View File

@ -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 == '$')

View File

@ -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);

View File

@ -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.

View File

@ -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) : "";
if (! x_had_errors_p (dpy))
ret = make_string (name, strlen (name));
had_errors = x_had_errors_p (dpy);
x_uncatch_errors ();
if (!had_errors)
ret = make_string (name, strlen (name));
if (atom && name) XFree (name);
if (NILP (ret)) ret = make_string ("", 0);