Merge from emacs--devo--0
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-283
This commit is contained in:
commit
f23d76bdef
403 changed files with 36975 additions and 16864 deletions
25
ChangeLog
25
ChangeLog
|
@ -1,3 +1,28 @@
|
|||
2007-11-07 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.in: Deprecate Mac Carbon port.
|
||||
|
||||
2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.in: Remove HAVE_X11R5 check.
|
||||
|
||||
2007-10-31 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* Makefile.in (install-arch-indep): Fallback to $USER and `id -un'
|
||||
when changing ownership of installed files.
|
||||
|
||||
2007-10-30 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* make-dist: Add new directory etc/gnus.
|
||||
|
||||
2007-10-30 Michael Olson <mwolson@gnu.org>
|
||||
|
||||
* Makefile.in (INFO_FILES): Alphabetize. Add remember.
|
||||
|
||||
2007-10-29 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* make-dist: Add new directories etc/images/smilies/grayscale,medium.
|
||||
|
||||
2007-10-23 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* MAINTAINERS: Move to admin/.
|
||||
|
|
36
Makefile.in
36
Makefile.in
|
@ -138,11 +138,11 @@ man1dir=$(mandir)/man1
|
|||
# since there are now many packages documented with the texinfo
|
||||
# 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}" ]; \
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
125
configure
vendored
|
@ -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 &&
|
||||
|
|
96
configure.in
96
configure.in
|
@ -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 &&
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 "")}.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)}
|
||||
|
|
|
@ -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
381
doc/misc/gnus-coding.texi
Normal file
|
@ -0,0 +1,381 @@
|
|||
\input texinfo
|
||||
|
||||
@setfilename gnus-coding
|
||||
@settitle Gnus Coding Style and Maintainance Guide
|
||||
@syncodeindex fn cp
|
||||
@syncodeindex vr cp
|
||||
@syncodeindex pg cp
|
||||
|
||||
@copying
|
||||
Copyright (c) 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
|
||||
@quotation
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.1 or
|
||||
any later version published by the Free Software Foundation; with no
|
||||
Invariant Sections, with the Front-Cover texts being ``A GNU
|
||||
Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
|
||||
license is included in the section entitled ``GNU Free Documentation
|
||||
License'' in the Emacs manual.
|
||||
|
||||
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
|
||||
this GNU Manual, like GNU software. Copies published by the Free
|
||||
Software Foundation raise funds for GNU development.''
|
||||
|
||||
This document is part of a collection distributed under the GNU Free
|
||||
Documentation License. If you want to distribute this document
|
||||
separately from the collection, you can do so by adding a copy of the
|
||||
license to the document, as described in section 6 of the license.
|
||||
@end quotation
|
||||
@end copying
|
||||
|
||||
|
||||
@titlepage
|
||||
@title Gnus Coding Style and Maintainance Guide
|
||||
|
||||
@author by Reiner Steib <Reiner.Steib@@gmx.de>
|
||||
|
||||
@insertcopying
|
||||
@end titlepage
|
||||
|
||||
@c Obviously this is only a very rudimentary draft. We put it in CVS
|
||||
@c anyway hoping that it might annoy someone enough to fix it. ;-)
|
||||
@c Fixing only a paragraph also is appreciated.
|
||||
|
||||
@node Top
|
||||
@top Gnus Coding Style and Maintainance Guide
|
||||
This manual describes @dots{}
|
||||
@menu
|
||||
* Gnus Coding Style:: Gnus Coding Style
|
||||
* Gnus Maintainance Guide:: Gnus Maintainance Guide
|
||||
@end menu
|
||||
|
||||
@c @ref{Gnus Reference Guide, ,Gnus Reference Guide, gnus, The Gnus Newsreader}
|
||||
|
||||
@node Gnus Coding Style
|
||||
@chapter Gnus Coding Style
|
||||
@section Dependencies
|
||||
|
||||
The Gnus distribution contains a lot of libraries that have been written
|
||||
for Gnus and used intensively for Gnus. But many of those libraries are
|
||||
useful on their own. E.g. other Emacs Lisp packages might use the
|
||||
@acronym{MIME} library @xref{Top, ,Top, emacs-mime, The Emacs MIME
|
||||
Manual}.
|
||||
|
||||
@subsection General purpose libraries
|
||||
|
||||
@table @file
|
||||
|
||||
@item netrc.el
|
||||
@file{.netrc} parsing functionality.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item format-spec.el
|
||||
Functions for formatting arbitrary formatting strings.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item hex-util.el
|
||||
Functions to encode/decode hexadecimal string.
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
@end table
|
||||
|
||||
@subsection Encryption and security
|
||||
|
||||
@table @file
|
||||
@item encrypt.el
|
||||
File encryption routines
|
||||
@c As of 2005-10-25...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item password.el
|
||||
Read passwords from user, possibly using a password cache.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item tls.el
|
||||
TLS/SSL support via wrapper around GnuTLS
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item pgg*.el
|
||||
Glue for the various PGP implementations.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in these files.
|
||||
|
||||
@item sha1.el
|
||||
SHA1 Secure Hash Algorithm.
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
@end table
|
||||
|
||||
@subsection Networking
|
||||
|
||||
@table @file
|
||||
@item dig.el
|
||||
Domain Name System dig interface.
|
||||
@c As of 2005-10-21...
|
||||
There are no serious Gnus dependencies in this file. Uses
|
||||
@code{gnus-run-mode-hooks} (a wrapper function).
|
||||
|
||||
@item dns.el, dns-mode.el
|
||||
Domain Name Service lookups.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in these files.
|
||||
@end table
|
||||
|
||||
@subsection Mail and News related RFCs
|
||||
|
||||
@table @file
|
||||
@item pop3.el
|
||||
Post Office Protocol (RFC 1460) interface.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item imap.el
|
||||
@acronym{IMAP} library.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item ietf-drums.el
|
||||
Functions for parsing RFC822bis headers.
|
||||
@c As of 2005-10-21...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item rfc1843.el
|
||||
HZ (rfc1843) decoding. HZ is a data format for exchanging files of
|
||||
arbitrarily mixed Chinese and @acronym{ASCII} characters.
|
||||
@c As of 2005-10-21...
|
||||
@code{rfc1843-gnus-setup} seem to be useful only for Gnus. Maybe this
|
||||
function should be relocated to remove dependencies on Gnus. Other
|
||||
minor dependencies: @code{gnus-newsgroup-name} could be eliminated by
|
||||
using an optional argument to @code{rfc1843-decode-article-body}.
|
||||
|
||||
@item rfc2045.el
|
||||
Functions for decoding rfc2045 headers
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
|
||||
@item rfc2047.el
|
||||
Functions for encoding and decoding rfc2047 messages
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
@c
|
||||
Only a couple of tests for gnusy symbols.
|
||||
|
||||
@item rfc2104.el
|
||||
RFC2104 Hashed Message Authentication Codes
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
|
||||
@item rfc2231.el
|
||||
Functions for decoding rfc2231 headers
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
|
||||
@item flow-fill.el
|
||||
Interpret RFC2646 "flowed" text.
|
||||
@c As of 2005-10-27...
|
||||
There are no Gnus dependencies in this file.
|
||||
|
||||
@item uudecode.el
|
||||
Elisp native uudecode.
|
||||
@c As of 2005-12-06...
|
||||
There are no Gnus dependencies in this file.
|
||||
@c ... but the custom group is gnus-extract.
|
||||
|
||||
@item canlock.el
|
||||
Functions for Cancel-Lock feature
|
||||
@c Cf. draft-ietf-usefor-cancel-lock-01.txt
|
||||
@c Although this draft has expired, Canlock-Lock revived in 2007 when
|
||||
@c major news providers (e.g. news.individual.org) started to use it.
|
||||
@c As of 2007-08-25...
|
||||
There are no Gnus dependencies in these files.
|
||||
|
||||
@end table
|
||||
|
||||
@subsection message
|
||||
|
||||
All message composition from Gnus (both mail and news) takes place in
|
||||
Message mode buffers. Message mode is intended to be a replacement for
|
||||
Emacs mail mode. There should be no Gnus dependencies in
|
||||
@file{message.el}. Alas it is not anymore. Patches and suggestions to
|
||||
remove the dependencies are welcome.
|
||||
|
||||
@c message.el requires nnheader which requires gnus-util.
|
||||
|
||||
@subsection Emacs @acronym{MIME}
|
||||
|
||||
The files @file{mml*.el} and @file{mm-*.el} provide @acronym{MIME}
|
||||
functionality for Emacs.
|
||||
|
||||
@acronym{MML} (@acronym{MIME} Meta Language) is supposed to be
|
||||
independent from Gnus. Alas it is not anymore. Patches and suggestions
|
||||
to remove the dependencies are welcome.
|
||||
|
||||
@subsection Gnus backends
|
||||
|
||||
The files @file{nn*.el} provide functionality for accessing NNTP
|
||||
(@file{nntp.el}), IMAP (@file{nnimap.el}) and several other Mail back
|
||||
ends (probably @file{nnml.el}, @file{nnfolder.el} and
|
||||
@file{nnmaildir.el} are the most widely used mail back ends).
|
||||
|
||||
@c mm-uu requires nnheader which requires gnus-util. message.el also
|
||||
@c requires nnheader.
|
||||
|
||||
|
||||
@section Compatibility
|
||||
|
||||
No Gnus and Gnus 5.10.10 and up should work on:
|
||||
@itemize @bullet
|
||||
@item
|
||||
Emacs 21.1 and up.
|
||||
@item
|
||||
XEmacs 21.4 and up.
|
||||
@end itemize
|
||||
|
||||
Gnus 5.10.8 and below should work on:
|
||||
@itemize @bullet
|
||||
@item
|
||||
Emacs 20.7 and up.
|
||||
@item
|
||||
XEmacs 21.1 and up.
|
||||
@end itemize
|
||||
|
||||
@node Gnus Maintainance Guide
|
||||
@chapter Gnus Maintainance Guide
|
||||
|
||||
@section Stable and development versions
|
||||
|
||||
The development of Gnus normally is done on the CVS trunk, i.e. there
|
||||
are no separate branches to develop and test new features. Most of the
|
||||
time, the trunk is developed quite actively with more or less daily
|
||||
changes. Only after a new major release, e.g. 5.10.1, there's usually a
|
||||
feature period of several months. After the release of Gnus 5.10.6 the
|
||||
development of new features started again on the trunk while the 5.10
|
||||
series is continued on the stable branch (v5-10) from which more stable
|
||||
releases will be done when needed (5.10.7, @dots{}).
|
||||
@ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader}
|
||||
|
||||
Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8
|
||||
became a part of Emacs 21 (relabeled to Gnus 5.9). The 5.10 series
|
||||
became part of Emacs 22 as Gnus 5.11.
|
||||
|
||||
@section Syncing
|
||||
|
||||
@c Some MIDs related to this follow. Use http://thread.gmane.org/MID
|
||||
@c (and click on the subject) to get the thread on Gmane.
|
||||
|
||||
@c Some quotes from Miles Bader follow...
|
||||
|
||||
@c <v9eklyke6b.fsf@marauder.physik.uni-ulm.de>
|
||||
@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
|
||||
|
||||
In the past, the inclusion of Gnus into Emacs was quite cumbersome. For
|
||||
each change made to Gnus in Emacs repository, it had to be checked that
|
||||
it was applied to the new Gnus version, too. Else, bug fixes done in
|
||||
Emacs repository might have been lost.
|
||||
|
||||
With the inclusion of Gnus 5.10, Miles Bader has set up an Emacs-Gnus
|
||||
gateway to ensure the bug fixes from Emacs CVS are propagated to Gnus
|
||||
CVS semi-automatically. These bug fixes are installed on the stable
|
||||
branch and on the trunk. Basically the idea is that the gateway will
|
||||
cause all common files in Emacs and Gnus v5-10 to be identical except
|
||||
when there's a very good reason (e.g., the Gnus version string in Emacs
|
||||
says @samp{5.11}, but the v5-10 version string remains @samp{5.10.x}).
|
||||
Furthermore, all changes in these files in either Emacs or the v5-10
|
||||
branch will be installed into the Gnus CVS trunk, again except where
|
||||
there's a good reason.
|
||||
@c (typically so far the only exception has been that the changes
|
||||
@c already exist in the trunk in modified form).
|
||||
Because of this, when the next major version of Gnus will be included in
|
||||
Emacs, it should be very easy -- just plonk in the files from the Gnus
|
||||
trunk without worrying about lost changes from the Emacs tree.
|
||||
|
||||
The effect of this is that as hacker, you should generally only have to
|
||||
make changes in one place:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
If it's a file which is thought of as being outside of Gnus (e.g., the
|
||||
new @file{encrypt.el}), you should probably make the change in the Emacs
|
||||
tree, and it will show up in the Gnus tree a few days later.
|
||||
|
||||
If you don't have Emacs CVS access (or it's inconvenient), you can
|
||||
change such a file in the v5-10 branch, and it should propagate to Emacs
|
||||
CVS -- however, it will get some extra scrutiny (by Miles) to see if the
|
||||
changes are possibly controversial and need discussion on the mailing
|
||||
list. Many changes are obvious bug-fixes however, so often there won't
|
||||
be any problem.
|
||||
|
||||
@item
|
||||
If it's to a Gnus file, and it's important enough that it should be part
|
||||
of Emacs and the v5-10 branch, then you can make the change on the v5-10
|
||||
branch, and it will go into Emacs CVS and the Gnus CVS trunk (a few days
|
||||
later). The most prominent examples for such changes are bug-fixed
|
||||
including improvements on the documentation.
|
||||
|
||||
If you know that there will be conflicts (perhaps because the affected
|
||||
source code is different in v5-10 and the Gnus CVS trunk), then you can
|
||||
install your change in both places, and when I try to sync them, there
|
||||
will be a conflict -- however, since in most such cases there would be a
|
||||
conflict @emph{anyway}, it's often easier for me to resolve it simply if
|
||||
I see two @samp{identical} changes, and can just choose the proper one,
|
||||
rather than having to actually fix the code.
|
||||
|
||||
@item
|
||||
For general Gnus development changes, of course you just make the
|
||||
change on the Gnus CVS trunk and it goes into Emacs a few years
|
||||
later... :-)
|
||||
@end itemize
|
||||
|
||||
Of course in any case, if you just can't wait for me to sync your
|
||||
change, you can commit it in more than one place and probably there will
|
||||
be no problem; usually the changes are textually identical anyway, so
|
||||
can be easily resolved automatically (sometimes I notice silly things in
|
||||
such multiple commits, like whitespace differences, and unify those ;-).
|
||||
|
||||
|
||||
@c I do Emacs->Gnus less often (than Gnus->Emacs) because it tends to
|
||||
@c require more manual work.
|
||||
|
||||
@c By default I sync about once a week. I also try to follow any Gnus
|
||||
@c threads on the mailing lists and make sure any changes being discussed
|
||||
@c are kept more up-to-date (so say 1-2 days delay for "topical" changes).
|
||||
|
||||
@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
|
||||
|
||||
@c BTW, just to add even more verbose explanation about the syncing thing:
|
||||
|
||||
@section Miscellanea
|
||||
|
||||
@heading @file{GNUS-NEWS}
|
||||
|
||||
Starting from No Gnus, the @file{GNUS-NEWS} is created from
|
||||
@file{texi/gnus-news.texi}. Don't edit @file{GNUS-NEWS}. Edit
|
||||
@file{texi/gnus-news.texi}, type @command{make GNUS-NEWS} in the
|
||||
@file{texi} directory and commit @file{GNUS-NEWS} and
|
||||
@file{texi/gnus-news.texi}.
|
||||
|
||||
@heading Conventions for version information in defcustoms
|
||||
|
||||
For new customizable variables introduced in Oort Gnus (including the
|
||||
v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the
|
||||
comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature
|
||||
was added for Emacs 22.2 and Gnus 5.10.10.
|
||||
@c
|
||||
If the variable is new in No Gnus use @code{:version "23.0" ;; No Gnus}.
|
||||
|
||||
The same applies for customizable variables when its default value was
|
||||
changed.
|
||||
|
||||
@c Local Variables:
|
||||
@c mode: texinfo
|
||||
@c coding: iso-8859-1
|
||||
@c End:
|
||||
|
||||
@ignore
|
||||
arch-tag: ab15234c-2c8a-4cbd-8111-1811bcc6f931
|
||||
@end ignore
|
|
@ -128,7 +128,7 @@ What is the latest version of Gnus?
|
|||
Jingle please: Gnus 5.10 is released, get it while it's
|
||||
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
121
doc/misc/gnus-news.el
Normal file
|
@ -0,0 +1,121 @@
|
|||
;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
|
||||
;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Reiner Steib <Reiner.Steib@gmx.de>
|
||||
;; Keywords: tools
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 3, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defvar gnus-news-header-disclaimer
|
||||
"GNUS NEWS -- history of user-visible changes.
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006, 2007 Free Software Foundation, Inc.
|
||||
See the end of the file for license conditions.
|
||||
|
||||
Please send Gnus bug reports to bugs@gnus.org.
|
||||
For older news, see Gnus info node \"New Features\".\n\n")
|
||||
|
||||
(defvar gnus-news-trailer
|
||||
"
|
||||
* For older news, see Gnus info node \"New Features\".
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA.
|
||||
|
||||
\nLocal variables:\nmode: outline
|
||||
paragraph-separate: \"[ ]*$\"\nend:\n")
|
||||
|
||||
(defvar gnus-news-makeinfo-command "makeinfo")
|
||||
|
||||
(defvar gnus-news-fill-column 80)
|
||||
|
||||
(defvar gnus-news-makeinfo-switches
|
||||
(concat " --no-headers --paragraph-indent=0"
|
||||
" --no-validate" ;; Allow unresolved references.
|
||||
" --fill-column=" (number-to-string
|
||||
(+ 3 ;; will strip leading spaces later
|
||||
(or gnus-news-fill-column 80)))))
|
||||
|
||||
(defun batch-gnus-news ()
|
||||
"Make GNUS-NEWS in batch mode."
|
||||
(let (infile outfile)
|
||||
(setq infile (car command-line-args-left)
|
||||
command-line-args-left (cdr command-line-args-left)
|
||||
outfile (car command-line-args-left)
|
||||
command-line-args-left nil)
|
||||
(if (and infile outfile)
|
||||
(message "Creating `%s' from `%s'..." outfile infile)
|
||||
(error "Not enough files given."))
|
||||
(gnus-news-translate-file infile outfile)))
|
||||
|
||||
(defun gnus-news-translate-file (infile outfile)
|
||||
"Translate INFILE (texinfo) to OUTFILE (GNUS-NEWS)."
|
||||
(let* ((dir (concat (or (getenv "srcdir") ".") "/"))
|
||||
(infile (concat dir infile))
|
||||
(buffer (find-file-noselect (concat dir outfile))))
|
||||
(with-temp-buffer
|
||||
;; Could be done using `texinfmt' stuff as in `infohack.el'.
|
||||
(insert
|
||||
(shell-command-to-string
|
||||
(concat gnus-news-makeinfo-command " "
|
||||
gnus-news-makeinfo-switches " " infile)))
|
||||
(goto-char (point-max))
|
||||
(delete-char -1)
|
||||
(goto-char (point-min))
|
||||
(save-excursion
|
||||
(while (re-search-forward "^ \\* " nil t)
|
||||
(replace-match "\f\n* ")))
|
||||
(save-excursion
|
||||
(while (re-search-forward "^ \\* " nil t)
|
||||
(replace-match "** ")))
|
||||
(save-excursion
|
||||
(while (re-search-forward "^ " nil t)
|
||||
(replace-match "")))
|
||||
;; Avoid `*' from @ref at beginning of line:
|
||||
(save-excursion
|
||||
(while (re-search-forward "^\\*Note" nil t)
|
||||
(replace-match " \\&")))
|
||||
(goto-char (point-min))
|
||||
(insert gnus-news-header-disclaimer)
|
||||
(goto-char (point-max))
|
||||
(insert gnus-news-trailer)
|
||||
(write-region (point-min) (point-max) outfile))))
|
||||
|
||||
;;; arch-tag: e23cdd27-eafd-4ba0-816f-98f5edb0dc29
|
||||
;;; gnus-news.el ends here
|
264
doc/misc/gnus-news.texi
Normal file
264
doc/misc/gnus-news.texi
Normal file
|
@ -0,0 +1,264 @@
|
|||
@c -*-texinfo-*-
|
||||
|
||||
@c Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
@c Permission is granted to anyone to make or distribute verbatim copies
|
||||
@c of this document as received, in any medium, provided that the
|
||||
@c copyright notice and this permission notice are preserved,
|
||||
@c thus giving the recipient permission to redistribute in turn.
|
||||
|
||||
@c Permission is granted to distribute modified versions
|
||||
@c of this document, or of portions of it,
|
||||
@c under the above conditions, provided also that they
|
||||
@c carry prominent notices stating who last changed them.
|
||||
|
||||
@c This file contains a list of news features Gnus. It is supposed to be
|
||||
@c included in `gnus.texi'. `GNUS-NEWS' is automatically generated from
|
||||
@c this file (see `gnus-news.el').
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item Installation changes
|
||||
|
||||
@itemize @bullet
|
||||
@item Upgrading from previous (stable) version if you have used No Gnus.
|
||||
|
||||
If you have tried No Gnus (the unstable Gnus branch leading to this
|
||||
release) but went back to a stable version, be careful when upgrading
|
||||
to this version. In particular, you will probably want to remove the
|
||||
@file{~/News/marks} directory (perhaps selectively), so that flags are
|
||||
read from your @file{~/.newsrc.eld} instead of from the stale marks
|
||||
file, where this release will store flags for nntp. See a later entry
|
||||
for more information about nntp marks. Note that downgrading isn't
|
||||
safe in general.
|
||||
|
||||
@item Lisp files are now installed in @file{.../site-lisp/gnus/} by default.
|
||||
It defaulted to @file{.../site-lisp/} formerly. In addition to this,
|
||||
the new installer issues a warning if other Gnus installations which
|
||||
will shadow the latest one are detected. You can then remove those
|
||||
shadows manually or remove them using @code{make
|
||||
remove-installed-shadows}.
|
||||
@end itemize
|
||||
|
||||
@item New packages and libraries within Gnus
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item Gnus includes the Emacs Lisp @acronym{SASL} library.
|
||||
|
||||
This provides a clean @acronym{API} to @acronym{SASL} mechanisms from
|
||||
within Emacs. The user visible aspects of this, compared to the earlier
|
||||
situation, include support for @acronym{DIGEST}-@acronym{MD5} and
|
||||
@acronym{NTLM}. @xref{Top, ,Emacs SASL, sasl, Emacs SASL}.
|
||||
|
||||
@item ManageSieve connections uses the @acronym{SASL} library by default.
|
||||
|
||||
The primary change this brings is support for @acronym{DIGEST-MD5} and
|
||||
@acronym{NTLM}, when the server supports it.
|
||||
|
||||
@item Gnus includes a password cache mechanism in password.el.
|
||||
|
||||
It is enabled by default (see @code{password-cache}), with a short
|
||||
timeout of 16 seconds (see @code{password-cache-expiry}). If
|
||||
@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP}
|
||||
passphrase is managed by this mechanism. Passwords for ManageSieve
|
||||
connections are managed by this mechanism, after querying the user
|
||||
about whether to do so.
|
||||
@end itemize
|
||||
|
||||
@item Changes in summary and article mode
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item Gnus now supports sticky article buffers. Those are article buffers
|
||||
that are not reused when you select another article. @xref{Sticky
|
||||
Articles}.
|
||||
|
||||
@item International host names (@acronym{IDNA}) can now be decoded
|
||||
inside article bodies using @kbd{W i}
|
||||
(@code{gnus-summary-idna-message}). This requires that GNU Libidn
|
||||
(@url{http://www.gnu.org/software/libidn/}) has been installed.
|
||||
@c FIXME: Also mention @code{message-use-idna}?
|
||||
|
||||
@item The non-@acronym{ASCII} group names handling has been much
|
||||
improved. The back ends that fully support non-@acronym{ASCII} group
|
||||
names are now @code{nntp}, @code{nnml}, and @code{nnrss}. Also the
|
||||
agent, the cache, and the marks features work with those back ends.
|
||||
@xref{Non-ASCII Group Names}.
|
||||
|
||||
@item Gnus now displays @acronym{DNS} master files sent as text/dns
|
||||
using dns-mode.
|
||||
|
||||
@item Gnus supports new limiting commands in the Summary buffer:
|
||||
@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R}
|
||||
(@code{gnus-summary-limit-to-recipient}). @xref{Limiting}.
|
||||
|
||||
@item You can now fetch all ticked articles from the server using
|
||||
@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary
|
||||
Generation Commands}.
|
||||
|
||||
@item Gnus supports a new sort command in the Summary buffer:
|
||||
@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary
|
||||
Sorting}.
|
||||
|
||||
@item @acronym{S/MIME} now features @acronym{LDAP} user certificate searches.
|
||||
You need to configure the server in @code{smime-ldap-host-list}.
|
||||
|
||||
@item URLs inside Open@acronym{PGP} headers are retrieved and imported
|
||||
to your PGP key ring when you click on them.
|
||||
|
||||
@item
|
||||
Picons can be displayed right from the textual address, see
|
||||
@code{gnus-picon-style}. @xref{Picons}.
|
||||
|
||||
@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed
|
||||
using @kbd{W A}.
|
||||
|
||||
@acronym{ANSI} sequences are used in some Chinese hierarchies for
|
||||
highlighting articles (@code{gnus-article-treat-ansi-sequences}).
|
||||
|
||||
@item Gnus now MIME decodes articles even when they lack "MIME-Version" header.
|
||||
This changes the default of @code{gnus-article-loose-mime}.
|
||||
|
||||
@item @code{gnus-decay-scores} can be a regexp matching score files.
|
||||
For example, set it to @samp{\\.ADAPT\\'} and only adaptive score files
|
||||
will be decayed. @xref{Score Decays}.
|
||||
|
||||
@item Strings prefixing to the @code{To} and @code{Newsgroup} headers in
|
||||
summary lines when using @code{gnus-ignored-from-addresses} can be
|
||||
customized with @code{gnus-summary-to-prefix} and
|
||||
@code{gnus-summary-newsgroup-prefix}. @xref{To From Newsgroups}.
|
||||
|
||||
@item You can replace @acronym{MIME} parts with external bodies.
|
||||
See @code{gnus-mime-replace-part} and @code{gnus-article-replace-part}.
|
||||
@xref{MIME Commands}, @ref{Using MIME}.
|
||||
|
||||
@item
|
||||
The option @code{mm-fill-flowed} can be used to disable treatment of
|
||||
format=flowed messages. Also, flowed text is disabled when sending
|
||||
inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text,
|
||||
emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7)
|
||||
@c This entry is also present in the node "Oort Gnus".
|
||||
|
||||
@end itemize
|
||||
|
||||
@item Changes in Message mode
|
||||
|
||||
@itemize @bullet
|
||||
@item Gnus now supports the ``hashcash'' client puzzle anti-spam mechanism.
|
||||
Use @code{(setq message-generate-hashcash t)} to enable.
|
||||
@xref{Hashcash}.
|
||||
|
||||
@item You can now drag and drop attachments to the Message buffer.
|
||||
See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}.
|
||||
@xref{MIME, ,MIME, message, Message Manual}.
|
||||
|
||||
@item The option @code{message-yank-empty-prefix} now controls how
|
||||
empty lines are prefixed in cited text. @xref{Insertion Variables,
|
||||
,Insertion Variables, message, Message Manual}.
|
||||
|
||||
@item Gnus uses narrowing to hide headers in Message buffers.
|
||||
The @code{References} header is hidden by default. To make all
|
||||
headers visible, use @code{(setq message-hidden-headers nil)}.
|
||||
@xref{Message Headers, ,Message Headers, message, Message Manual}.
|
||||
|
||||
@item You can highlight different levels of citations like in the
|
||||
article buffer. See @code{gnus-message-highlight-citation}.
|
||||
|
||||
@item @code{auto-fill-mode} is enabled by default in Message mode.
|
||||
See @code{message-fill-column}. @xref{Various Message Variables, ,
|
||||
Message Headers, message, Message Manual}.
|
||||
|
||||
@item You can now store signature files in a special directory
|
||||
named @code{message-signature-directory}.
|
||||
|
||||
@item The option @code{message-citation-line-format} controls the format
|
||||
of the "Whomever writes:" line. You need to set
|
||||
@code{message-citation-line-function} to
|
||||
@code{message-insert-formatted-citation-line} as well.
|
||||
@end itemize
|
||||
|
||||
@item Changes in back ends
|
||||
|
||||
@itemize @bullet
|
||||
@item The nntp back end stores article marks in @file{~/News/marks}.
|
||||
|
||||
The directory can be changed using the (customizable) variable
|
||||
@code{nntp-marks-directory}, and marks can be disabled using the
|
||||
(back end) variable @code{nntp-marks-is-evil}. The advantage of this
|
||||
is that you can copy @file{~/News/marks} (using rsync, scp or
|
||||
whatever) to another Gnus installation, and it will realize what
|
||||
articles you have read and marked. The data in @file{~/News/marks}
|
||||
has priority over the same data in @file{~/.newsrc.eld}.
|
||||
|
||||
@item
|
||||
You can import and export your @acronym{RSS} subscriptions from
|
||||
@acronym{OPML} files. @xref{RSS}.
|
||||
|
||||
@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported.
|
||||
|
||||
By default, Gnus does not send any information about itself, but you can
|
||||
customize it using the variable @code{nnimap-id}.
|
||||
|
||||
@item The @code{nnrss} back end now supports multilingual text.
|
||||
Non-@acronym{ASCII} group names for the @code{nnrss} groups are also
|
||||
supported. @xref{RSS}.
|
||||
|
||||
@item Retrieving mail with @acronym{POP3} is supported over @acronym{SSL}/@acronym{TLS} and with StartTLS.
|
||||
|
||||
@item The nnml back end allows other compression programs beside @file{gzip}
|
||||
for compressed message files. @xref{Mail Spool}.
|
||||
|
||||
@item The nnml back end supports group compaction.
|
||||
|
||||
This feature, accessible via the functions
|
||||
@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and
|
||||
@code{gnus-server-compact-server} (@kbd{z} in the server buffer)
|
||||
renumbers all articles in a group, starting from 1 and removing gaps.
|
||||
As a consequence, you get a correct total article count (until
|
||||
messages are deleted again).
|
||||
@end itemize
|
||||
|
||||
@item Appearance
|
||||
@c Maybe it's not worth to separate this from "Miscellaneous"?
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item The tool bar has been updated to use GNOME icons.
|
||||
You can also customize the tool bar. There's no documentation in the
|
||||
manual yet, but @kbd{M-x customize-apropos RET -tool-bar$} should get
|
||||
you started. (Only for Emacs, not in XEmacs.)
|
||||
@c FIXME: Document this in the manual
|
||||
|
||||
@item The tool bar icons are now (de)activated correctly
|
||||
in the group buffer, see the variable @code{gnus-group-update-tool-bar}.
|
||||
Its default value depends on your Emacs version.
|
||||
@c FIXME: Document this in the manual
|
||||
|
||||
@item You can change the location of XEmacs' toolbars in Gnus buffers.
|
||||
See @code{gnus-use-toolbar} and @code{message-use-toolbar}.
|
||||
|
||||
@end itemize
|
||||
|
||||
@item Miscellaneous changes
|
||||
|
||||
@itemize @bullet
|
||||
@item Having edited the select-method for the foreign server in the
|
||||
server buffer is immediately reflected to the subscription of the groups
|
||||
which use the server in question. For instance, if you change
|
||||
@code{nntp-via-address} into @samp{bar.example.com} from
|
||||
@samp{foo.example.com}, Gnus will connect to the news host by way of the
|
||||
intermediate host @samp{bar.example.com} from next time.
|
||||
|
||||
@item The @file{all.SCORE} file can be edited from the group buffer
|
||||
using @kbd{W e}.
|
||||
|
||||
@end itemize
|
||||
|
||||
@end itemize
|
||||
|
||||
@c gnus-news.texi ends here.
|
||||
|
||||
@ignore
|
||||
arch-tag: 872c7569-4340-4d73-9d1d-7826d9f94a51
|
||||
@end ignore
|
1518
doc/misc/gnus.texi
1518
doc/misc/gnus.texi
File diff suppressed because it is too large
Load diff
|
@ -42,7 +42,8 @@ INFO_TARGETS = $(infodir)/ccmode \
|
|||
$(infodir)/woman $(infodir)/eshell $(infodir)/org \
|
||||
$(infodir)/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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
406
doc/misc/remember.texi
Normal file
|
@ -0,0 +1,406 @@
|
|||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename ../../info/remember
|
||||
@settitle Remember Manual
|
||||
@c %**end of header
|
||||
|
||||
@dircategory Emacs
|
||||
@direntry
|
||||
* Remember: (remember). Simple information manager for Emacs
|
||||
@end direntry
|
||||
|
||||
@syncodeindex fn cp
|
||||
|
||||
@copying
|
||||
This manual is for Remember Mode, version 1.9
|
||||
|
||||
Copyright @copyright{} 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
|
||||
@quotation
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled ``GNU
|
||||
Free Documentation License''.
|
||||
@end quotation
|
||||
@end copying
|
||||
|
||||
@titlepage
|
||||
@title Guide to Remember Mode
|
||||
@subtitle a simple information manager
|
||||
@subtitle for Emacs and XEmacs
|
||||
|
||||
@c The following two commands
|
||||
@c start the copyright page.
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
@insertcopying
|
||||
@end titlepage
|
||||
|
||||
@c So the toc is printed at the start
|
||||
@contents
|
||||
|
||||
@ifnottex
|
||||
@node Top, Preface, (dir), (dir)
|
||||
@comment node-name, next, previous, up
|
||||
@top Remember
|
||||
|
||||
@insertcopying
|
||||
@end ifnottex
|
||||
|
||||
@menu
|
||||
* Preface:: About the documentation.
|
||||
* Introduction:: What is Remember Mode?
|
||||
* Installation:: How to install Remember.
|
||||
* Implementation:: How Remember came into existence.
|
||||
* Quick Start:: Get started using Remember.
|
||||
* Function Reference:: Interactive functions in remember.el.
|
||||
* Keystrokes:: Keystrokes bound in Remember Mode.
|
||||
* Backends:: Backends for saving notes.
|
||||
* GNU Free Documentation License:: The license for this documentation.
|
||||
* Concept Index:: Search for terms.
|
||||
|
||||
@detailmenu
|
||||
--- The Detailed Node Listing ---
|
||||
|
||||
Backends
|
||||
|
||||
* Text File:: Saving to a text file.
|
||||
* Diary:: Saving to a Diary file.
|
||||
* Mailbox:: Saving to a mailbox.
|
||||
* Org:: Saving to an Org Mode file.
|
||||
|
||||
@end detailmenu
|
||||
@end menu
|
||||
|
||||
@node Preface, Introduction, Top, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Preface
|
||||
|
||||
This document describes remember-el, which was written by John Wiegley,
|
||||
was once maintained by Sacha Chua, and is now maintained by the Emacs
|
||||
developers.
|
||||
|
||||
This document is a work in progress, and your contribution will be
|
||||
greatly appreciated.
|
||||
|
||||
@node Introduction, Installation, Preface, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Introduction
|
||||
|
||||
Todo lists, schedules, phone databases... everything we use databases
|
||||
for is really just a way to extend the power of our memory, to be able
|
||||
to remember what our conscious mind may not currently have access to.
|
||||
|
||||
There are many different databases out there---and good ones---which
|
||||
this mode is not trying to replace. Rather, it's how that data gets
|
||||
there that's the question. Most of the time, we just want to say
|
||||
"Remember so-and-so's phone number, or that I have to buy dinner for the
|
||||
cats tonight." That's the FACT. How it's stored is really the
|
||||
computer's problem. But at this point in time, it's most definitely
|
||||
also the user's problem, and sometimes so laboriously so that people
|
||||
just let data slip, rather than expend the effort to record it.
|
||||
|
||||
``Remember'' is a mode for remembering data. It uses whatever
|
||||
back-end is appropriate to record and correlate the data, but its main
|
||||
intention is to allow you to express as @emph{little} structure as
|
||||
possible up front. If you later want to express more powerful
|
||||
relationships between your data, or state assumptions that were at
|
||||
first too implicit to be recognized, you can ``study'' the data later
|
||||
and rearrange it. But the initial ``just remember this'' impulse
|
||||
should be as close to simply throwing the data at Emacs as possible.
|
||||
|
||||
Have you ever noticed that having a laptop to write on doesn't
|
||||
@emph{actually} increase the amount of quality material that you turn
|
||||
out, in the long run? Perhaps it's because the time we save
|
||||
electronically in one way, we're losing electronically in another; the
|
||||
tool should never dominate one's focus. As the mystic Faridu'd-Din
|
||||
`Attar wrote: ``Be occupied as little as possible with things of the
|
||||
outer world but much with things of the inner world; then right action
|
||||
will overcome inaction.''
|
||||
|
||||
If Emacs could become a more intelligent data store, where brainstorming
|
||||
would focus on the @emph{ideas} involved---rather than the structuring
|
||||
and format of those ideas, or having to stop your current flow of work
|
||||
in order to record them---it would map much more closely to how the mind
|
||||
(well, at least mine) works, and hence would eliminate that very
|
||||
manual-ness which computers from the very beginning have been championed
|
||||
as being able to reduce.
|
||||
|
||||
@node Installation, Implementation, Introduction, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Installation
|
||||
|
||||
Installing Remember Mode is as simple as adding the following lines to
|
||||
your Emacs configuration file (usually @file{~/.emacs.d/init.el} or
|
||||
@file{~/.emacs}).
|
||||
|
||||
@lisp
|
||||
(add-to-list 'load-path "/path/to/remember")
|
||||
(require 'remember)
|
||||
@end lisp
|
||||
|
||||
@node Implementation, Quick Start, Installation, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Implementation
|
||||
|
||||
Hyperbole, as a data presentation tool, always struck me as being very
|
||||
powerful, but it seemed to require a lot of ``front-end'' work before
|
||||
that data was really available. The problem with BBDB, or keeping up
|
||||
a Bibl-mode file, is that you have to use different functions to
|
||||
record the data, and it always takes time to stop what you're doing,
|
||||
format the data in the manner expected by that particular data
|
||||
interface, and then resume your work.
|
||||
|
||||
With ``remember'', you just hit @kbd{M-x remember} (you'd probably
|
||||
want to bind this to an easily accessible keystroke, like @kbd{C-x
|
||||
M-r}), slam in your text however you like, and then hit @kbd{C-c C-c}.
|
||||
It will file the data away for later retrieval, and possibly indexing.
|
||||
|
||||
Indexing is to data what ``studying'' is in the real world. What you do
|
||||
when you study (or lucubrate, for some of us) is to realize certain
|
||||
relationships implicit in the data, so that you can make use of those
|
||||
relationships. Expressing that a certain quote you remembered was a
|
||||
literary quote, and that you want the ability to pull up all quotes of a
|
||||
literary nature, is what studying does. This is a more labor intensive
|
||||
task than the original remembering of the data, and it's typical in real
|
||||
life to set aside a special period of time for doing this work.
|
||||
|
||||
``Remember'' works in the same way. When you enter data, either by
|
||||
typing it into a buffer, or using the contents of the selected region,
|
||||
it will store that data---unindexed, uninterpreted---in a data pool.
|
||||
It will also try to remember as much context information as possible
|
||||
(any text properties that were set, where you copied it from, when,
|
||||
how, etc). Later, you can walk through your accumulated set of data
|
||||
(both organized, and unorganized) and easily begin moving things
|
||||
around, and making annotations that will express the full meaning of
|
||||
that data, as far as you know it.
|
||||
|
||||
Obviously this latter stage is more user-interface intensive, and it
|
||||
would be nice if ``remember'' could do it as elegantly as possible,
|
||||
rather than requiring a billion keystrokes to reorganize your
|
||||
hierarchy. Well, as the future arrives, hopefully experience and user
|
||||
feedback will help to make this as intuitive a tool as possible.
|
||||
|
||||
@node Quick Start, Function Reference, Implementation, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Quick Start
|
||||
|
||||
@itemize
|
||||
|
||||
@item
|
||||
Load @file{remember.el}.
|
||||
|
||||
@item
|
||||
Type @kbd{M-x remember}. The @samp{*Remember*} buffer should be
|
||||
displayed.
|
||||
|
||||
@item
|
||||
Type in what you want to remember. The first line will be treated as
|
||||
the headline, and the rest of the buffer will contain the body of the
|
||||
note.
|
||||
|
||||
@item
|
||||
Type @kbd{C-c C-c} (@code{remember-finalize}) to save the note and close
|
||||
the @samp{*Remember*} buffer.
|
||||
@end itemize
|
||||
|
||||
By default, @code{remember-finalize} saves the note in @file{~/.notes}.
|
||||
You can edit it now to see the remembered and timestamped note. You
|
||||
can edit this file however you want. New entries will always be added
|
||||
to the end.
|
||||
|
||||
To remember a region of text, use the universal prefix. @kbd{C-u M-x
|
||||
remember} displays a @samp{*Remember*} buffer with the region as the
|
||||
initial contents.
|
||||
|
||||
As a simple beginning, you can start by using the Text File backend,
|
||||
keeping your @file{~/.notes} file in outline-mode format, with a final
|
||||
entry called @samp{* Raw data}. Remembered data will be added to the
|
||||
end of the file. Every so often, you can move the data that gets
|
||||
appended there into other files, or reorganize your document.
|
||||
|
||||
You can also store remembered data in other backends.
|
||||
(@pxref{Backends})
|
||||
|
||||
Here is one way to map the remember functions in your @file{.emacs} to
|
||||
very accessible keystrokes facilities using the mode:
|
||||
|
||||
@lisp
|
||||
(autoload 'remember ``remember'' nil t)
|
||||
(autoload 'remember-region ``remember'' nil t)
|
||||
|
||||
(define-key global-map (kbd "<f9> r") 'remember)
|
||||
(define-key global-map (kbd "<f9> R") 'remember-region)
|
||||
@end lisp
|
||||
|
||||
By default, remember uses the first annotation returned by
|
||||
@code{remember-annotation-functions}. To include all of the annotations,
|
||||
set @code{remember-run-all-annotation-functions-flag} to non-nil.
|
||||
|
||||
@defopt remember-run-all-annotation-functions-flag
|
||||
Non-nil means use all annotations returned by
|
||||
@code{remember-annotation-functions}.
|
||||
@end defopt
|
||||
|
||||
You can write custom functions that use a different set of
|
||||
remember-annotation-functions. For example:
|
||||
|
||||
@lisp
|
||||
(defun my/remember-with-filename ()
|
||||
"Always use the filename."
|
||||
(interactive)
|
||||
(let ((remember-annotation-functions '(buffer-file-name)))
|
||||
(call-interactively 'remember)))
|
||||
@end lisp
|
||||
|
||||
@node Function Reference, Keystrokes, Quick Start, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Function Reference
|
||||
|
||||
@file{remember.el} defines the following interactive functions:
|
||||
|
||||
@defun remember initial
|
||||
Remember an arbitrary piece of data. With a prefix, it will use the
|
||||
region as @var{initial}.
|
||||
@end defun
|
||||
|
||||
@defun remember-region beg end
|
||||
If called from within the remember buffer, @var{beg} and @var{end} are
|
||||
ignored, and the entire buffer will be remembered. If called from any
|
||||
other buffer, that region, plus any context information specific to
|
||||
that region, will be remembered.
|
||||
@end defun
|
||||
|
||||
@defun remember-clipboard
|
||||
Remember the contents of the current clipboard. This is most useful
|
||||
for remembering things from Netscape or other X Windows applications.
|
||||
@end defun
|
||||
|
||||
@defun remember-finalize
|
||||
Remember the contents of the current buffer.
|
||||
@end defun
|
||||
|
||||
@defun remember-mode
|
||||
This enters the major mode for output from @command{remember}. This
|
||||
buffer is used to collect data that you want remember. Just hit
|
||||
@kbd{C-c C-c} when you're done entering, and it will go ahead and file
|
||||
the data for latter retrieval, and possible indexing.
|
||||
@end defun
|
||||
|
||||
@node Keystrokes, Backends, Function Reference, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Keystroke Reference
|
||||
|
||||
@file{remember.el} defines the following keybindings by default:
|
||||
|
||||
@table @kbd
|
||||
|
||||
@item C-c C-c (`remember-finalize')
|
||||
Remember the contents of the current buffer.
|
||||
|
||||
@item C-c C-k (`remember-destroy')
|
||||
Destroy the current *Remember* buffer.
|
||||
|
||||
@item C-x C-s (`remember-finalize')
|
||||
Remember the contents of the current buffer.
|
||||
|
||||
@end table
|
||||
|
||||
@node Backends, GNU Free Documentation License, Keystrokes, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Backends
|
||||
|
||||
You can save remembered notes to a variety of backends.
|
||||
|
||||
@menu
|
||||
* Text File:: Saving to a text file.
|
||||
* Diary:: Saving to a Diary file.
|
||||
* Mailbox:: Saving to a mailbox.
|
||||
* Org:: Saving to an Org Mode file.
|
||||
@end menu
|
||||
|
||||
@node Text File, Diary, Backends, Backends
|
||||
@comment node-name, next, previous, up
|
||||
@section Saving to a Text File
|
||||
@cindex text file, saving to
|
||||
|
||||
@subheading Insinuation
|
||||
|
||||
@lisp
|
||||
(setq remember-handler-functions '(remember-append-to-file))
|
||||
@end lisp
|
||||
|
||||
@subheading Options
|
||||
|
||||
@defopt remember-data-file
|
||||
The file in which to store unprocessed data.
|
||||
@end defopt
|
||||
|
||||
@defopt remember-leader-text
|
||||
The text used to begin each remember item.
|
||||
@end defopt
|
||||
|
||||
@node Diary, Mailbox, Text File, Backends
|
||||
@comment node-name, next, previous, up
|
||||
@section Saving to a Diary file
|
||||
@cindex diary, integration
|
||||
|
||||
@subheading Insinuation
|
||||
|
||||
@lisp
|
||||
(require 'remember-diary)
|
||||
(add-to-list 'remember-handler-functions 'remember-diary-extract-entries)
|
||||
@end lisp
|
||||
|
||||
@subheading Options
|
||||
|
||||
@defopt remember-diary-file
|
||||
File for extracted diary entries.
|
||||
@end defopt
|
||||
|
||||
@node Mailbox, Org, Diary, Backends
|
||||
@comment node-name, next, previous, up
|
||||
@section Saving to a Mailbox
|
||||
@cindex mailbox, saving to
|
||||
|
||||
@subheading Insinuation
|
||||
|
||||
@lisp
|
||||
(add-to-list 'remember-handler-functions 'remember-store-in-mailbox)
|
||||
@end lisp
|
||||
|
||||
@subheading Options
|
||||
|
||||
@defopt remember-mailbox
|
||||
The file in which to store remember data as mail.
|
||||
@end defopt
|
||||
|
||||
@defopt remember-default-priority
|
||||
The default priority for remembered mail messages.
|
||||
@end defopt
|
||||
|
||||
@node Org, , Mailbox, Backends
|
||||
@comment node-name, next, previous, up
|
||||
@section Saving to an Org Mode file
|
||||
@cindex org mode, integration
|
||||
|
||||
For instructions on how to integrate Remember with Org Mode,
|
||||
consult @ref{Remember, , , org}.
|
||||
|
||||
@node GNU Free Documentation License, Concept Index, Backends, Top
|
||||
@appendix GNU Free Documentation License
|
||||
@include doclicense.texi
|
||||
|
||||
@node Concept Index, , GNU Free Documentation License, Top
|
||||
@comment node-name, next, previous, up
|
||||
@unnumbered Index
|
||||
|
||||
@printindex cp
|
||||
|
||||
@bye
|
||||
|
||||
@ignore
|
||||
arch-tag: 5b980db0-20cc-4167-b845-52dc11d53b9f
|
||||
@end ignore
|
270
doc/misc/sasl.texi
Normal file
270
doc/misc/sasl.texi
Normal file
|
@ -0,0 +1,270 @@
|
|||
\input texinfo @c -*-texinfo-*-
|
||||
|
||||
@setfilename sasl.info
|
||||
|
||||
@set VERSION 0.2
|
||||
|
||||
@dircategory Emacs
|
||||
@direntry
|
||||
* SASL: (sasl). The Emacs SASL library.
|
||||
@end direntry
|
||||
|
||||
@settitle Emacs SASL Library @value{VERSION}
|
||||
|
||||
@ifinfo
|
||||
This file describes the Emacs SASL library.
|
||||
|
||||
Copyright @copyright{} 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 2000 Daiki Ueno.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
any later version published by the Free Software Foundation; with no
|
||||
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
@end ifinfo
|
||||
|
||||
@tex
|
||||
|
||||
@titlepage
|
||||
@title Emacs SASL Library
|
||||
|
||||
@author by Daiki Ueno
|
||||
@page
|
||||
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 2000 Daiki Ueno.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
any later version published by the Free Software Foundation; with no
|
||||
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
@end titlepage
|
||||
@page
|
||||
|
||||
@end tex
|
||||
|
||||
@node Top
|
||||
@top Emacs SASL
|
||||
This manual describes the Emacs SASL library.
|
||||
|
||||
A common interface to share several authentication mechanisms between
|
||||
applications using different protocols.
|
||||
|
||||
@menu
|
||||
* Overview:: What Emacs SASL library is.
|
||||
* How to use:: Adding authentication support to your applications.
|
||||
* Data types::
|
||||
* Back end drivers:: Writing your own drivers.
|
||||
* Index::
|
||||
* Function Index::
|
||||
* Variable Index::
|
||||
@end menu
|
||||
|
||||
@node Overview
|
||||
@chapter Overview
|
||||
|
||||
@sc{sasl} is short for @dfn{Simple Authentication and Security Layer}.
|
||||
This standard is documented in RFC2222. It provides a simple method for
|
||||
adding authentication support to various application protocols.
|
||||
|
||||
The toplevel interface of this library is inspired by Java @sc{sasl}
|
||||
Application Program Interface. It defines an abstraction over a series
|
||||
of authentication mechanism drivers (@ref{Back end drivers}).
|
||||
|
||||
Back end drivers are designed to be close as possible to the
|
||||
authentication mechanism. You can access the additional configuration
|
||||
information anywhere from the implementation.
|
||||
|
||||
@node How to use
|
||||
@chapter How to use
|
||||
|
||||
(Not yet written).
|
||||
|
||||
To use Emacs SASL library, please evaluate following expression at the
|
||||
beginning of your application program.
|
||||
|
||||
@lisp
|
||||
(require 'sasl)
|
||||
@end lisp
|
||||
|
||||
If you want to check existence of sasl.el at runtime, instead you
|
||||
can list autoload settings for functions you want.
|
||||
|
||||
@node Data types
|
||||
@chapter Data types
|
||||
|
||||
There are three data types to be used for carrying a negotiated
|
||||
security layer---a mechanism, a client parameter and an authentication
|
||||
step.
|
||||
|
||||
@menu
|
||||
* Mechanisms::
|
||||
* Clients::
|
||||
* Steps::
|
||||
@end menu
|
||||
|
||||
@node Mechanisms
|
||||
@section Mechanisms
|
||||
|
||||
A mechanism (@code{sasl-mechanism} object) is a schema of the @sc{sasl}
|
||||
authentication mechanism driver.
|
||||
|
||||
@defvar sasl-mechanisms
|
||||
A list of mechanism names.
|
||||
@end defvar
|
||||
|
||||
@defun sasl-find-mechanism mechanisms
|
||||
|
||||
Retrieve an apropriate mechanism.
|
||||
This function compares @var{mechanisms} and @code{sasl-mechanisms} then
|
||||
returns apropriate @code{sasl-mechanism} object.
|
||||
|
||||
@example
|
||||
(let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
|
||||
(setq mechanism (sasl-find-mechanism server-supported-mechanisms)))
|
||||
@end example
|
||||
|
||||
@end defun
|
||||
|
||||
@defun sasl-mechanism-name mechanism
|
||||
Return name of mechanism, a string.
|
||||
@end defun
|
||||
|
||||
If you want to write an authentication mechanism driver (@ref{Back end
|
||||
drivers}), use @code{sasl-make-mechanism} and modify
|
||||
@code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly.
|
||||
|
||||
@defun sasl-make-mechanism name steps
|
||||
Allocate a @code{sasl-mechanism} object.
|
||||
This function takes two parameters---name of the mechanism, and a list
|
||||
of authentication functions.
|
||||
|
||||
@example
|
||||
(defconst sasl-anonymous-steps
|
||||
'(identity ;no initial response
|
||||
sasl-anonymous-response))
|
||||
|
||||
(put 'sasl-anonymous 'sasl-mechanism
|
||||
(sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
|
||||
@end example
|
||||
|
||||
@end defun
|
||||
|
||||
@node Clients
|
||||
@section Clients
|
||||
|
||||
A client (@code{sasl-client} object) initialized with four
|
||||
parameters---a mechanism, a user name, name of the service and name of
|
||||
the server.
|
||||
|
||||
@defun sasl-make-client mechanism name service server
|
||||
Prepare a @code{sasl-client} object.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-mechanism client
|
||||
Return the mechanism (@code{sasl-mechanism} object) of client.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-name client
|
||||
Return the authorization name of client, a string.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-service client
|
||||
Return the service name of client, a string.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-server client
|
||||
Return the server name of client, a string.
|
||||
@end defun
|
||||
|
||||
If you want to specify additional configuration properties, please use
|
||||
@code{sasl-client-set-property}.
|
||||
|
||||
@defun sasl-client-set-property client property value
|
||||
Add the given property/value to client.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-property client property
|
||||
Return the value of the property of client.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-set-properties client plist
|
||||
Destructively set the properties of client.
|
||||
The second argument is the new property list.
|
||||
@end defun
|
||||
|
||||
@defun sasl-client-properties client
|
||||
Return the whole property list of client configuration.
|
||||
@end defun
|
||||
|
||||
@node Steps
|
||||
@section Steps
|
||||
|
||||
A step (@code{sasl-step} object) is an abstraction of authentication
|
||||
``step'' which holds the response value and the next entry point for the
|
||||
authentication process (the latter is not accessible).
|
||||
|
||||
@defun sasl-step-data step
|
||||
Return the data which @var{step} holds, a string.
|
||||
@end defun
|
||||
|
||||
@defun sasl-step-set-data step data
|
||||
Store @var{data} string to @var{step}.
|
||||
@end defun
|
||||
|
||||
To get the initial response, you should call the function
|
||||
@code{sasl-next-step} with the second argument @code{nil}.
|
||||
|
||||
@example
|
||||
(setq name (sasl-mechanism-name mechanism))
|
||||
@end example
|
||||
|
||||
At this point we could send the command which starts a SASL
|
||||
authentication protocol exchange. For example,
|
||||
|
||||
@example
|
||||
(process-send-string
|
||||
process
|
||||
(if (sasl-step-data step) ;initial response
|
||||
(format "AUTH %s %s\r\n" name (base64-encode-string (sasl-step-data step) t))
|
||||
(format "AUTH %s\r\n" name)))
|
||||
@end example
|
||||
|
||||
To go on with the authentication process, all you have to do is call
|
||||
@code{sasl-next-step} consecutively.
|
||||
|
||||
@defun sasl-next-step client step
|
||||
Perform the authentication step.
|
||||
At the first time @var{step} should be set to @code{nil}.
|
||||
@end defun
|
||||
|
||||
@node Back end drivers
|
||||
@chapter Back end drivers
|
||||
|
||||
(Not yet written).
|
||||
|
||||
@node Index
|
||||
@chapter Index
|
||||
@printindex cp
|
||||
|
||||
@node Function Index
|
||||
@chapter Function Index
|
||||
@printindex fn
|
||||
|
||||
@node Variable Index
|
||||
@chapter Variable Index
|
||||
@printindex vr
|
||||
|
||||
@summarycontents
|
||||
@contents
|
||||
@bye
|
||||
|
||||
@c End:
|
||||
|
||||
@ignore
|
||||
arch-tag: dc9650be-a953-40bf-bc55-24fe5f19d875
|
||||
@end ignore
|
|
@ -236,9 +236,9 @@ if address "sender" "owner-w3-beta@@xemacs.org" @{
|
|||
@}
|
||||
@end example
|
||||
|
||||
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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
1
etc/.gitignore
vendored
|
@ -4,3 +4,4 @@ icons
|
|||
*.log
|
||||
*.dvi
|
||||
DOC DOC-*
|
||||
*.pyc
|
|
@ -1225,7 +1225,7 @@ John Wiegley: wrote align.el cal-bahai.el em-alias.el em-banner.el
|
|||
em-term.el em-unix.el em-xtra.el erc-identd.el esh-arg.el esh-cmd.el
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
569
etc/GNUS-NEWS
569
etc/GNUS-NEWS
|
@ -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'.
|
||||
|
||||
|
||||
|
||||
|
|
11
etc/MACHINES
11
etc/MACHINES
|
@ -1158,17 +1158,6 @@ Sun 3, Sun 4 (sparc), Sun 386 (m68k-sun-sunos, sparc-sun-sunos, i386-sun-sunos,
|
|||
src/s/sunos4-1.h to src/config.h. This problem is due to obsolete
|
||||
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'.
|
||||
|
|
74
etc/NEWS
74
etc/NEWS
|
@ -28,11 +28,16 @@ so we will look at it and add it to the manual.
|
|||
|
||||
** The default X toolkit is now Gtk+, rather than Lucid.
|
||||
|
||||
** The 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
|
||||
|
|
33
etc/NEWS.22
33
etc/NEWS.22
|
@ -34,6 +34,7 @@ below. Emacs tries to warn you about these through `bad-packages-alist'.
|
|||
** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
|
||||
|
||||
** 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
|
||||
|
||||
|
|
27
etc/README
27
etc/README
|
@ -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
51
etc/gnus/gnus-setup.ast
Normal file
|
@ -0,0 +1,51 @@
|
|||
@title Configuring Gnus for the first time
|
||||
|
||||
@node What do you want to do with Gnus?
|
||||
|
||||
@variable outbound (:radio ((item :tag "Send mail via sendmail" "sendmail") (item :tag "Send mail via SMTP" "smtp"))) "sendmail"
|
||||
|
||||
@variable backends (:set ((item :tag "Read news via NNTP" "nntp") (item :tag "Read mail, store it locally" "nnml") (item :tag "Read mail and store it on an IMAP server" "nnimap"))) (list "nnml")
|
||||
@result primary-mail-selections (list backends outbound)
|
||||
|
||||
@text
|
||||
Welcome to Gnus. You need to tell us what you want to do with Gnus
|
||||
before we go on to specific configurations.
|
||||
|
||||
Choose the tasks you want to set up:
|
||||
@variable{backends}
|
||||
|
||||
Choose the method Gnus will use to send mail:
|
||||
@variable{outbound}
|
||||
|
||||
@end text
|
||||
|
||||
@next (member "nnml" backends) "Setting up local mail storage (nnml)"
|
||||
@next (member "nntp" backends) "Setting up a NNTP server"
|
||||
|
||||
@node Setting up local mail storage (nnml)
|
||||
@variable mechanism (:radio ((item :tag "Get mail from your Unix mbox" "mbox") (item :tag "Use POP3 to retrieve mail" "pop3"))) "mbox"
|
||||
@result nnml-mechanism (list mechanism)
|
||||
@text
|
||||
You are setting up local mail storage, using the nnml backend in Gnus terms.
|
||||
|
||||
Your mail can be downloaded into Gnus in several ways, choose one:
|
||||
@variable{mechanism}
|
||||
|
||||
@end text
|
||||
|
||||
@node Setting up a NNTP server
|
||||
|
||||
@text
|
||||
TODO: this will be a real link.
|
||||
Run M-x assistant and use the news-server.ast file as input.
|
||||
@end text
|
||||
|
||||
|
||||
@c Local variables:
|
||||
@c mode: texinfo
|
||||
@c End:
|
||||
|
||||
@ignore
|
||||
arch-tag: 6b7b200b-9169-4b44-8b32-b73773fa71af
|
||||
@end ignore
|
||||
|
64
etc/gnus/news-server.ast
Normal file
64
etc/gnus/news-server.ast
Normal file
|
@ -0,0 +1,64 @@
|
|||
@title Configuring Gnus for reading news
|
||||
|
||||
|
||||
@node Setting up the news server name and port number
|
||||
@variable server :string (gnus-getenv-nntpserver)
|
||||
@variable port :number 119
|
||||
@validate (assistant-validate-connect-to-server server port)
|
||||
@result gnus-select-method (list 'nntp server (list 'nntp-server port))
|
||||
@text
|
||||
Usenet news is usually read from your Internet service prodider's news
|
||||
server. If you don't know the name of this server, contact your ISP.
|
||||
|
||||
As a guess, the name of the server might be news.yourisp.com.
|
||||
|
||||
Server name: @variable{server}
|
||||
Port number: @variable{port}
|
||||
@end text
|
||||
@next t "User name and password"
|
||||
|
||||
|
||||
@node User name and password
|
||||
@type interstitial
|
||||
@next
|
||||
(if (assistant-password-required-p)
|
||||
"Enter user name and password"
|
||||
"Want user name and password?")
|
||||
@end next
|
||||
|
||||
|
||||
@node Want user name and password?
|
||||
@variable passwordp (:radio ((item "Yes") (item "No"))) "No"
|
||||
@text
|
||||
Some news servers require that you enter a user name and a password.
|
||||
It doesn't look like your news server is one of them.
|
||||
|
||||
Do you want to enter user name and password anyway?
|
||||
|
||||
@variable{passwordp}
|
||||
|
||||
@end text
|
||||
|
||||
@next (equal passwordp "No") finish
|
||||
@next (not (equal passwordp "No")) "Enter user name and password"
|
||||
|
||||
|
||||
@node Enter user name and password
|
||||
@variable user-name :string (user-login-name)
|
||||
@variable password :password (or (assistant-authinfo-data server port 'password) "")
|
||||
@text
|
||||
|
||||
It looks like your news server requires you to enter a user name
|
||||
and a password:
|
||||
|
||||
User name: @variable{user-name}
|
||||
Password: @variable{user-name}
|
||||
|
||||
@end text
|
||||
|
||||
@c Local variables:
|
||||
@c mode: texinfo
|
||||
@c End:
|
||||
|
||||
@c arch tag is missing
|
||||
|
39
etc/images/gnus/mail_send.xpm
Normal file
39
etc/images/gnus/mail_send.xpm
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* XPM */
|
||||
static char *magick[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"24 24 9 1",
|
||||
" c Gray0",
|
||||
". c #675e6580613e",
|
||||
"X c #8c8c7c7c6969",
|
||||
"o c #9b458d377822",
|
||||
"O c #a941a6459f3e",
|
||||
"+ c #c8c8b2b29898",
|
||||
"@ c #dadac2c2a5a5",
|
||||
"# c #eb4dea2fe4ad",
|
||||
"$ c None",
|
||||
/* pixels */
|
||||
"$$$$$$$$$$$$$$$$$$$$$$$$",
|
||||
"$$$$$$$$$$$$$$$$$$$$$$$$",
|
||||
"$$$$$$$$$$$$$ $$$$$$$",
|
||||
"$$$$$$$$ .@#+ $$$$$$",
|
||||
"$$$ .+#####@O $$$$$$",
|
||||
"$$ .+##########.+O $$$$$",
|
||||
"$$ @..########O.+# $$$$$",
|
||||
"$$ O@O..@#####.+## $$$$$",
|
||||
"$$$ ###+O.O##...##O $$$$",
|
||||
"$$$ @####@+..O#O.+# $$$$",
|
||||
"$$$ O####.#######.O $$$$",
|
||||
"$$$$ ###+O########.O $$$",
|
||||
"$$$$ ###.########@O $$$",
|
||||
"$$$$ +#+O#####@O $$$$$",
|
||||
"$$$$$ #.###@O $$$$$$",
|
||||
"$$$$$ .O@O $$ .. $$$$$",
|
||||
"$$$$$ .. $$$$ .oo. $$$$",
|
||||
"$$$$$$ $$$$$ oo $$$",
|
||||
"$$$$$$$$$$$$$$$ Oo $$$$$",
|
||||
"$$$$$$$$$$$$$$ oOOX $$$$",
|
||||
"$$$$$$$$$$$$$$ ++++ $$$$",
|
||||
"$$$$$$$$$$$$$ O@@@@O $$$",
|
||||
"$$$$$$$$$$$$$ $$$",
|
||||
"$$$$$$$$$$$$$$$$$$$$$$$$"
|
||||
};
|
24
etc/images/smilies/grayscale/blink.xpm
Normal file
24
etc/images/smilies/grayscale/blink.xpm
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* XPM */
|
||||
static char * blink_xpm[] = {
|
||||
"14 14 7 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #6E6E6E",
|
||||
"# c #515151",
|
||||
"$ c #ABABAB",
|
||||
"% c #737373",
|
||||
" ",
|
||||
" ",
|
||||
" . ",
|
||||
" + ",
|
||||
" @#$$# + ",
|
||||
" ++ + ",
|
||||
" ",
|
||||
" + + ",
|
||||
" $+ +$ ",
|
||||
" %+ +% ",
|
||||
" %++++% ",
|
||||
" $$$$ ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/braindamaged.xpm
Normal file
23
etc/images/smilies/grayscale/braindamaged.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * braindamaged_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #ABABAB",
|
||||
"+ c #000000",
|
||||
"@ c #515151",
|
||||
"# c #171717",
|
||||
"$ c #737373",
|
||||
" ",
|
||||
" ",
|
||||
" .++..++. ",
|
||||
" +@.++.@+ ",
|
||||
" +.@#@@.+ ",
|
||||
" +@.#@.@+ ",
|
||||
" .++. ++. ",
|
||||
" + + ",
|
||||
" .+ +. ",
|
||||
" $+ +$ ",
|
||||
" $++++$ ",
|
||||
" .... ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/cry.xpm
Normal file
23
etc/images/smilies/grayscale/cry.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * cry_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #ABABAB",
|
||||
"# c #515151",
|
||||
"$ c #6E6E6E",
|
||||
" ",
|
||||
" ",
|
||||
" . ",
|
||||
" .. .+. ",
|
||||
" +++. +.+ ",
|
||||
" +@+ ",
|
||||
" @+# ",
|
||||
" @@ ",
|
||||
" $++++$ ",
|
||||
" .+@ @+. ",
|
||||
" @+@ @+@ ",
|
||||
" @ @ ",
|
||||
" ",
|
||||
" "};
|
21
etc/images/smilies/grayscale/dead.xpm
Normal file
21
etc/images/smilies/grayscale/dead.xpm
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* XPM */
|
||||
static char * dead_xpm[] = {
|
||||
"14 14 4 1",
|
||||
" c None",
|
||||
". c #737373",
|
||||
"+ c #ABABAB",
|
||||
"@ c #000000",
|
||||
" ",
|
||||
" ",
|
||||
" .+ +. + +. ",
|
||||
" +@+@++@+@+ ",
|
||||
" +@ @+ ",
|
||||
" +@+@ @+@+ ",
|
||||
" + +. + + ",
|
||||
" ",
|
||||
" +@ @+ ",
|
||||
" .@ @. ",
|
||||
" .@@@@. ",
|
||||
" ++++ ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/evil.xpm
Normal file
23
etc/images/smilies/grayscale/evil.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * evil_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #6E6E6E",
|
||||
"+ c #484848",
|
||||
"@ c #ABABAB",
|
||||
"# c #000000",
|
||||
"$ c #737373",
|
||||
" ",
|
||||
" ",
|
||||
" .+ +. ",
|
||||
" @# #@ ",
|
||||
" #+ @+# ",
|
||||
" #+ @+# ",
|
||||
" ",
|
||||
" # # ",
|
||||
" @# #@ ",
|
||||
" $# #$ ",
|
||||
" $####$ ",
|
||||
" @@@@ ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/forced.xpm
Normal file
23
etc/images/smilies/grayscale/forced.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * forced_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #6E6E6E",
|
||||
"# c #ABABAB",
|
||||
"$ c #171717",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" @ @ ",
|
||||
" +# #+ ",
|
||||
" @@# #@@ ",
|
||||
" #$++++++$# ",
|
||||
" ######## ",
|
||||
" ",
|
||||
" "};
|
22
etc/images/smilies/grayscale/frown.xpm
Normal file
22
etc/images/smilies/grayscale/frown.xpm
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* XPM */
|
||||
static char * frown_xpm[] = {
|
||||
"14 14 5 1",
|
||||
" c None",
|
||||
". c #6E6E6E",
|
||||
"+ c #484848",
|
||||
"@ c #ABABAB",
|
||||
"# c #000000",
|
||||
" ",
|
||||
" ",
|
||||
" .+ +. ",
|
||||
" @# #@ ",
|
||||
" #+ @+# ",
|
||||
" #+@@+# ",
|
||||
" ",
|
||||
" @@ ",
|
||||
" .####. ",
|
||||
" +#@ @#+ ",
|
||||
" @#@ @#@ ",
|
||||
" + + ",
|
||||
" ",
|
||||
" "};
|
25
etc/images/smilies/grayscale/grin.xpm
Normal file
25
etc/images/smilies/grayscale/grin.xpm
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * grin_xpm[] = {
|
||||
"14 14 8 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #515151",
|
||||
"# c #6E6E6E",
|
||||
"$ c #ABABAB",
|
||||
"% c #FFFFFF",
|
||||
"& c #737373",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" ++@@##@@++ ",
|
||||
" $+%%%%%%+$ ",
|
||||
" &+%%%%+& ",
|
||||
" &++++& ",
|
||||
" $$$$ ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/indifferent.xpm
Normal file
23
etc/images/smilies/grayscale/indifferent.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * indifferent_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #515151",
|
||||
"# c #ABABAB",
|
||||
"$ c #6E6E6E",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" @ #@ ",
|
||||
"#+$+$ $ + ",
|
||||
"$ +#+$#++$+$ ",
|
||||
" $ ++# ++ ",
|
||||
" + ",
|
||||
" ",
|
||||
" "};
|
22
etc/images/smilies/grayscale/reverse-smile.xpm
Normal file
22
etc/images/smilies/grayscale/reverse-smile.xpm
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* XPM */
|
||||
static char * reverse_smile_xpm[] = {
|
||||
"14 14 5 1",
|
||||
" c None",
|
||||
". c #ABABAB",
|
||||
"+ c #737373",
|
||||
"@ c #000000",
|
||||
"# c #484848",
|
||||
" ",
|
||||
" ",
|
||||
" .... ",
|
||||
" +@@@@+ ",
|
||||
" +@ @+ ",
|
||||
" .@ @. ",
|
||||
" @ @ ",
|
||||
" ",
|
||||
" @ @ ",
|
||||
" @ @ ",
|
||||
" @ @ ",
|
||||
" # # ",
|
||||
" ",
|
||||
" "};
|
22
etc/images/smilies/grayscale/sad.xpm
Normal file
22
etc/images/smilies/grayscale/sad.xpm
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* XPM */
|
||||
static char * sad_xpm[] = {
|
||||
"14 14 5 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #ABABAB",
|
||||
"# c #6E6E6E",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" @@@@ ",
|
||||
" #++++# ",
|
||||
" .+@ @+. ",
|
||||
" @+@ @+@ ",
|
||||
" . . ",
|
||||
" ",
|
||||
" "};
|
22
etc/images/smilies/grayscale/smile.xpm
Normal file
22
etc/images/smilies/grayscale/smile.xpm
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* XPM */
|
||||
static char * smile_xpm[] = {
|
||||
"14 14 5 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #ABABAB",
|
||||
"# c #737373",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" + + ",
|
||||
" @+ +@ ",
|
||||
" #+ +# ",
|
||||
" #++++# ",
|
||||
" @@@@ ",
|
||||
" ",
|
||||
" "};
|
23
etc/images/smilies/grayscale/wry.xpm
Normal file
23
etc/images/smilies/grayscale/wry.xpm
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* XPM */
|
||||
static char * wry_xpm[] = {
|
||||
"14 14 6 1",
|
||||
" c None",
|
||||
". c #484848",
|
||||
"+ c #000000",
|
||||
"@ c #515151",
|
||||
"# c #ABABAB",
|
||||
"$ c #6E6E6E",
|
||||
" ",
|
||||
" ",
|
||||
" . . ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" + + ",
|
||||
" ",
|
||||
" @ ",
|
||||
" ## $@ ",
|
||||
" #++++++# ",
|
||||
" @$ ## ",
|
||||
" @ ",
|
||||
" ",
|
||||
" "};
|
29
etc/images/smilies/medium/blink.xpm
Normal file
29
etc/images/smilies/medium/blink.xpm
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* XPM */
|
||||
static char * blink_xpm[] = {
|
||||
"16 16 10 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
"= c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&&&&&&*&&%. ",
|
||||
" +$&&&&&&&.&&$+ ",
|
||||
".@&@%##%&&.&&&@.",
|
||||
".#&&&..&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".@&&=.&&&&.=&&@.",
|
||||
" +$&&=....=&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/braindamaged.xpm
Normal file
28
etc/images/smilies/medium/braindamaged.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * braindamaged_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&#..##..#&%. ",
|
||||
" +$&.%#..#%.&$+ ",
|
||||
".@&&.#%+%%#.&&@.",
|
||||
".#&&.%#+%#%.&&#.",
|
||||
".$&&#..#&..#&&$.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".@&&*.&&&&.*&&@.",
|
||||
" +$&&*....*&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/cry.xpm
Normal file
28
etc/images/smilies/medium/cry.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * cry_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&&&&&&*&&%. ",
|
||||
" +$&&**&&*.*&$+ ",
|
||||
".@&&...*&.*.&&@.",
|
||||
".#&&&&&&&.#.&&#.",
|
||||
".$&&&&&&&#.%&&$.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".#&&&@....@&&&#.",
|
||||
".@&&*.#&&#.*&&@.",
|
||||
" +$#.#&&&&#.#$+ ",
|
||||
" .%&*&&&&&&*&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/dead.xpm
Normal file
28
etc/images/smilies/medium/dead.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * dead_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%*#&#*$#&#*%. ",
|
||||
" +$#.#.##.#.#$+ ",
|
||||
".@&&#.$&&$.#&&@.",
|
||||
".#&#.#.$$.#.#&#.",
|
||||
".$&*#&#*$#&#*&$.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".@&&*.&&&&.*&&@.",
|
||||
" +$&&*....*&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
29
etc/images/smilies/medium/evil.xpm
Normal file
29
etc/images/smilies/medium/evil.xpm
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* XPM */
|
||||
static char * evil_xpm[] = {
|
||||
"16 16 10 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
"= c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&@*&&&&*@&%. ",
|
||||
" +$&#.&&&&.#&$+ ",
|
||||
".@&&&.*&#*.&&&@.",
|
||||
".#&&&.*##*.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".@&&=.&&&&.=&&@.",
|
||||
" +$&&=....=&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/forced.xpm
Normal file
28
etc/images/smilies/medium/forced.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * forced_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&@&&&&&&&&@&$.",
|
||||
".#&.#&&&&&&#.&#.",
|
||||
".@&@@#&&&&#@@&@.",
|
||||
" +$#+......+#$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/frown.xpm
Normal file
28
etc/images/smilies/medium/frown.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * frown_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&@*&&&&*@&%. ",
|
||||
" +$&#.&&&&.#&$+ ",
|
||||
".@&&&.*&#*.&&&@.",
|
||||
".#&&&.*##*.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".#&&&@....@&&&#.",
|
||||
".@&&*.#&&#.*&&@.",
|
||||
" +$#.#&&&&#.#$+ ",
|
||||
" .%&*&&&&&&*&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
30
etc/images/smilies/medium/grin.xpm
Normal file
30
etc/images/smilies/medium/grin.xpm
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* XPM */
|
||||
static char * grin_xpm[] = {
|
||||
"16 16 11 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
"= c #FFFFFF",
|
||||
"- c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&..%%@@%%..&$.",
|
||||
".#&#.======.#&#.",
|
||||
".@&&-.====.-&&@.",
|
||||
" +$&&-....-&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/indifferent.xpm
Normal file
28
etc/images/smilies/medium/indifferent.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * indifferent_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$%&&&&&&&&&#%$.",
|
||||
".#.@.@&&&@&&.&#.",
|
||||
".@&.#.@#..@.@&@.",
|
||||
" +$@&&..#&..&$+ ",
|
||||
" .%&&&&.&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
29
etc/images/smilies/medium/reverse-smile.xpm
Normal file
29
etc/images/smilies/medium/reverse-smile.xpm
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* XPM */
|
||||
static char * reverse_smile_xpm[] = {
|
||||
"16 16 10 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #8F7B00",
|
||||
"= c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" +$&&*....*&&$+ ",
|
||||
".@&&*.&&&&.*&&@.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
" .%&&=&&&&=&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/sad.xpm
Normal file
28
etc/images/smilies/medium/sad.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * sad_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".#&&&@....@&&&#.",
|
||||
".@&&*.#&&#.*&&@.",
|
||||
" +$#.#&&&&#.#$+ ",
|
||||
" .%&*&&&&&&*&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
29
etc/images/smilies/medium/smile.xpm
Normal file
29
etc/images/smilies/medium/smile.xpm
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* XPM */
|
||||
static char * smile_xpm[] = {
|
||||
"16 16 10 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
"= c #8F7B00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&.&&&&&&&&.&$.",
|
||||
".#&#.&&&&&&.#&#.",
|
||||
".@&&=.&&&&.=&&@.",
|
||||
" +$&&=....=&&$+ ",
|
||||
" .%&&&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
28
etc/images/smilies/medium/wry.xpm
Normal file
28
etc/images/smilies/medium/wry.xpm
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * wry_xpm[] = {
|
||||
"16 16 9 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #1D1900",
|
||||
"@ c #887500",
|
||||
"# c #D3B600",
|
||||
"$ c #FAD800",
|
||||
"% c #645600",
|
||||
"& c #FFDD00",
|
||||
"* c #594D00",
|
||||
" ...... ",
|
||||
" .+@#$$#@+. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .%&&*&&&&*&&%. ",
|
||||
" +$&&.&&&&.&&$+ ",
|
||||
".@&&&.&&&&.&&&@.",
|
||||
".#&&&.&&&&.&&&#.",
|
||||
".$&&&&&&&&&&&&$.",
|
||||
".$&&&&&&&&&%&&$.",
|
||||
".#&&&&&&&&@%&&#.",
|
||||
".@&&#......#&&@.",
|
||||
" +$&%@&&&&&&&$+ ",
|
||||
" .%&%&&&&&&&&%. ",
|
||||
" .%$&&&&&&$%. ",
|
||||
" .+@#$$#@+. ",
|
||||
" ...... "};
|
|
@ -121,7 +121,7 @@
|
|||
\newcommand{\Copyright}{%
|
||||
\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}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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} \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, ...)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
1211
lisp/ChangeLog
1211
lisp/ChangeLog
File diff suppressed because it is too large
Load diff
|
@ -35,6 +35,12 @@ EMACS = ../src/emacs
|
|||
|
||||
EMACSOPT = -batch --no-site-file --multibyte
|
||||
|
||||
# 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
|
||||
|
|
544
lisp/abbrev.el
544
lisp/abbrev.el
|
@ -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
|
||||
|
|
1204
lisp/allout.el
1204
lisp/allout.el
File diff suppressed because it is too large
Load diff
|
@ -1005,7 +1005,7 @@ If non-nil TEXT is a string that will be printed as a heading."
|
|||
(defun apropos-describe-plist (symbol)
|
||||
"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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ""))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
|
||||
(eval-when-compile (require 'cl))
|
||||
(require 'pcvs-util)
|
||||
(eval-when-compile (require 'pcvs))
|
||||
|
||||
;;;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'.
|
||||
|
||||
|
|
115
lisp/dirtrack.el
115
lisp/dirtrack.el
|
@ -57,18 +57,12 @@
|
|||
;; add 't' as a third element. Note that some of the functions in
|
||||
;; '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)))
|
||||
|
|
|
@ -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 ()
|
||||
|
|
555
lisp/doc-view.el
555
lisp/doc-view.el
|
@ -42,8 +42,7 @@
|
|||
;;
|
||||
;; and the document will be converted and displayed, if your emacs supports png
|
||||
;; 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
Loading…
Add table
Reference in a new issue