Merge from emacs--devo--0

Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-283
This commit is contained in:
Miles Bader 2007-11-11 00:56:44 +00:00
commit f23d76bdef
403 changed files with 36975 additions and 16864 deletions

View file

@ -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>
* MAINTAINERS: Move to admin/.

View file

@ -138,11 +138,11 @@ man1dir=$(mandir)/man1
# since there are now many packages documented with the texinfo
# system, it is inappropriate to imply that it is part of Emacs.
infodir=@infodir@
INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
elisp eintr emacs emacs-mime eshell eudc flymake \
forms gnus idlwave info message mh-e newsticker org pcl-cvs \
pgg reftex sc ses sieve speedbar tramp vip viper widget \
woman smtpmail url rcirc erc
INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
eintr elisp emacs emacs-mime erc eshell eudc flymake forms \
gnus idlwave info message mh-e newsticker org pcl-cvs pgg \
rcirc reftex remember sc ses sieve speedbar tramp vip viper \
widget woman smtpmail url
# Directory for local state files for all programs.
localstatedir=@localstatedir@
@ -423,6 +423,12 @@ install-arch-dep: mkdir
## Note that the Makefiles in the etc directory are potentially useful
## 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
-set ${COPYDESTS} ; \
unset CDPATH; \
@ -436,6 +442,10 @@ install-arch-indep: mkdir info
mkdir ${COPYDESTS} ; \
chmod ugo+rx ${COPYDESTS} ; \
unset CDPATH; \
for installuser in $${LOGNAME} $${USERNAME} $${USER} \
`id -un 2> /dev/null`; do \
[ -n "$${installuser}" ] && break ; \
done ; \
for dir in ${COPYDIR} ; do \
dest=$$1 ; shift ; \
[ -d $${dir} ] \
@ -444,7 +454,7 @@ install-arch-indep: mkdir info
(cd $${dir}; tar -chf - . ) \
| (cd $${dest}; umask 022; \
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 \
chmod a+rx $${subdir} ; \
rm -rf $${subdir}/RCS ; \
@ -492,7 +502,12 @@ install-arch-indep: mkdir info
echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
(cd ./etc; tar -chf - $${docfile}) \
|(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); \
else true; fi
-unset CDPATH; \
@ -504,7 +519,12 @@ install-arch-indep: mkdir info
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
(cd lisp; tar -chf - *.el *.elc) \
|(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
-unset CDPATH; \
if [ -n "${GZIP_PROG}" ]; \

View file

@ -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)
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
** 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
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
** Check the Emacs Tutorial.

View file

@ -188,7 +188,6 @@ src/scroll.c
src/search.c
src/sound.c
src/strftime.c
src/sunfns.c
src/sysdep.c
src/termcap.c
src/terminfo.c

View file

@ -6,68 +6,68 @@ Copyright (C) 2007 Free Software Foundation, Inc.
- -- as yet unknown
n/a -- not applicable (internal, uninteresting, etc)
todo -- not documented but should be
"NODE" -- documented in or under info node NODE
NODE -- documented in or under info node NODE
* Features
advice -
advice (elisp) Advising Functions
advice-preload n/a
assoc -
authors -
autoload -
autoload (elisp) Autoload
avl-tree -
backquote n/a
benchmark -
bindat "(elisp) Byte Packing"
byte-compile -
benchmark n/a
bindat (elisp) Byte Packing
byte-compile (elisp) Byte Compilation
byte-opt -
bytecomp -
checkdoc -
cl "(cl)"
bytecomp (elisp) Compilation Functions
checkdoc (elisp) Documentation Tips
cl (cl)
cl-19 n/a
cl-compat n/a
cl-specs n/a
copyright -
crm -
cust-print -
debug -
derived -
disass -
easy-mmode -
cust-print (elisp) Printing in Edebug
debug (elisp) Debugger
derived (elisp) Derived Modes
disass (elisp) Disassembly
easy-mmode (elisp) Defining Minor Modes
easymenu -
edebug -
edebug (elisp) Edebug
eldoc -
elint -
elp -
ewoc "(elisp) Separated Rendering"
elp n/a
ewoc (elisp) Separated Rendering
find-func -
find-gc -
generic -
generic (elisp) Generic Modes
gulp n/a
helper -
levents -
lisp-float-type -
lisp-mnt -
lisp-mode -
lisp-mode n/a
lmenu -
lselect -
lucid -
macroexp -
pp -
macroexp (elisp) Expansion
pp (emacs) Program Indent
re-builder -
regexp-opt -
regexp-opt (elisp) Regexp Functions
regi -
ring "(elisp) Rings"
ring (elisp) Rings
rx -
shadow -
sregex -
syntax -
syntax (elisp) Position Parse
testcover -
timer -
tq "(elisp) Transaction Queues"
timer (elisp) Timers
tq (elisp) Transaction Queues
trace -
unsafep -
warnings -
unsafep (elisp) Function Safety
warnings (elisp) Warnings
* Above list created using default directory lisp/emacs-lisp/ with

125
configure vendored
View file

@ -11109,75 +11109,6 @@ echo "${ECHO_T}before 6" >&6; }
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.
HAVE_RSVG=no
@ -12081,13 +12012,10 @@ fi
HAVE_XAW3D=no
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
if test x"${HAVE_X11R5}" != xyes; then
USE_X_TOOLKIT=none
else
if test "$with_xaw3d" != no; then
{ echo "$as_me:$LINENO: checking for xaw3d" >&5
if test "$with_xaw3d" != no; then
{ echo "$as_me:$LINENO: checking for xaw3d" >&5
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
else
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
fi
else
emacs_cv_xaw3d=no
fi
if test $emacs_cv_xaw3d = yes; then
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
else
emacs_cv_xaw3d=no
fi
if test $emacs_cv_xaw3d = yes; then
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
USE_X_TOOLKIT=LUCID
HAVE_XAW3D=yes
USE_X_TOOLKIT=LUCID
HAVE_XAW3D=yes
cat >>confdefs.h <<\_ACEOF
#define HAVE_XAW3D 1
_ACEOF
else
{ echo "$as_me:$LINENO: result: no" >&5
else
{ echo "$as_me:$LINENO: result: no" >&5
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; }
if test "${emacs_cv_xaw+set}" = set; then
if test "${emacs_cv_xaw+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
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
fi
if test $emacs_cv_xaw = yes; then
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
if test $emacs_cv_xaw = yes; then
{ echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
USE_X_TOOLKIT=LUCID
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
{ { echo "$as_me:$LINENO: error: Lucid toolkit requires X11/Xaw include files" >&5
USE_X_TOOLKIT=LUCID
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
{ { 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;}
{ (exit 1); exit 1; }; }
else
{ echo "$as_me:$LINENO: result: no; do not use toolkit by default" >&5
else
{ echo "$as_me:$LINENO: result: no; do not use toolkit by default" >&5
echo "${ECHO_T}no; do not use toolkit by default" >&6; }
USE_X_TOOLKIT=none
fi
USE_X_TOOLKIT=none
fi
fi
fi
@ -24303,6 +24230,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
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.
test "${prefix}" != NONE &&

View file

@ -2125,24 +2125,6 @@ fail;
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.
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.
HAVE_XAW3D=no
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
if test x"${HAVE_X11R5}" != xyes; then
USE_X_TOOLKIT=none
else
if test "$with_xaw3d" != no; then
AC_MSG_CHECKING(for xaw3d)
AC_CACHE_VAL(emacs_cv_xaw3d,
[AC_TRY_LINK([
if test "$with_xaw3d" != no; then
AC_MSG_CHECKING(for xaw3d)
AC_CACHE_VAL(emacs_cv_xaw3d,
[AC_TRY_LINK([
#include <X11/Intrinsic.h>
#include <X11/Xaw3d/Simple.h>],
[],
emacs_cv_xaw3d=yes,
emacs_cv_xaw3d=no)])
else
emacs_cv_xaw3d=no
fi
if test $emacs_cv_xaw3d = yes; then
AC_MSG_RESULT([yes; using Lucid toolkit])
USE_X_TOOLKIT=LUCID
HAVE_XAW3D=yes
AC_DEFINE(HAVE_XAW3D, 1,
[Define to 1 if you have the Xaw3d library (-lXaw3d).])
else
AC_MSG_RESULT(no)
AC_MSG_CHECKING(for libXaw)
AC_CACHE_VAL(emacs_cv_xaw,
[AC_TRY_LINK([
[],
emacs_cv_xaw3d=yes,
emacs_cv_xaw3d=no)])
else
emacs_cv_xaw3d=no
fi
if test $emacs_cv_xaw3d = yes; then
AC_MSG_RESULT([yes; using Lucid toolkit])
USE_X_TOOLKIT=LUCID
HAVE_XAW3D=yes
AC_DEFINE(HAVE_XAW3D, 1,
[Define to 1 if you have the Xaw3d library (-lXaw3d).])
else
AC_MSG_RESULT(no)
AC_MSG_CHECKING(for libXaw)
AC_CACHE_VAL(emacs_cv_xaw,
[AC_TRY_LINK([
#include <X11/Intrinsic.h>
#include <X11/Xaw/Simple.h>],
[],
emacs_cv_xaw=yes,
emacs_cv_xaw=no)])
if test $emacs_cv_xaw = yes; then
AC_MSG_RESULT([yes; using Lucid toolkit])
USE_X_TOOLKIT=LUCID
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
else
AC_MSG_RESULT([no; do not use toolkit by default])
USE_X_TOOLKIT=none
fi
[],
emacs_cv_xaw=yes,
emacs_cv_xaw=no)])
if test $emacs_cv_xaw = yes; then
AC_MSG_RESULT([yes; using Lucid toolkit])
USE_X_TOOLKIT=LUCID
elif test x"${USE_X_TOOLKIT}" = xLUCID; then
AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
else
AC_MSG_RESULT([no; do not use toolkit by default])
USE_X_TOOLKIT=none
fi
fi
fi
@ -3422,7 +3400,7 @@ typedef unsigned size_t;
#ifdef HAVE_X11R6
#define HAVE_X_I18N
#elif defined HAVE_X11R5 && !defined X11R5_INHIBIT_I18N
#elif !defined X11R5_INHIBIT_I18N
#define HAVE_X_I18N
#endif
@ -3537,6 +3515,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
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.
[test "${prefix}" != NONE &&

View file

@ -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>
* fortran-xtra.texi (Fortran): F90 mode handles F2003.

View file

@ -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
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
If the variable @code{gdb-use-colon-colon-notation} is
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}

View file

@ -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
actually used.
@item WINDOW_GFX
Used when initializing the Sun windows system.
@item PRELOAD_WINSOCK
On MS-Windows, if you set this variable, Emacs will load and initialize
the network library at startup, instead of waiting until the first

View file

@ -971,8 +971,9 @@ most common command syntax; it may not work for unusual shells.
@findex dirtrack-mode
You can also use @kbd{M-x dirtrack-mode} to enable (or disable) an
alternative and more aggressive method of tracking changes in the
current directory.
alternative method of tracking changes in the current directory. This
method relies on your shell prompt containing the full current working
directory at all times.
@node Shell Options
@subsection Shell Mode Options

View file

@ -534,6 +534,18 @@ set-language-environment-hook}). For example:
This sets the default input method to be @code{chinese-tonepy}
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
Some input methods for alphabetic scripts work by (in effect)
remapping the keyboard to emulate various keyboard layouts commonly used

View file

@ -1172,7 +1172,11 @@ like @code{query-replace}.
These commands highlight the current match using the face
@code{query-replace}. They highlight other matches using
@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
or regexp are:

View file

@ -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>
* objects.texi (Equality Predicates): Null strings are uniquified.

View file

@ -23,13 +23,10 @@ abbrev table. Normally both are used.
each abbreviation. The symbol's name is the abbreviation; its value
is the expansion; its function definition is the hook function to do
the expansion (@pxref{Defining Abbrevs}); its property list cell
typically contains the use count, the number of times the abbreviation
has been expanded. Alternatively, the use count is on the
@code{count} property and the system-abbrev flag is on the
@code{system-type} property. Abbrevs with a non-@code{nil}
@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.
typically contains various additional properties such as the use
count, the number of times the abbreviation has been expanded, or
whether the abbrev is a so-called ``system'' abbrev defined by a major
mode rather than by the user (@pxref{Abbrev Properties}).
Because the symbols used for abbrevs are not interned in the usual
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.
* Expansion: Abbrev Expansion. Controlling expansion; expansion subroutines.
* 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
@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.
@defun make-abbrev-table
@defun make-abbrev-table &rest props
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
@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.
@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
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
elements of the form @code{(@var{abbrevname} @var{expansion}
@var{hook} @var{usecount} @var{system-flag})}. If an element of
@var{definitions} has length less than five, omitted elements default
to @code{nil}. A value of @code{nil} for @var{usecount} is equivalent
to zero. The return value is always @code{nil}.
[@var{hook}] [@var{props}...])}. These elements are passed as
arguments to @code{define-abbrev}. 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},
subsequent calls add the definitions in @var{definitions} to
@ -132,20 +142,20 @@ to add these to @var{name} separately.)
@section Defining Abbrevs
@code{define-abbrev} is the low-level basic function for defining an
abbrev in a specified abbrev table. When major modes predefine standard
abbrevs, they should call @code{define-abbrev} and specify @code{t} for
@var{system-flag}. Be aware that any saved non-``system'' abbrevs are
abbrevs, they should call @code{define-abbrev} and specify a @code{t} for
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
should therefore not assume that when they are first loaded their abbrev
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
expand to @var{expansion} and call @var{hook}. The return value is
@var{name}.
The value of @var{count}, if specified, initializes the abbrev's
usage-count. If @var{count} is not specified or @code{nil}, the use
count is initialized to zero.
expand to @var{expansion} and call @var{hook}, with properties
@var{props} (@pxref{Abbrev Properties}). The return value is @var{name}.
The @code{:system} property in @var{props} is treated specially here:
if it has the value @code{force}, then it will overwrite an existing
definition even for a non-``system'' abbrev of the same name.
The argument @var{name} should be a string. The argument
@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
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
@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
@ -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.
@end defvar
@c Emacs 19 feature
@defvar pre-abbrev-expand-hook
This is a normal hook whose functions are executed, in sequence, just
before any expansion of an abbrev. @xref{Hooks}. Since it is a normal
hook, the hook functions receive no arguments. However, they can find
the abbrev to be expanded by looking in the buffer before point.
Running the hook is the first thing that @code{expand-abbrev} does, and
so a hook function can be used to change the current abbrev table before
abbrev lookup happens. (Although you have to do this carefully. See
the example below.)
@defvar abbrev-expand-functions
This is a special hook run @emph{around} the @code{expand-abbrev}
function. Functions on this hook are called with a single argument
which is a function that performs the normal abbrev expansion.
The hook function can hence do anything it wants before and after
performing the expansion. It can also choose not to call its argument
and thus override the default behavior, or it may even call it
several times. The function should return the abbrev symbol if
expansion took place.
@end defvar
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{#}
are comments. You want to use Text mode abbrevs for those lines. The
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}.
@smallexample
(defun foo-mode-pre-abbrev-expand ()
(when (save-excursion (forward-line 0) (eq (char-after) ?#))
(let ((local-abbrev-table text-mode-abbrev-table)
;; Avoid infinite loop.
(pre-abbrev-expand-hook nil))
(expand-abbrev))
;; We have already called `expand-abbrev' in this hook.
;; 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))))
(defun foo-mode-abbrev-expand-function (expand)
(if (not (save-excursion (forward-line 0) (eq (char-after) ?#)))
;; Performs normal expansion.
(funcall expand)
;; We're inside a comment: use the text-mode abbrevs.
(let ((local-abbrev-table text-mode-abbrev-table))
(funcall expand))))
(add-hook 'foo-mode-hook
#'(lambda ()
(add-hook 'pre-abbrev-expand-hook
'foo-mode-pre-abbrev-expand
(add-hook 'abbrev-expand-functions
'foo-mode-abbrev-expand-function
nil t)))
@end smallexample
Note that @code{foo-mode-pre-abbrev-expand} just returns @code{nil}
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
@node Standard Abbrev Tables, Abbrev Properties, Abbrev Expansion, Abbrevs
@comment node-name, next, previous, up
@section Standard Abbrev Tables
@ -390,7 +385,16 @@ global table.
@defvar local-abbrev-table
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
@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.
@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
arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
@end ignore

View file

@ -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
@var{require-match}; in that case, @code{completing-read} returns the
first element of @var{default}, if it is a list; @code{""}, if
@var{default} is @code{nil}; or @var{default}. The string or strins
in @var{default} aer also available to the user through the history
@var{default} is @code{nil}; or @var{default}. The string or strings
in @var{default} are also available to the user through the history
commands.
The function @code{completing-read} uses
@ -1188,7 +1188,7 @@ symbol.
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
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
default has been specified; then if the user enters null input, the
return value is @code{(intern "")}.

View file

@ -1260,6 +1260,16 @@ calling @code{replace-match} with 1 as @var{subexp} means to replace
just the text that matched @samp{\(ba*r\)}.
@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
@subsection Simple Match Data Access

View file

@ -259,7 +259,8 @@ returns an empty string.
@noindent
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
sequence of integers), it was converted to a string of digits making up

View file

@ -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>
* ses.texi (The Basics): Mention how to create a new spreadsheet.

View file

@ -64,6 +64,7 @@ INFO_TARGETS = \
$(infodir)/pcl-cvs \
$(infodir)/pgg \
$(infodir)/rcirc \
$(infodir)/remember \
$(infodir)/reftex \
$(infodir)/sc \
$(infodir)/ses \
@ -104,6 +105,7 @@ DVI_TARGETS = \
pgg.dvi \
rcirc.dvi \
reftex.dvi \
remember.dvi \
sc.dvi \
ses.dvi \
sieve.dvi \
@ -306,6 +308,12 @@ $(infodir)/reftex: reftex.texi
reftex.dvi: 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
$(infodir)/sc: sc.texi
cd $(srcdir); $(MAKEINFO) sc.texi

View file

@ -11579,8 +11579,7 @@ with their equivalent function names, are:
postfix @samp{%} [@code{percent}] (as in @samp{25% = 0.25});
prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x})
and prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
@samp{+/-} [@code{sdev}] (the standard deviation symbol) and
@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);
prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x});
@samp{*} [@code{mul}];
@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:
@example
_ 1200 @r{(subscripts)}
% 1100 @r{(as in n}%@r{)}
- 1000 @r{(as in }-@r{n)}
! 1000 @r{(as in }!@r{n)}
_ 1200 @r{(subscripts)}
% 1100 @r{(as in n}%@r{)}
! 1000 @r{(as in }!@r{n)}
mod 400
+/- 300
!! 210 @r{(as in n}!!@r{)}
! 210 @r{(as in n}!@r{)}
^ 200
- 197 @r{(as in }-@r{n)}
* 195 @r{(or implicit multiplication)}
/ % \ 190
+ - 180 @r{(as in a}+@r{b)}

View file

@ -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
@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
@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
@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
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
@vindex mm-content-transfer-encoding-defaults
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
@findex mail-encode-encoded-word-region
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
@findex mail-encode-encoded-word-buffer
@ -1168,7 +1217,7 @@ Encode the words that need encoding in a string, and return the result.
@example
(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"
@end example
@ -1183,7 +1232,7 @@ Decode the encoded words in the string and return the result.
@example
(mail-decode-encoded-word-string
"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 table

381
doc/misc/gnus-coding.texi Normal file
View 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

View file

@ -128,7 +128,7 @@ What is the latest version of Gnus?
Jingle please: Gnus 5.10 is released, get it while it's
hot! As well as the step in version number is rather
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.
@node [1.2]
@ -1286,18 +1286,23 @@ How to enable automatic word-wrap when composing messages?
@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
(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill)))
(unless (boundp 'message-fill-column)
(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill))))
@end example
@noindent
in ~/.gnus.el. You can reformat a paragraph by hitting
@samp{M-q} (as usual)
in ~/.gnus.el.
You can reformat a paragraph by hitting @samp{M-q} (as usual).
@node [5.3]
@subsubheading Question 5.3
@ -1676,10 +1681,7 @@ you to use something like
yourUserName.userfqdn.provider.net, or you can use
somethingUnique.yourdomain.tld if you own the domain
yourdomain.tld, or you can register at a service which
gives private users a FQDN for free, e.g.
@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).
gives private users a FQDN for free.
Finally you can tell Gnus not to generate a Message-ID
for News at all (and letting the server do the job) by saying

121
doc/misc/gnus-news.el Normal file
View 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
View 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

File diff suppressed because it is too large Load diff

View file

@ -42,7 +42,8 @@ INFO_TARGETS = $(infodir)/ccmode \
$(infodir)/woman $(infodir)/eshell $(infodir)/org \
$(infodir)/url $(infodir)/speedbar $(infodir)/tramp \
$(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 \
ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.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 \
pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.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
# The following rule does not work with all versions of `make'.
@ -172,6 +173,11 @@ $(infodir)/reftex: reftex.texi
reftex.dvi: 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
$(MAKEINFO) sc.texi
sc.dvi: sc.texi
@ -297,7 +303,8 @@ clean: mostlyclean
$(infodir)/url* $(infodir)/org* \
$(infodir)/flymake* $(infodir)/newsticker* \
$(infodir)/sieve* $(infodir)/pgg* \
$(infodir)/erc* $(infodir)/rcirc*
$(infodir)/erc* $(infodir)/rcirc* \
$(infodir)/remember*
distclean: clean

View file

@ -71,14 +71,14 @@ Message mode buffers.
@c Adjust ../Makefile.in if you change the following lines:
Message is distributed with Gnus. The Gnus distribution
@c
corresponding to this manual is Gnus v5.11.
corresponding to this manual is Gnus v5.13
@node Interface
@chapter Interface
When a program (or a person) wants to respond to a message -- reply,
follow up, forward, cancel -- the program (or person) should just put
When a program (or a person) wants to respond to a message---reply,
follow up, forward, cancel---the program (or person) should just put
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
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
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
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:\\|@*
Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
^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
@kindex C-c M-m
@findex message-mark-inserted-region
Mark some region in the current article with enclosing tags.
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
Mark some region in the current article with enclosing tags. 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-}).
@item C-c M-f
@kindex C-c M-f
@findex message-mark-insert-file
Insert a file in the current article with enclosing tags.
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
@ -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
(@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
@kindex C-c C-z
@findex message-kill-to-signature
@ -1244,11 +1254,13 @@ Kill the message buffer and exit (@code{message-kill-buffer}).
@section Mail Aliases
@cindex mail aliases
@cindex aliases
@cindex completion
@cindex ecomplete
@vindex message-mail-alias-type
The @code{message-mail-alias-type} variable controls what type of mail
alias expansion to use. Currently only one form is supported---Message
uses @code{mailabbrev} to handle mail aliases. If this variable is
alias expansion to use. Currently two forms are supported:
@code{mailabbrev} and @code{ecomplete}. If this variable is
@code{nil}, no mail alias expansion will be performed.
@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
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
@section Spelling
@ -1334,7 +1354,7 @@ installed.
@section Message Headers
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
mail/news system do it) to ensure that mail and news copies of messages
look sufficiently similar.
@ -1373,7 +1393,7 @@ values:
@table @code
@item nil
Just the address -- @samp{king@@grassland.com}.
Just the address---@samp{king@@grassland.com}.
@item parens
@samp{king@@grassland.com (Elvis Parsley)}.
@ -1494,6 +1514,9 @@ hidden when composing a message.
'(not "From" "Subject" "To" "Cc" "Newsgroups"))
@end lisp
Headers are hidden using narrowing, you can use @kbd{M-x widen} to
expose them in the buffer.
@item message-header-synonyms
@vindex message-header-synonyms
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
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
@ -1541,10 +1571,10 @@ buffers that are initialized as mail.
@findex smtpmail-send-it
@findex feedmail-send-it
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-smtpmail-send-it}, @code{smtpmail-send-it} and
@code{feedmail-send-it}.
@code{message-smtpmail-send-it} and @code{feedmail-send-it}.
@item 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:
@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
function is called.
@ -1873,21 +1906,29 @@ Article Highlighting, gnus, The Gnus Manual}, for details.
@cindex yanking
@cindex quoting
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
by @dfn{yanking}, and each line you yank will have
@code{message-yank-prefix} prepended to it (except for quoted and
empty lines which uses @code{message-yank-cited-prefix}). The default
is @samp{> }.
to quote the person you are answering. Inserting quoted text is done by
@dfn{yanking}, and each line you yank will have
@code{message-yank-prefix} prepended to it (except for quoted lines
which use @code{message-yank-cited-prefix} and empty lines which use
@code{message-yank-empty-prefix}). The default is @samp{> }.
@item message-yank-cited-prefix
@vindex message-yank-cited-prefix
@cindex yanking
@cindex cited
@cindex quoting
When yanking text from an article which contains no text or already
cited text, each line will be prefixed with the contents of this
variable. The default is @samp{>}. See also
@code{message-yank-prefix}.
When yanking text from an article which contains already cited text,
each line will be prefixed with the contents of this variable. The
default is @samp{>}. See also @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
@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
@vindex message-signature-file
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}.
@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
@vindex message-signature-insert-empty-line
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}
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
@vindex message-signature-separator
Regexp matching the signature separator. It is @samp{^-- *$} by
@ -2057,6 +2115,12 @@ Hook run when canceling news articles.
@vindex message-mode-syntax-table
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
@vindex message-strip-special-text-properties
Emacs has a number of special text properties which can break message
@ -2089,7 +2153,7 @@ the buffer where the message is.
@item function
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
The default is:

View file

@ -345,11 +345,11 @@ singleton object wrapped with the luna object system.
Since PGG was designed for accessing and developing PGP functionality,
the architecture had to be designed not just for interoperability but
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
* Initializing::
* Backend methods::
* Back end methods::
* Getting output::
@end menu
@ -373,12 +373,12 @@ variable @code{pgg-scheme-gpg-instance} and will be reused from now on.
@end lisp
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
@section Backend methods
@node Back end 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
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
@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
execution.

406
doc/misc/remember.texi Normal file
View 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
View 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

View file

@ -236,9 +236,9 @@ if address "sender" "owner-w3-beta@@xemacs.org" @{
@}
@end example
A few mailing lists do not use the @samp{Sender:} header, but does
contain some unique identifier in some other header. The following is
not a complete script, it assumes that @code{fileinto} has already been
A few mailing lists do not use the @samp{Sender:} header, but has a
unique identifier in some other header. The following is not a
complete script, it assumes that @code{fileinto} has already been
required.
@example

View file

@ -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}
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 remote login is possible and is carried out at the terminal. In
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
machines in question.
The fastest transfer methods (for large files) rely on a remote file
transfer package such as @command{rcp}, @command{scp} or
@command{rsync}.
The fastest transfer methods for large files rely on a remote file
transfer package such as @command{rcp}, @command{scp}, @command{rsync}
or (under Windows) @command{pscp}.
If the remote copy methods are not suitable for you, @value{tramp} also
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
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,
trivial or major, should be reported to the @value{tramp} developers.
@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
@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
@section How @value{tramp} finds and uses programs on the remote machine.
@ -2651,24 +2659,45 @@ remote host.
@lisp
(defadvice tramp-handle-write-region
(after tramp-write-beep-advice activate)
" make tramp beep after writing a file."
(interactive)
(beep))
"Make tramp beep after writing a file."
(interactive)
(beep))
(defadvice tramp-handle-do-copy-or-rename-file
(after tramp-copy-beep-advice activate)
" make tramp beep after copying a file."
(interactive)
(beep))
"Make tramp beep after copying a file."
(interactive)
(beep))
(defadvice tramp-handle-insert-file-contents
(after tramp-copy-beep-advice activate)
" make tramp beep after copying a file."
(interactive)
(beep))
(after tramp-insert-beep-advice activate)
"Make tramp beep after inserting a file."
(interactive)
(beep))
@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
@item
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,
/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}}.
@item Use environment variables:

View file

@ -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.
@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
@comment node-name, next, previous, up
@section User Interface

1
etc/.gitignore vendored
View file

@ -4,3 +4,4 @@ icons
*.log
*.dvi
DOC DOC-*
*.pyc

View file

@ -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
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
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
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
@ -2295,8 +2295,8 @@ and changed ffap.el ispell.el rmailsum.el simple.el testcover.el
Ryszard Kubiak: changed ogonek.el
Sacha Chua: wrote erc-pcomplete.el
and changed erc.el erc-button.el
Sacha Chua: wrote erc-pcomplete.el remember-diary.el
and changed erc.el erc-button.el remember.el
Saito Takuya: changed compile.el mule.el

View file

@ -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>
* ses-example.ses: Get rid of silly life-universe-everything local

View file

@ -11,6 +11,10 @@ It requires the tls.el library.
** The function `erc-ssl' will now always use ssl.el, even in the version
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
*** Channel tracking (erc-track.el)

View file

@ -10,15 +10,16 @@ For older news, see Gnus info node "New Features".
* 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
this version. In particular, you will probably want to remove all
`.marks' (nnml) and `.mrk' (nnfolder) files, so that flags are read from
your `.newsrc.eld' instead of from the `.marks'/`.mrk' file where this
release store flags. See a later entry for more information about
marks. Note that downgrading isn't save in general.
this version. In particular, you will probably want to remove the
`~/News/marks' directory (perhaps selectively), so that flags are read
from your `~/.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.
** Lisp files are now installed in `.../site-lisp/gnus/' by default. It
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
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
** The revised Gnus FAQ is included in the manual, *Note Frequently Asked
Questions::.
** Gnus includes the Emacs Lisp SASL library.
** 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
old TLS/SSL support via (external third party) `ssl.el' and OpenSSL
still works.
** ManageSieve connections uses the SASL library by default.
** 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
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)
** Gnus includes a password cache mechanism in password.el.
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
** `F' (`gnus-article-followup-with-original') and `R'
(`gnus-article-reply-with-original') only yank the text in the region if
the region is active.
** Gnus now supports sticky article buffers. Those are article buffers
that are not reused when you select another article. *Note Sticky
Articles::.
** In draft groups, `e' is now bound to `gnus-draft-edit-message'. Use `B
w' for `gnus-summary-edit-article' instead.
** International host names (IDNA) can now be decoded inside article bodies
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
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::.
** Gnus now displays DNS master files sent as text/dns using dns-mode.
** 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
previous options have been removed or renamed.
** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t'
(`gnus-summary-sort-by-recipient'). *Note Summary Sorting::.
Picons are small "personal icons" representing users, domain and
newsgroups, which can be displayed in the Article buffer. *Note
Picons::.
** S/MIME now features LDAP user certificate searches. You need to
configure the server in `smime-ldap-host-list'.
** If the new option `gnus-treat-body-boundary' is non-`nil', a boundary
line is drawn at the end of the headers.
** URLs inside OpenPGP headers are retrieved and imported to your PGP key
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
article. Use `(setq gnus-summary-display-arrow nil)' to disable it.
** ANSI SGR control sequences can be transformed using `W A'.
** 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
the new option `gnus-confirm-mail-reply-to-news' is just the thing for
you.
** Gnus now MIME decodes articles even when they lack "MIME-Version" header.
This changes the default of `gnus-article-loose-mime'.
** If the new option `gnus-summary-display-while-building' is non-`nil',
the summary buffer is shown and updated as it's being built.
** `gnus-decay-scores' can be a regexp matching score files. For example,
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
to old but unread messages).
** Strings prefixing to the `To' and `Newsgroup' headers in summary lines
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
related commands in mailing list groups. *Note Mailing List::.
** You can replace MIME parts with external bodies. See
`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
English. *Note Article Date::.
** diffs are automatically highlighted in groups matching
`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).
** 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. *Note Flowed text: (emacs-mime)Flowed text.
(New in Gnus 5.10.7)
* Changes in Message mode and related Gnus features
* Changes in Message mode
** Delayed articles
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.
** Gnus now supports the "hashcash" client puzzle anti-spam mechanism. Use
`(setq message-generate-hashcash t)' to enable. *Note Hashcash::.
** You can now drag and drop attachments to the Message buffer. See
`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note 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
** 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
separately of `~/.newsrc.eld', while preserving marks. It also makes it
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.
** The `nnrss' back end now supports multilingual text. Non-ASCII group
names for the `nnrss' groups are also supported. *Note RSS::.
** 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
** The menu bar item (in Group and Summary buffer) named "Misc" has been
renamed to "Gnus".
** The menu bar item (in Message mode) named "MML" has been renamed to
"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 has been updated to use GNOME icons. You can also
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
for Emacs, not in XEmacs.)
** The tool bar icons are now (de)activated correctly in the group buffer,
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
** `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,
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.
** The `all.SCORE' file can be edited from the group buffer using `W e'.

View file

@ -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
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
compiled to use the 68881, then you must edit config.h according
the comments at the end of `src/m/sun3.h'.

View file

@ -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 Mac Carbon port is no longer supported.
Instead, use... [what?]
** configure now checks for libgif before libungif when searching for
a GIF library.
** Support for systems without alloca has been removed.
** Support for Sun windows has been removed.
** The `emacstool' utility has been removed.
@ -118,6 +123,11 @@ following arguments.
* 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
`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.
** 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
** 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.
When running isearch in a ChangeLog file, if the search fails,
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.
*** 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.
@ -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
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
+++
** 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
+++
** 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
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
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.
*** $TERM is now set to `dumb' for subprocesses. If you want to know the

View file

@ -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.
** cua.el, cua-mode.el: remove old versions.
* 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
** `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
than the window, the usual keys for moving the cursor cause the image
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
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
was needed. In text command mode, if you have problems before execution has
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.
** 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
after a specified position is invisible.
@ -120,9 +122,16 @@ as its frame.
** The new function `image-refresh' refreshes all images associated
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

View file

@ -10,35 +10,8 @@ for Emacs functions and variables.
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
Author: Sun Microsystems, Inc
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
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
View 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
View 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

View 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 $$$",
"$$$$$$$$$$$$$ $$$",
"$$$$$$$$$$$$$$$$$$$$$$$$"
};

View 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",
" ",
" ",
" . ",
" + ",
" @#$$# + ",
" ++ + ",
" ",
" + + ",
" $+ +$ ",
" %+ +% ",
" %++++% ",
" $$$$ ",
" ",
" "};

View 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",
" ",
" ",
" .++..++. ",
" +@.++.@+ ",
" +.@#@@.+ ",
" +@.#@.@+ ",
" .++. ++. ",
" + + ",
" .+ +. ",
" $+ +$ ",
" $++++$ ",
" .... ",
" ",
" "};

View 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",
" ",
" ",
" . ",
" .. .+. ",
" +++. +.+ ",
" +@+ ",
" @+# ",
" @@ ",
" $++++$ ",
" .+@ @+. ",
" @+@ @+@ ",
" @ @ ",
" ",
" "};

View file

@ -0,0 +1,21 @@
/* XPM */
static char * dead_xpm[] = {
"14 14 4 1",
" c None",
". c #737373",
"+ c #ABABAB",
"@ c #000000",
" ",
" ",
" .+ +. + +. ",
" +@+@++@+@+ ",
" +@ @+ ",
" +@+@ @+@+ ",
" + +. + + ",
" ",
" +@ @+ ",
" .@ @. ",
" .@@@@. ",
" ++++ ",
" ",
" "};

View 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",
" ",
" ",
" .+ +. ",
" @# #@ ",
" #+ @+# ",
" #+ @+# ",
" ",
" # # ",
" @# #@ ",
" $# #$ ",
" $####$ ",
" @@@@ ",
" ",
" "};

View 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",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" @ @ ",
" +# #+ ",
" @@# #@@ ",
" #$++++++$# ",
" ######## ",
" ",
" "};

View file

@ -0,0 +1,22 @@
/* XPM */
static char * frown_xpm[] = {
"14 14 5 1",
" c None",
". c #6E6E6E",
"+ c #484848",
"@ c #ABABAB",
"# c #000000",
" ",
" ",
" .+ +. ",
" @# #@ ",
" #+ @+# ",
" #+@@+# ",
" ",
" @@ ",
" .####. ",
" +#@ @#+ ",
" @#@ @#@ ",
" + + ",
" ",
" "};

View 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",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" ++@@##@@++ ",
" $+%%%%%%+$ ",
" &+%%%%+& ",
" &++++& ",
" $$$$ ",
" ",
" "};

View 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",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" @ #@ ",
"#+$+$ $ + ",
"$ +#+$#++$+$ ",
" $ ++# ++ ",
" + ",
" ",
" "};

View 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",
" ",
" ",
" .... ",
" +@@@@+ ",
" +@ @+ ",
" .@ @. ",
" @ @ ",
" ",
" @ @ ",
" @ @ ",
" @ @ ",
" # # ",
" ",
" "};

View file

@ -0,0 +1,22 @@
/* XPM */
static char * sad_xpm[] = {
"14 14 5 1",
" c None",
". c #484848",
"+ c #000000",
"@ c #ABABAB",
"# c #6E6E6E",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" @@@@ ",
" #++++# ",
" .+@ @+. ",
" @+@ @+@ ",
" . . ",
" ",
" "};

View file

@ -0,0 +1,22 @@
/* XPM */
static char * smile_xpm[] = {
"14 14 5 1",
" c None",
". c #484848",
"+ c #000000",
"@ c #ABABAB",
"# c #737373",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" + + ",
" @+ +@ ",
" #+ +# ",
" #++++# ",
" @@@@ ",
" ",
" "};

View 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",
" ",
" ",
" . . ",
" + + ",
" + + ",
" + + ",
" ",
" @ ",
" ## $@ ",
" #++++++# ",
" @$ ## ",
" @ ",
" ",
" "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&&&&&&*&&%. ",
" +$&&&&&&&.&&$+ ",
".@&@%##%&&.&&&@.",
".#&&&..&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&.&&&&&&&&.&$.",
".#&#.&&&&&&.#&#.",
".@&&=.&&&&.=&&@.",
" +$&&=....=&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&#..##..#&%. ",
" +$&.%#..#%.&$+ ",
".@&&.#%+%%#.&&@.",
".#&&.%#+%#%.&&#.",
".$&&#..#&..#&&$.",
".$&.&&&&&&&&.&$.",
".#&#.&&&&&&.#&#.",
".@&&*.&&&&.*&&@.",
" +$&&*....*&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&&&&&&*&&%. ",
" +$&&**&&*.*&$+ ",
".@&&...*&.*.&&@.",
".#&&&&&&&.#.&&#.",
".$&&&&&&&#.%&&$.",
".$&&&&&&&&&&&&$.",
".#&&&@....@&&&#.",
".@&&*.#&&#.*&&@.",
" +$#.#&&&&#.#$+ ",
" .%&*&&&&&&*&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%*#&#*$#&#*%. ",
" +$#.#.##.#.#$+ ",
".@&&#.$&&$.#&&@.",
".#&#.#.$$.#.#&#.",
".$&*#&#*$#&#*&$.",
".$&.&&&&&&&&.&$.",
".#&#.&&&&&&.#&#.",
".@&&*.&&&&.*&&@.",
" +$&&*....*&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&@*&&&&*@&%. ",
" +$&#.&&&&.#&$+ ",
".@&&&.*&#*.&&&@.",
".#&&&.*##*.&&&#.",
".$&&&&&&&&&&&&$.",
".$&.&&&&&&&&.&$.",
".#&#.&&&&&&.#&#.",
".@&&=.&&&&.=&&@.",
" +$&&=....=&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&@&&&&&&&&@&$.",
".#&.#&&&&&&#.&#.",
".@&@@#&&&&#@@&@.",
" +$#+......+#$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&@*&&&&*@&%. ",
" +$&#.&&&&.#&$+ ",
".@&&&.*&#*.&&&@.",
".#&&&.*##*.&&&#.",
".$&&&&&&&&&&&&$.",
".$&&&&&&&&&&&&$.",
".#&&&@....@&&&#.",
".@&&*.#&&#.*&&@.",
" +$#.#&&&&#.#$+ ",
" .%&*&&&&&&*&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&..%%@@%%..&$.",
".#&#.======.#&#.",
".@&&-.====.-&&@.",
" +$&&-....-&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$%&&&&&&&&&#%$.",
".#.@.@&&&@&&.&#.",
".@&.#.@#..@.@&@.",
" +$@&&..#&..&$+ ",
" .%&&&&.&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&&&&&&&&&%. ",
" +$&&*....*&&$+ ",
".@&&*.&&&&.*&&@.",
".#&#.&&&&&&.#&#.",
".$&.&&&&&&&&.&$.",
".$&&&&&&&&&&&&$.",
".#&&&.&&&&.&&&#.",
".@&&&.&&&&.&&&@.",
" +$&&.&&&&.&&$+ ",
" .%&&=&&&&=&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&&&&&&&&&&&&$.",
".#&&&@....@&&&#.",
".@&&*.#&&#.*&&@.",
" +$#.#&&&&#.#$+ ",
" .%&*&&&&&&*&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&.&&&&&&&&.&$.",
".#&#.&&&&&&.#&#.",
".@&&=.&&&&.=&&@.",
" +$&&=....=&&$+ ",
" .%&&&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View 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",
" ...... ",
" .+@#$$#@+. ",
" .%$&&&&&&$%. ",
" .%&&*&&&&*&&%. ",
" +$&&.&&&&.&&$+ ",
".@&&&.&&&&.&&&@.",
".#&&&.&&&&.&&&#.",
".$&&&&&&&&&&&&$.",
".$&&&&&&&&&%&&$.",
".#&&&&&&&&@%&&#.",
".@&&#......#&&@.",
" +$&%@&&&&&&&$+ ",
" .%&%&&&&&&&&%. ",
" .%$&&&&&&$%. ",
" .+@#$$#@+. ",
" ...... "};

View file

@ -121,7 +121,7 @@
\newcommand{\Copyright}{%
\begin{center}
Copyright \copyright\ 1995, 2000, 2002, 2003, 2004,
2005, 2006, 2007 Free Software Foundation, Inc.
2005, 2006, 2007 Free Software Foundation, Inc.\\*
\end{center}
Permission is granted to make and distribute copies of this reference
@ -566,7 +566,7 @@
{\esamepage
\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-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-i & Sort the summary-buffer by article score.\\
C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
@ -876,6 +876,7 @@
\begin{keys}{/M}
// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
/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.\\
/u & (x) Limit to {\bf unread} articles.
[Prefix: also exclude ticked and dormant articles]\\
@ -900,7 +901,7 @@
/o & Insert all {\bf old} articles. [Prefix: how many]\\
/N & Insert all {\bf new} articles.\\
/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}
}
}

View file

@ -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)
* quail/latin-ltx.el ("\\qed"): Add this rule.

View file

@ -252,6 +252,11 @@ install: all
done) \
else true; fi
-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:
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \

View file

@ -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>
* emacsclient.c: Add a wrapper for getenv so it also checks the

View file

@ -298,8 +298,6 @@ get_current_dir_name ()
}
#endif
/* Message functions. */
#ifdef WINDOWSNT
#define REG_ROOT "SOFTWARE\\GNU\\Emacs"
@ -440,6 +438,8 @@ w32_execvp (path, argv)
#endif /* WINDOWSNT */
/* Display a normal or error message.
On Windows, use a message box if compiled as a Windows app. */
void
message (int is_error, char *message, ...)
{

View file

@ -142,7 +142,7 @@ $(BLD)/ctags.$(O): ctags.c
# make-docfile blindly replaces .o with .c anyway. Keep .o in this list
# 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 \
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.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 \
alloc.o data.o doc.o editfns.o callint.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 \
region-cache.o sound.o atimer.o \
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o

File diff suppressed because it is too large Load diff

View file

@ -35,6 +35,12 @@ EMACS = ../src/emacs
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
lisptagsfiles1 = $(lisp)/[a-zA-Z]*.el
lisptagsfiles2 = $(lisp)/[a-zA-Z]*/[a-zA-Z]*.el
@ -143,7 +149,7 @@ TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2)
.SUFFIXES: .elc .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
# 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; \
then \
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 \
done
@ -187,14 +193,14 @@ compile-always: $(lisp)/subdirs.el mh-autoloads doit
if test -f $$el; \
then \
echo Compiling $$el; \
$(emacs) -f batch-byte-compile $$el || exit 1; \
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
fi \
done
compile-calc:
for el in `find $(lisp)/calc -name '*.el'`; do \
echo Compiling $$el; \
$(emacs) -f batch-byte-compile $$el || exit 1; \
$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
done
# 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-langs.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
# the autoloads for the MH-E entry points, which are already in

View file

@ -27,8 +27,20 @@
;; This facility is documented in the Emacs Manual.
;; Todo:
;; - Make abbrev-file-name obey user-emacs-directory.
;; - Cleanup name space.
;;; 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
"Non-nil means user plans to use global abbrevs only.
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)))
(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)
;; arch-tag: dbd6f3ae-dfe3-40ba-b00f-f9e3ff960df5

File diff suppressed because it is too large Load diff

View file

@ -1005,7 +1005,7 @@ If non-nil TEXT is a string that will be printed as a heading."
(defun apropos-describe-plist (symbol)
"Display a pretty listing of SYMBOL's plist."
(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)
(princ "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)
'face apropos-symbol-face))
(insert (apropos-format-plist symbol "\n "))
(princ ")")
(print-help-return-message)))
(princ ")")))
(provide 'apropos)

View file

@ -78,6 +78,8 @@ Summary of changes to "Calc"
* Made unit conversions exact when possible.
* Lower the precedence of negation.
Version 2.1:
* New matrix mode for square matrices. Improved handling of

View file

@ -1782,8 +1782,8 @@ calc-kill calc-kill-region calc-yank))))
;;; User menu.
(defun calc-user-key-map ()
(if calc-emacs-type-lucid
(error "User-defined keys are not supported in Lucid Emacs"))
(if (featurep 'xemacs)
(error "User-defined keys are not supported in XEmacs"))
(let ((res (cdr (lookup-key calc-mode-map "z"))))
(if (eq (car (car res)) 27)
(cdr res)

View file

@ -84,10 +84,10 @@
(message "`C' language mode")))
(put 'c 'math-oper-table
'( ( "u+" ident -1 1000 )
( "u-" neg -1 1000 )
( "u!" calcFunc-lnot -1 1000 )
'( ( "u!" calcFunc-lnot -1 1000 )
( "~" calcFunc-not -1 1000 )
( "u+" ident -1 197 )
( "u-" neg -1 197 )
( "*" * 190 191 )
( "/" / 190 191 )
( "%" % 190 191 )
@ -328,9 +328,7 @@
"LaTeX language mode with \\func(\\text{var}) and multiline matrices")))))
(put 'tex 'math-oper-table
'( ( "u+" ident -1 1000 )
( "u-" neg -1 1000 )
( "\\hat" calcFunc-hat -1 950 )
'( ( "\\hat" calcFunc-hat -1 950 )
( "\\check" calcFunc-check -1 950 )
( "\\tilde" calcFunc-tilde -1 950 )
( "\\acute" calcFunc-acute -1 950 )
@ -351,6 +349,8 @@
( "!" calcFunc-fact 210 -1 )
( "^" ^ 201 200 )
( "_" calcFunc-subscr 201 200 )
( "u+" ident -1 197 )
( "u-" neg -1 197 )
( "\\times" * 191 190 )
( "*" * 191 190 )
( "2x" * 191 190 )
@ -575,9 +575,7 @@
(message "Eqn language mode")))
(put 'eqn 'math-oper-table
'( ( "u+" ident -1 1000 )
( "u-" neg -1 1000 )
( "prime" (math-parse-eqn-prime) 950 -1 )
'( ( "prime" (math-parse-eqn-prime) 950 -1 )
( "prime" calcFunc-Prime 950 -1 )
( "dot" calcFunc-dot 950 -1 )
( "dotdot" calcFunc-dotdot 950 -1 )
@ -599,6 +597,8 @@
( "right ceil" closing 0 -1 )
( "+-" sdev 300 300 )
( "!" calcFunc-fact 210 -1 )
( "u+" ident -1 197 )
( "u-" neg -1 197 )
( "times" * 191 190 )
( "*" * 191 190 )
( "2x" * 191 190 )

View file

@ -821,9 +821,6 @@ If nil, selections displayed but ignored.")
(defvar calc-embedded-mode-hook nil
"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.
(let ((name (and (fboundp 'calc-dispatch)
(eq (car-safe (symbol-function 'calc-dispatch)) 'autoload)
@ -968,7 +965,7 @@ If nil, selections displayed but ignored.")
(defvar calc-digit-map
(let ((map (make-keymap)))
(if calc-emacs-type-lucid
(if (featurep 'xemacs)
(map-keymap (function
(lambda (keys bind)
(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
(if (vectorp x)
(if calc-emacs-type-lucid
(if (featurep 'xemacs)
(if (= (length x) 1)
(vector (if (consp (aref x 0))
(cons 'meta (aref x 0))
@ -2109,13 +2106,13 @@ See calc-keypad for details."
(calc-prev-char nil)
(calc-prev-prev-char nil)
(calc-buffer (current-buffer))
(buf (if calc-emacs-type-lucid
(buf (if (featurep 'xemacs)
(catch 'calc-foo
(catch 'execute-kbd-macro
(throw 'calc-foo
(read-from-minibuffer
"Calc: " "" calc-digit-map)))
(error "Lucid Emacs requires RET after %s"
(error "XEmacs requires RET after %s"
"digit entry in kbd macro"))
(let ((old-esc (lookup-key global-map "\e")))
(unwind-protect
@ -3531,8 +3528,6 @@ and all digits are kept, regardless of Calc's current precision."
(defconst math-standard-opers
'( ( "_" calcFunc-subscr 1200 1201 )
( "%" calcFunc-percent 1100 -1 )
( "u+" ident -1 1000 )
( "u-" neg -1 1000 197 )
( "u!" calcFunc-lnot -1 1000 )
( "mod" mod 400 400 185 )
( "+/-" sdev 300 300 185 )
@ -3540,6 +3535,8 @@ and all digits are kept, regardless of Calc's current precision."
( "!" calcFunc-fact 210 -1 )
( "^" ^ 201 200 )
( "**" ^ 201 200 )
( "u+" ident -1 197 )
( "u-" neg -1 197 )
( "/" / 190 191 )
( "%" % 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.
(defun calc-read-key (&optional optkey)
(cond (calc-emacs-type-lucid
(cond ((featurep 'xemacs)
(let ((event (next-command-event)))
(let ((key (event-to-character event t t)))
(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 ()
(if (featurep 'xemacs)
(calc-emacs-type-lucid (setq unread-command-event nil))
(setq unread-command-event nil)
(setq unread-command-events nil)))
(when calc-always-load-extensions

View file

@ -374,11 +374,6 @@
:prefix "custom-"
:group 'customize)
(defgroup abbrev-mode nil
"Word abbreviations mode."
:link '(custom-manual "(emacs)Abbrevs")
:group 'abbrev)
(defgroup alloc nil
"Storage allocation and gc for GNU Emacs Lisp interpreter."
:tag "Storage Allocation"
@ -1718,7 +1713,7 @@ item in another window.\n\n"))
(defun custom-browse-insert-prefix (prefix)
"Insert PREFIX. On XEmacs convert it to line graphics."
;; Fixme: do graphics.
(if nil ; (string-match "XEmacs" emacs-version)
(if nil ; (featurep 'xemacs)
(progn
(insert "*")
(while (not (string-equal prefix ""))

View file

@ -35,10 +35,7 @@
;;; Code:
(let ((all '(;; abbrev.c
(abbrev-all-caps abbrev-mode boolean)
(pre-abbrev-expand-hook abbrev-mode hook)
;; alloc.c
(let ((all '(;; alloc.c
(gc-cons-threshold alloc integer)
(garbage-collection-messages alloc boolean)
;; buffer.c

View file

@ -583,10 +583,10 @@ This recursively follows aliases."
"Inform Custom that VARIABLE has been set (changed).
VARIABLE is a symbol that names a user option.
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)))))
;;; Custom Themes
;;; Custom Themes
;;; Loading files needed to customize a symbol.
;;; This is in custom.el because menu-bar.el needs it for toggle cmds.

View file

@ -33,7 +33,6 @@
(eval-when-compile (require 'cl))
(require 'pcvs-util)
(eval-when-compile (require 'pcvs))
;;;

View file

@ -35,7 +35,7 @@
;; Commands which will delete the selection need a 'delete-selection
;; 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:
;; 'yank
;; 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-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-ns-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-isearch-map "\C-g" 'abort-recursive-edit))
(add-hook 'delsel-unload-hook 'delsel-unload-hook)
(define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit)
(dolist (sym '(self-insert-command self-insert-iso yank clipboard-yank
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)

View file

@ -512,7 +512,7 @@ as well as widgets, buttons, overlays, and text properties."
(if (cadr x) (length (car x)) 0))
item-list)))
(help-setup-xref nil (interactive-p))
(with-output-to-temp-buffer (help-buffer)
(with-help-window (help-buffer)
(with-current-buffer standard-output
(set-buffer-multibyte multibyte-p)
(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))
(setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
(toggle-read-only 1)
(print-help-return-message)))))
(toggle-read-only 1)))))
(defalias 'describe-char-after 'describe-char)
(make-obsolete 'describe-char-after 'describe-char "22.1")

View file

@ -135,6 +135,8 @@
;;; Code:
(defvar uniquify-managed)
(defvar desktop-file-version "206"
"Version number of desktop file format.
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 "Ask the user" ask))
:group 'desktop
:version "23.1")
:version "22.2")
(defcustom desktop-base-file-name
(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."
:type 'file
:group 'desktop
:version "23.1")
:version "22.2")
(defcustom desktop-path '("." "~")
"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
:group 'desktop
:options '(desktop-save-mode-off save-buffers-kill-emacs)
:version "23.1")
:version "22.2")
(defcustom desktop-after-read-hook nil
"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
'((auto-fill-function auto-fill-mode)
(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.
Each entry has the form (NAME RESTORE-FUNCTION).
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
;; basic information
(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
;; minor modes
(let (ret)
@ -1150,7 +1155,7 @@ directory DIRNAME."
(setq desktop-first-buffer result))
(set-buffer result)
(unless (equal (buffer-name) desktop-buffer-name)
(rename-buffer desktop-buffer-name))
(rename-buffer desktop-buffer-name t))
;; minor modes
(cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible
(auto-fill-mode 1))

View file

@ -1160,7 +1160,8 @@ Special value `always' suppresses confirmation."
(or (eq recursive 'always)
(yes-or-no-p (format "Recursive copies of %s? " from))))
;; This is a directory.
(let ((files
(let ((mode (file-modes from))
(files
(condition-case err
(directory-files from nil dired-re-no-dot)
(file-error
@ -1174,7 +1175,9 @@ Special value `always' suppresses confirmation."
(if (file-exists-p to)
(or top (dired-handle-overwrite to))
(condition-case err
(make-directory to)
(progn
(make-directory to)
(set-file-modes to #o700))
(file-error
(push (dired-make-relative from)
dired-create-files-failures)
@ -1193,7 +1196,9 @@ Special value `always' suppresses confirmation."
(file-error
(push (dired-make-relative thisfrom)
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.
(or top (dired-handle-overwrite to))
(condition-case err

View file

@ -939,7 +939,7 @@ dired."
;;; string. COMMAND may be a list of commands.
;;;
;;; * 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
;;; `dired-shell-command-history'.

View file

@ -57,18 +57,12 @@
;; add 't' as a third element. Note that some of the functions in
;; 'comint.el' assume a single-line prompt (eg, comint-bol).
;;
;; Determining this information may take some experimentation. Setting
;; the variable `dirtrack-debug' may help; it causes the directory-tracking
;; filter to log messages to the buffer `dirtrack-debug-buffer'. You can easily
;; toggle this setting with the `dirtrack-debug-toggle' function.
;; Determining this information may take some experimentation. Using
;; `dirtrack-debug-mode' may help; it causes the directory-tracking
;; filter to log messages to the buffer `dirtrack-debug-buffer'.
;;
;; 3) Add a hook to shell-mode to enable the directory tracking:
;;
;; (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'.
;; 3) Activate `dirtrack-mode'. You may wish to turn ordinary shell
;; tracking off by calling `shell-dirtrack-mode'.
;;
;; Examples:
;;
@ -147,7 +141,7 @@ be on a single line."
:type 'boolean)
(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
:type 'string)
@ -196,49 +190,53 @@ and ends with a forward slash."
(concat (match-string 1 dir) ":" (match-string 2 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."
(interactive)
(setq dirtrack-debug (not dirtrack-debug))
(message "Directory debugging %s" (if dirtrack-debug "ON" "OFF"))
(and dirtrack-debug
(display-buffer (get-buffer-create dirtrack-debug-buffer))))
nil nil nil
(if dirtrack-debug-mode
(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)
(let ((buf (current-buffer))
(debug-buf (get-buffer-create dirtrack-debug-buffer))
)
(set-buffer debug-buf)
(goto-char (point-max))
(insert (concat string "\n"))
(set-buffer buf)
))
"Insert string at the end of `dirtrack-debug-buffer'."
(when dirtrack-debug-mode
(with-current-buffer (get-buffer-create dirtrack-debug-buffer)
(goto-char (point-max))
(insert (concat string "\n")))))
;;;###autoload
(defun dirtrack (input)
"Determine the current directory by scanning the process output for a prompt.
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
function `dirtrack-debug-toggle' to turn on debugging output.
You can enable directory tracking by adding this function to
`comint-output-filter-functions'."
(if (or (null dirtrackp)
;; No output?
(eq (point) (point-min)))
nil
function `dirtrack-debug-mode' to turn on debugging output."
(unless (or (null dirtrack-mode)
(eq (point) (point-min))) ; no output?
(let (prompt-path
(current-dir default-directory)
(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)))
(save-excursion
;; No match
(if (null (string-match dirtrack-regexp input))
(and dirtrack-debug
(dirtrack-debug-message
(format
"Input `%s' failed to match `dirtrack-regexp'" input)))
(if (not (string-match dirtrack-regexp input))
(dirtrack-debug-message
(format "Input `%s' failed to match `dirtrack-regexp'" input))
(setq prompt-path (match-string match-num input))
;; Empty string
(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
(setq prompt-path (funcall dirtrack-directory-function
prompt-path))
(setq current-dir (funcall dirtrack-canonicalize-function
prompt-path)
current-dir (funcall dirtrack-canonicalize-function
current-dir))
(and dirtrack-debug
(dirtrack-debug-message
(format
"Prompt is %s\nCurrent directory is %s"
prompt-path current-dir)))
(dirtrack-debug-message
(format "Prompt is %s\nCurrent directory is %s"
prompt-path current-dir))
;; Compare them
(if (or (string= current-dir prompt-path)
(string= current-dir
(abbreviate-file-name prompt-path)))
(and dirtrack-debug
(dirtrack-debug-message
(format "Not changing directory")))
(string= current-dir (abbreviate-file-name prompt-path)))
(dirtrack-debug-message (format "Not changing directory"))
;; It's possible that Emacs will think the directory
;; won't exist (eg, rlogin buffers)
(if (file-accessible-directory-p prompt-path)
;; Change directory
(and (shell-process-cd prompt-path)
(run-hooks 'dirtrack-directory-change-hook)
dirtrack-debug
(dirtrack-debug-message
(format "Changing directory to %s" prompt-path)))
(error "Directory %s does not exist" prompt-path)))

View file

@ -75,7 +75,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
;;;###autoload
(defun describe-display-table (dt)
"Describe the display table DT in a help buffer."
(with-output-to-temp-buffer "*Help*"
(with-help-window "*Help*"
(princ "\nTruncation glyph: ")
(prin1 (display-table-slot dt 'truncation))
(princ "\nWrap glyph: ")
@ -97,8 +97,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
(aset vector i (aref dt i))
(setq i (1+ i)))
(describe-vector vector))
(help-mode))
(print-help-return-message)))
(help-mode))))
;;;###autoload
(defun describe-current-display-table ()

View file

@ -42,8 +42,7 @@
;;
;; 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
;; representation and the source text representation of the document. With
;; `C-c C-e' you can switch to an appropriate editing mode for the document.
;; representation and the source text representation of the document.
;;
;; 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
@ -72,14 +71,14 @@
;; 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
;; matching pages and messages how many match-pages were found. After that you
;; can jump to the next page containing a match with
;; `doc-view-search-next-match' (bound to `C-S-n') or to the previous matching
;; page with `doc-view-search-previous-match' (bound to `C-S-p'). This works
;; by searching a plain text representation of the document. If that doesn't
;; already exist the first invokation of `doc-view-search' starts the
;; conversion. When that finishes and you're still viewing the document
;; (i.e. you didn't switch to another buffer) you're queried for the regexp
;; then.
;; can jump to the next page containing a match with an additional `C-s'. With
;; `C-r' you can do the same, but backwards. To search for a new regexp give a
;; prefix arg to one of the search functions, e.g. by typing `C-u C-s'. The
;; searching works by using a plain text representation of the document. If
;; that doesn't already exist the first invokation of `doc-view-search' (or
;; `doc-view-search-backward') starts the conversion. When that finishes and
;; you're still viewing the document (i.e. you didn't switch to another buffer)
;; 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
;; it will be opened using `doc-view-mode'.
@ -100,9 +99,17 @@
;;; 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 'image-mode)
(eval-when-compile (require 'cl))
(require 'jka-compr)
;;;; Customization Options
@ -150,8 +157,9 @@ Needed for searching."
:type 'file
:group 'doc-view)
(defcustom doc-view-cache-directory (concat temporary-file-directory
"doc-view")
(defcustom doc-view-cache-directory
(expand-file-name (format "docview%d" (user-uid))
temporary-file-directory)
"The base directory, where the PNG images will be saved."
:type 'directory
:group 'doc-view)
@ -162,8 +170,8 @@ Needed for searching."
:group 'doc-view)
(defcustom doc-view-conversion-refresh-interval 3
"Every how much seconds the DocView buffer gets refreshed while conversion.
After such an refresh newly converted pages will be available for
"Interval in seconds between refreshes of the DocView buffer while converting.
After such a refresh newly converted pages will be available for
viewing. If set to nil there won't be any refreshes and the
pages won't be displayed before conversion of the whole document
has finished."
@ -178,9 +186,6 @@ has finished."
(defvar doc-view-current-page nil
"Only used internally.")
(defvar doc-view-current-doc nil
"Only used internally.")
(defvar doc-view-current-converter-process nil
"Only used internally.")
@ -198,17 +203,20 @@ has finished."
(defvar doc-view-current-image nil
"Only used internally.")
(defvar doc-view-current-overlay)
(defvar doc-view-pending-cache-flush nil)
(defvar doc-view-current-info nil
"Only used internally.")
(defvar doc-view-current-display nil
(defvar doc-view-previous-major-mode nil
"Only used internally.")
;;;; DocView Keymaps
(defvar doc-view-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
;; Navigation in the document
(define-key map (kbd "n") 'doc-view-next-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 "M-<") 'doc-view-first-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)
(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)
;; Slicing the image
(define-key map (kbd "s s") 'doc-view-set-slice)
(define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
@ -231,8 +240,7 @@ has finished."
;; Searching
(define-key map (kbd "C-s") '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-S-p") 'doc-view-search-previous-match)
(define-key map (kbd "C-r") 'doc-view-search-backward)
;; Scrolling
(define-key map [remap forward-char] 'image-forward-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)
;; 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-e") 'doc-view-edit-doc)
;; Reconvert the current document
(define-key map (kbd "g") 'doc-view-reconvert-doc)
(suppress-keymap map)
(define-key map (kbd "g") 'revert-buffer)
(define-key map (kbd "r") 'revert-buffer)
map)
"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)))
;; 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-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)
"Keymap used by `doc-view-mode' when displaying a document as text.")
"Keymap used by `doc-minor-view-mode'.")
;;;; Navigation Commands
@ -293,16 +307,14 @@ has finished."
(setq contexts (concat contexts " - \"" m "\"\n")))
contexts)))))
;; Update the buffer
(let ((inhibit-read-only t))
(erase-buffer)
(let ((beg (point)))
(doc-view-insert-image (nth (1- page) doc-view-current-files)
:pointer 'arrow)
(put-text-property beg (point) 'help-echo doc-view-current-info))
(insert "\n" doc-view-current-info)
(goto-char (point-min))
(forward-char))
(set-buffer-modified-p nil)))
(doc-view-insert-image (nth (1- page) doc-view-current-files)
:pointer 'arrow)
(overlay-put doc-view-current-overlay 'help-echo doc-view-current-info)
(goto-char (point-min))
;; This seems to be needed for set-window-hscroll (in
;; image-forward-hscroll) to do something useful, I don't have time to
;; debug this now. :-( --Stef
(forward-char)))
(defun doc-view-next-page (&optional arg)
"Browse ARG pages forward."
@ -339,11 +351,14 @@ has finished."
(error (doc-view-previous-page)
(goto-char (point-max)))))
;;;; Utility Functions
(defun doc-view-kill-proc ()
"Kill the current converter process."
(interactive)
(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
(cancel-timer doc-view-current-timer)
(setq doc-view-current-timer nil))
@ -356,33 +371,68 @@ has finished."
(when (eq major-mode 'doc-view-mode)
(kill-buffer (current-buffer))))
;;;; Conversion Functions
(defun doc-view-reconvert-doc (&rest args)
"Reconvert the current document.
Should be invoked when the cached images aren't up-to-date."
(interactive)
(let ((inhibit-read-only t)
(doc doc-view-current-doc))
(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-kill-proc-and-buffer)
(find-file doc)))
(defun doc-view-make-safe-dir (dir)
(condition-case nil
(let ((umask (default-file-modes)))
(unwind-protect
(progn
;; Create temp files with strict access rights. It's easy to
;; loosen them later, whereas it's impossible to close the
;; time-window of loose permissions otherwise.
(set-default-file-modes #o0700)
(make-directory dir))
;; Reset the umask.
(set-default-file-modes umask)))
(file-already-exists
(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 ()
"Return the directory where the png files of the current doc should be saved.
It's a subdirectory of `doc-view-cache-directory'."
(if 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
(file-name-as-directory
(concat (file-name-as-directory doc-view-cache-directory)
(let ((doc doc-view-current-doc))
(with-temp-buffer
(insert-file-contents-literally doc)
(md5 (current-buffer)))))))))
(expand-file-name
(let ((doc buffer-file-name))
(concat (file-name-nondirectory doc)
"-"
(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)
"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)
;; Now go on converting this PDF to a set of PNG files.
(let* ((pdf (process-get proc 'pdf-file))
(png (concat (doc-view-current-cache-dir)
"page-%d.png")))
(png (expand-file-name "page-%d.png"
(doc-view-current-cache-dir))))
(doc-view-pdf/ps->png pdf png))))
(defun doc-view-dvi->pdf (dvi pdf)
"Convert DVI to PDF asynchrounously."
"Convert DVI to PDF asynchronously."
(setq doc-view-current-converter-process
(start-process "dvi->pdf" doc-view-conversion-buffer
doc-view-dvipdfm-program
@ -420,10 +470,10 @@ It's a subdirectory of `doc-view-cache-directory'."
(cancel-timer doc-view-current-timer)
(setq doc-view-current-timer nil))
;; 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)
"Convert PDF-PS to PNG asynchrounously."
"Convert PDF-PS to PNG asynchronously."
(setq doc-view-current-converter-process
(apply 'start-process
(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
(setq doc-view-current-timer
(run-at-time "1 secs" doc-view-conversion-refresh-interval
'doc-view-display-maybe
doc-view-current-doc))))
'doc-view-display
buffer-file-name))))
(defun doc-view-pdf->txt-sentinel (proc 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
;; performed, search anew. This time it will be queried for a regexp.
(when (eq current-buffer proc-buffer)
(doc-view-search)))))
(doc-view-search nil)))))
(defun doc-view-pdf->txt (pdf txt)
"Convert PDF to TXT asynchrounously."
"Convert PDF to TXT asynchronously."
(setq doc-view-current-converter-process
(start-process "pdf->txt" doc-view-conversion-buffer
doc-view-pdftotext-program "-raw"
@ -474,18 +524,19 @@ It's a subdirectory of `doc-view-cache-directory'."
mode-line-process nil)
;; Now we can transform to plain text.
(doc-view-pdf->txt (process-get proc 'pdf-file)
(concat (doc-view-current-cache-dir)
"doc.txt"))))
(expand-file-name "doc.txt"
(doc-view-current-cache-dir)))))
(defun doc-view-ps->pdf (ps pdf)
"Convert PS to PDF asynchronously."
(setq doc-view-current-converter-process
(start-process "ps->pdf" doc-view-conversion-buffer
doc-view-ps2pdf-program
ps pdf
;; Avoid security problems when rendering files from
;; untrusted sources.
"-dSAFER")
"-dSAFER"
;; in-file and out-file
ps pdf)
mode-line-process (list (format ":%s" doc-view-current-converter-process)))
(set-process-sentinel doc-view-current-converter-process
'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))
(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
`doc-view-current-cache-dir'."
(clear-image-cache)
(let ((png-file (concat (doc-view-current-cache-dir)
"page-%d.png")))
(make-directory doc-view-current-cache-dir t)
(if (not (string= (file-name-extension doc-view-current-doc) "dvi"))
;; Let stale files still display while we recompute the new ones, so only
;; flush the cache when the conversion is over. One of the reasons why it
;; is important to keep displaying the stale page is so that revert-buffer
;; preserves the horizontal/vertical scroll settings (which are otherwise
;; 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.
(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
;; it.
(doc-view-dvi->pdf doc-view-current-doc
(concat (file-name-as-directory doc-view-current-cache-dir)
"doc.pdf")))))
(doc-view-dvi->pdf buffer-file-name
(expand-file-name "doc.pdf"
doc-view-current-cache-dir)))))
;;;; Slicing
@ -551,8 +607,7 @@ dragging it to its bottom-right corner. See also
(defun doc-view-reset-slice ()
"Reset the current slice.
After calling this function the whole pages will be visible
again."
After calling this function whole pages will be visible again."
(interactive)
(setq doc-view-current-slice nil)
;; Redisplay
@ -563,23 +618,23 @@ again."
(defun doc-view-insert-image (file &rest args)
"Insert the given png FILE.
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)))
(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)
"Return non-nil if A should be sorted before B.
Predicate for sorting `doc-view-current-files'."
(if (< (length a) (length b))
t
(if (> (length a) (length 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)))
(or (< (length a) (length b))
(and (= (length a) (length b))
(string< a b))))
(defun doc-view-display (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)))
(defun doc-view-buffer-message ()
(insert (propertize "Welcome to DocView!" 'face 'bold)
"\n"
"
If you see this buffer it means that the document you want to
view gets converted to PNG now and the conversion of the first
page hasn't finished yet or
;; Only show this message initially, not when refreshing the buffer (in which
;; case it's better to keep displaying the "stale" page while computing
;; the fresh new ones).
(unless (overlay-get doc-view-current-overlay 'display)
(overlay-put doc-view-current-overlay 'display
(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.
For now these keys are useful:
`q' : Bury this buffer. Conversion will go on in background.
`k' : Kill the conversion process and this buffer.\n")
(set-buffer-modified-p nil))
`k' : Kill the conversion process and this buffer.
`K' : Kill the conversion process.\n"))))
(defun doc-view-show-tooltip ()
(interactive)
(tooltip-show doc-view-current-info))
;;;;; Toggle between text and image display
;;;;; Toggle between editing and viewing
(defun doc-view-toggle-display ()
"Start or stop displaying a document file as a set of images.
This command toggles between showing the text of the document
file and showing the document as a set of images."
"Toggle between editing a document as text or viewing it."
(interactive)
(if (get-text-property (point-min) 'display)
;; Switch to text display
(let ((inhibit-read-only t))
(erase-buffer)
(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)
(if (called-interactively-p)
(message "Repeat this command to go back to displaying the file as images")))
;; Switch to image display
(let ((inhibit-read-only t))
(erase-buffer)
(doc-view-buffer-message)
(setq doc-view-current-page (or doc-view-current-page 1))
(if (file-exists-p (doc-view-current-cache-dir))
(progn
(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)))
(if (eq major-mode 'doc-view-mode)
;; Switch to editing mode
(progn
(doc-view-kill-proc)
(setq buffer-read-only nil)
(delete-overlay doc-view-current-overlay)
;; Switch to the previously used major mode or fall back to fundamental
;; mode.
(if doc-view-previous-major-mode
(funcall doc-view-previous-major-mode)
(fundamental-mode))
(doc-view-minor-mode 1))
;; Switch to doc-view-mode
(when (and (buffer-modified-p)
(y-or-n-p "The buffer has been modified. Save the changes? "))
(save-buffer))
(doc-view-mode)))
;;;; 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 2)
(if (/= page lastpage)
(setq matches (push (cons page
(list (buffer-substring
(line-beginning-position)
(line-end-position))))
matches))
(push (cons page
(list (buffer-substring
(line-beginning-position)
(line-end-position))))
matches)
(setq matches (cons
(append
(or
@ -698,52 +734,64 @@ the pagenumber and CONTEXTS are all lines of text containing a match."
(setq no (+ no (1- (length p)))))
no))
(defun doc-view-search ()
"Query for a regexp and search the current document.
(defun doc-view-search-backward (new-query)
"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
till now do that first. You should try searching anew when the
conversion finished."
(interactive)
;; New search, so forget the old results.
(setq doc-view-current-search-matches nil)
(let ((txt (concat (doc-view-current-cache-dir)
"doc.txt")))
(if (file-readable-p txt)
(progn
(setq doc-view-current-search-matches
(doc-view-search-internal
(read-from-minibuffer "Regexp: ")
txt))
(message "DocView: search yielded %d matches."
(doc-view-search-no-of-matches
doc-view-current-search-matches)))
;; We must convert to TXT first!
(if doc-view-current-converter-process
(message "DocView: please wait till conversion finished.")
(let ((ext (file-name-extension doc-view-current-doc)))
(cond
((string= ext "pdf")
;; Doc is a PDF, so convert it to TXT
(doc-view-pdf->txt doc-view-current-doc txt))
((string= ext "ps")
;; Doc is a PS, so convert it to PDF (which will be converted to
;; TXT thereafter).
(doc-view-ps->pdf doc-view-current-doc
(concat (doc-view-current-cache-dir)
"doc.pdf")))
((string= ext "dvi")
;; Doc is a DVI. This means that a doc.pdf already exists in its
;; cache subdirectory.
(doc-view-pdf->txt (concat (doc-view-current-cache-dir)
"doc.pdf")
txt))
(t (error "DocView doesn't know what to do"))))))))
till now do that first.
If BACKWARD is non-nil, jump to the previous match."
(interactive "P")
(if (and (not arg)
doc-view-current-search-matches)
(if backward
(doc-view-search-previous-match 1)
(doc-view-search-next-match 1))
;; New search, so forget the old results.
(setq doc-view-current-search-matches nil)
(let ((txt (expand-file-name "doc.txt"
(doc-view-current-cache-dir))))
(if (file-readable-p txt)
(progn
(setq doc-view-current-search-matches
(doc-view-search-internal
(read-from-minibuffer "Regexp: ")
txt))
(message "DocView: search yielded %d matches."
(doc-view-search-no-of-matches
doc-view-current-search-matches)))
;; We must convert to TXT first!
(if doc-view-current-converter-process
(message "DocView: please wait till conversion finished.")
(let ((ext (file-name-extension buffer-file-name)))
(cond
((string= ext "pdf")
;; Doc is a PDF, so convert it to TXT
(doc-view-pdf->txt buffer-file-name txt))
((string= ext "ps")
;; Doc is a PS, so convert it to PDF (which will be converted to
;; TXT thereafter).
(doc-view-ps->pdf buffer-file-name
(expand-file-name "doc.pdf"
(doc-view-current-cache-dir))))
((string= ext "dvi")
;; 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)
"Go to the ARGth next matching page."
(interactive "p")
(let* ((next-pages (remove-if (lambda (i) (<= (car i) doc-view-current-page))
doc-view-current-search-matches))
(let* ((next-pages (doc-view-remove-if
(lambda (i) (<= (car i) doc-view-current-page))
doc-view-current-search-matches))
(page (car (nth (1- arg) next-pages))))
(if page
(doc-view-goto-page page)
@ -755,8 +803,9 @@ conversion finished."
(defun doc-view-search-previous-match (arg)
"Go to the ARGth previous matching page."
(interactive "p")
(let* ((prev-pages (remove-if (lambda (i) (>= (car i) doc-view-current-page))
doc-view-current-search-matches))
(let* ((prev-pages (doc-view-remove-if
(lambda (i) (>= (car i) doc-view-current-page))
doc-view-current-search-matches))
(page (car (nth (1- arg) (nreverse prev-pages)))))
(if page
(doc-view-goto-page page)
@ -767,40 +816,92 @@ conversion finished."
;;;; User interface commands and the mode
(put 'doc-view-mode 'mode-class 'special)
;; (put 'doc-view-mode 'mode-class 'special)
;;;###autoload
(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)
(defun doc-view-initiate-display ()
;; Switch to image display if possible
(if (and (display-images-p)
(image-type-available-p 'png)
(not (get-text-property (point-min) 'display)))
(doc-view-toggle-display))
(message
"%s"
(substitute-command-keys
"Type \\[doc-view-toggle-display] to toggle between image and text display.")))
(image-type-available-p 'png))
(progn
(doc-view-buffer-message)
(setq doc-view-current-page (or doc-view-current-page 1))
(if (file-exists-p (doc-view-current-cache-dir))
(progn
(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 ()
"Delete the whole cache (`doc-view-cache-directory')."

Some files were not shown because too many files have changed in this diff Show more