Merge from emacs--devo--0
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-283
This commit is contained in:
commit
f23d76bdef
403 changed files with 36975 additions and 16864 deletions
25
ChangeLog
25
ChangeLog
|
@ -1,3 +1,28 @@
|
||||||
|
2007-11-07 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* configure.in: Deprecate Mac Carbon port.
|
||||||
|
|
||||||
|
2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||||
|
|
||||||
|
* configure.in: Remove HAVE_X11R5 check.
|
||||||
|
|
||||||
|
2007-10-31 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in (install-arch-indep): Fallback to $USER and `id -un'
|
||||||
|
when changing ownership of installed files.
|
||||||
|
|
||||||
|
2007-10-30 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* make-dist: Add new directory etc/gnus.
|
||||||
|
|
||||||
|
2007-10-30 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in (INFO_FILES): Alphabetize. Add remember.
|
||||||
|
|
||||||
|
2007-10-29 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* make-dist: Add new directories etc/images/smilies/grayscale,medium.
|
||||||
|
|
||||||
2007-10-23 Glenn Morris <rgm@gnu.org>
|
2007-10-23 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
* MAINTAINERS: Move to admin/.
|
* MAINTAINERS: Move to admin/.
|
||||||
|
|
36
Makefile.in
36
Makefile.in
|
@ -138,11 +138,11 @@ man1dir=$(mandir)/man1
|
||||||
# since there are now many packages documented with the texinfo
|
# since there are now many packages documented with the texinfo
|
||||||
# system, it is inappropriate to imply that it is part of Emacs.
|
# system, it is inappropriate to imply that it is part of Emacs.
|
||||||
infodir=@infodir@
|
infodir=@infodir@
|
||||||
INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
|
INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
|
||||||
elisp eintr emacs emacs-mime eshell eudc flymake \
|
eintr elisp emacs emacs-mime erc eshell eudc flymake forms \
|
||||||
forms gnus idlwave info message mh-e newsticker org pcl-cvs \
|
gnus idlwave info message mh-e newsticker org pcl-cvs pgg \
|
||||||
pgg reftex sc ses sieve speedbar tramp vip viper widget \
|
rcirc reftex remember sc ses sieve speedbar tramp vip viper \
|
||||||
woman smtpmail url rcirc erc
|
widget woman smtpmail url
|
||||||
|
|
||||||
# Directory for local state files for all programs.
|
# Directory for local state files for all programs.
|
||||||
localstatedir=@localstatedir@
|
localstatedir=@localstatedir@
|
||||||
|
@ -423,6 +423,12 @@ install-arch-dep: mkdir
|
||||||
|
|
||||||
## Note that the Makefiles in the etc directory are potentially useful
|
## Note that the Makefiles in the etc directory are potentially useful
|
||||||
## in an installed Emacs, so should not be excluded.
|
## in an installed Emacs, so should not be excluded.
|
||||||
|
|
||||||
|
## installuser:
|
||||||
|
## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html
|
||||||
|
## Nuisance because i) it needs to be the user running install, so
|
||||||
|
## configure can't set it; ii) can't (?) use the result of rule
|
||||||
|
## commands to set make variables.
|
||||||
install-arch-indep: mkdir info
|
install-arch-indep: mkdir info
|
||||||
-set ${COPYDESTS} ; \
|
-set ${COPYDESTS} ; \
|
||||||
unset CDPATH; \
|
unset CDPATH; \
|
||||||
|
@ -436,6 +442,10 @@ install-arch-indep: mkdir info
|
||||||
mkdir ${COPYDESTS} ; \
|
mkdir ${COPYDESTS} ; \
|
||||||
chmod ugo+rx ${COPYDESTS} ; \
|
chmod ugo+rx ${COPYDESTS} ; \
|
||||||
unset CDPATH; \
|
unset CDPATH; \
|
||||||
|
for installuser in $${LOGNAME} $${USERNAME} $${USER} \
|
||||||
|
`id -un 2> /dev/null`; do \
|
||||||
|
[ -n "$${installuser}" ] && break ; \
|
||||||
|
done ; \
|
||||||
for dir in ${COPYDIR} ; do \
|
for dir in ${COPYDIR} ; do \
|
||||||
dest=$$1 ; shift ; \
|
dest=$$1 ; shift ; \
|
||||||
[ -d $${dir} ] \
|
[ -d $${dir} ] \
|
||||||
|
@ -444,7 +454,7 @@ install-arch-indep: mkdir info
|
||||||
(cd $${dir}; tar -chf - . ) \
|
(cd $${dir}; tar -chf - . ) \
|
||||||
| (cd $${dest}; umask 022; \
|
| (cd $${dest}; umask 022; \
|
||||||
tar -xvf - && cat > /dev/null) || exit 1; \
|
tar -xvf - && cat > /dev/null) || exit 1; \
|
||||||
find $${dest} -exec chown $${LOGNAME:-$$USERNAME} {} ';' ;\
|
find $${dest} -exec chown $${installuser} {} ';' ;\
|
||||||
for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \
|
for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \
|
||||||
chmod a+rx $${subdir} ; \
|
chmod a+rx $${subdir} ; \
|
||||||
rm -rf $${subdir}/RCS ; \
|
rm -rf $${subdir}/RCS ; \
|
||||||
|
@ -492,7 +502,12 @@ install-arch-indep: mkdir info
|
||||||
echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
|
echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
|
||||||
(cd ./etc; tar -chf - $${docfile}) \
|
(cd ./etc; tar -chf - $${docfile}) \
|
||||||
|(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
|(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||||
(cd $(DESTDIR)$(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
|
(cd $(DESTDIR)$(docdir); \
|
||||||
|
for installuser in $${LOGNAME} $${USERNAME} $${USER} \
|
||||||
|
`id -un 2> /dev/null`; do \
|
||||||
|
[ -n "$${installuser}" ] && break ; \
|
||||||
|
done ; \
|
||||||
|
chown $${installuser} DOC*; chmod a+r DOC*; \
|
||||||
if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \
|
if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \
|
||||||
else true; fi
|
else true; fi
|
||||||
-unset CDPATH; \
|
-unset CDPATH; \
|
||||||
|
@ -504,7 +519,12 @@ install-arch-indep: mkdir info
|
||||||
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
|
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
|
||||||
(cd lisp; tar -chf - *.el *.elc) \
|
(cd lisp; tar -chf - *.el *.elc) \
|
||||||
|(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
|(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
|
||||||
(cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
|
(cd $(DESTDIR)${lispdir}; \
|
||||||
|
for installuser in $${LOGNAME} $${USERNAME} $${USER} \
|
||||||
|
`id -un 2> /dev/null`; do \
|
||||||
|
[ -n "$${installuser}" ] && break ; \
|
||||||
|
done ; \
|
||||||
|
find . -exec chown $${installuser} {} ';') ; \
|
||||||
else true; fi
|
else true; fi
|
||||||
-unset CDPATH; \
|
-unset CDPATH; \
|
||||||
if [ -n "${GZIP_PROG}" ]; \
|
if [ -n "${GZIP_PROG}" ]; \
|
||||||
|
|
|
@ -41,6 +41,18 @@ to the hack introduced on 2005-07-01 to fix some other Cleartype problem.
|
||||||
** raman@users.sf.net, sep 7: Emacs 23.0.50: Segfaults in alloc.c (batch process)
|
** raman@users.sf.net, sep 7: Emacs 23.0.50: Segfaults in alloc.c (batch process)
|
||||||
http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00690.html
|
http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00690.html
|
||||||
|
|
||||||
|
** undefined reference getopt_long
|
||||||
|
Report by Daniel C. Bastos <dbast0s@yahoo.com.br> on bug-gnu-emacs
|
||||||
|
from 2007-08-27. Impossible to procede without more input from OP (as
|
||||||
|
of 20070912, emails are bouncing) or someone else who can reproduce this.
|
||||||
|
http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01497.html
|
||||||
|
|
||||||
|
** emacs-22.1 with GTK problems (with patches)
|
||||||
|
Only outstanding issue seems to be whether Solaris 2.6 GTK can be
|
||||||
|
supported in the absence of recursive mutexes, via a change to
|
||||||
|
alloc.c, or whether configure should abort.
|
||||||
|
http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00055.html
|
||||||
|
|
||||||
* BUGS
|
* BUGS
|
||||||
|
|
||||||
** Document the changes introduced by multi-tty
|
** Document the changes introduced by multi-tty
|
||||||
|
@ -86,6 +98,15 @@ be part of Gnus. They should be moved to some other part of Emacs.
|
||||||
** C-x v v no longer works the way it used to
|
** C-x v v no longer works the way it used to
|
||||||
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00785.html
|
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00785.html
|
||||||
|
|
||||||
|
** vc-diff no longer works the way it used to
|
||||||
|
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01753.html
|
||||||
|
(vc-revert also needs the repository now with CVS)
|
||||||
|
|
||||||
|
** sdl.web@gmail.com, 28 Oct: window-system in face definition
|
||||||
|
|
||||||
|
** add README files for etc/gnus, etc/images/smilies/medium,grayscale
|
||||||
|
update etc/images README files with any new images
|
||||||
|
|
||||||
* DOCUMENTATION
|
* DOCUMENTATION
|
||||||
|
|
||||||
** Check the Emacs Tutorial.
|
** Check the Emacs Tutorial.
|
||||||
|
|
|
@ -188,7 +188,6 @@ src/scroll.c
|
||||||
src/search.c
|
src/search.c
|
||||||
src/sound.c
|
src/sound.c
|
||||||
src/strftime.c
|
src/strftime.c
|
||||||
src/sunfns.c
|
|
||||||
src/sysdep.c
|
src/sysdep.c
|
||||||
src/termcap.c
|
src/termcap.c
|
||||||
src/terminfo.c
|
src/terminfo.c
|
||||||
|
|
|
@ -6,68 +6,68 @@ Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
- -- as yet unknown
|
- -- as yet unknown
|
||||||
n/a -- not applicable (internal, uninteresting, etc)
|
n/a -- not applicable (internal, uninteresting, etc)
|
||||||
todo -- not documented but should be
|
todo -- not documented but should be
|
||||||
"NODE" -- documented in or under info node NODE
|
NODE -- documented in or under info node NODE
|
||||||
|
|
||||||
|
|
||||||
* Features
|
* Features
|
||||||
advice -
|
advice (elisp) Advising Functions
|
||||||
advice-preload n/a
|
advice-preload n/a
|
||||||
assoc -
|
assoc -
|
||||||
authors -
|
authors -
|
||||||
autoload -
|
autoload (elisp) Autoload
|
||||||
avl-tree -
|
avl-tree -
|
||||||
backquote n/a
|
backquote n/a
|
||||||
benchmark -
|
benchmark n/a
|
||||||
bindat "(elisp) Byte Packing"
|
bindat (elisp) Byte Packing
|
||||||
byte-compile -
|
byte-compile (elisp) Byte Compilation
|
||||||
byte-opt -
|
byte-opt -
|
||||||
bytecomp -
|
bytecomp (elisp) Compilation Functions
|
||||||
checkdoc -
|
checkdoc (elisp) Documentation Tips
|
||||||
cl "(cl)"
|
cl (cl)
|
||||||
cl-19 n/a
|
cl-19 n/a
|
||||||
cl-compat n/a
|
cl-compat n/a
|
||||||
cl-specs n/a
|
cl-specs n/a
|
||||||
copyright -
|
copyright -
|
||||||
crm -
|
crm -
|
||||||
cust-print -
|
cust-print (elisp) Printing in Edebug
|
||||||
debug -
|
debug (elisp) Debugger
|
||||||
derived -
|
derived (elisp) Derived Modes
|
||||||
disass -
|
disass (elisp) Disassembly
|
||||||
easy-mmode -
|
easy-mmode (elisp) Defining Minor Modes
|
||||||
easymenu -
|
easymenu -
|
||||||
edebug -
|
edebug (elisp) Edebug
|
||||||
eldoc -
|
eldoc -
|
||||||
elint -
|
elint -
|
||||||
elp -
|
elp n/a
|
||||||
ewoc "(elisp) Separated Rendering"
|
ewoc (elisp) Separated Rendering
|
||||||
find-func -
|
find-func -
|
||||||
find-gc -
|
find-gc -
|
||||||
generic -
|
generic (elisp) Generic Modes
|
||||||
gulp n/a
|
gulp n/a
|
||||||
helper -
|
helper -
|
||||||
levents -
|
levents -
|
||||||
lisp-float-type -
|
lisp-float-type -
|
||||||
lisp-mnt -
|
lisp-mnt -
|
||||||
lisp-mode -
|
lisp-mode n/a
|
||||||
lmenu -
|
lmenu -
|
||||||
lselect -
|
lselect -
|
||||||
lucid -
|
lucid -
|
||||||
macroexp -
|
macroexp (elisp) Expansion
|
||||||
pp -
|
pp (emacs) Program Indent
|
||||||
re-builder -
|
re-builder -
|
||||||
regexp-opt -
|
regexp-opt (elisp) Regexp Functions
|
||||||
regi -
|
regi -
|
||||||
ring "(elisp) Rings"
|
ring (elisp) Rings
|
||||||
rx -
|
rx -
|
||||||
shadow -
|
shadow -
|
||||||
sregex -
|
sregex -
|
||||||
syntax -
|
syntax (elisp) Position Parse
|
||||||
testcover -
|
testcover -
|
||||||
timer -
|
timer (elisp) Timers
|
||||||
tq "(elisp) Transaction Queues"
|
tq (elisp) Transaction Queues
|
||||||
trace -
|
trace -
|
||||||
unsafep -
|
unsafep (elisp) Function Safety
|
||||||
warnings -
|
warnings (elisp) Warnings
|
||||||
|
|
||||||
|
|
||||||
* Above list created using default directory lisp/emacs-lisp/ with
|
* Above list created using default directory lisp/emacs-lisp/ with
|
||||||
|
|
125
configure
vendored
125
configure
vendored
|
@ -11109,75 +11109,6 @@ echo "${ECHO_T}before 6" >&6; }
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "${window_system}" = "x11"; then
|
|
||||||
{ echo "$as_me:$LINENO: checking X11 version 5" >&5
|
|
||||||
echo $ECHO_N "checking X11 version 5... $ECHO_C" >&6; }
|
|
||||||
if test "${emacs_cv_x11_version_5+set}" = set; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
else
|
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
/* confdefs.h. */
|
|
||||||
_ACEOF
|
|
||||||
cat confdefs.h >>conftest.$ac_ext
|
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#if XlibSpecificationRelease < 5
|
|
||||||
fail;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
|
||||||
if { (ac_try="$ac_link"
|
|
||||||
case "(($ac_try" in
|
|
||||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
||||||
*) ac_try_echo=$ac_try;;
|
|
||||||
esac
|
|
||||||
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
||||||
(eval "$ac_link") 2>conftest.er1
|
|
||||||
ac_status=$?
|
|
||||||
grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
rm -f conftest.er1
|
|
||||||
cat conftest.err >&5
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); } && {
|
|
||||||
test -z "$ac_c_werror_flag" ||
|
|
||||||
test ! -s conftest.err
|
|
||||||
} && test -s conftest$ac_exeext &&
|
|
||||||
$as_test_x conftest$ac_exeext; then
|
|
||||||
emacs_cv_x11_version_5=yes
|
|
||||||
else
|
|
||||||
echo "$as_me: failed program was:" >&5
|
|
||||||
sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
|
|
||||||
emacs_cv_x11_version_5=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $emacs_cv_x11_version_5 = yes; then
|
|
||||||
{ echo "$as_me:$LINENO: result: 5 or newer" >&5
|
|
||||||
echo "${ECHO_T}5 or newer" >&6; }
|
|
||||||
HAVE_X11R5=yes
|
|
||||||
|
|
||||||
cat >>confdefs.h <<\_ACEOF
|
|
||||||
#define HAVE_X11R5 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
else
|
|
||||||
HAVE_X11R5=no
|
|
||||||
{ echo "$as_me:$LINENO: result: before 5" >&5
|
|
||||||
echo "${ECHO_T}before 5" >&6; }
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
|
### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
|
||||||
HAVE_RSVG=no
|
HAVE_RSVG=no
|
||||||
|
@ -12081,13 +12012,10 @@ fi
|
||||||
|
|
||||||
HAVE_XAW3D=no
|
HAVE_XAW3D=no
|
||||||
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
|
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
|
||||||
if test x"${HAVE_X11R5}" != xyes; then
|
if test "$with_xaw3d" != no; then
|
||||||
USE_X_TOOLKIT=none
|
{ echo "$as_me:$LINENO: checking for xaw3d" >&5
|
||||||
else
|
|
||||||
if test "$with_xaw3d" != no; then
|
|
||||||
{ echo "$as_me:$LINENO: checking for xaw3d" >&5
|
|
||||||
echo $ECHO_N "checking for xaw3d... $ECHO_C" >&6; }
|
echo $ECHO_N "checking for xaw3d... $ECHO_C" >&6; }
|
||||||
if test "${emacs_cv_xaw3d+set}" = set; then
|
if test "${emacs_cv_xaw3d+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
@ -12137,25 +12065,25 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
emacs_cv_xaw3d=no
|
emacs_cv_xaw3d=no
|
||||||
fi
|
fi
|
||||||
if test $emacs_cv_xaw3d = yes; then
|
if test $emacs_cv_xaw3d = yes; then
|
||||||
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
|
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
|
||||||
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
|
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
|
||||||
USE_X_TOOLKIT=LUCID
|
USE_X_TOOLKIT=LUCID
|
||||||
HAVE_XAW3D=yes
|
HAVE_XAW3D=yes
|
||||||
|
|
||||||
cat >>confdefs.h <<\_ACEOF
|
cat >>confdefs.h <<\_ACEOF
|
||||||
#define HAVE_XAW3D 1
|
#define HAVE_XAW3D 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
else
|
else
|
||||||
{ echo "$as_me:$LINENO: result: no" >&5
|
{ echo "$as_me:$LINENO: result: no" >&5
|
||||||
echo "${ECHO_T}no" >&6; }
|
echo "${ECHO_T}no" >&6; }
|
||||||
{ echo "$as_me:$LINENO: checking for libXaw" >&5
|
{ echo "$as_me:$LINENO: checking for libXaw" >&5
|
||||||
echo $ECHO_N "checking for libXaw... $ECHO_C" >&6; }
|
echo $ECHO_N "checking for libXaw... $ECHO_C" >&6; }
|
||||||
if test "${emacs_cv_xaw+set}" = set; then
|
if test "${emacs_cv_xaw+set}" = set; then
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
else
|
else
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
@ -12205,19 +12133,18 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test $emacs_cv_xaw = yes; then
|
if test $emacs_cv_xaw = yes; then
|
||||||
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
|
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
|
||||||
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
|
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
|
||||||
USE_X_TOOLKIT=LUCID
|
USE_X_TOOLKIT=LUCID
|
||||||
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
|
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
|
||||||
{ { echo "$as_me:$LINENO: error: Lucid toolkit requires X11/Xaw include files" >&5
|
{ { echo "$as_me:$LINENO: error: Lucid toolkit requires X11/Xaw include files" >&5
|
||||||
echo "$as_me: error: Lucid toolkit requires X11/Xaw include files" >&2;}
|
echo "$as_me: error: Lucid toolkit requires X11/Xaw include files" >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
else
|
else
|
||||||
{ echo "$as_me:$LINENO: result: no; do not use toolkit by default" >&5
|
{ echo "$as_me:$LINENO: result: no; do not use toolkit by default" >&5
|
||||||
echo "${ECHO_T}no; do not use toolkit by default" >&6; }
|
echo "${ECHO_T}no; do not use toolkit by default" >&6; }
|
||||||
USE_X_TOOLKIT=none
|
USE_X_TOOLKIT=none
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -24303,6 +24230,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "$HAVE_CARBON" = "yes"; then
|
||||||
|
echo
|
||||||
|
echo "Warning: The Mac Carbon port is currently unsupported and has
|
||||||
|
known problems. It is not recommended for use by non-developers.
|
||||||
|
Read the emacs-devel archives for more information."
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Remove any trailing slashes in these variables.
|
# Remove any trailing slashes in these variables.
|
||||||
test "${prefix}" != NONE &&
|
test "${prefix}" != NONE &&
|
||||||
|
|
96
configure.in
96
configure.in
|
@ -2125,24 +2125,6 @@ fail;
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "${window_system}" = "x11"; then
|
|
||||||
AC_MSG_CHECKING(X11 version 5)
|
|
||||||
AC_CACHE_VAL(emacs_cv_x11_version_5,
|
|
||||||
[AC_TRY_LINK([#include <X11/Xlib.h>],
|
|
||||||
[#if XlibSpecificationRelease < 5
|
|
||||||
fail;
|
|
||||||
#endif
|
|
||||||
], emacs_cv_x11_version_5=yes, emacs_cv_x11_version_5=no)])
|
|
||||||
if test $emacs_cv_x11_version_5 = yes; then
|
|
||||||
AC_MSG_RESULT(5 or newer)
|
|
||||||
HAVE_X11R5=yes
|
|
||||||
AC_DEFINE(HAVE_X11R5, 1,
|
|
||||||
[Define to 1 if you have the X11R5 or newer version of Xlib.])
|
|
||||||
else
|
|
||||||
HAVE_X11R5=no
|
|
||||||
AC_MSG_RESULT(before 5)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
|
### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
|
||||||
HAVE_RSVG=no
|
HAVE_RSVG=no
|
||||||
|
@ -2274,46 +2256,42 @@ dnl Do not put whitespace before the #include statements below.
|
||||||
dnl Older compilers (eg sunos4 cc) choke on it.
|
dnl Older compilers (eg sunos4 cc) choke on it.
|
||||||
HAVE_XAW3D=no
|
HAVE_XAW3D=no
|
||||||
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
|
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
|
||||||
if test x"${HAVE_X11R5}" != xyes; then
|
if test "$with_xaw3d" != no; then
|
||||||
USE_X_TOOLKIT=none
|
AC_MSG_CHECKING(for xaw3d)
|
||||||
else
|
AC_CACHE_VAL(emacs_cv_xaw3d,
|
||||||
if test "$with_xaw3d" != no; then
|
[AC_TRY_LINK([
|
||||||
AC_MSG_CHECKING(for xaw3d)
|
|
||||||
AC_CACHE_VAL(emacs_cv_xaw3d,
|
|
||||||
[AC_TRY_LINK([
|
|
||||||
#include <X11/Intrinsic.h>
|
#include <X11/Intrinsic.h>
|
||||||
#include <X11/Xaw3d/Simple.h>],
|
#include <X11/Xaw3d/Simple.h>],
|
||||||
[],
|
[],
|
||||||
emacs_cv_xaw3d=yes,
|
emacs_cv_xaw3d=yes,
|
||||||
emacs_cv_xaw3d=no)])
|
emacs_cv_xaw3d=no)])
|
||||||
else
|
else
|
||||||
emacs_cv_xaw3d=no
|
emacs_cv_xaw3d=no
|
||||||
fi
|
fi
|
||||||
if test $emacs_cv_xaw3d = yes; then
|
if test $emacs_cv_xaw3d = yes; then
|
||||||
AC_MSG_RESULT([yes; using Lucid toolkit])
|
AC_MSG_RESULT([yes; using Lucid toolkit])
|
||||||
USE_X_TOOLKIT=LUCID
|
USE_X_TOOLKIT=LUCID
|
||||||
HAVE_XAW3D=yes
|
HAVE_XAW3D=yes
|
||||||
AC_DEFINE(HAVE_XAW3D, 1,
|
AC_DEFINE(HAVE_XAW3D, 1,
|
||||||
[Define to 1 if you have the Xaw3d library (-lXaw3d).])
|
[Define to 1 if you have the Xaw3d library (-lXaw3d).])
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(for libXaw)
|
AC_MSG_CHECKING(for libXaw)
|
||||||
AC_CACHE_VAL(emacs_cv_xaw,
|
AC_CACHE_VAL(emacs_cv_xaw,
|
||||||
[AC_TRY_LINK([
|
[AC_TRY_LINK([
|
||||||
#include <X11/Intrinsic.h>
|
#include <X11/Intrinsic.h>
|
||||||
#include <X11/Xaw/Simple.h>],
|
#include <X11/Xaw/Simple.h>],
|
||||||
[],
|
[],
|
||||||
emacs_cv_xaw=yes,
|
emacs_cv_xaw=yes,
|
||||||
emacs_cv_xaw=no)])
|
emacs_cv_xaw=no)])
|
||||||
if test $emacs_cv_xaw = yes; then
|
if test $emacs_cv_xaw = yes; then
|
||||||
AC_MSG_RESULT([yes; using Lucid toolkit])
|
AC_MSG_RESULT([yes; using Lucid toolkit])
|
||||||
USE_X_TOOLKIT=LUCID
|
USE_X_TOOLKIT=LUCID
|
||||||
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
|
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
|
||||||
AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
|
AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no; do not use toolkit by default])
|
AC_MSG_RESULT([no; do not use toolkit by default])
|
||||||
USE_X_TOOLKIT=none
|
USE_X_TOOLKIT=none
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -3422,7 +3400,7 @@ typedef unsigned size_t;
|
||||||
|
|
||||||
#ifdef HAVE_X11R6
|
#ifdef HAVE_X11R6
|
||||||
#define HAVE_X_I18N
|
#define HAVE_X_I18N
|
||||||
#elif defined HAVE_X11R5 && !defined X11R5_INHIBIT_I18N
|
#elif !defined X11R5_INHIBIT_I18N
|
||||||
#define HAVE_X_I18N
|
#define HAVE_X_I18N
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3537,6 +3515,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "$HAVE_CARBON" = "yes"; then
|
||||||
|
echo
|
||||||
|
echo "Warning: The Mac Carbon port is currently unsupported and has
|
||||||
|
known problems. It is not recommended for use by non-developers.
|
||||||
|
Read the emacs-devel archives for more information."
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Remove any trailing slashes in these variables.
|
# Remove any trailing slashes in these variables.
|
||||||
[test "${prefix}" != NONE &&
|
[test "${prefix}" != NONE &&
|
||||||
|
|
|
@ -1,3 +1,47 @@
|
||||||
|
2007-11-10 Paul Pogonyshev <pogonyshev@gmx.net>
|
||||||
|
|
||||||
|
* search.texi (Query Replace): Mention
|
||||||
|
`query-replace-show-replacement'.
|
||||||
|
|
||||||
|
2007-11-09 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi, gnus-faq.texi, message.texi: Bump version to 5.10.9.
|
||||||
|
|
||||||
|
2007-11-09 Nick Roberts <nickrob@snap.net.nz>
|
||||||
|
|
||||||
|
* building.texi (Watch Expressions): Remove obscure sentence.
|
||||||
|
|
||||||
|
2007-11-06 Kenichi Handa <handa@ni.aist.go.jp>
|
||||||
|
|
||||||
|
* mule.texi (Select Input Method): Describe how to activate an input
|
||||||
|
method in the text mode.
|
||||||
|
|
||||||
|
2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
|
||||||
|
|
||||||
|
* cmdargs.texi (Misc Variables): Remove Sun windows info.
|
||||||
|
|
||||||
|
2007-10-27 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
|
||||||
|
|
||||||
|
* gnus-faq.texi ([5.12]): Remove reference to discontinued service.
|
||||||
|
|
||||||
|
2007-10-27 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Troubleshooting): Adjust Gnus version number.
|
||||||
|
|
||||||
|
2007-10-30 Nick Roberts <nickrob@snap.net.nz>
|
||||||
|
|
||||||
|
* building.texi (Watch Expressions): Describe gdb-delete-out-of-scope.
|
||||||
|
|
||||||
|
2007-10-30 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* misc.texi (Directory Tracking): Explain a bit more about
|
||||||
|
dirtrack-mode.
|
||||||
|
|
||||||
|
2007-10-29 Richard Stallman <rms@gnu.org>
|
||||||
|
|
||||||
|
* widget.texi (Introduction): Delete discussion of implementation
|
||||||
|
internals.
|
||||||
|
|
||||||
2007-10-25 Glenn Morris <rgm@gnu.org>
|
2007-10-25 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
* fortran-xtra.texi (Fortran): F90 mode handles F2003.
|
* fortran-xtra.texi (Fortran): F90 mode handles F2003.
|
||||||
|
|
|
@ -1121,6 +1121,13 @@ changed and @code{shadow} face to make variables which have gone out of
|
||||||
scope less noticeable. When a variable goes out of scope you can't
|
scope less noticeable. When a variable goes out of scope you can't
|
||||||
edit its value.
|
edit its value.
|
||||||
|
|
||||||
|
@vindex gdb-delete-out-of-scope
|
||||||
|
If the variable @code{gdb-delete-out-of-scope} is non-@code{nil}
|
||||||
|
(the default value), Emacs automatically deletes watch expressions
|
||||||
|
which go out of scope. Sometimes, when re-entering the same function,
|
||||||
|
it may be useful to set this value to nil so that you don't need to
|
||||||
|
recreate the watch expression.
|
||||||
|
|
||||||
@vindex gdb-use-colon-colon-notation
|
@vindex gdb-use-colon-colon-notation
|
||||||
If the variable @code{gdb-use-colon-colon-notation} is
|
If the variable @code{gdb-use-colon-colon-notation} is
|
||||||
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}
|
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}
|
||||||
|
|
|
@ -635,9 +635,6 @@ Emacs switches the DOS display to a mode where all 16 colors can be used
|
||||||
for the background, so all four bits of the background color are
|
for the background, so all four bits of the background color are
|
||||||
actually used.
|
actually used.
|
||||||
|
|
||||||
@item WINDOW_GFX
|
|
||||||
Used when initializing the Sun windows system.
|
|
||||||
|
|
||||||
@item PRELOAD_WINSOCK
|
@item PRELOAD_WINSOCK
|
||||||
On MS-Windows, if you set this variable, Emacs will load and initialize
|
On MS-Windows, if you set this variable, Emacs will load and initialize
|
||||||
the network library at startup, instead of waiting until the first
|
the network library at startup, instead of waiting until the first
|
||||||
|
|
|
@ -971,8 +971,9 @@ most common command syntax; it may not work for unusual shells.
|
||||||
|
|
||||||
@findex dirtrack-mode
|
@findex dirtrack-mode
|
||||||
You can also use @kbd{M-x dirtrack-mode} to enable (or disable) an
|
You can also use @kbd{M-x dirtrack-mode} to enable (or disable) an
|
||||||
alternative and more aggressive method of tracking changes in the
|
alternative method of tracking changes in the current directory. This
|
||||||
current directory.
|
method relies on your shell prompt containing the full current working
|
||||||
|
directory at all times.
|
||||||
|
|
||||||
@node Shell Options
|
@node Shell Options
|
||||||
@subsection Shell Mode Options
|
@subsection Shell Mode Options
|
||||||
|
|
|
@ -534,6 +534,18 @@ set-language-environment-hook}). For example:
|
||||||
This sets the default input method to be @code{chinese-tonepy}
|
This sets the default input method to be @code{chinese-tonepy}
|
||||||
whenever you choose a Chinese-GB language environment.
|
whenever you choose a Chinese-GB language environment.
|
||||||
|
|
||||||
|
You can instruct Emacs to activate a certain input method
|
||||||
|
automatically. For example:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(add-hook 'text-mode-hook
|
||||||
|
(lambda () (set-input-method "german-prefix")))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
This activates the input emthod ``german-prefix'' automatically in the
|
||||||
|
Text mode.
|
||||||
|
|
||||||
@findex quail-set-keyboard-layout
|
@findex quail-set-keyboard-layout
|
||||||
Some input methods for alphabetic scripts work by (in effect)
|
Some input methods for alphabetic scripts work by (in effect)
|
||||||
remapping the keyboard to emulate various keyboard layouts commonly used
|
remapping the keyboard to emulate various keyboard layouts commonly used
|
||||||
|
|
|
@ -1172,7 +1172,11 @@ like @code{query-replace}.
|
||||||
These commands highlight the current match using the face
|
These commands highlight the current match using the face
|
||||||
@code{query-replace}. They highlight other matches using
|
@code{query-replace}. They highlight other matches using
|
||||||
@code{lazy-highlight} just like incremental search (@pxref{Incremental
|
@code{lazy-highlight} just like incremental search (@pxref{Incremental
|
||||||
Search}).
|
Search}). By default, @code{query-replace-regexp} will show
|
||||||
|
substituted replacement string for the current match in the
|
||||||
|
minibuffer. If you want to keep special sequences @samp{\&} and
|
||||||
|
@samp{\@var{n}} unexpanded, customize
|
||||||
|
@code{query-replace-show-replacement} variable.
|
||||||
|
|
||||||
The characters you can type when you are shown a match for the string
|
The characters you can type when you are shown a match for the string
|
||||||
or regexp are:
|
or regexp are:
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
2007-11-10 Paul Pogonyshev <pogonyshev@gmx.net>
|
||||||
|
|
||||||
|
* searching.texi (Replacing Match): Describe new
|
||||||
|
`match-substitute-replacement'.
|
||||||
|
|
||||||
|
2007-10-31 Richard Stallman <rms@gnu.org>
|
||||||
|
|
||||||
|
* strings.texi (Creating Strings): Null strings from concat not unique.
|
||||||
|
|
||||||
2007-10-26 Richard Stallman <rms@gnu.org>
|
2007-10-26 Richard Stallman <rms@gnu.org>
|
||||||
|
|
||||||
* objects.texi (Equality Predicates): Null strings are uniquified.
|
* objects.texi (Equality Predicates): Null strings are uniquified.
|
||||||
|
|
|
@ -23,13 +23,10 @@ abbrev table. Normally both are used.
|
||||||
each abbreviation. The symbol's name is the abbreviation; its value
|
each abbreviation. The symbol's name is the abbreviation; its value
|
||||||
is the expansion; its function definition is the hook function to do
|
is the expansion; its function definition is the hook function to do
|
||||||
the expansion (@pxref{Defining Abbrevs}); its property list cell
|
the expansion (@pxref{Defining Abbrevs}); its property list cell
|
||||||
typically contains the use count, the number of times the abbreviation
|
typically contains various additional properties such as the use
|
||||||
has been expanded. Alternatively, the use count is on the
|
count, the number of times the abbreviation has been expanded, or
|
||||||
@code{count} property and the system-abbrev flag is on the
|
whether the abbrev is a so-called ``system'' abbrev defined by a major
|
||||||
@code{system-type} property. Abbrevs with a non-@code{nil}
|
mode rather than by the user (@pxref{Abbrev Properties}).
|
||||||
@code{system-type} property are called ``system'' abbrevs. They are
|
|
||||||
usually defined by modes or packages, instead of by the user, and are
|
|
||||||
treated specially in certain respects.
|
|
||||||
|
|
||||||
Because the symbols used for abbrevs are not interned in the usual
|
Because the symbols used for abbrevs are not interned in the usual
|
||||||
obarray, they will never appear as the result of reading a Lisp
|
obarray, they will never appear as the result of reading a Lisp
|
||||||
|
@ -47,6 +44,10 @@ Mode, emacs, The GNU Emacs Manual}.
|
||||||
* Files: Abbrev Files. Saving abbrevs in files.
|
* Files: Abbrev Files. Saving abbrevs in files.
|
||||||
* Expansion: Abbrev Expansion. Controlling expansion; expansion subroutines.
|
* Expansion: Abbrev Expansion. Controlling expansion; expansion subroutines.
|
||||||
* Standard Abbrev Tables:: Abbrev tables used by various major modes.
|
* Standard Abbrev Tables:: Abbrev tables used by various major modes.
|
||||||
|
* Abbrev Properties:: How to read and set abbrev properties.
|
||||||
|
Which properties have which effect.
|
||||||
|
* Abbrev Table Properties:: How to read and set abbrev table properties.
|
||||||
|
Which properties have which effect.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
|
@node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
|
||||||
|
@ -75,9 +76,15 @@ This is the same as @code{(default-value 'abbrev-mode)}.
|
||||||
|
|
||||||
This section describes how to create and manipulate abbrev tables.
|
This section describes how to create and manipulate abbrev tables.
|
||||||
|
|
||||||
@defun make-abbrev-table
|
@defun make-abbrev-table &rest props
|
||||||
This function creates and returns a new, empty abbrev table---an obarray
|
This function creates and returns a new, empty abbrev table---an obarray
|
||||||
containing no symbols. It is a vector filled with zeros.
|
containing no symbols. It is a vector filled with zeros. @var{props}
|
||||||
|
is a property list that is applied to the new table
|
||||||
|
(@pxref{Abbrev Table Properties}).
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun abbrev-table-p table
|
||||||
|
Return non-@code{nil} is @var{table} is an abbrev table.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
@defun clear-abbrev-table table
|
@defun clear-abbrev-table table
|
||||||
|
@ -92,15 +99,18 @@ difference between @var{table} and the returned copy is that this
|
||||||
function sets the property lists of all copied abbrevs to 0.
|
function sets the property lists of all copied abbrevs to 0.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
@defun define-abbrev-table tabname definitions
|
@defun define-abbrev-table tabname definitions &optional docstring &rest props
|
||||||
This function defines @var{tabname} (a symbol) as an abbrev table
|
This function defines @var{tabname} (a symbol) as an abbrev table
|
||||||
name, i.e., as a variable whose value is an abbrev table. It defines
|
name, i.e., as a variable whose value is an abbrev table. It defines
|
||||||
abbrevs in the table according to @var{definitions}, a list of
|
abbrevs in the table according to @var{definitions}, a list of
|
||||||
elements of the form @code{(@var{abbrevname} @var{expansion}
|
elements of the form @code{(@var{abbrevname} @var{expansion}
|
||||||
@var{hook} @var{usecount} @var{system-flag})}. If an element of
|
[@var{hook}] [@var{props}...])}. These elements are passed as
|
||||||
@var{definitions} has length less than five, omitted elements default
|
arguments to @code{define-abbrev}. The return value is always
|
||||||
to @code{nil}. A value of @code{nil} for @var{usecount} is equivalent
|
@code{nil}.
|
||||||
to zero. The return value is always @code{nil}.
|
|
||||||
|
The optional string @var{docstring} is the documentation string of the
|
||||||
|
variable @var{tabname}. The property list @var{props} is applied to
|
||||||
|
the abbrev table (@pxref{Abbrev Table Properties}).
|
||||||
|
|
||||||
If this function is called more than once for the same @var{tabname},
|
If this function is called more than once for the same @var{tabname},
|
||||||
subsequent calls add the definitions in @var{definitions} to
|
subsequent calls add the definitions in @var{definitions} to
|
||||||
|
@ -132,20 +142,20 @@ to add these to @var{name} separately.)
|
||||||
@section Defining Abbrevs
|
@section Defining Abbrevs
|
||||||
@code{define-abbrev} is the low-level basic function for defining an
|
@code{define-abbrev} is the low-level basic function for defining an
|
||||||
abbrev in a specified abbrev table. When major modes predefine standard
|
abbrev in a specified abbrev table. When major modes predefine standard
|
||||||
abbrevs, they should call @code{define-abbrev} and specify @code{t} for
|
abbrevs, they should call @code{define-abbrev} and specify a @code{t} for
|
||||||
@var{system-flag}. Be aware that any saved non-``system'' abbrevs are
|
the @code{:system} property.
|
||||||
|
Be aware that any saved non-``system'' abbrevs are
|
||||||
restored at startup, i.e. before some major modes are loaded. Major modes
|
restored at startup, i.e. before some major modes are loaded. Major modes
|
||||||
should therefore not assume that when they are first loaded their abbrev
|
should therefore not assume that when they are first loaded their abbrev
|
||||||
tables are empty.
|
tables are empty.
|
||||||
|
|
||||||
@defun define-abbrev table name expansion &optional hook count system-flag
|
@defun define-abbrev table name expansion &optional hook &rest props
|
||||||
This function defines an abbrev named @var{name}, in @var{table}, to
|
This function defines an abbrev named @var{name}, in @var{table}, to
|
||||||
expand to @var{expansion} and call @var{hook}. The return value is
|
expand to @var{expansion} and call @var{hook}, with properties
|
||||||
@var{name}.
|
@var{props} (@pxref{Abbrev Properties}). The return value is @var{name}.
|
||||||
|
The @code{:system} property in @var{props} is treated specially here:
|
||||||
The value of @var{count}, if specified, initializes the abbrev's
|
if it has the value @code{force}, then it will overwrite an existing
|
||||||
usage-count. If @var{count} is not specified or @code{nil}, the use
|
definition even for a non-``system'' abbrev of the same name.
|
||||||
count is initialized to zero.
|
|
||||||
|
|
||||||
The argument @var{name} should be a string. The argument
|
The argument @var{name} should be a string. The argument
|
||||||
@var{expansion} is normally the desired expansion (a string), or
|
@var{expansion} is normally the desired expansion (a string), or
|
||||||
|
@ -167,12 +177,6 @@ inhibits insertion of the character. By contrast, if @var{hook}
|
||||||
returns @code{nil}, @code{expand-abbrev} also returns @code{nil}, as
|
returns @code{nil}, @code{expand-abbrev} also returns @code{nil}, as
|
||||||
if expansion had not really occurred.
|
if expansion had not really occurred.
|
||||||
|
|
||||||
If @var{system-flag} is non-@code{nil}, that marks the abbrev as a
|
|
||||||
``system'' abbrev with the @code{system-type} property. Unless
|
|
||||||
@var{system-flag} has the value @code{force}, a ``system'' abbrev will
|
|
||||||
not overwrite an existing definition for a non-``system'' abbrev of the
|
|
||||||
same name.
|
|
||||||
|
|
||||||
Normally the function @code{define-abbrev} sets the variable
|
Normally the function @code{define-abbrev} sets the variable
|
||||||
@code{abbrevs-changed} to @code{t}, if it actually changes the abbrev.
|
@code{abbrevs-changed} to @code{t}, if it actually changes the abbrev.
|
||||||
(This is so that some commands will offer to save the abbrevs.) It
|
(This is so that some commands will offer to save the abbrevs.) It
|
||||||
|
@ -329,20 +333,19 @@ has already been unexpanded. This contains information left by
|
||||||
@code{expand-abbrev} for the sake of the @code{unexpand-abbrev} command.
|
@code{expand-abbrev} for the sake of the @code{unexpand-abbrev} command.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@c Emacs 19 feature
|
@defvar abbrev-expand-functions
|
||||||
@defvar pre-abbrev-expand-hook
|
This is a special hook run @emph{around} the @code{expand-abbrev}
|
||||||
This is a normal hook whose functions are executed, in sequence, just
|
function. Functions on this hook are called with a single argument
|
||||||
before any expansion of an abbrev. @xref{Hooks}. Since it is a normal
|
which is a function that performs the normal abbrev expansion.
|
||||||
hook, the hook functions receive no arguments. However, they can find
|
The hook function can hence do anything it wants before and after
|
||||||
the abbrev to be expanded by looking in the buffer before point.
|
performing the expansion. It can also choose not to call its argument
|
||||||
Running the hook is the first thing that @code{expand-abbrev} does, and
|
and thus override the default behavior, or it may even call it
|
||||||
so a hook function can be used to change the current abbrev table before
|
several times. The function should return the abbrev symbol if
|
||||||
abbrev lookup happens. (Although you have to do this carefully. See
|
expansion took place.
|
||||||
the example below.)
|
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
The following sample code shows a simple use of
|
The following sample code shows a simple use of
|
||||||
@code{pre-abbrev-expand-hook}. It assumes that @code{foo-mode} is a
|
@code{abbrev-expand-functions}. It assumes that @code{foo-mode} is a
|
||||||
mode for editing certain files in which lines that start with @samp{#}
|
mode for editing certain files in which lines that start with @samp{#}
|
||||||
are comments. You want to use Text mode abbrevs for those lines. The
|
are comments. You want to use Text mode abbrevs for those lines. The
|
||||||
regular local abbrev table, @code{foo-mode-abbrev-table} is
|
regular local abbrev table, @code{foo-mode-abbrev-table} is
|
||||||
|
@ -351,30 +354,22 @@ in your @file{.emacs} file. @xref{Standard Abbrev Tables}, for the
|
||||||
definitions of @code{local-abbrev-table} and @code{text-mode-abbrev-table}.
|
definitions of @code{local-abbrev-table} and @code{text-mode-abbrev-table}.
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
(defun foo-mode-pre-abbrev-expand ()
|
(defun foo-mode-abbrev-expand-function (expand)
|
||||||
(when (save-excursion (forward-line 0) (eq (char-after) ?#))
|
(if (not (save-excursion (forward-line 0) (eq (char-after) ?#)))
|
||||||
(let ((local-abbrev-table text-mode-abbrev-table)
|
;; Performs normal expansion.
|
||||||
;; Avoid infinite loop.
|
(funcall expand)
|
||||||
(pre-abbrev-expand-hook nil))
|
;; We're inside a comment: use the text-mode abbrevs.
|
||||||
(expand-abbrev))
|
(let ((local-abbrev-table text-mode-abbrev-table))
|
||||||
;; We have already called `expand-abbrev' in this hook.
|
(funcall expand))))
|
||||||
;; Hence we want the "actual" call following this hook to be a no-op.
|
|
||||||
(setq abbrev-start-location (point-max)
|
|
||||||
abbrev-start-location-buffer (current-buffer))))
|
|
||||||
|
|
||||||
(add-hook 'foo-mode-hook
|
(add-hook 'foo-mode-hook
|
||||||
#'(lambda ()
|
#'(lambda ()
|
||||||
(add-hook 'pre-abbrev-expand-hook
|
(add-hook 'abbrev-expand-functions
|
||||||
'foo-mode-pre-abbrev-expand
|
'foo-mode-abbrev-expand-function
|
||||||
nil t)))
|
nil t)))
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
Note that @code{foo-mode-pre-abbrev-expand} just returns @code{nil}
|
@node Standard Abbrev Tables, Abbrev Properties, Abbrev Expansion, Abbrevs
|
||||||
without doing anything for lines not starting with @samp{#}. Hence
|
|
||||||
abbrevs expand normally using @code{foo-mode-abbrev-table} as local
|
|
||||||
abbrev table for such lines.
|
|
||||||
|
|
||||||
@node Standard Abbrev Tables, , Abbrev Expansion, Abbrevs
|
|
||||||
@comment node-name, next, previous, up
|
@comment node-name, next, previous, up
|
||||||
@section Standard Abbrev Tables
|
@section Standard Abbrev Tables
|
||||||
|
|
||||||
|
@ -390,7 +385,16 @@ global table.
|
||||||
|
|
||||||
@defvar local-abbrev-table
|
@defvar local-abbrev-table
|
||||||
The value of this buffer-local variable is the (mode-specific)
|
The value of this buffer-local variable is the (mode-specific)
|
||||||
abbreviation table of the current buffer.
|
abbreviation table of the current buffer. It can also be a list of
|
||||||
|
such tables.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
|
@defvar abbrev-minor-mode-table-alist
|
||||||
|
The value of this variable is a list of elements of the form
|
||||||
|
@code{(@var{mode} . @var{abbrev-table})} where @var{mode} is the name
|
||||||
|
of a variable: if the variable is bound to a non-@code{nil} value,
|
||||||
|
then the @var{abbrev-table} is active, otherwise it is ignored.
|
||||||
|
@var{abbrev-table} can also be a list of abbrev tables.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@defvar fundamental-mode-abbrev-table
|
@defvar fundamental-mode-abbrev-table
|
||||||
|
@ -406,6 +410,96 @@ This is the local abbrev table used in Text mode.
|
||||||
This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
|
This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
|
@node Abbrev Properties, Abbrev Table Properties, Standard Abbrev Tables, Abbrevs
|
||||||
|
@section Abbrev Properties
|
||||||
|
|
||||||
|
Abbrevs have properties, some of which influence the way they work.
|
||||||
|
You can provide them as arguments to @code{define-abbrev} and you can
|
||||||
|
manipulate them with the functions:
|
||||||
|
|
||||||
|
@defun abbrev-put abbrev prop val
|
||||||
|
Set the property @var{prop} of abbrev @var{abbrev} to value @var{val}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun abbrev-get abbrev prop
|
||||||
|
Return the property @var{prop} of abbrev @var{abbrev}, or @code{nil}
|
||||||
|
if the abbrev has no such property.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
The following properties have special meaning:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item :count
|
||||||
|
This property counts the number of times the abbrev has
|
||||||
|
been expanded. If not explicitly set, it is initialized to 0 by
|
||||||
|
@code{define-abbrev}.
|
||||||
|
|
||||||
|
@item :system
|
||||||
|
If non-@code{nil}, this property marks the abbrev as a ``system''
|
||||||
|
abbrev. Such abbrevs will not be saved to @var{abbrev-file-name}.
|
||||||
|
|
||||||
|
@item :enable-function
|
||||||
|
If non-@code{nil}, this property should be a function of no
|
||||||
|
arguments which returns @code{nil} if the abbrev should not be used
|
||||||
|
and @code{t} otherwise.
|
||||||
|
|
||||||
|
@item :case-fixed
|
||||||
|
If non-@code{nil}, this property indicates that the case of the
|
||||||
|
abbrev's name is significant and should only match a text with the
|
||||||
|
same pattern of capitalization. It also disables the code that
|
||||||
|
modifies the capitalization of the expansion.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@node Abbrev Table Properties, , Abbrev Properties, Abbrevs
|
||||||
|
@section Abbrev Table Properties
|
||||||
|
|
||||||
|
Like abbrevs, abble tables have properties, some of which influence
|
||||||
|
the way they work. You can provide them as arguments to
|
||||||
|
@code{define-abbrev-table} and you can manipulate them with the
|
||||||
|
functions:
|
||||||
|
|
||||||
|
@defun abbrev-table-put table prop val
|
||||||
|
Set the property @var{prop} of abbrev table @var{table} to value @var{val}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun abbrev-table-get table prop
|
||||||
|
Return the property @var{prop} of abbrev table @var{table}, or @code{nil}
|
||||||
|
if the abbrev has no such property.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
The following properties have special meaning:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item :enable-function
|
||||||
|
This is like the @code{:enable-function} abbrev property except that
|
||||||
|
it applies to all abbrevs in the table and is used even before trying
|
||||||
|
to find the abbrev before point so it can dynamically modify the
|
||||||
|
abbrev table.
|
||||||
|
|
||||||
|
@item :case-fixed
|
||||||
|
This is like the @code{:case-fixed} abbrev property except that it
|
||||||
|
applies to all abbrevs in the table.
|
||||||
|
|
||||||
|
@item :regexp
|
||||||
|
If non-@code{nil}, this property is a regular expression that
|
||||||
|
indicates how to extract the name of the abbrev before point before
|
||||||
|
looking it up in the table. When the regular expression matches
|
||||||
|
before point, the abbrev name is expected to be in submatch 1.
|
||||||
|
If this property is @code{nil}, @code{expand-function} defaults to
|
||||||
|
@code{"\\<\\(\\w+\\)\\W"}. This property allows the use of abbrevs
|
||||||
|
whose name contains characters of non-word syntax.
|
||||||
|
|
||||||
|
@item :parents
|
||||||
|
This property holds the list of tables from which to inherit
|
||||||
|
other abbrevs.
|
||||||
|
|
||||||
|
@item :abbrev-table-modiff
|
||||||
|
This property holds a counter incremented each time a new abbrev is
|
||||||
|
added to the table.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
|
||||||
@ignore
|
@ignore
|
||||||
arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
|
arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
|
||||||
@end ignore
|
@end ignore
|
||||||
|
|
|
@ -846,8 +846,8 @@ input already in the buffer matches an element of @var{collection}.
|
||||||
However, empty input is always permitted, regardless of the value of
|
However, empty input is always permitted, regardless of the value of
|
||||||
@var{require-match}; in that case, @code{completing-read} returns the
|
@var{require-match}; in that case, @code{completing-read} returns the
|
||||||
first element of @var{default}, if it is a list; @code{""}, if
|
first element of @var{default}, if it is a list; @code{""}, if
|
||||||
@var{default} is @code{nil}; or @var{default}. The string or strins
|
@var{default} is @code{nil}; or @var{default}. The string or strings
|
||||||
in @var{default} aer also available to the user through the history
|
in @var{default} are also available to the user through the history
|
||||||
commands.
|
commands.
|
||||||
|
|
||||||
The function @code{completing-read} uses
|
The function @code{completing-read} uses
|
||||||
|
@ -1188,7 +1188,7 @@ symbol.
|
||||||
The argument @var{default} specifies the default value to return if
|
The argument @var{default} specifies the default value to return if
|
||||||
the user enters null input. It can be a symbol, a string, or a list
|
the user enters null input. It can be a symbol, a string, or a list
|
||||||
of strings. If it is a string, @code{read-variable} interns it to
|
of strings. If it is a string, @code{read-variable} interns it to
|
||||||
make the default value; If it is a list, @code{read-variable} interns
|
make the default value. If it is a list, @code{read-variable} interns
|
||||||
the first element. If @var{default} is @code{nil}, that means no
|
the first element. If @var{default} is @code{nil}, that means no
|
||||||
default has been specified; then if the user enters null input, the
|
default has been specified; then if the user enters null input, the
|
||||||
return value is @code{(intern "")}.
|
return value is @code{(intern "")}.
|
||||||
|
|
|
@ -1260,6 +1260,16 @@ calling @code{replace-match} with 1 as @var{subexp} means to replace
|
||||||
just the text that matched @samp{\(ba*r\)}.
|
just the text that matched @samp{\(ba*r\)}.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
|
@defun match-substitute-replacement replacement &optional fixedcase literal string subexp
|
||||||
|
This function returns the text that would be inserted into the buffer
|
||||||
|
by @code{replace-match}, but without modifying the buffer. It is
|
||||||
|
useful if you want to present the user with actual replacement result,
|
||||||
|
with constructs like @samp{\@var{n}} or @samp{\&} substituted with
|
||||||
|
matched groups. Arguments @var{replacement} and optional
|
||||||
|
@var{fixedcase}, @var{literal}, @var{string} and @var{subexp} have the
|
||||||
|
same meaning as for @code{replace-match}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@node Simple Match Data
|
@node Simple Match Data
|
||||||
@subsection Simple Match Data Access
|
@subsection Simple Match Data Access
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,8 @@ returns an empty string.
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
The @code{concat} function always constructs a new string that is
|
The @code{concat} function always constructs a new string that is
|
||||||
not @code{eq} to any existing string.
|
not @code{eq} to any existing string, except when the result is empty
|
||||||
|
(since empty strings are canonicalized to save space).
|
||||||
|
|
||||||
In Emacs versions before 21, when an argument was an integer (not a
|
In Emacs versions before 21, when an argument was an integer (not a
|
||||||
sequence of integers), it was converted to a string of digits making up
|
sequence of integers), it was converted to a string of digits making up
|
||||||
|
|
|
@ -1,3 +1,514 @@
|
||||||
|
2007-11-09 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus-news.texi: Fix spelling.
|
||||||
|
`message-insert-formatted-citation-line', not
|
||||||
|
`message-insert-formated-citation-line'.
|
||||||
|
|
||||||
|
2007-11-07 Michael Albinus <michael.albinus@gmx.de>
|
||||||
|
|
||||||
|
* tramp.texi (Overview): Mention also the PuTTY integration under
|
||||||
|
Win32. Remove paragraphs about Tramp's experimental status.
|
||||||
|
(Frequently Asked Questions): Add code example for highlighting the
|
||||||
|
mode line.
|
||||||
|
|
||||||
|
2007-11-03 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* remember.texi: Change mentions of remember-buffer to
|
||||||
|
remember-finalize throughout.
|
||||||
|
|
||||||
|
2007-10-30 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* remember.texi (Copying): Remove.
|
||||||
|
(Mailbox): Update with non-BBDB instructions.
|
||||||
|
(Diary, Org): Add.
|
||||||
|
(Bibliography, Planner Page): Remove.
|
||||||
|
|
||||||
|
2007-10-30 Juanma Barranquero <lekktu@gmail.com>
|
||||||
|
|
||||||
|
* makefile.w32-in (INFO_TARGETS): Add remember.
|
||||||
|
(DVI_TARGETS): Add remember.dvi.
|
||||||
|
($(infodir)/remember): New rule.
|
||||||
|
(clean): Add remember*.
|
||||||
|
|
||||||
|
2007-10-30 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in (INFO_TARGETS, DVI_TARGETS): Add remember.
|
||||||
|
($(infodir)/remember): New rule that builds the Remember Manual.
|
||||||
|
|
||||||
|
* remember.texi: New file containing the Remember Mode Manual.
|
||||||
|
Shuffle chapters around after initial import.
|
||||||
|
(Function Reference): Split Keystrokes into separate chapter.
|
||||||
|
(Keystrokes): Document C-c C-k.
|
||||||
|
(Introduction): Fix typographical issue with "---".
|
||||||
|
|
||||||
|
2007-10-29 Michael Albinus <michael.albinus@gmx.de>
|
||||||
|
|
||||||
|
* tramp.texi (Connection caching): Host names must be different
|
||||||
|
when tunneling.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi, gnus-faq.texi, message.texi: Bump version to
|
||||||
|
Gnus v5.13.
|
||||||
|
|
||||||
|
2007-10-28 Miles Bader <miles@gnu.org>
|
||||||
|
|
||||||
|
* gnus-news.texi, gnus-coding.texi, sasl.texi: New files.
|
||||||
|
|
||||||
|
2007-10-28 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
|
||||||
|
|
||||||
|
* gnus-faq.texi ([5.12]): Remove reference to discontinued service.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Sorting the Summary Buffer): Remove
|
||||||
|
gnus-article-sort-by-date-reverse.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Non-ASCII Group Names): New node.
|
||||||
|
(Misc Group Stuff): Move gnus-group-name-charset-method-alist and
|
||||||
|
gnus-group-name-charset-group-alist to Non-ASCII Group Names node.
|
||||||
|
|
||||||
|
2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
|
||||||
|
|
||||||
|
* gnus.texi (Mail Source Specifiers, IMAP): Add a notice on the need to
|
||||||
|
clean the output of the program `imap-shell-program'.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (IMAP): Mention nnimap-logout-timeout.
|
||||||
|
|
||||||
|
2007-10-28 Tassilo Horn <tassilo@member.fsf.org>
|
||||||
|
|
||||||
|
* gnus.texi (Sticky Articles): Documentation for sticky article
|
||||||
|
buffers.
|
||||||
|
|
||||||
|
2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
|
||||||
|
|
||||||
|
* gnus.texi (RSS): Document nnrss-ignore-article-fields.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Various Various): Mention gnus-add-timestamp-to-message.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Archived Messages): Document
|
||||||
|
gnus-update-message-archive-method.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Limiting): Document gnus-summary-limit-to-address.
|
||||||
|
|
||||||
|
2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
|
||||||
|
|
||||||
|
* gnus.texi (Group Maneuvering): Document
|
||||||
|
`gnus-summary-next-group-on-exit'.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Really Various Summary Commands): Mention
|
||||||
|
gnus-auto-select-on-ephemeral-exit.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi, message.texi: Bump version number.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Group Line Specification, Misc Group Stuff)
|
||||||
|
(Server Commands): Parenthesize @pxref{Mail Spool}.
|
||||||
|
|
||||||
|
2007-10-28 Didier Verna <didier@xemacs.org>
|
||||||
|
|
||||||
|
New user option: message-signature-directory.
|
||||||
|
* message.texi (Insertion Variables): Document it.
|
||||||
|
* gnus.texi (Posting Styles): Ditto.
|
||||||
|
|
||||||
|
2007-10-28 Didier Verna <didier@xemacs.org>
|
||||||
|
|
||||||
|
* gnus.texi (Group Line Specification):
|
||||||
|
* gnus.texi (Misc Group Stuff):
|
||||||
|
* gnus.texi (Server Commands): Document the group compaction feature.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus-faq.texi ([5.2]): Adjust for message-fill-column.
|
||||||
|
|
||||||
|
* message.texi (Various Message Variables): Add message-fill-column.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi: Untabify.
|
||||||
|
|
||||||
|
2007-10-28 Didier Verna <didier@xemacs.org>
|
||||||
|
|
||||||
|
* gnus.texi (Group Parameters): Document the posting-style merging
|
||||||
|
process in topic-mode.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Scoring On Other Headers): Add gnus-inhibit-slow-scoring.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (Mail Spool): Fix typo.
|
||||||
|
Update copyright.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Limiting): Add gnus-summary-limit-to-singletons.
|
||||||
|
|
||||||
|
2007-10-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
|
||||||
|
|
||||||
|
* gnus.texi (Summary Generation Commands):
|
||||||
|
Add gnus-summary-insert-ticked-articles.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi
|
||||||
|
(SpamAssassin back end): Rename spam-spamassassin-path to
|
||||||
|
spam-spamassassin-program.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Mail and Post): Add gnus-message-highlight-citation.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Limiting): Add gnus-summary-limit-to-headers.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* message.texi (Mail Headers): Document `opportunistic'.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* emacs-mime.texi (Encoding Customization): Explain how to set
|
||||||
|
mm-coding-system-priorities per hierarchy.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Washing Mail): Add nnmail-ignore-broken-references and
|
||||||
|
nnmail-broken-references-mailers instead of nnmail-fix-eudora-headers.
|
||||||
|
|
||||||
|
2007-10-28 Didier Verna <didier@xemacs.org>
|
||||||
|
|
||||||
|
* message.texi (Wide Reply): Update documentation of
|
||||||
|
message-dont-reply-to-names (now allowing a list of regexps).
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Spam Package Introduction): Fix spam menu and links.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (SpamAssassin back end): Fix typo.
|
||||||
|
|
||||||
|
* sieve.texi (Examples): Fix grammar.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Searching for Articles): Document M-S and M-R.
|
||||||
|
(Limiting): Document / b.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Thread Commands): T M-^.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* message.texi (Mail Aliases): Document ecomplete.
|
||||||
|
(Mail Aliases): Fix typo.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Face): Restore xref to gnus-face-properties-alist;
|
||||||
|
fix typo.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (Mail Spool): Grammar fix.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Mail Spool): nnml-use-compressed-files can be a
|
||||||
|
string.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Group Parameters): Fix description.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Gmane Spam Reporting): Fix
|
||||||
|
spam-report-gmane-use-article-number. Add
|
||||||
|
spam-report-user-mail-address.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* emacs-mime.texi (Non-MIME): x-gnus-verbatim -> x-verbatim.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Group Parameters): Add simplified sorting example based on
|
||||||
|
example for `Sorting the Summary Buffer' from Jari Aalto
|
||||||
|
<jari.aalto@cante.net>.
|
||||||
|
(Example Methods): Add example for an indirect connection.
|
||||||
|
|
||||||
|
2007-10-28 Kevin Greiner <kevin.greiner@compsol.cc>
|
||||||
|
|
||||||
|
* gnus.texi (nntp-open-via-telnet-and-telnet): Fixed grammar.
|
||||||
|
(Agent Parameters): Updated parameter names to match code.
|
||||||
|
(Group Agent Commands): Corrected 'gnus-agent-fetch-series' as
|
||||||
|
'gnus-agent-summary-fetch-series'.
|
||||||
|
(Agent and flags): New section providing a generalized discussion
|
||||||
|
of flag handling.
|
||||||
|
(Agent and IMAP): Removed flag discussion.
|
||||||
|
(Agent Variables): Added 'gnus-agent-synchronize-flags'
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (Exiting the Summary Buffer): Add new function
|
||||||
|
`gnus-summary-catchup-and-goto-prev-group', bound to `Z p'.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Conformity): Fix typo.
|
||||||
|
(Customizing Articles): Document `first'.
|
||||||
|
|
||||||
|
2007-10-28 Jari Aalto <jari.aalto@cante.net>
|
||||||
|
|
||||||
|
* gnus.texi (Sorting the Summary Buffer):
|
||||||
|
Add `gnus-thread-sort-by-date-reverse'. Add example
|
||||||
|
host to different sorting in NNTP and RSS groups.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* message.texi (Insertion): Describe prefix for
|
||||||
|
message-mark-inserted-region and message-mark-insert-file.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* emacs-mime.texi (Non-MIME): Add Slrn-style verbatim marks and
|
||||||
|
LaTeX documents. Describe "text/x-gnus-verbatim".
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
|
||||||
|
* gnus.texi (Blacklists and Whitelists)
|
||||||
|
(Blacklists and Whitelists, BBDB Whitelists)
|
||||||
|
(Gmane Spam Reporting, Bogofilter, spam-stat spam filtering)
|
||||||
|
(spam-stat spam filtering, SpamOracle)
|
||||||
|
(Extending the Spam ELisp package): Removed extra quote symbol for
|
||||||
|
clarity.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (MIME Commands): Add gnus-article-save-part-and-strip,
|
||||||
|
gnus-article-delete-part and gnus-article-replace-part.
|
||||||
|
(Using MIME): Add gnus-mime-replace-part.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (Mail Spool): Mention that `nnml-use-compressed-files'
|
||||||
|
requires `auto-compression-mode' to be enabled. Add new nnml
|
||||||
|
variable `nnml-compressed-files-size-threshold'.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Sorting the Summary Buffer): Added
|
||||||
|
gnus-thread-sort-by-recipient.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* message.texi (Insertion Variables): Mention new variable
|
||||||
|
`message-yank-empty-prefix'. Change `message-yank-cited-prefix'
|
||||||
|
documentation accordingly.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (To From Newsgroups): Mention new variables
|
||||||
|
`gnus-summary-to-prefix' and `gnus-summary-newsgroup-prefix'.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Using MIME): gnus-mime-copy-part supports the charset
|
||||||
|
stuff; gnus-mime-inline-part does the automatic decompression.
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
|
||||||
|
* gnus.texi (Spam ELisp Package Configuration Examples):
|
||||||
|
"training.ham" should be "training.spam"
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* message.texi (Mail Variables): Fix the default value for
|
||||||
|
message-send-mail-function.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (Optional Back End Functions): nntp-request-update-info
|
||||||
|
always returns nil exceptionally.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (Article Washing): Add libidn URL. Suggested by
|
||||||
|
Michael Cook <michael@waxrat.com>.
|
||||||
|
|
||||||
|
2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||||
|
|
||||||
|
* gnus.texi (Topic Commands): Fix next/previous.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (Article Washing): Mention `W i'.
|
||||||
|
|
||||||
|
2007-10-28 Jochen K,A|(Bpper <jochen@fhi-berlin.mpg.de>
|
||||||
|
|
||||||
|
* gnus.texi (Group Parameters): Slight extension of sieve
|
||||||
|
parameter description.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Score Decays): `gnus-decay-scores' can be a regexp
|
||||||
|
matching score files as well.
|
||||||
|
(Picons): Describe `gnus-picon-style'.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* message.texi (Message Headers): Mention that headers are hidden
|
||||||
|
using narrowing, and how to expose them.
|
||||||
|
Update copyright.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnusref.tex: Mention `gnus-summary-limit-to-recipient' and
|
||||||
|
`gnus-summary-sort-by-recipient'.
|
||||||
|
|
||||||
|
2007-10-28 Romain Francoise <romain@orebokech.com>
|
||||||
|
|
||||||
|
* gnus.texi (NNTP marks): New node.
|
||||||
|
(NNTP): Move NNTP marks variables to the new node.
|
||||||
|
|
||||||
|
2007-10-28 Jesper Harder <harder@ifa.au.dk>
|
||||||
|
|
||||||
|
* gnus.texi, gnus-news.texi, pgg.texi, sasl.texi: backend -> back
|
||||||
|
end.
|
||||||
|
|
||||||
|
* gnus.texi (MIME Commands, Hashcash): Markup fix.
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
|
||||||
|
* gnus.texi: replaced @file{spam.el} with @code{spam.el}
|
||||||
|
everywhere for consistency.
|
||||||
|
(Filtering Spam Using The Spam ELisp Package): admonish again.
|
||||||
|
(Spam ELisp Package Sequence of Events): this is Gnus, say so.
|
||||||
|
Say "regular expression" instead of "regex." Admonish. Pick
|
||||||
|
other words to sound better (s/so/thus/).
|
||||||
|
(Spam ELisp Package Filtering of Incoming Mail): mention
|
||||||
|
statistical filters. Remove old TODO.
|
||||||
|
(Spam ELisp Package Sorting and Score Display in Summary Buffer):
|
||||||
|
new section on sorting and displaying the spam score
|
||||||
|
(BBDB Whitelists): mention spam-use-BBDB-exclusive is not a
|
||||||
|
backend but an alias to spam-use-BBDB
|
||||||
|
(Extending the Spam ELisp package): rewrite the example using the
|
||||||
|
new backend functionality.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (NNTP): Mention nntp-marks-is-evil and
|
||||||
|
nntp-marks-directory, from Romain Francoise
|
||||||
|
<romain@orebokech.com>.
|
||||||
|
|
||||||
|
2007-10-28 Magnus Henoch <mange@freemail.hu>
|
||||||
|
|
||||||
|
* gnus.texi (Hashcash): New default value of
|
||||||
|
hashcash-default-payment.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (Hashcash): Fix URL. Add pref to spam section.
|
||||||
|
(Anti-spam Hashcash Payments): No need to load hashcash.el now.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Adaptive Scoring): Added gnus-adaptive-pretty-print.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (documentencoding): Add, to avoid warnings.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* message.texi (Mail Headers): Add.
|
||||||
|
|
||||||
|
* gnus.texi (Hashcash): Fix.
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
|
||||||
|
* gnus.texi (Hashcash): changed location of library, also mention
|
||||||
|
that payments can be verified and fix the name of the
|
||||||
|
hashcash-path variable
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi
|
||||||
|
(Article Display): Add `gnus-picon-style'.
|
||||||
|
|
||||||
|
2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||||
|
|
||||||
|
* gnus.texi (SpamAssassin backend): Add it to the detailmenu.
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
|
||||||
|
* gnus.texi (Blacklists and Whitelists, BBDB Whitelists)
|
||||||
|
(Bogofilter, spam-stat spam filtering, SpamOracle): old incorrect
|
||||||
|
warning about ham processors in spam groups removed
|
||||||
|
|
||||||
|
2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
|
||||||
|
From Hubert Chan <hubert@uhoreg.ca>
|
||||||
|
|
||||||
|
* gnus.texi (SpamAssassin backend): added new node about SpamAssassin
|
||||||
|
|
||||||
|
2007-10-28 Jesper Harder <harder@ifa.au.dk>
|
||||||
|
|
||||||
|
* gnus.texi (Spam ELisp Package Sequence of Events): Index.
|
||||||
|
(Mailing List): Typo.
|
||||||
|
(Customizing Articles): Add gnus-treat-ansi-sequences.
|
||||||
|
(Article Washing): Index.
|
||||||
|
|
||||||
|
* message.texi: Use m-dash consistently.
|
||||||
|
|
||||||
|
2007-10-28 Jesper Harder <harder@ifa.au.dk>
|
||||||
|
|
||||||
|
* gnus.texi (GroupLens): Remove.
|
||||||
|
|
||||||
|
2007-10-28 Kevin Greiner <kgreiner@xpediantsolutions.com>
|
||||||
|
|
||||||
|
* gnus.texi (Outgoing Messages, Agent Variables): Add
|
||||||
|
gnus-agent-queue-mail and gnus-agent-prompt-send-queue.
|
||||||
|
Suggested by Gaute Strokkenes <gs234@srcf.ucam.org>
|
||||||
|
|
||||||
|
2007-10-28 Jesper Harder <harder@ifa.au.dk>
|
||||||
|
|
||||||
|
* gnus.texi (Limiting): Add gnus-summary-limit-to-replied.
|
||||||
|
|
||||||
|
2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
|
||||||
|
* gnus.texi (Article Washing): Add `gnus-article-treat-ansi-sequences'.
|
||||||
|
|
||||||
|
* gnus.texi (No Gnus): New node. Includes `gnus-news.texi'.
|
||||||
|
|
||||||
|
2007-10-28 Simon Josefsson <jas@extundo.com>
|
||||||
|
|
||||||
|
* gnus.texi (Top): Add SASL.
|
||||||
|
|
||||||
|
2007-10-27 Jay Belanger <jay.p.belanger@gmail.com>
|
||||||
|
|
||||||
|
* calc.texi (Formulas, Composition Basics): Lower the
|
||||||
|
precedence of negation.
|
||||||
|
|
||||||
2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
|
2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
|
||||||
|
|
||||||
* ses.texi (The Basics): Mention how to create a new spreadsheet.
|
* ses.texi (The Basics): Mention how to create a new spreadsheet.
|
||||||
|
|
|
@ -64,6 +64,7 @@ INFO_TARGETS = \
|
||||||
$(infodir)/pcl-cvs \
|
$(infodir)/pcl-cvs \
|
||||||
$(infodir)/pgg \
|
$(infodir)/pgg \
|
||||||
$(infodir)/rcirc \
|
$(infodir)/rcirc \
|
||||||
|
$(infodir)/remember \
|
||||||
$(infodir)/reftex \
|
$(infodir)/reftex \
|
||||||
$(infodir)/sc \
|
$(infodir)/sc \
|
||||||
$(infodir)/ses \
|
$(infodir)/ses \
|
||||||
|
@ -104,6 +105,7 @@ DVI_TARGETS = \
|
||||||
pgg.dvi \
|
pgg.dvi \
|
||||||
rcirc.dvi \
|
rcirc.dvi \
|
||||||
reftex.dvi \
|
reftex.dvi \
|
||||||
|
remember.dvi \
|
||||||
sc.dvi \
|
sc.dvi \
|
||||||
ses.dvi \
|
ses.dvi \
|
||||||
sieve.dvi \
|
sieve.dvi \
|
||||||
|
@ -306,6 +308,12 @@ $(infodir)/reftex: reftex.texi
|
||||||
reftex.dvi: reftex.texi
|
reftex.dvi: reftex.texi
|
||||||
$(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi
|
$(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi
|
||||||
|
|
||||||
|
remember : $(infodir)/remember
|
||||||
|
$(infodir)/remember: remember.texi
|
||||||
|
cd $(srcdir); $(MAKEINFO) remember.texi
|
||||||
|
remember.dvi: remember.texi
|
||||||
|
$(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi
|
||||||
|
|
||||||
sc : $(infodir)/sc
|
sc : $(infodir)/sc
|
||||||
$(infodir)/sc: sc.texi
|
$(infodir)/sc: sc.texi
|
||||||
cd $(srcdir); $(MAKEINFO) sc.texi
|
cd $(srcdir); $(MAKEINFO) sc.texi
|
||||||
|
|
|
@ -11579,8 +11579,7 @@ with their equivalent function names, are:
|
||||||
|
|
||||||
postfix @samp{%} [@code{percent}] (as in @samp{25% = 0.25});
|
postfix @samp{%} [@code{percent}] (as in @samp{25% = 0.25});
|
||||||
|
|
||||||
prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x})
|
prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
|
||||||
and prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
|
|
||||||
|
|
||||||
@samp{+/-} [@code{sdev}] (the standard deviation symbol) and
|
@samp{+/-} [@code{sdev}] (the standard deviation symbol) and
|
||||||
@samp{mod} [@code{makemod}] (the symbol for modulo forms);
|
@samp{mod} [@code{makemod}] (the symbol for modulo forms);
|
||||||
|
@ -11590,6 +11589,8 @@ and postfix @samp{!!} [@code{dfact}] (double factorial);
|
||||||
|
|
||||||
@samp{^} [@code{pow}] (raised-to-the-power-of);
|
@samp{^} [@code{pow}] (raised-to-the-power-of);
|
||||||
|
|
||||||
|
prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x});
|
||||||
|
|
||||||
@samp{*} [@code{mul}];
|
@samp{*} [@code{mul}];
|
||||||
|
|
||||||
@samp{/} [@code{div}], @samp{%} [@code{mod}] (modulo), and
|
@samp{/} [@code{div}], @samp{%} [@code{mod}] (modulo), and
|
||||||
|
@ -14610,15 +14611,15 @@ The operator table used by normal and Big language modes has the
|
||||||
following precedences:
|
following precedences:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
_ 1200 @r{(subscripts)}
|
_ 1200 @r{(subscripts)}
|
||||||
% 1100 @r{(as in n}%@r{)}
|
% 1100 @r{(as in n}%@r{)}
|
||||||
- 1000 @r{(as in }-@r{n)}
|
! 1000 @r{(as in }!@r{n)}
|
||||||
! 1000 @r{(as in }!@r{n)}
|
|
||||||
mod 400
|
mod 400
|
||||||
+/- 300
|
+/- 300
|
||||||
!! 210 @r{(as in n}!!@r{)}
|
!! 210 @r{(as in n}!!@r{)}
|
||||||
! 210 @r{(as in n}!@r{)}
|
! 210 @r{(as in n}!@r{)}
|
||||||
^ 200
|
^ 200
|
||||||
|
- 197 @r{(as in }-@r{n)}
|
||||||
* 195 @r{(or implicit multiplication)}
|
* 195 @r{(or implicit multiplication)}
|
||||||
/ % \ 190
|
/ % \ 190
|
||||||
+ - 180 @r{(as in a}+@r{b)}
|
+ - 180 @r{(as in a}+@r{b)}
|
||||||
|
|
|
@ -180,8 +180,27 @@ Patches. This is intended for groups where diffs of committed files
|
||||||
are automatically sent to. It only works in groups matching
|
are automatically sent to. It only works in groups matching
|
||||||
@code{mm-uu-diff-groups-regexp}.
|
@code{mm-uu-diff-groups-regexp}.
|
||||||
|
|
||||||
|
@item verbatim-marks
|
||||||
|
@cindex verbatim-marks
|
||||||
|
Slrn-style verbatim marks.
|
||||||
|
|
||||||
|
@item LaTeX
|
||||||
|
@cindex LaTeX
|
||||||
|
LaTeX documents. It only works in groups matching
|
||||||
|
@code{mm-uu-tex-groups-regexp}.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@cindex text/x-verbatim
|
||||||
|
@c Is @vindex suitable for a face?
|
||||||
|
@vindex mm-uu-extract
|
||||||
|
Some inlined non-@acronym{MIME} attachments are displayed using the face
|
||||||
|
@code{mm-uu-extract}. By default, no @acronym{MIME} button for these
|
||||||
|
parts is displayed. You can force displaying a button using @kbd{K b}
|
||||||
|
(@code{gnus-summary-display-buttonized}) or add @code{text/x-verbatim}
|
||||||
|
to @code{gnus-buttonized-mime-types}, @xref{MIME Commands, ,MIME
|
||||||
|
Commands, gnus, Gnus Manual}.
|
||||||
|
|
||||||
@node Handles
|
@node Handles
|
||||||
@section Handles
|
@section Handles
|
||||||
|
|
||||||
|
@ -849,6 +868,36 @@ ISO-8859-1 if possible, you can set this variable to
|
||||||
@code{(iso-8859-1)}. You can override this setting on a per-message
|
@code{(iso-8859-1)}. You can override this setting on a per-message
|
||||||
basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}).
|
basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}).
|
||||||
|
|
||||||
|
As different hierarchies prefer different charsets, you may want to set
|
||||||
|
@code{mm-coding-system-priorities} according to the hierarchy in Gnus.
|
||||||
|
Here's an example:
|
||||||
|
|
||||||
|
@c Corrections about preferred charsets are welcome. de, fr and fj
|
||||||
|
@c should be correct, I don't know about the rest (so these are only
|
||||||
|
@c examples):
|
||||||
|
@lisp
|
||||||
|
(add-to-list 'gnus-newsgroup-variables 'mm-coding-system-priorities)
|
||||||
|
(setq gnus-parameters
|
||||||
|
(nconc
|
||||||
|
;; Some charsets are just examples!
|
||||||
|
'(("^cn\\." ;; Chinese
|
||||||
|
(mm-coding-system-priorities
|
||||||
|
'(iso-8859-1 cn-big5 chinese-iso-7bit utf-8)))
|
||||||
|
("^cz\\.\\|^pl\\." ;; Central and Eastern European
|
||||||
|
(mm-coding-system-priorities '(iso-8859-2 utf-8)))
|
||||||
|
("^de\\." ;; German language
|
||||||
|
(mm-coding-system-priorities '(iso-8859-1 iso-8859-15 utf-8)))
|
||||||
|
("^fr\\." ;; French
|
||||||
|
(mm-coding-system-priorities '(iso-8859-15 iso-8859-1 utf-8)))
|
||||||
|
("^fj\\." ;; Japanese
|
||||||
|
(mm-coding-system-priorities
|
||||||
|
'(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8)))
|
||||||
|
("^ru\\." ;; Cyrillic
|
||||||
|
(mm-coding-system-priorities
|
||||||
|
'(koi8-r iso-8859-5 iso-8859-1 utf-8))))
|
||||||
|
gnus-parameters))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
@item mm-content-transfer-encoding-defaults
|
@item mm-content-transfer-encoding-defaults
|
||||||
@vindex mm-content-transfer-encoding-defaults
|
@vindex mm-content-transfer-encoding-defaults
|
||||||
Mapping from @acronym{MIME} types to encoding to use. This variable is usually
|
Mapping from @acronym{MIME} types to encoding to use. This variable is usually
|
||||||
|
@ -1155,7 +1204,7 @@ Return the value of the field under point.
|
||||||
@item mail-encode-encoded-word-region
|
@item mail-encode-encoded-word-region
|
||||||
@findex mail-encode-encoded-word-region
|
@findex mail-encode-encoded-word-region
|
||||||
Encode the non-@acronym{ASCII} words in the region. For instance,
|
Encode the non-@acronym{ASCII} words in the region. For instance,
|
||||||
@samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
|
@samp{Na@"{@dotless{i}}ve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
|
||||||
|
|
||||||
@item mail-encode-encoded-word-buffer
|
@item mail-encode-encoded-word-buffer
|
||||||
@findex mail-encode-encoded-word-buffer
|
@findex mail-encode-encoded-word-buffer
|
||||||
|
@ -1168,7 +1217,7 @@ Encode the words that need encoding in a string, and return the result.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
(mail-encode-encoded-word-string
|
(mail-encode-encoded-word-string
|
||||||
"This is naïve, baby")
|
"This is na@"{@dotless{i}}ve, baby")
|
||||||
@result{} "This is =?iso-8859-1?q?na=EFve,?= baby"
|
@result{} "This is =?iso-8859-1?q?na=EFve,?= baby"
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@ -1183,7 +1232,7 @@ Decode the encoded words in the string and return the result.
|
||||||
@example
|
@example
|
||||||
(mail-decode-encoded-word-string
|
(mail-decode-encoded-word-string
|
||||||
"This is =?iso-8859-1?q?na=EFve,?= baby")
|
"This is =?iso-8859-1?q?na=EFve,?= baby")
|
||||||
@result{} "This is naïve, baby"
|
@result{} "This is na@"{@dotless{i}}ve, baby"
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
381
doc/misc/gnus-coding.texi
Normal file
381
doc/misc/gnus-coding.texi
Normal file
|
@ -0,0 +1,381 @@
|
||||||
|
\input texinfo
|
||||||
|
|
||||||
|
@setfilename gnus-coding
|
||||||
|
@settitle Gnus Coding Style and Maintainance Guide
|
||||||
|
@syncodeindex fn cp
|
||||||
|
@syncodeindex vr cp
|
||||||
|
@syncodeindex pg cp
|
||||||
|
|
||||||
|
@copying
|
||||||
|
Copyright (c) 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
@quotation
|
||||||
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
|
under the terms of the GNU Free Documentation License, Version 1.1 or
|
||||||
|
any later version published by the Free Software Foundation; with no
|
||||||
|
Invariant Sections, with the Front-Cover texts being ``A GNU
|
||||||
|
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
|
||||||
|
license is included in the section entitled ``GNU Free Documentation
|
||||||
|
License'' in the Emacs manual.
|
||||||
|
|
||||||
|
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
|
||||||
|
this GNU Manual, like GNU software. Copies published by the Free
|
||||||
|
Software Foundation raise funds for GNU development.''
|
||||||
|
|
||||||
|
This document is part of a collection distributed under the GNU Free
|
||||||
|
Documentation License. If you want to distribute this document
|
||||||
|
separately from the collection, you can do so by adding a copy of the
|
||||||
|
license to the document, as described in section 6 of the license.
|
||||||
|
@end quotation
|
||||||
|
@end copying
|
||||||
|
|
||||||
|
|
||||||
|
@titlepage
|
||||||
|
@title Gnus Coding Style and Maintainance Guide
|
||||||
|
|
||||||
|
@author by Reiner Steib <Reiner.Steib@@gmx.de>
|
||||||
|
|
||||||
|
@insertcopying
|
||||||
|
@end titlepage
|
||||||
|
|
||||||
|
@c Obviously this is only a very rudimentary draft. We put it in CVS
|
||||||
|
@c anyway hoping that it might annoy someone enough to fix it. ;-)
|
||||||
|
@c Fixing only a paragraph also is appreciated.
|
||||||
|
|
||||||
|
@node Top
|
||||||
|
@top Gnus Coding Style and Maintainance Guide
|
||||||
|
This manual describes @dots{}
|
||||||
|
@menu
|
||||||
|
* Gnus Coding Style:: Gnus Coding Style
|
||||||
|
* Gnus Maintainance Guide:: Gnus Maintainance Guide
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@c @ref{Gnus Reference Guide, ,Gnus Reference Guide, gnus, The Gnus Newsreader}
|
||||||
|
|
||||||
|
@node Gnus Coding Style
|
||||||
|
@chapter Gnus Coding Style
|
||||||
|
@section Dependencies
|
||||||
|
|
||||||
|
The Gnus distribution contains a lot of libraries that have been written
|
||||||
|
for Gnus and used intensively for Gnus. But many of those libraries are
|
||||||
|
useful on their own. E.g. other Emacs Lisp packages might use the
|
||||||
|
@acronym{MIME} library @xref{Top, ,Top, emacs-mime, The Emacs MIME
|
||||||
|
Manual}.
|
||||||
|
|
||||||
|
@subsection General purpose libraries
|
||||||
|
|
||||||
|
@table @file
|
||||||
|
|
||||||
|
@item netrc.el
|
||||||
|
@file{.netrc} parsing functionality.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item format-spec.el
|
||||||
|
Functions for formatting arbitrary formatting strings.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item hex-util.el
|
||||||
|
Functions to encode/decode hexadecimal string.
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@subsection Encryption and security
|
||||||
|
|
||||||
|
@table @file
|
||||||
|
@item encrypt.el
|
||||||
|
File encryption routines
|
||||||
|
@c As of 2005-10-25...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item password.el
|
||||||
|
Read passwords from user, possibly using a password cache.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item tls.el
|
||||||
|
TLS/SSL support via wrapper around GnuTLS
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item pgg*.el
|
||||||
|
Glue for the various PGP implementations.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
|
||||||
|
@item sha1.el
|
||||||
|
SHA1 Secure Hash Algorithm.
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@subsection Networking
|
||||||
|
|
||||||
|
@table @file
|
||||||
|
@item dig.el
|
||||||
|
Domain Name System dig interface.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no serious Gnus dependencies in this file. Uses
|
||||||
|
@code{gnus-run-mode-hooks} (a wrapper function).
|
||||||
|
|
||||||
|
@item dns.el, dns-mode.el
|
||||||
|
Domain Name Service lookups.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@subsection Mail and News related RFCs
|
||||||
|
|
||||||
|
@table @file
|
||||||
|
@item pop3.el
|
||||||
|
Post Office Protocol (RFC 1460) interface.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item imap.el
|
||||||
|
@acronym{IMAP} library.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item ietf-drums.el
|
||||||
|
Functions for parsing RFC822bis headers.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item rfc1843.el
|
||||||
|
HZ (rfc1843) decoding. HZ is a data format for exchanging files of
|
||||||
|
arbitrarily mixed Chinese and @acronym{ASCII} characters.
|
||||||
|
@c As of 2005-10-21...
|
||||||
|
@code{rfc1843-gnus-setup} seem to be useful only for Gnus. Maybe this
|
||||||
|
function should be relocated to remove dependencies on Gnus. Other
|
||||||
|
minor dependencies: @code{gnus-newsgroup-name} could be eliminated by
|
||||||
|
using an optional argument to @code{rfc1843-decode-article-body}.
|
||||||
|
|
||||||
|
@item rfc2045.el
|
||||||
|
Functions for decoding rfc2045 headers
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
|
||||||
|
@item rfc2047.el
|
||||||
|
Functions for encoding and decoding rfc2047 messages
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
@c
|
||||||
|
Only a couple of tests for gnusy symbols.
|
||||||
|
|
||||||
|
@item rfc2104.el
|
||||||
|
RFC2104 Hashed Message Authentication Codes
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
|
||||||
|
@item rfc2231.el
|
||||||
|
Functions for decoding rfc2231 headers
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
|
||||||
|
@item flow-fill.el
|
||||||
|
Interpret RFC2646 "flowed" text.
|
||||||
|
@c As of 2005-10-27...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
|
||||||
|
@item uudecode.el
|
||||||
|
Elisp native uudecode.
|
||||||
|
@c As of 2005-12-06...
|
||||||
|
There are no Gnus dependencies in this file.
|
||||||
|
@c ... but the custom group is gnus-extract.
|
||||||
|
|
||||||
|
@item canlock.el
|
||||||
|
Functions for Cancel-Lock feature
|
||||||
|
@c Cf. draft-ietf-usefor-cancel-lock-01.txt
|
||||||
|
@c Although this draft has expired, Canlock-Lock revived in 2007 when
|
||||||
|
@c major news providers (e.g. news.individual.org) started to use it.
|
||||||
|
@c As of 2007-08-25...
|
||||||
|
There are no Gnus dependencies in these files.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@subsection message
|
||||||
|
|
||||||
|
All message composition from Gnus (both mail and news) takes place in
|
||||||
|
Message mode buffers. Message mode is intended to be a replacement for
|
||||||
|
Emacs mail mode. There should be no Gnus dependencies in
|
||||||
|
@file{message.el}. Alas it is not anymore. Patches and suggestions to
|
||||||
|
remove the dependencies are welcome.
|
||||||
|
|
||||||
|
@c message.el requires nnheader which requires gnus-util.
|
||||||
|
|
||||||
|
@subsection Emacs @acronym{MIME}
|
||||||
|
|
||||||
|
The files @file{mml*.el} and @file{mm-*.el} provide @acronym{MIME}
|
||||||
|
functionality for Emacs.
|
||||||
|
|
||||||
|
@acronym{MML} (@acronym{MIME} Meta Language) is supposed to be
|
||||||
|
independent from Gnus. Alas it is not anymore. Patches and suggestions
|
||||||
|
to remove the dependencies are welcome.
|
||||||
|
|
||||||
|
@subsection Gnus backends
|
||||||
|
|
||||||
|
The files @file{nn*.el} provide functionality for accessing NNTP
|
||||||
|
(@file{nntp.el}), IMAP (@file{nnimap.el}) and several other Mail back
|
||||||
|
ends (probably @file{nnml.el}, @file{nnfolder.el} and
|
||||||
|
@file{nnmaildir.el} are the most widely used mail back ends).
|
||||||
|
|
||||||
|
@c mm-uu requires nnheader which requires gnus-util. message.el also
|
||||||
|
@c requires nnheader.
|
||||||
|
|
||||||
|
|
||||||
|
@section Compatibility
|
||||||
|
|
||||||
|
No Gnus and Gnus 5.10.10 and up should work on:
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
Emacs 21.1 and up.
|
||||||
|
@item
|
||||||
|
XEmacs 21.4 and up.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
Gnus 5.10.8 and below should work on:
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
Emacs 20.7 and up.
|
||||||
|
@item
|
||||||
|
XEmacs 21.1 and up.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@node Gnus Maintainance Guide
|
||||||
|
@chapter Gnus Maintainance Guide
|
||||||
|
|
||||||
|
@section Stable and development versions
|
||||||
|
|
||||||
|
The development of Gnus normally is done on the CVS trunk, i.e. there
|
||||||
|
are no separate branches to develop and test new features. Most of the
|
||||||
|
time, the trunk is developed quite actively with more or less daily
|
||||||
|
changes. Only after a new major release, e.g. 5.10.1, there's usually a
|
||||||
|
feature period of several months. After the release of Gnus 5.10.6 the
|
||||||
|
development of new features started again on the trunk while the 5.10
|
||||||
|
series is continued on the stable branch (v5-10) from which more stable
|
||||||
|
releases will be done when needed (5.10.7, @dots{}).
|
||||||
|
@ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader}
|
||||||
|
|
||||||
|
Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8
|
||||||
|
became a part of Emacs 21 (relabeled to Gnus 5.9). The 5.10 series
|
||||||
|
became part of Emacs 22 as Gnus 5.11.
|
||||||
|
|
||||||
|
@section Syncing
|
||||||
|
|
||||||
|
@c Some MIDs related to this follow. Use http://thread.gmane.org/MID
|
||||||
|
@c (and click on the subject) to get the thread on Gmane.
|
||||||
|
|
||||||
|
@c Some quotes from Miles Bader follow...
|
||||||
|
|
||||||
|
@c <v9eklyke6b.fsf@marauder.physik.uni-ulm.de>
|
||||||
|
@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
|
||||||
|
|
||||||
|
In the past, the inclusion of Gnus into Emacs was quite cumbersome. For
|
||||||
|
each change made to Gnus in Emacs repository, it had to be checked that
|
||||||
|
it was applied to the new Gnus version, too. Else, bug fixes done in
|
||||||
|
Emacs repository might have been lost.
|
||||||
|
|
||||||
|
With the inclusion of Gnus 5.10, Miles Bader has set up an Emacs-Gnus
|
||||||
|
gateway to ensure the bug fixes from Emacs CVS are propagated to Gnus
|
||||||
|
CVS semi-automatically. These bug fixes are installed on the stable
|
||||||
|
branch and on the trunk. Basically the idea is that the gateway will
|
||||||
|
cause all common files in Emacs and Gnus v5-10 to be identical except
|
||||||
|
when there's a very good reason (e.g., the Gnus version string in Emacs
|
||||||
|
says @samp{5.11}, but the v5-10 version string remains @samp{5.10.x}).
|
||||||
|
Furthermore, all changes in these files in either Emacs or the v5-10
|
||||||
|
branch will be installed into the Gnus CVS trunk, again except where
|
||||||
|
there's a good reason.
|
||||||
|
@c (typically so far the only exception has been that the changes
|
||||||
|
@c already exist in the trunk in modified form).
|
||||||
|
Because of this, when the next major version of Gnus will be included in
|
||||||
|
Emacs, it should be very easy -- just plonk in the files from the Gnus
|
||||||
|
trunk without worrying about lost changes from the Emacs tree.
|
||||||
|
|
||||||
|
The effect of this is that as hacker, you should generally only have to
|
||||||
|
make changes in one place:
|
||||||
|
|
||||||
|
@itemize
|
||||||
|
@item
|
||||||
|
If it's a file which is thought of as being outside of Gnus (e.g., the
|
||||||
|
new @file{encrypt.el}), you should probably make the change in the Emacs
|
||||||
|
tree, and it will show up in the Gnus tree a few days later.
|
||||||
|
|
||||||
|
If you don't have Emacs CVS access (or it's inconvenient), you can
|
||||||
|
change such a file in the v5-10 branch, and it should propagate to Emacs
|
||||||
|
CVS -- however, it will get some extra scrutiny (by Miles) to see if the
|
||||||
|
changes are possibly controversial and need discussion on the mailing
|
||||||
|
list. Many changes are obvious bug-fixes however, so often there won't
|
||||||
|
be any problem.
|
||||||
|
|
||||||
|
@item
|
||||||
|
If it's to a Gnus file, and it's important enough that it should be part
|
||||||
|
of Emacs and the v5-10 branch, then you can make the change on the v5-10
|
||||||
|
branch, and it will go into Emacs CVS and the Gnus CVS trunk (a few days
|
||||||
|
later). The most prominent examples for such changes are bug-fixed
|
||||||
|
including improvements on the documentation.
|
||||||
|
|
||||||
|
If you know that there will be conflicts (perhaps because the affected
|
||||||
|
source code is different in v5-10 and the Gnus CVS trunk), then you can
|
||||||
|
install your change in both places, and when I try to sync them, there
|
||||||
|
will be a conflict -- however, since in most such cases there would be a
|
||||||
|
conflict @emph{anyway}, it's often easier for me to resolve it simply if
|
||||||
|
I see two @samp{identical} changes, and can just choose the proper one,
|
||||||
|
rather than having to actually fix the code.
|
||||||
|
|
||||||
|
@item
|
||||||
|
For general Gnus development changes, of course you just make the
|
||||||
|
change on the Gnus CVS trunk and it goes into Emacs a few years
|
||||||
|
later... :-)
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
Of course in any case, if you just can't wait for me to sync your
|
||||||
|
change, you can commit it in more than one place and probably there will
|
||||||
|
be no problem; usually the changes are textually identical anyway, so
|
||||||
|
can be easily resolved automatically (sometimes I notice silly things in
|
||||||
|
such multiple commits, like whitespace differences, and unify those ;-).
|
||||||
|
|
||||||
|
|
||||||
|
@c I do Emacs->Gnus less often (than Gnus->Emacs) because it tends to
|
||||||
|
@c require more manual work.
|
||||||
|
|
||||||
|
@c By default I sync about once a week. I also try to follow any Gnus
|
||||||
|
@c threads on the mailing lists and make sure any changes being discussed
|
||||||
|
@c are kept more up-to-date (so say 1-2 days delay for "topical" changes).
|
||||||
|
|
||||||
|
@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
|
||||||
|
|
||||||
|
@c BTW, just to add even more verbose explanation about the syncing thing:
|
||||||
|
|
||||||
|
@section Miscellanea
|
||||||
|
|
||||||
|
@heading @file{GNUS-NEWS}
|
||||||
|
|
||||||
|
Starting from No Gnus, the @file{GNUS-NEWS} is created from
|
||||||
|
@file{texi/gnus-news.texi}. Don't edit @file{GNUS-NEWS}. Edit
|
||||||
|
@file{texi/gnus-news.texi}, type @command{make GNUS-NEWS} in the
|
||||||
|
@file{texi} directory and commit @file{GNUS-NEWS} and
|
||||||
|
@file{texi/gnus-news.texi}.
|
||||||
|
|
||||||
|
@heading Conventions for version information in defcustoms
|
||||||
|
|
||||||
|
For new customizable variables introduced in Oort Gnus (including the
|
||||||
|
v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the
|
||||||
|
comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature
|
||||||
|
was added for Emacs 22.2 and Gnus 5.10.10.
|
||||||
|
@c
|
||||||
|
If the variable is new in No Gnus use @code{:version "23.0" ;; No Gnus}.
|
||||||
|
|
||||||
|
The same applies for customizable variables when its default value was
|
||||||
|
changed.
|
||||||
|
|
||||||
|
@c Local Variables:
|
||||||
|
@c mode: texinfo
|
||||||
|
@c coding: iso-8859-1
|
||||||
|
@c End:
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
arch-tag: ab15234c-2c8a-4cbd-8111-1811bcc6f931
|
||||||
|
@end ignore
|
|
@ -128,7 +128,7 @@ What is the latest version of Gnus?
|
||||||
Jingle please: Gnus 5.10 is released, get it while it's
|
Jingle please: Gnus 5.10 is released, get it while it's
|
||||||
hot! As well as the step in version number is rather
|
hot! As well as the step in version number is rather
|
||||||
small, Gnus 5.10 has tons of new features which you
|
small, Gnus 5.10 has tons of new features which you
|
||||||
shouldn't miss. The current release (5.10.8) should be at
|
shouldn't miss. The current release (5.13) should be at
|
||||||
least as stable as the latest release of the 5.8 series.
|
least as stable as the latest release of the 5.8 series.
|
||||||
|
|
||||||
@node [1.2]
|
@node [1.2]
|
||||||
|
@ -1286,18 +1286,23 @@ How to enable automatic word-wrap when composing messages?
|
||||||
|
|
||||||
@subsubheading Answer
|
@subsubheading Answer
|
||||||
|
|
||||||
Say
|
Starting from No Gnus, automatic word-wrap is already enabled by
|
||||||
|
default, see the variable message-fill-column.
|
||||||
|
|
||||||
|
For other versions of Gnus, say
|
||||||
|
|
||||||
@example
|
@example
|
||||||
(add-hook 'message-mode-hook
|
(unless (boundp 'message-fill-column)
|
||||||
(lambda ()
|
(add-hook 'message-mode-hook
|
||||||
(setq fill-column 72)
|
(lambda ()
|
||||||
(turn-on-auto-fill)))
|
(setq fill-column 72)
|
||||||
|
(turn-on-auto-fill))))
|
||||||
@end example
|
@end example
|
||||||
@noindent
|
@noindent
|
||||||
|
|
||||||
in ~/.gnus.el. You can reformat a paragraph by hitting
|
in ~/.gnus.el.
|
||||||
@samp{M-q} (as usual)
|
|
||||||
|
You can reformat a paragraph by hitting @samp{M-q} (as usual).
|
||||||
|
|
||||||
@node [5.3]
|
@node [5.3]
|
||||||
@subsubheading Question 5.3
|
@subsubheading Question 5.3
|
||||||
|
@ -1676,10 +1681,7 @@ you to use something like
|
||||||
yourUserName.userfqdn.provider.net, or you can use
|
yourUserName.userfqdn.provider.net, or you can use
|
||||||
somethingUnique.yourdomain.tld if you own the domain
|
somethingUnique.yourdomain.tld if you own the domain
|
||||||
yourdomain.tld, or you can register at a service which
|
yourdomain.tld, or you can register at a service which
|
||||||
gives private users a FQDN for free, e.g.
|
gives private users a FQDN for free.
|
||||||
@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
|
|
||||||
(Sorry but this website is in German, if you know of an
|
|
||||||
English one offering the same, drop me a note).
|
|
||||||
|
|
||||||
Finally you can tell Gnus not to generate a Message-ID
|
Finally you can tell Gnus not to generate a Message-ID
|
||||||
for News at all (and letting the server do the job) by saying
|
for News at all (and letting the server do the job) by saying
|
||||||
|
|
121
doc/misc/gnus-news.el
Normal file
121
doc/misc/gnus-news.el
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
|
||||||
|
;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
;; Author: Reiner Steib <Reiner.Steib@gmx.de>
|
||||||
|
;; Keywords: tools
|
||||||
|
|
||||||
|
;; This file is part of GNU Emacs.
|
||||||
|
|
||||||
|
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
|
||||||
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;; GNU General Public License for more details.
|
||||||
|
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||||
|
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
;; Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(defvar gnus-news-header-disclaimer
|
||||||
|
"GNUS NEWS -- history of user-visible changes.
|
||||||
|
|
||||||
|
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||||
|
2006, 2007 Free Software Foundation, Inc.
|
||||||
|
See the end of the file for license conditions.
|
||||||
|
|
||||||
|
Please send Gnus bug reports to bugs@gnus.org.
|
||||||
|
For older news, see Gnus info node \"New Features\".\n\n")
|
||||||
|
|
||||||
|
(defvar gnus-news-trailer
|
||||||
|
"
|
||||||
|
* For older news, see Gnus info node \"New Features\".
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
This file is part of GNU Emacs.
|
||||||
|
|
||||||
|
GNU Emacs is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GNU Emacs is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GNU Emacs; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
\nLocal variables:\nmode: outline
|
||||||
|
paragraph-separate: \"[ ]*$\"\nend:\n")
|
||||||
|
|
||||||
|
(defvar gnus-news-makeinfo-command "makeinfo")
|
||||||
|
|
||||||
|
(defvar gnus-news-fill-column 80)
|
||||||
|
|
||||||
|
(defvar gnus-news-makeinfo-switches
|
||||||
|
(concat " --no-headers --paragraph-indent=0"
|
||||||
|
" --no-validate" ;; Allow unresolved references.
|
||||||
|
" --fill-column=" (number-to-string
|
||||||
|
(+ 3 ;; will strip leading spaces later
|
||||||
|
(or gnus-news-fill-column 80)))))
|
||||||
|
|
||||||
|
(defun batch-gnus-news ()
|
||||||
|
"Make GNUS-NEWS in batch mode."
|
||||||
|
(let (infile outfile)
|
||||||
|
(setq infile (car command-line-args-left)
|
||||||
|
command-line-args-left (cdr command-line-args-left)
|
||||||
|
outfile (car command-line-args-left)
|
||||||
|
command-line-args-left nil)
|
||||||
|
(if (and infile outfile)
|
||||||
|
(message "Creating `%s' from `%s'..." outfile infile)
|
||||||
|
(error "Not enough files given."))
|
||||||
|
(gnus-news-translate-file infile outfile)))
|
||||||
|
|
||||||
|
(defun gnus-news-translate-file (infile outfile)
|
||||||
|
"Translate INFILE (texinfo) to OUTFILE (GNUS-NEWS)."
|
||||||
|
(let* ((dir (concat (or (getenv "srcdir") ".") "/"))
|
||||||
|
(infile (concat dir infile))
|
||||||
|
(buffer (find-file-noselect (concat dir outfile))))
|
||||||
|
(with-temp-buffer
|
||||||
|
;; Could be done using `texinfmt' stuff as in `infohack.el'.
|
||||||
|
(insert
|
||||||
|
(shell-command-to-string
|
||||||
|
(concat gnus-news-makeinfo-command " "
|
||||||
|
gnus-news-makeinfo-switches " " infile)))
|
||||||
|
(goto-char (point-max))
|
||||||
|
(delete-char -1)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(save-excursion
|
||||||
|
(while (re-search-forward "^ \\* " nil t)
|
||||||
|
(replace-match "\f\n* ")))
|
||||||
|
(save-excursion
|
||||||
|
(while (re-search-forward "^ \\* " nil t)
|
||||||
|
(replace-match "** ")))
|
||||||
|
(save-excursion
|
||||||
|
(while (re-search-forward "^ " nil t)
|
||||||
|
(replace-match "")))
|
||||||
|
;; Avoid `*' from @ref at beginning of line:
|
||||||
|
(save-excursion
|
||||||
|
(while (re-search-forward "^\\*Note" nil t)
|
||||||
|
(replace-match " \\&")))
|
||||||
|
(goto-char (point-min))
|
||||||
|
(insert gnus-news-header-disclaimer)
|
||||||
|
(goto-char (point-max))
|
||||||
|
(insert gnus-news-trailer)
|
||||||
|
(write-region (point-min) (point-max) outfile))))
|
||||||
|
|
||||||
|
;;; arch-tag: e23cdd27-eafd-4ba0-816f-98f5edb0dc29
|
||||||
|
;;; gnus-news.el ends here
|
264
doc/misc/gnus-news.texi
Normal file
264
doc/misc/gnus-news.texi
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
@c -*-texinfo-*-
|
||||||
|
|
||||||
|
@c Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
@c Permission is granted to anyone to make or distribute verbatim copies
|
||||||
|
@c of this document as received, in any medium, provided that the
|
||||||
|
@c copyright notice and this permission notice are preserved,
|
||||||
|
@c thus giving the recipient permission to redistribute in turn.
|
||||||
|
|
||||||
|
@c Permission is granted to distribute modified versions
|
||||||
|
@c of this document, or of portions of it,
|
||||||
|
@c under the above conditions, provided also that they
|
||||||
|
@c carry prominent notices stating who last changed them.
|
||||||
|
|
||||||
|
@c This file contains a list of news features Gnus. It is supposed to be
|
||||||
|
@c included in `gnus.texi'. `GNUS-NEWS' is automatically generated from
|
||||||
|
@c this file (see `gnus-news.el').
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
|
||||||
|
@item Installation changes
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item Upgrading from previous (stable) version if you have used No Gnus.
|
||||||
|
|
||||||
|
If you have tried No Gnus (the unstable Gnus branch leading to this
|
||||||
|
release) but went back to a stable version, be careful when upgrading
|
||||||
|
to this version. In particular, you will probably want to remove the
|
||||||
|
@file{~/News/marks} directory (perhaps selectively), so that flags are
|
||||||
|
read from your @file{~/.newsrc.eld} instead of from the stale marks
|
||||||
|
file, where this release will store flags for nntp. See a later entry
|
||||||
|
for more information about nntp marks. Note that downgrading isn't
|
||||||
|
safe in general.
|
||||||
|
|
||||||
|
@item Lisp files are now installed in @file{.../site-lisp/gnus/} by default.
|
||||||
|
It defaulted to @file{.../site-lisp/} formerly. In addition to this,
|
||||||
|
the new installer issues a warning if other Gnus installations which
|
||||||
|
will shadow the latest one are detected. You can then remove those
|
||||||
|
shadows manually or remove them using @code{make
|
||||||
|
remove-installed-shadows}.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item New packages and libraries within Gnus
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
|
||||||
|
@item Gnus includes the Emacs Lisp @acronym{SASL} library.
|
||||||
|
|
||||||
|
This provides a clean @acronym{API} to @acronym{SASL} mechanisms from
|
||||||
|
within Emacs. The user visible aspects of this, compared to the earlier
|
||||||
|
situation, include support for @acronym{DIGEST}-@acronym{MD5} and
|
||||||
|
@acronym{NTLM}. @xref{Top, ,Emacs SASL, sasl, Emacs SASL}.
|
||||||
|
|
||||||
|
@item ManageSieve connections uses the @acronym{SASL} library by default.
|
||||||
|
|
||||||
|
The primary change this brings is support for @acronym{DIGEST-MD5} and
|
||||||
|
@acronym{NTLM}, when the server supports it.
|
||||||
|
|
||||||
|
@item Gnus includes a password cache mechanism in password.el.
|
||||||
|
|
||||||
|
It is enabled by default (see @code{password-cache}), with a short
|
||||||
|
timeout of 16 seconds (see @code{password-cache-expiry}). If
|
||||||
|
@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP}
|
||||||
|
passphrase is managed by this mechanism. Passwords for ManageSieve
|
||||||
|
connections are managed by this mechanism, after querying the user
|
||||||
|
about whether to do so.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item Changes in summary and article mode
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
|
||||||
|
@item Gnus now supports sticky article buffers. Those are article buffers
|
||||||
|
that are not reused when you select another article. @xref{Sticky
|
||||||
|
Articles}.
|
||||||
|
|
||||||
|
@item International host names (@acronym{IDNA}) can now be decoded
|
||||||
|
inside article bodies using @kbd{W i}
|
||||||
|
(@code{gnus-summary-idna-message}). This requires that GNU Libidn
|
||||||
|
(@url{http://www.gnu.org/software/libidn/}) has been installed.
|
||||||
|
@c FIXME: Also mention @code{message-use-idna}?
|
||||||
|
|
||||||
|
@item The non-@acronym{ASCII} group names handling has been much
|
||||||
|
improved. The back ends that fully support non-@acronym{ASCII} group
|
||||||
|
names are now @code{nntp}, @code{nnml}, and @code{nnrss}. Also the
|
||||||
|
agent, the cache, and the marks features work with those back ends.
|
||||||
|
@xref{Non-ASCII Group Names}.
|
||||||
|
|
||||||
|
@item Gnus now displays @acronym{DNS} master files sent as text/dns
|
||||||
|
using dns-mode.
|
||||||
|
|
||||||
|
@item Gnus supports new limiting commands in the Summary buffer:
|
||||||
|
@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R}
|
||||||
|
(@code{gnus-summary-limit-to-recipient}). @xref{Limiting}.
|
||||||
|
|
||||||
|
@item You can now fetch all ticked articles from the server using
|
||||||
|
@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary
|
||||||
|
Generation Commands}.
|
||||||
|
|
||||||
|
@item Gnus supports a new sort command in the Summary buffer:
|
||||||
|
@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary
|
||||||
|
Sorting}.
|
||||||
|
|
||||||
|
@item @acronym{S/MIME} now features @acronym{LDAP} user certificate searches.
|
||||||
|
You need to configure the server in @code{smime-ldap-host-list}.
|
||||||
|
|
||||||
|
@item URLs inside Open@acronym{PGP} headers are retrieved and imported
|
||||||
|
to your PGP key ring when you click on them.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Picons can be displayed right from the textual address, see
|
||||||
|
@code{gnus-picon-style}. @xref{Picons}.
|
||||||
|
|
||||||
|
@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed
|
||||||
|
using @kbd{W A}.
|
||||||
|
|
||||||
|
@acronym{ANSI} sequences are used in some Chinese hierarchies for
|
||||||
|
highlighting articles (@code{gnus-article-treat-ansi-sequences}).
|
||||||
|
|
||||||
|
@item Gnus now MIME decodes articles even when they lack "MIME-Version" header.
|
||||||
|
This changes the default of @code{gnus-article-loose-mime}.
|
||||||
|
|
||||||
|
@item @code{gnus-decay-scores} can be a regexp matching score files.
|
||||||
|
For example, set it to @samp{\\.ADAPT\\'} and only adaptive score files
|
||||||
|
will be decayed. @xref{Score Decays}.
|
||||||
|
|
||||||
|
@item Strings prefixing to the @code{To} and @code{Newsgroup} headers in
|
||||||
|
summary lines when using @code{gnus-ignored-from-addresses} can be
|
||||||
|
customized with @code{gnus-summary-to-prefix} and
|
||||||
|
@code{gnus-summary-newsgroup-prefix}. @xref{To From Newsgroups}.
|
||||||
|
|
||||||
|
@item You can replace @acronym{MIME} parts with external bodies.
|
||||||
|
See @code{gnus-mime-replace-part} and @code{gnus-article-replace-part}.
|
||||||
|
@xref{MIME Commands}, @ref{Using MIME}.
|
||||||
|
|
||||||
|
@item
|
||||||
|
The option @code{mm-fill-flowed} can be used to disable treatment of
|
||||||
|
format=flowed messages. Also, flowed text is disabled when sending
|
||||||
|
inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text,
|
||||||
|
emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7)
|
||||||
|
@c This entry is also present in the node "Oort Gnus".
|
||||||
|
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item Changes in Message mode
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item Gnus now supports the ``hashcash'' client puzzle anti-spam mechanism.
|
||||||
|
Use @code{(setq message-generate-hashcash t)} to enable.
|
||||||
|
@xref{Hashcash}.
|
||||||
|
|
||||||
|
@item You can now drag and drop attachments to the Message buffer.
|
||||||
|
See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}.
|
||||||
|
@xref{MIME, ,MIME, message, Message Manual}.
|
||||||
|
|
||||||
|
@item The option @code{message-yank-empty-prefix} now controls how
|
||||||
|
empty lines are prefixed in cited text. @xref{Insertion Variables,
|
||||||
|
,Insertion Variables, message, Message Manual}.
|
||||||
|
|
||||||
|
@item Gnus uses narrowing to hide headers in Message buffers.
|
||||||
|
The @code{References} header is hidden by default. To make all
|
||||||
|
headers visible, use @code{(setq message-hidden-headers nil)}.
|
||||||
|
@xref{Message Headers, ,Message Headers, message, Message Manual}.
|
||||||
|
|
||||||
|
@item You can highlight different levels of citations like in the
|
||||||
|
article buffer. See @code{gnus-message-highlight-citation}.
|
||||||
|
|
||||||
|
@item @code{auto-fill-mode} is enabled by default in Message mode.
|
||||||
|
See @code{message-fill-column}. @xref{Various Message Variables, ,
|
||||||
|
Message Headers, message, Message Manual}.
|
||||||
|
|
||||||
|
@item You can now store signature files in a special directory
|
||||||
|
named @code{message-signature-directory}.
|
||||||
|
|
||||||
|
@item The option @code{message-citation-line-format} controls the format
|
||||||
|
of the "Whomever writes:" line. You need to set
|
||||||
|
@code{message-citation-line-function} to
|
||||||
|
@code{message-insert-formatted-citation-line} as well.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item Changes in back ends
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item The nntp back end stores article marks in @file{~/News/marks}.
|
||||||
|
|
||||||
|
The directory can be changed using the (customizable) variable
|
||||||
|
@code{nntp-marks-directory}, and marks can be disabled using the
|
||||||
|
(back end) variable @code{nntp-marks-is-evil}. The advantage of this
|
||||||
|
is that you can copy @file{~/News/marks} (using rsync, scp or
|
||||||
|
whatever) to another Gnus installation, and it will realize what
|
||||||
|
articles you have read and marked. The data in @file{~/News/marks}
|
||||||
|
has priority over the same data in @file{~/.newsrc.eld}.
|
||||||
|
|
||||||
|
@item
|
||||||
|
You can import and export your @acronym{RSS} subscriptions from
|
||||||
|
@acronym{OPML} files. @xref{RSS}.
|
||||||
|
|
||||||
|
@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported.
|
||||||
|
|
||||||
|
By default, Gnus does not send any information about itself, but you can
|
||||||
|
customize it using the variable @code{nnimap-id}.
|
||||||
|
|
||||||
|
@item The @code{nnrss} back end now supports multilingual text.
|
||||||
|
Non-@acronym{ASCII} group names for the @code{nnrss} groups are also
|
||||||
|
supported. @xref{RSS}.
|
||||||
|
|
||||||
|
@item Retrieving mail with @acronym{POP3} is supported over @acronym{SSL}/@acronym{TLS} and with StartTLS.
|
||||||
|
|
||||||
|
@item The nnml back end allows other compression programs beside @file{gzip}
|
||||||
|
for compressed message files. @xref{Mail Spool}.
|
||||||
|
|
||||||
|
@item The nnml back end supports group compaction.
|
||||||
|
|
||||||
|
This feature, accessible via the functions
|
||||||
|
@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and
|
||||||
|
@code{gnus-server-compact-server} (@kbd{z} in the server buffer)
|
||||||
|
renumbers all articles in a group, starting from 1 and removing gaps.
|
||||||
|
As a consequence, you get a correct total article count (until
|
||||||
|
messages are deleted again).
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item Appearance
|
||||||
|
@c Maybe it's not worth to separate this from "Miscellaneous"?
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
|
||||||
|
@item The tool bar has been updated to use GNOME icons.
|
||||||
|
You can also customize the tool bar. There's no documentation in the
|
||||||
|
manual yet, but @kbd{M-x customize-apropos RET -tool-bar$} should get
|
||||||
|
you started. (Only for Emacs, not in XEmacs.)
|
||||||
|
@c FIXME: Document this in the manual
|
||||||
|
|
||||||
|
@item The tool bar icons are now (de)activated correctly
|
||||||
|
in the group buffer, see the variable @code{gnus-group-update-tool-bar}.
|
||||||
|
Its default value depends on your Emacs version.
|
||||||
|
@c FIXME: Document this in the manual
|
||||||
|
|
||||||
|
@item You can change the location of XEmacs' toolbars in Gnus buffers.
|
||||||
|
See @code{gnus-use-toolbar} and @code{message-use-toolbar}.
|
||||||
|
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@item Miscellaneous changes
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item Having edited the select-method for the foreign server in the
|
||||||
|
server buffer is immediately reflected to the subscription of the groups
|
||||||
|
which use the server in question. For instance, if you change
|
||||||
|
@code{nntp-via-address} into @samp{bar.example.com} from
|
||||||
|
@samp{foo.example.com}, Gnus will connect to the news host by way of the
|
||||||
|
intermediate host @samp{bar.example.com} from next time.
|
||||||
|
|
||||||
|
@item The @file{all.SCORE} file can be edited from the group buffer
|
||||||
|
using @kbd{W e}.
|
||||||
|
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@c gnus-news.texi ends here.
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
arch-tag: 872c7569-4340-4d73-9d1d-7826d9f94a51
|
||||||
|
@end ignore
|
1518
doc/misc/gnus.texi
1518
doc/misc/gnus.texi
File diff suppressed because it is too large
Load diff
|
@ -42,7 +42,8 @@ INFO_TARGETS = $(infodir)/ccmode \
|
||||||
$(infodir)/woman $(infodir)/eshell $(infodir)/org \
|
$(infodir)/woman $(infodir)/eshell $(infodir)/org \
|
||||||
$(infodir)/url $(infodir)/speedbar $(infodir)/tramp \
|
$(infodir)/url $(infodir)/speedbar $(infodir)/tramp \
|
||||||
$(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \
|
$(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \
|
||||||
$(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc
|
$(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc \
|
||||||
|
$(infodir)/remember
|
||||||
DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
|
DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
|
||||||
ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \
|
ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \
|
||||||
gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \
|
gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \
|
||||||
|
@ -50,7 +51,7 @@ DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
|
||||||
ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \
|
ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \
|
||||||
pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \
|
pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \
|
||||||
speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \
|
speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \
|
||||||
newsticker.dvi rcirc.dvi erc.dvi
|
newsticker.dvi rcirc.dvi erc.dvi remember.dvi
|
||||||
INFOSOURCES = info.texi
|
INFOSOURCES = info.texi
|
||||||
|
|
||||||
# The following rule does not work with all versions of `make'.
|
# The following rule does not work with all versions of `make'.
|
||||||
|
@ -172,6 +173,11 @@ $(infodir)/reftex: reftex.texi
|
||||||
reftex.dvi: reftex.texi
|
reftex.dvi: reftex.texi
|
||||||
$(ENVADD) $(TEXI2DVI) $(srcdir)/reftex.texi
|
$(ENVADD) $(TEXI2DVI) $(srcdir)/reftex.texi
|
||||||
|
|
||||||
|
$(infodir)/remember: remember.texi
|
||||||
|
$(MAKEINFO) remember.texi
|
||||||
|
remember.dvi: remember.texi
|
||||||
|
$(ENVADD) $(TEXI2DVI) $(srcdir)/remember.texi
|
||||||
|
|
||||||
$(infodir)/sc: sc.texi
|
$(infodir)/sc: sc.texi
|
||||||
$(MAKEINFO) sc.texi
|
$(MAKEINFO) sc.texi
|
||||||
sc.dvi: sc.texi
|
sc.dvi: sc.texi
|
||||||
|
@ -297,7 +303,8 @@ clean: mostlyclean
|
||||||
$(infodir)/url* $(infodir)/org* \
|
$(infodir)/url* $(infodir)/org* \
|
||||||
$(infodir)/flymake* $(infodir)/newsticker* \
|
$(infodir)/flymake* $(infodir)/newsticker* \
|
||||||
$(infodir)/sieve* $(infodir)/pgg* \
|
$(infodir)/sieve* $(infodir)/pgg* \
|
||||||
$(infodir)/erc* $(infodir)/rcirc*
|
$(infodir)/erc* $(infodir)/rcirc* \
|
||||||
|
$(infodir)/remember*
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
|
|
||||||
|
|
|
@ -71,14 +71,14 @@ Message mode buffers.
|
||||||
@c Adjust ../Makefile.in if you change the following lines:
|
@c Adjust ../Makefile.in if you change the following lines:
|
||||||
Message is distributed with Gnus. The Gnus distribution
|
Message is distributed with Gnus. The Gnus distribution
|
||||||
@c
|
@c
|
||||||
corresponding to this manual is Gnus v5.11.
|
corresponding to this manual is Gnus v5.13
|
||||||
|
|
||||||
|
|
||||||
@node Interface
|
@node Interface
|
||||||
@chapter Interface
|
@chapter Interface
|
||||||
|
|
||||||
When a program (or a person) wants to respond to a message -- reply,
|
When a program (or a person) wants to respond to a message---reply,
|
||||||
follow up, forward, cancel -- the program (or person) should just put
|
follow up, forward, cancel---the program (or person) should just put
|
||||||
point in the buffer where the message is and call the required command.
|
point in the buffer where the message is and call the required command.
|
||||||
@code{Message} will then pop up a new @code{message} mode buffer with
|
@code{Message} will then pop up a new @code{message} mode buffer with
|
||||||
appropriate headers filled out, and the user can edit the message before
|
appropriate headers filled out, and the user can edit the message before
|
||||||
|
@ -179,7 +179,8 @@ but you can change the behavior to suit your needs by fiddling with the
|
||||||
|
|
||||||
@vindex message-dont-reply-to-names
|
@vindex message-dont-reply-to-names
|
||||||
Addresses that match the @code{message-dont-reply-to-names} regular
|
Addresses that match the @code{message-dont-reply-to-names} regular
|
||||||
expression will be removed from the @code{Cc} header.
|
expression (or list of regular expressions) will be removed from the
|
||||||
|
@code{Cc} header. A value of @code{nil} means exclude your name only.
|
||||||
|
|
||||||
@vindex message-wide-reply-confirm-recipients
|
@vindex message-wide-reply-confirm-recipients
|
||||||
If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
|
If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
|
||||||
|
@ -257,7 +258,7 @@ removed before popping up the new message buffer. The default is@*
|
||||||
^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
|
^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
|
||||||
Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
|
Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
|
||||||
^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
|
^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
|
||||||
^X-Payment:}.
|
^X-Payment:\\|^Approved:}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -797,14 +798,18 @@ Insert the message headers (@code{message-insert-headers}).
|
||||||
@item C-c M-m
|
@item C-c M-m
|
||||||
@kindex C-c M-m
|
@kindex C-c M-m
|
||||||
@findex message-mark-inserted-region
|
@findex message-mark-inserted-region
|
||||||
Mark some region in the current article with enclosing tags.
|
Mark some region in the current article with enclosing tags. See
|
||||||
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
|
@code{message-mark-insert-begin} and @code{message-mark-insert-end}.
|
||||||
|
When called with a prefix argument, use slrn style verbatim marks
|
||||||
|
(@samp{#v+} and @samp{#v-}).
|
||||||
|
|
||||||
@item C-c M-f
|
@item C-c M-f
|
||||||
@kindex C-c M-f
|
@kindex C-c M-f
|
||||||
@findex message-mark-insert-file
|
@findex message-mark-insert-file
|
||||||
Insert a file in the current article with enclosing tags.
|
Insert a file in the current article with enclosing tags.
|
||||||
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
|
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
|
||||||
|
When called with a prefix argument, use slrn style verbatim marks
|
||||||
|
(@samp{#v+} and @samp{#v-}).
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@ -1159,6 +1164,11 @@ The text is killed and replaced with the contents of the variable
|
||||||
@code{message-elide-ellipsis}. The default value is to use an ellipsis
|
@code{message-elide-ellipsis}. The default value is to use an ellipsis
|
||||||
(@samp{[...]}).
|
(@samp{[...]}).
|
||||||
|
|
||||||
|
@item C-c M-k
|
||||||
|
@kindex C-c M-k
|
||||||
|
@findex message-kill-address
|
||||||
|
Kill the address under point.
|
||||||
|
|
||||||
@item C-c C-z
|
@item C-c C-z
|
||||||
@kindex C-c C-z
|
@kindex C-c C-z
|
||||||
@findex message-kill-to-signature
|
@findex message-kill-to-signature
|
||||||
|
@ -1244,11 +1254,13 @@ Kill the message buffer and exit (@code{message-kill-buffer}).
|
||||||
@section Mail Aliases
|
@section Mail Aliases
|
||||||
@cindex mail aliases
|
@cindex mail aliases
|
||||||
@cindex aliases
|
@cindex aliases
|
||||||
|
@cindex completion
|
||||||
|
@cindex ecomplete
|
||||||
|
|
||||||
@vindex message-mail-alias-type
|
@vindex message-mail-alias-type
|
||||||
The @code{message-mail-alias-type} variable controls what type of mail
|
The @code{message-mail-alias-type} variable controls what type of mail
|
||||||
alias expansion to use. Currently only one form is supported---Message
|
alias expansion to use. Currently two forms are supported:
|
||||||
uses @code{mailabbrev} to handle mail aliases. If this variable is
|
@code{mailabbrev} and @code{ecomplete}. If this variable is
|
||||||
@code{nil}, no mail alias expansion will be performed.
|
@code{nil}, no mail alias expansion will be performed.
|
||||||
|
|
||||||
@code{mailabbrev} works by parsing the @file{/etc/mailrc} and
|
@code{mailabbrev} works by parsing the @file{/etc/mailrc} and
|
||||||
|
@ -1266,6 +1278,14 @@ on) headers and press @kbd{SPC} to expand the alias.
|
||||||
No expansion will be performed upon sending of the message---all
|
No expansion will be performed upon sending of the message---all
|
||||||
expansions have to be done explicitly.
|
expansions have to be done explicitly.
|
||||||
|
|
||||||
|
If you're using @code{ecomplete}, all addresses from @code{To} and
|
||||||
|
@code{Cc} headers will automatically be put into the
|
||||||
|
@file{~/.ecompleterc} file. When you enter text in the @code{To} and
|
||||||
|
@code{Cc} headers, @code{ecomplete} will check out the values stored
|
||||||
|
there and ``electrically'' say what completions are possible. To
|
||||||
|
choose one of these completions, use the @kbd{M-n} command to move
|
||||||
|
down to the list. Use @kbd{M-n} and @kbd{M-p} to move down and up the
|
||||||
|
list, and @kbd{RET} to choose a completion.
|
||||||
|
|
||||||
@node Spelling
|
@node Spelling
|
||||||
@section Spelling
|
@section Spelling
|
||||||
|
@ -1334,7 +1354,7 @@ installed.
|
||||||
@section Message Headers
|
@section Message Headers
|
||||||
|
|
||||||
Message is quite aggressive on the message generation front. It has to
|
Message is quite aggressive on the message generation front. It has to
|
||||||
be -- it's a combined news and mail agent. To be able to send combined
|
be---it's a combined news and mail agent. To be able to send combined
|
||||||
messages, it has to generate all headers itself (instead of letting the
|
messages, it has to generate all headers itself (instead of letting the
|
||||||
mail/news system do it) to ensure that mail and news copies of messages
|
mail/news system do it) to ensure that mail and news copies of messages
|
||||||
look sufficiently similar.
|
look sufficiently similar.
|
||||||
|
@ -1373,7 +1393,7 @@ values:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@item nil
|
@item nil
|
||||||
Just the address -- @samp{king@@grassland.com}.
|
Just the address---@samp{king@@grassland.com}.
|
||||||
|
|
||||||
@item parens
|
@item parens
|
||||||
@samp{king@@grassland.com (Elvis Parsley)}.
|
@samp{king@@grassland.com (Elvis Parsley)}.
|
||||||
|
@ -1494,6 +1514,9 @@ hidden when composing a message.
|
||||||
'(not "From" "Subject" "To" "Cc" "Newsgroups"))
|
'(not "From" "Subject" "To" "Cc" "Newsgroups"))
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
|
Headers are hidden using narrowing, you can use @kbd{M-x widen} to
|
||||||
|
expose them in the buffer.
|
||||||
|
|
||||||
@item message-header-synonyms
|
@item message-header-synonyms
|
||||||
@vindex message-header-synonyms
|
@vindex message-header-synonyms
|
||||||
A list of lists of header synonyms. E.g., if this list contains a
|
A list of lists of header synonyms. E.g., if this list contains a
|
||||||
|
@ -1525,6 +1548,13 @@ Regexp of headers to be removed before mailing. The default is@*
|
||||||
This string is inserted at the end of the headers in all message
|
This string is inserted at the end of the headers in all message
|
||||||
buffers that are initialized as mail.
|
buffers that are initialized as mail.
|
||||||
|
|
||||||
|
@item message-generate-hashcash
|
||||||
|
@vindex message-generate-hashcash
|
||||||
|
Variable that indicates whether @samp{X-Hashcash} headers
|
||||||
|
should be computed for the message. @xref{Hashcash, ,Hashcash,gnus,
|
||||||
|
The Gnus Manual}. If @code{opportunistic}, only generate the headers
|
||||||
|
when it doesn't lead to the user having to wait.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
|
@ -1541,10 +1571,10 @@ buffers that are initialized as mail.
|
||||||
@findex smtpmail-send-it
|
@findex smtpmail-send-it
|
||||||
@findex feedmail-send-it
|
@findex feedmail-send-it
|
||||||
Function used to send the current buffer as mail. The default is
|
Function used to send the current buffer as mail. The default is
|
||||||
@code{message-send-mail-with-sendmail}. Other valid values include
|
@code{message-send-mail-with-sendmail}, or @code{smtpmail-send-it}
|
||||||
|
according to the system. Other valid values include
|
||||||
@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
|
@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
|
||||||
@code{message-smtpmail-send-it}, @code{smtpmail-send-it} and
|
@code{message-smtpmail-send-it} and @code{feedmail-send-it}.
|
||||||
@code{feedmail-send-it}.
|
|
||||||
|
|
||||||
@item message-mh-deletable-headers
|
@item message-mh-deletable-headers
|
||||||
@vindex message-mh-deletable-headers
|
@vindex message-mh-deletable-headers
|
||||||
|
@ -1859,6 +1889,9 @@ that look like:
|
||||||
Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
|
Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@c FIXME: Add `message-insert-formated-citation-line' and
|
||||||
|
@c `message-citation-line-format'
|
||||||
|
|
||||||
Point will be at the beginning of the body of the message when this
|
Point will be at the beginning of the body of the message when this
|
||||||
function is called.
|
function is called.
|
||||||
|
|
||||||
|
@ -1873,21 +1906,29 @@ Article Highlighting, gnus, The Gnus Manual}, for details.
|
||||||
@cindex yanking
|
@cindex yanking
|
||||||
@cindex quoting
|
@cindex quoting
|
||||||
When you are replying to or following up an article, you normally want
|
When you are replying to or following up an article, you normally want
|
||||||
to quote the person you are answering. Inserting quoted text is done
|
to quote the person you are answering. Inserting quoted text is done by
|
||||||
by @dfn{yanking}, and each line you yank will have
|
@dfn{yanking}, and each line you yank will have
|
||||||
@code{message-yank-prefix} prepended to it (except for quoted and
|
@code{message-yank-prefix} prepended to it (except for quoted lines
|
||||||
empty lines which uses @code{message-yank-cited-prefix}). The default
|
which use @code{message-yank-cited-prefix} and empty lines which use
|
||||||
is @samp{> }.
|
@code{message-yank-empty-prefix}). The default is @samp{> }.
|
||||||
|
|
||||||
@item message-yank-cited-prefix
|
@item message-yank-cited-prefix
|
||||||
@vindex message-yank-cited-prefix
|
@vindex message-yank-cited-prefix
|
||||||
@cindex yanking
|
@cindex yanking
|
||||||
@cindex cited
|
@cindex cited
|
||||||
@cindex quoting
|
@cindex quoting
|
||||||
When yanking text from an article which contains no text or already
|
When yanking text from an article which contains already cited text,
|
||||||
cited text, each line will be prefixed with the contents of this
|
each line will be prefixed with the contents of this variable. The
|
||||||
variable. The default is @samp{>}. See also
|
default is @samp{>}. See also @code{message-yank-prefix}.
|
||||||
@code{message-yank-prefix}.
|
|
||||||
|
@item message-yank-empty-prefix
|
||||||
|
@vindex message-yank-empty-prefix
|
||||||
|
@cindex yanking
|
||||||
|
@cindex quoting
|
||||||
|
When yanking text from an article, each empty line will be prefixed with
|
||||||
|
the contents of this variable. The default is @samp{>}. You can set
|
||||||
|
this variable to an empty string to split the cited text into paragraphs
|
||||||
|
automatically. See also @code{message-yank-prefix}.
|
||||||
|
|
||||||
@item message-indentation-spaces
|
@item message-indentation-spaces
|
||||||
@vindex message-indentation-spaces
|
@vindex message-indentation-spaces
|
||||||
|
@ -1932,8 +1973,18 @@ If this variable is @code{nil}, no signature will be inserted at all.
|
||||||
@item message-signature-file
|
@item message-signature-file
|
||||||
@vindex message-signature-file
|
@vindex message-signature-file
|
||||||
File containing the signature to be inserted at the end of the buffer.
|
File containing the signature to be inserted at the end of the buffer.
|
||||||
|
If a path is specified, the value of
|
||||||
|
@code{message-signature-directory} is ignored, even if set.
|
||||||
The default is @file{~/.signature}.
|
The default is @file{~/.signature}.
|
||||||
|
|
||||||
|
@item message-signature-directory
|
||||||
|
@vindex message-signature-directory
|
||||||
|
Name of directory containing signature files. Comes in handy if you
|
||||||
|
have many such files, handled via Gnus posting styles for instance.
|
||||||
|
If @code{nil} (the default), @code{message-signature-file} is expected
|
||||||
|
to specify the directory if needed.
|
||||||
|
|
||||||
|
|
||||||
@item message-signature-insert-empty-line
|
@item message-signature-insert-empty-line
|
||||||
@vindex message-signature-insert-empty-line
|
@vindex message-signature-insert-empty-line
|
||||||
If @code{t} (the default value) an empty line is inserted before the
|
If @code{t} (the default value) an empty line is inserted before the
|
||||||
|
@ -1968,6 +2019,13 @@ Emacsen.) @xref{Charset Translation, , Charset Translation, emacs-mime,
|
||||||
Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
|
Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
|
||||||
translation process.
|
translation process.
|
||||||
|
|
||||||
|
@item message-fill-column
|
||||||
|
@vindex message-fill-column
|
||||||
|
@cindex auto-fill
|
||||||
|
Local value for the column beyond which automatic line-wrapping should
|
||||||
|
happen for message buffers. If non-nil (the default), also turn on
|
||||||
|
auto-fill in message buffers.
|
||||||
|
|
||||||
@item message-signature-separator
|
@item message-signature-separator
|
||||||
@vindex message-signature-separator
|
@vindex message-signature-separator
|
||||||
Regexp matching the signature separator. It is @samp{^-- *$} by
|
Regexp matching the signature separator. It is @samp{^-- *$} by
|
||||||
|
@ -2057,6 +2115,12 @@ Hook run when canceling news articles.
|
||||||
@vindex message-mode-syntax-table
|
@vindex message-mode-syntax-table
|
||||||
Syntax table used in message mode buffers.
|
Syntax table used in message mode buffers.
|
||||||
|
|
||||||
|
@item message-cite-articles-with-x-no-archive
|
||||||
|
@vindex message-cite-articles-with-x-no-archive
|
||||||
|
If non-@code{nil}, don't strip quoted text from articles that have
|
||||||
|
@samp{X-No-Archive} set. Even if this variable isn't set, you can
|
||||||
|
undo the stripping by hitting the @code{undo} keystroke.
|
||||||
|
|
||||||
@item message-strip-special-text-properties
|
@item message-strip-special-text-properties
|
||||||
@vindex message-strip-special-text-properties
|
@vindex message-strip-special-text-properties
|
||||||
Emacs has a number of special text properties which can break message
|
Emacs has a number of special text properties which can break message
|
||||||
|
@ -2089,7 +2153,7 @@ the buffer where the message is.
|
||||||
|
|
||||||
@item function
|
@item function
|
||||||
A function to be called if @var{predicate} returns non-@code{nil}.
|
A function to be called if @var{predicate} returns non-@code{nil}.
|
||||||
@var{function} is called with one parameter -- the prefix.
|
@var{function} is called with one parameter---the prefix.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
The default is:
|
The default is:
|
||||||
|
|
|
@ -345,11 +345,11 @@ singleton object wrapped with the luna object system.
|
||||||
Since PGG was designed for accessing and developing PGP functionality,
|
Since PGG was designed for accessing and developing PGP functionality,
|
||||||
the architecture had to be designed not just for interoperability but
|
the architecture had to be designed not just for interoperability but
|
||||||
also for extensiblity. In this chapter we explore the architecture
|
also for extensiblity. In this chapter we explore the architecture
|
||||||
while finding out how to write the PGG backend.
|
while finding out how to write the PGG back end.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Initializing::
|
* Initializing::
|
||||||
* Backend methods::
|
* Back end methods::
|
||||||
* Getting output::
|
* Getting output::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
@ -373,12 +373,12 @@ variable @code{pgg-scheme-gpg-instance} and will be reused from now on.
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
The name of the function must follow the
|
The name of the function must follow the
|
||||||
regulation---@code{pgg-make-scheme-} follows the backend name.
|
regulation---@code{pgg-make-scheme-} follows the back end name.
|
||||||
|
|
||||||
@node Backend methods
|
@node Back end methods
|
||||||
@section Backend methods
|
@section Back end methods
|
||||||
|
|
||||||
In each backend, these methods must be present. The output of these
|
In each back end, these methods must be present. The output of these
|
||||||
methods is stored in special buffers (@ref{Getting output}), so that
|
methods is stored in special buffers (@ref{Getting output}), so that
|
||||||
these methods must tell the status of the execution.
|
these methods must tell the status of the execution.
|
||||||
|
|
||||||
|
@ -435,7 +435,7 @@ On success, it returns @code{t}, otherwise @code{nil}.
|
||||||
@node Getting output
|
@node Getting output
|
||||||
@section Getting output
|
@section Getting output
|
||||||
|
|
||||||
The output of the backend methods (@ref{Backend methods}) is stored in
|
The output of the back end methods (@ref{Back end methods}) is stored in
|
||||||
special buffers, so that these methods must tell the status of the
|
special buffers, so that these methods must tell the status of the
|
||||||
execution.
|
execution.
|
||||||
|
|
||||||
|
|
406
doc/misc/remember.texi
Normal file
406
doc/misc/remember.texi
Normal file
|
@ -0,0 +1,406 @@
|
||||||
|
\input texinfo @c -*-texinfo-*-
|
||||||
|
@c %**start of header
|
||||||
|
@setfilename ../../info/remember
|
||||||
|
@settitle Remember Manual
|
||||||
|
@c %**end of header
|
||||||
|
|
||||||
|
@dircategory Emacs
|
||||||
|
@direntry
|
||||||
|
* Remember: (remember). Simple information manager for Emacs
|
||||||
|
@end direntry
|
||||||
|
|
||||||
|
@syncodeindex fn cp
|
||||||
|
|
||||||
|
@copying
|
||||||
|
This manual is for Remember Mode, version 1.9
|
||||||
|
|
||||||
|
Copyright @copyright{} 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
@quotation
|
||||||
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
|
under the terms of the GNU Free Documentation License, Version 1.2
|
||||||
|
or any later version published by the Free Software Foundation;
|
||||||
|
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||||
|
Texts. A copy of the license is included in the section entitled ``GNU
|
||||||
|
Free Documentation License''.
|
||||||
|
@end quotation
|
||||||
|
@end copying
|
||||||
|
|
||||||
|
@titlepage
|
||||||
|
@title Guide to Remember Mode
|
||||||
|
@subtitle a simple information manager
|
||||||
|
@subtitle for Emacs and XEmacs
|
||||||
|
|
||||||
|
@c The following two commands
|
||||||
|
@c start the copyright page.
|
||||||
|
@page
|
||||||
|
@vskip 0pt plus 1filll
|
||||||
|
@insertcopying
|
||||||
|
@end titlepage
|
||||||
|
|
||||||
|
@c So the toc is printed at the start
|
||||||
|
@contents
|
||||||
|
|
||||||
|
@ifnottex
|
||||||
|
@node Top, Preface, (dir), (dir)
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@top Remember
|
||||||
|
|
||||||
|
@insertcopying
|
||||||
|
@end ifnottex
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Preface:: About the documentation.
|
||||||
|
* Introduction:: What is Remember Mode?
|
||||||
|
* Installation:: How to install Remember.
|
||||||
|
* Implementation:: How Remember came into existence.
|
||||||
|
* Quick Start:: Get started using Remember.
|
||||||
|
* Function Reference:: Interactive functions in remember.el.
|
||||||
|
* Keystrokes:: Keystrokes bound in Remember Mode.
|
||||||
|
* Backends:: Backends for saving notes.
|
||||||
|
* GNU Free Documentation License:: The license for this documentation.
|
||||||
|
* Concept Index:: Search for terms.
|
||||||
|
|
||||||
|
@detailmenu
|
||||||
|
--- The Detailed Node Listing ---
|
||||||
|
|
||||||
|
Backends
|
||||||
|
|
||||||
|
* Text File:: Saving to a text file.
|
||||||
|
* Diary:: Saving to a Diary file.
|
||||||
|
* Mailbox:: Saving to a mailbox.
|
||||||
|
* Org:: Saving to an Org Mode file.
|
||||||
|
|
||||||
|
@end detailmenu
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Preface, Introduction, Top, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Preface
|
||||||
|
|
||||||
|
This document describes remember-el, which was written by John Wiegley,
|
||||||
|
was once maintained by Sacha Chua, and is now maintained by the Emacs
|
||||||
|
developers.
|
||||||
|
|
||||||
|
This document is a work in progress, and your contribution will be
|
||||||
|
greatly appreciated.
|
||||||
|
|
||||||
|
@node Introduction, Installation, Preface, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Introduction
|
||||||
|
|
||||||
|
Todo lists, schedules, phone databases... everything we use databases
|
||||||
|
for is really just a way to extend the power of our memory, to be able
|
||||||
|
to remember what our conscious mind may not currently have access to.
|
||||||
|
|
||||||
|
There are many different databases out there---and good ones---which
|
||||||
|
this mode is not trying to replace. Rather, it's how that data gets
|
||||||
|
there that's the question. Most of the time, we just want to say
|
||||||
|
"Remember so-and-so's phone number, or that I have to buy dinner for the
|
||||||
|
cats tonight." That's the FACT. How it's stored is really the
|
||||||
|
computer's problem. But at this point in time, it's most definitely
|
||||||
|
also the user's problem, and sometimes so laboriously so that people
|
||||||
|
just let data slip, rather than expend the effort to record it.
|
||||||
|
|
||||||
|
``Remember'' is a mode for remembering data. It uses whatever
|
||||||
|
back-end is appropriate to record and correlate the data, but its main
|
||||||
|
intention is to allow you to express as @emph{little} structure as
|
||||||
|
possible up front. If you later want to express more powerful
|
||||||
|
relationships between your data, or state assumptions that were at
|
||||||
|
first too implicit to be recognized, you can ``study'' the data later
|
||||||
|
and rearrange it. But the initial ``just remember this'' impulse
|
||||||
|
should be as close to simply throwing the data at Emacs as possible.
|
||||||
|
|
||||||
|
Have you ever noticed that having a laptop to write on doesn't
|
||||||
|
@emph{actually} increase the amount of quality material that you turn
|
||||||
|
out, in the long run? Perhaps it's because the time we save
|
||||||
|
electronically in one way, we're losing electronically in another; the
|
||||||
|
tool should never dominate one's focus. As the mystic Faridu'd-Din
|
||||||
|
`Attar wrote: ``Be occupied as little as possible with things of the
|
||||||
|
outer world but much with things of the inner world; then right action
|
||||||
|
will overcome inaction.''
|
||||||
|
|
||||||
|
If Emacs could become a more intelligent data store, where brainstorming
|
||||||
|
would focus on the @emph{ideas} involved---rather than the structuring
|
||||||
|
and format of those ideas, or having to stop your current flow of work
|
||||||
|
in order to record them---it would map much more closely to how the mind
|
||||||
|
(well, at least mine) works, and hence would eliminate that very
|
||||||
|
manual-ness which computers from the very beginning have been championed
|
||||||
|
as being able to reduce.
|
||||||
|
|
||||||
|
@node Installation, Implementation, Introduction, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Installation
|
||||||
|
|
||||||
|
Installing Remember Mode is as simple as adding the following lines to
|
||||||
|
your Emacs configuration file (usually @file{~/.emacs.d/init.el} or
|
||||||
|
@file{~/.emacs}).
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(add-to-list 'load-path "/path/to/remember")
|
||||||
|
(require 'remember)
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@node Implementation, Quick Start, Installation, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Implementation
|
||||||
|
|
||||||
|
Hyperbole, as a data presentation tool, always struck me as being very
|
||||||
|
powerful, but it seemed to require a lot of ``front-end'' work before
|
||||||
|
that data was really available. The problem with BBDB, or keeping up
|
||||||
|
a Bibl-mode file, is that you have to use different functions to
|
||||||
|
record the data, and it always takes time to stop what you're doing,
|
||||||
|
format the data in the manner expected by that particular data
|
||||||
|
interface, and then resume your work.
|
||||||
|
|
||||||
|
With ``remember'', you just hit @kbd{M-x remember} (you'd probably
|
||||||
|
want to bind this to an easily accessible keystroke, like @kbd{C-x
|
||||||
|
M-r}), slam in your text however you like, and then hit @kbd{C-c C-c}.
|
||||||
|
It will file the data away for later retrieval, and possibly indexing.
|
||||||
|
|
||||||
|
Indexing is to data what ``studying'' is in the real world. What you do
|
||||||
|
when you study (or lucubrate, for some of us) is to realize certain
|
||||||
|
relationships implicit in the data, so that you can make use of those
|
||||||
|
relationships. Expressing that a certain quote you remembered was a
|
||||||
|
literary quote, and that you want the ability to pull up all quotes of a
|
||||||
|
literary nature, is what studying does. This is a more labor intensive
|
||||||
|
task than the original remembering of the data, and it's typical in real
|
||||||
|
life to set aside a special period of time for doing this work.
|
||||||
|
|
||||||
|
``Remember'' works in the same way. When you enter data, either by
|
||||||
|
typing it into a buffer, or using the contents of the selected region,
|
||||||
|
it will store that data---unindexed, uninterpreted---in a data pool.
|
||||||
|
It will also try to remember as much context information as possible
|
||||||
|
(any text properties that were set, where you copied it from, when,
|
||||||
|
how, etc). Later, you can walk through your accumulated set of data
|
||||||
|
(both organized, and unorganized) and easily begin moving things
|
||||||
|
around, and making annotations that will express the full meaning of
|
||||||
|
that data, as far as you know it.
|
||||||
|
|
||||||
|
Obviously this latter stage is more user-interface intensive, and it
|
||||||
|
would be nice if ``remember'' could do it as elegantly as possible,
|
||||||
|
rather than requiring a billion keystrokes to reorganize your
|
||||||
|
hierarchy. Well, as the future arrives, hopefully experience and user
|
||||||
|
feedback will help to make this as intuitive a tool as possible.
|
||||||
|
|
||||||
|
@node Quick Start, Function Reference, Implementation, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Quick Start
|
||||||
|
|
||||||
|
@itemize
|
||||||
|
|
||||||
|
@item
|
||||||
|
Load @file{remember.el}.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Type @kbd{M-x remember}. The @samp{*Remember*} buffer should be
|
||||||
|
displayed.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Type in what you want to remember. The first line will be treated as
|
||||||
|
the headline, and the rest of the buffer will contain the body of the
|
||||||
|
note.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Type @kbd{C-c C-c} (@code{remember-finalize}) to save the note and close
|
||||||
|
the @samp{*Remember*} buffer.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
By default, @code{remember-finalize} saves the note in @file{~/.notes}.
|
||||||
|
You can edit it now to see the remembered and timestamped note. You
|
||||||
|
can edit this file however you want. New entries will always be added
|
||||||
|
to the end.
|
||||||
|
|
||||||
|
To remember a region of text, use the universal prefix. @kbd{C-u M-x
|
||||||
|
remember} displays a @samp{*Remember*} buffer with the region as the
|
||||||
|
initial contents.
|
||||||
|
|
||||||
|
As a simple beginning, you can start by using the Text File backend,
|
||||||
|
keeping your @file{~/.notes} file in outline-mode format, with a final
|
||||||
|
entry called @samp{* Raw data}. Remembered data will be added to the
|
||||||
|
end of the file. Every so often, you can move the data that gets
|
||||||
|
appended there into other files, or reorganize your document.
|
||||||
|
|
||||||
|
You can also store remembered data in other backends.
|
||||||
|
(@pxref{Backends})
|
||||||
|
|
||||||
|
Here is one way to map the remember functions in your @file{.emacs} to
|
||||||
|
very accessible keystrokes facilities using the mode:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(autoload 'remember ``remember'' nil t)
|
||||||
|
(autoload 'remember-region ``remember'' nil t)
|
||||||
|
|
||||||
|
(define-key global-map (kbd "<f9> r") 'remember)
|
||||||
|
(define-key global-map (kbd "<f9> R") 'remember-region)
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
By default, remember uses the first annotation returned by
|
||||||
|
@code{remember-annotation-functions}. To include all of the annotations,
|
||||||
|
set @code{remember-run-all-annotation-functions-flag} to non-nil.
|
||||||
|
|
||||||
|
@defopt remember-run-all-annotation-functions-flag
|
||||||
|
Non-nil means use all annotations returned by
|
||||||
|
@code{remember-annotation-functions}.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
You can write custom functions that use a different set of
|
||||||
|
remember-annotation-functions. For example:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(defun my/remember-with-filename ()
|
||||||
|
"Always use the filename."
|
||||||
|
(interactive)
|
||||||
|
(let ((remember-annotation-functions '(buffer-file-name)))
|
||||||
|
(call-interactively 'remember)))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@node Function Reference, Keystrokes, Quick Start, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Function Reference
|
||||||
|
|
||||||
|
@file{remember.el} defines the following interactive functions:
|
||||||
|
|
||||||
|
@defun remember initial
|
||||||
|
Remember an arbitrary piece of data. With a prefix, it will use the
|
||||||
|
region as @var{initial}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun remember-region beg end
|
||||||
|
If called from within the remember buffer, @var{beg} and @var{end} are
|
||||||
|
ignored, and the entire buffer will be remembered. If called from any
|
||||||
|
other buffer, that region, plus any context information specific to
|
||||||
|
that region, will be remembered.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun remember-clipboard
|
||||||
|
Remember the contents of the current clipboard. This is most useful
|
||||||
|
for remembering things from Netscape or other X Windows applications.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun remember-finalize
|
||||||
|
Remember the contents of the current buffer.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun remember-mode
|
||||||
|
This enters the major mode for output from @command{remember}. This
|
||||||
|
buffer is used to collect data that you want remember. Just hit
|
||||||
|
@kbd{C-c C-c} when you're done entering, and it will go ahead and file
|
||||||
|
the data for latter retrieval, and possible indexing.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@node Keystrokes, Backends, Function Reference, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Keystroke Reference
|
||||||
|
|
||||||
|
@file{remember.el} defines the following keybindings by default:
|
||||||
|
|
||||||
|
@table @kbd
|
||||||
|
|
||||||
|
@item C-c C-c (`remember-finalize')
|
||||||
|
Remember the contents of the current buffer.
|
||||||
|
|
||||||
|
@item C-c C-k (`remember-destroy')
|
||||||
|
Destroy the current *Remember* buffer.
|
||||||
|
|
||||||
|
@item C-x C-s (`remember-finalize')
|
||||||
|
Remember the contents of the current buffer.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@node Backends, GNU Free Documentation License, Keystrokes, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@chapter Backends
|
||||||
|
|
||||||
|
You can save remembered notes to a variety of backends.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Text File:: Saving to a text file.
|
||||||
|
* Diary:: Saving to a Diary file.
|
||||||
|
* Mailbox:: Saving to a mailbox.
|
||||||
|
* Org:: Saving to an Org Mode file.
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Text File, Diary, Backends, Backends
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@section Saving to a Text File
|
||||||
|
@cindex text file, saving to
|
||||||
|
|
||||||
|
@subheading Insinuation
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(setq remember-handler-functions '(remember-append-to-file))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@subheading Options
|
||||||
|
|
||||||
|
@defopt remember-data-file
|
||||||
|
The file in which to store unprocessed data.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
@defopt remember-leader-text
|
||||||
|
The text used to begin each remember item.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
@node Diary, Mailbox, Text File, Backends
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@section Saving to a Diary file
|
||||||
|
@cindex diary, integration
|
||||||
|
|
||||||
|
@subheading Insinuation
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(require 'remember-diary)
|
||||||
|
(add-to-list 'remember-handler-functions 'remember-diary-extract-entries)
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@subheading Options
|
||||||
|
|
||||||
|
@defopt remember-diary-file
|
||||||
|
File for extracted diary entries.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
@node Mailbox, Org, Diary, Backends
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@section Saving to a Mailbox
|
||||||
|
@cindex mailbox, saving to
|
||||||
|
|
||||||
|
@subheading Insinuation
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(add-to-list 'remember-handler-functions 'remember-store-in-mailbox)
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@subheading Options
|
||||||
|
|
||||||
|
@defopt remember-mailbox
|
||||||
|
The file in which to store remember data as mail.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
@defopt remember-default-priority
|
||||||
|
The default priority for remembered mail messages.
|
||||||
|
@end defopt
|
||||||
|
|
||||||
|
@node Org, , Mailbox, Backends
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@section Saving to an Org Mode file
|
||||||
|
@cindex org mode, integration
|
||||||
|
|
||||||
|
For instructions on how to integrate Remember with Org Mode,
|
||||||
|
consult @ref{Remember, , , org}.
|
||||||
|
|
||||||
|
@node GNU Free Documentation License, Concept Index, Backends, Top
|
||||||
|
@appendix GNU Free Documentation License
|
||||||
|
@include doclicense.texi
|
||||||
|
|
||||||
|
@node Concept Index, , GNU Free Documentation License, Top
|
||||||
|
@comment node-name, next, previous, up
|
||||||
|
@unnumbered Index
|
||||||
|
|
||||||
|
@printindex cp
|
||||||
|
|
||||||
|
@bye
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
arch-tag: 5b980db0-20cc-4167-b845-52dc11d53b9f
|
||||||
|
@end ignore
|
270
doc/misc/sasl.texi
Normal file
270
doc/misc/sasl.texi
Normal file
|
@ -0,0 +1,270 @@
|
||||||
|
\input texinfo @c -*-texinfo-*-
|
||||||
|
|
||||||
|
@setfilename sasl.info
|
||||||
|
|
||||||
|
@set VERSION 0.2
|
||||||
|
|
||||||
|
@dircategory Emacs
|
||||||
|
@direntry
|
||||||
|
* SASL: (sasl). The Emacs SASL library.
|
||||||
|
@end direntry
|
||||||
|
|
||||||
|
@settitle Emacs SASL Library @value{VERSION}
|
||||||
|
|
||||||
|
@ifinfo
|
||||||
|
This file describes the Emacs SASL library.
|
||||||
|
|
||||||
|
Copyright @copyright{} 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
Copyright @copyright{} 2000 Daiki Ueno.
|
||||||
|
|
||||||
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
|
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||||
|
any later version published by the Free Software Foundation; with no
|
||||||
|
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||||
|
Texts. A copy of the license is included in the section entitled "GNU
|
||||||
|
Free Documentation License".
|
||||||
|
@end ifinfo
|
||||||
|
|
||||||
|
@tex
|
||||||
|
|
||||||
|
@titlepage
|
||||||
|
@title Emacs SASL Library
|
||||||
|
|
||||||
|
@author by Daiki Ueno
|
||||||
|
@page
|
||||||
|
|
||||||
|
@vskip 0pt plus 1filll
|
||||||
|
Copyright @copyright{} 2000 Daiki Ueno.
|
||||||
|
|
||||||
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
|
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||||
|
any later version published by the Free Software Foundation; with no
|
||||||
|
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||||
|
Texts. A copy of the license is included in the section entitled "GNU
|
||||||
|
Free Documentation License".
|
||||||
|
@end titlepage
|
||||||
|
@page
|
||||||
|
|
||||||
|
@end tex
|
||||||
|
|
||||||
|
@node Top
|
||||||
|
@top Emacs SASL
|
||||||
|
This manual describes the Emacs SASL library.
|
||||||
|
|
||||||
|
A common interface to share several authentication mechanisms between
|
||||||
|
applications using different protocols.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Overview:: What Emacs SASL library is.
|
||||||
|
* How to use:: Adding authentication support to your applications.
|
||||||
|
* Data types::
|
||||||
|
* Back end drivers:: Writing your own drivers.
|
||||||
|
* Index::
|
||||||
|
* Function Index::
|
||||||
|
* Variable Index::
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Overview
|
||||||
|
@chapter Overview
|
||||||
|
|
||||||
|
@sc{sasl} is short for @dfn{Simple Authentication and Security Layer}.
|
||||||
|
This standard is documented in RFC2222. It provides a simple method for
|
||||||
|
adding authentication support to various application protocols.
|
||||||
|
|
||||||
|
The toplevel interface of this library is inspired by Java @sc{sasl}
|
||||||
|
Application Program Interface. It defines an abstraction over a series
|
||||||
|
of authentication mechanism drivers (@ref{Back end drivers}).
|
||||||
|
|
||||||
|
Back end drivers are designed to be close as possible to the
|
||||||
|
authentication mechanism. You can access the additional configuration
|
||||||
|
information anywhere from the implementation.
|
||||||
|
|
||||||
|
@node How to use
|
||||||
|
@chapter How to use
|
||||||
|
|
||||||
|
(Not yet written).
|
||||||
|
|
||||||
|
To use Emacs SASL library, please evaluate following expression at the
|
||||||
|
beginning of your application program.
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(require 'sasl)
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
If you want to check existence of sasl.el at runtime, instead you
|
||||||
|
can list autoload settings for functions you want.
|
||||||
|
|
||||||
|
@node Data types
|
||||||
|
@chapter Data types
|
||||||
|
|
||||||
|
There are three data types to be used for carrying a negotiated
|
||||||
|
security layer---a mechanism, a client parameter and an authentication
|
||||||
|
step.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Mechanisms::
|
||||||
|
* Clients::
|
||||||
|
* Steps::
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Mechanisms
|
||||||
|
@section Mechanisms
|
||||||
|
|
||||||
|
A mechanism (@code{sasl-mechanism} object) is a schema of the @sc{sasl}
|
||||||
|
authentication mechanism driver.
|
||||||
|
|
||||||
|
@defvar sasl-mechanisms
|
||||||
|
A list of mechanism names.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
|
@defun sasl-find-mechanism mechanisms
|
||||||
|
|
||||||
|
Retrieve an apropriate mechanism.
|
||||||
|
This function compares @var{mechanisms} and @code{sasl-mechanisms} then
|
||||||
|
returns apropriate @code{sasl-mechanism} object.
|
||||||
|
|
||||||
|
@example
|
||||||
|
(let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
|
||||||
|
(setq mechanism (sasl-find-mechanism server-supported-mechanisms)))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-mechanism-name mechanism
|
||||||
|
Return name of mechanism, a string.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
If you want to write an authentication mechanism driver (@ref{Back end
|
||||||
|
drivers}), use @code{sasl-make-mechanism} and modify
|
||||||
|
@code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly.
|
||||||
|
|
||||||
|
@defun sasl-make-mechanism name steps
|
||||||
|
Allocate a @code{sasl-mechanism} object.
|
||||||
|
This function takes two parameters---name of the mechanism, and a list
|
||||||
|
of authentication functions.
|
||||||
|
|
||||||
|
@example
|
||||||
|
(defconst sasl-anonymous-steps
|
||||||
|
'(identity ;no initial response
|
||||||
|
sasl-anonymous-response))
|
||||||
|
|
||||||
|
(put 'sasl-anonymous 'sasl-mechanism
|
||||||
|
(sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@node Clients
|
||||||
|
@section Clients
|
||||||
|
|
||||||
|
A client (@code{sasl-client} object) initialized with four
|
||||||
|
parameters---a mechanism, a user name, name of the service and name of
|
||||||
|
the server.
|
||||||
|
|
||||||
|
@defun sasl-make-client mechanism name service server
|
||||||
|
Prepare a @code{sasl-client} object.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-mechanism client
|
||||||
|
Return the mechanism (@code{sasl-mechanism} object) of client.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-name client
|
||||||
|
Return the authorization name of client, a string.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-service client
|
||||||
|
Return the service name of client, a string.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-server client
|
||||||
|
Return the server name of client, a string.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
If you want to specify additional configuration properties, please use
|
||||||
|
@code{sasl-client-set-property}.
|
||||||
|
|
||||||
|
@defun sasl-client-set-property client property value
|
||||||
|
Add the given property/value to client.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-property client property
|
||||||
|
Return the value of the property of client.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-set-properties client plist
|
||||||
|
Destructively set the properties of client.
|
||||||
|
The second argument is the new property list.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-client-properties client
|
||||||
|
Return the whole property list of client configuration.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@node Steps
|
||||||
|
@section Steps
|
||||||
|
|
||||||
|
A step (@code{sasl-step} object) is an abstraction of authentication
|
||||||
|
``step'' which holds the response value and the next entry point for the
|
||||||
|
authentication process (the latter is not accessible).
|
||||||
|
|
||||||
|
@defun sasl-step-data step
|
||||||
|
Return the data which @var{step} holds, a string.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun sasl-step-set-data step data
|
||||||
|
Store @var{data} string to @var{step}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
To get the initial response, you should call the function
|
||||||
|
@code{sasl-next-step} with the second argument @code{nil}.
|
||||||
|
|
||||||
|
@example
|
||||||
|
(setq name (sasl-mechanism-name mechanism))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
At this point we could send the command which starts a SASL
|
||||||
|
authentication protocol exchange. For example,
|
||||||
|
|
||||||
|
@example
|
||||||
|
(process-send-string
|
||||||
|
process
|
||||||
|
(if (sasl-step-data step) ;initial response
|
||||||
|
(format "AUTH %s %s\r\n" name (base64-encode-string (sasl-step-data step) t))
|
||||||
|
(format "AUTH %s\r\n" name)))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
To go on with the authentication process, all you have to do is call
|
||||||
|
@code{sasl-next-step} consecutively.
|
||||||
|
|
||||||
|
@defun sasl-next-step client step
|
||||||
|
Perform the authentication step.
|
||||||
|
At the first time @var{step} should be set to @code{nil}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@node Back end drivers
|
||||||
|
@chapter Back end drivers
|
||||||
|
|
||||||
|
(Not yet written).
|
||||||
|
|
||||||
|
@node Index
|
||||||
|
@chapter Index
|
||||||
|
@printindex cp
|
||||||
|
|
||||||
|
@node Function Index
|
||||||
|
@chapter Function Index
|
||||||
|
@printindex fn
|
||||||
|
|
||||||
|
@node Variable Index
|
||||||
|
@chapter Variable Index
|
||||||
|
@printindex vr
|
||||||
|
|
||||||
|
@summarycontents
|
||||||
|
@contents
|
||||||
|
@bye
|
||||||
|
|
||||||
|
@c End:
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
arch-tag: dc9650be-a953-40bf-bc55-24fe5f19d875
|
||||||
|
@end ignore
|
|
@ -236,9 +236,9 @@ if address "sender" "owner-w3-beta@@xemacs.org" @{
|
||||||
@}
|
@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
A few mailing lists do not use the @samp{Sender:} header, but does
|
A few mailing lists do not use the @samp{Sender:} header, but has a
|
||||||
contain some unique identifier in some other header. The following is
|
unique identifier in some other header. The following is not a
|
||||||
not a complete script, it assumes that @code{fileinto} has already been
|
complete script, it assumes that @code{fileinto} has already been
|
||||||
required.
|
required.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
|
|
@ -260,6 +260,9 @@ box, one of the more common uses of the package. This allows
|
||||||
relatively secure access to machines, especially if @command{ftp}
|
relatively secure access to machines, especially if @command{ftp}
|
||||||
access is disabled.
|
access is disabled.
|
||||||
|
|
||||||
|
Under Windows, @value{tramp} is integrated with the PuTTY package,
|
||||||
|
using the @command{plink} program.
|
||||||
|
|
||||||
The majority of activity carried out by @value{tramp} requires only that
|
The majority of activity carried out by @value{tramp} requires only that
|
||||||
the remote login is possible and is carried out at the terminal. In
|
the remote login is possible and is carried out at the terminal. In
|
||||||
order to access remote files @value{tramp} needs to transfer their content
|
order to access remote files @value{tramp} needs to transfer their content
|
||||||
|
@ -269,9 +272,9 @@ to the local machine temporarily.
|
||||||
The details are easy to select, depending on your needs and the
|
The details are easy to select, depending on your needs and the
|
||||||
machines in question.
|
machines in question.
|
||||||
|
|
||||||
The fastest transfer methods (for large files) rely on a remote file
|
The fastest transfer methods for large files rely on a remote file
|
||||||
transfer package such as @command{rcp}, @command{scp} or
|
transfer package such as @command{rcp}, @command{scp}, @command{rsync}
|
||||||
@command{rsync}.
|
or (under Windows) @command{pscp}.
|
||||||
|
|
||||||
If the remote copy methods are not suitable for you, @value{tramp} also
|
If the remote copy methods are not suitable for you, @value{tramp} also
|
||||||
supports the use of encoded transfers directly through the shell.
|
supports the use of encoded transfers directly through the shell.
|
||||||
|
@ -279,15 +282,6 @@ This requires that the @command{mimencode} or @command{uuencode} tools
|
||||||
are available on the remote machine. These methods are generally
|
are available on the remote machine. These methods are generally
|
||||||
faster for small files.
|
faster for small files.
|
||||||
|
|
||||||
Within these limitations, @value{tramp} is quite powerful. It is worth
|
|
||||||
noting that, as of the time of writing, it is far from a polished
|
|
||||||
end-user product. For a while yet you should expect to run into rough
|
|
||||||
edges and problems with the code now and then.
|
|
||||||
|
|
||||||
It is finished enough that the developers use it for day to day work but
|
|
||||||
the installation and setup can be a little difficult to master, as can
|
|
||||||
the terminology.
|
|
||||||
|
|
||||||
@value{tramp} is still under active development and any problems you encounter,
|
@value{tramp} is still under active development and any problems you encounter,
|
||||||
trivial or major, should be reported to the @value{tramp} developers.
|
trivial or major, should be reported to the @value{tramp} developers.
|
||||||
@xref{Bug Reports}.
|
@xref{Bug Reports}.
|
||||||
|
@ -1594,6 +1588,20 @@ exiting @value{emacsname}. You can simply remove this file if
|
||||||
Using such persistent information can be disabled by setting
|
Using such persistent information can be disabled by setting
|
||||||
@code{tramp-persistency-file-name} to @code{nil}.
|
@code{tramp-persistency-file-name} to @code{nil}.
|
||||||
|
|
||||||
|
Once consequence of reusing connection related information is that
|
||||||
|
@var{tramp} needs to distinguish hosts. If you, for example, run a
|
||||||
|
local @code{sshd} on port 3001, which tunnels @command{ssh} to another
|
||||||
|
host, you could access both @file{@trampfn{ssh, , localhost,}} and
|
||||||
|
@file{@trampfn{ssh, , localhost#3001,}}. @var{tramp} would use the
|
||||||
|
same host related information (like paths, Perl variants, etc) for
|
||||||
|
both connections, although the information is valid only for one of
|
||||||
|
them.
|
||||||
|
|
||||||
|
In order to avoid trouble, you must use another host name for one of
|
||||||
|
the connections, like introducing a @option{Host} section in
|
||||||
|
@file{~/.ssh/config} (@pxref{Frequently Asked Questions}) or applying
|
||||||
|
multiple hops (@pxref{Multi-hops}).
|
||||||
|
|
||||||
|
|
||||||
@node Remote Programs
|
@node Remote Programs
|
||||||
@section How @value{tramp} finds and uses programs on the remote machine.
|
@section How @value{tramp} finds and uses programs on the remote machine.
|
||||||
|
@ -2651,24 +2659,45 @@ remote host.
|
||||||
@lisp
|
@lisp
|
||||||
(defadvice tramp-handle-write-region
|
(defadvice tramp-handle-write-region
|
||||||
(after tramp-write-beep-advice activate)
|
(after tramp-write-beep-advice activate)
|
||||||
" make tramp beep after writing a file."
|
"Make tramp beep after writing a file."
|
||||||
(interactive)
|
(interactive)
|
||||||
(beep))
|
(beep))
|
||||||
|
|
||||||
(defadvice tramp-handle-do-copy-or-rename-file
|
(defadvice tramp-handle-do-copy-or-rename-file
|
||||||
(after tramp-copy-beep-advice activate)
|
(after tramp-copy-beep-advice activate)
|
||||||
" make tramp beep after copying a file."
|
"Make tramp beep after copying a file."
|
||||||
(interactive)
|
(interactive)
|
||||||
(beep))
|
(beep))
|
||||||
|
|
||||||
(defadvice tramp-handle-insert-file-contents
|
(defadvice tramp-handle-insert-file-contents
|
||||||
(after tramp-copy-beep-advice activate)
|
(after tramp-insert-beep-advice activate)
|
||||||
" make tramp beep after copying a file."
|
"Make tramp beep after inserting a file."
|
||||||
(interactive)
|
(interactive)
|
||||||
(beep))
|
(beep))
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
|
|
||||||
|
@ifset emacs
|
||||||
|
@item
|
||||||
|
I'ld like to get a Visual Warning when working in a sudo:ed context
|
||||||
|
|
||||||
|
When you are working with @samp{root} privileges, it might be useful
|
||||||
|
to get an indication in the buffer's modeline. The following code,
|
||||||
|
tested with @value{emacsname} 22.1, does the job. You should put it
|
||||||
|
into your @file{~/.emacs}:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(defun my-mode-line-function ()
|
||||||
|
(when (string-match "^/su\\(do\\)?:" default-directory)
|
||||||
|
(setq mode-line-format
|
||||||
|
(format-mode-line mode-line-format 'font-lock-warning-face))))
|
||||||
|
|
||||||
|
(add-hook 'find-file-hooks 'my-mode-line-function)
|
||||||
|
(add-hook 'dired-mode-hook 'my-mode-line-function)
|
||||||
|
@end lisp
|
||||||
|
@end ifset
|
||||||
|
|
||||||
|
|
||||||
@ifset emacs
|
@ifset emacs
|
||||||
@item
|
@item
|
||||||
I'ld like to see a host indication in the mode line when I'm remote
|
I'ld like to see a host indication in the mode line when I'm remote
|
||||||
|
@ -2800,7 +2829,7 @@ Host xy
|
||||||
|
|
||||||
The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
|
The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
|
||||||
/opt/news/etc}}. Depending on files in your directories, it is even
|
/opt/news/etc}}. Depending on files in your directories, it is even
|
||||||
possible to complete the hostname with @kbd{C-x C-f
|
possible to complete the host name with @kbd{C-x C-f
|
||||||
@value{prefix}ssh@value{postfixhop}x @key{TAB}}.
|
@value{prefix}ssh@value{postfixhop}x @key{TAB}}.
|
||||||
|
|
||||||
@item Use environment variables:
|
@item Use environment variables:
|
||||||
|
|
|
@ -142,19 +142,6 @@ extended to use the GUI features. This means that your code using the
|
||||||
widget library will also use the new graphic features automatically.
|
widget library will also use the new graphic features automatically.
|
||||||
@end enumerate
|
@end enumerate
|
||||||
|
|
||||||
In order to minimize the code that is loaded by users who do not
|
|
||||||
create any widgets, the code has been split in two files:
|
|
||||||
|
|
||||||
@cindex widget library, files
|
|
||||||
@table @file
|
|
||||||
@item widget.el
|
|
||||||
This will declare the user variables, define the function
|
|
||||||
@code{define-widget}, and autoload the function @code{widget-create}.
|
|
||||||
@item wid-edit.el
|
|
||||||
Everything else is here, there is no reason to load it explicitly, as
|
|
||||||
it will be autoloaded when needed.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
@node User Interface, Programming Example, Introduction, Top
|
@node User Interface, Programming Example, Introduction, Top
|
||||||
@comment node-name, next, previous, up
|
@comment node-name, next, previous, up
|
||||||
@section User Interface
|
@section User Interface
|
||||||
|
|
1
etc/.gitignore
vendored
1
etc/.gitignore
vendored
|
@ -4,3 +4,4 @@ icons
|
||||||
*.log
|
*.log
|
||||||
*.dvi
|
*.dvi
|
||||||
DOC DOC-*
|
DOC DOC-*
|
||||||
|
*.pyc
|
|
@ -1225,7 +1225,7 @@ John Wiegley: wrote align.el cal-bahai.el em-alias.el em-banner.el
|
||||||
em-term.el em-unix.el em-xtra.el erc-identd.el esh-arg.el esh-cmd.el
|
em-term.el em-unix.el em-xtra.el erc-identd.el esh-arg.el esh-cmd.el
|
||||||
esh-ext.el esh-io.el esh-maint.el esh-mode.el esh-module.el esh-opt.el
|
esh-ext.el esh-io.el esh-maint.el esh-mode.el esh-module.el esh-opt.el
|
||||||
esh-proc.el esh-test.el esh-util.el esh-var.el eshell.el eudcb-mab.el
|
esh-proc.el esh-test.el esh-util.el esh-var.el eshell.el eudcb-mab.el
|
||||||
isearchb.el pcmpl-cvs.el pcomplete.el timeclock.el
|
isearchb.el pcmpl-cvs.el pcomplete.el remember.el timeclock.el
|
||||||
and changed erc-chess.el erc.el iswitchb.el Makefile.in allout.el
|
and changed erc-chess.el erc.el iswitchb.el Makefile.in allout.el
|
||||||
cal-menu.el calendar.el compile.el desktop.el diary-lib.el erc-bbdb.el
|
cal-menu.el calendar.el compile.el desktop.el diary-lib.el erc-bbdb.el
|
||||||
erc-button.el erc-complete.el erc-fill.el erc-ibuffer.el erc-list.el
|
erc-button.el erc-complete.el erc-fill.el erc-ibuffer.el erc-list.el
|
||||||
|
@ -2295,8 +2295,8 @@ and changed ffap.el ispell.el rmailsum.el simple.el testcover.el
|
||||||
|
|
||||||
Ryszard Kubiak: changed ogonek.el
|
Ryszard Kubiak: changed ogonek.el
|
||||||
|
|
||||||
Sacha Chua: wrote erc-pcomplete.el
|
Sacha Chua: wrote erc-pcomplete.el remember-diary.el
|
||||||
and changed erc.el erc-button.el
|
and changed erc.el erc-button.el remember.el
|
||||||
|
|
||||||
Saito Takuya: changed compile.el mule.el
|
Saito Takuya: changed compile.el mule.el
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,24 @@
|
||||||
|
2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
|
||||||
|
|
||||||
|
* MACHINES: Remove Sun windows info.
|
||||||
|
|
||||||
|
2007-10-30 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* NEWS: Add entry for Remember Mode.
|
||||||
|
|
||||||
|
2007-10-29 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* refcards/gnus-refcard.tex: Restore Feb 2007 copyright
|
||||||
|
clarifications lost in update to Gnus trunk.
|
||||||
|
|
||||||
|
2007-10-29 Michael Olson <mwolson@gnu.org>
|
||||||
|
|
||||||
|
* ERC-NEWS: Update for recent change.
|
||||||
|
|
||||||
|
2007-10-27 Juanma Barranquero <lekktu@gmail.com>
|
||||||
|
|
||||||
|
* .cvsignore: Add *.pyc.
|
||||||
|
|
||||||
2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
|
2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
|
||||||
|
|
||||||
* ses-example.ses: Get rid of silly life-universe-everything local
|
* ses-example.ses: Get rid of silly life-universe-everything local
|
||||||
|
|
|
@ -11,6 +11,10 @@ It requires the tls.el library.
|
||||||
** The function `erc-ssl' will now always use ssl.el, even in the version
|
** The function `erc-ssl' will now always use ssl.el, even in the version
|
||||||
of ERC that comes with Emacs.
|
of ERC that comes with Emacs.
|
||||||
|
|
||||||
|
** Type `C-u' before `C-c C-j' to prompt for a channel key
|
||||||
|
`erc-join-channel' now accepts a prefix-argument to prompt for the key
|
||||||
|
when channels are protected by keywords.
|
||||||
|
|
||||||
** Changes and additions to modules
|
** Changes and additions to modules
|
||||||
|
|
||||||
*** Channel tracking (erc-track.el)
|
*** Channel tracking (erc-track.el)
|
||||||
|
|
569
etc/GNUS-NEWS
569
etc/GNUS-NEWS
|
@ -10,15 +10,16 @@ For older news, see Gnus info node "New Features".
|
||||||
|
|
||||||
* Installation changes
|
* Installation changes
|
||||||
|
|
||||||
** Upgrading from previous (stable) version if you have used Oort.
|
** Upgrading from previous (stable) version if you have used No Gnus.
|
||||||
|
|
||||||
If you have tried Oort (the unstable Gnus branch leading to this
|
If you have tried No Gnus (the unstable Gnus branch leading to this
|
||||||
release) but went back to a stable version, be careful when upgrading to
|
release) but went back to a stable version, be careful when upgrading to
|
||||||
this version. In particular, you will probably want to remove all
|
this version. In particular, you will probably want to remove the
|
||||||
`.marks' (nnml) and `.mrk' (nnfolder) files, so that flags are read from
|
`~/News/marks' directory (perhaps selectively), so that flags are read
|
||||||
your `.newsrc.eld' instead of from the `.marks'/`.mrk' file where this
|
from your `~/.newsrc.eld' instead of from the stale marks file, where
|
||||||
release store flags. See a later entry for more information about
|
this release will store flags for nntp. See a later entry for more
|
||||||
marks. Note that downgrading isn't save in general.
|
information about nntp marks. Note that downgrading isn't safe in
|
||||||
|
general.
|
||||||
|
|
||||||
** Lisp files are now installed in `.../site-lisp/gnus/' by default. It
|
** Lisp files are now installed in `.../site-lisp/gnus/' by default. It
|
||||||
defaulted to `.../site-lisp/' formerly. In addition to this, the new
|
defaulted to `.../site-lisp/' formerly. In addition to this, the new
|
||||||
|
@ -26,493 +27,191 @@ installer issues a warning if other Gnus installations which will shadow
|
||||||
the latest one are detected. You can then remove those shadows manually
|
the latest one are detected. You can then remove those shadows manually
|
||||||
or remove them using `make remove-installed-shadows'.
|
or remove them using `make remove-installed-shadows'.
|
||||||
|
|
||||||
** New `make.bat' for compiling and installing Gnus under MS Windows
|
|
||||||
|
|
||||||
Use `make.bat' if you want to install Gnus under MS Windows, the first
|
|
||||||
argument to the batch-program should be the directory where `xemacs.exe'
|
|
||||||
respectively `emacs.exe' is located, if you want to install Gnus after
|
|
||||||
compiling it, give `make.bat' `/copy' as the second parameter.
|
|
||||||
|
|
||||||
`make.bat' has been rewritten from scratch, it now features automatic
|
|
||||||
recognition of XEmacs and GNU Emacs, generates `gnus-load.el', checks if
|
|
||||||
errors occur while compilation and generation of info files and reports
|
|
||||||
them at the end of the build process. It now uses `makeinfo' if it is
|
|
||||||
available and falls back to `infohack.el' otherwise. `make.bat' should
|
|
||||||
now install all files which are necessary to run Gnus and be generally a
|
|
||||||
complete replacement for the `configure; make; make install' cycle used
|
|
||||||
under Unix systems.
|
|
||||||
|
|
||||||
The new `make.bat' makes `make-x.bat' and `xemacs.mak' superfluous, so
|
|
||||||
they have been removed.
|
|
||||||
|
|
||||||
** `~/News/overview/' not used.
|
|
||||||
|
|
||||||
As a result of the following change, the `~/News/overview/' directory is
|
|
||||||
not used any more. You can safely delete the entire hierarchy.
|
|
||||||
|
|
||||||
** `(require 'gnus-load)'
|
|
||||||
|
|
||||||
If you use a stand-alone Gnus distribution, you'd better add `(require
|
|
||||||
'gnus-load)' into your `~/.emacs' after adding the Gnus lisp directory
|
|
||||||
into load-path.
|
|
||||||
|
|
||||||
File `gnus-load.el' contains autoload commands, functions and variables,
|
|
||||||
some of which may not be included in distributions of Emacsen.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* New packages and libraries within Gnus
|
* New packages and libraries within Gnus
|
||||||
|
|
||||||
** The revised Gnus FAQ is included in the manual, *Note Frequently Asked
|
** Gnus includes the Emacs Lisp SASL library.
|
||||||
Questions::.
|
|
||||||
|
|
||||||
** TLS wrapper shipped with Gnus
|
This provides a clean API to SASL mechanisms from within Emacs. The
|
||||||
|
user visible aspects of this, compared to the earlier situation, include
|
||||||
|
support for DIGEST-MD5 and NTLM. *Note Emacs SASL: (sasl)Top.
|
||||||
|
|
||||||
TLS/SSL is now supported in IMAP and NNTP via `tls.el' and GNUTLS. The
|
** ManageSieve connections uses the SASL library by default.
|
||||||
old TLS/SSL support via (external third party) `ssl.el' and OpenSSL
|
|
||||||
still works.
|
|
||||||
|
|
||||||
** Improved anti-spam features.
|
The primary change this brings is support for DIGEST-MD5 and NTLM, when
|
||||||
|
the server supports it.
|
||||||
|
|
||||||
Gnus is now able to take out spam from your mail and news streams using
|
** Gnus includes a password cache mechanism in password.el.
|
||||||
a wide variety of programs and filter rules. Among the supported
|
|
||||||
methods are RBL blocklists, bogofilter and white/blacklists. Hooks for
|
|
||||||
easy use of external packages such as SpamAssassin and Hashcash are also
|
|
||||||
new. *Note Thwarting Email Spam::.
|
|
||||||
|
|
||||||
** Gnus supports server-side mail filtering using Sieve.
|
|
||||||
|
|
||||||
Sieve rules can be added as Group Parameters for groups, and the
|
|
||||||
complete Sieve script is generated using `D g' from the Group buffer,
|
|
||||||
and then uploaded to the server using `C-c C-l' in the generated Sieve
|
|
||||||
buffer. *Note Sieve Commands::, and the new Sieve manual *Note Top:
|
|
||||||
(sieve)Top.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Changes in group mode
|
|
||||||
|
|
||||||
** `gnus-group-read-ephemeral-group' can be called interactively, using `G
|
|
||||||
M'.
|
|
||||||
|
|
||||||
** Retrieval of charters and control messages
|
|
||||||
|
|
||||||
There are new commands for fetching newsgroup charters (`H c') and
|
|
||||||
control messages (`H C').
|
|
||||||
|
|
||||||
** The new variable `gnus-parameters' can be used to set group parameters.
|
|
||||||
|
|
||||||
Earlier this was done only via `G p' (or `G c'), which stored the
|
|
||||||
parameters in `~/.newsrc.eld', but via this variable you can enjoy the
|
|
||||||
powers of customize, and simplified backups since you set the variable
|
|
||||||
in `~/.gnus.el' instead of `~/.newsrc.eld'. The variable maps regular
|
|
||||||
expressions matching group names to group parameters, a'la:
|
|
||||||
(setq gnus-parameters
|
|
||||||
'(("mail\\..*"
|
|
||||||
(gnus-show-threads nil)
|
|
||||||
(gnus-use-scoring nil))
|
|
||||||
("^nnimap:\\(foo.bar\\)$"
|
|
||||||
(to-group . "\\1"))))
|
|
||||||
|
|
||||||
** Unread count correct in nnimap groups.
|
|
||||||
|
|
||||||
The estimated number of unread articles in the group buffer should now
|
|
||||||
be correct for nnimap groups. This is achieved by calling
|
|
||||||
`nnimap-fixup-unread-after-getting-new-news' from the
|
|
||||||
`gnus-setup-news-hook' (called on startup) and
|
|
||||||
`gnus-after-getting-new-news-hook'. (called after getting new mail). If
|
|
||||||
you have modified those variables from the default, you may want to add
|
|
||||||
`nnimap-fixup-unread-after-getting-new-news' again. If you were happy
|
|
||||||
with the estimate and want to save some (minimal) time when getting new
|
|
||||||
mail, remove the function.
|
|
||||||
|
|
||||||
** Group names are treated as UTF-8 by default.
|
|
||||||
|
|
||||||
This is supposedly what USEFOR wanted to migrate to. See
|
|
||||||
`gnus-group-name-charset-group-alist' and
|
|
||||||
`gnus-group-name-charset-method-alist' for customization.
|
|
||||||
|
|
||||||
** `gnus-group-charset-alist' and `gnus-group-ignored-charsets-alist'.
|
|
||||||
|
|
||||||
The regexps in these variables are compared with full group names
|
|
||||||
instead of real group names in 5.8. Users who customize these variables
|
|
||||||
should change those regexps accordingly. For example:
|
|
||||||
("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
|
|
||||||
|
|
||||||
|
It is enabled by default (see `password-cache'), with a short timeout of
|
||||||
|
16 seconds (see `password-cache-expiry'). If PGG is used as the PGP
|
||||||
|
back end, the PGP passphrase is managed by this mechanism. Passwords
|
||||||
|
for ManageSieve connections are managed by this mechanism, after
|
||||||
|
querying the user about whether to do so.
|
||||||
|
|
||||||
|
|
||||||
* Changes in summary and article mode
|
* Changes in summary and article mode
|
||||||
|
|
||||||
** `F' (`gnus-article-followup-with-original') and `R'
|
** Gnus now supports sticky article buffers. Those are article buffers
|
||||||
(`gnus-article-reply-with-original') only yank the text in the region if
|
that are not reused when you select another article. *Note Sticky
|
||||||
the region is active.
|
Articles::.
|
||||||
|
|
||||||
** In draft groups, `e' is now bound to `gnus-draft-edit-message'. Use `B
|
** International host names (IDNA) can now be decoded inside article bodies
|
||||||
w' for `gnus-summary-edit-article' instead.
|
using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn
|
||||||
|
(`http://www.gnu.org/software/libidn/') has been installed.
|
||||||
|
|
||||||
** Article Buttons
|
** The non-ASCII group names handling has been much improved. The back
|
||||||
|
ends that fully support non-ASCII group names are now `nntp', `nnml',
|
||||||
|
and `nnrss'. Also the agent, the cache, and the marks features work
|
||||||
|
with those back ends. *Note Non-ASCII Group Names::.
|
||||||
|
|
||||||
More buttons for URLs, mail addresses, Message-IDs, Info links, man
|
** Gnus now displays DNS master files sent as text/dns using dns-mode.
|
||||||
pages and Emacs or Gnus related references. *Note Article Buttons::.
|
|
||||||
The variables `gnus-button-*-level' can be used to control the
|
|
||||||
appearance of all article buttons. *Note Article Button Levels::.
|
|
||||||
|
|
||||||
** Single-part yenc encoded attachments can be decoded.
|
** Gnus supports new limiting commands in the Summary buffer: `/ r'
|
||||||
|
(`gnus-summary-limit-to-replied') and `/ R'
|
||||||
|
(`gnus-summary-limit-to-recipient'). *Note Limiting::.
|
||||||
|
|
||||||
** Picons
|
** You can now fetch all ticked articles from the server using `Y t'
|
||||||
|
(`gnus-summary-insert-ticked-articles'). *Note Summary Generation
|
||||||
|
Commands::.
|
||||||
|
|
||||||
The picons code has been reimplemented to work in GNU Emacs--some of the
|
** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t'
|
||||||
previous options have been removed or renamed.
|
(`gnus-summary-sort-by-recipient'). *Note Summary Sorting::.
|
||||||
|
|
||||||
Picons are small "personal icons" representing users, domain and
|
** S/MIME now features LDAP user certificate searches. You need to
|
||||||
newsgroups, which can be displayed in the Article buffer. *Note
|
configure the server in `smime-ldap-host-list'.
|
||||||
Picons::.
|
|
||||||
|
|
||||||
** If the new option `gnus-treat-body-boundary' is non-`nil', a boundary
|
** URLs inside OpenPGP headers are retrieved and imported to your PGP key
|
||||||
line is drawn at the end of the headers.
|
ring when you click on them.
|
||||||
|
|
||||||
** Signed article headers (X-PGP-Sig) can be verified with `W p'.
|
** Picons can be displayed right from the textual address, see
|
||||||
|
`gnus-picon-style'. *Note Picons::.
|
||||||
|
|
||||||
** The Summary Buffer uses an arrow in the fringe to indicate the current
|
** ANSI SGR control sequences can be transformed using `W A'.
|
||||||
article. Use `(setq gnus-summary-display-arrow nil)' to disable it.
|
|
||||||
|
|
||||||
** Warn about email replies to news
|
ANSI sequences are used in some Chinese hierarchies for highlighting
|
||||||
|
articles (`gnus-article-treat-ansi-sequences').
|
||||||
|
|
||||||
Do you often find yourself replying to news by email by mistake? Then
|
** Gnus now MIME decodes articles even when they lack "MIME-Version" header.
|
||||||
the new option `gnus-confirm-mail-reply-to-news' is just the thing for
|
This changes the default of `gnus-article-loose-mime'.
|
||||||
you.
|
|
||||||
|
|
||||||
** If the new option `gnus-summary-display-while-building' is non-`nil',
|
** `gnus-decay-scores' can be a regexp matching score files. For example,
|
||||||
the summary buffer is shown and updated as it's being built.
|
set it to `\\.ADAPT\\'' and only adaptive score files will be decayed.
|
||||||
|
*Note Score Decays::.
|
||||||
|
|
||||||
** The new `recent' mark `.' indicates newly arrived messages (as opposed
|
** Strings prefixing to the `To' and `Newsgroup' headers in summary lines
|
||||||
to old but unread messages).
|
when using `gnus-ignored-from-addresses' can be customized with
|
||||||
|
`gnus-summary-to-prefix' and `gnus-summary-newsgroup-prefix'. *Note To
|
||||||
|
From Newsgroups::.
|
||||||
|
|
||||||
** Gnus supports RFC 2369 mailing list headers, and adds a number of
|
** You can replace MIME parts with external bodies. See
|
||||||
related commands in mailing list groups. *Note Mailing List::.
|
`gnus-mime-replace-part' and `gnus-article-replace-part'. *Note MIME
|
||||||
|
Commands::, *note Using MIME::.
|
||||||
|
|
||||||
** The Date header can be displayed in a format that can be read aloud in
|
** The option `mm-fill-flowed' can be used to disable treatment of
|
||||||
English. *Note Article Date::.
|
format=flowed messages. Also, flowed text is disabled when sending
|
||||||
|
inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text.
|
||||||
** diffs are automatically highlighted in groups matching
|
(New in Gnus 5.10.7)
|
||||||
`mm-uu-diff-groups-regexp'
|
|
||||||
|
|
||||||
** Better handling of Microsoft citation styles
|
|
||||||
|
|
||||||
Gnus now tries to recognize the mangled header block that some Microsoft
|
|
||||||
mailers use to indicate that the rest of the message is a citation, even
|
|
||||||
though it is not quoted in any way. The variable
|
|
||||||
`gnus-cite-unsightly-citation-regexp' matches the start of these
|
|
||||||
citations.
|
|
||||||
|
|
||||||
The new command `W Y f' (`gnus-article-outlook-deuglify-article') allows
|
|
||||||
deuglifying broken Outlook (Express) articles.
|
|
||||||
|
|
||||||
** `gnus-article-skip-boring'
|
|
||||||
|
|
||||||
If you set `gnus-article-skip-boring' to `t', then Gnus will not scroll
|
|
||||||
down to show you a page that contains only boring text, which by default
|
|
||||||
means cited text and signature. You can customize what is skippable
|
|
||||||
using `gnus-article-boring-faces'.
|
|
||||||
|
|
||||||
This feature is especially useful if you read many articles that consist
|
|
||||||
of a little new content at the top with a long, untrimmed message cited
|
|
||||||
below.
|
|
||||||
|
|
||||||
** Smileys (`:-)', `;-)' etc) are now displayed graphically in Emacs too.
|
|
||||||
|
|
||||||
Put `(setq gnus-treat-display-smileys nil)' in `~/.gnus.el' to disable
|
|
||||||
it.
|
|
||||||
|
|
||||||
** Face headers handling. *Note Face::.
|
|
||||||
|
|
||||||
** In the summary buffer, the new command `/ N' inserts new messages and `/
|
|
||||||
o' inserts old messages.
|
|
||||||
|
|
||||||
** Gnus decodes morse encoded messages if you press `W m'.
|
|
||||||
|
|
||||||
** `gnus-summary-line-format'
|
|
||||||
|
|
||||||
The default value changed to `%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n'.
|
|
||||||
Moreover `gnus-extra-headers', `nnmail-extra-headers' and
|
|
||||||
`gnus-ignored-from-addresses' changed their default so that the users
|
|
||||||
name will be replaced by the recipient's name or the group name posting
|
|
||||||
to for NNTP groups.
|
|
||||||
|
|
||||||
** Deleting of attachments.
|
|
||||||
|
|
||||||
The command `gnus-mime-save-part-and-strip' (bound to `C-o' on MIME
|
|
||||||
buttons) saves a part and replaces the part with an external one.
|
|
||||||
`gnus-mime-delete-part' (bound to `d' on MIME buttons) removes a part.
|
|
||||||
It works only on back ends that support editing.
|
|
||||||
|
|
||||||
** `gnus-default-charset'
|
|
||||||
|
|
||||||
The default value is determined from the `current-language-environment'
|
|
||||||
variable, instead of `iso-8859-1'. Also the `.*' item in
|
|
||||||
`gnus-group-charset-alist' is removed.
|
|
||||||
|
|
||||||
** Printing capabilities are enhanced.
|
|
||||||
|
|
||||||
Gnus supports Muttprint natively with `O P' from the Summary and Article
|
|
||||||
buffers. Also, each individual MIME part can be printed using `p' on
|
|
||||||
the MIME button.
|
|
||||||
|
|
||||||
** Extended format specs.
|
|
||||||
|
|
||||||
Format spec `%&user-date;' is added into
|
|
||||||
`gnus-summary-line-format-alist'. Also, user defined extended format
|
|
||||||
specs are supported. The extended format specs look like `%u&foo;',
|
|
||||||
which invokes function `gnus-user-format-function-FOO'. Because `&' is
|
|
||||||
used as the escape character, old user defined format `%u&' is no longer
|
|
||||||
supported.
|
|
||||||
|
|
||||||
** `/ *' (`gnus-summary-limit-include-cached') is rewritten.
|
|
||||||
|
|
||||||
It was aliased to `Y c' (`gnus-summary-insert-cached-articles'). The
|
|
||||||
new function filters out other articles.
|
|
||||||
|
|
||||||
** Some limiting commands accept a `C-u' prefix to negate the match.
|
|
||||||
|
|
||||||
If `C-u' is used on subject, author or extra headers, i.e., `/ s', `/
|
|
||||||
a', and `/ x' (`gnus-summary-limit-to-{subject,author,extra}')
|
|
||||||
respectively, the result will be to display all articles that do not
|
|
||||||
match the expression.
|
|
||||||
|
|
||||||
** Gnus inlines external parts (message/external).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Changes in Message mode and related Gnus features
|
* Changes in Message mode
|
||||||
|
|
||||||
** Delayed articles
|
** Gnus now supports the "hashcash" client puzzle anti-spam mechanism. Use
|
||||||
|
`(setq message-generate-hashcash t)' to enable. *Note Hashcash::.
|
||||||
You can delay the sending of a message with `C-c C-j' in the Message
|
|
||||||
buffer. The messages are delivered at specified time. This is useful
|
|
||||||
for sending yourself reminders. *Note Delayed Articles::.
|
|
||||||
|
|
||||||
** If the new option `nnml-use-compressed-files' is non-`nil', the nnml
|
|
||||||
back end allows compressed message files.
|
|
||||||
|
|
||||||
** The new option `gnus-gcc-mark-as-read' automatically marks Gcc articles
|
|
||||||
as read.
|
|
||||||
|
|
||||||
** Externalizing of attachments
|
|
||||||
|
|
||||||
If `gnus-gcc-externalize-attachments' or
|
|
||||||
`message-fcc-externalize-attachments' is non-`nil', attach local files
|
|
||||||
as external parts.
|
|
||||||
|
|
||||||
** The envelope sender address can be customized when using Sendmail.
|
|
||||||
*Note Mail Variables: (message)Mail Variables.
|
|
||||||
|
|
||||||
** Gnus no longer generate the Sender: header automatically.
|
|
||||||
|
|
||||||
Earlier it was generated when the user configurable email address was
|
|
||||||
different from the Gnus guessed default user address. As the guessing
|
|
||||||
algorithm is rarely correct these days, and (more controversially) the
|
|
||||||
only use of the Sender: header was to check if you are entitled to
|
|
||||||
cancel/supersede news (which is now solved by Cancel Locks instead, see
|
|
||||||
another entry), generation of the header has been disabled by default.
|
|
||||||
See the variables `message-required-headers',
|
|
||||||
`message-required-news-headers', and `message-required-mail-headers'.
|
|
||||||
|
|
||||||
** Features from third party `message-utils.el' added to `message.el'.
|
|
||||||
|
|
||||||
Message now asks if you wish to remove `(was: <old subject>)' from
|
|
||||||
subject lines (see `message-subject-trailing-was-query'). `C-c M-m' and
|
|
||||||
`C-c M-f' inserts markers indicating included text. `C-c C-f a' adds a
|
|
||||||
X-No-Archive: header. `C-c C-f x' inserts appropriate headers and a
|
|
||||||
note in the body for cross-postings and followups (see the variables
|
|
||||||
`message-cross-post-*').
|
|
||||||
|
|
||||||
** References and X-Draft-From headers are no longer generated when you
|
|
||||||
start composing messages and `message-generate-headers-first' is `nil'.
|
|
||||||
|
|
||||||
** Easy inclusion of X-Faces headers. *Note X-Face::.
|
|
||||||
|
|
||||||
** Group Carbon Copy (GCC) quoting
|
|
||||||
|
|
||||||
To support groups that contains SPC and other weird characters, groups
|
|
||||||
are quoted before they are placed in the Gcc: header. This means
|
|
||||||
variables such as `gnus-message-archive-group' should no longer contain
|
|
||||||
quote characters to make groups containing SPC work. Also, if you are
|
|
||||||
using the string `nnml:foo, nnml:bar' (indicating Gcc into two groups)
|
|
||||||
you must change it to return the list `("nnml:foo" "nnml:bar")',
|
|
||||||
otherwise the Gcc: line will be quoted incorrectly. Note that returning
|
|
||||||
the string `nnml:foo, nnml:bar' was incorrect earlier, it just didn't
|
|
||||||
generate any problems since it was inserted directly.
|
|
||||||
|
|
||||||
** `message-insinuate-rmail'
|
|
||||||
|
|
||||||
Adding `(message-insinuate-rmail)' and `(setq mail-user-agent
|
|
||||||
'gnus-user-agent)' in `.emacs' convinces Rmail to compose, reply and
|
|
||||||
forward messages in message-mode, where you can enjoy the power of MML.
|
|
||||||
|
|
||||||
** `message-minibuffer-local-map'
|
|
||||||
|
|
||||||
The line below enables BBDB in resending a message:
|
|
||||||
(define-key message-minibuffer-local-map [(tab)]
|
|
||||||
'bbdb-complete-name)
|
|
||||||
|
|
||||||
** `gnus-posting-styles'
|
|
||||||
|
|
||||||
Add a new format of match like
|
|
||||||
((header "to" "larsi.*org")
|
|
||||||
(Organization "Somewhere, Inc."))
|
|
||||||
The old format like the lines below is obsolete, but still accepted.
|
|
||||||
(header "to" "larsi.*org"
|
|
||||||
(Organization "Somewhere, Inc."))
|
|
||||||
|
|
||||||
** `message-ignored-news-headers' and `message-ignored-mail-headers'
|
|
||||||
|
|
||||||
`X-Draft-From' and `X-Gnus-Agent-Meta-Information' have been added into
|
|
||||||
these two variables. If you customized those, perhaps you need add
|
|
||||||
those two headers too.
|
|
||||||
|
|
||||||
** Gnus supports the "format=flowed" (RFC 2646) parameter. On composing
|
|
||||||
messages, it is enabled by `use-hard-newlines'. Decoding format=flowed
|
|
||||||
was present but not documented in earlier versions.
|
|
||||||
|
|
||||||
** The option `mm-fill-flowed' can be used to disable treatment of
|
|
||||||
"format=flowed" messages. Also, flowed text is disabled when sending
|
|
||||||
inline PGP signed messages. (New in Gnus 5.10.7)
|
|
||||||
|
|
||||||
** Gnus supports the generation of RFC 2298 Disposition Notification
|
|
||||||
requests.
|
|
||||||
|
|
||||||
This is invoked with the `C-c M-n' key binding from message mode.
|
|
||||||
|
|
||||||
** Message supports the Importance: (RFC 2156) header.
|
|
||||||
|
|
||||||
In the message buffer, `C-c C-f C-i' or `C-c C-u' cycles through the
|
|
||||||
valid values.
|
|
||||||
|
|
||||||
** Gnus supports Cancel Locks in News.
|
|
||||||
|
|
||||||
This means a header `Cancel-Lock' is inserted in news posting. It is
|
|
||||||
used to determine if you wrote an article or not (for canceling and
|
|
||||||
superseding). Gnus generates a random password string the first time
|
|
||||||
you post a message, and saves it in your `~/.emacs' using the Custom
|
|
||||||
system. While the variable is called `canlock-password', it is not
|
|
||||||
security sensitive data. Publishing your canlock string on the web will
|
|
||||||
not allow anyone to be able to anything she could not already do. The
|
|
||||||
behavior can be changed by customizing `message-insert-canlock'.
|
|
||||||
|
|
||||||
** Gnus supports PGP (RFC 1991/2440), PGP/MIME (RFC 2015/3156) and S/MIME
|
|
||||||
(RFC 2630-2633).
|
|
||||||
|
|
||||||
It needs an external S/MIME and OpenPGP implementation, but no
|
|
||||||
additional Lisp libraries. This add several menu items to the
|
|
||||||
Attachments menu, and `C-c RET' key bindings, when composing messages.
|
|
||||||
This also obsoletes `gnus-article-hide-pgp-hook'.
|
|
||||||
|
|
||||||
** MML (Mime compose) prefix changed from `M-m' to `C-c C-m'.
|
|
||||||
|
|
||||||
This change was made to avoid conflict with the standard binding of
|
|
||||||
`back-to-indentation', which is also useful in message mode.
|
|
||||||
|
|
||||||
** The default for `message-forward-show-mml' changed to the symbol `best'.
|
|
||||||
|
|
||||||
The behavior for the `best' value is to show MML (i.e., convert to MIME)
|
|
||||||
when appropriate. MML will not be used when forwarding signed or
|
|
||||||
encrypted messages, as the conversion invalidate the digital signature.
|
|
||||||
|
|
||||||
** If `auto-compression-mode' is enabled, attachments are automatically
|
|
||||||
decompressed when activated.
|
|
||||||
|
|
||||||
** Support for non-ASCII domain names
|
|
||||||
|
|
||||||
Message supports non-ASCII domain names in From:, To: and Cc: and will
|
|
||||||
query you whether to perform encoding when you try to send a message.
|
|
||||||
The variable `message-use-idna' controls this. Gnus will also decode
|
|
||||||
non-ASCII domain names in From:, To: and Cc: when you view a message.
|
|
||||||
The variable `gnus-use-idna' controls this.
|
|
||||||
|
|
||||||
** You can now drag and drop attachments to the Message buffer. See
|
** You can now drag and drop attachments to the Message buffer. See
|
||||||
`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note MIME:
|
`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note MIME:
|
||||||
(message)MIME.
|
(message)MIME.
|
||||||
|
|
||||||
|
** The option `message-yank-empty-prefix' now controls how empty lines are
|
||||||
|
prefixed in cited text. *Note Insertion Variables: (message)Insertion
|
||||||
|
Variables.
|
||||||
|
|
||||||
|
** Gnus uses narrowing to hide headers in Message buffers. The
|
||||||
|
`References' header is hidden by default. To make all headers visible,
|
||||||
|
use `(setq message-hidden-headers nil)'. *Note Message Headers:
|
||||||
|
(message)Message Headers.
|
||||||
|
|
||||||
|
** You can highlight different levels of citations like in the article
|
||||||
|
buffer. See `gnus-message-highlight-citation'.
|
||||||
|
|
||||||
|
** `auto-fill-mode' is enabled by default in Message mode. See
|
||||||
|
`message-fill-column'. *Note Message Headers: (message)Various Message
|
||||||
|
Variables.
|
||||||
|
|
||||||
|
** You can now store signature files in a special directory named
|
||||||
|
`message-signature-directory'.
|
||||||
|
|
||||||
|
** The option `message-citation-line-format' controls the format of the
|
||||||
|
"Whomever writes:" line. You need to set
|
||||||
|
`message-citation-line-function' to
|
||||||
|
`message-insert-formated-citation-line' as well.
|
||||||
|
|
||||||
|
|
||||||
* Changes in back ends
|
* Changes in back ends
|
||||||
|
|
||||||
** Gnus can display RSS newsfeeds as a newsgroup. *Note RSS::.
|
** The nntp back end stores article marks in `~/News/marks'.
|
||||||
|
|
||||||
** The nndoc back end now supports mailman digests and exim bounces.
|
The directory can be changed using the (customizable) variable
|
||||||
|
`nntp-marks-directory', and marks can be disabled using the (back end)
|
||||||
|
variable `nntp-marks-is-evil'. The advantage of this is that you can
|
||||||
|
copy `~/News/marks' (using rsync, scp or whatever) to another Gnus
|
||||||
|
installation, and it will realize what articles you have read and
|
||||||
|
marked. The data in `~/News/marks' has priority over the same data in
|
||||||
|
`~/.newsrc.eld'.
|
||||||
|
|
||||||
** Gnus supports Maildir groups.
|
** You can import and export your RSS subscriptions from OPML files. *Note
|
||||||
|
RSS::.
|
||||||
|
|
||||||
Gnus includes a new back end `nnmaildir.el'. *Note Maildir::.
|
** IMAP identity (RFC 2971) is supported.
|
||||||
|
|
||||||
** The nnml and nnfolder back ends store marks for each groups.
|
By default, Gnus does not send any information about itself, but you can
|
||||||
|
customize it using the variable `nnimap-id'.
|
||||||
|
|
||||||
This makes it possible to take backup of nnml/nnfolder servers/groups
|
** The `nnrss' back end now supports multilingual text. Non-ASCII group
|
||||||
separately of `~/.newsrc.eld', while preserving marks. It also makes it
|
names for the `nnrss' groups are also supported. *Note RSS::.
|
||||||
possible to share articles and marks between users (without sharing the
|
|
||||||
`~/.newsrc.eld' file) within e.g. a department. It works by storing the
|
|
||||||
marks stored in `~/.newsrc.eld' in a per-group file `.marks' (for nnml)
|
|
||||||
and `GROUPNAME.mrk' (for nnfolder, named GROUPNAME). If the
|
|
||||||
nnml/nnfolder is moved to another machine, Gnus will automatically use
|
|
||||||
the `.marks' or `.mrk' file instead of the information in
|
|
||||||
`~/.newsrc.eld'. The new server variables `nnml-marks-is-evil' and
|
|
||||||
`nnfolder-marks-is-evil' can be used to disable this feature.
|
|
||||||
|
|
||||||
|
** Retrieving mail with POP3 is supported over SSL/TLS and with StartTLS.
|
||||||
|
|
||||||
|
** The nnml back end allows other compression programs beside `gzip' for
|
||||||
|
compressed message files. *Note Mail Spool::.
|
||||||
|
|
||||||
|
** The nnml back end supports group compaction.
|
||||||
|
|
||||||
|
This feature, accessible via the functions `gnus-group-compact-group'
|
||||||
|
(`G z' in the group buffer) and `gnus-server-compact-server' (`z' in the
|
||||||
|
server buffer) renumbers all articles in a group, starting from 1 and
|
||||||
|
removing gaps. As a consequence, you get a correct total article count
|
||||||
|
(until messages are deleted again).
|
||||||
|
|
||||||
|
|
||||||
* Appearance
|
* Appearance
|
||||||
|
|
||||||
** The menu bar item (in Group and Summary buffer) named "Misc" has been
|
** The tool bar has been updated to use GNOME icons. You can also
|
||||||
renamed to "Gnus".
|
customize the tool bar. There's no documentation in the manual yet, but
|
||||||
|
`M-x customize-apropos RET -tool-bar$' should get you started. (Only
|
||||||
** The menu bar item (in Message mode) named "MML" has been renamed to
|
for Emacs, not in XEmacs.)
|
||||||
"Attachments". Note that this menu also contains security related
|
|
||||||
stuff, like signing and encryption (*note Security: (message)Security.).
|
|
||||||
|
|
||||||
** The tool bars have been updated to use GNOME icons in Group, Summary and
|
|
||||||
Message mode. You can also customize the tool bars. This is a new
|
|
||||||
feature in Gnus 5.10.9. (Only for Emacs, not in XEmacs.)
|
|
||||||
|
|
||||||
** The tool bar icons are now (de)activated correctly in the group buffer,
|
** The tool bar icons are now (de)activated correctly in the group buffer,
|
||||||
see the variable `gnus-group-update-tool-bar'. Its default value
|
see the variable `gnus-group-update-tool-bar'. Its default value
|
||||||
depends on your Emacs version. This is a new feature in Gnus 5.10.9.
|
depends on your Emacs version.
|
||||||
|
|
||||||
|
** You can change the location of XEmacs' toolbars in Gnus buffers. See
|
||||||
|
`gnus-use-toolbar' and `message-use-toolbar'.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Miscellaneous changes
|
* Miscellaneous changes
|
||||||
|
|
||||||
** `gnus-agent'
|
** Having edited the select-method for the foreign server in the server
|
||||||
|
buffer is immediately reflected to the subscription of the groups which
|
||||||
|
use the server in question. For instance, if you change
|
||||||
|
`nntp-via-address' into `bar.example.com' from `foo.example.com', Gnus
|
||||||
|
will connect to the news host by way of the intermediate host
|
||||||
|
`bar.example.com' from next time.
|
||||||
|
|
||||||
The Gnus Agent has seen a major updated and is now enabled by default,
|
** The `all.SCORE' file can be edited from the group buffer using `W e'.
|
||||||
and all nntp and nnimap servers from `gnus-select-method' and
|
|
||||||
`gnus-secondary-select-method' are agentized by default. Earlier only
|
|
||||||
the server in `gnus-select-method' was agentized by the default, and the
|
|
||||||
agent was disabled by default. When the agent is enabled, headers are
|
|
||||||
now also retrieved from the Agent cache instead of the back ends when
|
|
||||||
possible. Earlier this only happened in the unplugged state. You can
|
|
||||||
enroll or remove servers with `J a' and `J r' in the server buffer.
|
|
||||||
Gnus will not download articles into the Agent cache, unless you
|
|
||||||
instruct it to do so, though, by using `J u' or `J s' from the Group
|
|
||||||
buffer. You revert to the old behavior of having the Agent disabled
|
|
||||||
with `(setq gnus-agent nil)'. Note that putting `(gnus-agentize)' in
|
|
||||||
`~/.gnus.el' is not needed any more.
|
|
||||||
|
|
||||||
** Gnus reads the NOV and articles in the Agent if plugged.
|
|
||||||
|
|
||||||
If one reads an article while plugged, and the article already exists in
|
|
||||||
the Agent, it won't get downloaded once more. `(setq gnus-agent-cache
|
|
||||||
nil)' reverts to the old behavior.
|
|
||||||
|
|
||||||
** Dired integration
|
|
||||||
|
|
||||||
`gnus-dired-minor-mode' (see *Note Other modes::) installs key bindings
|
|
||||||
in dired buffers to send a file as an attachment, open a file using the
|
|
||||||
appropriate mailcap entry, and print a file using the mailcap entry.
|
|
||||||
|
|
||||||
** The format spec `%C' for positioning point has changed to `%*'.
|
|
||||||
|
|
||||||
** `gnus-slave-unplugged'
|
|
||||||
|
|
||||||
A new command which starts Gnus offline in slave mode.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
11
etc/MACHINES
11
etc/MACHINES
|
@ -1158,17 +1158,6 @@ Sun 3, Sun 4 (sparc), Sun 386 (m68k-sun-sunos, sparc-sun-sunos, i386-sun-sunos,
|
||||||
src/s/sunos4-1.h to src/config.h. This problem is due to obsolete
|
src/s/sunos4-1.h to src/config.h. This problem is due to obsolete
|
||||||
software in the nonshared standard library.
|
software in the nonshared standard library.
|
||||||
|
|
||||||
If you want to use SunWindows, define HAVE_SUN_WINDOWS
|
|
||||||
in config.h to enable a special interface called `emacstool'.
|
|
||||||
The definition must *precede* the #include "machine.h".
|
|
||||||
System version 3.2 is required for this facility to work.
|
|
||||||
|
|
||||||
We recommend that you instead use the X window system, which
|
|
||||||
has technical advantages, is an industry standard, and is also
|
|
||||||
free software. The FSF does not support the SunWindows code;
|
|
||||||
we installed it only on the understanding we would not let it
|
|
||||||
divert our efforts from what we think is important.
|
|
||||||
|
|
||||||
If you are compiling for X windows, and the X window library was
|
If you are compiling for X windows, and the X window library was
|
||||||
compiled to use the 68881, then you must edit config.h according
|
compiled to use the 68881, then you must edit config.h according
|
||||||
the comments at the end of `src/m/sun3.h'.
|
the comments at the end of `src/m/sun3.h'.
|
||||||
|
|
74
etc/NEWS
74
etc/NEWS
|
@ -28,11 +28,16 @@ so we will look at it and add it to the manual.
|
||||||
|
|
||||||
** The default X toolkit is now Gtk+, rather than Lucid.
|
** The default X toolkit is now Gtk+, rather than Lucid.
|
||||||
|
|
||||||
|
** The Mac Carbon port is no longer supported.
|
||||||
|
Instead, use... [what?]
|
||||||
|
|
||||||
** configure now checks for libgif before libungif when searching for
|
** configure now checks for libgif before libungif when searching for
|
||||||
a GIF library.
|
a GIF library.
|
||||||
|
|
||||||
** Support for systems without alloca has been removed.
|
** Support for systems without alloca has been removed.
|
||||||
|
|
||||||
|
** Support for Sun windows has been removed.
|
||||||
|
|
||||||
** The `emacstool' utility has been removed.
|
** The `emacstool' utility has been removed.
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,6 +123,11 @@ following arguments.
|
||||||
|
|
||||||
* Editing Changes in Emacs 23.1
|
* Editing Changes in Emacs 23.1
|
||||||
|
|
||||||
|
+++
|
||||||
|
** C-M-% now shows replacement as it would look in the buffer, with
|
||||||
|
`\N' and `\&' substituted according to the match. Old behavior can be
|
||||||
|
restored by customizing `query-replace-show-replacement'.
|
||||||
|
|
||||||
+++
|
+++
|
||||||
** M-q now fills the region if the region is active and
|
** M-q now fills the region if the region is active and
|
||||||
`transient-mark-mode' is turned on. Otherwise, it fills the current
|
`transient-mark-mode' is turned on. Otherwise, it fills the current
|
||||||
|
@ -163,9 +173,39 @@ its usage.
|
||||||
|
|
||||||
** minibuffer-indicate-depth-mode shows the minibuffer depth in the prompt.
|
** minibuffer-indicate-depth-mode shows the minibuffer depth in the prompt.
|
||||||
|
|
||||||
|
** Remember Mode (remember.el) is now included with Emacs. It is a
|
||||||
|
mode for quickly jotting down things to remember. Included with
|
||||||
|
remember.el is a backend that can save notes to a Diary file. Please
|
||||||
|
consult the Remember Manual for usage details.
|
||||||
|
|
||||||
|
|
||||||
* Changes in Specialized Modes and Packages in Emacs 23.1
|
* Changes in Specialized Modes and Packages in Emacs 23.1
|
||||||
|
|
||||||
|
** abbrev was rewritten in Elisp and extended with more flexibility.
|
||||||
|
*** New functions: abbrev-get, abbrev-put, abbrev-table-get, abbrev-table-put,
|
||||||
|
abbrev-table-p.
|
||||||
|
*** Special hook `abbrev-expand-functions' obsoletes `pre-abbrev-expand-hook'.
|
||||||
|
*** `make-abbrev-table', `define-abbrev', `define-abbrev-table' all take
|
||||||
|
extra arguments for arbitrary properties.
|
||||||
|
*** New variable `abbrev-minor-mode-table-alist'.
|
||||||
|
*** `local-abbrev-table' can hold a list of abbrev-tables.
|
||||||
|
*** Abbrevs have now the following special properties:
|
||||||
|
`:count', `:system', `:enable-function', `:case-fixed'.
|
||||||
|
*** Abbrev-tables have now the following special properties:
|
||||||
|
`:parents', `:case-fixed', `:enable-function', `:regexp',
|
||||||
|
`abbrev-table-modiff'.
|
||||||
|
|
||||||
|
** Help mode.
|
||||||
|
*** New macro `with-help-window' should set up help windows better
|
||||||
|
than `with-output-to-temp-buffer' with `print-help-return-message'.
|
||||||
|
*** New option `help-window-select' permits to customize whether help
|
||||||
|
window shall be automatically selected when invoking help.
|
||||||
|
*** New variable `help-window-point-marker' permits to specify new
|
||||||
|
position of point in help window (for example in `view-lossage').
|
||||||
|
|
||||||
|
** view-remove-frame-by-deleting is now by default t
|
||||||
|
since users found iconification of view-mode frames distracting.
|
||||||
|
|
||||||
** isearch can now search through multiple ChangeLog files.
|
** isearch can now search through multiple ChangeLog files.
|
||||||
When running isearch in a ChangeLog file, if the search fails,
|
When running isearch in a ChangeLog file, if the search fails,
|
||||||
then another C-s tries searching the previous ChangeLog,
|
then another C-s tries searching the previous ChangeLog,
|
||||||
|
@ -267,6 +307,9 @@ that either version can be used as inferior Python by python.el.
|
||||||
|
|
||||||
*** The variable `fortran-line-length' can change the fixed-form line-length.
|
*** The variable `fortran-line-length' can change the fixed-form line-length.
|
||||||
|
|
||||||
|
*** In Fortran mode, M-; is now bound to the standard comment-dwim,
|
||||||
|
rather than fortran-indent-comment.
|
||||||
|
|
||||||
+++
|
+++
|
||||||
*** (The increasingly misnamed) F90 mode supports Fortran 2003 syntax.
|
*** (The increasingly misnamed) F90 mode supports Fortran 2003 syntax.
|
||||||
|
|
||||||
|
@ -292,15 +335,44 @@ of Windows with third party IPv6 stacks installed. Previously IPv6 was
|
||||||
supported on other platforms, but not on Windows due to using the winsock
|
supported on other platforms, but not on Windows due to using the winsock
|
||||||
1.1 header file, even though Emacs was linking to the winsock 2 library.
|
1.1 header file, even though Emacs was linking to the winsock 2 library.
|
||||||
|
|
||||||
|
** More keys available on MS-Windows.
|
||||||
|
Keys normally associated with IMEs, and some exotic keys not normally found
|
||||||
|
on standard keyboards have been given names so they can be bound to functions
|
||||||
|
inside Emacs. If there are keys on your keyboard that have not been exposed
|
||||||
|
to Emacs in the past, try C-h k to see if they are available now.
|
||||||
|
|
||||||
|
Emacs can now bind functions to the extra buttons for media player and
|
||||||
|
browser control present on some keyboards. These buttons are disabled
|
||||||
|
by default, since enabling them prevents their system-wide use when
|
||||||
|
Emacs has focus. To enable them, set the variable
|
||||||
|
w32-pass-multimedia-buttons to nil. See the doc string of that variable
|
||||||
|
for the list of extra keys that are available.
|
||||||
|
|
||||||
* Incompatible Lisp Changes in Emacs 23.1
|
* Incompatible Lisp Changes in Emacs 23.1
|
||||||
|
|
||||||
+++
|
+++
|
||||||
** The function `dired-call-process' has been removed.
|
** The function `dired-call-process' has been removed.
|
||||||
|
|
||||||
|
** The variable `byte-compile-warnings' can now be a list starting with `not',
|
||||||
|
meaning to disable the specified warnings. The meaning of this list
|
||||||
|
may therefore be the reverse of what you expect (of course, this is
|
||||||
|
only an issue if you make use of the new `not' syntax). Rather than
|
||||||
|
checking/manipulating elements directly, use the new functions
|
||||||
|
`byte-compile-warning-enabled-p', `byte-compile-disable-warning', and
|
||||||
|
`byte-compile-enable-warning.'
|
||||||
|
|
||||||
|
** shell.el no longer defines the aliases `dirtrack-toggle' and
|
||||||
|
`dirtrack-mode' for `shell-dirtrack-mode'. These names were removed
|
||||||
|
because they clash with commands provided by dirtrack.el. Use
|
||||||
|
`shell-dirtrack-mode' instead.
|
||||||
|
|
||||||
|
|
||||||
* Lisp Changes in Emacs 23.1
|
* Lisp Changes in Emacs 23.1
|
||||||
|
|
||||||
|
+++
|
||||||
|
** New function `match-substitute-replacement' returns the result of
|
||||||
|
`replace-match' without actually using it in the buffer.
|
||||||
|
|
||||||
+++
|
+++
|
||||||
** A list of default values can be specified for the DEFAULT argument of
|
** A list of default values can be specified for the DEFAULT argument of
|
||||||
functions `read-from-minibuffer', `read-string', `read-command',
|
functions `read-from-minibuffer', `read-string', `read-command',
|
||||||
|
@ -319,6 +391,8 @@ applies before function-key-map. Also it is terminal-local contrary to
|
||||||
key-translation-map. Terminal-specific key-sequences are generally added to
|
key-translation-map. Terminal-specific key-sequences are generally added to
|
||||||
this map rather than to function-key-map now.
|
this map rather than to function-key-map now.
|
||||||
|
|
||||||
|
** The new function `read-color' reads a color name using the minibuffer.
|
||||||
|
|
||||||
** Changes related to multiple tty support.
|
** Changes related to multiple tty support.
|
||||||
|
|
||||||
*** $TERM is now set to `dumb' for subprocesses. If you want to know the
|
*** $TERM is now set to `dumb' for subprocesses. If you want to know the
|
||||||
|
|
33
etc/NEWS.22
33
etc/NEWS.22
|
@ -34,6 +34,7 @@ below. Emacs tries to warn you about these through `bad-packages-alist'.
|
||||||
** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
|
** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
|
||||||
|
|
||||||
** cua.el, cua-mode.el: remove old versions.
|
** cua.el, cua-mode.el: remove old versions.
|
||||||
|
|
||||||
|
|
||||||
* Installation Changes in Emacs 22.2
|
* Installation Changes in Emacs 22.2
|
||||||
|
|
||||||
|
@ -41,15 +42,6 @@ below. Emacs tries to warn you about these through `bad-packages-alist'.
|
||||||
|
|
||||||
* Changes in Emacs 22.2
|
* Changes in Emacs 22.2
|
||||||
|
|
||||||
** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs.
|
|
||||||
|
|
||||||
** `bad-packages-alist' will warn about external packages that are known
|
|
||||||
to cause problems in this version of Emacs.
|
|
||||||
|
|
||||||
** The values of `dired-recursive-deletes' and `dired-recursive-copies'
|
|
||||||
have been changed to `top'. This means that the user is asked once,
|
|
||||||
before deleting/copying the indicated directory recursively.
|
|
||||||
|
|
||||||
** In Image mode, whenever the displayed image is wider and/or higher
|
** In Image mode, whenever the displayed image is wider and/or higher
|
||||||
than the window, the usual keys for moving the cursor cause the image
|
than the window, the usual keys for moving the cursor cause the image
|
||||||
to be scrolled horizontally or vertically instead.
|
to be scrolled horizontally or vertically instead.
|
||||||
|
@ -66,6 +58,15 @@ Windows installations. Users of software which modifies the behaviour of
|
||||||
Windows to cause focus to follow the mouse will now need to explicitly set
|
Windows to cause focus to follow the mouse will now need to explicitly set
|
||||||
this variable.
|
this variable.
|
||||||
|
|
||||||
|
** `bad-packages-alist' will warn about external packages that are known
|
||||||
|
to cause problems in this version of Emacs.
|
||||||
|
|
||||||
|
** The values of `dired-recursive-deletes' and `dired-recursive-copies'
|
||||||
|
have been changed to `top'. This means that the user is asked once,
|
||||||
|
before deleting/copying the indicated directory recursively.
|
||||||
|
|
||||||
|
** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs.
|
||||||
|
|
||||||
** The command gdba has been removed as gdb works now for those cases where it
|
** The command gdba has been removed as gdb works now for those cases where it
|
||||||
was needed. In text command mode, if you have problems before execution has
|
was needed. In text command mode, if you have problems before execution has
|
||||||
started, use M-x gud-gdb.
|
started, use M-x gud-gdb.
|
||||||
|
@ -105,7 +106,8 @@ This can be used to add menu entries for backend specific functions.
|
||||||
* Lisp Changes in Emacs 22.2.
|
* Lisp Changes in Emacs 22.2.
|
||||||
|
|
||||||
** Frame-local variables are deprecated and are slated for removal.
|
** Frame-local variables are deprecated and are slated for removal.
|
||||||
Use frame parameters instead.
|
Use frame parameters instead.
|
||||||
|
|
||||||
** The function invisible-p returns non-nil if the character
|
** The function invisible-p returns non-nil if the character
|
||||||
after a specified position is invisible.
|
after a specified position is invisible.
|
||||||
|
|
||||||
|
@ -120,9 +122,16 @@ as its frame.
|
||||||
** The new function `image-refresh' refreshes all images associated
|
** The new function `image-refresh' refreshes all images associated
|
||||||
with a given image specification.
|
with a given image specification.
|
||||||
|
|
||||||
** The new function `split-string-and-unquote' does (what?)
|
** The new function `combine-and-quote-strings' concatenates a list of strings
|
||||||
|
using a specified separator. If a string contains double quotes, they
|
||||||
|
are escaped in the output.
|
||||||
|
|
||||||
|
** The new function `split-string-and-unquote' performs the inverse operation to
|
||||||
|
`combine-and-quote-strings', i.e. splits a single string into a list
|
||||||
|
of strings, undoing any quoting added by `combine-and-quote-strings'.
|
||||||
|
(For some separator/string combinations, the original strings cannot
|
||||||
|
be recovered.)
|
||||||
|
|
||||||
** The new function `combine-and-quote-strings' does (what?)
|
|
||||||
|
|
||||||
* Installation Changes in Emacs 22.1
|
* Installation Changes in Emacs 22.1
|
||||||
|
|
||||||
|
|
27
etc/README
27
etc/README
|
@ -10,35 +10,8 @@ for Emacs functions and variables.
|
||||||
|
|
||||||
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
|
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
|
||||||
|
|
||||||
The files splash.xpm, splash8.xpm contain copyright and license
|
|
||||||
information, but it is reproduced here for convenience.
|
|
||||||
|
|
||||||
Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm, gnus-logo.eps
|
|
||||||
Author: Luis Fernandes <elf@ee.ryerson.ca>
|
|
||||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
|
||||||
Free Software Foundation, Inc.
|
|
||||||
License: GNU General Public License version 3 or later (see COPYING)
|
|
||||||
|
|
||||||
File: emacs.icon
|
File: emacs.icon
|
||||||
Author: Sun Microsystems, Inc
|
Author: Sun Microsystems, Inc
|
||||||
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
License: GNU General Public License version 3 or later (see COPYING)
|
License: GNU General Public License version 3 or later (see COPYING)
|
||||||
|
|
||||||
|
|
||||||
This file is part of GNU Emacs.
|
|
||||||
|
|
||||||
GNU Emacs is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
GNU Emacs is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GNU Emacs; see the file COPYING. If not, write to the
|
|
||||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA.
|
|
||||||
|
|
51
etc/gnus/gnus-setup.ast
Normal file
51
etc/gnus/gnus-setup.ast
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
@title Configuring Gnus for the first time
|
||||||
|
|
||||||
|
@node What do you want to do with Gnus?
|
||||||
|
|
||||||
|
@variable outbound (:radio ((item :tag "Send mail via sendmail" "sendmail") (item :tag "Send mail via SMTP" "smtp"))) "sendmail"
|
||||||
|
|
||||||
|
@variable backends (:set ((item :tag "Read news via NNTP" "nntp") (item :tag "Read mail, store it locally" "nnml") (item :tag "Read mail and store it on an IMAP server" "nnimap"))) (list "nnml")
|
||||||
|
@result primary-mail-selections (list backends outbound)
|
||||||
|
|
||||||
|
@text
|
||||||
|
Welcome to Gnus. You need to tell us what you want to do with Gnus
|
||||||
|
before we go on to specific configurations.
|
||||||
|
|
||||||
|
Choose the tasks you want to set up:
|
||||||
|
@variable{backends}
|
||||||
|
|
||||||
|
Choose the method Gnus will use to send mail:
|
||||||
|
@variable{outbound}
|
||||||
|
|
||||||
|
@end text
|
||||||
|
|
||||||
|
@next (member "nnml" backends) "Setting up local mail storage (nnml)"
|
||||||
|
@next (member "nntp" backends) "Setting up a NNTP server"
|
||||||
|
|
||||||
|
@node Setting up local mail storage (nnml)
|
||||||
|
@variable mechanism (:radio ((item :tag "Get mail from your Unix mbox" "mbox") (item :tag "Use POP3 to retrieve mail" "pop3"))) "mbox"
|
||||||
|
@result nnml-mechanism (list mechanism)
|
||||||
|
@text
|
||||||
|
You are setting up local mail storage, using the nnml backend in Gnus terms.
|
||||||
|
|
||||||
|
Your mail can be downloaded into Gnus in several ways, choose one:
|
||||||
|
@variable{mechanism}
|
||||||
|
|
||||||
|
@end text
|
||||||
|
|
||||||
|
@node Setting up a NNTP server
|
||||||
|
|
||||||
|
@text
|
||||||
|
TODO: this will be a real link.
|
||||||
|
Run M-x assistant and use the news-server.ast file as input.
|
||||||
|
@end text
|
||||||
|
|
||||||
|
|
||||||
|
@c Local variables:
|
||||||
|
@c mode: texinfo
|
||||||
|
@c End:
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
arch-tag: 6b7b200b-9169-4b44-8b32-b73773fa71af
|
||||||
|
@end ignore
|
||||||
|
|
64
etc/gnus/news-server.ast
Normal file
64
etc/gnus/news-server.ast
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
@title Configuring Gnus for reading news
|
||||||
|
|
||||||
|
|
||||||
|
@node Setting up the news server name and port number
|
||||||
|
@variable server :string (gnus-getenv-nntpserver)
|
||||||
|
@variable port :number 119
|
||||||
|
@validate (assistant-validate-connect-to-server server port)
|
||||||
|
@result gnus-select-method (list 'nntp server (list 'nntp-server port))
|
||||||
|
@text
|
||||||
|
Usenet news is usually read from your Internet service prodider's news
|
||||||
|
server. If you don't know the name of this server, contact your ISP.
|
||||||
|
|
||||||
|
As a guess, the name of the server might be news.yourisp.com.
|
||||||
|
|
||||||
|
Server name: @variable{server}
|
||||||
|
Port number: @variable{port}
|
||||||
|
@end text
|
||||||
|
@next t "User name and password"
|
||||||
|
|
||||||
|
|
||||||
|
@node User name and password
|
||||||
|
@type interstitial
|
||||||
|
@next
|
||||||
|
(if (assistant-password-required-p)
|
||||||
|
"Enter user name and password"
|
||||||
|
"Want user name and password?")
|
||||||
|
@end next
|
||||||
|
|
||||||
|
|
||||||
|
@node Want user name and password?
|
||||||
|
@variable passwordp (:radio ((item "Yes") (item "No"))) "No"
|
||||||
|
@text
|
||||||
|
Some news servers require that you enter a user name and a password.
|
||||||
|
It doesn't look like your news server is one of them.
|
||||||
|
|
||||||
|
Do you want to enter user name and password anyway?
|
||||||
|
|
||||||
|
@variable{passwordp}
|
||||||
|
|
||||||
|
@end text
|
||||||
|
|
||||||
|
@next (equal passwordp "No") finish
|
||||||
|
@next (not (equal passwordp "No")) "Enter user name and password"
|
||||||
|
|
||||||
|
|
||||||
|
@node Enter user name and password
|
||||||
|
@variable user-name :string (user-login-name)
|
||||||
|
@variable password :password (or (assistant-authinfo-data server port 'password) "")
|
||||||
|
@text
|
||||||
|
|
||||||
|
It looks like your news server requires you to enter a user name
|
||||||
|
and a password:
|
||||||
|
|
||||||
|
User name: @variable{user-name}
|
||||||
|
Password: @variable{user-name}
|
||||||
|
|
||||||
|
@end text
|
||||||
|
|
||||||
|
@c Local variables:
|
||||||
|
@c mode: texinfo
|
||||||
|
@c End:
|
||||||
|
|
||||||
|
@c arch tag is missing
|
||||||
|
|
39
etc/images/gnus/mail_send.xpm
Normal file
39
etc/images/gnus/mail_send.xpm
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *magick[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"24 24 9 1",
|
||||||
|
" c Gray0",
|
||||||
|
". c #675e6580613e",
|
||||||
|
"X c #8c8c7c7c6969",
|
||||||
|
"o c #9b458d377822",
|
||||||
|
"O c #a941a6459f3e",
|
||||||
|
"+ c #c8c8b2b29898",
|
||||||
|
"@ c #dadac2c2a5a5",
|
||||||
|
"# c #eb4dea2fe4ad",
|
||||||
|
"$ c None",
|
||||||
|
/* pixels */
|
||||||
|
"$$$$$$$$$$$$$$$$$$$$$$$$",
|
||||||
|
"$$$$$$$$$$$$$$$$$$$$$$$$",
|
||||||
|
"$$$$$$$$$$$$$ $$$$$$$",
|
||||||
|
"$$$$$$$$ .@#+ $$$$$$",
|
||||||
|
"$$$ .+#####@O $$$$$$",
|
||||||
|
"$$ .+##########.+O $$$$$",
|
||||||
|
"$$ @..########O.+# $$$$$",
|
||||||
|
"$$ O@O..@#####.+## $$$$$",
|
||||||
|
"$$$ ###+O.O##...##O $$$$",
|
||||||
|
"$$$ @####@+..O#O.+# $$$$",
|
||||||
|
"$$$ O####.#######.O $$$$",
|
||||||
|
"$$$$ ###+O########.O $$$",
|
||||||
|
"$$$$ ###.########@O $$$",
|
||||||
|
"$$$$ +#+O#####@O $$$$$",
|
||||||
|
"$$$$$ #.###@O $$$$$$",
|
||||||
|
"$$$$$ .O@O $$ .. $$$$$",
|
||||||
|
"$$$$$ .. $$$$ .oo. $$$$",
|
||||||
|
"$$$$$$ $$$$$ oo $$$",
|
||||||
|
"$$$$$$$$$$$$$$$ Oo $$$$$",
|
||||||
|
"$$$$$$$$$$$$$$ oOOX $$$$",
|
||||||
|
"$$$$$$$$$$$$$$ ++++ $$$$",
|
||||||
|
"$$$$$$$$$$$$$ O@@@@O $$$",
|
||||||
|
"$$$$$$$$$$$$$ $$$",
|
||||||
|
"$$$$$$$$$$$$$$$$$$$$$$$$"
|
||||||
|
};
|
24
etc/images/smilies/grayscale/blink.xpm
Normal file
24
etc/images/smilies/grayscale/blink.xpm
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * blink_xpm[] = {
|
||||||
|
"14 14 7 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #6E6E6E",
|
||||||
|
"# c #515151",
|
||||||
|
"$ c #ABABAB",
|
||||||
|
"% c #737373",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . ",
|
||||||
|
" + ",
|
||||||
|
" @#$$# + ",
|
||||||
|
" ++ + ",
|
||||||
|
" ",
|
||||||
|
" + + ",
|
||||||
|
" $+ +$ ",
|
||||||
|
" %+ +% ",
|
||||||
|
" %++++% ",
|
||||||
|
" $$$$ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/braindamaged.xpm
Normal file
23
etc/images/smilies/grayscale/braindamaged.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * braindamaged_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #ABABAB",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #515151",
|
||||||
|
"# c #171717",
|
||||||
|
"$ c #737373",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" .++..++. ",
|
||||||
|
" +@.++.@+ ",
|
||||||
|
" +.@#@@.+ ",
|
||||||
|
" +@.#@.@+ ",
|
||||||
|
" .++. ++. ",
|
||||||
|
" + + ",
|
||||||
|
" .+ +. ",
|
||||||
|
" $+ +$ ",
|
||||||
|
" $++++$ ",
|
||||||
|
" .... ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/cry.xpm
Normal file
23
etc/images/smilies/grayscale/cry.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * cry_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #ABABAB",
|
||||||
|
"# c #515151",
|
||||||
|
"$ c #6E6E6E",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . ",
|
||||||
|
" .. .+. ",
|
||||||
|
" +++. +.+ ",
|
||||||
|
" +@+ ",
|
||||||
|
" @+# ",
|
||||||
|
" @@ ",
|
||||||
|
" $++++$ ",
|
||||||
|
" .+@ @+. ",
|
||||||
|
" @+@ @+@ ",
|
||||||
|
" @ @ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
21
etc/images/smilies/grayscale/dead.xpm
Normal file
21
etc/images/smilies/grayscale/dead.xpm
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * dead_xpm[] = {
|
||||||
|
"14 14 4 1",
|
||||||
|
" c None",
|
||||||
|
". c #737373",
|
||||||
|
"+ c #ABABAB",
|
||||||
|
"@ c #000000",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" .+ +. + +. ",
|
||||||
|
" +@+@++@+@+ ",
|
||||||
|
" +@ @+ ",
|
||||||
|
" +@+@ @+@+ ",
|
||||||
|
" + +. + + ",
|
||||||
|
" ",
|
||||||
|
" +@ @+ ",
|
||||||
|
" .@ @. ",
|
||||||
|
" .@@@@. ",
|
||||||
|
" ++++ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/evil.xpm
Normal file
23
etc/images/smilies/grayscale/evil.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * evil_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #6E6E6E",
|
||||||
|
"+ c #484848",
|
||||||
|
"@ c #ABABAB",
|
||||||
|
"# c #000000",
|
||||||
|
"$ c #737373",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" .+ +. ",
|
||||||
|
" @# #@ ",
|
||||||
|
" #+ @+# ",
|
||||||
|
" #+ @+# ",
|
||||||
|
" ",
|
||||||
|
" # # ",
|
||||||
|
" @# #@ ",
|
||||||
|
" $# #$ ",
|
||||||
|
" $####$ ",
|
||||||
|
" @@@@ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/forced.xpm
Normal file
23
etc/images/smilies/grayscale/forced.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * forced_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #6E6E6E",
|
||||||
|
"# c #ABABAB",
|
||||||
|
"$ c #171717",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" @ @ ",
|
||||||
|
" +# #+ ",
|
||||||
|
" @@# #@@ ",
|
||||||
|
" #$++++++$# ",
|
||||||
|
" ######## ",
|
||||||
|
" ",
|
||||||
|
" "};
|
22
etc/images/smilies/grayscale/frown.xpm
Normal file
22
etc/images/smilies/grayscale/frown.xpm
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * frown_xpm[] = {
|
||||||
|
"14 14 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #6E6E6E",
|
||||||
|
"+ c #484848",
|
||||||
|
"@ c #ABABAB",
|
||||||
|
"# c #000000",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" .+ +. ",
|
||||||
|
" @# #@ ",
|
||||||
|
" #+ @+# ",
|
||||||
|
" #+@@+# ",
|
||||||
|
" ",
|
||||||
|
" @@ ",
|
||||||
|
" .####. ",
|
||||||
|
" +#@ @#+ ",
|
||||||
|
" @#@ @#@ ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" "};
|
25
etc/images/smilies/grayscale/grin.xpm
Normal file
25
etc/images/smilies/grayscale/grin.xpm
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * grin_xpm[] = {
|
||||||
|
"14 14 8 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #515151",
|
||||||
|
"# c #6E6E6E",
|
||||||
|
"$ c #ABABAB",
|
||||||
|
"% c #FFFFFF",
|
||||||
|
"& c #737373",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" ++@@##@@++ ",
|
||||||
|
" $+%%%%%%+$ ",
|
||||||
|
" &+%%%%+& ",
|
||||||
|
" &++++& ",
|
||||||
|
" $$$$ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/indifferent.xpm
Normal file
23
etc/images/smilies/grayscale/indifferent.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * indifferent_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #515151",
|
||||||
|
"# c #ABABAB",
|
||||||
|
"$ c #6E6E6E",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" @ #@ ",
|
||||||
|
"#+$+$ $ + ",
|
||||||
|
"$ +#+$#++$+$ ",
|
||||||
|
" $ ++# ++ ",
|
||||||
|
" + ",
|
||||||
|
" ",
|
||||||
|
" "};
|
22
etc/images/smilies/grayscale/reverse-smile.xpm
Normal file
22
etc/images/smilies/grayscale/reverse-smile.xpm
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * reverse_smile_xpm[] = {
|
||||||
|
"14 14 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #ABABAB",
|
||||||
|
"+ c #737373",
|
||||||
|
"@ c #000000",
|
||||||
|
"# c #484848",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" .... ",
|
||||||
|
" +@@@@+ ",
|
||||||
|
" +@ @+ ",
|
||||||
|
" .@ @. ",
|
||||||
|
" @ @ ",
|
||||||
|
" ",
|
||||||
|
" @ @ ",
|
||||||
|
" @ @ ",
|
||||||
|
" @ @ ",
|
||||||
|
" # # ",
|
||||||
|
" ",
|
||||||
|
" "};
|
22
etc/images/smilies/grayscale/sad.xpm
Normal file
22
etc/images/smilies/grayscale/sad.xpm
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * sad_xpm[] = {
|
||||||
|
"14 14 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #ABABAB",
|
||||||
|
"# c #6E6E6E",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" @@@@ ",
|
||||||
|
" #++++# ",
|
||||||
|
" .+@ @+. ",
|
||||||
|
" @+@ @+@ ",
|
||||||
|
" . . ",
|
||||||
|
" ",
|
||||||
|
" "};
|
22
etc/images/smilies/grayscale/smile.xpm
Normal file
22
etc/images/smilies/grayscale/smile.xpm
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * smile_xpm[] = {
|
||||||
|
"14 14 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #ABABAB",
|
||||||
|
"# c #737373",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" + + ",
|
||||||
|
" @+ +@ ",
|
||||||
|
" #+ +# ",
|
||||||
|
" #++++# ",
|
||||||
|
" @@@@ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
23
etc/images/smilies/grayscale/wry.xpm
Normal file
23
etc/images/smilies/grayscale/wry.xpm
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * wry_xpm[] = {
|
||||||
|
"14 14 6 1",
|
||||||
|
" c None",
|
||||||
|
". c #484848",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #515151",
|
||||||
|
"# c #ABABAB",
|
||||||
|
"$ c #6E6E6E",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" . . ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" + + ",
|
||||||
|
" ",
|
||||||
|
" @ ",
|
||||||
|
" ## $@ ",
|
||||||
|
" #++++++# ",
|
||||||
|
" @$ ## ",
|
||||||
|
" @ ",
|
||||||
|
" ",
|
||||||
|
" "};
|
29
etc/images/smilies/medium/blink.xpm
Normal file
29
etc/images/smilies/medium/blink.xpm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * blink_xpm[] = {
|
||||||
|
"16 16 10 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
"= c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&&&&&&*&&%. ",
|
||||||
|
" +$&&&&&&&.&&$+ ",
|
||||||
|
".@&@%##%&&.&&&@.",
|
||||||
|
".#&&&..&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".@&&=.&&&&.=&&@.",
|
||||||
|
" +$&&=....=&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/braindamaged.xpm
Normal file
28
etc/images/smilies/medium/braindamaged.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * braindamaged_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&#..##..#&%. ",
|
||||||
|
" +$&.%#..#%.&$+ ",
|
||||||
|
".@&&.#%+%%#.&&@.",
|
||||||
|
".#&&.%#+%#%.&&#.",
|
||||||
|
".$&&#..#&..#&&$.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".@&&*.&&&&.*&&@.",
|
||||||
|
" +$&&*....*&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/cry.xpm
Normal file
28
etc/images/smilies/medium/cry.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * cry_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&&&&&&*&&%. ",
|
||||||
|
" +$&&**&&*.*&$+ ",
|
||||||
|
".@&&...*&.*.&&@.",
|
||||||
|
".#&&&&&&&.#.&&#.",
|
||||||
|
".$&&&&&&&#.%&&$.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".#&&&@....@&&&#.",
|
||||||
|
".@&&*.#&&#.*&&@.",
|
||||||
|
" +$#.#&&&&#.#$+ ",
|
||||||
|
" .%&*&&&&&&*&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/dead.xpm
Normal file
28
etc/images/smilies/medium/dead.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * dead_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%*#&#*$#&#*%. ",
|
||||||
|
" +$#.#.##.#.#$+ ",
|
||||||
|
".@&&#.$&&$.#&&@.",
|
||||||
|
".#&#.#.$$.#.#&#.",
|
||||||
|
".$&*#&#*$#&#*&$.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".@&&*.&&&&.*&&@.",
|
||||||
|
" +$&&*....*&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
29
etc/images/smilies/medium/evil.xpm
Normal file
29
etc/images/smilies/medium/evil.xpm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * evil_xpm[] = {
|
||||||
|
"16 16 10 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
"= c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&@*&&&&*@&%. ",
|
||||||
|
" +$&#.&&&&.#&$+ ",
|
||||||
|
".@&&&.*&#*.&&&@.",
|
||||||
|
".#&&&.*##*.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".@&&=.&&&&.=&&@.",
|
||||||
|
" +$&&=....=&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/forced.xpm
Normal file
28
etc/images/smilies/medium/forced.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * forced_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&@&&&&&&&&@&$.",
|
||||||
|
".#&.#&&&&&&#.&#.",
|
||||||
|
".@&@@#&&&&#@@&@.",
|
||||||
|
" +$#+......+#$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/frown.xpm
Normal file
28
etc/images/smilies/medium/frown.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * frown_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&@*&&&&*@&%. ",
|
||||||
|
" +$&#.&&&&.#&$+ ",
|
||||||
|
".@&&&.*&#*.&&&@.",
|
||||||
|
".#&&&.*##*.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".#&&&@....@&&&#.",
|
||||||
|
".@&&*.#&&#.*&&@.",
|
||||||
|
" +$#.#&&&&#.#$+ ",
|
||||||
|
" .%&*&&&&&&*&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
30
etc/images/smilies/medium/grin.xpm
Normal file
30
etc/images/smilies/medium/grin.xpm
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * grin_xpm[] = {
|
||||||
|
"16 16 11 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
"= c #FFFFFF",
|
||||||
|
"- c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&..%%@@%%..&$.",
|
||||||
|
".#&#.======.#&#.",
|
||||||
|
".@&&-.====.-&&@.",
|
||||||
|
" +$&&-....-&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/indifferent.xpm
Normal file
28
etc/images/smilies/medium/indifferent.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * indifferent_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$%&&&&&&&&&#%$.",
|
||||||
|
".#.@.@&&&@&&.&#.",
|
||||||
|
".@&.#.@#..@.@&@.",
|
||||||
|
" +$@&&..#&..&$+ ",
|
||||||
|
" .%&&&&.&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
29
etc/images/smilies/medium/reverse-smile.xpm
Normal file
29
etc/images/smilies/medium/reverse-smile.xpm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * reverse_smile_xpm[] = {
|
||||||
|
"16 16 10 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #8F7B00",
|
||||||
|
"= c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" +$&&*....*&&$+ ",
|
||||||
|
".@&&*.&&&&.*&&@.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
" .%&&=&&&&=&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/sad.xpm
Normal file
28
etc/images/smilies/medium/sad.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * sad_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".#&&&@....@&&&#.",
|
||||||
|
".@&&*.#&&#.*&&@.",
|
||||||
|
" +$#.#&&&&#.#$+ ",
|
||||||
|
" .%&*&&&&&&*&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
29
etc/images/smilies/medium/smile.xpm
Normal file
29
etc/images/smilies/medium/smile.xpm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * smile_xpm[] = {
|
||||||
|
"16 16 10 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
"= c #8F7B00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&.&&&&&&&&.&$.",
|
||||||
|
".#&#.&&&&&&.#&#.",
|
||||||
|
".@&&=.&&&&.=&&@.",
|
||||||
|
" +$&&=....=&&$+ ",
|
||||||
|
" .%&&&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
28
etc/images/smilies/medium/wry.xpm
Normal file
28
etc/images/smilies/medium/wry.xpm
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* XPM */
|
||||||
|
static char * wry_xpm[] = {
|
||||||
|
"16 16 9 1",
|
||||||
|
" c None",
|
||||||
|
". c #000000",
|
||||||
|
"+ c #1D1900",
|
||||||
|
"@ c #887500",
|
||||||
|
"# c #D3B600",
|
||||||
|
"$ c #FAD800",
|
||||||
|
"% c #645600",
|
||||||
|
"& c #FFDD00",
|
||||||
|
"* c #594D00",
|
||||||
|
" ...... ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .%&&*&&&&*&&%. ",
|
||||||
|
" +$&&.&&&&.&&$+ ",
|
||||||
|
".@&&&.&&&&.&&&@.",
|
||||||
|
".#&&&.&&&&.&&&#.",
|
||||||
|
".$&&&&&&&&&&&&$.",
|
||||||
|
".$&&&&&&&&&%&&$.",
|
||||||
|
".#&&&&&&&&@%&&#.",
|
||||||
|
".@&&#......#&&@.",
|
||||||
|
" +$&%@&&&&&&&$+ ",
|
||||||
|
" .%&%&&&&&&&&%. ",
|
||||||
|
" .%$&&&&&&$%. ",
|
||||||
|
" .+@#$$#@+. ",
|
||||||
|
" ...... "};
|
|
@ -121,7 +121,7 @@
|
||||||
\newcommand{\Copyright}{%
|
\newcommand{\Copyright}{%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
Copyright \copyright\ 1995, 2000, 2002, 2003, 2004,
|
Copyright \copyright\ 1995, 2000, 2002, 2003, 2004,
|
||||||
2005, 2006, 2007 Free Software Foundation, Inc.
|
2005, 2006, 2007 Free Software Foundation, Inc.\\*
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Permission is granted to make and distribute copies of this reference
|
Permission is granted to make and distribute copies of this reference
|
||||||
|
@ -566,7 +566,7 @@
|
||||||
{\esamepage
|
{\esamepage
|
||||||
\begin{keys}{C-c C-s C-a}
|
\begin{keys}{C-c C-s C-a}
|
||||||
C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
|
C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
|
||||||
% C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus
|
C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\
|
||||||
C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
|
C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
|
||||||
C-c C-s C-i & Sort the summary-buffer by article score.\\
|
C-c C-s C-i & Sort the summary-buffer by article score.\\
|
||||||
C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
|
C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
|
||||||
|
@ -876,6 +876,7 @@
|
||||||
\begin{keys}{/M}
|
\begin{keys}{/M}
|
||||||
// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
|
// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
|
||||||
/a & Limit the summary-buffer to articles matching {\bf author}.\\
|
/a & Limit the summary-buffer to articles matching {\bf author}.\\
|
||||||
|
/R & Limit the summary-buffer to articles matching {\bf recipient}.\\
|
||||||
/x & Limit depending on ``extra'' headers.\\
|
/x & Limit depending on ``extra'' headers.\\
|
||||||
/u & (x) Limit to {\bf unread} articles.
|
/u & (x) Limit to {\bf unread} articles.
|
||||||
[Prefix: also exclude ticked and dormant articles]\\
|
[Prefix: also exclude ticked and dormant articles]\\
|
||||||
|
@ -900,7 +901,7 @@
|
||||||
/o & Insert all {\bf old} articles. [Prefix: how many]\\
|
/o & Insert all {\bf old} articles. [Prefix: how many]\\
|
||||||
/N & Insert all {\bf new} articles.\\
|
/N & Insert all {\bf new} articles.\\
|
||||||
/p & Limit to articles {\bf predicated} in the `display' group parameter.\\
|
/p & Limit to articles {\bf predicated} in the `display' group parameter.\\
|
||||||
% /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus
|
/r & Limit to {\bf replied} articles. [Prefix: unreplied]\\
|
||||||
\end{keys}
|
\end{keys}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2007-10-31 Glenn Morris <rgm@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in (install): Change ownership of installed files.
|
||||||
|
|
||||||
2007-10-20 Edward O'Connor <hober0@gmail.com> (tiny change)
|
2007-10-20 Edward O'Connor <hober0@gmail.com> (tiny change)
|
||||||
|
|
||||||
* quail/latin-ltx.el ("\\qed"): Add this rule.
|
* quail/latin-ltx.el ("\\qed"): Add this rule.
|
||||||
|
|
|
@ -252,6 +252,11 @@ install: all
|
||||||
done) \
|
done) \
|
||||||
else true; fi
|
else true; fi
|
||||||
-chmod -R a+r ${INSTALLDIR}
|
-chmod -R a+r ${INSTALLDIR}
|
||||||
|
for installuser in $${LOGNAME} $${USERNAME} $${USER} \
|
||||||
|
`id -un 2> /dev/null`; do \
|
||||||
|
[ -n "$${installuser}" ] && break ; \
|
||||||
|
done ; \
|
||||||
|
find ${INSTALLDIR} -exec chown $${installuser} '{}' ';'
|
||||||
|
|
||||||
clean mostlyclean:
|
clean mostlyclean:
|
||||||
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \
|
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
|
||||||
|
|
||||||
|
* makefile.w32-in (obj): Remove sunfns.o.
|
||||||
|
|
||||||
|
2007-10-28 Juanma Barranquero <lekktu@gmail.com>
|
||||||
|
|
||||||
|
* makefile.w32-in (obj): Remove abbrev.o.
|
||||||
|
|
||||||
2007-10-26 Juanma Barranquero <lekktu@gmail.com>
|
2007-10-26 Juanma Barranquero <lekktu@gmail.com>
|
||||||
|
|
||||||
* emacsclient.c: Add a wrapper for getenv so it also checks the
|
* emacsclient.c: Add a wrapper for getenv so it also checks the
|
||||||
|
|
|
@ -298,8 +298,6 @@ get_current_dir_name ()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Message functions. */
|
|
||||||
|
|
||||||
#ifdef WINDOWSNT
|
#ifdef WINDOWSNT
|
||||||
|
|
||||||
#define REG_ROOT "SOFTWARE\\GNU\\Emacs"
|
#define REG_ROOT "SOFTWARE\\GNU\\Emacs"
|
||||||
|
@ -440,6 +438,8 @@ w32_execvp (path, argv)
|
||||||
|
|
||||||
#endif /* WINDOWSNT */
|
#endif /* WINDOWSNT */
|
||||||
|
|
||||||
|
/* Display a normal or error message.
|
||||||
|
On Windows, use a message box if compiled as a Windows app. */
|
||||||
void
|
void
|
||||||
message (int is_error, char *message, ...)
|
message (int is_error, char *message, ...)
|
||||||
{
|
{
|
||||||
|
|
|
@ -142,7 +142,7 @@ $(BLD)/ctags.$(O): ctags.c
|
||||||
# make-docfile blindly replaces .o with .c anyway. Keep .o in this list
|
# make-docfile blindly replaces .o with .c anyway. Keep .o in this list
|
||||||
# as it is required by code in doc.c.
|
# as it is required by code in doc.c.
|
||||||
#
|
#
|
||||||
obj = sunfns.o dosfns.o msdos.o \
|
obj = dosfns.o msdos.o \
|
||||||
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
|
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
|
||||||
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o \
|
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o \
|
||||||
w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o \
|
w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o \
|
||||||
|
@ -157,7 +157,7 @@ obj = sunfns.o dosfns.o msdos.o \
|
||||||
cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
|
cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
|
||||||
alloc.o data.o doc.o editfns.o callint.o \
|
alloc.o data.o doc.o editfns.o callint.o \
|
||||||
eval.o floatfns.o fns.o print.o lread.o \
|
eval.o floatfns.o fns.o print.o lread.o \
|
||||||
abbrev.o syntax.o bytecode.o \
|
syntax.o bytecode.o \
|
||||||
process.o callproc.o \
|
process.o callproc.o \
|
||||||
region-cache.o sound.o atimer.o \
|
region-cache.o sound.o atimer.o \
|
||||||
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o
|
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o
|
||||||
|
|
1211
lisp/ChangeLog
1211
lisp/ChangeLog
File diff suppressed because it is too large
Load diff
|
@ -35,6 +35,12 @@ EMACS = ../src/emacs
|
||||||
|
|
||||||
EMACSOPT = -batch --no-site-file --multibyte
|
EMACSOPT = -batch --no-site-file --multibyte
|
||||||
|
|
||||||
|
# Extra flags to pass to the byte compiler
|
||||||
|
BYTE_COMPILE_EXTRA_FLAGS =
|
||||||
|
# For example to not display the undefined function warnings you can use this:
|
||||||
|
# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))'
|
||||||
|
# The example above is just for developers, it should not be used by default.
|
||||||
|
|
||||||
SOURCES = *.el COPYING Makefile
|
SOURCES = *.el COPYING Makefile
|
||||||
lisptagsfiles1 = $(lisp)/[a-zA-Z]*.el
|
lisptagsfiles1 = $(lisp)/[a-zA-Z]*.el
|
||||||
lisptagsfiles2 = $(lisp)/[a-zA-Z]*/[a-zA-Z]*.el
|
lisptagsfiles2 = $(lisp)/[a-zA-Z]*/[a-zA-Z]*.el
|
||||||
|
@ -143,7 +149,7 @@ TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2)
|
||||||
.SUFFIXES: .elc .el
|
.SUFFIXES: .elc .el
|
||||||
|
|
||||||
.el.elc: $(lisp)/subdirs.el
|
.el.elc: $(lisp)/subdirs.el
|
||||||
-$(emacs) -f batch-byte-compile $<
|
-$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $<
|
||||||
|
|
||||||
# Compile all Lisp files, but don't recompile those that are up to
|
# Compile all Lisp files, but don't recompile those that are up to
|
||||||
# date. Some files don't actually get compiled because they set the
|
# date. Some files don't actually get compiled because they set the
|
||||||
|
@ -168,7 +174,7 @@ compile: $(lisp)/subdirs.el mh-autoloads doit
|
||||||
if test -f $$el; \
|
if test -f $$el; \
|
||||||
then \
|
then \
|
||||||
echo Compiling $$el; \
|
echo Compiling $$el; \
|
||||||
$(emacs) -f batch-byte-compile-if-not-done $$el || exit 1; \
|
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile-if-not-done $$el || exit 1; \
|
||||||
fi \
|
fi \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -187,14 +193,14 @@ compile-always: $(lisp)/subdirs.el mh-autoloads doit
|
||||||
if test -f $$el; \
|
if test -f $$el; \
|
||||||
then \
|
then \
|
||||||
echo Compiling $$el; \
|
echo Compiling $$el; \
|
||||||
$(emacs) -f batch-byte-compile $$el || exit 1; \
|
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
|
||||||
fi \
|
fi \
|
||||||
done
|
done
|
||||||
|
|
||||||
compile-calc:
|
compile-calc:
|
||||||
for el in `find $(lisp)/calc -name '*.el'`; do \
|
for el in `find $(lisp)/calc -name '*.el'`; do \
|
||||||
echo Compiling $$el; \
|
echo Compiling $$el; \
|
||||||
$(emacs) -f batch-byte-compile $$el || exit 1; \
|
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
|
||||||
done
|
done
|
||||||
|
|
||||||
# Backup compiled Lisp files in elc.tar.gz. If that file already
|
# Backup compiled Lisp files in elc.tar.gz. If that file already
|
||||||
|
@ -221,7 +227,7 @@ $(lisp)/progmodes/cc-mode.elc: \
|
||||||
$(lisp)/progmodes/cc-mode.el \
|
$(lisp)/progmodes/cc-mode.el \
|
||||||
$(lisp)/progmodes/cc-langs.el \
|
$(lisp)/progmodes/cc-langs.el \
|
||||||
$(lisp)/progmodes/cc-defs.el
|
$(lisp)/progmodes/cc-defs.el
|
||||||
$(emacs) -f batch-byte-compile $(lisp)/progmodes/cc-mode.el
|
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(lisp)/progmodes/cc-mode.el
|
||||||
|
|
||||||
# Update MH-E internal autoloads. These are not to be confused with
|
# Update MH-E internal autoloads. These are not to be confused with
|
||||||
# the autoloads for the MH-E entry points, which are already in
|
# the autoloads for the MH-E entry points, which are already in
|
||||||
|
|
544
lisp/abbrev.el
544
lisp/abbrev.el
|
@ -27,8 +27,20 @@
|
||||||
|
|
||||||
;; This facility is documented in the Emacs Manual.
|
;; This facility is documented in the Emacs Manual.
|
||||||
|
|
||||||
|
;; Todo:
|
||||||
|
|
||||||
|
;; - Make abbrev-file-name obey user-emacs-directory.
|
||||||
|
;; - Cleanup name space.
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
|
(eval-when-compile (require 'cl))
|
||||||
|
|
||||||
|
(defgroup abbrev-mode nil
|
||||||
|
"Word abbreviations mode."
|
||||||
|
:link '(custom-manual "(emacs)Abbrevs")
|
||||||
|
:group 'abbrev)
|
||||||
|
|
||||||
(defcustom only-global-abbrevs nil
|
(defcustom only-global-abbrevs nil
|
||||||
"Non-nil means user plans to use global abbrevs only.
|
"Non-nil means user plans to use global abbrevs only.
|
||||||
This makes the commands that normally define mode-specific abbrevs
|
This makes the commands that normally define mode-specific abbrevs
|
||||||
|
@ -363,6 +375,538 @@ A prefix argument means don't query; expand all abbrevs."
|
||||||
(if (or noquery (y-or-n-p (format "Expand `%s'? " string)))
|
(if (or noquery (y-or-n-p (format "Expand `%s'? " string)))
|
||||||
(expand-abbrev)))))))
|
(expand-abbrev)))))))
|
||||||
|
|
||||||
|
;;; Abbrev properties.
|
||||||
|
|
||||||
|
(defun abbrev-table-get (table prop)
|
||||||
|
"Get the PROP property of abbrev table TABLE."
|
||||||
|
(let ((sym (intern-soft "" table)))
|
||||||
|
(if sym (get sym prop))))
|
||||||
|
|
||||||
|
(defun abbrev-table-put (table prop val)
|
||||||
|
"Set the PROP property of abbrev table TABLE to VAL."
|
||||||
|
(let ((sym (intern "" table)))
|
||||||
|
(set sym nil) ; Make sure it won't be confused for an abbrev.
|
||||||
|
(put sym prop val)))
|
||||||
|
|
||||||
|
(defalias 'abbrev-get 'get
|
||||||
|
"Get the property PROP of abbrev ABBREV
|
||||||
|
|
||||||
|
\(fn ABBREV PROP)")
|
||||||
|
|
||||||
|
(defalias 'abbrev-put 'put
|
||||||
|
"Set the property PROP of abbrev ABREV to value VAL.
|
||||||
|
See `define-abbrev' for the effect of some special properties.
|
||||||
|
|
||||||
|
\(fn ABBREV PROP VAL)")
|
||||||
|
|
||||||
|
(defmacro abbrev-with-wrapper-hook (var &rest body)
|
||||||
|
"Run BODY wrapped with the VAR hook.
|
||||||
|
VAR is a special hook: its functions are called with one argument which
|
||||||
|
is the \"original\" code (the BODY), so the hook function can wrap the
|
||||||
|
original function, can call it several times, or even not call it at all.
|
||||||
|
VAR is normally a symbol (a variable) in which case it is treated like a hook,
|
||||||
|
with a buffer-local and a global part. But it can also be an arbitrary expression.
|
||||||
|
This is similar to an `around' advice."
|
||||||
|
(declare (indent 1) (debug t))
|
||||||
|
;; We need those two gensyms because CL's lexical scoping is not available
|
||||||
|
;; for function arguments :-(
|
||||||
|
(let ((funs (make-symbol "funs"))
|
||||||
|
(global (make-symbol "global")))
|
||||||
|
;; Since the hook is a wrapper, the loop has to be done via
|
||||||
|
;; recursion: a given hook function will call its parameter in order to
|
||||||
|
;; continue looping.
|
||||||
|
`(labels ((runrestofhook (,funs ,global)
|
||||||
|
;; `funs' holds the functions left on the hook and `global'
|
||||||
|
;; holds the functions left on the global part of the hook
|
||||||
|
;; (in case the hook is local).
|
||||||
|
(lexical-let ((funs ,funs)
|
||||||
|
(global ,global))
|
||||||
|
(if (consp funs)
|
||||||
|
(if (eq t (car funs))
|
||||||
|
(runrestofhook (append global (cdr funs)) nil)
|
||||||
|
(funcall (car funs)
|
||||||
|
(lambda () (runrestofhook (cdr funs) global))))
|
||||||
|
;; Once there are no more functions on the hook, run
|
||||||
|
;; the original body.
|
||||||
|
,@body))))
|
||||||
|
(runrestofhook ,var
|
||||||
|
;; The global part of the hook, if any.
|
||||||
|
,(if (symbolp var)
|
||||||
|
`(if (local-variable-p ',var)
|
||||||
|
(default-value ',var)))))))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Code that used to be implemented in src/abbrev.c
|
||||||
|
|
||||||
|
(defvar abbrev-table-name-list '(fundamental-mode-abbrev-table
|
||||||
|
global-abbrev-table)
|
||||||
|
"List of symbols whose values are abbrev tables.")
|
||||||
|
|
||||||
|
(defun make-abbrev-table (&optional props)
|
||||||
|
"Create a new, empty abbrev table object.
|
||||||
|
PROPS is a "
|
||||||
|
;; The value 59 is an arbitrary prime number.
|
||||||
|
(let ((table (make-vector 59 0)))
|
||||||
|
;; Each abbrev-table has a `modiff' counter which can be used to detect
|
||||||
|
;; when an abbreviation was added. An example of use would be to
|
||||||
|
;; construct :regexp dynamically as the union of all abbrev names, so
|
||||||
|
;; `modiff' can let us detect that an abbrev was added and hence :regexp
|
||||||
|
;; needs to be refreshed.
|
||||||
|
;; The presence of `modiff' entry is also used as a tag indicating this
|
||||||
|
;; vector is really an abbrev-table.
|
||||||
|
(abbrev-table-put table :abbrev-table-modiff 0)
|
||||||
|
(while (consp props)
|
||||||
|
(abbrev-table-put table (pop props) (pop props)))
|
||||||
|
table))
|
||||||
|
|
||||||
|
(defun abbrev-table-p (object)
|
||||||
|
(and (vectorp object)
|
||||||
|
(numberp (abbrev-table-get object :abbrev-table-modiff))))
|
||||||
|
|
||||||
|
(defvar global-abbrev-table (make-abbrev-table)
|
||||||
|
"The abbrev table whose abbrevs affect all buffers.
|
||||||
|
Each buffer may also have a local abbrev table.
|
||||||
|
If it does, the local table overrides the global one
|
||||||
|
for any particular abbrev defined in both.")
|
||||||
|
|
||||||
|
(defvar abbrev-minor-mode-table-alist nil
|
||||||
|
"Alist of abbrev tables to use for minor modes.
|
||||||
|
Each element looks like (VARIABLE . ABBREV-TABLE);
|
||||||
|
ABBREV-TABLE is active whenever VARIABLE's value is non-nil.")
|
||||||
|
|
||||||
|
(defvar fundamental-mode-abbrev-table
|
||||||
|
(let ((table (make-abbrev-table)))
|
||||||
|
;; Set local-abbrev-table's default to be fundamental-mode-abbrev-table.
|
||||||
|
(setq-default local-abbrev-table table)
|
||||||
|
table)
|
||||||
|
"The abbrev table of mode-specific abbrevs for Fundamental Mode.")
|
||||||
|
|
||||||
|
(defvar abbrevs-changed nil
|
||||||
|
"Set non-nil by defining or altering any word abbrevs.
|
||||||
|
This causes `save-some-buffers' to offer to save the abbrevs.")
|
||||||
|
|
||||||
|
(defcustom abbrev-all-caps nil
|
||||||
|
"Non-nil means expand multi-word abbrevs all caps if abbrev was so."
|
||||||
|
:type 'boolean
|
||||||
|
:group 'abbrev-mode)
|
||||||
|
|
||||||
|
(defvar abbrev-start-location nil
|
||||||
|
"Buffer position for `expand-abbrev' to use as the start of the abbrev.
|
||||||
|
When nil, use the word before point as the abbrev.
|
||||||
|
Calling `expand-abbrev' sets this to nil.")
|
||||||
|
|
||||||
|
(defvar abbrev-start-location-buffer nil
|
||||||
|
"Buffer that `abbrev-start-location' has been set for.
|
||||||
|
Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.")
|
||||||
|
|
||||||
|
(defvar last-abbrev nil
|
||||||
|
"The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'.")
|
||||||
|
|
||||||
|
(defvar last-abbrev-text nil
|
||||||
|
"The exact text of the last abbrev expanded.
|
||||||
|
nil if the abbrev has already been unexpanded.")
|
||||||
|
|
||||||
|
(defvar last-abbrev-location 0
|
||||||
|
"The location of the start of the last abbrev expanded.")
|
||||||
|
|
||||||
|
;; (defvar local-abbrev-table fundamental-mode-abbrev-table
|
||||||
|
;; "Local (mode-specific) abbrev table of current buffer.")
|
||||||
|
;; (make-variable-buffer-local 'local-abbrev-table)
|
||||||
|
|
||||||
|
(defcustom pre-abbrev-expand-hook nil
|
||||||
|
"Function or functions to be called before abbrev expansion is done.
|
||||||
|
This is the first thing that `expand-abbrev' does, and so this may change
|
||||||
|
the current abbrev table before abbrev lookup happens."
|
||||||
|
:type 'hook
|
||||||
|
:group 'abbrev-mode)
|
||||||
|
(make-obsolete-variable 'pre-abbrev-expand-hook 'abbrev-expand-functions "23.1")
|
||||||
|
|
||||||
|
(defun clear-abbrev-table (table)
|
||||||
|
"Undefine all abbrevs in abbrev table TABLE, leaving it empty."
|
||||||
|
(setq abbrevs-changed t)
|
||||||
|
(dotimes (i (length table))
|
||||||
|
(aset table i 0)))
|
||||||
|
|
||||||
|
(defun define-abbrev (table name expansion &optional hook &rest props)
|
||||||
|
"Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
|
||||||
|
NAME must be a string, and should be lower-case.
|
||||||
|
EXPANSION should usually be a string.
|
||||||
|
To undefine an abbrev, define it with EXPANSION = nil.
|
||||||
|
If HOOK is non-nil, it should be a function of no arguments;
|
||||||
|
it is called after EXPANSION is inserted.
|
||||||
|
If EXPANSION is not a string, the abbrev is a special one,
|
||||||
|
which does not expand in the usual way but only runs HOOK.
|
||||||
|
|
||||||
|
PROPS is a property list. The following properties are special:
|
||||||
|
- `:count': the value for the abbrev's usage-count, which is incremented each time
|
||||||
|
the abbrev is used (the default is zero).
|
||||||
|
- `:system': if non-nil, says that this is a \"system\" abbreviation
|
||||||
|
which should not be saved in the user's abbreviation file.
|
||||||
|
Unless `:system' is `force', a system abbreviation will not
|
||||||
|
overwrite a non-system abbreviation of the same name.
|
||||||
|
- `:case-fixed': non-nil means that abbreviations are looked up without
|
||||||
|
case-folding, and the expansion is not capitalized/upcased.
|
||||||
|
- `:enable-function': a function of no argument which returns non-nil iff the
|
||||||
|
abbrev should be used for a particular call of `expand-abbrev'.
|
||||||
|
|
||||||
|
An obsolete but still supported calling form is:
|
||||||
|
|
||||||
|
\(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT SYSTEM)."
|
||||||
|
(when (and (consp props) (or (null (car props)) (numberp (car props))))
|
||||||
|
;; Old-style calling convention.
|
||||||
|
(setq props (list* :count (car props)
|
||||||
|
(if (cadr props) (list :system (cadr props))))))
|
||||||
|
(unless (plist-get props :count)
|
||||||
|
(setq props (plist-put props :count 0)))
|
||||||
|
(let ((system-flag (plist-get props :system))
|
||||||
|
(sym (intern name table)))
|
||||||
|
;; Don't override a prior user-defined abbrev with a system abbrev,
|
||||||
|
;; unless system-flag is `force'.
|
||||||
|
(unless (and (not (memq system-flag '(nil force)))
|
||||||
|
(boundp sym) (symbol-value sym)
|
||||||
|
(not (abbrev-get sym :system)))
|
||||||
|
(unless (or system-flag
|
||||||
|
(and (boundp sym) (fboundp sym)
|
||||||
|
;; load-file-name
|
||||||
|
(equal (symbol-value sym) expansion)
|
||||||
|
(equal (symbol-function sym) hook)))
|
||||||
|
(setq abbrevs-changed t))
|
||||||
|
(set sym expansion)
|
||||||
|
(fset sym hook)
|
||||||
|
(setplist sym
|
||||||
|
;; Don't store the `force' value of `system-flag' into
|
||||||
|
;; the :system property.
|
||||||
|
(if (eq 'force system-flag) (plist-put props :system t) props))
|
||||||
|
(abbrev-table-put table :abbrev-table-modiff
|
||||||
|
(1+ (abbrev-table-get table :abbrev-table-modiff))))
|
||||||
|
name))
|
||||||
|
|
||||||
|
(defun abbrev--check-chars (abbrev global)
|
||||||
|
"Check if the characters in ABBREV have word syntax in either the
|
||||||
|
current (if global is nil) or standard syntax table."
|
||||||
|
(with-syntax-table
|
||||||
|
(cond ((null global) (standard-syntax-table))
|
||||||
|
;; ((syntax-table-p global) global)
|
||||||
|
(t (syntax-table)))
|
||||||
|
(when (string-match "\\W" abbrev)
|
||||||
|
(let ((badchars ())
|
||||||
|
(pos 0))
|
||||||
|
(while (string-match "\\W" abbrev pos)
|
||||||
|
(pushnew (aref abbrev (match-beginning 0)) badchars)
|
||||||
|
(setq pos (1+ pos)))
|
||||||
|
(error "Some abbrev characters (%s) are not word constituents %s"
|
||||||
|
(apply 'string (nreverse badchars))
|
||||||
|
(if global "in the standard syntax" "in this mode"))))))
|
||||||
|
|
||||||
|
(defun define-global-abbrev (abbrev expansion)
|
||||||
|
"Define ABBREV as a global abbreviation for EXPANSION.
|
||||||
|
The characters in ABBREV must all be word constituents in the standard
|
||||||
|
syntax table."
|
||||||
|
(interactive "sDefine global abbrev: \nsExpansion for %s: ")
|
||||||
|
(abbrev--check-chars abbrev 'global)
|
||||||
|
(define-abbrev global-abbrev-table (downcase abbrev) expansion))
|
||||||
|
|
||||||
|
(defun define-mode-abbrev (abbrev expansion)
|
||||||
|
"Define ABBREV as a mode-specific abbreviation for EXPANSION.
|
||||||
|
The characters in ABBREV must all be word-constituents in the current mode."
|
||||||
|
(interactive "sDefine mode abbrev: \nsExpansion for %s: ")
|
||||||
|
(unless local-abbrev-table
|
||||||
|
(error "Major mode has no abbrev table"))
|
||||||
|
(abbrev--check-chars abbrev nil)
|
||||||
|
(define-abbrev local-abbrev-table (downcase abbrev) expansion))
|
||||||
|
|
||||||
|
(defun abbrev--active-tables (&optional tables)
|
||||||
|
"Return the list of abbrev tables currently active.
|
||||||
|
TABLES if non-nil overrides the usual rules. It can hold
|
||||||
|
either a single abbrev table or a list of abbrev tables."
|
||||||
|
;; We could just remove the `tables' arg and let callers use
|
||||||
|
;; (or table (abbrev--active-tables)) but then they'd have to be careful
|
||||||
|
;; to treat the distinction between a single table and a list of tables.
|
||||||
|
(cond
|
||||||
|
((consp tables) tables)
|
||||||
|
((vectorp tables) (list tables))
|
||||||
|
(t
|
||||||
|
(let ((tables (if (listp local-abbrev-table)
|
||||||
|
(append local-abbrev-table
|
||||||
|
(list global-abbrev-table))
|
||||||
|
(list local-abbrev-table global-abbrev-table))))
|
||||||
|
;; Add the minor-mode abbrev tables.
|
||||||
|
(dolist (x abbrev-minor-mode-table-alist)
|
||||||
|
(when (and (symbolp (car x)) (boundp (car x)) (symbol-value (car x)))
|
||||||
|
(setq tables
|
||||||
|
(if (listp (cdr x))
|
||||||
|
(append (cdr x) tables) (cons (cdr x) tables)))))
|
||||||
|
tables))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun abbrev-symbol (abbrev &optional table)
|
||||||
|
"Return the symbol representing abbrev named ABBREV.
|
||||||
|
This symbol's name is ABBREV, but it is not the canonical symbol of that name;
|
||||||
|
it is interned in an abbrev-table rather than the normal obarray.
|
||||||
|
The value is nil if that abbrev is not defined.
|
||||||
|
Optional second arg TABLE is abbrev table to look it up in.
|
||||||
|
The default is to try buffer's mode-specific abbrev table, then global table."
|
||||||
|
(let ((tables (abbrev--active-tables table))
|
||||||
|
sym)
|
||||||
|
(while (and tables (not (symbol-value sym)))
|
||||||
|
(let* ((table (pop tables))
|
||||||
|
(case-fold (not (abbrev-table-get table :case-fixed))))
|
||||||
|
(setq tables (append (abbrev-table-get table :parents) tables))
|
||||||
|
;; In case the table doesn't set :case-fixed but some of the
|
||||||
|
;; abbrevs do, we have to be careful.
|
||||||
|
(setq sym
|
||||||
|
;; First try without case-folding.
|
||||||
|
(or (intern-soft abbrev table)
|
||||||
|
(when case-fold
|
||||||
|
;; We didn't find any abbrev, try case-folding.
|
||||||
|
(let ((sym (intern-soft (downcase abbrev) table)))
|
||||||
|
;; Only use it if it doesn't require :case-fixed.
|
||||||
|
(and sym (not (abbrev-get sym :case-fixed))
|
||||||
|
sym)))))))
|
||||||
|
(if (symbol-value sym)
|
||||||
|
sym)))
|
||||||
|
|
||||||
|
|
||||||
|
(defun abbrev-expansion (abbrev &optional table)
|
||||||
|
"Return the string that ABBREV expands into in the current buffer.
|
||||||
|
Optionally specify an abbrev table as second arg;
|
||||||
|
then ABBREV is looked up in that table only."
|
||||||
|
(symbol-value (abbrev-symbol abbrev table)))
|
||||||
|
|
||||||
|
|
||||||
|
(defun abbrev--before-point ()
|
||||||
|
"Try and find an abbrev before point. Return it if found, nil otherwise."
|
||||||
|
(unless (eq abbrev-start-location-buffer (current-buffer))
|
||||||
|
(setq abbrev-start-location nil))
|
||||||
|
|
||||||
|
(let ((tables (abbrev--active-tables))
|
||||||
|
(pos (point))
|
||||||
|
start end name res)
|
||||||
|
|
||||||
|
(if abbrev-start-location
|
||||||
|
(progn
|
||||||
|
(setq start abbrev-start-location)
|
||||||
|
(setq abbrev-start-location nil)
|
||||||
|
;; Remove the hyphen inserted by `abbrev-prefix-mark'.
|
||||||
|
(if (and (< start (point-max))
|
||||||
|
(eq (char-after start) ?-))
|
||||||
|
(delete-region start (1+ start)))
|
||||||
|
(skip-syntax-backward " ")
|
||||||
|
(setq end (point))
|
||||||
|
(when (> end start)
|
||||||
|
(setq name (buffer-substring start end))
|
||||||
|
(goto-char pos) ; Restore point.
|
||||||
|
(list (abbrev-symbol name tables) name start end)))
|
||||||
|
|
||||||
|
(while (and tables (not (car res)))
|
||||||
|
(let* ((table (pop tables))
|
||||||
|
(enable-fun (abbrev-table-get table :enable-function)))
|
||||||
|
(setq tables (append (abbrev-table-get table :parents) tables))
|
||||||
|
(setq res
|
||||||
|
(and (or (not enable-fun) (funcall enable-fun))
|
||||||
|
(looking-back (or (abbrev-table-get table :regexp)
|
||||||
|
"\\<\\(\\w+\\)\\W*")
|
||||||
|
(line-beginning-position))
|
||||||
|
(setq start (match-beginning 1))
|
||||||
|
(setq end (match-end 1))
|
||||||
|
(setq name (buffer-substring start end))
|
||||||
|
(let ((abbrev (abbrev-symbol name table)))
|
||||||
|
(when abbrev
|
||||||
|
(setq enable-fun (abbrev-get abbrev :enable-function))
|
||||||
|
(and (or (not enable-fun) (funcall enable-fun))
|
||||||
|
;; This will also look it up in parent tables.
|
||||||
|
;; This is not on purpose, but it seems harmless.
|
||||||
|
(list abbrev name start end))))))
|
||||||
|
;; Restore point.
|
||||||
|
(goto-char pos)))
|
||||||
|
res)))
|
||||||
|
|
||||||
|
(defvar abbrev-expand-functions nil
|
||||||
|
"Wrapper hook around `expand-abbrev'.
|
||||||
|
The functions on this special hook are called with one argument:
|
||||||
|
a function that performs the abbrev expansion. It should return
|
||||||
|
the abbrev symbol if expansion took place.")
|
||||||
|
|
||||||
|
(defun expand-abbrev ()
|
||||||
|
"Expand the abbrev before point, if there is an abbrev there.
|
||||||
|
Effective when explicitly called even when `abbrev-mode' is nil.
|
||||||
|
Returns the abbrev symbol, if expansion took place."
|
||||||
|
(interactive)
|
||||||
|
(run-hooks 'pre-abbrev-expand-hook)
|
||||||
|
(abbrev-with-wrapper-hook abbrev-expand-functions
|
||||||
|
(destructuring-bind (&optional sym name wordstart wordend)
|
||||||
|
(abbrev--before-point)
|
||||||
|
(when sym
|
||||||
|
(let ((value sym))
|
||||||
|
(unless (or ;; executing-kbd-macro
|
||||||
|
noninteractive
|
||||||
|
(window-minibuffer-p (selected-window)))
|
||||||
|
;; Add an undo boundary, in case we are doing this for
|
||||||
|
;; a self-inserting command which has avoided making one so far.
|
||||||
|
(undo-boundary))
|
||||||
|
;; Now sym is the abbrev symbol.
|
||||||
|
(setq last-abbrev-text name)
|
||||||
|
(setq last-abbrev sym)
|
||||||
|
(setq last-abbrev-location wordstart)
|
||||||
|
;; Increment use count.
|
||||||
|
(abbrev-put sym :count (1+ (abbrev-get sym :count)))
|
||||||
|
;; If this abbrev has an expansion, delete the abbrev
|
||||||
|
;; and insert the expansion.
|
||||||
|
(when (stringp (symbol-value sym))
|
||||||
|
(goto-char wordstart)
|
||||||
|
;; Insert at beginning so that markers at the end (e.g. point)
|
||||||
|
;; are preserved.
|
||||||
|
(insert (symbol-value sym))
|
||||||
|
(delete-char (- wordend wordstart))
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
;; If the abbrev's name is different from the buffer text (the
|
||||||
|
;; only difference should be capitalization), then we may want
|
||||||
|
;; to adjust the capitalization of the expansion.
|
||||||
|
(when (and (not (equal name (symbol-name sym)))
|
||||||
|
(string-match "[[:upper:]]" name))
|
||||||
|
(if (not (string-match "[[:lower:]]" name))
|
||||||
|
;; Abbrev was all caps. If expansion is multiple words,
|
||||||
|
;; normally capitalize each word.
|
||||||
|
(if (and (not abbrev-all-caps)
|
||||||
|
(save-excursion
|
||||||
|
(> (progn (backward-word 1) (point))
|
||||||
|
(progn (goto-char wordstart)
|
||||||
|
(forward-word 1) (point)))))
|
||||||
|
(upcase-initials-region wordstart (point))
|
||||||
|
(upcase-region wordstart (point)))
|
||||||
|
;; Abbrev included some caps. Cap first initial of expansion.
|
||||||
|
(let ((end (point)))
|
||||||
|
;; Find the initial.
|
||||||
|
(goto-char wordstart)
|
||||||
|
(skip-syntax-forward "^w" (1- end))
|
||||||
|
;; Change just that.
|
||||||
|
(upcase-initials-region (point) (1+ (point)))
|
||||||
|
(goto-char end))))))
|
||||||
|
;; Now point is at the end of the expansion and the beginning is
|
||||||
|
;; in last-abbrev-location.
|
||||||
|
(when (symbol-function sym)
|
||||||
|
(let* ((hook (symbol-function sym))
|
||||||
|
(expanded
|
||||||
|
;; If the abbrev has a hook function, run it.
|
||||||
|
(funcall hook)))
|
||||||
|
;; In addition, if the hook function is a symbol with
|
||||||
|
;; a non-nil `no-self-insert' property, let the value it
|
||||||
|
;; returned specify whether we consider that an expansion took
|
||||||
|
;; place. If it returns nil, no expansion has been done.
|
||||||
|
(if (and (symbolp hook)
|
||||||
|
(null expanded)
|
||||||
|
(get hook 'no-self-insert))
|
||||||
|
(setq value nil))))
|
||||||
|
value)))))
|
||||||
|
|
||||||
|
(defun unexpand-abbrev ()
|
||||||
|
"Undo the expansion of the last abbrev that expanded.
|
||||||
|
This differs from ordinary undo in that other editing done since then
|
||||||
|
is not undone."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(unless (or (< last-abbrev-location (point-min))
|
||||||
|
(> last-abbrev-location (point-max)))
|
||||||
|
(goto-char last-abbrev-location)
|
||||||
|
(when (stringp last-abbrev-text)
|
||||||
|
;; This isn't correct if last-abbrev's hook was used
|
||||||
|
;; to do the expansion.
|
||||||
|
(let ((val (symbol-value last-abbrev)))
|
||||||
|
(unless (stringp val)
|
||||||
|
(error "value of abbrev-symbol must be a string"))
|
||||||
|
(delete-region (point) (+ (point) (length val)))
|
||||||
|
;; Don't inherit properties here; just copy from old contents.
|
||||||
|
(insert last-abbrev-text)
|
||||||
|
(setq last-abbrev-text nil))))))
|
||||||
|
|
||||||
|
(defun abbrev--write (sym)
|
||||||
|
"Write the abbrev in a `read'able form.
|
||||||
|
Only writes the non-system abbrevs.
|
||||||
|
Presumes that `standard-output' points to `current-buffer'."
|
||||||
|
(unless (or (null (symbol-value sym)) (abbrev-get sym :system))
|
||||||
|
(insert " (")
|
||||||
|
(prin1 sym)
|
||||||
|
(insert " ")
|
||||||
|
(prin1 (symbol-value sym))
|
||||||
|
(insert " ")
|
||||||
|
(prin1 (symbol-function sym))
|
||||||
|
(insert " ")
|
||||||
|
(prin1 (abbrev-get sym :count))
|
||||||
|
(insert ")\n")))
|
||||||
|
|
||||||
|
(defun abbrev--describe (sym)
|
||||||
|
(when (symbol-value sym)
|
||||||
|
(prin1 (symbol-name sym))
|
||||||
|
(if (null (abbrev-get sym :system))
|
||||||
|
(indent-to 15 1)
|
||||||
|
(insert " (sys)")
|
||||||
|
(indent-to 20 1))
|
||||||
|
(prin1 (abbrev-get sym :count))
|
||||||
|
(indent-to 20 1)
|
||||||
|
(prin1 (symbol-value sym))
|
||||||
|
(when (symbol-function sym)
|
||||||
|
(indent-to 45 1)
|
||||||
|
(prin1 (symbol-function sym)))
|
||||||
|
(terpri)))
|
||||||
|
|
||||||
|
(defun insert-abbrev-table-description (name &optional readable)
|
||||||
|
"Insert before point a full description of abbrev table named NAME.
|
||||||
|
NAME is a symbol whose value is an abbrev table.
|
||||||
|
If optional 2nd arg READABLE is non-nil, a human-readable description
|
||||||
|
is inserted. Otherwise the description is an expression,
|
||||||
|
a call to `define-abbrev-table', which would
|
||||||
|
define the abbrev table NAME exactly as it is currently defined.
|
||||||
|
|
||||||
|
Abbrevs marked as \"system abbrevs\" are omitted."
|
||||||
|
(let ((table (symbol-value name))
|
||||||
|
(symbols ()))
|
||||||
|
(mapatoms (lambda (sym) (if (symbol-value sym) (push sym symbols))) table)
|
||||||
|
(setq symbols (sort symbols 'string-lessp))
|
||||||
|
(let ((standard-output (current-buffer)))
|
||||||
|
(if readable
|
||||||
|
(progn
|
||||||
|
(insert "(")
|
||||||
|
(prin1 name)
|
||||||
|
(insert ")\n\n")
|
||||||
|
(mapc 'abbrev--describe symbols)
|
||||||
|
(insert "\n\n"))
|
||||||
|
(insert "(define-abbrev-table '")
|
||||||
|
(prin1 name)
|
||||||
|
(insert " '(")
|
||||||
|
(mapc 'abbrev--write symbols)
|
||||||
|
(insert " ))\n\n"))
|
||||||
|
nil)))
|
||||||
|
|
||||||
|
(defun define-abbrev-table (tablename definitions
|
||||||
|
&optional docstring &rest props)
|
||||||
|
"Define TABLENAME (a symbol) as an abbrev table name.
|
||||||
|
Define abbrevs in it according to DEFINITIONS, which is a list of elements
|
||||||
|
of the form (ABBREVNAME EXPANSION HOOK USECOUNT SYSTEMFLAG).
|
||||||
|
\(If the list is shorter than that, omitted elements default to nil).
|
||||||
|
PROPS is a property list to apply to the table.
|
||||||
|
Properties with special meaning:
|
||||||
|
- `:parents' contains a list of abbrev tables from which this table inherits
|
||||||
|
abbreviations.
|
||||||
|
- `:case-fixed' non-nil means that abbreviations are looked up without
|
||||||
|
case-folding, and the expansion is not capitalized/upcased.
|
||||||
|
- `:regexp' describes the form of abbrevs. It defaults to \\=\\<\\(\\w+\\)\\W* which
|
||||||
|
means that an abbrev can only be a single word. The submatch 1 is treated
|
||||||
|
as the potential name of an abbrev.
|
||||||
|
- `:enable-function' can be set to a function of no argument which returns
|
||||||
|
non-nil iff the abbrevs in this table should be used for this instance
|
||||||
|
of `expand-abbrev'."
|
||||||
|
;; We used to manually add the docstring, but we also want to record this
|
||||||
|
;; location as the definition of the variable (in load-history), so we may
|
||||||
|
;; as well just use `defvar'.
|
||||||
|
(eval `(defvar ,tablename nil ,@(if (stringp docstring) (list docstring))))
|
||||||
|
(let ((table (if (boundp tablename) (symbol-value tablename))))
|
||||||
|
(unless table
|
||||||
|
(setq table (make-abbrev-table props))
|
||||||
|
(set tablename table)
|
||||||
|
(push tablename abbrev-table-name-list))
|
||||||
|
(dolist (elt definitions)
|
||||||
|
(apply 'define-abbrev table elt))))
|
||||||
|
|
||||||
(provide 'abbrev)
|
(provide 'abbrev)
|
||||||
|
|
||||||
;; arch-tag: dbd6f3ae-dfe3-40ba-b00f-f9e3ff960df5
|
;; arch-tag: dbd6f3ae-dfe3-40ba-b00f-f9e3ff960df5
|
||||||
|
|
1204
lisp/allout.el
1204
lisp/allout.el
File diff suppressed because it is too large
Load diff
|
@ -1005,7 +1005,7 @@ If non-nil TEXT is a string that will be printed as a heading."
|
||||||
(defun apropos-describe-plist (symbol)
|
(defun apropos-describe-plist (symbol)
|
||||||
"Display a pretty listing of SYMBOL's plist."
|
"Display a pretty listing of SYMBOL's plist."
|
||||||
(help-setup-xref (list 'apropos-describe-plist symbol) (interactive-p))
|
(help-setup-xref (list 'apropos-describe-plist symbol) (interactive-p))
|
||||||
(with-output-to-temp-buffer (help-buffer)
|
(with-help-window (help-buffer)
|
||||||
(set-buffer standard-output)
|
(set-buffer standard-output)
|
||||||
(princ "Symbol ")
|
(princ "Symbol ")
|
||||||
(prin1 symbol)
|
(prin1 symbol)
|
||||||
|
@ -1014,8 +1014,7 @@ If non-nil TEXT is a string that will be printed as a heading."
|
||||||
(put-text-property (+ (point-min) 7) (- (point) 14)
|
(put-text-property (+ (point-min) 7) (- (point) 14)
|
||||||
'face apropos-symbol-face))
|
'face apropos-symbol-face))
|
||||||
(insert (apropos-format-plist symbol "\n "))
|
(insert (apropos-format-plist symbol "\n "))
|
||||||
(princ ")")
|
(princ ")")))
|
||||||
(print-help-return-message)))
|
|
||||||
|
|
||||||
|
|
||||||
(provide 'apropos)
|
(provide 'apropos)
|
||||||
|
|
|
@ -78,6 +78,8 @@ Summary of changes to "Calc"
|
||||||
|
|
||||||
* Made unit conversions exact when possible.
|
* Made unit conversions exact when possible.
|
||||||
|
|
||||||
|
* Lower the precedence of negation.
|
||||||
|
|
||||||
Version 2.1:
|
Version 2.1:
|
||||||
|
|
||||||
* New matrix mode for square matrices. Improved handling of
|
* New matrix mode for square matrices. Improved handling of
|
||||||
|
|
|
@ -1782,8 +1782,8 @@ calc-kill calc-kill-region calc-yank))))
|
||||||
;;; User menu.
|
;;; User menu.
|
||||||
|
|
||||||
(defun calc-user-key-map ()
|
(defun calc-user-key-map ()
|
||||||
(if calc-emacs-type-lucid
|
(if (featurep 'xemacs)
|
||||||
(error "User-defined keys are not supported in Lucid Emacs"))
|
(error "User-defined keys are not supported in XEmacs"))
|
||||||
(let ((res (cdr (lookup-key calc-mode-map "z"))))
|
(let ((res (cdr (lookup-key calc-mode-map "z"))))
|
||||||
(if (eq (car (car res)) 27)
|
(if (eq (car (car res)) 27)
|
||||||
(cdr res)
|
(cdr res)
|
||||||
|
|
|
@ -84,10 +84,10 @@
|
||||||
(message "`C' language mode")))
|
(message "`C' language mode")))
|
||||||
|
|
||||||
(put 'c 'math-oper-table
|
(put 'c 'math-oper-table
|
||||||
'( ( "u+" ident -1 1000 )
|
'( ( "u!" calcFunc-lnot -1 1000 )
|
||||||
( "u-" neg -1 1000 )
|
|
||||||
( "u!" calcFunc-lnot -1 1000 )
|
|
||||||
( "~" calcFunc-not -1 1000 )
|
( "~" calcFunc-not -1 1000 )
|
||||||
|
( "u+" ident -1 197 )
|
||||||
|
( "u-" neg -1 197 )
|
||||||
( "*" * 190 191 )
|
( "*" * 190 191 )
|
||||||
( "/" / 190 191 )
|
( "/" / 190 191 )
|
||||||
( "%" % 190 191 )
|
( "%" % 190 191 )
|
||||||
|
@ -328,9 +328,7 @@
|
||||||
"LaTeX language mode with \\func(\\text{var}) and multiline matrices")))))
|
"LaTeX language mode with \\func(\\text{var}) and multiline matrices")))))
|
||||||
|
|
||||||
(put 'tex 'math-oper-table
|
(put 'tex 'math-oper-table
|
||||||
'( ( "u+" ident -1 1000 )
|
'( ( "\\hat" calcFunc-hat -1 950 )
|
||||||
( "u-" neg -1 1000 )
|
|
||||||
( "\\hat" calcFunc-hat -1 950 )
|
|
||||||
( "\\check" calcFunc-check -1 950 )
|
( "\\check" calcFunc-check -1 950 )
|
||||||
( "\\tilde" calcFunc-tilde -1 950 )
|
( "\\tilde" calcFunc-tilde -1 950 )
|
||||||
( "\\acute" calcFunc-acute -1 950 )
|
( "\\acute" calcFunc-acute -1 950 )
|
||||||
|
@ -351,6 +349,8 @@
|
||||||
( "!" calcFunc-fact 210 -1 )
|
( "!" calcFunc-fact 210 -1 )
|
||||||
( "^" ^ 201 200 )
|
( "^" ^ 201 200 )
|
||||||
( "_" calcFunc-subscr 201 200 )
|
( "_" calcFunc-subscr 201 200 )
|
||||||
|
( "u+" ident -1 197 )
|
||||||
|
( "u-" neg -1 197 )
|
||||||
( "\\times" * 191 190 )
|
( "\\times" * 191 190 )
|
||||||
( "*" * 191 190 )
|
( "*" * 191 190 )
|
||||||
( "2x" * 191 190 )
|
( "2x" * 191 190 )
|
||||||
|
@ -575,9 +575,7 @@
|
||||||
(message "Eqn language mode")))
|
(message "Eqn language mode")))
|
||||||
|
|
||||||
(put 'eqn 'math-oper-table
|
(put 'eqn 'math-oper-table
|
||||||
'( ( "u+" ident -1 1000 )
|
'( ( "prime" (math-parse-eqn-prime) 950 -1 )
|
||||||
( "u-" neg -1 1000 )
|
|
||||||
( "prime" (math-parse-eqn-prime) 950 -1 )
|
|
||||||
( "prime" calcFunc-Prime 950 -1 )
|
( "prime" calcFunc-Prime 950 -1 )
|
||||||
( "dot" calcFunc-dot 950 -1 )
|
( "dot" calcFunc-dot 950 -1 )
|
||||||
( "dotdot" calcFunc-dotdot 950 -1 )
|
( "dotdot" calcFunc-dotdot 950 -1 )
|
||||||
|
@ -599,6 +597,8 @@
|
||||||
( "right ceil" closing 0 -1 )
|
( "right ceil" closing 0 -1 )
|
||||||
( "+-" sdev 300 300 )
|
( "+-" sdev 300 300 )
|
||||||
( "!" calcFunc-fact 210 -1 )
|
( "!" calcFunc-fact 210 -1 )
|
||||||
|
( "u+" ident -1 197 )
|
||||||
|
( "u-" neg -1 197 )
|
||||||
( "times" * 191 190 )
|
( "times" * 191 190 )
|
||||||
( "*" * 191 190 )
|
( "*" * 191 190 )
|
||||||
( "2x" * 191 190 )
|
( "2x" * 191 190 )
|
||||||
|
|
|
@ -821,9 +821,6 @@ If nil, selections displayed but ignored.")
|
||||||
(defvar calc-embedded-mode-hook nil
|
(defvar calc-embedded-mode-hook nil
|
||||||
"Hook run when starting embedded mode.")
|
"Hook run when starting embedded mode.")
|
||||||
|
|
||||||
;; Verify that Calc is running on the right kind of system.
|
|
||||||
(defvar calc-emacs-type-lucid (not (not (string-match "Lucid" emacs-version))))
|
|
||||||
|
|
||||||
;; Set up the autoloading linkage.
|
;; Set up the autoloading linkage.
|
||||||
(let ((name (and (fboundp 'calc-dispatch)
|
(let ((name (and (fboundp 'calc-dispatch)
|
||||||
(eq (car-safe (symbol-function 'calc-dispatch)) 'autoload)
|
(eq (car-safe (symbol-function 'calc-dispatch)) 'autoload)
|
||||||
|
@ -968,7 +965,7 @@ If nil, selections displayed but ignored.")
|
||||||
|
|
||||||
(defvar calc-digit-map
|
(defvar calc-digit-map
|
||||||
(let ((map (make-keymap)))
|
(let ((map (make-keymap)))
|
||||||
(if calc-emacs-type-lucid
|
(if (featurep 'xemacs)
|
||||||
(map-keymap (function
|
(map-keymap (function
|
||||||
(lambda (keys bind)
|
(lambda (keys bind)
|
||||||
(define-key map keys
|
(define-key map keys
|
||||||
|
@ -999,7 +996,7 @@ If nil, selections displayed but ignored.")
|
||||||
(define-key calc-mode-map x 'calc-pop)
|
(define-key calc-mode-map x 'calc-pop)
|
||||||
(define-key calc-mode-map
|
(define-key calc-mode-map
|
||||||
(if (vectorp x)
|
(if (vectorp x)
|
||||||
(if calc-emacs-type-lucid
|
(if (featurep 'xemacs)
|
||||||
(if (= (length x) 1)
|
(if (= (length x) 1)
|
||||||
(vector (if (consp (aref x 0))
|
(vector (if (consp (aref x 0))
|
||||||
(cons 'meta (aref x 0))
|
(cons 'meta (aref x 0))
|
||||||
|
@ -2109,13 +2106,13 @@ See calc-keypad for details."
|
||||||
(calc-prev-char nil)
|
(calc-prev-char nil)
|
||||||
(calc-prev-prev-char nil)
|
(calc-prev-prev-char nil)
|
||||||
(calc-buffer (current-buffer))
|
(calc-buffer (current-buffer))
|
||||||
(buf (if calc-emacs-type-lucid
|
(buf (if (featurep 'xemacs)
|
||||||
(catch 'calc-foo
|
(catch 'calc-foo
|
||||||
(catch 'execute-kbd-macro
|
(catch 'execute-kbd-macro
|
||||||
(throw 'calc-foo
|
(throw 'calc-foo
|
||||||
(read-from-minibuffer
|
(read-from-minibuffer
|
||||||
"Calc: " "" calc-digit-map)))
|
"Calc: " "" calc-digit-map)))
|
||||||
(error "Lucid Emacs requires RET after %s"
|
(error "XEmacs requires RET after %s"
|
||||||
"digit entry in kbd macro"))
|
"digit entry in kbd macro"))
|
||||||
(let ((old-esc (lookup-key global-map "\e")))
|
(let ((old-esc (lookup-key global-map "\e")))
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
|
@ -3531,8 +3528,6 @@ and all digits are kept, regardless of Calc's current precision."
|
||||||
(defconst math-standard-opers
|
(defconst math-standard-opers
|
||||||
'( ( "_" calcFunc-subscr 1200 1201 )
|
'( ( "_" calcFunc-subscr 1200 1201 )
|
||||||
( "%" calcFunc-percent 1100 -1 )
|
( "%" calcFunc-percent 1100 -1 )
|
||||||
( "u+" ident -1 1000 )
|
|
||||||
( "u-" neg -1 1000 197 )
|
|
||||||
( "u!" calcFunc-lnot -1 1000 )
|
( "u!" calcFunc-lnot -1 1000 )
|
||||||
( "mod" mod 400 400 185 )
|
( "mod" mod 400 400 185 )
|
||||||
( "+/-" sdev 300 300 185 )
|
( "+/-" sdev 300 300 185 )
|
||||||
|
@ -3540,6 +3535,8 @@ and all digits are kept, regardless of Calc's current precision."
|
||||||
( "!" calcFunc-fact 210 -1 )
|
( "!" calcFunc-fact 210 -1 )
|
||||||
( "^" ^ 201 200 )
|
( "^" ^ 201 200 )
|
||||||
( "**" ^ 201 200 )
|
( "**" ^ 201 200 )
|
||||||
|
( "u+" ident -1 197 )
|
||||||
|
( "u-" neg -1 197 )
|
||||||
( "/" / 190 191 )
|
( "/" / 190 191 )
|
||||||
( "%" % 190 191 )
|
( "%" % 190 191 )
|
||||||
( "\\" calcFunc-idiv 190 191 )
|
( "\\" calcFunc-idiv 190 191 )
|
||||||
|
@ -3646,7 +3643,7 @@ Also looks for the equivalent TeX words, \\gets and \\evalto."
|
||||||
;;; Functions needed for Lucid Emacs support.
|
;;; Functions needed for Lucid Emacs support.
|
||||||
|
|
||||||
(defun calc-read-key (&optional optkey)
|
(defun calc-read-key (&optional optkey)
|
||||||
(cond (calc-emacs-type-lucid
|
(cond ((featurep 'xemacs)
|
||||||
(let ((event (next-command-event)))
|
(let ((event (next-command-event)))
|
||||||
(let ((key (event-to-character event t t)))
|
(let ((key (event-to-character event t t)))
|
||||||
(or key optkey (error "Expected a plain keystroke"))
|
(or key optkey (error "Expected a plain keystroke"))
|
||||||
|
@ -3664,7 +3661,7 @@ Also looks for the equivalent TeX words, \\gets and \\evalto."
|
||||||
|
|
||||||
(defun calc-clear-unread-commands ()
|
(defun calc-clear-unread-commands ()
|
||||||
(if (featurep 'xemacs)
|
(if (featurep 'xemacs)
|
||||||
(calc-emacs-type-lucid (setq unread-command-event nil))
|
(setq unread-command-event nil)
|
||||||
(setq unread-command-events nil)))
|
(setq unread-command-events nil)))
|
||||||
|
|
||||||
(when calc-always-load-extensions
|
(when calc-always-load-extensions
|
||||||
|
|
|
@ -374,11 +374,6 @@
|
||||||
:prefix "custom-"
|
:prefix "custom-"
|
||||||
:group 'customize)
|
:group 'customize)
|
||||||
|
|
||||||
(defgroup abbrev-mode nil
|
|
||||||
"Word abbreviations mode."
|
|
||||||
:link '(custom-manual "(emacs)Abbrevs")
|
|
||||||
:group 'abbrev)
|
|
||||||
|
|
||||||
(defgroup alloc nil
|
(defgroup alloc nil
|
||||||
"Storage allocation and gc for GNU Emacs Lisp interpreter."
|
"Storage allocation and gc for GNU Emacs Lisp interpreter."
|
||||||
:tag "Storage Allocation"
|
:tag "Storage Allocation"
|
||||||
|
@ -1718,7 +1713,7 @@ item in another window.\n\n"))
|
||||||
(defun custom-browse-insert-prefix (prefix)
|
(defun custom-browse-insert-prefix (prefix)
|
||||||
"Insert PREFIX. On XEmacs convert it to line graphics."
|
"Insert PREFIX. On XEmacs convert it to line graphics."
|
||||||
;; Fixme: do graphics.
|
;; Fixme: do graphics.
|
||||||
(if nil ; (string-match "XEmacs" emacs-version)
|
(if nil ; (featurep 'xemacs)
|
||||||
(progn
|
(progn
|
||||||
(insert "*")
|
(insert "*")
|
||||||
(while (not (string-equal prefix ""))
|
(while (not (string-equal prefix ""))
|
||||||
|
|
|
@ -35,10 +35,7 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(let ((all '(;; abbrev.c
|
(let ((all '(;; alloc.c
|
||||||
(abbrev-all-caps abbrev-mode boolean)
|
|
||||||
(pre-abbrev-expand-hook abbrev-mode hook)
|
|
||||||
;; alloc.c
|
|
||||||
(gc-cons-threshold alloc integer)
|
(gc-cons-threshold alloc integer)
|
||||||
(garbage-collection-messages alloc boolean)
|
(garbage-collection-messages alloc boolean)
|
||||||
;; buffer.c
|
;; buffer.c
|
||||||
|
|
|
@ -583,10 +583,10 @@ This recursively follows aliases."
|
||||||
"Inform Custom that VARIABLE has been set (changed).
|
"Inform Custom that VARIABLE has been set (changed).
|
||||||
VARIABLE is a symbol that names a user option.
|
VARIABLE is a symbol that names a user option.
|
||||||
The result is that the change is treated as having been made through Custom."
|
The result is that the change is treated as having been made through Custom."
|
||||||
(interactive "vVariable: ")
|
|
||||||
(put variable 'customized-value (list (custom-quote (eval variable)))))
|
(put variable 'customized-value (list (custom-quote (eval variable)))))
|
||||||
|
|
||||||
;;; Custom Themes
|
|
||||||
|
;;; Custom Themes
|
||||||
|
|
||||||
;;; Loading files needed to customize a symbol.
|
;;; Loading files needed to customize a symbol.
|
||||||
;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
|
;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
|
|
||||||
(eval-when-compile (require 'cl))
|
(eval-when-compile (require 'cl))
|
||||||
(require 'pcvs-util)
|
(require 'pcvs-util)
|
||||||
(eval-when-compile (require 'pcvs))
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
;; Commands which will delete the selection need a 'delete-selection
|
;; Commands which will delete the selection need a 'delete-selection
|
||||||
;; property on their symbols; commands which insert text but don't
|
;; property on their symbols; commands which insert text but don't
|
||||||
;; have this property won't delete the selction. It can be one of
|
;; have this property won't delete the selection. It can be one of
|
||||||
;; the values:
|
;; the values:
|
||||||
;; 'yank
|
;; 'yank
|
||||||
;; For commands which do a yank; ensures the region about to be
|
;; For commands which do a yank; ensures the region about to be
|
||||||
|
@ -147,14 +147,19 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
(define-key minibuffer-local-must-match-map "\C-g" 'minibuffer-keyboard-quit)
|
(define-key minibuffer-local-must-match-map "\C-g" 'minibuffer-keyboard-quit)
|
||||||
(define-key minibuffer-local-isearch-map "\C-g" 'minibuffer-keyboard-quit)
|
(define-key minibuffer-local-isearch-map "\C-g" 'minibuffer-keyboard-quit)
|
||||||
|
|
||||||
(defun delsel-unload-hook ()
|
(defun delsel-unload-function ()
|
||||||
|
"Unload the Delete Selection library."
|
||||||
(define-key minibuffer-local-map "\C-g" 'abort-recursive-edit)
|
(define-key minibuffer-local-map "\C-g" 'abort-recursive-edit)
|
||||||
(define-key minibuffer-local-ns-map "\C-g" 'abort-recursive-edit)
|
(define-key minibuffer-local-ns-map "\C-g" 'abort-recursive-edit)
|
||||||
(define-key minibuffer-local-completion-map "\C-g" 'abort-recursive-edit)
|
(define-key minibuffer-local-completion-map "\C-g" 'abort-recursive-edit)
|
||||||
(define-key minibuffer-local-must-match-map "\C-g" 'abort-recursive-edit)
|
(define-key minibuffer-local-must-match-map "\C-g" 'abort-recursive-edit)
|
||||||
(define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit))
|
(define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit)
|
||||||
|
(dolist (sym '(self-insert-command self-insert-iso yank clipboard-yank
|
||||||
(add-hook 'delsel-unload-hook 'delsel-unload-hook)
|
insert-register delete-backward-char backward-delete-char-untabify
|
||||||
|
delete-char newline-and-indent newline open-line))
|
||||||
|
(remprop sym 'delete-selection))
|
||||||
|
;; continue standard unloading
|
||||||
|
nil)
|
||||||
|
|
||||||
(provide 'delsel)
|
(provide 'delsel)
|
||||||
|
|
||||||
|
|
|
@ -512,7 +512,7 @@ as well as widgets, buttons, overlays, and text properties."
|
||||||
(if (cadr x) (length (car x)) 0))
|
(if (cadr x) (length (car x)) 0))
|
||||||
item-list)))
|
item-list)))
|
||||||
(help-setup-xref nil (interactive-p))
|
(help-setup-xref nil (interactive-p))
|
||||||
(with-output-to-temp-buffer (help-buffer)
|
(with-help-window (help-buffer)
|
||||||
(with-current-buffer standard-output
|
(with-current-buffer standard-output
|
||||||
(set-buffer-multibyte multibyte-p)
|
(set-buffer-multibyte multibyte-p)
|
||||||
(let ((formatter (format "%%%ds:" max-width)))
|
(let ((formatter (format "%%%ds:" max-width)))
|
||||||
|
@ -631,8 +631,7 @@ as well as widgets, buttons, overlays, and text properties."
|
||||||
|
|
||||||
(if text-props-desc (insert text-props-desc))
|
(if text-props-desc (insert text-props-desc))
|
||||||
(setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
|
(setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
|
||||||
(toggle-read-only 1)
|
(toggle-read-only 1)))))
|
||||||
(print-help-return-message)))))
|
|
||||||
|
|
||||||
(defalias 'describe-char-after 'describe-char)
|
(defalias 'describe-char-after 'describe-char)
|
||||||
(make-obsolete 'describe-char-after 'describe-char "22.1")
|
(make-obsolete 'describe-char-after 'describe-char "22.1")
|
||||||
|
|
|
@ -135,6 +135,8 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
|
(defvar uniquify-managed)
|
||||||
|
|
||||||
(defvar desktop-file-version "206"
|
(defvar desktop-file-version "206"
|
||||||
"Version number of desktop file format.
|
"Version number of desktop file format.
|
||||||
Written into the desktop file and used at desktop read to provide
|
Written into the desktop file and used at desktop read to provide
|
||||||
|
@ -204,7 +206,7 @@ the normal hook `desktop-not-loaded-hook' is run."
|
||||||
(const :tag "Don't load" nil)
|
(const :tag "Don't load" nil)
|
||||||
(const :tag "Ask the user" ask))
|
(const :tag "Ask the user" ask))
|
||||||
:group 'desktop
|
:group 'desktop
|
||||||
:version "23.1")
|
:version "22.2")
|
||||||
|
|
||||||
(defcustom desktop-base-file-name
|
(defcustom desktop-base-file-name
|
||||||
(convert-standard-filename ".emacs.desktop")
|
(convert-standard-filename ".emacs.desktop")
|
||||||
|
@ -219,7 +221,7 @@ the normal hook `desktop-not-loaded-hook' is run."
|
||||||
"Name of lock file for Emacs desktop, excluding the directory part."
|
"Name of lock file for Emacs desktop, excluding the directory part."
|
||||||
:type 'file
|
:type 'file
|
||||||
:group 'desktop
|
:group 'desktop
|
||||||
:version "23.1")
|
:version "22.2")
|
||||||
|
|
||||||
(defcustom desktop-path '("." "~")
|
(defcustom desktop-path '("." "~")
|
||||||
"List of directories to search for the desktop file.
|
"List of directories to search for the desktop file.
|
||||||
|
@ -253,7 +255,7 @@ May be used to deal with accidental multiple Emacs jobs."
|
||||||
:type 'hook
|
:type 'hook
|
||||||
:group 'desktop
|
:group 'desktop
|
||||||
:options '(desktop-save-mode-off save-buffers-kill-emacs)
|
:options '(desktop-save-mode-off save-buffers-kill-emacs)
|
||||||
:version "23.1")
|
:version "22.2")
|
||||||
|
|
||||||
(defcustom desktop-after-read-hook nil
|
(defcustom desktop-after-read-hook nil
|
||||||
"Normal hook run after a successful `desktop-read'.
|
"Normal hook run after a successful `desktop-read'.
|
||||||
|
@ -454,7 +456,8 @@ Furthermore the major mode function must be autoloaded.")
|
||||||
(defcustom desktop-minor-mode-table
|
(defcustom desktop-minor-mode-table
|
||||||
'((auto-fill-function auto-fill-mode)
|
'((auto-fill-function auto-fill-mode)
|
||||||
(vc-mode nil)
|
(vc-mode nil)
|
||||||
(vc-dired-mode nil))
|
(vc-dired-mode nil)
|
||||||
|
(erc-track-minor-mode nil))
|
||||||
"Table mapping minor mode variables to minor mode functions.
|
"Table mapping minor mode variables to minor mode functions.
|
||||||
Each entry has the form (NAME RESTORE-FUNCTION).
|
Each entry has the form (NAME RESTORE-FUNCTION).
|
||||||
NAME is the name of the buffer-local variable indicating that the minor
|
NAME is the name of the buffer-local variable indicating that the minor
|
||||||
|
@ -653,7 +656,9 @@ is nil, ask the user where to save the desktop."
|
||||||
(list
|
(list
|
||||||
;; basic information
|
;; basic information
|
||||||
(desktop-file-name (buffer-file-name) desktop-dirname)
|
(desktop-file-name (buffer-file-name) desktop-dirname)
|
||||||
(buffer-name)
|
(if (bound-and-true-p uniquify-managed)
|
||||||
|
(uniquify-item-base (car uniquify-managed))
|
||||||
|
(buffer-name))
|
||||||
major-mode
|
major-mode
|
||||||
;; minor modes
|
;; minor modes
|
||||||
(let (ret)
|
(let (ret)
|
||||||
|
@ -1150,7 +1155,7 @@ directory DIRNAME."
|
||||||
(setq desktop-first-buffer result))
|
(setq desktop-first-buffer result))
|
||||||
(set-buffer result)
|
(set-buffer result)
|
||||||
(unless (equal (buffer-name) desktop-buffer-name)
|
(unless (equal (buffer-name) desktop-buffer-name)
|
||||||
(rename-buffer desktop-buffer-name))
|
(rename-buffer desktop-buffer-name t))
|
||||||
;; minor modes
|
;; minor modes
|
||||||
(cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible
|
(cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible
|
||||||
(auto-fill-mode 1))
|
(auto-fill-mode 1))
|
||||||
|
|
|
@ -1160,7 +1160,8 @@ Special value `always' suppresses confirmation."
|
||||||
(or (eq recursive 'always)
|
(or (eq recursive 'always)
|
||||||
(yes-or-no-p (format "Recursive copies of %s? " from))))
|
(yes-or-no-p (format "Recursive copies of %s? " from))))
|
||||||
;; This is a directory.
|
;; This is a directory.
|
||||||
(let ((files
|
(let ((mode (file-modes from))
|
||||||
|
(files
|
||||||
(condition-case err
|
(condition-case err
|
||||||
(directory-files from nil dired-re-no-dot)
|
(directory-files from nil dired-re-no-dot)
|
||||||
(file-error
|
(file-error
|
||||||
|
@ -1174,7 +1175,9 @@ Special value `always' suppresses confirmation."
|
||||||
(if (file-exists-p to)
|
(if (file-exists-p to)
|
||||||
(or top (dired-handle-overwrite to))
|
(or top (dired-handle-overwrite to))
|
||||||
(condition-case err
|
(condition-case err
|
||||||
(make-directory to)
|
(progn
|
||||||
|
(make-directory to)
|
||||||
|
(set-file-modes to #o700))
|
||||||
(file-error
|
(file-error
|
||||||
(push (dired-make-relative from)
|
(push (dired-make-relative from)
|
||||||
dired-create-files-failures)
|
dired-create-files-failures)
|
||||||
|
@ -1193,7 +1196,9 @@ Special value `always' suppresses confirmation."
|
||||||
(file-error
|
(file-error
|
||||||
(push (dired-make-relative thisfrom)
|
(push (dired-make-relative thisfrom)
|
||||||
dired-create-files-failures)
|
dired-create-files-failures)
|
||||||
(dired-log "Copying error for %s:\n%s\n" thisfrom err))))))
|
(dired-log "Copying error for %s:\n%s\n" thisfrom err)))))
|
||||||
|
(when (file-directory-p to)
|
||||||
|
(set-file-modes to mode)))
|
||||||
;; Not a directory.
|
;; Not a directory.
|
||||||
(or top (dired-handle-overwrite to))
|
(or top (dired-handle-overwrite to))
|
||||||
(condition-case err
|
(condition-case err
|
||||||
|
|
|
@ -939,7 +939,7 @@ dired."
|
||||||
;;; string. COMMAND may be a list of commands.
|
;;; string. COMMAND may be a list of commands.
|
||||||
;;;
|
;;;
|
||||||
;;; * Return this command to `dired-guess-shell-command' which prompts user
|
;;; * Return this command to `dired-guess-shell-command' which prompts user
|
||||||
;;; with it. The list of commands is temporarily put into the history list.
|
;;; with it. The list of commands is put into the list of default values.
|
||||||
;;; If a command is used successfully then it is stored permanently in
|
;;; If a command is used successfully then it is stored permanently in
|
||||||
;;; `dired-shell-command-history'.
|
;;; `dired-shell-command-history'.
|
||||||
|
|
||||||
|
|
115
lisp/dirtrack.el
115
lisp/dirtrack.el
|
@ -57,18 +57,12 @@
|
||||||
;; add 't' as a third element. Note that some of the functions in
|
;; add 't' as a third element. Note that some of the functions in
|
||||||
;; 'comint.el' assume a single-line prompt (eg, comint-bol).
|
;; 'comint.el' assume a single-line prompt (eg, comint-bol).
|
||||||
;;
|
;;
|
||||||
;; Determining this information may take some experimentation. Setting
|
;; Determining this information may take some experimentation. Using
|
||||||
;; the variable `dirtrack-debug' may help; it causes the directory-tracking
|
;; `dirtrack-debug-mode' may help; it causes the directory-tracking
|
||||||
;; filter to log messages to the buffer `dirtrack-debug-buffer'. You can easily
|
;; filter to log messages to the buffer `dirtrack-debug-buffer'.
|
||||||
;; toggle this setting with the `dirtrack-debug-toggle' function.
|
|
||||||
;;
|
;;
|
||||||
;; 3) Add a hook to shell-mode to enable the directory tracking:
|
;; 3) Activate `dirtrack-mode'. You may wish to turn ordinary shell
|
||||||
;;
|
;; tracking off by calling `shell-dirtrack-mode'.
|
||||||
;; (add-hook 'shell-mode-hook
|
|
||||||
;; (lambda () (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)))
|
|
||||||
;;
|
|
||||||
;; You may wish to turn ordinary shell tracking off by calling
|
|
||||||
;; `shell-dirtrack-toggle' or setting `shell-dirtrackp'.
|
|
||||||
;;
|
;;
|
||||||
;; Examples:
|
;; Examples:
|
||||||
;;
|
;;
|
||||||
|
@ -147,7 +141,7 @@ be on a single line."
|
||||||
:type 'boolean)
|
:type 'boolean)
|
||||||
|
|
||||||
(defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
|
(defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
|
||||||
"Buffer to write directory tracking debug information."
|
"Buffer in which to write directory tracking debug information."
|
||||||
:group 'dirtrack
|
:group 'dirtrack
|
||||||
:type 'string)
|
:type 'string)
|
||||||
|
|
||||||
|
@ -196,49 +190,53 @@ and ends with a forward slash."
|
||||||
(concat (match-string 1 dir) ":" (match-string 2 dir))
|
(concat (match-string 1 dir) ":" (match-string 2 dir))
|
||||||
dir))
|
dir))
|
||||||
|
|
||||||
;; Copied from shell.el
|
|
||||||
(defun dirtrack-toggle ()
|
|
||||||
"Enable or disable Dirtrack directory tracking in a shell buffer."
|
|
||||||
(interactive)
|
|
||||||
(if (setq dirtrackp (not dirtrackp))
|
|
||||||
(add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)
|
|
||||||
(remove-hook 'comint-preoutput-filter-functions 'dirtrack t))
|
|
||||||
(message "Directory tracking %s" (if dirtrackp "ON" "OFF")))
|
|
||||||
|
|
||||||
(defun dirtrack-debug-toggle ()
|
;;;###autoload
|
||||||
|
(define-minor-mode dirtrack-mode
|
||||||
|
"Enable or disable Dirtrack directory tracking in a shell buffer.
|
||||||
|
This method requires that your shell prompt contain the full
|
||||||
|
current working directory at all times, and that `dirtrack-list'
|
||||||
|
is set to match the prompt. This is an alternative to
|
||||||
|
`shell-dirtrack-mode', which works differently, by tracking `cd'
|
||||||
|
and similar commands which change the shell working directory."
|
||||||
|
nil nil nil
|
||||||
|
(if dirtrack-mode
|
||||||
|
(add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)
|
||||||
|
(remove-hook 'comint-preoutput-filter-functions 'dirtrack t)))
|
||||||
|
|
||||||
|
(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1")
|
||||||
|
(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1")
|
||||||
|
|
||||||
|
|
||||||
|
(define-minor-mode dirtrack-debug-mode
|
||||||
"Enable or disable Dirtrack debugging."
|
"Enable or disable Dirtrack debugging."
|
||||||
(interactive)
|
nil nil nil
|
||||||
(setq dirtrack-debug (not dirtrack-debug))
|
(if dirtrack-debug-mode
|
||||||
(message "Directory debugging %s" (if dirtrack-debug "ON" "OFF"))
|
(display-buffer (get-buffer-create dirtrack-debug-buffer))))
|
||||||
(and dirtrack-debug
|
|
||||||
(display-buffer (get-buffer-create dirtrack-debug-buffer))))
|
(define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode
|
||||||
|
"23.1")
|
||||||
|
(define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1")
|
||||||
|
|
||||||
|
|
||||||
(defun dirtrack-debug-message (string)
|
(defun dirtrack-debug-message (string)
|
||||||
(let ((buf (current-buffer))
|
"Insert string at the end of `dirtrack-debug-buffer'."
|
||||||
(debug-buf (get-buffer-create dirtrack-debug-buffer))
|
(when dirtrack-debug-mode
|
||||||
)
|
(with-current-buffer (get-buffer-create dirtrack-debug-buffer)
|
||||||
(set-buffer debug-buf)
|
(goto-char (point-max))
|
||||||
(goto-char (point-max))
|
(insert (concat string "\n")))))
|
||||||
(insert (concat string "\n"))
|
|
||||||
(set-buffer buf)
|
|
||||||
))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun dirtrack (input)
|
(defun dirtrack (input)
|
||||||
"Determine the current directory by scanning the process output for a prompt.
|
"Determine the current directory by scanning the process output for a prompt.
|
||||||
The prompt to look for is the first item in `dirtrack-list'.
|
The prompt to look for is the first item in `dirtrack-list'.
|
||||||
|
|
||||||
You can toggle directory tracking by using the function `dirtrack-toggle'.
|
You can toggle directory tracking by using the function `dirtrack-mode'.
|
||||||
|
|
||||||
If directory tracking does not seem to be working, you can use the
|
If directory tracking does not seem to be working, you can use the
|
||||||
function `dirtrack-debug-toggle' to turn on debugging output.
|
function `dirtrack-debug-mode' to turn on debugging output."
|
||||||
|
(unless (or (null dirtrack-mode)
|
||||||
You can enable directory tracking by adding this function to
|
(eq (point) (point-min))) ; no output?
|
||||||
`comint-output-filter-functions'."
|
|
||||||
(if (or (null dirtrackp)
|
|
||||||
;; No output?
|
|
||||||
(eq (point) (point-min)))
|
|
||||||
nil
|
|
||||||
(let (prompt-path
|
(let (prompt-path
|
||||||
(current-dir default-directory)
|
(current-dir default-directory)
|
||||||
(dirtrack-regexp (nth 0 dirtrack-list))
|
(dirtrack-regexp (nth 0 dirtrack-list))
|
||||||
|
@ -247,40 +245,31 @@ You can enable directory tracking by adding this function to
|
||||||
(multi-line (nth 2 dirtrack-list)))
|
(multi-line (nth 2 dirtrack-list)))
|
||||||
(save-excursion
|
(save-excursion
|
||||||
;; No match
|
;; No match
|
||||||
(if (null (string-match dirtrack-regexp input))
|
(if (not (string-match dirtrack-regexp input))
|
||||||
(and dirtrack-debug
|
(dirtrack-debug-message
|
||||||
(dirtrack-debug-message
|
(format "Input `%s' failed to match `dirtrack-regexp'" input))
|
||||||
(format
|
|
||||||
"Input `%s' failed to match `dirtrack-regexp'" input)))
|
|
||||||
(setq prompt-path (match-string match-num input))
|
(setq prompt-path (match-string match-num input))
|
||||||
;; Empty string
|
;; Empty string
|
||||||
(if (not (> (length prompt-path) 0))
|
(if (not (> (length prompt-path) 0))
|
||||||
(and dirtrack-debug
|
(dirtrack-debug-message "Match is empty string")
|
||||||
(dirtrack-debug-message "Match is empty string"))
|
|
||||||
;; Transform prompts into canonical forms
|
;; Transform prompts into canonical forms
|
||||||
(setq prompt-path (funcall dirtrack-directory-function
|
(setq prompt-path (funcall dirtrack-directory-function
|
||||||
prompt-path))
|
prompt-path)
|
||||||
(setq current-dir (funcall dirtrack-canonicalize-function
|
current-dir (funcall dirtrack-canonicalize-function
|
||||||
current-dir))
|
current-dir))
|
||||||
(and dirtrack-debug
|
(dirtrack-debug-message
|
||||||
(dirtrack-debug-message
|
(format "Prompt is %s\nCurrent directory is %s"
|
||||||
(format
|
prompt-path current-dir))
|
||||||
"Prompt is %s\nCurrent directory is %s"
|
|
||||||
prompt-path current-dir)))
|
|
||||||
;; Compare them
|
;; Compare them
|
||||||
(if (or (string= current-dir prompt-path)
|
(if (or (string= current-dir prompt-path)
|
||||||
(string= current-dir
|
(string= current-dir (abbreviate-file-name prompt-path)))
|
||||||
(abbreviate-file-name prompt-path)))
|
(dirtrack-debug-message (format "Not changing directory"))
|
||||||
(and dirtrack-debug
|
|
||||||
(dirtrack-debug-message
|
|
||||||
(format "Not changing directory")))
|
|
||||||
;; It's possible that Emacs will think the directory
|
;; It's possible that Emacs will think the directory
|
||||||
;; won't exist (eg, rlogin buffers)
|
;; won't exist (eg, rlogin buffers)
|
||||||
(if (file-accessible-directory-p prompt-path)
|
(if (file-accessible-directory-p prompt-path)
|
||||||
;; Change directory
|
;; Change directory
|
||||||
(and (shell-process-cd prompt-path)
|
(and (shell-process-cd prompt-path)
|
||||||
(run-hooks 'dirtrack-directory-change-hook)
|
(run-hooks 'dirtrack-directory-change-hook)
|
||||||
dirtrack-debug
|
|
||||||
(dirtrack-debug-message
|
(dirtrack-debug-message
|
||||||
(format "Changing directory to %s" prompt-path)))
|
(format "Changing directory to %s" prompt-path)))
|
||||||
(error "Directory %s does not exist" prompt-path)))
|
(error "Directory %s does not exist" prompt-path)))
|
||||||
|
|
|
@ -75,7 +75,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun describe-display-table (dt)
|
(defun describe-display-table (dt)
|
||||||
"Describe the display table DT in a help buffer."
|
"Describe the display table DT in a help buffer."
|
||||||
(with-output-to-temp-buffer "*Help*"
|
(with-help-window "*Help*"
|
||||||
(princ "\nTruncation glyph: ")
|
(princ "\nTruncation glyph: ")
|
||||||
(prin1 (display-table-slot dt 'truncation))
|
(prin1 (display-table-slot dt 'truncation))
|
||||||
(princ "\nWrap glyph: ")
|
(princ "\nWrap glyph: ")
|
||||||
|
@ -97,8 +97,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
|
||||||
(aset vector i (aref dt i))
|
(aset vector i (aref dt i))
|
||||||
(setq i (1+ i)))
|
(setq i (1+ i)))
|
||||||
(describe-vector vector))
|
(describe-vector vector))
|
||||||
(help-mode))
|
(help-mode))))
|
||||||
(print-help-return-message)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun describe-current-display-table ()
|
(defun describe-current-display-table ()
|
||||||
|
|
555
lisp/doc-view.el
555
lisp/doc-view.el
|
@ -42,8 +42,7 @@
|
||||||
;;
|
;;
|
||||||
;; and the document will be converted and displayed, if your emacs supports png
|
;; and the document will be converted and displayed, if your emacs supports png
|
||||||
;; images. With `C-c C-c' you can toggle between the rendered images
|
;; images. With `C-c C-c' you can toggle between the rendered images
|
||||||
;; representation and the source text representation of the document. With
|
;; representation and the source text representation of the document.
|
||||||
;; `C-c C-e' you can switch to an appropriate editing mode for the document.
|
|
||||||
;;
|
;;
|
||||||
;; Since conversion may take some time all the PNG images are cached in a
|
;; Since conversion may take some time all the PNG images are cached in a
|
||||||
;; subdirectory of `doc-view-cache-directory' and reused when you want to view
|
;; subdirectory of `doc-view-cache-directory' and reused when you want to view
|
||||||
|
@ -72,14 +71,14 @@
|
||||||
;; You can also search within the document. The command `doc-view-search'
|
;; You can also search within the document. The command `doc-view-search'
|
||||||
;; (bound to `C-s') queries for a search regexp and initializes a list of all
|
;; (bound to `C-s') queries for a search regexp and initializes a list of all
|
||||||
;; matching pages and messages how many match-pages were found. After that you
|
;; matching pages and messages how many match-pages were found. After that you
|
||||||
;; can jump to the next page containing a match with
|
;; can jump to the next page containing a match with an additional `C-s'. With
|
||||||
;; `doc-view-search-next-match' (bound to `C-S-n') or to the previous matching
|
;; `C-r' you can do the same, but backwards. To search for a new regexp give a
|
||||||
;; page with `doc-view-search-previous-match' (bound to `C-S-p'). This works
|
;; prefix arg to one of the search functions, e.g. by typing `C-u C-s'. The
|
||||||
;; by searching a plain text representation of the document. If that doesn't
|
;; searching works by using a plain text representation of the document. If
|
||||||
;; already exist the first invokation of `doc-view-search' starts the
|
;; that doesn't already exist the first invokation of `doc-view-search' (or
|
||||||
;; conversion. When that finishes and you're still viewing the document
|
;; `doc-view-search-backward') starts the conversion. When that finishes and
|
||||||
;; (i.e. you didn't switch to another buffer) you're queried for the regexp
|
;; you're still viewing the document (i.e. you didn't switch to another buffer)
|
||||||
;; then.
|
;; you're queried for the regexp then.
|
||||||
;;
|
;;
|
||||||
;; Dired users can simply hit `v' on a document file. If it's a PS, PDF or DVI
|
;; Dired users can simply hit `v' on a document file. If it's a PS, PDF or DVI
|
||||||
;; it will be opened using `doc-view-mode'.
|
;; it will be opened using `doc-view-mode'.
|
||||||
|
@ -100,9 +99,17 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
|
;; Todo:
|
||||||
|
;; - better menu.
|
||||||
|
;; - don't use `find-file'.
|
||||||
|
;; - Bind slicing to a drag event.
|
||||||
|
;; - zoom (the whole document and/or just the region around the cursor).
|
||||||
|
;; - get rid of the silly arrow in the fringe.
|
||||||
|
;; - improve anti-aliasing (pdf-utils gets it better).
|
||||||
|
|
||||||
(require 'dired)
|
(require 'dired)
|
||||||
(require 'image-mode)
|
(require 'image-mode)
|
||||||
(eval-when-compile (require 'cl))
|
(require 'jka-compr)
|
||||||
|
|
||||||
;;;; Customization Options
|
;;;; Customization Options
|
||||||
|
|
||||||
|
@ -150,8 +157,9 @@ Needed for searching."
|
||||||
:type 'file
|
:type 'file
|
||||||
:group 'doc-view)
|
:group 'doc-view)
|
||||||
|
|
||||||
(defcustom doc-view-cache-directory (concat temporary-file-directory
|
(defcustom doc-view-cache-directory
|
||||||
"doc-view")
|
(expand-file-name (format "docview%d" (user-uid))
|
||||||
|
temporary-file-directory)
|
||||||
"The base directory, where the PNG images will be saved."
|
"The base directory, where the PNG images will be saved."
|
||||||
:type 'directory
|
:type 'directory
|
||||||
:group 'doc-view)
|
:group 'doc-view)
|
||||||
|
@ -162,8 +170,8 @@ Needed for searching."
|
||||||
:group 'doc-view)
|
:group 'doc-view)
|
||||||
|
|
||||||
(defcustom doc-view-conversion-refresh-interval 3
|
(defcustom doc-view-conversion-refresh-interval 3
|
||||||
"Every how much seconds the DocView buffer gets refreshed while conversion.
|
"Interval in seconds between refreshes of the DocView buffer while converting.
|
||||||
After such an refresh newly converted pages will be available for
|
After such a refresh newly converted pages will be available for
|
||||||
viewing. If set to nil there won't be any refreshes and the
|
viewing. If set to nil there won't be any refreshes and the
|
||||||
pages won't be displayed before conversion of the whole document
|
pages won't be displayed before conversion of the whole document
|
||||||
has finished."
|
has finished."
|
||||||
|
@ -178,9 +186,6 @@ has finished."
|
||||||
(defvar doc-view-current-page nil
|
(defvar doc-view-current-page nil
|
||||||
"Only used internally.")
|
"Only used internally.")
|
||||||
|
|
||||||
(defvar doc-view-current-doc nil
|
|
||||||
"Only used internally.")
|
|
||||||
|
|
||||||
(defvar doc-view-current-converter-process nil
|
(defvar doc-view-current-converter-process nil
|
||||||
"Only used internally.")
|
"Only used internally.")
|
||||||
|
|
||||||
|
@ -198,17 +203,20 @@ has finished."
|
||||||
|
|
||||||
(defvar doc-view-current-image nil
|
(defvar doc-view-current-image nil
|
||||||
"Only used internally.")
|
"Only used internally.")
|
||||||
|
(defvar doc-view-current-overlay)
|
||||||
|
(defvar doc-view-pending-cache-flush nil)
|
||||||
|
|
||||||
(defvar doc-view-current-info nil
|
(defvar doc-view-current-info nil
|
||||||
"Only used internally.")
|
"Only used internally.")
|
||||||
|
|
||||||
(defvar doc-view-current-display nil
|
(defvar doc-view-previous-major-mode nil
|
||||||
"Only used internally.")
|
"Only used internally.")
|
||||||
|
|
||||||
;;;; DocView Keymaps
|
;;;; DocView Keymaps
|
||||||
|
|
||||||
(defvar doc-view-mode-map
|
(defvar doc-view-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
|
(suppress-keymap map)
|
||||||
;; Navigation in the document
|
;; Navigation in the document
|
||||||
(define-key map (kbd "n") 'doc-view-next-page)
|
(define-key map (kbd "n") 'doc-view-next-page)
|
||||||
(define-key map (kbd "p") 'doc-view-previous-page)
|
(define-key map (kbd "p") 'doc-view-previous-page)
|
||||||
|
@ -220,10 +228,11 @@ has finished."
|
||||||
(define-key map (kbd "DEL") 'doc-view-scroll-down-or-previous-page)
|
(define-key map (kbd "DEL") 'doc-view-scroll-down-or-previous-page)
|
||||||
(define-key map (kbd "M-<") 'doc-view-first-page)
|
(define-key map (kbd "M-<") 'doc-view-first-page)
|
||||||
(define-key map (kbd "M->") 'doc-view-last-page)
|
(define-key map (kbd "M->") 'doc-view-last-page)
|
||||||
(define-key map (kbd "g") 'doc-view-goto-page)
|
(define-key map [remap goto-line] 'doc-view-goto-page)
|
||||||
;; Killing/burying the buffer (and the process)
|
;; Killing/burying the buffer (and the process)
|
||||||
(define-key map (kbd "q") 'bury-buffer)
|
(define-key map (kbd "q") 'bury-buffer)
|
||||||
(define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
|
(define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
|
||||||
|
(define-key map (kbd "K") 'doc-view-kill-proc)
|
||||||
;; Slicing the image
|
;; Slicing the image
|
||||||
(define-key map (kbd "s s") 'doc-view-set-slice)
|
(define-key map (kbd "s s") 'doc-view-set-slice)
|
||||||
(define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
|
(define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
|
||||||
|
@ -231,8 +240,7 @@ has finished."
|
||||||
;; Searching
|
;; Searching
|
||||||
(define-key map (kbd "C-s") 'doc-view-search)
|
(define-key map (kbd "C-s") 'doc-view-search)
|
||||||
(define-key map (kbd "<find>") 'doc-view-search)
|
(define-key map (kbd "<find>") 'doc-view-search)
|
||||||
(define-key map (kbd "C-S-n") 'doc-view-search-next-match)
|
(define-key map (kbd "C-r") 'doc-view-search-backward)
|
||||||
(define-key map (kbd "C-S-p") 'doc-view-search-previous-match)
|
|
||||||
;; Scrolling
|
;; Scrolling
|
||||||
(define-key map [remap forward-char] 'image-forward-hscroll)
|
(define-key map [remap forward-char] 'image-forward-hscroll)
|
||||||
(define-key map [remap backward-char] 'image-backward-hscroll)
|
(define-key map [remap backward-char] 'image-backward-hscroll)
|
||||||
|
@ -242,24 +250,30 @@ has finished."
|
||||||
(define-key map (kbd "C-t") 'doc-view-show-tooltip)
|
(define-key map (kbd "C-t") 'doc-view-show-tooltip)
|
||||||
;; Toggle between text and image display or editing
|
;; Toggle between text and image display or editing
|
||||||
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
|
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
|
||||||
(define-key map (kbd "C-c C-e") 'doc-view-edit-doc)
|
|
||||||
;; Reconvert the current document
|
;; Reconvert the current document
|
||||||
(define-key map (kbd "g") 'doc-view-reconvert-doc)
|
(define-key map (kbd "g") 'revert-buffer)
|
||||||
(suppress-keymap map)
|
(define-key map (kbd "r") 'revert-buffer)
|
||||||
map)
|
map)
|
||||||
"Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
|
"Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
|
||||||
|
|
||||||
(defvar doc-view-mode-text-map
|
(easy-menu-define doc-view-menu doc-view-mode-map
|
||||||
|
"Menu for Doc View mode."
|
||||||
|
'("DocView"
|
||||||
|
["Set Slice" doc-view-set-slice-using-mouse]
|
||||||
|
["Set Slice (manual)" doc-view-set-slice]
|
||||||
|
["Reset Slice" doc-view-reset-slice]
|
||||||
|
"---"
|
||||||
|
["Search" doc-view-search]
|
||||||
|
["Search Backwards" doc-view-search-backward]
|
||||||
|
["Toggle display" doc-view-toggle-display]
|
||||||
|
))
|
||||||
|
|
||||||
|
(defvar doc-view-minor-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
;; Toggle between text and image display or editing
|
;; Toggle between text and image display or editing
|
||||||
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
|
(define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
|
||||||
(define-key map (kbd "C-c C-e") 'doc-view-edit-doc)
|
|
||||||
;; Killing/burying the buffer (and the process)
|
|
||||||
(define-key map (kbd "q") 'bury-buffer)
|
|
||||||
(define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
|
|
||||||
(define-key map (kbd "C-x k") 'doc-view-kill-proc-and-buffer)
|
|
||||||
map)
|
map)
|
||||||
"Keymap used by `doc-view-mode' when displaying a document as text.")
|
"Keymap used by `doc-minor-view-mode'.")
|
||||||
|
|
||||||
;;;; Navigation Commands
|
;;;; Navigation Commands
|
||||||
|
|
||||||
|
@ -293,16 +307,14 @@ has finished."
|
||||||
(setq contexts (concat contexts " - \"" m "\"\n")))
|
(setq contexts (concat contexts " - \"" m "\"\n")))
|
||||||
contexts)))))
|
contexts)))))
|
||||||
;; Update the buffer
|
;; Update the buffer
|
||||||
(let ((inhibit-read-only t))
|
(doc-view-insert-image (nth (1- page) doc-view-current-files)
|
||||||
(erase-buffer)
|
:pointer 'arrow)
|
||||||
(let ((beg (point)))
|
(overlay-put doc-view-current-overlay 'help-echo doc-view-current-info)
|
||||||
(doc-view-insert-image (nth (1- page) doc-view-current-files)
|
(goto-char (point-min))
|
||||||
:pointer 'arrow)
|
;; This seems to be needed for set-window-hscroll (in
|
||||||
(put-text-property beg (point) 'help-echo doc-view-current-info))
|
;; image-forward-hscroll) to do something useful, I don't have time to
|
||||||
(insert "\n" doc-view-current-info)
|
;; debug this now. :-( --Stef
|
||||||
(goto-char (point-min))
|
(forward-char)))
|
||||||
(forward-char))
|
|
||||||
(set-buffer-modified-p nil)))
|
|
||||||
|
|
||||||
(defun doc-view-next-page (&optional arg)
|
(defun doc-view-next-page (&optional arg)
|
||||||
"Browse ARG pages forward."
|
"Browse ARG pages forward."
|
||||||
|
@ -339,11 +351,14 @@ has finished."
|
||||||
(error (doc-view-previous-page)
|
(error (doc-view-previous-page)
|
||||||
(goto-char (point-max)))))
|
(goto-char (point-max)))))
|
||||||
|
|
||||||
|
;;;; Utility Functions
|
||||||
|
|
||||||
(defun doc-view-kill-proc ()
|
(defun doc-view-kill-proc ()
|
||||||
"Kill the current converter process."
|
"Kill the current converter process."
|
||||||
(interactive)
|
(interactive)
|
||||||
(when doc-view-current-converter-process
|
(when doc-view-current-converter-process
|
||||||
(kill-process doc-view-current-converter-process))
|
(kill-process doc-view-current-converter-process)
|
||||||
|
(setq doc-view-current-converter-process nil))
|
||||||
(when doc-view-current-timer
|
(when doc-view-current-timer
|
||||||
(cancel-timer doc-view-current-timer)
|
(cancel-timer doc-view-current-timer)
|
||||||
(setq doc-view-current-timer nil))
|
(setq doc-view-current-timer nil))
|
||||||
|
@ -356,33 +371,68 @@ has finished."
|
||||||
(when (eq major-mode 'doc-view-mode)
|
(when (eq major-mode 'doc-view-mode)
|
||||||
(kill-buffer (current-buffer))))
|
(kill-buffer (current-buffer))))
|
||||||
|
|
||||||
;;;; Conversion Functions
|
(defun doc-view-make-safe-dir (dir)
|
||||||
|
(condition-case nil
|
||||||
(defun doc-view-reconvert-doc (&rest args)
|
(let ((umask (default-file-modes)))
|
||||||
"Reconvert the current document.
|
(unwind-protect
|
||||||
Should be invoked when the cached images aren't up-to-date."
|
(progn
|
||||||
(interactive)
|
;; Create temp files with strict access rights. It's easy to
|
||||||
(let ((inhibit-read-only t)
|
;; loosen them later, whereas it's impossible to close the
|
||||||
(doc doc-view-current-doc))
|
;; time-window of loose permissions otherwise.
|
||||||
(doc-view-kill-proc)
|
(set-default-file-modes #o0700)
|
||||||
;; Clear the old cached files
|
(make-directory dir))
|
||||||
(when (file-exists-p (doc-view-current-cache-dir))
|
;; Reset the umask.
|
||||||
(dired-delete-file (doc-view-current-cache-dir) 'always))
|
(set-default-file-modes umask)))
|
||||||
(doc-view-kill-proc-and-buffer)
|
(file-already-exists
|
||||||
(find-file doc)))
|
(if (file-symlink-p dir)
|
||||||
|
(error "Danger: %s points to a symbolic link" dir))
|
||||||
|
;; In case it was created earlier with looser rights.
|
||||||
|
;; We could check the mode info returned by file-attributes, but it's
|
||||||
|
;; a pain to parse and it may not tell you what we want under
|
||||||
|
;; non-standard file-systems. So let's just say what we want and let
|
||||||
|
;; the underlying C code and file-system figure it out.
|
||||||
|
;; This also ends up checking a bunch of useful conditions: it makes
|
||||||
|
;; sure we have write-access to the directory and that we own it, thus
|
||||||
|
;; closing a bunch of security holes.
|
||||||
|
(set-file-modes dir #o0700))))
|
||||||
|
|
||||||
(defun doc-view-current-cache-dir ()
|
(defun doc-view-current-cache-dir ()
|
||||||
"Return the directory where the png files of the current doc should be saved.
|
"Return the directory where the png files of the current doc should be saved.
|
||||||
It's a subdirectory of `doc-view-cache-directory'."
|
It's a subdirectory of `doc-view-cache-directory'."
|
||||||
(if doc-view-current-cache-dir
|
(if doc-view-current-cache-dir
|
||||||
doc-view-current-cache-dir
|
doc-view-current-cache-dir
|
||||||
|
;; Try and make sure doc-view-cache-directory exists and is safe.
|
||||||
|
(doc-view-make-safe-dir doc-view-cache-directory)
|
||||||
|
;; Now compute the subdirectory to use.
|
||||||
(setq doc-view-current-cache-dir
|
(setq doc-view-current-cache-dir
|
||||||
(file-name-as-directory
|
(file-name-as-directory
|
||||||
(concat (file-name-as-directory doc-view-cache-directory)
|
(expand-file-name
|
||||||
(let ((doc doc-view-current-doc))
|
(let ((doc buffer-file-name))
|
||||||
(with-temp-buffer
|
(concat (file-name-nondirectory doc)
|
||||||
(insert-file-contents-literally doc)
|
"-"
|
||||||
(md5 (current-buffer)))))))))
|
(with-temp-buffer
|
||||||
|
(insert-file-contents-literally doc)
|
||||||
|
(md5 (current-buffer)))))
|
||||||
|
doc-view-cache-directory)))))
|
||||||
|
|
||||||
|
(defun doc-view-remove-if (predicate list)
|
||||||
|
"Return LIST with all items removed that satisfy PREDICATE."
|
||||||
|
(let (new-list)
|
||||||
|
(dolist (item list (nreverse new-list))
|
||||||
|
(when (not (funcall predicate item))
|
||||||
|
(setq new-list (cons item new-list))))))
|
||||||
|
|
||||||
|
;;;; Conversion Functions
|
||||||
|
|
||||||
|
(defun doc-view-reconvert-doc ()
|
||||||
|
"Reconvert the current document.
|
||||||
|
Should be invoked when the cached images aren't up-to-date."
|
||||||
|
(interactive)
|
||||||
|
(doc-view-kill-proc)
|
||||||
|
;; Clear the old cached files
|
||||||
|
(when (file-exists-p (doc-view-current-cache-dir))
|
||||||
|
(dired-delete-file (doc-view-current-cache-dir) 'always))
|
||||||
|
(doc-view-initiate-display))
|
||||||
|
|
||||||
(defun doc-view-dvi->pdf-sentinel (proc event)
|
(defun doc-view-dvi->pdf-sentinel (proc event)
|
||||||
"If DVI->PDF conversion was successful, convert the PDF to PNG now."
|
"If DVI->PDF conversion was successful, convert the PDF to PNG now."
|
||||||
|
@ -393,12 +443,12 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
mode-line-process nil)
|
mode-line-process nil)
|
||||||
;; Now go on converting this PDF to a set of PNG files.
|
;; Now go on converting this PDF to a set of PNG files.
|
||||||
(let* ((pdf (process-get proc 'pdf-file))
|
(let* ((pdf (process-get proc 'pdf-file))
|
||||||
(png (concat (doc-view-current-cache-dir)
|
(png (expand-file-name "page-%d.png"
|
||||||
"page-%d.png")))
|
(doc-view-current-cache-dir))))
|
||||||
(doc-view-pdf/ps->png pdf png))))
|
(doc-view-pdf/ps->png pdf png))))
|
||||||
|
|
||||||
(defun doc-view-dvi->pdf (dvi pdf)
|
(defun doc-view-dvi->pdf (dvi pdf)
|
||||||
"Convert DVI to PDF asynchrounously."
|
"Convert DVI to PDF asynchronously."
|
||||||
(setq doc-view-current-converter-process
|
(setq doc-view-current-converter-process
|
||||||
(start-process "dvi->pdf" doc-view-conversion-buffer
|
(start-process "dvi->pdf" doc-view-conversion-buffer
|
||||||
doc-view-dvipdfm-program
|
doc-view-dvipdfm-program
|
||||||
|
@ -420,10 +470,10 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
(cancel-timer doc-view-current-timer)
|
(cancel-timer doc-view-current-timer)
|
||||||
(setq doc-view-current-timer nil))
|
(setq doc-view-current-timer nil))
|
||||||
;; Yippie, finished. Update the display!
|
;; Yippie, finished. Update the display!
|
||||||
(doc-view-display doc-view-current-doc)))
|
(doc-view-display buffer-file-name)))
|
||||||
|
|
||||||
(defun doc-view-pdf/ps->png (pdf-ps png)
|
(defun doc-view-pdf/ps->png (pdf-ps png)
|
||||||
"Convert PDF-PS to PNG asynchrounously."
|
"Convert PDF-PS to PNG asynchronously."
|
||||||
(setq doc-view-current-converter-process
|
(setq doc-view-current-converter-process
|
||||||
(apply 'start-process
|
(apply 'start-process
|
||||||
(append (list "pdf/ps->png" doc-view-conversion-buffer
|
(append (list "pdf/ps->png" doc-view-conversion-buffer
|
||||||
|
@ -439,8 +489,8 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
(when doc-view-conversion-refresh-interval
|
(when doc-view-conversion-refresh-interval
|
||||||
(setq doc-view-current-timer
|
(setq doc-view-current-timer
|
||||||
(run-at-time "1 secs" doc-view-conversion-refresh-interval
|
(run-at-time "1 secs" doc-view-conversion-refresh-interval
|
||||||
'doc-view-display-maybe
|
'doc-view-display
|
||||||
doc-view-current-doc))))
|
buffer-file-name))))
|
||||||
|
|
||||||
(defun doc-view-pdf->txt-sentinel (proc event)
|
(defun doc-view-pdf->txt-sentinel (proc event)
|
||||||
(if (not (string-match "finished" event))
|
(if (not (string-match "finished" event))
|
||||||
|
@ -453,10 +503,10 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
;; If the user looks at the DocView buffer where the conversion was
|
;; If the user looks at the DocView buffer where the conversion was
|
||||||
;; performed, search anew. This time it will be queried for a regexp.
|
;; performed, search anew. This time it will be queried for a regexp.
|
||||||
(when (eq current-buffer proc-buffer)
|
(when (eq current-buffer proc-buffer)
|
||||||
(doc-view-search)))))
|
(doc-view-search nil)))))
|
||||||
|
|
||||||
(defun doc-view-pdf->txt (pdf txt)
|
(defun doc-view-pdf->txt (pdf txt)
|
||||||
"Convert PDF to TXT asynchrounously."
|
"Convert PDF to TXT asynchronously."
|
||||||
(setq doc-view-current-converter-process
|
(setq doc-view-current-converter-process
|
||||||
(start-process "pdf->txt" doc-view-conversion-buffer
|
(start-process "pdf->txt" doc-view-conversion-buffer
|
||||||
doc-view-pdftotext-program "-raw"
|
doc-view-pdftotext-program "-raw"
|
||||||
|
@ -474,18 +524,19 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
mode-line-process nil)
|
mode-line-process nil)
|
||||||
;; Now we can transform to plain text.
|
;; Now we can transform to plain text.
|
||||||
(doc-view-pdf->txt (process-get proc 'pdf-file)
|
(doc-view-pdf->txt (process-get proc 'pdf-file)
|
||||||
(concat (doc-view-current-cache-dir)
|
(expand-file-name "doc.txt"
|
||||||
"doc.txt"))))
|
(doc-view-current-cache-dir)))))
|
||||||
|
|
||||||
(defun doc-view-ps->pdf (ps pdf)
|
(defun doc-view-ps->pdf (ps pdf)
|
||||||
"Convert PS to PDF asynchronously."
|
"Convert PS to PDF asynchronously."
|
||||||
(setq doc-view-current-converter-process
|
(setq doc-view-current-converter-process
|
||||||
(start-process "ps->pdf" doc-view-conversion-buffer
|
(start-process "ps->pdf" doc-view-conversion-buffer
|
||||||
doc-view-ps2pdf-program
|
doc-view-ps2pdf-program
|
||||||
ps pdf
|
|
||||||
;; Avoid security problems when rendering files from
|
;; Avoid security problems when rendering files from
|
||||||
;; untrusted sources.
|
;; untrusted sources.
|
||||||
"-dSAFER")
|
"-dSAFER"
|
||||||
|
;; in-file and out-file
|
||||||
|
ps pdf)
|
||||||
mode-line-process (list (format ":%s" doc-view-current-converter-process)))
|
mode-line-process (list (format ":%s" doc-view-current-converter-process)))
|
||||||
(set-process-sentinel doc-view-current-converter-process
|
(set-process-sentinel doc-view-current-converter-process
|
||||||
'doc-view-ps->pdf-sentinel)
|
'doc-view-ps->pdf-sentinel)
|
||||||
|
@ -493,21 +544,26 @@ It's a subdirectory of `doc-view-cache-directory'."
|
||||||
(process-put doc-view-current-converter-process 'pdf-file pdf))
|
(process-put doc-view-current-converter-process 'pdf-file pdf))
|
||||||
|
|
||||||
(defun doc-view-convert-current-doc ()
|
(defun doc-view-convert-current-doc ()
|
||||||
"Convert `doc-view-current-doc' to a set of png files, one file per page.
|
"Convert `buffer-file-name' to a set of png files, one file per page.
|
||||||
Those files are saved in the directory given by the function
|
Those files are saved in the directory given by the function
|
||||||
`doc-view-current-cache-dir'."
|
`doc-view-current-cache-dir'."
|
||||||
(clear-image-cache)
|
;; Let stale files still display while we recompute the new ones, so only
|
||||||
(let ((png-file (concat (doc-view-current-cache-dir)
|
;; flush the cache when the conversion is over. One of the reasons why it
|
||||||
"page-%d.png")))
|
;; is important to keep displaying the stale page is so that revert-buffer
|
||||||
(make-directory doc-view-current-cache-dir t)
|
;; preserves the horizontal/vertical scroll settings (which are otherwise
|
||||||
(if (not (string= (file-name-extension doc-view-current-doc) "dvi"))
|
;; resets during the redisplay).
|
||||||
|
(setq doc-view-pending-cache-flush t)
|
||||||
|
(let ((png-file (expand-file-name "page-%d.png"
|
||||||
|
(doc-view-current-cache-dir))))
|
||||||
|
(make-directory (doc-view-current-cache-dir))
|
||||||
|
(if (not (string= (file-name-extension buffer-file-name) "dvi"))
|
||||||
;; Convert to PNG images.
|
;; Convert to PNG images.
|
||||||
(doc-view-pdf/ps->png doc-view-current-doc png-file)
|
(doc-view-pdf/ps->png buffer-file-name png-file)
|
||||||
;; DVI files have to be converted to PDF before Ghostscript can process
|
;; DVI files have to be converted to PDF before Ghostscript can process
|
||||||
;; it.
|
;; it.
|
||||||
(doc-view-dvi->pdf doc-view-current-doc
|
(doc-view-dvi->pdf buffer-file-name
|
||||||
(concat (file-name-as-directory doc-view-current-cache-dir)
|
(expand-file-name "doc.pdf"
|
||||||
"doc.pdf")))))
|
doc-view-current-cache-dir)))))
|
||||||
|
|
||||||
;;;; Slicing
|
;;;; Slicing
|
||||||
|
|
||||||
|
@ -551,8 +607,7 @@ dragging it to its bottom-right corner. See also
|
||||||
|
|
||||||
(defun doc-view-reset-slice ()
|
(defun doc-view-reset-slice ()
|
||||||
"Reset the current slice.
|
"Reset the current slice.
|
||||||
After calling this function the whole pages will be visible
|
After calling this function whole pages will be visible again."
|
||||||
again."
|
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq doc-view-current-slice nil)
|
(setq doc-view-current-slice nil)
|
||||||
;; Redisplay
|
;; Redisplay
|
||||||
|
@ -563,23 +618,23 @@ again."
|
||||||
(defun doc-view-insert-image (file &rest args)
|
(defun doc-view-insert-image (file &rest args)
|
||||||
"Insert the given png FILE.
|
"Insert the given png FILE.
|
||||||
ARGS is a list of image descriptors."
|
ARGS is a list of image descriptors."
|
||||||
|
(when doc-view-pending-cache-flush
|
||||||
|
(clear-image-cache)
|
||||||
|
(setq doc-view-pending-cache-flush nil))
|
||||||
(let ((image (apply 'create-image file 'png nil args)))
|
(let ((image (apply 'create-image file 'png nil args)))
|
||||||
(setq doc-view-current-image image)
|
(setq doc-view-current-image image)
|
||||||
(insert-image image (concat "[" file "]") nil doc-view-current-slice)))
|
(move-overlay doc-view-current-overlay (point-min) (point-max))
|
||||||
|
(overlay-put doc-view-current-overlay 'display
|
||||||
|
(if doc-view-current-slice
|
||||||
|
(list (cons 'slice doc-view-current-slice) image)
|
||||||
|
image))))
|
||||||
|
|
||||||
(defun doc-view-sort (a b)
|
(defun doc-view-sort (a b)
|
||||||
"Return non-nil if A should be sorted before B.
|
"Return non-nil if A should be sorted before B.
|
||||||
Predicate for sorting `doc-view-current-files'."
|
Predicate for sorting `doc-view-current-files'."
|
||||||
(if (< (length a) (length b))
|
(or (< (length a) (length b))
|
||||||
t
|
(and (= (length a) (length b))
|
||||||
(if (> (length a) (length b))
|
(string< a b))))
|
||||||
nil
|
|
||||||
(string< a b))))
|
|
||||||
|
|
||||||
(defun doc-view-display-maybe (doc)
|
|
||||||
"Call `doc-view-display' iff we're in the image display."
|
|
||||||
(when (eq doc-view-current-display 'image)
|
|
||||||
(doc-view-display doc)))
|
|
||||||
|
|
||||||
(defun doc-view-display (doc)
|
(defun doc-view-display (doc)
|
||||||
"Start viewing the document DOC."
|
"Start viewing the document DOC."
|
||||||
|
@ -592,69 +647,50 @@ Predicate for sorting `doc-view-current-files'."
|
||||||
(doc-view-goto-page doc-view-current-page)))
|
(doc-view-goto-page doc-view-current-page)))
|
||||||
|
|
||||||
(defun doc-view-buffer-message ()
|
(defun doc-view-buffer-message ()
|
||||||
(insert (propertize "Welcome to DocView!" 'face 'bold)
|
;; Only show this message initially, not when refreshing the buffer (in which
|
||||||
"\n"
|
;; case it's better to keep displaying the "stale" page while computing
|
||||||
"
|
;; the fresh new ones).
|
||||||
If you see this buffer it means that the document you want to
|
(unless (overlay-get doc-view-current-overlay 'display)
|
||||||
view gets converted to PNG now and the conversion of the first
|
(overlay-put doc-view-current-overlay 'display
|
||||||
page hasn't finished yet or
|
(concat (propertize "Welcome to DocView!" 'face 'bold)
|
||||||
|
"\n"
|
||||||
|
"
|
||||||
|
If you see this buffer it means that the document you want to view is being
|
||||||
|
converted to PNG and the conversion of the first page hasn't finished yet or
|
||||||
`doc-view-conversion-refresh-interval' is set to nil.
|
`doc-view-conversion-refresh-interval' is set to nil.
|
||||||
|
|
||||||
For now these keys are useful:
|
For now these keys are useful:
|
||||||
|
|
||||||
`q' : Bury this buffer. Conversion will go on in background.
|
`q' : Bury this buffer. Conversion will go on in background.
|
||||||
`k' : Kill the conversion process and this buffer.\n")
|
`k' : Kill the conversion process and this buffer.
|
||||||
(set-buffer-modified-p nil))
|
`K' : Kill the conversion process.\n"))))
|
||||||
|
|
||||||
(defun doc-view-show-tooltip ()
|
(defun doc-view-show-tooltip ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(tooltip-show doc-view-current-info))
|
(tooltip-show doc-view-current-info))
|
||||||
|
|
||||||
;;;;; Toggle between text and image display
|
;;;;; Toggle between editing and viewing
|
||||||
|
|
||||||
(defun doc-view-toggle-display ()
|
(defun doc-view-toggle-display ()
|
||||||
"Start or stop displaying a document file as a set of images.
|
"Toggle between editing a document as text or viewing it."
|
||||||
This command toggles between showing the text of the document
|
|
||||||
file and showing the document as a set of images."
|
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (get-text-property (point-min) 'display)
|
(if (eq major-mode 'doc-view-mode)
|
||||||
;; Switch to text display
|
;; Switch to editing mode
|
||||||
(let ((inhibit-read-only t))
|
(progn
|
||||||
(erase-buffer)
|
(doc-view-kill-proc)
|
||||||
(insert-file-contents doc-view-current-doc)
|
(setq buffer-read-only nil)
|
||||||
(use-local-map doc-view-mode-text-map)
|
(delete-overlay doc-view-current-overlay)
|
||||||
(setq mode-name "DocView[text]"
|
;; Switch to the previously used major mode or fall back to fundamental
|
||||||
doc-view-current-display 'text)
|
;; mode.
|
||||||
(if (called-interactively-p)
|
(if doc-view-previous-major-mode
|
||||||
(message "Repeat this command to go back to displaying the file as images")))
|
(funcall doc-view-previous-major-mode)
|
||||||
;; Switch to image display
|
(fundamental-mode))
|
||||||
(let ((inhibit-read-only t))
|
(doc-view-minor-mode 1))
|
||||||
(erase-buffer)
|
;; Switch to doc-view-mode
|
||||||
(doc-view-buffer-message)
|
(when (and (buffer-modified-p)
|
||||||
(setq doc-view-current-page (or doc-view-current-page 1))
|
(y-or-n-p "The buffer has been modified. Save the changes? "))
|
||||||
(if (file-exists-p (doc-view-current-cache-dir))
|
(save-buffer))
|
||||||
(progn
|
(doc-view-mode)))
|
||||||
(message "DocView: using cached files!")
|
|
||||||
(doc-view-display doc-view-current-doc))
|
|
||||||
(doc-view-convert-current-doc))
|
|
||||||
(use-local-map doc-view-mode-map)
|
|
||||||
(setq mode-name (format "DocView")
|
|
||||||
doc-view-current-display 'image)
|
|
||||||
(if (called-interactively-p)
|
|
||||||
(message "Repeat this command to go back to displaying the file as text"))))
|
|
||||||
(set-buffer-modified-p nil))
|
|
||||||
|
|
||||||
;;;;; Leave doc-view-mode and open the file for edit
|
|
||||||
|
|
||||||
(defun doc-view-edit-doc ()
|
|
||||||
"Leave `doc-view-mode' and open the current doc with an appropriate editing mode."
|
|
||||||
(interactive)
|
|
||||||
(let ((filename doc-view-current-doc)
|
|
||||||
(auto-mode-alist (append '(("\\.[eE]?[pP][sS]\\'" . ps-mode)
|
|
||||||
("\\.\\(pdf\\|PDF\\|dvi\\|DVI\\)$" . fundamental-mode))
|
|
||||||
auto-mode-alist)))
|
|
||||||
(kill-buffer (current-buffer))
|
|
||||||
(find-file filename)))
|
|
||||||
|
|
||||||
;;;; Searching
|
;;;; Searching
|
||||||
|
|
||||||
|
@ -672,11 +708,11 @@ the pagenumber and CONTEXTS are all lines of text containing a match."
|
||||||
(when (match-string 1) (incf page))
|
(when (match-string 1) (incf page))
|
||||||
(when (match-string 2)
|
(when (match-string 2)
|
||||||
(if (/= page lastpage)
|
(if (/= page lastpage)
|
||||||
(setq matches (push (cons page
|
(push (cons page
|
||||||
(list (buffer-substring
|
(list (buffer-substring
|
||||||
(line-beginning-position)
|
(line-beginning-position)
|
||||||
(line-end-position))))
|
(line-end-position))))
|
||||||
matches))
|
matches)
|
||||||
(setq matches (cons
|
(setq matches (cons
|
||||||
(append
|
(append
|
||||||
(or
|
(or
|
||||||
|
@ -698,52 +734,64 @@ the pagenumber and CONTEXTS are all lines of text containing a match."
|
||||||
(setq no (+ no (1- (length p)))))
|
(setq no (+ no (1- (length p)))))
|
||||||
no))
|
no))
|
||||||
|
|
||||||
(defun doc-view-search ()
|
(defun doc-view-search-backward (new-query)
|
||||||
"Query for a regexp and search the current document.
|
"Call `doc-view-search' for backward search.
|
||||||
|
If prefix NEW-QUERY is given, ask for a new regexp."
|
||||||
|
(interactive "P")
|
||||||
|
(doc-view-search arg t))
|
||||||
|
|
||||||
|
(defun doc-view-search (new-query &optional backward)
|
||||||
|
"Jump to the next match or initiate a new search if NEW-QUERY is given.
|
||||||
If the current document hasn't been transformed to plain text
|
If the current document hasn't been transformed to plain text
|
||||||
till now do that first. You should try searching anew when the
|
till now do that first.
|
||||||
conversion finished."
|
If BACKWARD is non-nil, jump to the previous match."
|
||||||
(interactive)
|
(interactive "P")
|
||||||
;; New search, so forget the old results.
|
(if (and (not arg)
|
||||||
(setq doc-view-current-search-matches nil)
|
doc-view-current-search-matches)
|
||||||
(let ((txt (concat (doc-view-current-cache-dir)
|
(if backward
|
||||||
"doc.txt")))
|
(doc-view-search-previous-match 1)
|
||||||
(if (file-readable-p txt)
|
(doc-view-search-next-match 1))
|
||||||
(progn
|
;; New search, so forget the old results.
|
||||||
(setq doc-view-current-search-matches
|
(setq doc-view-current-search-matches nil)
|
||||||
(doc-view-search-internal
|
(let ((txt (expand-file-name "doc.txt"
|
||||||
(read-from-minibuffer "Regexp: ")
|
(doc-view-current-cache-dir))))
|
||||||
txt))
|
(if (file-readable-p txt)
|
||||||
(message "DocView: search yielded %d matches."
|
(progn
|
||||||
(doc-view-search-no-of-matches
|
(setq doc-view-current-search-matches
|
||||||
doc-view-current-search-matches)))
|
(doc-view-search-internal
|
||||||
;; We must convert to TXT first!
|
(read-from-minibuffer "Regexp: ")
|
||||||
(if doc-view-current-converter-process
|
txt))
|
||||||
(message "DocView: please wait till conversion finished.")
|
(message "DocView: search yielded %d matches."
|
||||||
(let ((ext (file-name-extension doc-view-current-doc)))
|
(doc-view-search-no-of-matches
|
||||||
(cond
|
doc-view-current-search-matches)))
|
||||||
((string= ext "pdf")
|
;; We must convert to TXT first!
|
||||||
;; Doc is a PDF, so convert it to TXT
|
(if doc-view-current-converter-process
|
||||||
(doc-view-pdf->txt doc-view-current-doc txt))
|
(message "DocView: please wait till conversion finished.")
|
||||||
((string= ext "ps")
|
(let ((ext (file-name-extension buffer-file-name)))
|
||||||
;; Doc is a PS, so convert it to PDF (which will be converted to
|
(cond
|
||||||
;; TXT thereafter).
|
((string= ext "pdf")
|
||||||
(doc-view-ps->pdf doc-view-current-doc
|
;; Doc is a PDF, so convert it to TXT
|
||||||
(concat (doc-view-current-cache-dir)
|
(doc-view-pdf->txt buffer-file-name txt))
|
||||||
"doc.pdf")))
|
((string= ext "ps")
|
||||||
((string= ext "dvi")
|
;; Doc is a PS, so convert it to PDF (which will be converted to
|
||||||
;; Doc is a DVI. This means that a doc.pdf already exists in its
|
;; TXT thereafter).
|
||||||
;; cache subdirectory.
|
(doc-view-ps->pdf buffer-file-name
|
||||||
(doc-view-pdf->txt (concat (doc-view-current-cache-dir)
|
(expand-file-name "doc.pdf"
|
||||||
"doc.pdf")
|
(doc-view-current-cache-dir))))
|
||||||
txt))
|
((string= ext "dvi")
|
||||||
(t (error "DocView doesn't know what to do"))))))))
|
;; Doc is a DVI. This means that a doc.pdf already exists in its
|
||||||
|
;; cache subdirectory.
|
||||||
|
(doc-view-pdf->txt (expand-file-name "doc.pdf"
|
||||||
|
(doc-view-current-cache-dir))
|
||||||
|
txt))
|
||||||
|
(t (error "DocView doesn't know what to do")))))))))
|
||||||
|
|
||||||
(defun doc-view-search-next-match (arg)
|
(defun doc-view-search-next-match (arg)
|
||||||
"Go to the ARGth next matching page."
|
"Go to the ARGth next matching page."
|
||||||
(interactive "p")
|
(interactive "p")
|
||||||
(let* ((next-pages (remove-if (lambda (i) (<= (car i) doc-view-current-page))
|
(let* ((next-pages (doc-view-remove-if
|
||||||
doc-view-current-search-matches))
|
(lambda (i) (<= (car i) doc-view-current-page))
|
||||||
|
doc-view-current-search-matches))
|
||||||
(page (car (nth (1- arg) next-pages))))
|
(page (car (nth (1- arg) next-pages))))
|
||||||
(if page
|
(if page
|
||||||
(doc-view-goto-page page)
|
(doc-view-goto-page page)
|
||||||
|
@ -755,8 +803,9 @@ conversion finished."
|
||||||
(defun doc-view-search-previous-match (arg)
|
(defun doc-view-search-previous-match (arg)
|
||||||
"Go to the ARGth previous matching page."
|
"Go to the ARGth previous matching page."
|
||||||
(interactive "p")
|
(interactive "p")
|
||||||
(let* ((prev-pages (remove-if (lambda (i) (>= (car i) doc-view-current-page))
|
(let* ((prev-pages (doc-view-remove-if
|
||||||
doc-view-current-search-matches))
|
(lambda (i) (>= (car i) doc-view-current-page))
|
||||||
|
doc-view-current-search-matches))
|
||||||
(page (car (nth (1- arg) (nreverse prev-pages)))))
|
(page (car (nth (1- arg) (nreverse prev-pages)))))
|
||||||
(if page
|
(if page
|
||||||
(doc-view-goto-page page)
|
(doc-view-goto-page page)
|
||||||
|
@ -767,40 +816,92 @@ conversion finished."
|
||||||
|
|
||||||
;;;; User interface commands and the mode
|
;;;; User interface commands and the mode
|
||||||
|
|
||||||
(put 'doc-view-mode 'mode-class 'special)
|
;; (put 'doc-view-mode 'mode-class 'special)
|
||||||
|
|
||||||
;;;###autoload
|
(defun doc-view-initiate-display ()
|
||||||
(define-derived-mode doc-view-mode nil "DocView"
|
|
||||||
"Major mode in DocView buffers.
|
|
||||||
You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
|
|
||||||
toggle between display as a set of images and display as text."
|
|
||||||
:group 'doc-view
|
|
||||||
(make-local-variable 'doc-view-current-files)
|
|
||||||
(make-local-variable 'doc-view-current-doc)
|
|
||||||
(make-local-variable 'doc-view-current-image)
|
|
||||||
(make-local-variable 'doc-view-current-page)
|
|
||||||
(make-local-variable 'doc-view-current-converter-process)
|
|
||||||
(make-local-variable 'doc-view-current-timer)
|
|
||||||
(make-local-variable 'doc-view-current-slice)
|
|
||||||
(make-local-variable 'doc-view-current-cache-dir)
|
|
||||||
(make-local-variable 'doc-view-current-info)
|
|
||||||
(make-local-variable 'doc-view-current-search-matches)
|
|
||||||
(setq doc-view-current-doc (buffer-file-name))
|
|
||||||
(insert-file-contents doc-view-current-doc)
|
|
||||||
(use-local-map doc-view-mode-text-map)
|
|
||||||
(setq mode-name "DocView[text]"
|
|
||||||
doc-view-current-display 'text
|
|
||||||
buffer-read-only t
|
|
||||||
revert-buffer-function 'doc-view-reconvert-doc)
|
|
||||||
;; Switch to image display if possible
|
;; Switch to image display if possible
|
||||||
(if (and (display-images-p)
|
(if (and (display-images-p)
|
||||||
(image-type-available-p 'png)
|
(image-type-available-p 'png))
|
||||||
(not (get-text-property (point-min) 'display)))
|
(progn
|
||||||
(doc-view-toggle-display))
|
(doc-view-buffer-message)
|
||||||
(message
|
(setq doc-view-current-page (or doc-view-current-page 1))
|
||||||
"%s"
|
(if (file-exists-p (doc-view-current-cache-dir))
|
||||||
(substitute-command-keys
|
(progn
|
||||||
"Type \\[doc-view-toggle-display] to toggle between image and text display.")))
|
(message "DocView: using cached files!")
|
||||||
|
(doc-view-display buffer-file-name))
|
||||||
|
(doc-view-convert-current-doc))
|
||||||
|
(message
|
||||||
|
"%s"
|
||||||
|
(substitute-command-keys
|
||||||
|
(concat "Type \\[doc-view-toggle-display] to toggle between "
|
||||||
|
"editing or viewing the document."))))
|
||||||
|
(message
|
||||||
|
"%s"
|
||||||
|
(substitute-command-keys
|
||||||
|
(concat "No image (png) support available. Type \\[doc-view-toggle-display] "
|
||||||
|
"to switch to an editing mode.")))))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun doc-view-mode ()
|
||||||
|
"Major mode in DocView buffers.
|
||||||
|
You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
|
||||||
|
toggle between displaying the document or editing it as text."
|
||||||
|
(interactive)
|
||||||
|
(if jka-compr-really-do-compress
|
||||||
|
;; This is a compressed file uncompressed by auto-compression-mode.
|
||||||
|
(when (y-or-n-p (concat "DocView: Cannot convert compressed file. "
|
||||||
|
"Save it uncompressed first? "))
|
||||||
|
(let ((file (read-file-name
|
||||||
|
"File: "
|
||||||
|
(file-name-directory buffer-file-name))))
|
||||||
|
(write-region (point-min) (point-max) file)
|
||||||
|
(kill-buffer nil)
|
||||||
|
(find-file file)
|
||||||
|
(doc-view-mode)))
|
||||||
|
(let* ((prev-major-mode (if (eq major-mode 'doc-view-mode)
|
||||||
|
doc-view-previous-major-mode
|
||||||
|
major-mode)))
|
||||||
|
(kill-all-local-variables)
|
||||||
|
(set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode))
|
||||||
|
(make-local-variable 'doc-view-current-files)
|
||||||
|
(make-local-variable 'doc-view-current-image)
|
||||||
|
(make-local-variable 'doc-view-current-page)
|
||||||
|
(make-local-variable 'doc-view-current-converter-process)
|
||||||
|
(make-local-variable 'doc-view-current-timer)
|
||||||
|
(make-local-variable 'doc-view-current-slice)
|
||||||
|
(make-local-variable 'doc-view-current-cache-dir)
|
||||||
|
(make-local-variable 'doc-view-current-info)
|
||||||
|
(make-local-variable 'doc-view-current-search-matches)
|
||||||
|
(set (make-local-variable 'doc-view-current-overlay)
|
||||||
|
(make-overlay (point-min) (point-max) nil t))
|
||||||
|
(add-hook 'change-major-mode-hook
|
||||||
|
(lambda () (delete-overlay doc-view-current-overlay))
|
||||||
|
nil t)
|
||||||
|
(set (make-local-variable 'mode-line-position)
|
||||||
|
'(" P" (:eval (number-to-string doc-view-current-page))
|
||||||
|
"/" (:eval (number-to-string (length doc-view-current-files)))))
|
||||||
|
(set (make-local-variable 'cursor-type) nil)
|
||||||
|
(use-local-map doc-view-mode-map)
|
||||||
|
(set (make-local-variable 'after-revert-hook) 'doc-view-reconvert-doc)
|
||||||
|
(setq mode-name "DocView"
|
||||||
|
buffer-read-only t
|
||||||
|
major-mode 'doc-view-mode)
|
||||||
|
(doc-view-initiate-display)
|
||||||
|
(run-mode-hooks 'doc-view-mode-hook)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(define-minor-mode doc-view-minor-mode
|
||||||
|
"Toggle Doc view minor mode.
|
||||||
|
With arg, turn Doc view minor mode on if arg is positive, off otherwise.
|
||||||
|
See the command `doc-view-mode' for more information on this mode."
|
||||||
|
nil " DocView" doc-view-minor-mode-map
|
||||||
|
:group 'doc-view
|
||||||
|
(when doc-view-minor-mode
|
||||||
|
(add-hook 'change-major-mode-hook (lambda () (doc-view-minor-mode -1)) nil t)
|
||||||
|
(message
|
||||||
|
"%s"
|
||||||
|
(substitute-command-keys
|
||||||
|
"Type \\[doc-view-toggle-display] to toggle between editing or viewing the document."))))
|
||||||
|
|
||||||
(defun doc-view-clear-cache ()
|
(defun doc-view-clear-cache ()
|
||||||
"Delete the whole cache (`doc-view-cache-directory')."
|
"Delete the whole cache (`doc-view-cache-directory')."
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue