mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-05 11:45:45 +00:00
Merged from emacs@sv.gnu.org
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-128 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-129 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-130 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-131 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-132 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-133 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-134 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-135 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-43 Munge arch explicit ids in etc/images to match Emacs * emacs@sv.gnu.org/gnus--rel--5.10--patch-44 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-45 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-46 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-47 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-48 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-524
This commit is contained in:
commit
00bc10dab1
@ -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.
|
||||
|
104
Makefile.in
104
Makefile.in
@ -250,7 +250,7 @@ SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile lispref/Makefile lispintro/Make
|
||||
# avoid nuking an existing dir file, so we don't do that here;
|
||||
# instead, we have written out explicit code in the `install' targets.
|
||||
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
|
||||
COPYDESTS = ${etcdir} ${lispdir}
|
||||
COPYDESTS = $(DESTDIR)${etcdir} $(DESTDIR)${lispdir}
|
||||
|
||||
all: ${SUBDIR} leim
|
||||
|
||||
@ -375,20 +375,20 @@ install-arch-dep: mkdir
|
||||
exec_prefix=${exec_prefix} bindir=${bindir} \
|
||||
libexecdir=${libexecdir} archlibdir=${archlibdir} \
|
||||
INSTALL_STRIP=${INSTALL_STRIP})
|
||||
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} ${bindir}/$(EMACSFULL)
|
||||
-chmod 1755 ${bindir}/$(EMACSFULL)
|
||||
rm -f ${bindir}/$(EMACS)
|
||||
-ln ${bindir}/$(EMACSFULL) ${bindir}/$(EMACS)
|
||||
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} $(DESTDIR)${bindir}/$(EMACSFULL)
|
||||
-chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL)
|
||||
rm -f $(DESTDIR)${bindir}/$(EMACS)
|
||||
-ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${bindir}/$(EMACS)
|
||||
-unset CDPATH; \
|
||||
for f in `cd lib-src && echo fns-*.el`; do \
|
||||
if test -r lib-src/$$f ; then \
|
||||
${INSTALL_DATA} lib-src/$$f ${archlibdir}/$$f; \
|
||||
${INSTALL_DATA} lib-src/$$f $(DESTDIR)${archlibdir}/$$f; \
|
||||
else true; fi ; \
|
||||
done
|
||||
if test "${carbon_appdir}" != ""; then \
|
||||
umask 022; mkdir -p ${carbon_appdir}/Emacs.app; \
|
||||
umask 022; mkdir -p $(DESTDIR)${carbon_appdir}/Emacs.app; \
|
||||
(cd mac/Emacs.app; (tar -chf - . | \
|
||||
(cd ${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
|
||||
(cd $(DESTDIR)${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
|
||||
&& cat > /dev/null))) || exit 1; \
|
||||
fi
|
||||
|
||||
@ -439,86 +439,86 @@ install-arch-indep: mkdir info
|
||||
rm -f $${subdir}/dired.todo ; \
|
||||
done) ; \
|
||||
done
|
||||
-rm -f ${lispdir}/subdirs.el
|
||||
$(srcdir)/update-subdirs ${lispdir}
|
||||
if [ -f ${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
|
||||
-rm -f $(DESTDIR)${lispdir}/subdirs.el
|
||||
$(srcdir)/update-subdirs $(DESTDIR)${lispdir}
|
||||
if [ -f $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
|
||||
then true; \
|
||||
else \
|
||||
(echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
|
||||
echo " (normal-top-level-add-subdirs-to-load-path))") \
|
||||
> ${datadir}/emacs/${version}/site-lisp/subdirs.el; \
|
||||
> $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el; \
|
||||
fi
|
||||
chmod a+r ${datadir}/emacs/${version}/site-lisp/subdirs.el
|
||||
-if [ -f ${datadir}/emacs/site-lisp/subdirs.el ]; \
|
||||
chmod a+r $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el
|
||||
-if [ -f $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el ]; \
|
||||
then true; \
|
||||
else \
|
||||
(echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
|
||||
echo " (normal-top-level-add-subdirs-to-load-path))") \
|
||||
> ${datadir}/emacs/site-lisp/subdirs.el; \
|
||||
> $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el; \
|
||||
fi
|
||||
-chmod a+r ${datadir}/emacs/site-lisp/subdirs.el
|
||||
-chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el
|
||||
-unset CDPATH; \
|
||||
if [ `(cd ./etc; /bin/pwd)` != `(cd ${docdir}; /bin/pwd)` ]; \
|
||||
if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
|
||||
then \
|
||||
echo "Copying etc/DOC-* to ${docdir} ..." ; \
|
||||
echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \
|
||||
(cd ./etc; tar -chf - DOC*) \
|
||||
|(cd ${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||
(cd $(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
|
||||
|(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||
(cd $(DESTDIR)$(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
|
||||
if test "`echo DOC-*`" != "DOC-*"; then rm DOC; fi); \
|
||||
else true; fi
|
||||
-unset CDPATH; \
|
||||
if [ -r ./lisp ] \
|
||||
&& [ -r ./lisp/simple.el ] \
|
||||
&& [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \
|
||||
&& [ x`(cd ./lisp; /bin/pwd)` != x`(cd $(DESTDIR)${lispdir}; /bin/pwd)` ] \
|
||||
&& [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \
|
||||
then \
|
||||
echo "Copying lisp/*.el and lisp/*.elc to ${lispdir} ..." ; \
|
||||
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
|
||||
(cd lisp; tar -chf - *.el *.elc) \
|
||||
|(cd ${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||
(cd ${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
|
||||
|(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||
(cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
|
||||
else true; fi
|
||||
-unset CDPATH; \
|
||||
if [ -n "${GZIP_PROG}" ]; \
|
||||
then \
|
||||
echo "Compressing *.el ..." ; \
|
||||
(cd ${lispdir}; for f in `find . -name "*.elc" -print`; do \
|
||||
(cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \
|
||||
${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \
|
||||
done) \
|
||||
else true; fi
|
||||
-unset CDPATH; \
|
||||
thisdir=`/bin/pwd`; \
|
||||
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
|
||||
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
|
||||
then \
|
||||
(cd ${infodir}; \
|
||||
(cd $(DESTDIR)${infodir}; \
|
||||
if [ -f dir ]; then true; \
|
||||
else \
|
||||
(cd $${thisdir}; \
|
||||
${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir; \
|
||||
chmod a+r ${infodir}/dir); \
|
||||
${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
|
||||
chmod a+r $(DESTDIR)${infodir}/dir); \
|
||||
fi; \
|
||||
cd ${srcdir}/info ; \
|
||||
for f in ada-mode* autotype* calc* ccmode* cl* dired-x* ebrowse* ediff* efaq* eintr* elisp* emacs* emacs-mime* emacs-xtra* eshell* eudc* flymake* forms* gnus* idlwave* info* message* mh-e* newsticker* org* pcl-cvs* pgg* reftex* sc* ses* sieve* speedbar* tramp* vip* widget* woman* smtpmail* url* rcirc* erc*; do \
|
||||
(cd $${thisdir}; \
|
||||
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
|
||||
chmod a+r ${infodir}/$$f); \
|
||||
${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f; \
|
||||
chmod a+r $(DESTDIR)${infodir}/$$f); \
|
||||
done); \
|
||||
else true; fi
|
||||
-unset CDPATH; \
|
||||
thisdir=`/bin/pwd`; \
|
||||
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
|
||||
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
|
||||
then \
|
||||
for f in ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq elisp eintr emacs emacs-mime emacs-xtra eshell eudc flymake forms gnus idlwave info message mh-e newsticker org pcl-cvs pgg reftex sc ses sieve speedbar tramp vip viper widget woman smtpmail url rcirc erc; do \
|
||||
(cd $${thisdir}; \
|
||||
${INSTALL_INFO} --info-dir=${infodir} ${infodir}/$$f); \
|
||||
${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$f); \
|
||||
done; \
|
||||
else true; fi
|
||||
-chmod -R a+r ${datadir}/emacs ${COPYDESTS} ${infodir}
|
||||
-chmod -R a+r $(DESTDIR)${datadir}/emacs ${COPYDESTS} $(DESTDIR)${infodir}
|
||||
thisdir=`/bin/pwd`; \
|
||||
cd ${srcdir}/etc; \
|
||||
for page in emacs emacsclient etags ctags ; do \
|
||||
(cd $${thisdir}; \
|
||||
${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${man1dir}/$${page}${manext}; \
|
||||
chmod a+r ${man1dir}/$${page}${manext}); \
|
||||
${INSTALL_DATA} ${srcdir}/etc/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \
|
||||
chmod a+r $(DESTDIR)${man1dir}/$${page}${manext}); \
|
||||
done
|
||||
|
||||
### Install LEIM files. Although they are machine-independent, we
|
||||
@ -537,15 +537,15 @@ install-strip:
|
||||
### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use mkinstalldirs
|
||||
### instead of mkdir. Not all systems' mkdir programs have the `-p' flag.
|
||||
mkdir: FRC
|
||||
if [ -d ${datadir} ]; then true; else \
|
||||
$(srcdir)/mkinstalldirs ${datadir}; \
|
||||
chmod a+r ${datadir};\
|
||||
if [ -d $(DESTDIR)${datadir} ]; then true; else \
|
||||
$(srcdir)/mkinstalldirs $(DESTDIR)${datadir}; \
|
||||
chmod a+r $(DESTDIR)${datadir};\
|
||||
fi
|
||||
$(srcdir)/mkinstalldirs ${COPYDESTS} ${infodir} ${man1dir} \
|
||||
${bindir} ${docdir} ${libexecdir} \
|
||||
${datadir}/emacs/site-lisp \
|
||||
${datadir}/emacs/${version}/site-lisp \
|
||||
`echo ${locallisppath} | sed 's/:/ /g'`
|
||||
$(srcdir)/mkinstalldirs ${COPYDESTS} $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \
|
||||
$(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \
|
||||
$(DESTDIR)${datadir}/emacs/site-lisp \
|
||||
$(DESTDIR)${datadir}/emacs/${version}/site-lisp \
|
||||
$(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),g'`
|
||||
|
||||
### Delete all the installed files that the `install' target would
|
||||
### create (but not the noninstalled files such as `make all' would
|
||||
@ -558,24 +558,24 @@ uninstall:
|
||||
prefix=${prefix} exec_prefix=${exec_prefix} \
|
||||
bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir})
|
||||
-unset CDPATH; \
|
||||
for dir in ${lispdir} ${etcdir} ; do \
|
||||
for dir in $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do \
|
||||
if [ -d $${dir} ]; then \
|
||||
case `(cd $${dir} ; /bin/pwd)` in \
|
||||
`(cd ${srcdir} ; /bin/pwd)`* ) ;; \
|
||||
* ) rm -rf $${dir} ;; \
|
||||
esac ; \
|
||||
case $${dir} in \
|
||||
${datadir}/emacs/${version}/* ) \
|
||||
rm -rf ${datadir}/emacs/${version} \
|
||||
$(DESTDIR)${datadir}/emacs/${version}/* ) \
|
||||
rm -rf $(DESTDIR)${datadir}/emacs/${version} \
|
||||
;; \
|
||||
esac ; \
|
||||
fi ; \
|
||||
done
|
||||
(cd ${archlibdir} && rm -f fns-*)
|
||||
-rm -rf ${libexecdir}/emacs/${version}
|
||||
(cd ${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* newsticker* org* sc* ses* vip* smtpmail* url* rcirc* erc*)
|
||||
(cd ${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
|
||||
(cd ${bindir} && rm -f $(EMACSFULL) $(EMACS))
|
||||
(cd $(DESTDIR)${archlibdir} && rm -f fns-*)
|
||||
-rm -rf $(DESTDIR)${libexecdir}/emacs/${version}
|
||||
(cd $(DESTDIR)${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* newsticker* org* sc* ses* vip* smtpmail* url* rcirc* erc*)
|
||||
(cd $(DESTDIR)${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
|
||||
(cd $(DESTDIR)${bindir} && rm -f $(EMACSFULL) $(EMACS))
|
||||
|
||||
|
||||
FRC:
|
||||
|
@ -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
3
configure
vendored
@ -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
|
||||
;;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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@
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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:
|
||||
|
128
lisp/ChangeLog
128
lisp/ChangeLog
@ -1,3 +1,109 @@
|
||||
2006-03-03 Agustin Martin <agustin.martin@hispalinux.es>
|
||||
|
||||
textmodes/flyspell.el (flyspell-process-localwords): Be
|
||||
case-sensitive.
|
||||
|
||||
2006-03-03 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* cus-edit.el (custom-quote): Remove function, since it has been
|
||||
moved to custom.el.
|
||||
|
||||
* font-lock.el (lisp-font-lock-keywords-2)
|
||||
* emacs-lisp/rx.el (rx-check-any, rx-check-not)
|
||||
* generic-x.el (reg-generic-mode): Quote "]"s in regexps when
|
||||
they have no special meaning.
|
||||
|
||||
* midnight.el (clean-buffer-list): Handle case where base-buffer of
|
||||
indirect buffer gets killed before indirect buffer. Use dolist.
|
||||
|
||||
2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
|
||||
|
||||
* emacs-lisp/edebug.el (edebug-display): Use `edebug-sit-for-seconds'
|
||||
value instead of a literal constant (1) on more pauses.
|
||||
|
||||
2006-03-03 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
|
||||
|
||||
* textmodes/flyspell.el (flyspell-external-point-words): Be
|
||||
case-sensitive.
|
||||
|
||||
2006-03-03 Ryan Yeske <rcyeske@gmail.com>
|
||||
|
||||
* net/rcirc.el (rcirc-url-regexp): Match entire url when it starts
|
||||
with "www".
|
||||
|
||||
2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
|
||||
|
||||
allout.el: Restablished intermediate missing comment header to
|
||||
preserve outline structure.
|
||||
(allout-beginning-of-current-entry): Wasn't skipping invisible
|
||||
text - fixed.
|
||||
(allout-open-topic): Was failing when opening a topic at
|
||||
end-of-buffer - fixed.
|
||||
(allout-minor-mode): Moved nearer to allout-mode function.
|
||||
|
||||
2006-03-02 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* textmodes/org.el (org-paste-subtree): Removed forgotten (debug)
|
||||
form.
|
||||
|
||||
2006-03-02 Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
* dframe.el (dframe-frame-mode): Don't burp when menu-bar-lines
|
||||
is nil.
|
||||
|
||||
* progmodes/gud.el (gud-speedbar-menu-items): Use
|
||||
buffer-local-value and add missing :visible keyword.
|
||||
|
||||
* progmodes/gdb-ui.el (gdb-speedbar-refresh): Quieten
|
||||
speedbar-refresh.
|
||||
|
||||
2006-03-01 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* textmodes/reftex-index.el (reftex-index-map): `follow-mouse'
|
||||
must be `follow-link'.
|
||||
|
||||
* textmodes/reftex-toc.el (reftex-toc-map): `follow-mouse' must be
|
||||
`follow-link'.
|
||||
|
||||
* textmodes/org.el (org-export-as-html): Fix bugs in HTML
|
||||
formatting: No nested anchors.
|
||||
(org-all-targets): Fix bug with XEmacs compatibility.
|
||||
(org-read-date): Add (require 'parse-time).
|
||||
(org-set-tags): Fix bug with extra inserted space.
|
||||
(org-export-html-style): Define a style class for targets.
|
||||
(org-agenda-keymap, org-mouse-map): Add a binding for
|
||||
`follow-link'.
|
||||
(org-hide-leading-stars): New option.
|
||||
(org-hide): New face.
|
||||
(org-set-font-lock-defaults): Allow to hide leading stars.
|
||||
(org-get-legal-level, org-tr-level): New functions.
|
||||
(org-odd-levels-only): New option.
|
||||
(org-level-faces, org-paste-subtree, org-convert-to-odd-levels)
|
||||
(org-demote, org-promote): Deal with double-star levels.
|
||||
(org-convert-to-odd-levels): New command.
|
||||
|
||||
2006-03-01 Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
* speedbar.el (speedbar-update-localized-contents): Try to
|
||||
preserve window-start.
|
||||
(speedbar-update-directory-contents): Try to preserve window-start
|
||||
and window-point.
|
||||
(speedbar-update-special-contents): Don't move back to start of
|
||||
window.
|
||||
|
||||
* progmodes/gdb-ui.el (gdb-speedbar-refresh): Rename from
|
||||
gdb-speedbar-timer-fn. Use speedbar-refresh instead of
|
||||
speedbar-timer-fn
|
||||
(gdb-var-update-handler, gdb-var-update-handler-1): Use it.
|
||||
(gdb-speedbar-expand-node): Use speedbar-delete-subblock
|
||||
instead of gdb-speedbar-timer-fn.
|
||||
|
||||
2006-02-28 Jay Belanger <belanger@truman.edu>
|
||||
|
||||
* calc/calccomp.el (math-compose-tex-matrix): Add a latex option.
|
||||
(math-compose-expr): Use latex option when calling
|
||||
`math-compose-tex-matrix' for latex mode.
|
||||
|
||||
2006-02-28 Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
* speedbar.el: Re-instate comments about developing for speedbar
|
||||
@ -21,7 +127,7 @@
|
||||
|
||||
2006-02-27 Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
* progmodes/gdb-ui.el: (gdb-source-window): New variable.
|
||||
* progmodes/gdb-ui.el (gdb-source-window): New variable.
|
||||
Re-introduce the concept of a source window.
|
||||
(gdb-get-buffer-create): Rename from gdb-get-create-buffer for
|
||||
consistency with get-buffer-create.
|
||||
@ -43,8 +149,8 @@
|
||||
* textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse'
|
||||
binding.
|
||||
|
||||
* textmodes/reftex-sel.el (reftex-select-label-map,
|
||||
reftex-select-bib-map): Add `follow-mouse' binding.
|
||||
* textmodes/reftex-sel.el (reftex-select-label-map)
|
||||
(reftex-select-bib-map): Add `follow-mouse' binding.
|
||||
|
||||
2006-02-26 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
@ -103,7 +209,7 @@
|
||||
|
||||
2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
|
||||
|
||||
* progmodes/cc-mode.el (c-postprocess-file-styles): bind
|
||||
* progmodes/cc-mode.el (c-postprocess-file-styles): Bind
|
||||
inhibit-read-only to t, around the call to
|
||||
c-remove-any-local-eval-or-mode-variables, so that it works on a
|
||||
RO file.
|
||||
@ -136,8 +242,8 @@
|
||||
* progmodes/cc-mode.el: File Local variables: Solve the problem
|
||||
where both `mode' and c-file-offsets are specified: `mode' will
|
||||
overwrite c-f-o's settings:
|
||||
(c-remove-any-local-eval-or-mode-variables): new function.
|
||||
(c-postprocess-file-styles): call the above new function, within
|
||||
(c-remove-any-local-eval-or-mode-variables): New function.
|
||||
(c-postprocess-file-styles): Call the above new function, within
|
||||
c-tentative-buffer-change, to splat `mode' and `eval' before the
|
||||
second hack-local-variables.
|
||||
|
||||
@ -176,15 +282,15 @@
|
||||
Sometimes, c-s-i got separated from the mode name on the mode
|
||||
line.
|
||||
|
||||
* progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma,
|
||||
c-electric-colon): Correct doc-strings: "/ln" -> "/la".
|
||||
* progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma)
|
||||
(c-electric-colon): Correct doc-strings: "/ln" -> "/la".
|
||||
|
||||
2006-02-24 Martin Stjernholm <bug-cc-mode@gnu.org>
|
||||
|
||||
* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improved the
|
||||
* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improve the
|
||||
error message when there's an evaluation error to show whether
|
||||
it's loaded from source or not.
|
||||
(c-filter-ops): Made it available at runtime too to work when
|
||||
(c-filter-ops): Make it available at runtime too to work when
|
||||
`c-make-init-lang-vars-fun' needs to evaluate from source.
|
||||
|
||||
2006-02-24 Juanma Barranquero <lekktu@gmail.com>
|
||||
@ -269,7 +375,7 @@
|
||||
fail silently when there is no valid argument at point.
|
||||
(reftex-view-crossref-when-idle): Call `reftex-view-crossref' with
|
||||
`fail-silently' argument. From a patch by David Reiter.
|
||||
|
||||
|
||||
* textmodes/org.el (org-mark-ring-push, org-mark-ring-goto):
|
||||
New commands.
|
||||
(org-mark-ring): New variable.
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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 ""))))
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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."
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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.
|
||||
;;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 "<\\(<\\)+\\|>\\(>\\)+" 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]
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.)
|
||||
|
@ -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 =.
|
||||
|
270
man/org.texi
270
man/org.texi
@ -4,8 +4,8 @@
|
||||
@setfilename ../info/org
|
||||
@settitle Org Mode Manual
|
||||
|
||||
@set VERSION 4.06
|
||||
@set DATE February 2006
|
||||
@set VERSION 4.07
|
||||
@set DATE March 2006
|
||||
|
||||
@dircategory Emacs
|
||||
@direntry
|
||||
@ -188,9 +188,10 @@ Miscellaneous
|
||||
|
||||
* Completion:: M-TAB knows what you need
|
||||
* Customization:: Adapting Org-mode to your taste
|
||||
* Clean view:: Getting rid of leading stars in the outline
|
||||
* TTY keys:: Using Org-mode on a tty
|
||||
* FAQ:: Frequently asked questions
|
||||
* Interaction:: Other Emacs packages
|
||||
* TTY keys:: Using Org-mode on a tty
|
||||
* Bugs:: Things which do not work perfectly
|
||||
* Acknowledgments:: These people provided feedback and more
|
||||
|
||||
@ -378,6 +379,9 @@ example
|
||||
more text
|
||||
* Another top level headline
|
||||
@end example
|
||||
@noindent Some people find the many stars too noisy and would prefer an
|
||||
outline that has whitespace followed by a single star as headline
|
||||
starters. @ref{Clean view} describes a setup to realize this.
|
||||
|
||||
@node Visibility cycling, Motion, Headlines, Document Structure
|
||||
@section Visibility cycling
|
||||
@ -512,7 +516,9 @@ level)
|
||||
@item M-S-@key{down}
|
||||
Move subtree down (swap with next subtree of same level)
|
||||
@kindex C-c C-x C-w
|
||||
@kindex C-c C-x C-k
|
||||
@item C-c C-x C-w
|
||||
@itemx C-c C-x C-k
|
||||
Kill subtree, i.e. remove it from buffer but save in kill ring.
|
||||
@kindex C-c C-x M-w
|
||||
@item C-c C-x M-w
|
||||
@ -627,7 +633,7 @@ printed in any desired way.
|
||||
If you wish to implement a tag system to cross-correlate information,
|
||||
this can be done as well in Org-mode. Every headline can contain a
|
||||
list of tags, at the end of the headline. Tags are normal words
|
||||
containing letters and @samp{_}, but no numbers. Tags must be
|
||||
containing letters, numbers, @samp{_}, and @samp{@@}. Tags must be
|
||||
preceded and followed by a single colon; like @samp{:WORK:}. Several
|
||||
tags can be specified like @samp{:WORK:URGENT:}.
|
||||
|
||||
@ -709,16 +715,20 @@ sometimes easier to read with hand-formatted lists. Org-mode supports
|
||||
editing such lists, and the HTML exporter (@pxref{Exporting}) does
|
||||
parse and format them.
|
||||
|
||||
Org-mode knows ordered and unordered lists. Unordered list items
|
||||
start with @samp{-}, @samp{+}, or @samp{*}@footnote{When using
|
||||
@samp{*} as a bullet, lines must be indented or they will be seen as
|
||||
top-level headlines.} as bullets. Ordered list items start with
|
||||
@samp{1.} or @samp{1)}. Items belonging to the same list must have
|
||||
the same indentation on the first line. In particular, if an ordered
|
||||
list reaches number @samp{10.}, also the 2--digit numbers must be
|
||||
written left-aligned with the other numbers in the list. Indentation
|
||||
also determines the end of a list item. It ends before the next line
|
||||
that is indented like the bullet/number, or less. For example:
|
||||
Org-mode knows ordered and unordered lists. Unordered list items start
|
||||
with @samp{-}, @samp{+}, or @samp{*}@footnote{When using @samp{*} as a
|
||||
bullet, lines must be indented or they will be seen as top-level
|
||||
headlines. Also, when you are hiding leading stars to get a clean
|
||||
outline view, plain list items starting with a star are visually
|
||||
indistinguishable from true headlines. In short: Even though @samp{*}
|
||||
is supported, it may be better to not use it for plain list items} as
|
||||
bullets. Ordered list items start with @samp{1.} or @samp{1)}. Items
|
||||
belonging to the same list must have the same indentation on the first
|
||||
line. In particular, if an ordered list reaches number @samp{10.}, also
|
||||
the 2--digit numbers must be written left-aligned with the other numbers
|
||||
in the list. Indentation also determines the end of a list item. It
|
||||
ends before the next line that is indented like the bullet/number, or
|
||||
less. For example:
|
||||
|
||||
@example
|
||||
** Lord of the Rings
|
||||
@ -1050,10 +1060,12 @@ recalculation can be automated.
|
||||
@cindex syntax, of formulas
|
||||
|
||||
A formula can be any algebraic expression understood by the Emacs
|
||||
@file{calc} package. Before evaluation by @code{calc-eval}
|
||||
(@pxref{Calling Calc from Your Lisp Programs,calc-eval,Calling calc
|
||||
from Your Lisp Programs,calc,GNU Emacs Calc Manual}), variable
|
||||
substitution takes place:
|
||||
@file{calc} package. Note that @file{calc} has the slightly
|
||||
non-standard conversion that @samp{/} has lower precedence than
|
||||
@samp{*}, so that @samp{a/b*c} is interpreted as @samp{a/(b*c)}. Before
|
||||
evaluation by @code{calc-eval} (@pxref{Calling Calc from Your Lisp
|
||||
Programs,calc-eval,Calling calc from Your Lisp Programs,calc,GNU Emacs
|
||||
Calc Manual}), variable substitution takes place:
|
||||
|
||||
@example
|
||||
$ @r{refers to the current field}
|
||||
@ -1521,9 +1533,7 @@ can type or paste them straight into the buffer.
|
||||
|
||||
@cindex following links
|
||||
@kindex C-c C-o
|
||||
@kindex mouse-2
|
||||
@item C-c C-o
|
||||
@itemx mouse-2
|
||||
Open link at point. This will launch a web browser for URLs (using
|
||||
@command{browse-url-at-point}), run vm/gnus/bbdb for the corresponding
|
||||
links, and execute the command in a shell link. When the cursor is on
|
||||
@ -1542,8 +1552,11 @@ that date.
|
||||
shell link.
|
||||
|
||||
@kindex mouse-2
|
||||
@kindex mouse-1
|
||||
@item mouse-2
|
||||
On links, @kbd{mouse-2} will open the link just like @kbd{C-c C-o} would.
|
||||
@itemx mouse-1
|
||||
On links, @kbd{mouse-2} will open the link just like @kbd{C-c C-o}
|
||||
would. Under Emacs 22, also @kbd{mouse-1} will follow a link.
|
||||
|
||||
@kindex mouse-3
|
||||
@item mouse-3
|
||||
@ -2487,10 +2500,13 @@ Display the original location of the item in another window.
|
||||
Display original location and recenter that window.
|
||||
|
||||
@kindex mouse-2
|
||||
@kindex mouse-1
|
||||
@kindex @key{TAB}
|
||||
@item mouse-2
|
||||
@itemx mouse-1
|
||||
@itemx @key{TAB}
|
||||
Go to the original location of the item in another window.
|
||||
Go to the original location of the item in another window. Under Emacs
|
||||
22, also @kbd{mouse-1} will works for this.
|
||||
|
||||
@kindex @key{RET}
|
||||
@itemx @key{RET}
|
||||
@ -2952,9 +2968,10 @@ to make iCal re-read the calendar files each time a new version of
|
||||
@menu
|
||||
* Completion:: M-TAB knows what you need
|
||||
* Customization:: Adapting Org-mode to your taste
|
||||
* Clean view:: Getting rid of leading stars in the outline
|
||||
* TTY keys:: Using Org-mode on a tty
|
||||
* FAQ:: Frequently asked questions
|
||||
* Interaction:: Other Emacs packages
|
||||
* TTY keys:: Using Org-mode on a tty
|
||||
* Bugs:: Things which do not work perfectly
|
||||
* Acknowledgments:: These people provided feedback and more
|
||||
@end menu
|
||||
@ -3002,7 +3019,8 @@ Elsewhere, complete dictionary words using ispell.
|
||||
@end itemize
|
||||
@end table
|
||||
|
||||
@node Customization, FAQ, Completion, Miscellaneous
|
||||
|
||||
@node Customization, Clean view, Completion, Miscellaneous
|
||||
@section Customization
|
||||
@cindex customization
|
||||
@cindex options, for customization
|
||||
@ -3014,7 +3032,126 @@ describing the variables here. A structured overview of customization
|
||||
variables is available with @kbd{M-x org-customize}. Or select
|
||||
@code{Browse Org Group} from the @code{Org->Customization} menu.
|
||||
|
||||
@node FAQ, Interaction, Customization, Miscellaneous
|
||||
@node Clean view, TTY keys, Customization, Miscellaneous
|
||||
@section A cleaner outline view
|
||||
@cindex hiding leading stars
|
||||
@cindex clean outline view
|
||||
|
||||
Some people find it noisy and distracting that the Org-mode headlines
|
||||
are starting with a potentially large number of stars. For example in
|
||||
the example tree from @ref{Headlines}:
|
||||
|
||||
@example
|
||||
* Top level headline
|
||||
** Second level
|
||||
*** 3rd level
|
||||
some text
|
||||
*** 3rd level
|
||||
more text
|
||||
* Another top level headline
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Unfortunately this is deeply ingrained into the code of Org-mode and
|
||||
cannot be easily changed. You can, however, modify the display in such
|
||||
a way that all leading stars become invisible and the outline more easy
|
||||
to read. To do this, customize the variable
|
||||
@code{org-hide-leading-stars} like this:
|
||||
|
||||
@lisp
|
||||
(setq org-hide-leading-stars t)
|
||||
@end lisp
|
||||
|
||||
@noindent
|
||||
and restart emacs (this is necessary to make this change effective).
|
||||
The tree then becomes
|
||||
|
||||
@example
|
||||
* Top level headline
|
||||
* Second level
|
||||
* 3rd level
|
||||
some text
|
||||
* 3rd level
|
||||
more text
|
||||
* Another top level headline
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Note that the leading stars are not truly replaced by whitespace, they
|
||||
are only fontified with the face @code{org-hide} that uses the
|
||||
background color as font color. If are are not using either white or
|
||||
black background, you may have to customize this face to get the wanted
|
||||
effect. Another possibility is to set this font such that the extra
|
||||
stars are @i{almost} invisible, for example using the color
|
||||
@code{grey90} on a white background.
|
||||
|
||||
Things become cleaner still if you skip all the even levels and use only
|
||||
odd levels 1, 3, 5..., effectively adding two stars to go from one
|
||||
outline level to the next:
|
||||
|
||||
@example
|
||||
* Top level headline
|
||||
* Second level
|
||||
* 3rd level
|
||||
some text
|
||||
* 3rd level
|
||||
more text
|
||||
* Another top level headline
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
In order to make the structure editing and export commands handle this
|
||||
convention correctly, use (again a restart of emacs will be needed)
|
||||
|
||||
@lisp
|
||||
(setq org-odd-levels-only t)
|
||||
@end lisp
|
||||
|
||||
@noindent
|
||||
You can convert an Org-mode file from single-star-per-level to
|
||||
double-star-per-level convention with @kbd{M-x org-convert-to-odd-levels
|
||||
RET} in that file. It is not possible to use this setting on a
|
||||
file-local basis, so you need to decide which format to use.
|
||||
|
||||
@node TTY keys, FAQ, Clean view, Miscellaneous
|
||||
@section Using org-mode on a tty
|
||||
@cindex tty keybindings
|
||||
|
||||
Org-mode uses a number of keys that are not accessible on a tty. This
|
||||
applies to most special keys like cursor keys, @key{TAB} and
|
||||
@key{RET}, when these are combined with modifier keys like @key{Meta}
|
||||
and/or @key{Shift}. Org-mode uses these bindings because it needs to
|
||||
provide keys for a large number of commands, and because these keys
|
||||
appeared particularly easy to remember. In order to still be able to
|
||||
access the core functionality of Org-mode on a tty, alternative
|
||||
bindings are provided. Here is a complete list of these bindings,
|
||||
which are obviously more cumbersome to use. Note that sometimes a
|
||||
work-around can be better. For example changing a time stamp is
|
||||
really only fun with @kbd{S-@key{cursor}} keys. On a tty you would
|
||||
rather use @kbd{C-c .} to re-insert the timestamp.
|
||||
|
||||
@page
|
||||
@multitable @columnfractions 0.15 0.2 0.2
|
||||
@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2}
|
||||
@item @kbd{S-@key{TAB}} @tab @kbd{C-u @key{TAB}} @tab
|
||||
@item @kbd{M-@key{left}} @tab @kbd{C-c C-x l} @tab @kbd{@key{Esc} @key{left}}
|
||||
@item @kbd{M-S-@key{left}} @tab @kbd{C-c C-x L} @tab
|
||||
@item @kbd{M-@key{right}} @tab @kbd{C-c C-x r} @tab @kbd{@key{Esc} @key{right}}
|
||||
@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R} @tab
|
||||
@item @kbd{M-@key{up}} @tab @kbd{C-c C-x u} @tab @kbd{@key{Esc} @key{up}}
|
||||
@item @kbd{M-S-@key{up}} @tab @kbd{C-c C-x U} @tab
|
||||
@item @kbd{M-@key{down}} @tab @kbd{C-c C-x d} @tab @kbd{@key{Esc} @key{down}}
|
||||
@item @kbd{M-S-@key{down}} @tab @kbd{C-c C-x D} @tab
|
||||
@item @kbd{S-@key{RET}} @tab @kbd{C-c C-x c} @tab
|
||||
@item @kbd{M-@key{RET}} @tab @kbd{C-c C-x m} @tab @kbd{@key{Esc} @key{RET}}
|
||||
@item @kbd{M-S-@key{RET}} @tab @kbd{C-c C-x M} @tab
|
||||
@item @kbd{S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab
|
||||
@item @kbd{S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab
|
||||
@item @kbd{S-@key{up}} @tab @kbd{C-c C-x @key{up}} @tab
|
||||
@item @kbd{S-@key{down}} @tab @kbd{C-c C-x @key{down}} @tab
|
||||
@end multitable
|
||||
|
||||
@node FAQ, Interaction, TTY keys, Miscellaneous
|
||||
@section Frequently asked questions
|
||||
@cindex FAQ
|
||||
|
||||
@ -3026,6 +3163,11 @@ turn it on for all @file{README} files?}
|
||||
(add-to-list 'auto-mode-alist '("README$" . org-mode))
|
||||
@end example
|
||||
|
||||
@item @b{All these stars are driving me mad, I just find the Emacs
|
||||
outlines unreadable. Can't you just put white space and a single star as a
|
||||
starter for headlines?}@*
|
||||
See @ref{Clean view}.
|
||||
|
||||
@item @b{I would like to have two windows on the same Org-mode
|
||||
file, but with different outline visibility. Is that possible?}@*
|
||||
@cindex @code{make-indirect-buffer}
|
||||
@ -3138,15 +3280,23 @@ also the documentation of the @command{org-diary} function.
|
||||
@end enumerate
|
||||
|
||||
|
||||
@node Interaction, TTY keys, FAQ, Miscellaneous
|
||||
@node Interaction, Bugs, FAQ, Miscellaneous
|
||||
@section Interaction with other packages
|
||||
@cindex packages, interaction with other
|
||||
Org-mode can cooperate with the following packages:
|
||||
|
||||
@table @asis
|
||||
@cindex @file{org-mouse.el}
|
||||
@item @file{org-mouse.el} by Piotr Zielinski
|
||||
This package implements extended mouse functionality for Org-mode. It
|
||||
allows to cycle visibility and to edit the document structure with the
|
||||
mouse. It also provides a context-sensitive menu that changes depending
|
||||
on the context of a mouse-click. Use a search engine to find this
|
||||
package on the web.
|
||||
@cindex @file{table.el}
|
||||
@item @file{table.el} by Takaaki Ota
|
||||
Org mode cooperates with table.el, see @ref{table.el}.
|
||||
Org mode cooperates with table.el, see @ref{table.el}. @file{table.el}
|
||||
is part of Emacs 22.
|
||||
@cindex @file{calc.el}
|
||||
@item @file{calc.el} by Dave Gillespie
|
||||
Org-mode uses the calc package for implementing spreadsheet
|
||||
@ -3189,6 +3339,7 @@ to have other replacement keys, look at the variable
|
||||
@code{org-disputed-keys}.
|
||||
@item @file{remember.el} by John Wiegley
|
||||
Org mode cooperates with remember, see @ref{Remember}.
|
||||
@file{remember.el} is not part of Emacs, find it on the web.
|
||||
@cindex @file{planner.el}
|
||||
@item @file{planner.el} by John Wiegley
|
||||
Planner is another tool to plan work and keep track of tasks. Planner
|
||||
@ -3197,48 +3348,11 @@ on Emacs-Wiki. If Planner is your primary tool, it can be useful to
|
||||
display the agenda entries resulting from org files in day-pages of
|
||||
the planner. This can be done through the diary of the calendar:
|
||||
Integrate org files into the diary as described above, and then turn
|
||||
on the diary support of planner.
|
||||
on the diary support of planner. Planner is not part of Emacs, find it
|
||||
on the web.
|
||||
@end table
|
||||
|
||||
@node TTY keys, Bugs, Interaction, Miscellaneous
|
||||
@section Using org-mode on a tty
|
||||
@cindex tty keybindings
|
||||
|
||||
Org-mode uses a number of keys that are not accessible on a tty. This
|
||||
applies to most special keys like cursor keys, @key{TAB} and
|
||||
@key{RET}, when these are combined with modifier keys like @key{Meta}
|
||||
and/or @key{Shift}. Org-mode uses these bindings because it needs to
|
||||
provide keys for a large number of commands, and because these keys
|
||||
appeared particularly easy to remember. In order to still be able to
|
||||
access the core functionality of Org-mode on a tty, alternative
|
||||
bindings are provided. Here is a complete list of these bindings,
|
||||
which are obviously more cumbersome to use. Note that sometimes a
|
||||
work-around can be better. For example changing a time stamp is
|
||||
really only fun with @kbd{S-@key{cursor}} keys. On a tty you would
|
||||
rather use @kbd{C-c .} to re-insert the timestamp.
|
||||
|
||||
@page
|
||||
@multitable @columnfractions 0.15 0.2 0.2
|
||||
@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2}
|
||||
@item @kbd{S-@key{TAB}} @tab @kbd{C-u @key{TAB}} @tab
|
||||
@item @kbd{M-@key{left}} @tab @kbd{C-c C-x l} @tab @kbd{@key{Esc} @key{left}}
|
||||
@item @kbd{M-S-@key{left}} @tab @kbd{C-c C-x L} @tab
|
||||
@item @kbd{M-@key{right}} @tab @kbd{C-c C-x r} @tab @kbd{@key{Esc} @key{right}}
|
||||
@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R} @tab
|
||||
@item @kbd{M-@key{up}} @tab @kbd{C-c C-x u} @tab @kbd{@key{Esc} @key{up}}
|
||||
@item @kbd{M-S-@key{up}} @tab @kbd{C-c C-x U} @tab
|
||||
@item @kbd{M-@key{down}} @tab @kbd{C-c C-x d} @tab @kbd{@key{Esc} @key{down}}
|
||||
@item @kbd{M-S-@key{down}} @tab @kbd{C-c C-x D} @tab
|
||||
@item @kbd{S-@key{RET}} @tab @kbd{C-c C-x c} @tab
|
||||
@item @kbd{M-@key{RET}} @tab @kbd{C-c C-x m} @tab @kbd{@key{Esc} @key{RET}}
|
||||
@item @kbd{M-S-@key{RET}} @tab @kbd{C-c C-x M} @tab
|
||||
@item @kbd{S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab
|
||||
@item @kbd{S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab
|
||||
@item @kbd{S-@key{up}} @tab @kbd{C-c C-x @key{up}} @tab
|
||||
@item @kbd{S-@key{down}} @tab @kbd{C-c C-x @key{down}} @tab
|
||||
@end multitable
|
||||
|
||||
@node Bugs, Acknowledgments, TTY keys, Miscellaneous
|
||||
@node Bugs, Acknowledgments, Interaction, Miscellaneous
|
||||
@section Bugs
|
||||
@cindex bugs
|
||||
|
||||
@ -3246,13 +3360,6 @@ Here is a list of things which should work differently, but which I
|
||||
have found too hard to fix.
|
||||
|
||||
@itemize @bullet
|
||||
@c @item
|
||||
@c If you call @code{fill-paragraph} (bound to @kbd{M-q}) in a table, the
|
||||
@c filling is correctly disabled. However, if some text directly
|
||||
@c (without an empty line in between) precedes or follows a table, calling
|
||||
@c @code{fill-paragraph} in that text will also fill the table like
|
||||
@c normal text. Also, @code{fill-region} does bypass the
|
||||
@c @code{fill-paragraph} code and will fill tables like normal text.
|
||||
@item
|
||||
Text in an entry protected with the @samp{QUOTE} keyword should not
|
||||
autowrap.
|
||||
@ -3261,6 +3368,10 @@ When the application called by @kbd{C-c C-o} to open a file link fails
|
||||
(for example because the application does not exits or refuses to open
|
||||
the file), it does so silently. No error message is displayed.
|
||||
@item
|
||||
Plain list items should be able to hold a TODO item. Unfortunately this
|
||||
has so many technical problems that I will only consider this change for
|
||||
the next major release (5.0).
|
||||
@item
|
||||
The remote-editing commands in the agenda buffer cannot be undone with
|
||||
@code{undo} called from within the agenda buffer. But you can go to
|
||||
the corresponding buffer (using @key{TAB} or @key{RET} and execute
|
||||
@ -3276,11 +3387,9 @@ the text properties are lost when the fancy-diary-display is used.
|
||||
However, from Org-mode's timeline and agenda buffers (created with
|
||||
@kbd{C-c C-r} and @kbd{C-c a}), things do work correctly.
|
||||
@item
|
||||
Linux should also have a default viewer application, using mailcap.
|
||||
Maybe we can use GNUS or VM mime code? Or dired's guessing commands?
|
||||
Any hints (or even patches) are appreciated.
|
||||
@item
|
||||
When you write @samp{x = a /b/ c}, b will be exported in italics.
|
||||
You can only make a single word boldface or italic. To emphasize
|
||||
several words in a row, each much have the emphasize markers, like in
|
||||
@samp{*three* *bold* *words*}.
|
||||
@item
|
||||
The exporters work well, but could be made more efficient.
|
||||
@end itemize
|
||||
@ -3353,6 +3462,9 @@ to GNUS.
|
||||
@item
|
||||
Roland Winkler pointed out that additional keybindings are needed to
|
||||
use Org-mode on a tty.
|
||||
@item
|
||||
Piotr Zielinski wrote @file{org-mouse.el} and pointed out to me that
|
||||
Emacs 22 can be made to follow links using mouse-1 clicks.
|
||||
@c @item
|
||||
@c Nic Ferrier and Christian Egli implemented XML export.
|
||||
@end itemize
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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 == '$')
|
||||
|
43
src/window.c
43
src/window.c
@ -52,6 +52,7 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
|
||||
Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;
|
||||
Lisp_Object Qscroll_up, Qscroll_down;
|
||||
Lisp_Object Qwindow_size_fixed;
|
||||
extern Lisp_Object Qleft_margin, Qright_margin;
|
||||
|
||||
@ -4723,9 +4724,9 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
||||
struct text_pos start;
|
||||
Lisp_Object tem;
|
||||
int this_scroll_margin;
|
||||
int preserve_y;
|
||||
/* True if we fiddled the window vscroll field without really scrolling. */
|
||||
int vscrolled = 0;
|
||||
static int preserve_y = -1;
|
||||
|
||||
SET_TEXT_POS_FROM_MARKER (start, w->start);
|
||||
|
||||
@ -4789,9 +4790,18 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
||||
point in the same window line as it is now, so get that line. */
|
||||
if (!NILP (Vscroll_preserve_screen_position))
|
||||
{
|
||||
start_display (&it, w, start);
|
||||
move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
|
||||
preserve_y = it.current_y;
|
||||
/* We preserve the goal pixel coordinate across consecutive
|
||||
calls to scroll-up or scroll-down. This avoids the
|
||||
possibility of point becoming "stuck" on a tall line when
|
||||
scrolling by one line. */
|
||||
if (preserve_y < 0
|
||||
|| (current_kboard->Vlast_command != Qscroll_up
|
||||
&& current_kboard->Vlast_command != Qscroll_down))
|
||||
{
|
||||
start_display (&it, w, start);
|
||||
move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
|
||||
preserve_y = it.current_y;
|
||||
}
|
||||
}
|
||||
else
|
||||
preserve_y = -1;
|
||||
@ -4928,10 +4938,9 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
||||
{
|
||||
/* If we have a header line, take account of it.
|
||||
This is necessary because we set it.current_y to 0, above. */
|
||||
if (WINDOW_WANTS_HEADER_LINE_P (w))
|
||||
preserve_y -= CURRENT_HEADER_LINE_HEIGHT (w);
|
||||
|
||||
move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y);
|
||||
move_it_to (&it, -1, -1,
|
||||
preserve_y - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ),
|
||||
-1, MOVE_TO_Y);
|
||||
SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
|
||||
}
|
||||
else
|
||||
@ -4985,15 +4994,9 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
||||
{
|
||||
SET_TEXT_POS_FROM_MARKER (start, w->start);
|
||||
start_display (&it, w, start);
|
||||
#if 0 /* It's wrong to subtract this here
|
||||
because we called start_display again
|
||||
and did not alter it.current_y this time. */
|
||||
|
||||
/* If we have a header line, take account of it. */
|
||||
if (WINDOW_WANTS_HEADER_LINE_P (w))
|
||||
preserve_y -= CURRENT_HEADER_LINE_HEIGHT (w);
|
||||
#endif
|
||||
|
||||
/* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT
|
||||
here because we called start_display again and did not
|
||||
alter it.current_y this time. */
|
||||
move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y);
|
||||
SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
|
||||
}
|
||||
@ -6990,6 +6993,12 @@ init_window ()
|
||||
void
|
||||
syms_of_window ()
|
||||
{
|
||||
Qscroll_up = intern ("scroll-up");
|
||||
staticpro (&Qscroll_up);
|
||||
|
||||
Qscroll_down = intern ("scroll-down");
|
||||
staticpro (&Qscroll_down);
|
||||
|
||||
Qwindow_size_fixed = intern ("window-size-fixed");
|
||||
staticpro (&Qwindow_size_fixed);
|
||||
Fset (Qwindow_size_fixed, Qnil);
|
||||
|
99
src/xdisp.c
99
src/xdisp.c
@ -269,6 +269,12 @@ int auto_raise_tool_bar_buttons_p;
|
||||
|
||||
int make_cursor_line_fully_visible_p;
|
||||
|
||||
/* Margin below tool bar in pixels. 0 or nil means no margin.
|
||||
If value is `internal-border-width' or `border-width',
|
||||
the corresponding frame parameter is used. */
|
||||
|
||||
Lisp_Object Vtool_bar_border;
|
||||
|
||||
/* Margin around tool bar buttons in pixels. */
|
||||
|
||||
Lisp_Object Vtool_bar_button_margin;
|
||||
@ -839,7 +845,7 @@ static void store_mode_line_noprop_char P_ ((char));
|
||||
static int store_mode_line_noprop P_ ((const unsigned char *, int, int));
|
||||
static void x_consider_frame_title P_ ((Lisp_Object));
|
||||
static void handle_stop P_ ((struct it *));
|
||||
static int tool_bar_lines_needed P_ ((struct frame *));
|
||||
static int tool_bar_lines_needed P_ ((struct frame *, int *));
|
||||
static int single_display_spec_intangible_p P_ ((Lisp_Object));
|
||||
static void ensure_echo_area_buffers P_ ((void));
|
||||
static Lisp_Object unwind_with_echo_area_buffer P_ ((Lisp_Object));
|
||||
@ -950,7 +956,7 @@ static int in_ellipses_for_invisible_text_p P_ ((struct display_pos *,
|
||||
static void update_tool_bar P_ ((struct frame *, int));
|
||||
static void build_desired_tool_bar_string P_ ((struct frame *f));
|
||||
static int redisplay_tool_bar P_ ((struct frame *));
|
||||
static void display_tool_bar_line P_ ((struct it *));
|
||||
static void display_tool_bar_line P_ ((struct it *, int));
|
||||
static void notice_overwritten_cursor P_ ((struct window *,
|
||||
enum glyph_row_area,
|
||||
int, int, int, int));
|
||||
@ -9429,11 +9435,17 @@ build_desired_tool_bar_string (f)
|
||||
}
|
||||
|
||||
|
||||
/* Display one line of the tool-bar of frame IT->f. */
|
||||
/* Display one line of the tool-bar of frame IT->f.
|
||||
|
||||
HEIGHT specifies the desired height of the tool-bar line.
|
||||
If the actual height of the glyph row is less than HEIGHT, the
|
||||
row's height is increased to HEIGHT, and the icons are centered
|
||||
vertically in the new height. */
|
||||
|
||||
static void
|
||||
display_tool_bar_line (it)
|
||||
display_tool_bar_line (it, height)
|
||||
struct it *it;
|
||||
int height;
|
||||
{
|
||||
struct glyph_row *row = it->glyph_row;
|
||||
int max_x = it->last_visible_x;
|
||||
@ -9489,11 +9501,22 @@ display_tool_bar_line (it)
|
||||
out:;
|
||||
|
||||
row->displays_text_p = row->used[TEXT_AREA] != 0;
|
||||
/* Use default face for the border below the tool bar. */
|
||||
if (!row->displays_text_p)
|
||||
it->face_id = DEFAULT_FACE_ID;
|
||||
extend_face_to_end_of_line (it);
|
||||
last = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA] - 1;
|
||||
last->right_box_line_p = 1;
|
||||
if (last == row->glyphs[TEXT_AREA])
|
||||
last->left_box_line_p = 1;
|
||||
|
||||
/* Make line the desired height and center it vertically. */
|
||||
if ((height -= it->max_ascent + it->max_descent) > 0)
|
||||
{
|
||||
it->max_ascent += height / 2;
|
||||
it->max_descent += (height + 1) / 2;
|
||||
}
|
||||
|
||||
compute_line_metrics (it);
|
||||
|
||||
/* If line is empty, make it occupy the rest of the tool-bar. */
|
||||
@ -9517,11 +9540,13 @@ display_tool_bar_line (it)
|
||||
|
||||
|
||||
/* Value is the number of screen lines needed to make all tool-bar
|
||||
items of frame F visible. */
|
||||
items of frame F visible. The number of actual rows needed is
|
||||
returned in *N_ROWS if non-NULL. */
|
||||
|
||||
static int
|
||||
tool_bar_lines_needed (f)
|
||||
tool_bar_lines_needed (f, n_rows)
|
||||
struct frame *f;
|
||||
int *n_rows;
|
||||
{
|
||||
struct window *w = XWINDOW (f->tool_bar_window);
|
||||
struct it it;
|
||||
@ -9537,9 +9562,12 @@ tool_bar_lines_needed (f)
|
||||
{
|
||||
it.glyph_row = w->desired_matrix->rows;
|
||||
clear_glyph_row (it.glyph_row);
|
||||
display_tool_bar_line (&it);
|
||||
display_tool_bar_line (&it, 0);
|
||||
}
|
||||
|
||||
if (n_rows)
|
||||
*n_rows = it.vpos;
|
||||
|
||||
return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f);
|
||||
}
|
||||
|
||||
@ -9568,7 +9596,7 @@ DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed,
|
||||
if (f->n_tool_bar_items)
|
||||
{
|
||||
build_desired_tool_bar_string (f);
|
||||
nlines = tool_bar_lines_needed (f);
|
||||
nlines = tool_bar_lines_needed (f, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9613,9 +9641,50 @@ redisplay_tool_bar (f)
|
||||
build_desired_tool_bar_string (f);
|
||||
reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
|
||||
|
||||
if (f->n_tool_bar_rows == 0)
|
||||
{
|
||||
(void)tool_bar_lines_needed (f, &f->n_tool_bar_rows);
|
||||
if (f->n_tool_bar_rows == 0)
|
||||
f->n_tool_bar_rows = -1;
|
||||
}
|
||||
|
||||
/* Display as many lines as needed to display all tool-bar items. */
|
||||
while (it.current_y < it.last_visible_y)
|
||||
display_tool_bar_line (&it);
|
||||
|
||||
if (f->n_tool_bar_rows > 0)
|
||||
{
|
||||
int border, rows, height, extra;
|
||||
|
||||
if (INTEGERP (Vtool_bar_border))
|
||||
border = XINT (Vtool_bar_border);
|
||||
else if (EQ (Vtool_bar_border, Qinternal_border_width))
|
||||
border = FRAME_INTERNAL_BORDER_WIDTH (f);
|
||||
else if (EQ (Vtool_bar_border, Qborder_width))
|
||||
border = f->border_width;
|
||||
else
|
||||
border = 0;
|
||||
if (border < 0)
|
||||
border = 0;
|
||||
|
||||
rows = f->n_tool_bar_rows;
|
||||
height = (it.last_visible_y - border) / rows;
|
||||
extra = it.last_visible_y - border - height * rows;
|
||||
|
||||
while (it.current_y < it.last_visible_y)
|
||||
{
|
||||
int h = 0;
|
||||
if (extra > 0 && rows-- > 0)
|
||||
{
|
||||
h = (extra + rows - 1) / rows;
|
||||
extra -= h;
|
||||
}
|
||||
display_tool_bar_line (&it, height + h);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (it.current_y < it.last_visible_y)
|
||||
display_tool_bar_line (&it, 0);
|
||||
}
|
||||
|
||||
/* It doesn't make much sense to try scrolling in the tool-bar
|
||||
window, so don't do it. */
|
||||
@ -9648,7 +9717,7 @@ redisplay_tool_bar (f)
|
||||
/* Resize windows as needed by changing the `tool-bar-lines'
|
||||
frame parameter. */
|
||||
if (change_height_p
|
||||
&& (nlines = tool_bar_lines_needed (f),
|
||||
&& (nlines = tool_bar_lines_needed (f, &f->n_tool_bar_rows),
|
||||
nlines != WINDOW_TOTAL_LINES (w)))
|
||||
{
|
||||
extern Lisp_Object Qtool_bar_lines;
|
||||
@ -23661,6 +23730,14 @@ otherwise. */);
|
||||
doc: /* *Non-nil means to scroll (recenter) cursor line if it is not fully visible. */);
|
||||
make_cursor_line_fully_visible_p = 1;
|
||||
|
||||
DEFVAR_LISP ("tool-bar-border", &Vtool_bar_border,
|
||||
doc: /* *Border below tool-bar in pixels.
|
||||
If an integer, use it as the height of the border.
|
||||
If it is one of `internal-border-width' or `border-width', use the
|
||||
value of the corresponding frame parameter.
|
||||
Otherwise, no border is added below the tool-bar. */);
|
||||
Vtool_bar_border = Qinternal_border_width;
|
||||
|
||||
DEFVAR_LISP ("tool-bar-button-margin", &Vtool_bar_button_margin,
|
||||
doc: /* *Margin around tool-bar buttons in pixels.
|
||||
If an integer, use that for both horizontal and vertical margins.
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user