# HG changeset patch # User Karoly Lorentey # Date 1128888017 0 # Node ID 2a679c81f552da67e42a8834e48a5e6a646d7b33 # Parent 7a3090aca393a335a93c2d16be5127ea52b5aa6b# Parent 97ab21c68453da9e5bfeb5070fd6537b8eaefd27 Merged from miles@gnu.org--gnu-2005 (patch 118-132, 551-577) Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-551 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-552 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-553 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-554 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-555 Remove CVS keywords from newsticker files * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-556 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-557 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-558 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-559 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-560 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-561 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-562 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-563 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-564 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-565 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-566 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-567 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-568 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-569 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-570 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-571 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-572 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-573 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-574 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-575 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-576 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-577 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-118 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-119 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-120 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-121 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-122 Update from CVS: lisp/mm-url.el (mm-url-decode-entities): Fix regexp. * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-123 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-124 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-125 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-126 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-127 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-128 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-129 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-130 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-131 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-132 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-423 diff -r 7a3090aca393 -r 2a679c81f552 ChangeLog --- a/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,9 @@ +2005-10-04 YAMAMOTO Mitsuharu + + * configure.in: Prefer Carbon if --enable-carbon-app or + --with-carbon is explicitly specified even when X11 is detected. + * configure: Regenerate. + 2005-09-15 Ulf Jasper * Makefile.in (install-arch-indep, uninstall): diff -r 7a3090aca393 -r 2a679c81f552 admin/ChangeLog --- a/admin/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/admin/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,7 @@ +2005-10-01 Jason Rumney + + * admin.el (set-version): Set version numbers in nt/emacs.rc. + 2005-08-31 Romain Francoise * FOR-RELEASE: (New features): Remove vhdl-mode.el update diff -r 7a3090aca393 -r 2a679c81f552 admin/FOR-RELEASE --- a/admin/FOR-RELEASE Mon Sep 19 21:25:51 2005 +0000 +++ b/admin/FOR-RELEASE Sun Oct 09 20:00:17 2005 +0000 @@ -27,7 +27,24 @@ * NEW FEATURES -** Update Speedbar. +** Rework how the fringe "angle" bitmap at at bottom of buffer is +shown to include an indication of whether the last line has a NL or not. +[Assigned to KFS] + +** Rework how fringe bitmaps are defined and used. +Currently, bitmap usage and bitmap appearence are "mixed-up" in a +one-level representation. It would be cleaner to split the +representation into a two-level model where first level maps +bitmap usage to a bitmap name, and second level maps bitmap name to +a bitmap appearence. +[Assigned to KFS] + +** Put a max-limit on the size of images, e.g. based on the display size. +This is to avoid allocating insane amounts of memory due to bogus +image size specifications. +Note: rather than clipping images that are too big (this may be +non-trivial to do correctly in all cases -- and thus non-trivial to +test), it may be better just to avoid displaying such images for emacs 22. * FATAL ERRORS @@ -48,59 +65,17 @@ * BUGS -** Fix recognition of shell's `dirs' command. - -Is his change right? - -Date: Wed, 29 Jun 2005 18:21:28 -0500 (CDT) -From: kevin.gal@verizon.net +* Pierre Albarede's Aug 30 bug report about C-v and long lines. -When I use tcsh (which echoes command input) in a shell buffer, -entering "M-x dirs" fails because it mistakens the echoed "dirs" -string as the directory string to use as input when changing the -buffers default directory. The attached gziped patch file contains a -fix. The patch also binds the "dirs" command to "\e\C-m" in -shell-mode-map (previously unbound) to make it easy to invoke. -Finally, a test has been added to see if "shell-dirstack-query" is -non-nil. If so, it is not overwritten. - -To enable the fix, the user must set comint-process-echoes to t. +** Make a new interface for specifying window configurations +so that we can fix bugs in balance-windows. ** TCP server processes do not work on Windows. TCP/IP server processes created with `make-network-process' consume excesive CPU on some Windows environments. Usages of 50% and 100% CPU time have been observed on different Window XP configurations. - -** Bug in ebrowse - -Date: Fri, 27 May 2005 17:35:48 +0200 -From: Markus Gritsch - -the C++ header file which led to the problematic BROWSE file reads - -namespace test { - class Base - { - }; - - class B : public Base - { - }; -} - -class A : public test::Base -{ -}; - -The *Tree* is then displayed as - - *Globals* - test - test::Base - test::B - -The class A seems to be missing. +Seems to be a problem in sys_select in w32proc.c. * DOCUMENTATION @@ -221,7 +196,7 @@ lispref/display.texi Chong Yidong lispref/edebug.texi Chong Yidong "Luc Teirlinck" lispref/elisp.texi "Luc Teirlinck" Lute Kamstra -lispref/errors.texi "Luc Teirlinck" +lispref/errors.texi "Luc Teirlinck" Chong Yidong lispref/eval.texi "Luc Teirlinck" Chong Yidong lispref/files.texi "Luc Teirlinck" Chong Yidong lispref/frames.texi "Luc Teirlinck" Chong Yidong @@ -236,7 +211,7 @@ lispref/loading.texi "Luc Teirlinck" Chong Yidong lispref/locals.texi Chong Yidong lispref/macros.texi "Luc Teirlinck" Chong Yidong -lispref/maps.texi +lispref/maps.texi Chong Yidong lispref/markers.texi "Luc Teirlinck" Chong Yidong lispref/minibuf.texi "Luc Teirlinck" Chong Yidong lispref/modes.texi Chong Yidong diff -r 7a3090aca393 -r 2a679c81f552 admin/admin.el --- a/admin/admin.el Mon Sep 19 21:25:51 2005 +0000 +++ b/admin/admin.el Sun Oct 09 20:00:17 2005 +0000 @@ -87,7 +87,36 @@ (submatch (1+ (in "0-9.")))))) (set-version-in-file root "lispref/elisp.texi" version (rx (and "EMACSVER" (1+ space) - (submatch (1+ (in "0-9."))))))) + (submatch (1+ (in "0-9.")))))) + ;; nt/emacs.rc also contains the version number, but in an awkward + ;; format. It must contain four components, separated by commas, and + ;; in two places those commas are followed by space, in two other + ;; places they are not. + (let* ((version-components (append (split-string version "\\.") + '("0" "0"))) + (comma-version + (concat (car version-components) "," + (cadr version-components) "," + (cadr (cdr version-components)) "," + (cadr (cdr (cdr version-components))))) + (comma-space-version + (concat (car version-components) ", " + (cadr version-components) ", " + (cadr (cdr version-components)) ", " + (cadr (cdr (cdr version-components)))))) + (set-version-in-file root "nt/emacs.rc" comma-version + (rx (and "FILEVERSION" (1+ space) + (submatch (1+ (in "0-9,")))))) + (set-version-in-file root "nt/emacs.rc" comma-version + (rx (and "PRODUCTVERSION" (1+ space) + (submatch (1+ (in "0-9,")))))) + (set-version-in-file root "nt/emacs.rc" comma-space-version + (rx (and "\"FileVersion\"" (0+ space) ?, (0+ space) + ?\" (submatch (1+ (in "0-9, "))) "\\0\""))) + (set-version-in-file root "nt/emacs.rc" comma-space-version + (rx (and "\"ProductVersion\"" (0+ space) ?, + (0+ space) ?\" (submatch (1+ (in "0-9, "))) + "\\0\""))))) ;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5 ;; admin.el ends here. diff -r 7a3090aca393 -r 2a679c81f552 configure --- a/configure Mon Sep 19 21:25:51 2005 +0000 +++ b/configure Sun Oct 09 20:00:17 2005 +0000 @@ -8197,52 +8197,9 @@ fi fi -case "${window_system}" in - x11 ) - HAVE_X_WINDOWS=yes - HAVE_X11=yes - case "${with_x_toolkit}" in - athena | lucid ) USE_X_TOOLKIT=LUCID ;; - motif ) USE_X_TOOLKIT=MOTIF ;; - gtk ) with_gtk=yes - USE_X_TOOLKIT=none ;; - no ) USE_X_TOOLKIT=none ;; - * ) USE_X_TOOLKIT=maybe ;; - esac - ;; - none ) - HAVE_X_WINDOWS=no - HAVE_X11=no - USE_X_TOOLKIT=none - ;; -esac - -### If we're using X11, we should use the X menu package. -HAVE_MENUS=no -case ${HAVE_X11} in - yes ) HAVE_MENUS=yes ;; -esac - -if test "${opsys}" = "hpux9"; then - case "${x_libraries}" in - *X11R4* ) - opsysfile="s/hpux9-x11r4.h" - ;; - esac -fi - -if test "${opsys}" = "hpux9shr"; then - case "${x_libraries}" in - *X11R4* ) - opsysfile="s/hpux9shxr4.h" - ;; - esac -fi - HAVE_CARBON=no -if test "${HAVE_X11}" != "yes"; then - if test "${with_carbon}" != "no"; then - if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then +if test "${with_carbon}" != no; then + if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then echo "$as_me:$LINENO: checking for Carbon/Carbon.h" >&5 echo $ECHO_N "checking for Carbon/Carbon.h... $ECHO_C" >&6 if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then @@ -8384,7 +8341,57 @@ fi - fi +fi +if test "${window_system}" = x11 && test "${HAVE_CARBON}" = yes; then + if test "${with_carbon+set}" != set \ + && test "${carbon_appdir_x+set}" != set; then + HAVE_CARBON=no + fi +fi +if test "${HAVE_CARBON}" = yes; then + window_system=mac +fi + +case "${window_system}" in + x11 ) + HAVE_X_WINDOWS=yes + HAVE_X11=yes + case "${with_x_toolkit}" in + athena | lucid ) USE_X_TOOLKIT=LUCID ;; + motif ) USE_X_TOOLKIT=MOTIF ;; + gtk ) with_gtk=yes + USE_X_TOOLKIT=none ;; + no ) USE_X_TOOLKIT=none ;; + * ) USE_X_TOOLKIT=maybe ;; + esac + ;; + mac | none ) + HAVE_X_WINDOWS=no + HAVE_X11=no + USE_X_TOOLKIT=none + ;; +esac + +### If we're using X11, we should use the X menu package. +HAVE_MENUS=no +case ${HAVE_X11} in + yes ) HAVE_MENUS=yes ;; +esac + +if test "${opsys}" = "hpux9"; then + case "${x_libraries}" in + *X11R4* ) + opsysfile="s/hpux9-x11r4.h" + ;; + esac +fi + +if test "${opsys}" = "hpux9shr"; then + case "${x_libraries}" in + *X11R4* ) + opsysfile="s/hpux9shxr4.h" + ;; + esac fi ### Compute the unexec source name from the object name. @@ -12716,7 +12723,6 @@ #define HAVE_CARBON 1 _ACEOF - window_system=mac ## Specify the install directory carbon_appdir= if test "${carbon_appdir_x}" != ""; then diff -r 7a3090aca393 -r 2a679c81f552 configure.in --- a/configure.in Mon Sep 19 21:25:51 2005 +0000 +++ b/configure.in Sun Oct 09 20:00:17 2005 +0000 @@ -1668,6 +1668,20 @@ fi fi +HAVE_CARBON=no +if test "${with_carbon}" != no; then + AC_CHECK_HEADER(Carbon/Carbon.h, HAVE_CARBON=yes) +fi +if test "${window_system}" = x11 && test "${HAVE_CARBON}" = yes; then + if test "${with_carbon+set}" != set \ + && test "${carbon_appdir_x+set}" != set; then + HAVE_CARBON=no + fi +fi +if test "${HAVE_CARBON}" = yes; then + window_system=mac +fi + case "${window_system}" in x11 ) HAVE_X_WINDOWS=yes @@ -1686,7 +1700,7 @@ * ) USE_X_TOOLKIT=maybe ;; esac ;; - none ) + mac | none ) HAVE_X_WINDOWS=no HAVE_X11=no USE_X_TOOLKIT=none @@ -1715,13 +1729,6 @@ esac fi -HAVE_CARBON=no -if test "${HAVE_X11}" != "yes"; then - if test "${with_carbon}" != "no"; then - AC_CHECK_HEADER(Carbon/Carbon.h, HAVE_CARBON=yes) - fi -fi - ### Compute the unexec source name from the object name. UNEXEC_SRC="`echo ${unexec} | sed 's/\.o/.c/'`" @@ -2345,7 +2352,6 @@ ### Use Mac OS X Carbon API to implement GUI. if test "${HAVE_CARBON}" = "yes"; then AC_DEFINE(HAVE_CARBON, 1, [Define to 1 if you are using the Carbon API on Mac OS X.]) - window_system=mac ## Specify the install directory carbon_appdir= if test "${carbon_appdir_x}" != ""; then diff -r 7a3090aca393 -r 2a679c81f552 etc/ChangeLog --- a/etc/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,7 +1,66 @@ +2005-10-02 Stefan Monnier + + * TODO: Clarify the local variables entry. + +2005-09-30 Bill Wohler + + Moved MH-E image files from toolbar and mail directories into + etc/images. + + * images/mail: New directory. + + * images/mail/reply.*: Moved here from lisp/mail/reply2*. + + * images/mail/alias.*, images/mail/refile.*, images/mail/repack.*: + * images/mail/reply*: Moved here from lisp/toolbar. + + * images/execute.*, images/highlight.*, images/mh-logo.xpm: + * images/page-down.*, images/show.*, images/widen.*: Moved here + from lisp/toolbar. + + * images/refresh.*: Moved here from lisp/toolbar/rescan.*. + Use GNOME 2.10's refresh icon. + + * images/README: New file that indicates which icons came from + GNOME (see lisp/toolbar/README). + +2005-09-30 Romain Francoise + + * NEWS: Mention changes to `read-buffer'. + +2005-09-30 Chong Yidong + + * images/ezimage: New directory. + + * images/ezimage/*.xpm: Add images used by speedbar.el. + +2005-09-30 David Ponce + + * NEWS: Update recentf changes. + +2005-09-28 Simon Josefsson + + * GNUS-NEWS: Fix IDNA notes. + +2005-09-27 Jay Belanger + + * calccard.tex: Update `versionnumber', remove `versiondate'. + (Error Recovery): Refer to "initial state" rather than "default state". + (Algebra): Mention LaTeX language mode. + (Programming): Delete reference to "Z =". + +2005-09-24 Steven Huwig (tiny change) + + * emacs.py (ehelp): Add g and l to arg list, and use them in the + call to `help'. + +2005-09-17 Romain Francoise + + * gfdl.1: Update to version 1.2. Delete UC macro. + 2005-09-15 Kenichi Handa - * PROBLEMS: Fix the paragraph describing the limitation of - UTF-8/16/7. + * PROBLEMS: Fix the paragraph describing the limitation of UTF-8/16/7. 2005-09-14 Romain Francoise @@ -103,12 +162,11 @@ 2005-07-03 Jan Dj,Ad(Brv * PROBLEMS (Fedora Core 4 GNU/Linux: Segfault during dumping): - Added it again. + Add it again. 2005-06-29 Carsten Dominik - * NEWS: Added an entry for Org-mode, and a change entry for - reftex-mode. + * NEWS: Add an entry for Org-mode, and a change entry for reftex-mode. 2005-06-28 Richard M. Stallman diff -r 7a3090aca393 -r 2a679c81f552 etc/GNUS-NEWS --- a/etc/GNUS-NEWS Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/GNUS-NEWS Sun Oct 09 20:00:17 2005 +0000 @@ -142,10 +142,10 @@ ** 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. +encode them 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. ** Better handling of Microsoft citation styles diff -r 7a3090aca393 -r 2a679c81f552 etc/NEWS --- a/etc/NEWS Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/NEWS Sun Oct 09 20:00:17 2005 +0000 @@ -2556,14 +2556,19 @@ enabled. The new option `recentf-auto-cleanup' controls when to do automatic cleanup. +The ten most recent files can be quickly opened by using the shortcut +keys 1 to 9, and 0, when the recent list is displayed in a buffer via +the `recentf-open-files', or `recentf-open-more-files' commands. + The `recentf-keep' option replaces `recentf-keep-non-readable-files-p' and provides a more general mechanism to customize which file names to keep in the recent list. -With the more advanced option: `recentf-filename-handler', you can -specify a function that transforms filenames handled by recentf. For -example, if set to `file-truename', the same file will not be in the -recent list with different symbolic links. +With the more advanced option `recentf-filename-handlers', you can +specify functions that successively transform recent file names. For +example, if set to `file-truename' plus `abbreviate-file-name', the +same file will not be in the recent list with different symbolic +links, and the file name will be abbreviated. To follow naming convention, `recentf-menu-append-commands-flag' replaces the misnamed option `recentf-menu-append-commands-p'. The @@ -3694,6 +3699,12 @@ for compatibility, an internal variable which exists only for this purpose. ++++ +*** The function `read-buffer' follows the convention for reading from +the minibuffer with a default value: if DEF is non-nil, the minibuffer +prompt provided in PROMPT is edited to show the default value provided +in DEF before the terminal colon and space. + ** Local variables lists: +++ @@ -4342,6 +4353,9 @@ and scroll-bar settings. +++ +*** The new function `window-split-tree' returns a frame's window split tree. + ++++ ** Customizable fringe bitmaps *** New function `define-fringe-bitmap' can now be used to create new diff -r 7a3090aca393 -r 2a679c81f552 etc/TODO --- a/etc/TODO Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/TODO Sun Oct 09 20:00:17 2005 +0000 @@ -47,7 +47,7 @@ ** Implement something better than the current Refill mode. This probably needs some primitive support. -** Add a command to make a local variables list in the current buffer +** Add a command to make a "Local Variables" section in the current buffer and/or add a variable to the list. ** Implement primitive and higher-level functions to allow filling diff -r 7a3090aca393 -r 2a679c81f552 etc/calccard.tex --- a/etc/calccard.tex Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/calccard.tex Sun Oct 09 20:00:17 2005 +0000 @@ -59,8 +59,7 @@ % UUCP: mit-erl!gildea % Internet: gildea@stop.mail-abuse.org -\def\versionnumber{2.03} -\def\versiondate{November 2001} +\def\versionnumber{2.1} \def\year{2005} \def\version{v\versionnumber} @@ -72,7 +71,7 @@ \vskip 1ex plus 2 fill\begingroup\small \centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.} \centerline{designed by Dave Gillespie and Stephen Gildea, \version} -\centerline{for GNU Emacs Calc version \versionnumber\ (\versiondate)} +\centerline{for GNU Emacs Calc version \versionnumber} Permission is granted to make and distribute copies of this card provided the copyright notice and this permission notice @@ -274,7 +273,7 @@ \title{GNU Calc Reference Card} -\centerline{(for version \versionnumber\ of \versiondate)} +\centerline{(for version \versionnumber)} \section{Starting and Stopping} @@ -307,7 +306,7 @@ \key{redo last operation}{D} \key{recall last arguments}{M-RET} \key{edit top of stack}{`} -\wkey{reset Calc to default state}{\mhash 0 {\rm (zero)}} +\wkey{reset Calc to initial state}{\mhash 0 {\rm (zero)}} \section{Transferring Data} @@ -558,7 +557,7 @@ \key{``Big'' display mode}{d B} \key{C, Pascal, FORTRAN modes}{d C\, d P\, d F} -\key{\TeX, eqn modes}{d T\, d E} +\key{\TeX, La\TeX, eqn modes}{d T\, d L\, d E} \key{Unformatted mode}{d U} \key{Normal language mode}{d N} @@ -652,7 +651,6 @@ \key{repeat {\it n} times, break from loop}{Z <\, Z >\, Z /} \key{``for'' loop: start, end; body, step}{Z (\, Z )} \key{save, restore mode settings}{Z `\, Z '} -\key{display message during macro}{Z =} \key{query user during macro}{Z \#} \key{put finished macro on a key}{Z K} diff -r 7a3090aca393 -r 2a679c81f552 etc/emacs.py --- a/etc/emacs.py Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/emacs.py Sun Oct 09 20:00:17 2005 +0000 @@ -82,11 +82,11 @@ except: print '_emacs_out ()' -def ehelp (name): - """Get help on string NAME. +def ehelp (name, g, l): + """Get help on string NAME using globals G and locals L. First try to eval name for, e.g. user definitions where we need the object. Otherwise try the string form.""" - try: help (eval (name)) + try: help (eval (name, g, l)) except: help (name) def eimport (mod, dir): diff -r 7a3090aca393 -r 2a679c81f552 etc/etags.1 --- a/etc/etags.1 Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/etags.1 Sun Oct 09 20:00:17 2005 +0000 @@ -93,28 +93,31 @@ .TP .B \-d, \-\-defines Create tag entries for C preprocessor constant definitions -and enum constants, too. This is the -default behavior for \fBetags\fP. +and enum constants, too. Since this is the default behavior of +\fBetags\fP, only \fBctags\fP accepts this option. .TP .B \-D, \-\-no\-defines Do not create tag entries for C preprocessor constant definitions and enum constants. This may make the tags file much smaller if many header files are tagged. -This is the default behavior for \fBctags\fP. +Since this is the default behavior of \fBctags\fP, only \fBetags\fP +accepts this option. .TP -.B \-g, \-\-globals +.B \-\-globals Create tag entries for global variables in C, C++, Objective C, Java, and Perl. -This is the default behavior for \fBetags\fP. +Since this is the default behavior of \fBetags\fP, only \fBctags\fP +accepts this option. .TP -.B \-G, \-\-no\-globals +.B \-\-no\-globals Do not tag global variables. Typically this reduces the file size by -one fourth. This is the default behavior for \fBctags\fP. +one fourth. Since this is the default behavior of \fBctags\fP, only +\fBetags\fP accepts this option. .TP \fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP Include a note in the tag file indicating that, when searching for a tag, one should also consult the tags file \fIfile\fP after checking the -current file. This options is only accepted by \fBetags\fP. +current file. Only \fBetags\fP accepts this option. .TP .B \-I, \-\-ignore\-indentation Don't rely on indentation as much as we normally do. Currently, this diff -r 7a3090aca393 -r 2a679c81f552 etc/gfdl.1 --- a/etc/gfdl.1 Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/gfdl.1 Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ -.TH GFDL 1 "2001 April 23" -.UC 4 +.TH GFDL 1 "2005 September 17" .SH NAME GFDL \- The GNU Free Documentation License .ce -Version 1.1, March 2000 +Version 1.2, November 2002 .hy 0 .na @@ -23,12 +22,12 @@ .SH 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document "free" in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It @@ -45,11 +44,15 @@ .SH 1. APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The "Document", below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as "you." +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with @@ -59,7 +62,7 @@ the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a +within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, @@ -68,33 +71,40 @@ The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not "Transparent" is called "Opaque." +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple -HTML designed for human modification. Opaque formats include -PostScript, PDF, proprietary formats that can be read and edited only -by proprietary word processors, SGML or XML for which the DTD and/or +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the -machine-generated HTML produced by some word processors for output -purposes only. +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -103,6 +113,21 @@ the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + .SH 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either @@ -120,9 +145,10 @@ .SH 3. COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -140,16 +166,15 @@ If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give @@ -165,17 +190,18 @@ of it. In addition, you must do these things in the Modified Version: .TP A. -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. +Use in the Title Page (and on the covers, if any) a title distinct from +that of the Document, and from those of previous versions (which should, +if there were any, be listed in the History section of the Document). +You may use the same title as a previous version if the original +publisher of that version gives permission. .TP B. List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has less than five). +responsible for authorship of the modifications in the Modified Version, +together with at least five of the principal authors of the Document +(all of its principal authors, if it has fewer than five), unless they +release you from this requirement. .TP C. State on the Title page the name of the publisher of the @@ -190,8 +216,8 @@ .TP F. Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. +giving the public permission to use the Modified Version under the terms +of this License, in the form shown in the Addendum below. .TP G. Preserve in that license notice the full lists of Invariant Sections @@ -201,41 +227,44 @@ Include an unaltered copy of this License. .TP I. -Preserve the section entitled "History", and its title, and add to -it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section entitled "History" in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. +Preserve the section Entitled "History", Preserve its Title, and add to +it an item stating at least the title, year, new authors, and publisher +of the Modified Version as given on the Title Page. If there is no +section Entitled "History" in the Document, create one stating the +title, year, authors, and publisher of the Document as given on its +Title Page, then add an item describing the Modified Version as stated +in the previous sentence. .TP J. -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the "History" section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. +Preserve the network location, if any, given in the Document for public +access to a Transparent copy of the Document, and likewise the network +locations given in the Document for previous versions it was based on. +These may be placed in the "History" section. You may omit a network +location for a work that was published at least four years before the +Document itself, or if the original publisher of the version it refers +to gives permission. .TP K. -In any section entitled "Acknowledgements" or "Dedications", -preserve the section's title, and preserve in the section all the -substance and tone of each of the contributor acknowledgements -and/or dedications given therein. +For any section Entitled "Acknowledgements" or "Dedications", Preserve +the Title of the section, and preserve in the section all the substance +and tone of each of the contributor acknowledgements and/or dedications +given therein. .TP L. -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. +Preserve all the Invariant Sections of the Document, unaltered in their +text and in their titles. Section numbers or the equivalent are not +considered part of the section titles. .TP M. -Delete any section entitled "Endorsements." Such a section -may not be included in the Modified Version. +Delete any section Entitled "Endorsements". Such a section may not be +included in the Modified Version. .TP N. -Do not retitle any existing section as "Endorsements" -or to conflict in title with any Invariant Section. +Do not retitle any existing section to be Entitled "Endorsements" or to +conflict in title with any Invariant Section. +.TP +O. +Preserve any Warranty Disclaimers. .PP If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material @@ -244,7 +273,7 @@ list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. -You may add a section entitled "Endorsements", provided it contains +You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a @@ -271,7 +300,7 @@ versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its -license notice. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -282,11 +311,11 @@ Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled "History" -in the various original documents, forming one section entitled -"History"; likewise combine any sections entitled "Acknowledgements", -and any sections entitled "Dedications." You must delete all sections -entitled "Endorsements." +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". .SH 6. COLLECTIONS OF DOCUMENTS @@ -305,18 +334,20 @@ A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an "aggregate", and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. .SH 8. TRANSLATION @@ -326,10 +357,17 @@ permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. .SH 9. TERMINATION @@ -358,7 +396,6 @@ number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. - .SH ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of @@ -372,20 +409,28 @@ .if n (c) [\fIyear\fP] [\fIyour name\fP]. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; -with the Invariant Sections being [\fIlist their titles\fP], with the -Front-Cover Texts being [\fIlist\fP], and with the Back-Cover Texts -being [\fIlist\fP]. +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." .ad .hy 1 -If you have no Invariant Sections, write "with no Invariant Sections" -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write "no Front-Cover Texts" instead of -"Front-Cover Texts being [\fIlist\fP]"; likewise for Back-Cover Texts. +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + +.hy 0 +.na + with the Invariant Sections being [\fILIST THEIR TITLES\fP], with the + Front-Cover Texts being [\fILIST\fP], and with the Back-Cover Texts being + [\fILIST\fP]. +.ad +.hy 1 + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of diff -r 7a3090aca393 -r 2a679c81f552 etc/images/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/README Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,5 @@ +The following icons are from GNOME 2.10: + + refresh.pbm, refresh.xpm + +They are not part of Emacs, but distributed and used by Emacs. diff -r 7a3090aca393 -r 2a679c81f552 etc/images/execute.pbm Binary file etc/images/execute.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/execute.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/execute.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,35 @@ +/* XPM */ +static char * mail_exec_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 6 1", +" c None", +". c black", +"X c #a5d8a5d89550", +"o c #d305d305bc3c", +"O c #ea03ea03d271", +"+ c white", +/* pixels */ +" ", +" ", +" ", +" .. ", +" XX .. ", +" oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX .. ", +" OO oo XX ", +" OO oo ", +" OO + .. ", +" XX .. ", +" oo XX ", +" OO oo ", +" OO ", +" ", +" ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/bits.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/bits.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,20 @@ +/* XPM */ +static char * sb_obj_xpm[] = { +"15 15 2 1", +" c None", +". c #000CFF", +" .. . .. . ", +". . . . . . ", +". . . . . . ", +". . . . . . ", +" .. . .. . ", +" ", +". .. . .. ", +". . . . . . ", +". . . . . . ", +". . . . . . ", +". .. . .. ", +" ", +" .. . .. . ", +". . . . . . ", +". . . . . . "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/bitsbang.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/bitsbang.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,21 @@ +/* XPM */ +static char * sb_objod_xpm[] = { +"15 15 3 1", +" c None", +". c #000CFF", +"+ c #FFFA00", +" .. . .. . ", +". .++ . . . ", +". .++ . . . ", +". . ++. . . ", +" .. ++ .. . ", +" ++ ", +". ..++. .. ", +". . .++ . . ", +". . .++ . . ", +". . .++ . . ", +". .. . .. ", +" ++ ", +" .. . ++. . ", +". . . . . . ", +". . . . . . "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/box-minus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/box-minus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_box_minus_xpm[] = { +"20 15 4 1", +" c None", +". c #000000", +"+ c #828282", +"@ c #D19200", +"...+ +..+ ", +".@@.+ +.@.+", +"+.@@.+ +.@@@.", +"+.@@@.+++++++++.@@..", +" +..@............@.+", +" +.@..@@@@@@@@@@@..+", +" +.@@..............+", +" +.@@.@@@@@@@@@@@@.+", +" +.@@.@@@@@@@@@@@@.+", +" +.@@.@@@......@@@.+", +" +.@@.@@@......@@@.+", +" +.@.@@@@@@@@@@@@.+", +" +..@@@@@@@@@@@@.+", +" +..............+", +" ++++++++++++++ "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/box-plus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/box-plus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_box_plus_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #D19200", +" ", +" .............. ", +" .++++++++++++++. ", +" .++@@@@@@+@@@@@+. ", +" .+@+@@@@@@+@@@@@+. ", +" .+@@++++++++++++++.", +" .+@@+@@@@@@@@@@@@+.", +" .+@@+@@@@@++@@@@@+.", +" .+@@+@@@@@++@@@@@+.", +" .+@@+@@@++++++@@@+.", +" .+@@+@@@++++++@@@+.", +" .+@+@@@@@++@@@@@+.", +" .++@@@@@++@@@@@+.", +" .++++++++++++++.", +" .............. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/box.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/box.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_box_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ............... ", +" .++++++++++++++. ", +" .++@@@@@@+@@@@@+. ", +" .+@+@@@@@@+@@@@@+. ", +" .+@@++++++++++++++.", +" .+@@+@@@@@@@@@@@@+.", +" .+@@+@@@@@@@@@@@@+.", +" .+@@+@@@@@@@@@@@@+.", +" .+@@+@@@@@@@@@@@@+.", +" .+@@+@@@@@@@@@@@@+.", +" .+@+@@@@@@@@@@@@+.", +". .++@@@@@@@@@@@@+.", +" .++++++++++++++.", +" .............. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/checkmark.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/checkmark.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,20 @@ +/* XPM */ +static char * sb_chk_xpm[] = { +"15 15 2 1", +" c None", +". c #FF0000", +" ", +" . . .. ", +" . . . ", +" . . . . ", +" . .. . ", +" .. ", +" .. ", +" ... .. ", +" ... .. ", +" .... .. ", +" ... .. ", +" .... ", +" ... ", +" . ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/dir-minus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/dir-minus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_dir_minus_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #DBDB00", +"# c #FFF993", +" ....... ", +".+++++++. ", +".+@@@@@@+......... ", +".+@@@@@@@++++++++. ", +".+@@@@@@@@@@@@@@+...", +".+@@++++++++++++++++", +".+@@+##############+", +".+@+##############+.", +".+@+####++++++####+.", +".+@+####++++++####+.", +".+@+##############+.", +".++##############+..", +".++##############+. ", +".+++++++++++++++++. ", +" ................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/dir-plus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/dir-plus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_dir_plus_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #DBDB00", +"# c #FFF993", +" ....... ", +".+++++++. ", +".+@@@@@@+.......... ", +".+@@@@@@@++++++++++.", +".+@@@@@@@@@@@@@@@@+.", +".+#######++#####@@+.", +".+#######++######@+.", +".+#####++++++####@+.", +".+#####++++++####@+.", +".+#######++######@+.", +".+#######++######@+.", +".+###############@+.", +".+###############@+.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/dir.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/dir.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_dir_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #DBDB00", +"# c #FFF993", +" ....... ", +".+++++++. ", +".+@@@@@@+.......... ", +".+@@@@@@@++++++++++.", +".+@@@@@@@@@@@@@@@@+.", +".+##############@@+.", +".+###############@+.", +".+###############@+.", +".+###############@+.", +".+###############@+.", +".+###############@+.", +".+###############@+.", +".+###############@+.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/doc-minus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/doc-minus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_doc_minus_xpm[] = { +"15 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #5A818B", +"# c #FFFFFF", +" ....... ", +" .+++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+#. ", +" .+@@@@@@+#+.", +" .+@####@+##+.", +" .+@@@@@@@+#+. ", +" .+@@@@@@+##+. ", +".++++@@@@+#+. ", +".+###++++##+. ", +".+########+. ", +".++#######+. ", +" ..++++##+. ", +" ....+++. ", +" ... "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/doc-plus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/doc-plus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_doc_plus_xpm[] = { +"15 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #5A818B", +"# c #FFFFFF", +" ....... ", +" .+++++++. ", +" .+@@@@@@+. ", +" .+@@#@@@+#. ", +" .+@@#@@@+#+.", +" .+@#####+##+.", +" .+@@@@#@@+#+. ", +" .+@@@@#@+##+. ", +".++++@@@@+#+. ", +".+###++++##+. ", +".+########+. ", +".++#######+. ", +" ..++++##+. ", +" ....+++. ", +" ... "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/doc.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/doc.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_doc_xpm[] = { +"15 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #5A818B", +"# c #FFFFFF", +" ....... ", +" .+++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+#. ", +" .+@@@@@@+#+.", +" .+@@@@@@+##+.", +" .+@@@@@@@+#+. ", +" .+@@@@@@+##+. ", +".++++@@@@+#+. ", +".+###++++##+. ", +".+########+. ", +".+########+. ", +".++++++##+. ", +" ......+++. ", +" ... "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/info.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/info.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_info_xpm[] = { +"10 15 4 1", +" c None", +". c #BEBEBE", +"+ c #0000FF", +"@ c #FFFFFF", +" .. ", +" ..+++. ", +" .+++@++. ", +" .+++++++ ", +" .+++++++ ", +".++@@@++++", +".++++@++++", +".++++@++++", +".++++@++++", +" .+++@++++", +" .+++@+++ ", +" .+@@@@@+ ", +" .+++++++ ", +" .+++++ ", +" ++ "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/key.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/key.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * key_xpm[] = { +"16 16 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ........ ", +" ..++++++.. ", +" .+@@@@@@+. ", +" .+@@++@@+. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .+@@@@+. ", +" .+@@+. ", +" .+@@@+. ", +" .+@@+. ", +" .+@@+. ", +" .+@@@+. ", +" .+@@+. ", +" .++. ", +" .. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/label.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/label.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_label_xpm[] = { +"10 16 3 1", +" c None", +". c gray", +"+ c blue", +" .....", +" ..+++++", +" .+++++++", +" .++++++++", +" .++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++", +".+++++++++"}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/lock.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/lock.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * lock_xpm[] = { +"16 16 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ........ ", +" ..++++++.. ", +" .++....++. ", +" .+......+. ", +" ..+......+.. ", +" ..++++++++++..", +" .++@@@@@@@@++.", +" .+@@@@@@@@@@+.", +" .+@@@@@@@@@@+.", +" .+@@@++++@@@+.", +" .+@@@@++@@@@+.", +" .+@@@@@@@@@@+.", +" .+@@@@++@@@@+.", +" .+@@@@@@@@@@+.", +" .++++++++++++.", +" .............."}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/mail.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/mail.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_mail_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFFFFF", +"................... ", +".++++++++++++++++++.", +".++@@@@@@@@@@@@@@++.", +".+@++@@@@@@@@@@++@+.", +".+@@@++@@@@@@++@@@+.", +".+@@@@@++@@++@@@@@+.", +".+@@@@@@@++@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@+@@@@@@+@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@+@@@@@@@@@@+@@+.", +".+@@@@@@@@@@@@@@@@+.", +".++@@@@@@@@@@@@@@++.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/page-minus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/page-minus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_pg_minus_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFFFFF", +"# c #ADADAD", +" ............ ", +" .++++++++++++.", +" .++@@@@@@@@@@+.", +" .+#+@@@@@@@@@@+.", +" .+##+@@@@@@@@@@+.", +" .+###+@@@@@@@@@@+.", +" .+####+@@@@@@@@@@+.", +".+++++++@++++++@@@+.", +".+@@@@@@@++++++@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/page-plus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/page-plus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_pg_plus_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFFFFF", +"# c #ADADAD", +" ............ ", +" .++++++++++++.", +" .++@@@@@@@@@@+.", +" .+#+@@@@@@@@@@+.", +" .+##+@@@@@@@@@@+.", +" .+###+@@@++@@@@@+.", +" .+####+@@@++@@@@@+.", +".+++++++@++++++@@@+.", +".+@@@@@@@++++++@@@+.", +".+@@@@@@@@@++@@@@@+.", +".+@@@@@@@@@++@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/page.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/page.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * sb_pg_xpm[] = { +"20 15 5 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFFFFF", +"# c #ADADAD", +" ............ ", +" .++++++++++++.", +" .++@@@@@@@@@@+.", +" .+#+@@@@@@@@@@+.", +" .+##+@@@@@@@@@@+.", +" .+###+@@@@@@@@@@+.", +" .+####+@@@@@@@@@@+.", +".+++++++@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".++++++++++++++++++.", +" .................. "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag-gt.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag-gt.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag_gt_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@++@@@@@@@+.", +" .+@@@@@@+++@@@@@@+.", +".+@@@@@@@++++@@@@@+.", +".+@++@@@@+++++@@@@+.", +".+@++@@@@+++++.@@@+.", +".+@@@@@@@++++.@@@@+.", +" .+@@@@@@+++.@@@@@+.", +" .+@@@@@++.@@@@@@+.", +". .++++++.++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag-minus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag-minus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag__xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@++@@++++++@@@@@+.", +".+@++@@++++++@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@+.", +". .+++++++++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag-plus.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag-plus.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag+_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@@@@@@@@@@+.", +" .+@@@@@@++@@@@@@@+.", +".+@@@@@@@++@@@@@@@+.", +".+@++@@++++++@@@@@+.", +".+@++@@++++++@@@@@+.", +".+@@@@@@@++@@@@@@@+.", +" .+@@@@@@++@@@@@@@+.", +" .+@@@@@@@@@@@@@@+.", +". .+++++++++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag-type.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag-type.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag_type_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@@@@@@@@@@+.", +" .+@@@@@@++++++@@@+.", +".+@@@@@@@++++++@@@+.", +".+@++@@@@@@++@@@@@+.", +".+@++@@@@@@++@@@@@+.", +".+@@@@@@@@@++@@@@@+.", +" .+@@@@@@@@++@@@@@+.", +" .+@@@@@@@@@@@@@@+.", +". .+++++++++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag-v.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag-v.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag_v_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@@@@@@@@@@+.", +" .+@@@++++++++++.@+.", +".+@@@@@++++++++.@@+.", +".+@++@@@++++++.@@@+.", +".+@++@@@@++++.@@@@+.", +".+@@@@@@@@++.@@@@@+.", +" .+@@@@@@@@.@@@@@@+.", +" .+@@@@@@@@@@@@@@+.", +". .+++++++++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/tag.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/tag.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * sb_tag_xpm[] = { +"20 15 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ", +" ", +" ............... ", +" .+++++++++++++++.", +" .+@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +".+@++@@@@@@@@@@@@@+.", +".+@++@@@@@@@@@@@@@+.", +".+@@@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@@+.", +" .+@@@@@@@@@@@@@@+.", +". .+++++++++++++++.", +" ............... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/ezimage/unlock.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/ezimage/unlock.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,23 @@ +/* XPM */ +static char * unlock_xpm[] = { +"16 16 4 1", +" c None", +". c #828282", +"+ c #000000", +"@ c #FFF993", +" ....... ", +"..+++++.. ", +".++...++. ", +".+.....+. ", +".+.....+........", +"....++++++++++..", +" .++@@@@@@@@++.", +" .+@@@@@@@@@@+.", +" .+@@@@@@@@@@+.", +" .+@@@++++@@@+.", +" .+@@@@++@@@@+.", +" .+@@@@@@@@@@+.", +" .+@@@@++@@@@+.", +" .+@@@@@@@@@@+.", +" .++++++++++++.", +" .............."}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/highlight.pbm Binary file etc/images/highlight.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/highlight.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/highlight.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,33 @@ +/* XPM */ +static char * highlight_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 4 1", +" c None", +". c black", +"X c #828282827474", +"o c #dd00df007e00", +/* pixels */ +" ..... ", +" ..XXX.. ", +" .XXXXX. ", +" .XXXXX.. ", +" .XXXXX. ", +" .XXXXX. ", +" .XXXXX. ", +" .ooXX. ", +" ..ooo. ", +" oooo .... ", +"oo.ooo....oo ... ", +"o.o.ooo.oo.o.ooo.o ", +".ooo.oo.oo.o.ooooo ", +".ooo.oo.oo.o.ooooo ", +".ooo.oo...oo.ooooo ", +".....oo.oo.o.ooooo ", +".ooo.oo.oo.o.ooooo ", +".ooo.oo.oo.o.ooo.o ", +". oo.o....ooo...o ", +" oo oooo ", +" ", +" ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/alias.pbm Binary file etc/images/mail/alias.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/alias.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/alias.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,33 @@ +/* XPM */ +static char * alias_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 4 1", +" c None", +". c #61b761b7600a", +"X c #a5d8a5d89550", +"o c black", +/* pixels */ +" ", +" ", +" ", +" ...... ", +" ...XXXX..XX ", +" o..ooooooo... ", +" ooo oooo..X ", +" o.X ooo... ", +" o.X ooo.XX ", +" o.X oo.. ", +" o.X oo. ", +" o... oo.. ", +" o.X o.. ", +" o.XX oX. ", +" o.... oo. ", +" o..XX oooo ", +" o...XXX XXoooo ", +" ooo........ooooo ", +" oooooXXooooo.oo ", +" ooo o..oo", +" o...", +" ooo", +" oo", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/refile.pbm Binary file etc/images/mail/refile.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/refile.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/refile.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,36 @@ +/* XPM */ +static char * refile_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 7 1", +" c None", +". c black", +"X c #a5d8a5d89550", +"o c #d305d305bc3c", +"O c #ea03ea03d271", +"+ c #828282827474", +"@ c #61b761b7600a", +/* pixels */ +" . ", +" ..X. ", +" ..XoO.... ", +" ..XooooO.+. ", +" ..XooooooOX.. .. ", +" .@@ooooooOOO@. ... ", +" .O@oooooOOOOO..@@. ", +" .OO@oooOOOOOO..@@. ", +" ...OO@XooOOOOO...@@. ", +" ..+.O@XooOOOO..@@@@@. ", +" .++..XooOOOO..@@@@@@. ", +" .++.@oooOO...@@@@@@@. ", +" ..+.XooOOO..@@@@@@@. ", +" .++.OOOO.@@@@@@@@. ", +" .+.oOO..@@@@@@@. ", +" .++.OO.@@@@@@@. ", +" .++.O.@@@@@.. ", +" ..+.O.@@@@@. ", +" .++..@@@@. ", +" ..++.@@@. ", +" .+.@@. ", +" ...@. ", +" ... ", +" . "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/repack.pbm Binary file etc/images/mail/repack.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/repack.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/repack.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,35 @@ +/* XPM */ +static char * mail_repack_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 6 1", +" c None", +". c black", +"X c #a5d8a5d89550", +"o c #d305d305bc3c", +"O c #ea03ea03d271", +"+ c #828282827474", +/* pixels */ +" ", +" ", +" .............. ", +" .XXXXXXXXXXXX.. ", +" .XXXXXXXXXXXX.X. ", +" .XXXXXXXXXXXX.oo. ", +" ..............ooo. ", +" .OOOOOOOOOOOO.oo. ", +" .O++++++++++O.oo. ", +" .O+XXXXXXXX+O.o. ", +" .+XXXXXXXX+.o.. ", +" .+XX...XXX+.... ", +" ....o.......oo. ", +" ....o.....Oooo. ", +" .OOO...OOOO.oooo. ", +" .++++++++++.oooo. ", +" .+XXXXXXXX+.oooo. ", +" .O+XXXXXXXX+O.ooX. ", +" .O+XXXXXXXX+O.oo.. ", +" .O++++++++++O.o.. ", +" ..OOOOOOOOOOOO... ", +" ................ ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-all.pbm Binary file etc/images/mail/reply-all.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-all.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/reply-all.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,38 @@ +/* XPM */ +static char * reply_all_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 9 1", +" c None", +". c black", +"X c #673e666663d4", +"o c #eb46ea1de471", +"O c #a852a7bea3d2", +"+ c #ae51c17b9b26", +"@ c #8d4d97577838", +"# c #7c7c8b8b6e6e", +"$ c #5e0868be52d3", +/* pixels */ +" ", +" ", +" .... ", +" .....XooO. ", +" .....XOooooooO. ", +" .XOooooooooooXOO. ", +" .oXXooooooooOXOo. ", +" .OoOXXooooooXOoo. ", +" .oooOOXOooXXXooO. ", +" ........XXOoOXOo. ", +" ..++++@.ooooooXO. ", +" ..+@@@.oooooooXO. ", +" ..+@@@#.oooooooO.. ", +" ..++@@@#$.ooooO... ", +" .++++@@#.$ .. ", +" .+@@@#.o .. .O .O ", +" .+@#$. .O. .O .O ", +" .#$. .O .o .O .O ", +" .$. . .O .O .O ", +" . ....O .O .O ", +" .O .O .O .O ", +" .O .O .O .O ", +" .O .O .O .O ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-from.pbm Binary file etc/images/mail/reply-from.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-from.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/reply-from.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,38 @@ +/* XPM */ +static char * reply_from_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 9 1", +" c None", +". c black", +"X c #673e666663d4", +"o c #eb46ea1de471", +"O c #a852a7bea3d2", +"+ c #ae51c17b9b26", +"@ c #8d4d97577838", +"# c #7c7c8b8b6e6e", +"$ c #5e0868be52d3", +/* pixels */ +" ", +" ", +" .... ", +" .....XooO. ", +" .....XOooooooO. ", +" .XOooooooooooXOO. ", +" .oXXooooooooOXOo. ", +" .OoOXXooooooXOoo. ", +" .oooOOXOooXXXooO. ", +" ........XXOoOXOo. ", +" ..++++@.ooooooXO. ", +" ..+@@@.oooooooXO. ", +" ..+@@@#.oooooooO.. ", +" ..++@@@#$.ooooO... ", +" #.$.oO... ", +" ...O . .... ", +" ...O ", +" .O ", +" ...O ..O .... .O O. ", +" ...O ..O .OO. ..... ", +" .O .O . . . . . ", +" .O .O .OO. . . . ", +" .O .O .... . O . ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-to.pbm Binary file etc/images/mail/reply-to.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply-to.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/reply-to.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,38 @@ +/* XPM */ +static char * reply_to_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 9 1", +" c None", +". c black", +"X c #673e666663d4", +"o c #eb46ea1de471", +"O c #a852a7bea3d2", +"+ c #ae51c17b9b26", +"@ c #8d4d97577838", +"# c #7c7c8b8b6e6e", +"$ c #5e0868be52d3", +/* pixels */ +" ", +" ", +" .... ", +" .....XooO. ", +" .....XOooooooO. ", +" .XOooooooooooXOO. ", +" .oXXooooooooOXOo. ", +" .OoOXXooooooXOoo. ", +" .oooOOXOooXXXooO. ", +" ........XXOoOXOo. ", +" ..++++@.ooooooXO. ", +" ..+@@@.oooooooXO. ", +" ..+@@@#.oooooooO.. ", +" ..++@@@#$.ooooO... ", +" .++++@@#.$ ", +" .+@@@#.o ...... ", +" .+@#$. OO.OOO ", +" .#$. .O ", +" .$. .O .... ", +" . .O .OO. ", +" .O . . ", +" .O .OO. ", +" .O .... ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply.pbm Binary file etc/images/mail/reply.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mail/reply.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mail/reply.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,38 @@ +/* XPM */ +static char * mail_reply_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 9 1", +" c None", +". c black", +"X c #673e666663d4", +"o c #eb46ea1de471", +"O c #a852a7bea3d2", +"+ c #ae51c17b9b26", +"@ c #8d4d97577838", +"# c #7c7c8b8b6e6e", +"$ c #5e0868be52d3", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" .... ", +" .....XooO. ", +" .....XOooooooO. ", +" .XOooooooooooXOO. ", +" .oXXooooooooOXOo. ", +" .OoOXXooooooXOoo. ", +" .oooOOXOooXXXooO. ", +" ........XXOoOXOo. ", +" ..++++@.ooooooXO. ", +" ..+@@@.oooooooXO. ", +" ..+@@@#.oooooooO.. ", +" ..++@@@#$.ooooO... ", +" .++++@@#.$.oO... ", +" .+@@@#.o.... ", +" .+@#$... ", +" .#$. ", +" .$. ", +" . ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/mh-logo.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/mh-logo.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char *mh-e[] = { +/* width height num_colors chars_per_pixel */ +" 18 13 2 1", +/* colors */ +"# c #666699", +". c None s None", +/* pixels */ +"........##........", +".......####.......", +"......######......", +"......######......", +"....#########.....", +"..##############..", +".##...######....#.", +"##...#.#.####...#.", +"....#..#.##.#...#.", +"...#..##.#.#.#....", +"...#..#..#..#.#...", +"...#..#.##..#.##..", +"...#..#.#..#....#." +}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/page-down.pbm Binary file etc/images/page-down.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/page-down.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/page-down.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,34 @@ +/* XPM */ +static char * mail_page_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 5 1", +" c None", +". c black", +"X c #ea03ea03d271", +"o c #a5d8a5d89550", +"O c #d305d305bc3c", +/* pixels */ +" ", +" ", +" .................. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XoooooooooooooXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .Xoooooooooo..oXX. ", +" .XXXXXXXXXXX..XXX. ", +" .XXXXXXXXXXX..XXX. ", +" .XooooooXXXX..XXX. ", +" .XXXXXXXXXXX..XXX. ", +" .XXXXXXXXX.O..O.X. ", +" .Xoooooooo.....XX. ", +" .XXXXXXXXXX....XX. ", +" .XXXXXXXXXXX..XXX. ", +" .XXXXXXXXXXXooXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .................. ", +" ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/refresh.pbm Binary file etc/images/refresh.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/refresh.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/refresh.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,113 @@ +/* XPM */ +static char * refresh_xpm[] = { +"24 24 86 1", +" c None", +". c #000000", +"+ c #F3F6F8", +"@ c #C8D4DF", +"# c #F7F9FA", +"$ c #0D110C", +"% c #6286A5", +"& c #A0B6C9", +"* c #C9D5E0", +"= c #F2F5F7", +"- c #172116", +"; c #819EB6", +"> c #CAD6E1", +", c #CCD7E1", +"' c #CED9E3", +") c #F6F8F9", +"! c #7192AE", +"~ c #587B99", +"{ c #CDD8E2", +"] c #CFDAE4", +"^ c #D3DDE6", +"/ c #D5DEE6", +"( c #ADC0D0", +"_ c #90A9BF", +": c #537490", +"< c #23323E", +"[ c #85A1B8", +"} c #5E83A3", +"| c #6084A3", +"1 c #6689A7", +"2 c #678AA8", +"3 c #48657D", +"4 c #A8BCCD", +"5 c #7393AE", +"6 c #6B8DAA", +"7 c #5C81A1", +"8 c #5D82A2", +"9 c #6588A6", +"0 c #435F76", +"a c #B1C3D2", +"b c #50718D", +"c c #9FB5C8", +"d c #94ACC1", +"e c #425D73", +"f c #435E74", +"g c #B4C5D3", +"h c #6C8EAB", +"i c #C4D2DD", +"j c #5B80A0", +"k c #456178", +"l c #7595B0", +"m c #BFCEDA", +"n c #597D9C", +"o c #A3B8CA", +"p c #B0C2D1", +"q c #86A2B9", +"r c #6E8FAB", +"s c #E1E8EE", +"t c #B9C9D6", +"u c #6387A6", +"v c #4C6B85", +"w c #7F9DB6", +"x c #BCCCD9", +"y c #DDE5EC", +"z c #E4EAEF", +"A c #D8E1E9", +"B c #D1DBE4", +"C c #C7D3DE", +"D c #B7C8D6", +"E c #7091AD", +"F c #537592", +"G c #9DB3C6", +"H c #8CA7BD", +"I c #304353", +"J c #4E6E89", +"K c #829FB7", +"L c #92ABC0", +"M c #C5D3DE", +"N c #7C9AB3", +"O c #5A7E9D", +"P c #47647C", +"Q c #6185A4", +"R c #5B7F9E", +"S c #4F6F8A", +"T c #405A71", +"U c #283926", +" . ", +" .. ", +" .+. ", +" ....@#. ", +" $%&@@**=. .. ", +" -;@@**>,'). .!~. ", +" .%@**>,{]^/(. ._:. ", +" <&@[}}|%123. .4. ", +".5@678|%920. .ab. ", +".cd7e...1f. . .gh. ", +".ijb. .k. .. .al. ", +".mn. .. .'. .op5. ", +".qr. . .*s...at4u. ", +".vw. .xyzyABCDEF. ", +" .G. .p'B,@ixaH2I. ", +" .JK. .LM@,>>MmNOP. ", +" .F9. .9|%Q|}7RS.. ", +" .. .|R~~nJT.. ", +" .j~.... ", +" UO. ", +" .. ", +" . ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/show.pbm Binary file etc/images/show.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/show.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/show.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,33 @@ +/* XPM */ +static char * mail_show_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 4 1", +" c None", +". c black", +"X c #ea03ea03d271", +"o c #a5d8a5d89550", +/* pixels */ +" ", +" ", +" .................. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XoooooooooooooXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XoooooooooooooXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XooooooXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XoooooooooXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .XXXXXXXXXXXXXXXX. ", +" .................. ", +" ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/images/widen.pbm Binary file etc/images/widen.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 etc/images/widen.xpm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/images/widen.xpm Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,32 @@ +/* XPM */ +static char * widen_xpm[] = { +/* columns rows colors chars-per-pixel */ +"24 24 3 1", +" c None", +". c #8d4d97577838", +"X c black", +/* pixels */ +" ", +" ", +" ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . XX XX . ", +" . XX XX . ", +" . XX XX . ", +" .XXXXXXXX XXXXXXXX. ", +" .XXXXXXXX XXXXXXXX. ", +" . XX XX . ", +" . XX XX . ", +" . XX XX . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" ", +" ", +" "}; diff -r 7a3090aca393 -r 2a679c81f552 etc/orgcard.ps --- a/etc/orgcard.ps Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/orgcard.ps Sun Oct 09 20:00:17 2005 +0000 @@ -10,7 +10,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -t landscape -o orgcard.ps orgcard.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2005.08.30:1410 +%DVIPSSource: TeX output 2005.09.23:1744 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -352,210 +352,216 @@ CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43 0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F 08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E -588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C2 -C87A1A169C5ADE44B561EC1660E617FB39D1B1547B33C0FEB33C3A1D7340A62A -CD9CEFA49481F19B39A704A53A0B98A11744143CDDA0E668E6325935C6497A9F -AFF471194932AFECBF25B441AD55A43751FBAB76F3E544C4254AEC4BEB5CFE4C -C1318C3A0FAD0E8C1BABEE20B203E1DD9412E66BC55BEBD6FBBEBA84F56604FD -85D50F733D9794611F4137EC10ACB4C4ECA5A81CAACC45213E92ED3C26726BBE -91430E7633A2BDB8EA3D0C55259D7DBE468AC0964A63728C9B8EA4E15CF0EEA3 -2E754B9170EAE6B8818DCCDDAD643B9F6C91C3C5B245CD442358C60AF390DC76 -342E659D4EC45552626F069F346F46B18062CE26D5912336C6B29FCBFA5C3113 -ED86E44B529CD95B7B5B934D899762C4F3457F56ACCC763BCCD5BD08975EB5F1 -C5216DA4CBF3409EC71054B0145183F7DFB31517D199EB16D4C6DB0AF05E5720 -10B06F395BE3C8C59CEEBCEA1E00F9EA3FD880AC197508CEC11E33B6B6EABE3C -0FAEBF246743F62D280875D052656696AA88DABB918F793CB2994A1ACCFA0CAE -AF6FDDF489109DEF07F93B5B0078FC5FD9829DD296F62F23400F5DD6CB096557 -EDA737413C744FDBB0615BD40A79EA2929EB7AC767E58D886B310700733D2895 -3925911133631F28291974294AACF4A35F92A5E5262DCF33810A6F9C51E9D141 -F84B0C26B5ADECB44B646C79DD1C656529B7122739C0459B2B47A2C357EF9A36 -2B376DDF54F1F4F133419EF14CCC6010D360DFA8A7B122FFC5A4C560ED184F16 -057D3F76B6B2E935B31B17FC4066916FFBA0B9AFF287D251985AB3FC3D0D7E9A -91F094356B3D6CDBCB2D74A3FDE23526B22C223EA35C9E5054053B23AF004324 -80F023FCDFDFA6B8F0E03A799D87FC2690C5D1ABB9C52B03402E37309091A1FC -1D66EB48FE3E4BD326AA65839A9A7276C876F8079C11F2F3A7CBFDAB5AD3D4A3 -8377AE4862F390039E3FBE5D79B5318774B0A9B1321AAFCE8E87568C0AD0E82F -D4DCEEA5DD4EFDB2E89D336174E76036DA08DE4A26FC63560057B87FDE9E060A -3AA30E1B447B1E8EF31762C0998DF24B2860CF8B589FCE1050CC259171420306 -F4DAC090E032E4C3E0DD43305541155C1EB135B2093F7E23106387AB7A3DA0E6 -1A835F6D058227003A8C974907CC073F2ADE33AA774165BB24381E65DF19FD6E -F15BB66BBAB0129C79A80CF32E542B68FFAD1BCBF6A4D867933FBBFA82771E7F -1B2E677040596B7872A038FF8F23511C33E23D362CED5E303736D1CA28D78AA2 -20701B83020AE62003DC59413C6A2413C593CDC819644742F8CDF60D541710C6 -5A23FFCE6F6CF6AE26953CA4F01A62D6F7DB8F122B30506891DA023D16E56BE4 -84D72EC9DE3B16197B3BF97EB8A840BD2C17861583477317DEA062693B2EA959 -5F5233B416B4E1D63C6014BB96D0718DD9D81A885793F315402E91C274122E5D -96AF9A05E10DA6276A33E861C006807BBA6B005583CD961491D5F183B62EA558 -C50F25F2F6B211BD3723FF98E01167C48C0A6CCEA0477895D21519AE86FEB4D7 -47C77202688775B4C86882C20D24EBF7AC98A3B9BCBFF750433E17824A4425C5 -7444E5201F1313A4C9FF361FCD9ECB1597C1F0605FEA98DD109C636433920603 -6671529E0E7AE2EC8A7D196FCA784D3CD2F88190B3F150533BAF3CFE15247D01 -864A2552F602D65088AA7F0D87C02768D8FA62930E18702F98558982C5A202AC -111C6B0359273116F1DF9E5610AC46B99995425144D1352A881C79D9E0042850 -B51B2375DA55C34A47510C7D7435FAE7D391BAEC1F8BC0C93B866E7CE261384C -6B277C66E817BF006B636AB133309384FE0985DBC34190E1E1ABB3A63892361C -9970FC5732C7A4259809EEF348E6D3BC6AAB5BB012A098A02E33F9BDDA250A8A -421EE4EBA46B82C10A5A6ADB2390A7B363CF16A0FFEFAAD7F6D2A80FE4720095 -BD78A6E4B95D6FC7DA4196E61C5FD0F9F37537E6BA581496E38625EF0B7826DF -F021663E6D5DF3C93C5EC2C5B510867ABFC5404F490C683337EE7B22D3CBE7DC -8EB4F9F2C25034C8779010A6835ACED2B05B9CF9753760A803073509C71A6372 -3634DB39F894B6EBAA9A34511357F3C106E42E9A6A592C1B49BB0AF668C95448 -9E0968CE39754452648068F82C53CA2ABE392713979634E7DD66819E7B3FF5D3 -A8890FA876857F4560A44029389A6E425ED8DBB25BFDDCFB510C071414760191 -A36723D251F10830B03E21B6FD61C1E92BD630B5EFD283AF248DA69C537D6F0C -1CDC58032A7A91E836FF66810D886A73453A28044F55F754CD70A9B3EB5D27DF -51D6E57085AC4487C5D015FC51F840F7DBB1733500062C608802C556F8A4623D -0F94B67BC91E07FC2AD7E067F3C033E53216804B7371498113125A8CFC63D450 -4760B98ED1397A8862A8FA5D13923D22ABDF48B7F502916EF7C7D6BC52EBA5F7 -AD95E37E4979B7417C8C0E2599E4BB85883AF9E9A3C9DA432859AF9C909DDA53 -8ED9C0B3DC6BF49C5FB81780078209D21E6B54A8E669212B6E3569B615502ECA -D67BC610E59409178B640ECD0A125371ECAA360FDD5843892BCBD22BF4D640EB -99515496E12E2C68567610FC8F6E03C176D14B692A9A23BE3B50C2EB30BCE5F4 -481500B293CA54AAE5CA0A85C221493792B967423418E870C4DC7344E07A7E52 -1B2DED4C2FED4C602DCF37065FEE9BDE6D1FD95FEC1F30A5E3A1833B09E6B1DA -D6A41C57493D4C1D8D87C8BE2443D2B917A0E3D26C324CA101E84369AFA73586 -E499C3627661DCFABF7478DCEF651E33C666957BE759F9DCB9F263AD3FA48BBF -B47A84A914CFD8297141FF5AD0186753DADAD79315D14C68C19305D73DE6E4DB -56BDDF037DA982E956F9C3B554E0746178294ABF6F46D1669D1675AEB8C924EB -F9966956C8AC25940640B8C9DE9A76B36D04806A918FB4F7160503031AEB7DD4 -61C04BD3F6711F09EC71FEB6EA3904FD8AF75054659ECE0DAAEA1A614AAC6574 -9098FB7BD891E65552583AA519C7E4F9E6B5531B2215300CB262F42763BFDF5D -FA2E6EB7E7F6585C80CD880ABAE340087A781C7EABD56C59A14EC17920FA7AE3 -049BA2DE8D5BB77ADECA23767F842642B7C0CC9AA177990CF0DD00A9DD8458CA -5506DD3A5E5BCF2329047F560F0E30FCA7CA304594B738A0C7C70D8FE364AF59 -620E6527C061B6FECEBEEF0841969656F1A7A27731338B640A3AF243F58FBBF8 -E8ADA1CCD8DE701243EBA2E1F44C732143BFC4FA89B24B3B473CDC022111D477 -ADDB77AAA600B6C6948133D05EF0838BD1E1EA1C747BDBA8A0BBF92DADE753EE -9F556D938E16961C2D13E7534B2B5F9EFEB2AFD65FADA831E81237BEDE73F7FA -B076E562E08D57555B3830834B64E4C1E0E1F89D9A5BFB959032106B1EFEE431 -DC828EB4EF66DEA434DAF191E92F1EFDC31954D055DDD87B1A2762DAD6AE5994 -322DC4FA2FCA4AADC293158C75900C540BC85384340B29A4B25F486145C311D0 -4296CA91BB16569CDAFDC9047D9FC8C26792828DD3CA18E045A2F9B473491501 -CD3ADB57FB1D94C1A0353861EAC98E1630E14BEA6DFB04A5B3FAE97F4EA3C792 -2C9ACBF61A5C14605AC9D0DA7E4D9904C6C6FDFF564723FDE4E72413067055C7 -22946CD598266AE7FBC63FF62068CA4F40B80C8EF9961503F7894AF2A392B595 -376F0CA48B4B23AB7112453DA02274095741C7102733C553B6EFB43A6E1DB0AC -C320C44357C4C7E98B96B30D9FEE86B7083080F0B6262FD69E07557FD018C1E4 -2CF6A276E789A63A9CEBCC8867E12C60D78B81F7C1AB5592E4AFE1AB1C8ADF1C -FE8A4773FDC6FC01BF698E5D46B4282983FF16F028D14104423D07047AC7003E -6B5CD6FC2D30DD0E6162498FF67D4091D68AC65A4658215B845AF706F4B74262 -C3A28732A7E1E786006F544853CCCED8B530ECE3460B11E11CC87B22DC0AB93A -AB7EC47BCE2BAEF0FC23C9A15C0D421D75AD13D931B8669F1018A207D8C57228 -028FEBB6453827DE33B1CDD0527CC4815CA2CF05CDF4735A1EFB79DED9AA8AC5 -A074DA91B9B860EE88F5269AC4C604DE488C269959A108FC5175637DFFB08DBD -2AE093CFF20E15AA2624D8E2A141EC3290852E27FBAC6BE21B65CD8036221193 -9967C4A6AD631F2374582F8DA277621961DE7EA41FA110782DD3E1E7CFC51058 -C961948FDBF02A2E7BF0A299EE696F0B98A0C4ABB7CB67AB28A2EF50D3D212AC -1C51DF3909E484FC3430FF1AB2CD9CE667A9EB489A981A9A02F8F999D9215F5A -DD609F5DF9519DA3410867680942AAFF2275D255709997653E88CB23D16A110D -C5C65DC18750D868C8F60E64265C81DD7CD7C2036D13532E3DC7D12600FAAFDE -EC32EB7989458A220339D451A25E3C4B2D52D265875F06465C913FD75BA30285 -AC61B32BD2C307FCBAF38E14FF6A64C6A5C874A2D7DFE3025E3CD30BA9C60D89 -00BE5411544E97D9791949722F76A99D549D344BC1EB88C9B8BFEB74EC94D190 -F5DE00D2EA0003DECDD4FDEDC0834053AFE3EFF04193E360460A286794D02FDD -A174E3CE72C69D32C7C4EF33B97CAB2929A26662E4E3C2313469ACB6BD21CAFD -8C81FBAB0EE7C26BC5B40AC9880623CB5D595A4351BF7848CA3212D74AE449CB -35BE1BE2C6C795B56D2731C0BC9C5DBCC652F025212C35C50B3937212871472C -7B6AA7AA075FCE6068BCF7474EE3FCA088733439E5AB06D78F62A574157DFCDC -43990D8A9673300AF0D2450C2B9B9000BDC9C4A5CE57764A7236370458E8A0D5 -0D777DC1156A9D82D070FFE0DEA2DED3854CB7A09FD34F1B3513821C26FB6F6E -F3BA660EBB0C08D8B976CB89B4E05C95A20EB2F74F4C1DA67E783E9C936A749A -E20866E646774E132A0A12BD5907BA8D7FCBACC83004895110BD65223C4A2821 -02C709F5A8E1E9EE3C0C2430D6CDD4AAC32F45093EEB1AE961B1BCAA823E7F55 -0B9E5614DF4B2703532E2260B70062E33F40463B176D7645168DD4AF226B39E5 -8B74BCA01988FCF9475B9935412016704A09A331365D2E745E778331ACAED5E9 -AF662A9D5C7A5FECE76F73EE20E2BBD0647304E75161347291906E7ADB3F2446 -9769F36EEBCEC59167199793122D96428A44A2D8C9B704802543B0569C140134 -8F180AFAAEDC8550B566E6D460544DB84402A9AF79D8A315C53FAFA3A5898B26 -CF8D7EAEF6B7E19B9DDF927B7DAEA9249FFF69872A6C3F4289546E6969D29360 -0A8684B1D5025DDEBF2554248AF53EE9D53F9412CA89F004911834BE96221C1E -8582F51F1A345ADAD0537938A96E73E35063A2207FF7FFCC55C9F7AEF734D089 -A0693D41848236FCE67E85AD5372C73B61BF5B58CC2D9616FB78144198E65267 -6940C7E3E3381C91C877B7F78B4747F46D12CF347E20C1A2A78BFAF96C42D81F -16715D7E1FE7E671242791DA7D84D5D885F905093969F3836299BF6874A8B12E -9E1F3A05D940BFABFDD7D3085AF8A4FD01092C88CB75F4060BD85F2F958DB0A6 -64145DC3DCA6903E0E018A7594BD7114F336D12C61AE4E29138A0165FE21BE5C -C2F4B9D496ACE81861919BB69DC06E5AEABD3F5E5BDFF3F507BDA4E366BDD481 -05558CE1213A6D28CC2D5D2E5265A754141E312F42B64EA2D51C79C71DA5BC92 -920821C437120A19F9EA3BC48F16073251D458BA53C4C7DDF0035ABB32939C11 -4842DA0E489C7C2025B432B66352C56D78BB8391DA79E75DDEC29588C596BB4D -67EDF9492B91B83D9F1F26444094D60329A5D3F1BDE976DB2E71B6E4CA9B8EA4 -BF43C91A16A2D9D23E5448C2FA38B8D24D142549E45572A29655C9BD31755718 -A58C3DC4964C0B49791F36809863835CD8E4B196CE8D18D714B2B3AE2BE90C4D -65C1210B9E3A8F248BAFB0CC5579302F6FC26FC3E197076891FB758B0595DC4E -7F1EEC99FFB654D46736BCE43BF37DB7681CF7655DF55592B7A494EA541AFFC5 -CE5815E1D989D9E1CE87E116DA4BCB7E16AFAD2327C434AC71EC756B96476BBC -0C997DC8C439E839EC939B55BEA698E3435BD911258234B6993B3890077DADCA -4DE92B37E94166A24DABCEAC3BB808557FE09FAAFD6DD316F44952A6710B4824 -6F5B5D4AE9F8A14DD207DFB697D5DC67FC3EBAE49A1A339525ED5ADBFFE58333 -43E8AAD4030869427226950AEEBD11A07815D9C3BBF2570A51D6C0249CCE9026 -B12ECEBAF112069547DBD47B7C8869523AFA7177F6E87F534A5425693DB8AD79 -497B95A90B056F61B6B4A89A7BB23B4F93BF5DAF637D71DDF4F48E34CF347EB4 -12173D9A72526C9B561F6CB2C3D43B0487E09B2C7B1822E9CF5D2D3836553AE5 -5A71793EFB52216CAA4948C203E1EA410B3BA72B6E2059AD04B5ADF54B6A5BD6 -33EDE67267334D9170FF9E7F9802516295D91F1A63EA8433F696E3565EBDDB1F -1055025C16B5EB6708479CBDE2188D8371EE8863CBCD8533DE37E0242842C0AD -114045C8B131BA3790146335EE07690C8DCAFE2F61824BE4F109F33486663D45 -24391006E700052BC8E90098BE7B5F13EF5412DAF6BDF0DFE9775FDC185369B1 -C53AAAEB34A9727AF997415595F8EED263C0B1B9448119E705396F6143E8276C -C6C586E5FA8FF1C6B701578D1399211EA9398DB2A6397F68C7B7E0B6434DD516 -E4F039207D1BE48AD5F63C3E804C2DCEB39E97DA8D1D6E8C73180A916D8923FB -5EA2430412C28ADEE42F3B6390ADD6159BE501FE3252B6EDE96AAD8035E2C8DA -B00C25B07488F2BCD84508719DA8D309F8191B86CDC22E73730C9C91B7CD6062 -86032E22F92B948647A3351A31DABAD5F5F8D2C9911892C359471026AC047E49 -BFCC10C17712C6B7123EC9FE3BDF0ADFBA2BEC0A69B18DA231B43BE20694139C -D6C856E3B7C6907F8BFEAFD753BDD5B50F8B25ACC61C778FE96B229CA7F891C6 -07EAA8551B790D6CAB23C80436A3E2A7F24FE4CDA84AB81AF8D4105E2386F3EF -D77DD83730332F0F4B176E0C4ABF39ACC995CE3EECCE76C6363557C08F0DC723 -5E2B680D852174AF6BADB73DAF19EB4F921AC61E1FCE16EACABEB591173F687A -DDD0909654D7A243F4105F8201B6343221DAA1589DB4C496C1F702E0BD3CE68D -75071205B4D8ED2DF85276A3E53AAA46573771E0868482A2BC805C6A9D6C5480 -E23F690D6FA9CA9600A9F42F7F0EC92853C8FF64E2F137DB193543F78356EC5D -A090542039B0501650B6184093DDA5CDD52B6F8CE4460AC781C2F93EA339F10C -4921774575EDAB301E387C5A9200679ED86127611043364A319CB0C68B6FE176 -B0BA672AB3DE3F2B14A9E7C8CEA1DF76C716FD53CBFE583D1D0D20D0062A3DE2 -689408AE3D527703C591BA8C9982607CC08384A1049A1B328846A719FCA05D38 -087619AE510325FBDC54307AA468827EC8D84A19376740210EE95E5844872259 -7E2A055BFDC40D3C12946ACFE8CF26095719C3E10670A10417679DA5639B4175 -9DF86246392C78E114D745B9FCBE5D4D33E4E5935E6D4EB9F00F408045AAAB98 -47E445AE32BFAFF24107A37EDE0E9BA08934370E212F39035BA2AA51E2D711F4 -6D7215A05F5AD11422C9E8F65B80405D29CCDEE79165F59EBED93F9EB264792D -35F8C1FD095F18511EB516DB40AC15B6045D2A24A2B910EF3A632278208A0D66 -E19963591F45FD61AC0183CD5D4C5C1C8D69020874EF6079376801145636901B -D9EA1E35EF1E6B37D257D5B90862CED7C0D1F1B32C5324A28716EAC93B556BE4 -C2716C85ACD7AF85D52DA2E33312C42A6B7F28797BE80102E37B7F9C933BBE85 -121C64FCA542C6D5B7FA7FCB7CD0C41295625FA2D99E6FFC4D08450EE7C1EE81 -BC356927FF6F5AB869D083929EC1A643515702F602AB140A410378A65A721DE8 -1BE9F270589F468D5D2003FAC662A907296302C873DE919466A128FBECF122AE -6259456457D21A217D359EFFF23758BB537BD97472F22EC4EBE932F762884EAB -5D59AAC0097E2EE5A9EF77B1E0376AECE3AA529E5E518A24569007F5DB2F27BB -776BFF2348E9B2E9AB0B07B9BDBCA49E37E11E2980754CEF43ADCBBF32B9575A -C611F4AEBEB5A718524AB25FEA08E9E913E24FD94AB4E2E4FEFEF29C7A70055B -5FA0FA771D485CADF65EFFDD9B6897F675598532D8E974CB042BC7DD6B5A4B99 -F5D36E27D80AAA8417465223649E44E28D5AFABE693265DED4FE7711BB4BA083 -DC71244042798FE7E1965A469B8F8202DEB7C563F43A7E17A088FA36180AEDDE -345A2D7705A5ECEE8E305218791D9956DB2E848E422291D7E2E249329246BE92 -892554EBAC59949D310F38819EDCCAB09F4DCB80144604F8F1F43447138B311C -FCA400AD225FEF31D3B0F6A5E8DF91E4FBC39C93DDD11A2E54D1B8ECF5F386B8 -FD0DA95AE3E981FB36D9FA0344D6D41CCBE8F2320539411FA23360B88ECB4D38 -FADCAABE8049B06887D053FBF3ECC8A89BDE4A9F1ED7F6629866FA14ABAA2924 -9BDB9D6C93F6080593A4BBC0CE2567813B2AD04C99FB09443A684E644BA51B9E -9480AE4AB2148A081F6BCE154261D4B0F03864C6F79DBD622EF471A844048766 -6A872C8E99A82CB468B6FA50260CDD90B81CCB48A6F3BCE3865AE56A86569E23 -16B13DD6114D98293C0DF2585F4E2D01E5EC8E43DD6FFE027E2F0C9CC360BE2B -823DAB713978E73D7AA80DF69CADA74D8E23D902B9DA35EA2BC9D03AEF265D54 -79E86089AC4E8312FB9CE325D8DC9E4DB22BC048CD1F0EFCD64E62B785D97685 -6A34EB62E657BB2F3658B1EA87B4C07C45C8D8283BD35634EC67399AB00AA2F4 -A15A723E8EF9AD000007ADE862D7ADFF32A907D40BF9491FE05BCEADFDB83187 -2825ABF2EF18608411F9E31C3306B37E245F1571155D5651BA291AE16EBC0390 -FEEF8EDA9B9EAB02F1D3BABA0C4DE4FD20FEBC2DDA743FA0C32F7A746FBFAB22 -27B2B8547359B5EC413F98024A5574F48349213502D0F1C71093EF2AF2A7EE88 -67332DDCB9D9652B705E9D2ED1BEF1B9699D84F9B8520DDE2609F752E8D77F8D -ECF010C2F18EA526B4E2EAE1694834494990A4AFAF57286E171E4053788F3B2A -B7A2DDF04308E47448A06C66E987C2BEE43B5FD8890A1E11FCF4E0548E201941 -8437B4BC7A92174B7D5D8F4E9E98F48779968F00803F2FF59B1764EE197873EE -D1DFF6B12B54459FB5A6864CA9D73B89ADCBDBCA2DAAD3B42C4A9175F503F21D -C48D5145E2C6AA7D7FD787BC0D +588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C3 +975289D47E7F35898FD87E0BE88100E53DDB356245666E7F724C208CF200B76D +6E86BB756E083DC34DE1DCF484CD664C826962DC9CD5DB207262A43EDB8A18BC +7D3F35237299AE378AD68A89E97D65CB05503E2C2D951E3AD2A544DABB19973C +2B9AC59428D1FBCD89C058532357D2F4D53F35D49FCDC303475E1B41B3A2E18C +657AA0AE4D04BFBEEE2A24D462249CDB73EB96B6702C174BDF87642C3CB6F3C0 +86B02C65EE7D5ED2F636F15F50E5D1894F48AE024E1CEB56AEAA3967DCF5ED5A +63C9DD1DAEB9C8A353C2C90BFAA6B66B9E0B13BA0CE464A3C8CB2C5AE94AAB37 +72C62E70CEFD0558E483789630CB0FDF76E9EF75D8012E5F7FF85253C480F841 +CAA7F9FC1E4AD4576BFAD1825C989D197024F8ADB77B7DF5D341E2B68BD7FF5E +414852120B733078E1B703AC4845E63CB624BFBC2B575CFF29AFB89BC5957A1C +D3838B3FEE6252CDDEABBA24259E50B48741EC36BCCC888E09B9A0BDDE044D9B +0551B31409E7FE2922D73B7E52B08C32481A2F29E81F2B1573D085997BF65B06 +12E062C2ADDB75A199AE7785015967917D9FFF94DCC8CD8CA79B95560EE9C09B +04441CC622B2374030B08089E51AA9E9566AEAA9F81411C638F547B15793F884 +E04DAA850CD17CF5093F73DEA68AD40C288EA0C25CFD9FEB596DBC7F86C9E13A +2F2E43BE780B66A03B4154191383951FF535D8866735B6879C5D4C51147C7553 +A012AB7FC667F7DF259690D47B1F2DE226FE539DAE8EE6FFEBDF3186E6ECDEE8 +8B3E2CBC6006456AA69276CD025F387ACD73F0CEE35CC1ED6771107E3A1B866F +19C5C17A18552EA2DBA65EB75D493D05DA9D1247D77F65968CE5BCF68D56E249 +3D41AA3360275F993A8C0C7A33D6317AED8C6426C374E7833241E88DB88862FB +411E711280F84C46E1A18D0F520A2474E7AF7455709AD19CCFA00463033FD0B8 +61D2CEB925BA10D19FC97AF1953C8F0EEC15254F2C4C56E9FFEF66D00E8E0BF7 +97B60CBB7F8B56B82B2F846A53E2E36CB5D27ED3881206B27DA02F35B6D32962 +54D89A03F67E672D019F2DD19195E80C0D0DECD8FCFD259907FCA25D5C407882 +CA7E54D31995F1F14376D72BF33D1AF534A05FF3D323CBBD48003F2A44369C55 +80BAF975090EF0D6CF0347C0DB4C6CE743447C7A48981E50BD1667B08CEF2A06 +0B85DFC727BD8BBC505ABE8AED6B7C08C675B50ED7B4FB9FCD0777DED4D7A3DB +528D20414E05BE3DF1F7A76DEFA35135E27230C4CF8069081FDBDA5CAB51061A +E12CD06BD02AB38CBA57492EFEB4A12AE7B58548623D7F862515AA3EC1B4F84A +7C9CB4390F825B68E7A6DF4D67DAEF89F1D461ABEDACBF1FA02FEF65F0B8E3ED +45974B9EC80855D5A1B34D792CC7793D4F05E81E185C3FA86C8A8FF108BAC2E0 +801AB0B3FE4C0CD5257441F29F2F293F4BDCC67D00EFB68440FAEAFE138279D2 +415687CEFCE35F8A1BBB0C18AE4A8ABA688D2F3894B5654AB7AD595E022E6BB3 +083B492C4D6F553EE6DB0D7EF1616F397EA60DC79B6FF8998154D881C74F07D2 +C3B1B9AE8C307182A23EE559466355AA9D092FAA3651C430A550F9C6B18BB05E +1F4B2D7DA2AE2C9BF19B27C827F0E087FD64C5AEB89DF781E2D3FB7F5A471054 +8013A06284F6016A236A1152441EE4703EF4CDB21B964FC029980C62A30DA336 +B5B8DF6EC9FB172B746F1E7A1AB9B5828B1EE32889B22FB532D02045E3567F7C +44B2A0028D20469F45390FEAA44C3555BFAC6F4AF6350CAA53AB97286D25EE00 +933BA6B4E511CF1EBFE8BF240023602A60C3ABC555A08927D0E6AEDC3516D6FA +E4D82F913831A17710EC3A6DB1CE499B58C7B530A1EC4AC1AFF12ED8E79D7EEC +62B47FCAB38ABB2E80B7E05426A416742315C848BEC5AC0D1116BAEFBF220607 +3490F241891680E26C03DB4FFAE6CA4FCB6292226D4549CBCABC3206D1E4D327 +6AAC59B3F07E5D68CD7752C1BA1178A8C7DB6E947DCFAA9EEEDBD01FC8A4D201 +F5BD270279DC4805A24382F6A6108D1B3414D40F46EA91C6108B333342EE1F7E +7086DC76CE42C9C6A6D2858CE3B3E82D0294D8A88E22A0FA9028509F97C85CF5 +3B565E5570F8D4F6F40B8CBD19181B62176FBE65972381E0715EA9281EAE0FE7 +66B5154154738DEAFC9932B3D16EC9EB6F7524F22147C085272719A4AC5CBED3 +E62D88246C56B12ACEB231D42BE72F46D7C6749F9F2487DCEA19ACD3FF21E05B +74324DF87D11DE064F7EFA010B699E7C199908BFC672DDCD69B98D81DDC9C7A4 +062C25FFF5052E5B8042AE6898BAF38ED1C063780B672F0B4E8D331127C0D612 +5705230D97ADCC8103D85DFC7BF7CF154C8A6AABC88419E732EE1C6C724288FE +46F011FD8DD86B343F6240D95D20E8C01452365A061345E876A1B672C2548FC0 +CC0E1B02843714DCA1D8837FBB77E42E590A00D0A4EC1A34DF909A83898C6275 +DC40EAD69FB9436D7D5F0CDB5984A79B86A5AC2DFA0C54F8DC2B210D5C5F890E +64487A1BEB453C2B8D15BE63A1C74CCAEA825CC480AE4C2F4EE985DF8FB624A5 +60CA0E37A9638558EC3C5D1E87936B77D6422E87AB313CC4D91185AA672B92F3 +9D76E2D34A17BA0F35203E72B7D26B71B332D352B2101E871539CB4479954F9C +714158C724DAA05BB5B479CD54E8B0528EF51043EA676CCA3AF74F6CE6024EEE +71346FB0DE3310627BCF9C354FA2BFA44D00E4C11EFC1585C5C5E0C56ECAB11A +EB2037735F483FC4DE666CC61DD2B3214FC3EB4E960DEE07E5835533BE351B99 +18A32EE9888E98922885F3BFC8D5A86B076FF8030D68535FDBA76FBF821842A1 +F7068897E43B3533A9020F1FB35F6BDD8A97C4EE1ACA20EE72081527955D6EC9 +6A2FE32DB339508A0D05AD69AA839BC0D0B7C3B3EE4319A5D27FFDFDF9756583 +A39D0570768314B0B2D5303EF7AF3D52B651093C440CD8AFCE9E27F512D52345 +E292E0E582FBB4A628705A63E6FA384AE2898D324BE2E142716114F158E6178B +5F4D198C5A16608D05C22E647C3025A12955BB5F423563EED4AF398BF2621383 +04AEE3E372C05ADEF6C5D1E5047EE5701884A65B56E0AF429B78FC3A20F72CE8 +F1AEBA8DED5F661A2B336BDC348F8360839E1C2455E7DDB0E190ACA4FA5F4F19 +A2223C786B8E8AE770CEC7A8DEFE523E94458BB67CB2F22555802BDA8CEFD118 +ED2E1BFEE8FFDF6BDF4A61A3E5461B65166147057D47507E7DA9297BE7856D7C +36126E3B82352231A9E9EFC120935438F90913F6DB8953D325907CC8CB0BA012 +3AFD73AC92E481E1FDD6DE7C49ECA620DE1AFCA3E5BA20AADD72B66BE2ECD1DA +70FE7AB3C8DEEC078A034628E68F7B915FE7AC8C3F20A5FA0A80436E4FE0A20D +36589A6F5DB1BACDD8D7325E2F21464FBAB56E729FE7343B02D260FDB2C48607 +4FA69790941A8F45ADE89EF8C1027B04466D1BDAD348A91D5191C7A596BE2408 +5EDE1545714987B4473A51B0C39B1CD9F7B27E7DFC4E828D321E7F40282D7184 +7C5341A9EB897DA4A6C77ACC3FC22B98F40D5422CF53F3E561F781E7BD0F8D77 +F1225D15E96FD9A5723FC0A9E07FCDC18A837C7B14EE0A3158AFAFA976E6F419 +B57A920F7B0784082F818DFE9535570D1C2DB50421D47946FF134BE8FF8B70F5 +F3BD74B7F330BCB49D0CA72C275B39F1204BC7B701F26F80586CE138043BFC05 +11E101A875BA9277500C5AAF134F7E56C34E4704C4F47199F27EE2CC95B70DA7 +BB6D247FA6035D0DF7CCE23B54D67A348528FA551C0CD11BD1B46C62530CD19E +386B27B16A1DDFFB157604C074124374878F9ADEEAE039B4CC91426BE209BE74 +24FB053A5759BE2D970A5CE835D2E462AFFBF4649380049CBFBA8A030135A09D +42DD6EA17E65E0C8BFF3A442B64FC5298C50AD74ED875176EF737F8BE425CB94 +4C7035B5DC09E70A5B35230627CAE6449145357A220400C34281EB9475D3EA87 +310F5D6C14FAAF11356651346907AD48FA099EAE60ECD1E4C9491DCB6519043E +A1D5536CC8F92EA54A4D7FB9D1045284FA76C70F9DC5A23412584D11753C94EF +306A38B474E4F27AE0879819A5BA1FB401FACC0A71678C88BB2E7A8C1D130D91 +FCAD77B00FAC404BA1578779135656287A1F0BC7B6C4D3122ABED9F8B1927D3A +2038D58CA763939F53B8F667DF14811FCB3781B774EE3137B95B456F77E077C3 +F3557D5E06CEDBFB7FD84F5CFA36BF60D0C6BB8EE19FAABD169148FF6C38C30C +B1E354FB043E47F4D1C98A9F95FFECC90760E4DD269F5E212F7E0F6B5519664E +8D88024A5F439DC44C08C2F87EA4C4C5FB0FE0DA729C5D3D53F803B6CFC92793 +B955E961428A9BC704FC576CBD7B77A2E52CE46AA1CEF0CC8987D682804C1052 +D0998F37B2122EFA3932346E5947A5C96E09563D8DDAE2BD95D137155C044788 +1ECB14524651A18A0FC7F0D43F7C8888246BF5F3D7EFBA55F7924FACBD9948D5 +B10027AFA16FD9876E034A9409D9DE405BD3370A907BF9ECBA8289061C94019D +56FFA03F2FC8FFC11882CD5ACCF3AEE9D0FDDECB08433E19F536CEBDB5554947 +7769A3D1A6160689F118B55FEB95EE64391236407596C67E59EB604358845376 +D828EF56639C526F69634AD2C5C13F36F2CD9889BFFEE334F9EF212006298465 +2CDB8F2BC4EE08157E5AE915763EAC45CAAA393FACF3CF8E50788AE1AE6BD39B +49F24D099DC274C4CA6538C20ABBD8BBB9FBE3A038D6798317B938327A7F33FD +866D1CCD14148C95B96E0F35596C6A558077A6C7A2D87CC83393FDB57A6391F1 +875E85FEDAEA2036B1618DF94687A978E6CFDF7944F39E422FE3303270CDAD35 +81F7626BD3375AD01D436A012868C735326114F8AFB42B886CD32EB4A98A19B4 +E1B62B77F2F00548C531EE95F5EA677D16BE65BECF9FE0334757FCFA45F84CED +42F30B37E7DE566107D0F57A3B777E38A725D7AA8A4383BCEFE55CD51AF0B6ED +D1EB1942129CDFDBFFFB5E8D55DAA966AE6A086603F30D400359C2C273DEDEDE +38DE88FB502DA13592F3A7D396816DE8A0A86093E2B6DBA7A77C411F27A478E9 +3EF3166D7AD9133DDF48D873AEF825EF6CB162B98482BD50BDD2D48DD65CC73E +FEF538543B1A6DC11E71A3904A11EA208E70CD1852B0B19CB2EDCD0813D90B07 +19F0DEFFA8F02099B4D6EE3E74B0F0E6BBA43C4A24E6E91E1973ECAB64D313C0 +99F93025AEBBE3B402A87724ADF72937C66235F36A698529F92CFB67D861F908 +493730108FC4D7D9A8E01644FBBEF3B39253B7BFF5EF1DF6C2ACC4CC7F1EFD6E +72F8A54E8D568A484D0E15D2C88D1743D6E225ABD547F7953A5F5E42406F4EAE +EADD36D4998A41CEBABCB1F2945687400C7BE6322E4D924D9901D42032CC55FE +64254DEB51F5C844BCDB03D7069AD72F8F55CC306E12481D0CFAC6210BBF6EC1 +51D195E3A1B23ACD61FFF6A1A446D86DAD11BAD6A74B66D1B7362004FE7C3D2D +E4D5580654FB98A089F7322DACF853C0FF96747526AFE3F896988F7B0144897B +88091909ADDB26726D582235467E7E75372F16F804C7063311402E0F08C41804 +3264D3A54C0795902B0A70CF624827016B3D135F57C192E05EAE87EBE42618CD +CC4D35AF0EEF5BB9A0B78580573458BF8E808B2C9352D9AC844FC13B64EA6A0A +680636D47A0DF610F14FC3B59215B21599C52E206B5038F5AF3A9121BDDB0991 +64AEA5390C32ED5242C93DEAC8A8E398223A4466BEE9AF7DC8EBD1E58E82700D +97AF154B17F0CB94835996913FA29796BF0F262FD7BF307BF31D628128655E40 +8E8A8A6D0073EADB219EFAA3F1C1A040A5CA2B3AB8BF13500250D5DCC6C23A8D +546ACF1B5CE5E71362B9B8B472DB26FDE4624C4D25659F80179E2B840EEEDA65 +262CAE1572E905DC55993DD5652EF70AD17D4FC3651816E60CEE9A7ED5BE8989 +BCC82E24E2B118C176EC340917ED0D61C5195A3B5BAE92373DF0426B1B0E2E3E +07109E9975DED88D1D0A5459D6DBF6912938201A68B3260252091F8C977EA319 +F765D5E0FF6142886632373821EEA024B37604FEAD330949B483E7E9D972B07C +DE877A6991218B9992092462F59EE0BE0342BFB7F26E06AEBA3272D61BA95026 +C1529A435D9F96CBDF8541F91DB2851470B2155C544882D0D0E3990CED8CCF21 +DC8CD12312EB65A48E085935D2B8C0825027737E7E7256AEB89FCE18436FE4C1 +234453520F8E5799ABDDF6B0289178E0A5FCE7E0C9EF98983DAD2C27F69AD57A +417B9539492F30C6AFFFED9CBDC21EBFFAFDDF1F6E9AA9E312988C6CB380CD82 +D86224F31FD16D04E2C07016E99B23F59F05D4F0BCC758B4ABF5FBB2101DE03C +88F5C6971BC83CD764A2045074C31A8C465047FC28CC7D3CEC16EF29E3DDB8B2 +61CD29FAB521D6127A792DF0190F2D5F79879A25682A9452C2A04898B1D748FA +B1B686CD1F9B706657FC96BAB215E471630F94E6A68741CB3035F04F22FA0779 +5266634CAD26160BA102705891640B1171D41BDA8F75E482C62CD3A9D3155738 +1CC4109C167294849466BDC51AB3F640226787E805DCB1A6DDEE253B23E7BDB5 +BCF49FB392113175211BE07E855AF27EF7E7BACE38AB88C1D9BBFD648CE1A073 +9305F78663CD67AFFF0881B355661DB7A48D6F427F31E6E0ED530D55CF5FF3BC +06D2F4FE5E2CE0ADC23B293C5DEDDC39E5F21DE7E629B7A2333C7B0FC6DFE4BD +53FF9F83580668D56E0810CB5830CF84A1E6AE8E4A8CA2EEFED7EDF89A09AD75 +9D315E5C70A0AF0352BC304808209E9E4EFA27A8A9AFB5ABDACB712E47AF831B +7FFE6F3BCEDB86661A9A6B2F515C215276E963997C88E24FFA9593192303C907 +7E9B2E1096D692024C3B52849BD82E0FB5FA248DC46B457A634194C6BA29F2C2 +9FEBD559E7CC6A3B5D9256DE1396EB2C635B7A128193EF783CD2ED5F217BB9EE +1B2D2377F993BE53ADD197F2F12DCC0576B2B0FD6DCF6784016F36F6BA89B834 +262D1E024963D39E279479E1D127CA75112BCFE619615EB6C15346EC3A2EDC7E +8A342E1FC8B8A61B3D08968C00977A4654F036C4B9353DC2C7500EB8F12A2AFE +12491D37A10EBDB0F19409736DA7B62AE9A9E7AE738DA76A63D0CA3C11B997A5 +B0FD5E8C0FDF9759487B3803280F1036B2DDAD846AA162113E5D2EE94B301A58 +02911791528309473040FE0F512A7A2FB30508DC2FA0F4B4220147AB7CC4A83B +7B7A9313AFEE47127AC66CCA2FD6301D58C27B5C49E4C41785EDF404C5D9DC5A +54443FCCB690A5AABB33C7E1874DFE775E39CBA54C3F609065E77D7DB6C34BD2 +892EC469510256C092AD1A8B70C78D68C2EC211CAD18D3A38D571B7C25B7C465 +D8F90E80E19392B13899CDE111D7145C7A8DB5B988F54049E5E94BABF539A7C9 +6AA339CA44B0DB3B406B9F29373A3AE28B5E4544D25D0A4DDBB1EBC9DE4D5854 +2A0C39158DAA88CCA1C2DE5F9E588A35669FC9CCD6C80251CD95B3B75555C37B +19D6E10D1A2EA592D6FFB2A640BE02F00C1A62B5D6B1038C6F13FEF94ED8EEDD +BD4B1CE4A61DD41DBE1EB32DD2E98513AC545E9CCDCDC74F8D1293BFC4F81AC9 +1AAE6611F1F439C52A87C760D08F86D7273EE05569F0D62A88F8C0BA1E6BE645 +9191D1D39D43C9C3565C972A145E0AA8924FDA038B4600A8FA5DD3CA2DA18863 +6ED416AC4133D0E96EAB882BD17F1C995D7822A9A6BD20F9589EA1B99317AA71 +CE08AAD2837F4956C32731CD2895697AA160B039EAE99842AE7C6D562BF0F383 +5369C8A133D6F3C4BEC8B45911143B9C825F8A3CF4FDCB31B97F48006BE9ADC0 +11DCFD1AA424D6D4C5F21A2DED6E5E4622BD2D6419F8B097FEDD3BF4806BA6E5 +5FE67DE62197608351FA7BF17909687B58DC6323356A1560EBA7DAF0DA6C30F1 +9A1463EB04179802CD3D9393867DC77191ED81B045B924AA3F76809565792135 +2D24B8E017A7FF8C8991D060E6F3F6137BCCF30B41A14DB349A677C99D2EC6FE +591BF5CFFA31098AAA62D88E10E2F9844F3AF63AEDED630B1CDDF6FBD581B5B6 +98ED711902189716AABEDBE428594FEE3C203BF6764932847474C12B74D9D9E4 +D18AA4553DC217E0EE86C5CA32398BAAF0955247A1BABCCB62CD3C59798DDC83 +8D248B6E1E9700E989766503D664AB48809E5339A9FD63C537468075FE34D0C8 +2124080D8AAC6D82EC06146ECB9625DD1A1885B4A9338596EB6A4082DEF5EBF3 +AE5ACB49645174BBBC1BC4E64FC4D26469216DFA9C1AB7DDB5364CDBFD50F9E1 +B837419A5B7C5968048618AC453CA045E37D8A87F01B24D30E1F0B905CB29816 +DF958C7FCA6E5BC581E76F03D2B2E67E97B974E4EDBFB31C3851ABD18A8B17B9 +E4ACC739EE9A72EE738F047F5A67C9EE3011E534C363C4604D4C580B7853F659 +7F769BE90A5E2469258B20F8D4DF10BD4A0B69586CDDA5BD08F6FEC75451386B +ED5ABF5489B30D495C24183D6695EC6B7FD554A050A9C7B04D76A783B4346D70 +62A0A947304D81F35C29001F3E855AA34FA9B0CB1A5DD721247087AC30851702 +B2484D7F7C488256758D24318903958AB96AE39216AA7252708D7897C3607914 +DD35B0C862FBB495AFD7AB36FE422BDB7935CE34B6EAF269A7512328D56EBF7E +8FB7698BE3946D38365AB6180F139E15E28A52FF40A1C2C42C7D1596C58B654C +04E43AE282CE56BECB9F8EE264D062630205BD361AC7385380F7D3BED9B0C26D +FC01078D6BBB23C70D32EA798AC9620C60CCBBBCAEF286F52189EE63DF7832EA +FECA2C7EF4D2CA56EF45406365330C898FA73415F9A18E877429C9124982EB41 +FA7159B512FAC6259910A21866470AD9945A0D7FC39D956334A6B30026AA0838 +43E3369BC9C743BE3C29512D49EE3551933CFD29658AA3A2B41E265A68152B9E +6E5ED231DA1EB9C36392ED8C2692FB9E316E96AB83806D72FC1B4C6354E85149 +2655F669F44E49C4110ABFE8F0FEC7821B388436C99C33B203ABADB40729CE97 +A804BCDE32480ACEF760580E7BF94CE28077555F3FC58CAB8048E7CD891A5BA0 +F09AE7E90C64E0374565DF7E03DFEA10198B742BA58CD7969E2EAEEC8311613A +A9092E53147729A4C32B4ACA7AB77A9E01EFF4F294C601A79A3276917682A345 +0A52DFC61AB6E5D3CD6D989BDD8ADCF02272E4A1633B2939158434BD7D168975 +96A85A09BDAA86DC5BCF2088672B5217E87449DA42F66464B49926AC4A047BED +14023EB87BD154073A163DECD7F6380F38C52BFDADE187DA6A92DDED2E4724F5 +D2E58CE99686D259A4269DA7275AE3F43DDF42593750405108575A5037B2F912 +F18584CBD9FE3EF6935CCB5E081982DEC072F7FD6B55FF962D84373CB0F8C0E7 +C990834B6B64934C646AE5929BFFE0609739EC2691048AE17FD884009B975CAB +43C38008EC1893931947B846F7BD5B2B4D20AFFCB1270A27D32CC9E673AC0D26 +E3AC2BA7EF1A4A1A823B14DC8E25745EADF916F0EE3EBA79CB75FC17AFFFA614 +F570D732E4C7CA6F52B3C3A1CC726DBD1CE3E808 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -1179,403 +1185,406 @@ 1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1 3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5 F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB -6501DA7E6D96E227068E993DBB0072F037CA411E429252586CA153360490EC5E -2AA8727E9605FB75714E22C232C05DA77FE4B12630E21C745889A8ADC706FD27 -831F980EAC18330D5D2E46563316C36CB25F50875F7848978142575A3D2784BD -C9C3A029D9600CA3E9D7A26A5DDB8567F8BF48DA2B08CBE7B76EA261CD180CF3 -3385CDAD915A90244C5660C6F9E32E6027D730681B88FC02E6C9B401E93072DD -6E018048D22EE65F0A03018F444194BDEA833D8EAE56C2E5E03FBC7558684C32 -C1353169FC072C0A217D2CD18C4FEF6F6EE2E1D687939244014B09DDD8CF6193 -034D71F007EC89B97005E00A81721503C87B875A6BA33B4D6B2D65AE32141AD4 -160293043FC5425EECEA875CE6F87E7C6F6200B9D52C0E285891C0FF88A0E361 -E7A51574CEE3918B9CBC83B37DEE303859B4545A7F1EEA33C7A4459E6EF15953 -A57D7DE99C7BD953B7DE84BC5C0A60A1768EFBA317849A4A8436F6364BE2F323 -4C99478E2B7C83BFF1AEB394C489CD87D7606181C61D15C85760761DC7F3A81F -AB9F63366378809931F10710C8A595966590AE5A85DFE5DF86D59853546C87D9 -957992FF7C0D11FBA2193EAF02356A1D08F2C8A7AB2FE92001E0EE2AEC0ACD52 -E52D961E65B79F613F0F9B51EB31F244087B484697C3D4DC28550B173BA7E4CD -8D0B0FBE866090BEAF95403D5D03D90AEB48688A8BDDA8AA0E8AB89DD3EB27F0 -99622F21C77FFAA3A8A5A67DD6F16AFF35C2B96957216B0021F2D6415A0F5730 -D179FACB55678F5976010A20EF3C0B4EF5CADEE4C4DDE59A3DD93A87881DAD14 -5E9438F095C9970B2DE2AA6CC85D26471A93BF7D9ABF0253FACFAEC66AC40563 -24CE6C4DEF61D3855985116CCDB53A70AA7B5F941DD21A2DE52FE42AD35E08CD -0FDED28B65290948030C5F40DCFAC51F51E4AA828CDBC114060B7370DA18F7C9 -12378ED10D192F3BDD11375603EC90EE421E4781A41549555F35021C57813161 -145511117E96E829386BF43423099250C8695DB2B891D68B4DB7D949F481CBBA -1DDE08680F7FBC05F9F00FF10ABD21032FC71E7EE2EB4BD97F48842FBCB00E73 -BA581330A21BEEF313BA3E5B8729459393B15B5FF7B63D985F6B0DDF3C90F3D0 -75691B2628BB9D93049A634FABC67137F727E13CA04481820112D953881ACBD7 -9A85175D2394FE355A4A6E485F3B1D69D8C06EE532CB2508D8F3F1E65C0369F5 -F10B3D86E8333AA1228560C37614F8F924585323FF0AA91465B288F5BA39AB56 -27CB01ED906DF594DF3BDE610AE97315B6E0C0786691CA63CD16F32C883B5FB6 -DAE4A1C028BF5D935A377C317C2AC0F738BF2F5001BB6347B1EE4E851B7D4264 -20EAA262FF69C8C01A4361C9CD7558F4D57E14C0F631D4576C0754191CEBAD26 -2598FA77F1B5F8C511953EAD4A92ECE452C5EC23065C812C7C355AA448F429D5 -99D4B28A65F539333EFBC3CADD3F0824F8D04368A12F309A71917FFD1CB30364 -CF98DCC3BD50B0B30CB8E07348267B834EA740352F90312B24BBC22D30D28C0D -2E571EB8C6B7BD316C311D84B168CB4E95C4AB2D6A1351EDD204696C2D728E73 -5352F0CF2504B6A32D07F207AB5207E465239EB916A77EB60ABA8D3BB42A207C -468068A6E9820747D8F4DA73D8352B70F1284545A66D4A5128B96F48AD7F24E4 -5978B267C2E65E0EA8BCE8A8CC397F50C5E0946842F0AFAC4D058D93D5125836 -0FF4BCCA05CB3C4AE932E73878A04D07D431B8940466E58690DB3824BA18AB19 -6A4154392C85B170BFB08A4E2B20A22971BB62BB54BC5476B70FB2A36D319917 -49A7138FCBD505B64FE319DB6B160B1C55450F7C3EB1AE1C1E1596B9FB4601B0 -8293C6D340C9A301F0B3A16BEA8EE0B593E1442E802AAC63BB90B7069D758E9D -183E3B753D8872EF6F584673E41838C891DA7B2931FCB41C2AABA22CDEC44AA5 -23646E86239A2A638EC8E0D7AF8A060F6932C10C7C933FE4C3B8FD2FE068CF15 -B0A0D71564C70C420B3443D8038A2D42EAD34FA04B405970223376E59B8A6DEA -314520BFA5ED90353E0A8DF082478ABAD2AB826BF12EEF1918C1BADC6AA043E0 -90A8DA3A412917629A1CBBF535C2E0DC90929DE932CC286CEE95228B73031E77 -3B0B87E4BA3E539FC92A2730B03E6DF5F947C09B9E99400D5E081BA931FE79E2 -306FE667D7C94545C0311F3D9939F315A586BDF6AE2FEDE5F32861DF838567F7 -530FF07F5A3210373C39C6A63B03CDF708EAF7229ACF271D0C78E02550B0A51F -68B9235465D181CAA18607B10F23597AF69510A74EEA27ACE4EB74EDFDE2DEF1 -93A0DC2E47252E4CEA86790164EF264EFF54519DA5AD87A12177B15776140E86 -D5CE9F213FF3E3ADFD8CD77FAEFEDB903761EC61BBFB2D4E04DBCE5E2A25EB81 -973F8158177C0DCA0426E27E048FF3726702B4ED43053B1ABBFF23DF91720A8F -2233266ACB4850A51F94644F90BFBB9573DCA298C47E77D111489D8B8DA44DAF -4B943A5373AC74CD66A0572A173F85B959A511D0C3EC4A2C339A0157255C8DF8 -7F6E8C1DCB677CC115006ABBF37E4DF57E67F1B6E2D061995F31DADF8618E596 -FBE25F8E0E89EBDD6456E4CC212F0BBE2DEB6E67F64B599D810680DCB4F1AB73 -87016A9ACBCBE0F369DC9E5FFB1E10D6972BCCB70B708DFF31D680AC7440658A -23A460F7AE49361DB66264638C63DFAAE5FD596B78D5B67366694FBD5E0F5D46 -23BE41CFBF87BB1516F1292F4C0CD729C65BA9CA1CDDC19E3B61B015024C21AF -751DE2EBC67F4C2C3141B0356D0143C7A980AF68FF61C30DB9CAA9D037D880A4 -1B456B6811B6FE5E452DBE16ABC3FECD679DFAB214951C5E77581BD007BCDD6B -1E266FED7A65200B8AA2950E73A061775385A6E519A53BCEA85193EAB87D286F -751457CBA382189086E34FE5714F4899E38ECBD456F243D235B9E8472DD8F40D -14D5B68BEDBA0E21DF657524EDAC18DE0B09CF7876E0408F69851B98717754A6 -4B2C1957EE4370920647A67C66B95DE345D6D5718C05132A86BC3256425493C4 -C83E23014A7988E89F223B2A123041BFDB762BE64061DF119440A1256FC72AD4 -2F4F3F979042288CE008E1BDF144FDCCD0BB26F467BBA9E8B2ACE438E4EB7F2D -98B82CA0E129CBE7E21453AD0EE151C4D9D09AE6B32E29CF82F64E2DE3C76827 -099B86E2B64F1B4A2705A259301B221C6C5A1ADE04BE8A1F8022A0D3C1E4F601 -37AFB8D973ADE45BA343DEC97919298B12DAF45D41A36C886A1573071A30A0F8 -0FACAA8F25D8B3035EFC3C1C6A2BEF12A387368C790FC900FC9F74A61C7D4C3D -23400F710573A56685325CA26B23461BF8D1123E16A9A2C107B9EE8DCD39E138 -0E10E36A6467BD5046B6BC967D981B598BFBE2AD90FDCBA7015609344924544A -11E86E02FC9727B2770B732E60C21A7C60EAA31C14DF51BAF8A525041D15D1AB -685B03E7B74A1B97F2D77448F02B3BE93316C49C07B4EE31E7195043D05D7C10 -88C1847E54896977A09E3A1BAD475A3F812EC64FC99A1E86EB3CFC01391E5C7D -8696BA362A7DA2172FB0EF99185C01741F97D66FF795B10E84385B6C9E996853 -5C72B3A226E18AB4EE7FAC1D4C5141C716BCA627E3305245A04D7EE11A7AC97F -59862F5577EAC9D9976FA5F6C3514D296454AFFAB78EB568DB11DDCB1AC4BCDC -0CB0CE0A02AE97380F9978FF55B10C9882279AD6314FBDC587FD9A7E6E443773 -72EB7C52A118F79EB4CE3FDB2F666D43227B3059999CA25DC06ACD657F4768D8 -C82CE400837C08A2935F430987348A27CAD51AC8639CDBDC4C911ECE62CFE94F -2A1F28F10EC80A3946566FB09F6B8731EEC4571522ABB2A90792339331F3FB1E -EF0BB328C57D30E5B1849B6937698E49ACA84FFF48F716EC81025091EEE4CD06 -A3404843DF013CCDFE867C7CF2A29C1DFE96DFDC47B65E916070E6D019C0A62E -3A1D5EA282B3702B1B20729F4791D90E6968342C440622EB34D774BEA2339FBE -F52C4655ADA9515B0A79A2C4E628E6539E57D2BEE0D7084F74BFC2B3C4B36F55 -7B9003ECFDAA58BC265C1E8ECDC78CD47038ACF5F0C37E7A076A8B16F9F712BF -E16240917C281C41EA3CE87CE4C1C976711D83374974D37A00FFA7B280D76FDF -79D1BF415CE8686414CAEE79D2FDE623D40A789A98DC2A6B88255A67717EBE54 -8E0FABA8082EDC2AEAA66F509CDCB5E73BDA6E20CA603B83446213A967B77C99 -2D6A58FBBE0159CBF46E368A28956E45816173719983CD1B775C940CDC769E71 -3331680DEAC9FCE0C9FC2B1CFCBC6C6638E02F93B4F51219A6FD277024F8A61F -1641A540CCDAF1CC25EF0429A0C9D403F6A31852249D3ACCCF14E4110A58399F -12FF0DCB0B4FA1AAE66F52C9A6C6718FEFBA51292F2D48A762197034B06FE1C6 -B784B4DC6AD9578BE38A33896B6C528208C33BB5482E1D2DE4217743A4DE46E4 -1C2F02BC25B4BD8F2037D362E9DC6F7878B77AB6D3DEDA9C7E1EDCFF9257C7EA -B42065CC8BC029FA1AE9570B17811DFCFA0E23A12B9C7A42444A02A8A2CFF5C4 -5013A984668C3BAA0B4186182054E8CE7EEB9B09DFE7A4F081BF16A57D26169B -EFA22E7BA38AAE8D01B1A894904AAE56B79DC018E63030B58849FFF875A675D8 -A52F9606650450A452EC0C0D3B494506903DB65BF4BFC8BF6C8B79033737BD1C -1915A4451B10CA2C5195458B4E6D193CB1AC7386730AEECD1184A69B07B418FF -B0E5620F8D2ADFF93CEA7F5DD4E71FC497FA6F64AB31D16BC00EC5F8A01FE192 -4E7EF5104EEB6D098D617268E79A4A2B9F4869EC952B4D6887FE9BDB61D26397 -69AB66F43996DFE771736F081719B6987C5DFA86B91F07CF1FADEA6390AA9B4D -53093D427DA39F08096161E1742740639C332FCC40DF91A295A671782CF8C713 -0FA36B95A55406BD18FDCBE9D1AF9492CC5C3DB7DCCDACC1DA5D40F2CC2C365E -F99EDC21B3EDC564D282029AAF62A49B6BA5C6937DD1BB15E68BFA698549EDFF -BF0D4FB2645885BEC5B79E8475C43E5DABA6B60E72E31174054724F711FF3884 -36B27B2DB7677F04A704E7427B00FBF8880C0482E98893E23AE0ABB7CE35F2B0 -3662B322718BFFE777F395D551E13CDB3179756FD85B1F132E62C44A11340E7D -B8B274D22D0493F70E8D587356B84D4238439F2E816D589B04831E8F8CF691B5 -98DF446720310D929B1C8E29C51F2FD1C70AB8F8FF4AF21A05D3A520D44554DF -736DFD865EF1B73A0C06BC9E2ED21C9D1444D3F41CADC2A666045ABE51203C6E -BAE3CC3C3F6A482868951970747C45270070D2FF52C5C9B1953F845AEA12C02A -DB5AE7B1E9ECEEC8B533182B46B8ABA08D587806E88B87C1272877C3DDC6B14A -2CDD31A1F0B8555F59C5CF6A73244B70F5022683A789F7E0BAE3457337B709AB -CA88BE9ECA5D0389275946CEE8BCA349889E64D8240FF5AF76EE020223AE5E25 -59A007E200CE8576C2A5646F0B1F35E4004D132A123CBCAB8522F2E0CDDF17F3 -4BAF1FCC0BA38648EEEBAA38C1A783033951C59F5D52F3262DFE4C6E9E6D8E16 -F23015385A1C4E06ED360BD33579A6B1D1B119665B24294A69B4ACD82B5C801B -5162AFDA181F01C80AE0148867FC419C7D536D3ADB336780838F34CAF311279A -E4FFBF6809892F0BB1D090C678C1254A9C10DDF87B3DAC22305907C982AEDA69 -32366E4F2AC672D65A2F71A842C3D6694640DD821BD4D9C4E96E49799322EDC5 -4FFCC0D50EE4FFF6F09C935542FFFB8D8B7EA6B647BAAF44BCABA88520DE7AAC -2A4001008C5CD2A973129B418D800F9B8BC24675C800713195C4C2DD36DF73CF -35D69E71B10D31C8DCD84A0E2FD96EE6CC79F08F4DE10E04B7F2E6145C2B7409 -D52C6E3089D6DE31BA5062113DE1063F954A03B80540EF62D4F9F41A957A90A5 -E2E64323671EAFF01D2A5B93928F6346C41B99B866B08AB6420396EDC8320DB1 -ADA75B667AF93D1CCFA9EEFC5BC0C889ABEF879138A86EBB2D5620E8621B924C -F60AC2456F0FE9E6762330CE743DA37D2CD9EC859A61521D6BF6D3B3FBABE3C4 -E7EFBAB21F0694697B87FFCF6089E585B8CD57F4D7C22A5E1A2AAEEFA4FD8623 -333F90E77DCA57BFF970D593B3EDCD64B40EE3C27326661B4413BEB7714F152A -935427525E08E248193142B91CEEDB3B0209C70ED9FFF57971F524026EB4A194 -5622DCBA91A6BC854B3B3272769AFCC4D2B64B7D71619FC1F39F435835C0AA10 -0FF412ED58C0CCC0BB1888A883C56864912E693441902E66DB83C56956C2E7BC -F98621BBAD7F5117FEE6CF287A5BEEFE3F5959108A88B76365A5ED6039B6A798 -408FCDE095A872463F33D417EDE584D34B721118D3C29D22E6AFA7BE5D141139 -46F3E6BBC0AF1CAB844822AF1AB941681481F4E763AE6A1F7CCE0CBFE337364B -3174464E6C21DAD8F3BCFA5CFCDD2F5FBE00394C6BEB1157580707CCE8A81DD0 -9E3D37025413C47F77BFF4B275EB40FF05F3EAAF70AF8D4B9420AE2E1DD66A46 -A44BA9C7E6991DAA7CFFB406AD98CBB1177775A1D6629FCBB6F60C3942199455 -70B3B93579338C424AD1642B9109502B232B42E50A58A7055068E43F56B9BB78 -5D387FEEE382A33A97A3A7C29DA4DAD8CE9F503FBB85893E7FCF18238A83525D -1958B38A24817BDC440EDEB913BC3C61EB2022A71E7F1D8D683A36FC1D84C570 -2BCFC3A3218C9C6FA9657980BFD482DE8DC4867959CA93B46F2887B1329DB496 -F69C4A43641ED3842145BB868A430E03EAFBE786B98355527882CCC8B4EF734E -BD0DAAD6CAA8B36A4405E5CA9FDB69FAB8C5D85480D81A83EF6038AA3FA8D687 -017741F80B94CE67F86A1C4DE3E3C197320568238C7A7A1056520646A674C3B0 -BBA0CAF9413FC95E938F46D8588A94FF77079DB1698082601DE0D71003C74392 -68D48A8BDAEECDCD2138BAA3CC43F83532F27F4B20AFD658109BC2A26D8B6C07 -5DF873C2114531AE6E98753DFED7214D634A453239990329F08B6F22C32D097F -85FB45CBCC189ED8FFA918DF0EF2B81CE018B93374A5BEE3653336C68AFC21C5 -77BF87F75199D869B68DC72A22274D883D836974E0AE8A74FA8BA55EBB024688 -3EFFFE119F54B75E5BBBBB66B46B7E77227E680870DE9EA2BC4B7867AD7F3512 -AA3DC6E37E89E420CF097F26C7CD717869DD8CA401DDE7375FFF18A35CADDBEF -DD027E352DD8B99893C37F1F84C5920EF3B3B2CC254EC794FCE1C8B154866B5E -E3ECA7870521BA860031931B924E082AF12DED9962E5E9E59C1FC08DF1258462 -6A5BD8BF23648D1131C67BAD67F17E5276E82EF31C44A5A9A5CD664EE85F9CA3 -FFEB95982ED1FCC1EE9DBC11368EFFF6C53AE3AC805D78D3EE4BED7DBE490920 -C5542128E68F9A6CF46D1693345C9822C77303397822C3B3F7CF5B7C39A9B606 -C5C57B4723A3B9F15C4B4B1BBB4D7267EEE3098285772B1D4CF1E15277EAFA84 -3B54EDC3753F347AD7EFD7BD292539FAD422EA17240A8377D894475E6ED70094 -7648F9850E1F8F2BD5F7C3AB23BF64C692762DB1727E10CE0E6AE83295B91349 -28617E2F90124BD97F19951C55E895767AC141C421380AE9C311D41E7CFF7DEC -880263507BBF160AFC57F931995CA3CD773DFA34654899BF1FB5FACB5D39E67B -FCF44618A2F553ABB7707FCA8C118001D9A541D0FBAE34DD4978FD40362E03EA -F9C9AC0A6B23E3911F8E869E06271640C2E9A0F6F810E1E8E6F35099EB5D238E -78CF6CDD08B6CA7895BEAA8A3F42546B7BBD19E99518E94D83CBC5AD2028487E -FC3E8037D954767EA744A08388A946BF6B48399BAC6552DD0D6D81C4639D4E4D -FB3AF3F09AEFE96C24D5A73B839AA47AF5C2B6A1C2ADA3B5299B59C4D39FC3E4 -F537A1D9739BE21DDA12247DD50EC83A24B335BFBE60A307583DE9EDC6A4B41E -F95306F407890B11FF762DB110C81F1C40558E23FB49ABB698CD00AFE090F590 -BD55F31056D5499B2C5D8B838421291EF18646A5791164ED41061DB6B44744C1 -BCDFEE00A092033DEDB0CCFEFDCC484A08C7AE206821883BF5EC194FDD158C18 -EC56D2891C5517D274303F10AACA8524C43E88108FB59626DAC8252A30AA3A63 -CCDAF5D7F2BD922EDBE80B219706E22E6F4EA6C6ED2BDA5FDBA42C3C7E615F7E -85A9CE4784CE32BCC4FF9F14EC3233E7728DEDFE0A65F36B43CD100DFC0D9257 -F027C0F1D42B79ADCC90FDD53C50B092CCB89BC737A0212AA7C7B2F1E234D97B -7CD5651919685521D8799FBC97CDB2E6718E4840A88CC6BA5CCC9F8BB4DC2B7F -13EF9948947FF035E9DD4CC81994F22CC588A08E3DB3BF1808B1B8ACD5DEC501 -DFEBF7B9F0C1E9098710F18BB28324A09730F819D2A1346962011E3325A06EC5 -0CDE3B13A2B2AFC1E88AD6AE109841216AE9C0E34BD4180D31D500C22A2A4D56 -15F720C054CBC6FC0CCB252010B9D1B30995A9DCB50F3F15FC4A2ED963279754 -A51603672403C6143D57E5FC97CB977C9B561F50F73F2A17365A12FB5606D75C -F85679CE7A4CA183915EEB79008942DDEDF0CB51FD786C7F4EF8AD0DBE291D8B -235160320998FF12783922D32C29244763F9B7B5894BED6B5C7793AE22AC11B5 -1E5D1F3BCC402237B9506589E6B8DB0638E730958A8F9517D051FA07D98882E0 -4E4C3AA9E031515DE0F413B9ACF75685ED1D8CDFE44B21FF5ADB57FE6D109E63 -F201F8FF8734B60FDA2275BEDC077308652AF9EE34674455D9C5FBEC15363D30 -973F411544C35F6581D7F135BB3A2B2DE6B286DCBC29AD9B1F28A9B25934DC4C -2DB7BBC6D6B4D1B4459370E29A15A7728061DE3070205FB5D6524521995DC28F -AA9514F37FA6D55DA2482E56C995E5063755123D151959DEC4E406C18ED4B052 -A8992EF41208C4F6AC5539380EFD70240CB1F6A46B451690B32A91757EBEF5DB -4A94DCC49AD7EF038E87BB6F3DAC2B4D2707BEE805BDDBE96D0249C55BD4C140 -77173BADFEF9F85BB4D0E2194BC65483EE34CAAC79530023369275768BB8846E -CDD21414F0FCA20913EDEF6160623E28B6CB22EBD429778E7AA44D20EE944DF0 -D0047258E71110ED3A398DF018009C92D3B694337CB5FA99071B9B1DA40CF5DD -DD478551634ED561834104A01B7F6E49529237262080A001D121DACA8B5FE018 -B8C3565E1292A66B341CB33B1B30BC9A8E6B9682B0598B4AAEB34F080D58E008 -242D14D34AC61F925D0208EB26E47985FC45B1B870AD1AA618DBC877A4947F97 -0BC57C1A9A8816072B36222FB66F29B54BAE35BDE6809ED17CB6440DD4FA6F70 -7679B10C2BED86B468DB104141A1837665E512DC97F592550E85AF86BFFF3F99 -AC12ACB75B2ED3336B1D17EEADDB4ABE03D0F1658A57EA4861F041346EE2CA40 -A729730123EC61186295ABA4134F1DF5722DF186546D2906ECBC3430E7E3BD03 -CA0D6159091024728783D68001DE7187171E28DB5907F084A94D2462E703EDE9 -590583BBA61BEA4B1161BD4C41FE39BFC93B0FBCC5EC9FF4AFB5939F0CEEE032 -FE5AEE66D56547CF94D88C2EA7BE5C78D4BF227A02AA229FEED9BC5DB1340B02 -1B9E8FB9729564C3EFAF35411B7B28941960E5DD45C9DB122AE3DE1076E5AA31 -F7C6DEA00FC2E4E72059547CD89389E8C7C980829C896FBFC2DDF77EB3206BC3 -F1E21347942EA591DC3FB59BC8E2BBC4C3C657305F30A2D18DF93CFC0F0F0216 -4F19A938BCF2A4BB8FD1F1B965F22C9729E94D040585936C020B24289066E742 -D1DD955A35056402B40B3EEAB83A29F47EF3B229EB5EC517177862FC86EF08C8 -BC4D9FD57A0D8FECE71A4439DB8954D836071130964105DA82607FBF2C9A1810 -3BB2D7EBA820809E677FC5952AADECADE3AF4AA90BC15F40BC86F071875E0C2B -0BE47794B817AE5FEADE9E4092425312A71087A7CAFD886CD39069BE426671B7 -CE8E4FC97F7C16A702C6F8FB677483D7299BB4BB06EFC04B7A32DC93075B79F1 -BDF4470621FF49D372AB3C5213E5A070E27BFAF7169FB18582BB796671D539D7 -CA7F0E072B5A394FC2B6587187E1349F69848D5DCF048E71531B13F73895CD7B -7D81B338AD6D445C27EB4C4D76C0B5E64A07D03BD7D8CD3A3DB491C2794CB031 -E56618C5E0D65F562ED857B81FB384228FF762CD2718C723B7B261750E25D0D0 -D26060723382911F867F46AE73AD67C943C44196997F574FB36D1FBA79E61A32 -D53145364DAB0E0C6922CB21CC3B03418747546E48397A7DBCE9AD89193709A6 -B85AC7F6167D7DF1A6B72D876C4AFF990CFB68B83B0C4C494C7F8CBC60B1E7A6 -7B3695A2CC0FA011FADD2527FF4D47726782C19CDBBE2D55BADAE4350B053B8A -1EF6B385ED4A0A00E1D0DE7E4F74BDE3497F13D80A6C30E833DC6FCB3E597454 -68EFAE3D397D4C8817EB082DCE98A0F4BBE0F39C79F22021C84270AACE7E2E12 -617F4FD655B9F5BBA5D4F8AC935F6E2F5007DEC58A1929188A9D5FE5F4C4AB03 -662ECD86676D7CCB50C0546426C8B92864019A2DBCD4247BFB904D8559F2A9D2 -0993D260CF293B40550AC6DB3A93EEEFDDF7D8EF947E1B487104E0D0E4365BC3 -62FCE7CCF52930C429532AA2E3FE62AAE9425A97EFC23EFAF6DA75C98CDDFB18 -175006EFFDC2A6ADC9B8A8B1D343FCA0155D476E5AA2362F404B00F493D97DCB -3AB5CC9ED868D00939AA1B55E0824C09A1B7D8B38B98ABD0966E73B5019504EE -7C3A6EB0F094A3760C96658CACDAC422442B04957FE7A61544A5F99C6F7BC695 -4658AC5403D3395CEDAE6ABADCE9F4EC6311FD92B340952DCC23AA72B514E163 -2E87B7F5588F4EC9DC915BC3E6BD8994BD380F0ED79C4E47DC0DD89828D65709 -29F085518387CF2EAC62D2505DF0CB47D307E1DE4F0A147979C6D5B93327B7DA -4BA34DD209946E8022C11A4E0767FD809A2F628C73B0A79201C40281BE044CDD -5F9130EDAD2CB86B1A324B824C8A1A60D34FD32558089C4FC8E70AAF7AAEAD06 -48C7F711B33C7A421C1B4C0FDA2392ACF4C850315283E86B0DCCE689AC9AD3B5 -91E91329B5CC58DC2CB4466D669E956488262A12DEAD838577743D7867030F25 -BD5B2B0A04C9DDB6C904E40AAA82B54542321711ED1D80348797F35A093D3D77 -3560B459F177D388F4855C82C277179834A94D5B9F4C974DFDF3929A1BA0B301 -CB3558D6BA4BE0B1EFFDC2101352FDAEEAC17D60BBDADE15FC093161B872F98D -71BCE512AE88BF012B3F96E02EED08A7CE8802D409A07C27F1F3AB40589CDEAC -99642D6C6133BFD2F6B1B86A80CBA0CC62347644D25BA14C9E24A53DA2DCCD1E -8B0EABC4B0500D18AAAF3D634D5D1E3D23775FC02C91B1D5C600986E72185A65 -F6C926A5E48E4EDBB4862D9CEA4F491C0FE2DE07B9055975A6FAF60B692D5310 -B6EFE781BF90EED228709404DAF22172D7CA8B050EC477B6ABDE89E6A53CA72C -5B6FE5A099DC209AF9DE1318FC114ED28E871B705DA184114CDEC65EF79D489E -347718519EBEB40CE19D3CAA1288413FFF08D1D6B42A8B24E5B00E259BF2EF56 -600EC9C721981559BD0A443F1EDB12DD99401AC2C5F84593FDBBB1C1DD654A84 -562D8ECED1A1E456D56D47D60DE039639ADD3FB1A342F4C3A5071ACC35CBC60E -F6F10ED429606609B68BD3B3D19F02F652B2DA1EB2884C4246BFC49108D3B95B -62102EE49D5FB31929C0DF59F98F5F36F07C5C7E9D0244991D2A1BF8ADBF158D -9D21B928B484102F7882D8A0DD1B66B9C0DF4C95A6ACDDB70619FE403AF8AB12 -56334E17E1E4CDA7E4E006CD042D9FC9F83694B83D45C9C34CC0B945E13ECBBB -1C74BD8E12558E49A5875A64012B7B5F9C2EB2D50B51C21B9645BE62CF32FA34 -72E85AC778705A888355E9DF59DE3CA815264513E20B9F211D5CFF80C39A3DBB -D4602AA4C81461514E74AEBE92E88B8DF861465ADB524AEC40C630CD7DCE9A54 -22FF67D94F13612679717BD4012C52A614BFC5E7D6D067A478BD19B6B25BA513 -2589E8B402A4DF511A3239B1E657FD93B3918F05D6AEDE1A27B640F4CF54E698 -820368D069F5376EB9E9486288FEF0F64683096850A6305B648A527E10BAEB5C -D1660D266731950CC130D634AED2CC2031CF18A9E29E1D1AE56F6A449EC3C4C5 -54EB55F42637D974407202438467C45808958670D5A597883591F81F69B9AAE7 -F95ABD2C94F0F233ECFDEB7CB4C876E2B0279F07786686E1D55652011495C4FF -5C09DD11E6AC3419E53E778FC951592E6871964CF182963CD3E2E2ED54B0387D -A65CBF4C3786B9FFB4FC9BE817BA5ADF7C56904E49D76C050F739D8269A0F367 -C07D29ECE96EE7EC9409A5F815F8BB27CD8ABA52DD41D8406271C2BA96F9AD78 -039042C71ECC942D7898AF8DFEECEF2B7D93230FF418B589EABE2CA606B24263 -AF595EA9A092FA271102B6B4A5C2A67E5B06CE6691D36B49A07F1616C79DC6D6 -E86D6734E7C3C50F5D879606627A8F22D92661567C0EF73A1A67657C09493699 -49C7A748B0DE88E6C99528AC4D6BAC414EB025B58CBE163B38308BAC4E08B9C2 -BE464858A6F6450954DA2E5782B78BCC63A28795E07D2C60C10806E21B90B2CD -CFB625AA73BF95A30AB31EE4172EE9976B307C002BE02BF9955F0193507E5071 -316AD5A467DEAE1A1AEF879C7DAC1B5205EC133DDEB5DD6A9E41D9BA6FE56C88 -CC865D56E2F305979AEB7FCDA4A3C98EA941B09A0AABF4AE5EADC62F1B0B92FF -0D856E7EB38F355A30B38F39872813261E71A3D1338A8A5BBCE26B874993AA09 -DEB4FF1D4C3F43FCB1972F703BB7140C348A64FB02B5E29A07CDE55883E4F2C5 -702D5D9FD05EACBB3411584715ADAFC54DC38155A17FE2C4D471EBEF717482D2 -10DF613440926BE3DCC427CB106727B12B04464E3A50A49575321F84F64B708E -86FCFA5921A52B2D459240AD0DB45300715069CFA36E6FB4BA47CCE6856E8B93 -D6A2A43BCFD748872304AC3BE3D905A54A47D303CC1A087B03A33C0763010F56 -AB46520CEDF84F146EE5FB86BE086A472D5C0684FE9A1A633DCFACB6E79CD0C3 -0B1A3B29611306F024F34AFAEBBAD8C18631A68C49FAD20E9DFEE55D14EC95E5 -B5B4A5089A2ED0EF848F88B421857631FA651DD99D87706F4F0FF196ABAC6BC8 -8F7CF1268BE748CAD300D6298BD43283C487D0D6E340E5ADA956498D28AB457B -46F2DF314922B58CBFDA49200F47676319039A68899BE5D2C78EA7A507640402 -418C8A6F8ABD38723F19E856774316EE90E92C3AF1677D083398D640DD20AE37 -C88DF64010339DB844B5BD2A61B298BBE52B0B2251F16668F8E94D6A95DB778F -9B4BF7654EA0CA2A418893E8CA6B6BBEE0BBB1347D3F3B56577C5AB1E76AB97A -E48BC675922974A24E0A75122F5ED8CB912B883A949E9535D41AB4426AEAFAA7 -4CDB413079D7D5C72D9433B8DF1C046E1157849FF78D2C1FD45BC4B4E2927154 -D168E4E33323D2703300F7991165B48F1F95B419B0DC01764F0BE63D861E0E77 -D339CE777BD531C527DDF660AE1AB5E7DD90C430F66E8584BF40D5DF54AF911B -B39EAFB983AA0D038D227B66021DD587EB51FE1DB18858BC362C438F51774198 -10F1EE25B8896097AC44B0E56AB1B341EC95AB570BE4700DCFD82DEA4664BCBA -46E0A9E7C7C99C397E97EA27A5AAE8F6260158235A148C849D9992563F401019 -6460B3526AED81B45B9932700C0D1270689EFB94A5E47A6AA094D9F7F2FC581B -D164CBCBC08CE9A04DB525224D2731265E6E54E278D2BA3E91C3AE6DE2BECC5C -8FBF58627D29CC1662704DC08735F36038E54D783CED5E60DC2CC7D731CCE092 -DED3F30E3B363E588E714F8A3FD537EB4C95B00FED97F9265114181ECFB39A00 -8E060643C6D238C0F8806D9C8810A545620F7AFB5CF3B504CAA7EC13B13BA1EB -04F754834D150B942FEC94DD8A5A6E3AC6ED86E1681BA52E9D910D68E31C0FE9 -6E28DBC93BB5A6111E524D04DDC2B49B8DB82883028CEE5EA40C65CC5ED0D886 -1AFB444D05B58E67408321EBE3D4D17905459D71712F81C6BD43F46D11EF6AF9 -5046036ECA41AC72338AEFB1B6F0EF3CBCF089655C12F564451C605B2DBC0E08 -F3235BB3DEC9322BD75A9928A53DA829647DDB8F2795D9CCD76E764EAA2202F6 -01D1C65FF46D5C8B1044B6860D22BE8B98B56B56F3B54EE8A9C2169DD2DDC73F -94EF440A000DCE60581E409C49165D676E6A32CF9D1B23299991493DBA38614F -76B6A5703FC9C27ED286B5897DD5539FFA1979915D1A768A6D0C40EEA679C048 -D9D870879EE9C46E1575E815E3842D1F1150ECED41F60A30BCC20D53E8629799 -04B60E21FEA41F1D3084E7A26FE0ABC0555C5AD4A92F2B3F691D60D0424BC7B6 -13CF40D7C615FB767A9DA0AC4582AE0C1B67D62E20F3C698D66D7BAC2592E9A7 -F38F683804AA0052527C0D3889E21D6E9DFD8600A3257F80DCCE0D128CE442F7 -0CF351B360DB45B7D04CCEB3457E444E0C54FC5D337531E4131866D6836F33EF -066937C7706617311CE8E1BC54D3195B4CE7B1EDAF7EF57DCE8BF17FEC2F3157 -BCC8A5751EA89F5F9578299504D344C1A5951083609B60C8C83FA67F5F44154D -862DBECFF7016083BDBAA480CFD5C63ABFADB534A7CC8691C40DAB5EDF4331A5 -A3F055929456774257BF44BC31C383E43C3C8E37E18A4E7C499F72FB29A63A23 -9662649680CD9009B1CF9D5A38322832AC98BCBA05C4351007CB2549B8008576 -4B496AC8487B43F3702D58834F0A0477340C9FAC8C4FF9D7D4C20CBCBFD915F5 -F55617D851317330636B302D38140E465F3782F45561C18875BCB2FDA48CA6EA -71B88FA9A87918A343E1F2E0E759884C1DF5FF3E7A51069FC427D7DCB3CB162C -2AE28D41F5CE96FCFA37A5E5750CB88FEE027F97E978EAB9326C64B87FF19626 -9EA9B6A7316CF6FAB3A49AEA2433FFBDC202F6564953AD3546101E295C2CBDFE -A758DFD9912E8096C22C0308AD6705F7807F151628CA9D66FD36B48D49860F53 -064096525B0028D3D6279306872A42BCEE965FD73F9F41FAD18ACC569BA23F3A -F72CCF9A09A69F49A1AD5EE5A8B62360E363E0B1113E008B16D94AAD5551DD1D -E689CD903DB992FE50775033CC10A091FCEB9692D875F7DC7BD179BA5E8FC955 -ED7F6B3A08453B03F75D825C5815815915EA89276251D1D03787EE0ADD5B7144 -4076D29801085C7B128C5491C7A2DDEAC62B54330DEC660403FDB73A8B267094 -DA5BCC57E428FF59EA99900E59A4296C676CBCD11C3EDBCE68077224D7715999 -36F3D3FC2240BC2CB58A5EB06C5BA59EBF9823AF6FCDBDE93CE2E1A5A16B02D6 -F5ECB676FFE824061B02FBA31FE7FB7B9E9E065B9AC4CB23C96DD0764A6C568A -D858FE44B23F04284F9009BB75751D98BFE5147A1F7184FF8D36AA1CA978D694 -F72DBA10074ED7A82B322387A91E1A4F0070B8426074A584ACC462D284860457 -C9BF4790C5FA7941183F4D9C6D0C7017F3C288A8E2DD5367499B1DA0D2A88925 -3F2A2E5AA0FF572681B1C92E2589DA97AA2FB527285ED3633C6F289C67B0390D -50B884BD5759E7EA412F75592791848B2D9F3CD06497440B1093EC93095A7C86 -6AB1E8752CAD96C0076B0F9EB4CE2220B630EED701D1A3796A4BD3FF35293934 -A69CBB8A74CF22836CE5200DC14E5295D6DA56A3AA44A004357F575E5547ACED -A1982AE3CE7EB7A59840DF825F970A11E563AAF3974F547F806AFDFC6F0F4BAD -88F56A4F8510E0AE842B9BF551230FAE47803AC5A959DB6B62F291C6A040584E -2C4A02D41EC7DDE254F21D6091D62D8598B6697744966BFF5E86CCE46D9AF24B -6C9AA017F944D42AA02F6775CAC2671BF2D4EFAFD3E529EFE3A5595F01D66408 -9513C728725B3CF6211808898E4C28A3F643B6E537D883A738CFC13B97FB3D23 -9AAD448F38C6267D36C0FA594AB6FBB577ADFDA1722A9E0B598432C8B4E2AFF0 -38DEE9F21CB910657C1AD8BA2C821767C0158D7AE3DEEC883372DEAC9CE7A2DD -C440B233FE7093E2B03E702F57A082F438EDACE37F29FE29849958C5079DEABD -7954EEA31EC67B0CAF068FF58C731AE5A77607D6FE13472C5A70C111177C1E99 -2657B20BB0D01C7C638A1E588CFAE59CB3171B685522FCFBD4330C941079C9C3 -AB5D5FACCC98BF9691DA89AF9691D20154B1805AED841931700A3F7F25924981 -F6521B0C6E55C98AD91ADEB1174786A6412671C602DFBD482462AE2F1DFCFE28 -7AD206FD98F5238665DFA789A4EDCC298C64B4E72C0C1B457BD64B4479413356 -2DB85E29E862C2AD57F150E1CA943D85D71E82219E735C7D8EBACFEF4DA9C725 -EF436AEC25D36C9E9D32C67A062605E963BD036886CD9688F7EFE6434A29A2C7 -730F1C610F3DBD29A4A71EBC3D179E3BC1F48657E2DD6800E5B1EA7508A8D439 -11C3CB84980DCBFC33875E20784CA711B061AB5957CA59B43AE4E4A44B361349 -823D45AA26B51ADE783ABF1C32E49DACEC7DEDBDCF2648ACD5A0DF02BF7256F5 -FA2F054B79A548996442DF9205F4F3F2C27607D11B5EB4080B3FC1BBAAF8CFE7 -5FBB35B87B540546203FBD90341CF38AEC32B6BB46ABA368EA42C69BC9834A8D -E915C163692174A5D51136308383FA693024DBE6552DC525BAD6CFBF9B61D2B3 -61FBB94AF1507EC144591C621B8DAD5452BD53B0BFEF03F6B9D53736FDA5689B -A9FF78255396DF20AEE452D5D3D2978B2D681BC60506ED10145ABE6B719CA44B -6535DF1E593498F8C6742B84BE204883ED8D8D624D52F0FDC9C8AFE1B7808519 -1E056CB591B6A2DFC4AA44604AFC512151FB0D3A3187FE57F409F04092035DC6 -1164C06205083E54B6036D9AAB673FEE23A3688591DA15FF698B25C5B8890540 -17869CDEC5D3B4F12E83F75C164F26FB41A0919A412A447E6DBED19843A0581D -B73610113FD75D28EAA34F2A47D99C13EBCACF96DBDB867D83EEB53488E3478A -63A2EC583536A3FB63CB406078595F220F5BF53956116F9FDB05A226FE01EE4D -C28A48A250CED2AFE801BE10029013C9685D60F6F74628A5F5961E4708EBF3F7 -1EB5DF7837356E20C075DFBD15D9891A1A9934A585C0F881D104BA927A70B832 -5CD9EDC7E9CDADAC7BBC4DB1ABAF6547C3BC08C6AC73CA345AB18A9651151CF7 -4752C8E74157D3A3575D4D81FB937D0061192D1643741CEF3E218272FCDA17BA -2B9FB73A7A008F91248F5C57C91266CFD1E7119ED0BBB80D009330DC501CD8FF -423AC58BC8E1AD0813D11354BCE3DD1F511115C9F571E25A58E1A42D4B2F5C6B -F39BBD15B1CCAB68D7C8E75634C69BAC05D3DA6A2D54976CC3BDC370F3274326 -98CB0EF0B999032718381A4BA16220F8088E87F3B0282C8011BF2A8BE5B0624F -10C83F79C1623AB3D1D62F1A030DBDD3B400D64BD7D1EE88695B5EA257094B71 -38806AE74E3CBB7615710E2D75428930EAB82417B11008D3278C035152B527B4 -44DFDA85769635DB0650CFFFC6650ACF0E7873A53464C5BD41889A2A89F3ED47 -0C4DEB5AE511FE61870B9EAC40952E531FB6216E8D6CAC1A480774C0EDBDE9C0 -B7C880E28F9FC77F853183B4444EB15880E8EE0AA9BFC908CD9CAF6E16921BB5 -8675F3B3A4FCE2B60EA3A11CEAE4D0512F383998001BFDB48EEC41A6767B55B5 -2786A2D2A35A1CE437A29B023AE6301D85B5773A31348976AD970556AA208158 -970360327DB5F65E210A9D76525E44FE9051E71C0262B84F2C54E0EF4F280FA7 -69511C576842AFE25D4FDD651E286A94728CB56DE3C79FEB6B4727A11502F876 -FAABD8DDB97AC18F3F19B272C4541D1807DED62466389F92AFAFAB9FED162630 -6104796F4B2C9F26BF46F94100BF569BD3755C35CDC08A1C5F03A4324EBA28DA -B2A41FB6562BBB85B6444B98C90DBAD78D79FF7293280894AD326FC95E28B435 -BB74C1B7DC963D201F2CC9B5C224023D77C0B2C69A497C5314DC418B6519E25A -197D85EF1430FEB760478E29AF6D9530817F777384D3EA17FD4AC22AB1F81B5A -19C853EDCDE39174062A4A6D0DD5A0206D6C577D148E103EB5BC30890110367D -537186A9E8D70AFD70 +6501DA7E6D96E227068E993DBB0072F037CA411E43A07E33F7B09F2857AD105C +08EB767A9F9C2C040F3E577B74DD991C4113C44027A60B8183F23B527D74BC89 +CAFD464A929C40B5EE63D0B69B5DD928C52D0F9839232AD4E51591D15C32E331 +78CD45AE926E05C5FF0375F97B4329729976E213EAC877D8B00F85E3D589C589 +24507F435755EF67755684CDD0C0AE8771E554CD0EDEE97B77131D02CA1DF7C1 +C7F448DCB5DC4BF378B0317D21F512226770B611A3EAB0AC35738266CD03C04B +8113AC9706A39870A7371832E9955BBBB13FD47584CDD636744376E20A2A72FA +A1B554624DE8DDFE51ABFE1BBAD17BD357DB08B177AD0B33D864AC4CC04D7F7B +50BF3A26CA770502D639D64FE5A198EE3D217BAD1CEAF6195AEF54362334DEC0 +6E27B0AA124D5BD99A2FF168FA3685EFA9BF5809EC76F44FA3BC2C969F7ECE87 +C71A3EFC3256C2DAD0BC78570578B95A44797C965E963285122149283A77E3C8 +D4C553D1443D094DFCE9E9C9509F2F6CA8A58C5D63471A47901FC8E1562B9C11 +4670E53FF45F4DFAA6E3A27B4F955BD43784C5BB356A6FAB3CD049B9FE5275F8 +F930F83FC21579E61E7F20F05364B72371E1112287FA5C28917C5F98A48AD51A +87708812DD609A92FDB764D710DAB450724C84A28513973509C9E4CD3CD50A64 +F0CD0DB6A9FA459A178E7BF67D46A21B8EEFEB19FEBEB453D490EFE90094C294 +98A246B27618A049FAA90DD355DCB1AA6B602EB1BE472125791CA0E04AABCAAB +1BAFE92760A10CD9D0B501E55D3B2AAA76CFC374313C4BB5C765C9CEF1E7E5E8 +081D45C223E1DA398F77615C3A44CB0391C505A070B9061C875929874E32EB44 +0D9692148DF4A77CFBE77F7D5D70B239DD2A5E681097ED9742663A914EADB605 +8B1C0033F1B30C06605AD37A826DE7848D3B59779BB998C3E57DD2AE80B7BDB2 +B2367579E253A2674548F1B717A0CD84E5CA6ABE166CE2F1243A4D22AF519E6C +1C087AC5F81236BEDF794064D7F1B7A04EAFF6C628F7EEA7943B9F497E172E28 +49F8D3B3E41EFE2B0BFE65E72643F14A1853605D516E3BF7FC59C13B1134B9FA +7D9CEBC9608A66886D03F4F5C35E7241D9EF4086250CB5C00F7D94C0B6C7B639 +A9C198FCC41D6EFD89ED68CD447EEF62F196A4FD7A7C124557C370A5CCF9E926 +592FAD165DC03F37FEA13EDE22B64694BFC42B733D8E0BD9EA4976DEF3099048 +CD0FF471F72F1BA8D67FFAB61B4FDC8834CC475713A3D144873808B51AD266CF +BA55B8205BB40FD8A3FF28738A9990197D17B753A57B8FC24899500128A205F9 +5C8E0B63891C638B3F3E3BEC0FACBE02FD08EE9A9489CBB002E8BC0A1DE01FD0 +10A77C7FB9ECD009B61389841ED59543C10ACA8EC123F4B96F8B6E22BBE3ACAD +8EDC13394A1C10D8C6971C37E9ADB3B5CAE2A78D9E299FF17871EFD0BD483F02 +AC96C84F5499DED22B14F13A57BBE20510BE25F17F51F299429CFAB7514FB5A4 +F4173691B1CC7775F9FDAD392B0D84AC6DBDFAB9BDEFF67C56DCC3B02D954661 +A07D765C4A4EE98F58B13D28F3DAD22A896BEB1779B0274433EB5E2E906F9522 +96E74A9D5867CDB4B4858A80DD69532A44B0BB512330D003B188FD6B6F724263 +F011390DF160D0FA044A6F0828DDBCE0E2A7E956D7E09C6546601532F053D5F2 +62069615E3F6683D2B4F0A803E1E66D499DF3819CA3B83C469A0468D5CFD228A +70065B2B272421C0CE5BAB7671D69B4A92AAA802AA863E632EB44D2CED233A33 +3A09DAB712788E450B67D7139AD9BC3FDF80624D9B8DAEA438C0E6B5AA07684A +D11C1452F17F5E042C8A48BC13095FC3C078E9986693D1D9929C337B8161ADC9 +258CA267C9FBB136B09C6B84879D47EBBD5D6DBAC674E659FA3AA359CE69DEF6 +3D6D038E785D1C8A284162CD416880DD5F573D563316E5DB788037B683A26CD8 +C60B75E1A1138EDCD9AA998252110177F2A1CFBF4FCC0EF7AAEF02ADDFA74628 +AF11E50A8A851174B6DE8AFD381EB48B28003EC913183B0B7EB0016C84994266 +26448FAE7FF37B6EE7604113A4FEFCF421E6A4E0F98B7180A64E9946CFF2B4CD +A92B51C8803FFEB3B3C000DAD409715021BE9414CEBF0987F3B4456E7C27EBE2 +A3D8D250142DDB02A4FF49D9D8A67FFABC57361D619BF8B80BBECAAB9B576FBA +A580FEB7FC6F9FD556341025EF51EBAF765A626FE93B988F0C33CB1B37873C7B +63E9E855D07396B8BD361F4BE0E627459FDEC7B91472D22B574F546E41674D63 +62DF6225371C9DAD0A9129DCEDC89A81489708F14B6DFD79AC00A0DB7AA7D93F +EC5BFBDC17D06D599488ACF137AC92C55FF3DE619E6CCA4FF633919E59EE1FE3 +3D153E6B8B8C1CBB3135E0025C4BB8A3CDEA44B5FF7071319DFB0112982793D9 +860A2FC92638B7C30A944685687F8DC719B0048B375F801678D9C936CD3C083E +F5579977D7CC4267486DE97656FCAC59CD82B4DE3032445A30C8B6C8160C6016 +080AA9D647BC6649714A2282DCDD5FAFEF61EC3E7D96D8652FADEDE39BF2EBED +41DED35B9C2E3C76B4317BFE5262DFB14BB625BBFCB103EF0F67B4559E0222DF +CDC260F22208EF73515592B6D397E5C286C831676DEEFA29A8131072553F238E +5E17A0E3A080AF0968362F54F5EC1990E5A3312CD4E8FE5470192642273040B7 +9B94E435DD6A0DFC69947DE35ECCE13E14E64D879E84801DBD65F0C123A3F0B5 +CFBFB6ABEFF14F860B9595ABC25FAAF7AA20588172E46F52E77D4010036AB4F7 +9F0294FEF7E66766DA9270C27FA2B159E823758A57614489C5C5D711D4F3B019 +1DF3D1C065E7592E8D342C82C740C384648CEE7DE0699516BDD298A486119E2C +A567F5F81F76A8160996D5BD57A65557A682B77BA241B24348124C0B7BECB5A7 +60D6EA2A861C99F5F617B250C0FC760B1D81037A786166A75BF2408CFA77DE01 +152BEB50921B3624517F8023CB111527CE517C6104593F8F1C0DE3C4E6AB4E47 +E7419AF7553C784A6DCA3A4DE233245AF0F9CC749F9A7D81E19784E9677D6946 +E2D1F2A7C407C9420225A87D9E94AC52A275D8A19AF807FBBA36FE78E9C11E66 +D46602FE2D7F0E63D1E21D099B590F5EDFEEA0935C9C8056E02D57F510E71302 +F3E0F93DEAF28B3EBCF46D097F5F065B28B506392E17008C9FD21DC8654EB024 +1E5376C2427DEDD6C7369878B9DCCD04F35D594F3CE144DAD63FFB6E2AD71260 +EAB7F19290B2B8883B0E97D8A8B3D0D6E9B99503D8853223CABA8FA1AE289B8F +C0164CDC832069D7AAA6DBA23B9520ACB4EFD0145F317DED15D9B317646A9619 +F4EF45F2389448C1A7F75BCE53865D813C97D949C9D94F225C998A1403CE718C +A3C63CE6187801D3203CF4EA7F43440E2D620DFD3C1F7452CD9EC856188C5CBA +FEC2D90A2DE296D850142DBE6D50D5D43C7AA4F6207B4E5A32CD0A197DF729C1 +0388636EBA410A9982F9C16B966498BE61FA25DB0A44A4C24095A4D0E92305FB +84AC47D49C99209AAE281EA88E80D234EE1CB834771F32DBC1C1898F86802F7D +D86B6ED5588E8029809DBDF8A9E5139CD8ABDC9BE14F073755D40E21E1BBCC68 +9DDADEEA9F2E95480DA9F0BE40F82BC18849C84216612D8E42185061429A1908 +A8BBF1CEA0B66070C4EBDA360AD5BCDD4E636396A2F92A6012BDEA37A7765F8B +7654509788847E0ADE8EC67F87A40037F196BED1520691B9DF0D35EBF99D45FF +B3669D2817ED8781145C79979FACCBF5DA3210C478ED890C6E404C2C9D48BE5F +8AAB63094C7ACFC5ED7A4A56983A23C3A617BE52C0EBC20F3715D00ADA200ECB +13A5C9762670E3A04A605BC830F9A8DB0D21BC4ECDA28ABBA03824B98F4A61B7 +319FB56C9936E2AB79C954EB1A36AC8798FA450DEB871FAC1170CCCD80BA8B4A +AB3A33032A4E2FC0E938F660FBE49F31136A1DF5C9ACD2C381B4D1031B4F3082 +665159691064175B7E6F71DE674B3ABB20B3370EA41AAA3ACF6819FE0FC3F1AC +DDAB954382FD7F43F06E0E1B92B003CD788D69379221A9B380D1588A4CADCE1F +723BE855FFFB74D969AEB11D48A9398052F2A15BA781E3175B6F1FE7791D925C +C10C68B337E9C7DDD9D4358FA611D03AA4F807031B4CEC86A9C0C4CA284D5387 +8682928015EEBCED896D1C427F498995D7B27250D266E901C875B7B523950E58 +E5D97AB87AAE3498495B5ABA07E5A708645F11EBD3F31CA38457E50BD146B951 +08AE0FB57C3EAD7B6571BC0686033D63A4360F37B4D752A25388BD0256ACA0EE +7B1229DD26AAACF861608FC6CA4AA7F1E5DED8EC122960514BB35B2169BD011B +9C52F4AED9FA67BFDFC2D7ECB350C1F2A21FB781A2BE4A9BE7C53728D6FC08AC +10F48C85F84C2D4B5B2BD8113E8816728262E4685362C405EC1334F6CCCBB0B8 +0008507E7B1680C58B142635D618032D967AF2925C52613F6DEA30C5F5CF9936 +7D51B1AD9A1BB6B958BCAECBD9BAB27A10D4A613EF2FB57555151977317EBA55 +9C0B26A79FC44C7DEE4020A762EB209E6B8ECA0FD458D46693F8D5B0A4B74B4D +7D9FE5330CDB909C755B08F8243AF107E45D20924728554B6DEA593ECDEB16FE +BDAF464D62B55DCED88C9F1DF29A9DEC86AD386D3414E036E5DFD2F6CD76386C +02FDD49F240A3A4EF42EA5BB3E6DE40C52F0C5A1D988848747E855D1EF8A625B +B5208CE190BC2AC908A067BC5FB8412AFD565D68DEAD27B620B47BEBE992A65D +411159D8C62B8FE2879CBD189095062A721810ED10D619AD4411AE1B4AA10F22 +D59F561FB19B820375427E88F49CB3487A8E695729EA18A056B7FD3664697A17 +637BAF4DE04F4ADFDB90D3B8FB880638275D997A819A98798F64E2F627783962 +0F26680B80FCA21063C1A05AA68412C285F14DF2EE53D8B7751280363B727C63 +A6ACC9ECF95A749CF31ACB68423864C43CD3A668F15E6ACAACDCA21762669727 +F32D64DA686917B8B458F475600C96B9489C90E2EA0F123DA95680D43A4C7627 +E5C8CBD62EBB6AF8CF16940A2C95DF6F145FA4A506B9DE3E61B47F9E69CF9A56 +CE97940687237D672B1C6850C4FA6EF764E65CA7FA61A7C4742F7CB085370941 +82583305F2E640C5C1EBBB180B51EA12511027FDB10D895FBC33324481DF19CA +5461012802F49939FB01FB584979B10B7EE964A08F2FB54E1A7402BE6794AE65 +B2DDE265539D4719AD2EA84F7EE7CAF39CB44FF60992B78B6A2A8ABE3FA4BE5E +5483DF4E6147EEC2A0E6D7E30FFF280B871287897CDA27472891DD56903B9EEB +02502C7FB67BD7493276F59001E898B238FE68E8F006E737486384E3C0734529 +A89466BECBB8987A9629FF017D5B3ECBC73B725F1BF980328376F7F984A34ACC +D2138B9A7B05D501075D5965EEF2723A13ADF9D0A1BDE62C2E05DF9040B860E7 +57B8866DDA027E5631732290C8314A798B14AA00460168F5FD21E5BF0359B8EB +98A13D8C31869262B48FE7867E40D11C8AEF00D5BC3A3319F6E8F4C1305595B5 +4DCD9EEAB4B7E9246ADAD681892F3F90685FCE979E1B70E007EF18D258C04371 +3656ED8D71FFA463F13C6F7D397A67A65BF61EB149F65950DAFEE88E1560C0C0 +6A76B74A2C0F5EB83898FA9E9BFB30C29F98626470FF4DA7D9692D5946316A63 +D4B5F7DAE73B996666EE0CDDF24A6B5661B1AF3520D8CAD0BD6F199440E08ED4 +143CC87BA9EC046F6EC2200F8D0897A5FED31A20BE642AA4032D67E3D2593273 +E376396C63863071C3BE09C86AB6E95D0422A8BE2F83080FFF9235BA42EB6BC1 +2AF7317860D5AD37836EF4FC3A479C7DC6219AF5236C84B01C84F068B94FC917 +9F472B55AE01C3FCF2A185408C68A47A58C61745CFC427C4586F8C4C5029DA0B +6E527B7FF54828E2AB0ACFC05F68CB5056DE56A8E07F1393F472250CD7B2D53F +3BA28DD9B00E6940A73C11A3733FC4BA6F047B974064E732764301EEA31992E5 +48AF617E9CDD85622EB62C232DA13171C5688FB8B4C15387E112430B966D70D4 +905029D705D383FFA623AEEC5E6D4B1FCAB71AAE687D41A76774AA0EFD5CB3B6 +20730281CEB8A6C14D91FF268275F51518BF58215A58226E1D537BAAADF99E70 +0DDC23675069ED0712A441253D0502647BE3976DFA175788125CE7133A5CAB96 +D01668CDD304B0E407F3B406F4AF1137019D0414CF21E6C6145DB1716FE6D142 +0009958D48C9BAEC214D265EBC47E31EB5799E368A07989036D554FE045E2487 +BA7383B0F5A55463BC6F93C12AA547348D5B5996AEEE72B78E9B41B11C383DAA +9BD505B276BF1975AAAF800923EA094E2D71470EA66A64817A213C00F479649B +2EE4E6C04D316012F382D1C58DE9528EC20D48931ECF5C67AA129FE99AAD3735 +27165D08800D6DA13507B4E23B166E8CC86FD6A798BE558513BADCD59E9AEF6A +4D90A3A240EB865871E6283EB89146A755D99280DE261C24103801577F97A7CE +116E11A76450FE442B10483C24C71F8EC626E80EEC2563994CBE6E2ABBC5AD7C +646D4EDE35E012D77431D1E1C74949654C214E7F42ADF09FF6AF023427A73763 +25BE546EFFF1255BC9384033C8E929811F3E5B74C195E76E05ABE877B3342209 +C53C57F84B61B0333F1D879D81512C144E5D9E4C44C7F73A4127EE89060640CD +F00F2F90585239D410279A0CA9B0416283CA914C4CFECB88EFF11F9421874FC9 +CF5B18EECF81311B4FB7AD8B8D0896149AE5905AD03245F4283497DC4238B47F +E1CAA9BD5E54AF6411A09786DCD9180A9BD72AD71111E15D1A4E780AAEBAC100 +3D5AD925DDC66F895DF0A06192366578517F40615F43D4D392A44FE49729779D +D2D5EE8C8E4956C87B0839362DC6DBBBD8BCAB0752E83AB3FBD822D91FAFF626 +50191779679CD868824D5D9AA7F0806807291EADB1EE2C3E5B13451EBC7C177A +13B724A1D949DB91D59F721440FACCB2B5853F8FCB26563979AFE7794EC9DBDF +ABB7D079598512952C95F676A83239A42BDC4BCC383849F9F1EA1CAD42A90F88 +57AB82EB636C0B83696F210E15CA531EF55DB48E3AF3BD5BCEE0A99544DDC2AF +F32622287FC2AA1640C28A45FE089BBA80D2BBC9806E710B39C70B5434FAA785 +3F9D0ED0F5150535EEB99B550C0A723A1E48E72A942BA1F18CE822ABAD09F471 +4E7D255CAE74142C1C0898FF0BE5B7D6CBFF4EA5E2CE02EEB8A621A23A65FF1A +F569049E2FAE1960E8BC49C7EC6E28BFC4AF22A1C4538BB7A42131546E584DFA +7AC3B37C602BAA35ECB977991F613253815C3205B0558A65E110A962736AEF5D +DBACDFB37D69DE2DCC22FBAE23B8CE4C549FC98C10B5473404D5C10A178D8501 +BFBF7D4A7C706D3F194F0CF2EEE262095EDE26F660D6A65E6398AB3EC5CA4BDA +3E174A0114DCBCA6A5767B18E50EC8B1AD197277A1C8671272F2875FAA8E0CD9 +D8B58ED78766221FE5FC1C39DB7F803DC6A3154B3BCB99E97068937A6124357A +9ED72F2C36C71B9121A07733E5A971D8A9711E54508209AD10469D9FD6C0D1CC +97B76ECD096A9F0129279E1D9E5A7073CAC878B70A2D3C701B4F6D739545BBD4 +7DB4D8048A8389B13B4BE880E54FDA294AD9B69728E6D4F794E2B08CAFEB2E05 +CFF5217A76AB1E14586A28B4BE3A0A647DA4C3478E97A23AC12B7DD368066676 +14AEEE971E40A85BED83E7DC252E8566EB31BC911E412ECA9D19103CDA8183D6 +5A1331AD51F2896BFC55A4109385A8A048FE7B28FA9C5737D5CADEEA49120B42 +3AF12BADAF96B2C7B9DA0BAB63CAC1DF6FACA4D5536EC2E6B7BDEF72A2E4FB66 +961D4D6C87DDA9E37F0368245A7D9A79C4D7839BAB28D72E7231410D80059ECD +155AECBBF2C6053E9424CA018DB652FABE8A259DABCC556625ECC2EB0E661011 +9B6D500DAA1FD96447A2C94ABD37FD3C2FD136BCD8C2FB1442DADD2B53ED2691 +05605FE149E6BDE13E65C61DD73F60884B2CAB7708B67C58CD9530F6DB72B203 +85F0A3A54AF9E4DFB8561998D474127C8B4C480925B8FDA46AD3B460FB9288EC +15683B06E33DFD17B4E5036BBA272CEF7B9A3AA2337EEAE07E5362D6E3DA5570 +4A095B050D52A6C7828E6179781796F6A312881A45C10FE61213DC4D31FE9112 +695F844F4FFA4CE6FFB11D301D40BEBBF9763DD93C3498CDEA8FBB323CCE7B67 +A7BCD6CAD354D6BC870B19CE8346C2B2056693B8DC48CC516C64D2F5C2DB8024 +2FCF14263C49FECEB122079014E1CF5930E0737A9A4047410BAEE6FA1A09403D +6F2A0571659BE21088C6C25F36FF3898FD7002959402522E3692E59E89DBF5CE +9455C3D11D1D865A38AEDFD7D59C8472854B6659BC4CA74D142AC771012EAF42 +59834B5733DE5F7FD91561A99D15EDCFD2B210D91BD266FCCC6AFEBAF6E7DD24 +39B4E375A7FE5104073A9149DB2924E81E4ABFE41E69343DBDFA343CB63D704C +19C4F5C3C0BD8D01B1E2EFBB683FACD1A31FF596E1236DB07D571A9B80C1625B +55A086420178034E371E58768D47DFE37607DABA77FA9C478EB37B4C1AEF63C8 +53D74B82BB203DEDEE409834F2DF642CE0953AB0085EB15F79405AC288F305A1 +00034BFB8A201E60AF386ED0317202D2ED39C750F6D5602A5B5402274706FA03 +CCD598091A25FC90163E5B4EA798703F98B21C5F2525443E3ECD306D3D67FC6E +1FED63B59DEFAF45A8DD17009AF9A4264F1EE7AEE59A04EB13A7A14CE7A1BACA +35441C393B1FB6847516F977A137970BFC4ED081B4A96F7287F68B3D3D1DB704 +AB5F5D818548E1F49560776863A84D91938D8D1C7B3FD14D95EED4AB89F689FB +387733A4175094C396A5F7540599D3D3FE934982011B5082ED7FCF061BDC1C4A +C3A426541DEC653F0E1AB82A6B9663E4B9B6CF3A3646454CF88F26CEEF19C6AA +00B735A1562D36F8559C4C27D87F0C780C6E627BABC455AA7A2E38B270BDC791 +A4560EF6B814AD5B2D3D1C1B16C597B93877457EF9956BEB125644658FB30662 +8CC9236D86BA636643B1DEEFE3C696D2DABB7ED5688B56E1C99ADADB05F99868 +5C3E1FEA735EA4B3AB110FE00C3F080A69700175C892310A2CA1FDAEA838B8D9 +0E906FE38F27CB27E4B451AB0A9AEB68078B42344C7DC47818887C93B465DAA7 +C3FEF4C746B52F8AA5B5006A8B0E262D0EC05E5B22027CFFE53C96EB8A7208BB +768316DDB12474B7D9186CB67EA40B9C059EBB6CC1525E86E50259F82C5146B8 +53A9E15FE0516CF3EB44B745C105548ED1DEF13B55B4A41ED5EAC4DF3BAFED0C +C9D38984E8CCA223772CE195679C8E9F5A4773DFFB8392F2E32D44A9DC6C83D4 +405C56C14F77B9A693A1C815264AB52BBE0410CAED811F035DBBAC7AC81902F8 +7F74C38CC1F636799E7B7C2A2E0D31F63D13D86C094184A85F3A5166D2762967 +C3409C01D68B9F0E4DB9109F3D83DF452AE4781DA7F20AA6EF831ADA00346666 +3CB7151ADEADCB9A601E5BD2FC4C5B89C058A5D0DB1E793C1390BD9EE77EF7E4 +4B3F2F129D2090494758836C37623F1F7C8CFBA716515FBFE20EDB15E3A7C304 +62236A0AF4E0A1B64F523D5A60E41ADF7C64A08D472EB385E949DCACC048E74A +3793AF4A2B3DD6FA69C95AC5B99267D982F7C9DE68BD4FB12DA36130321080CE +349A0374FEA9BBFF6C8B8EF5A9F5DBBC27AD4C5E9532BA3B014AFB8DB5CD5F73 +1609AE62635E103ECA3CDD33A2BA7489179F540F84DDF5A551BCCCFA991374FB +08B1CC61600B4E2EAA674A081E5D4BEA00423B9958B7BF78373FC42EBB9C5503 +D831ABFE2BA3273E9AF8808203A57D6A85D43B70A3E75E3661A1A590510568BC +D492E16C5AD8B5465460CC88136721FC78A5D9ABBD4B09BB244CA5735E21E603 +15DA396C26579FEC38664C53BFB82127E67EE3A9535EB872E028EC752395A452 +23B76523DD01D40CFA7F0F2D83C686E8A1E736088190242265A98A96A344168F +47B11A1856D7060066C62418E46E7B1AD08AFB814903F4389F923A0EEF2F0EE6 +F87039B6428E475EAE7E0205B52833BA6C475E3AFB30A4C427F61DE9206FD463 +6D0EBF19C889943901D9F85E25B04FAB888BFAF1B62A05F7B2DC6B2E3E0E8AA5 +64C8A5B2D6C836AA48C41F7ECA82FCE854C649B9E517FF416333B904A3D057B8 +A709E21BD0B4AC6CD40A52878765FD27135AE413A7CAD83F53448F31FE7DEF9E +BF12A42E6F644602BCC57AD4A3D14D59555AA77159BBDE2460524436C0D29DFA +EB826EF9A2EF9494E168F07A9A31D7B41C121ED1BEAF83794F4C2465A16AC9DC +82E512E0AD888DD1C7A79C125676133080958D8DBF18240DE3D178B0E38B9CAF +8441F4F647ADDE776959B3C0245A203DD12823351B7610B2185A918A46C934E7 +3EE42D3072783CC06104FBD2E3593B96BAB19A0C487C74E20A5A402A0682E905 +780CFBBF0595D352108462882D97675DE50C198B39AE710A1D0C5F8A6BAA4270 +D59C8BEC72BE5F9388EF5CAC430678411EDD4C898E554720182AA7EAADE98776 +7F24FE7D6C7336F6268BB11CB9D7E618FCD3B6ED88062AA47189A97A871DA1FE +2A094C7628F2F66252C3C6C527B3F7D0C85BC70CC6EBEB6C4778E288B9520942 +1D9234C8CD1EDC5819DF14E18DF8CBF5A67087C508EA8F557943C0DF568B10D5 +102EF4CB1E39BD48FA9BF59A6E73D9B9FF4AEE56BAF7E92ABE1750620D040066 +60C8A8850670FAE63206E7D47859C4FFBEBE50B8F35B59122EC66282FBA0E988 +0B9EA0BD76DA9A08B87DBC99BFCB5BF7A8C3748CDB90C8113DFC9EFE5D012B85 +AFC31778F604F2E6FF75AF7210236BF8B37C6DD907E69B632659800CF8DFF365 +7B6B50F69E759739D5D7A5BC3B3755011A37F49E87307E8930541665EBD4D832 +593EBC69993F2360EDF0D15F716684A122E3A91E2360AC91C69ECCB4504E05D4 +90A5CD814C0C91AB257908A73D4FF166CF3BB4AB5A49BA43AE7B841B2F11604F +B7BFB092F9F2905B5FA3A63071BB5C067B76E0FAA460BE7C7120C7178A39F175 +1CB520F828B4432DF331B9926A19E34FE8C9D3733A991D0CCBD44E37BDBDD68A +3933FD1E1C3550FA3BF091268A2D79694F0CF648CBCE2FB9786CB8862C39CD29 +BF9863DDF689F11C81A8C15F56E5EA6AB807941A8B62AD9F0B1D53B972EBF407 +7F189ED8FFA909C63B5ED68F5FDE80ABD9B3B2A220FA19E4B2B6F754BE6F7FD7 +FC87472C631D73B5A037C594550DA4965DF18C13237FD97AFCBB1936E9186669 +2ABCDE5A0192747066DB1B605562C1D0E2CAFDDCBB1148DB280377714807D4EA +DF41E374C3A90C3EE40C55541AB3F594784CEA5142E0BADBC86E11667CA0D14F +1285406D887BFA2AF299D2CA887E2A9BB1865D705B6611C90C2EAD9BDB229EC7 +20A483A7689547E7E2B82572CB0D9249CD049C0121807D54CF4CA12D91DD2A5D +AC79AFB6662432794475CD0C868CE5094B6F1F733AC7641847969D9E3607D716 +4EC89532E0FF1BCAD4B90315E5EC686DE83C71CC4E6DB1A3EF5D817D88C6E43D +3733C594205BEF082D287824D207B3F581DA8FF402BA3BD9894876F4447771A9 +015C897E61AB2C9E6648E202D72330977396AE7419340B8D862F7243E130D81C +C54578EB850EAD0982861EF6CEE14C9B761D0AC8D49D30EF6409A699339D0241 +AEA334F5D303593B29EDFFDCA8B2507E115525AD81FD18BB11829B6620C8C204 +AE00F67565AADFC10827E228BE6AC8A2D496406B286990DE0A016D8B73C72939 +B385CE4D3813FD166C6F5AB1A534E594FB4960B99E6BCCE5D466BDCFDC83371F +2B4469C5FC2A319AFDB7B98DDB078E2720FC96594DCD16848EAD3E7139CB29F0 +3CA5DFA6F6247BD471472829C4A80A966B92A1282A5C787814E9CDC68DB5D14F +A252DD6644F50840EDC5C05B5543C46297D2F624193404A97C5A43EFFBAB96BF +CDB08D19B6D2F2617EA2459E86B7CE5F8C41E5301FA12268AE44CCC0D731CE7F +B3F9533244221CE05C640A2803E67E20FD163E9F6AAE55D1AE28254464EDDE6F +DF64433C6717E06D7A3A55EA53EC08FE36817BB2695DCAAA4A70CE915F2AA103 +F5658F2112D7D79687244C054B4E57B3312B58C31CBBAF9A900E507D6BF88E59 +C8BF0715D0AA16DFD1B670C999159CCEF37A39C25FBC8D4D5280C6ECD9B6CD1F +501A87BC912A398D7959460F8470677A36170BFDAD24E5A80B59D03A9AFDFD77 +D29D471C368848490486B6D07467C525F47C59C548EBBA09AD530C87494C0C36 +0B266818D4BAA382434014B5AAD24985AD5488C5B20216A4BFD5DD3ABCF68442 +2A34CE42B2AA9B2FFCB2C69669F471B5559AC3B1E315CCF9BD8D1D596C606372 +C60AAF7407900CE28F49611C7837C442FB0A45D116CC393771B603584E416ED5 +6AFAA3A1CF5AB1B3E4C8844F87EF1F8B3C00493E44778F319B73775DC49908D7 +FB064B6937D139D056321407A61ADB0FA3DE34BA0EA64A8FFFA5DD00B4198AC5 +DA6BF912D0A61DB73849E60C08009F61135596C659EF2952730378C6953B270B +1B30ED14094F3425EC537E034AEA44A35880F606D9494A4F167CF1D68E021195 +EA95BFF9B1204308EC6023508D5795BCBCA9D0B5B4713B0F0EA3742FBCE6EF5B +5543520C2E546D4AACE6772CA093960B45B6502A14C6A5207C2E7F42174AEE2F +50665F4DD1D84A33A327E8BE643DF277F2C217918F70DC9968F2502674F5C9F1 +54BD713CDF1B40E62E36C1C9719620F45DDF8186DAFDCB6B6C5AB8CB4C16CAC8 +DCBE6D2C08D2CAECE8559E6AFC76815ECB8087092D9EB0E93D31928B53373BBE +18B838A8738723333075B9C6F314FF6269C9EC139A89509EC0B5BA1FD1821995 +03A20682277AD86350BA5E0A4A059C718E5D77233198BE6BDD319DA1B92AA22B +E2770EA17130E581BF8C6D474F8C75BDFE5116D742489307875E568474C63723 +81F4C22BA1B0B84C64BA2FA9575D08B023CF358F4952A8AB38916BA1E0EE5BB0 +FD8BFDD642176954639B040EA3F1F388C0CAAD454765C180A677DE7061634A04 +5A58617F0D68293EE2679B92AD7ADDB8E4F491D8A04F12FA6D4927F8D32FCDC4 +8DAFB672765D599B376E9146A0869476464FF3ED541A90A13C7CB9DEC36AF11A +593175CDC284E2D9495BE7BEB76BE21708444E2ABD1222D84A33BF568B447D13 +CCE55269EED0F07FFF2D8DB08CE1D4777C020AD6E4601BA5860438CA09677848 +186B8C9BD6C8291019CE7188A41D34F4CF3F0B72D614D067EED5AFBD7BE91816 +9D0C20BE8F48AAA5E3A02473FA1255CA761728C03EFC7680FB92F32CDD4A10EC +E76EB6B28EAE51D66F09568FB49B83A3D8295467724CB774D4D2C4E2D619A272 +D03A627401B1FF8DF700BF778AA905436D421AE00819A63530BB3A399E6A84EF +0501B8D73C00803038AC2B1651BFF58E00D72C32F3701BA82330DF0421A6629F +B45B45B3D2461D4AA96AC0F36CCB75348391AFAF4ED915F61D1584A9B9E11535 +44DA51552AE9B480778A160F8192B848EE6F3A36A85B7BC80AD00C645C3254E1 +CE76B479075A354E2A4D199B9B97945B92FF18E55A192287636169F50FF639E2 +48DFF08BDE9DDA8F372024A3B7C8106A1ECC51F38A15017B1E5F7ED5C35C07E6 +22BA85112078F1A368461BAA9EF8C5BE2B407DA6BFAFF6D924104147FFAABFC1 +8FA5F453895F8EBF8CF65A164060610D827CD38D8DE85CE87DF6757FA6749C66 +2FBD3AA116E0A1EBA518B8871A458495AE39E2AA76C2D4BA9DDDF3FA61EAA369 +F2DB42293A293F995D3A01DB2DCADD6E26E5204B7505A9EDE112E2106C26B7D9 +393B4EE72663D646364E067822A2D8DE21E65C15CD3FE31C43EA36C2FE266C0F +CB54E78877B1714CE3C6099EE0304A47169D8A889908095DE2F3AD4B4D0B388F +A2FFD1DE6A065C5F82218373089D354CE0B112A541095F34EBCA188134DF8325 +765FA79E96DBFEAA52540D3C6ADA67ED093D3C84F44FA5150614DBC52A74E206 +4CA0030D532C04A3843F09CAC23B3C5CC0B085680E5711070C59868FCEACE38F +69EC85F4C74564F9FC173CB7CF5C3D60A69265B18D7B61F66FA44C23409C3FA7 +5A8C0AA3230BD59B27899D753CFB4BABDBB6BCC783C036BFF69359B05F87B1DE +D43B3F5A87BF9F79D83EE164DAAF5C472B74FAE110C9F70D522BA90F9097FCC3 +7154AAF9225DA29643B114C0E4D824B82EE6E44D88088AF8DF3BC24B78F142FF +8AE31FFFCC59225FF090409AA89B96EBD32A1B7F3E59BBAA4969A35824F1F122 +C28A07A67EA7F5109DF80873F886A34D1DA3DAC6739196C458E1AAD246E28C95 +5BAEEAFBB03E1C2C2C5B1E5BC25C7A637111CB8EF5598870AB73B87139CC0373 +2C7CA4E216506C08CF37F57F025BF947C96A2C485EE596A0E8C1CCB1AADD96B6 +A0D5960DA538B28B825A0E424E77AB2B602DB15C8FA9715FA3D51D20CACF6AB8 +84502EA510FA5A8D64B746C67E91419984D27DB79026AFB9D151175B682F10B3 +70C63E3CE4EE60C30D1E4E21735C3680B9D797E427F88075CF1753663B51D96F +D75D738906F8CDC4C52C626E389BFC0E88F5154AB4BAFC8A35E944DA02358C7B +E3E9DD1DEFC49FCC8701BB849E1E61E46FE0F3408AA7E2A92CF5E44559DA7859 +2FCC4434E4F2A1BE4760434BF95A2B0ACBF29B290FDBA1BF168D2B1017C5B9B5 +D04FEB32D337CADF33C3554403EC5500B8FC7A0CF257971C18C7BFCEFDC6664A +0378B8924270ACB476F0CCF2D611667AF3B5746A346924A01B53EA62F17535B8 +2F31791C34DB10076B461FEE419F3DF6363EF6B6F21B36B60B2430A8120546D9 +DA256D859EF3BBBB417919334BAF9296893A920DE15A1EEA873966B2DC71BE89 +08D8B194EC8DE09214CC521B8E1258143B43016D0E228A1BE4DA5E64BB5BF45E +9D68C4708447F058242965D945B150E73A8725EAF95AF0F7250F378445793D19 +E7FDCA0A7F9BDD59FFE22DA6A1A6A2278328E2CDE66BE8ACFEF03D5BD28A701F +1717328800B57A752EF90D02F72A210EF7B61ED77D23DB9DC8F73A0A06E4ED44 +D603D0F4A64FA99ECEFE278F7F892F8436F7C58A463E45F1D440C026228958A5 +AE9307CABD3F5939FD37D020658764DE53504DFED0A5E08B199D8B3CE94037C7 +DB3DEF389784D250EEEB13EC65F90A7CD6E8E99E724D0C13A8E20CEB9636AB02 +FFE561AF9227F6DE05A2CBA8B20EBCA6EC8760ABF7ED9556BCCB59BAA76036ED +9B7FDB697A9C2CCA821B590EAFB504EE82F58F30C07CE0A097EFFD5DAC03A2E7 +6050E8C3A5527EB85AE29AC8F4F74561C02B55B683810C9558603638058F2286 +DB1F3372788B2DB1BD435959486C133C3C50EC14A45BC9EAD710B22C15C73E9B +3F86E909B2EFF5310C5E6C8A9F93B0B9071F121252884DD532DB36DD2EB52C93 +7A1FDE104ECF6BA39DA6DAF33D6EFEDDE6007900741E974E4805640F8455466D +50D1FF14BBC7B03F1EC139B179A091746956607C8D097FF1B77A0E4FEACE0EDD +D56261920EF0F150D1F83E6743C3D82B55503DEA7917CB129038411B435DBB76 +CD6AE2682E4DC6D42488E113760517916D5846BBFA9C1B8C316554E43050D86D +4E47BAD85C0C2649BEE99F611E0807EB70FE5D70A587C797A53F4969815D942E +7BDA223588185B7C7C7702C79435BA27B8FAB1569478FAF5718577743FD3E9C8 +1C0B2C2DF185C1F0C422F8283B992C9968C779F77ECC8CD4F2D7E687DB1D2948 +02BBF76C2E1F550FF60FFDB83D1FF6C98B050EE8944E6E72C128AFE756EADA0E +3B8BE0E6BFD1C26CBCA45C9D79BE4B9A49650776D28A0AC0A566FE15D387AAEF +16DAADCA9F7D2736C056C25F80545F59C12CCC4FB9D50874789B196B9C2F51C9 +76EDE6112B7D00EDAF01790306AEACEAB092C24626040EA7055FA31581581BE0 +0C6F28C45ED4D3204DFCE04CB3AC946A985E42E25075BF110D92E0102E39B06A +41228443FC961DA13789DACCFBE69DAEF1739E7F7EEBCD464F63166E13AA3694 +246E76AE4200EB89ACAA3BAC3AB6EB4D821AA9B7960B70122F22A56C406022B9 +4B041E21FE064FA2389BD70F1E1AF99E7943B06C0EC5A997B3CC536D9AC38FD6 +AA14B9DFD4CE7FA3C3871B075B31973D568FE7B7DD4BC930A823E0C814AEFA29 +FF6B1C9710A96A1336DCF7FCD0B1CFD2F20C5F06D233AEAAE11A110F9856F858 +27CC8C23385D8D486301AC324C9832F154A9E0B49C02D0D8C45713E347D87FF1 +FCF8FA13A20510D87980685ADAC8A2B458C6E3904AFFDC8D67201299317A0CE1 +B1DD0E8430AF898C97DC7D9228112649CDE77B90391E22936574F72F831F36B3 +4E73B141EDFC9469CC3E4BD7B57213521B187DD5E293BF9F1F76202CBB4A072E +C8C82D7B10E05405CA358E68A6192002AACD7F7CF9B592B116E89738D13E940F +E29EDFFB3D85E618ED6B665E8F10AFCF991D2C0182CBE434BA532CF8A9924152 +D8A3A9BA45D04F747424BA6F062D81584D3FD4392B341BC66B508C04C50BC6E3 +E291507779E456A6E9378CE2A58AA075519A111E97DF45527975865FC7711E08 +7CDE68C74AEEE367477F087D09FF67BD99C8CEB605D165F0C6FD285BDF4B14EC +183FF6E149E6E3A387B0DF88500DEB1725363A29FE31BBA528650365EEF12B4D +237323FC2FD1359D3DEEE15B9695294F52BCE8827DC6DB80B45BEA25BBFA77E0 +3E408916D238EE9984A72698E639832242A15CF3B2ACD114109D2EFA8ABC9638 +31EEA7AB94A96D612F6055E276E6C2EFFCADA659B388F3746C690F0337159DAD +5E80AF3D0C50617CF5A93877581D40A98493451138377AAC7F9335DC7C3C2373 +473D7CE93FBE582BE591A0C30ADAE4B1714DEEE59C01D69102E382536B92355F +6F20CE87FA4913F758128F74B48605999CCE0C32F86DAFD2D07D75A1D9950C0A +D32E693EFA4BC7C3DE6D3F796B9D805D703239B1D48979B5592CB1FF949F95F6 +93142411389D667FF0716A8E890E7D5D4DAAB8797C190A940806A50051C6A952 +BECA1B01EC677E00A1468EFAB40548FEE96B0E762FE8400E79D5BDAA28FEF9E3 +2B81442635D159D01BCFC08902317FA5E6EEBED4DE0490A026E8F94260EEFAFE +0A1FA3134013B0AACF1FA951218539B357586FE92965634487770AF7B2F0A0A1 +D7735E6D92840EF7E953548339BA6ACE2DAAE5C3A4EB3BF3BD62DD27D18E3819 +46B91268C3D6E04B16AD4958E7AF8929B4889AA94E9F6E48BA769D464BEA9804 +4C318599988B92A8256C1FE552BFCB3EE4512C12BCF2F9138DB1A8633D6AC290 +C9F8340EF54309DC42C2A035ACADE6010868AFD6F389B931D3B1A8CF72A26896 +FD78C5789C219C2D4EF28A91A425D648EBFAA5DB7F6AC12EFC4186C6C71D7F06 +F66621A939032A9CE5D42AF8E45B78DFA211CB3629DB57CCF9FBB5D3792FA8D0 +BD6E520B115B24BA4573F20E145FF4156E3E57A286155269CCC358477A477CC4 +A9DA53A8E9C547CFF68306E78DE02DB06E516E8865D2AEFFC2B7D3D553E9A51C +37D46E515332861E6EF5308FAA3B759DD0EB4857EACCF33DCA20A80C016D1F1C +695F7B7398DE7DEFA76C16CC686A29F35A61DFB244B1389293E9D3106881C303 +D621DABA7DA35E2AE5D0A064FABF1F4CB06CFB161F10BEBACAACF507F8131AD6 +90A5AC1BE85ABDE87A02D841E6C9A99949901A606906EB5E18161D947F1B4340 +3EA721EE08DA268896FD7E823879A1DA28E885CE2E152FA18C1C579011F2CB4B +B75E3CE9FB816E247FBC50089BC9489DCDA99DD4B0158357CDA22DE2399C9DAB +EA044DDA012255701F4417EF637404DD5EE917C0C346D052743822F06FCD7391 +97469EE2E90D31E5C551907B4D0B4AB5E4C505D3255DB9076787C5842264B8BD +594C408188166EF3E6D82DA154DD8FCEC90CE09EE454F109E99F129223000892 +942EC93296A86236BA41A71D4875FB2E208C3C891336354B0A42C89B6FDF5A54 +EA92EEA1AF7F1A276F75C93BE7996E60A4B5F7FDB6FD6E26F3E64500430A9B2A +89C0912886A5A590051408E3D40F06E9069BC0836712D39B276E51ED6897AA93 +BE95ECC177C9B447B9217672D8743233F10B3BC1EBC11DD4B453B9B97CF34B5C +9DE7F43FF666074F604656469F25E458365EDB8EBA89399776584E420317EAE9 +0E3914903CD4D042E5D1B41A3E62E1B20404295D49BA8A8BCBD8E6ED3CBEA90A +320D9C67667E0D6B47FD82FBCE186466AADB6BCABF31123201F1AA52FFD8059E +50423E8EA0E6367434D7A8D897DCA904D35175DDDC33CA87B6CC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2024,274 +2033,273 @@ 6EAD4AEF60B83DB1E356D7B6844375FB3AAA0389F56D070F426C759ECD2F970B 2E65032797BEE2FFDD78CF0B7C9684F6EB8FAAB6502F4676CA8F23D37CC4D4A3 42EFDCFAC381E4B95D63E26FAC8DC58232288CDF0A98F076816242E68A3C3189 -9B2F6F8F06DF0A52211E3953A57A51EE1327E6C519A50F2B0857987530CA262F -A7634CBCBE1BABB7EF1917AD836C66FB19A1C993ACEA40D291AA07755E5F4CE3 -877EA9256745044ED37695871840F5FD39ECC03B9A65955C2886E773F51BA327 -36D4B9077056B5C4D31075BDB84D95F39217123A292CCD32F072F3DFFFB937F1 -7A543C93033C9BE51423EAF43AFE5D40F75C7614C707D898342BF2E84E557470 -A08F92931617AF53A9E90036C4E235DF6C8A66366558DEEDBC6267DDB46D1DDB -B943EF9381859201FA74BC1EE0D11E52A75D89678663CAF13969A433B817D0BF -AFE672FD7B7E0E318140A2E18A2829FB9BF621B9519FD20B415F338E2DAAB087 -FD4F4FCB88E7AF5C24C95D596F35D46AE8075E7AF122CBFD661A144081C53AC8 -AEB6F0121693634DD7514440936609024EA1609687A6BCF2AAF1302FB5D59126 -E724B35374577B44AD979B36CCD696E4B8C86B659C7A07C12F1B07DF63902F46 -DB26E527586481898BA0C1C4D0343E72D90C446446C5A5BA75B6D6E3A45646E2 -6161A12398845D942EC234685037E7FD00EB78E2DDFEB6FBF29EB0D2507ED3E5 -645F4CF42B5164A3052755B879329C913274965209606A41AA739A8072E3C7A3 -68B2E9B1FD527C93AF479C377271D51821315A483ADBE61E4E5B8AD254E17DF9 -4D4832CED4009A88EF7A13CE454500545B81911091C6965B384A8F8AF977318E -3F5C7120A28882A2176C5B815E337C52FA5A66BEB55528A34FAADB58884EA98C -D8226D65ECF97382A37C9D02350C87F7D9E050D45814D2DC6B2490EA5A19D366 -10D06715C71F9505F9169A3B210B1B8ADCF919A2CFC751BFC47AA8132F660073 -5C6C9629E8DF4A06AC8FD77039C5B292BA00600E039217297C519FA7CDC5171E -5B8E1DD51B4DFBBCC7BEB3AF99C723F4C6148F6F4187E15C9A5C5F24A565722B -FE9DFBA7CC0C6A01BDA00C8075623ABCF59FB8062983174198FA1818CC644D6B -A7C7E3773993773D2B4C009FDAF9DE26A95EB4F7B7157472028965A2AE646234 -B13F3406DD2C8C078CD8A4078364413CBDF63FB582B25E9C0E4B8A7F9F0BF493 -E9E1F0C3B711D5FFBE44E588422055F792D7D5D3A2482120333C99AB487308BC -614DA8C5B16E239689ADE4FDEB69E9F61578786E38036B913EE77A89B3B7867C -E27D009FB44BF2D9DFDCD9F66FD2D13BC1599B13F2E19F4D34182B3929758BD1 -F0B825E52213B52C5C091DD2E6E9216CD4E8AF0B82A0789FE40DB0EED926AC4A -C8A67A33101086A925F3E677B7F6EF0A5C33CD3A354464EA92C3D860B90D08F0 -7E2CD9F57A06EF377955ADD81969BB714DD25267F29115C02FA60F8F7B3E1646 -48FB8C60D0F0E08560DF756D96F320ABD285FD35FFBAA476C6ACB989BCF92394 -11CD8FE3FA053111EF9A7CD5A32A4986150A5F800340849B5D4CAC1FD9C581E8 -D0E0166EAD80174CFABC7EEC0F1C3928BD465CC690E73DE9E0F91ECBCB6E694F -BA399F2998FF36013EFADC8D4C24D76EFC29AC6EC6766E61FB9D1738C70848AA -C5E93D89FD24B6053F40775BF36A1137464BAC9CADBC12CFB564B030D0AA2CC4 -0D2C53EFA25F3DB0712532C89D9156B498B9FA8D7B5F6EFB475650866CF6E79D -DA67C0533FD0F8536CAAF909744672E14CA51A667845689D5D94473242E1B804 -D6A717F082000AE27D8A159BB2042E36FAE0B193DBBB218F5C528BD203F4D146 -057399E10E7BA35BE63B729ABF9DC1891239A573A67B44E361F29962A2C4E628 -E106F9E0A7390B0EDA6FBFA1DFB6C99C71D56E977B1EE6C0D2AC1FA77511F2A0 -4F80FBC1173CEF67FE8D3F0EAE17224FB730041148F4E9A6E7D401810D30A923 -249F6DC070651B57B47A513DCD5C06D82C8319A92629B36278EB6BFE9739F203 -26B15E42525FE6D439BA608478213F5848E8BBAB6872011F130F003A94C8612A -ED46690E81CDA8EC5948CA0F57455116B81A0AFCB200285EADBECAF3F3249279 -E80D9ABD82F22F12A9E14F6BC249942717E73CFF0BF9B205301F80EA09C6A847 -AB937AA4C2D0E60AA335177B4B86A1D4D5ACEF074120E2DE632A82598D51FCB0 -B32C6C900255A00101E57AA5EFE2DB09CC07BE8DC99F796713092DB97D6912BD -D8B0C40313F3D6061F0AFC4B89413514A9EE113ED95BB7729E29F144AA0D42EC -CBDA616D1295537975D0E09D3F59F7BD2D5965E2C35C85EC56383CE14EA9D8FB -7F28F5A3F3088F970C4BE07982E140F52E1345FAEFE04F4C508A33672611D76E -33DC6BE4C84BBAD738A71539E8416E5C8B2DF65068B29FA0ADADA5992DC6941B -AA856C98EE3B244520159B884CF4339C891B86E917E7DD54A712B5B572AB5696 -9256DCA1D8E073C2F5E754C845FF861419026385F21F5B5134372D27AEE08B72 -E234E74D06FAFAA327A769105DBD300D0F75C286F4AC3A7706B377321B828CF9 -85A48B4394C32B09F6CA7A92F93B8143AFB83FB6C1FB0F181C64A23C04651AB1 -830A7CB62F5755D3A0B780FED3A290C752678D4A30C7EE1B8179749D415202DC -85C2DF88383A620044BF850B733EA1ABCD96BEEF7BDF2FD6EA0449B6D61DBD07 -D3A8FABDFC7961B06F7C2F2906BAB7A3BD33BA8928109E8BC4B405D9163D3CBC -5C664B1B2A18BC21C3EF35CD3E7D99999DA3205F41B15BBE2C9E76CE7EECCF18 -E5186D5A4AEF72CD7DCF1C76DF9CCE29C92BB28B8C1A9A05C4602B82DEAB9354 -9258C2CBA3D9146358B69C420BE22F1603F6FE4C39D2423FDCBDD2BEE0BF6B40 -4F7BDE641C19DCF7684E7495EADDF3A86D3DA4C4E93DC00398C5CCEE3F3C95A2 -D72201367CC2D4A5BA6B0DAA88E488CA671EF45FFEBDFFEAB634811BB0884670 -7EA730CECC91C30A2B6ED9CD41CC8465209F05DF45C3FA514703BEAFF3A6DBE4 -978CD593E8E540D4B2D99055CA68FACCC4D1A2F709615805E885B840A806C952 -E5B0BA85C23488AA8EEB924B99489C748602F82973B081BAB206D808C08F8C11 -75B1D192FAFF8C8BC3148AED1B7206AEC32CAD33D1E15DB3CB4CF58957F2FFE1 -9A2D1E838916289220638EE91B9DDD691EF6D83017F35EB2E924708E655A8CB1 -CBA59DCAA9F787DD62352699DC1AD43CA225BC10B53B8298AC5B8C316FE433A5 -FFF41E657EBF3DA92F7815919E3693C9C6F14098F35F206EC9D9972517D1C233 -6A838D0FC455502DE6C9CFEC92560026D5E9FBFB9CA05A15BEE9992F7FD73779 -3AF7CBCE1CDE7AEC92F2453431A1712E20B7C8222656589D379348583058DD50 -035F956EF757456D651B53B0E2E12AAC4FDF5B063B9BFA53DAE05542D55AF892 -B2AA10EB49EB839625A0FB4344F552F24279DEAA4E0E25E5EF1C73DABE4F1C84 -44CA224F92C9CB2FD5EBDBB510B98F3FCADB388FB72418BB298934195D623CC4 -EC6177AA90E8DC19CCCDD49B0B5E4588DFBA825C32135F92494B37C5C13C80FD -4199D717A7BC47E9F43ED5751DBF7DB3B1296E37E6C4E0C9858C4FB0EB5373B0 -E70643A0BD54D080D8B4A7EE78A455240D2BA072A20FC76EB2121BC58C1654CD -2F9EB646568BD4C95F4AD8505921041A20DA936FE009F1758CECB5838173133A -ADF49A309504BCA3C0E1C61CAB5ADB599130F1987943B7A2D0AA2C7883AD7BBC -5483F8225867EC447117DD15D7976B924F12BE6D1D83E9157E02FFBD5D9BE32E -3173FF8C0D6DE6E8932E02B2ED98E320172C97118F8A20049CACE8CC3DA954A7 -6613384E2619602E9BF84E3470B14A692371F6C9BD320D207BBFDDD4B5F7FD10 -16E495EEF83B33C6A6E490806C9E95AFCA72209760AF1BD12E8D454E29882181 -1E78BEA63628526F89724BCBA66266EC783B6CC3846F9C4F14E49ED879647D0E -79C3EAFE8F21A85727214955CA5F7E4C4DE351D560C2E5F6585572B31199F88D -CCEDB5E2F1D98627F4D701E06D1492DE6A6BC55200A18C811FE7F34BFE805AFC -CD62FF2CC89AF62DE15A81E5749DFE00DF841697466967BD315E282A21711EDC -ECB58F3C0469CAEBE96FCF3C34AC90428765C57419FED782EC8F497341565D0C -9ADB90CCE9022B299C7B7036FF1773AEAEFBA6B4CAFC5CC2E1EB60B01DF29813 -F7990B64DCDDA4E8D614907093030734F52C87D2D70F6C41314E02231AA15E22 -5B4EAFD207E6003C88A986FBC0678FD6385BD57F147EE134522E16C674183041 -9CED60638095EA1574C7A56A1A08ABC233D65D257D64594E3ACC6FECD22D6277 -62724C1EA3BB6E141D8C1318E6DDF314CA8342FA8AA3D586DDCFE9B491A34D06 -FB96033D2CF9A0CE07E5B985F953AC5BFEBDD740BF2E4E84234A9873CFFCC429 -E62C40E98C198C6A8600375B8C57F94B99DB9F39718718C63F71B7013BD50DF4 -8B07070F306E3867CE805847066DE7A8889F745CA3325AB658AE774229A12EE0 -2754E9AE1A2CC0BFB41CE64EDE6C35F64D3B31393A633961A65B0948942435E3 -C135496114762A1C96C359A017102CC8514ABC5F8FD478C4D948377C62095B0D -5941FCEB8976498D64E5AF4847E90D91356B02F5D3F1DD82EE9CB361A7BD30BD -90ED3211D307B07A3E86C65CBDC303D1209F45B24FB163893ABCDCFE016A618B -EF5577344EFA756DA4BA55B4F5783D97398D9F0BF1E2C4ADC5CEE0197D7FE6AB -5F2993332A8F5D1505292307642A38A29217AC559BAC069186B81A0CD3061A8C -87F94EDE385C9E391EFF99F1D4BFEC8954F396314A75D66E8051B334048B243D -B4997AFB7594C8A99364AC553875A4E136C4E6BE5CC819D74C6B6A242FF119C5 -D65141D2C57A82C6A23FB2CCE13F7B0F9D0F1F638A285B828EFC971A6DA81560 -7069805EF29C3B54DCCC41304E41EDA03F49455FE03D4778544926538ACF49C0 -145CECAE7C3E55C7524883C0F3AFE5434A728960653BE4A85348763E2A32A12E -7AEDF42B6CD1FA2F3233A677F914008A55EA0904BC3AB68A578F71EB628A3B9C -D044EE55D7E0199A1D12254371E9178CD23B04EA9652F138104C81DB89625F79 -8DE1334A827DCF796A23EA8B51A1E694F2DD4F90A9ACCD4444B598DEB7C03424 -325FDABF04A476D9F5ECFA4F3FC0117FDBE5038FED06A0A37081D72158A97BC9 -ABE850B51A6875B8D71C31F6A47B65DEEC08C1A7A2939A116365B21B58324065 -F0764301DA41634E83358DBD3D5443883F2CF9776FEFEB5671D036DD05FF9FEC -48E47776C13E10F7FD4EB2E542B4A8D74E1D50DAE2FD949235838C33A9940EB1 -EF77C7655DDC5C2CE4C16303DF83E4CC78DF773AD2E3273FF071E4B04D0FC8E3 -FAA7EE4880A63C620F02E13AB11D05A61C97FF1189CDC9BDD7D5DCD77FE5E59A -80E0FFA93B933B37CC51E382C264281704D35A8FC56D31E7B33A020C25F22A25 -91FE54E44380484DD5676FFBBB49AFDE6682FFAE124A8A126483C207E6442F28 -5AE4A7BF8CF7FE15A764212C5D69B290D174D586E7D7720DE5A4C39C00B7CBCE -EC1C270661EB0254A773D951F44170306A22866CB23F9C968817532F7BAF9B50 -C4CC8F167D11E24F3C673F466BDA42936AA8EE3A28EA11C0BF7C67598DB45862 -EE00FDF6A9FD7A1A66F3616E1910422D17466D169FF553F2FDDD533A7E0271E7 -870EAF618B153D88BDC83FB599151E6385C2EF9A10D8E60FAB9769D92F230838 -F68922A3CB0A464A4CC11DB15F452B990752F49C114A5CC8B683F44C6C430D3F -4B72157F1D80D39672CB326DD0FD543B0F269B70C3F9901DA2A4308CAB155C1D -0641FAD7B74CB1CF11FDE1078EDF5B97C18C6E21CCB01768537D5E4860BC090E -45617C7D605EB165C1882B111A0FE68ED219D5066B17C10EA722965A5B5AED1B -AB06E59D586C1FA30F806B01EBB9B2F16890AA768D4BCF8714F5DDA695E00D5F -D60063E20356610830D24DB4BBF20C6FB34F9D0772AA79904A81FBEA67E59254 -0E93D259FCA04ACE24FDF64644472B09C8919E7FF0775744460026E6BF994E85 -20128B9E699F5AE3E54FFC891B59FDADA39D0F270571FC1349E036B95D7A138C -73A4C487E1009677EEEBFF2D4AC4FC8B54082F9556104959F6D5FB7F93F55435 -82AC9F999D2BD61FECF71669FD2A92F79CA12C8ACA80281E5023EA0F5F29C545 -DA6912173E8C03774EBA0F6CF988E97360A0F025EBB33A4D96F60542F8CC55BE -9394D13D5416149D28FE1E2737D99888846182153CF8412750DC06DE7D69CA8B -4E2EF5F60BF49E8FA303307DD211ECB9D48419A61A0F1FAF7F27D047EBDE5E47 -10BBB3D73217BD6D02328039B28F6289ED67E3685380C89BD7C863B10A5CD28C -74FE3D9DD16CD17670DB0372953E2507669C4C790FD78571FD084870D2BCBE41 -2BB1F34E907CC27345776DE346EFBEFBB3E1CDB281C57EF9C35E201605B9FE9C -29D7C668D3D978773AF7B0ECD12DA7F3DA93549740246B962AABE06B35C70960 -5E2584C24AA8C85D57F30D26997B708728970F2088C7CDB31951F15553CA8F84 -10F6736DEB73F54C8C7385ECE031E21659919200E0405F7C125C2F02E9B91CA5 -F7F16189ACF40DABD4E49ABD0655B38A9F45DC55580FF6117EFE285B244E9246 -73B994BA85A3B34189E5E501D7E62B75DA9264EA295D04C2376572D33EC65660 -3AED8708ECBD0804C5192BEC8E76DB9612E61AE8F4A7EC82C95AE01AE4B2AB38 -E0AB1E8FDEF7FE0B767F81D85196D46F915AB8CB3E9228293762EFD7DE31F4F9 -0DE2FC0E65E7D82B882A809DF681F19DFA11443487B6280518579F98B4F1A502 -EA4B74C001DE061E8C09BF15FB500A26AB8A63EC8D7957DB52FB736D6AB6D401 -ADCF4213EA6CF340E1156D125DBD8B19F456008F8094E98B06EB6DA5096ABDC5 -6BACB34BFA69816F1F2265E0117177A5544502BA91AC3593E2930AA30D276CA7 -59A56BCCF1CECA5A74D6BAA897BB4103249F13C8504DE04E5C0E22A733D7CB62 -153DC1E8534706C59D20F2BB5966CCE975C05C4F95D1BB69C7D45FF329F8C01F -CCDFDFA2C0941B083203D1F0A7648B7F6B8C33A1115081A1DB09D9541088494C -AF44453108961AB4161A40A2A1A8F1B1C454E181D9AD054BA86FEBE2A1B901B9 -B9A9BA4B9633F90D45C2138CCF1EAB4BEEEF2336EDE66FB7CFD0A84A226ACF64 -680C748BB7BDFB62F93C2BEE638ABB3A59F3CD19055AC504A0E160CB13A7C1F5 -1D1AD0095D138A3FD85F25CCF4304E82D758E963C69CB8392EA5C995B7D1802C -9D7CB493E2F572E9998346A157CF9FCBFB95846088C7376AC82F58BE46B16281 -A87532D5F6EE9E85C23C3F1960FF99CD970E6EDD1BE8D492D312359BDFBDF59E -E0B6738BEDC5F16B7EBE0F7A775EAB4BE2CBD067F7F77CAF443A4BD9AE10B7FE -7173FEE658922032B21F77A7A48325E51CC52FED690023344E49EF2614F0A63F -D474E6D89BE40194235F5BD341B449DFBBCC9E8AF23241A36EAA316BAB5FFD8C -69DA203716290169CB07A0EEE2BC4BD005CC548090B8D4EB82104C83696FDB7E -10D4B935924EA19E7C35E9379F204C10BB0854C55E7867194D9D3544EA1DA675 -5E9B3A0792BE2E87B611F92BBA99C01ED1F21366699464733D774BEC5B0A2B4C -6E8C68CFAEF8E0C69A1685BCCEBD8900C1E9C5CD26808696D16D125DAB3E5A79 -4A9484029864AD3BBDA91883A4D5DB1DF9BF789D7F18A6D5BF13A72680682A5B -196BC80E977E553FBD0EA62F08952013D77814F6ADDFC5C68A667B43B26FCD50 -EDD49E8F1B6DD262DC0B4E2EF5A1150B3DBCA61E4F0ABA689BF862FB62AB65CA -1E64F0C816D45BD236B557E1A8668EC76644EF5F607205E3F789CE757D4FDCE3 -A4D9F039F1CB8A40AA352BFBAD6643E30579D4265002BD3EFA420E275FEAA4A9 -412E33C557C0625F06A565F856989D62581CEB59A4877CA6DE7935E7D7CD2D81 -029F282754F1D25B522EE9374EED11147A229A44D5447F3265226E0889DB7C4C -2D262A6CBD15E4565C324A5508564CFEE3534C4572581E818396620BF86AF511 -3200CCAA7DB922183B3D4DD6A9C2429AAEE0A1384C74A61715E96C5D69A4E4FF -6408DD6ECF517D44BC8130971441BBD4819D25993C4CBED0591CEA1D2BDEB54D -CBF02D516A2AB97E6EBAA7D883F90C521C130BB0049FB9C22A55402C162D1E54 -2EB04A71BBCC56812460362093742AC01579A95F3E0E1BE0C6E26FAACBF5980A -A1EC5FE4811A1506C01931ABD5AF4800CD13EFD3F6F5B5F1A862EB3E7EA70CED -FD99468911AB9C55E8A5CFE3F17855AC3825BBF7EDDDB6E44603F8E9FD0DBB51 -A990B69EB47CBE44770BFD17A9DBA044FDC61AC83F5017B5C0D2E6521A217503 -430D75EF4BFE5FCAE780CF8BAC999C8B3947AE40BC76CF2BCA11BE8D4EB40BC7 -EF1E2791B9F186FE4CC9426E909162AA6B8ED62121844A58A7AD67A119A94F8E -875129AF889A8B2D49B7822EDB60132A4CFFCD4D5484E9967A3045B9AFD4B608 -A9BB626BF68B1F304E2E4E8F3E492E07DEBA18627ED11EB09E3C619B1DF9C7F7 -26F8BF1463A1E2DE2156B15FD44199E7A0C130EFC3EA967C0C8EAC057D821733 -7C923B779B2EB4C7F8CDA663708FEDFDDD2359B1DB313CCC890F7188DC1078C2 -FC523A2AD140ED1197301E87CA2F279B3545829AB7BDB40FC5FCFE5034EA7A70 -EF18705FD531098B573691DC707570426AA6FE1462CF9DBF00DC67D81FB83FFE -CFDBB288207180B0BD705938B41AA48E68E557186BAEAD79759D699266A9A9DD -D7477F7F45E7F28C7F63F597A7E67762DED6C385EB2FBE9CFD52A5D714741720 -5BB4ADD90DDBA6C760C231A58AE55F2EAD1EE93F11C5E8C708F22DAB168469B9 -BD3FDCD68EADBC1CC464C54E0D16C93269010EBAA0C5370E8E945C7BAFF08A95 -940A574143B6F9670D39FB03A25E49E164CD4DE8B3131FAC9D15F5B0447CCFC7 -4452E108BBA7358698B0FAB49402B21C3A69000223667EF56BC5873CEC8D8EE5 -F019652EA7C433C11D7B0C4996F2D21899DCBDED1A8D530733A7C92B925F75B1 -D2D6A25B3862BAB0025A66E29BB5744AF1F68CB10DE298C36B620C115B942F90 -3912F0D9646907EFCAAD7C05E5E0B053F3639EAE98A853466C5F0ADB18495648 -262C3FB2813EEA2D2211B71F1447522E0B4C5C745EA34A154214D57C8943893C -248CA1CF244490775F70B52BB2D959A9D892A241C298C495FB39AC7BF0D6C655 -3F150712AA065FCB56C3EB03F8A9CA8268DB79C11B4CEC8C9E84DFDD2BA3671E -CF1B12AEDCEAF5884548F7F9EA628262CE709321E47F8B4214C2A108E5ABD663 -783CD6AC5984CC08DBEBA75F7ACCF2A3A6CA42BE5A3777080F30182C1C038F6C -9426B5488684A0E82966E4C8EE3ECD5674B6E5508F43E0526E14F38618BE6DE9 -EE175DA4CA32A6405D726C411D89C755A8ED1F73D9DBE67FEADC9DB448668FB3 -CB6838C400F05B902D27F3AFA0BA11148541288201DFEC8A08D6B3D1D972AA53 -8DAE043A766E84CEC8894D30B7E77CAC1683363E747A4FEE17D9B83BA9754796 -20FC1A0AEED75C71EF48FED0E99317B67F690F615CCD479133B7E08DD8EB46CA -D5895810E01E07ED6D17BB54F5B9AA19D2B1ECF2795E777227B12242C07BCAA7 -2D5F6AA8083B43C6928FA28EECE66CB90899763AA1037E4C1AC76741097DF3F8 -6BD297528CC9F538C5AEEFD5A7038CAA230A09DE750B740DC8398072A0876528 -946BE8088F6EB74ECA0CC1DA30A43AC47351AC7934E90A88DAD80EC957087768 -B9893241462946A9C5A843D454DF125A906D70D9C4812EB36759537E0372D2B5 -3F4905D8F605EBA26C49A167D48E177BB6821FD39E775D9569D387673B976306 -57537EB480132851DED5740C2E175D5B08CF40BE96EC1810865DEE2B52B1CF44 -CDE1607EDD185CAC4330016DA7343C9F3DCD21BB3492FA1D027CF81E76E45358 -55F5DD22884FB50B80A2388F673EF7FD7CFF4AD4AC212EC5BBFED0EAF7ABD2FE -1FD35C0C7360DA40622DA59FEA983B702A6C53FB975EA85DF0A5DACFCC8C8549 -786DAE9D57A2029DE7185AD4E283AE57618BA3CF37744C18C882678F34A161D3 -8ADD4757DAB9B77FB891EE0DE945D551043A286426751CD6A62279E99F21D0F1 -C4E3042E8A474AF9920CF416B50A94ED092661711C4FF54A8606E1912066F340 -59CD492D9BEA791E7AC9486E6CB214169B238084ECA7515D03F9F78601AFC144 -18EA9CF8C814CA5D2F05AE6D23BED9E8A0D41E323CF572CE98599BAEA8562285 -6327E1B8A141E395C2FFE6DC90F6648598DF8B8389D8AB2E1D982F1FDC71A6CF -51994FAB23671F641D0A54906AD41759FFC09A2273D48AE572258FAFB3B768E7 -2CCDACF0DC0125F7E1D56388B817F0ACF62258E3F80317494E3D21F8A317AC28 -A82E16A930CBB531D05F7BA59667AFD26474333C201768124C80E97F92EB0A6D -73AE9A8BDD37FA688920AE2A5AF906CAF90ECBA54E5F6ADBBBC0F45DE40F147E -B2F17C816231D41ACB54D82D2D3498A9D41A4172BFDB56CFA196986AD6D28430 -983186893BA6C30408997347FB265BD80EE95E011E6C397D1D1592CC1C34AEA1 -7706D3B35D946E0C0790652F688879A53231202AB3A6B495E6E251E6829F0549 -94F5A375E8AC0696660E002B6C195446D0E08BB7BE160EFCF356A81BEDA21934 -B3365D78CEDCCDB705594895418C48D91C9AD97637D37DFE69624F7885106965 -C574270839038CC543B62CC351A2FEB42F664810D5613D27B1D86351C669FE8C -37787213F68E0657240DF253186228CA5CEC4283A4C0A125F6262B566190B701 -3AF5BDAD86A1F84029FDD7ACB5A11A23107E5413E67809AB9DA6BA5C3CCCC2EA -9D4270831EAD274C3AC9DF833BC8EBF339376EADEE48D748C4F71C97B43DBA6A -FD014C2F73B6F18EB9E52F3A7B1994B00E38020C6EF4529C318386E1F62ADA34 -95B878B5F1A3F2D7FE2EE48CC8FFB79E3140993DB96AD77281A7D314880464BD -0C205CE8A86714EE8B3A334E002DD04AFBE3C3B95E8A2B4F41CEAFA6A2CF2F95 -A06B2D1412E221D968E847313C86AAB3DE19725D2A380484CB7FE6B636DEB3BD -1C01FF657B8287339DB0A67F62AA692F14BD29175748552DF93E3247CCF71BC9 -04D1F745A4159C7AC635EF6A41106A821F3017BCA5C0D8FCBB1ABCCED6302ED7 -B9DCE19F8E88C23CD19CFA9550FC79A609942ED70B8E6BBF29422A2D7E28B9D1 -4797414CF2766E7CC48626049DAD906C45EA994EF5C3352342A127081B7632EA -61293A7A688022E6380B68CB3E60D5F464F8B2D1F185F2C56D2879C65F1EDC6C -E31AC52A05C95D96DFE2AB700DD868C718EA003669F163CDFFA3568DC92941D7 -471E6B53BB763A3A6CEEC8771287709FC88D048749CACC598977ED1676EF1F16 -34B7285528C06B059EB6528368F622FF958555AFF122823B4FCC62E4AA36BAC0 -B7CD09BB34A19A926A66AF74F996D7A6FDFBBCAE7BAC2F7C6F9432FFB4B767E5 -5EC547750CC6C4CD4202F7E289B7E8A842D8046BF9D3F38F5B401DA65FC0A792 -4EC3116BAD5B959468EDBCA52C433209E602EED5066765E2489C6BBB0F094CE5 -5FC789A3413D958578ABDDE73153553092916729EFB532556990ADBC56865AFC -A9812247D518F0E035E08D9DEA3C3764041F02301DD5C66EA559B3D47E18CE25 -BB4A6691C178902DDE9B1ECFE9CAC98190BB39465B5B1736B15583708878CE1B -E81750434A6D847218D4348AF6C56A2FFDFFE0934DDE3BB25A9678FA201A67E0 -717A6311D0E49A9474A29B0A251473F267C7F8886B9B55BCB6F609D98D2E8038 -718ACEEA982EC047A5FA3F28F9546A8010A1DF995F41E11E64B997046CE7EB2B -3556D4B27D23AF70E78A0EE95BF48FB0F7C217E39EE61DB6635EB84434464C73 -2D3B0F36AC2959BF039038A018ED1DE4CF72B7BD7A51D5CCB9FEC0B2B1968E19 -23491E9C97ADB33FC9B09FD5EABAD326D0BDBE90AFB69122C71A488F401CD387 -45DD12DD92022DB180DDCBB531ABA3CA4A5892F3E1D3528384596FD646ED97A2 -C9E2C29F1299FA52159F7CF060810CB99F2B1B261708AAF94AFA022F9A3CD267 -11432D4DF4F9F7BCF1434F9D9C94EC5BEBC6C98432BC339E0DB2461623880887 -1CFE5DA076E7A3CED52E2E307B1CDDB1D0E273A4774177DB4664C75B69C857BC -FB693B1E0DE72065D2B6BF7466FD272B1BF9DA5B838E04DA93C92F7A526F4389 -3063774999A51F2A863D118592 +8EA28401139ED158D704F62F79ED030B0B8C6FDF57D79CB24D633DAEA4D152F2 +6D841A03E07789BCC6FE50E341EBB0E62D9A727C6A55256893D89562240BE250 +43EB09EAEB3C19F1BCB4319DC85CE4FA356D25386C9646BE83B51DECCADDF627 +32DEFB64DC618A9506F372828A3B615E63CB685AF64E199532C3AA540A6B628A +8E4019355DCBF124E438AEA613E35D755F8B9263861A63966743FB7DF52F2F08 +2D4337B8ECB52EF7E09311A5FF7C40E608E68B9D0A764F83A294E3439CED09CA +CEE4EFE17CAAC95C323E51B205DA84CA8C17260D7643DA0DC0222A5A6F192602 +B240ADCCCEB494EAAA6DD3961D0A5B697A1754C77FFBFB45305B72C533D6D506 +6ED9C0E158AC4CC72F1CE4D70D35EE49FB5997BC93CA764B7CDBDC0DED90A276 +5B7333DDA2EA5CB20696DBC572D77DD5847752A7181DFB4D862B7454DF10893B +B41B2D30036A20BFAC047CA6E78118C1B59AAE1A36938CE018105478260C91BA +84F8CE3EFEC29EBDECD0C1D65AC7DE83B2A6210BD2D535EB78471375A03ED62D +7AAB24E7E940B021B6772D2C74C662E78F25782F00C956F49C078246D3D5D230 +BACC06F32A5804C4984FE5F40D53A21710435E43A9D178AE305C052A44773E2E +018175E9B6D0A6F856179DDF4B66B9B6C02080BFD3F79821CFF92F44F7900367 +F43EB4BD305740DF903D212B00B44DB51718D40A186D0CF87CFAE417FD957611 +5314E281183E04CC0218AAA77C267AFD4A0D4E1908A1D60E1005B33EB5EE5047 +BACDB817380466BF1D084140E623402D174A0810BC2447BB2A0B7A1C1E4EADDE +04EB1432A994D12446064F3F08CF3FA1D62CC361EB1B8D956CE12255C12C35FD +A0528F3C74A333C3409E138A551D2E2351DB44BC0F1F6CA6454E3A64B2A74659 +A7CCE55CDEB071FD94B4D166E17F3640DDE2B3D5633E3AD8CA18F0C6776BC247 +263AE4E046077DC73D5E9C7117AA1B8A823B5A18A64004329F47379B050597D1 +0D3925A3E59D630C1E88EC5A6B61BB696635B48A65D000820B4AB15C11F43A1D +028C5667E750A6875650883B6DD72A783280772EBF55A6E08814DF09D8047CE2 +BAF5498D4F567FCED475372BDD73DFDA5911FCC6B32ACE95DF38900BED5747CA +4880693640008D4298EBF2C9C053B38C821A244367331EC78BAD53EAC16D358E +94F1BCC39C05B61A8347E4B69B19941B320271FCE6E415FB14352587A929077F +9DC65C455A76B8C2F5E7FBBD0437EC17134242D3BB13B0722C6B197C54E5EAD8 +18AF5887986C7895294E4E810EA9BC21D29E2CED5C82BAFA33FE5058F3F252A2 +C1C2F313872048F8D2EADE51B5A94290094085F43D81ED74DE3EFE8AE9DEA7EA +49F466F7F133F2C82D656523B407797A61B8C9982D5B60293EB7F18A2085E1EF +7C1F60A8A438314F0388F722ACFCE55195C1F3F1E17159845941589928BEC56A +F31ED3C2218CDE188A3B55D17FF605E05D8AE1065CAC7B135A1E6B54EC841644 +B430A21C8B0ACAF85204A564E57FE3AAC1A4B8E8D1CFBA68852D39C4A3159DC4 +605EDF016558176CF811F7591977490B3C21A1E4A79D27E5D76310FCBD435C95 +40F95C34771663015DF949A64B171F229F83025C0A907965DD988A0F2A75E8E1 +1B498406159A0C332949577D32E1545FA3401879F05329982C72A203D7652CE6 +5AD49FF99AA463047C93F56DE4916158EED499FD7073823BC5324BC00191B24E +456D1A93FBF6E6137B4AA3A773047072021F8C20E9A553879C60A54774A9E845 +BBE9DB5D253F61EA096DDFCD8F321B74465B604BF3AD557CD20E6F1C7B0169BF +B37105EDBC8FDBF1E3DB5554775E475DD3AC4F88DF0D72CDA441C04A0CC47526 +7A35680041E78C0B8CE7A54540D591DF9CC8164EA3A3C7C871B029AF99DC0DE2 +E994E863765F9D907EF27DBB707E9EA1CB479E1AAC73F741E9EF0AA96F8455CD +0084F105227A5A3B6E066C5487FC956CDCC0E8D1F6B92E8E0F54EBDA69C7DE9B +A63EA7FC5C969185D72362A6EA294E30DE8E13CB701C90EF7E13250B34545B30 +CA046BA19A488FE9FB27C7FB9B7A6017F78D2B8E9C5ACDA576801381F6B2C435 +DA1B205A4041A7C1E0B55B44E71AB130A11713DA2D971D2FDD1416AD86412604 +6E65D39D7D77732E6B42910C85FCDCB473E5F2ED159F9AF583CA21C4AE230D63 +607222B23A1E413A671F55E6B71B1F772F9EED06CBD5F299D033DAC93F80330D +3E3CAD7850FDAE6EF00E1E1D02395CA135829FC65A6B8CC95537DCD7AB804425 +2172752ADC751F0CCE122C7A470CF445FF92D6DDBA43E0903AF9EBDDF94DEA18 +679567FD8A7E78DCF94B26D5C2E4E46BDF150D67032545A5DCA2EA06E49BA763 +D5531360293B0AF7D83A7706D82C730B97D78FD494E47502CAA1125B1AEE7093 +129C7BB9DC79AFCF1F08E8157A50AEA2CDB077806133548C9159D1C5B8EDA8BA +8FC4E14051F42AD4217EB631A846394CE942C16A2B2FA617701CB3403ACB7AED +1B0BDF2F56B65F14BD2D3D4860AFA59D61709D1AEE9388B04E40B7F6D1878293 +9D828F81DB610843ED5306632A99A23E11D00A53B46660E6AE8BD5DB9284BDB5 +BF5F5118DEF0585FB46364C7F0CA697C43712C8A366F717D600D56B3B5162E98 +24EA12C92C8831414F54DA383B358AEC3E312C456EF0DBD70E81819DDC2F00FA +B3E1EDE9C4610F5E51D0F4E0EAD5508BA97AC5D6EB5F16D2927633A7E92D521C +E9C34D91D69C5273E3B591E8E9732EC02FFCE392AA2093A154A8AF4323BE07A3 +ED6E4E2A0FC7CE95E879AC41D515014E54913E3B68D83FD3C621F400CF93F9D0 +2308DEB63797130B1C9FCB29ED6FD1BB8E140178CE267192E5D2830DFEA98831 +500EB89845F0D6B47BD87958CA500896A1AAB34AB6AE1568D0CFF85766CA1B78 +AA828FDD1B699828832ECE7E48B2AD702109B72781640C7CFA52E0A490C22A36 +D106F18CBC5B629C61A3FAFEA54946A2BF98133683FEA93C17499CC8621F9395 +D169358AF2C2D4F9008954E5DCE465E1F2333CB65DFD554052D49E268677B602 +7D064A95B1B2AF7F6B4F223D772C88201A835A934465139DAE6AE837F6F653F0 +60CCE5FAF8FE9A6198294771724BE20A20E3A65BA23F34B59310154F54730941 +C39D3D438F2DAB828172F68A16CAB5A3D1EAFD41A982C8D7DA0438146625CD88 +A0D3264A1C4947B2ADD5B320B982C12D1AA4C45334CA821177EA18F2ECFCA050 +11577526AE45DB0C4E2D11F9470954AB14BDCE0F921097A6B73239B8E11CF61D +D2A41C16C8286A4D5C1E4F90CA103203CD2361C983593BE6CDF6E1A93E15AD93 +CB4B66C51F0BB708EC26CDE3E413FD5F14100A0402D1FFEFEF92A3060C8178EE +B7448BBA900476F1ABFAB06478ADB9D426FF04604A4C7881D96A7B66E6BBDA4C +B828F046F5307345354D8DEF36543281AEEDE1407F9ED00D55BF3A7808D26422 +C26DF7CF6880111F52D0E884D8ADAB5B8CAE44DB6F4C4A7BD6D4B29C69DBE0E5 +8EE2F7FF6AA30BFFCEB9A6AF4909FFCD80F68EA11E2AFD247257D1C1ADC14E5B +FB18ADDEDA37AC39B95906EF8F5531011BC351B19A7D7056F90FA1FA0228634C +3C353A19539F78EFF72152E1A83C40F705923605DD4E3AC3801CCDFC3393B665 +9BD2334180424290256C383F229AB6062D3732B8E3497E8E413AC1CB5896016D +9333B7610D3899BE52FFC49A2F24A7E9BA277C46D1B53763CAB0FC8076E3C0B8 +AA329CB6D9BC4714891C766F4E7B1DB3C17E34CECA89CA084DEA904227976419 +E93940D4F773C28FBFB771CF206D857168C3C9200A1EDF3281465F4AA3639250 +8167B6839466831D66D7AC762F1F4138A5DC4940AB4A908CCD022D37541E02F2 +DD976E727A9AD36DAFC65FE440D4A9EDDC5434E7E60431C6F65F1EEA1FC2381F +A9CE5E6AFF4187EA3C03FF68AA552410675D55E321DE3073638EAAE12F9F164E +0206CD106458EB6E1AABEDC21E93DF33D4FE77F168CB5E2F7051077EE345377B +1AFF83007A866E86A3AB71D96C5264A524F367C5C94BC3C13FA63ADCFD3A0612 +2D384E8622C0FE2FD6F3BCD97276EC66DD3A348AED1049958516168712F7605B +4A0935B2526A6F2107AC9CCE157823E0476798790426C029B64ACD8152ABA13F +0B977FAA390FC397E5181B37B9A67FF72A8FCA83EA399DD2F3D9ED076F26EF5F +871FBBA26AFA0B83ECEC1DDCEB5A543DFB395314F32D0096520F3F03FD4C242C +9B089D84E46A62875DA88811CA1DE61E898698219EBD5C3E240A513261BC4046 +9563C6B3376ADD56C10A01080326DE260F58DC1C247F6B37C77031E58E2B62FB +07D1A560A187EB97D93214211D3EA4CE098C306985199C98F289CC14C15C24D0 +1E1B27B4626D8B877FABF9935EEBE37E5EE2FDF544E9262A4CE1748EBC50D690 +C6C58846736684482C5BE0585115BA020984571C5FD3A6787E8F5B76E9AF4258 +97BDB1937C7E482C1080639007A1F6C06993A8C168DE54FAF48E2C5BAB7CF01A +521A043B69C656EC17B10AE310F5768979A6CADC836CC10A5C842728BFDA4BF6 +D5D836EE57B49D8D42DD26FC15E13ABDF58043CF6AF5969374914DCAF4DAA415 +42D24BB29521E29CC2AE3113ACE9098A954D9A43FF36E5EC12655E49EA8118D8 +009CC243141EB69112E5F93C313A095946067DAD6662E69E12EAD6D803E3F2D0 +9FD1095FF7E1449744882D2CB4184727FBEAECF87BAD52DC5855FB3D0CEC065F +F93D86608522082CE33EE38BCA76DE948931334A7D66E306EE3F6A95EE28D40C +B79C62A848E44D7ED27BDE438054CEE3478F64F5BA9F4AB828BDC228BF616F70 +7F589760B6CB6C66558ED8F3518D283AD8950B75C8304983D0E597FD8C9FB30A +3BBBE79820E68B547A5398BE7BFB4FF9EEEBA6584275FD4E328698746763C356 +FCE94EA9CC2768AE4C6261F623755646EF15421A73870578EDEDD6ACA608FEE7 +9E3DBC12CA6A25D6C1F8628865A7A737FD13780372E1423D7B079B5360CD1A42 +0C94CFA4A5E6E812C149BDBF6A94D99D55AF61182BF43AA9DE6FF801C1524E4B +1727815484C92F8E63C2D9C716ECE1C0451ACD62832F349D6E8D2C1F9646B6BF +2B82352E14ADDC6EB1DAAD0F46D852ACE0AD78F638F491FEC7E5C70BCAC41305 +5FA3E5018BCA8CA62C412C6304C6330D020CEA9AF60ED5964B907EBF65634B11 +7D2CB6A25CFA843BE865A82D50FCFF7F94E47580E7DB88CD060FD149FC0C1EA6 +F174D407FE7CA377967ADACC5B876233ECD2601036F87D8CAEC8320D70C5EC06 +42E62EF1A2A2033B8DCEB7DDC4D8E94264EDC2AD8E3C4D1B8BAB34572312F5DD +EBD34F74EB83A5AA8FEC51E663E1F104EDBA38469DD49EFEECDEA2BE7DF7C8DC +9E424CB30B135335FB2F128DAB2EFE900F7CE6B401615B0DFCE70D4C22F51F60 +0F5247A261CEBD55B6716A36ED3ED2BC4C1DF2E1A4D63EF5C9F3D17C1C8DABA6 +CC2D06C252D21BC288020D51D1343CD2531DC71AF1195F535B2228708B03E63B +59EDB01D4BB609798EB0EC74A72837B34D5351CC617F6403E9F5465A299613A2 +2137C6DDA812F6326840FF7616CF323AAF43203742783E5570EB4FC228C93ACA +46C3FC78BEC83A655B48CBA55D337728A2DD0DEEF346338C1ABDAEE2A56F6C3E +784ED1742B242052224E4EB5FC583F238807A119E78C9B290645B516EF931BC5 +598A64FCD9BD82A5D1D4CE3F01C5A08B12147B0128C712612FBCD7E485603AFB +769B6A6829AB4237762F70824DEAD4414EE5BD4AC440F76CC9FCB155D9AD320F +A84EE2E7797EAD8E2EA03946AA3816540F4DC97EA169EF7D44A107030A5275C2 +7321F760948A24E243B95C9B44C5110576B81A9BDF7206AA9445E673F65407EE +13F5F1389F9875B5E9997ADE151DE75E7DF47A128007F0FAB2A3B6B218C104E6 +0D8B168F630110BA045BA473C7B515D6FB3E8D9D6B90AC901499306B44A79D7D +28B9AFBB5963ADA9ED6DCA3DA607C994F0DA16CEEC47717B1EAD6FAF96580133 +2055DDFAA11EAAD717569C8F702A119235569458298D489F66F50502D8D29D53 +AF4C050D783345477827805D408944472D7FF85B0EF814C36BE790C71BA19594 +5EE88D99B47B3B098FA7D8C84C99AA51290604C8C4CCD6080101235BC741E4A2 +1A2F54778A7E77B63EA497ECB71EA8AD469D65DDD6D8776707DD52160C7BFBCA +23929AE8AF2A0D8D2D8D233923404E300D0678D08BB8BA3FA4B81B46922C04A5 +A521C71F808560D2B1DE5F9F7B3B629475134B4702125805CF4CAA0BE126EF9E +AFE93778035EC428DCE96A93B274102E8FB0D11C96D0B4C27A6F33DD6000E6ED +823C814E8572E36AD1E21C8EA27462E08CB71259AC109C86999A4D50D6177E2D +0F8713C6CFB0415D02D52FA559DEC8995F536B2CF338E1E6CEFF1DDD91DF4F7F +68B550977E7BB90DEF1EC24A008312EEC5E4BFE0993743D067CEF1EFEB383C24 +C9C80F936068C2BCF2085252DFC096D05B7135F1C645A8C1BA3C8C16E6A330D8 +E4C1A41F0BFB9A0AB4C21872D512222A0059E35DDE9F144D1451AD78D16F1F4B +5B3666466A18F6247739BECE6A892A617375C722D6BF5DED9A519CF2EE29DD2E +23326963FF9CFCA32E53FE9E4704CC2FA42B915436C34BA169E9878690AB4BD4 +8AA2BA04479F5F9E472308AEBBC45CB6270A690422C68C5C56CC6675B0BEF0F5 +EB4DB9478295CF9D922F8D869A3A20C42C5B4C5E0181738262E468659AF751D1 +D0C170935944475288010298D0DAC4AE7708CB253B8941F91DA2020F47B5B55D +0470D6C4FD89D970ADACCED67DE7BA99EA1EA02A633B2E7731D0EF6556190849 +7952308071B8DC8CDBAB15F6FCFE1C667BD4C0D6C5D351E56FB5747CF7518597 +9F155290E8FAC19A51B31AAC847B696BF626B65F18919E0FB5895E49137C208B +36381592CAB93193FA04C50D4D37943FC52054E3466E7ED7134BBD646BCDAE5B +CC8C0943166E82FEFE02141592572A6EFA52FD193E0092BC581A4244F83CEB34 +C9F35737ABAF1754D61ABD899A8BBE2AF894200A759AAEDB27C4E1A339DC60A9 +F22ED20E54E952E2C6DB328E6D9F2543C318247AFDF6EE1E890D2FE0956C0924 +2C3119516A9DE1F8CD15CEB11D3F802D3F41E9B3927CECFCCBBE55F8B2C9261C +51990DD48EA5AC1900A32FC053C7812C9683564B523938B3C74C9C078DB851F6 +E219BB63042B69978523D638C549E5227921C446AFFA396A8E6728C774119791 +D77AA58D7853DB026416BB2CF5CBB624F83D4DEA2056915E43D0DD3481B41896 +E715E2AAC87C10DF63DBFF724CE4A5CCA6C6F009213E2E748275809784F65288 +F96177F90D07C3FBAB0F83FA54B46F50C5D921E498C06DEC3B704840F7AA72FC +0D0F1DB46CE59496B6A79D9169AF68E708B7E1AEAD754E6C8C6C534527CC9B09 +6513DC67C5A1941CC4061394F34D2A482450ABFFC78480ADA145FE2C24355D00 +85E581FB956F19A361C91AA32C8084BCD0443E85D313020043A4870721AAA540 +8D78F7A2B9D33DD67306A68BA901461ECB068DC745BDF0F5FD5EB4AD9E9B93BE +4D2536FC5FC13D3DA84173CB3423B67DB738C26030509EB748688943316666A1 +B6CD6976E8D383C28D5B88078C500D4135531DAE5D6DF1C5DBFF191E3382E565 +3DC50B22DEA1E1367518A9143C3158519271C41301339F8666C4180ACF631BF4 +CC44488929D90655608F33EAF4E1966C03D187181EFB474143E3F309543E687A +6AE1C12E33892D9A3C218AF94A4DE08797E639636C7D2745FA846CBB1479E2C8 +45978FE6B22D02D4CAF3DEE8542D5B978A86BFD526069981094B4F0BAF2EB6E2 +77F7AC896366A642837C057774F0A45235AE35827EB47D4D2F430CA4B8F4BD42 +45DCCAFB700E20C031FC1A38923C6173615D2D03CF4C225016CC93A0356ABB63 +B4F50AFE3BDDC417472BEBA6A3216B81A0755D68B99DF13AD956AF12518B7FB3 +9A9EF940AD5C7E788C579F0AEE8E52BC8F033CE70E995A29E48F8527313B79A4 +19A7AD0276FFB441A8A8F2DBD3EE8000C6788FDA0FEC0BFE72B1DAE52F890209 +0CB03B7C02B8CEA68328B43D16A93F40B3EF8ECA9B8C27EDF01931B06DB3ED55 +08F3017BC5965DED9281965A0DB6A6412B6AD447608346F8B254E5914E8A5093 +0B1F561AAF68179612BBAF1D8C4501FCAFA6D024AD505BB29BE89F9307793A35 +DBB3264052836CF223D6A2BE17117AD4DEBC2E3CC3853A2879C5F4B2F036871D +966EA551071A2230A00A8F12FE60114ADEA08E5F32FBED0ABBA31CD7A5D509EC +CC72EFE19AEF2107095DBAD50F73AB56ABA9D0384C29526DEF162910B89CECB0 +B0ED2F5BDA61AFC44632D737810ED47BB89994772198167315F898DE0614F2DF +A0EA64CE22FA62EC1A2D8184DCB57DFE6CD9A573AD7815CE677049AA3B073A68 +6F103C97951A401CB7D5C4E41E936C73C6ECC0AE0163576C913097A50CD2B189 +C135927450521BAC01D981B805BE453428839DBE2CF0B2A96E3D5DE93B1D9411 +BD2BDAEE782636388CDB0304E6621ED1AE849C45B51E36A9D6065F6ACFFE8224 +FBD2C5B02D2324CA550CFB66D0F9489E2B4B0DA49A3260DF965683F433F7860A +1F4B12F772F332A049F909383B88AF16C321441F3A2074590E907983B7B7E643 +1349CE37B942E166C851DBF68B2F58023566987CAB9F1D05BF773161B81A0584 +2B39DAB2E00DD4E101465EF425A6C24FE051FED0B658A2E02CE960FD55A3CAE9 +B1DEBE866D4B0CA3AD93AF477C4EDC907F3FA286153D8FBA938CE0EA2D314914 +B0F988FF0226F4409518323DFF26E78A4654827B5BF9F2A6BA534AA93C17901C +2B855C3E28AB0B0F09DA1C07CF904802C97108FB8F85E349150E773DADACBD3B +CFBC02FC33182DE08ED5C6B01FDC9C955286AD96909235404538595E81EE86D3 +8886492962E92E11B8F5C753DCBFC88306A0D390E8674C04C183830CAFF8101B +FAC76B1DC865BDEDFD3B0C28C6CA1C969993D335AF70F80782A08E13BE7F00AD +FF175C302E582B13A64B33F46640CFD5224164762F7EC20CBB779A6C6A536027 +D801CFC048190F02EFBDC670147EC52759A2D7F54E19A30989DE04DFB08062D3 +6A78B0FA6F5FDB2CB5D225CB1FCF6C71407A576E3D985AA1BF482665794CCCF5 +CFA9038ED91157260B3F85E7B50F1A47CB61519391E744F62B5E567E13AF41F4 +AF224D3A8CF5AE9734B3EFEBE5CD56CC4C26FD551CEF64D56A52D5C1D0B00F22 +727844FBFBF599DED45A466E46BD20BED6BDA0539F01A6EA7087A76313A59668 +CC48D25D0AC54558A77684114BC2941EF7E785A61CA6A4AC12113248E5F999E6 +4B7B3DDC3D06CA3196381CD543B52917660E8AAB1B5EF56CAAD0CF5CCA14AD86 +82ED132A71E7C48B79DE14525BD110E5831E0A575E2425727769A66C1F018ECD +6304682D80E7E343EB106B126DE1384D729E9F2A8E054B7DDF651207BCE28BAA +18D19C9D7085C747749C52B89A4CB492B5FABFCBACA522E21CF33CDFF0488F46 +79D81BF13513BC1293F0E17F37D808143E1C197543DFA6CA2A8969638F0CD799 +5930300FD61DB36DB8D256CB1682E23CCD65479C7791B2D3DD0BB1AD5E248674 +95277F235CC9D0BDEC4D3F320B03C3DFAADACCBA2B33422F5664E777DB049495 +2B34B5D369AFCD58F5F69DCDDB865B332EE1955226E4BACE1D4D1A71AD791785 +7BC2B701A5BF7611413DCCA1336BBBAEADC5BAF054324A641BAFFB601531B187 +791C2367A302040DF89E3A6879C50A9903DBAD252AFC558634860065244751F0 +07F6B91729FCB170140A39190956EE31CFFFB360A4FEA9F8064AF6224898C633 +15B743C005CA3603F22409B5404A532659E0748DF6A08A304B799206C26CF81A +B0B2B4737AD52DD6D2B9F3E001F2CB8FE3DFC2C42197721D534D94400AF45A79 +62BBC2D9810530D880A68004C5221B2BF6EA5D366E387B4970D82C03AAE964B7 +97763C054083502D5F7928EC7A016B779E714F80518A332587D56B98038A8F17 +CE35F07308AD6BEF760174EE9EF6D779B73D97BC8810D335A945A80AA820E495 +8ED3F2C9436E19C11C2F4C4926530E2BD813527D99DA5D43BA763E397B66FE67 +9979299DD514743C8DE3A014FA551E68257739EC2A6A06E29D3096DD4D53516B +E68204CB21CDA0AF8862980CA956DB89DD6FF54D12A120A82F1948F28F8F5F55 +B69252C842D1B564DAA862CC4C86D42124E88C2CEE773C4394EF7AB12781FDB4 +7C1F6950D36987C92896F14F6BE66DCE2D2ECF7EEBFF92D5A782A3ECF958A9BD +E8E551F0FB231241B1C9CBAC93B18A29052362F894E0A86930660BA6015CA415 +BC65885A29A4BA20D1229B0F12D03C52E38476FBC50C59CF702A6DC11F5B819F +414AA539D622755302271F43870E337595A7BBB674BD11CF0B20F0CC2FF7BD88 +6EFB43E36E3870F748593249ACA4CAFEDE6BF14C3F6B474F18C877346CAFAB38 +359620FAF58C4923ECA8EF490942E05693F0909623FD974F54928CC11A7F7E9B +6F2DD0B23EB06801AEA78B27ED6D4C718B8CB0F1E838487BCB51595E3AF1515D +9C28B2FB5E74CF4C5772178D603BA50D44C172C89B78EB40DFFFE008C8BAB54A +053D5B9A9C62E5EA50C0932F743FA66C3374B727AFCEDE1A125236A76BE64570 +9F94369064AE74428173DBCE2CFF1DF90DE1BC0A5AE52C9B93DEDAECAA606E32 +B6987990E4429C87CB6B2E08800689345862483F1C1C63EEA072EB6EF3A6DC34 +9A05C17F98D501D15C6D1FDD87B608DF395691A99D027AE89BD031CE74D96C32 +1C1DBB33B70A1DA9DF76E28A7E645601CA6843724221C83E0840D1EEC4E0A3C2 +C898A366F03152FAB5C21575FE079C8F367B72E12061AC4D85C59BD6C28D241B +118BE6000AE4CE9C2BAC0C9BE46B4BFA2EE160E65D5B9B405CDCFDB619EEF7AD +66B6C14BB536006EDAC9B340F4618372A2F71EEC48B618E1FCA5B55492DE9ACD +BDA5F30B25739C3352E70C8BC6AD31A263B89A01E3BAB92D8351206C57C40983 +7FADECB045A309CB9BFE28925446D98137D872FF8D1863376D055F4D3D0FDB00 +008A2B12570DB5E2E770F300DB06FA5F287C9E1A58F92E5C6B0AD193F44C6D62 +01822097C8059A187FD56F5E243BAB3726589CF24DF311289E9F663E8C1A9622 +21BEB646FC0C3F3BE1821A67F249E80CABF77894B5C197C00A42AF80E4F5C0E8 +51C7464C427C2DF89FCCFA851EEA7C40F661FAAB65EB5CD9D5B5F7EA5D86DF7C +C54F0504F573A3860FDDF2D186E8D36D394C861BE9C48162B61AB9A8E7DDDF31 +18404D5C8C6BDF7C8FAAB452831199090F70BA20AF0289593B3A1AAADB9B3D6E +8E0798B87E8DE26E8333E49896AC44508E835581A9BFFCEAF0E59CBB13BC04A2 +C05C936DDB7D69DBDEB9B0411CEDB53F1D149496BF51BB23C3B07F62D34A1FEF +F0BE8139A9CB352821AE90293BB79E82751336C9EDD971455FCF0452A72FA705 +0454F32DC0BC4394C4E4F4C90E203313BEC4483053CC3ABFF8E9FDAD6D65A7A8 +67FFC0B08A4F6582BE48F050C817F05B6949BB50E4B83456F801A83B9FCE8B05 +FF97F73AF6B037C8EBF49E62F3497C92F351D942E5C7AA49156458254E7E67C2 +97A49E4F75114F62623A471CB2C21A7C666D3E8088FD1F3F67627E5B6949508A +EAC44C7FF37F501348A93944ACDF4284613B9ECA369FE186E2E0C013693448B5 +CDA2B7630E09A0283236B0DB58C29B5249AFEBB87B5357549D4D55A1A871832F +F07C5CD2D1272E02A59D8433DB9FF170706AB964A07F52E4CC6782E8DCA74BFA +3D6B5347990224FC3780F036BFF243CAC8B9CBF544086C0078C290FCCB665612 +75BB17D6B80A09CF21EA087BD82592E5E3F801BE227D5EED19BC99F5750F0E24 +ECE512FB2B35DFB1B6BE645D7ECA90AA0EB583BE252BE3E7AC4A642FCDC4D541 +23180C2C71835BA0CBC06E56E99F198FFC2830021C20A9ED35DFFA76C0FBB7D9 +F48A05EC327123B520E0BC1ABDE393C0AF88AF610C1513E7E578595B90B9D101 +245006733BD8A44F89FFC7164AA59B1E73558A85F775B7AC1FC6D646D89544AA +B9CD23D9C7403F122749C21FF7539A87307084C0FA290570EC52E0BA8F306B37 +491ADF370A75112AC14F33A7F57BA0DC82271E5ADE77CB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2306,8 +2314,8 @@ @start /Fa 242[61 13[{ TeXbbad153fEncoding ReEncodeFont }1 49.8132 /CMSY6 rf /Fb 134[32 1[43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 13[34 44 -1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 4[30 1[30 30 -30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }41 +1[41 47 1[54 3[22 1[47 39 2[43 1[45 6[18 3[30 30 1[30 +30 30 30 1[18 21 18 44[{ TeXf7b6d320Encoding ReEncodeFont }42 49.8132 /CMR6 rf /Fc 135[33 3[24 29 4[40 58 18 2[22 36 2[33 36 33 33 36 50[22 46[{ TeX74afc74cEncoding ReEncodeFont }14 66.4176 /CMTI8 rf /Fd 134[43 43 59 43 45 32 32 34 1[45 @@ -2322,7 +2330,7 @@ 35 35 1[35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 3[35 1[35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 -35 35 34[{ TeX09fbbfacEncoding ReEncodeFont }85 66.4176 +35 35 35 33[{ TeX09fbbfacEncoding ReEncodeFont }86 66.4176 /CMTT8 rf /Fh 134[60 60 2[64 45 45 47 1[64 57 64 95 32 60 1[32 1[57 1[53 64 51 64 56 10[87 88 80 64 86 2[86 90 109 69 2[43 1[90 72 75 88 83 1[87 19[38 45[{ @@ -2330,7 +2338,7 @@ rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35 39 59 20 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53 72 53 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48 54 -51 50 53 6[20 4[35 1[35 35 35 1[35 20 24 20 55 35 27 +51 50 53 6[20 3[35 2[35 35 35 1[35 20 24 20 55 35 27 27 20 2[35 59 35 20 19[39 39 41 11[{ TeXf7b6d320Encoding ReEncodeFont } 71 66.4176 /CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 61 1[67 14[103 2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 @@ -2346,7 +2354,7 @@ %%Page: 1 1 TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45 b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h -(3.15\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y +(3.16\))-150 -42 y Fh(Getting)37 b(Started)-150 125 y Fi(Put)24 b(the)h(follo)n(wing)e(in)g(y)n(our)h Fg(~/.emacs)931 102 y Ff(1)-150 199 y Fg(\(autoload)38 b('org-mode)g("org")e("Org)h (mode")g(t\))-150 268 y(\(autoload)h('org-diary)g("org")f("Org)f(mode)h @@ -2386,9 +2394,9 @@ b Fg(M-S-RIGHT)-150 2935 y Fi(mo)n(v)n(e)24 b(subtree)h(up)932 b Fg(M-S-UP)-150 3004 y Fi(mo)n(v)n(e)24 b(subtree)h(do)n(wn)848 b Fg(M-S-DOWN)-150 3074 y Fi(kill)23 b(subtree)1097 b -Fg(C-c)36 b(C-h)g(C-w)-150 3144 y Fi(cop)n(y)25 b(subtree)1052 -b Fg(C-c)36 b(C-h)g(M-w)-150 3213 y Fi(y)n(ank)25 b(subtree)1046 -b Fg(C-c)36 b(C-h)g(C-y)-150 3310 y Fi(arc)n(hiv)n(e)24 +Fg(C-c)36 b(C-x)g(C-w)-150 3144 y Fi(cop)n(y)25 b(subtree)1052 +b Fg(C-c)36 b(C-x)g(M-w)-150 3213 y Fi(y)n(ank)25 b(subtree)1046 +b Fg(C-c)36 b(C-x)g(C-y)-150 3310 y Fi(arc)n(hiv)n(e)24 b(subtree)976 b Fg(C-c)36 b($)-150 3380 y Fi(T)-6 b(o)24 b(set)g(arc)n(hiv)n(e)g(lo)r(cation)h(for)e(curren)n(t)h(\014le,)f(add) h(a)g(line)f(lik)n(e)1495 3357 y Ff(3)1533 3380 y Fi(:)-150 @@ -2402,60 +2410,62 @@ (t)h(org)g(\014le)367 b Fg(C-c)36 b(C-r)-150 4060 y Fi(agenda)25 b(for)e(the)i(w)n(eek)823 b Fg(C-c)36 b(a)p Fi(1)-150 4130 y(agenda)25 b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 -b(C-o)2046 -364 y Fh(TODO)i(Items)2046 -216 y Fi(rotate)25 +b(C-o)2046 -364 y Fh(TODO)i(Items)2046 -215 y Fi(rotate)25 b(the)f(state)h(of)f(the)g(curren)n(t)g(item)354 b Fg(C-c)36 -b(C-t)2046 -147 y Fi(view)24 b(TODO)f(items)g(in)h(a)g(sparse)f(tree) -380 b Fg(C-c)36 b(C-v)2046 -50 y Fi(set)24 b(the)h(priorit)n(y)e(of)g +b(C-t)2046 -145 y Fi(view)24 b(TODO)f(items)g(in)h(a)g(sparse)f(tree) +380 b Fg(C-c)36 b(C-v)2046 -49 y Fi(set)24 b(the)h(priorit)n(y)e(of)g (the)i(curren)n(t)f(item)369 b Fg(C-c)36 b(,)g([ABC])2046 -19 y Fi(remo)n(v)n(e)24 b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)j -(item)179 b Fg(C-c)36 b(,)g(SPC)2046 100 y Fi(raise)23 +21 y Fi(remo)n(v)n(e)24 b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)j +(item)179 b Fg(C-c)36 b(,)g(SPC)2046 102 y Fi(raise)23 b(priorit)n(y)g(of)g(curren)n(t)i(item)557 b Fg(S-UP)3626 -76 y Ff(4)2046 180 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n(t) -g(item)538 b Fg(S-DOWN)3696 157 y Ff(4)2046 311 y Fi(p)r(er-\014le)23 +78 y Ff(4)2046 182 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n(t) +g(item)538 b Fg(S-DOWN)3696 159 y Ff(4)2046 313 y Fi(p)r(er-\014le)23 b(TODO)g(w)n(ork\015o)n(w)h(states:)33 b(add)24 b(line\(s\))g(lik)n(e) -3505 288 y Ff(3)3542 311 y Fi(:)2046 384 y Fg(#+SEQ_TODO:)38 -b(TODO)f(PROCRASTINATE)i(BLUFF)e(DONE)2046 464 y Fi(p)r(er-\014le)23 +3505 290 y Ff(3)3542 313 y Fi(:)2046 386 y Fg(#+SEQ_TODO:)38 +b(TODO)f(PROCRASTINATE)i(BLUFF)e(DONE)2046 466 y Fi(p)r(er-\014le)23 b(TODO)g(k)n(eyw)n(ords:)32 b(add)24 b(line\(s\))g(lik)n(e)3314 -440 y Ff(3)3351 464 y Fi(:)2046 536 y Fg(#+TYP_TODO:)38 -b(Phil)f(home)f(work)h(DONE)2046 723 y Fh(Timestamps)2046 -871 y Fi(prompt)24 b(for)f(date)i(and)f(insert)f(timestamp)266 -b Fg(C-c)36 b(.)2046 940 y Fi(lik)n(e)23 b Fg(C-c)i Fi(.)31 +443 y Ff(3)3351 466 y Fi(:)2046 539 y Fg(#+TYP_TODO:)38 +b(Phil)f(home)f(work)h(DONE)2046 728 y Fh(Timestamps)2046 +877 y Fi(prompt)24 b(for)f(date)i(and)f(insert)f(timestamp)266 +b Fg(C-c)36 b(.)2046 946 y Fi(lik)n(e)23 b Fg(C-c)i Fi(.)31 b(but)24 b(insert)g(date)g(and)h(time)e(format)144 b -Fg(C-u)36 b(C-c)g(.)2046 1010 y Fi(insert)23 b(DEADLINE)h(timestamp)516 -b Fg(C-c)36 b(C-d)2046 1080 y Fi(insert)23 b(SCHEDULED)h(timestamp)451 -b Fg(C-c)36 b(C-s)2046 1150 y Fi(create)25 b(sparse)e(tree)i(with)e -(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)2046 1219 +Fg(C-u)36 b(C-c)g(.)2046 1016 y Fi(Lik)n(e)24 b Fg(C-c)36 +b(.)24 b Fi(but)g(mak)n(e)g(stamp)h(inactiv)n(e)322 b +Fg(C-c)36 b(!)2046 1086 y Fi(insert)23 b(DEADLINE)h(timestamp)516 +b Fg(C-c)36 b(C-d)2046 1156 y Fi(insert)23 b(SCHEDULED)h(timestamp)451 +b Fg(C-c)36 b(C-s)2046 1225 y Fi(create)25 b(sparse)e(tree)i(with)e +(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)2046 1295 y Fi(the)25 b(time)e(b)r(et)n(w)n(een)j(2)e(dates)g(in)g(a)f(time)h -(range)172 b Fg(C-c)36 b(C-y)2046 1328 y Fi(c)n(hange)25 +(range)172 b Fg(C-c)36 b(C-y)2046 1377 y Fi(c)n(hange)25 b(timestamp)g(at)f(cursor)f(b)n(y)h Fe(\000)p Fi(1)g(da)n(y)238 -b Fg(S-LEFT)3696 1305 y Ff(4)2046 1409 y Fi(c)n(hange)25 +b Fg(S-LEFT)3696 1354 y Ff(4)2046 1458 y Fi(c)n(hange)25 b(timestamp)g(at)f(cursor)f(b)n(y)h(+1)g(da)n(y)238 b -Fg(S-RIGHT)3731 1385 y Ff(4)2046 1489 y Fi(c)n(hange)25 +Fg(S-RIGHT)3731 1434 y Ff(4)2046 1538 y Fi(c)n(hange)25 b(y)n(ear/mon)n(th/da)n(y)i(at)d(cursor)f(b)n(y)h Fe(\000)p -Fi(1)189 b Fg(S-DOWN)3696 1466 y Ff(4)2046 1573 y Fi(c)n(hange)25 +Fi(1)189 b Fg(S-DOWN)3696 1515 y Ff(4)2046 1622 y Fi(c)n(hange)25 b(y)n(ear/mon)n(th/da)n(y)i(at)d(cursor)f(b)n(y)h(+1)189 -b Fg(S-UP)3626 1550 y Ff(4)2046 1670 y Fi(access)25 b(the)f(calendar)g +b Fg(S-UP)3626 1599 y Ff(4)2046 1692 y Fi(access)25 b(the)f(calendar)g (for)f(the)i(curren)n(t)f(date)221 b Fg(C-c)36 b(>)2046 -1739 y Fi(insert)23 b(timestamp)i(matc)n(hing)g(date)f(in)g(calendar)89 -b Fg(C-c)36 b(<)2046 1809 y Fi(access)25 b(agenda)g(for)e(curren)n(t)h -(date)507 b Fg(C-c)36 b(C-o)2046 1905 y Fi(While)24 b(prompted)g(for)f -(a)h(date:)2046 1975 y(...)30 b(select)25 b(date)f(in)g(calendar)660 -b Fg(mouse-1/RET)2046 2045 y Fi(...)30 b(scroll)23 b(calendar)h(bac)n +1762 y Fi(insert)23 b(timestamp)i(matc)n(hing)g(date)f(in)g(calendar)89 +b Fg(C-c)36 b(<)2046 1832 y Fi(access)25 b(agenda)g(for)e(curren)n(t)h +(date)507 b Fg(C-c)36 b(C-o)2046 1901 y Fi(While)24 b(prompted)g(for)f +(a)h(date:)2046 1971 y(...)30 b(select)25 b(date)f(in)g(calendar)660 +b Fg(mouse-1/RET)2046 2041 y Fi(...)30 b(scroll)23 b(calendar)h(bac)n (k/forw)n(ard)h(one)f(mon)n(th)121 b Fg(<)36 b(/)f(>)2046 -2115 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 b(one)h(da)n(y)525 -b Fg(S-LEFT/RIGHT)2046 2184 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 -b(one)h(w)n(eek)486 b Fg(S-UP/DOWN)2046 2254 y Fi(...)30 +2111 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 b(one)h(da)n(y)525 +b Fg(S-LEFT/RIGHT)2046 2180 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 +b(one)h(w)n(eek)486 b Fg(S-UP/DOWN)2046 2250 y Fi(...)30 b(forw)n(ard/bac)n(kw)n(ard)24 b(one)h(mon)n(th)437 b -Fg(M-S-LEFT/RIGT)2046 2451 y Fh(Links)2046 2599 y Fi(globally)24 +Fg(M-S-LEFT/RIGT)2046 2449 y Fh(Links)2046 2598 y Fi(globally)24 b(store)g(link)f(to)h(the)h(curren)n(t)f(lo)r(cation)166 -b Fg(C-c)36 b(l)3662 2575 y Ff(2)2046 2668 y Fi(insert)23 +b Fg(C-c)36 b(l)3662 2574 y Ff(2)2046 2667 y Fi(insert)23 b(a)h(link)f(\(T)-6 b(AB)24 b(completes)h(stored)f(links\))138 -b Fg(C-c)36 b(C-l)2046 2738 y Fi(insert)23 b(\014le)h(link)f(with)h +b Fg(C-c)36 b(C-l)2046 2737 y Fi(insert)23 b(\014le)h(link)f(with)h (\014le)g(name)g(completion)192 b Fg(C-u)36 b(C-c)g(C-l)2046 2834 y Fi(op)r(en)25 b(link)e(at)h(p)r(oin)n(t)884 b Fg(C-c)36 b(C-o)2046 2904 y Fi(op)r(en)25 b(\014le)e(links)g(in)h -(emacs)722 b Fg(C-u)36 b(C-c)g(C-o)2046 2974 y Fi(op)r(en)25 -b(link)e(at)h(p)r(oin)n(t)884 b Fg(mouse-2)2046 3044 +(emacs)722 b Fg(C-u)36 b(C-c)g(C-o)2046 2973 y Fi(op)r(en)25 +b(link)e(at)h(p)r(oin)n(t)884 b Fg(mouse-2)2046 3043 y Fi(op)r(en)25 b(\014le)e(links)g(in)h(emacs)722 b Fg(mouse-3)2046 3140 y Fd(Link)27 b(t)n(yp)r(es)2046 3236 y Fg()247 b Fi(on)24 b(the)h(w)n(eb)2046 @@ -2508,9 +2518,9 @@ Fi(insert)23 b(horizon)n(tal)i(line)e(ab)r(o)n(v)n(e)i(the)g(curren)n (t)f(ro)n(w)100 b Fg(C-u)36 b(C-c)g(-)4242 1553 y Fd(Regions)4242 1637 y Fi(cut)25 b(rectangular)f(region)758 b Fg(C-c)36 -b(C-h)g(C-w)4242 1707 y Fi(cop)n(y)25 b(rectangular)f(region)715 -b Fg(C-c)36 b(C-h)g(M-w)4242 1777 y Fi(paste)25 b(rectangular)f(region) -695 b Fg(C-c)36 b(C-h)g(C-y)4242 1847 y Fi(\014ll)23 +b(C-x)g(C-w)4242 1707 y Fi(cop)n(y)25 b(rectangular)f(region)715 +b Fg(C-c)36 b(C-x)g(M-w)4242 1777 y Fi(paste)25 b(rectangular)f(region) +695 b Fg(C-c)36 b(C-x)g(C-y)4242 1847 y Fi(\014ll)23 b(paragraph)h(across)g(selected)h(cells)399 b Fg(C-c)36 b(C-q)4242 1931 y Fd(Calculations)4242 2015 y Fi(Except)31 b(for)e(the)i(summation)f(commands,)h(these)g(need)g(the)g(Emacs)4242 @@ -2559,7 +2569,7 @@ %%Page: 2 2 TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45 b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h -(3.15\))-150 -36 y Fh(Timeline)37 b(and)g(Agenda)-150 +(3.16\))-150 -36 y Fh(Timeline)37 b(and)g(Agenda)-150 120 y Fi(sho)n(w)24 b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 b Fg(C-c)36 b(C-r)-150 190 y Fi(...)30 b(include)24 b(past)h(dates)793 b Fg(C-u)36 b(C-c)g(C-r)-150 288 y Fi(add)24 b(curren)n(t)g(\014le)g @@ -2627,7 +2637,7 @@ b(for)23 b(prin)n(ting\))152 b Fg(C-c)36 b(C-x)g(v)2046 99 y Fi(exp)r(ort)25 b(as)e(HTML)g(\014le)804 b Fg(C-c)36 b(C-x)g(h)2046 169 y Fi(exp)r(ort)25 b(as)e(HTML)g(and)h(op)r(en)h(in)e -(bro)n(wser)266 b Fg(C-c)36 b(C-x)g(C-h)2046 239 y Fi(pre\014x)24 +(bro)n(wser)266 b Fg(C-c)36 b(C-x)g(b)2046 239 y Fi(pre\014x)24 b(arg)g(sets)g(n)n(b.)31 b(of)23 b(headline)i(lev)n(els,)e(e.g.)182 b Fg(C-3)36 b(C-c)g(C-x)g(h)2046 337 y Fi(insert)23 b(template)j(of)d (exp)r(ort)h(options)423 b Fg(C-c)36 b(C-x)g(t)2046 435 @@ -2745,7 +2755,7 @@ Fg(org-CUA-compatibility)p Fi(.)4535 3770 y Fb(Cop)n(yrigh)n(t)4838 3768 y(c)4821 3770 y Fa(\015)d Fb(2005)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3826 -y(v3.15)h(for)h(Org-Mo)r(de)e(3.15,)i(2005)4912 3882 +y(v3.16)h(for)h(Org-Mo)r(de)e(3.16,)i(2005)4912 3882 y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3937 y(based)j(on)g(refcard)g (design)g(and)f(format)i(b)n(y)f(Stephen)f(Gildea)4242 4022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e diff -r 7a3090aca393 -r 2a679c81f552 etc/orgcard.tex --- a/etc/orgcard.tex Mon Sep 19 21:25:51 2005 +0000 +++ b/etc/orgcard.tex Sun Oct 09 20:00:17 2005 +0000 @@ -1,4 +1,4 @@ -% Reference Card for Org Mode 3.15 +% Reference Card for Org Mode 3.16 % %**start of header \newcount\columnsperpage @@ -58,7 +58,7 @@ % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik % for their many good ideas. -\def\orgversionnumber{3.15} +\def\orgversionnumber{3.16} \def\year{2005} \def\shortcopyrightnotice{\vskip 1ex plus 2 fill @@ -315,9 +315,9 @@ \key{move subtree up}{M-S-UP} \key{move subtree down}{M-S-DOWN} -\key{kill subtree}{C-c C-h C-w} -\key{copy subtree}{C-c C-h M-w} -\key{yank subtree}{C-c C-h C-y} +\key{kill subtree}{C-c C-x C-w} +\key{copy subtree}{C-c C-x M-w} +\key{yank subtree}{C-c C-x C-y} \key{archive subtree}{C-c \$} To set archive location for current file, add a line like$^3$: @@ -362,20 +362,18 @@ \key{prompt for date and insert timestamp}{C-c .} \key{like \kbd{C-c} . but insert date and time format}{C-u C-c .} +\key{Like \kbd{C-c .} but make stamp inactive}{C-c !} % FIXME \key{insert DEADLINE timestamp}{C-c C-d} \key{insert SCHEDULED timestamp}{C-c C-s} \key{create sparse tree with all deadlines due}{C-c C-w} \key{the time between 2 dates in a time range}{C-c C-y} - \key{change timestamp at cursor by $-1$ day}{S-LEFT$^4$} \key{change timestamp at cursor by $+1$ day}{S-RIGHT$^4$} \key{change year/month/day at cursor by $-1$}{S-DOWN$^4$} \key{change year/month/day at cursor by $+1$}{S-UP$^4$} - \key{access the calendar for the current date}{C-c >} \key{insert timestamp matching date in calendar}{C-c <} \key{access agenda for current date}{C-c C-o} - \key{While prompted for a date:}{} \key{... select date in calendar}{mouse-1/RET} \key{... scroll calendar back/forward one month}{< / >} @@ -457,9 +455,9 @@ {\bf Regions} -\key{cut rectangular region}{C-c C-h C-w} -\key{copy rectangular region}{C-c C-h M-w} -\key{paste rectangular region}{C-c C-h C-y} +\key{cut rectangular region}{C-c C-x C-w} +\key{copy rectangular region}{C-c C-x M-w} +\key{paste rectangular region}{C-c C-x C-y} \key{fill paragraph across selected cells}{C-c C-q} {\bf Calculations} @@ -589,7 +587,7 @@ \key{export as ASCII file}{C-c C-x a} \key{export visible text only (e.g. for printing)}{C-c C-x v} \key{export as HTML file}{C-c C-x h} -\key{export as HTML and open in browser}{C-c C-x C-h} +\key{export as HTML and open in browser}{C-c C-x b} \key{prefix arg sets nb. of headline levels, e.g.}{C-3 C-c C-x h} \key{insert template of export options}{C-c C-x t} @@ -730,9 +728,6 @@ \bye -% Local variables: -% compile-command: "tex ord-mode-ref" -% TeX-master: t -% End: % arch-tag: 139f6750-5cfc-49ca-92b5-237fe5795290 + diff -r 7a3090aca393 -r 2a679c81f552 info/dir --- a/info/dir Mon Sep 19 21:25:51 2005 +0000 +++ b/info/dir Sun Oct 09 20:00:17 2005 +0000 @@ -48,6 +48,7 @@ * Message: (message). Mail and news composition mode that goes with Gnus. * MH-E: (mh-e). Emacs interface to the MH mail system. * MIME: (emacs-mime). Emacs MIME de/composition library. +* Newsticker: (newsticker). A News ticker for Emacs. * PGG: (pgg). Emacs interface to various PGP implementations. * SC: (sc). Supercite lets you cite parts of messages you're replying to, in flexible ways. diff -r 7a3090aca393 -r 2a679c81f552 leim/.cvsignore --- a/leim/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/leim/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -1,4 +1,5 @@ Makefile +makefile changed.misc changed.tit leim-list.el diff -r 7a3090aca393 -r 2a679c81f552 lib-src/.cvsignore --- a/lib-src/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/lib-src/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -20,5 +20,6 @@ update-game-score yow Makefile +makefile *-spd *.pdb diff -r 7a3090aca393 -r 2a679c81f552 lib-src/ChangeLog --- a/lib-src/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lib-src/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,22 @@ +2005-09-27 Francesco Potort,Al(B + + * etags.c: Preliminary Forth support. + (prolog_pr): Cast strlen to int before comparison. + (LOOKING_AT, LOOKING_AT_NOCASE): Let the preprocessor check that + the second argument is indeed a literal string. + (main): In append mode, sort the tags file after writing it. + +2005-09-27 Emanuele Giaquinta (tiny change) + + * etags.c (longopts, print_help, main): The -a (--append) option + can be used in ctags also; for one, the Linux make file uses it. + +2005-09-20 Chong Yidong + + * ebrowse.c (add_sym): Compare namespace names instead of + namespace objects. This prevents the parser from incorrectly + treating classes whose superclass is in another namespace. + 2005-09-15 Richard M. Stallman * Makefile.in (update-game-score.o): New target. diff -r 7a3090aca393 -r 2a679c81f552 lib-src/ebrowse.c --- a/lib-src/ebrowse.c Mon Sep 19 21:25:51 2005 +0000 +++ b/lib-src/ebrowse.c Sun Oct 09 20:00:17 2005 +0000 @@ -648,7 +648,10 @@ h %= TABLE_SIZE; for (sym = class_table[h]; sym; sym = sym->next) - if (streq (name, sym->name) && sym->namesp == scope) + if (streq (name, sym->name) + && ((!sym->namesp && !scope) + || (sym->namesp && scope + && streq (sym->namesp->name, scope->name)))) break; if (sym == NULL) diff -r 7a3090aca393 -r 2a679c81f552 lib-src/etags.c --- a/lib-src/etags.c Mon Sep 19 21:25:51 2005 +0000 +++ b/lib-src/etags.c Sun Oct 09 20:00:17 2005 +0000 @@ -41,7 +41,7 @@ * configuration file containing regexp definitions for etags. */ -char pot_etags_version[] = "@(#) pot revision number is 17.5"; +char pot_etags_version[] = "@(#) pot revision number is 17.14"; #define TRUE 1 #define FALSE 0 @@ -343,6 +343,7 @@ static void Cplusplus_entries __P((FILE *)); static void Cstar_entries __P((FILE *)); static void Erlang_functions __P((FILE *)); +static void Forth_words __P((FILE *)); static void Fortran_functions __P((FILE *)); static void HTML_labels __P((FILE *)); static void Lisp_functions __P((FILE *)); @@ -489,6 +490,7 @@ #if LONG_OPTIONS static struct option longopts[] = { + { "append", no_argument, NULL, 'a' }, { "packages-only", no_argument, &packages_only, TRUE }, { "c++", no_argument, NULL, 'C' }, { "declarations", no_argument, &declarations, TRUE }, @@ -508,7 +510,7 @@ { "parse-stdin", required_argument, NULL, STDIN }, { "version", no_argument, NULL, 'V' }, -#if CTAGS /* Etags options */ +#if CTAGS /* Ctags options */ { "backward-search", no_argument, NULL, 'B' }, { "cxref", no_argument, NULL, 'x' }, { "defines", no_argument, NULL, 'd' }, @@ -519,8 +521,7 @@ { "vgrind", no_argument, NULL, 'v' }, { "no-warn", no_argument, NULL, 'w' }, -#else /* Ctags options */ - { "append", no_argument, NULL, 'a' }, +#else /* Etags options */ { "no-defines", no_argument, NULL, 'D' }, { "no-globals", no_argument, &globals, FALSE }, { "include", required_argument, NULL, 'i' }, @@ -631,6 +632,12 @@ "In Erlang code, the tags are the functions, records and macros\n\ defined in the file."; +char *Forth_suffixes [] = + { "fth", "tok", NULL }; +static char Forth_help [] = +"In Forth code, tags are words defined by `:',\n\ +constant, code, create, defer, value, variable, buffer:, field."; + static char *Fortran_suffixes [] = { "F", "f", "f90", "for", NULL }; static char Fortran_help [] = @@ -778,6 +785,7 @@ { "c*", no_lang_help, Cstar_entries, Cstar_suffixes }, { "cobol", Cobol_help, Cobol_paragraphs, Cobol_suffixes }, { "erlang", Erlang_help, Erlang_functions, Erlang_suffixes }, + { "forth", Forth_help, Forth_words, Forth_suffixes }, { "fortran", Fortran_help, Fortran_functions, Fortran_suffixes }, { "html", HTML_help, HTML_labels, HTML_suffixes }, { "java", Cjava_help, Cjava_entries, Cjava_suffixes }, @@ -881,8 +889,7 @@ Absolute names are stored in the output file as they are.\n\ Relative ones are stored relative to the output file's directory.\n"); - if (!CTAGS) - puts ("-a, --append\n\ + puts ("-a, --append\n\ Append tag entries to existing tags file."); puts ("--packages-only\n\ @@ -1180,17 +1187,19 @@ globals = TRUE; } + /* When the optstring begins with a '-' getopt_long does not rearrange the + non-options arguments to be at the end, but leaves them alone. */ optstring = "-"; #ifdef ETAGS_REGEXPS optstring = "-r:Rc:"; #endif /* ETAGS_REGEXPS */ if (!LONG_OPTIONS) - optstring += 1; + optstring += 1; /* remove the initial '-' */ optstring = concat (optstring, - "Cf:Il:o:SVhH", - (CTAGS) ? "BxdtTuvw" : "aDi:"); - - while ((opt = getopt_long (argc, argv, optstring, longopts, 0)) != EOF) + "aCf:Il:o:SVhH", + (CTAGS) ? "BxdtTuvw" : "Di:"); + + while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF) switch (opt) { case 0: @@ -1218,6 +1227,7 @@ break; /* Common options. */ + case 'a': append_to_tagfile = TRUE; break; case 'C': cplusplus = TRUE; break; case 'f': /* for compatibility with old makefiles */ case 'o': @@ -1267,7 +1277,6 @@ break; /* Etags options */ - case 'a': append_to_tagfile = TRUE; break; case 'D': constantypedefs = FALSE; break; case 'i': included_files[nincluded_files++] = optarg; break; @@ -1285,6 +1294,7 @@ /* NOTREACHED */ } + /* No more options. Store the rest of arguments. */ for (; optind < argc; optind++) { argbuffer[current_arg].arg_type = at_filename; @@ -1413,7 +1423,7 @@ if (!CTAGS || cxref_style) { - put_entries (nodehead); /* write the remainig tags (ETAGS) */ + put_entries (nodehead); /* write the remaining tags (ETAGS) */ free_tree (nodehead); nodehead = NULL; if (!CTAGS) @@ -1465,12 +1475,13 @@ if (fclose (tagf) == EOF) pfatal (tagfile); - if (update) - { - char cmd[2*BUFSIZ+10]; - sprintf (cmd, "sort -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile); - exit (system (cmd)); - } + if (CTAGS) + if (append_to_tagfile || update) + { + char cmd[2*BUFSIZ+10]; + sprintf (cmd, "sort -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile); + exit (system (cmd)); + } return EXIT_SUCCESS; } @@ -4075,10 +4086,18 @@ char_pointer = line_buffer.buffer, \ TRUE); \ ) -#define LOOKING_AT(cp, keyword) /* keyword is a constant string */ \ - (strneq ((cp), keyword, sizeof(keyword)-1) /* cp points at keyword */ \ - && notinname ((cp)[sizeof(keyword)-1]) /* end of keyword */ \ - && ((cp) = skip_spaces((cp)+sizeof(keyword)-1))) /* skip spaces */ + +#define LOOKING_AT(cp, kw) /* kw is the keyword, a literal string */ \ + ((assert("" kw), TRUE) /* syntax error if not a literal string */ \ + && strneq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \ + && notinname ((cp)[sizeof(kw)-1]) /* end of kw */ \ + && ((cp) = skip_spaces((cp)+sizeof(kw)-1))) /* skip spaces */ + +/* Similar to LOOKING_AT but does not use notinname, does not skip */ +#define LOOKING_AT_NOCASE(cp, kw) /* the keyword is a literal string */ \ + ((assert("" kw), TRUE) /* syntax error if not a literal string */ \ + && strncaseeq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \ + && ((cp) += sizeof(kw)-1)) /* skip spaces */ /* * Read a file, but do no processing. This is used to do regexp @@ -4956,7 +4975,7 @@ /* - * Postscript tag functions + * Postscript tags * Just look for lines where the first character is '/' * Also look at "defineps" for PSWrap * Ideas by: @@ -4987,6 +5006,43 @@ /* + * Forth tags + * Ignore anything after \ followed by space or in ( ) + * Look for words defined by : + * Look for constant, code, create, defer, value, and variable + * OBP extensions: Look for buffer:, field, + * Ideas by Eduardo Horvath (2004) + */ +static void +Forth_words (inf) + FILE *inf; +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + while ((bp = skip_spaces (bp))[0] != '\0') + if (bp[0] == '\\' && iswhite(bp[1])) + break; /* read next line */ + else if (bp[0] == '(' && iswhite(bp[1])) + do /* skip to ) or eol */ + bp++; + while (*bp != ')' && *bp != '\0'); + else if ((bp[0] == ':' && iswhite(bp[1]) && bp++) + || LOOKING_AT_NOCASE (bp, "constant") + || LOOKING_AT_NOCASE (bp, "code") + || LOOKING_AT_NOCASE (bp, "create") + || LOOKING_AT_NOCASE (bp, "defer") + || LOOKING_AT_NOCASE (bp, "value") + || LOOKING_AT_NOCASE (bp, "variable") + || LOOKING_AT_NOCASE (bp, "buffer:") + || LOOKING_AT_NOCASE (bp, "field")) + get_tag (skip_spaces (bp), NULL); /* Yay! A definition! */ + else + bp = skip_non_spaces (bp); +} + + +/* * Scheme tag functions * look for (def... xyzzy * (def... (xyzzy @@ -4994,7 +5050,6 @@ * (set! xyzzy * Original code by Ken Haase (1985?) */ - static void Scheme_functions (inf) FILE *inf; @@ -5213,11 +5268,6 @@ } -/* Similar to LOOKING_AT but does not use notinname, does not skip */ -#define LOOKING_AT_NOCASE(cp, kw) /* kw is a constant string */ \ - (strncaseeq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \ - && ((cp) += sizeof(kw)-1)) /* skip spaces */ - /* * HTML support. * Contents of , <h1>, <h2>, <h3> are tags. @@ -5434,7 +5484,7 @@ || (s[pos] == '(' && (pos += 1)) || (s[pos] == ':' && s[pos + 1] == '-' && (pos += 2))) && (last == NULL /* save only the first clause */ - || len != strlen (last) + || len != (int)strlen (last) || !strneq (s, last, len))) { make_tag (s, len, TRUE, s, pos, lineno, linecharno); @@ -6502,7 +6552,7 @@ : *s1 - *s2); } -/* Skip spaces, return new pointer. */ +/* Skip spaces (end of string is not space), return new pointer. */ static char * skip_spaces (cp) char *cp; @@ -6512,7 +6562,7 @@ return cp; } -/* Skip non spaces, return new pointer. */ +/* Skip non spaces, except end of string, return new pointer. */ static char * skip_non_spaces (cp) char *cp; diff -r 7a3090aca393 -r 2a679c81f552 lisp/.cvsignore --- a/lisp/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -1,6 +1,8 @@ *.elc MANIFEST Makefile +Makefile.unix +makefile elc.tar.gz cus-load.el finder-inf.el diff -r 7a3090aca393 -r 2a679c81f552 lisp/ChangeLog --- a/lisp/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,9 +1,863 @@ +2005-10-06 Masatake YAMATO <jet@gyve.org> + + * progmodes/gdb-ui.el (gdb-info-breakpoints-custom): Put + `font-lock-function-name-face'. + (gdb-info-frames-custom): Put `font-lock-function-name-face' + and `font-lock-variable-name-face' + (gdb-registers-font-lock-keywords): New font lock keywords definition. + (gdb-registers-mode): Use `gdb-registers-font-lock-keywords`. + (gdb-memory-font-lock-keywords): New font lock keywords definition. + (gdb-memory-mode): Use `gdb-memory-font-lock-keywords'. + (gdb-local-font-lock-keywords): New font lock keywords definition. + (gdb-locals-mode): Use `gdb-local-font-lock-keywords' + (gdb-threads-font-lock-keywords): New font lock keywords definition. + (gdb-threads-mode): Use `gdb-threads-font-lock-keywords'. + +2005-10-05 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/scheme.el (scheme-mode-syntax-table): Mark ; as being + also the second char of a comment-start sequence. + (scheme-sexp-comment-syntax-table): New var. + (lambda, define): Set their scheme-doc-string-elt property. + (scheme-font-lock-syntactic-face-function): Handle sexp-comments. + Use lisp-font-lock-syntactic-face-function now that it properly + handles |...| symbols. + (scheme-mode-variables): Set lisp-doc-string-elt-property, + parse-sexp-lookup-properties and font-lock-extra-managed-props. + + * emacs-lisp/lisp-mode.el (lisp-mode-syntax-table): Move the nesting + bit from # to |. + (lisp-font-lock-syntactic-face-function): Distinguish |...| symbols. + + * emacs-lisp/lisp-mode.el (lambda): Add its doc-string-elt property. + (lisp-doc-string-elt-property): New var. + (lisp-font-lock-syntactic-face-function): Use it. + Rewrite to recognize docstrings even for forms not at toplevel. + + * progmodes/scheme.el (scheme-mode-syntax-table): Put the nested + annotation on the | part of #| rather than on the # part. + (scheme-font-lock-syntactic-face-function): New function, to + distinguish strings from |...| symbols. + (scheme-mode-variables): Use it. Also fix up the font-lock-time + syntax-table so that #|...|# is properly highlighted. + + * emacs-lisp/lisp-mode.el (lisp-font-lock-syntactic-face-function): + Don't mark as docstring the 3rd elem of an unknown toplevel form. + +2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca> + + * bindings.el (global-map): Resync [home] and [end] bindings with C-a + and C-e. + + * emacs-lisp/eldoc.el: Move comments into docstrings. + (eldoc-message-commands): Initialize in its declaration. + Add move-beginning-of-line and move-end-of-line. + (eldoc-add-command, eldoc-add-command-completions) + (eldoc-remove-command, eldoc-remove-command-completions): Simplify. + + * outline.el (outline-mark-subtree): Activate the mark. + + * calendar/appt.el (appt-time-regexp): New var. + (appt-add, appt-make-list): Use it. + (appt-convert-time): Clean up. + + * textmodes/tex-mode.el (tex-font-lock-syntactic-face-function): + Don't set any syntax-table property here. + (tex-font-lock-verb): New function. Do it here. + (tex-font-lock-syntactic-keywords): Use it. + +2005-10-04 Richard M. Stallman <rms@gnu.org> + + * wid-edit.el (widget-file-complete): Get the widget start point + the right way. Default directory to `/' if file has none. + + * x-dnd.el (x-dnd-drop-data): Check for dedicated windows. + + * textmodes/flyspell.el (flyspell-mode-on): + Call ispell-maybe-find-aspell-dictionaries. + + * textmodes/ispell.el (ispell-word, ispell-region): + Call ispell-maybe-find-aspell-dictionaries. + (ispell-accept-buffer-local-defs): + Don't call ispell-maybe-find-aspell-dictionaries + +2005-10-04 Richard M. Stallman <rms@gnu.org> + + * iswitchb.el (iswitchb-buffer-ignore): Label it risky. + +2005-10-04 Emilio C. Lopes <eclig@gmx.net> + + * iswitchb.el (iswitchb-ignore-buffername-p): Use `functionp' + instead of `fboundp' in order to allow for anonymous functions. + +2005-10-04 Chong Yidong <cyd@stupidchicken.com> + + * info.el (Info-next, Info-prev, Info-up): Select info buffer, in + case the user clicks on the link while another window is selected. + (Info-speedbar-hierarchy-buttons): Use speedbar-current-frame. + + * dframe.el (dframe-update-keymap): Use mouse-1-click-follows-link + functionality. + (dframe-help-echo): Save point in case mouse tracking is off. + +2005-10-04 Thien-Thi Nguyen <ttn@gnu.org> + + * net/ange-ftp.el (ange-ftp-ls): Fix typo introduced in last change. + +2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/cc-styles.el (c-setup-paragraph-variables): Make sure we do + not change the global value of those vars. + + * progmodes/cc-mode.el (c-basic-common-init): Remove calls to + make-local-variable which we do not need any more. + +2005-10-03 Chong Yidong <cyd@stupidchicken.com> + + * speedbar.el (speedbar-ignored-path-regexp, speedbar-line-path) + (speedbar-ignored-path-expressions, speedbar-buffers-line-path) + (speedbar-add-ignored-path-regexp, speedbar-buffers-line-path) + (speedbar-path-line): Define obsolete aliases. + (speedbar-line-directory): Doc fix. + + * progmodes/vhdl-mode.el (vhdl-speedbar-initialize) + (vhdl-speedbar-rescan-hierarchy): Call speedbar-line-directory + instead of speedbar-line-path. + +2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * x-dnd.el (x-dnd-drop-data): Don't set dnd-open-file-other-window + to nil if dropping on a window. Handle dropping on a minibuffer window + like dropping on a non-window part of Emacs. + +2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca> + + * net/ange-ftp.el: Use with-current-buffer. + (ange-ftp-insert-directory): Do not follow symlinks any more. + + * textmodes/ispell.el (ispell-find-aspell-dictionaries): + Remove interactive spec. + +2005-10-03 Kim F. Storm <storm@cua.dk> + + * ido.el (ido-mode): Use custom-initialize-set. + +2005-10-02 Richard M. Stallman <rms@gnu.org> + + * progmodes/ebnf2ps.el (ebnf-eps-production-list): + Use insert-buffer-substring. + + * net/tramp.el: Pacify byte compiler warnings in pacification code. + (tramp-handle-file-local-copy): Use insert-buffer-substring. + +2005-10-02 Stefan Monnier <monnier@iro.umontreal.ca> + + * net/ange-ftp.el (ange-ftp-insert-directory): Undo unintended part + in last change. + (ange-ftp-insert-directory): Fix up the search for the case where + `file' is absolute. + +2005-10-02 Romain Francoise <romain@orebokech.com> + + * progmodes/compile.el (compile-goto-error): Delete extra paren. + +2005-10-02 Andreas Schwab <schwab@suse.de> + + * ediff-ptch.el (ediff-fixup-patch-map): Handle file names without + directory component in the session info. + +2005-10-01 Richard M. Stallman <rms@gnu.org> + + * comint.el (comint-redirect-subvert-readonly): Doc fix. + + * simple.el (next-error-internal): New function. + + * progmodes/compile.el (compilation-buffer-name): New arg MODE-COMMAND. + (compilation-start): Pass new arg to compilation-buffer-name. + (compile-goto-error): Use next-error-internal. + +2005-10-01 Chong Yidong <cyd@stupidchicken.com> + + * speedbar.el: Remove RCS tag. + (speedbar-check-read-only): Handle non-existent files. + + * dframe.el, ezimage.el, sb-image.el: Remove RCS tags. + + * info.el (Info-speedbar-hierarchy-buttons) + (Info-speedbar-goto-node): Call speedbar-select-attached-frame. + +2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de> + + * textmodes/bibtex.el (bibtex-valid-entry-whitespace-re): + Do not match newline. + (bibtex-realign): Do not use bibtex-valid-entry-whitespace-re. + (bibtex-summary): Remove unnecessary save-excursion. + (bibtex-fill-field-bounds): Use fill-region-as-paragraph. + +2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * term/mac-win.el: Add charset info for "iso10646-1". + Modify default fontset to use ATSUI-compatible fonts for some charsets + if available. + +2005-10-01 Chong Yidong <cyd@stupidchicken.com> + + * speedbar.el: Re-apply arch tag. + (speedbar-version): Rename to version 1.0. Suggested by Eric + M. Ludlam. + Reapply two changes from Emacs CVS' version of speedbar lost + during the merge: + (speedbar-use-imenu-flag): Avoid unnecessary use of locate-library. + (speedbar-frame-parameters): Improve customize type. + +2005-09-30 Stefan Monnier <monnier@iro.umontreal.ca> + + * net/ange-ftp.el (ange-ftp-gwp-start): Use with-current-buffer. + (ange-ftp-file-directory-p): Fix the symlink case. + (ange-ftp-insert-directory): When listing a single file, get a list of + the parent buffer and extract the relevant line. Inspired from a patch + by Katsumi Yamaoka <yamaoka@jpl.org>. + (ange-ftp-file-name-sans-versions): Simplify. + +2005-09-30 Bill Wohler <wohler@newt.com> + + Move MH-E image files from toolbar and mail directories into + etc/images. + + * mail/reply2.*: Move to etc/images/mail/reply*. + + * toolbar/execute.*, toolbar/highlight.*, toolbar/mh-logo.xpm: + * toolbar/page-down.*, toolbar/show.*, toolbar/widen.*: Move to + etc/images. + + * toolbar/alias.*, toolbar/refile.*, toolbar/repack.*: + * toolbar/reply*: Move to etc/images/mail. + + * toolbar/rescan.*: Move and rename to etc/images/refresh.*. + +2005-09-30 Eric M. Ludlam <zappo@gnu.org> + + * speedbar.el: New version 1.0pre3. + + Frame management code (including timer, and mouse click specifics) + moved to dframe.el: + (speedbar-attached-frame): Removed. Use dframe-attached-frame. + (speedbar-timer): Removed. Use dframe-timer. + (speedbar-close-frame): Removed. Use dframe-close-frame. + (speedbar-activity-change-focus-flag): Removed. Use + dframe-activity-change-focus-flag. + (speedbar-update-speed, speedbar-navigating-speed): Obsolete. Use + dframe-update-speed. + + (speedbar-current-frame): New macro. Use this instead of the + variable speedbar-frame. + + (speedbar-use-images, speedbar-expand-image-button-alist) + (speedbar-insert-image-button-maybe): Moved to sb-image.el. + + (speedbar-find-image-on-load-path): Removed. Replaced by + defezimage in ezimage.el. + (speedbar-expand-image-button-alist): Removed. Replaced by + ezimage-expand-image-button-alist in ezimage.el. + + (speedbar-ignored-directory-regexp) + (speedbar-add-ignored-directory-regexp) + (speedbar-ignored-directory-expressions) + (speedbar-line-directory, speedbar-buffers-line-directory) + (speedbar-directory-line, speedbar-buffers-line-directory): + Renamed, replacing `path' with `directory'. + + (speedbar-create-directory, speedbar-expand-line-descendants) + (speedbar-toggle-line-expansion) + (speedbar-contract-line-descendants): New commands. + + (speedbar-query-confirmation-method, speedbar-select-frame-method) + (speedbar-use-tool-tips-flag): New options. + + (speedbar-check-read-only, speedbar-require-version) + (speedbar-insert-separator, speedbar-buffers-tail-notes) + (speedbar-handle-delete-frame, speedbar-try-completion) + (speedbar-update-localized-contents): New functions. + + (speedbar-incompatible-version, speedbar-ro-to-do-point) + (speedbar-object-read-only-indicator): New variables. + + (speedbar-visiting-tag-hook, speedbar-before-visiting-file-hook): + New hooks. + + (speedbar-separator-face): New face. + + (speedbar-supported-extension-expressions): Add `.g' and `.ma?k'. + (speedbar-ignored-modes): Add fundamental-mode. + (speedbar-directory-unshown-regexp): Add . directories. + + (speedbar-key-map): Remove old SPC and DEL page up/down keys. + (speedbar-file-key-map): Add SPC to toggle node expansion, `[' and + `]' for full expand/close. + (speedbar-buffers-key-map): Add SPC to toggle node expansion. + + (speedbar-check-vc): Support hidden files. + (speedbar-vc-check-dir-p): Use vc-state if available for CVS. + (speedbar-this-file-in-vc): Use vc-state if available. If VC + state is nil, it is not checked out. + + (speedbar-line-text, speedbar-line-token): Support expand buttons + with no text. + (speedbar-refresh): Universal argument acts as power-click. + (speedbar-fetch-dynamic-tags): If a buffer is in Emacs, switch to + that buffer to get variable values. + + And many other bugfixes. + + * dframe.el, ezimage.el, sb-image.el: New files. + + * sb-*.xpm: Remove files. New image files installed into + etc/images/ezimage. + +2005-09-30 Kenichi Handa <handa@m17n.org> + + * ps-mule.el (ps-mule-show-warning): If a character is in + ps-print-translation-table, don't treat it as non-printable. + +2005-09-30 David Ponce <david@dponce.com> + + * tree-widget.el (tree-widget-themes-load-path): New variable. + (tree-widget-themes-directory): Doc fix. + (tree-widget-image-formats) [Emacs]: Doc fix. + (tree-widget--locate-sub-directory): New function. + (tree-widget-themes-directory): Use it. + + * recentf.el (recentf-filename-handlers): Rename from + `recentf-filename-handler'. Allow a list of functions. + (recentf-menu-items-for-commands): Fix :help strings. + (recentf-apply-filename-handlers): New function. + (recentf-expand-file-name): Use it. + (recentf-cleanup): Remove duplicates too. + +2005-09-29 Juri Linkov <juri@jurta.org> + + * faces.el: Rearrange face definitions to be in the same order as + their face descriptions in "(emacs)Standard Faces". + + * isearch.el (isearch, lazy-highlight): Add group `basic-faces'. + + * tooltip.el (tooltip): Add group `basic-faces'. + + * buff-menu.el (Buffer-menu-buffer): Remove group + `font-lock-highlighting-faces'. + + * progmodes/compile.el (compilation-error, compilation-warning) + (compilation-info, compilation-line-number, compilation-column-number): + Change group from `font-lock-highlighting-faces' to `compilation'. + + * progmodes/vhdl-mode.el (vhdl-font-lock-prompt-face) + (vhdl-font-lock-attribute-face, vhdl-font-lock-enumvalue-face) + (vhdl-font-lock-function-face, vhdl-font-lock-directive-face) + (vhdl-font-lock-reserved-words-face) + (vhdl-font-lock-translate-off-face, syntax-alist): Remove group + `font-lock-highlighting-faces'. + + * cus-edit.el (custom-buffer-sort-alphabetically): Default to nil. + +2005-09-28 Kim F. Storm <storm@cua.dk> + + * emulation/cua-base.el: Set CUA move property on additional commands: + up-list, down-list, backward-up-list, end-of-defun beginning-of-defun, + forward-sexp, backward-sexp, forward-list, backward-list. + +2005-09-28 Romain Francoise <romain@orebokech.com> + + * comint.el (comint-show-output): Really set point at the + beginning of the output when not using `comint-use-prompt-regexp'. + +2005-09-27 Jay Belanger <belanger@truman.edu> + + * calc/calc-lang.el (math-oper-table): Raise the precedence of "/" + in TeX mode. + +2005-09-26 Juanma Barranquero <lekktu@gmail.com> + + * textmodes/org.el (org-table-sum): Fix format string. + + * textmodes/tex-mode.el (tex-insert-quote, latex-indent): + Quote face names. + +2005-09-26 Romain Francoise <romain@orebokech.com> + + * isearch.el (isearch-forward-regexp): Close doc string. + +2005-09-25 Richard M. Stallman <rms@gnu.org> + + * simple.el (blink-matching-open): Don't no-op when point is BEGV+1. + + * isearch.el (isearch-forward, isearch-forward-regexp): Doc fixes. + + * progmodes/compile.el (compilation-error-properties): + When getting the file from the previous error message, + correctly decode the new data format. + + * progmodes/cc-cmds.el (c-electric-paren): + Call old-blink-paren only for close-paren. + +2005-09-24 Andreas Schwab <schwab@suse.de> + + * term/rxvt.el (rxvt-register-default-colors): Delete redundant + condition. + +2005-09-25 Romain Francoise <romain@orebokech.com> + + * dired-aux.el (dired-copy-file-recursive): + * dired.el (dired-delete-file): + * ediff-mult.el (ediff-dir-diff-copy-file): + * ediff-util.el (ediff-test-save-region): + * forms.el (forms-mode): + * ido.el (ido-file-internal, ido-delete-file-at-head): + * log-edit.el (log-edit-done): + * ses.el (ses-yank-resize): + * play/gomoku.el (gomoku-human-plays, gomoku) + (gomoku-human-resigns, gomoku-prompt-for-other-game) + (gomoku-offer-a-draw): + * play/landmark.el (lm-human-resigns, lm): + * net/eudcb-ldap.el (eudc-ldap-check-base): + * play/mpuz.el (mpuz-offer-abort, mpuz-try-letter, mpuz-close-game): + * progmodes/ebrowse.el (ebrowse-find-pattern): + * progmodes/idlw-shell.el (idlwave-shell-set-bp-check): + * textmodes/reftex-index.el (reftex-index-initialize-phrases-buffer): + End `yes-or-no-p' and `y-or-n-p' prompts with question mark and space. + + * vc.el (vc-delete-file): + * play/gomoku.el (gomoku-terminate-game, gomoku) + (gomoku-prompt-for-move, gomoku-human-takes-back): + * play/landmark.el (lm-human-takes-back, lm-prompt-for-move) + (lm-start-robot, lm-human-plays): Remove extraneous spaces in messages. + +2005-09-24 Dan Nicolaescu <dann@ics.uci.edu> + + * term/rxvt.el (rxvt-register-default-colors): Add support for 255 + color rxvt terminals by using the code xterm.el used to use before + 2005-04-09 in order to match the colors used by rxvt. + +2005-09-24 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change) + + * term/rxvt.el (rxvt-register-default-colors): Add support for 88 + colors rxvt-unicode terminals by using the same code as xterm.el. + +2005-09-24 Stefan Monnier <monnier@iro.umontreal.ca> + + * textmodes/tex-mode.el (tex-font-lock-append-prop) + (tex-font-lock-suscript, tex-insert-quote, latex-indent): Adjust to the + new symbol used for the tex-verbatim face. + +2005-09-24 Emilio C. Lopes <eclig@gmx.net> + + * woman.el (woman-file-name): + * wid-edit.el (widget-file-prompt-value) + (widget-coding-system-prompt-value): + * w32-fns.el (set-w32-system-coding-system): + * vc.el (vc-version-diff, vc-annotate): + * textmodes/reftex-auc.el (reftex-arg-cite) + (reftex-arg-index-tag): + * textmodes/refer.el (refer-get-bib-files): + * textmodes/artist.el (artist-figlet-choose-font): + * terminal.el (terminal-emulator): + * replace.el (occur-read-primary-args): + * rect.el (string-rectangle, string-insert-rectangle): + * ps-print.el (ps-print-preprint): + * progmodes/pascal.el (pascal-goto-defun): + * progmodes/etags.el (visit-tags-table, visit-tags-table-buffer): + * progmodes/compile.el (compilation-find-file): + * printing.el (pr-interactive-n-up): + * play/animate.el (animate-birthday-present): + * net/rcompile.el (remote-compile): + * man.el (man, Man-goto-section, Man-follow-manual-reference): + * mail/rmailsum.el (rmail-summary-search-backward) + (rmail-summary-search): + * mail/rmailout.el (rmail-output-read-rmail-file-name) + (rmail-output-read-file-name): + * mail/rmail.el (rmail-search, rmail-search-backwards): + * mail/mailabbrev.el (merge-mail-abbrevs, rebuild-mail-abbrevs): + * locate.el (locate): + * international/quail.el (quail-show-keyboard-layout): + * international/mule.el (set-buffer-file-coding-system) + (revert-buffer-with-coding-system, set-file-name-coding-system) + (set-terminal-coding-system, set-keyboard-coding-system) + (set-next-selection-coding-system): + * international/mule-diag.el (describe-coding-system) + (describe-font, describe-fontset): + * international/mule-cmds.el (universal-coding-system-argument) + (search-unencodable-char, describe-input-method) + (set-language-environment, describe-language-environment): + * international/codepage.el (codepage-setup): + * international/code-pages.el (codepage-setup): + * info.el (Info-search, Info-follow-reference) + (Info-search-backward): + * emacs-lisp/advice.el (ad-read-advised-function) + (ad-read-advice-class, ad-clear-cache, ad-activate) + (ad-deactivate, ad-update, ad-unadvise, ad-read-advice-name) + (ad-enable-advice, ad-disable-advice, ad-remove-advice) + (ad-read-regexp): + * ediff-util.el (ediff-toggle-regexp-match): + * ediff-ptch.el (ediff-prompt-for-patch-file): + * dired-aux.el (dired-diff): + * diff.el (diff): + * cus-edit.el (custom-variable-prompt): + * calendar/timeclock.el (timeclock-ask-for-project): + * calc/calcalg3.el (calc-get-fit-variables): + * calc/calc-store.el (calc-edit-variable) + (calc-permanent-variable): + * vc-mcvs.el (vc-mcvs-register): + * shadowfile.el (shadow-define-literal-group): + * woman.el (woman-file-name): + * vc.el (vc-version-diff, vc-merge): + * textmodes/reftex-index.el (reftex-index-complete-tag): + * format.el (format-decode-buffer, format-decode-region): + * emulation/viper-cmd.el (viper-read-string-with-history): + * emacs-lisp/debug.el (cancel-debug-on-entry): + * emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): + * ediff.el (ediff-merge-revisions) + (ediff-merge-revisions-with-ancestor, ediff-revision): + * completion.el (interactive-completion-string-reader): + * calc/calc-prog.el (calc-user-define-formula): + Follow convention for reading with the minibuffer. + +2005-09-24 Steven Huwig <steven_h@acm.org> (tiny change) + + * progmodes/python.el (python-describe-symbol): Add globals() and + locals() to the arguments of emacs.ehelp. + +2005-09-24 Magnus Henoch <mange@freemail.hu> + + * textmodes/ispell.el (ispell-maybe-find-aspell-dictionaries): + New function, code extracted from ispell-valid-dictionary-list. + (ispell-valid-dictionary-list, ispell-accept-buffer-local-defs): + Call it. + +2005-09-24 Eli Zaretskii <eliz@gnu.org> + + * subr.el (version-regexp-alist): Extend valid syntax for version + strings: allow any of the characters -,_,+ to separate the + alpha/beta/rc part from the version part. Doc fix. + (version-to-list): Doc fix. Bind case-fold-search to t, as advertised. + +2005-09-23 David Reitter <david.reitter@gmail.com> + + * mail/mailclient.el: New file. + +2005-09-23 Richard M. Stallman <rms@gnu.org> + + * textmodes/flyspell.el (flyspell-highlight-incorrect-region) + (flyspell-incorrect-hook, flyspell-highlight-duplicate-region): + Doc fixes. + + * progmodes/cc-mode.el (c-font-lock-init): + Specify font-lock-lines-before. + +2005-09-23 Stefan Monnier <monnier@iro.umontreal.ca> + + * smerge-mode.el (smerge-remove-props): Cause re-highlighting of the + whole conflict. + +2005-09-23 Carsten Dominik <dominik@science.uva.nl> + + * textmodes/org.el (org-mode-map, orgtbl-mode-map): + Move keybindings with `C-c C-h' prefix to `C-c C-x' prefix. Make use + of `remap' feature when available. Additional key bindings for + better tty support. + (org-mode-restart, org-force-self-insert): New commands. + (org-time-stamp-inactive): New command. + (org-remap): New function. + (org-table-auto-blank-field, org-level-color-stars-only): New options. + (org-enable-fixed-width-editor): Move to `org-structure' + customization group. + (org-self-insert-command, orgtbl-self-insert-command): Modify to + blank field after field motion commands. + +2005-09-23 Kenichi Handa <handa@m17n.org> + + * international/mule-cmds.el (set-language-environment): + Don't check utf-translate-cjk-lang-env is nil or not on deciding if we + have to call utf-translate-cjk-load-tables. + +2005-09-22 Stefan Monnier <monnier@iro.umontreal.ca> + + * mouse.el (mouse-move-drag-overlay): Fix last change. + +2005-09-22 David Ponce <david@dponce.com> + + * tree-widget.el (tree-widget-value-create): Fix previous change. + +2005-09-21 Dan Nicolaescu <dann@ics.uci.edu> + + * term/xterm.el (terminal-init-xterm): Fix loading rxvt at run time. + +2005-09-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * mouse.el (mouse-move-drag-overlay): New function. + (mouse-drag-region-1): Use it. + Try to simplify a bit the state handling. Handle clicks on links + inside intangible areas. + (mouse-save-then-kill): Minor simplification. + (mouse-secondary-overlay): Make it always non-nil instead of + recreating it each time. + (mouse-start-secondary, mouse-set-secondary, mouse-drag-secondary) + (mouse-kill-secondary, mouse-secondary-save-then-kill): + Simplify accordingly. + +2005-09-21 Dan Nicolaescu <dann@ics.uci.edu> + + * term/rxvt.el (rxvt-standard-colors): Fix some colors. + +2005-09-20 Michael Kifer <kifer@cs.stonybrook.edu> + + * ediff-ptch.el (ediff-prompt-for-patch-file): More intuitive prompt. + (ediff-file-name-sans-prefix): Treat nil as an empty string. + (ediff-fixup-patch-map): Better heuristic for intuiting the file names + to patch. + + * ediff-util.el: Use insert-buffer-substring. + + * ediff-vers.el (cvs-run-ediff-on-file-descriptor): Bug fix. + + * emulation/viper-cmd.el (viper-change-state): Don't move over the + field boundaries in the minibuffer. + (viper-set-minibuffer-style): Add viper-minibuffer-post-command-hook. + (viper-minibuffer-post-command-hook): New hook. + (viper-line): Don't move cursor at bolp. + + * emulation/viper-ex.el (ex-pwd, viper-info-on-file): Fix message. + + * emulation/viper-init.el: Add alias to make-variable-buffer-local to + avoid compiler warnings. + + * emulation/viper-macs.el (ex-map): Better messages. + + * emulation/viper-utils.el (viper-beginning-of-field): New function. + + * emulation/viper.el: Replace make-variable-buffer-local with + viper-make-variable-buffer-local everywhere, to avoid warnings. + +2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca> + + * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line): + Delete unused var `old-selected-window'. + (mouse-drag-region-1): Delete unused vars `start-frame', `end-of-range'. + (mouse-drag-secondary): Delete unused var `start-frame'. + +2005-09-19 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change) + + * term/rxvt.el (terminal-init-rxvt): Add entry for [end]. + +2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca> + + * calendar/calendar.el (mark-visible-calendar-date): Save excursion. + Re-indent within 80 columns. Use inhibit-read-only. + +2005-09-19 Romain Francoise <romain@orebokech.com> + + * calendar/diary-lib.el (mark-diary-entries): Revert last change. + +2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca> + + * font-lock.el (font-lock-default-fontify-region): Don't add a line + unconditionally, since the after-change-function already did it. + +2005-09-19 Miles Bader <miles@gnu.org> + + * net/newsticker.el: Get rid of CVS keyword. + +2005-09-19 Johan Bockg,Ae(Brd <bojohan+sf@dd.chalmers.se> + + * dired-aux.el (dired-handle-overwrite): Don't use `format' here. + The prompt is formatted later. + +2005-09-19 David Ponce <david@dponce.com> + + * tree-widget.el (tree-widget-value-create): Save the converted + tree :node widget. + +2005-09-19 Juanma Barranquero <lekktu@gmail.com> + + * progmodes/sh-script.el (sh-blink): Fix spurious reference to + variable `message'. + +2005-09-18 Michael Albinus <michael.albinus@gmx.de> + + * net/tramp.el (tramp-login-prompt-regexp): Expand regexp in order + to cover prompts like "login as:". Reported by Slawomir Nowaczyk + <slawomir.nowaczyk.847@student.lu.se>. + +2005-09-18 Chong Yidong <cyd@stupidchicken.com> + + * image.el (image-load-path): Use symbol `data-directory' instead + of its value, for backward compatibility with packages that bind + it during `find-image'. Suggested by Katsumi Yamaoka. + (image-search-load-path): Handle symbols whose values are strings. + +2005-09-18 Romain Francoise <romain@orebokech.com> + + * calendar/diary-lib.el (mark-diary-entries): Rearrange to wrap + with-current-buffer form in save-excursion. + +2005-09-18 D Goel <deego@gnufans.org> + + * apropos.el (apropos-command): Fix `message' call: first arg + should be a format spec. In this and all other cases that appear + below and elsewhere in the source code, I made a change only when + two conditions were satisfied: [1] I can think of a possibility + that the arguments would cause an error, for example, the code in + question relies on external variables such as filenames. [2] I + was sure that the arg to `message' could not have been nil in the code. + + * textmodes/tildify.el (tildify-region): Ditto. + + * textmodes/reftex-index.el (reftex-index-change-entry) + (reftex-index-phrase-selection-or-word, reftex-query-index-phrase): + * textmodes/reftex-dcr.el (reftex-echo-ref, reftex-echo-cite): + * textmodes/org.el (org-complete, org-deadline, org-schedule) + (org-priority, org-table-sum): + * textmodes/ispell.el (ispell-check-version, ispell-parse-output): + * textmodes/flyspell.el (flyspell-mode-on, flyspell-notify-misspell) + (flyspell-word, flyspell-display-next-corrections): + * textmodes/bibtex.el (bibtex-print-help-message): + * textmodes/artist.el (artist-key-set-point-poly): + * term/mac-win.el (mac-services-insert-text): + * progmodes/vhdl-mode.el (vhdl-warning, vhdl-print-warnings) + (vhdl-hooked-abbrev, vhdl-template-insert-fun) + (vhdl-port-paste-testbench, vhdl-compose-new-component) + (vhdl-compose-configuration): + * progmodes/sh-script.el (sh-blink, sh-show-indent) + (sh-set-indent, sh-learn-line-indent): + * progmodes/ps-mode.el (ps-mode-target-column): + * progmodes/idlwave.el (idlwave-make-tags) + (idlwave-scan-library-catalogs): + * progmodes/idlw-shell.el (idlwave-shell-parse-stack-and-display): + * progmodes/gud.el (gud-jdb-analyze-source): + * progmodes/flymake.el (flymake-log): + * progmodes/ebnf2ps.el (ebnf-generate-region): + * progmodes/cmacexp.el (c-macro-expansion): + * progmodes/ada-xref.el (ada-treat-cmd-string): + * progmodes/ada-mode.el (ada-create-case-exception-substring) + (ada-justified-indent-current, ada-batch-reformat): + * play/zone.el (zone): + * play/landmark.el (lm-move): + * play/decipher.el (decipher-show-alphabet): + * net/newsticker.el (newsticker--display-jump) + (newsticker--display-scroll): + * mail/rmail-spam-filter.el (rsf-add-subject-to-spam-list) + (rsf-add-sender-to-spam-list, rsf-add-region-to-spam-list): + * mail/feedmail.el (feedmail-dump-message-to-queue): + * eshell/esh-proc.el (eshell-remove-process-entry): + * emulation/ws-mode.el (ws-last-error): + * emulation/viper-macs.el (ex-map-read-args, ex-unmap-read-args) + (viper-record-kbd-macro): + * emulation/viper-ex.el (ex-pwd, viper-info-on-file): + * emacs-lisp/lisp-mnt.el (lm-report-bug): + * emacs-lisp/find-func.el (find-function-noselect): + * calendar/timeclock.el (timeclock-status-string) + (timeclock-workday-remaining-string, timeclock-workday-elapsed-string) + (timeclock-when-to-leave-string): + * calendar/icalendar.el (icalendar--convert-ical-to-diary): + * calc/calc-units.el (calc-enter-units-table): + * calc/calc-mode.el (calc-mode-record-mode): + * woman.el (woman-mini-help): + * wdired.el (wdired-change-to-wdired-mode): + * vc.el (vc-retrieve-snapshot): + * strokes.el (strokes-read-stroke, strokes-read-complex-stroke): + * startup.el (display-startup-echo-area-message): + * simple.el (set-goal-column): + * ses.el (ses-command-hook, ses-recalculate-cell): + * server.el (server-process-filter): + * printing.el (pr-interface-txt-print, pr-interface-printify) + (pr-interface-ps): + * pcvs.el (cvs-help): + * log-edit.el (log-edit, log-edit-mode-help): + * iswitchb.el (iswitchb-possible-new-buffer): + * isearch.el (isearch-edit-string): + * image-mode.el (image-mode, image-minor-mode): + * ibuf-macs.el (define-ibuffer-filter): + * hi-lock.el (hi-lock-find-patterns): + * files.el (toggle-read-only): + * ediff-util.el (ediff-copy-diff) + (ediff-write-merge-buffer-and-maybe-kill): + * echistory.el (Electric-history-undefined): + * dnd.el (dnd-insert-text): + * dired-aux.el (dired-query): + * desktop.el (desktop-restore-file-buffer, desktop-lazy-create-buffer): + * bookmark.el (bookmark-bmenu-locate): + * obsolete/fast-lock.el (@top-level) <with-temp-message macro>: + Fix `message' calls to ensure first arg is a format string. + The change was made only when these two conditions were satisfied: + [1] when there is a possibility that the arguments would cause an error + for example, if the code in question relies on external variables + such as filenames, and + [2] if the arg to `message' could not have been nil in the code. + + * pcomplete.el (pcomplete--help): Fix `message' format spec. + Not having a %s would be weird, though not technically wrong. + +2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * term/mac-win.el (mac-add-charset-info): Doc fix. + +2005-09-17 Romain Francoise <romain@orebokech.com> + + * shell.el (shell-resync-dirs): Handle echoing processes more + reliably. Don't insert resync command if `comint-process-echoes' + is non-nil. + +2005-09-17 Magnus Henoch <mange@freemail.hu> + + * textmodes/ispell.el (ispell-aspell-supports-utf8): New variable. + (ispell-check-version): Set ispell-aspell-supports-utf8 to t for + aspell versions >= 0.60. + (ispell-valid-dictionary-list): Call ispell-find-aspell-dictionaries + only if ispell-aspell-supports-utf8 is non-nil. + +2005-09-17 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> + + * progmodes/scheme.el (scheme-mode-variables): Use setq to assign + buffer-local value to lisp-indent-function. + +2005-09-17 Milan Zamazal <pdm@zamazal.org> + + * progmodes/glasses.el (glasses-make-readable): If + glasses-separator differs from underscore, put appropriate + overlays over underscore characters. + (glasses-convert-to-unreadable): If glasses-separator differs from + underscore, try to convert glasses-separator characters to + underscores. + +2005-09-16 Stefan Monnier <monnier@iro.umontreal.ca> + + * calendar/diary-lib.el (mark-diary-entries): Don't move point. + Use with-syntax-table and dolist. + +2005-09-16 Carsten Dominik <dominik@science.uva.nl> + + * textmodes/reftex-auc.el: + * textmodes/reftex-cite.el: + * textmodes/reftex-dcr.el: + * textmodes/reftex-global.el: + * textmodes/reftex-parse.el: + * textmodes/reftex-ref.el: + * textmodes/reftex-sel.el: + * textmodes/reftex-toc.el: + * textmodes/reftex-vars.el: + * textmodes/reftex.el: Small changes to remove compiler warnings. + + * textmodes/reftex-index.el: Likewise. + (reftex-query-index-phrase): More efficient use of markers. + 2005-09-15 Chong Yidong <cyd@stupidchicken.com> * image.el (image-load-path): New variable. (image-search-load-path): New function. (find-image): Search for images in `image-load-path'. +2005-09-15 Richard M. Stallman <rms@gnu.org> + + * follow.el: Change Maintainer field. + 2005-09-15 David Ponce <david@dponce.com> * recentf.el (recentf-save-file-modes): New option. @@ -244,20 +1098,12 @@ * descr-text.el (describe-property-list): Handle non-symbol prop names. -2005-08-30 Richard M. Stallman <rms@gnu.org> +2005-09-08 Richard M. Stallman <rms@gnu.org> * simple.el (blink-matching-open): Get rid of text props from the string shown in echo area. Don't permanently set point. Some rearrangements. - * files.el (risky-local-variable-p): - Match `-predicates' and `-commands. - - * cus-edit.el (custom-buffer-sort-alphabetically): Default to t. - (custom-save-all): Visit the file if necessary; - kill the buffer if we created it. - (custom-save-delete): Don't visit file or kill buffer here. - 2005-09-08 Reiner Steib <Reiner.Steib@gmx.de> * recentf.el (recentf-filename-handler): Add custom choice diff -r 7a3090aca393 -r 2a679c81f552 lisp/apropos.el --- a/lisp/apropos.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/apropos.el Sun Oct 09 20:00:17 2005 +0000 @@ -443,7 +443,7 @@ (setq p (cdr p)))) (and (apropos-print t nil) message - (message message)))) + (message "%s" message)))) ;;;###autoload diff -r 7a3090aca393 -r 2a679c81f552 lisp/bindings.el --- a/lisp/bindings.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/bindings.el Sun Oct 09 20:00:17 2005 +0000 @@ -748,7 +748,7 @@ ;; natural bindings for terminal keycaps --- defined in X keysym order (define-key global-map [C-S-backspace] 'kill-whole-line) -(define-key global-map [home] 'beginning-of-line) +(define-key global-map [home] 'move-beginning-of-line) (define-key global-map [C-home] 'beginning-of-buffer) (define-key global-map [M-home] 'beginning-of-buffer-other-window) (define-key esc-map [home] 'beginning-of-buffer-other-window) @@ -768,7 +768,7 @@ (define-key global-map [M-prior] 'scroll-other-window-down) (define-key esc-map [prior] 'scroll-other-window-down) (define-key esc-map [?\C-\S-v] 'scroll-other-window-down) -(define-key global-map [end] 'end-of-line) +(define-key global-map [end] 'move-end-of-line) (define-key global-map [C-end] 'end-of-buffer) (define-key global-map [M-end] 'end-of-buffer-other-window) (define-key esc-map [end] 'end-of-buffer-other-window) diff -r 7a3090aca393 -r 2a679c81f552 lisp/bookmark.el --- a/lisp/bookmark.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/bookmark.el Sun Oct 09 20:00:17 2005 +0000 @@ -2058,7 +2058,7 @@ (interactive) (if (bookmark-bmenu-check-position) (let ((bmrk (bookmark-bmenu-bookmark))) - (message (bookmark-location bmrk))))) + (message "%s" (bookmark-location bmrk))))) (defun bookmark-bmenu-relocate () "Change the file path of the bookmark on the current line, diff -r 7a3090aca393 -r 2a679c81f552 lisp/buff-menu.el --- a/lisp/buff-menu.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/buff-menu.el Sun Oct 09 20:00:17 2005 +0000 @@ -77,8 +77,7 @@ (defface Buffer-menu-buffer '((t (:weight bold))) "Face used to highlight buffer name." - :group 'Buffer-menu - :group 'font-lock-highlighting-faces) + :group 'Buffer-menu) (defcustom Buffer-menu-buffer+size-width 26 "*How wide to jointly make the buffer name and size columns." diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calc-lang.el --- a/lisp/calc/calc-lang.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calc-lang.el Sun Oct 09 20:00:17 2005 +0000 @@ -354,10 +354,10 @@ ( "\\times" * 191 190 ) ( "*" * 191 190 ) ( "2x" * 191 190 ) + ( "/" / 185 186 ) ( "+" + 180 181 ) ( "-" - 180 181 ) ( "\\over" / 170 171 ) - ( "/" / 170 171 ) ( "\\choose" calcFunc-choose 170 171 ) ( "\\mod" % 170 171 ) ( "<" calcFunc-lt 160 161 ) diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calc-mode.el --- a/lisp/calc/calc-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calc-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -408,7 +408,8 @@ ((= n 4) 'global) ((= n 5) 'save) (t 'local))) - (message (cond ((and (eq calc-mode-save-mode 'local) calc-embedded-info) + (message "%s" + (cond ((and (eq calc-mode-save-mode 'local) calc-embedded-info) "Recording mode changes with [calc-mode: ...]") ((eq calc-mode-save-mode 'edit) "Recording mode changes with [calc-edit-mode: ...]") diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calc-prog.el --- a/lisp/calc/calc-prog.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calc-prog.el Sun Oct 09 20:00:17 2005 +0000 @@ -197,7 +197,7 @@ (progn (setq cmd-base-default (concat "User-" keyname)) (setq cmd (completing-read - (concat "Define M-x command name (default: calc-" + (concat "Define M-x command name (default calc-" cmd-base-default "): ") obarray 'commandp nil @@ -233,7 +233,7 @@ (setq func (concat "calcFunc-" (completing-read - (concat "Define algebraic function name (default: " + (concat "Define algebraic function name (default " cmd-base-default "): ") (mapcar (lambda (x) (substring x 9)) (all-completions "calcFunc-" diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calc-store.el --- a/lisp/calc/calc-store.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calc-store.el Sun Oct 09 20:00:17 2005 +0000 @@ -430,7 +430,7 @@ (calc-wrapper (or var (setq var (calc-read-var-name (if calc-last-edited-variable - (format "Edit: (default %s) " + (format "Edit (default %s): " (calc-var-name calc-last-edited-variable)) "Edit: ")))) (or var (setq var calc-last-edited-variable)) @@ -587,7 +587,7 @@ (defun calc-permanent-variable (&optional var) (interactive) (calc-wrapper - (or var (setq var (calc-read-var-name "Save variable (default=all): "))) + (or var (setq var (calc-read-var-name "Save variable (default all): "))) (let (calc-pv-pos) (and var (or (and (boundp var) (symbol-value var)) (error "No such variable"))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calc-units.el --- a/lisp/calc/calc-units.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calc-units.el Sun Oct 09 20:00:17 2005 +0000 @@ -515,7 +515,7 @@ (interactive "P") (and n (setq math-units-table-buffer-valid nil)) (math-build-units-table-buffer t) - (message (substitute-command-keys "Type \\[calc] to return to the Calculator"))) + (message "%s" (substitute-command-keys "Type \\[calc] to return to the Calculator"))) (defun calc-define-unit (uname desc) (interactive "SDefine unit name: \nsDescription: ") diff -r 7a3090aca393 -r 2a679c81f552 lisp/calc/calcalg3.el --- a/lisp/calc/calcalg3.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calc/calcalg3.el Sun Oct 09 20:00:17 2005 +0000 @@ -370,7 +370,7 @@ (setq defv (calc-invent-independent-variables nv))) (or defc (setq defc (calc-invent-parameter-variables nc defv))) - (let ((vars (read-string (format "Fitting variables: (default %s; %s) " + (let ((vars (read-string (format "Fitting variables (default %s; %s): " (mapconcat 'symbol-name (mapcar (function (lambda (v) (nth 1 v))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/appt.el --- a/lisp/calendar/appt.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/appt.el Sun Oct 09 20:00:17 2005 +0000 @@ -195,7 +195,7 @@ FLAG, if non-nil, says that the element was made with `appt-add' so calling `appt-make-list' again should preserve it.") -(defconst appt-max-time 1439 +(defconst appt-max-time (1- (* 24 60)) "11:59pm in minutes - number of minutes in a day minus 1.") (defvar appt-mode-string nil @@ -484,13 +484,15 @@ lowest-window w))))) (select-window lowest-window))) +(defconst appt-time-regexp + "[0-9]?[0-9]\\(h\\([0-9][0-9]\\)?\\|[:.][0-9][0-9]\\)\\(am\\|pm\\)?") + ;;;###autoload (defun appt-add (new-appt-time new-appt-msg) "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG. The time should be in either 24 hour format or am/pm format." (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") - (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" - new-appt-time) + (unless (string-match appt-time-regexp new-appt-time) (error "Unacceptable time-string")) (let* ((appt-time-string (concat new-appt-time " " new-appt-msg)) (appt-time (list (appt-convert-time new-appt-time))) @@ -577,16 +579,14 @@ (calendar-date-equal (calendar-current-date) (car (car entry-list)))) (let ((time-string (cadr (car entry-list)))) - (while (string-match - "\\([0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?\\).*" - time-string) + (while (string-match appt-time-regexp time-string) (let* ((beg (match-beginning 0)) ;; Get just the time for this appointment. - (only-time (match-string 1 time-string)) + (only-time (match-string 0 time-string)) ;; Find the end of this appointment ;; (the start of the next). (end (string-match - "^[ \t]*[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" + (concat "\n[ \t]*" appt-time-regexp) time-string (match-end 0))) ;; Get the whole string for this appointment. @@ -633,31 +633,23 @@ "Convert hour:min[am/pm] format to minutes from midnight. A period (.) can be used instead of a colon (:) to separate the hour and minute parts." - (let ((conv-time 0) - (hr 0) - (min 0)) - - (string-match "[:.]\\([0-9][0-9]\\)" time2conv) - (setq min (string-to-number - (match-string 1 time2conv))) - - (string-match "[0-9]?[0-9][:.]" time2conv) - (setq hr (string-to-number - (match-string 0 time2conv))) + ;; Formats that should be accepted: + ;; 10:00 10.00 10h00 10h 10am 10:00am 10.00am + (let ((min (if (string-match "[h:.]\\([0-9][0-9]\\)" time2conv) + (string-to-number (match-string 1 time2conv)) + 0)) + (hr (if (string-match "[0-9]*[0-9]" time2conv) + (string-to-number (match-string 0 time2conv)) + 0))) ;; convert the time appointment time into 24 hour time - (cond ((and (string-match "pm" time2conv) (< hr 12)) (setq hr (+ 12 hr))) ((and (string-match "am" time2conv) (= hr 12)) (setq hr 0))) - ;; convert the actual time - ;; into minutes for comparison - ;; against the actual time. - - (setq conv-time (+ (* hr 60) min)) - conv-time)) + ;; convert the actual time into minutes. + (+ (* hr 60) min))) (defun appt-update-list () @@ -719,5 +711,5 @@ (provide 'appt) -;;; arch-tag: bf5791c4-8921-499e-a26f-772b1788d347 +;; arch-tag: bf5791c4-8921-499e-a26f-772b1788d347 ;;; appt.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/calendar.el --- a/lisp/calendar/calendar.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/calendar.el Sun Oct 09 20:00:17 2005 +0000 @@ -2900,43 +2900,50 @@ MARK is a single-character string, a list of face attributes/values, or a face. MARK defaults to `diary-entry-marker'." (if (calendar-date-is-legal-p date) - (save-excursion - (set-buffer calendar-buffer) - (calendar-cursor-to-visible-date date) - (let ((mark (or (and (stringp mark) (= (length mark) 1) mark) ; single-char - (and (listp mark) (> (length mark) 0) mark) ; attr list - (and (facep mark) mark) ; face-name - diary-entry-marker))) - (if (facep mark) - (progn ; face or an attr-list that contained a face - (overlay-put - (make-overlay (1- (point)) (1+ (point))) 'face mark)) - (if (and (stringp mark) - (= (length mark) 1)) ; single-char - (let ((buffer-read-only nil)) - (forward-char 1) - (delete-char 1) - (insert mark) - (forward-char -2)) - (let ; attr list - ((temp-face - (make-symbol (apply 'concat "temp-" - (mapcar '(lambda (sym) - (cond ((symbolp sym) (symbol-name sym)) - ((numberp sym) (int-to-string sym)) - (t sym))) mark)))) - (faceinfo mark)) - (make-face temp-face) - ;; Remove :face info from the mark, copy the face info into temp-face - (while (setq faceinfo (memq :face faceinfo)) - (copy-face (read (nth 1 faceinfo)) temp-face) - (setcar faceinfo nil) - (setcar (cdr faceinfo) nil)) - (setq mark (delq nil mark)) - ;; Apply the font aspects - (apply 'set-face-attribute temp-face nil mark) - (overlay-put - (make-overlay (1- (point)) (1+ (point))) 'face temp-face)))))))) + (with-current-buffer calendar-buffer + (save-excursion + (calendar-cursor-to-visible-date date) + (setq mark + (or (and (stringp mark) (= (length mark) 1) mark) ; single-char + (and (listp mark) (> (length mark) 0) mark) ; attr list + (and (facep mark) mark) ; face-name + diary-entry-marker)) + (cond + ;; face or an attr-list that contained a face + ((facep mark) + (overlay-put + (make-overlay (1- (point)) (1+ (point))) 'face mark)) + ;; single-char + ((and (stringp mark) (= (length mark) 1)) + (let ((inhibit-read-only t)) + (forward-char 1) + ;; Insert before delete so as to better preserve markers. + (insert mark) + (delete-char 1) + (forward-char -2))) + (t ;; attr list + (let ((temp-face + (make-symbol + (apply 'concat "temp-" + (mapcar (lambda (sym) + (cond + ((symbolp sym) (symbol-name sym)) + ((numberp sym) (number-to-string sym)) + (t sym))) + mark)))) + (faceinfo mark)) + (make-face temp-face) + ;; Remove :face info from the mark, copy the face info into + ;; temp-face + (while (setq faceinfo (memq :face faceinfo)) + (copy-face (read (nth 1 faceinfo)) temp-face) + (setcar faceinfo nil) + (setcar (cdr faceinfo) nil)) + (setq mark (delq nil mark)) + ;; Apply the font aspects + (apply 'set-face-attribute temp-face nil mark) + (overlay-put + (make-overlay (1- (point)) (1+ (point))) 'face temp-face)))))))) (defun calendar-star-date () "Replace the date under the cursor in the calendar window with asterisks. diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/diary-lib.el --- a/lisp/calendar/diary-lib.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/diary-lib.el Sun Oct 09 20:00:17 2005 +0000 @@ -865,105 +865,99 @@ (let ((marking-diary-entries t) file-glob-attrs marks) (with-current-buffer (find-file-noselect (diary-check-diary-file) t) - (setq mark-diary-entries-in-calendar t) - (message "Marking diary entries...") - (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) - (let ((d diary-date-forms) - (old-diary-syntax-table (syntax-table)) - temp) - (set-syntax-table diary-syntax-table) - (while d - (let* ((date-form (if (equal (car (car d)) 'backup) - (cdr (car d)) - (car d)));; ignore 'backup directive - (dayname - (diary-name-pattern calendar-day-name-array - calendar-day-abbrev-array)) - (monthname - (format "%s\\|\\*" - (diary-name-pattern calendar-month-name-array - calendar-month-abbrev-array))) - (month "[0-9]+\\|\\*") - (day "[0-9]+\\|\\*") - (year "[0-9]+\\|\\*") - (l (length date-form)) - (d-name-pos (- l (length (memq 'dayname date-form)))) - (d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos))) - (m-name-pos (- l (length (memq 'monthname date-form)))) - (m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos))) - (d-pos (- l (length (memq 'day date-form)))) - (d-pos (if (/= l d-pos) (+ 2 d-pos))) - (m-pos (- l (length (memq 'month date-form)))) - (m-pos (if (/= l m-pos) (+ 2 m-pos))) - (y-pos (- l (length (memq 'year date-form)))) - (y-pos (if (/= l y-pos) (+ 2 y-pos))) - (regexp - (concat - "\\(\\`\\|\^M\\|\n\\)\\(" - (mapconcat 'eval date-form "\\)\\(") - "\\)")) - (case-fold-search t)) - (goto-char (point-min)) - (while (re-search-forward regexp nil t) - (let* ((dd-name - (if d-name-pos - (match-string-no-properties d-name-pos))) - (mm-name - (if m-name-pos - (match-string-no-properties m-name-pos))) - (mm (string-to-number - (if m-pos - (match-string-no-properties m-pos) - ""))) - (dd (string-to-number - (if d-pos - (match-string-no-properties d-pos) - ""))) - (y-str (if y-pos - (match-string-no-properties y-pos))) - (yy (if (not y-str) - 0 - (if (and (= (length y-str) 2) - abbreviated-calendar-year) - (let* ((current-y - (extract-calendar-year - (calendar-current-date))) - (y (+ (string-to-number y-str) - (* 100 - (/ current-y 100))))) - (if (> (- y current-y) 50) - (- y 100) - (if (> (- current-y y) 50) - (+ y 100) - y))) - (string-to-number y-str))))) - (save-excursion - (setq entry (buffer-substring-no-properties - (point) (line-end-position)) - temp (diary-pull-attrs entry file-glob-attrs) - entry (nth 0 temp) - marks (nth 1 temp))) - (if dd-name - (mark-calendar-days-named - (cdr (assoc-string - dd-name - (calendar-make-alist - calendar-day-name-array - 0 nil calendar-day-abbrev-array) t)) marks) - (if mm-name - (setq mm - (if (string-equal mm-name "*") 0 - (cdr (assoc-string - mm-name - (calendar-make-alist - calendar-month-name-array - 1 nil calendar-month-abbrev-array) t))))) - (mark-calendar-date-pattern mm dd yy marks)))) - (setq d (cdr d)))) - (mark-sexp-diary-entries) - (run-hooks 'nongregorian-diary-marking-hook - 'mark-diary-entries-hook) - (set-syntax-table old-diary-syntax-table) + (save-excursion + (setq mark-diary-entries-in-calendar t) + (message "Marking diary entries...") + (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) + (with-syntax-table diary-syntax-table + (dolist (date-form diary-date-forms) + (if (eq (car date-form) 'backup) + (setq date-form (cdr date-form))) ;; ignore 'backup directive + (let* ((dayname + (diary-name-pattern calendar-day-name-array + calendar-day-abbrev-array)) + (monthname + (format "%s\\|\\*" + (diary-name-pattern calendar-month-name-array + calendar-month-abbrev-array))) + (month "[0-9]+\\|\\*") + (day "[0-9]+\\|\\*") + (year "[0-9]+\\|\\*") + (l (length date-form)) + (d-name-pos (- l (length (memq 'dayname date-form)))) + (d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos))) + (m-name-pos (- l (length (memq 'monthname date-form)))) + (m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos))) + (d-pos (- l (length (memq 'day date-form)))) + (d-pos (if (/= l d-pos) (+ 2 d-pos))) + (m-pos (- l (length (memq 'month date-form)))) + (m-pos (if (/= l m-pos) (+ 2 m-pos))) + (y-pos (- l (length (memq 'year date-form)))) + (y-pos (if (/= l y-pos) (+ 2 y-pos))) + (regexp + (concat + "\\(\\`\\|\^M\\|\n\\)\\(" + (mapconcat 'eval date-form "\\)\\(") + "\\)")) + (case-fold-search t)) + (goto-char (point-min)) + (while (re-search-forward regexp nil t) + (let* ((dd-name + (if d-name-pos + (match-string-no-properties d-name-pos))) + (mm-name + (if m-name-pos + (match-string-no-properties m-name-pos))) + (mm (string-to-number + (if m-pos + (match-string-no-properties m-pos) + ""))) + (dd (string-to-number + (if d-pos + (match-string-no-properties d-pos) + ""))) + (y-str (if y-pos + (match-string-no-properties y-pos))) + (yy (if (not y-str) + 0 + (if (and (= (length y-str) 2) + abbreviated-calendar-year) + (let* ((current-y + (extract-calendar-year + (calendar-current-date))) + (y (+ (string-to-number y-str) + (* 100 + (/ current-y 100))))) + (if (> (- y current-y) 50) + (- y 100) + (if (> (- current-y y) 50) + (+ y 100) + y))) + (string-to-number y-str))))) + (let ((tmp (diary-pull-attrs (buffer-substring-no-properties + (point) (line-end-position)) + file-glob-attrs))) + (setq entry (nth 0 tmp) + marks (nth 1 tmp))) + (if dd-name + (mark-calendar-days-named + (cdr (assoc-string + dd-name + (calendar-make-alist + calendar-day-name-array + 0 nil calendar-day-abbrev-array) t)) marks) + (if mm-name + (setq mm + (if (string-equal mm-name "*") 0 + (cdr (assoc-string + mm-name + (calendar-make-alist + calendar-month-name-array + 1 nil calendar-month-abbrev-array) t))))) + (mark-calendar-date-pattern mm dd yy marks)))))) + (mark-sexp-diary-entries) + (run-hooks 'nongregorian-diary-marking-hook + 'mark-diary-entries-hook)) (message "Marking diary entries...done"))))) (defun mark-sexp-diary-entries () diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/icalendar.el --- a/lisp/calendar/icalendar.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/icalendar.el Sun Oct 09 20:00:17 2005 +0000 @@ -1532,7 +1532,7 @@ (setq found-error t) (setq error-string (format "%s\n%s\nCannot handle this event: %s" error-val error-string e)) - (message error-string)))) + (message "%s" error-string)))) (if found-error (save-current-buffer (set-buffer (get-buffer-create "*icalendar-errors*")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/time-date.el --- a/lisp/calendar/time-date.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/time-date.el Sun Oct 09 20:00:17 2005 +0000 @@ -91,6 +91,7 @@ ((eq type 1) (list high low)) ((eq type 2) (list high low micro)))) +(autoload 'parse-time-string "parse-time") (autoload 'timezone-make-date-arpa-standard "timezone") ;;;###autoload diff -r 7a3090aca393 -r 2a679c81f552 lisp/calendar/timeclock.el --- a/lisp/calendar/timeclock.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/calendar/timeclock.el Sun Oct 09 20:00:17 2005 +0000 @@ -441,7 +441,7 @@ "remaining" "over") (timeclock-when-to-leave-string show-seconds today-only))) (if (interactive-p) - (message status) + (message "%s" status) status))) ;;;###autoload @@ -512,7 +512,7 @@ (timeclock-workday-remaining today-only) show-seconds t))) (if (interactive-p) - (message string) + (message "%s" string) string))) (defsubst timeclock-workday-elapsed () @@ -534,7 +534,7 @@ (let ((string (timeclock-seconds-to-string (timeclock-workday-elapsed) show-seconds))) (if (interactive-p) - (message string) + (message "%s" string) string))) (defsubst timeclock-time-to-seconds (time) @@ -579,7 +579,7 @@ (format-time-string "%-I:%M:%S %p" then) (format-time-string "%-I:%M %p" then)))) (if (interactive-p) - (message string) + (message "%s" string) string))) ;;; Internal Functions: @@ -599,7 +599,7 @@ (defun timeclock-ask-for-project () "Ask the user for the project they are clocking into." (timeclock-completing-read - (format "Clock into which project (default \"%s\"): " + (format "Clock into which project (default %s): " (or timeclock-last-project (car timeclock-project-list))) (mapcar 'list timeclock-project-list) diff -r 7a3090aca393 -r 2a679c81f552 lisp/comint.el --- a/lisp/comint.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/comint.el Sun Oct 09 20:00:17 2005 +0000 @@ -2056,7 +2056,11 @@ (set-window-start (selected-window) (point)) (comint-skip-prompt)) (t - (goto-char (field-beginning pos)) + (let* ((beg (field-beginning pos)) + (pt (if (= (point-min) beg) + (point-min) + (1+ beg)))) + (goto-char pt)) (set-window-start (selected-window) (point)))))) @@ -3105,8 +3109,8 @@ this value.") (defvar comint-redirect-subvert-readonly nil - "Non-nil means comint-redirect can insert into otherwise-readonly buffers. -The readonly status is toggled around insertion. + "Non-nil means `comint-redirect' can insert into read-only buffers. +This works by binding `inhibit-read-only' around the insertion. This is useful, for instance, for insertion into Help mode buffers. You probably want to set it locally to the output buffer.") diff -r 7a3090aca393 -r 2a679c81f552 lisp/completion.el --- a/lisp/completion.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/completion.el Sun Oct 09 20:00:17 2005 +0000 @@ -1343,7 +1343,7 @@ (let* ((default (symbol-under-or-before-point)) (new-prompt (if default - (format "%s: (default: %s) " prompt default) + (format "%s (default %s): " prompt default) (format "%s: " prompt))) (read (completing-read new-prompt cmpl-obarray))) (if (zerop (length read)) (setq read (or default ""))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/cus-edit.el --- a/lisp/cus-edit.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/cus-edit.el Sun Oct 09 20:00:17 2005 +0000 @@ -495,7 +495,7 @@ val) (setq val (completing-read (if (and (symbolp v) (custom-variable-p v)) - (format "Customize option: (default %s) " v) + (format "Customize option (default %s): " v) "Customize option: ") obarray 'custom-variable-p t)) (list (if (equal val "") @@ -670,7 +670,7 @@ :type 'boolean :group 'custom-browse) -(defcustom custom-buffer-sort-alphabetically t +(defcustom custom-buffer-sort-alphabetically nil "If non-nil, sort members of each customization group alphabetically." :type 'boolean :group 'custom-buffer) @@ -967,7 +967,7 @@ (defun customize-group (group) "Customize GROUP, which must be a customization group." (interactive (list (let ((completion-ignore-case t)) - (completing-read "Customize group: (default emacs) " + (completing-read "Customize group (default emacs): " obarray (lambda (symbol) (or (get symbol 'custom-loads) @@ -990,7 +990,7 @@ (defun customize-group-other-window (group) "Customize GROUP, which must be a customization group." (interactive (list (let ((completion-ignore-case t)) - (completing-read "Customize group: (default emacs) " + (completing-read "Customize group (default emacs): " obarray (lambda (symbol) (or (get symbol 'custom-loads) diff -r 7a3090aca393 -r 2a679c81f552 lisp/desktop.el --- a/lisp/desktop.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/desktop.el Sun Oct 09 20:00:17 2005 +0000 @@ -944,7 +944,7 @@ desktop-buffer-file-name))) (if desktop-missing-file-warning (y-or-n-p (concat msg " Re-create? ")) - (message msg) + (message "%s" msg) nil))) (let* ((auto-insert nil) ; Disable auto insertion (coding-system-for-read @@ -1101,7 +1101,7 @@ (msg (format "Desktop lazily opening %s (%s remaining)..." buffer-name remaining))) (when desktop-lazy-verbose - (message msg)) + (message "%s" msg)) (let ((desktop-first-buffer nil) (desktop-buffer-ok-count 0) (desktop-buffer-fail-count 0)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/dframe.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/dframe.el Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,1070 @@ +;;; dframe --- dedicate frame support modes + +;;; Copyright (C) 1996, 97, 98, 99, 2000, 01, 02, 03, 04 Free Software Foundation + +;; Author: Eric M. Ludlam <zappo@gnu.org> +;; Keywords: file, tags, tools + +(defvar dframe-version "1.3" + "The current version of the dedicated frame library.") + +;; 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 2, 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: +;; +;; This code was developed and maintained as a part of speedbar since 1996. +;; It became its own support utility in Aug 2000. +;; +;; Dedicated frame mode is an Emacs independent library for supporting +;; a program/buffer combination that resides in a dedicated frame. +;; Support of this nature requires several complex interactions with the +;; user which this library will provide, including: +;; +;; * Creation of a frame. Positioned relatively. +;; Includes a frame cache for User position caching. +;; * Switching between frames. +;; * Timed activities using idle-timers +;; * Frame/buffer killing hooks +;; * Mouse-3 position relative menu +;; * Mouse motion, help-echo hacks +;; * Mouse clicking, double clicking, & Xemacs image clicking hack +;; * Mode line hacking +;; * Utilities for use in a program covering: +;; o keymap massage for some actions +;; o working with an associated buffer +;; o shift-click +;; o detaching a frame +;; o focus-shifting & optional frame jumping +;; o currently active frame. +;; o message/y-or-n-p +;; o mouse set point +;; +;; To Use: +;; 1) (require 'dframe) +;; 2) Variable Setup: +;; -frame-parameters -- Frame parameters for Emacs. +;; -frame-plist -- Frame parameters for XEmacs. +;; -- Not on parameter lists: They can optionally include width +;; and height. If width or height is not included, then it will +;; be provided to match the originating frame. In general, +;; turning off the menu bar, mode line, and minibuffer can +;; provide a smaller window, or more display area. +;; -track-mouse-flag -- mouse tracking on/off specific to your tool. +;; -update-flag -- app toggle for timer use. Init from +;; `dframe-have-timer-flag'. This is nil for terminals, since +;; updating a frame in a terminal is not useful to the user. +;; -key-map -- Your keymap. Call `dframe-update-keymap' on it. +;; -buffer, -frame, -cached-frame -- Variables used to track your +;; applications buffer, frame, or frame cache (when hidden). See +;; `dframe-frame-mode' for details. +;; -before-delete-hook, -before-popup-hook, -after-create-hook -- +;; Hooks to have called. The `-after-create-hook' probably wants +;; to call a function which calls `dframe-reposition-frame' in an +;; appropriate manner. +;; 3) Function Setup: +;; your-frame-mode -- function to toggle your app frame on and off. +;; its tasks are: +;; a) create a buffer +;; b) Call `dframe-frame-mode'. (See its doc) +;; c) If successful (your -frame variable has a value), call +;; timer setup if applicable. +;; your-frame-reposition- -- Function to call from after-create-hook to +;; reposition your frame with `dframe-repsoition-frame'. +;; your-mode -- Set up the major mode of the buffer for your app. +;; Set these variables: dframe-track-mouse-function, +;; dframe-help-echo-function, +;; dframe-mouse-click-function, +;; dframe-mouse-position-function. +;; See speedbar's implementation of these functions. +;; `speedbar-current-frame', `speedbar-get-focus', `speedbar-message', +;; `speedbar-y-or-n-p', `speedbar-set-timer', `speedbar-click', +;; `speedbar-position-cursor-on-line' +;; 4) Handling mouse clicks, and help text: +;; dframe-track-mouse, dframe-help-echo-function -- +;; These variables need to be set to functions that display info +;; based on the mouse's position. +;; Text propert 'help-echo, set to `dframe-help-echo', which will +;; call `dframe-help-echo-function'. +;; Have a `-click' function, it can call `dframe-quick-mouse' for +;; positioning. If the variable `dframe-power-click' is non-nil, +;; then `shift' was held down during the click. + +;;; Bugs +;; +;; * The timer managers doesn't handle multiple different timeouts. +;; * You can't specify continuous timouts (as opposed to just lidle timers.) + +;;; Code: +(defvar dframe-xemacsp (string-match "XEmacs" emacs-version) + "Non-nil if we are running in the XEmacs environment.") +(defvar dframe-xemacs20p (and dframe-xemacsp + (>= emacs-major-version 20))) + +;; From custom web page for compatibility between versions of custom +;; with help from ptype@dera.gov.uk (Proto Type) +(eval-and-compile + (condition-case () + (require 'custom) + (error nil)) + (if (and (featurep 'custom) (fboundp 'custom-declare-variable) + ;; Some XEmacsen w/ custom don't have :set keyword. + ;; This protects them against custom. + (fboundp 'custom-initialize-set)) + nil ;; We've got what we needed + ;; We have the old custom-library, hack around it! + (if (boundp 'defgroup) + nil + (defmacro defgroup (&rest args) + nil)) + (if (boundp 'defface) + nil + (defmacro defface (var values doc &rest args) + (` (progn + (defvar (, var) (quote (, var))) + ;; To make colors for your faces you need to set your .Xdefaults + ;; or set them up ahead of time in your .emacs file. + (make-face (, var)) + )))) + (if (boundp 'defcustom) + nil + (defmacro defcustom (var value doc &rest args) + (` (defvar (, var) (, value) (, doc))))))) + + +;;; Compatibility functions +;; +(if (fboundp 'frame-parameter) + + (defalias 'dframe-frame-parameter 'frame-parameter) + + (defun dframe-frame-parameter (frame parameter) + "Return FRAME's PARAMETER value." + (cdr (assoc parameter (frame-parameters frame))))) + + +;;; Variables +;; +(defgroup dframe nil + "Faces used in dframe." + :prefix "dframe-" + :group 'dframe) + +(defvar dframe-have-timer-flag + (and (or (fboundp 'run-with-idle-timer) + (fboundp 'start-itimer) + (boundp 'post-command-idle-hook)) + (if (fboundp 'display-graphic-p) + (display-graphic-p) + window-system)) + "Non-nil means that timers are available for this Emacs.") + +(defcustom dframe-update-speed + (if dframe-xemacsp + (if dframe-xemacs20p + 2 ; 1 is too obrusive in XEmacs + 5) ; when no idleness, need long delay + 1) + "*Idle time in seconds needed before dframe will update itself. +Updates occur to allow dframe to display directory information +relevant to the buffer you are currently editing." + :group 'dframe + :type 'integer) + +(defcustom dframe-activity-change-focus-flag nil + "*Non-nil means the selected frame will change based on activity. +Thus, if a file is selected for edit, the buffer will appear in the +selected frame and the focus will change to that frame." + :group 'dframe + :type 'boolean) + +(defcustom dframe-after-select-attached-frame-hook nil + "*Hook run after dframe has selected the attached frame." + :group 'dframe + :type 'hook) + +(defvar dframe-track-mouse-function nil + "*A function to call when the mouse is moved in the given frame. +Typically used to display info about the line under the mouse.") +(make-variable-buffer-local 'dframe-track-mouse-function) + +(defvar dframe-help-echo-function nil + "*A function to call when help-echo is used in newer versions of Emacs. +Typically used to display info about the line under the mouse.") +(make-variable-buffer-local 'dframe-help-echo-function) + +(defvar dframe-mouse-click-function nil + "*A function to call when the mouse is clicked. +Valid clicks are mouse 2, our double mouse 1.") +(make-variable-buffer-local 'dframe-mouse-click-function) + +(defvar dframe-mouse-position-function nil + "*A function to called to position the cursor for a mouse click.") +(make-variable-buffer-local 'dframe-mouse-position-function) + +(defvar dframe-power-click nil + "Never set this by hand. Value is t when S-mouse activity occurs.") + +(defvar dframe-timer nil + "The dframe timer used for updating the buffer.") +(make-variable-buffer-local 'dframe-timer) + +(defvar dframe-attached-frame nil + "The frame which started a frame mode. +This is the frame from which all interesting activities will go +for the mode using dframe.") +(make-variable-buffer-local 'dframe-attached-frame) + +(defvar dframe-controlled nil + "Is this buffer controlled by a dedicated frame. +Local to those buffers, as a function called that created it.") +(make-variable-buffer-local 'dframe-controlled) + +(defun dframe-update-keymap (map) + "Update the keymap MAP for dframe default bindings." + ;; Frame control + (define-key map "q" 'dframe-close-frame) + (define-key map "Q" 'delete-frame) + + ;; Override switch to buffer to never hack our frame. + (substitute-key-definition 'switch-to-buffer + 'dframe-switch-buffer-attached-frame + map global-map) + + (if dframe-xemacsp + (progn + ;; mouse bindings so we can manipulate the items on each line + (define-key map 'button2 'dframe-click) + (define-key map '(shift button2) 'dframe-power-click) + ;; Info doc fix from Bob Weiner + (if (featurep 'infodoc) + nil + (define-key map 'button3 'dframe-xemacs-popup-kludge)) + ) + + ;; mouse bindings so we can manipulate the items on each line + ;; (define-key map [down-mouse-1] 'dframe-double-click) + (define-key map [follow-link] 'mouse-face) + (define-key map [mouse-2] 'dframe-click) + ;; This is the power click for new frames, or refreshing a cache + (define-key map [S-mouse-2] 'dframe-power-click) + ;; This adds a small unecessary visual effect + ;;(define-key map [down-mouse-2] 'dframe-quick-mouse) + + (define-key map [down-mouse-3] 'dframe-emacs-popup-kludge) + + ;; This lets the user scroll as if we had a scrollbar... well maybe not + (define-key map [mode-line mouse-2] 'dframe-mouse-hscroll) + ;; another handy place users might click to get our menu. + (define-key map [mode-line down-mouse-1] + 'dframe-emacs-popup-kludge) + + ;; We can't switch buffers with the buffer mouse menu. Lets hack it. + (define-key map [C-down-mouse-1] 'dframe-hack-buffer-menu) + + ;; Lastly, we want to track the mouse. Play here + (define-key map [mouse-movement] 'dframe-track-mouse) + )) + +(defun dframe-live-p (frame) + "Return non-nil if FRAME is currently available." + (and frame (frame-live-p frame) (frame-visible-p frame))) + +(defun dframe-frame-mode (arg frame-var cache-var buffer-var frame-name + local-mode-fn + &optional + parameters + delete-hook popup-hook create-hook + ) + "Manage a frame for an application, enabling it when ARG is positive. +FRAME-VAR is a variable used to cache the frame being used. +This frame is either resurrected, hidden, killed, etc based on +the value. +CACHE-VAR is a variable used to cache a cached frame. +BUFFER-VAR is a variable used to cache the buffer being used in dframe. +This buffer will have `dframe-mode' run on it. +FRAME-NAME is the name of the frame to create. +LOCAL-MODE-FN is the function used to call this one. +PARAMETERS are frame parameters to apply to this dframe. +DELETE-HOOK are hooks to run when deleting a frame. +POPUP-HOOK are hooks to run before showing a frame. +CREATE-HOOK are hooks to run after creating a frame." + ;; toggle frame on and off. + (if (not arg) (if (dframe-live-p (symbol-value frame-var)) + (setq arg -1) (setq arg 1))) + ;; Make sure the current buffer is set. + (set-buffer (symbol-value buffer-var)) + ;; turn the frame off on neg number + (if (and (numberp arg) (< arg 0)) + (progn + (run-hooks 'delete-hook) + (if (and (symbol-value frame-var) + (frame-live-p (symbol-value frame-var))) + (progn + (set cache-var (symbol-value frame-var)) + (make-frame-invisible (symbol-value frame-var)))) + (set frame-var nil)) + ;; Set this as our currently attached frame + (setq dframe-attached-frame (selected-frame)) + (run-hooks 'popup-hook) + ;; Updated the buffer passed in to contain all the hacks needed + ;; to make it work well in a dedicated window. + (save-excursion + (set-buffer (symbol-value buffer-var)) + ;; Declare this buffer a dedicated frame + (setq dframe-controlled local-mode-fn) + + (if dframe-xemacsp + ;; Hack the XEmacs mouse-motion handler + (with-no-warnings + ;; Hack the XEmacs mouse-motion handler + (set (make-local-variable 'mouse-motion-handler) + 'dframe-track-mouse-xemacs) + ;; Hack the double click handler + (make-local-variable 'mouse-track-click-hook) + (add-hook 'mouse-track-click-hook + (lambda (event count) + (if (/= (event-button event) 1) + nil ; Do normal operations. + (cond ((eq count 1) + (dframe-quick-mouse event)) + ((or (eq count 2) + (eq count 3)) + (dframe-click event) + (dframe-quick-mouse event))) + ;; Don't do normal operations. + t)))) + ;; Enable mouse tracking in emacs + (if dframe-track-mouse-function + (set (make-local-variable 'track-mouse) t)) ;this could be messy. + ;; disable auto-show-mode for Emacs + (setq auto-show-mode nil)) +;;;; DISABLED: This causes problems for users with multiple frames. +;;;; ;; Set this up special just for the passed in buffer +;;;; ;; Terminal minibuffer stuff does not require this. +;;;; (if (and (or (assoc 'minibuffer parameters) +;;;; ;; XEmacs plist is not an association list +;;;; (member 'minibuffer parameters)) +;;;; window-system (not (eq window-system 'pc)) +;;;; (null default-minibuffer-frame)) +;;;; (progn +;;;; (make-local-variable 'default-minibuffer-frame) +;;;; (setq default-minibuffer-frame dframe-attached-frame)) +;;;; ) + ;; Override `temp-buffer-show-hook' so that help and such + ;; put their stuff into a frame other than our own. + ;; Correct use of `temp-buffer-show-function': Bob Weiner + (if (and (boundp 'temp-buffer-show-hook) + (boundp 'temp-buffer-show-function)) + (progn (make-local-variable 'temp-buffer-show-hook) + (setq temp-buffer-show-hook temp-buffer-show-function))) + (make-local-variable 'temp-buffer-show-function) + (setq temp-buffer-show-function 'dframe-temp-buffer-show-function) + ;; If this buffer is killed, we must make sure that we destroy + ;; the frame the dedicated window is in. + (add-hook 'kill-buffer-hook `(lambda () + (let ((skilling (boundp 'skilling))) + (if skilling + nil + (if dframe-controlled + (progn + (funcall dframe-controlled -1) + (setq ,buffer-var nil) + ))))) + t t) + ) + ;; Get the frame to work in + (if (frame-live-p (symbol-value cache-var)) + (progn + (set frame-var (symbol-value cache-var)) + (make-frame-visible (symbol-value frame-var)) + (select-frame (symbol-value frame-var)) + (set-window-dedicated-p (selected-window) nil) + (if (not (eq (current-buffer) (symbol-value buffer-var))) + (switch-to-buffer (symbol-value buffer-var))) + (set-window-dedicated-p (selected-window) t) + (raise-frame (symbol-value frame-var)) + ) + (if (frame-live-p (symbol-value frame-var)) + (raise-frame (symbol-value frame-var)) + (set frame-var + (if dframe-xemacsp + ;; Only guess height if it is not specified. + (if (member 'height parameters) + (make-frame parameters) + (make-frame (nconc (list 'height + (dframe-needed-height)) + parameters))) + (let* ((mh (dframe-frame-parameter dframe-attached-frame + 'menu-bar-lines)) + (paramsa + ;; Only add a guessed height if one is not specified + ;; in the input parameters. + (if (assoc 'height parameters) + parameters + (append + parameters + (list (cons 'height (+ mh (frame-height))))))) + (params + ;; Only add a guessed width if one is not specified + ;; in the input parameters. + (if (assoc 'width parameters) + paramsa + (append + paramsa + (list (cons 'width (frame-width)))))) + (frame + (if (or (< emacs-major-version 20) + (not (eq window-system 'x))) + (make-frame params) + (let ((x-pointer-shape x-pointer-top-left-arrow) + (x-sensitive-text-pointer-shape + x-pointer-hand2)) + (make-frame params))))) + frame))) + ;; Put the buffer into the frame + (save-excursion + (select-frame (symbol-value frame-var)) + (switch-to-buffer (symbol-value buffer-var)) + (set-window-dedicated-p (selected-window) t)) + ;; Run hooks (like reposition) + (run-hooks 'create-hook) + ;; Frame name + (if (and (or (null window-system) (eq window-system 'pc)) + (fboundp 'set-frame-name)) + (save-window-excursion + (select-frame (symbol-value frame-var)) + (set-frame-name frame-name))) + ;; On a terminal, raise the frame or the user will + ;; be confused. + (if (not window-system) + (select-frame (symbol-value frame-var))) + ))) ) + +(defun dframe-reposition-frame (new-frame parent-frame location) + "Move NEW-FRAME to be relative to PARENT-FRAME. +LOCATION can be one of 'random, 'left, 'right, 'left-right, or 'top-bottom." + (if dframe-xemacsp + (dframe-reposition-frame-xemacs new-frame parent-frame location) + (dframe-reposition-frame-emacs new-frame parent-frame location))) + +(defun dframe-reposition-frame-emacs (new-frame parent-frame location) + "Move NEW-FRAME to be relative to PARENT-FRAME. +LOCATION can be one of 'random, 'left-right, 'top-bottom, or +a cons cell indicationg a position of the form (LEFT . TOP)." + (let* ((pfx (dframe-frame-parameter parent-frame 'left)) + (pfy (dframe-frame-parameter parent-frame 'top)) + (pfw (frame-pixel-width parent-frame)) + (pfh (frame-pixel-height parent-frame)) + (nfw (frame-pixel-width new-frame)) + (nfh (frame-pixel-height new-frame)) + newleft newtop + ) + ;; Position dframe. + (if (or (not window-system) (eq window-system 'pc)) + ;; Do no positioning if not on a windowing system, + nil + ;; Rebuild pfx,pfy to be absolute positions. + (setq pfx (if (not (consp pfx)) + pfx + ;; If pfx is a list, that means we grow + ;; from a specific edge of the display. + ;; Convert that to the distance from the + ;; left side of the display. + (if (eq (car pfx) '-) + ;; A - means distance from the right edge + ;; of the display, or DW - pfx - framewidth + (- (x-display-pixel-width) (car (cdr pfx)) pfw) + (car (cdr pfx)))) + pfy (if (not (consp pfy)) + pfy + ;; If pfy is a list, that means we grow + ;; from a specific edge of the display. + ;; Convert that to the distance from the + ;; left side of the display. + (if (eq (car pfy) '-) + ;; A - means distance from the right edge + ;; of the display, or DW - pfx - framewidth + (- (x-display-pixel-height) (car (cdr pfy)) pfh) + (car (cdr pfy)))) + ) + (cond ((eq location 'right) + (setq newleft (+ pfx pfw 5) + newtop pfy)) + ((eq location 'left) + (setq newleft (+ pfx 10 nfw) + newtop pfy)) + ((eq location 'left-right) + (setq newleft + ;; Decide which side to put it on. 200 is just a + ;; buffer for the left edge of the screen. The + ;; extra 10 is just dressings for window + ;; decorations. + (let* ((left-guess (- pfx 10 nfw)) + (right-guess (+ pfx pfw 5)) + (left-margin left-guess) + (right-margin (- (x-display-pixel-width) + right-guess 5 nfw))) + (cond ((>= left-margin 0) left-guess) + ((>= right-margin 0) right-guess) + ;; otherwise choose side we overlap less + ((> left-margin right-margin) 0) + (t (- (x-display-pixel-width) nfw 5)))) + newtop pfy + )) + ((eq location 'top-bottom) + (setq newleft pfx + newtop + ;; Try and guess if we should be on the top or bottom. + (let* ((top-guess (- pfy 15 nfh)) + (bottom-guess (+ pfy 5 pfh)) + (top-margin top-guess) + (bottom-margin (- (x-display-pixel-height) + bottom-guess 5 nfh))) + (cond ((>= top-margin 0) top-guess) + ((>= bottom-margin 0) bottom-guess) + ;; Choose a side to overlap the least. + ((> top-margin bottom-margin) 0) + (t (- (x-display-pixel-height) nfh 5))))) + ) + ((consp location) + (setq newleft (or (car location) 0) + newtop (or (cdr location) 0))) + (t nil)) + (modify-frame-parameters new-frame + (list (cons 'left newleft) + (cons 'top newtop)))))) + +(defun dframe-reposition-frame-xemacs (new-frame parent-frame location) + "Move NEW-FRAME to be relative to PARENT-FRAME. +LOCATION can be one of 'random, 'left-right, or 'top-bottom." + ;; Not yet implemented + ) + +;; XEmacs function only. +(defun dframe-needed-height (&optional frame) + "The needed height for the tool bar FRAME (in characters)." + (or frame (setq frame (selected-frame))) + ;; The 1 is the missing modeline/minibuffer + (+ 1 (/ (frame-pixel-height frame) + ;; This obscure code avoids a byte compiler warning in Emacs. + (let ((f 'face-height)) + (funcall f 'default frame))))) + +(defun dframe-detach (frame-var cache-var buffer-var) + "Detatch the frame in symbol FRAME-VAR. +CACHE-VAR and BUFFER-VAR are symbols as in `dframe-frame-mode'" + (save-excursion + (set-buffer (symbol-value buffer-var)) + (rename-buffer (buffer-name) t) + (let ((oldframe (symbol-value frame-var))) + (set buffer-var nil) + (set frame-var nil) + (set cache-var nil) + (make-variable-buffer-local frame-var) + (set frame-var oldframe) + ))) + +;;; Special frame event proxies +;; +(if (boundp 'special-event-map) + (progn + (define-key special-event-map [make-frame-visible] + 'dframe-handle-make-frame-visible) + (define-key special-event-map [iconify-frame] + 'dframe-handle-iconify-frame) + (define-key special-event-map [delete-frame] + 'dframe-handle-delete-frame)) + ) + +(defvar dframe-make-frame-visible-function nil + "Function used when a dframe controlled frame is de-iconified. +The function must take an EVENT.") +(defvar dframe-iconify-frame-function nil + "Function used when a dframe controlled frame is iconified. +The function must take an EVENT.") +(defvar dframe-delete-frame-function nil + "Function used when a frame attached to a dframe frame is deleted. +The function must take an EVENT.") + +(defun dframe-handle-make-frame-visible (e) + "Handle a `make-frame-visible' event. +Should enables auto-updating if the last state was also enabled. +Argument E is the event making the frame visible." + (interactive "e") + (let ((f last-event-frame)) + (if (and (dframe-attached-frame f) + dframe-make-frame-visible-function) + (funcall dframe-make-frame-visible-function e) + ))) + +(defun dframe-handle-iconify-frame (e) + "Handle a `iconify-frame' event. +Should disables auto-updating if the last state was also enabled. +Argument E is the event iconifying the frame." + (interactive "e") + (let ((f last-event-frame)) + (if (and (dframe-attached-frame f) + dframe-iconify-frame-function e) + (funcall dframe-iconify-frame-function) + ))) + +(defun dframe-handle-delete-frame (e) + "Handle `delete-frame' event. +Argument E is the event deleting the frame." + (interactive "e") + (let ((fl (frame-list)) + (sf (selected-frame))) + ;; Loop over all frames. If dframe-delete-frame-function is + ;; non-nil, call it. + (while fl + (select-frame (car fl)) + (if dframe-delete-frame-function + (funcall dframe-delete-frame-function e)) + (setq fl (cdr fl))) + (if (frame-live-p sf) + (select-frame sf)) + (handle-delete-frame e))) + + +;;; Utilities +;; +(defun dframe-get-focus (frame-var activator &optional hook) + "Change frame focus to or from a dedicated frame. +If the selected frame is not in the symbol FRAME-VAR, then FRAME-VAR +frame is selected. If the FRAME-VAR is active, then select the +attached frame. If FRAME-VAR is nil, ACTIVATOR is called to +created it. HOOK is an optional argument of hooks to run when +selecting FRAME." + (interactive) + (if (eq (selected-frame) (symbol-value frame-var)) + (if (frame-live-p dframe-attached-frame) + (dframe-select-attached-frame)) + ;; make sure we have a frame + (if (not (frame-live-p (symbol-value frame-var))) + (funcall activator 1)) + ;; go there + (select-frame (symbol-value frame-var)) + ) + (other-frame 0) + ;; If updates are off, then refresh the frame (they want it now...) + (run-hooks 'hook)) + + +(defun dframe-close-frame () + "Close the current frame if it is dedicated." + (interactive) + (if dframe-controlled + (let ((b (current-buffer))) + (funcall dframe-controlled -1) + (kill-buffer b)))) + +(defun dframe-current-frame (frame-var desired-major-mode) + "Return the existing dedicated frame to use. +FRAME-VAR is the variable storing the currently active dedicated frame. +If the current frame's buffer uses DESIRED-MAJOR-MODE, then use that frame." + (if (not (eq (selected-frame) (symbol-value frame-var))) + (if (and (eq major-mode 'desired-major-mode) + (get-buffer-window (current-buffer)) + (window-frame (get-buffer-window (current-buffer)))) + (window-frame (get-buffer-window (current-buffer))) + (symbol-value frame-var)) + (symbol-value frame-var))) + +(defun dframe-attached-frame (&optional frame) + "Return the attached frame belonging to the dframe controlled frame FRAME. +If optional arg FRAME is nil just return `dframe-attached-frame'." + (save-excursion + (if frame (select-frame frame)) + dframe-attached-frame)) + +(defun dframe-select-attached-frame (&optional frame) + "Switch to the frame the dframe controlled frame FRAME was started from. If +optional arg FRAME is nil assume the attached frame is already selected and +just run the hooks `dframe-after-select-attached-frame-hook'. Return the +attached frame." + (let ((frame (dframe-attached-frame frame))) + (if frame (select-frame frame)) + (prog1 frame + (run-hooks 'dframe-after-select-attached-frame-hook)))) + +(defmacro dframe-with-attached-buffer (&rest forms) + "Execute FORMS in the attached frame's special buffer. +Optionally select that frame if necessary." + `(save-selected-window + ;;(speedbar-set-timer speedbar-update-speed) + (dframe-select-attached-frame) + ,@forms + (dframe-maybee-jump-to-attached-frame))) + +(defun dframe-maybee-jump-to-attached-frame () + "Jump to the attached frame ONLY if this was not a mouse event." + (when (or (not (dframe-mouse-event-p last-input-event)) + dframe-activity-change-focus-flag) + (dframe-select-attached-frame) + ;; KB: For what is this - raising the frame?? + (other-frame 0))) + + +(defvar dframe-suppress-message-flag nil + "Non-nil means that `dframe-message' should just return a string.") + +(defun dframe-message (fmt &rest args) + "Like message, but for use in a dedicated frame. +Argument FMT is the format string, and ARGS are the arguments for message." + (save-selected-window + (if dframe-suppress-message-flag + (apply 'format fmt args) + (if dframe-attached-frame + ;; KB: Here we do not need calling `dframe-select-attached-frame' + (select-frame dframe-attached-frame)) + (apply 'message fmt args)))) + +(defun dframe-y-or-n-p (prompt) + "Like `y-or-n-p', but for use in a dedicated frame. +Argument PROMPT is the prompt to use." + (save-selected-window + (if (and ;;default-minibuffer-frame + dframe-attached-frame + ;;(not (eq default-minibuffer-frame dframe-attached-frame)) + ) + ;; KB: Here we do not need calling `dframe-select-attached-frame' + (select-frame dframe-attached-frame)) + (y-or-n-p prompt))) + +;;; timer management +;; +;; Unlike speedbar with a dedicated set of routines, dframe has one master +;; timer, and all dframe users will use it. At least until I figure out a way +;; around that problem. +;; +;; Advantage 1: Two apps with timer/frames can munge the master list +;; to make sure they occur in order. +;; Advantage 2: If a user hits a key between timer functions, we can +;; interrupt them safely. +(defvar dframe-client-functions nil + "List of client functions using the dframe timer.") + +(defun dframe-set-timer (timeout fn &optional null-on-error) + "Apply a timer with TIMEOUT, to call FN, or remove a timer if TIMEOUT is nil. +TIMEOUT is the number of seconds until the dframe controled program +timer is called again. When TIMEOUT is nil, turn off all timeouts. +This function must be called from the buffer belonging to the program +who requested the timer. +If NULL-ON-ERROR is a symbol, set it to nil if we cannot create a timer." + ;; First, fix up our list of client functions + (if timeout + (add-to-list 'dframe-client-functions fn) + (setq dframe-client-functions (delete fn dframe-client-functions))) + ;; Now decided what to do about the timout. + (if (or + ;; We have a timer, restart the timer with the new time. + timeout + ;; We have a timer, an off is requested, and no client + ;; functions are left, shut er down. + (and dframe-timer (not timeout) dframe-client-functions)) + ;; Only call the low level function if we are changing the state. + (dframe-set-timer-internal timeout null-on-error))) + +(defun dframe-set-timer-internal (timeout &optional null-on-error) + "Apply a timer with TIMEOUT to call the dframe timer manager. +If NULL-ON-ERROR is a symbol, set it to nil if we cannot create a timer." + (cond + ;; XEmacs + (dframe-xemacsp + (with-no-warnings + (if dframe-timer + (progn (delete-itimer dframe-timer) + (setq dframe-timer nil))) + (if timeout + (if (and dframe-xemacsp + (or (>= emacs-major-version 21) + (and (= emacs-major-version 20) + (> emacs-minor-version 0)) + (and (= emacs-major-version 19) + (>= emacs-minor-version 15)))) + (setq dframe-timer (start-itimer "dframe" + 'dframe-timer-fn + timeout + timeout + t)) + (setq dframe-timer (start-itimer "dframe" + 'dframe-timer-fn + timeout + nil)))))) + ;; Post 19.31 Emacs + ((fboundp 'run-with-idle-timer) + (if dframe-timer + (progn (cancel-timer dframe-timer) + (setq dframe-timer nil))) + (if timeout + (setq dframe-timer + (run-with-idle-timer timeout t 'dframe-timer-fn)))) + ;; Emacs 19.30 (Thanks twice: ptype@dra.hmg.gb) + ((fboundp 'post-command-idle-hook) + (if timeout + (add-hook 'post-command-idle-hook 'dframe-timer-fn) + (remove-hook 'post-command-idle-hook 'dframe-timer-fn))) + ;; Older or other Emacsen with no timers. Set up so that its + ;; obvious this emacs can't handle the updates + ((symbolp null-on-error) + (set null-on-error nil))) + ) + +(defun dframe-timer-fn () + "Called due to the dframe timer. +Evaluates all cached timer functions in sequence." + (let ((l dframe-client-functions)) + (while (and l (sit-for 0)) + (condition-case er + (funcall (car l)) + (error (message "DFRAME TIMER ERROR: %S" er))) + (setq l (cdr l))))) + +;;; Menu hacking for mouse-3 +;; +(defconst dframe-pass-event-to-popup-mode-menu + (let (max-args) + (and (fboundp 'popup-mode-menu) + (fboundp 'function-max-args) + (setq max-args (function-max-args 'popup-mode-menu)) + (not (zerop max-args)))) + "The EVENT arg to 'popup-mode-menu' was introduced in XEmacs 21.4.0.") + +;; In XEmacs, we make popup menus work on the item over mouse (as +;; opposed to where the point happens to be.) We attain this by +;; temporarily moving the point to that place. +;; Hrvoje Niksic <hniksic@srce.hr> +(with-no-warnings +(defun dframe-xemacs-popup-kludge (event) + "Pop up a menu related to the clicked on item. +Must be bound to EVENT." + (interactive "e") + (save-excursion + (if dframe-pass-event-to-popup-mode-menu + (popup-mode-menu event) + (goto-char (event-closest-point event)) + (beginning-of-line) + (forward-char (min 5 (- (save-excursion (end-of-line) (point)) + (save-excursion (beginning-of-line) (point))))) + (popup-mode-menu)) + ;; Wait for menu to bail out. `popup-mode-menu' (and other popup + ;; menu functions) return immediately. + (let (new) + (while (not (misc-user-event-p (setq new (next-event)))) + (dispatch-event new)) + (dispatch-event new)))) +);with-no-warnings + +(defun dframe-emacs-popup-kludge (e) + "Pop up a menu related to the clicked on item. +Must be bound to event E." + (interactive "e") + (save-excursion + (mouse-set-point e) + ;; This gets the cursor where the user can see it. + (if (not (bolp)) (forward-char -1)) + (sit-for 0) + (if (< emacs-major-version 20) + (mouse-major-mode-menu e) + (mouse-major-mode-menu e nil)))) + +;;; Interactive user functions for the mouse +;; +(if dframe-xemacsp + (defalias 'dframe-mouse-event-p 'button-press-event-p) + (defun dframe-mouse-event-p (event) + "Return t if the event is a mouse related event." + (if (and (listp event) + (member (event-basic-type event) + '(mouse-1 mouse-2 mouse-3))) + t + nil))) + +(defun dframe-track-mouse (event) + "For motion EVENT, display info about the current line." + (interactive "e") + (when (and dframe-track-mouse-function + (or dframe-xemacsp ;; XEmacs always safe? + (windowp (posn-window (event-end event))) ; Sometimes + ; there is no window to jump into. + )) + + (funcall dframe-track-mouse-function event))) + +(defun dframe-track-mouse-xemacs (event) + "For motion EVENT, display info about the current line." + (if (functionp (default-value 'mouse-motion-handler)) + (funcall (default-value 'mouse-motion-handler) event)) + (if dframe-track-mouse-function + (funcall dframe-track-mouse-function event))) + +(defun dframe-help-echo (window &optional buffer position) + "Display help based context. +The context is in WINDOW, viewing BUFFER, at POSITION. +BUFFER and POSITION are optional because XEmacs doesn't use them." + (when (and (not dframe-track-mouse-function) + (bufferp buffer) + dframe-help-echo-function) + (let ((dframe-suppress-message-flag t)) + (with-current-buffer buffer + (save-excursion + (if position (goto-char position)) + (funcall dframe-help-echo-function)))))) + +(defun dframe-mouse-set-point (e) + "Set POINT based on event E. +Handles clicking on images in XEmacs." + (if (save-excursion + (save-window-excursion + (mouse-set-point e) + (and (fboundp 'event-over-glyph-p) (event-over-glyph-p e)))) + ;; We are in XEmacs, and clicked on a picture + (with-no-warnings + (let ((ext (event-glyph-extent e))) + ;; This position is back inside the extent where the + ;; junk we pushed into the property list lives. + (if (extent-end-position ext) + (goto-char (1- (extent-end-position ext))) + (mouse-set-point e))) + );with-no-warnings + ;; We are not in XEmacs, OR we didn't click on a picture. + (mouse-set-point e))) + +(defun dframe-quick-mouse (e) + "Since mouse events are strange, this will keep the mouse nicely positioned. +This should be bound to mouse event E." + (interactive "e") + (dframe-mouse-set-point e) + (if dframe-mouse-position-function + (funcall dframe-mouse-position-function))) + +(defun dframe-power-click (e) + "Activate any `dframe' mouse click as a power click. +A power click will dispose of cached data (if available) or bring a buffer +up into a different window. +This should be bound to mouse event E." + (interactive "e") + (let ((dframe-power-click t)) + (select-frame last-event-frame) + (dframe-click e))) + +(defun dframe-click (e) + "Call our clients click function on a user click. +E is the event causing the click." + (interactive "e") + (dframe-mouse-set-point e) + (when dframe-mouse-click-function + ;; On the off chance of buffer switch, or something incorrectly + ;; configured. + (funcall dframe-mouse-click-function e))) + +(defun dframe-double-click (e) + "Activate the registered click function on a double click. +This must be bound to a mouse event. +This should be bound to mouse event E." + (interactive "e") + ;; Emacs only. XEmacs handles this via `mouse-track-click-hook'. + (cond ((eq (car e) 'down-mouse-1) + (dframe-mouse-set-point e)) + ((eq (car e) 'mouse-1) + (dframe-quick-mouse e)) + ((or (eq (car e) 'double-down-mouse-1) + (eq (car e) 'triple-down-mouse-1)) + (dframe-click e)))) + +;;; Hacks of normal things. +;; +;; Some normal things that happen in one of these dedicated frames +;; must be handled specially, so that our dedicated frame isn't +;; messed up. +(defun dframe-temp-buffer-show-function (buffer) + "Placed in the variable `temp-buffer-show-function' in dedicated frames. +If a user requests help using \\[help-command] <Key> the temp BUFFER will be +redirected into a window on the attached frame." + (if dframe-attached-frame (dframe-select-attached-frame)) + (pop-to-buffer buffer nil) + (other-window -1) + ;; Fix for using this hook on some platforms: Bob Weiner + (cond ((not dframe-xemacsp) + (run-hooks 'temp-buffer-show-hook)) + ((fboundp 'run-hook-with-args) + (run-hook-with-args 'temp-buffer-show-hook buffer)) + ((and (boundp 'temp-buffer-show-hook) + (listp temp-buffer-show-hook)) + (mapcar (function (lambda (hook) (funcall hook buffer))) + temp-buffer-show-hook)))) + +(defun dframe-hack-buffer-menu (e) + "Control mouse 1 is buffer menu. +This hack overrides it so that the right thing happens in the main +Emacs frame, not in the dedicated frame. +Argument E is the event causing this activity." + (interactive "e") + (let ((fn (lookup-key global-map (if dframe-xemacsp + '(control button1) + [C-down-mouse-1]))) + (oldbuff (current-buffer)) + (newbuff nil)) + (unwind-protect + (save-excursion + (set-window-dedicated-p (selected-window) nil) + (call-interactively fn) + (setq newbuff (current-buffer))) + (switch-to-buffer oldbuff) + (set-window-dedicated-p (selected-window) t)) + (if (not (eq newbuff oldbuff)) + (dframe-with-attached-buffer + (switch-to-buffer newbuff))))) + +(defun dframe-switch-buffer-attached-frame (&optional buffer) + "Switch to BUFFER in the attached frame, and raise that frame. +This overrides the default behavior of `switch-to-buffer' which is +broken because of the dedicated frame." + (interactive) + ;; Assume we are in the dedicated frame. + (other-frame 1) + ;; Now switch buffers + (if buffer + (switch-to-buffer buffer) + (call-interactively 'switch-to-buffer nil nil))) + +;; XEmacs: this can be implemented using modeline keymaps, but there +;; is no use, as we have horizontal scrollbar (as the docstring +;; hints.) +(defun dframe-mouse-hscroll (e) + "Read a mouse event E from the mode line, and horizontally scroll. +If the mouse is being clicked on the far left, or far right of the +mode-line. This is only useful for non-XEmacs." + (interactive "e") + (let* ((x-point (car (nth 2 (car (cdr e))))) + (pixels-per-10-col (/ (* 10 (frame-pixel-width)) + (frame-width))) + (click-col (1+ (/ (* 10 x-point) pixels-per-10-col))) + ) + (cond ((< click-col 3) + (scroll-left 2)) + ((> click-col (- (window-width) 5)) + (scroll-right 2)) + (t (dframe-message + "Click on the edge of the modeline to scroll left/right"))) + )) + +(provide 'dframe) + +;; arch-tag: df9b91b6-e85e-4a76-a02e-b3cb5b686bd4 +;;; dframe.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/diff.el --- a/lisp/diff.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/diff.el Sun Oct 09 20:00:17 2005 +0000 @@ -83,15 +83,15 @@ (setq newf (buffer-file-name) newf (if (and newf (file-exists-p newf)) (read-file-name - (concat "Diff new file: (default " - (file-name-nondirectory newf) ") ") + (concat "Diff new file (default " + (file-name-nondirectory newf) "): ") nil newf t) (read-file-name "Diff new file: " nil nil t))) (setq oldf (file-newest-backup newf) oldf (if (and oldf (file-exists-p oldf)) (read-file-name - (concat "Diff original file: (default " - (file-name-nondirectory oldf) ") ") + (concat "Diff original file (default " + (file-name-nondirectory oldf) "): ") (file-name-directory oldf) oldf t) (read-file-name "Diff original file: " (file-name-directory newf) nil t))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/dired-aux.el --- a/lisp/dired-aux.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/dired-aux.el Sun Oct 09 20:00:17 2005 +0000 @@ -59,10 +59,10 @@ (save-excursion (goto-char (mark t)) (dired-get-filename t t))))) (require 'diff) - (list (read-file-name (format "Diff %s with: %s" + (list (read-file-name (format "Diff %s with%s: " (dired-get-filename t) (if default - (concat "(default " default ") ") + (concat " (default " default ")") "")) (if default (dired-current-directory) @@ -845,7 +845,7 @@ (apply 'message qprompt qs-args) (setq char (set qs-var (read-char)))) ;; Display the question with the answer. - (message (concat (apply 'format qprompt qs-args) + (message "%s" (concat (apply 'format qprompt qs-args) (char-to-string char))) (memq (cdr elt) '(t y yes))))))) @@ -1126,8 +1126,8 @@ (setq backup (car (find-backup-file-name to))) (or (eq 'always dired-backup-overwrite) (dired-query 'overwrite-backup-query - (format "Make backup for existing file `%s'? " - to)))) + "Make backup for existing file `%s'? " + to))) (progn (rename-file to backup 0) ; confirm overwrite of old backup (dired-relist-entry backup))))) @@ -1147,7 +1147,7 @@ (if (and recursive (eq t (car attrs)) (or (eq recursive 'always) - (yes-or-no-p (format "Recursive copies of %s " from)))) + (yes-or-no-p (format "Recursive copies of %s? " from)))) ;; This is a directory. (let ((files (directory-files from nil dired-re-no-dot))) (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more. diff -r 7a3090aca393 -r 2a679c81f552 lisp/dired.el --- a/lisp/dired.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/dired.el Sun Oct 09 20:00:17 2005 +0000 @@ -2379,7 +2379,7 @@ (setq files (directory-files file t dired-re-no-dot)) ; Not empty. (or (eq recursive 'always) - (yes-or-no-p (format "Recursive delete of %s " + (yes-or-no-p (format "Recursive delete of %s? " (dired-make-relative file))))) (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask again. (while files ; Recursively delete (possibly asking). diff -r 7a3090aca393 -r 2a679c81f552 lisp/dnd.el --- a/lisp/dnd.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/dnd.el Sun Oct 09 20:00:17 2005 +0000 @@ -179,7 +179,7 @@ (not (windowp window))) (progn (kill-new text) - (message + (message "%s" (substitute-command-keys "The dropped text can be accessed with \\[yank]"))) (insert text)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/echistory.el --- a/lisp/echistory.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/echistory.el Sun Oct 09 20:00:17 2005 +0000 @@ -140,7 +140,7 @@ (defun Electric-history-undefined () (interactive) (ding) - (message (substitute-command-keys "Type \\[Helper-help] for help, ? for commands, C-c C-c to quit, Space to execute")) + (message "%s" (substitute-command-keys "Type \\[Helper-help] for help, ? for commands, C-c C-c to quit, Space to execute")) (sit-for 4)) (defun Electric-history-quit () diff -r 7a3090aca393 -r 2a679c81f552 lisp/ediff-mult.el --- a/lisp/ediff-mult.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ediff-mult.el Sun Oct 09 20:00:17 2005 +0000 @@ -1314,7 +1314,7 @@ (if otherfile (or (file-exists-p otherfile) (if (y-or-n-p - (format "Copy %s to %s ? " file-abs otherfile)) + (format "Copy %s to %s? " file-abs otherfile)) (let* ((file-diff-record (assoc file-tail dir-diff-list)) (new-mem-code (* (cdr file-diff-record) file-mem-code))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ediff-ptch.el --- a/lisp/ediff-ptch.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ediff-ptch.el Sun Oct 09 20:00:17 2005 +0000 @@ -163,10 +163,16 @@ ;; strip prefix from filename ;; returns /dev/null, if can't strip prefix (defsubst ediff-file-name-sans-prefix (filename prefix) - (save-match-data - (if (string-match (concat "^" (regexp-quote prefix)) filename) - (substring filename (match-end 0)) - (concat "/null/" filename)))) + (if prefix + (save-match-data + (if (string-match (concat "^" (if (stringp prefix) + (regexp-quote prefix) + "")) + filename) + (substring filename (match-end 0)) + (concat "/null/" filename))) + filename) + ) @@ -260,11 +266,14 @@ count))) ;; Fix up the file names in the list using the argument FILENAME -;; Algorithm: find the first file's directory and cut it out from each file -;; name in the patch. Prepend the directory of FILENAME to each file in the -;; patch. In addition, the first file in the patch is replaced by FILENAME. -;; Each file is actually a file-pair of files found in the context diff header -;; In the end, for each pair, we select the shortest existing file. +;; Algorithm: find the files' directories in the patch and, if a directory is +;; absolute, cut it out from the corresponding file name in the patch. +;; Relative directories are not cut out. +;; Prepend the directory of FILENAME to each resulting file (which came +;; originally from the patch). +;; In addition, the first file in the patch document is replaced by FILENAME. +;; Each file is actually a pair of files found in the context diff header +;; In the end, for each pair, we ask the user which file to patch. ;; Note: Ediff doesn't recognize multi-file patches that are separated ;; with the `Index:' line. It treats them as a single-file patch. ;; @@ -275,30 +284,41 @@ ;; directory part of filename (file-name-as-directory filename) (file-name-directory filename))) - ;; Filename-spec is objA; at this point it is represented as - ;; (file1 . file2). We get it using ediff-get-session-objA - ;; directory part of the first file in the patch - (base-dir1 (file-name-directory - (car (ediff-get-session-objA-name (car ediff-patch-map))))) - ;; directory part of the 2nd file in the patch - (base-dir2 (file-name-directory - (cdr (ediff-get-session-objA-name (car ediff-patch-map))))) + ;; In case 2 files are possible patch targets, the user will be offered + ;; to choose file1 or file2. In a multifile patch, if the user chooses + ;; 1 or 2, this choice is preserved to decide future alternatives. + chosen-alternative ) ;; chop off base-dirs (mapcar (lambda (session-info) - (let ((proposed-file-names - (ediff-get-session-objA-name session-info))) + (let* ((proposed-file-names + ;; Filename-spec is objA; it is represented as + ;; (file1 . file2). Get it using ediff-get-session-objA. + (ediff-get-session-objA-name session-info)) + ;; base-dir1 is the dir part of the 1st file in the patch + (base-dir1 (file-name-directory (car proposed-file-names))) + ;; directory part of the 2nd file in the patch + (base-dir2 (file-name-directory (cdr proposed-file-names))) + ) + ;; If both base-dir1 and base-dir2 are relative, assume that + ;; these dirs lead to the actual files starting at the present + ;; directory. So, we don't strip these relative dirs from the + ;; file names. This is a heuristic intended to improve guessing + (unless (or (and base-dir1 (file-name-absolute-p base-dir1)) + (and base-dir2 (file-name-absolute-p base-dir2))) + (setq base-dir1 "" + base-dir2 "")) (or (string= (car proposed-file-names) "/dev/null") (setcar proposed-file-names (ediff-file-name-sans-prefix (car proposed-file-names) base-dir1))) - (or (string= - (cdr proposed-file-names) "/dev/null") - (setcdr proposed-file-names - (ediff-file-name-sans-prefix - (cdr proposed-file-names) base-dir2))) - )) + (or (string= + (cdr proposed-file-names) "/dev/null") + (setcdr proposed-file-names + (ediff-file-name-sans-prefix + (cdr proposed-file-names) base-dir2))) + )) ediff-patch-map) ;; take the given file name into account @@ -314,8 +334,8 @@ (ediff-get-session-objA-name session-info))) (if (and (string-match "^/null/" (car proposed-file-names)) (string-match "^/null/" (cdr proposed-file-names))) - ;; couldn't strip base-dir1 and base-dir2 - ;; hence, something is wrong + ;; couldn't intuit the file name to patch, so + ;; something is amiss (progn (with-output-to-temp-buffer ediff-msg-buffer (ediff-with-current-buffer standard-output @@ -367,17 +387,29 @@ (f1-exists (file-exists-p file1)) (f2-exists (file-exists-p file2))) (cond - ((and (< (length file2) (length file1)) - f2-exists) + ((and + ;; The patch program prefers the shortest file as the patch + ;; target. However, this is a questionable heuristic. In an + ;; interactive program, like ediff, we can offer the user a + ;; choice. + ;; (< (length file2) (length file1)) + (not f1-exists) + f2-exists) ;; replace file-pair with the winning file2 (setcar session-file-object file2)) - ((and (< (length file1) (length file2)) - f1-exists) + ((and + ;; (< (length file1) (length file2)) + (not f2-exists) + f1-exists) ;; replace file-pair with the winning file1 (setcar session-file-object file1)) ((and f1-exists f2-exists (string= file1 file2)) (setcar session-file-object file1)) + ((and f1-exists f2-exists (eq chosen-alternative 1)) + (setcar session-file-object file1)) + ((and f1-exists f2-exists (eq chosen-alternative 2)) + (setcar session-file-object file2)) ((and f1-exists f2-exists) (with-output-to-temp-buffer ediff-msg-buffer (ediff-with-current-buffer standard-output @@ -393,10 +425,15 @@ Type `y' to use %s as the target; Type `n' to use %s as the target. " - file1 file2 file2 file1))) + file1 file2 file1 file2))) (setcar session-file-object - (if (y-or-n-p (format "Use %s ? " file2)) - file2 file1))) + (if (y-or-n-p (format "Use %s ? " file1)) + (progn + (setq chosen-alternative 1) + file1) + (setq chosen-alternative 2) + file2)) + ) (f2-exists (setcar session-file-object file2)) (f1-exists (setcar session-file-object file1)) (t @@ -407,7 +444,7 @@ (if (string= file1 file2) (princ (format " %s -is the target for this patch. However, this file does not exist." +is assumed to be the target for this patch. However, this file does not exist." file1)) (princ (format " %s @@ -441,22 +478,26 @@ ;; prompt for file, get the buffer (defun ediff-prompt-for-patch-file () - (let ((dir (cond (ediff-patch-default-directory) ; try patch default dir - (ediff-use-last-dir ediff-last-dir-patch) + (let ((dir (cond (ediff-use-last-dir ediff-last-dir-patch) + (ediff-patch-default-directory) ; try patch default dir (t default-directory))) - (coding-system-for-read ediff-coding-system-for-read)) - (find-file-noselect - (read-file-name - (format "Patch is in file:%s " - (cond ((and buffer-file-name - (equal (expand-file-name dir) - (file-name-directory buffer-file-name))) - (concat - " (default " - (file-name-nondirectory buffer-file-name) - ")")) - (t ""))) - dir buffer-file-name 'must-match)) + (coding-system-for-read ediff-coding-system-for-read) + patch-file-name) + (setq patch-file-name + (read-file-name + (format "Patch is in file%s: " + (cond ((and buffer-file-name + (equal (expand-file-name dir) + (file-name-directory buffer-file-name))) + (concat + " (default " + (file-name-nondirectory buffer-file-name) + ")")) + (t ""))) + dir buffer-file-name 'must-match)) + (if (file-directory-p patch-file-name) + (error "Patch file cannot be a directory: %s" patch-file-name) + (find-file-noselect patch-file-name)) )) @@ -647,7 +688,7 @@ (ediff-maybe-checkout buf-to-patch) (ediff-with-current-buffer patch-diagnostics - (insert-buffer patch-buf) + (insert-buffer-substring patch-buf) (message "Applying patch ... ") ;; fix environment for gnu patch, so it won't make numbered extensions (setq backup-style (getenv "VERSION_CONTROL")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ediff-util.el --- a/lisp/ediff-util.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ediff-util.el Sun Oct 09 20:00:17 2005 +0000 @@ -367,7 +367,7 @@ (ediff-unique-buffer-name "*ediff-merge" "*"))) (save-excursion (set-buffer buffer-C) - (insert-buffer buf) + (insert-buffer-substring buf) (funcall (ediff-with-current-buffer buf major-mode)) (widen) ; merge buffer is always widened (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t) @@ -2075,7 +2075,7 @@ (ediff-clear-fine-differences n)) ;; Make sure that the message about saving and how to restore is seen ;; by the user - (message messg)) + (message "%s" messg)) )) ;; Save Nth diff of buffer BUF-TYPE \(A, B, or C\). @@ -2111,7 +2111,7 @@ (if this-buf-n-th-diff-saved (if (yes-or-no-p (format - "You've previously copied diff region %d to buffer %S. Confirm " + "You've previously copied diff region %d to buffer %S. Confirm? " (1+ n) buf-type)) t (error "Quit")) @@ -2219,18 +2219,18 @@ regexp-A (read-string (format - "Ignore A-regions matching this regexp (default \"%s\"): " + "Ignore A-regions matching this regexp (default %s): " ediff-regexp-hide-A)) regexp-B (read-string (format - "Ignore B-regions matching this regexp (default \"%s\"): " + "Ignore B-regions matching this regexp (default %s): " ediff-regexp-hide-B))) (if ediff-3way-comparison-job (setq regexp-C (read-string (format - "Ignore C-regions matching this regexp (default \"%s\"): " + "Ignore C-regions matching this regexp (default %s): " ediff-regexp-hide-C)))) (if (eq ediff-hide-regexp-connective 'and) (setq msg-connective "BOTH" @@ -2258,18 +2258,18 @@ regexp-A (read-string (format - "Focus on A-regions matching this regexp (default \"%s\"): " + "Focus on A-regions matching this regexp (default %s): " ediff-regexp-focus-A)) regexp-B (read-string (format - "Focus on B-regions matching this regexp (default \"%s\"): " + "Focus on B-regions matching this regexp (default %s): " ediff-regexp-focus-B))) (if ediff-3way-comparison-job (setq regexp-C (read-string (format - "Focus on C-regions matching this regexp (default \"%s\"): " + "Focus on C-regions matching this regexp (default %s): " ediff-regexp-focus-C)))) (if (eq ediff-focus-regexp-connective 'and) (setq msg-connective "BOTH" @@ -2720,7 +2720,7 @@ (format "Another buffer is visiting file %s. Too dangerous to save the merge buffer" file))) (beep) - (message warn-message) + (message "%s" warn-message) (with-output-to-temp-buffer ediff-msg-buffer (princ "\n\n") (princ warn-message) @@ -3286,7 +3286,7 @@ (princ warn-message) (princ "\n\n")) (if (y-or-n-p - (message warn-message)) + (message "%s" warn-message)) (with-current-buffer buff (save-buffer) (kill-buffer (current-buffer))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ediff-vers.el --- a/lisp/ediff-vers.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ediff-vers.el Sun Oct 09 20:00:17 2005 +0000 @@ -299,7 +299,10 @@ ((eq type 'MODIFIED) (ediff-buffers (find-file-noselect tmp-file) - (find-file-noselect (cvs-fileinfo->full-path fileinfo)) + (if (featurep 'xemacs) + ;; XEmacs doesn't seem to have cvs-fileinfo->full-name + (find-file-noselect (cvs-fileinfo->full-path fileinfo)) + (find-file-noselect (cvs-fileinfo->full-name fileinfo))) nil ; startup-hooks 'ediff-revisions))) (if (stringp tmp-file) (delete-file tmp-file)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ediff.el --- a/lisp/ediff.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ediff.el Sun Oct 09 20:00:17 2005 +0000 @@ -7,8 +7,8 @@ ;; Created: February 2, 1994 ;; Keywords: comparing, merging, patching, tools, unix -(defconst ediff-version "2.80" "The current version of Ediff") -(defconst ediff-date "July 8, 2005" "Date of last update") +(defconst ediff-version "2.80.1" "The current version of Ediff") +(defconst ediff-date "September 19, 2005" "Date of last update") ;; This file is part of GNU Emacs. @@ -1261,13 +1261,13 @@ (setq rev1 (read-string (format - "Version 1 to merge (default: %s's working version): " + "Version 1 to merge (default %s's working version): " (if (stringp file) (file-name-nondirectory file) "current buffer"))) rev2 (read-string (format - "Version 2 to merge (default: %s): " + "Version 2 to merge (default %s): " (if (stringp file) (file-name-nondirectory file) "current buffer")))) (ediff-load-version-control) @@ -1293,19 +1293,19 @@ (setq rev1 (read-string (format - "Version 1 to merge (default: %s's working version): " + "Version 1 to merge (default %s's working version): " (if (stringp file) (file-name-nondirectory file) "current buffer"))) rev2 (read-string (format - "Version 2 to merge (default: %s): " + "Version 2 to merge (default %s): " (if (stringp file) (file-name-nondirectory file) "current buffer"))) ancestor-rev (read-string (format - "Ancestor version (default: %s's base revision): " + "Ancestor version (default %s's base revision): " (if (stringp file) (file-name-nondirectory file) "current buffer")))) (ediff-load-version-control) @@ -1411,11 +1411,11 @@ (let (rev1 rev2) (setq rev1 (read-string - (format "Revision 1 to compare (default: %s's latest revision): " + (format "Revision 1 to compare (default %s's latest revision): " (file-name-nondirectory file))) rev2 (read-string - (format "Revision 2 to compare (default: %s's current state): " + (format "Revision 2 to compare (default %s's current state): " (file-name-nondirectory file)))) (ediff-load-version-control) (funcall diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/advice.el --- a/lisp/emacs-lisp/advice.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/advice.el Sun Oct 09 20:00:17 2005 +0000 @@ -2218,7 +2218,7 @@ (let* ((ad-pReDiCaTe predicate) (function (completing-read - (format "%s(default %s) " (or prompt "Function: ") default) + (format "%s (default %s): " (or prompt "Function") default) ad-advised-functions (if predicate (function @@ -2250,7 +2250,7 @@ (ad-do-return class))) (error "ad-read-advice-class: `%s' has no advices" function))) (let ((class (completing-read - (format "%s(default %s) " (or prompt "Class: ") default) + (format "%s (default %s): " (or prompt "Class") default) ad-advice-class-completion-table nil t))) (if (equal class "") default @@ -2268,7 +2268,7 @@ (error "ad-read-advice-name: `%s' has no %s advice" function class) (car (car name-completion-table)))) - (prompt (format "%s(default %s) " (or prompt "Name: ") default)) + (prompt (format "%s (default %s): " (or prompt "Name") default)) (name (completing-read prompt name-completion-table nil t))) (if (equal name "") (intern default) @@ -2289,9 +2289,9 @@ (defun ad-read-regexp (&optional prompt) "Read a regular expression from the minibuffer." (let ((regexp (read-from-minibuffer - (concat (or prompt "Regular expression: ") - (if (equal ad-last-regexp "") "" - (format "(default \"%s\") " ad-last-regexp)))))) + (concat (or prompt "Regular expression") + (if (equal ad-last-regexp "") ": " + (format " (default %s): " ad-last-regexp)))))) (setq ad-last-regexp (if (equal regexp "") ad-last-regexp regexp)))) @@ -2352,7 +2352,7 @@ (defun ad-enable-advice (function class name) "Enables the advice of FUNCTION with CLASS and NAME." - (interactive (ad-read-advice-specification "Enable advice of: ")) + (interactive (ad-read-advice-specification "Enable advice of")) (if (ad-is-advised function) (if (eq (ad-enable-advice-internal function class name t) 0) (error "ad-enable-advice: `%s' has no %s advice matching `%s'" @@ -2361,7 +2361,7 @@ (defun ad-disable-advice (function class name) "Disable the advice of FUNCTION with CLASS and NAME." - (interactive (ad-read-advice-specification "Disable advice of: ")) + (interactive (ad-read-advice-specification "Disable advice of")) (if (ad-is-advised function) (if (eq (ad-enable-advice-internal function class name nil) 0) (error "ad-disable-advice: `%s' has no %s advice matching `%s'" @@ -2385,7 +2385,7 @@ "Enables all advices with names that contain a match for REGEXP. All currently advised functions will be considered." (interactive - (list (ad-read-regexp "Enable advices via regexp: "))) + (list (ad-read-regexp "Enable advices via regexp"))) (let ((matched-advices (ad-enable-regexp-internal regexp 'any t))) (if (interactive-p) (message "%d matching advices enabled" matched-advices)) @@ -2395,7 +2395,7 @@ "Disable all advices with names that contain a match for REGEXP. All currently advised functions will be considered." (interactive - (list (ad-read-regexp "Disable advices via regexp: "))) + (list (ad-read-regexp "Disable advices via regexp"))) (let ((matched-advices (ad-enable-regexp-internal regexp 'any nil))) (if (interactive-p) (message "%d matching advices disabled" matched-advices)) @@ -2405,7 +2405,7 @@ "Remove FUNCTION's advice with NAME from its advices in CLASS. If such an advice was found it will be removed from the list of advices in that CLASS." - (interactive (ad-read-advice-specification "Remove advice of: ")) + (interactive (ad-read-advice-specification "Remove advice of")) (if (ad-is-advised function) (let* ((advice-to-remove (ad-find-advice function class name))) (if advice-to-remove @@ -3285,7 +3285,7 @@ Clear the cache if you want to force `ad-activate' to construct a new advised definition from scratch." (interactive - (list (ad-read-advised-function "Clear cached definition of: "))) + (list (ad-read-advised-function "Clear cached definition of"))) (ad-set-advice-info-field function 'cache nil)) (defun ad-make-cache-id (function) @@ -3602,7 +3602,7 @@ enabled is equivalent to a call to `ad-deactivate'. The current advised definition will always be cached for later usage." (interactive - (list (ad-read-advised-function "Activate advice of: ") + (list (ad-read-advised-function "Activate advice of") current-prefix-arg)) (if ad-activate-on-top-level ;; avoid recursive calls to `ad-activate': @@ -3632,7 +3632,7 @@ information will still be available so it can be activated again with a call to `ad-activate'." (interactive - (list (ad-read-advised-function "Deactivate advice of: " 'ad-is-active))) + (list (ad-read-advised-function "Deactivate advice of" 'ad-is-active))) (if (not (ad-is-advised function)) (error "ad-deactivate: `%s' is not advised" function) (cond ((ad-is-active function) @@ -3650,7 +3650,7 @@ See `ad-activate' for documentation on the optional COMPILE argument." (interactive (list (ad-read-advised-function - "Update advised definition of: " 'ad-is-active))) + "Update advised definition of" 'ad-is-active))) (if (ad-is-active function) (ad-activate function compile))) @@ -3658,7 +3658,7 @@ "Deactivate FUNCTION and then remove all its advice information. If FUNCTION was not advised this will be a noop." (interactive - (list (ad-read-advised-function "Unadvise function: "))) + (list (ad-read-advised-function "Unadvise function"))) (cond ((ad-is-advised function) (if (ad-is-active function) (ad-deactivate function)) @@ -3689,7 +3689,7 @@ that has at least one piece of advice whose name includes a match for REGEXP. See `ad-activate' for documentation on the optional COMPILE argument." (interactive - (list (ad-read-regexp "Activate via advice regexp: ") + (list (ad-read-regexp "Activate via advice regexp") current-prefix-arg)) (ad-do-advised-functions (function) (if (ad-find-some-advice function 'any regexp) @@ -3700,7 +3700,7 @@ This deactivates the advice for each function that has at least one piece of advice whose name includes a match for REGEXP." (interactive - (list (ad-read-regexp "Deactivate via advice regexp: "))) + (list (ad-read-regexp "Deactivate via advice regexp"))) (ad-do-advised-functions (function) (if (ad-find-some-advice function 'any regexp) (ad-deactivate function)))) @@ -3711,7 +3711,7 @@ that has at least one piece of advice whose name includes a match for REGEXP. See `ad-activate' for documentation on the optional COMPILE argument." (interactive - (list (ad-read-regexp "Update via advice regexp: ") + (list (ad-read-regexp "Update via advice regexp") current-prefix-arg)) (ad-do-advised-functions (function) (if (ad-find-some-advice function 'any regexp) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/checkdoc.el --- a/lisp/emacs-lisp/checkdoc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/checkdoc.el Sun Oct 09 20:00:17 2005 +0000 @@ -1585,7 +1585,7 @@ ;; a prefix. (let ((disambiguate (completing-read - "Disambiguating Keyword (default: variable): " + "Disambiguating Keyword (default variable): " '(("function") ("command") ("variable") ("option") ("symbol")) nil t nil nil "variable"))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/debug.el --- a/lisp/emacs-lisp/debug.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/debug.el Sun Oct 09 20:00:17 2005 +0000 @@ -754,7 +754,7 @@ (interactive (list (let ((name (completing-read - "Cancel debug on entry to function (default: all functions): " + "Cancel debug on entry to function (default all functions): " (mapcar 'symbol-name debug-function-list) nil t))) (when name (unless (string= name "") diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/eldoc.el --- a/lisp/emacs-lisp/eldoc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/eldoc.el Sun Oct 09 20:00:17 2005 +0000 @@ -103,37 +103,37 @@ ;;; No user options below here. -;; Commands after which it is appropriate to print in the echo area. -;; Eldoc does not try to print function arglists, etc. after just any command, -;; because some commands print their own messages in the echo area and these -;; functions would instantly overwrite them. But self-insert-command as well -;; as most motion commands are good candidates. -;; This variable contains an obarray of symbols; do not manipulate it -;; directly. Instead, use `eldoc-add-command' and `eldoc-remove-command'. -(defvar eldoc-message-commands nil) +(defvar eldoc-message-commands-table-size 31 + "This is used by eldoc-add-command to initialize eldoc-message-commands +as an obarray. +It should probably never be necessary to do so, but if you +choose to increase the number of buckets, you must do so before loading +this file since the obarray is initialized at load time. +Remember to keep it a prime number to improve hash performance.") -;; This is used by eldoc-add-command to initialize eldoc-message-commands -;; as an obarray. -;; It should probably never be necessary to do so, but if you -;; choose to increase the number of buckets, you must do so before loading -;; this file since the obarray is initialized at load time. -;; Remember to keep it a prime number to improve hash performance. -(defvar eldoc-message-commands-table-size 31) +(defconst eldoc-message-commands + (make-vector eldoc-message-commands-table-size 0) + "Commands after which it is appropriate to print in the echo area. +Eldoc does not try to print function arglists, etc. after just any command, +because some commands print their own messages in the echo area and these +functions would instantly overwrite them. But self-insert-command as well +as most motion commands are good candidates. +This variable contains an obarray of symbols; do not manipulate it +directly. Instead, use `eldoc-add-command' and `eldoc-remove-command'.") -;; Bookkeeping; elements are as follows: -;; 0 - contains the last symbol read from the buffer. -;; 1 - contains the string last displayed in the echo area for that -;; symbol, so it can be printed again if necessary without reconsing. -;; 2 - 'function if function args, 'variable if variable documentation. -(defvar eldoc-last-data (make-vector 3 nil)) +(defconst eldoc-last-data (make-vector 3 nil) + "Bookkeeping; elements are as follows: + 0 - contains the last symbol read from the buffer. + 1 - contains the string last displayed in the echo area for that + symbol, so it can be printed again if necessary without reconsing. + 2 - 'function if function args, 'variable if variable documentation.") (defvar eldoc-last-message nil) -;; eldoc's timer object. -(defvar eldoc-timer nil) +(defvar eldoc-timer nil "eldoc's timer object.") -;; idle time delay currently in use by timer. -;; This is used to determine if eldoc-idle-delay is changed by the user. -(defvar eldoc-current-idle-delay eldoc-idle-delay) +(defvar eldoc-current-idle-delay eldoc-idle-delay + "idle time delay currently in use by timer. +This is used to determine if `eldoc-idle-delay' is changed by the user.") ;;;###autoload @@ -408,53 +408,32 @@ ;; These functions do display-command table management. (defun eldoc-add-command (&rest cmds) - (or eldoc-message-commands - (setq eldoc-message-commands - (make-vector eldoc-message-commands-table-size 0))) - - (let (name sym) - (while cmds - (setq name (car cmds)) - (setq cmds (cdr cmds)) - - (cond ((symbolp name) - (setq sym name) - (setq name (symbol-name sym))) - ((stringp name) - (setq sym (intern-soft name)))) - - (and (symbolp sym) - (fboundp sym) - (set (intern name eldoc-message-commands) t))))) + (dolist (name cmds) + (and (symbolp name) + (setq name (symbol-name name))) + (set (intern name eldoc-message-commands) t))) (defun eldoc-add-command-completions (&rest names) - (while names - (apply 'eldoc-add-command - (all-completions (car names) obarray 'fboundp)) - (setq names (cdr names)))) + (dolist (name names) + (apply 'eldoc-add-command (all-completions name obarray 'commandp)))) (defun eldoc-remove-command (&rest cmds) - (let (name) - (while cmds - (setq name (car cmds)) - (setq cmds (cdr cmds)) - - (and (symbolp name) - (setq name (symbol-name name))) - - (unintern name eldoc-message-commands)))) + (dolist (name cmds) + (and (symbolp name) + (setq name (symbol-name name))) + (unintern name eldoc-message-commands))) (defun eldoc-remove-command-completions (&rest names) - (while names + (dolist (name names) (apply 'eldoc-remove-command - (all-completions (car names) eldoc-message-commands)) - (setq names (cdr names)))) + (all-completions name eldoc-message-commands)))) ;; Prime the command list. (eldoc-add-command-completions - "backward-" "beginning-of-" "delete-other-windows" "delete-window" - "end-of-" "exchange-point-and-mark" "forward-" + "backward-" "beginning-of-" "move-beginning-of-" "delete-other-windows" + "delete-window" + "end-of-" "move-end-of-" "exchange-point-and-mark" "forward-" "indent-for-tab-command" "goto-" "mark-page" "mark-paragraph" "mouse-set-point" "move-" "pop-global-mark" "next-" "other-window" "previous-" "recenter" "scroll-" "self-insert-command" @@ -462,5 +441,5 @@ (provide 'eldoc) -;;; arch-tag: c9a58f9d-2055-46c1-9b82-7248b71a8375 +;; arch-tag: c9a58f9d-2055-46c1-9b82-7248b71a8375 ;;; eldoc.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/find-func.el --- a/lisp/emacs-lisp/find-func.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/find-func.el Sun Oct 09 20:00:17 2005 +0000 @@ -260,7 +260,7 @@ (setq function (symbol-function function) def (symbol-function function))) (if aliases - (message aliases)) + (message "%s" aliases)) (let ((library (cond ((eq (car-safe def) 'autoload) (nth 1 def)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/lisp-mnt.el --- a/lisp/emacs-lisp/lisp-mnt.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/lisp-mnt.el Sun Oct 09 20:00:17 2005 +0000 @@ -610,7 +610,7 @@ (if version (insert " version " version)) (newline 2) - (message + (message "%s" (substitute-command-keys "Type \\[mail-send] to send bug report.")))) (provide 'lisp-mnt) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emacs-lisp/lisp-mode.el --- a/lisp/emacs-lisp/lisp-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emacs-lisp/lisp-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -59,9 +59,9 @@ (modify-syntax-entry ?\t " " table) (modify-syntax-entry ?\f " " table) (modify-syntax-entry ?\n "> " table) -;;; This is probably obsolete since nowadays such features use overlays. -;;; ;; Give CR the same syntax as newline, for selective-display. -;;; (modify-syntax-entry ?\^m "> " table) + ;; This is probably obsolete since nowadays such features use overlays. + ;; ;; Give CR the same syntax as newline, for selective-display. + ;; (modify-syntax-entry ?\^m "> " table) (modify-syntax-entry ?\; "< " table) (modify-syntax-entry ?` "' " table) (modify-syntax-entry ?' "' " table) @@ -82,8 +82,8 @@ (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table))) (modify-syntax-entry ?\[ "_ " table) (modify-syntax-entry ?\] "_ " table) - (modify-syntax-entry ?# "' 14bn" table) - (modify-syntax-entry ?| "\" 23b" table) + (modify-syntax-entry ?# "' 14b" table) + (modify-syntax-entry ?| "\" 23bn" table) table)) (define-abbrev-table 'lisp-mode-abbrev-table ()) @@ -147,25 +147,45 @@ (put 'define-ibuffer-filter 'doc-string-elt 2) (put 'define-ibuffer-op 'doc-string-elt 3) (put 'define-ibuffer-sorter 'doc-string-elt 2) +(put 'lambda 'doc-string-elt 2) + +(defvar lisp-doc-string-elt-property 'doc-string-elt + "The symbol property that holds the docstring position info.") (defun lisp-font-lock-syntactic-face-function (state) (if (nth 3 state) - (if (and (eq (nth 0 state) 1) - ;; This might be a docstring. - (save-excursion - (let ((n 0)) - (goto-char (nth 8 state)) - (condition-case nil - (while (and (not (bobp)) - (progn (backward-sexp 1) (setq n (1+ n))))) - (scan-error nil)) - (when (> n 0) - (let ((sym (intern-soft - (buffer-substring - (point) (progn (forward-sexp 1) (point)))))) - (eq n (or (get sym 'doc-string-elt) 3))))))) - font-lock-doc-face - font-lock-string-face) + ;; This might be a (doc)string or a |...| symbol. + (let ((startpos (nth 8 state))) + (if (eq (char-after startpos) ?|) + ;; This is not a string, but a |...| symbol. + nil + (let* ((listbeg (nth 1 state)) + (firstsym (and listbeg + (save-excursion + (goto-char listbeg) + (and (looking-at "([ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)") + (match-string 1))))) + (docelt (and firstsym (get (intern-soft firstsym) + lisp-doc-string-elt-property)))) + (if (and docelt + ;; It's a string in a form that can have a docstring. + ;; Check whether it's in docstring position. + (save-excursion + (when (functionp docelt) + (goto-char (match-end 1)) + (setq docelt (funcall docelt))) + (goto-char listbeg) + (forward-char 1) + (condition-case nil + (while (and (> docelt 0) (< (point) startpos) + (progn (forward-sexp 1) t)) + (setq docelt (1- docelt))) + (error nil)) + (and (zerop docelt) (<= (point) startpos) + (progn (forward-comment (point-max)) t) + (= (point) (nth 8 state))))) + font-lock-doc-face + font-lock-string-face)))) font-lock-comment-face)) ;; The LISP-SYNTAX argument is used by code in inf-lisp.el and is diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/cua-base.el --- a/lisp/emulation/cua-base.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/cua-base.el Sun Oct 09 20:00:17 2005 +0000 @@ -1324,6 +1324,10 @@ move-end-of-line move-beginning-of-line end-of-buffer beginning-of-buffer scroll-up scroll-down + up-list down-list backward-up-list + end-of-defun beginning-of-defun + forward-sexp backward-sexp + forward-list backward-list forward-sentence backward-sentence forward-paragraph backward-paragraph)) (put cmd 'CUA 'move)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/vip.el --- a/lisp/emulation/vip.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/vip.el Sun Oct 09 20:00:17 2005 +0000 @@ -893,7 +893,7 @@ each line in the region." (setq vip-quote-string (let ((str - (vip-read-string (format "quote string \(default \"%s\"\): " + (vip-read-string (format "quote string (default %s): " vip-quote-string)))) (if (string= str "") vip-quote-string str))) (vip-enlarge-region (point) (mark)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper-cmd.el --- a/lisp/emulation/viper-cmd.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper-cmd.el Sun Oct 09 20:00:17 2005 +0000 @@ -358,7 +358,7 @@ 'viper-insertion-ring)) (if viper-ESC-moves-cursor-back - (or (bolp) (backward-char 1)))) + (or (bolp) (viper-beginning-of-field) (backward-char 1)))) )) ;; insert or replace @@ -1996,7 +1996,8 @@ ;;; Minibuffer business (defsubst viper-set-minibuffer-style () - (add-hook 'minibuffer-setup-hook 'viper-minibuffer-setup-sentinel)) + (add-hook 'minibuffer-setup-hook 'viper-minibuffer-setup-sentinel) + (add-hook 'post-command-hook 'viper-minibuffer-post-command-hook)) (defun viper-minibuffer-setup-sentinel () @@ -2039,6 +2040,11 @@ (minibuffer-prompt-end) (point-min))) +(defun viper-minibuffer-post-command-hook() + (when (active-minibuffer-window) + (when (< (point) (viper-minibuffer-real-start)) + (goto-char (viper-minibuffer-real-start))))) + ;; Interpret last event in the local map first; if fails, use exit-minibuffer. ;; Run viper-minibuffer-exit-hook before exiting. @@ -2154,7 +2160,7 @@ (setq keymap (or keymap minibuffer-local-map) initial (or initial "") temp-msg (if default - (format "(default: %s) " default) + (format "(default %s) " default) "")) (setq viper-incomplete-ex-cmd nil) @@ -2570,7 +2576,7 @@ ;; last line of buffer when this line has no \n. (viper-add-newline-at-eob-if-necessary) (viper-execute-com 'viper-line val com)) - (if (and (eobp) (not (bobp))) (forward-line -1)) + (if (and (eobp) (bolp) (not (bobp))) (forward-line -1)) ) (defun viper-yank-line (arg) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper-ex.el --- a/lisp/emulation/viper-ex.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper-ex.el Sun Oct 09 20:00:17 2005 +0000 @@ -1590,7 +1590,7 @@ ;; Ex print working directory (defun ex-pwd () - (message default-directory)) + (message "%s" default-directory)) ;; Ex quit command (defun ex-quit () @@ -2230,7 +2230,7 @@ (if (buffer-modified-p) "[Modified]" "[Unchanged]"))) (if (< (+ 1 (length info) (length file)) (window-width (minibuffer-window))) - (message (concat file " " info)) + (message "%s" (concat file " " info)) (save-window-excursion (with-output-to-temp-buffer " *viper-info*" (princ (concat "\n" file "\n\n\t" info "\n\n"))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper-init.el --- a/lisp/emulation/viper-init.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper-init.el Sun Oct 09 20:00:17 2005 +0000 @@ -115,6 +115,11 @@ ;;; Macros +;; Fool the compiler to avoid warnings. +;; Viper calls make-variable-buffer-local from within other functions, which +;; triggers compiler warnings. +(defalias 'viper-make-variable-buffer-local 'make-variable-buffer-local) + (defmacro viper-deflocalvar (var default-value &optional documentation) `(progn (defvar ,var ,default-value diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper-macs.el --- a/lisp/emulation/viper-macs.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper-macs.el Sun Oct 09 20:00:17 2005 +0000 @@ -118,7 +118,7 @@ (define-key viper-vi-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro) (define-key viper-insert-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro) (define-key viper-emacs-intercept-map "\C-x)" 'viper-end-mapping-kbd-macro) - (message "Mapping %S in %s state. Hit `C-x )' to complete the mapping" + (message "Mapping %S in %s state. Type macro definition followed by `C-x )'" (viper-display-macro macro-name) (if ins "Insert" "Vi"))) )) @@ -170,7 +170,7 @@ ((stringp macro-name) (setq macro-name (vconcat macro-name))) (t (setq macro-name (vconcat (prin1-to-string macro-name))))) - (message ":map%s <Name>" variant)(sit-for 2) + (message ":map%s <Macro Name>" variant)(sit-for 2) (while (not (member key '(?\C-m ?\n (control m) (control j) return linefeed))) @@ -186,7 +186,7 @@ variant (if (> (length key-seq) 0) (prin1-to-string (viper-display-macro key-seq)) ""))) - (message message) + (message "%s" message) (setq event (viper-read-key)) ;;(setq event (viper-read-event)) (setq key @@ -263,7 +263,7 @@ (prin1-to-string (viper-display-macro key-seq)) ""))) - (message message) + (message "%s" message) (setq event (viper-read-key)) ;;(setq event (viper-read-event)) (setq key @@ -442,7 +442,7 @@ scope) viper-custom-file-name)) - (message msg) + (message "%s" msg) )) (setq new-elt diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper-util.el --- a/lisp/emulation/viper-util.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper-util.el Sun Oct 09 20:00:17 2005 +0000 @@ -1405,6 +1405,7 @@ viper-SEP-char-class (or within-line "\n") (if within-line (viper-line-pos 'end))))) + (defsubst viper-skip-all-separators-backward (&optional within-line) (if (eq viper-syntax-preference 'strict-vi) (if within-line @@ -1433,6 +1434,7 @@ ;; Emacs may consider some of these as words, but we don't want them viper-non-word-characters (viper-line-pos 'end)))) + (defun viper-skip-nonalphasep-backward () (if (eq viper-syntax-preference 'strict-vi) (skip-chars-backward @@ -1502,6 +1504,12 @@ total )) +;; tells when point is at the beginning of field +(defun viper-beginning-of-field () + (or (bobp) + (not (eq (get-char-property (point) 'field) + (get-char-property (1- (point)) 'field))))) + ;; this is copied from cl-extra.el ;; Return the subsequence of SEQ from START to END. diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/viper.el --- a/lisp/emulation/viper.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/viper.el Sun Oct 09 20:00:17 2005 +0000 @@ -9,7 +9,7 @@ ;; Author: Michael Kifer <kifer@cs.stonybrook.edu> ;; Keywords: emulations -(defconst viper-version "3.11.5 of August 6, 2005" +(defconst viper-version "3.11.5 of September 19, 2005" "The current version of Viper") ;; This file is part of GNU Emacs. @@ -606,7 +606,7 @@ (viper-set-expert-level 'dont-change-unless))) (if viper-xemacs-p - (make-variable-buffer-local 'bar-cursor)) + (viper-make-variable-buffer-local 'bar-cursor)) (if (eq major-mode 'viper-mode) (setq major-mode 'fundamental-mode)) @@ -769,6 +769,7 @@ (remove-hook 'comint-mode-hook 'viper-comint-mode-hook) (remove-hook 'minibuffer-setup-hook 'viper-minibuffer-setup-sentinel) (remove-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel) + (remove-hook 'post-command-hook 'viper-minibuffer-post-command-hook) ;; unbind Viper mouse bindings (viper-unbind-mouse-search-key) @@ -1008,7 +1009,7 @@ ;; ***This is needed only in case emulation-mode-map-alists is not defined (unless (and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists)) - (make-variable-buffer-local 'minor-mode-map-alist)) + (viper-make-variable-buffer-local 'minor-mode-map-alist)) ;; Viper changes the default mode-line-buffer-identification (setq-default mode-line-buffer-identification '(" %b")) @@ -1017,7 +1018,7 @@ (setq next-line-add-newlines nil require-final-newline t) - (make-variable-buffer-local 'require-final-newline) + (viper-make-variable-buffer-local 'require-final-newline) ;; don't bark when mark is inactive (if viper-emacs-p diff -r 7a3090aca393 -r 2a679c81f552 lisp/emulation/ws-mode.el --- a/lisp/emulation/ws-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/emulation/ws-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -691,7 +691,7 @@ This will only work for errors raised by WordStar mode functions." (interactive) (if ws-last-errormessage - (message ws-last-errormessage) + (message "%s" ws-last-errormessage) (message "No WordStar error yet."))) (defun ws-kill-eol () diff -r 7a3090aca393 -r 2a679c81f552 lisp/eshell/esh-proc.el --- a/lisp/eshell/esh-proc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/eshell/esh-proc.el Sun Oct 09 20:00:17 2005 +0000 @@ -225,8 +225,8 @@ (if (and (eshell-processp (car entry)) (nth 2 entry) eshell-done-messages-in-minibuffer) - (message (format "[%s]+ Done %s" (process-name (car entry)) - (process-command (car entry))))) + (message "[%s]+ Done %s" (process-name (car entry)) + (process-command (car entry)))) (setq eshell-process-list (delq entry eshell-process-list))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ezimage.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ezimage.el Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,371 @@ +;;; ezimage --- Generalized Image management + +;;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation + +;; Author: Eric M. Ludlam <zappo@gnu.org> +;; Keywords: file, tags, 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 2, 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: +;; +;; A few routines for placing an image over text that will work for any +;; Emacs implementation without error. When images are not supported, then +;; they are justnot displayed. +;; +;; The idea is that gui buffers (trees, buttons, etc) will have text +;; representations of the GUI elements. These routines will replace the text +;; with an image when images are available. +;; +;; This file requires the `image' package if it is available. + +(condition-case nil + (require 'image) + (error nil)) + +;;; Code: +(defcustom ezimage-use-images + (and (or (fboundp 'defimage) ; emacs 21 + (fboundp 'make-image-specifier)) ; xemacs + (if (fboundp 'display-graphic-p) ; emacs 21 + (display-graphic-p) + window-system) ; old emacs & xemacs + (or (not (fboundp 'image-type-available-p)) ; xemacs? + (image-type-available-p 'xpm))) ; emacs 21 + "*Non-nil if ezimage should display icons." + :group 'ezimage + :version "21.1" + :type 'boolean) + +;;; Create our own version of defimage +(eval-and-compile + +(if (fboundp 'defimage) + + (progn + +(defmacro defezimage (variable imagespec docstring) + "Define VARIABLE as an image if `defimage' is not available. +IMAGESPEC is the image data, and DOCSTRING is documentation for the image." + `(progn + (defimage ,variable ,imagespec ,docstring) + (put (quote ,variable) 'ezimage t))) + +; (defalias 'defezimage 'defimage) + +;; This hack is for the ezimage install which has an icons direcory for +;; the default icons to be used. +;; (add-to-list 'load-path +;; (concat (file-name-directory +;; (locate-library "ezimage.el")) +;; "icons")) + + ) + (if (not (fboundp 'make-glyph)) + +(defmacro defezimage (variable imagespec docstring) + "Don't bother loading up an image... +Argument VARIABLE is the variable to define. +Argument IMAGESPEC is the list defining the image to create. +Argument DOCSTRING is the documentation for VARIABLE." + `(defvar ,variable nil ,docstring)) + +;; ELSE +(with-no-warnings +(defun ezimage-find-image-on-load-path (image) + "Find the image file IMAGE on the load path." + (let ((l (cons + ;; In XEmacs, try the data directory first (for an + ;; install in XEmacs proper.) Search the load + ;; path next (for user installs) + (locate-data-directory "ezimage") + load-path)) + (r nil)) + (while (and l (not r)) + (if (file-exists-p (concat (car l) "/" image)) + (setq r (concat (car l) "/" image)) + (if (file-exists-p (concat (car l) "/icons/" image)) + (setq r (concat (car l) "/icons/" image)) + )) + (setq l (cdr l))) + r)) +);with-no-warnings + +(with-no-warnings +(defun ezimage-convert-emacs21-imagespec-to-xemacs (spec) + "Convert the Emacs21 image SPEC into an XEmacs image spec. +The Emacs 21 spec is what I first learned, and is easy to convert." + (let* ((sl (car spec)) + (itype (nth 1 sl)) + (ifile (nth 3 sl))) + (vector itype ':file (ezimage-find-image-on-load-path ifile)))) +);with-no-warnings + +(defmacro defezimage (variable imagespec docstring) + "Define VARIABLE as an image if `defimage' is not available. +IMAGESPEC is the image data, and DOCSTRING is documentation for the image." + `(progn + (defvar ,variable + ;; The Emacs21 version of defimage looks just like the XEmacs image + ;; specifier, except that it needs a :type keyword. If we line + ;; stuff up right, we can use this cheat to support XEmacs specifiers. + (condition-case nil + (make-glyph + (make-image-specifier + (ezimage-convert-emacs21-imagespec-to-xemacs (quote ,imagespec))) + 'buffer) + (error nil)) + ,docstring) + (put ',variable 'ezimage t))) + +))) + +(defezimage ezimage-directory + ((:type xpm :file "ezimage/dir.xpm" :ascent center)) + "Image used for empty directories.") + +(defezimage ezimage-directory-plus + ((:type xpm :file "ezimage/dir-plus.xpm" :ascent center)) + "Image used for closed directories with stuff in them.") + +(defezimage ezimage-directory-minus + ((:type xpm :file "ezimage/dir-minus.xpm" :ascent center)) + "Image used for open directories with stuff in them.") + +(defezimage ezimage-page-plus + ((:type xpm :file "ezimage/page-plus.xpm" :ascent center)) + "Image used for closed files with stuff in them.") + +(defezimage ezimage-page-minus + ((:type xpm :file "ezimage/page-minus.xpm" :ascent center)) + "Image used for open files with stuff in them.") + +(defezimage ezimage-page + ((:type xpm :file "ezimage/page.xpm" :ascent center)) + "Image used for files with nothing interesting in it.") + +(defezimage ezimage-tag + ((:type xpm :file "ezimage/tag.xpm" :ascent center)) + "Image used for tags.") + +(defezimage ezimage-tag-plus + ((:type xpm :file "ezimage/tag-plus.xpm" :ascent center)) + "Image used for closed tag groups.") + +(defezimage ezimage-tag-minus + ((:type xpm :file "ezimage/tag-minus.xpm" :ascent center)) + "Image used for open tags.") + +(defezimage ezimage-tag-gt + ((:type xpm :file "ezimage/tag-gt.xpm" :ascent center)) + "Image used for closed tags (with twist arrow).") + +(defezimage ezimage-tag-v + ((:type xpm :file "ezimage/tag-v.xpm" :ascent center)) + "Image used for open tags (with twist arrow).") + +(defezimage ezimage-tag-type + ((:type xpm :file "ezimage/tag-type.xpm" :ascent center)) + "Image used for tags that represent a data type.") + +(defezimage ezimage-box-plus + ((:type xpm :file "ezimage/box-plus.xpm" :ascent center)) + "Image of a closed box.") + +(defezimage ezimage-box-minus + ((:type xpm :file "ezimage/box-minus.xpm" :ascent center)) + "Image of an open box.") + +(defezimage ezimage-mail + ((:type xpm :file "ezimage/mail.xpm" :ascent center)) + "Image if an envelope.") + +(defezimage ezimage-checkout + ((:type xpm :file "ezimage/checkmark.xpm" :ascent center)) + "Image representing a checkmark. For files checked out of a VC.") + +(defezimage ezimage-object + ((:type xpm :file "ezimage/bits.xpm" :ascent center)) + "Image representing bits (an object file.)") + +(defezimage ezimage-object-out-of-date + ((:type xpm :file "ezimage/bitsbang.xpm" :ascent center)) + "Image representing bits with a ! in it. (an out of data object file.)") + +(defezimage ezimage-label + ((:type xpm :file "ezimage/label.xpm" :ascent center)) + "Image used for label prefix.") + +(defezimage ezimage-lock + ((:type xpm :file "ezimage/lock.xpm" :ascent center)) + "Image of a lock. Used for Read Only, or private.") + +(defezimage ezimage-unlock + ((:type xpm :file "ezimage/unlock.xpm" :ascent center)) + "Image of an unlocked lock.") + +(defezimage ezimage-key + ((:type xpm :file "ezimage/key.xpm" :ascent center)) + "Image of a key.") + +(defezimage ezimage-document-tag + ((:type xpm :file "ezimage/doc.xpm" :ascent center)) + "Image used to indicate documentation available.") + +(defezimage ezimage-document-plus + ((:type xpm :file "ezimage/doc-plus.xpm" :ascent center)) + "Image used to indicate closed documentation.") + +(defezimage ezimage-document-minus + ((:type xpm :file "ezimage/doc-minus.xpm" :ascent center)) + "Image used to indicate open documentation.") + +(defezimage ezimage-info-tag + ((:type xpm :file "ezimage/info.xpm" :ascent center)) + "Image used to indicate more information available.") + +(defvar ezimage-expand-image-button-alist + '( + ;; here are some standard representations + ("<+>" . ezimage-directory-plus) + ("<->" . ezimage-directory-minus) + ("< >" . ezimage-directory) + ("[+]" . ezimage-page-plus) + ("[-]" . ezimage-page-minus) + ("[?]" . ezimage-page) + ("[ ]" . ezimage-page) + ("{+}" . ezimage-box-plus) + ("{-}" . ezimage-box-minus) + ;; Some vaguely representitive entries + ("*" . ezimage-checkout) + ("#" . ezimage-object) + ("!" . ezimage-object-out-of-date) + ("%" . ezimage-lock) + ) + "List of text and image associations.") + +(defun ezimage-insert-image-button-maybe (start length &optional string) + "Insert an image button based on text starting at START for LENGTH chars. +If buttontext is unknown, just insert that text. +If we have an image associated with it, use that image. +Optional argument STRING is a st ring upon which to add text properties." + (when ezimage-use-images + (let* ((bt (buffer-substring start (+ length start))) + (a (assoc bt ezimage-expand-image-button-alist))) + ;; Regular images (created with `insert-image' are intangible + ;; which (I suppose) make them more compatible with XEmacs 21. + ;; Unfortunatly, there is a giant pile o code dependent on the + ;; underlying text. This means if we leave it tangible, then I + ;; don't have to change said giant piles o code. + (if (and a (symbol-value (cdr a))) + (ezimage-insert-over-text (symbol-value (cdr a)) + start + (+ start (length bt)))))) + string) + +(defun ezimage-image-over-string (string &optional alist) + "Insert over the text in STRING an image found in ALIST. +Return STRING with properties applied." + (if ezimage-use-images + (let ((a (assoc string alist))) + (if (and a (symbol-value (cdr a))) + (ezimage-insert-over-text (symbol-value (cdr a)) + 0 (length string) + string) + string)) + string)) + +(defun ezimage-insert-over-text (image start end &optional string) + "Place IMAGE over the text between START and END. +Assumes the image is part of a gui and can be clicked on. +Optional argument STRING is a string upon which to add text properties." + (when ezimage-use-images + (if (featurep 'xemacs) + (add-text-properties start end + (list 'end-glyph image + 'rear-nonsticky (list 'display) + 'invisible t + 'detachable t) + string) + (add-text-properties start end + (list 'display image + 'rear-nonsticky (list 'display)) + string))) + string) + +(defun ezimage-image-association-dump () + "Dump out the current state of the Ezimage image alist. +See `ezimage-expand-image-button-alist' for details." + (interactive) + (with-output-to-temp-buffer "*Ezimage Images*" + (save-excursion + (set-buffer "*Ezimage Images*") + (goto-char (point-max)) + (insert "Ezimage image cache.\n\n") + (let ((start (point)) (end nil)) + (insert "Image\tText\tImage Name") + (setq end (point)) + (insert "\n") + (put-text-property start end 'face 'underline)) + (let ((ia ezimage-expand-image-button-alist)) + (while ia + (let ((start (point))) + (insert (car (car ia))) + (insert "\t") + (ezimage-insert-image-button-maybe start + (length (car (car ia)))) + (insert (car (car ia)) "\t" (format "%s" (cdr (car ia))) "\n")) + (setq ia (cdr ia))))))) + +(defun ezimage-image-dump () + "Dump out the current state of the Ezimage image alist. +See `ezimage-expand-image-button-alist' for details." + (interactive) + (with-output-to-temp-buffer "*Ezimage Images*" + (save-excursion + (set-buffer "*Ezimage Images*") + (goto-char (point-max)) + (insert "Ezimage image cache.\n\n") + (let ((start (point)) (end nil)) + (insert "Image\tImage Name") + (setq end (point)) + (insert "\n") + (put-text-property start end 'face 'underline)) + (let ((ia (ezimage-all-images))) + (while ia + (let ((start (point))) + (insert "cm") + (ezimage-insert-over-text (symbol-value (car ia)) start (point)) + (insert "\t" (format "%s" (car ia)) "\n")) + (setq ia (cdr ia))))))) + +(defun ezimage-all-images () + "Return a list of all variables containing ez images." + (let ((ans nil)) + (mapatoms (lambda (sym) + (if (get sym 'ezimage) (setq ans (cons sym ans)))) + ) + (setq ans (sort ans (lambda (a b) + (string< (symbol-name a) (symbol-name b))))) + ans) + ) + +(provide 'ezimage) + +;; arch-tag: d4ea2d93-3c7a-4cb3-b5a6-c1b9178183aa +;;; sb-image.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/faces.el --- a/lisp/faces.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/faces.el Sun Oct 09 20:00:17 2005 +0000 @@ -1892,12 +1892,154 @@ "The standard faces of Emacs." :group 'faces) - (defface default '((t nil)) "Basic default face." :group 'basic-faces) +(defface bold + '((t :weight bold)) + "Basic bold face." + :group 'basic-faces) + +(defface italic + '((((supports :slant italic)) + :slant italic) + (((supports :underline t)) + :underline t) + (t + ;; default to italic, even it doesn't appear to be supported, + ;; because in some cases the display engine will do it's own + ;; workaround (to `dim' on ttys) + :slant italic)) + "Basic italic face." + :group 'basic-faces) + +(defface bold-italic + '((t :weight bold :slant italic)) + "Basic bold-italic face." + :group 'basic-faces) + +(defface underline + '((((supports :underline t)) + :underline t) + (((supports :weight bold)) + :weight bold) + (t :underline t)) + "Basic underlined face." + :group 'basic-faces) + +(defface fixed-pitch + '((t :family "courier")) + "The basic fixed-pitch face." + :group 'basic-faces) + +(defface variable-pitch + '((t :family "helv")) + "The basic variable-pitch face." + :group 'basic-faces) + +(defface shadow + '((((class color grayscale) (min-colors 88) (background light)) + :foreground "grey50") + (((class color grayscale) (min-colors 88) (background dark)) + :foreground "grey70") + (((class color) (min-colors 8) (background light)) + :foreground "green") + (((class color) (min-colors 8) (background dark)) + :foreground "yellow")) + "Basic face for shadowed text." + :group 'basic-faces + :version "22.1") + +(defface highlight + '((((class color) (min-colors 88) (background light)) + :background "darkseagreen2") + (((class color) (min-colors 88) (background dark)) + :background "darkolivegreen") + (((class color) (min-colors 16) (background light)) + :background "darkseagreen2") + (((class color) (min-colors 16) (background dark)) + :background "darkolivegreen") + (((class color) (min-colors 8)) + :background "green" :foreground "black") + (t :inverse-video t)) + "Basic face for highlighting." + :group 'basic-faces) + +(defface mode-line-highlight + '((((class color) (min-colors 88)) + :box (:line-width 2 :color "grey40" :style released-button)) + (t + :inherit highlight)) + "Basic mode line face for highlighting." + :version "22.1" + :group 'modeline + :group 'basic-faces) + +(defface region + '((((class color) (min-colors 88) (background dark)) + :background "blue3") + (((class color) (min-colors 88) (background light)) + :background "lightgoldenrod2") + (((class color) (min-colors 16) (background dark)) + :background "blue3") + (((class color) (min-colors 16) (background light)) + :background "lightgoldenrod2") + (((class color) (min-colors 8)) + :background "blue" :foreground "white") + (((type tty) (class mono)) + :inverse-video t) + (t :background "gray")) + "Basic face for highlighting the region." + :version "21.1" + :group 'basic-faces) + +(defface secondary-selection + '((((class color) (min-colors 88) (background light)) + :background "yellow1") + (((class color) (min-colors 88) (background dark)) + :background "SkyBlue4") + (((class color) (min-colors 16) (background light)) + :background "yellow") + (((class color) (min-colors 16) (background dark)) + :background "SkyBlue4") + (((class color) (min-colors 8)) + :background "cyan" :foreground "black") + (t :inverse-video t)) + "Basic face for displaying the secondary selection." + :group 'basic-faces) + +(defface trailing-whitespace + '((((class color) (background light)) + :background "red1") + (((class color) (background dark)) + :background "red1") + (t :inverse-video t)) + "Basic face for highlighting trailing whitespace." + :version "21.1" + :group 'whitespace ; like `show-trailing-whitespace' + :group 'basic-faces) + +(defface escape-glyph + '((((background dark)) :foreground "cyan") + ;; See the comment in minibuffer-prompt for + ;; the reason not to use blue on MS-DOS. + (((type pc)) :foreground "magenta") + ;; red4 is too dark, but some say blue is too loud. + ;; brown seems to work ok. -- rms. + (t :foreground "brown")) + "Face for characters displayed as ^-sequences or \-sequences." + :group 'basic-faces + :version "22.1") + +(defface nobreak-space + '((((class color) (min-colors 88)) :inherit escape-glyph :underline t) + (((class color) (min-colors 8)) :background "magenta") + (t :inverse-video t)) + "Face for displaying nobreak space." + :group 'basic-faces + :version "22.1") (defface mode-line '((((class color) (min-colors 88)) @@ -1926,23 +2068,6 @@ :group 'modeline :group 'basic-faces) -(defface mode-line-highlight - '((((class color) (min-colors 88)) - :box (:line-width 2 :color "grey40" :style released-button)) - (t - :inherit highlight)) - "Basic mode line face for highlighting." - :version "22.1" - :group 'modeline - :group 'basic-faces) - -(defface vertical-border - '((((type tty)) :inherit mode-line-inactive)) - "Face used for vertical window dividers on ttys." - :version "22.1" - :group 'modeline - :group 'basic-faces) - ;; Make `modeline' an alias for `mode-line', for compatibility. (put 'modeline 'face-alias 'mode-line) (put 'modeline-inactive 'face-alias 'mode-line-inactive) @@ -1983,20 +2108,13 @@ :version "21.1" :group 'basic-faces) - -(defface tool-bar - '((default - :box (:line-width 1 :style released-button) - :foreground "black") - (((type x w32 mac) (class color)) - :background "grey75") - (((type x) (class mono)) - :background "grey")) - "Basic tool-bar face." - :version "21.1" +(defface vertical-border + '((((type tty)) :inherit mode-line-inactive)) + "Face used for vertical window dividers on ttys." + :version "22.1" + :group 'modeline :group 'basic-faces) - (defface minibuffer-prompt '((((background dark)) :foreground "cyan") ;; Don't use blue because many users of the MS-DOS port customize @@ -2013,25 +2131,6 @@ (setq minibuffer-prompt-properties (append minibuffer-prompt-properties (list 'face 'minibuffer-prompt))) -(defface region - '((((class color) (min-colors 88) (background dark)) - :background "blue3") - (((class color) (min-colors 88) (background light)) - :background "lightgoldenrod2") - (((class color) (min-colors 16) (background dark)) - :background "blue3") - (((class color) (min-colors 16) (background light)) - :background "lightgoldenrod2") - (((class color) (min-colors 8)) - :background "blue" :foreground "white") - (((type tty) (class mono)) - :inverse-video t) - (t :background "gray")) - "Basic face for highlighting the region." - :version "21.1" - :group 'basic-faces) - - (defface fringe '((((class color) (background light)) :background "grey95") @@ -2044,34 +2143,18 @@ :group 'frames :group 'basic-faces) - (defface scroll-bar '() "Basic face for the scroll bar colors under X." :version "21.1" :group 'frames :group 'basic-faces) - -(defface menu - '((((type tty)) - :inverse-video t) - (((type x-toolkit)) - ) - (t - :inverse-video t)) - "Basic face for the font and colors of the menu bar and popup menus." - :version "21.1" - :group 'menu - :group 'basic-faces) - - (defface border '() "Basic face for the frame border under X." :version "21.1" :group 'frames :group 'basic-faces) - (defface cursor '() "Basic face for the cursor color under X. Note: Other faces cannot inherit from the cursor face." @@ -2087,126 +2170,30 @@ :group 'mouse :group 'basic-faces) - -(defface bold '((t :weight bold)) - "Basic bold face." - :group 'basic-faces) - - -(defface italic - '((((supports :slant italic)) - :slant italic) - (((supports :underline t)) - :underline t) - (t - ;; default to italic, even it doesn't appear to be supported, - ;; because in some cases the display engine will do it's own - ;; workaround (to `dim' on ttys) - :slant italic)) - "Basic italic face." - :group 'basic-faces) - - -(defface bold-italic '((t :weight bold :slant italic)) - "Basic bold-italic face." - :group 'basic-faces) - - -(defface underline '((((supports :underline t)) - :underline t) - (((supports :weight bold)) - :weight bold) - (t :underline t)) - "Basic underlined face." - :group 'basic-faces) - - -(defface highlight - '((((class color) (min-colors 88) (background light)) - :background "darkseagreen2") - (((class color) (min-colors 88) (background dark)) - :background "darkolivegreen") - (((class color) (min-colors 16) (background light)) - :background "darkseagreen2") - (((class color) (min-colors 16) (background dark)) - :background "darkolivegreen") - (((class color) (min-colors 8)) - :background "green" :foreground "black") - (t :inverse-video t)) - "Basic face for highlighting." +(defface tool-bar + '((default + :box (:line-width 1 :style released-button) + :foreground "black") + (((type x w32 mac) (class color)) + :background "grey75") + (((type x) (class mono)) + :background "grey")) + "Basic tool-bar face." + :version "21.1" :group 'basic-faces) - -(defface secondary-selection - '((((class color) (min-colors 88) (background light)) - :background "yellow1") - (((class color) (min-colors 88) (background dark)) - :background "SkyBlue4") - (((class color) (min-colors 16) (background light)) - :background "yellow") - (((class color) (min-colors 16) (background dark)) - :background "SkyBlue4") - (((class color) (min-colors 8)) - :background "cyan" :foreground "black") - (t :inverse-video t)) - "Basic face for displaying the secondary selection." - :group 'basic-faces) - - -(defface fixed-pitch '((t :family "courier")) - "The basic fixed-pitch face." - :group 'basic-faces) - - -(defface variable-pitch '((t :family "helv")) - "The basic variable-pitch face." - :group 'basic-faces) - - -(defface trailing-whitespace - '((((class color) (background light)) - :background "red1") - (((class color) (background dark)) - :background "red1") - (t :inverse-video t)) - "Basic face for highlighting trailing whitespace." +(defface menu + '((((type tty)) + :inverse-video t) + (((type x-toolkit)) + ) + (t + :inverse-video t)) + "Basic face for the font and colors of the menu bar and popup menus." :version "21.1" - :group 'whitespace ; like `show-trailing-whitespace' + :group 'menu :group 'basic-faces) -(defface escape-glyph - '((((background dark)) :foreground "cyan") - ;; See the comment in minibuffer-prompt for - ;; the reason not to use blue on MS-DOS. - (((type pc)) :foreground "magenta") - ;; red4 is too dark, but some say blue is too loud. - ;; brown seems to work ok. -- rms. - (t :foreground "brown")) - "Face for characters displayed as ^-sequences or \-sequences." - :group 'basic-faces - :version "22.1") - -(defface nobreak-space - '((((class color) (min-colors 88)) :inherit escape-glyph :underline t) - (((class color) (min-colors 8)) :background "magenta") - (t :inverse-video t)) - "Face for displaying nobreak space." - :group 'basic-faces - :version "22.1") - -(defface shadow - '((((class color grayscale) (min-colors 88) (background light)) - :foreground "grey50") - (((class color grayscale) (min-colors 88) (background dark)) - :foreground "grey70") - (((class color) (min-colors 8) (background light)) - :foreground "green") - (((class color) (min-colors 8) (background dark)) - :foreground "yellow")) - "Basic face for shadowed text." - :group 'basic-faces - :version "22.1") - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Manipulating font names. diff -r 7a3090aca393 -r 2a679c81f552 lisp/files.el --- a/lisp/files.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/files.el Sun Oct 09 20:00:17 2005 +0000 @@ -3580,7 +3580,7 @@ (t (setq buffer-read-only (not buffer-read-only)) (force-mode-line-update))) (if (vc-backend buffer-file-name) - (message (substitute-command-keys + (message "%s" (substitute-command-keys (concat "File is under version-control; " "use \\[vc-next-action] to check in/out")))))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/font-lock.el --- a/lisp/font-lock.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/font-lock.el Sun Oct 09 20:00:17 2005 +0000 @@ -1061,7 +1061,8 @@ 'font-lock-multiline nil) (point-max)))) (goto-char end) - (setq end (line-beginning-position 2)) + ;; Round up to a whole line. + (unless (bolp) (setq end (line-beginning-position 2))) ;; Now do the fontification. (font-lock-unfontify-region beg end) (when font-lock-syntactic-keywords @@ -1073,12 +1074,12 @@ (set-syntax-table old-syntax-table)))) ;; The following must be rethought, since keywords can override fontification. -; ;; Now scan for keywords, but not if we are inside a comment now. -; (or (and (not font-lock-keywords-only) -; (let ((state (parse-partial-sexp beg end nil nil -; font-lock-cache-state))) -; (or (nth 4 state) (nth 7 state)))) -; (font-lock-fontify-keywords-region beg end)) +;; ;; Now scan for keywords, but not if we are inside a comment now. +;; (or (and (not font-lock-keywords-only) +;; (let ((state (parse-partial-sexp beg end nil nil +;; font-lock-cache-state))) +;; (or (nth 4 state) (nth 7 state)))) +;; (font-lock-fontify-keywords-region beg end)) (defvar font-lock-extra-managed-props nil "Additional text properties managed by font-lock. diff -r 7a3090aca393 -r 2a679c81f552 lisp/format.el --- a/lisp/format.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/format.el Sun Oct 09 20:00:17 2005 +0000 @@ -316,7 +316,7 @@ `buffer-file-format' is set to the format used, and any mode-functions for the format are called." (interactive - (list (format-read "Translate buffer from format (default: guess): "))) + (list (format-read "Translate buffer from format (default guess): "))) (save-excursion (goto-char (point-min)) (format-decode format (buffer-size) t))) @@ -327,7 +327,7 @@ for identifying regular expressions at the beginning of the region." (interactive (list (region-beginning) (region-end) - (format-read "Translate region from format (default: guess): "))) + (format-read "Translate region from format (default guess): "))) (save-excursion (goto-char from) (format-decode format (- to from) nil))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/forms.el --- a/lisp/forms.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/forms.el Sun Oct 09 20:00:17 2005 +0000 @@ -519,7 +519,7 @@ (if (or (eq enable-local-eval t) (yes-or-no-p (concat "Evaluate lisp code in buffer " - (buffer-name) " to display forms "))) + (buffer-name) " to display forms? "))) (eval-buffer) (error "`enable-local-eval' inhibits buffer evaluation")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,138 @@ +2005-10-04 Reiner Steib <Reiner.Steib@gmx.de> + + * mm-url.el (mm-url-predefined-programs): Add switches for curl. + + * gnus-util.el (gnus-remove-duplicates): Remove. + + * nnmail.el (nnmail-article-group): Use mm-delete-duplicates + instead of gnus-remove-duplicates. + + * message.el (message-remove-duplicates): Remove. + (message-idna-to-ascii-rhs-1): Use mm-delete-duplicates instead of + message-remove-duplicates. + + * mm-util.el (mm-delete-duplicates): Use `delete-dups' if + available, else use implementation from `delete-dups'. + +2005-10-02 Katsumi Yamaoka <yamaoka@jpl.org> + + * time-date.el: Autoload parse-time-string, XEmacs needs it. + +2005-09-30 Stefan Monnier <monnier@iro.umontreal.ca> + + * mm-decode.el (mm-inline-media-tests): Check presence of the diff-mode + function rather than the diff-mode.el package. + (mm-display-external): Use with-current-buffer. + (mm-viewer-completion-map, mm-viewer-completion-map): + Move initialization inside declaration. + +2005-09-28 Reiner Steib <Reiner.Steib@gmx.de> + + * message.el: Remove useless autoloads. + +2005-09-28 Simon Josefsson <jas@extundo.com> + + * message.el (message-use-idna): Default to t. + (message-use-idna): Test whether encoding works too. Doc fix. + +2005-09-28 Katsumi Yamaoka <yamaoka@jpl.org> + + * nntp.el (nntp-warn-about-losing-connection): Remove. + +2005-09-27 Reiner Steib <Reiner.Steib@gmx.de> + + * mm-uu.el (mm-uu-emacs-sources-regexp): Make variable + customizable. Change default value. + (mm-uu-diff-groups-regexp): Change default value. + (mm-uu-type-alist): Add doc string. + (mm-uu-configure): Add doc string. Make it interactive. + (mm-uu-diff-groups-regexp): Fix missing quotes from previous commit. + +2005-09-27 Simon Josefsson <jas@extundo.com> + + * message.el (message-idna-to-ascii-rhs-1): Reformat. + +2005-09-27 Arne J,Ax(Brgensen <arne@arnested.dk> + + * message.el (message-remove-duplicates): New function. + Implementation borrowed from `gnus-remove-duplicates'. + (message-idna-to-ascii-rhs): Also encode idna addresses in + Reply-To:, Mail-Reply-To: and Mail-Followup-To:. + (message-idna-to-ascii-rhs-1): When `message-use-idna' is 'ask + only ask about the same idna domain once per header and also tell + in what header to replace the idna domain. + + * gnus-art.el (article-decode-idna-rhs): Also decode idna + addresses in Reply-To:, Mail-Reply-To: and Mail-Followup-To:. + (article-decode-idna-rhs): Fix regexp so that all idna-address in + a header is decoded and not just the last one. + +2005-09-27 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus-art.el (gnus-mime-display-single): Don't modify text if it + has been decoded. + + * mm-decode.el (mm-insert-part): Don't modify text if it has been + decoded. + + * mm-view.el (mm-inline-text): Don't strip text props unless + decoding enriched or richtext parts. + +2005-09-25 Romain Francoise <romain@orebokech.com> + + * gnus-agent.el (gnus-agent-expire-group, gnus-agent-expire): + * gnus-start.el (gnus-subscribe-interactively): + * gnus-uu.el (gnus-uu-grab-articles): + End `yes-or-no-p' and `y-or-n-p' prompts with question mark and + space. + +2005-09-24 Emilio C. Lopes <eclig@gmx.net> + + * smime.el (smime-sign-buffer, smime-decrypt-buffer): + * mm-view.el (mm-view-pkcs7-decrypt): + * gnus-sum.el (gnus-summary-limit-to-extra) + (gnus-summary-respool-article, gnus-read-move-group-name): + * gnus-score.el (gnus-summary-increase-score): + * gnus-util.el (gnus-completing-read-with-default): + * gnus-art.el (gnus-read-save-file-name) + (gnus-summary-save-in-rmail, gnus-summary-save-in-mail) + (gnus-summary-save-in-file, gnus-summary-save-body-in-file): + * message.el (message-check-news-header-syntax): + Follow convention for reading with the minibuffer. + +2005-09-22 Reiner Steib <Reiner.Steib@gmx.de> + + * spam-report.el (spam-report-url-ping-plain): + Use gnus-extended-version as User-Agent. + + * gnus-agent.el (gnus-agent-synchronize-flags): Explain why the + default value is nil. + +2005-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org> + + * gnus-agent.el (gnus-agent-synchronize-flags): Switch the + default to nil, to be able to use Gnus at all. If the default + switches to something else, then the function should be fixed not + be exceedingly slow. + +2005-09-19 Reiner Steib <Reiner.Steib@gmx.de> + + * mm-url.el (mm-url-decode-entities): Fix regexp. + +2005-09-18 Deepak Goel <deego@gnufans.org> + + * sieve.el (sieve-help): Fix `message' call: first arg should be a + format spec. + +2005-09-16 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.el (gnus-group-startup-message): Bind image-load-path. + +2005-09-14 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus-art.el (gnus-mime-display-part): Protect against broken + MIME messages. + 2005-09-13 Katsumi Yamaoka <yamaoka@jpl.org> * gnus-sum.el (gnus-summary-edit-article-done): Remove text props @@ -17,9 +152,9 @@ 2005-09-07 Reiner Steib <Reiner.Steib@gmx.de> * spam-report.el (spam-report-gmane): Make it work without - X-Report-Spam header. Gmane now only provides Archived-At. This - is only used if `spam-report-gmane-use-article-number' is nil. - (spam-report-gmane-spam-header): Removed. Not used anymore. + X-Report-Spam header. Gmane now only provides Archived-At. + This is only used if `spam-report-gmane-use-article-number' is nil. + (spam-report-gmane-spam-header): Remove. Not used anymore. * nnweb.el (nnweb-google-wash-article): Print a message if article is not available. diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/ChangeLog.2 --- a/lisp/gnus/ChangeLog.2 Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/ChangeLog.2 Sun Oct 09 20:00:17 2005 +0000 @@ -7390,7 +7390,7 @@ instead of mm-auto-save-coding-system for the draft or delayed group. -2002-10-28 Josh <huber@alum.wpi.edu> +2002-10-28 Josh Huber <huber@alum.wpi.edu> * mml.el (mml-mode-map): Fixed keybindings for mml-secure-* functions. diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-agent.el --- a/lisp/gnus/gnus-agent.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-agent.el Sun Oct 09 20:00:17 2005 +0000 @@ -118,6 +118,8 @@ (defcustom gnus-agent-synchronize-flags t "Indicate if flags are synchronized when you plug in. If this is `ask' the hook will query the user." + ;; If the default switches to something else than nil, then the function + ;; should be fixed not be exceedingly slow. See 2005-09-20 ChangeLog entry. :version "21.1" :type '(choice (const :tag "Always" t) (const :tag "Never" nil) @@ -2934,7 +2936,7 @@ (if (or (not (eq articles t)) (yes-or-no-p (concat "Are you sure that you want to " - "expire all articles in " group "."))) + "expire all articles in " group "? "))) (let ((gnus-command-method (gnus-find-method-for-group group)) (overview (gnus-get-buffer-create " *expire overview*")) orig) @@ -3308,7 +3310,7 @@ (gnus-agent-expire-group group articles force) (if (or (not (eq articles t)) (yes-or-no-p "Are you sure that you want to expire all \ -articles in every agentized group.")) +articles in every agentized group? ")) (let ((methods (gnus-agent-covered-methods)) ;; Bind gnus-agent-expire-current-dirs to enable tracking ;; of agent directories. diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-art.el --- a/lisp/gnus/gnus-art.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-art.el Sun Oct 09 20:00:17 2005 +0000 @@ -2333,20 +2333,22 @@ (autoload 'idna-to-unicode "idna") (defun article-decode-idna-rhs () - "Decode IDNA strings in RHS in From:, To: and Cc: headers in current buffer." + "Decode IDNA strings in RHS in various headers in current buffer. +The following headers are decoded: From:, To:, Cc:, Reply-To:, +Mail-Reply-To: and Mail-Followup-To:." (when gnus-use-idna (save-restriction (let ((inhibit-point-motion-hooks t) (inhibit-read-only t)) (article-narrow-to-head) (goto-char (point-min)) - (while (re-search-forward "@.*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t) + (while (re-search-forward "@[^ \t\n\r,>]*\\(xn--[-A-Za-z0-9.]*\\)[ \t\n\r,>]" nil t) (let (ace unicode) (when (save-match-data (and (setq ace (match-string 1)) (save-excursion (and (re-search-backward "^[^ \t]" nil t) - (looking-at "From\\|To\\|Cc"))) + (looking-at "From\\|To\\|Cc\\|Reply-To\\|Mail-Reply-To\\|Mail-Followup-To"))) (setq unicode (idna-to-unicode ace)))) (unless (string= ace unicode) (replace-match unicode nil nil nil 1))))))))) @@ -3255,7 +3257,7 @@ ((null split-name) (read-file-name (concat prompt " (default " - (file-name-nondirectory default-name) ") ") + (file-name-nondirectory default-name) "): ") (file-name-directory default-name) default-name)) ;; A single group name is returned. @@ -3265,7 +3267,7 @@ (symbol-value variable))) (read-file-name (concat prompt " (default " - (file-name-nondirectory default-name) ") ") + (file-name-nondirectory default-name) "): ") (file-name-directory default-name) default-name)) ;; A single split name was found @@ -3278,7 +3280,7 @@ ((file-exists-p name) name) (t gnus-article-save-directory)))) (read-file-name - (concat prompt " (default " name ") ") + (concat prompt " (default " name "): ") dir name))) ;; A list of splits was found. (t @@ -3289,7 +3291,7 @@ (setq result (expand-file-name (read-file-name - (concat prompt " (`M-p' for defaults) ") + (concat prompt " (`M-p' for defaults): ") gnus-article-save-directory (car split-name)) gnus-article-save-directory))) @@ -3323,7 +3325,7 @@ Optional argument FILENAME specifies file name. Directory to save to is default to `gnus-article-save-directory'." (setq filename (gnus-read-save-file-name - "Save %s in rmail file:" filename + "Save %s in rmail file" filename gnus-rmail-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-rmail)) (gnus-eval-in-buffer-window gnus-save-article-buffer @@ -3338,7 +3340,7 @@ Optional argument FILENAME specifies file name. Directory to save to is default to `gnus-article-save-directory'." (setq filename (gnus-read-save-file-name - "Save %s in Unix mail file:" filename + "Save %s in Unix mail file" filename gnus-mail-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-mail)) (gnus-eval-in-buffer-window gnus-save-article-buffer @@ -3357,7 +3359,7 @@ Optional argument FILENAME specifies file name. Directory to save to is default to `gnus-article-save-directory'." (setq filename (gnus-read-save-file-name - "Save %s in file:" filename + "Save %s in file" filename gnus-file-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-file)) (gnus-eval-in-buffer-window gnus-save-article-buffer @@ -3381,7 +3383,7 @@ Optional argument FILENAME specifies file name. The directory to save in defaults to `gnus-article-save-directory'." (setq filename (gnus-read-save-file-name - "Save %s body in file:" filename + "Save %s body in file" filename gnus-file-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-file)) (gnus-eval-in-buffer-window gnus-save-article-buffer @@ -4761,6 +4763,8 @@ (defun gnus-mime-display-part (handle) (cond + ;; Maybe a broken MIME message. + ((null handle)) ;; Single part. ((not (stringp (car handle))) (gnus-mime-display-single handle)) @@ -4862,14 +4866,17 @@ (forward-line -1) (setq beg (point))) (gnus-article-insert-newline) - (mm-insert-inline handle - (let ((charset - (mail-content-type-get - (mm-handle-type handle) 'charset))) - (if (eq charset 'gnus-decoded) - (mm-get-part handle) - (mm-decode-string (mm-get-part handle) - charset)))) + (mm-insert-inline + handle + (let ((charset (mail-content-type-get (mm-handle-type handle) + 'charset))) + (cond ((not charset) + (mm-string-as-multibyte (mm-get-part handle))) + ((eq charset 'gnus-decoded) + (with-current-buffer (mm-handle-buffer handle) + (buffer-string))) + (t + (mm-decode-string (mm-get-part handle) charset))))) (goto-char (point-max)))) ;; Do highlighting. (save-excursion diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-score.el --- a/lisp/gnus/gnus-score.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-score.el Sun Oct 09 20:00:17 2005 +0000 @@ -652,7 +652,7 @@ (intern ; need symbol (gnus-completing-read-with-default (symbol-name (car gnus-extra-headers)) ; default response - "Score extra header:" ; prompt + "Score extra header" ; prompt (mapcar (lambda (x) ; completion list (cons (symbol-name x) x)) gnus-extra-headers) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-start.el --- a/lisp/gnus/gnus-start.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-start.el Sun Oct 09 20:00:17 2005 +0000 @@ -606,7 +606,7 @@ "Subscribe the new GROUP interactively. It is inserted in hierarchical newsgroup order if subscribed. If not, it is killed." - (if (gnus-y-or-n-p (format "Subscribe new newsgroup: %s " group)) + (if (gnus-y-or-n-p (format "Subscribe new newsgroup %s? " group)) (gnus-subscribe-hierarchically group) (push group gnus-killed-list))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-sum.el --- a/lisp/gnus/gnus-sum.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-sum.el Sun Oct 09 20:00:17 2005 +0000 @@ -7696,8 +7696,8 @@ (gnus-completing-read-with-default (symbol-name (car gnus-extra-headers)) (if current-prefix-arg - "Exclude extra header:" - "Limit extra header:") + "Exclude extra header" + "Limit extra header") (mapcar (lambda (x) (cons (symbol-name x) x)) gnus-extra-headers) @@ -9218,7 +9218,7 @@ gnus-newsgroup-name))))) (method (gnus-completing-read-with-default - methname "What backend do you want to use when respooling?" + methname "Backend to use when respooling" methods nil t nil 'gnus-mail-method-history)) ms) (cond @@ -11044,7 +11044,7 @@ (let* ((split-name (gnus-get-split-value gnus-move-split-methods)) (minibuffer-confirm-incomplete nil) ; XEmacs (prom - (format "%s %s to:" + (format "%s %s to" prompt (if (> (length articles) 1) (format "these %d articles" (length articles)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-util.el --- a/lisp/gnus/gnus-util.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-util.el Sun Oct 09 20:00:17 2005 +0000 @@ -335,8 +335,8 @@ (defun gnus-completing-read-with-default (default prompt &rest args) ;; Like `completing-read', except that DEFAULT is the default argument. (let* ((prompt (if default - (concat prompt " (default " default ") ") - (concat prompt " "))) + (concat prompt " (default " default "): ") + (concat prompt ": "))) (answer (apply 'completing-read prompt args))) (if (or (null answer) (zerop (length answer))) default @@ -1037,14 +1037,6 @@ (set-buffer gnus-group-buffer) (eq major-mode 'gnus-group-mode)))) -(defun gnus-remove-duplicates (list) - (let (new) - (while list - (or (member (car list) new) - (setq new (cons (car list) new))) - (setq list (cdr list))) - (nreverse new))) - (defun gnus-remove-if (predicate list) "Return a copy of LIST with all items satisfying PREDICATE removed." (let (out) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus-uu.el --- a/lisp/gnus/gnus-uu.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus-uu.el Sun Oct 09 20:00:17 2005 +0000 @@ -1294,7 +1294,7 @@ (not gnus-uu-be-dangerous) (or (eq gnus-uu-be-dangerous t) (gnus-y-or-n-p - (format "Delete unsuccessfully decoded file %s" + (format "Delete unsuccessfully decoded file %s? " result-file)))) (delete-file result-file))) (when (memq 'begin process-state) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/gnus.el --- a/lisp/gnus/gnus.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/gnus.el Sun Oct 09 20:00:17 2005 +0000 @@ -1006,6 +1006,11 @@ (fboundp 'find-image) (display-graphic-p) (let* ((data-directory (nnheader-find-etc-directory "images/gnus")) + (image-load-path (cond (data-directory + (list data-directory)) + ((boundp 'image-load-path) + (symbol-value 'image-load-path)) + (t load-path))) (image (find-image `((:type xpm :file "gnus.xpm" :color-symbols diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/message.el --- a/lisp/gnus/message.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/message.el Sun Oct 09 20:00:17 2005 +0000 @@ -1454,8 +1454,13 @@ (file-error)) (mm-coding-system-p 'utf-8) (executable-find idna-program) - 'ask) - "Whether to encode non-ASCII in domain names into ASCII according to IDNA." + (string= (idna-to-ascii "räksmörgås") + "xn--rksmrgs-5wao1o") + t) + "Whether to encode non-ASCII in domain names into ASCII according to IDNA. +GNU Libidn, and in particular the elisp package \"idna.el\" and +the external program \"idn\", must be installed for this +functionality to work." :version "22.1" :group 'message-headers :link '(custom-manual "(message)IDNA") @@ -1807,7 +1812,6 @@ ;;; Suggested by Jonas Steverud @ www.dtek.chalmers.se/~d4jonas/ -;;;###autoload (defun message-change-subject (new-subject) "Ask for NEW-SUBJECT header, append (was: <Old Subject>)." ;; <URL:http://www.landfield.com/usefor/drafts/draft-ietf-usefor-useage--1.02.unpaged> @@ -1839,7 +1843,6 @@ " (was: " old-subject ")\n"))))))))) -;;;###autoload (defun message-mark-inserted-region (beg end) "Mark some region in the current article with enclosing tags. See `message-mark-insert-begin' and `message-mark-insert-end'." @@ -1851,7 +1854,6 @@ (goto-char beg) (insert message-mark-insert-begin))) -;;;###autoload (defun message-mark-insert-file (file) "Insert FILE at point, marking it with enclosing tags. See `message-mark-insert-begin' and `message-mark-insert-end'." @@ -1864,7 +1866,6 @@ (goto-char p) (insert message-mark-insert-begin))) -;;;###autoload (defun message-add-archive-header () "Insert \"X-No-Archive: Yes\" in the header and a note in the body. The note can be customized using `message-archive-note'. When called with a @@ -1884,7 +1885,6 @@ (message-add-header message-archive-header) (message-sort-headers))) -;;;###autoload (defun message-cross-post-followup-to-header (target-group) "Mangles FollowUp-To and Newsgroups header to point to TARGET-GROUP. With prefix-argument just set Follow-Up, don't cross-post." @@ -1928,7 +1928,6 @@ (insert (concat "\nFollowup-To: " target-group))) (setq message-cross-post-old-target target-group)) -;;;###autoload (defun message-cross-post-insert-note (target-group cross-post in-old old-groups) "Insert a in message body note about a set Followup or Crosspost. @@ -1961,7 +1960,6 @@ (insert (concat message-followup-to-note target-group "\n")) (insert (concat message-cross-post-note target-group "\n"))))) -;;;###autoload (defun message-cross-post-followup-to (target-group) "Crossposts message and set Followup-To to TARGET-GROUP. With prefix-argument just set Follow-Up, don't cross-post." @@ -2003,7 +2001,6 @@ ;;; Reduce To: to Cc: or Bcc: header -;;;###autoload (defun message-reduce-to-to-cc () "Replace contents of To: header with contents of Cc: or Bcc: header." (interactive) @@ -4197,7 +4194,7 @@ (zerop (length (setq to (completing-read - "Followups to (default: no Followup-To header) " + "Followups to (default no Followup-To header): " (mapcar #'list (cons "poster" (message-tokenize-header @@ -4957,13 +4954,17 @@ (let ((field (message-fetch-field header)) rhs ace address) (when field - (dolist (address (mail-header-parse-addresses field)) - (setq address (car address) - rhs (downcase (or (cadr (split-string address "@")) "")) - ace (downcase (idna-to-ascii rhs))) + (dolist (rhs + (mm-delete-duplicates + (mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) "")) + (mapcar 'downcase + (mapcar + 'car (mail-header-parse-addresses field)))))) + (setq ace (downcase (idna-to-ascii rhs))) (when (and (not (equal rhs ace)) (or (not (eq message-use-idna 'ask)) - (y-or-n-p (format "Replace %s with %s? " rhs ace)))) + (y-or-n-p (format "Replace %s with %s in %s:? " + rhs ace header)))) (goto-char (point-min)) (while (re-search-forward (concat "^" header ":") nil t) (message-narrow-to-field) @@ -4982,6 +4983,9 @@ (message-narrow-to-head) (message-idna-to-ascii-rhs-1 "From") (message-idna-to-ascii-rhs-1 "To") + (message-idna-to-ascii-rhs-1 "Reply-To") + (message-idna-to-ascii-rhs-1 "Mail-Reply-To") + (message-idna-to-ascii-rhs-1 "Mail-Followup-To") (message-idna-to-ascii-rhs-1 "Cc"))))) (defun message-generate-headers (headers) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/mm-decode.el --- a/lisp/gnus/mm-decode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/mm-decode.el Sun Oct 09 20:00:17 2005 +0000 @@ -222,7 +222,12 @@ ("text/richtext" mm-inline-text identity) ("text/x-patch" mm-display-patch-inline (lambda (handle) - (locate-library "diff-mode"))) + ;; If the diff-mode.el package is installed, the function is + ;; autoloaded. Checking (locate-library "diff-mode") would be trying + ;; to cater to broken installations. OTOH checking the function + ;; makes it possible to install another package which provides an + ;; alternative implementation of diff-mode. --Stef + (fboundp 'diff-mode))) ("application/emacs-lisp" mm-display-elisp-inline identity) ("application/x-emacs-lisp" mm-display-elisp-inline identity) ("text/html" @@ -451,21 +456,19 @@ (defvar mm-viewer-completion-map (let ((map (make-sparse-keymap 'mm-viewer-completion-map))) (set-keymap-parent map minibuffer-local-completion-map) + ;; Should we bind other key to minibuffer-complete-word? + (define-key map " " 'self-insert-command) map) "Keymap for input viewer with completion.") -;; Should we bind other key to minibuffer-complete-word? -(define-key mm-viewer-completion-map " " 'self-insert-command) - (defvar mm-viewer-completion-map (let ((map (make-sparse-keymap 'mm-viewer-completion-map))) (set-keymap-parent map minibuffer-local-completion-map) + ;; Should we bind other key to minibuffer-complete-word? + (define-key map " " 'self-insert-command) map) "Keymap for input viewer with completion.") -;; Should we bind other key to minibuffer-complete-word? -(define-key mm-viewer-completion-map " " 'self-insert-command) - ;;; The functions. (defun mm-alist-to-plist (alist) @@ -564,7 +567,7 @@ ;; what really needs to be done here is a way to link a ;; MIME handle back to it's parent MIME handle (in a multilevel ;; MIME article). That would probably require changing - ;; the mm-handle API so we simply store the multipart buffert + ;; the mm-handle API so we simply store the multipart buffer ;; name as a text property of the "multipart/whatever" string. (add-text-properties 0 (length (car ctl)) (list 'buffer (mm-copy-to-buffer) @@ -807,8 +810,7 @@ (mm-mailcap-command method file (mm-handle-type handle))) (if (buffer-live-p buffer) - (save-excursion - (set-buffer buffer) + (with-current-buffer buffer (buffer-string)))) (progn (ignore-errors (delete-file file)) @@ -1058,9 +1060,15 @@ (defun mm-insert-part (handle) "Insert the contents of HANDLE in the current buffer." (save-excursion - (insert (if (mm-multibyte-p) - (mm-string-as-multibyte (mm-get-part handle)) - (mm-get-part handle))))) + (insert + (cond ((eq (mail-content-type-get (mm-handle-type handle) 'charset) + 'gnus-decoded) + (with-current-buffer (mm-handle-buffer handle) + (buffer-string))) + ((mm-multibyte-p) + (mm-string-as-multibyte (mm-get-part handle))) + (t + (mm-get-part handle)))))) (defun mm-file-name-delete-whitespace (file-name) "Remove all whitespace characters from FILE-NAME." diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/mm-url.el --- a/lisp/gnus/mm-url.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/mm-url.el Sun Oct 09 20:00:17 2005 +0000 @@ -64,7 +64,7 @@ '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-") (w3m "w3m" "-dump_source") (lynx "lynx" "-source") - (curl "curl" "--silent"))) + (curl "curl" "--silent" "--user-agent mm-url" "--location"))) (defcustom mm-url-program (cond @@ -365,7 +365,7 @@ (defun mm-url-decode-entities () "Decode all HTML entities." (goto-char (point-min)) - (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t) + (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+[0-9]*\\);" nil t) (let ((elem (if (eq (aref (match-string 1) 0) ?\#) (let ((c (string-to-number (substring diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/mm-util.el --- a/lisp/gnus/mm-util.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/mm-util.el Sun Oct 09 20:00:17 2005 +0000 @@ -568,14 +568,21 @@ ;; This is for XEmacs. (mm-mule-charset-to-mime-charset charset))) -(defun mm-delete-duplicates (list) - "Simple substitute for CL `delete-duplicates', testing with `equal'." - (let (result head) - (while list - (setq head (car list)) - (setq list (delete head list)) - (setq result (cons head result))) - (nreverse result))) +(if (fboundp 'delete-dups) + (defalias 'mm-delete-duplicates 'delete-dups) + (defun mm-delete-duplicates (list) + "Destructively remove `equal' duplicates from LIST. +Store the result in LIST and return it. LIST must be a proper list. +Of several `equal' occurrences of an element in LIST, the first +one is kept. + +This is a compatibility function for Emacsen without `delete-dups'." + ;; Code from `subr.el' in Emacs 22: + (let ((tail list)) + (while tail + (setcdr tail (delete (car tail) (cdr tail))) + (setq tail (cdr tail)))) + list)) ;; Fixme: This is used in places when it should be testing the ;; default multibyteness. See mm-default-multibyte-p. diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/mm-uu.el --- a/lisp/gnus/mm-uu.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/mm-uu.el Sun Oct 09 20:00:17 2005 +0000 @@ -77,11 +77,15 @@ "The default disposition of uu parts. This can be either \"inline\" or \"attachment\".") -(defvar mm-uu-emacs-sources-regexp "gnu\\.emacs\\.sources" - "The regexp of Emacs sources groups.") +(defcustom mm-uu-emacs-sources-regexp "\\.emacs\\.sources" + "The regexp of Emacs sources groups." + :version "22.1" + :type 'regexp + :group 'gnus-article-mime) -(defcustom mm-uu-diff-groups-regexp "gnus\\.commits" - "*Regexp matching diff groups." +(defcustom mm-uu-diff-groups-regexp + "\\(gmane\\|gnu\\)\\..*\\(diff\\|commit\\|cvs\\|bug\\|devel\\)" + "Regexp matching diff groups." :version "22.1" :type 'regexp :group 'gnus-article-mime) @@ -153,7 +157,12 @@ nil mm-uu-diff-extract nil - mm-uu-diff-test))) + mm-uu-diff-test)) + "A list of specifications for non-MIME attachments. +Each element consist of the following entries: label, +start-regexp, end-regexp, extract-function, test-function. + +After modifying this list you must run \\[mm-uu-configure].") (defcustom mm-uu-configure-list '((shar . disabled)) "A list of mm-uu configuration. @@ -202,6 +211,8 @@ (member (cons key val) mm-uu-configure-list)) (defun mm-uu-configure (&optional symbol value) + "Configure detection of non-MIME attachments." + (interactive) (if symbol (set-default symbol value)) (setq mm-uu-beginning-regexp nil) (mapcar (lambda (entry) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/mm-view.el --- a/lisp/gnus/mm-view.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/mm-view.el Sun Oct 09 20:00:17 2005 +0000 @@ -367,9 +367,9 @@ (goto-char (point-max)))) (save-restriction (narrow-to-region b (point)) - (set-text-properties (point-min) (point-max) nil) (when (or (equal type "enriched") (equal type "richtext")) + (set-text-properties (point-min) (point-max) nil) (ignore-errors (enriched-decode (point-min) (point-max)))) (mm-handle-set-undisplayer @@ -576,9 +576,10 @@ (cadar smime-keys) (smime-get-key-by-email (gnus-completing-read-maybe-default - (concat "Decipher using which key? " - (if smime-keys (concat "(default " (caar smime-keys) ") ") - "")) + (concat "Decipher using key" + (if smime-keys + (concat " (default " (caar smime-keys) "): ") + ": ")) smime-keys nil nil nil nil (car-safe (car-safe smime-keys)))))) (goto-char (point-min)) (while (search-forward "\r\n" nil t) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/nnmail.el --- a/lisp/gnus/nnmail.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/nnmail.el Sun Oct 09 20:00:17 2005 +0000 @@ -1142,7 +1142,7 @@ 5 "Error in `nnmail-split-methods'; using `bogus' mail group") (sit-for 1) '("bogus"))))) - (setq split (gnus-remove-duplicates split)) + (setq split (mm-delete-duplicates split)) ;; The article may be "cross-posted" to `junk'. What ;; to do? Just remove the `junk' spec. Don't really ;; see anything else to do... diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/nntp.el --- a/lisp/gnus/nntp.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/nntp.el Sun Oct 09 20:00:17 2005 +0000 @@ -177,9 +177,6 @@ server there that you can connect to. See also `nntp-open-connection-function'") -(defvoo nntp-warn-about-losing-connection t - "*If non-nil, beep when a server closes connection.") - (defvoo nntp-coding-system-for-read 'binary "*Coding system to read from NNTP.") diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/sieve.el --- a/lisp/gnus/sieve.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/sieve.el Sun Oct 09 20:00:17 2005 +0000 @@ -245,7 +245,7 @@ (if (eq last-command 'sieve-help) ;; would need minor-mode for log-edit-mode (describe-function 'sieve-mode) - (message (substitute-command-keys + (message "%s" (substitute-command-keys "`\\[sieve-edit-script]':edit `\\[sieve-activate]':activate `\\[sieve-deactivate]':deactivate `\\[sieve-remove]':remove")))) (defun sieve-bury-buffer (buf &optional mainbuf) diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/smime.el --- a/lisp/gnus/smime.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/smime.el Sun Oct 09 20:00:17 2005 +0000 @@ -341,9 +341,10 @@ keyfile (smime-get-key-with-certs-by-email (completing-read - (concat "Sign using which key? " - (if smime-keys (concat "(default " (caar smime-keys) ") ") - "")) + (concat "Sign using key" + (if smime-keys + (concat " (default " (caar smime-keys) "): ") + ": ")) smime-keys nil nil (car-safe (car-safe smime-keys)))))) (error "Signing failed")))) @@ -472,9 +473,9 @@ (or keyfile (smime-get-key-by-email (completing-read - (concat "Decipher using which key? " - (if smime-keys (concat "(default " (caar smime-keys) ") ") - "")) + (concat "Decipher using key" + (if smime-keys (concat " (default " (caar smime-keys) "): ") + ": ")) smime-keys nil nil (car-safe (car-safe smime-keys))))))))) ;; Various operations diff -r 7a3090aca393 -r 2a679c81f552 lisp/gnus/spam-report.el --- a/lisp/gnus/spam-report.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/gnus/spam-report.el Sun Oct 09 20:00:17 2005 +0000 @@ -150,7 +150,7 @@ (process-send-string tcp-connection (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n" - report (gnus-emacs-version) host))))) + report (gnus-extended-version) host))))) ;;;###autoload (defun spam-report-process-queue (&optional file keep) diff -r 7a3090aca393 -r 2a679c81f552 lisp/hi-lock.el --- a/lisp/hi-lock.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/hi-lock.el Sun Oct 09 20:00:17 2005 +0000 @@ -564,7 +564,7 @@ (hi-lock-current-line))))))) (when hi-lock-mode (hi-lock-set-file-patterns all-patterns)) (if (interactive-p) - (message (format "Hi-lock added %d patterns." (length all-patterns))))))) + (message "Hi-lock added %d patterns." (length all-patterns)))))) (defun hi-lock-font-lock-hook () "Add hi lock patterns to font-lock's." diff -r 7a3090aca393 -r 2a679c81f552 lisp/ibuf-macs.el --- a/lisp/ibuf-macs.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ibuf-macs.el Sun Oct 09 20:00:17 2005 +0000 @@ -281,7 +281,7 @@ ,(concat (or documentation "This filter is not documented.")) (interactive (list ,reader)) (ibuffer-push-filter (cons ',name qualifier)) - (message + (message "%s" (format ,(concat (format "Filter by %s added: " description) " %s") qualifier)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ido.el --- a/lisp/ido.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ido.el Sun Oct 09 20:00:17 2005 +0000 @@ -354,7 +354,7 @@ use either \\[customize] or the function `ido-mode'." :set #'(lambda (symbol value) (ido-mode value)) - :initialize 'custom-initialize-default + :initialize 'custom-initialize-set :require 'ido :link '(emacs-commentary-link "ido.el") :set-after '(ido-save-directory-list-file) @@ -2138,7 +2138,7 @@ (ido-record-command method dirname) (ido-record-work-directory) (funcall method dirname)) - ((y-or-n-p (format "Directory %s does not exist. Create it " filename)) + ((y-or-n-p (format "Directory %s does not exist. Create it? " filename)) (ido-record-command method dirname) (ido-record-work-directory dirname) (make-directory-internal dirname) @@ -3529,7 +3529,7 @@ (file-exists-p file) (not (file-directory-p file)) (file-writable-p ido-current-directory) - (yes-or-no-p (concat "Delete " file " "))) + (yes-or-no-p (concat "Delete " file "? "))) (delete-file file) ;; Check if file still exists. (if (file-exists-p file) diff -r 7a3090aca393 -r 2a679c81f552 lisp/image-mode.el --- a/lisp/image-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/image-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -66,7 +66,7 @@ ;; variables were cleared by kill-all-local-variables (setq cursor-type nil truncate-lines t)) (run-mode-hooks 'image-mode-hook) - (message (concat (substitute-command-keys + (message "%s" (concat (substitute-command-keys "Type \\[image-toggle-display] to view the image as ") (if (get-text-property (point-min) 'display) "text" "an image") "."))) @@ -84,7 +84,7 @@ (if (get-text-property (point-min) 'display) (setq cursor-type nil truncate-lines t)) (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t) - (message (concat (substitute-command-keys + (message "%s" (concat (substitute-command-keys "Type \\[image-toggle-display] to view the image as ") (if (get-text-property (point-min) 'display) "text" "an image") ".")))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/image.el --- a/lisp/image.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/image.el Sun Oct 09 20:00:17 2005 +0000 @@ -51,11 +51,13 @@ (defvar image-load-path (list (file-name-as-directory (expand-file-name "images" data-directory)) - data-directory 'load-path) + 'data-directory 'load-path) "List of locations in which to search for image files. -If an element is a string, it defines a directory to search in. -If an element is a variable symbol, the value of that variable is -used as a list of directories to search.") +If an element is a string, it defines a directory to search. +If an element is a variable symbol whose value is a string, that +value defines a directory to search. +If an element is a variable symbol whose value is a list, the +value is used as a list of directories to search.") (defun image-jpeg-p (data) "Value is non-nil if DATA, a string, consists of JFIF image data. @@ -278,17 +280,24 @@ (setq overlays (cdr overlays))))) (defun image-search-load-path (file path) - (let (found pathname) + (let (element found pathname) (while (and (not found) (consp path)) + (setq element (car path)) (cond - ((stringp (car path)) + ((stringp element) (setq found (file-readable-p - (setq pathname (expand-file-name file (car path)))))) - ((and (symbolp (car path)) (boundp (car path))) - (if (setq pathname (image-search-load-path - file (symbol-value (car path)))) - (setq found t)))) + (setq pathname (expand-file-name file element))))) + ((and (symbolp element) (boundp element)) + (setq element (symbol-value element)) + (cond + ((stringp element) + (setq found + (file-readable-p + (setq pathname (expand-file-name file element))))) + ((consp element) + (if (setq pathname (image-search-load-path file element)) + (setq found t)))))) (setq path (cdr path))) (if found pathname))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/info.el --- a/lisp/info.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/info.el Sun Oct 09 20:00:17 2005 +0000 @@ -1569,11 +1569,11 @@ If DIRECTION is `backward', search in the reverse direction." (interactive (list (read-string (if Info-search-history - (format "Regexp search%s (default `%s'): " - (if case-fold-search "" " case-sensitively") + (format "Regexp search%s (default %s): " + (if case-fold-search "" " case-sensitively") (car Info-search-history)) (format "Regexp search%s: " - (if case-fold-search "" " case-sensitively"))) + (if case-fold-search "" " case-sensitively"))) nil 'Info-search-history))) (when transient-mark-mode (deactivate-mark)) @@ -1757,11 +1757,11 @@ "Search for REGEXP in the reverse direction." (interactive (list (read-string (if Info-search-history - (format "Regexp search%s backward (default `%s'): " - (if case-fold-search "" " case-sensitively") + (format "Regexp search%s backward (default %s): " + (if case-fold-search "" " case-sensitively") (car Info-search-history)) (format "Regexp search%s backward: " - (if case-fold-search "" " case-sensitively"))) + (if case-fold-search "" " case-sensitively"))) nil 'Info-search-history))) (Info-search regexp bound noerror count 'backward)) @@ -1845,36 +1845,45 @@ (defun Info-next () "Go to the next node of this node." (interactive) - (Info-goto-node (Info-extract-pointer "next"))) + ;; In case another window is currently selected + (save-window-excursion + (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*")) + (Info-goto-node (Info-extract-pointer "next")))) (defun Info-prev () "Go to the previous node of this node." (interactive) - (Info-goto-node (Info-extract-pointer "prev[ious]*" "previous"))) + ;; In case another window is currently selected + (save-window-excursion + (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*")) + (Info-goto-node (Info-extract-pointer "prev[ious]*" "previous")))) (defun Info-up (&optional same-file) "Go to the superior node of this node. If SAME-FILE is non-nil, do not move to a different Info file." (interactive) - (let ((old-node Info-current-node) - (old-file Info-current-file) - (node (Info-extract-pointer "up")) p) - (and (or same-file (not (stringp Info-current-file))) - (string-match "^(" node) - (error "Up node is in another Info file")) - (Info-goto-node node) - (setq p (point)) - (goto-char (point-min)) - (if (and (search-forward "\n* Menu:" nil t) - (re-search-forward - (if (string-equal old-node "Top") - (concat "\n\\*[^:]+: +(" (file-name-nondirectory old-file) ")") - (concat "\n\\* +\\(" (regexp-quote old-node) - ":\\|[^:]+: +" (regexp-quote old-node) "\\)")) - nil t)) - (progn (beginning-of-line) (if (looking-at "^\\* ") (forward-char 2))) - (goto-char p) - (Info-restore-point Info-history)))) + ;; In case another window is currently selected + (save-window-excursion + (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*")) + (let ((old-node Info-current-node) + (old-file Info-current-file) + (node (Info-extract-pointer "up")) p) + (and (or same-file (not (stringp Info-current-file))) + (string-match "^(" node) + (error "Up node is in another Info file")) + (Info-goto-node node) + (setq p (point)) + (goto-char (point-min)) + (if (and (search-forward "\n* Menu:" nil t) + (re-search-forward + (if (string-equal old-node "Top") + (concat "\n\\*[^:]+: +(" (file-name-nondirectory old-file) ")") + (concat "\n\\* +\\(" (regexp-quote old-node) + ":\\|[^:]+: +" (regexp-quote old-node) "\\)")) + nil t)) + (progn (beginning-of-line) (if (looking-at "^\\* ") (forward-char 2))) + (goto-char p) + (Info-restore-point Info-history))))) (defun Info-history-back () "Go back in the history to the last node visited." @@ -2107,8 +2116,8 @@ (if completions (let ((input (completing-read (if default (concat - "Follow reference named: (default " - default ") ") + "Follow reference named (default " + default "): ") "Follow reference named: ") completions nil t))) (list (if (equal input "") @@ -4012,8 +4021,6 @@ (speedbar-change-initial-expansion-list "Info") ) -(eval-when-compile (defvar speedbar-attached-frame)) - (defun Info-speedbar-hierarchy-buttons (directory depth &optional node) "Display an Info directory hierarchy in speedbar. DIRECTORY is the current directory in the attached frame. @@ -4030,13 +4037,12 @@ ;; being known at creation time. (if (not node) (speedbar-with-writable (insert "Info Nodes:\n"))) - (let ((completions nil) - (cf (selected-frame))) - (select-frame speedbar-attached-frame) + (let ((completions nil)) + (speedbar-select-attached-frame) (save-window-excursion (setq completions (Info-speedbar-fetch-file-nodes (or node '"(dir)top")))) - (select-frame cf) + (select-frame (speedbar-current-frame)) (if completions (speedbar-with-writable (dolist (completion completions) @@ -4052,7 +4058,7 @@ (defun Info-speedbar-goto-node (text node indent) "When user clicks on TEXT, go to an info NODE. The INDENT level is ignored." - (select-frame speedbar-attached-frame) + (speedbar-select-attached-frame) (let* ((buff (or (get-buffer "*info*") (progn (info) (get-buffer "*info*")))) (bwin (get-buffer-window buff 0))) @@ -4062,7 +4068,7 @@ (raise-frame (window-frame bwin))) (if speedbar-power-click (let ((pop-up-frames t)) (select-window (display-buffer buff))) - (select-frame speedbar-attached-frame) + (speedbar-select-attached-frame) (switch-to-buffer buff))) (if (not (string-match "^(\\([^)]+\\))\\([^.]+\\)$" node)) (error "Invalid node %s" node) @@ -4128,7 +4134,7 @@ (nreverse completions)))) ;;; Info mode node listing -;; FIXME: Seems not to be used. -stef +;; This is called by `speedbar-add-localized-speedbar-support' (defun Info-speedbar-buttons (buffer) "Create a speedbar display to help navigation in an Info file. BUFFER is the buffer speedbar is requesting buttons for." @@ -4136,8 +4142,7 @@ (let ((case-fold-search t)) (not (looking-at "Info Nodes:")))) (erase-buffer)) - (Info-speedbar-hierarchy-buttons nil 0) - ) + (Info-speedbar-hierarchy-buttons nil 0)) (dolist (mess '("^First node in file$" "^No `.*' in index$" diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/code-pages.el --- a/lisp/international/code-pages.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/code-pages.el Sun Oct 09 20:00:17 2005 +0000 @@ -130,7 +130,7 @@ (interactive (let ((completion-ignore-case t) (candidates (cp-supported-codepages))) - (list (completing-read "Setup DOS Codepage: (default 437) " candidates + (list (completing-read "Setup DOS Codepage (default 437): " candidates nil t nil nil "437")))) (let ((cp (format "cp%s" codepage))) (unless (coding-system-p (intern cp)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/codepage.el --- a/lisp/international/codepage.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/codepage.el Sun Oct 09 20:00:17 2005 +0000 @@ -662,7 +662,7 @@ (interactive (let ((completion-ignore-case t) (candidates (cp-supported-codepages))) - (list (completing-read "Setup DOS Codepage: (default 437) " candidates + (list (completing-read "Setup DOS Codepage (default 437): " candidates nil t nil nil "437")))) (let* ((cp (format "cp%s" codepage)) (cp-defined (intern-soft cp))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/mule-cmds.el --- a/lisp/international/mule-cmds.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/mule-cmds.el Sun Oct 09 20:00:17 2005 +0000 @@ -278,7 +278,7 @@ buffer-file-coding-system))) (list (read-coding-system (if default - (format "Coding system for following command (default, %s): " default) + (format "Coding system for following command (default %s): " default) "Coding system for following command: ") default)))) (let* ((keyseq (read-key-sequence @@ -616,7 +616,7 @@ (interactive (list (let ((default (or buffer-file-coding-system 'us-ascii))) (read-coding-system - (format "Coding-system (default, %s): " default) + (format "Coding-system (default %s): " default) default)))) (let ((pos (unencodable-char-position (point) (point-max) coding-system))) (if pos @@ -1490,7 +1490,7 @@ "Describe input method INPUT-METHOD." (interactive (list (read-input-method-name - "Describe input method (default, current choice): "))) + "Describe input method (default current choice): "))) (if (and input-method (symbolp input-method)) (setq input-method (symbol-name input-method))) (help-setup-xref (list #'describe-input-method @@ -1810,7 +1810,7 @@ specifies the character set for the major languages of Western Europe." (interactive (list (read-language-name nil - "Set language environment (default, English): "))) + "Set language environment (default English): "))) (if language-name (if (symbolp language-name) (setq language-name (symbol-name language-name))) @@ -1901,7 +1901,6 @@ (if (functionp func) (funcall func))) (if (and utf-translate-cjk-mode - utf-translate-cjk-lang-env (not (eq utf-translate-cjk-lang-env language-name)) (catch 'tag (dolist (charset (get-language-info language-name 'charset)) @@ -1987,7 +1986,7 @@ (interactive (list (read-language-name 'documentation - "Describe language environment (default, current choice): "))) + "Describe language environment (default current choice): "))) (if (null language-name) (setq language-name current-language-environment)) (if (or (null language-name) @@ -2015,7 +2014,7 @@ (l (copy-sequence input-method-alist))) (insert "Input methods") (when input-method - (insert " (default, " input-method ")") + (insert " (default " input-method ")") (setq input-method (assoc input-method input-method-alist)) (setq l (cons input-method (delete input-method l)))) (insert ":\n") diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/mule-diag.el --- a/lisp/international/mule-diag.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/mule-diag.el Sun Oct 09 20:00:17 2005 +0000 @@ -598,7 +598,7 @@ ;;;###autoload (defun describe-coding-system (coding-system) "Display information about CODING-SYSTEM." - (interactive "zDescribe coding system (default, current choices): ") + (interactive "zDescribe coding system (default current choices): ") (if (null coding-system) (describe-current-coding-system) (help-setup-xref (list #'describe-coding-system coding-system) @@ -1040,7 +1040,7 @@ ;;;###autoload (defun describe-font (fontname) "Display information about fonts which partially match FONTNAME." - (interactive "sFontname (default, current choice for ASCII chars): ") + (interactive "sFontname (default current choice for ASCII chars): ") (or (and window-system (fboundp 'fontset-list)) (error "No fontsets being used")) (when (or (not fontname) (= (length fontname) 0)) @@ -1137,7 +1137,7 @@ (mapcar 'cdr fontset-alias-alist))) (completion-ignore-case t)) (list (completing-read - "Fontset (default, used by the current frame): " + "Fontset (default used by the current frame): " fontset-list nil t))))) (if (= (length fontset) 0) (setq fontset (frame-parameter nil 'font))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/mule.el --- a/lisp/international/mule.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/mule.el Sun Oct 09 20:00:17 2005 +0000 @@ -1159,7 +1159,7 @@ don't want to mark the buffer modified, specify t for NOMODIFY. If you know exactly what coding system you want to use, just set the variable `buffer-file-coding-system' directly." - (interactive "zCoding system for saving file (default, nil): \nP") + (interactive "zCoding system for saving file (default nil): \nP") (check-coding-system coding-system) (if (and coding-system buffer-file-coding-system (null force)) (setq coding-system @@ -1183,7 +1183,7 @@ buffer's previous `buffer-file-coding-system' value (if it is specified there). Otherwise, determine it from the file contents as usual for visiting a file." - (interactive "zCoding system for visited file (default, nil): \nP") + (interactive "zCoding system for visited file (default nil): \nP") (check-coding-system coding-system) (if (and coding-system buffer-file-coding-system (null force)) (setq coding-system @@ -1195,7 +1195,7 @@ "Set coding system for decoding and encoding file names to CODING-SYSTEM. It actually just set the variable `file-name-coding-system' (which see) to CODING-SYSTEM." - (interactive "zCoding system for file names (default, nil): ") + (interactive "zCoding system for file names (default nil): ") (check-coding-system coding-system) (if (and coding-system (coding-system-get coding-system 'ascii-incompatible)) @@ -1223,7 +1223,7 @@ default-terminal-coding-system) default-terminal-coding-system))) (read-coding-system - (format "Coding system for terminal display (default, %s): " + (format "Coding system for terminal display (default %s): " default) default)))) (if (and (not coding-system) @@ -1255,7 +1255,7 @@ default-keyboard-coding-system) default-keyboard-coding-system))) (read-coding-system - (format "Coding system for keyboard input (default, %s): " + (format "Coding system for keyboard input (default %s): " default) default)))) (if (and (not coding-system) @@ -1328,7 +1328,7 @@ (interactive (list (read-coding-system (if last-next-selection-coding-system - (format "Coding system for the next X selection (default, %S): " + (format "Coding system for the next X selection (default %S): " last-next-selection-coding-system) "Coding system for the next X selection: ") last-next-selection-coding-system))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/international/quail.el --- a/lisp/international/quail.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/international/quail.el Sun Oct 09 20:00:17 2005 +0000 @@ -897,7 +897,7 @@ The variable `quail-keyboard-layout-type' holds the currently selected keyboard type." (interactive - (list (completing-read "Keyboard type (default, current choice): " + (list (completing-read "Keyboard type (default current choice): " quail-keyboard-layout-alist nil t))) (or (and keyboard-type (> (length keyboard-type) 0)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/isearch.el --- a/lisp/isearch.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/isearch.el Sun Oct 09 20:00:17 2005 +0000 @@ -219,7 +219,8 @@ (:background "magenta4" :foreground "cyan1")) (t (:inverse-video t))) "Face for highlighting Isearch matches." - :group 'isearch) + :group 'isearch + :group 'basic-faces) (defvar isearch 'isearch) (defcustom isearch-lazy-highlight t @@ -289,7 +290,8 @@ (:background "turquoise3")) (t (:underline t))) "Face for lazy highlighting of matches other than the current one." - :group 'lazy-highlight) + :group 'lazy-highlight + :group 'basic-faces) (put 'isearch-lazy-highlight-face 'face-alias 'lazy-highlight) (defvar lazy-highlight-face 'lazy-highlight) (define-obsolete-variable-alias 'isearch-lazy-highlight-face @@ -533,6 +535,9 @@ \\[isearch-abort] when search is successful aborts and moves point to\ starting point. +If you try to exit with the search string still empty, it invokes + nonincremental search. + Type \\[isearch-query-replace] to start `query-replace' with string to\ replace from last search string. Type \\[isearch-query-replace-regexp] to start `query-replace-regexp'\ @@ -579,7 +584,7 @@ In regexp incremental searches, a space or spaces normally matches any whitespace (the variable `search-whitespace-regexp' controls precisely what that means). If you want to search for a literal space -and nothing else, enter `[ ]'." +and nothing else, enter C-q SPC." (interactive "P\np") (isearch-mode t (null not-regexp) nil (not no-recursive-edit))) @@ -1016,7 +1021,7 @@ ;; read a key the normal way. ;; Word search does not apply (yet) to regexp searches, ;; no check is made here. - (message (isearch-message-prefix nil nil t)) + (message "%s" (isearch-message-prefix nil nil t)) (if (memq (lookup-key isearch-mode-map (vector e)) '(isearch-yank-word isearch-yank-word-or-char)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/iswitchb.el --- a/lisp/iswitchb.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/iswitchb.el Sun Oct 09 20:00:17 2005 +0000 @@ -293,6 +293,7 @@ example functions that filter buffernames." :type '(repeat (choice regexp function)) :group 'iswitchb) +(put 'iswitchb-buffer-ignore 'risky-local-variable t) (defcustom iswitchb-max-to-show nil "*If non-nil, limit the number of names shown in the minibuffer. @@ -942,7 +943,7 @@ (progn (setq ignorep t) (setq re-list nil)))) - ((fboundp nextstr) + ((functionp nextstr) (if (funcall nextstr bufname) (progn (setq ignorep t) @@ -1122,7 +1123,7 @@ (set-buffer-major-mode newbufcreated)) (iswitchb-visit-buffer newbufcreated)) ;; else wont create new buffer - (message (format "no buffer matching `%s'" buf))))) + (message "no buffer matching `%s'" buf)))) (defun iswitchb-window-buffer-p (buffer) "Return window pointer if BUFFER is visible in another frame. diff -r 7a3090aca393 -r 2a679c81f552 lisp/locate.el --- a/lisp/locate.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/locate.el Sun Oct 09 20:00:17 2005 +0000 @@ -209,7 +209,7 @@ (input (read-from-minibuffer (if (> (length default) 0) - (format "Locate (default `%s'): " default) + (format "Locate (default %s): " default) (format "Locate: ")) nil nil nil 'locate-history-list default t))) (and (equal input "") default diff -r 7a3090aca393 -r 2a679c81f552 lisp/log-edit.el --- a/lisp/log-edit.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/log-edit.el Sun Oct 09 20:00:17 2005 +0000 @@ -331,7 +331,7 @@ (set (make-local-variable 'log-edit-initial-files) (log-edit-files)) (when setup (run-hooks 'log-edit-hook)) (goto-char (point-min)) (push-mark (point-max)) - (message (substitute-command-keys + (message "%s" (substitute-command-keys "Press \\[log-edit-done] when you are done editing.")))) (define-derived-mode log-edit-mode text-mode "Log-Edit" @@ -383,7 +383,7 @@ (equal (log-edit-files) log-edit-initial-files))) (progn (log-edit-show-files) - (not (y-or-n-p "Really commit ? ")))) + (not (y-or-n-p "Really commit? ")))) (progn (when (not win) (log-edit-hide-buf)) (message "Oh, well! Later maybe?")) (run-hooks 'log-edit-done-hook) @@ -426,7 +426,7 @@ (interactive) (if (eq last-command 'log-edit-mode-help) (describe-function major-mode) - (message + (message "%s" (substitute-command-keys "Type `\\[log-edit-done]' to finish commit. Try `\\[describe-function] log-edit-done' for more help.")))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/feedmail.el --- a/lisp/mail/feedmail.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/feedmail.el Sun Oct 09 20:00:17 2005 +0000 @@ -3,7 +3,7 @@ ;; This file is part of GNU Emacs. -;; Author: Bill Carpenter <bill@bubblegum.net>, <bill@carpenter.ORG> +;; Author: Bill Carpenter <bill@carpenter.ORG> ;; Version: 8 ;; Keywords: email, queue, mail, sendmail, message, spray, smtp, draft ;; X-URL: <URL:http://www.carpenter.org/feedmail/feedmail.html> @@ -1943,7 +1943,7 @@ (file-exists-p a-s-file-name) (delete-file a-s-file-name)))) (if feedmail-queue-chatty - (progn (message (concat "FQM: Queued in " filename)) + (progn (message "%s" (concat "FQM: Queued in " filename)) (sit-for feedmail-queue-chatty-sit-for))) (if feedmail-queue-chatty (progn diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/mailabbrev.el --- a/lisp/mail/mailabbrev.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/mailabbrev.el Sun Oct 09 20:00:17 2005 +0000 @@ -528,7 +528,7 @@ (default-directory (expand-file-name "~/")) (def mail-personal-alias-file)) (read-file-name - (format "Read additional aliases from file: (default %s) " + (format "Read additional aliases from file (default %s): " def) default-directory (expand-file-name def default-directory) @@ -542,7 +542,7 @@ (default-directory (expand-file-name "~/")) (def mail-personal-alias-file)) (read-file-name - (format "Read mail aliases from file: (default %s) " def) + (format "Read mail aliases from file (default %s): " def) default-directory (expand-file-name def default-directory) t)))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/mailclient.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/mail/mailclient.el Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,174 @@ +;;; mailclient.el --- mail sending via system's mail client. -*- byte-compile-dynamic: t -*- + +;; Copyright (C) 2005 Free Software Foundation + +;; Author: David Reitter <david.reitter@gmail.com> +;; Keywords: mail + +;; 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 2, 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: + +;; This package allows to hand over a buffer to be sent off +;; via the system's designated e-mail client. +;; Note that the e-mail client will display the contents of the buffer +;; again for editing. +;; The e-mail client is taken to be whoever handles a mailto: URL +;; via `browse-url'. +;; Mailto: URLs are composed according to RFC2368. + +;; MIME bodies are not supported - we rather expect the mail client +;; to encode the body and add, for example, a digital signature. +;; The mailto URL RFC calls for "short text messages that are +;; actually the content of automatic processing." +;; So mailclient.el is ideal for situations where an e-mail is +;; generated automatically, and the user can edit it in the +;; mail client (e.g. bug-reports). + +;; To activate: +;; (setq send-mail-function 'mailclient-send-it) ; if you use `mail' + +;;; Code: + + +(require 'sendmail) ;; for mail-sendmail-undelimit-header +(require 'mail-utils) ;; for mail-fetch-field + +(defcustom mailclient-place-body-on-clipboard-flag + (fboundp 'w32-set-clipboard-data) + "If non-nil, put the e-mail body on the clipboard in mailclient. +This is useful on systems where only short mailto:// URLs are +supported. Defaults to non-nil on Windows, nil otherwise." + :type 'boolean + :group 'mail) + +(defun mailclient-encode-string-as-url (string) + "Convert STRING to a URL, using utf-8 as encoding." + (apply (function concat) + (mapcar + (lambda (char) + (cond + ((eq char ?\x20) "%20") ;; space + ((eq char ?\n) "%0D%0A") ;; newline + ((string-match "[-a-zA-Z0-9_:/.@]" (char-to-string char)) + (char-to-string char)) ;; printable + (t ;; everything else + (format "%%%02x" char)))) ;; escape + ;; Convert string to list of chars + (append (encode-coding-string string 'utf-8))))) + +(defvar mailclient-delim-static "?") +(defun mailclient-url-delim () + (let ((current mailclient-delim-static)) + (setq mailclient-delim-static "&") + current)) + +(defun mailclient-gather-addresses (str &optional drop-first-name) + (let ((field (mail-fetch-field str nil t))) + (if field + (save-excursion + (let ((first t) + (result "")) + (mapc + (lambda (recp) + (setq result + (concat + result + (if (and drop-first-name + first) + "" + (concat (mailclient-url-delim) str "=")) + (mailclient-encode-string-as-url + recp))) + (setq first nil)) + (split-string + (mail-strip-quoted-names field) "\, *")) + result))))) + +;;;###autoload +(defun mailclient-send-it () + "Pass current buffer on to the system's mail client. +Suitable value for `send-mail-function'. +The mail client is taken to be the handler of mailto URLs." + (require 'mail-utils) + (let ((case-fold-search nil) + delimline + (mailbuf (current-buffer))) + (unwind-protect + (with-temp-buffer + (insert-buffer-substring mailbuf) + ;; Move to header delimiter + (mail-sendmail-undelimit-header) + (setq delimline (point-marker)) + (if mail-aliases + (expand-mail-aliases (point-min) delimline)) + (goto-char (point-min)) + ;; ignore any blank lines in the header + (while (and (re-search-forward "\n\n\n*" delimline t) + (< (point) delimline)) + (replace-match "\n")) + (let ((case-fold-search t)) + ;; initialize limiter + (setq mailclient-delim-static "?") + ;; construct and call up mailto URL + (browse-url + (concat + (save-excursion + (narrow-to-region (point-min) delimline) + (concat + "mailto:" + ;; some of the headers according to RFC822 + (mailclient-gather-addresses "To" + 'drop-first-name) + (mailclient-gather-addresses "cc" ) + (mailclient-gather-addresses "bcc" ) + (mailclient-gather-addresses "Resent-To" ) + (mailclient-gather-addresses "Resent-cc" ) + (mailclient-gather-addresses "Resent-bcc" ) + (mailclient-gather-addresses "Reply-To" ) + ;; The From field is not honored for now: it's + ;; not necessarily configured. The mail client + ;; knows the user's address(es) + ;; (mailclient-gather-addresses "From" ) + ;; subject line + (let ((subj (mail-fetch-field "Subject" nil t))) + (widen) ;; so we can read the body later on + (if subj ;; if non-blank + ;; the mail client will deal with + ;; warning the user etc. + (concat (mailclient-url-delim) "subject=" + (mailclient-encode-string-as-url subj)) + "")))) + ;; body + (concat + (mailclient-url-delim) "body=" + (mailclient-encode-string-as-url + (if mailclient-place-body-on-clipboard-flag + (progn + (clipboard-kill-ring-save + (+ 1 delimline) (point-max)) + (concat + "*** E-Mail body has been placed on clipboard, " + "please paste them here! ***")) + ;; else + (buffer-substring (+ 1 delimline) (point-max)))))))))))) + +(provide 'mailclient) + +;; arch-tag: 35d10fc8-a1bc-4f29-a4e6-c288e53578ef +;;; mailclient.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/reply2.pbm Binary file lisp/mail/reply2.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/reply2.xpm --- a/lisp/mail/reply2.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* XPM */ -static char * mail_reply_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 9 1", -" c None", -". c black", -"X c #673e666663d4", -"o c #eb46ea1de471", -"O c #a852a7bea3d2", -"+ c #ae51c17b9b26", -"@ c #8d4d97577838", -"# c #7c7c8b8b6e6e", -"$ c #5e0868be52d3", -/* pixels */ -" ", -" ", -" ", -" ", -" ", -" .... ", -" .....XooO. ", -" .....XOooooooO. ", -" .XOooooooooooXOO. ", -" .oXXooooooooOXOo. ", -" .OoOXXooooooXOoo. ", -" .oooOOXOooXXXooO. ", -" ........XXOoOXOo. ", -" ..++++@.ooooooXO. ", -" ..+@@@.oooooooXO. ", -" ..+@@@#.oooooooO.. ", -" ..++@@@#$.ooooO... ", -" .++++@@#.$.oO... ", -" .+@@@#.o.... ", -" .+@#$... ", -" .#$. ", -" .$. ", -" . ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/rmail-spam-filter.el --- a/lisp/mail/rmail-spam-filter.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/rmail-spam-filter.el Sun Oct 09 20:00:17 2005 +0000 @@ -449,10 +449,10 @@ (if rsf-autosave-newly-added-definitions (progn (custom-save-all) - (message (concat "added subject \n <<< \n" message-subject + (message "%s" (concat "added subject \n <<< \n" message-subject " \n >>> \n to list of spam definitions. \n" "and saved the spam definitions to file."))) - (message (concat "added subject \n <<< \n" message-subject + (message "%s" (concat "added subject \n <<< \n" message-subject " \n >>> \n to list of spam definitions. \n" "Don't forget to save the spam definitions to file using the spam menu")) @@ -478,10 +478,10 @@ (if rsf-autosave-newly-added-definitions (progn (custom-save-all) - (message (concat "added sender \n <<< \n" message-sender + (message "%s" (concat "added sender \n <<< \n" message-sender " \n >>> \n to list of spam definitions. \n" "and saved the spam definitions to file."))) - (message (concat "added sender \n <<< \n " message-sender + (message "%s" (concat "added sender \n <<< \n " message-sender " \n >>> \n to list of spam definitions." "Don't forget to save the spam definitions to file using the spam menu")) @@ -521,10 +521,10 @@ (if rsf-autosave-newly-added-definitions (progn (custom-save-all) - (message (concat "added highlighted text \n <<< \n" region-to-spam-list + (message "%s" (concat "added highlighted text \n <<< \n" region-to-spam-list " \n >>> \n to list of spam definitions. \n" "and saved the spam definitions to file."))) - (message (concat "added highlighted text \n <<< \n " region-to-spam-list + (message "%s" (concat "added highlighted text \n <<< \n " region-to-spam-list " \n >>> \n to list of spam definitions." "Don't forget to save the spam definitions to file using the spam menu")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/rmail.el --- a/lisp/mail/rmail.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/rmail.el Sun Oct 09 20:00:17 2005 +0000 @@ -3038,13 +3038,14 @@ (interactive (let* ((reversep (< (prefix-numeric-value current-prefix-arg) 0)) (prompt - (concat (if reversep "Reverse " "") "Rmail search (regexp): ")) + (concat (if reversep "Reverse " "") "Rmail search (regexp")) regexp) - (if rmail-search-last-regexp - (setq prompt (concat prompt - "(default " - rmail-search-last-regexp - ") "))) + (setq prompt + (concat prompt + (if rmail-search-last-regexp + (concat ", default " + rmail-search-last-regexp "): ") + "): "))) (setq regexp (read-string prompt)) (cond ((not (equal regexp "")) (setq rmail-search-last-regexp regexp)) @@ -3109,13 +3110,14 @@ (interactive (let* ((reversep (>= (prefix-numeric-value current-prefix-arg) 0)) (prompt - (concat (if reversep "Reverse " "") "Rmail search (regexp): ")) + (concat (if reversep "Reverse " "") "Rmail search (regexp")) regexp) - (if rmail-search-last-regexp - (setq prompt (concat prompt - "(default " - rmail-search-last-regexp - ") "))) + (setq prompt + (concat prompt + (if rmail-search-last-regexp + (concat ", default " + rmail-search-last-regexp "): ") + "): "))) (setq regexp (read-string prompt)) (cond ((not (equal regexp "")) (setq rmail-search-last-regexp regexp)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/rmailout.el --- a/lisp/mail/rmailout.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/rmailout.el Sun Oct 09 20:00:17 2005 +0000 @@ -63,9 +63,9 @@ (let ((read-file (expand-file-name (read-file-name - (concat "Output message to Rmail file: (default " + (concat "Output message to Rmail file (default " (file-name-nondirectory default-file) - ") ") + "): ") (file-name-directory default-file) (abbreviate-file-name default-file)) (file-name-directory default-file)))) @@ -95,9 +95,9 @@ (let ((read-file (expand-file-name (read-file-name - (concat "Output message to Unix mail file: (default " + (concat "Output message to Unix mail file (default " (file-name-nondirectory default-file) - ") ") + "): ") (file-name-directory default-file) (abbreviate-file-name default-file)) (file-name-directory default-file)))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mail/rmailsum.el --- a/lisp/mail/rmailsum.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mail/rmailsum.el Sun Oct 09 20:00:17 2005 +0000 @@ -1346,13 +1346,14 @@ (interactive (let* ((reversep (>= (prefix-numeric-value current-prefix-arg) 0)) (prompt - (concat (if reversep "Reverse " "") "Rmail search (regexp): ")) + (concat (if reversep "Reverse " "") "Rmail search (regexp")) regexp) - (if rmail-search-last-regexp - (setq prompt (concat prompt - "(default " - rmail-search-last-regexp - ") "))) + (setq prompt + (concat prompt + (if rmail-search-last-regexp + (concat ", default " + rmail-search-last-regexp "): ") + "): "))) (setq regexp (read-string prompt)) (cond ((not (equal regexp "")) (setq rmail-search-last-regexp regexp)) @@ -1377,13 +1378,14 @@ (interactive (let* ((reversep (< (prefix-numeric-value current-prefix-arg) 0)) (prompt - (concat (if reversep "Reverse " "") "Rmail search (regexp): ")) + (concat (if reversep "Reverse " "") "Rmail search (regexp")) regexp) - (if rmail-search-last-regexp - (setq prompt (concat prompt - "(default " - rmail-search-last-regexp - ") "))) + (setq prompt + (concat prompt + (if rmail-search-last-regexp + (concat ", default " + rmail-search-last-regexp "): ") + "): "))) (setq regexp (read-string prompt)) (cond ((not (equal regexp "")) (setq rmail-search-last-regexp regexp)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/man.el --- a/lisp/man.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/man.el Sun Oct 09 20:00:17 2005 +0000 @@ -663,10 +663,10 @@ (interactive (list (let* ((default-entry (Man-default-man-entry)) (input (read-string - (format "Manual entry%s: " + (format "Manual entry%s" (if (string= default-entry "") - "" - (format " (default %s)" default-entry))) + ": " + (format " (default %s): " default-entry))) nil nil default-entry))) (if (string= input "") (error "No man args given") @@ -1273,7 +1273,7 @@ (let* ((default (aheadsym Man-sections-alist)) (completion-ignore-case t) chosen - (prompt (concat "Go to section: (default " default ") "))) + (prompt (concat "Go to section (default " default "): "))) (setq chosen (completing-read prompt Man-sections-alist)) (if (or (not chosen) (string= chosen "")) @@ -1328,7 +1328,7 @@ Man-refpages-alist)) (aheadsym Man-refpages-alist))) chosen - (prompt (concat "Refer to: (default " default ") "))) + (prompt (concat "Refer to (default " default "): "))) (setq chosen (completing-read prompt Man-refpages-alist)) (if (or (not chosen) (string= chosen "")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/ChangeLog --- a/lisp/mh-e/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,9 +1,50 @@ +2005-09-30 Bill Wohler <wohler@newt.com> + + * mh-customize.el (mh-refile-msg, mh-tool-bar-reply-from) + (mh-tool-bar-reply-to, mh-tool-bar-reply-all) + (mh-alias-grab-from-field, mh-pack-folder): Image files moved to + etc/images/mail so added "mail/" prefix. + (mh-reply): Ditto. Also renamed reply2.* to reply.*. + (mh-rescan-folder): Ditto. Renamed image file to refresh.* since + it can be used in the general sense. Does not have "mail/" + prefix. + +2005-09-24 Emilio C. Lopes <eclig@gmx.net> + + * mh-mime.el (mh-compose-forward, mh-mhn-compose-forw): + * mh-comp.el (mh-insert-letter): + * mh-utils.el (mh-prompt-for-folder): + Follow convention for reading with the minibuffer. + +2005-09-19 Juanma Barranquero <lekktu@gmail.com> + + * mh-print.el (mh-ps-print-msg-show): Fix misplaced parenthesis in + previous change. + +2005-09-18 D Goel <deego@gnufans.org> + + * mh-alias.el (mh-alias-ali): Fix `message' call: first arg + should be a format spec. + + * mh-print.el (mh-ps-spool-buffer, mh-ps-spool-a-msg) + (mh-ps-print-msg, mh-ps-print-msg-show): Ditto. + + * mh-mime.el (mh-toggle-mh-decode-mime-flag): Ditto. + + * mh-index.el (mh-index-sequenced-messages): Ditto. + + * mh-e.el (mh-refile-or-write-again, mh-page-msg): Ditto. + + * mh-junk.el (mh-junk-blacklist, mh-junk-whitelist) + (mh-spamassassin-blacklist, mh-spamassassin-whitelist): Ditto. + 2005-08-15 Dan Nicolaescu <dann@ics.uci.edu> * mh-customize.el: Do not use face-alias compatibility for faces that did not appear in the previous Emacs release. 2005-08-10 Lars Hansen <larsh@soem.dk> + * mh-e.el: Add handler to desktop-buffer-mode-handlers. (mh-restore-desktop-buffer): Remove autoload cookie. (mh-folder-mode): Add autoload cookie. diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-alias.el --- a/lisp/mh-e/mh-alias.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-alias.el Sun Oct 09 20:00:17 2005 +0000 @@ -251,7 +251,7 @@ (if (looking-at "^$") (delete-backward-char 1)) (buffer-substring (point-min)(point-max))) (error (progn - (message (error-message-string err)) + (message "%s" (error-message-string err)) alias)))) (defun mh-alias-expand (alias) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-comp.el --- a/lisp/mh-e/mh-comp.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-comp.el Sun Oct 09 20:00:17 2005 +0000 @@ -1424,10 +1424,10 @@ and point after it." (interactive (list (mh-prompt-for-folder "Message from" mh-sent-from-folder nil) - (read-input (format "Message number%s: " + (read-input (concat "Message number" (if (numberp mh-sent-from-msg) - (format " [%d]" mh-sent-from-msg) - ""))) + (format " (default %d): " mh-sent-from-msg) + ": "))) current-prefix-arg)) (save-restriction (narrow-to-region (point) (point)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-customize.el --- a/lisp/mh-e/mh-customize.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-customize.el Sun Oct 09 20:00:17 2005 +0000 @@ -1922,7 +1922,7 @@ "Go to the next undeleted message\nThe button runs `mh-next-undeleted-msg'") (mh-delete-msg (folder) "close" "Mark this message for deletion\nThis button runs `mh-delete-msg'") - (mh-refile-msg (folder) "refile" + (mh-refile-msg (folder) "mail/refile" "Refile this message\nThis button runs `mh-refile-msg'") (mh-undo (folder) "undo" "Undo last operation\nThis button runs `undo'" (mh-outstanding-commands-p)) @@ -1933,19 +1933,19 @@ "Toggle tick mark\nThis button runs `mh-toggle-tick'") (mh-toggle-showing (folder) "show" "Toggle showing message\nThis button runs `mh-toggle-showing'") - (mh-tool-bar-reply-from (folder) "reply-from" "Reply to \"from\"") - (mh-tool-bar-reply-to (folder) "reply-to" "Reply to \"to\"") - (mh-tool-bar-reply-all (folder) "reply-all" "Reply to \"all\"") - (mh-reply (folder) "mail/reply2" + (mh-tool-bar-reply-from (folder) "mail/reply-from" "Reply to \"from\"") + (mh-tool-bar-reply-to (folder) "mail/reply-to" "Reply to \"to\"") + (mh-tool-bar-reply-all (folder) "mail/reply-all" "Reply to \"all\"") + (mh-reply (folder) "mail/reply" "Reply to this message\nThis button runs `mh-reply'") - (mh-alias-grab-from-field (folder) "alias" + (mh-alias-grab-from-field (folder) "mail/alias" "Grab From alias\nThis button runs `mh-alias-grab-from-field'" (and (mh-extract-from-header-value) (not (mh-alias-for-from-p)))) (mh-send (folder) "mail_compose" "Compose new message\nThis button runs `mh-send'") - (mh-rescan-folder (folder) "rescan" + (mh-rescan-folder (folder) "refresh" "Rescan this folder\nThis button runs `mh-rescan-folder'") - (mh-pack-folder (folder) "repack" + (mh-pack-folder (folder) "mail/repack" "Repack this folder\nThis button runs `mh-pack-folder'") (mh-tool-bar-search (folder) "search" "Search\nThis button runs `mh-tool-bar-search-function'") diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-e.el --- a/lisp/mh-e/mh-e.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-e.el Sun Oct 09 20:00:17 2005 +0000 @@ -734,7 +734,7 @@ (apply 'mh-write-msg-to-file msg (cdr mh-last-destination))) (mh-next-msg interactive-flag) (format "Destination: %s" (cdr mh-last-destination))))) - (message output))) + (message "%s" output))) (defun mh-quit () "Quit the current MH-E folder. @@ -778,12 +778,12 @@ (if (mh-in-show-buffer (mh-show-buffer) (pos-visible-in-window-p (point-max))) (progn - (message (format - "End of message (Type %s to read %s undeleted message)" - (single-key-description last-input-event) - (if (equal mh-next-direction 'backward) - "previous" - "next"))) + (message + "End of message (Type %s to read %s undeleted message)" + (single-key-description last-input-event) + (if (equal mh-next-direction 'backward) + "previous" + "next")) (setq mh-page-to-next-msg-flag t)) (scroll-other-window arg))) (mh-show))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-index.el --- a/lisp/mh-e/mh-index.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-index.el Sun Oct 09 20:00:17 2005 +0000 @@ -1325,7 +1325,7 @@ mh-index-sequence-search-flag t mh-index-previous-search (list folders sequence)) (mh-index-write-data) - (when (stringp message) (message message)))) + (when (stringp message) (message "%s" message)))) ;;;###mh-autoload (defun mh-index-new-messages (folders) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-junk.el --- a/lisp/mh-e/mh-junk.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-junk.el Sun Oct 09 20:00:17 2005 +0000 @@ -63,9 +63,9 @@ (substring mh-junk-disposition 1))) (t (concat "+" mh-junk-disposition))))) (mh-iterate-on-range msg range - (message (format "Blacklisting message %d..." msg)) + (message "Blacklisting message %d..." msg) (funcall (symbol-function blacklist-func) msg) - (message (format "Blacklisting message %d...done" msg)) + (message "Blacklisting message %d...done" msg) (if (not (memq msg mh-seen-list)) (setq mh-seen-list (cons msg mh-seen-list))) (if dest @@ -87,9 +87,9 @@ (unless whitelist-func (error "Customize `mh-junk-program' appropriately")) (mh-iterate-on-range msg range - (message (format "Whitelisting message %d..." msg)) + (message "Whitelisting message %d..." msg) (funcall (symbol-function whitelist-func) msg) - (message (format "Whitelisting message %d...done" msg)) + (message "Whitelisting message %d...done" msg) (mh-refile-a-msg nil (intern mh-inbox))) (mh-next-msg))) @@ -179,7 +179,7 @@ (msg-file (mh-msg-filename msg mh-current-folder)) (sender)) (save-excursion - (message (format "Reporting message %d..." msg)) + (message "Reporting message %d..." msg) (mh-truncate-log-buffer) (call-process mh-spamassassin-executable msg-file mh-log-buffer nil ;;"--report" "--remove-from-whitelist" @@ -188,7 +188,7 @@ (message "Recategorizing this message as spam...") (call-process mh-sa-learn-executable msg-file mh-log-buffer nil "--single" "--spam" "--local" "--no-rebuild")) - (message (format "Blacklisting message %d..." msg)) + (message "Blacklisting message %d..." msg) (set-buffer (get-buffer-create mh-temp-buffer)) (erase-buffer) (call-process (expand-file-name mh-scan-prog mh-progs) @@ -200,8 +200,8 @@ (progn (setq sender (match-string 0)) (mh-spamassassin-add-rule "blacklist_from" sender) - (message (format "Blacklisting message %d...done" msg))) - (message (format "Blacklisting message %d...not done (from my address)" msg)))))) + (message "Blacklisting message %d...done" msg)) + (message "Blacklisting message %d...not done (from my address)" msg))))) (defun mh-spamassassin-whitelist (msg) "Whitelist MSG with SpamAssassin. @@ -230,14 +230,14 @@ (message "Recategorizing this message as ham...") (call-process mh-sa-learn-executable msg-file mh-temp-buffer nil "--single" "--ham" "--local --no-rebuild")) - (message (format "Whitelisting message %d..." msg)) + (message "Whitelisting message %d..." msg) (setq from (car (mh-funcall-if-exists ietf-drums-parse-address (mh-get-header-field "From:")))) (kill-buffer nil) (unless (or (null from) (equal from "")) (mh-spamassassin-add-rule "whitelist_from" from)) - (message (format "Whitelisting message %d...done" msg))))) + (message "Whitelisting message %d...done" msg)))) (defun mh-spamassassin-add-rule (rule body) "Add a new rule to `~/.spamassassin/user_prefs'. diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-mime.el --- a/lisp/mh-e/mh-mime.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-mime.el Sun Oct 09 20:00:17 2005 +0000 @@ -81,10 +81,10 @@ (interactive (list (read-string "Forw Content-description: ") (mh-prompt-for-folder "Message from" mh-sent-from-folder nil) - (read-string (format "Messages%s: " + (read-string (concat "Messages" (if (numberp mh-sent-from-msg) - (format " [%d]" mh-sent-from-msg) - ""))))) + (format " (default %d): " mh-sent-from-msg) + ": "))))) (if (equal mh-compose-insertion 'gnus) (mh-mml-forward-message description folder message) (mh-mhn-compose-forw description folder message))) @@ -374,10 +374,10 @@ (interactive (list (read-string "Forw Content-description: ") (mh-prompt-for-folder "Message from" mh-sent-from-folder nil) - (read-string (format "Messages%s: " + (read-string (concat "Messages" (if (numberp mh-sent-from-msg) - (format " [%d]" mh-sent-from-msg) - ""))))) + (format " (default %d): " mh-sent-from-msg) + ": "))))) (beginning-of-line) (insert "#forw [") (and description @@ -858,7 +858,7 @@ (interactive) (setq mh-decode-mime-flag (not mh-decode-mime-flag)) (mh-show nil t) - (message (format "(setq mh-decode-mime-flag %s)" mh-decode-mime-flag))) + (message "(setq mh-decode-mime-flag %s)" mh-decode-mime-flag)) ;;;###mh-autoload (defun mh-decode-message-header () diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-print.el --- a/lisp/mh-e/mh-print.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-print.el Sun Oct 09 20:00:17 2005 +0000 @@ -64,7 +64,7 @@ ;; XXX - Default print buffer is bogus (defun mh-ps-spool-buffer (buffer) "Send BUFFER to printer queue." - (message (format "mh-ps-spool-buffer %s" buffer)) + (message "mh-ps-spool-buffer %s" buffer) (save-excursion (set-buffer buffer) (let ((ps-print-color-p mh-ps-print-color-option) @@ -85,8 +85,8 @@ "Print MSG. First the message is decoded in BUFFER before the results are sent to the printer." - (message (format "mh-ps-spool-a-msg msg %s buffer %s" - msg buffer)) + (message "mh-ps-spool-a-msg msg %s buffer %s" + msg buffer) (let ((mh-show-buffer mh-show-buffer) (folder mh-current-folder) ;; The following is commented out because @@ -113,8 +113,8 @@ Check the documentation of `mh-interactive-range' to see how RANGE is read in interactive use." (interactive (list (mh-interactive-range "Print"))) - (message (format "mh-ps-print-msg range %s keys %s" - range (this-command-keys))) + (message "mh-ps-print-msg range %s keys %s" + range (this-command-keys)) (mh-iterate-on-range msg range (let ((buffer (get-buffer-create mh-temp-buffer))) (unwind-protect @@ -152,8 +152,8 @@ (defun mh-ps-print-msg-show (file) "Print current show buffer to FILE." (interactive (list (mh-ps-print-preprint current-prefix-arg))) - (message (format "mh-ps-print-msg-show file %s keys %s mh-show-buffer %s" - file (this-command-keys) mh-show-buffer)) + (message "mh-ps-print-msg-show file %s keys %s mh-show-buffer %s" + file (this-command-keys) mh-show-buffer) (let ((msg (mh-get-msg-num t)) (folder mh-current-folder) (show-buffer mh-show-buffer) diff -r 7a3090aca393 -r 2a679c81f552 lisp/mh-e/mh-utils.el --- a/lisp/mh-e/mh-utils.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mh-e/mh-utils.el Sun Oct 09 20:00:17 2005 +0000 @@ -2315,10 +2315,10 @@ when used in searching." (if (null default) (setq default "")) - (let* ((default-string (cond (default-string (format "[%s] " default-string)) + (let* ((default-string (cond (default-string (format " (default %s)" default-string)) ((equal "" default) "") - (t (format "[%s] " default)))) - (prompt (format "%s folder: %s" prompt default-string)) + (t (format " (default %s)" default)))) + (prompt (format "%s folder%s: " prompt default-string)) (mh-current-folder-name mh-current-folder) read-name folder-name) (while (and (setq read-name (mh-folder-completing-read diff -r 7a3090aca393 -r 2a679c81f552 lisp/mouse.el --- a/lisp/mouse.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/mouse.el Sun Oct 09 20:00:17 2005 +0000 @@ -405,7 +405,6 @@ (start-event-window (posn-window start)) (start-event-frame (window-frame start-event-window)) (start-nwindows (count-windows t)) - (old-selected-window (selected-window)) (minibuffer (frame-parameter nil 'minibuffer)) should-enlarge-minibuffer event mouse y top bot edges wconfig growth) (track-mouse @@ -553,7 +552,6 @@ (start-event-frame (window-frame (car (car (cdr start-event))))) (start-event-window (car (car (cdr start-event)))) (start-nwindows (count-windows t)) - (old-selected-window (selected-window)) event mouse x left right edges wconfig growth (which-side (or (cdr (assq 'vertical-scroll-bars (frame-parameters start-event-frame))) @@ -745,9 +743,11 @@ (goto-char opoint)))) ;; Create an overlay and immediately delete it, to get "overlay in no buffer". -(defvar mouse-drag-overlay (make-overlay 1 1)) -(delete-overlay mouse-drag-overlay) -(overlay-put mouse-drag-overlay 'face 'region) +(defconst mouse-drag-overlay + (let ((ol (make-overlay (point-min) (point-min)))) + (delete-overlay ol) + (overlay-put ol 'face 'region) + ol)) (defvar mouse-selection-click-count 0) @@ -858,14 +858,34 @@ "mouse-1" (substring msg 7))))))) msg) +(defun mouse-move-drag-overlay (ol start end mode) + (unless (= start end) + ;; Go to START first, so that when we move to END, if it's in the middle + ;; of intangible text, point jumps in the direction away from START. + ;; Don't do it if START=END otherwise a single click risks selecting + ;; a region if it's on intangible text. This exception was originally + ;; only applied on entry to mouse-drag-region, which had the problem + ;; that a tiny move during a single-click would cause the intangible + ;; text to be selected. + (goto-char start) + (goto-char end) + (setq end (point))) + (let ((range (mouse-start-end start end mode))) + (move-overlay ol (car range) (nth 1 range)))) + (defun mouse-drag-region-1 (start-event) (mouse-minibuffer-check start-event) - (let* ((echo-keystrokes 0) + (setq mouse-selection-click-count-buffer (current-buffer)) + (let* ((original-window (selected-window)) + ;; We've recorded what we needed from the current buffer and + ;; window, now let's jump to the place of the event, where things + ;; are happening. + (_ (mouse-set-point start-event)) + (echo-keystrokes 0) (start-posn (event-start start-event)) (start-point (posn-point start-posn)) (start-window (posn-window start-posn)) (start-window-start (window-start start-window)) - (start-frame (window-frame start-window)) (start-hscroll (window-hscroll start-window)) (bounds (window-edges start-window)) (make-cursor-line-fully-visible nil) @@ -876,39 +896,34 @@ (1- (nth 3 bounds)))) (on-link (and mouse-1-click-follows-link (or mouse-1-click-in-non-selected-windows - (eq start-window (selected-window))))) - remap-double-click - (click-count (1- (event-click-count start-event)))) + (eq start-window original-window)) + ;; Use start-point before the intangibility + ;; treatment, in case we click on a link inside an + ;; intangible text. + (mouse-on-link-p start-point))) + (click-count (1- (event-click-count start-event))) + (remap-double-click (and on-link + (eq mouse-1-click-follows-link 'double) + (= click-count 1)))) (setq mouse-selection-click-count click-count) - (setq mouse-selection-click-count-buffer (current-buffer)) - (mouse-set-point start-event) ;; In case the down click is in the middle of some intangible text, ;; use the end of that text, and put it in START-POINT. (if (< (point) start-point) (goto-char start-point)) (setq start-point (point)) - (setq on-link (and on-link - (mouse-on-link-p start-point))) - (setq remap-double-click (and on-link - (eq mouse-1-click-follows-link 'double) - (= click-count 1))) - (if remap-double-click ;; Don't expand mouse overlay in links + (if remap-double-click ;; Don't expand mouse overlay in links (setq click-count 0)) - (let ((range (mouse-start-end start-point start-point click-count))) - (move-overlay mouse-drag-overlay (car range) (nth 1 range) - (window-buffer start-window)) - (overlay-put mouse-drag-overlay 'window (selected-window))) + (mouse-move-drag-overlay mouse-drag-overlay start-point start-point + click-count) + (overlay-put mouse-drag-overlay 'window start-window) (deactivate-mark) - ;; end-of-range is used only in the single-click case. - ;; It is the place where the drag has reached so far - ;; (but not outside the window where the drag started). - (let (event end end-point last-end-point (end-of-range (point))) + (let (event end end-point last-end-point) (track-mouse (while (progn (setq event (read-event)) - (or (mouse-movement-p event) - (memq (car-safe event) '(switch-frame select-window)))) - (if (memq (car-safe event) '(switch-frame select-window)) + (or (mouse-movement-p event) + (memq (car-safe event) '(switch-frame select-window)))) + (if (memq (car-safe event) '(switch-frame select-window)) nil (setq end (event-end event) end-point (posn-point end)) @@ -919,53 +934,33 @@ ;; Are we moving within the original window? ((and (eq (posn-window end) start-window) (integer-or-marker-p end-point)) - ;; Go to START-POINT first, so that when we move to END-POINT, - ;; if it's in the middle of intangible text, - ;; point jumps in the direction away from START-POINT. - (goto-char start-point) - (goto-char end-point) - (if (zerop (% click-count 3)) - (setq end-of-range (point))) - (let ((range (mouse-start-end start-point (point) click-count))) - (move-overlay mouse-drag-overlay (car range) (nth 1 range)))) + (mouse-move-drag-overlay mouse-drag-overlay start-point end-point click-count)) (t (let ((mouse-row (cdr (cdr (mouse-position))))) - (cond - ((null mouse-row)) - ((< mouse-row top) - (mouse-scroll-subr start-window (- mouse-row top) - mouse-drag-overlay start-point) - ;; Without this, point tends to jump back to the starting - ;; position where the mouse button was pressed down. - (setq end-of-range (overlay-start mouse-drag-overlay))) - ((>= mouse-row bottom) - (mouse-scroll-subr start-window (1+ (- mouse-row bottom)) - mouse-drag-overlay start-point) - (setq end-of-range (overlay-end mouse-drag-overlay)))))))))) + (cond + ((null mouse-row)) + ((< mouse-row top) + (mouse-scroll-subr start-window (- mouse-row top) + mouse-drag-overlay start-point)) + ((>= mouse-row bottom) + (mouse-scroll-subr start-window (1+ (- mouse-row bottom)) + mouse-drag-overlay start-point))))))))) ;; In case we did not get a mouse-motion event ;; for the final move of the mouse before a drag event ;; pretend that we did get one. (when (and (memq 'drag (event-modifiers (car-safe event))) - (setq end (event-end event) + (setq end (event-end event) end-point (posn-point end)) (eq (posn-window end) start-window) (integer-or-marker-p end-point)) - ;; Go to START-POINT first, so that when we move to END-POINT, - ;; if it's in the middle of intangible text, - ;; point jumps in the direction away from START-POINT. - (goto-char start-point) - (goto-char end-point) - (if (zerop (% click-count 3)) - (setq end-of-range (point))) - (let ((range (mouse-start-end start-point (point) click-count))) - (move-overlay mouse-drag-overlay (car range) (nth 1 range)))) + (mouse-move-drag-overlay mouse-drag-overlay start-point end-point click-count)) (if (consp event) (let ((fun (key-binding (vector (car event))))) - ;; Run the binding of the terminating up-event, if possible. - ;; In the case of a multiple click, it gives the wrong results, + ;; Run the binding of the terminating up-event, if possible. + ;; In the case of a multiple click, it gives the wrong results, ;; because it would fail to set up a region. (if (not (= (overlay-start mouse-drag-overlay) (overlay-end mouse-drag-overlay))) @@ -976,74 +971,75 @@ ;; The end that comes from where we ended the drag. ;; Point goes here. (region-termination - (if (and stop-point (< stop-point start-point)) - (overlay-start mouse-drag-overlay) - (overlay-end mouse-drag-overlay))) - ;; The end that comes from where we started the drag. - ;; Mark goes there. - (region-commencement - (- (+ (overlay-end mouse-drag-overlay) - (overlay-start mouse-drag-overlay)) - region-termination)) - last-command this-command) - (push-mark region-commencement t t) - (goto-char region-termination) - ;; Don't let copy-region-as-kill set deactivate-mark. - (when mouse-drag-copy-region - (let (deactivate-mark) - (copy-region-as-kill (point) (mark t)))) - (let ((buffer (current-buffer))) - (mouse-show-mark) - ;; mouse-show-mark can call read-event, - ;; and that means the Emacs server could switch buffers - ;; under us. If that happened, - ;; avoid trying to use the region. - (and (mark t) mark-active - (eq buffer (current-buffer)) - (mouse-set-region-1)))) - (delete-overlay mouse-drag-overlay) - ;; Run the binding of the terminating up-event. - (when (and (functionp fun) - (= start-hscroll (window-hscroll start-window)) - ;; Don't run the up-event handler if the - ;; window start changed in a redisplay after - ;; the mouse-set-point for the down-mouse - ;; event at the beginning of this function. - ;; When the window start has changed, the - ;; up-mouse event will contain a different - ;; position due to the new window contents, - ;; and point is set again. - (or end-point - (= (window-start start-window) - start-window-start))) - (if (and on-link - (or (not end-point) (= end-point start-point)) - (consp event) - (or remap-double-click - (and - (not (eq mouse-1-click-follows-link 'double)) - (= click-count 0) - (= (event-click-count event) 1) - (not (input-pending-p)) - (or (not (integerp mouse-1-click-follows-link)) - (let ((t0 (posn-timestamp (event-start start-event))) - (t1 (posn-timestamp (event-end event)))) - (and (integerp t0) (integerp t1) - (if (> mouse-1-click-follows-link 0) - (<= (- t1 t0) mouse-1-click-follows-link) - (< (- t0 t1) mouse-1-click-follows-link))))) - (or (not double-click-time) - (sit-for 0 (if (integerp double-click-time) - double-click-time 500) t))))) + (if (and stop-point (< stop-point start-point)) + (overlay-start mouse-drag-overlay) + (overlay-end mouse-drag-overlay))) + ;; The end that comes from where we started the drag. + ;; Mark goes there. + (region-commencement + (- (+ (overlay-end mouse-drag-overlay) + (overlay-start mouse-drag-overlay)) + region-termination)) + last-command this-command) + (push-mark region-commencement t t) + (goto-char region-termination) + ;; Don't let copy-region-as-kill set deactivate-mark. + (when mouse-drag-copy-region + (let (deactivate-mark) + (copy-region-as-kill (point) (mark t)))) + (let ((buffer (current-buffer))) + (mouse-show-mark) + ;; mouse-show-mark can call read-event, + ;; and that means the Emacs server could switch buffers + ;; under us. If that happened, + ;; avoid trying to use the region. + (and (mark t) mark-active + (eq buffer (current-buffer)) + (mouse-set-region-1)))) + (delete-overlay mouse-drag-overlay) + ;; Run the binding of the terminating up-event. + (when (and (functionp fun) + (= start-hscroll (window-hscroll start-window)) + ;; Don't run the up-event handler if the + ;; window start changed in a redisplay after + ;; the mouse-set-point for the down-mouse + ;; event at the beginning of this function. + ;; When the window start has changed, the + ;; up-mouse event will contain a different + ;; position due to the new window contents, + ;; and point is set again. + (or end-point + (= (window-start start-window) + start-window-start))) + (if (and on-link + (or (not end-point) (= end-point start-point)) + (consp event) + (or remap-double-click + (and + (not (eq mouse-1-click-follows-link 'double)) + (= click-count 0) + (= (event-click-count event) 1) + (not (input-pending-p)) + (or (not (integerp mouse-1-click-follows-link)) + (let ((t0 (posn-timestamp (event-start start-event))) + (t1 (posn-timestamp (event-end event)))) + (and (integerp t0) (integerp t1) + (if (> mouse-1-click-follows-link 0) + (<= (- t1 t0) mouse-1-click-follows-link) + (< (- t0 t1) mouse-1-click-follows-link))))) + (or (not double-click-time) + (sit-for 0 (if (integerp double-click-time) + double-click-time 500) t))))) (if (or (vectorp on-link) (stringp on-link)) (setq event (aref on-link 0)) (setcar event 'mouse-2))) - (setq unread-command-events - (cons event unread-command-events))))) + (push event unread-command-events)))) + + ;; Case where the end-event is not a cons cell (it's just a boring + ;; char-key-press). (delete-overlay mouse-drag-overlay))))) ;; Commands to handle xterm-style multiple clicks. - (defun mouse-skip-word (dir) "Skip over word, over whitespace, or over identical punctuation. If DIR is positive skip forward; if negative, skip backward." @@ -1352,8 +1348,8 @@ ;; Don't let a subsequent kill command append to this one: ;; prevent setting this-command to kill-region. (this-command this-command)) - (if (and (save-excursion - (set-buffer (window-buffer (posn-window (event-start click)))) + (if (and (with-current-buffer + (window-buffer (posn-window (event-start click))) (and (mark t) (> (mod mouse-selection-click-count 3) 0) ;; Don't be fooled by a recent click in some other buffer. (eq mouse-selection-click-count-buffer @@ -1416,15 +1412,14 @@ (goto-char new) (set-mark new)) (setq deactivate-mark nil))) - (kill-new (buffer-substring (point) (mark t)) t) - (mouse-show-mark)) + (kill-new (buffer-substring (point) (mark t)) t)) ;; Set the mark where point is, then move where clicked. (mouse-set-mark-fast click) (if before-scroll (goto-char before-scroll)) - (exchange-point-and-mark) - (kill-new (buffer-substring (point) (mark t))) - (mouse-show-mark)) + (exchange-point-and-mark) ;Why??? --Stef + (kill-new (buffer-substring (point) (mark t)))) + (mouse-show-mark) (mouse-set-region-1) (setq mouse-save-then-kill-posn (list (car kill-ring) (point) click-posn))))))) @@ -1435,10 +1430,13 @@ (global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill) (global-set-key [M-mouse-2] 'mouse-yank-secondary) -;; An overlay which records the current secondary selection -;; or else is deleted when there is no secondary selection. -;; May be nil. -(defvar mouse-secondary-overlay nil) +(defconst mouse-secondary-overlay + (let ((ol (make-overlay (point-min) (point-min)))) + (delete-overlay ol) + (overlay-put ol 'face 'secondary-selection) + ol) + "An overlay which records the current secondary selection. +It is deleted when there is no secondary selection.") (defvar mouse-secondary-click-count 0) @@ -1453,11 +1451,9 @@ (interactive "e") (mouse-minibuffer-check click) (let ((posn (event-start click))) - (save-excursion - (set-buffer (window-buffer (posn-window posn))) + (with-current-buffer (window-buffer (posn-window posn)) ;; Cancel any preexisting secondary selection. - (if mouse-secondary-overlay - (delete-overlay mouse-secondary-overlay)) + (delete-overlay mouse-secondary-overlay) (if (numberp (posn-point posn)) (progn (or mouse-secondary-start @@ -1472,14 +1468,10 @@ (let ((posn (event-start click)) beg (end (event-end click))) - (save-excursion - (set-buffer (window-buffer (posn-window posn))) + (with-current-buffer (window-buffer (posn-window posn)) (if (numberp (posn-point posn)) (setq beg (posn-point posn))) - (if mouse-secondary-overlay - (move-overlay mouse-secondary-overlay beg (posn-point end)) - (setq mouse-secondary-overlay (make-overlay beg (posn-point end)))) - (overlay-put mouse-secondary-overlay 'face 'secondary-selection)))) + (move-overlay mouse-secondary-overlay beg (posn-point end))))) (defun mouse-drag-secondary (start-event) "Set the secondary selection to the text that the mouse is dragged over. @@ -1492,7 +1484,6 @@ (start-posn (event-start start-event)) (start-point (posn-point start-posn)) (start-window (posn-window start-posn)) - (start-frame (window-frame start-window)) (bounds (window-edges start-window)) (top (nth 1 bounds)) (bottom (if (window-minibuffer-p start-window) @@ -1500,20 +1491,16 @@ ;; Don't count the mode line. (1- (nth 3 bounds)))) (click-count (1- (event-click-count start-event)))) - (save-excursion - (set-buffer (window-buffer start-window)) + (with-current-buffer (window-buffer start-window) (setq mouse-secondary-click-count click-count) - (or mouse-secondary-overlay - (setq mouse-secondary-overlay - (make-overlay (point) (point)))) - (overlay-put mouse-secondary-overlay 'face 'secondary-selection) (if (> (mod click-count 3) 0) ;; Double or triple press: make an initial selection ;; of one word or line. (let ((range (mouse-start-end start-point start-point click-count))) (set-marker mouse-secondary-start nil) - (move-overlay mouse-secondary-overlay 1 1 - (window-buffer start-window)) + ;; Why the double move? --Stef + ;; (move-overlay mouse-secondary-overlay 1 1 + ;; (window-buffer start-window)) (move-overlay mouse-secondary-overlay (car range) (nth 1 range) (window-buffer start-window))) ;; Single-press: cancel any preexisting secondary selection. @@ -1598,13 +1585,12 @@ (current-buffer))) (error "Select or click on the buffer where the secondary selection is"))) (let (this-command) - (save-excursion - (set-buffer (overlay-buffer mouse-secondary-overlay)) + (with-current-buffer (overlay-buffer mouse-secondary-overlay) (kill-region (overlay-start mouse-secondary-overlay) (overlay-end mouse-secondary-overlay)))) (delete-overlay mouse-secondary-overlay) ;;; (x-set-selection 'SECONDARY nil) - (setq mouse-secondary-overlay nil)) + ) (defun mouse-secondary-save-then-kill (click) "Save text to point in kill ring; the second time, kill the text. @@ -1627,13 +1613,11 @@ ;; prevent setting this-command to kill-region. (this-command this-command)) (or (eq (window-buffer (posn-window posn)) - (or (and mouse-secondary-overlay - (overlay-buffer mouse-secondary-overlay)) + (or (overlay-buffer mouse-secondary-overlay) (if mouse-secondary-start (marker-buffer mouse-secondary-start)))) (error "Wrong buffer")) - (save-excursion - (set-buffer (window-buffer (posn-window posn))) + (with-current-buffer (window-buffer (posn-window posn)) (if (> (mod mouse-secondary-click-count 3) 0) (if (not (and (eq last-command 'mouse-secondary-save-then-kill) (equal click-posn @@ -1712,10 +1696,7 @@ ;; so put the other end here. (let ((start (+ 0 mouse-secondary-start))) (kill-ring-save start click-posn) - (if mouse-secondary-overlay - (move-overlay mouse-secondary-overlay start click-posn) - (setq mouse-secondary-overlay (make-overlay start click-posn))) - (overlay-put mouse-secondary-overlay 'face 'secondary-selection)))) + (move-overlay mouse-secondary-overlay start click-posn)))) (setq mouse-save-then-kill-posn (list (car kill-ring) (point) click-posn)))) (if (overlay-buffer mouse-secondary-overlay) @@ -2433,5 +2414,5 @@ (make-obsolete 'mldrag-drag-vertical-line 'mouse-drag-vertical-line "21.1") (provide 'mldrag) -;;; arch-tag: 9a710ce1-914a-4923-9b81-697f7bf82ab3 +;; arch-tag: 9a710ce1-914a-4923-9b81-697f7bf82ab3 ;;; mouse.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/net/ange-ftp.el --- a/lisp/net/ange-ftp.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/net/ange-ftp.el Sun Oct 09 20:00:17 2005 +0000 @@ -1298,6 +1298,8 @@ (setq file (if (file-name-absolute-p temp) temp + ;; Wouldn't `expand-file-name' be better than `concat' ? + ;; It would fail when `a/b/..' != `a', tho. --Stef (concat (file-name-directory file) temp))))) file) @@ -1385,12 +1387,12 @@ (if (or ange-ftp-disable-netrc-security-check (and (eq (nth 2 attr) (user-uid)) ; Same uids. (string-match ".r..------" (nth 8 attr)))) - (save-excursion + (with-current-buffer ;; we are cheating a bit here. I'm trying to do the equivalent ;; of find-file on the .netrc file, but then nuke it afterwards. ;; with the bit of logic below we should be able to have ;; encrypted .netrc files. - (set-buffer (generate-new-buffer "*ftp-.netrc*")) + (generate-new-buffer "*ftp-.netrc*") (ange-ftp-real-insert-file-contents file) (setq buffer-file-name file) (setq default-directory (file-name-directory file)) @@ -1511,7 +1513,7 @@ (setq buffer (current-buffer)) (setq buffer (get-buffer buffer))) (let ((file (or (buffer-file-name buffer) - (save-excursion (set-buffer buffer) default-directory)))) + (with-current-buffer buffer default-directory)))) (if file (let ((parsed (ange-ftp-ftp-name (expand-file-name file)))) (if parsed @@ -1592,8 +1594,7 @@ (if proc (let ((buf (process-buffer proc))) (if buf - (save-excursion - (set-buffer buf) + (with-current-buffer buf (setq ange-ftp-xfer-size ;; For very large files, BYTES can be a float. (if (integerp bytes) @@ -1763,8 +1764,7 @@ (defun ange-ftp-gwp-filter (proc str) (comint-output-filter proc str) - (save-excursion - (set-buffer (process-buffer proc)) + (with-current-buffer (process-buffer proc) ;; Replace STR by the result of the comint processing. (setq str (buffer-substring comint-last-output-start (process-mark proc)))) (cond ((string-match "login: *$" str) @@ -1800,8 +1800,7 @@ (set-process-query-on-exit-flag proc nil) (set-process-sentinel proc 'ange-ftp-gwp-sentinel) (set-process-filter proc 'ange-ftp-gwp-filter) - (save-excursion - (set-buffer (process-buffer proc)) + (with-current-buffer (process-buffer proc) (goto-char (point-max)) (set-marker (process-mark proc) (point))) (setq ange-ftp-gwp-running t @@ -1907,8 +1906,7 @@ ange-ftp-nslookup-program host))) (res host)) (set-process-query-on-exit-flag proc nil) - (save-excursion - (set-buffer (process-buffer proc)) + (with-current-buffer (process-buffer proc) (while (memq (process-status proc) '(run open)) (accept-process-output proc)) (goto-char (point-min)) @@ -1947,8 +1945,7 @@ ;; Copy this so we don't alter it permanently. (process-environment (copy-tree process-environment)) (buffer (get-buffer-create name))) - (save-excursion - (set-buffer buffer) + (with-current-buffer buffer (internal-ange-ftp-mode)) ;; This tells GNU ftp not to output any fancy escape sequences. (setenv "TERM" "dumb") @@ -1960,8 +1957,7 @@ ange-ftp-gateway-host) args)))) (setq proc (apply 'start-process name name args)))) - (save-excursion - (set-buffer (process-buffer proc)) + (with-current-buffer (process-buffer proc) (goto-char (point-max)) (set-marker (process-mark proc) (point))) (set-process-query-on-exit-flag proc nil) @@ -2127,8 +2123,7 @@ (defun ange-ftp-guess-hash-mark-size (proc) (if ange-ftp-send-hash - (save-excursion - (set-buffer (process-buffer proc)) + (with-current-buffer (process-buffer proc) (let* ((status (ange-ftp-raw-send-cmd proc "hash")) (line (cdr status))) (save-match-data @@ -2308,6 +2303,14 @@ (not (string-match "R" cmd3)) (setq cmd1 (concat cmd1 "."))) + ;; Using "ls -flags foo" has several problems: + ;; - if foo is a symlink, we may get a single line showing the symlink + ;; rather than the listing of the directory it points to. + ;; - if "foo" has spaces, the parsing of the command may be done wrong. + ;; - some version of netbsd's ftpd only accept a single argument after + ;; `ls', which can either be the directory or the flags. + ;; So to work around those problems, we use "cd foo; ls -flags". + ;; If the dir name contains a space, some ftp servers will ;; refuse to list it. We instead change directory to the ;; directory in question and ls ".". @@ -2324,14 +2327,14 @@ ;; This works around a misfeature of some versions of netbsd ftpd ;; where `ls' can only take one argument: either one set of flags ;; or a file/directory name. - ;; FIXME: if we're trying to `ls' a single file, this fails since we + ;; If we're trying to `ls' a single file, this fails since we ;; can't cd to a file. We can't fix this problem here, tho, because ;; at this point we don't know whether the argument is a file or - ;; a directory. Such an `ls' is only every used (apparently) from + ;; a directory. Such an `ls' is only ever used (apparently) from ;; `insert-directory' when the `full-directory-p' argument is nil ;; (which seems to only be used by dired when updating its display - ;; after operating on a set of files). We should change - ;; ange-ftp-insert-directory so that this case is handled by getting + ;; after operating on a set of files). So we've changed + ;; `ange-ftp-insert-directory' such that in this case it gets ;; a full listing of the directory and extracting the line ;; corresponding to the requested file. (unless (equal cmd1 ".") @@ -2606,9 +2609,8 @@ (format "Listing %s" (ange-ftp-abbreviate-filename ange-ftp-this-file))))) - (save-excursion - (set-buffer (get-buffer-create - ange-ftp-data-buffer-name)) + (with-current-buffer (get-buffer-create + ange-ftp-data-buffer-name) (erase-buffer) (if (ange-ftp-real-file-readable-p temp) (ange-ftp-real-insert-file-contents temp) @@ -3022,8 +3024,7 @@ (let ((result (ange-ftp-send-cmd host user '(type "binary")))) (if (not (car result)) (ange-ftp-error host user (concat "BINARY failed: " (cdr result))) - (save-excursion - (set-buffer (process-buffer (ange-ftp-get-process host user))) + (with-current-buffer (process-buffer (ange-ftp-get-process host user)) (and ange-ftp-binary-hash-mark-size (setq ange-ftp-hash-mark-unit (ash ange-ftp-binary-hash-mark-size -4))))))) @@ -3033,8 +3034,7 @@ (let ((result (ange-ftp-send-cmd host user '(type "ascii")))) (if (not (car result)) (ange-ftp-error host user (concat "ASCII failed: " (cdr result))) - (save-excursion - (set-buffer (process-buffer (ange-ftp-get-process host user))) + (with-current-buffer (process-buffer (ange-ftp-get-process host user)) (and ange-ftp-ascii-hash-mark-size (setq ange-ftp-hash-mark-unit (ash ange-ftp-ascii-hash-mark-size -4))))))) @@ -3174,7 +3174,7 @@ (ange-ftp-real-file-name-directory n)))))) (defun ange-ftp-expand-file-name (name &optional default) - "Documented as original." + "Documented as `expand-file-name'." (save-match-data (setq default (or default default-directory)) (cond ((eq (string-to-char name) ?~) @@ -3289,7 +3289,7 @@ ;; cleanup forms (setq coding-system-used last-coding-system-used) (setq buffer-file-name filename) - (set-buffer-modified-p mod-p))) + (restore-buffer-modified-p mod-p))) (if binary (ange-ftp-set-binary-mode host user)) @@ -3448,7 +3448,9 @@ (let ((file-ent (ange-ftp-get-file-entry (ange-ftp-file-name-as-directory name)))) (if (stringp file-ent) - (file-directory-p + ;; Calling file-directory-p doesn't work because ange-ftp + ;; is temporarily disabled for this operation. + (ange-ftp-file-directory-p (ange-ftp-expand-symlink file-ent (file-name-directory (directory-file-name name)))) @@ -3640,8 +3642,7 @@ ;; (set (make-local-variable 'copy-cont) cont)))) ;; ;; (defun ange-ftp-copy-file-locally-sentinel (proc status) -;; (save-excursion -;; (set-buffer (process-buffer proc)) +;; (with-current-buffer (process-buffer proc) ;; (let ((cont copy-cont) ;; (result (buffer-string))) ;; (unwind-protect @@ -4476,21 +4477,38 @@ ;; `ange-ftp-ls' handles this. (defun ange-ftp-insert-directory (file switches &optional wildcard full) - (let ((parsed (ange-ftp-ftp-name (expand-file-name file))) - tem) - (if parsed - (if (and (not wildcard) - (setq tem (file-symlink-p (directory-file-name file)))) - (ange-ftp-insert-directory - (ange-ftp-expand-symlink - tem (file-name-directory (directory-file-name file))) - switches wildcard full) - (insert - (if wildcard - (let ((default-directory (file-name-directory file))) - (ange-ftp-ls (file-name-nondirectory file) switches nil nil t)) - (ange-ftp-ls file switches full)))) - (ange-ftp-real-insert-directory file switches wildcard full)))) + (if (not (ange-ftp-ftp-name (expand-file-name file))) + (ange-ftp-real-insert-directory file switches wildcard full) + ;; We used to follow symlinks on `file' here. Apparently it was done + ;; because some FTP servers react to "ls foo" by listing the symlink foo + ;; rather than the directory it points to. Now that ange-ftp-ls uses + ;; "cd foo; ls" instead, this is not necesssary any more. + (insert + (cond + (wildcard + (let ((default-directory (file-name-directory file))) + (ange-ftp-ls (file-name-nondirectory file) switches nil nil t))) + (full + (ange-ftp-ls file switches 'parse)) + (t + ;; If `full' is nil we're going to do `ls' for a single file. + ;; Problem is that for various reasons, ange-ftp-ls needs to cd and + ;; then do an ls of current dir, which obviously won't work if we + ;; want to ls a file. So instead, we get a full listing of the + ;; parent directory and extract the line corresponding to `file'. + (when (string-match "d\\'" switches) + ;; Remove "d" which dired added to `switches'. + (setq switches (substring switches 0 (match-beginning 0)))) + (let* ((dirlist (ange-ftp-ls (or (file-name-directory file) ".") + switches nil)) + (filename (file-name-nondirectory (directory-file-name file))) + (case-fold-search nil)) + ;; FIXME: This presumes a particular output format, which is + ;; basically Unix. + (if (string-match (concat "^.+[^ ] " (regexp-quote filename) + "\\( -> .*\\)?[@/*=]?\n") dirlist) + (match-string 0 dirlist) + ""))))))) (defun ange-ftp-dired-uncache (dir) (if (ange-ftp-ftp-name (expand-file-name dir)) @@ -4502,10 +4520,8 @@ (defun ange-ftp-file-name-sans-versions (file keep-backup-version) (let* ((short (ange-ftp-abbreviate-filename file)) (parsed (ange-ftp-ftp-name short)) - func) - (if parsed - (setq func (cdr (assq (ange-ftp-host-type (car parsed)) - ange-ftp-sans-version-alist)))) + (func (if parsed (cdr (assq (ange-ftp-host-type (car parsed)) + ange-ftp-sans-version-alist))))) (if func (funcall func file keep-backup-version) (ange-ftp-real-file-name-sans-versions file keep-backup-version)))) @@ -4649,10 +4665,7 @@ ;; target marker-char buffer overwrite-query ;; overwrite-backup-query failures skipped ;; success-count total) -;; (let ((old-buf (current-buffer))) -;; (unwind-protect -;; (progn -;; (set-buffer buffer) +;; (with-current-buffer buffer ;; (if (null fn-list) ;; (ange-ftp-dcf-3 failures operation total skipped ;; success-count buffer) @@ -4724,8 +4737,7 @@ ;; overwrite-query ;; overwrite-backup-query ;; failures skipped success-count -;; total)))))))) -;; (set-buffer old-buf)))) +;; total))))))))) ;;(defun ange-ftp-dcf-2 (result line err ;; file-creator operation fn-list @@ -4739,10 +4751,7 @@ ;; overwrite-backup-query ;; failures skipped success-count ;; total) -;; (let ((old-buf (current-buffer))) -;; (unwind-protect -;; (progn -;; (set-buffer buffer) +;; (with-current-buffer buffer ;; (if (or err (not result)) ;; (progn ;; (setq failures (cons (dired-make-relative from) failures)) @@ -4765,15 +4774,11 @@ ;; overwrite-query ;; overwrite-backup-query ;; failures skipped success-count -;; total)) -;; (set-buffer old-buf)))) +;; total))) ;;(defun ange-ftp-dcf-3 (failures operation total skipped success-count ;; buffer) -;; (let ((old-buf (current-buffer))) -;; (unwind-protect -;; (progn -;; (set-buffer buffer) +;; (with-current-buffer buffer ;; (cond ;; (failures ;; (dired-log-summary @@ -4788,8 +4793,7 @@ ;; (t ;; (message "%s: %s file%s." ;; operation success-count (dired-plural-s success-count)))) -;; (dired-move-to-filename)) -;; (set-buffer old-buf)))) +;; (dired-move-to-filename))) ;;;; ----------------------------------------------- ;;;; Unix Descriptive Listing (dl) Support diff -r 7a3090aca393 -r 2a679c81f552 lisp/net/eudcb-ldap.el --- a/lisp/net/eudcb-ldap.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/net/eudcb-ldap.el Sun Oct 09 20:00:17 2005 +0000 @@ -194,7 +194,7 @@ "Check if the current LDAP server has a configured search base." (unless (or (eudc-ldap-get-host-parameter eudc-server 'base) ldap-default-base - (null (y-or-n-p "No search base defined. Configure it now ?"))) + (null (y-or-n-p "No search base defined. Configure it now? "))) ;; If the server is not in ldap-host-parameters-alist we add it for the ;; user (if (null (assoc eudc-server ldap-host-parameters-alist)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/net/newsticker.el --- a/lisp/net/newsticker.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/net/newsticker.el Sun Oct 09 20:00:17 2005 +0000 @@ -10,7 +10,6 @@ ;; Created: 17. June 2003 ;; Keywords: News, RSS ;; Time-stamp: "26. August 2005, 16:33:46 (ulf)" -;; CVS-Version: $Id: newsticker.el,v 1.3 2005/09/13 08:47:44 lektu Exp $ (defconst newsticker-version "1.8" "Version number of newsticker.el.") @@ -27,9 +26,8 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -;; USA +;; along with this program; if not, write to the Free Software Foundation, +;; Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ;; ====================================================================== ;;; Commentary: @@ -3429,7 +3427,7 @@ (setq newsticker--item-position 0)) (setq newsticker--prev-message (nth newsticker--item-position newsticker--item-list)) - (message newsticker--prev-message)))) + (message "%s" newsticker--prev-message)))) (defun newsticker--display-scroll () "Called from the display timer. @@ -3465,7 +3463,7 @@ (setq subtext (substring subtext 0 t-width)) (setq t-width (1- t-width)))) ;; show the ticker text and save current position - (message subtext) + (message "%s" subtext) (setq newsticker--prev-message subtext) (setq newsticker--item-position (1+ i)) (when (>= newsticker--item-position l) diff -r 7a3090aca393 -r 2a679c81f552 lisp/net/rcompile.el --- a/lisp/net/rcompile.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/net/rcompile.el Sun Oct 09 20:00:17 2005 +0000 @@ -138,7 +138,7 @@ remote-compile-host) user (if remote-compile-prompt-for-user (read-from-minibuffer (format - "Compile by user (default %s)" + "Compile by user (default %s): " (or remote-compile-user (user-login-name))) "" nil nil diff -r 7a3090aca393 -r 2a679c81f552 lisp/net/tramp.el --- a/lisp/net/tramp.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/net/tramp.el Sun Oct 09 20:00:17 2005 +0000 @@ -136,7 +136,7 @@ ;; Avoid byte-compiler warnings if the byte-compiler supports this. ;; Currently, XEmacs supports this. (eval-when-compile - (when (fboundp 'byte-compiler-options) + (when (featurep 'xemacs) (let (unused-vars) ; Pacify Emacs byte-compiler (defalias 'warnings 'identity) ; Pacify Emacs byte-compiler (byte-compiler-options (warnings (- unused-vars)))))) @@ -822,9 +822,11 @@ :type '(repeat string)) (defcustom tramp-login-prompt-regexp - ".*ogin: *" + ".*ogin\\( .*\\)?: *" "*Regexp matching login-like prompts. -The regexp should match at end of buffer." +The regexp should match at end of buffer. + +Sometimes the prompt is reported to look like \"login as:\"." :group 'tramp :type 'regexp) @@ -3679,7 +3681,7 @@ (let ((tmpbuf (get-buffer-create " *tramp tmp*"))) (set-buffer tmpbuf) (erase-buffer) - (insert-buffer tramp-buf) + (insert-buffer-substring tramp-buf) (tramp-message-for-buffer multi-method method user host 6 "Decoding remote file %s with function %s..." diff -r 7a3090aca393 -r 2a679c81f552 lisp/obsolete/fast-lock.el --- a/lisp/obsolete/fast-lock.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/obsolete/fast-lock.el Sun Oct 09 20:00:17 2005 +0000 @@ -226,10 +226,10 @@ (progn (when temp-message (setq current-message (current-message)) - (message temp-message)) + (message "%s" temp-message)) ,@body) (when temp-message - (message current-message)))))) + (message "%s" current-message)))))) ;; ;; We use this for compatibility with a future Emacs. (or (fboundp 'defcustom) diff -r 7a3090aca393 -r 2a679c81f552 lisp/outline.el --- a/lisp/outline.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/outline.el Sun Oct 09 20:00:17 2005 +0000 @@ -685,7 +685,7 @@ (outline-previous-visible-heading 1)) (setq beg (point)) (outline-end-of-subtree) - (push-mark (point)) + (push-mark (point) nil t) (goto-char beg))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/pcomplete.el --- a/lisp/pcomplete.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/pcomplete.el Sun Oct 09 20:00:17 2005 +0000 @@ -1138,7 +1138,7 @@ (fboundp 'Info-goto-node)) (listp pcomplete-help))) (if (listp pcomplete-help) - (message (eval pcomplete-help)) + (message "%s" (eval pcomplete-help)) (save-window-excursion (info)) (switch-to-buffer-other-window "*info*") (funcall (symbol-function 'Info-goto-node) pcomplete-help)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/pcvs.el --- a/lisp/pcvs.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/pcvs.el Sun Oct 09 20:00:17 2005 +0000 @@ -1171,7 +1171,7 @@ (interactive) (if (eq last-command 'cvs-help) (describe-function 'cvs-mode) ; would need minor-mode for log-edit-mode - (message + (message "%s" (substitute-command-keys "`\\[cvs-help]':help `\\[cvs-mode-add]':add `\\[cvs-mode-commit]':commit \ `\\[cvs-mode-diff-map]':diff* `\\[cvs-mode-log]':log \ diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/animate.el --- a/lisp/play/animate.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/animate.el Sun Oct 09 20:00:17 2005 +0000 @@ -156,7 +156,7 @@ (defun animate-birthday-present (&optional name) "Display one's birthday present in a new buffer. You can specify the one's name by NAME; the default value is \"Sarah\"." - (interactive (list (read-string "Name (default \"Sarah\"): " + (interactive (list (read-string "Name (default Sarah): " nil nil "Sarah"))) ;; Make a suitable buffer to display the birthday present in. (switch-to-buffer (get-buffer-create (format "*%s*" name))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/decipher.el --- a/lisp/play/decipher.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/decipher.el Sun Oct 09 20:00:17 2005 +0000 @@ -600,7 +600,7 @@ (defun decipher-show-alphabet () "Display the current cipher alphabet in the message line." (interactive) - (message + (message "%s" (mapconcat (lambda (a) (concat (char-to-string (car a)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/gomoku.el --- a/lisp/play/gomoku.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/gomoku.el Sun Oct 09 20:00:17 2005 +0000 @@ -671,11 +671,11 @@ (cond ((< gomoku-number-of-moves 20) "This was a REALLY QUICK win.") (gomoku-human-refused-draw - "I won... Too bad you refused my offer of a draw !") + "I won... Too bad you refused my offer of a draw!") (gomoku-human-took-back - "I won... Taking moves back will not help you !") + "I won... Taking moves back will not help you!") ((not gomoku-emacs-played-first) - "I won... Playing first did not help you much !") + "I won... Playing first did not help you much!") ((and (zerop gomoku-number-of-human-wins) (zerop gomoku-number-of-draws) (> gomoku-number-of-emacs-wins 1)) @@ -688,7 +688,7 @@ (gomoku-human-took-back " I, for one, never take my moves back...") (gomoku-emacs-played-first - ".. so what ?") + ".. so what?") (" Now, let me play first just once.")))) ((eq result 'human-resigned) (setq gomoku-number-of-emacs-wins (1+ gomoku-number-of-emacs-wins)) @@ -758,7 +758,7 @@ (setq gomoku-emacs-is-computing nil) (gomoku-terminate-game 'crash-game) (sit-for 4) - (or (y-or-n-p "Another game ") (error "Chicken !"))) + (or (y-or-n-p "Another game? ") (error "Chicken!"))) (switch-to-buffer gomoku-buffer-name) (gomoku-mode)) (cond @@ -779,14 +779,14 @@ (if (and (> m max-height) (not (eq m gomoku-saved-board-height)) ;; Use EQ because SAVED-BOARD-HEIGHT may be nil - (not (y-or-n-p (format "Do you really want %d rows " m)))) + (not (y-or-n-p (format "Do you really want %d rows? " m)))) (setq m max-height))) (message "One moment, please...") (gomoku-start-game n m) - (if (y-or-n-p "Do you allow me to play first ") + (if (y-or-n-p "Do you allow me to play first? ") (gomoku-emacs-plays) (gomoku-prompt-for-move))) - ((y-or-n-p "Shall we continue our game ") + ((y-or-n-p "Shall we continue our game? ") (gomoku-prompt-for-move)) (t (gomoku-human-resigns)))) @@ -875,9 +875,9 @@ (let (square score) (setq square (gomoku-point-square)) (cond ((null square) - (error "Your point is not on a square. Retry !")) + (error "Your point is not on a square. Retry!")) ((not (zerop (aref gomoku-board square))) - (error "Your point is not on a free square. Retry !")) + (error "Your point is not on a free square. Retry!")) (t (setq score (aref gomoku-score-table square)) (gomoku-play-move square 1) @@ -902,7 +902,7 @@ (sit-for 4) (gomoku-prompt-for-other-game)) ((zerop gomoku-number-of-human-moves) - (message "You have not played yet... Your move ?")) + (message "You have not played yet... Your move?")) (t (message "One moment, please...") ;; It is possible for the user to let Emacs play several consecutive @@ -923,9 +923,9 @@ (gomoku-crash-game)) ((not gomoku-game-in-progress) (message "There is no game in progress")) - ((y-or-n-p "You mean, you resign ") + ((y-or-n-p "You mean, you resign? ") (gomoku-terminate-game 'human-resigned)) - ((y-or-n-p "You mean, we continue ") + ((y-or-n-p "You mean, we continue? ") (gomoku-prompt-for-move)) (t (gomoku-terminate-game 'human-resigned)))) ; OK. Accept it @@ -937,21 +937,21 @@ (defun gomoku-prompt-for-move () "Display a message asking for Human's move." (message (if (zerop gomoku-number-of-human-moves) - "Your move ? (move to a free square and hit X, RET ...)" - "Your move ?")) + "Your move? (move to a free square and hit X, RET ...)" + "Your move?")) ;; This may seem silly, but if one omits the following line (or a similar ;; one), the cursor may very well go to some place where POINT is not. (save-excursion (set-buffer (other-buffer)))) (defun gomoku-prompt-for-other-game () "Ask for another game, and start it." - (if (y-or-n-p "Another game ") + (if (y-or-n-p "Another game? ") (gomoku gomoku-board-width gomoku-board-height) - (error "Chicken !"))) + (error "Chicken!"))) (defun gomoku-offer-a-draw () "Offer a draw and return t if Human accepted it." - (or (y-or-n-p "I offer you a draw. Do you accept it ") + (or (y-or-n-p "I offer you a draw. Do you accept it? ") (not (setq gomoku-human-refused-draw t)))) ;;; diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/landmark.el --- a/lisp/play/landmark.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/landmark.el Sun Oct 09 20:00:17 2005 +0000 @@ -763,9 +763,9 @@ (let (square score) (setq square (lm-point-square)) (cond ((null square) - (error "Your point is not on a square. Retry !")) + (error "Your point is not on a square. Retry!")) ((not (zerop (aref lm-board square))) - (error "Your point is not on a free square. Retry !")) + (error "Your point is not on a free square. Retry!")) (t (setq score (aref lm-score-table square)) (lm-play-move square 1) @@ -790,7 +790,7 @@ (sit-for 4) (lm-prompt-for-other-game)) ((zerop lm-number-of-human-moves) - (message "You have not played yet... Your move ?")) + (message "You have not played yet... Your move?")) (t (message "One moment, please...") ;; It is possible for the user to let Emacs play several consecutive @@ -811,9 +811,9 @@ (lm-crash-game)) ((not lm-game-in-progress) (message "There is no game in progress")) - ((y-or-n-p "You mean, you resign ") + ((y-or-n-p "You mean, you resign? ") (lm-terminate-game 'human-resigned)) - ((y-or-n-p "You mean, we continue ") + ((y-or-n-p "You mean, we continue? ") (lm-prompt-for-move)) (t (lm-terminate-game 'human-resigned)))) ; OK. Accept it @@ -823,23 +823,23 @@ (defun lm-prompt-for-move () "Display a message asking for Human's move." (message (if (zerop lm-number-of-human-moves) - "Your move ? (move to a free square and hit X, RET ...)" - "Your move ?")) + "Your move? (move to a free square and hit X, RET ...)" + "Your move?")) ;; This may seem silly, but if one omits the following line (or a similar ;; one), the cursor may very well go to some place where POINT is not. (save-excursion (set-buffer (other-buffer)))) (defun lm-prompt-for-other-game () "Ask for another game, and start it." - (if (y-or-n-p "Another game ") + (if (y-or-n-p "Another game? ") (if (y-or-n-p "Retain learned weights ") (lm 2) (lm 1)) - (message "Chicken !"))) + (message "Chicken!"))) (defun lm-offer-a-draw () "Offer a draw and return t if Human accepted it." - (or (y-or-n-p "I offer you a draw. Do you accept it ") + (or (y-or-n-p "I offer you a draw. Do you accept it? ") (not (setq lm-human-refused-draw t)))) @@ -1473,7 +1473,7 @@ (lm-plot-square (lm-point-square) 1) (incf lm-number-of-moves) (if lm-output-moves - (message (format "Moves made: %d" lm-number-of-moves)))) + (message "Moves made: %d" lm-number-of-moves))) (defun lm-random-move () @@ -1523,9 +1523,9 @@ (let (square score) (setq square (lm-point-square)) (cond ((null square) - (error "Your point is not on a square. Retry !")) + (error "Your point is not on a square. Retry!")) ((not (zerop (aref lm-board square))) - (error "Your point is not on a free square. Retry !")) + (error "Your point is not on a free square. Retry!")) (t (progn (lm-plot-square square 1) @@ -1678,7 +1678,7 @@ (if (and (> lm-m max-height) (not (eq lm-m lm-saved-board-height)) ;; Use EQ because SAVED-BOARD-HEIGHT may be nil - (not (y-or-n-p (format "Do you really want %d rows " lm-m)))) + (not (y-or-n-p (format "Do you really want %d rows? " lm-m)))) (setq lm-m max-height))) (if lm-one-moment-please (message "One moment, please...")) diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/mpuz.el --- a/lisp/play/mpuz.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/mpuz.el Sun Oct 09 20:00:17 2005 +0000 @@ -400,7 +400,7 @@ (defun mpuz-offer-abort () "Ask if user wants to abort current puzzle." (interactive) - (if (y-or-n-p "Abort game ") + (if (y-or-n-p "Abort game? ") (let ((buf (mpuz-get-buffer))) (message "Mult Puzzle aborted.") (setq mpuz-in-progress nil @@ -444,7 +444,7 @@ (mpuz-ding t)) (t (mpuz-try-proposal letter-char digit-char)))) - (if (y-or-n-p "Start a new game ") + (if (y-or-n-p "Start a new game? ") (mpuz-start-new-game) (message "OK. I won't.")))) @@ -489,7 +489,7 @@ (t "not serious."))))) (message message) (sit-for 4) - (if (y-or-n-p (concat message " Start a new game ")) + (if (y-or-n-p (concat message " Start a new game? ")) (mpuz-start-new-game) (message "Good Bye!")))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/play/zone.el --- a/lisp/play/zone.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/play/zone.el Sun Oct 09 20:00:17 2005 +0000 @@ -179,7 +179,7 @@ (error (funcall restore) (while (not (input-pending-p)) - (message (format "We were zoning when we wrote %s..." pgm)) + (message "We were zoning when we wrote %s..." pgm) (sit-for 3) (message "...here's hoping we didn't hose your buffer!") (sit-for 3))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/printing.el --- a/lisp/printing.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/printing.el Sun Oct 09 20:00:17 2005 +0000 @@ -4,7 +4,7 @@ ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> -;; Time-stamp: <2005/06/11 19:51:32 vinicius> +;; Time-stamp: <2005-09-18 05:57:14 deego> ;; Keywords: wp, print, PostScript ;; Version: 6.8.4 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ @@ -5704,7 +5704,7 @@ (defun pr-interactive-n-up (mess) (or (stringp mess) (setq mess "*")) (save-match-data - (let* ((fmt-prompt "%s[%s] N-up printing: (default 1) ") + (let* ((fmt-prompt "%s[%s] N-up printing (default 1): ") (prompt "") (str (pr-f-read-string (format fmt-prompt prompt mess) "1" nil "1")) int) @@ -6424,7 +6424,7 @@ ;; handlers ((quit error) (ding) - (message (error-message-string data))))) + (message "%s" (error-message-string data))))) (defun pr-interface-printify (&rest ignore) @@ -6449,7 +6449,7 @@ ;; handlers ((quit error) (ding) - (message (error-message-string data))))) + (message "%s" (error-message-string data))))) (defun pr-interface-ps-print (&rest ignore) @@ -6515,7 +6515,7 @@ ;; handlers ((quit error) (ding) - (message (error-message-string data))))) + (message "%s" (error-message-string data))))) (defun pr-i-ps-send () diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/ada-mode.el --- a/lisp/progmodes/ada-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/ada-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -1539,7 +1539,7 @@ (ada-save-exceptions-to-file file-name) - (message (concat "Defining " word " as a casing exception")))) + (message "%s" (concat "Defining " word " as a casing exception")))) (defun ada-case-read-exceptions-from-file (file-name) "Read the content of the casing exception file FILE-NAME." @@ -2191,17 +2191,17 @@ (if (equal (cdr cur-indent) '(0)) (message (concat "same indentation as line " (number-to-string line))) - (message (mapconcat (lambda(x) - (cond - ((symbolp x) - (symbol-name x)) - ((numberp x) - (number-to-string x)) - ((listp x) - (concat "- " (symbol-name (cadr x)))) - )) - (cdr cur-indent) - " + ")))) + (message "%s" (mapconcat (lambda(x) + (cond + ((symbolp x) + (symbol-name x)) + ((numberp x) + (number-to-string x)) + ((listp x) + (concat "- " (symbol-name (cadr x)))) + )) + (cdr cur-indent) + " + ")))) (save-excursion (goto-char (car cur-indent)) (sit-for 1)))) @@ -2214,7 +2214,7 @@ (while command-line-args-left (let ((source (car command-line-args-left))) - (message (concat "formating " source)) + (message "Formating %s" source) (find-file source) (ada-indent-region (point-min) (point-max)) (ada-adjust-case-buffer) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/ada-xref.el --- a/lisp/progmodes/ada-xref.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/ada-xref.el Sun Oct 09 20:00:17 2005 +0000 @@ -325,7 +325,7 @@ ;; Check if there is an environment variable with the same name (if (null value) (if (not (setq value (getenv name))) - (message (concat "No environment variable " name " found")))) + (message "%s" (concat "No environment variable " name " found")))) (cond ((null value) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/cc-cmds.el --- a/lisp/progmodes/cc-cmds.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/cc-cmds.el Sun Oct 09 20:00:17 2005 +0000 @@ -907,7 +907,8 @@ ;; be most disruptive. We'll blink it ourselves ;; afterwards. (old-blink-paren blink-paren-function) - blink-paren-function) + blink-paren-function + (noblink (eq last-input-event ?\())) (self-insert-command (prefix-numeric-value arg)) (if c-syntactic-indentation (indent-according-to-mode)) @@ -982,6 +983,7 @@ (delete-region beg end)))) (and (not executing-kbd-macro) old-blink-paren + (not noblink) (funcall old-blink-paren)))))) (defun c-electric-continued-statement () diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/cc-mode.el --- a/lisp/progmodes/cc-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/cc-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -395,11 +395,6 @@ (make-local-variable 'comment-end) (make-local-variable 'comment-start-skip) (make-local-variable 'comment-multi-line) - (make-local-variable 'paragraph-start) - (make-local-variable 'paragraph-separate) - (make-local-variable 'paragraph-ignore-fill-prefix) - (make-local-variable 'adaptive-fill-mode) - (make-local-variable 'adaptive-fill-regexp) ;; now set their values (setq parse-sexp-ignore-comments t @@ -519,6 +514,7 @@ nil nil ,c-identifier-syntax-modifications c-beginning-of-syntax + (font-lock-lines-before . 1) (font-lock-mark-block-function . c-mark-function))) (add-hook 'font-lock-mode-hook 'c-after-font-lock-init nil t)) @@ -1179,5 +1175,5 @@ (cc-provide 'cc-mode) -;;; arch-tag: 7825e5c4-fd09-439f-a04d-4c13208ba3d7 +;; arch-tag: 7825e5c4-fd09-439f-a04d-4c13208ba3d7 ;;; cc-mode.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/cc-styles.el --- a/lisp/progmodes/cc-styles.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/cc-styles.el Sun Oct 09 20:00:17 2005 +0000 @@ -498,33 +498,34 @@ (let ((comment-line-prefix (concat "[ \t]*\\(" c-current-comment-prefix "\\)[ \t]*"))) - (setq paragraph-start (concat comment-line-prefix - c-paragraph-start - "\\|" - page-delimiter) - paragraph-separate (concat comment-line-prefix - c-paragraph-separate - "\\|" - page-delimiter) - paragraph-ignore-fill-prefix t - adaptive-fill-mode t - adaptive-fill-regexp - (concat comment-line-prefix - (if (default-value 'adaptive-fill-regexp) - (concat "\\(" - (default-value 'adaptive-fill-regexp) - "\\)") - ""))) + (set (make-local-variable 'paragraph-start) + (concat comment-line-prefix + c-paragraph-start + "\\|" + page-delimiter)) + (set (make-local-variable 'paragraph-separate) + (concat comment-line-prefix + c-paragraph-separate + "\\|" + page-delimiter)) + (set (make-local-variable 'paragraph-ignore-fill-prefix) t) + (set (make-local-variable 'adaptive-fill-mode) t) + (set (make-local-variable 'adaptive-fill-regexp) + (concat comment-line-prefix + (if (default-value 'adaptive-fill-regexp) + (concat "\\(" + (default-value 'adaptive-fill-regexp) + "\\)") + ""))) (when (boundp 'adaptive-fill-first-line-regexp) ;; XEmacs (20.x) adaptive fill mode doesn't have this. - (make-local-variable 'adaptive-fill-first-line-regexp) - (setq adaptive-fill-first-line-regexp - (concat "\\`" comment-line-prefix - ;; Maybe we should incorporate the old value here, - ;; but then we have to do all sorts of kludges to - ;; deal with the \` and \' it probably contains. - "\\'"))))) + (set (make-local-variable 'adaptive-fill-first-line-regexp) + (concat "\\`" comment-line-prefix + ;; Maybe we should incorporate the old value here, + ;; but then we have to do all sorts of kludges to + ;; deal with the \` and \' it probably contains. + "\\'"))))) ;; Helper for setting up Filladapt mode. It's not used by CC Mode itself. @@ -626,5 +627,5 @@ (cc-provide 'cc-styles) -;;; arch-tag: c764f61a-96ba-484a-a68f-101c0e9d5d2c +;; arch-tag: c764f61a-96ba-484a-a68f-101c0e9d5d2c ;;; cc-styles.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/cmacexp.el --- a/lisp/progmodes/cmacexp.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/cmacexp.el Sun Oct 09 20:00:17 2005 +0000 @@ -346,13 +346,13 @@ (format "\n#line %d \"%s\"\n" startlinenum filename))) ;; Call the preprocessor. - (if display (message mymsg)) + (if display (message "%s" mymsg)) (setq exit-status (call-process-region 1 (point-max) shell-file-name t (list t tempname) nil "-c" cppcommand)) - (if display (message (concat mymsg "done"))) + (if display (message "%s" (concat mymsg "done"))) (if (= (buffer-size) 0) ;; Empty output is normal after a fatal error. (insert "\nPreprocessor produced no output\n") diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/compile.el --- a/lisp/progmodes/compile.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/compile.el Sun Oct 09 20:00:17 2005 +0000 @@ -490,7 +490,7 @@ (defface compilation-error '((t :inherit font-lock-warning-face)) "Face used to highlight compiler errors." - :group 'font-lock-highlighting-faces + :group 'compilation :version "22.1") (defface compilation-warning @@ -498,7 +498,7 @@ (((class color)) (:foreground "cyan" :weight bold)) (t (:weight bold))) "Face used to highlight compiler warnings." - :group 'font-lock-highlighting-faces + :group 'compilation :version "22.1") (defface compilation-info @@ -511,19 +511,19 @@ (((class color)) (:foreground "green" :weight bold)) (t (:weight bold))) "Face used to highlight compiler information." - :group 'font-lock-highlighting-faces + :group 'compilation :version "22.1") (defface compilation-line-number '((t :inherit font-lock-variable-name-face)) "Face for displaying line numbers in compiler messages." - :group 'font-lock-highlighting-faces + :group 'compilation :version "22.1") (defface compilation-column-number '((t :inherit font-lock-type-face)) "Face for displaying column numbers in compiler messages." - :group 'font-lock-highlighting-faces + :group 'compilation :version "22.1") (defvar compilation-message-face 'underline @@ -614,6 +614,7 @@ ;; This function is the central driver, called when font-locking to gather ;; all information needed to later jump to corresponding source code. ;; Return a property list with all meta information on this error location. + (defun compilation-error-properties (file line end-line col end-col type fmt) (unless (< (next-single-property-change (match-beginning 0) 'directory nil (point)) (point)) @@ -628,11 +629,22 @@ (get-text-property dir 'directory))))) (setq file (cons file (car dir))))) ;; This message didn't mention one, get it from previous - (setq file (previous-single-property-change (point) 'message) - file (or (if file - (car (nth 2 (car (or (get-text-property (1- file) 'message) - (get-text-property file 'message)))))) - '("*unknown*")))) + (let ((prev-pos + ;; Find the previous message. + (previous-single-property-change (point) 'message))) + (if prev-pos + ;; Get the file structure that belongs to it. + (let* ((prev + (or (get-text-property (1- prev-pos) 'message) + (get-text-property prev-pos 'message))) + (prev-struct + (car (nth 2 (car prev))))) + ;; Construct FILE . DIR from that. + (if prev-struct + (setq file (cons (car prev-struct) + (cadr prev-struct)))))) + (unless file + (setq file '("*unknown*"))))) ;; All of these fields are optional, get them only if we have an index, and ;; it matched some part of the message. (and line @@ -887,19 +899,20 @@ :group 'compilation) -(defun compilation-buffer-name (mode-name name-function) +(defun compilation-buffer-name (mode-name mode-command name-function) "Return the name of a compilation buffer to use. If NAME-FUNCTION is non-nil, call it with one argument MODE-NAME to determine the buffer name. Likewise if `compilation-buffer-name-function' is non-nil. -If current buffer is in Compilation mode for the same mode name +If current buffer is the mode MODE-COMMAND, return the name of the current buffer, so that it gets reused. Otherwise, construct a buffer name from MODE-NAME." (cond (name-function (funcall name-function mode-name)) (compilation-buffer-name-function (funcall compilation-buffer-name-function mode-name)) - ((eq major-mode (nth 1 compilation-arguments)) + ((and (eq mode-command major-mode) + (eq major-mode (nth 1 compilation-arguments))) (buffer-name)) (t (concat "*" (downcase mode-name) "*")))) @@ -948,7 +961,7 @@ (with-current-buffer (setq outbuf (get-buffer-create - (compilation-buffer-name name-of-mode name-function))) + (compilation-buffer-name name-of-mode mode name-function))) (let ((comp-proc (get-buffer-process (current-buffer)))) (if comp-proc (if (or (not (eq (process-status comp-proc) 'run)) @@ -1540,7 +1553,7 @@ (dired-other-window (car (get-text-property (point) 'directory))) (push-mark) (setq compilation-current-error (point)) - (next-error 0))) + (next-error-internal))) ;; Return a compilation buffer. ;; If the current buffer is a compilation buffer, return it. @@ -1778,7 +1791,7 @@ marker) (let ((name (expand-file-name (read-file-name - (format "Find this %s in: (default %s) " + (format "Find this %s in (default %s): " compilation-error filename) spec-dir filename t)))) (if (file-directory-p name) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/ebnf2ps.el --- a/lisp/progmodes/ebnf2ps.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/ebnf2ps.el Sun Oct 09 20:00:17 2005 +0000 @@ -5,7 +5,7 @@ ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> -;; Time-stamp: <2004/11/19 22:30:34 vinicius> +;; Time-stamp: <2005-09-18 07:27:20 deego> ;; Keywords: wp, ebnf, PostScript ;; Version: 4.2 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ @@ -4261,7 +4261,7 @@ ebnf-eps-max-height prod-height)) ) (setq ebnf-eps-prod-width prod-width) - (insert-buffer eps-buffer)) + (insert-buffer-substring eps-buffer)) (setq prod-list (cdr prod-list)))) @@ -4674,7 +4674,7 @@ (goto-char the-point) (if ebnf-stop-on-error (error error-msg) - (message error-msg))) + (message "%s" error-msg))) ;; generated output OK (gen-func nil) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/ebrowse.el --- a/lisp/progmodes/ebrowse.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/ebrowse.el Sun Oct 09 20:00:17 2005 +0000 @@ -1798,7 +1798,7 @@ ;; START will be 0. (when (and (boundp 'ebrowse-debug) (symbol-value 'ebrowse-debug)) - (y-or-n-p (format "start = %d" start)) + (y-or-n-p (format "start = %d? " start)) (y-or-n-p pattern)) (setf found (loop do (goto-char (max (point-min) (- start offset))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/etags.el --- a/lisp/progmodes/etags.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/etags.el Sun Oct 09 20:00:17 2005 +0000 @@ -284,7 +284,7 @@ When you find a tag with \\[find-tag], the buffer it finds the tag in is given a local value of this variable which is the name of the tags file the tag was in." - (interactive (list (read-file-name "Visit tags table: (default TAGS) " + (interactive (list (read-file-name "Visit tags table (default TAGS): " default-directory (expand-file-name "TAGS" default-directory) @@ -590,7 +590,7 @@ (car list)) ;; Finally, prompt the user for a file name. (expand-file-name - (read-file-name "Visit tags table: (default TAGS) " + (read-file-name "Visit tags table (default TAGS): " default-directory "TAGS" t)))))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/flymake.el --- a/lisp/progmodes/flymake.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/flymake.el Sun Oct 09 20:00:17 2005 +0000 @@ -183,7 +183,7 @@ are the string substitutions (see `format')." (if (<= level flymake-log-level) (let* ((msg (apply 'format text args))) - (message msg) + (message "%s" msg) ;;(with-temp-buffer ;; (insert msg) ;; (insert "\n") diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/gdb-ui.el --- a/lisp/progmodes/gdb-ui.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/gdb-ui.el Sun Oct 09 20:00:17 2005 +0000 @@ -1337,8 +1337,11 @@ (setq bptno (match-string 1)) (setq flag (char-after (match-beginning 2))) (beginning-of-line) - (if (re-search-forward " in .* at\\s-+" nil t) + (if (re-search-forward " in \\(.*\\) at\\s-+" nil t) (progn + (let ((buffer-read-only nil)) + (add-text-properties (match-beginning 1) (match-end 1) + '(face font-lock-function-name-face))) (looking-at "\\(\\S-+\\):\\([0-9]+\\)") (let ((line (match-string 2)) (buffer-read-only nil) (file (match-string 1))) @@ -1531,17 +1534,31 @@ (defun gdb-info-frames-custom () (with-current-buffer (gdb-get-buffer 'gdb-stack-buffer) (save-excursion - (let ((buffer-read-only nil)) + (let ((buffer-read-only nil) + bl el) (goto-char (point-min)) (while (< (point) (point-max)) - (add-text-properties (line-beginning-position) (line-end-position) + (setq bl (line-beginning-position) + el (line-end-position)) + (add-text-properties bl el '(mouse-face highlight help-echo "mouse-2, RET: Select frame")) - (beginning-of-line) - (when (and (looking-at "^#\\([0-9]+\\)") - (equal (match-string 1) gdb-frame-number)) - (put-text-property (line-beginning-position) (line-end-position) - 'face '(:inverse-video t))) + (goto-char bl) + (when (looking-at "^#\\([0-9]+\\)") + (if (equal (match-string 1) gdb-frame-number) + (put-text-property bl el 'face '(:inverse-video t)) + (when (re-search-forward " in \\([^ ]+\\) (" el t) + (put-text-property (match-beginning 1) (match-end 1) + 'face font-lock-function-name-face) + (setq bl (match-end 0)) + (while (re-search-forward "<\\([^>]+\\)>" el t) + (put-text-property (match-beginning 1) (match-end 1) + 'face font-lock-function-name-face)) + (goto-char bl) + (while (re-search-forward "\\(\\(\\sw\\|[_.]\\)+\\)=" el t) + (put-text-property (match-beginning 1) (match-end 1) + 'face font-lock-variable-name-face)) + ))) (forward-line 1)))))) (defun gdb-stack-buffer-name () @@ -1648,6 +1665,14 @@ (define-key map [mouse-2] 'gdb-threads-select) map)) +(defvar gdb-threads-font-lock-keywords + '( + (") +\\([^ ]+\\) (" (1 font-lock-function-name-face)) + ("in \\([^ ]+\\) (" (1 font-lock-function-name-face)) + ("\\(\\(\\sw\\|[_.]\\)+\\)=" (1 font-lock-variable-name-face)) + ) + "Font lock keywords used in `gdb-threads-mode'.") + (defun gdb-threads-mode () "Major mode for gdb frames. @@ -1657,6 +1682,8 @@ (setq mode-name "Threads") (setq buffer-read-only t) (use-local-map gdb-threads-mode-map) + (set (make-local-variable 'font-lock-defaults) + '(gdb-threads-font-lock-keywords)) (run-mode-hooks 'gdb-threads-mode-hook) 'gdb-invalidate-threads) @@ -1702,6 +1729,12 @@ (define-key map "q" 'kill-this-buffer) map)) +(defvar gdb-registers-font-lock-keywords + '( + ("^[^ ]+" . font-lock-variable-name-face) + ) + "Font lock keywords used in `gdb-registers-mode'.") + (defun gdb-registers-mode () "Major mode for gdb registers. @@ -1711,6 +1744,8 @@ (setq mode-name "Registers:") (setq buffer-read-only t) (use-local-map gdb-registers-mode-map) + (set (make-local-variable 'font-lock-defaults) + '(gdb-registers-font-lock-keywords)) (run-mode-hooks 'gdb-registers-mode-hook) (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 'gdb-invalidate-registers @@ -1955,6 +1990,12 @@ (define-key map (vector 'header-line 'down-mouse-1) 'ignore) map)) +(defvar gdb-memory-font-lock-keywords + '(;; <__function.name+n> + ("<\\(\\(\\sw\\|[_.]\\)+\\)\\(\\+[0-9]+\\)?>" (1 font-lock-function-name-face)) + ) + "Font lock keywords used in `gdb-memory-mode'.") + (defun gdb-memory-mode () "Major mode for examining memory. @@ -2026,6 +2067,8 @@ 'help-echo "mouse-3: Select unit size" 'mouse-face 'mode-line-highlight 'local-map gdb-memory-unit-keymap)))) + (set (make-local-variable 'font-lock-defaults) + '(gdb-memory-font-lock-keywords)) (run-mode-hooks 'gdb-memory-mode-hook) 'gdb-invalidate-memory) @@ -2094,6 +2137,23 @@ (define-key map "q" 'kill-this-buffer) map)) +(defvar gdb-local-font-lock-keywords + '( + ;; var = (struct struct_tag) value + ( "\\(^\\(\\sw\\|[_.]\\)+\\) += +(\\(struct\\) \\(\\(\\sw\\|[_.]\\)+\\)" + (1 font-lock-variable-name-face) + (3 font-lock-keyword-face) + (4 font-lock-type-face)) + ;; var = (type) value + ( "\\(^\\(\\sw\\|[_.]\\)+\\) += +(\\(\\(\\sw\\|[_.]\\)+\\)" + (1 font-lock-variable-name-face) + (3 font-lock-type-face)) + ;; var = val + ( "\\(^\\(\\sw\\|[_.]\\)+\\) += +[^(]" + (1 font-lock-variable-name-face)) + ) + "Font lock keywords used in `gdb-local-mode'.") + (defun gdb-locals-mode () "Major mode for gdb locals. @@ -2103,6 +2163,8 @@ (setq mode-name (concat "Locals:" gdb-selected-frame)) (setq buffer-read-only t) (use-local-map gdb-locals-mode-map) + (set (make-local-variable 'font-lock-defaults) + '(gdb-local-font-lock-keywords)) (run-mode-hooks 'gdb-locals-mode-hook) (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 'gdb-invalidate-locals diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/glasses.el --- a/lisp/progmodes/glasses.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/glasses.el Sun Oct 09 20:00:17 2005 +0000 @@ -195,6 +195,16 @@ (looking-at glasses-uncapitalize-regexp)))) (overlay-put o 'invisible t) (overlay-put o 'after-string (downcase (match-string n)))))) + ;; Separator change + (unless (string= glasses-separator "_") + (goto-char beg) + (while (re-search-forward "[a-zA-Z0-9]\\(_+\\)[a-zA-Z0-9]" end t) + (goto-char (match-beginning 1)) + (while (eql (char-after) ?\_) + (let ((o (glasses-make-overlay (point) (1+ (point))))) + ;; `concat' ensures the character properties won't merge + (overlay-put o 'display (concat glasses-separator))) + (forward-char)))) ;; Parentheses (when glasses-separate-parentheses-p (goto-char beg) @@ -227,6 +237,13 @@ (let ((n (if (match-string 1) 1 2))) (replace-match "" t nil nil n) (goto-char (match-end n)))) + (unless (string= glasses-separator "_") + (goto-char (point-min)) + (while (re-search-forward (format "[a-zA-Z0-9]\\(%s+\\)[a-zA-Z0-9]" + separator) + nil t) + (replace-match "_" nil nil nil 1) + (goto-char (match-beginning 1)))) (when glasses-separate-parentheses-p (goto-char (point-min)) (while (re-search-forward "[a-zA-Z]_*\\( \\)\(" nil t) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/gud.el --- a/lisp/progmodes/gud.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/gud.el Sun Oct 09 20:00:17 2005 +0000 @@ -1865,7 +1865,7 @@ ;; Anything else means the input is invalid. (t - (message (format "Error parsing file %s." file)) + (message "Error parsing file %s." file) (throw 'abort nil)))))) l)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/idlw-shell.el --- a/lisp/progmodes/idlw-shell.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/idlw-shell.el Sun Oct 09 20:00:17 2005 +0000 @@ -2263,7 +2263,7 @@ (idlwave-shell-display-line (nth idlwave-shell-calling-stack-index stack) nil (unless idlwave-shell-electric-debug-mode 'no-debug)) - (message (or message + (message "%s" (or message (format "In routine %s (stack level %d)" idlwave-shell-calling-stack-routine (- idlwave-shell-calling-stack-index)))))) @@ -2462,7 +2462,7 @@ (beep) (y-or-n-p (concat "Okay to recompile file " - (idlwave-shell-bp-get bp 'file) " "))) + (idlwave-shell-bp-get bp 'file) "? "))) ;; Recompile (progn ;; Clean up before retrying diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/idlwave.el --- a/lisp/progmodes/idlwave.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/idlwave.el Sun Oct 09 20:00:17 2005 +0000 @@ -3995,7 +3995,7 @@ ;; Call etags (if (not (string-match "^[ \\t]*$" item)) (progn - (message (concat "Tagging " item "...")) + (message "%s" (concat "Tagging " item "...")) (setq errbuf (get-buffer-create "*idltags-error*")) (setq status (+ status (if (eq 0 (call-process @@ -5188,7 +5188,7 @@ message-base (not (string= idlwave-library-catalog-libname old-libname))) - (message (concat message-base + (message "%s" (concat message-base idlwave-library-catalog-libname)) (setq old-libname idlwave-library-catalog-libname)) (when idlwave-library-catalog-routines diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/pascal.el --- a/lisp/progmodes/pascal.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/pascal.el Sun Oct 09 20:00:17 2005 +0000 @@ -1470,7 +1470,7 @@ default "")) (label (if (not (string= default "")) ;; Do completion with default - (completing-read (concat "Label: (default " default ") ") + (completing-read (concat "Label (default " default "): ") 'pascal-comp-defun nil t "") ;; There is no default value. Complete without it (completing-read "Label: " diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/ps-mode.el --- a/lisp/progmodes/ps-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/ps-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -630,7 +630,7 @@ (current-column)) (error (ding) - (message (error-message-string err)) + (message "%s" (error-message-string err)) 0)) (let (target) (if (not (re-search-backward "[^ \t\n\r\f][ \t\n\r\f]*\\=" nil t)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/python.el --- a/lisp/progmodes/python.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/python.el Sun Oct 09 20:00:17 2005 +0000 @@ -1341,9 +1341,9 @@ nil nil symbol)))) (if (equal symbol "") (error "No symbol")) (let* ((func `(lambda () - (comint-redirect-send-command (format "emacs.ehelp(%S)\n" - ,symbol) - "*Help*" nil)))) + (comint-redirect-send-command + (format "emacs.ehelp(%S, globals(), locals())\n" ,symbol) + "*Help*" nil)))) ;; Ensure we have a suitable help buffer. ;; Fixme: Maybe process `Related help topics' a la help xrefs and ;; allow C-c C-f in help buffer. diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/scheme.el --- a/lisp/progmodes/scheme.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/scheme.el Sun Oct 09 20:00:17 2005 +0000 @@ -90,20 +90,26 @@ (modify-syntax-entry ?\] ")[ " st) (modify-syntax-entry ?{ "(} " st) (modify-syntax-entry ?} "){ " st) - (modify-syntax-entry ?\| "\" 23b" st) + (modify-syntax-entry ?\| "\" 23bn" st) + ;; Guile allows #! ... !# comments. + ;; But SRFI-22 defines the comment as #!...\n instead. + ;; Also Guile says that the !# should be on a line of its own. + ;; It's too difficult to get it right, for too little benefit. + ;; (modify-syntax-entry ?! "_ 2" st) ;; Other atom delimiters (modify-syntax-entry ?\( "() " st) (modify-syntax-entry ?\) ")( " st) - (modify-syntax-entry ?\; "< " st) - (modify-syntax-entry ?\" "\" " st) + ;; It's used for single-line comments as well as for #;(...) sexp-comments. + (modify-syntax-entry ?\; "< 2 " st) + (modify-syntax-entry ?\" "\" " st) (modify-syntax-entry ?' "' " st) (modify-syntax-entry ?` "' " st) ;; Special characters (modify-syntax-entry ?, "' " st) (modify-syntax-entry ?@ "' " st) - (modify-syntax-entry ?# "' 14bn" st) + (modify-syntax-entry ?# "' 14b" st) (modify-syntax-entry ?\\ "\\ " st) st)) @@ -157,19 +163,24 @@ (make-local-variable 'parse-sexp-ignore-comments) (setq parse-sexp-ignore-comments t) (make-local-variable 'lisp-indent-function) - (set lisp-indent-function 'scheme-indent-function) + (setq lisp-indent-function 'scheme-indent-function) (setq mode-line-process '("" scheme-mode-line-process)) (set (make-local-variable 'imenu-case-fold-search) t) (setq imenu-generic-expression scheme-imenu-generic-expression) (set (make-local-variable 'imenu-syntax-alist) '(("+-*/.<>=?!$%_&~^:" . "w"))) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults - '((scheme-font-lock-keywords - scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) - nil t (("+-*/.<>=!?$%_&~^:#" . "w")) beginning-of-defun - (font-lock-mark-block-function . mark-defun) - (font-lock-syntactic-face-function . lisp-font-lock-syntactic-face-function)))) + (set (make-local-variable 'font-lock-defaults) + '((scheme-font-lock-keywords + scheme-font-lock-keywords-1 scheme-font-lock-keywords-2) + nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14")) + beginning-of-defun + (font-lock-mark-block-function . mark-defun) + (font-lock-syntactic-face-function + . scheme-font-lock-syntactic-face-function) + (parse-sexp-lookup-properties . t) + (font-lock-extra-managed-props syntax-table))) + (set (make-local-variable 'lisp-doc-string-elt-property) + 'scheme-doc-string-elt)) (defvar scheme-mode-line-process "") @@ -345,6 +356,44 @@ (defvar scheme-font-lock-keywords scheme-font-lock-keywords-1 "Default expressions to highlight in Scheme modes.") +(defconst scheme-sexp-comment-syntax-table + (let ((st (make-syntax-table scheme-mode-syntax-table))) + (modify-syntax-entry ?\; "." st) + (modify-syntax-entry ?\n " " st) + (modify-syntax-entry ?# "'" st) + st)) + +(put 'lambda 'scheme-doc-string-elt 2) +;; Docstring's pos in a `define' depends on whether it's a var or fun def. +(put 'define 'scheme-doc-string-elt + (lambda () + ;; The function is called with point right after "define". + (forward-comment (point-max)) + (if (eq (char-after) ?\() 2 0))) + +(defun scheme-font-lock-syntactic-face-function (state) + (when (and (null (nth 3 state)) + (eq (char-after (nth 8 state)) ?#) + (eq (char-after (1+ (nth 8 state))) ?\;)) + ;; It's a sexp-comment. Tell parse-partial-sexp where it ends. + (save-excursion + (let ((pos (point)) + (end + (condition-case err + (let ((parse-sexp-lookup-properties nil)) + (goto-char (+ 2 (nth 8 state))) + ;; FIXME: this doesn't handle the case where the sexp + ;; itself contains a #; comment. + (forward-sexp 1) + (point)) + (scan-error (nth 2 err))))) + (when (< pos (- end 2)) + (put-text-property pos (- end 2) + 'syntax-table scheme-sexp-comment-syntax-table)) + (put-text-property (- end 1) end 'syntax-table '(12))))) + ;; Choose the face to use. + (lisp-font-lock-syntactic-face-function state)) + ;;;###autoload (define-derived-mode dsssl-mode scheme-mode "DSSSL" "Major mode for editing DSSSL code. diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/sh-script.el --- a/lisp/progmodes/sh-script.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/sh-script.el Sun Oct 09 20:00:17 2005 +0000 @@ -2572,9 +2572,9 @@ (if (numberp blinkpos) (save-excursion (goto-char blinkpos) - (message msg) + (if msg (message "%s" msg) (message nil)) (sit-for blink-matching-delay)) - (message msg))) + (if msg (message "%s" msg) (message nil)))) (defun sh-show-indent (arg) "Show the how the currently line would be indented. @@ -2591,7 +2591,7 @@ (curr-indent (current-indentation)) val msg) (if (stringp var) - (message (setq msg var)) + (message "%s" (setq msg var)) (setq val (sh-calculate-indent info)) (if (eq curr-indent val) @@ -2610,8 +2610,8 @@ (if (and info (listp (car info)) (eq (car (car info)) t)) (sh-blink (nth 1 (car info)) msg) - (message msg))) - (message msg)) + (message "%s" msg))) + (message "%s" msg)) )) (defun sh-set-indent () @@ -2624,7 +2624,7 @@ (var (sh-get-indent-var-for-line info)) val old-val indent-val) (if (stringp var) - (message (format "Cannot set indent - %s" var)) + (message "Cannot set indent - %s" var) (setq old-val (symbol-value var)) (setq val (sh-read-variable var)) (condition-case nil @@ -2675,7 +2675,7 @@ (curr-indent (current-indentation))) (cond ((stringp var) - (message (format "Cannot learn line - %s" var))) + (message "Cannot learn line - %s" var)) ((eq var 'sh-indent-comment) ;; This is arbitrary... ;; - if curr-indent is 0, set to curr-indent diff -r 7a3090aca393 -r 2a679c81f552 lisp/progmodes/vhdl-mode.el --- a/lisp/progmodes/vhdl-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/progmodes/vhdl-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -2157,7 +2157,7 @@ (defun vhdl-warning (string &optional nobeep) "Print out warning STRING and beep." - (message (concat "WARNING: " string)) + (message "WARNING: %s" string) (unless (or nobeep noninteractive) (beep))) (defun vhdl-print-warnings () @@ -2165,7 +2165,7 @@ (let ((no-warnings (length vhdl-warnings))) (setq vhdl-warnings (nreverse vhdl-warnings)) (while vhdl-warnings - (message (concat "WARNING: " (car vhdl-warnings))) + (message "WARNING: %s" (car vhdl-warnings)) (setq vhdl-warnings (cdr vhdl-warnings))) (beep) (when (> no-warnings 1) @@ -10605,7 +10605,7 @@ (vhdl-template-invoked-by-hook t)) (let ((caught (catch 'abort (funcall func)))) - (when (stringp caught) (message caught))) + (when (stringp caught) (message "%s" caught))) (when (= invoke-char ?-) (setq abbrev-start-location (point))) ;; delete CR which is still in event queue (if (fboundp 'enqueue-eval-event) @@ -10768,7 +10768,7 @@ (defun vhdl-template-insert-fun (fun) "Call FUN to insert a built-in template." (let ((caught (catch 'abort (when fun (funcall fun))))) - (when (stringp caught) (message caught)))) + (when (stringp caught) (message "%s" caught)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -11695,7 +11695,7 @@ (setq arch-buffer (current-buffer)) (when ent-buffer (set-buffer ent-buffer) (save-buffer)) (set-buffer arch-buffer) (save-buffer)) - (message + (message "%s" (concat (format "Pasting port as testbench \"%s(%s)\"...done" ent-name arch-name) (and ent-file-name @@ -12832,40 +12832,35 @@ (((class color) (background dark)) (:foreground "Pink" :bold t)) (t (:inverse-video t))) "Font lock mode face used to highlight prompts." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-attribute-face '((((class color) (background light)) (:foreground "Orchid")) (((class color) (background dark)) (:foreground "LightSteelBlue")) (t (:italic t :bold t))) "Font lock mode face used to highlight standardized attributes." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-enumvalue-face '((((class color) (background light)) (:foreground "SaddleBrown")) (((class color) (background dark)) (:foreground "BurlyWood")) (t (:italic t :bold t))) "Font lock mode face used to highlight standardized enumeration values." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-function-face '((((class color) (background light)) (:foreground "Cyan4")) (((class color) (background dark)) (:foreground "Orchid1")) (t (:italic t :bold t))) "Font lock mode face used to highlight standardized functions and packages." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-directive-face '((((class color) (background light)) (:foreground "CadetBlue")) (((class color) (background dark)) (:foreground "Aquamarine")) (t (:italic t :bold t))) "Font lock mode face used to highlight directives." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-reserved-words-face '((((class color) (background light)) (:foreground "Orange" :bold t)) @@ -12874,16 +12869,14 @@ (((class color) (background dark)) (:foreground "Yellow" :bold t)) (t ())) "Font lock mode face used to highlight additional reserved words." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) (defface vhdl-font-lock-translate-off-face '((((class color) (background light)) (:background "LightGray")) (((class color) (background dark)) (:background "DimGray")) (t ())) "Font lock mode face used to background highlight translate-off regions." - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces) + :group 'vhdl-highlight-faces) ;; font lock mode faces used to highlight words with special syntax. (let ((syntax-alist vhdl-special-syntax-alist)) @@ -12897,8 +12890,7 @@ (t ())) ,(concat "Font lock mode face used to highlight " (nth 0 (car syntax-alist)) ".") - :group 'vhdl-highlight-faces - :group 'font-lock-highlighting-faces)) + :group 'vhdl-highlight-faces)) (setq syntax-alist (cdr syntax-alist)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -13996,11 +13988,11 @@ (speedbar-add-mode-functions-list '("vhdl directory" (speedbar-item-info . vhdl-speedbar-item-info) - (speedbar-line-path . speedbar-files-line-path))) + (speedbar-line-directory . speedbar-files-line-path))) (speedbar-add-mode-functions-list '("vhdl project" (speedbar-item-info . vhdl-speedbar-item-info) - (speedbar-line-path . vhdl-speedbar-line-project))) + (speedbar-line-directory . vhdl-speedbar-line-project))) ;; keymap (unless vhdl-speedbar-key-map (setq vhdl-speedbar-key-map (speedbar-make-specialized-keymap)) @@ -14265,9 +14257,9 @@ ((save-excursion (beginning-of-line) (looking-at "[^0-9]")) (re-search-forward "[0-9]+:" nil t) (vhdl-scan-directory-contents - (abbreviate-file-name (speedbar-line-path)))) + (abbreviate-file-name (speedbar-line-directory)))) ;; current directory - (t (setq path (speedbar-line-path)) + (t (setq path (speedbar-line-directory)) (string-match "^\\(.+[/\\]\\)" path) (vhdl-scan-directory-contents (abbreviate-file-name (match-string 1 path))))) @@ -14985,7 +14977,7 @@ (cond ((string-match "+" text) ; we have to expand this dir (setq speedbar-shown-directories (cons (expand-file-name - (concat (speedbar-line-path indent) token "/")) + (concat (speedbar-line-directory indent) token "/")) speedbar-shown-directories)) (speedbar-change-expand-button-char ?-) (speedbar-reset-scanners) @@ -14994,12 +14986,12 @@ (end-of-line) (forward-char 1) (vhdl-speedbar-insert-dirs (speedbar-file-lists - (concat (speedbar-line-path indent) token "/")) + (concat (speedbar-line-directory indent) token "/")) (1+ indent)) (speedbar-reset-scanners) (vhdl-speedbar-insert-dir-hierarchy (abbreviate-file-name - (concat (speedbar-line-path indent) token "/")) + (concat (speedbar-line-directory indent) token "/")) (1+ indent) speedbar-power-click))) (vhdl-speedbar-update-current-unit t t)) ((string-match "-" text) ; we have to contract this node @@ -15007,7 +14999,7 @@ (let ((oldl speedbar-shown-directories) (newl nil) (td (expand-file-name - (concat (speedbar-line-path indent) token)))) + (concat (speedbar-line-directory indent) token)))) (while oldl (if (not (string-match (concat "^" (regexp-quote td)) (car oldl))) (setq newl (cons (car oldl) newl))) @@ -15093,7 +15085,7 @@ (if vhdl-speedbar-show-projects (vhdl-speedbar-line-project) (abbreviate-file-name - (file-name-as-directory (speedbar-line-path indent))))) + (file-name-as-directory (speedbar-line-directory indent))))) (defun vhdl-speedbar-line-project (&optional indent) "Get currently displayed project name." @@ -15244,7 +15236,7 @@ (unit-name (vhdl-speedbar-line-text)) (vhdl-project (vhdl-speedbar-line-project)) (directory (file-name-as-directory - (or (speedbar-line-file) (speedbar-line-path))))) + (or (speedbar-line-file) (speedbar-line-directory))))) (if (fboundp 'speedbar-select-attached-frame) (speedbar-select-attached-frame) (select-frame speedbar-attached-frame)) @@ -15256,7 +15248,7 @@ (interactive) (let ((vhdl-project (vhdl-speedbar-line-project)) (default-directory (file-name-as-directory - (or (speedbar-line-file) (speedbar-line-path))))) + (or (speedbar-line-file) (speedbar-line-directory))))) (vhdl-generate-makefile))) (defun vhdl-speedbar-check-unit (design-unit) @@ -15498,7 +15490,7 @@ (setq arch-buffer (current-buffer)) (when ent-buffer (set-buffer ent-buffer) (save-buffer)) (set-buffer arch-buffer) (save-buffer) - (message + (message "%s" (concat (format "Creating component \"%s(%s)\"...done" ent-name arch-name) (and ent-file-name (format "\n File created: \"%s\"" ent-file-name)) @@ -16120,7 +16112,7 @@ (vhdl-template-footer) (vhdl-comment-display-line) (insert "\n")) (save-buffer)) - (message + (message "%s" (concat (format "Generating configuration \"%s\"...done" conf-name) (and conf-file-name (format "\n File created: \"%s\"" conf-file-name)))))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ps-mule.el --- a/lisp/ps-mule.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ps-mule.el Sun Oct 09 20:00:17 2005 +0000 @@ -1415,7 +1415,8 @@ (goto-char from) (while (and (<= (length char-pos-list) max-unprintable-chars) (re-search-forward "\\cu" to t)) - (push (cons (preceding-char) (1- (point))) char-pos-list)))) + (or (aref ps-print-translation-table (preceding-char)) + (push (cons (preceding-char) (1- (point))) char-pos-list))))) (with-output-to-temp-buffer "*Warning*" (with-current-buffer standard-output (when char-pos-list diff -r 7a3090aca393 -r 2a679c81f552 lisp/ps-print.el --- a/lisp/ps-print.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ps-print.el Sun Oct 09 20:00:17 2005 +0000 @@ -4663,7 +4663,7 @@ (let* ((name (concat (file-name-nondirectory (or (buffer-file-name) (buffer-name))) ".ps")) - (prompt (format "Save PostScript to file: (default %s) " name)) + (prompt (format "Save PostScript to file (default %s): " name)) (res (read-file-name prompt default-directory name nil))) (while (cond ((file-directory-p res) (ding) diff -r 7a3090aca393 -r 2a679c81f552 lisp/recentf.el --- a/lisp/recentf.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/recentf.el Sun Oct 09 20:00:17 2005 +0000 @@ -260,14 +260,17 @@ :group 'recentf :type 'hook) -(defcustom recentf-filename-handler nil - "Function to call to process filename handled by recentf. -It is passed a filename to give a chance to transform it. -If it returns nil, the filename is left unchanged." +(defcustom recentf-filename-handlers nil + "Functions to post process recent file names. +They are successively passed a file name to transform it." :group 'recentf - :type '(choice (const :tag "None" nil) - (const abbreviate-file-name) - function)) + :type '(choice + (const :tag "None" nil) + (repeat :tag "Functions" + (choice + (const file-truename) + (const abbreviate-file-name) + (function :tag "Other function"))))) (defcustom recentf-show-file-shortcuts-flag t "Whether to show ``[N]'' for the Nth item up to 10. @@ -362,15 +365,25 @@ (and m (setq recentf-list (delq (car m) recentf-list))) (push filename recentf-list))) +(defun recentf-apply-filename-handlers (name) + "Apply `recentf-filename-handlers' to file NAME. +Return the transformed file name, or NAME if any handler failed, or +returned nil." + (or (condition-case nil + (let ((handlers recentf-filename-handlers) + (filename name)) + (while (and filename handlers) + (setq filename (funcall (car handlers) filename) + handlers (cdr handlers))) + filename) + (error nil)) + name)) + (defsubst recentf-expand-file-name (name) - "Convert filename NAME to absolute, and canonicalize it. -See also the function `expand-file-name'. -If defined, call the function `recentf-filename-handler' -to post process the canonical name." - (let* ((filename (expand-file-name name))) - (or (and recentf-filename-handler - (funcall recentf-filename-handler filename)) - filename))) + "Convert file NAME to absolute, and canonicalize it. +NAME is first passed to the function `expand-file-name', then to +`recentf-filename-handlers' to post process it." + (recentf-apply-filename-handlers (expand-file-name name))) (defun recentf-include-p (filename) "Return non-nil if FILENAME should be included in the recent list. @@ -436,23 +449,24 @@ ;;; Menu building ;; (defvar recentf-menu-items-for-commands - (list ["Cleanup list" - recentf-cleanup - :help "Remove all excluded and non-kept files from the recent list" - :active t] - ["Edit list..." - recentf-edit-list - :help "Edit the files that are kept in the recent list" - :active t] - ["Save list now" - recentf-save-list - :help "Save the list of recently opened files now" - :active t] - ["Options..." - (customize-group "recentf") - :help "Customize recently opened files menu and options" - :active t] - ) + (list + ["Cleanup list" + recentf-cleanup + :help "Remove duplicates, and obsoletes files from the recent list" + :active t] + ["Edit list..." + recentf-edit-list + :help "Manually remove files from the recent list" + :active t] + ["Save list now" + recentf-save-list + :help "Save the list of recently opened files now" + :active t] + ["Options..." + (customize-group "recentf") + :help "Customize recently opened files menu and options" + :active t] + ) "List of menu items for recentf commands.") (defvar recentf-menu-filter-commands nil @@ -1236,13 +1250,16 @@ recentf-list)))))) (defun recentf-cleanup () - "Remove all non-kept and excluded files from the recent list." + "Cleanup the recent list. +That is, remove duplicates, non-kept, and excluded files." (interactive) (message "Cleaning up the recentf list...") (let ((n 0) newlist) (dolist (f recentf-list) + (setq f (recentf-expand-file-name f)) (if (and (recentf-include-p f) - (recentf-keep-p f)) + (recentf-keep-p f) + (not (recentf-string-member f newlist))) (push f newlist) (setq n (1+ n)) (message "File %s removed from the recentf list" f))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/rect.el --- a/lisp/rect.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/rect.el Sun Oct 09 20:00:17 2005 +0000 @@ -332,7 +332,7 @@ (list (region-beginning) (region-end) - (read-string (format "String rectangle (default `%s'): " + (read-string (format "String rectangle (default %s): " (or (car string-rectangle-history) "")) nil 'string-rectangle-history (car string-rectangle-history))))) @@ -353,7 +353,7 @@ (list (region-beginning) (region-end) - (read-string (format "String insert rectangle (default `%s'): " + (read-string (format "String insert rectangle (default %s): " (or (car string-rectangle-history) "")) nil 'string-rectangle-history (car string-rectangle-history))))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/replace.el --- a/lisp/replace.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/replace.el Sun Oct 09 20:00:17 2005 +0000 @@ -907,7 +907,7 @@ (input (read-from-minibuffer (if default - (format "List lines matching regexp (default `%s'): " + (format "List lines matching regexp (default %s): " (query-replace-descr default)) "List lines matching regexp: ") nil diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-dir-minus.xpm --- a/lisp/sb-dir-minus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_dir_minus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ...... ", -" .++++++. ", -".+@@@@@@+......... ", -".+@@@@@@@+++++++++. ", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@+++++@@@@@@+#", -".+@@@@@@.....@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -" #++++++++++++++++# ", -" ################ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-dir-plus.xpm --- a/lisp/sb-dir-plus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_dir_plus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ...... ", -" .++++++. ", -".+@@@@@@+......... ", -".+@@@@@@@+++++++++. ", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@+@@@@@@@@+#", -".+@@@@@@@+.@@@@@@@+#", -".+@@@@@+++++@@@@@@+#", -".+@@@@@@.+...@@@@@+#", -".+@@@@@@@+.@@@@@@@+#", -".+@@@@@@@@.@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -" #++++++++++++++++# ", -" ################ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-dir.xpm --- a/lisp/sb-dir.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_dir_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ...... ", -" .++++++. ", -".+@@@@@@+......... ", -".+@@@@@@@+++++++++. ", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -" #++++++++++++++++# ", -" ################ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-image.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/sb-image.el Sun Oct 09 20:00:17 2005 +0000 @@ -0,0 +1,111 @@ +;;; sb-image --- Image management for speedbar + +;;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation + +;; Author: Eric M. Ludlam <zappo@gnu.org> +;; Keywords: file, tags, 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 2, 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: +;; +;; Supporting Image display for Emacs 20 and less, Emacs 21, and XEmacs, +;; is a challenging task, which doesn't take kindly to being byte compiled. +;; When sharing speedbar.elc between these three applications, the Image +;; support can get lost. +;; +;; By splitting out that hard part into this file, and avoiding byte +;; compilation, one copy speedbar can support all these platforms together. +;; +;; This file requires the `image' package if it is available. + +(require 'ezimage) + +;;; Code: +(defcustom speedbar-use-images ezimage-use-images + "*Non-nil if speedbar should display icons." + :group 'speedbar + :version "21.1" + :type 'boolean) + +(defalias 'defimage-speedbar 'defezimage) + +(defvar speedbar-expand-image-button-alist + '(("<+>" . ezimage-directory-plus) + ("<->" . ezimage-directory-minus) + ("< >" . ezimage-directory) + ("[+]" . ezimage-page-plus) + ("[-]" . ezimage-page-minus) + ("[?]" . ezimage-page) + ("[ ]" . ezimage-page) + ("{+}" . ezimage-box-plus) + ("{-}" . ezimage-box-minus) + ("<M>" . ezimage-mail) + ("<d>" . ezimage-document-tag) + ("<i>" . ezimage-info-tag) + (" =>" . ezimage-tag) + (" +>" . ezimage-tag-gt) + (" ->" . ezimage-tag-v) + (">" . ezimage-tag) + ("@" . ezimage-tag-type) + (" @" . ezimage-tag-type) + ("*" . ezimage-checkout) + ("#" . ezimage-object) + ("!" . ezimage-object-out-of-date) + ("//" . ezimage-label) + ("%" . ezimage-lock) + ) + "List of text and image associations.") + +(defun speedbar-insert-image-button-maybe (start length) + "Insert an image button based on text starting at START for LENGTH chars. +If buttontext is unknown, just insert that text. +If we have an image associated with it, use that image." + (when speedbar-use-images + (let ((ezimage-expand-image-button-alist + speedbar-expand-image-button-alist)) + (ezimage-insert-image-button-maybe start length)))) + +(defun speedbar-image-dump () + "Dump out the current state of the Speedbar image alist. +See `speedbar-expand-image-button-alist' for details." + (interactive) + (with-output-to-temp-buffer "*Speedbar Images*" + (save-excursion + (set-buffer "*Speedbar Images*") + (goto-char (point-max)) + (insert "Speedbar image cache.\n\n") + (let ((start (point)) (end nil)) + (insert "Image\tText\tImage Name") + (setq end (point)) + (insert "\n") + (put-text-property start end 'face 'underline)) + (let ((ia speedbar-expand-image-button-alist)) + (while ia + (let ((start (point))) + (insert (car (car ia))) + (insert "\t") + (speedbar-insert-image-button-maybe start + (length (car (car ia)))) + (insert (car (car ia)) "\t" (format "%s" (cdr (car ia))) "\n")) + (setq ia (cdr ia))))))) + +(provide 'sb-image) + +;; arch-tag: 6b05accd-e8b8-4290-8379-f063f3dacabb +;;; sb-image.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-mail.xpm --- a/lisp/sb-mail.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_mail_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #828282", -"# c #FFFFFF", -" .................. ", -".++++++++++++++++++@", -".++##############++@", -".+#++##########++#+@", -".+###++######++###+@", -".+#####++##++#####+@", -".+#######++#######+@", -".+################+@", -".+####+######+####+@", -".+################+@", -".+##+##########+##+@", -".+################+@", -".++##############++@", -".++++++++++++++++++@", -" @@@@@@@@@@@@@@@@@@ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-pg-minus.xpm --- a/lisp/sb-pg-minus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_pg_minus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #828282", -"# c #FFFFFF", -" ............ ", -" .++++++++++++@", -" .++##########+@", -" .+#+##########+@", -" .+##+##########+@", -" .+###+##########+@", -" .+####+##########+@", -".+++++++#+++++####+@", -".+########.....###+@", -".+################+@", -".+################+@", -".+################+@", -".+################+@", -".++++++++++++++++++@", -" @@@@@@@@@@@@@@@@@@ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-pg-plus.xpm --- a/lisp/sb-pg-plus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_pg_plus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #828282", -"# c #FFFFFF", -" ............ ", -" .++++++++++++@", -" .++##########+@", -" .+#+##########+@", -" .+##+##########+@", -" .+###+###+######+@", -" .+####+###+.#####+@", -".+++++++#+++++####+@", -".+########.+...###+@", -".+#########+.#####+@", -".+##########.#####+@", -".+################+@", -".+################+@", -".++++++++++++++++++@", -" @@@@@@@@@@@@@@@@@@ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-pg.xpm --- a/lisp/sb-pg.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_pg_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #828282", -"# c #FFFFFF", -" ............ ", -" .++++++++++++@", -" .++##########+@", -" .+#+##########+@", -" .+##+##########+@", -" .+###+##########+@", -" .+####+##########+@", -".+++++++##########+@", -".+################+@", -".+################+@", -".+################+@", -".+################+@", -".+################+@", -".++++++++++++++++++@", -" @@@@@@@@@@@@@@@@@@ "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag-gt.xpm --- a/lisp/sb-tag-gt.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_gt_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@++@@@@@@@+#", -" .+@@@@@@+++@@@@@@+#", -".+@@@@@@@++++@@@@@+#", -".+@++@@@@+++++@@@@+#", -".+@++@@@@+++++#@@@+#", -".+@@@@@@@++++#@@@@+#", -" #+@@@@@@+++#@@@@@+#", -" #+@@@@@++#@@@@@@+#", -" #++++++#+++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag-minus.xpm --- a/lisp/sb-tag-minus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_minus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@@@@@@@@@@+#", -" .+@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@++@@+++++@@@@@@+#", -".+@++@@@.....@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -" #+@@@@@@@@@@@@@@@+#", -" #+@@@@@@@@@@@@@@+#", -" #++++++++++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag-plus.xpm --- a/lisp/sb-tag-plus.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_plus_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@@@@@@@@@@+#", -" .+@@@@@@+@@@@@@@@+#", -".+@@@@@@@+.@@@@@@@+#", -".+@++@@+++++@@@@@@+#", -".+@++@@@.+...@@@@@+#", -".+@@@@@@@+.@@@@@@@+#", -" #+@@@@@@@.@@@@@@@+#", -" #+@@@@@@@@@@@@@@+#", -" #++++++++++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag-type.xpm --- a/lisp/sb-tag-type.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_type_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@@@@@@@@@@+#", -" .+@@@@@@++++++@@@+#", -".+@@@@@@@++++++@@@+#", -".+@++@@@@@@++@@@@@+#", -".+@++@@@@@@++@@@@@+#", -".+@@@@@@@@@++@@@@@+#", -" #+@@@@@@@@++@@@@@+#", -" #+@@@@@@@@@@@@@@+#", -" #++++++++++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag-v.xpm --- a/lisp/sb-tag-v.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_v_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@@@@@@@@@@+#", -" .+@@@++++++++++#@+#", -".+@@@@@++++++++#@@+#", -".+@++@@@++++++#@@@+#", -".+@++@@@@++++#@@@@+#", -".+@@@@@@@@++#@@@@@+#", -" #+@@@@@@@@#@@@@@@+#", -" #+@@@@@@@@@@@@@@+#", -" #++++++++++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/sb-tag.xpm --- a/lisp/sb-tag.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* XPM */ -static char * sb_tag_xpm[] = { -"20 15 5 1", -" c None", -". c #B8B8B8", -"+ c #000000", -"@ c #FFF993", -"# c #828282", -" ", -" ", -" .............. ", -" .++++++++++++++. ", -" .+@@@@@@@@@@@@@@+#", -" .+@@@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -".+@++@@@@@@@@@@@@@+#", -".+@++@@@@@@@@@@@@@+#", -".+@@@@@@@@@@@@@@@@+#", -" #+@@@@@@@@@@@@@@@+#", -" #+@@@@@@@@@@@@@@+#", -" #++++++++++++++# ", -" ############## ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/server.el --- a/lisp/server.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/server.el Sun Oct 09 20:00:17 2005 +0000 @@ -768,14 +768,14 @@ ((or isearch-mode (minibufferp)) nil) ((and frame (null buffers)) - (message (substitute-command-keys - "When done with this frame, type \\[delete-frame]"))) + (message "%s" (substitute-command-keys + "When done with this frame, type \\[delete-frame]"))) ((not (null buffers)) (server-switch-buffer (car buffers)) (run-hooks 'server-switch-hook) (unless nowait - (message (substitute-command-keys - "When done with a buffer, type \\[server-edit]")))))))) + (message "%s" (substitute-command-keys + "When done with a buffer, type \\[server-edit]")))))))) ;; Save for later any partial line that remains. (when (> (length string) 0) diff -r 7a3090aca393 -r 2a679c81f552 lisp/ses.el --- a/lisp/ses.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/ses.el Sun Oct 09 20:00:17 2005 +0000 @@ -1612,7 +1612,7 @@ (error (unless executing-kbd-macro (ding)) - (message (error-message-string err)))) + (message "%s" (error-message-string err)))) nil) ;Make coverage-tester happy (defun ses-create-header-string () @@ -1739,7 +1739,7 @@ (error (setq sig hold)))) (cond (sig - (message (error-message-string sig))) + (message "%s" (error-message-string sig))) ((consp ses--curcell) (message " ")) (t @@ -2560,7 +2560,7 @@ colbool (> needcols 0)) (when (or rowbool colbool) ;;Need to insert. Get confirm - (or (y-or-n-p (format "Yank will insert %s%s%s. Continue " + (or (y-or-n-p (format "Yank will insert %s%s%s. Continue? " (if rowbool (format "%d rows" needrows) "") (if (and rowbool colbool) " and " "") (if colbool (format "%d columns" needcols) ""))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/shadowfile.el --- a/lisp/shadowfile.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/shadowfile.el Sun Oct 09 20:00:17 2005 +0000 @@ -438,7 +438,7 @@ (sit-for 2)) try-regexp)) ; (username (read-no-blanks-input -; (format "Username [default: %s]: " +; (format "Username (default %s): " ; (shadow-get-user primary)) ; (if old (or (shadow-cluster-username old) "") ; (user-login-name)))) @@ -458,7 +458,7 @@ (name (nth 2 hup)) user site group) (while (setq site (shadow-read-site)) - (setq user (read-string (format "Username [default %s]: " + (setq user (read-string (format "Username (default %s): " (shadow-get-user site))) name (read-string "Filename: " name)) (setq group (cons (shadow-make-fullname site diff -r 7a3090aca393 -r 2a679c81f552 lisp/shell.el --- a/lisp/shell.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/shell.el Sun Oct 09 20:00:17 2005 +0000 @@ -797,19 +797,26 @@ (let* ((proc (get-buffer-process (current-buffer))) (pmark (process-mark proc))) (goto-char pmark) - (insert shell-dirstack-query) (insert "\n") + ;; If the process echoes commands, don't insert a fake command in + ;; the buffer or it will appear twice. + (unless comint-process-echoes + (insert shell-dirstack-query) (insert "\n")) (sit-for 0) ; force redisplay (comint-send-string proc shell-dirstack-query) (comint-send-string proc "\n") (set-marker pmark (point)) - (let ((pt (point))) ; wait for 1 line + (let ((pt (point)) + (regexp + (concat + (if comint-process-echoes + ;; Skip command echo if the process echoes + (concat "\\(" (regexp-quote shell-dirstack-query) "\n\\)") + "\\(\\)") + "\\(.+\n\\)"))) ;; This extra newline prevents the user's pending input from spoofing us. (insert "\n") (backward-char 1) - (while (not (looking-at - (concat "\\(" ; skip literal echo in case of stty echo - (regexp-quote shell-dirstack-query) - "\n\\)?" ; skip if present - "\\(" ".+\n" "\\)")) ) ; what to actually look for + ;; Wait for one line. + (while (not (looking-at regexp)) (accept-process-output proc) (goto-char pt))) (goto-char pmark) (delete-char 1) ; remove the extra newline diff -r 7a3090aca393 -r 2a679c81f552 lisp/simple.el --- a/lisp/simple.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/simple.el Sun Oct 09 20:00:17 2005 +0000 @@ -261,6 +261,14 @@ (funcall next-error-function (prefix-numeric-value arg) reset) (run-hooks 'next-error-hook)))) +(defun next-error-internal () + "Visit the source code corresponding to the `next-error' message at point." + (setq next-error-last-buffer (current-buffer)) + ;; we know here that next-error-function is a valid symbol we can funcall + (with-current-buffer next-error-last-buffer + (funcall next-error-function 0 nil) + (run-hooks 'next-error-hook))) + (defalias 'goto-next-locus 'next-error) (defalias 'next-match 'next-error) @@ -3672,9 +3680,18 @@ (setq goal-column nil) (message "No goal column")) (setq goal-column (current-column)) - (message (substitute-command-keys - "Goal column %d (use \\[set-goal-column] with an arg to unset it)") - goal-column)) + ;; The older method below can be erroneous if `set-goal-column' is bound + ;; to a sequence containing % + ;;(message (substitute-command-keys + ;;"Goal column %d (use \\[set-goal-column] with an arg to unset it)") + ;;goal-column) + (message "%s" + (concat + (format "Goal column %d " goal-column) + (substitute-command-keys + "(use \\[set-goal-column] with an arg to unset it)"))) + + ) nil) @@ -4231,7 +4248,7 @@ (defun blink-matching-open () "Move cursor momentarily to the beginning of the sexp before point." (interactive) - (when (and (> (point) (1+ (point-min))) + (when (and (> (point) (point-min)) blink-matching-paren ;; Verify an even number of quoting characters precede the close. (= 1 (logand 1 (- (point) diff -r 7a3090aca393 -r 2a679c81f552 lisp/smerge-mode.el --- a/lisp/smerge-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/smerge-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -335,7 +335,17 @@ (defun smerge-remove-props (beg end) (remove-overlays beg end 'smerge 'refine) - (remove-overlays beg end 'smerge 'conflict)) + (remove-overlays beg end 'smerge 'conflict) + ;; Now that we use overlays rather than text-properties, this function + ;; does not cause refontification any more. It can be seen very clearly + ;; in buffers where jit-lock-contextually is not t, in which case deleting + ;; the "<<<<<<< foobar" leading line leaves the rest of the conflict + ;; highlighted as if it were still a valid conflict. Note that in many + ;; important cases (such as the previous example) we're actually called + ;; during font-locking so inhibit-modification-hooks is non-nil, so we + ;; can't just modify the buffer and expect font-lock to be triggered as in: + ;; (put-text-property beg end 'smerge-force-highlighting nil) + (remove-text-properties beg end '(fontified nil))) (defun smerge-popup-context-menu (event) "Pop up the Smerge mode context menu under mouse." diff -r 7a3090aca393 -r 2a679c81f552 lisp/speedbar.el --- a/lisp/speedbar.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/speedbar.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,12 +1,17 @@ -;;; speedbar.el --- quick access to files and tags in a frame - -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005 Free Software Foundation, Inc. +;;; speedbar --- quick access to files and tags in a frame + +;;; Copyright (C) 1996, 97, 98, 99, 00, 01, 02, 03, 04, 05 Free Software Foundation ;; Author: Eric M. Ludlam <zappo@gnu.org> -;; Version: 0.11a ;; Keywords: file, tags, tools +(defvar speedbar-version "1.0" + "The current version of speedbar.") +(defvar speedbar-incompatible-version "0.14beta4" + "This version of speedbar is incompatible with this version. +Due to massive API changes (removing the use of the word PATH) +this version is not backward compatible to 0.14 or earlier.") + ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -27,169 +32,38 @@ ;;; Commentary: ;; ;; The speedbar provides a frame in which files, and locations in -;; files are displayed. These items can be clicked on with mouse-2 -;; in order to make the last active frame display that file location. -;; -;; Starting Speedbar: -;; -;; Simply type `M-x speedbar', and it will be autoloaded for you. - -;; If you want to choose it from a menu, such as "Tools", you can do this: -;; -;; (define-key-after (lookup-key global-map [menu-bar tools]) -;; [speedbar] '("Speedbar" . speedbar-frame-mode) [calendar]) -;; -;; If you want to access speedbar using only the keyboard, do this: +;; files are displayed. These items can be clicked on with mouse-2 in +;; to display that file location. ;; -;; (global-set-key [f4] 'speedbar-get-focus) +;;; Customizing and Developing for speedbar ;; -;; This will let you hit f4 (or whatever key you choose) to jump -;; focus to the speedbar frame. Pressing it again will bring you back -;; to the attached frame. Pressing RET or e to jump to a file -;; or tag will move you back to the attached frame. The command -;; `speedbar-get-focus' will also create a speedbar frame if it does -;; not exist. -;; -;; Customizing Speedbar: -;; -;; Once a speedbar frame is active, it takes advantage of idle time -;; to keep its contents updated. The contents is usually a list of -;; files in the directory of the currently active buffer. When -;; applicable, tags in the active file can be expanded. +;; Please see the speedbar manual for informaion. ;; -;; To add new supported files types into speedbar, use the function -;; `speedbar-add-supported-extension'. If speedbar complains that the -;; file type is not supported, that means there is no built in -;; support from imenu, and the etags part wasn't set up correctly. You -;; may add elements to `speedbar-supported-extension-expressions' as long -;; as it is done before speedbar is loaded. -;; -;; To prevent speedbar from following you into certain directories -;; use the function `speedbar-add-ignored-path-regexp' to add a new -;; regular expression matching a type of path. You may add list -;; elements to `speedbar-ignored-path-expressions' as long as it is -;; done before speedbar is loaded. -;; -;; To add new file types to imenu, see the documentation in the -;; file imenu.el that comes with Emacs. To add new file types which -;; etags supports, you need to modify the variable -;; `speedbar-fetch-etags-parse-list'. +;;; Notes: ;; -;; If the updates are going too slow for you, modify the variable -;; `speedbar-update-speed' to a longer idle time before updates. -;; -;; If you navigate directories, you will probably notice that you -;; will navigate to a directory which is eventually replaced after -;; you go back to editing a file (unless you pull up a new file.) -;; The delay time before this happens is in -;; `speedbar-navigating-speed', and defaults to 10 seconds. +;; Users of really old emacsen without the need timer functions +;; will not have speedbar updating automatically. Use "g" to refresh +;; the display after changing directories. Remember, do not interrupt +;; the stealthy updates or your display may not be completely +;; refreshed. ;; -;; To enable mouse tracking with information in the minibuffer of -;; the attached frame, use the variable `speedbar-track-mouse-flag'. -;; -;; Tag layout can be modified through `speedbar-tag-hierarchy-method', -;; which controls how tags are layed out. It is actually a list of -;; functions that filter the data. The default groups large tag lists -;; into sub-lists. A long flat list can be used instead if needed. -;; Other filters can be easily added. -;; -;; AUCTEX users: The imenu tags for AUCTEX mode doesn't work very +;; AUC-TEX users: The imenu tags for AUC-TEX mode don't work very ;; well. Use the imenu keywords from tex-mode.el for better results. ;; ;; This file requires the library package assoc (association lists) -;; -;;; Developing for speedbar -;; -;; Adding a speedbar specialized display mode: -;; -;; Speedbar can be configured to create a special display for certain -;; modes that do not display traditional file/tag data. Rmail, Info, -;; and the debugger are examples. These modes can, however, benefit -;; from a speedbar style display in their own way. -;; -;; If your `major-mode' is `foo-mode', the only requirement is to -;; create a function called `foo-speedbar-buttons' which takes one -;; argument, BUFFER. BUFFER will be the buffer speedbar wants filled. -;; In `foo-speedbar-buttons' there are several functions that make -;; building a speedbar display easy. See the documentation for -;; `speedbar-with-writable' (needed because the buffer is usually -;; read-only) `speedbar-make-tag-line', `speedbar-insert-button', and -;; `speedbar-insert-generic-list'. If you use -;; `speedbar-insert-generic-list', also read the doc for -;; `speedbar-tag-hierarchy-method' in case you wish to override it. -;; The macro `speedbar-with-attached-buffer' brings you back to the -;; buffer speedbar is displaying for. -;; -;; For those functions that make buttons, the "function" should be a -;; symbol that is the function to call when clicked on. The "token" -;; is extra data you can pass along. The "function" must take three -;; parameters. They are (TEXT TOKEN INDENT). TEXT is the text of the -;; button clicked on. TOKEN is the data passed in when you create the -;; button. INDENT is an indentation level, or 0. You can store -;; indentation levels with `speedbar-make-tag-line' which creates a -;; line with an expander (eg. [+]) and a text button. +;; assoc should be available in all modern versions of Emacs. +;; The custom package is optional (for easy configuration of speedbar) +;; http://www.dina.kvl.dk/~abraham/custom/ +;; custom is available in all versions of Emacs version 20 or better. ;; -;; Some useful functions when writing expand functions, and click -;; functions are `speedbar-change-expand-button-char', -;; `speedbar-delete-subblock', and `speedbar-center-buffer-smartly'. -;; The variable `speedbar-power-click' is set to t in your functions -;; when the user shift-clicks. This is an indication of anything from -;; refreshing cached data to making a buffer appear in a new frame. -;; -;; If you wish to add to the default speedbar menu for the case of -;; `foo-mode', create a variable `foo-speedbar-menu-items'. This -;; should be a list compatible with the `easymenu' package. It will -;; be spliced into the main menu. (Available with click-mouse-3). If -;; you wish to have extra key bindings in your special mode, create a -;; variable `foo-speedbar-key-map'. Instead of using `make-keymap', -;; or `make-sparse-keymap', use the function -;; `speedbar-make-specialized-keymap'. This lets you inherit all of -;; speedbar's default bindings with low overhead. -;; -;; Adding a speedbar top-level display mode: -;; -;; Unlike the specialized modes, there are no name requirements, -;; however the methods for writing a button display, menu, and keymap -;; are the same. Once you create these items, you can call the -;; function `speedbar-add-expansion-list'. It takes one parameter -;; which is a list element of the form (NAME MENU KEYMAP &rest -;; BUTTON-FUNCTIONS). NAME is a string that will show up in the -;; Displays menu item. MENU is a symbol containing the menu items to -;; splice in. KEYMAP is a symbol holding the keymap to use, and -;; BUTTON-FUNCTIONS are the function names to call, in order, to create -;; the display. -;; Another tweakable variable is `speedbar-stealthy-function-list' -;; which is of the form (NAME &rest FUNCTION ...). NAME is the string -;; name matching `speedbar-add-expansion-list'. (It does not need to -;; exist.). This provides additional display info which might be -;; time-consuming to calculate. -;; Lastly, `speedbar-mode-functions-list' allows you to set special -;; function overrides. At the moment very few functions may be -;; overridden, but more will be added as the need is discovered. ;;; TODO: -;; - More functions to create buttons and options ;; - Timeout directories we haven't visited in a while. -;;; Code: - (require 'assoc) (require 'easymenu) - -(condition-case nil - (require 'image) - (error nil)) - -(defvar ange-ftp-path-format) -(defvar efs-path-regexp) -(defvar font-lock-keywords) -(defvar x-pointer-hand2) -(defvar x-pointer-top-left-arrow) - -(defvar speedbar-xemacsp (string-match "XEmacs" emacs-version) - "Non-nil if we are running in the XEmacs environment.") -(defvar speedbar-xemacs20p (and speedbar-xemacsp - (>= emacs-major-version 20))) +(require 'dframe) +(require 'sb-image) ;; customization stuff (defgroup speedbar nil @@ -197,7 +71,8 @@ :group 'etags :group 'tools :group 'convenience - :version "20.3") +; :version "20.3" + ) (defgroup speedbar-faces nil "Faces used in speedbar." @@ -210,6 +85,27 @@ :prefix "speedbar-" :group 'speedbar) +;;; Code: + +;; Note: `inversion-test' requires parts of the CEDET package that are +;; not included with Emacs. +;; +;; (defun speedbar-require-version (major minor &optional beta) +;; "Non-nil if this version of SPEEDBAR does not satisfy a specific version. +;; Arguments can be: +;; +;; (MAJOR MINOR &optional BETA) +;; +;; Values MAJOR and MINOR must be integers. BETA can be an integer, or +;; excluded if a released version is required. +;; +;; It is assumed that if the current version is newer than that specified, +;; everything passes. Exceptions occur when known incompatibilities are +;; introduced." +;; (inversion-test 'speedbar +;; (concat major "." minor +;; (when beta (concat "beta" beta))))) + (defvar speedbar-initial-expansion-mode-alist '(("buffers" speedbar-buffer-easymenu-definition speedbar-buffers-key-map speedbar-buffer-buttons) @@ -244,7 +140,10 @@ (defvar speedbar-stealthy-function-list '(("files" - speedbar-update-current-file speedbar-check-vc speedbar-check-objects) + speedbar-update-current-file + speedbar-check-read-only + speedbar-check-vc + speedbar-check-objects) ) "List of functions to periodically call stealthily. This list is of the form: @@ -260,11 +159,11 @@ (defvar speedbar-mode-functions-list '(("files" (speedbar-item-info . speedbar-files-item-info) - (speedbar-line-path . speedbar-files-line-path)) + (speedbar-line-directory . speedbar-files-line-directory)) ("buffers" (speedbar-item-info . speedbar-buffers-item-info) - (speedbar-line-path . speedbar-buffers-line-path)) + (speedbar-line-directory . speedbar-buffers-line-directory)) ("quick buffers" (speedbar-item-info . speedbar-buffers-item-info) - (speedbar-line-path . speedbar-buffers-line-path)) + (speedbar-line-directory . speedbar-buffers-line-directory)) ) "List of function tables to use for different major display modes. It is not necessary to define any functions for a specialized mode. @@ -285,6 +184,20 @@ :group 'speedbar :type 'boolean) +(defcustom speedbar-query-confirmation-method 'all + "*Query control for file operations. +The 'always flag means to always query before file operations. +The 'none-but-delete flag means to not query before any file +operations, except before a file deletion." + :group 'speedbar + :type '(radio (const :tag "Always Query before some file operations." + all) + (const :tag "Never Query before file operations, except for deletions." + none-but-delete) +;;;; (const :tag "Never Every Query." +;;;; none) + )) + (defvar speedbar-special-mode-expansion-list nil "Default function list for creating specialized button lists. This list is set by modes that wish to have special speedbar displays. @@ -297,30 +210,40 @@ This keymap is local to each buffer that wants to define special keybindings effective when its display is shown.") +(defcustom speedbar-before-visiting-file-hook '(push-mark) + "*Hooks run before speedbar visits a file in the selected frame. +The default buffer is the buffer in the selected window in the attached frame." + :group 'speedbar + :type 'hook) + (defcustom speedbar-visiting-file-hook nil - "Hooks run when speedbar visits a file in the selected frame." + "*Hooks run when speedbar visits a file in the selected frame." + :group 'speedbar + :type 'hook) + +(defcustom speedbar-before-visiting-tag-hook '(push-mark) + "*Hooks run before speedbar visits a tag in the selected frame. +The default buffer is the buffer in the selected window in the attached frame." :group 'speedbar :type 'hook) (defcustom speedbar-visiting-tag-hook '(speedbar-highlight-one-tag-line) - "Hooks run when speedbar visits a tag in the selected frame." + "*Hooks run when speedbar visits a tag in the selected frame." :group 'speedbar :type 'hook - :version "21.1" :options '(speedbar-highlight-one-tag-line speedbar-recenter-to-top speedbar-recenter )) (defcustom speedbar-load-hook nil - "Hooks run when speedbar is loaded." + "*Hooks run when speedbar is loaded." :group 'speedbar :type 'hook) (defcustom speedbar-reconfigure-keymaps-hook nil - "Hooks run when the keymaps are regenerated." + "*Hooks run when the keymaps are regenerated." :group 'speedbar - :version "21.1" :type 'hook) (defcustom speedbar-show-unknown-files nil @@ -329,34 +252,26 @@ :group 'speedbar :type 'boolean) -(defcustom speedbar-update-speed - (if speedbar-xemacsp - (if speedbar-xemacs20p - 2 ; 1 is too obrusive in XEmacs - 5) ; when no idleness, need long delay - 1) - "*Idle time in seconds needed before speedbar will update itself. -Updates occur to allow speedbar to display directory information -relevant to the buffer you are currently editing." - :group 'speedbar - :type 'integer) +;;; EVENTUALLY REMOVE THESE ;; When I moved to a repeating timer, I had the horrible missfortune ;; of loosing the ability for adaptive speed choice. This update ;; speed currently causes long delays when it should have been turned off. -(defcustom speedbar-navigating-speed speedbar-update-speed - "*Idle time to wait after navigation commands in speedbar are executed. -Navigation commands included expanding/contracting nodes, and moving -between different directories." - :group 'speedbar - :type 'integer) +(defvar speedbar-update-speed dframe-update-speed + "*Obsoleted variable. Use `dframe-update-speed'.") + +(defvar speedbar-navigating-speed dframe-update-speed + "*Obsoleted variable. Use `dframe-update-speed'.") +;;; END REMOVE THESE (defcustom speedbar-frame-parameters '((minibuffer . nil) (width . 20) (border-width . 0) (menu-bar-lines . 0) (tool-bar-lines . 0) - (unsplittable . t)) + (unsplittable . t) + (left-fringe . 0) + ) "*Parameters to use when creating the speedbar frame in Emacs. Any parameter supported by a frame may be added. The parameter `height' will be initialized to the height of the frame speedbar is @@ -371,7 +286,9 @@ '(minibuffer nil width 20 border-width 0 internal-border-width 0 unsplittable t default-toolbar-visible-p nil has-modeline-p nil - menubar-visible-p nil) + menubar-visible-p nil + default-gutter-visible-p nil + ) "*Parameters to use when creating the speedbar frame in XEmacs. Parameters not listed here which will be added automatically are `height' which will be initialized to the height of the frame speedbar @@ -401,13 +318,22 @@ INSERT is a function which takes an INDENTation level, and a LIST of tags to insert. It will then create the speedbar buttons.") -(defcustom speedbar-track-mouse-flag t +(defcustom speedbar-use-tool-tips-flag (and (not (featurep 'xemacs)) + (>= emacs-major-version 21)) + "*Non-nil means to use tool tips if they are avaialble. +When tooltips are not available, mouse-tracking and minibuffer +display is used instead." + :group 'speedbar + :type 'boolean) + +(defcustom speedbar-track-mouse-flag (not speedbar-use-tool-tips-flag) "*Non-nil means to display info about the line under the mouse." :group 'speedbar :type 'boolean) (defcustom speedbar-sort-tags nil - "*If non-nil, sort tags in the speedbar display. *Obsolete*." + "*If non-nil, sort tags in the speedbar display. *Obsolete*. +Use `semantic-tag-hierarchy-method' instead." :group 'speedbar :type 'boolean) @@ -427,10 +353,10 @@ (GROUP-NAME-STRING ELT1 ELT2... ELTn)" :group 'speedbar :type 'hook - :options '(speedbar-sort-tag-hierarchy + :options '(speedbar-prefix-group-tag-hierarchy speedbar-trim-words-tag-hierarchy - speedbar-prefix-group-tag-hierarchy - speedbar-simple-group-tag-hierarchy) + speedbar-simple-group-tag-hierarchy + speedbar-sort-tag-hierarchy) ) (defcustom speedbar-tag-group-name-minimum-length 4 @@ -460,13 +386,6 @@ :group 'speedbar :type 'integer) -(defcustom speedbar-activity-change-focus-flag nil - "*Non-nil means the selected frame will change based on activity. -Thus, if a file is selected for edit, the buffer will appear in the -selected frame and the focus will change to that frame." - :group 'speedbar - :type 'boolean) - (defcustom speedbar-directory-button-trim-method 'span "*Indicates how the directory button will be displayed. Possible values are: @@ -493,23 +412,11 @@ (defcustom speedbar-indentation-width 1 "*When sub-nodes are expanded, the number of spaces used for indentation." :group 'speedbar - :version "21.1" :type 'integer) (defcustom speedbar-hide-button-brackets-flag nil "*Non-nil means speedbar will hide the brackets around the + or -." :group 'speedbar - :version "21.1" - :type 'boolean) - -(defcustom speedbar-use-images (and (or (fboundp 'defimage) - (fboundp 'make-image-specifier)) - (if (fboundp 'display-graphic-p) - (display-graphic-p) - window-system)) - "*Non-nil if speedbar should display icons." - :group 'speedbar - :version "21.1" :type 'boolean) (defcustom speedbar-before-popup-hook nil @@ -517,6 +424,11 @@ :group 'speedbar :type 'hook) +(defcustom speedbar-after-create-hook '(speedbar-frame-reposition-smartly) + "*Hooks called before popping up the speedbar frame." + :group 'speedbar + :type 'hook) + (defcustom speedbar-before-delete-hook nil "*Hooks called before deleting the speedbar frame." :group 'speedbar @@ -551,18 +463,18 @@ (defvar speedbar-vc-indicator "*" "Text used to mark files which are currently checked out. Other version control systems can be added by examining the function -`speedbar-vc-path-enable-hook' and `speedbar-vc-in-control-hook'.") - -(defcustom speedbar-vc-path-enable-hook nil - "*Return non-nil if the current path should be checked for Version Control. -Functions in this hook must accept one parameter which is the path +`speedbar-vc-directory-enable-hook' and `speedbar-vc-in-control-hook'.") + +(defcustom speedbar-vc-directory-enable-hook nil + "*Return non-nil if the current directory should be checked for Version Control. +Functions in this hook must accept one parameter which is the directory being checked." :group 'speedbar-vc :type 'hook) (defcustom speedbar-vc-in-control-hook nil "*Return non-nil if the specified file is under Version Control. -Functions in this hook must accept two parameters. The PATH of the +Functions in this hook must accept two parameters. The DIRECTORY of the current file, and the FILENAME of the file being checked." :group 'speedbar-vc :type 'hook) @@ -573,7 +485,7 @@ (defcustom speedbar-obj-do-check t "*Non-nil check all files in speedbar to see if they have an object file. Any file checked out is marked with `speedbar-obj-indicator', and the -marking is based on `speedbar-obj-alist'." +marking is based on `speedbar-obj-alist'" :group 'speedbar-vc :type 'boolean) @@ -586,7 +498,7 @@ The expression `speedbar-obj-alist' defines who gets tagged.") (defvar speedbar-obj-alist - '(("\\.\\([cpC]\\|cpp\\|cc\\)$" . ".o") + '(("\\.\\([cpC]\\|cpp\\|cc\\|cxx\\)$" . ".o") ("\\.el$" . ".elc") ("\\.java$" . ".class") ("\\.f\\(or\\|90\\|77\\)?$" . ".o") @@ -594,6 +506,14 @@ ("\\.texi$" . ".info")) "Alist of file extensions, and their corresponding object file type.") +(defvar speedbar-ro-to-do-point nil + "Local variable maintaining the current read only check position.") + +(defvar speedbar-object-read-only-indicator "%" + "Indicator to append onto a line if that item is Read Only.") + +;; Note: Look for addition place to add indicator lists that +;; use skip-chars instead of a regular expression. (defvar speedbar-indicator-regex (concat (regexp-quote speedbar-indicator-separator) "\\(" @@ -602,6 +522,8 @@ (regexp-quote (car speedbar-obj-indicator)) "\\|" (regexp-quote (cdr speedbar-obj-indicator)) + "\\|" + (regexp-quote speedbar-object-read-only-indicator) "\\)*") "Regular expression used when identifying files. Permits stripping of indicator characters from a line.") @@ -613,7 +535,7 @@ :group 'speedbar :type 'hook) -(defvar speedbar-ignored-modes nil +(defvar speedbar-ignored-modes '(fundamental-mode) "*List of major modes which speedbar will not switch directories for.") (defun speedbar-extension-list-to-regex (extlist) @@ -635,29 +557,29 @@ (if regex2 (concat "\\(" regex2 "\\)") "") "\\)$"))) -(defvar speedbar-ignored-path-regexp nil - "Regular expression matching paths speedbar will not switch to. -Created from `speedbar-ignored-path-expressions' with the function +(defvar speedbar-ignored-directory-regexp nil + "Regular expression matching directorys speedbar will not switch to. +Created from `speedbar-ignored-directory-expressions' with the function `speedbar-extension-list-to-regex' (A misnamed function in this case.) -Use the function `speedbar-add-ignored-path-regexp', or customize the -variable `speedbar-ignored-path-expressions' to modify this variable.") - -(defcustom speedbar-ignored-path-expressions +Use the function `speedbar-add-ignored-directory-regexp', or customize the +variable `speedbar-ignored-directory-expressions' to modify this variable.") + +(defcustom speedbar-ignored-directory-expressions '("[/\\]logs?[/\\]\\'") "*List of regular expressions matching directories speedbar will ignore. -They should included paths to directories which are notoriously very +They should included directorys to directories which are notoriously very large and take a long time to load in. Use the function -`speedbar-add-ignored-path-regexp' to add new items to this list after +`speedbar-add-ignored-directory-regexp' to add new items to this list after speedbar is loaded. You may place anything you like in this list before speedbar has been loaded." :group 'speedbar - :type '(repeat (regexp :tag "Path Regexp")) + :type '(repeat (regexp :tag "Directory Regexp")) :set (lambda (sym val) - (setq speedbar-ignored-path-expressions val - speedbar-ignored-path-regexp + (setq speedbar-ignored-directory-expressions val + speedbar-ignored-directory-regexp (speedbar-extension-list-to-regex val)))) -(defcustom speedbar-directory-unshown-regexp "^\\(CVS\\|RCS\\|SCCS\\)\\'" +(defcustom speedbar-directory-unshown-regexp "^\\(CVS\\|RCS\\|SCCS\\|\\..*\\)\\'" "*Regular expression matching directories not to show in speedbar. They should include commonly existing directories which are not useful, such as version control." @@ -675,8 +597,10 @@ "*Regexp matching files we don't want displayed in a speedbar buffer. It is generated from the variable `completion-ignored-extensions'") -;; Compiler silencing trick. The real defvar comes later in this file. -(defvar speedbar-file-regexp) +(defvar speedbar-file-regexp nil + "Regular expression matching files we know how to expand. +Created from `speedbar-supported-extension-expressions' with the +function `speedbar-extension-list-to-regex'") ;; this is dangerous to customize, because the defaults will probably ;; change in the future. @@ -688,7 +612,7 @@ ;; html is not supported by default, but an imenu tags package ;; is available. Also, html files are nice to be able to see. ".s?html" - "[Mm]akefile\\(\\.in\\)?"))) + ".ma?k" "[Mm]akefile\\(\\.in\\)?"))) "*List of regular expressions which will match files supported by tagging. Do not prefix the `.' char with a double \\ to quote it, as the period will be stripped by a simplified optimizer when compiled into a @@ -696,28 +620,18 @@ `speedbar-file-regexp' for use with speedbar. You should use the function `speedbar-add-supported-extension' to add a new extension at runtime, or use the configuration dialog to set it in your .emacs -file." +file. +If you add an extension to this list, and it does not appear, you may +need to also modify `completion-ignored-extension' which will also help +file completion." :group 'speedbar - :version "21.1" :type '(repeat (regexp :tag "Extension Regexp")) :set (lambda (sym val) - (setq speedbar-supported-extension-expressions val - speedbar-file-regexp (speedbar-extension-list-to-regex val)))) - -(defvar speedbar-file-regexp - (speedbar-extension-list-to-regex speedbar-supported-extension-expressions) - "Regular expression matching files we know how to expand. -Created from `speedbar-supported-extension-expression' with the -function `speedbar-extension-list-to-regex'") - -(defcustom speedbar-scan-subdirs nil - "*Non-nil means speedbar will check if subdirs are empty. -That way you don't have to click on them to find out. But this -incurs extra I/O, hence it slows down directory display -proportionally to the number of subdirs." - :group 'speedbar - :type 'boolean - :version 22.1) + (set 'speedbar-supported-extension-expressions val) + (set 'speedbar-file-regexp (speedbar-extension-list-to-regex val)))) + +(setq speedbar-file-regexp + (speedbar-extension-list-to-regex speedbar-supported-extension-expressions)) (defun speedbar-add-supported-extension (extension) "Add EXTENSION as a new supported extension for speedbar tagging. @@ -736,42 +650,41 @@ (setq speedbar-file-regexp (speedbar-extension-list-to-regex speedbar-supported-extension-expressions))) -(defun speedbar-add-ignored-path-regexp (path-expression) - "Add PATH-EXPRESSION as a new ignored path for speedbar tracking. -This function will modify `speedbar-ignored-path-regexp' and add -PATH-EXPRESSION to `speedbar-ignored-path-expressions'." - (interactive "sPath regex: ") - (if (not (listp path-expression)) - (setq path-expression (list path-expression))) - (while path-expression - (if (member (car path-expression) speedbar-ignored-path-expressions) +(defun speedbar-add-ignored-directory-regexp (directory-expression) + "Add DIRECTORY-EXPRESSION as a new ignored directory for speedbar tracking. +This function will modify `speedbar-ignored-directory-regexp' and add +DIRECTORY-EXPRESSION to `speedbar-ignored-directory-expressions'." + (interactive "sDirectory regex: ") + (if (not (listp directory-expression)) + (setq directory-expression (list directory-expression))) + (while directory-expression + (if (member (car directory-expression) speedbar-ignored-directory-expressions) nil - (setq speedbar-ignored-path-expressions - (cons (car path-expression) speedbar-ignored-path-expressions))) - (setq path-expression (cdr path-expression))) - (setq speedbar-ignored-path-regexp (speedbar-extension-list-to-regex - speedbar-ignored-path-expressions))) + (setq speedbar-ignored-directory-expressions + (cons (car directory-expression) speedbar-ignored-directory-expressions))) + (setq directory-expression (cdr directory-expression))) + (setq speedbar-ignored-directory-regexp (speedbar-extension-list-to-regex + speedbar-ignored-directory-expressions))) ;; If we don't have custom, then we set it here by hand. (if (not (fboundp 'custom-declare-variable)) (setq speedbar-file-regexp (speedbar-extension-list-to-regex speedbar-supported-extension-expressions) - speedbar-ignored-path-regexp (speedbar-extension-list-to-regex - speedbar-ignored-path-expressions))) - -(defvar speedbar-update-flag (and - (or (fboundp 'run-with-idle-timer) - (fboundp 'start-itimer) - (boundp 'post-command-idle-hook)) - (if (fboundp 'display-graphic-p) - (display-graphic-p) - window-system)) + speedbar-ignored-directory-regexp (speedbar-extension-list-to-regex + speedbar-ignored-directory-expressions))) + +(defvar speedbar-update-flag dframe-have-timer-flag "*Non-nil means to automatically update the display. -When this is nil then speedbar will not follow the attached -frame's path. Type \ -\\<speedbar-key-map>\\[speedbar-toggle-updates] in the speedbar \ +When this is nil then speedbar will not follow the attached frame's directory. +When speedbar is active, use: + +\\<speedbar-key-map> `\\[speedbar-toggle-updates]' + to toggle this value.") +(defvar speedbar-update-flag-disable nil + "Permanently disable changing of the update flag.") + (defvar speedbar-syntax-table nil "Syntax-table used on the speedbar.") @@ -797,10 +710,8 @@ (suppress-keymap speedbar-key-map t) ;; control + (define-key speedbar-key-map "t" 'speedbar-toggle-updates) (define-key speedbar-key-map "g" 'speedbar-refresh) - (define-key speedbar-key-map "t" 'speedbar-toggle-updates) - (define-key speedbar-key-map "q" 'speedbar-close-frame) - (define-key speedbar-key-map "Q" 'delete-frame) ;; navigation (define-key speedbar-key-map "n" 'speedbar-next) @@ -809,8 +720,9 @@ (define-key speedbar-key-map "\M-p" 'speedbar-restricted-prev) (define-key speedbar-key-map "\C-\M-n" 'speedbar-forward-list) (define-key speedbar-key-map "\C-\M-p" 'speedbar-backward-list) - (define-key speedbar-key-map " " 'speedbar-scroll-up) - (define-key speedbar-key-map [delete] 'speedbar-scroll-down) +;; These commands never seemed useful. +;; (define-key speedbar-key-map " " 'speedbar-scroll-up) +;; (define-key speedbar-key-map [delete] 'speedbar-scroll-down) ;; Short cuts I happen to find useful (define-key speedbar-key-map "r" @@ -824,46 +736,8 @@ (lambda () (interactive) (speedbar-change-initial-expansion-list "files"))) - ;; Overrides - (substitute-key-definition 'switch-to-buffer - 'speedbar-switch-buffer-attached-frame - speedbar-key-map global-map) - - (if speedbar-xemacsp - (progn - ;; mouse bindings so we can manipulate the items on each line - (define-key speedbar-key-map 'button2 'speedbar-click) - (define-key speedbar-key-map '(shift button2) 'speedbar-power-click) - ;; Info doc fix from Bob Weiner - (if (featurep 'infodoc) - nil - (define-key speedbar-key-map 'button3 'speedbar-xemacs-popup-kludge)) - (define-key speedbar-key-map '(meta button3) 'speedbar-mouse-item-info) - ) - - ;; mouse bindings so we can manipulate the items on each line - (define-key speedbar-key-map [down-mouse-1] 'speedbar-double-click) - (define-key speedbar-key-map [mouse-2] 'speedbar-click) - ;; This is the power click for new frames, or refreshing a cache - (define-key speedbar-key-map [S-mouse-2] 'speedbar-power-click) - ;; This adds a small unecessary visual effect - ;;(define-key speedbar-key-map [down-mouse-2] 'speedbar-quick-mouse) - (define-key speedbar-key-map [M-mouse-2] 'speedbar-mouse-item-info) - - (define-key speedbar-key-map [down-mouse-3] 'speedbar-emacs-popup-kludge) - - ;; This lets the user scroll as if we had a scrollbar... well maybe not - (define-key speedbar-key-map [mode-line mouse-2] 'speedbar-mouse-hscroll) - ;; another handy place users might click to get our menu. - (define-key speedbar-key-map [mode-line down-mouse-1] - 'speedbar-emacs-popup-kludge) - - ;; We can't switch buffers with the buffer mouse menu. Lets hack it. - (define-key speedbar-key-map [C-down-mouse-1] 'speedbar-hack-buffer-menu) - - ;; Lastly, we want to track the mouse. Play here - (define-key speedbar-key-map [mouse-movement] 'speedbar-track-mouse) - )) + (dframe-update-keymap speedbar-key-map) +) (defun speedbar-make-specialized-keymap () "Create a keymap for use with a speedbar major or minor display mode. @@ -887,6 +761,11 @@ (define-key speedbar-file-key-map "=" 'speedbar-expand-line) (define-key speedbar-file-key-map "-" 'speedbar-contract-line) + (define-key speedbar-file-key-map "[" 'speedbar-expand-line-descendants) + (define-key speedbar-file-key-map "]" 'speedbar-close-line-descendants) + + (define-key speedbar-file-key-map " " 'speedbar-toggle-line-expansion) + ;; file based commands (define-key speedbar-file-key-map "U" 'speedbar-up-directory) (define-key speedbar-file-key-map "I" 'speedbar-item-info) @@ -896,6 +775,7 @@ (define-key speedbar-file-key-map "D" 'speedbar-item-delete) (define-key speedbar-file-key-map "O" 'speedbar-item-object-delete) (define-key speedbar-file-key-map "R" 'speedbar-item-rename) + (define-key speedbar-file-key-map "M" 'speedbar-create-directory) ) (defvar speedbar-easymenu-definition-base @@ -903,6 +783,7 @@ '("Speedbar" ["Update" speedbar-refresh t] ["Auto Update" speedbar-toggle-updates + :active (not speedbar-update-flag-disable) :style toggle :selected speedbar-update-flag]) (if (and (or (fboundp 'defimage) (fboundp 'make-image-specifier)) @@ -925,6 +806,9 @@ ["Flush Cache & Expand" speedbar-flush-expand-line (save-excursion (beginning-of-line) (looking-at "[0-9]+: *.\\+. "))] + ["Expand All Descendants" speedbar-expand-line-descendants + (save-excursion (beginning-of-line) + (looking-at "[0-9]+: *.\\+. ")) ] ["Contract File Tags" speedbar-contract-line (save-excursion (beginning-of-line) (looking-at "[0-9]+: *.-. "))] @@ -944,6 +828,8 @@ (save-excursion (beginning-of-line) (looking-at "[0-9]+: *\\["))] ["Rename File" speedbar-item-rename (save-excursion (beginning-of-line) (looking-at "[0-9]+: *[[<]"))] + ["Create Directory" speedbar-create-directory + (save-excursion (beginning-of-line) (looking-at "[0-9]+: *[[<]"))] ["Delete File" speedbar-item-delete (save-excursion (beginning-of-line) (looking-at "[0-9]+: *[[<]"))] ["Delete Object" speedbar-item-object-delete @@ -951,13 +837,15 @@ (looking-at "[0-9]+: *\\[[+-]\\] [^ \n]+ \\*?[!#]$"))] ) "Additional menu items while in file-mode.") - + (defvar speedbar-easymenu-definition-trailer (append (if (and (featurep 'custom) (fboundp 'custom-declare-variable)) (list ["Customize..." speedbar-customize t])) (list - ["Close" speedbar-close-frame t] + ["Detach" speedbar-detach (and speedbar-frame + (eq (selected-frame) speedbar-frame)) ] + ["Close" dframe-close-frame t] ["Quit" delete-frame t] )) "Menu items appearing at the end of the speedbar menu.") @@ -972,12 +860,6 @@ "The frame that was last created, then removed from the display.") (defvar speedbar-full-text-cache nil "The last open directory is saved in its entirety for ultra-fast switching.") -(defvar speedbar-timer nil - "The speedbar timer used for updating the buffer.") -(defvar speedbar-attached-frame nil - "The frame which started speedbar mode. -This is the frame from which all data displayed in the speedbar is -gathered, and in which files and such are displayed.") (defvar speedbar-last-selected-file nil "The last file which was selected in speedbar buffer.") @@ -997,28 +879,17 @@ ;;; Compatibility ;; -(if (fboundp 'frame-parameter) - - (defalias 'speedbar-frame-parameter 'frame-parameter) - - (defun speedbar-frame-parameter (frame parameter) - "Return FRAME's PARAMETER value." - (cdr (assoc parameter (frame-parameters frame))))) - -(if (fboundp 'make-overlay) - (progn - (defalias 'speedbar-make-overlay 'make-overlay) - (defalias 'speedbar-overlay-put 'overlay-put) - (defalias 'speedbar-delete-overlay 'delete-overlay) - (defalias 'speedbar-overlay-start 'overlay-start) - (defalias 'speedbar-overlay-end 'overlay-end) - (defalias 'speedbar-mode-line-update 'force-mode-line-update)) - (defalias 'speedbar-make-overlay 'make-extent) - (defalias 'speedbar-overlay-put 'set-extent-property) - (defalias 'speedbar-delete-overlay 'delete-extent) - (defalias 'speedbar-overlay-start 'extent-start) - (defalias 'speedbar-overlay-end 'extent-end) - (defalias 'speedbar-mode-line-update 'redraw-modeline)) +(defalias 'speedbar-make-overlay + (if (featurep 'xemacs) 'make-extent 'make-overlay)) + +(defalias 'speedbar-overlay-put + (if (featurep 'xemacs) 'set-extent-property 'overlay-put)) + +(defalias 'speedbar-delete-overlay + (if (featurep 'xemacs) 'delete-extent 'delete-overlay)) + +(defalias 'speedbar-mode-line-update + (if (featurep 'xemacs) 'redraw-modeline 'force-mode-line-update)) ;;; Mode definitions/ user commands ;; @@ -1034,132 +905,97 @@ `speedbar-before-popup-hook' is called before popping up the speedbar frame. `speedbar-before-delete-hook' is called before the frame is deleted." (interactive "P") - ;; toggle frame on and off. - (if (not arg) (if (and (frame-live-p speedbar-frame) - (frame-visible-p speedbar-frame)) - (setq arg -1) (setq arg 1))) - ;; turn the frame off on neg number - (if (and (numberp arg) (< arg 0)) - (progn - (run-hooks 'speedbar-before-delete-hook) - (if (and speedbar-frame (frame-live-p speedbar-frame)) - (progn - (setq speedbar-cached-frame speedbar-frame) - (make-frame-invisible speedbar-frame))) - (setq speedbar-frame nil) - (speedbar-set-timer nil) - ;; Used to delete the buffer. This has the annoying affect of - ;; preventing whatever took its place from ever appearing - ;; as the default after a C-x b was typed - ;;(if (bufferp speedbar-buffer) - ;; (kill-buffer speedbar-buffer)) - ) - ;; Set this as our currently attached frame - (setq speedbar-attached-frame (selected-frame)) - (run-hooks 'speedbar-before-popup-hook) - ;; Get the frame to work in - (if (frame-live-p speedbar-cached-frame) - (progn - (setq speedbar-frame speedbar-cached-frame) - (make-frame-visible speedbar-frame) - ;; Get the buffer to play with - (speedbar-mode) - (select-frame speedbar-frame) - (if (not (eq (current-buffer) speedbar-buffer)) - (switch-to-buffer speedbar-buffer)) - (set-window-dedicated-p (selected-window) t) - (raise-frame speedbar-frame) - (speedbar-set-timer speedbar-update-speed) - ) - (if (frame-live-p speedbar-frame) - (raise-frame speedbar-frame) - (setq speedbar-frame - (if speedbar-xemacsp - ;; Only guess height if it is not specified. - (if (member 'height speedbar-frame-plist) - (make-frame speedbar-frame-plist) - (make-frame (nconc (list 'height - (speedbar-needed-height)) - speedbar-frame-plist))) - (let* ((mh (speedbar-frame-parameter nil 'menu-bar-lines)) - (cfx (speedbar-frame-parameter nil 'left)) - (cfy (speedbar-frame-parameter nil 'top)) - (cfw (frame-pixel-width)) - (params - ;; Only add a guessed height if one is not specified - ;; in the input parameters. - (if (assoc 'height speedbar-frame-parameters) - speedbar-frame-parameters - (append - speedbar-frame-parameters - (list (cons 'height (+ mh (frame-height))))))) - (frame - (if (or (< emacs-major-version 20) - (not (eq window-system 'x))) - (make-frame params) - (let ((x-pointer-shape x-pointer-top-left-arrow) - (x-sensitive-text-pointer-shape - x-pointer-hand2)) - (make-frame params))))) - ;; Position speedbar frame. - (if (or (not window-system) (eq window-system 'pc) - (assoc 'left speedbar-frame-parameters) - (assoc 'top speedbar-frame-parameters)) - ;; Do no positioning if not on a windowing system, - ;; or if left/top were specified in the parameters. - frame - (let ((cfx - (if (not (consp cfx)) - cfx - ;; If cfx is a list, that means we grow - ;; from a specific edge of the display. - ;; Convert that to the distance from the - ;; left side of the display. - (if (eq (car cfx) '-) - ;; A - means distance from the right edge - ;; of the display, or DW - cfx - framewidth - (- (x-display-pixel-width) (car (cdr cfx)) - (frame-pixel-width)) - (car (cdr cfx)))))) - (modify-frame-parameters - frame - (list - (cons - 'left - ;; Decide which side to put it - ;; on. 200 is just a buffer - ;; for the left edge of the - ;; screen. The extra 10 is just - ;; dressings for window decorations. - (let ((sfw (frame-pixel-width frame))) - (let ((left-guess (- cfx 10 sfw)) - (right-guess (+ cfx cfw 5))) - (let ((left-margin left-guess) - (right-margin - (- (x-display-pixel-width) - right-guess 5 sfw))) - (cond ((>= left-margin 0) left-guess) - ((>= right-margin 0) right-guess) - ;; otherwise choose side we overlap less - ((> left-margin right-margin) 0) - (t (- (x-display-pixel-width) sfw 5))))))) - (cons 'top cfy))) - frame))))) - ;; reset the selection variable - (setq speedbar-last-selected-file nil) - ;; Put the buffer into the frame - (save-window-excursion - ;; Get the buffer to play with - (speedbar-mode) - (select-frame speedbar-frame) - (switch-to-buffer speedbar-buffer) - (set-window-dedicated-p (selected-window) t)) - (if (and (or (null window-system) (eq window-system 'pc)) - (fboundp 'set-frame-name)) - (progn - (select-frame speedbar-frame) - (set-frame-name "Speedbar"))) - (speedbar-set-timer speedbar-update-speed))))) + ;; Get the buffer to play with + (if (not (buffer-live-p speedbar-buffer)) + (save-excursion + (setq speedbar-buffer (get-buffer-create " SPEEDBAR")) + (set-buffer speedbar-buffer) + (speedbar-mode))) + ;; Do the frame thing + (dframe-frame-mode arg + 'speedbar-frame + 'speedbar-cached-frame + 'speedbar-buffer + "Speedbar" + #'speedbar-frame-mode + (if dframe-xemacsp + (append speedbar-frame-plist + ;; This is a hack to get speedbar to iconfiy + ;; with the selected frame. + (list 'parent (selected-frame))) + speedbar-frame-parameters) + speedbar-before-delete-hook + speedbar-before-popup-hook + speedbar-after-create-hook) + ;; Start up the timer + (if (not speedbar-frame) + (speedbar-set-timer nil) + (speedbar-reconfigure-keymaps) + (speedbar-update-contents) + (speedbar-set-timer dframe-update-speed) + ) + ;; Frame modifications + (set (make-local-variable 'dframe-delete-frame-function) + 'speedbar-handle-delete-frame) + ;; hscroll + (set (make-local-variable 'automatic-hscrolling) nil) ; Emacs 21 + ;; reset the selection variable + (setq speedbar-last-selected-file nil)) + +(defun speedbar-frame-reposition-smartly () + "Reposition the speedbar frame to be next to the attached frame." + (cond ((and dframe-xemacsp + (or (member 'left speedbar-frame-plist) + (member 'top speedbar-frame-plist))) + (dframe-reposition-frame + speedbar-frame + (dframe-attached-frame speedbar-frame) + (cons (car (cdr (member 'left speedbar-frame-plist))) + (car (cdr (member 'top speedbar-frame-plist))))) + ) + ((and (not dframe-xemacsp) + (or (assoc 'left speedbar-frame-parameters) + (assoc 'top speedbar-frame-parameters))) + ;; if left/top were specified in the parameters, pass them + ;; down to the reposition function + (dframe-reposition-frame + speedbar-frame + (dframe-attached-frame speedbar-frame) + (cons (cdr (assoc 'left speedbar-frame-parameters)) + (cdr (assoc 'top speedbar-frame-parameters)))) + ) + (t + (dframe-reposition-frame speedbar-frame + (dframe-attached-frame speedbar-frame) + 'left-right)))) + +(defun speedbar-detach () + "Detach the current Speedbar from auto-updating. +Doing this allows the creation of a second speedbar." + (interactive) + (let ((buffer speedbar-buffer)) + (dframe-detach 'speedbar-frame 'speedbar-cached-frame 'speedbar-buffer) + (save-excursion + (set-buffer buffer) + ;; Permanently disable auto-updating in this speedbar buffer. + (set (make-local-variable 'speedbar-update-flag) nil) + (set (make-local-variable 'speedbar-update-flag-disable) t) + ;; Make local copies of all the different variables to prevent + ;; funny stuff later... + ))) + +(defsubst speedbar-current-frame () + "Return the frame to use for speedbar based on current context." + (dframe-current-frame 'speedbar-frame 'speedbar-mode)) + +(defun speedbar-handle-delete-frame (e) + "Handle a delete frame event E. +If the deleted frame is the frame SPEEDBAR is attached to, +we need to delete speedbar also." + (let ((frame-to-be-deleted (car (car (cdr e))))) + (if (eq frame-to-be-deleted dframe-attached-frame) + (delete-frame speedbar-frame))) + ) ;;;###autoload (defun speedbar-get-focus () @@ -1167,59 +1003,23 @@ If the selected frame is not speedbar, then speedbar frame is selected. If the speedbar frame is active, then select the attached frame." (interactive) - (if (eq (selected-frame) speedbar-frame) - (if (frame-live-p speedbar-attached-frame) - (select-frame speedbar-attached-frame)) - ;; If updates are off, then refresh the frame (they want it now...) - (if (not speedbar-update-flag) - (let ((speedbar-update-flag t)) - (speedbar-timer-fn))) - ;; make sure we have a frame - (if (not (frame-live-p speedbar-frame)) (speedbar-frame-mode 1)) - ;; go there - (select-frame speedbar-frame) - ) - (other-frame 0)) - -(defun speedbar-close-frame () - "Turn off a currently active speedbar." - (interactive) - (speedbar-frame-mode -1) - (select-frame speedbar-attached-frame) - (other-frame 0)) - -(defun speedbar-switch-buffer-attached-frame (&optional buffer) - "Switch to BUFFER in speedbar's attached frame, and raise that frame. -This overrides the default behavior of `switch-to-buffer' which is -broken because of the dedicated speedbar frame." - (interactive) - ;; Assume we are in the speedbar frame. - (speedbar-get-focus) - ;; Now switch buffers - (if buffer - (switch-to-buffer buffer) - (call-interactively 'switch-to-buffer nil nil))) + (speedbar-reset-scanners) + (dframe-get-focus 'speedbar-frame 'speedbar-frame-mode + (lambda () (let ((speedbar-update-flag t)) + (speedbar-timer-fn))))) (defmacro speedbar-frame-width () "Return the width of the speedbar frame in characters. nil if it doesn't exist." - '(frame-width speedbar-frame)) - -;; XEmacs function only. -(defun speedbar-needed-height (&optional frame) - "The needed height for the tool bar FRAME (in characters)." - (or frame (setq frame (selected-frame))) - ;; The 1 is the missing modeline/minibuffer - (+ 1 (/ (frame-pixel-height frame) - (face-height 'default frame)))) + '(window-width (get-buffer-window speedbar-buffer))) (defun speedbar-mode () "Major mode for managing a display of directories and tags. \\<speedbar-key-map> -The first line represents the default path of the speedbar frame. +The first line represents the default directory of the speedbar frame. Each directory segment is a button which jumps speedbar's default -directory to that path. Buttons are activated by clicking `\\[speedbar-click]'. -In some situations using `\\[speedbar-power-click]' is a `power click' which will +directory to that directory. Buttons are activated by clicking `\\[speedbar-click]'. +In some situations using `\\[dframe-power-click]' is a `power click' which will rescan cached items, or pop up new frames. Each line starting with <+> represents a directory. Click on the <+> @@ -1255,7 +1055,6 @@ \\{speedbar-key-map}" ;; NOT interactive (save-excursion - (setq speedbar-buffer (set-buffer (get-buffer-create " SPEEDBAR"))) (kill-all-local-variables) (setq major-mode 'speedbar-mode) (setq mode-name "Speedbar") @@ -1263,110 +1062,59 @@ (setq font-lock-keywords nil) ;; no font-locking please (setq truncate-lines t) (make-local-variable 'frame-title-format) - (setq frame-title-format "Speedbar") - ;; Set this up special just for the speedbar buffer - ;; Terminal minibuffer stuff does not require this. - (if (and window-system (not (eq window-system 'pc)) - (null default-minibuffer-frame)) - (progn - (make-local-variable 'default-minibuffer-frame) - (setq default-minibuffer-frame speedbar-attached-frame))) - ;; Correct use of `temp-buffer-show-function': Bob Weiner - (if (and (boundp 'temp-buffer-show-hook) - (boundp 'temp-buffer-show-function)) - (progn (make-local-variable 'temp-buffer-show-hook) - (setq temp-buffer-show-hook temp-buffer-show-function))) - (make-local-variable 'temp-buffer-show-function) - (setq temp-buffer-show-function 'speedbar-temp-buffer-show-function) - (if speedbar-xemacsp - (progn - ;; Argh! mouse-track-click-hook doesn't understand the - ;; make-local-hook conventions. - (make-local-variable 'mouse-track-click-hook) - (add-hook 'mouse-track-click-hook - (lambda (event count) - (if (/= (event-button event) 1) - nil ; Do normal operations. - (cond ((eq count 1) - (speedbar-quick-mouse event)) - ((or (eq count 2) - (eq count 3)) - (speedbar-mouse-set-point event) - (speedbar-do-function-pointer) - (speedbar-quick-mouse event))) - ;; Don't do normal operations. - t))))) - (add-hook 'kill-buffer-hook (lambda () (let ((skilling (boundp 'skilling))) - (if skilling - nil - (if (eq (current-buffer) - speedbar-buffer) - (speedbar-frame-mode -1))))) - t t) + (setq frame-title-format (concat "Speedbar " speedbar-version)) + (setq case-fold-search nil) (toggle-read-only 1) (speedbar-set-mode-line-format) - (if speedbar-xemacsp - (with-no-warnings - (set (make-local-variable 'mouse-motion-handler) - 'speedbar-track-mouse-xemacs)) - (if speedbar-track-mouse-flag - (set (make-local-variable 'track-mouse) t)) ;this could be messy. - (setq auto-show-mode nil)) ;no auto-show for Emacs - (run-mode-hooks 'speedbar-mode-hook)) - (speedbar-update-contents) + ;; Add in our dframe hooks. + (if speedbar-track-mouse-flag + (setq dframe-track-mouse-function #'speedbar-track-mouse)) + (setq dframe-help-echo-function #'speedbar-item-info + dframe-mouse-click-function #'speedbar-click + dframe-mouse-position-function #'speedbar-position-cursor-on-line) + (run-hooks 'speedbar-mode-hook)) speedbar-buffer) -(defmacro speedbar-with-attached-buffer (&rest forms) - "Execute FORMS in the attached frame's special buffer. -Optionally select that frame if necessary." - `(save-selected-window - (speedbar-set-timer speedbar-update-speed) - (select-frame speedbar-attached-frame) - ,@forms - (speedbar-maybee-jump-to-attached-frame))) - -(defun speedbar-message (fmt &rest args) +(defmacro speedbar-message (fmt &rest args) "Like message, but for use in the speedbar frame. Argument FMT is the format string, and ARGS are the arguments for message." - (save-selected-window - (select-frame speedbar-attached-frame) - (apply 'message fmt args))) - -(defun speedbar-y-or-n-p (prompt) + `(dframe-message ,fmt ,@args)) + +(defsubst speedbar-y-or-n-p (prompt &optional deleting) "Like `y-or-n-p', but for use in the speedbar frame. -Argument PROMPT is the prompt to use." - (save-selected-window - (if (and default-minibuffer-frame (not (eq default-minibuffer-frame - speedbar-attached-frame))) - (select-frame speedbar-attached-frame)) - (y-or-n-p prompt))) - -(defun speedbar-show-info-under-mouse (&optional event) - "Call the info function for the line under the mouse. -Optional EVENT is currently not used." - (let ((pos (mouse-position))) ; we ignore event until I use it later. - (if (equal (car pos) speedbar-frame) - (save-excursion - (save-window-excursion - (apply 'set-mouse-position (list (car pos) (cadr pos) (cddr pos))) - (speedbar-item-info)))))) - +Argument PROMPT is the prompt to use. +Optional argument DELETING means this is a query that will delete something. +The variable `speedbar-query-confirmation-method' can cause this to +return true without a query." + (or (and (not deleting) + (eq speedbar-query-confirmation-method 'none-but-delete)) + (dframe-y-or-n-p prompt))) + +(defsubst speedbar-select-attached-frame () + "Select the frame attached to this speedbar." + (dframe-select-attached-frame (speedbar-current-frame))) + +;; Backwards compatibility +(defalias 'speedbar-with-attached-buffer 'dframe-with-attached-buffer) +(defalias 'speedbar-maybee-jump-to-attached-frame 'dframe-maybee-jump-to-attached-frame) + (defun speedbar-set-mode-line-format () "Set the format of the mode line based on the current speedbar environment. This gives visual indications of what is up. It EXPECTS the speedbar frame and window to be the currently active frame and window." - (if (and (frame-live-p speedbar-frame) - (or (not speedbar-xemacsp) + (if (and (frame-live-p (speedbar-current-frame)) + (or (not dframe-xemacsp) (with-no-warnings - (specifier-instance has-modeline-p)))) - (save-excursion + (specifier-instance has-modeline-p))) + speedbar-buffer) (save-excursion (set-buffer speedbar-buffer) (let* ((w (or (speedbar-frame-width) 20)) (p1 "<<") (p5 ">>") - (p3 (if speedbar-update-flag "SPEEDBAR" "SLOWBAR")) - (blank (- w (length p1) (length p3) (length p5) - (if line-number-mode 4 0))) + (p3 (if speedbar-update-flag "#" "!")) + (p35 (capitalize speedbar-initial-expansion-list-name)) + (blank (- w (length p1) (length p3) (length p5) (length p35) + (if line-number-mode 5 1))) (p2 (if (> blank 0) (make-string (/ blank 2) ? ) "")) @@ -1375,7 +1123,7 @@ "")) (tf (if line-number-mode - (list (concat p1 p2 p3) '(line-number-mode " %3l") + (list (concat p1 p2 p3 " " p35) '(line-number-mode " %3l") (concat p4 p5)) (list (concat p1 p2 p3 p4 p5))))) (if (not (equal mode-line-format tf)) @@ -1383,23 +1131,6 @@ (setq mode-line-format tf) (speedbar-mode-line-update))))))) -(defun speedbar-temp-buffer-show-function (buffer) - "Placed in the variable `temp-buffer-show-function' in `speedbar-mode'. -If a user requests help using \\[help-command] <Key> the temp BUFFER will be -redirected into a window on the attached frame." - (if speedbar-attached-frame (select-frame speedbar-attached-frame)) - (pop-to-buffer buffer nil) - (other-window -1) - ;; Fix for using this hook on some platforms: Bob Weiner - (cond ((not speedbar-xemacsp) - (run-hooks 'temp-buffer-show-hook)) - ((fboundp 'run-hook-with-args) - (run-hook-with-args 'temp-buffer-show-hook buffer)) - ((and (boundp 'temp-buffer-show-hook) - (listp temp-buffer-show-hook)) - (mapcar (function (lambda (hook) (funcall hook buffer))) - temp-buffer-show-hook)))) - (defvar speedbar-previous-menu nil "The menu before the last `speedbar-reconfigure-keymaps' was called.") @@ -1413,7 +1144,7 @@ ;; file display mode version (speedbar-initial-menu) (save-excursion - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (if (local-variable-p 'speedbar-easymenu-definition-special (current-buffer)) @@ -1432,7 +1163,11 @@ (list 'speedbar-change-initial-expansion-list (car (car alist))) - t) + :style 'radio + :selected + `(string= ,(car (car alist)) + speedbar-initial-expansion-list-name) + ) displays)) (setq alist (cdr alist))) displays))) @@ -1441,7 +1176,7 @@ (localmap (save-excursion (let ((cf (selected-frame))) (prog2 - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (if (local-variable-p 'speedbar-special-mode-key-map (current-buffer)) @@ -1458,129 +1193,51 @@ (if speedbar-previous-menu (easy-menu-remove speedbar-previous-menu)) (setq speedbar-previous-menu md) ;; Now add the new menu - (if (not speedbar-xemacsp) + (if (not dframe-xemacsp) (easy-menu-define speedbar-menu-map (current-local-map) "Speedbar menu" md) (easy-menu-add md (current-local-map)) - (set-buffer-menubar (list md)))) + ;; XEmacs-specific: + (if (fboundp 'set-buffer-menubar) + (set-buffer-menubar (list md))))) + (run-hooks 'speedbar-reconfigure-keymaps-hook))) ;;; User Input stuff ;; - -;; XEmacs: this can be implemented using modeline keymaps, but there -;; is no use, as we have horizontal scrollbar (as the docstring -;; hints.) -(defun speedbar-mouse-hscroll (e) - "Read a mouse event E from the mode line, and horizontally scroll. -If the mouse is being clicked on the far left, or far right of the -mode-line. This is only useful for non-XEmacs." - (interactive "e") - (let* ((xp (car (nth 2 (car (cdr e))))) - (cpw (/ (frame-pixel-width) - (frame-width))) - (oc (1+ (/ xp cpw))) - ) - (cond ((< oc 3) - (scroll-left 2)) - ((> oc (- (window-width) 3)) - (scroll-right 2)) - (t (speedbar-message - "Click on the edge of the modeline to scroll left/right"))) - ;;(speedbar-message "X: Pixel %d Char Pixels %d On char %d" xp cpw oc) - )) - (defun speedbar-customize () "Customize speedbar using the Custom package." (interactive) (let ((sf (selected-frame))) - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (customize-group 'speedbar) (select-frame sf)) - (speedbar-maybee-jump-to-attached-frame)) + (dframe-maybee-jump-to-attached-frame)) (defun speedbar-track-mouse (event) "For motion EVENT, display info about the current line." - (interactive "e") (if (not speedbar-track-mouse-flag) nil (save-excursion - (let ((char (nth 1 (car (cdr event))))) - (if (not (numberp char)) - (speedbar-message nil) - (goto-char char) - ;; (speedbar-message "%S" event) - (speedbar-item-info) - ))))) - -(defun speedbar-track-mouse-xemacs (event) - "For motion EVENT, display info about the current line." - (if (functionp (default-value 'mouse-motion-handler)) - (funcall (default-value 'mouse-motion-handler) event)) - (if speedbar-track-mouse-flag - (save-excursion - (save-window-excursion - (condition-case () - (progn (mouse-set-point event) - ;; Prevent focus-related bugs. - (if (eq major-mode 'speedbar-mode) - (speedbar-item-info))) - (error nil)))))) - -;; In XEmacs, we make popup menus work on the item over mouse (as -;; opposed to where the point happens to be.) We attain this by -;; temporarily moving the point to that place. -;; Hrvoje Niksic <hniksic@srce.hr> -(defun speedbar-xemacs-popup-kludge (event) - "Pop up a menu related to the clicked on item. -Must be bound to EVENT." - (interactive "e") - (select-frame speedbar-frame) - (save-excursion - (goto-char (event-closest-point event)) - (beginning-of-line) - (forward-char (min 5 (- (save-excursion (end-of-line) (point)) - (save-excursion (beginning-of-line) (point))))) - (popup-mode-menu) - ;; Wait for menu to bail out. `popup-mode-menu' (and other popup - ;; menu functions) return immediately. - (let (new) - (while (not (misc-user-event-p (setq new (next-event)))) - (dispatch-event new)) - (dispatch-event new)))) - -(defun speedbar-emacs-popup-kludge (e) - "Pop up a menu related to the clicked on item. -Must be bound to event E." - (interactive "e") - (save-excursion - (mouse-set-point e) - ;; This gets the cursor where the user can see it. - (if (not (bolp)) (forward-char -1)) - (sit-for 0) - (mouse-major-mode-menu e nil))) - -(defun speedbar-hack-buffer-menu (e) - "Control mouse 1 is buffer menu. -This hack overrides it so that the right thing happens in the main -Emacs frame, not in the speedbar frame. -Argument E is the event causing this activity." - (interactive "e") - (let ((fn (lookup-key global-map (if speedbar-xemacsp - '(control button1) - [C-down-mouse-1]))) - (newbuff nil)) - (unwind-protect + (save-window-excursion + (condition-case nil + (progn + (mouse-set-point event) + (if (eq major-mode 'speedbar-mode) + ;; XEmacs may let us get in here in other mode buffers. + (speedbar-item-info))) + (t (speedbar-message nil))))))) + +(defun speedbar-show-info-under-mouse () + "Call the info function for the line under the mouse. +Optional EVENT is currently not used." + (let ((pos (mouse-position))) ; we ignore event until I use it later. + (if (equal (car pos) speedbar-frame) (save-excursion - (set-window-dedicated-p (selected-window) nil) - (call-interactively fn) - (setq newbuff (current-buffer))) - (switch-to-buffer speedbar-buffer) - (set-window-dedicated-p (selected-window) t)) - (if (not (eq newbuff speedbar-buffer)) - (speedbar-with-attached-buffer - (switch-to-buffer newbuff))))) + (save-window-excursion + (apply 'set-mouse-position pos) + (speedbar-item-info)))))) (defun speedbar-next (arg) "Move to the next ARGth line in a speedbar buffer." @@ -1602,16 +1259,16 @@ ;; First find the extent for which we are allowed to move. (let ((depth (save-excursion (beginning-of-line) (if (looking-at "[0-9]+:") - (string-to-int (match-string 0)) + (string-to-number (match-string 0)) 0))) - (crement (if (< arg 0) 1 -1)) ; decrement or increment + (crement (if (< arg 0) 1 -1)) ; decrement or increment (lastmatch (point))) (while (/= arg 0) (forward-line (- crement)) (let ((subdepth (save-excursion (beginning-of-line) - (if (looking-at "[0-9]+:") - (string-to-int (match-string 0)) - 0)))) + (if (looking-at "[0-9]+:") + (string-to-number (match-string 0)) + 0)))) (cond ((or (< subdepth depth) (progn (end-of-line) (eobp)) (progn (beginning-of-line) (bobp))) @@ -1632,7 +1289,6 @@ (speedbar-restricted-move (or arg 1)) (speedbar-item-info)) - (defun speedbar-restricted-prev (arg) "Move to the previous ARGth line in a speedbar buffer at the same depth. This means that movement is restricted to a subnode, and that siblings @@ -1691,11 +1347,14 @@ ;;; Speedbar file activity (aka creeping featurism) ;; -(defun speedbar-refresh () - "Refresh the current speedbar display, disposing of any cached data." - (interactive) +(defun speedbar-refresh (&optional arg) + "Refresh the current speedbar display, disposing of any cached data. +Argument ARG represents to force a refresh past any caches that may exist." + (interactive "P") (let ((dl speedbar-shown-directories) + (dframe-power-click arg) deactivate-mark) + ;; We need to hack something so this works in detached frames. (while dl (adelete 'speedbar-directory-contents-alist (car dl)) (setq dl (cdr dl))) @@ -1704,7 +1363,7 @@ (speedbar-update-contents) (speedbar-stealthy-updates) ;; Reset the timer in case it got really hosed for some reason... - (speedbar-set-timer speedbar-update-speed) + (speedbar-set-timer dframe-update-speed) (if (<= 1 speedbar-verbosity-level) (speedbar-message "Refreshing speedbar...done")))) @@ -1727,7 +1386,7 @@ (sf (selected-frame))) (if (and (file-exists-p f) (string-match "\\.el\\'" f)) (progn - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (byte-compile-file f nil) (select-frame sf) (speedbar-reset-scanners))) @@ -1779,13 +1438,22 @@ (beginning-of-line) (if (re-search-forward " [-+=]?> \\([^\n]+\\)" (save-excursion(end-of-line)(point)) t) - (let ((tag (match-string 1)) + (let* ((tag (match-string 1)) (attr (speedbar-line-token)) - (item nil)) - (if (and (featurep 'semantic) (semantic-token-p attr)) - (speedbar-message (semantic-summerize-nonterminal attr)) + (item nil) + (semantic-tagged (if (fboundp 'semantic-tag-p) + (semantic-tag-p attr)))) + (if semantic-tagged + (with-no-warnings + (save-excursion + (when (and (semantic-tag-overlay attr) + (semantic-tag-buffer attr)) + (set-buffer (semantic-tag-buffer attr))) + (speedbar-message + (funcall semantic-sb-info-format-tag-function attr) + ))) (looking-at "\\([0-9]+\\):") - (setq item (file-name-nondirectory (speedbar-line-path))) + (setq item (file-name-nondirectory (speedbar-line-directory))) (speedbar-message "Tag: %s in %s" tag item))) (if (re-search-forward "{[+-]} \\([^\n]+\\)$" (save-excursion(end-of-line)(point)) t) @@ -1793,27 +1461,32 @@ (if (re-search-forward " [+-]?[()|@] \\([^\n]+\\)$" nil t) (let* ((detailtext (match-string 1)) (detail (or (speedbar-line-token) detailtext)) - (parent (save-excursion - (beginning-of-line) - (let ((dep (if (looking-at "[0-9]+:") - (1- (string-to-int (match-string 0))) - 0))) - (re-search-backward (concat "^" - (int-to-string dep) - ":") - nil t)) - (if (looking-at "[0-9]+: +[-+=>]> \\([^\n]+\\)$") - (speedbar-line-token) - nil)))) - (if (and (featurep 'semantic) (semantic-token-p detail)) - (speedbar-message - (semantic-summerize-nonterminal detail parent)) + (parent (save-excursion + (beginning-of-line) + (let ((dep (if (looking-at "[0-9]+:") + (1- (string-to-number (match-string 0))) + 0))) + (re-search-backward (concat "^" + (int-to-string dep) + ":") + nil t)) + (if (looking-at "[0-9]+: +[-+=>]> \\([^\n]+\\)$") + (speedbar-line-token) + nil)))) + (if (featurep 'semantic) + (with-no-warnings + (if (semantic-tag-p detail) + (speedbar-message + (funcall semantic-sb-info-format-tag-function detail parent)) + (if parent + (speedbar-message "Detail: %s of tag %s" detail + (if (semantic-tag-p parent) + (semantic-format-tag-name parent nil t) + parent)) + (speedbar-message "Detail: %s" detail)))) + ;; Not using `semantic': (if parent - (speedbar-message "Detail: %s of tag %s" detail - (if (and (featurep 'semantic) - (semantic-token-p parent)) - (semantic-token-name parent) - parent)) + (speedbar-message "Detail: %s of tag %s" detail parent) (speedbar-message "Detail: %s" detail)))) nil))))) @@ -1845,7 +1518,8 @@ (if (string-match "[/\\]$" rt) "" "/") (file-name-nondirectory f)))) (if (or (not (file-exists-p rt)) - (speedbar-y-or-n-p (format "Overwrite %s with %s? " rt f))) + (speedbar-y-or-n-p (format "Overwrite %s with %s? " rt f) + t)) (progn (copy-file f rt t t) ;; refresh display if the new place is currently displayed. @@ -1874,7 +1548,8 @@ (if (string-match "[/\\]\\'" rt) "" "/") (file-name-nondirectory f)))) (if (or (not (file-exists-p rt)) - (speedbar-y-or-n-p (format "Overwrite %s with %s? " rt f))) + (speedbar-y-or-n-p (format "Overwrite %s with %s? " rt f) + t)) (progn (rename-file f rt t) ;; refresh display if the new place is currently displayed. @@ -1885,12 +1560,27 @@ ))))) (error "Not a file")))) +(defun speedbar-create-directory () + "Create a directory in speedbar." + (interactive) + (let ((f (speedbar-line-file))) + (if f + (let* ((basedir (file-name-directory f)) + (nd (read-file-name "Create directory: " + basedir))) + ;; Make the directory + (make-directory nd t) + (speedbar-refresh) + (speedbar-goto-this-file nd) + ) + (error "Not a file")))) + (defun speedbar-item-delete () "Delete the item under the cursor. Files are removed from disk." (interactive) (let ((f (speedbar-line-file))) (if (not f) (error "Not a file")) - (if (speedbar-y-or-n-p (format "Delete %s? " f)) + (if (speedbar-y-or-n-p (format "Delete %s? " f) t) (progn (if (file-directory-p f) (delete-directory f) @@ -1915,7 +1605,7 @@ (setq oa (cdr oa))) (setq obj (concat (file-name-sans-extension f) (cdr (car oa)))) (if (and oa (file-exists-p obj) - (speedbar-y-or-n-p (format "Delete %s? " obj))) + (speedbar-y-or-n-p (format "Delete %s? " obj) t)) (progn (delete-file obj) (speedbar-reset-scanners))))) @@ -1925,7 +1615,7 @@ (interactive) (setq speedbar-update-flag t) (speedbar-set-mode-line-format) - (speedbar-set-timer speedbar-update-speed)) + (speedbar-set-timer dframe-update-speed)) (defun speedbar-disable-update () "Disable automatic updating and stop consuming resources." @@ -1942,13 +1632,14 @@ (speedbar-enable-update))) (defun speedbar-toggle-images () - "Toggle images for the speedbar frame." + "Toggle use of images in the speedbar frame. +Images are not available in Emacs 20 or earlier." (interactive) (setq speedbar-use-images (not speedbar-use-images)) (speedbar-refresh)) (defun speedbar-toggle-sorting () - "Toggle sorting for the speedbar frame." + "Toggle tag sorting." (interactive) (setq speedbar-sort-tags (not speedbar-sort-tags))) @@ -1957,61 +1648,6 @@ (interactive) (setq speedbar-show-unknown-files (not speedbar-show-unknown-files)) (speedbar-refresh)) - -;;; Utility functions -;; -(defun speedbar-set-timer (timeout) - "Apply a timer with TIMEOUT, or remove a timer if TIMEOUT is nil. -TIMEOUT is the number of seconds until the speedbar timer is called -again. When TIMEOUT is nil, turn off all timeouts. -This function will also enable or disable the `vc-checkin-hook' used -to track file check ins, and will change the mode line to match -`speedbar-update-flag'." - (cond - ;; XEmacs - (speedbar-xemacsp - (if speedbar-timer - (progn (delete-itimer speedbar-timer) - (setq speedbar-timer nil))) - (if timeout - (if (and speedbar-xemacsp - (or (>= emacs-major-version 20) - (>= emacs-minor-version 15))) - (setq speedbar-timer (start-itimer "speedbar" - 'speedbar-timer-fn - timeout - timeout - t)) - (setq speedbar-timer (start-itimer "speedbar" - 'speedbar-timer-fn - timeout - nil))))) - ;; Post 19.31 Emacs - ((fboundp 'run-with-idle-timer) - (if speedbar-timer - (progn (cancel-timer speedbar-timer) - (setq speedbar-timer nil))) - (if timeout - (setq speedbar-timer - (run-with-idle-timer timeout t 'speedbar-timer-fn)))) - ;; Emacs 19.30 (Thanks twice: ptype@dra.hmg.gb) - ((fboundp 'post-command-idle-hook) - (if timeout - (add-hook 'post-command-idle-hook 'speedbar-timer-fn) - (remove-hook 'post-command-idle-hook 'speedbar-timer-fn))) - ;; Older or other Emacsen with no timers. Set up so that its - ;; obvious this emacs can't handle the updates - (t - (setq speedbar-update-flag nil))) - ;; Apply a revert hook that will reset the scanners. We attach to revert - ;; because most reverts occur during VC state change, and this lets our - ;; VC scanner fix itself. - (if timeout - (add-hook 'after-revert-hook 'speedbar-reset-scanners) - (remove-hook 'after-revert-hook 'speedbar-reset-scanners) - ) - ;; change this if it changed for some reason - (speedbar-set-mode-line-format)) (defmacro speedbar-with-writable (&rest forms) "Allow the buffer to be writable and evaluate FORMS." @@ -2019,14 +1655,6 @@ (cons 'progn forms))) (put 'speedbar-with-writable 'lisp-indent-function 0) -(defun speedbar-select-window (buffer) - "Select a window in which BUFFER is shown. -If it is not shown, force it to appear in the default window." - (let ((win (get-buffer-window buffer speedbar-attached-frame))) - (if win - (select-window win) - (set-window-buffer (selected-window) buffer)))) - (defun speedbar-insert-button (text face mouse function &optional token prevline) "Insert TEXT as the next logical speedbar button. @@ -2053,13 +1681,30 @@ (put-text-property start (point) 'invisible nil) (put-text-property start (point) 'mouse-face nil))) +(defun speedbar-insert-separator (text) + "Insert a separation label of TEXT. +Separators are not active, have no labels, depth, or actions." + (if speedbar-use-images + (let ((start (point))) + (insert "//") + (speedbar-insert-image-button-maybe start 2))) + (let ((start (point))) + (insert text "\n") + (speedbar-make-button start (point) + 'speedbar-separator-face + nil nil nil))) + (defun speedbar-make-button (start end face mouse function &optional token) "Create a button from START to END, with FACE as the display face. MOUSE is the mouse face. When this button is clicked on FUNCTION -will be run with the TOKEN parameter (any Lisp object)." +will be run with the TOKEN parameter (any Lisp object)" (put-text-property start end 'face face) (put-text-property start end 'mouse-face mouse) + (if speedbar-use-tool-tips-flag + (put-text-property start end 'help-echo #'dframe-help-echo)) (put-text-property start end 'invisible nil) + (put-text-property start end 'speedbar-text + (buffer-substring-no-properties start end)) (if function (put-text-property start end 'speedbar-function function)) (if token (put-text-property start end 'speedbar-token token)) ;; So far the only text we have is less that 3 chars. @@ -2116,8 +1761,10 @@ (setq speedbar-previously-used-expansion-list-name speedbar-initial-expansion-list-name speedbar-initial-expansion-list-name new-default) - (speedbar-refresh) - (speedbar-reconfigure-keymaps)) + (if (and (speedbar-current-frame) (frame-live-p (speedbar-current-frame))) + (progn + (speedbar-refresh) + (speedbar-reconfigure-keymaps)))) (defun speedbar-fetch-replacement-function (function) "Return a current mode specific replacement for function, or nil. @@ -2199,26 +1846,30 @@ (setq directory (expand-file-name directory)) ;; If in powerclick mode, then the directory we are getting ;; should be rescanned. - (if speedbar-power-click + (if dframe-power-click (adelete 'speedbar-directory-contents-alist directory)) ;; find the directory, either in the cache, or build it. (or (cdr-safe (assoc directory speedbar-directory-contents-alist)) (let ((default-directory directory) - (case-fold-search read-file-name-completion-ignore-case) - dirs files) - (dolist (file (directory-files directory nil)) - (or (string-match speedbar-file-unshown-regexp file) - (string-match speedbar-directory-unshown-regexp file) - (if (file-directory-p file) - (setq dirs (cons file dirs)) - (setq files (cons file files))))) - (let ((nl `(,(nreverse dirs) ,(nreverse files)))) + (dir (directory-files directory nil)) + (dirs nil) + (files nil)) + (while dir + (if (not + (or (string-match speedbar-file-unshown-regexp (car dir)) + (string-match speedbar-directory-unshown-regexp (car dir)))) + (if (file-directory-p (car dir)) + (setq dirs (cons (car dir) dirs)) + (setq files (cons (car dir) files)))) + (setq dir (cdr dir))) + (let ((nl (cons (nreverse dirs) (list (nreverse files))))) (aput 'speedbar-directory-contents-alist directory nl) - nl)))) + nl)) + )) (defun speedbar-directory-buttons (directory index) "Insert a single button group at point for DIRECTORY. -Each directory path part is a different button. If part of the path +Each directory directory part is a different button. If part of the directory matches the user directory ~, then it is replaced with a ~. INDEX is not used, but is required by the caller." (let* ((tilde (expand-file-name "~/")) @@ -2294,8 +1945,9 @@ This is the button that expands or contracts a node (if applicable), and EXP-BUTTON-CHAR the character in it (+, -, ?, etc). EXP-BUTTON-FUNCTION is the function to call if it's clicked on. Button types are -'bracket, 'angle, 'curly, or nil. EXP-BUTTON-DATA is extra data -attached to the text forming the expansion button. +'bracket, 'angle, 'curly, 'expandtag, 'statictag, t, or nil. +EXP-BUTTON-DATA is extra data attached to the text forming the expansion +button. Next, TAG-BUTTON is the text of the tag. TAG-BUTTON-FUNCTION is the function to call if clicked on, and TAG-BUTTON-DATA is the data to @@ -2317,11 +1969,14 @@ (let* ((exp-button (cond ((eq exp-button-type 'bracket) "[%c]") ((eq exp-button-type 'angle) "<%c>") ((eq exp-button-type 'curly) "{%c}") + ((eq exp-button-type 'expandtag) " %c>") + ((eq exp-button-type 'statictag) " =>") (t ">"))) (buttxt (format exp-button exp-button-char)) (start (point)) (end (progn (insert buttxt) (point))) - (bf (if exp-button-type 'speedbar-button-face nil)) + (bf (if (and exp-button-type (not (eq exp-button-type 'statictag))) + 'speedbar-button-face nil)) (mf (if exp-button-function 'speedbar-highlight-face nil)) ) (speedbar-make-button start end bf mf exp-button-function exp-button-data) @@ -2340,7 +1995,7 @@ (if tag-button-function 'speedbar-highlight-face nil) tag-button-function tag-button-data)) )) - + (defun speedbar-change-expand-button-char (char) "Change the expansion button character to CHAR for the current line." (save-excursion @@ -2348,50 +2003,45 @@ (if (re-search-forward ":\\s-*.\\([-+?]\\)" (save-excursion (end-of-line) (point)) t) (speedbar-with-writable - (goto-char (match-beginning 1)) - (delete-char 1) + (goto-char (match-end 1)) (insert-char char 1 t) - (put-text-property (point) (1- (point)) 'invisible nil) + (forward-char -1) + (delete-char -1) + ;;(put-text-property (point) (1- (point)) 'invisible nil) ;; make sure we fix the image on the text here. - (speedbar-insert-image-button-maybe (- (point) 2) 3))))) + (speedbar-insert-image-button-maybe (- (point) 1) 3))))) ;;; Build button lists ;; -(defun speedbar-insert-files-at-point (files level directory) +(defun speedbar-insert-files-at-point (files level) "Insert list of FILES starting at point, and indenting all files to LEVEL. Tag expandable items with a +, otherwise a ?. Don't highlight ? as we don't know how to manage them. The input parameter FILES is a cons cell of the form ( 'DIRLIST . 'FILELIST )." ;; Start inserting all the directories - (dolist (dir (car files)) - (if (if speedbar-scan-subdirs - (condition-case nil - (let ((l (speedbar-file-lists (concat directory dir)))) - (or (car l) (cadr l))) - (file-error)) - (file-readable-p (concat directory dir))) - (speedbar-make-tag-line 'angle ?+ 'speedbar-dired dir - dir 'speedbar-dir-follow nil - 'speedbar-directory-face level) - (speedbar-make-tag-line 'angle ? nil dir - dir 'speedbar-dir-follow nil - 'speedbar-directory-face level))) - (let ((case-fold-search read-file-name-completion-ignore-case)) - (dolist (file (cadr files)) - (let* ((known (and (file-readable-p (concat directory file)) - (string-match speedbar-file-regexp file))) + (let ((dirs (car files))) + (while dirs + (speedbar-make-tag-line 'angle ?+ 'speedbar-dired (car dirs) + (car dirs) 'speedbar-dir-follow nil + 'speedbar-directory-face level) + (setq dirs (cdr dirs)))) + (let ((lst (car (cdr files))) + (case-fold-search t)) + (while lst + (let* ((known (string-match speedbar-file-regexp (car lst))) (expchar (if known ?+ ??)) (fn (if known 'speedbar-tag-file nil))) (if (or speedbar-show-unknown-files (/= expchar ??)) - (speedbar-make-tag-line 'bracket expchar fn file - file 'speedbar-find-file nil - 'speedbar-file-face level)))))) + (speedbar-make-tag-line 'bracket expchar fn (car lst) + (car lst) 'speedbar-find-file nil + 'speedbar-file-face level))) + (setq lst (cdr lst))))) (defun speedbar-default-directory-list (directory index) "Insert files for DIRECTORY with level INDEX at point." - (speedbar-insert-files-at-point - (speedbar-file-lists directory) index directory) + (speedbar-insert-files-at-point + (speedbar-file-lists directory) index) (speedbar-reset-scanners) (if (= index 0) ;; If the shown files variable has extra directories, then @@ -2412,12 +2062,63 @@ (speedbar-do-function-pointer))))) (setq sf (cdr sf))) ))) +;;; Generic List support +;; +;; Generic lists are hierarchies of tags which we may need to permute +;; in order to make it look nice. +;; +;; A generic list is of the form: +;; ( ("name" . marker-or-number) <-- one tag at this level +;; ("name" ("name" . mon) ("name" . mon) ) <-- one group of tags +;; ("name" mon ("name" . mon) ) <-- group w/ a position and tags +(defun speedbar-generic-list-group-p (sublst) + "Non-nil if SUBLST is a group. +Groups may optionally contain a position." + (and (stringp (car-safe sublst)) + (or (and (listp (cdr-safe sublst)) + (or (speedbar-generic-list-tag-p (car-safe (cdr-safe sublst))) + (speedbar-generic-list-group-p (car-safe (cdr-safe sublst)) + ))) + (and (number-or-marker-p (car-safe (cdr-safe sublst))) + (listp (cdr-safe (cdr-safe sublst))) + (speedbar-generic-list-tag-p + (car-safe (cdr-safe (cdr-safe sublst))))) + ))) + +(defun speedbar-generic-list-positioned-group-p (sublst) + "Non-nil of SUBLST is a group with a position." + (and (stringp (car-safe sublst)) + (number-or-marker-p (car-safe (cdr-safe sublst))) + (listp (cdr-safe (cdr-safe sublst))) + (let ((rest (car-safe (cdr-safe (cdr-safe sublst))))) + (or (speedbar-generic-list-tag-p rest) + (speedbar-generic-list-group-p rest) + (speedbar-generic-list-positioned-group-p rest) + )))) + +(defun speedbar-generic-list-tag-p (sublst) + "Non nil if SUBLST is a tag." + (and (stringp (car-safe sublst)) + (or (and (number-or-marker-p (cdr-safe sublst)) + (not (cdr-safe (cdr-safe sublst)))) + ;; For semantic/bovine items, this is needed + (symbolp (car-safe (cdr-safe sublst)))) + )) (defun speedbar-sort-tag-hierarchy (lst) "Sort all elements of tag hierarchy LST." (sort (copy-alist lst) (lambda (a b) (string< (car a) (car b))))) +(defun speedbar-try-completion (string alist) + "A wrapper for `try-completion'. +Passes STRING and ALIST to `try-completion' if ALIST +passes some tests." + (if (and (listp alist) (not (null alist)) + (listp (car alist)) (stringp (car (car alist)))) + (try-completion string alist) + nil)) + (defun speedbar-prefix-group-tag-hierarchy (lst) "Prefix group names for tag hierarchy LST." (let ((newlst nil) @@ -2430,133 +2131,134 @@ (num-shorts-grouped 0) (bins (make-vector 256 nil)) (diff-idx 0)) - ;; Break out sub-lists - (while lst - (if (and (listp (cdr-safe (car-safe lst))) - ;; This one is for bovine tokens - (not (symbolp (car-safe (cdr-safe (car-safe lst)))))) - (setq newlst (cons (car lst) newlst)) - (setq sublst (cons (car lst) sublst))) - (setq lst (cdr lst))) - ;; Reverse newlst because it was made backwards. - ;; Sublist doesn't need reversing because the act - ;; of binning things will reverse it for us. - (setq newlst (nreverse newlst)) - ;; Now, first find out how long our list is. Never let a - ;; list get-shorter than our minimum. - (if (<= (length sublst) speedbar-tag-split-minimum-length) - (setq work-list (nreverse sublst)) - (setq diff-idx (length (try-completion "" sublst))) - ;; Sort the whole list into bins. - (while sublst - (let ((e (car sublst)) - (s (car (car sublst)))) - (cond ((<= (length s) diff-idx) - ;; 0 storage bin for shorty. - (aset bins 0 (cons e (aref bins 0)))) - (t - ;; stuff into a bin based on ascii value at diff - (aset bins (aref s diff-idx) - (cons e (aref bins (aref s diff-idx))))))) - (setq sublst (cdr sublst))) - ;; Go through all our bins Stick singles into our - ;; junk-list, everything else as sublsts in work-list. - ;; If two neighboring lists are both small, make a grouped - ;; group combinding those two sub-lists. - (setq diff-idx 0) - (while (> 256 diff-idx) - (let ((l (nreverse;; Reverse the list since they are stuck in - ;; backwards. - (aref bins diff-idx)))) - (if l - (let ((tmp (cons (try-completion "" l) l))) - (if (or (> (length l) speedbar-tag-regroup-maximum-length) - (> (+ (length l) (length short-group-list)) - speedbar-tag-split-minimum-length)) - (progn - ;; We have reached a longer list, so we - ;; must finish off a grouped group. - (cond - ((and short-group-list - (= (length short-group-list) - num-shorts-grouped)) - ;; All singles? Junk list - (setq junk-list (append short-group-list - junk-list))) - ((= num-shorts-grouped 1) - ;; Only one short group? Just stick it in - ;; there by itself. Make a group, and find - ;; a subexpression - (let ((subexpression (try-completion - "" short-group-list))) - (if (< (length subexpression) - speedbar-tag-group-name-minimum-length) - (setq subexpression - (concat short-start-name - " (" - (substring - (car (car short-group-list)) - (length short-start-name)) - ")"))) + (if (<= (length lst) speedbar-tag-regroup-maximum-length) + ;; Do nothing. Too short to bother with. + lst + ;; Break out sub-lists + (while lst + (if (speedbar-generic-list-group-p (car-safe lst)) + (setq newlst (cons (car lst) newlst)) + (setq sublst (cons (car lst) sublst))) + (setq lst (cdr lst))) + ;; Reverse newlst because it was made backwards. + ;; Sublist doesn't need reversing because the act + ;; of binning things will reverse it for us. + (setq newlst (nreverse newlst) + sublst sublst) + ;; Now, first find out how long our list is. Never let a + ;; list get-shorter than our minimum. + (if (<= (length sublst) speedbar-tag-split-minimum-length) + (setq work-list sublst) + (setq diff-idx (length (speedbar-try-completion "" sublst))) + ;; Sort the whole list into bins. + (while sublst + (let ((e (car sublst)) + (s (car (car sublst)))) + (cond ((<= (length s) diff-idx) + ;; 0 storage bin for shorty. + (aset bins 0 (cons e (aref bins 0)))) + (t + ;; stuff into a bin based on ascii value at diff + (aset bins (aref s diff-idx) + (cons e (aref bins (aref s diff-idx))))))) + (setq sublst (cdr sublst))) + ;; Go through all our bins Stick singles into our + ;; junk-list, everything else as sublsts in work-list. + ;; If two neighboring lists are both small, make a grouped + ;; group combinding those two sub-lists. + (setq diff-idx 0) + (while (> 256 diff-idx) + ;; The bins contents are currently in forward order. + (let ((l (aref bins diff-idx))) + (if l + (let ((tmp (cons (speedbar-try-completion "" l) l))) + (if (or (> (length l) speedbar-tag-regroup-maximum-length) + (> (+ (length l) (length short-group-list)) + speedbar-tag-split-minimum-length)) + (progn + ;; We have reached a longer list, so we + ;; must finish off a grouped group. + (cond + ((and short-group-list + (= (length short-group-list) + num-shorts-grouped)) + ;; All singles? Junk list + (setq junk-list (append (nreverse short-group-list) + junk-list))) + ((= num-shorts-grouped 1) + ;; Only one short group? Just stick it in + ;; there by itself. Make a group, and find + ;; a subexpression + (let ((subexpression (speedbar-try-completion + "" short-group-list))) + (if (< (length subexpression) + speedbar-tag-group-name-minimum-length) + (setq subexpression + (concat short-start-name + " (" + (substring + (car (car short-group-list)) + (length short-start-name)) + ")"))) + (setq work-list + (cons (cons subexpression + short-group-list) + work-list )))) + (short-group-list + ;; Multiple groups to be named in a special + ;; way by displaying the range over which we + ;; have grouped them. (setq work-list - (cons (cons subexpression + (cons (cons (concat short-start-name + " to " + short-end-name) short-group-list) work-list)))) - (short-group-list - ;; Multiple groups to be named in a special - ;; way by displaying the range over which we - ;; have grouped them. - (setq work-list - (cons (cons (concat short-start-name - " to " - short-end-name) - (nreverse short-group-list)) - work-list)))) - ;; Reset short group list information every time. - (setq short-group-list nil - short-start-name nil - short-end-name nil - num-shorts-grouped 0))) - ;; Ok, now that we cleaned up the short-group-list, - ;; we can deal with this new list, to decide if it - ;; should go on one of these sub-lists or not. - (if (< (length l) speedbar-tag-regroup-maximum-length) - (setq short-group-list (append short-group-list l) - num-shorts-grouped (1+ num-shorts-grouped) - short-end-name (car tmp) - short-start-name (if short-start-name - short-start-name - (car tmp))) - (setq work-list (cons tmp work-list)))))) - (setq diff-idx (1+ diff-idx)))) - ;; Did we run out of things? Drop our new list onto the end. - (cond - ((and short-group-list (= (length short-group-list) num-shorts-grouped)) - ;; All singles? Junk list - (setq junk-list (append short-group-list junk-list))) - ((= num-shorts-grouped 1) - ;; Only one short group? Just stick it in - ;; there by itself. - (setq work-list - (cons (cons (try-completion "" short-group-list) - short-group-list) - work-list))) - (short-group-list - ;; Multiple groups to be named in a special - ;; way by displaying the range over which we - ;; have grouped them. - (setq work-list - (cons (cons (concat short-start-name " to " short-end-name) - short-group-list) - work-list)))) - ;; Reverse the work list nreversed when consing. - (setq work-list (nreverse work-list)) - ;; Now, stick our new list onto the end of - (if work-list - (if junk-list - (append newlst work-list junk-list) - (append newlst work-list)) - (append newlst junk-list)))) + ;; Reset short group list information every time. + (setq short-group-list nil + short-start-name nil + short-end-name nil + num-shorts-grouped 0))) + ;; Ok, now that we cleaned up the short-group-list, + ;; we can deal with this new list, to decide if it + ;; should go on one of these sub-lists or not. + (if (< (length l) speedbar-tag-regroup-maximum-length) + (setq short-group-list (append l short-group-list) + num-shorts-grouped (1+ num-shorts-grouped) + short-end-name (car tmp) + short-start-name (if short-start-name + short-start-name + (car tmp))) + (setq work-list (cons tmp work-list)))))) + (setq diff-idx (1+ diff-idx)))) + ;; Did we run out of things? Drop our new list onto the end. + (cond + ((and short-group-list (= (length short-group-list) num-shorts-grouped)) + ;; All singles? Junk list + (setq junk-list (append short-group-list junk-list))) + ((= num-shorts-grouped 1) + ;; Only one short group? Just stick it in + ;; there by itself. + (setq work-list + (cons (cons (speedbar-try-completion "" short-group-list) + short-group-list) + work-list))) + (short-group-list + ;; Multiple groups to be named in a special + ;; way by displaying the range over which we + ;; have grouped them. + (setq work-list + (cons (cons (concat short-start-name " to " short-end-name) + short-group-list) + work-list)))) + ;; Reverse the work list nreversed when consing. + (setq work-list (nreverse work-list)) + ;; Now, stick our new list onto the end of + (if work-list + (if junk-list + (append newlst work-list junk-list) + (append newlst work-list)) + (append newlst junk-list))))) (defun speedbar-trim-words-tag-hierarchy (lst) "Trim all words in a tag hierarchy. @@ -2568,17 +2270,18 @@ (trim-chars 0) (trimlst nil)) (while lst - (if (listp (cdr-safe (car-safe lst))) + (if (speedbar-generic-list-group-p (car-safe lst)) (setq newlst (cons (car lst) newlst)) (setq sublst (cons (car lst) sublst))) (setq lst (cdr lst))) ;; Get the prefix to trim by. Make sure that we don't trim ;; off silly pieces, only complete understandable words. - (setq trim-prefix (try-completion "" sublst)) + (setq trim-prefix (speedbar-try-completion "" sublst) + newlst (nreverse newlst)) (if (or (= (length sublst) 1) (not trim-prefix) (not (string-match "\\(\\w+\\W+\\)+" trim-prefix))) - (append (nreverse newlst) (nreverse sublst)) + (append newlst (nreverse sublst)) (setq trim-prefix (substring trim-prefix (match-beginning 0) (match-end 0))) (setq trim-chars (length trim-prefix)) @@ -2589,7 +2292,7 @@ trimlst) sublst (cdr sublst))) ;; Put the lists together - (append (nreverse newlst) trimlst)))) + (append newlst trimlst)))) (defun speedbar-simple-group-tag-hierarchy (lst) "Create a simple 'Tags' group with orphaned tags. @@ -2597,7 +2300,7 @@ (let ((newlst nil) (sublst nil)) (while lst - (if (listp (cdr-safe (car-safe lst))) + (if (speedbar-generic-list-group-p (car-safe lst)) (setq newlst (cons (car lst) newlst)) (setq sublst (cons (car lst) sublst))) (setq lst (cdr lst))) @@ -2612,7 +2315,8 @@ the list." (let* ((f (save-excursion (forward-line -1) - (speedbar-line-path))) + (or (speedbar-line-file) + (speedbar-line-directory)))) (methods (if (get-file-buffer f) (save-excursion (set-buffer (get-file-buffer f)) speedbar-tag-hierarchy-method) @@ -2625,6 +2329,16 @@ methods (cdr methods))) lst)) +(defvar speedbar-generic-list-group-expand-button-type 'curly + "The type of button created for groups of tags. +Good values for this are `curly' and `expandtag'. +Make buffer local for your mode.") + +(defvar speedbar-generic-list-tag-button-type nil + "The type of button created for tags in generic lists. +Good values for this are nil and `statictag'. +Make buffer local for your mode.") + (defun speedbar-insert-generic-list (level lst expand-fun find-fun) "At LEVEL, insert a generic multi-level alist LST. Associations with lists get {+} tags (to expand into more nodes) and @@ -2634,33 +2348,53 @@ ;; Remove imenu rescan button (if (string= (car (car lst)) "*Rescan*") (setq lst (cdr lst))) - ;; Adjust the list. - (setq lst (speedbar-create-tag-hierarchy lst)) - ;; insert the parts - (while lst - (cond ((null (car-safe lst)) nil) ;this would be a separator - ((or (numberp (cdr-safe (car-safe lst))) - (markerp (cdr-safe (car-safe lst)))) - (speedbar-make-tag-line nil nil nil nil ;no expand button data - (car (car lst)) ;button name - find-fun ;function - (cdr (car lst)) ;token is position - 'speedbar-tag-face - (1+ level))) - ((listp (cdr-safe (car-safe lst))) - (speedbar-make-tag-line 'curly ?+ expand-fun (cdr (car lst)) - (car (car lst)) ;button name - nil nil 'speedbar-tag-face - (1+ level))) - (t (speedbar-message "Ooops!"))) - (setq lst (cdr lst)))) + ;; Get, and set up variables that define how we treat these tags. + (let ((f (save-excursion (forward-line -1) + (or (speedbar-line-file) + (speedbar-line-directory)))) + expand-button tag-button) + (save-excursion + (if (get-file-buffer f) + (set-buffer (get-file-buffer f))) + (setq expand-button speedbar-generic-list-group-expand-button-type + tag-button speedbar-generic-list-tag-button-type)) + ;; Adjust the list. + (setq lst (speedbar-create-tag-hierarchy lst)) + ;; insert the parts + (while lst + (cond ((null (car-safe lst)) nil) ;this would be a separator + ((speedbar-generic-list-tag-p (car lst)) + (speedbar-make-tag-line tag-button + nil nil nil ;no expand button data + (car (car lst)) ;button name + find-fun ;function + (cdr (car lst)) ;token is position + 'speedbar-tag-face + (1+ level))) + ((speedbar-generic-list-positioned-group-p (car lst)) + (speedbar-make-tag-line expand-button + ?+ expand-fun (cdr (cdr (car lst))) + (car (car lst)) ;button name + find-fun ;function + (car (cdr (car lst))) ;token is posn + 'speedbar-tag-face + (1+ level))) + ((speedbar-generic-list-group-p (car lst)) + (speedbar-make-tag-line expand-button + ?+ expand-fun (cdr (car lst)) + (car (car lst)) ;button name + nil nil 'speedbar-tag-face + (1+ level))) + (t (speedbar-message "speedbar-insert-generic-list: malformed list!") + )) + (setq lst (cdr lst))))) (defun speedbar-insert-imenu-list (indent lst) "At level INDENT, insert the imenu generated LST." (speedbar-insert-generic-list indent lst 'speedbar-tag-expand 'speedbar-tag-find)) - + (defun speedbar-insert-etags-list (indent lst) "At level INDENT, insert the etags generated LST." (speedbar-insert-generic-list indent lst @@ -2674,8 +2408,10 @@ (interactive) ;; Set the current special buffer (setq speedbar-desired-buffer nil) + ;; Check for special modes (speedbar-maybe-add-localized-support (current-buffer)) + ;; Choose the correct method of doodling. (if (and speedbar-mode-specific-contents-flag (listp speedbar-special-mode-expansion-list) @@ -2687,19 +2423,61 @@ (speedbar-update-special-contents) (speedbar-update-directory-contents))) +(defun speedbar-update-localized-contents () + "Update the contents of the speedbar buffer for the current situation." + ;; Due to the historical growth of speedbar, we need to do something + ;; special for "files" mode. Too bad. + (let ((name speedbar-initial-expansion-list-name) + (funclst (speedbar-initial-expansion-list)) + ) + (if (string= name "files") + ;; Do all the files type work. It still goes through the + ;; expansion list stuff. :( + (if (or (member (expand-file-name default-directory) + speedbar-shown-directories) + (and speedbar-ignored-directory-regexp + (string-match + speedbar-ignored-directory-regexp + (expand-file-name default-directory)))) + nil + (if (<= 1 speedbar-verbosity-level) + (speedbar-message "Updating speedbar to: %s..." + default-directory)) + (speedbar-update-directory-contents) + (if (<= 1 speedbar-verbosity-level) + (progn + (speedbar-message "Updating speedbar to: %s...done" + default-directory) + (speedbar-message nil)))) + ;; Else, we can do a short cut. No text cache. + (let ((cbd (expand-file-name default-directory)) + ) + (set-buffer speedbar-buffer) + (speedbar-with-writable + (erase-buffer) + (while funclst + (setq default-directory cbd) + (funcall (car funclst) cbd 0) + (setq funclst (cdr funclst))) + (speedbar-reconfigure-keymaps) + (goto-char (point-min))) + )))) + (defun speedbar-update-directory-contents () "Update the contents of the speedbar buffer based on the current directory." - (let ((cbd (expand-file-name default-directory)) - cbd-parent - (funclst (speedbar-initial-expansion-list)) - (cache speedbar-full-text-cache) - ;; disable stealth during update - (speedbar-stealthy-function-list nil) - (use-cache nil) - (expand-local nil) - ;; Because there is a bug I can't find just yet - (inhibit-quit nil)) - (save-excursion + + (save-excursion + + (let ((cbd (expand-file-name default-directory)) + cbd-parent + (funclst (speedbar-initial-expansion-list)) + (cache speedbar-full-text-cache) + ;; disable stealth during update + (speedbar-stealthy-function-list nil) + (use-cache nil) + (expand-local nil) + ;; Because there is a bug I can't find just yet + (inhibit-quit nil)) (set-buffer speedbar-buffer) ;; If we are updating contents to where we are, then this is ;; really a request to update existing contents, so we must be @@ -2725,7 +2503,7 @@ (setq expand-local t) ;; If this directory is NOT in the current list of available - ;; paths, then use the cache, and set the cache to our new + ;; directorys, then use the cache, and set the cache to our new ;; value. Make sure to unhighlight the current file, or if we ;; come back to this directory, it might be a different file ;; and then we get a mess! @@ -2747,7 +2525,7 @@ (speedbar-with-writable (if (and expand-local ;; Find this directory as a speedbar node. - (speedbar-path-line cbd)) + (speedbar-directory-line cbd)) ;; Open it. (speedbar-expand-line) (erase-buffer) @@ -2788,24 +2566,40 @@ ;; decide NOT to update themselves. (funcall (car funclst) specialbuff) (setq funclst (cdr funclst)))) + (goto-char (point-min)))) (speedbar-reconfigure-keymaps)) +(defun speedbar-set-timer (timeout) + "Set up the speedbar timer with TIMEOUT. +Uses `dframe-set-timer'. +Also resets scanner functions." + (dframe-set-timer timeout 'speedbar-timer-fn 'speedbar-update-flag) + ;; Apply a revert hook that will reset the scanners. We attach to revert + ;; because most reverts occur during VC state change, and this lets our + ;; VC scanner fix itself. + (if timeout + (add-hook 'after-revert-hook 'speedbar-reset-scanners) + (remove-hook 'after-revert-hook 'speedbar-reset-scanners)) + ;; change this if it changed for some reason + (speedbar-set-mode-line-format)) + (defun speedbar-timer-fn () "Run whenever Emacs is idle to update the speedbar item." - (if (not (and (frame-live-p speedbar-frame) - (frame-live-p speedbar-attached-frame))) + (if (or (not (speedbar-current-frame)) + (not (frame-live-p (speedbar-current-frame)))) (speedbar-set-timer nil) ;; Save all the match data so that we don't mess up executing fns (save-match-data ;; Only do stuff if the frame is visible, not an icon, and if ;; it is currently flagged to do something. (if (and speedbar-update-flag - (frame-visible-p speedbar-frame) - (not (eq (frame-visible-p speedbar-frame) 'icon))) + (speedbar-current-frame) + (frame-visible-p (speedbar-current-frame)) + (not (eq (frame-visible-p (speedbar-current-frame)) 'icon))) (let ((af (selected-frame))) (save-window-excursion - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) ;; make sure we at least choose a window to ;; get a good directory from (if (window-minibuffer-p (selected-window)) @@ -2833,30 +2627,15 @@ major-mode) (speedbar-message nil)))) ;; Update all the contents if directories change! - (if (or (member (expand-file-name default-directory) - speedbar-shown-directories) - (and speedbar-ignored-path-regexp - (string-match - speedbar-ignored-path-regexp - (expand-file-name default-directory))) - (member major-mode speedbar-ignored-modes) - (eq af speedbar-frame) + (if (or (member major-mode speedbar-ignored-modes) + (eq af (speedbar-current-frame)) (not (buffer-file-name))) nil - (if (<= 1 speedbar-verbosity-level) - (speedbar-message "Updating speedbar to: %s..." - default-directory)) - (speedbar-update-directory-contents) - (if (<= 1 speedbar-verbosity-level) - (progn - (speedbar-message "Updating speedbar to: %s...done" - default-directory) - (speedbar-message nil))))) + (speedbar-update-localized-contents) + )) (select-frame af))) ;; Now run stealthy updates of time-consuming items - (speedbar-stealthy-updates))) - ;; Now run the mouse tracking system - (speedbar-show-info-under-mouse))) + (speedbar-stealthy-updates))))) (run-hooks 'speedbar-timer-hook)) @@ -2884,12 +2663,16 @@ "Reset any variables used by functions in the stealthy list as state. If new functions are added, their state needs to be updated here." (setq speedbar-vc-to-do-point t - speedbar-obj-to-do-point t) + speedbar-obj-to-do-point t + speedbar-ro-to-do-point t) (run-hooks 'speedbar-scanner-reset-hook) ) (defun speedbar-find-selected-file (file) "Go to the line where FILE is." + + (set-buffer speedbar-buffer) + (goto-char (point-min)) (let ((m nil)) (while (and (setq m (re-search-forward @@ -2898,7 +2681,7 @@ nil t)) (not (string= file (concat - (speedbar-line-path + (speedbar-line-directory (save-excursion (goto-char (match-beginning 0)) (beginning-of-line) @@ -2914,7 +2697,7 @@ (defun speedbar-clear-current-file () "Locate the file thought to be current, and remove its highlighting." (save-excursion - (set-buffer speedbar-buffer) + ;;(set-buffer speedbar-buffer) (if speedbar-last-selected-file (speedbar-with-writable (if (speedbar-find-selected-file speedbar-last-selected-file) @@ -2930,7 +2713,7 @@ updated." (let* ((lastf (selected-frame)) (newcfd (save-excursion - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (let ((rf (if (buffer-file-name) (buffer-file-name) nil))) @@ -2939,7 +2722,7 @@ (newcf (if newcfd newcfd)) (lastb (current-buffer)) (sucf-recursive (boundp 'sucf-recursive)) - (case-fold-search read-file-name-completion-ignore-case)) + (case-fold-search t)) (if (and newcf ;; check here, that way we won't refresh to newcf until ;; its been written, thus saving ourselves some time @@ -2949,11 +2732,11 @@ ;; It is important to select the frame, otherwise the window ;; we want the cursor to move in will not be updated by the ;; search-forward command. - (select-frame speedbar-frame) + (select-frame (speedbar-current-frame)) ;; Remove the old file... (speedbar-clear-current-file) ;; now highlight the new one. - (set-buffer speedbar-buffer) + ;; (set-buffer speedbar-buffer) (speedbar-with-writable (if (speedbar-find-selected-file newcf) ;; put the property on it @@ -2979,7 +2762,13 @@ (setq speedbar-last-selected-file newcf)) (if (not sucf-recursive) (progn - (speedbar-center-buffer-smartly) + + ;;Sat Dec 15 2001 12:40 AM (burton@openprivacy.org): this + ;;doesn't need to be in. We don't want to recenter when we are + ;;updating files. + + ;;(speedbar-center-buffer-smartly) + (speedbar-position-cursor-on-line) )) (set-buffer lastb) @@ -2997,6 +2786,7 @@ ;; The nature of the beast: Assume we are in "the right place" (end-of-line) (skip-chars-backward (concat " " speedbar-vc-indicator + speedbar-object-read-only-indicator (car speedbar-obj-indicator) (cdr speedbar-obj-indicator))) (if (and (not (looking-at speedbar-indicator-regex)) @@ -3011,7 +2801,43 @@ (delete-region (match-beginning 0) (match-end 0)))) (end-of-line) (if (not (string= " " indicator-string)) - (insert indicator-string)))) + (let ((start (point))) + (insert indicator-string) + (speedbar-insert-image-button-maybe start (length indicator-string)) + )))) + +(defun speedbar-check-read-only () + "Scan all the files in a directory, and for each see if it is read only." + ;; Check for to-do to be reset. If reset but no RCS is available + ;; then set to nil (do nothing) otherwise, start at the beginning + (save-excursion + (if speedbar-buffer (set-buffer speedbar-buffer)) + (if (eq speedbar-ro-to-do-point t) + (setq speedbar-ro-to-do-point 0)) + (if (numberp speedbar-ro-to-do-point) + (progn + (goto-char speedbar-ro-to-do-point) + (while (and (not (input-pending-p)) + (re-search-forward "^\\([0-9]+\\):\\s-*[[<][+-\?][]>] " + nil t)) + (setq speedbar-ro-to-do-point (point)) + (let ((f (speedbar-line-file))) + (if f + (if (not (file-writable-p f)) + (speedbar-add-indicator + speedbar-object-read-only-indicator + (regexp-quote speedbar-object-read-only-indicator)) + (speedbar-add-indicator + " " (regexp-quote + speedbar-object-read-only-indicator)))))) + (if (input-pending-p) + ;; return that we are incomplete + nil + ;; we are done, set to-do to nil + (setq speedbar-ro-to-do-point nil) + ;; and return t + t)) + t))) ;; Load efs/ange-ftp only if compiling to remove byte-compiler warnings. ;; Steven L Baur <steve@xemacs.org> said this was important: @@ -3026,26 +2852,30 @@ ;; Check for to-do to be reset. If reset but no RCS is available ;; then set to nil (do nothing) otherwise, start at the beginning (save-excursion - (set-buffer speedbar-buffer) + (if speedbar-buffer (set-buffer speedbar-buffer)) (if (and speedbar-vc-do-check (eq speedbar-vc-to-do-point t) (speedbar-vc-check-dir-p default-directory) (not (or (and (featurep 'ange-ftp) (string-match - (car (if speedbar-xemacsp - ange-ftp-path-format - ange-ftp-name-format)) + (car (symbol-value + (if dframe-xemacsp + 'ange-ftp-directory-format + 'ange-ftp-name-format))) (expand-file-name default-directory))) ;; efs support: Bob Weiner (and (featurep 'efs) (string-match - (car efs-path-regexp) + (let ((reg (symbol-value 'efs-directory-regexp))) + (if (stringp reg) + reg + (car reg))) (expand-file-name default-directory)))))) (setq speedbar-vc-to-do-point 0)) (if (numberp speedbar-vc-to-do-point) (progn (goto-char speedbar-vc-to-do-point) (while (and (not (input-pending-p)) - (re-search-forward "^\\([0-9]+\\):\\s-*\\[[+-]\\] " + (re-search-forward "^\\([0-9]+\\):\\s-*\\[[+-?]\\] " nil t)) (setq speedbar-vc-to-do-point (point)) (if (speedbar-check-vc-this-line (match-string 1)) @@ -3066,8 +2896,8 @@ "Return t if the file on this line is check of of a version control system. Parameter DEPTH is a string with the current depth of indentation of the file being checked." - (let* ((d (string-to-int depth)) - (f (speedbar-line-path d)) + (let* ((d (string-to-number depth)) + (f (speedbar-line-directory d)) (fn (buffer-substring-no-properties ;; Skip-chars: thanks ptype@dra.hmg.gb (point) (progn @@ -3081,41 +2911,54 @@ (and (file-writable-p fulln) (speedbar-this-file-in-vc f fn)))) -(defun speedbar-vc-check-dir-p (path) - "Return t if we should bother checking PATH for version control files. +(defun speedbar-vc-check-dir-p (directory) + "Return t if we should bother checking DIRECTORY for version control files. This can be overloaded to add new types of version control systems." (or + ;; Local CVS available in Emacs 21 + (and (fboundp 'vc-state) + (file-exists-p (concat directory "CVS/"))) ;; Local RCS - (file-exists-p (concat path "RCS/")) + (file-exists-p (concat directory "RCS/")) ;; Local SCCS - (file-exists-p (concat path "SCCS/")) + (file-exists-p (concat directory "SCCS/")) ;; Remote SCCS project (let ((proj-dir (getenv "PROJECTDIR"))) (if proj-dir (file-exists-p (concat proj-dir "/SCCS")) nil)) ;; User extension - (run-hook-with-args 'speedbar-vc-path-enable-hook path) + (run-hook-with-args-until-success 'speedbar-vc-directory-enable-hook + directory) )) -(defun speedbar-this-file-in-vc (path name) - "Check to see if the file in PATH with NAME is in a version control system. +(defun speedbar-this-file-in-vc (directory name) + "Check to see if the file in DIRECTORY with NAME is in a version control system. You can add new VC systems by overriding this function. You can optimize this function by overriding it and only doing those checks that will occur on your system." (or - ;; RCS file name - (file-exists-p (concat path "RCS/" name ",v")) - (file-exists-p (concat path "RCS/" name)) - ;; Local SCCS file name - (file-exists-p (concat path "SCCS/s." name)) - ;; Remote SCCS file name - (let ((proj-dir (getenv "PROJECTDIR"))) - (if proj-dir - (file-exists-p (concat proj-dir "/SCCS/s." name)) - nil)) + (if (fboundp 'vc-state) + ;; Emacs 21 handles VC state in a nice way. + (condition-case nil + (let ((state (vc-state (concat directory name)))) + (not (or (eq 'up-to-date state) + (null state)))) + ;; An error means not in a VC system + (error nil)) + (or + ;; RCS file name + (file-exists-p (concat directory "RCS/" name ",v")) + (file-exists-p (concat directory "RCS/" name)) + ;; Local SCCS file name + (file-exists-p (concat directory "SCCS/s." name)) + ;; Remote SCCS file name + (let ((proj-dir (getenv "PROJECTDIR"))) + (if proj-dir + (file-exists-p (concat proj-dir "/SCCS/s." name)) + nil)))) ;; User extension - (run-hook-with-args 'speedbar-vc-in-control-hook path name) + (run-hook-with-args 'speedbar-vc-in-control-hook directory name) )) ;; Objet File scanning @@ -3126,7 +2969,7 @@ ;; Check for to-do to be reset. If reset but no RCS is available ;; then set to nil (do nothing) otherwise, start at the beginning (save-excursion - (set-buffer speedbar-buffer) + (if speedbar-buffer (set-buffer speedbar-buffer)) (if (and speedbar-obj-do-check (eq speedbar-obj-to-do-point t)) (setq speedbar-obj-to-do-point 0)) (if (numberp speedbar-obj-to-do-point) @@ -3155,8 +2998,8 @@ "Return t if the file on this line has an associated object. Parameter DEPTH is a string with the current depth of indentation of the file being checked." - (let* ((d (string-to-int depth)) - (f (speedbar-line-path d)) + (let* ((d (string-to-number depth)) + (f (speedbar-line-directory d)) (fn (buffer-substring-no-properties ;; Skip-chars: thanks ptype@dra.hmg.gb (point) (progn @@ -3186,28 +3029,6 @@ ;;; Clicking Activity ;; -(defun speedbar-mouse-set-point (e) - "Set POINT based on event E. -Handle clicking on images in XEmacs." - (if (and (fboundp 'event-over-glyph-p) (event-over-glyph-p e)) - ;; We are in XEmacs, and clicked on a picture - (let ((ext (event-glyph-extent e))) - ;; This position is back inside the extent where the - ;; junk we pushed into the property list lives. - (if (extent-end-position ext) - (goto-char (1- (extent-end-position ext))) - (mouse-set-point e))) - ;; We are not in XEmacs, OR we didn't click on a picture. - (mouse-set-point e))) - -(defun speedbar-quick-mouse (e) - "Since mouse events are strange, this will keep the mouse nicely positioned. -This should be bound to mouse event E." - (interactive "e") - (speedbar-mouse-set-point e) - (speedbar-position-cursor-on-line) - ) - (defun speedbar-position-cursor-on-line () "Position the cursor on a line." (let ((oldpos (point))) @@ -3216,47 +3037,22 @@ (goto-char (1- (match-end 0))) (goto-char oldpos)))) -(defun speedbar-power-click (e) - "Activate any speedbar button as a power click. -A power click will dispose of cached data (if available) or bring a buffer -up into a different window. -This should be bound to mouse event E." - (interactive "e") - (let ((speedbar-power-click t)) - (speedbar-click e))) - (defun speedbar-click (e) "Activate any speedbar buttons where the mouse is clicked. This must be bound to a mouse event. A button is any location of text with a mouse face that has a text property called `speedbar-function'. -This should be bound to mouse event E." - (interactive "e") - (speedbar-mouse-set-point e) - (speedbar-do-function-pointer) - (speedbar-quick-mouse e)) - -(defun speedbar-double-click (e) - "Activate any speedbar buttons where the mouse is clicked. -This must be bound to a mouse event. A button is any location of text -with a mouse face that has a text property called `speedbar-function'. -This should be bound to mouse event E." - (interactive "e") - ;; Emacs only. XEmacs handles this via `mouse-track-click-hook'. - (cond ((eq (car e) 'down-mouse-1) - (speedbar-mouse-set-point e)) - ((eq (car e) 'mouse-1) - (speedbar-quick-mouse e)) - ((or (eq (car e) 'double-down-mouse-1) - (eq (car e) 'triple-down-mouse-1)) - (speedbar-mouse-set-point e) - (speedbar-do-function-pointer) - (speedbar-quick-mouse e)))) +Argument E is the click event." + ;; Backward compatibility let statement. + (let ((speedbar-power-click dframe-power-click)) + (speedbar-do-function-pointer)) + (dframe-quick-mouse e)) (defun speedbar-do-function-pointer () "Look under the cursor and examine the text properties. From this extract the file/tag name, token, indentation level and call a function if appropriate." - (let* ((fn (get-text-property (point) 'speedbar-function)) + (let* ((speedbar-frame (speedbar-current-frame)) + (fn (get-text-property (point) 'speedbar-function)) (tok (get-text-property (point) 'speedbar-token)) ;; The 1-,+ is safe because scaning starts AFTER the point ;; specified. This lets the search include the character the @@ -3286,9 +3082,8 @@ (if p (goto-char p)) (beginning-of-line) (if (looking-at (concat - "\\([0-9]+\\): *[[<{][-+?][]>}] \\([^ \n]+\\)\\(" - speedbar-indicator-regex "\\)?")) - (match-string 2) + "\\([0-9]+\\): *[[<{]?[-+?= ][]>}@()|] \\([^ \n]+\\)")) + (get-text-property (match-beginning 2) 'speedbar-text) nil))) (defun speedbar-line-token (&optional p) @@ -3298,7 +3093,7 @@ (if p (goto-char p)) (beginning-of-line) (if (looking-at (concat - "\\([0-9]+\\): *[[<{]?[-+?=][]>}@()|] \\([^ \n]+\\)\\(" + "\\([0-9]+\\): *[[<{]?[-+?= ][]>}@()|] \\([^ \n]+\\)\\(" speedbar-indicator-regex "\\)?")) (progn (goto-char (match-beginning 2)) @@ -3310,37 +3105,39 @@ The return value is a string representing the file. If it is a directory, then it is the directory name." (save-match-data - (let ((f (speedbar-line-text p))) - (if f - (let* ((depth (string-to-int (match-string 1))) - (path (speedbar-line-path depth))) - (if (file-exists-p (concat path f)) - (concat path f) - nil)) - nil)))) + (save-restriction + (widen) + (let ((f (speedbar-line-text p))) + (if f + (let* ((depth (string-to-number (match-string 1))) + (directory (speedbar-line-directory depth))) + (if (file-exists-p (concat directory f)) + (concat directory f) + nil)) + nil))))) (defun speedbar-goto-this-file (file) "If FILE is displayed, go to this line and return t. Otherwise do not move and return nil." - (let ((path (substring (file-name-directory (expand-file-name file)) + (let ((directory (substring (file-name-directory (expand-file-name file)) (length (expand-file-name default-directory)))) (dest (point))) (save-match-data (goto-char (point-min)) ;; scan all the directories - (while (and path (not (eq path t))) - (if (string-match "^[/\\]?\\([^/\\]+\\)" path) - (let ((pp (match-string 1 path))) + (while (and directory (not (eq directory t))) + (if (string-match "^[/\\]?\\([^/\\]+\\)" directory) + (let ((pp (match-string 1 directory))) (if (save-match-data (re-search-forward (concat "> " (regexp-quote pp) "$") nil t)) - (setq path (substring path (match-end 1))) - (setq path nil))) - (setq path t))) + (setq directory (substring directory (match-end 1))) + (setq directory nil))) + (setq directory t))) ;; find the file part - (if (or (not path) (string= (file-name-nondirectory file) "")) + (if (or (not directory) (string= (file-name-nondirectory file) "")) ;; only had a dir part - (if path + (if directory (progn (speedbar-position-cursor-on-line) t) @@ -3357,16 +3154,18 @@ (goto-char dest) nil)))))) -(defun speedbar-line-path (&optional depth) - "Retrieve the pathname associated with the current line. +(defun speedbar-line-directory (&optional depth) + "Retrieve the directory name associated with the current line. This may require traversing backwards from DEPTH and combining the default directory with these items. This function is replaceable in -`speedbar-mode-functions-list' as `speedbar-line-path'." - (let ((rf (speedbar-fetch-replacement-function 'speedbar-line-path))) - (if rf (funcall rf depth) default-directory))) - -(defun speedbar-files-line-path (&optional depth) - "Retrieve the pathname associated with the current line. +`speedbar-mode-functions-list' as `speedbar-line-directory'." + (save-restriction + (widen) + (let ((rf (speedbar-fetch-replacement-function 'speedbar-line-directory))) + (if rf (funcall rf depth) default-directory)))) + +(defun speedbar-files-line-directory (&optional depth) + "Retrieve the directoryname associated with the current line. This may require traversing backwards from DEPTH and combining the default directory with these items." (save-excursion @@ -3375,38 +3174,36 @@ (progn (beginning-of-line) (looking-at "^\\([0-9]+\\):") - (setq depth (string-to-int (match-string 1))))) - (let ((path nil)) + (setq depth (string-to-number (match-string 1))))) + (let ((directory nil)) (setq depth (1- depth)) (while (/= depth -1) (if (not (re-search-backward (format "^%d:" depth) nil t)) - (error "Error building path of tag") - (cond ((looking-at "[0-9]+:\\s-*<->\\s-+\\([^\n]+\\)$") - (setq path (concat (buffer-substring-no-properties - (match-beginning 1) (match-end 1)) + (error "Error building filename of tag") + (cond ((looking-at "[0-9]+:\\s-*<->\\s-+\\([^\n]+\\)") + (setq directory (concat (speedbar-line-text) "/" - path))) - ((looking-at "[0-9]+:\\s-*[-]\\s-+\\([^\n]+\\)$") - ;; This is the start of our path. - (setq path (buffer-substring-no-properties - (match-beginning 1) (match-end 1)))))) + directory))) + ((looking-at "[0-9]+:\\s-*[-]\\s-+\\([^\n]+\\)") + ;; This is the start of our directory. + (setq directory (speedbar-line-text))))) (setq depth (1- depth))) - (if (and path + (if (and directory (string-match (concat speedbar-indicator-regex "$") - path)) - (setq path (substring path 0 (match-beginning 0)))) - (concat default-directory path))))) - -(defun speedbar-path-line (path) - "Position the cursor on the line specified by PATH." + directory)) + (setq directory (substring directory 0 (match-beginning 0)))) + (concat default-directory directory))))) + +(defun speedbar-directory-line (directory) + "Position the cursor on the line specified by DIRECTORY." (save-match-data - (if (string-match "[/\\]$" path) - (setq path (substring path 0 (match-beginning 0)))) + (if (string-match "[/\\]$" directory) + (setq directory (substring directory 0 (match-beginning 0)))) (let ((nomatch t) (depth 0) - (fname (file-name-nondirectory path)) - (pname (file-name-directory path))) + (fname (file-name-nondirectory directory)) + (pname (file-name-directory directory))) (if (not (member pname speedbar-shown-directories)) - (error "Internal Error: File %s not shown in speedbar" path)) + (error "Internal Error: File %s not shown in speedbar" directory)) (goto-char (point-min)) (while (and nomatch (re-search-forward @@ -3415,8 +3212,8 @@ nil t)) (beginning-of-line) (looking-at "\\([0-9]+\\):") - (setq depth (string-to-int (match-string 0)) - nomatch (not (string= pname (speedbar-line-path depth)))) + (setq depth (string-to-number (match-string 0)) + nomatch (not (string= pname (speedbar-line-directory depth)))) (end-of-line)) (beginning-of-line) (not nomatch)))) @@ -3442,7 +3239,8 @@ With universal argument ARG, flush cached data." (interactive "P") (beginning-of-line) - (let ((speedbar-power-click arg)) + (let* ((dframe-power-click arg) + (speedbar-power-click arg)) (condition-case nil (progn (re-search-forward ":\\s-*.\\+. " @@ -3450,12 +3248,12 @@ (forward-char -2) (speedbar-do-function-pointer)) (error (speedbar-position-cursor-on-line))))) - + (defun speedbar-flush-expand-line () "Expand the line under the cursor and flush any cached information." (interactive) (speedbar-expand-line 1)) - + (defun speedbar-contract-line () "Contract the line under the cursor." (interactive) @@ -3468,39 +3266,63 @@ (speedbar-do-function-pointer)) (error (speedbar-position-cursor-on-line)))) -(if speedbar-xemacsp - (defalias 'speedbar-mouse-event-p 'button-press-event-p) - (defun speedbar-mouse-event-p (event) - "Return t if the event is a mouse related event." - ;; And Emacs does it this way - (if (and (listp event) - (member (event-basic-type event) - '(mouse-1 mouse-2 mouse-3))) - t - nil))) - -(defun speedbar-maybee-jump-to-attached-frame () - "Jump to the attached frame ONLY if this was not a mouse event." - (if (or (not (speedbar-mouse-event-p last-input-event)) - speedbar-activity-change-focus-flag) +(defun speedbar-toggle-line-expansion () + "Contract or expand the line under the cursor." + (interactive) + (beginning-of-line) + (condition-case nil (progn - (select-frame speedbar-attached-frame) - (other-frame 0)))) + (re-search-forward ":\\s-*.[-+]. " + (save-excursion (end-of-line) (point))) + (forward-char -2) + (speedbar-do-function-pointer)) + (error (speedbar-position-cursor-on-line)))) + +(defun speedbar-expand-line-descendants (&optional arg) + "Expand the line under the cursor and all descendants. +Optional argument ARG indicates that any cache should be flushed." + (interactive "P") + (speedbar-expand-line arg) + ;; Now, inside the area expaded here, expand all subnodes of + ;; the same descendant type. + (save-excursion + (speedbar-next 1) ;; Move into the list. + (let ((err nil)) + (while (not err) + (condition-case nil + (progn + (speedbar-expand-line-descendants arg) + (speedbar-restricted-next 1)) + (error (setq err t)))))) + ) + +(defun speedbar-contract-line-descendants () + "Expand the line under the cursor and all descendants." + (interactive) + (speedbar-contract-line) + ;; Don't need to do anything else since all descendants are + ;; hidden by default anyway. Yay! It's easy. + ) (defun speedbar-find-file (text token indent) "Speedbar click handler for filenames. TEXT, the file will be displayed in the attached frame. TOKEN is unused, but required by the click handler. INDENT is the current indentation level." - (let ((cdd (speedbar-line-path indent))) + (let ((cdd (speedbar-line-directory indent))) + ;; Run before visiting file hook here. + (let ((f (selected-frame))) + (dframe-select-attached-frame speedbar-frame) + (run-hooks 'speedbar-before-visiting-file-hook) + (select-frame f)) (speedbar-find-file-in-frame (concat cdd text)) (speedbar-stealthy-updates) (run-hooks 'speedbar-visiting-file-hook) ;; Reset the timer with a new timeout when cliking a file ;; in case the user was navigating directories, we can cancel ;; that other timer. - (speedbar-set-timer speedbar-update-speed)) - (speedbar-maybee-jump-to-attached-frame)) + (speedbar-set-timer dframe-update-speed)) + (dframe-maybee-jump-to-attached-frame)) (defun speedbar-dir-follow (text token indent) "Speedbar click handler for directory names. @@ -3508,7 +3330,7 @@ the subdirectory TEXT. TOKEN is an unused requirement. The subdirectory chosen will be at INDENT level." (setq default-directory - (concat (expand-file-name (concat (speedbar-line-path indent) text)) + (concat (expand-file-name (concat (speedbar-line-directory indent) text)) "/")) ;; Because we leave speedbar as the current buffer, ;; update contents will change directory without @@ -3528,7 +3350,7 @@ (end-of-line) (forward-char 1) (let ((start (point))) (while (and (looking-at "^\\([0-9]+\\):") - (> (string-to-int (match-string 1)) indent) + (> (string-to-number (match-string 1)) indent) (not (eobp))) (forward-line 1) (beginning-of-line)) @@ -3542,7 +3364,7 @@ (cond ((string-match "+" text) ;we have to expand this dir (setq speedbar-shown-directories (cons (expand-file-name - (concat (speedbar-line-path indent) token "/")) + (concat (speedbar-line-directory indent) token "/")) speedbar-shown-directories)) (speedbar-change-expand-button-char ?-) (speedbar-reset-scanners) @@ -3550,14 +3372,14 @@ (end-of-line) (forward-char 1) (speedbar-with-writable (speedbar-default-directory-list - (concat (speedbar-line-path indent) token "/") + (concat (speedbar-line-directory indent) token "/") (1+ indent))))) ((string-match "-" text) ;we have to contract this node (speedbar-reset-scanners) (let ((oldl speedbar-shown-directories) (newl nil) (td (expand-file-name - (concat (speedbar-line-path indent) token)))) + (concat (speedbar-line-directory indent) token)))) (while oldl (if (not (string-match (concat "^" (regexp-quote td)) (car oldl))) (setq newl (cons (car oldl) newl))) @@ -3568,7 +3390,6 @@ ) (t (error "Ooops... not sure what to do"))) (speedbar-center-buffer-smartly) - (setq speedbar-last-selected-file nil) (save-excursion (speedbar-stealthy-updates))) (defun speedbar-directory-buttons-follow (text token indent) @@ -3590,7 +3411,7 @@ clicked, and TOKEN is the file to expand. INDENT is the current indentation level." (cond ((string-match "+" text) ;we have to expand this file - (let* ((fn (expand-file-name (concat (speedbar-line-path indent) + (let* ((fn (expand-file-name (concat (speedbar-line-directory indent) token))) (mode nil) (lst (speedbar-fetch-dynamic-tags fn))) @@ -3611,17 +3432,20 @@ (defun speedbar-tag-find (text token indent) "For the tag TEXT in a file TOKEN, go to that position. INDENT is the current indentation level." - (let ((file (speedbar-line-path indent))) + (let ((file (speedbar-line-directory indent))) + (let ((f (selected-frame))) + (dframe-select-attached-frame speedbar-frame) + (run-hooks 'speedbar-before-visiting-tag-hook) + (select-frame f)) (speedbar-find-file-in-frame file) (save-excursion (speedbar-stealthy-updates)) ;; Reset the timer with a new timeout when cliking a file ;; in case the user was navigating directories, we can cancel ;; that other timer. - (speedbar-set-timer speedbar-update-speed) + (speedbar-set-timer dframe-update-speed) (goto-char token) (run-hooks 'speedbar-visiting-tag-hook) - ;;(recenter) - (speedbar-maybee-jump-to-attached-frame) + (dframe-maybee-jump-to-attached-frame) )) (defun speedbar-tag-expand (text token indent) @@ -3644,6 +3468,14 @@ ;;; Loading files into the attached frame. ;; +(defcustom speedbar-select-frame-method 'attached + "*Specify how to select a frame for displaying a file. +A value of 'attached means to use the attached frame (the frame +that speedbar was started from.) A number such as 1 or -1 means to +pass that number to `other-frame' while selecting a frame from speedbar." + :group 'speedbar + :type 'sexp) + (defun speedbar-find-file-in-frame (file) "This will load FILE into the speedbar attached frame. If the file is being displayed in a different frame already, then raise that @@ -3654,9 +3486,11 @@ (progn (select-window bwin) (raise-frame (window-frame bwin))) - (if speedbar-power-click + (if dframe-power-click (let ((pop-up-frames t)) (select-window (display-buffer buff))) - (select-frame speedbar-attached-frame) + (if (numberp speedbar-select-frame-method) + (other-frame speedbar-select-frame-method) + (dframe-select-attached-frame speedbar-frame)) (switch-to-buffer buff)))) ) @@ -3666,61 +3500,69 @@ "Recenter a speedbar buffer so the current indentation level is all visible. This assumes that the cursor is on a file, or tag of a file which the user is interested in." - (if (<= (count-lines (point-min) (point-max)) - (1- (window-height (selected-window)))) - ;; whole buffer fits - (let ((cp (point))) - (goto-char (point-min)) - (recenter 0) - (goto-char cp)) - ;; too big - (let (depth start end exp p) - (save-excursion - (beginning-of-line) - (setq depth (if (looking-at "[0-9]+") - (string-to-int (buffer-substring-no-properties - (match-beginning 0) (match-end 0))) - 0)) - (setq exp (format "^%d:\\s-*[[{<]\\([?+-]\\)[]>}]" depth))) - (save-excursion - (end-of-line) - (if (re-search-backward exp nil t) - (setq start (point)) - (setq start (point-min))) - (save-excursion ;Not sure about this part. + + (save-selected-window + + (select-window (get-buffer-window speedbar-buffer t)) + + (set-buffer speedbar-buffer) + + (if (<= (count-lines (point-min) (point-max)) + (1- (window-height (selected-window)))) + ;; whole buffer fits + (let ((cp (point))) + + (goto-char (point-min)) + (recenter 0) + (goto-char cp)) + ;; too big + (let (depth start end exp p) + (save-excursion + (beginning-of-line) + (setq depth (if (looking-at "[0-9]+") + (string-to-number (buffer-substring-no-properties + (match-beginning 0) (match-end 0))) + 0)) + (setq exp (format "^%d:" depth))) + (save-excursion (end-of-line) - (setq p (point)) - (while (and (not (re-search-forward exp nil t)) - (>= depth 0)) - (setq depth (1- depth)) - (setq exp (format "^%d:\\s-*[[{<]\\([?+-]\\)[]>}]" depth))) - (if (/= (point) p) - (setq end (point)) - (setq end (point-max))))) - ;; Now work out the details of centering - (let ((nl (count-lines start end)) - (cp (point))) - (if (> nl (window-height (selected-window))) - ;; We can't fit it all, so just center on cursor - (progn (goto-char start) - (recenter 1)) - ;; we can fit everything on the screen, but... - (if (and (pos-visible-in-window-p start (selected-window)) - (pos-visible-in-window-p end (selected-window))) - ;; we are all set! - nil - ;; we need to do something... - (goto-char start) - (let ((newcent (/ (- (window-height (selected-window)) nl) 2)) - (lte (count-lines start (point-max)))) - (if (and (< (+ newcent lte) (window-height (selected-window))) - (> (- (window-height (selected-window)) lte 1) - newcent)) - (setq newcent (- (window-height (selected-window)) - lte 1))) - (recenter newcent)))) - (goto-char cp))))) - + (if (re-search-backward exp nil t) + (setq start (point)) + (setq start (point-min))) + (save-excursion ;Not sure about this part. + (end-of-line) + (setq p (point)) + (while (and (not (re-search-forward exp nil t)) + (>= depth 0)) + (setq depth (1- depth)) + (setq exp (format "^%d:" depth))) + (if (/= (point) p) + (setq end (point)) + (setq end (point-max))))) + ;; Now work out the details of centering + (let ((nl (count-lines start end)) + (wl (1- (window-height (selected-window)))) + (cp (point))) + (if (> nl wl) + ;; We can't fit it all, so just center on cursor + (progn (goto-char start) + (recenter 1)) + ;; we can fit everything on the screen, but... + (if (and (pos-visible-in-window-p start (selected-window)) + (pos-visible-in-window-p end (selected-window))) + ;; we are all set! + nil + ;; we need to do something... + (goto-char start) + (let ((newcent (/ (- (window-height (selected-window)) nl) 2)) + (lte (count-lines start (point-max)))) + (if (and (< (+ newcent lte) (window-height (selected-window))) + (> (- (window-height (selected-window)) lte 1) + newcent)) + (setq newcent (- (window-height (selected-window)) + lte 1))) + (recenter newcent)))) + (goto-char cp)))))) ;;; Tag Management -- List of expanders: ;; @@ -3730,7 +3572,12 @@ to find the proper tags. It is up to each of those individual functions to do caching and flushing if appropriate." (save-excursion - (set-buffer (find-file-noselect file)) + ;; If a file is in memory, switch to that buffer. This allows + ;; us to use the local variable. If the file is on disk, we + ;; can try a few of the defaults that can get tags without + ;; opening the file. + (if (get-file-buffer file) + (set-buffer (get-file-buffer file))) ;; If there is a buffer-local value of ;; speedbar-dynamic-tags-function-list, it will now be available. (let ((dtf speedbar-dynamic-tags-function-list) @@ -3738,7 +3585,7 @@ (while (and (eq ret t) dtf) (setq ret (if (fboundp (car (car dtf))) - (funcall (car (car dtf)) (buffer-file-name)) + (funcall (car (car dtf)) file) t)) (if (eq ret t) (setq dtf (cdr dtf)))) @@ -3762,7 +3609,8 @@ Returns the tag list, or t for an error." ;; Load this AND compile it in (require 'imenu) - (if speedbar-power-click (setq imenu--index-alist nil)) + (set-buffer (find-file-noselect file)) + (if dframe-power-click (setq imenu--index-alist nil)) (condition-case nil (let ((index-alist (imenu--make-index-alist t))) (if speedbar-sort-tags @@ -3776,7 +3624,7 @@ ;; (defvar speedbar-fetch-etags-parse-list '(;; Note that java has the same parse-group as c - ("\\.\\([cChH]\\|c\\+\\+\\|cpp\\|cc\\|hh\\|java\\)\\'" . + ("\\.\\([cChH]\\|c\\+\\+\\|cpp\\|cc\\|hh\\|java\\|cxx\\|hxx\\)\\'" . speedbar-parse-c-or-c++tag) ("^\\.emacs$\\|.\\(el\\|l\\|lsp\\)\\'" . "def[^i]+\\s-+\\(\\(\\w\\|[-_]\\)+\\)\\s-*\C-?") @@ -3906,7 +3754,7 @@ (point)) t))) (if (and j sym) - (1+ (string-to-int (buffer-substring-no-properties + (1+ (string-to-number (buffer-substring-no-properties (match-beginning 2) (match-end 2)))) 0)))) @@ -3955,6 +3803,7 @@ (define-key speedbar-buffers-key-map "+" 'speedbar-expand-line) (define-key speedbar-buffers-key-map "=" 'speedbar-expand-line) (define-key speedbar-buffers-key-map "-" 'speedbar-contract-line) + (define-key speedbar-buffers-key-map " " 'speedbar-toggle-line-expansion) ;; Buffer specific keybindings (define-key speedbar-buffers-key-map "k" 'speedbar-buffer-kill-buffer) @@ -3975,28 +3824,29 @@ (looking-at "[0-9]+: *.-. "))] ["Kill Buffer" speedbar-buffer-kill-buffer (save-excursion (beginning-of-line) - (looking-at "[0-9]+: *.-. "))] + (looking-at "[0-9]+: *.[-+?]. "))] ["Revert Buffer" speedbar-buffer-revert-buffer (save-excursion (beginning-of-line) - (looking-at "[0-9]+: *.-. "))] + (looking-at "[0-9]+: *.[-+?]. "))] ) "Menu item elements shown when displaying a buffer list.") (defun speedbar-buffer-buttons (directory zero) "Create speedbar buttons based on the buffers currently loaded. -DIRECTORY is the path to the currently active buffer, and ZERO is 0." +DIRECTORY is the directory to the currently active buffer, and ZERO is 0." (speedbar-buffer-buttons-engine nil)) (defun speedbar-buffer-buttons-temp (directory zero) "Create speedbar buttons based on the buffers currently loaded. -DIRECTORY is the path to the currently active buffer, and ZERO is 0." +DIRECTORY is the directory to the currently active buffer, and ZERO is 0." (speedbar-buffer-buttons-engine t)) (defun speedbar-buffer-buttons-engine (temp) "Create speedbar buffer buttons. If TEMP is non-nil, then clicking on a buffer restores the previous display." - (insert "Active Buffers:\n") - (let ((bl (buffer-list))) + (speedbar-insert-separator "Active Buffers:") + (let ((bl (buffer-list)) + (case-fold-search t)) (while bl (if (string-match "^[ *]" (buffer-name (car bl))) nil @@ -4010,10 +3860,11 @@ (if fname (file-name-nondirectory fname)) (buffer-name (car bl)) 'speedbar-buffer-click temp - 'speedbar-file-face 0))) + 'speedbar-file-face 0) + (speedbar-buffers-tail-notes (car bl)))) (setq bl (cdr bl))) (setq bl (buffer-list)) - (insert "Scratch Buffers:\n") + (speedbar-insert-separator "Scratch Buffers:") (while bl (if (not (string-match "^\\*" (buffer-name (car bl)))) nil @@ -4022,20 +3873,33 @@ (speedbar-make-tag-line 'bracket ?? nil nil (buffer-name (car bl)) 'speedbar-buffer-click temp - 'speedbar-file-face 0))) + 'speedbar-file-face 0) + (speedbar-buffers-tail-notes (car bl)))) (setq bl (cdr bl))) (setq bl (buffer-list)) - (insert "Hidden Buffers:\n") - (while bl - (if (not (string-match "^ " (buffer-name (car bl)))) - nil - (if (eq (car bl) speedbar-buffer) - nil - (speedbar-make-tag-line 'bracket ?? nil nil - (buffer-name (car bl)) - 'speedbar-buffer-click temp - 'speedbar-file-face 0))) - (setq bl (cdr bl))))) + ;;(speedbar-insert-separator "Hidden Buffers:") + ;;(while bl + ;; (if (not (string-match "^ " (buffer-name (car bl)))) + ;; nil + ;; (if (eq (car bl) speedbar-buffer) + ;; nil + ;; (speedbar-make-tag-line 'bracket ?? nil nil + ;; (buffer-name (car bl)) + ;; 'speedbar-buffer-click temp + ;; 'speedbar-file-face 0) + ;; (speedbar-buffers-tail-notes (car bl)))) + ;; (setq bl (cdr bl))) + )) + +(defun speedbar-buffers-tail-notes (buffer) + "Add a note to the end of the last tag line. +Argument BUFFER is the buffer being tested." + (let (mod ro) + (save-excursion + (set-buffer buffer) + (setq mod (buffer-modified-p) + ro buffer-read-only)) + (if ro (speedbar-insert-button "%" nil nil nil nil t)))) (defun speedbar-buffers-item-info () "Display information about the current buffer on the current line." @@ -4051,8 +3915,8 @@ (buffer-size)) (or (buffer-file-name buffer) "<No file>")))))) -(defun speedbar-buffers-line-path (&optional depth) - "Fetch the full path to the file (buffer) specified on the current line. +(defun speedbar-buffers-line-directory (&optional depth) + "Fetch the full directory to the file (buffer) specified on the current line. Optional argument DEPTH specifies the current depth of the back search." (save-excursion (end-of-line) @@ -4066,15 +3930,17 @@ (if (save-excursion (end-of-line) (eq start (point))) - (file-name-directory (buffer-file-name buffer)) + (or (save-excursion (set-buffer buffer) + default-directory) + "") (buffer-file-name buffer)))))))) (defun speedbar-buffer-click (text token indent) "When the users clicks on a buffer-button in speedbar. TEXT is the buffer's name, TOKEN and INDENT are unused." - (if speedbar-power-click + (if dframe-power-click (let ((pop-up-frames t)) (select-window (display-buffer text))) - (select-frame speedbar-attached-frame) + (dframe-select-attached-frame speedbar-frame) (switch-to-buffer text) (if token (speedbar-change-initial-expansion-list speedbar-previously-used-expansion-list-name)))) @@ -4083,21 +3949,11 @@ "Kill the buffer the cursor is on in the speedbar buffer." (interactive) (or (save-excursion - (beginning-of-line) - ;; If this fails, then it is a non-standard click, and as such, - ;; perfectly allowed. - (if (re-search-forward "[]>?}] [^ ]" - (save-excursion (end-of-line) (point)) - t) - (let ((text (progn - (forward-char -1) - (buffer-substring (point) (save-excursion - (end-of-line) - (point)))))) - (if (and (get-buffer text) - (speedbar-y-or-n-p (format "Kill buffer %s? " text))) - (kill-buffer text)) - (speedbar-refresh)))))) + (let ((text (speedbar-line-text))) + (if (and (get-buffer text) + (speedbar-y-or-n-p (format "Kill buffer %s? " text))) + (kill-buffer text)) + (speedbar-refresh))))) (defun speedbar-buffer-revert-buffer () "Revert the buffer the cursor is on in the speedbar buffer." @@ -4168,7 +4024,7 @@ (:foreground "cyan4")) (((class color) (background dark)) (:foreground "cyan")) - (t (:weight bold))) + (t (:bold t))) "Face used for file names." :group 'speedbar-faces) @@ -4197,173 +4053,76 @@ (:background "green")) (((class color) (background dark)) (:background "sea green")) - (((class grayscale mono) + (((class grayscale monochrome) (background light)) (:background "black")) - (((class grayscale mono) + (((class grayscale monochrome) (background dark)) (:background "white"))) "Face used for highlighting buttons with the mouse." :group 'speedbar-faces) - -;;; Image loading and inlining -;; - -;;; Some images if defimage is available: -(eval-when-compile - -(if (fboundp 'defimage) - (defalias 'defimage-speedbar 'defimage) - - (if (not (fboundp 'make-glyph)) - -(defmacro defimage-speedbar (variable imagespec docstring) - "Don't bother loading up an image... -Argument VARIABLE is the variable to define. -Argument IMAGESPEC is the list defining the image to create. -Argument DOCSTRING is the documentation for VARIABLE." - `(defvar ,variable nil ,docstring)) - -;; ELSE -(defun speedbar-find-image-on-load-path (image) - "Find the image file IMAGE on the load path." - (let ((l load-path) - (r nil)) - (while (and l (not r)) - (if (file-exists-p (concat (car l) "/" image)) - (setq r (concat (car l) "/" image))) - (setq l (cdr l))) - r)) - -(defun speedbar-convert-emacs21-imagespec-to-xemacs (spec) - "Convert the Emacs21 image SPEC into an XEmacs image spec." - (let* ((sl (car spec)) - (itype (nth 1 sl)) - (ifile (nth 3 sl))) - (vector itype ':file (speedbar-find-image-on-load-path ifile)))) - -(defmacro defimage-speedbar (variable imagespec docstring) - "Define VARIABLE as an image if `defimage' is not available. -IMAGESPEC is the image data, and DOCSTRING is documentation for the image." - `(defvar ,variable - ;; The Emacs21 version of defimage looks just like the XEmacs image - ;; specifier, except that it needs a :type keyword. If we line - ;; stuff up right, we can use this cheat to support XEmacs specifiers. - (condition-case nil - (make-glyph - (make-image-specifier - (speedbar-convert-emacs21-imagespec-to-xemacs (quote ,imagespec))) - 'buffer) - (error nil)) - ,docstring))))) - -(defimage-speedbar speedbar-directory-plus - ((:type xpm :file "sb-dir-plus.xpm" :ascent center)) - "Image used for closed directories with stuff in them.") - -(defimage-speedbar speedbar-directory-minus - ((:type xpm :file "sb-dir-minus.xpm" :ascent center)) - "Image used for open directories with stuff in them.") - -(defimage-speedbar speedbar-directory - ((:type xpm :file "sb-dir.xpm" :ascent center)) - "Image used for empty or unreadable directories.") - -(defimage-speedbar speedbar-page-plus - ((:type xpm :file "sb-pg-plus.xpm" :ascent center)) - "Image used for closed files with stuff in them.") - -(defimage-speedbar speedbar-page-minus - ((:type xpm :file "sb-pg-minus.xpm" :ascent center)) - "Image used for open files with stuff in them.") - -(defimage-speedbar speedbar-page - ((:type xpm :file "sb-pg.xpm" :ascent center)) - "Image used for files that can't be opened.") - -(defimage-speedbar speedbar-tag - ((:type xpm :file "sb-tag.xpm" :ascent center)) - "Image used for tags.") - -(defimage-speedbar speedbar-tag-plus - ((:type xpm :file "sb-tag-plus.xpm" :ascent center)) - "Image used for closed tag groups.") - -(defimage-speedbar speedbar-tag-minus - ((:type xpm :file "sb-tag-minus.xpm" :ascent center)) - "Image used for open tag groups.") - -(defimage-speedbar speedbar-tag-gt - ((:type xpm :file "sb-tag-gt.xpm" :ascent center)) - "Image used for open tag groups.") - -(defimage-speedbar speedbar-tag-v - ((:type xpm :file "sb-tag-v.xpm" :ascent center)) - "Image used for open tag groups.") - -(defimage-speedbar speedbar-tag-type - ((:type xpm :file "sb-tag-type.xpm" :ascent center)) - "Image used for open tag groups.") - -(defimage-speedbar speedbar-mail - ((:type xpm :file "sb-mail.xpm" :ascent center)) - "Image used for open tag groups.") - -(defvar speedbar-expand-image-button-alist - '(("<+>" . speedbar-directory-plus) - ("<->" . speedbar-directory-minus) - ("< >" . speedbar-directory) - ("[+]" . speedbar-page-plus) - ("[-]" . speedbar-page-minus) - ("[?]" . speedbar-page) - ("{+}" . speedbar-tag-plus) - ("{-}" . speedbar-tag-minus) - ("<M>" . speedbar-mail) - (" =>" . speedbar-tag) - (" +>" . speedbar-tag-gt) - (" ->" . speedbar-tag-v) - (">" . speedbar-tag) - ("@" . speedbar-tag-type) - (" @" . speedbar-tag-type) - ) - "List of text and image associations.") - -(defun speedbar-insert-image-button-maybe (start length) - "Insert an image button based on text starting at START for LENGTH chars. -If buttontext is unknown, just insert that text. -If we have an image associated with it, use that image." - (if speedbar-use-images - (let* ((bt (buffer-substring start (+ length start))) - (a (assoc bt speedbar-expand-image-button-alist))) - ;; Regular images (created with `insert-image' are intangible - ;; which (I suppose) make them more compatible with XEmacs 21. - ;; Unfortunatly, there is a giant pile o code dependent on the - ;; underlying text. This means if we leave it tangible, then I - ;; don't have to change said giant piles o code. - (if (and a (symbol-value (cdr a))) - (if (featurep 'xemacs) - (add-text-properties (+ start (length bt)) start - (list 'end-glyph (symbol-value (cdr a)) - 'rear-nonsticky (list 'display) - 'invisible t - 'detachable t)) - (add-text-properties start (+ start (length bt)) - (list 'display (symbol-value (cdr a)) - 'rear-nonsticky (list 'display)))) - ;(message "Bad text [%s]" (buffer-substring start (+ start length))) - )))) - +(defface speedbar-separator-face '((((class color) (background light)) + (:background "blue" + :foreground "white" + :overline "gray")) + (((class color) (background dark)) + (:background "blue" + :foreground "white" + :overline "gray")) + (((class grayscale monochrome) + (background light)) + (:background "black" + :foreground "white" + :overline "white")) + (((class grayscale monochrome) + (background dark)) + (:background "white" + :foreground "black" + :overline "black"))) + "Face used for separator labes in a display." + :group 'speedbar-faces) ;; some edebug hooks (add-hook 'edebug-setup-hook (lambda () (def-edebug-spec speedbar-with-writable def-body))) +;; Fix a font lock problem for some versions of Emacs +(if (boundp 'font-lock-global-modes) + (if (listp font-lock-global-modes) + (add-to-list 'font-lock-global-modes '(not speedbar-mode)) + ) + ) + + +;;; Obsolete variables and functions + +(define-obsolete-variable-alias + 'speedbar-ignored-path-regexp 'speedbar-ignored-directory-regexp) + +(define-obsolete-variable-alias 'speedbar-ignored-path-expressions + 'speedbar-ignored-directory-expressions) + +(define-obsolete-function-alias 'speedbar-add-ignored-path-regexp + 'speedbar-add-ignored-directory-regexp) + +(define-obsolete-function-alias 'speedbar-line-path + 'speedbar-line-directory) + +(define-obsolete-function-alias 'speedbar-buffers-line-path + 'speedbar-buffers-line-directory) + +(define-obsolete-function-alias 'speedbar-path-line + 'speedbar-directory-line) + +(define-obsolete-function-alias 'speedbar-buffers-line-path + 'speedbar-buffers-line-directory) + (provide 'speedbar) ;; run load-time hooks (run-hooks 'speedbar-load-hook) ;; arch-tag: 4477e6d1-f78c-48b9-a503-387d3c9767d5 -;;; speedbar.el ends here +;;; speedbar ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/startup.el --- a/lisp/startup.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/startup.el Sun Oct 09 20:00:17 2005 +0000 @@ -1459,7 +1459,7 @@ (defun display-startup-echo-area-message () (let ((resize-mini-windows t)) - (message (startup-echo-area-message)))) + (message "%s" (startup-echo-area-message)))) (defun display-splash-screen () diff -r 7a3090aca393 -r 2a679c81f552 lisp/strokes.el --- a/lisp/strokes.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/strokes.el Sun Oct 09 20:00:17 2005 +0000 @@ -738,7 +738,7 @@ (save-window-excursion (set-window-configuration strokes-window-configuration) (when prompt - (message prompt) + (message "%s" prompt) (setq event (read-event)) (or (strokes-button-press-event-p event) (error "You must draw with the mouse"))) @@ -769,7 +769,7 @@ (bury-buffer)))) ;; Otherwise, don't use strokes buffer and read stroke silently (when prompt - (message prompt) + (message "%s" prompt) (setq event (read-event)) (or (strokes-button-press-event-p event) (error "You must draw with the mouse"))) @@ -799,7 +799,7 @@ (grid-locs nil)) (if prompt (while (not (strokes-button-press-event-p event)) - (message prompt) + (message "%s" prompt) (setq event (read-event)))) (unwind-protect (track-mouse diff -r 7a3090aca393 -r 2a679c81f552 lisp/subr.el --- a/lisp/subr.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/subr.el Sun Oct 09 20:00:17 2005 +0000 @@ -2875,9 +2875,11 @@ (defvar version-regexp-alist - '(("^a\\(lpha\\)?$" . -3) - ("^b\\(eta\\)?$" . -2) - ("^\\(pre\\|rc\\)$" . -1)) + '(("^[-_+]?a\\(lpha\\)?$" . -3) + ("^[-_+]$" . -3) ; treat "1.2.3-20050920" and "1.2-3" as alpha releases + ("^[-_+]cvs$" . -3) ; treat "1.2.3-CVS" as alpha release + ("^[-_+]?b\\(eta\\)?$" . -2) + ("^[-_+]?\\(pre\\|rc\\)$" . -1)) "*Specify association between non-numeric version part and a priority. This association is used to handle version string like \"1.0pre2\", @@ -2900,6 +2902,9 @@ Where: REGEXP regexp used to match non-numeric part of a version string. + It should begin with a `^' anchor and end with a `$' to + prevent false hits. Letter-case is ignored while matching + REGEXP. PRIORITY negative integer which indicate the non-numeric priority.") @@ -2916,9 +2921,12 @@ SEPARATOR ::= `version-separator' (which see) | `version-regexp-alist' (which see). +The NUMBER part is optional if SEPARATOR is a match for an element +in `version-regexp-alist'. + As an example of valid version syntax: - 1.0pre2 1.0.7.5 22.8beta3 0.9alpha1 + 1.0pre2 1.0.7.5 22.8beta3 0.9alpha1 6.9.30Beta As an example of invalid version syntax: @@ -2941,7 +2949,7 @@ (error "Invalid version string: '%s'" ver)) (save-match-data (let ((i 0) - case-fold-search ; ignore case in matching + (case-fold-search t) ; ignore case in matching lst s al) (while (and (setq s (string-match "[0-9]+" ver i)) (= s i)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/term/mac-win.el --- a/lisp/term/mac-win.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/term/mac-win.el Sun Oct 09 20:00:17 2005 +0000 @@ -1111,8 +1111,8 @@ "Coding system derived from the system script code.") (defun mac-add-charset-info (xlfd-charset mac-text-encoding) - "Function to add character sets to display with Mac fonts. -Creates entries in `mac-charset-info-alist'. + "Add a character set to display with Mac fonts. +Create an entry in `mac-charset-info-alist'. XLFD-CHARSET is a string which will appear in the XLFD font name to identify the character set. MAC-TEXT-ENCODING is the correspoinding TextEncodingBase value." @@ -1133,6 +1133,7 @@ (mac-add-charset-info "mac-symbol" 33) (mac-add-charset-info "adobe-fontspecific" 33) ; for X-Symbol (mac-add-charset-info "mac-dingbats" 34) +(mac-add-charset-info "iso10646-1" 126) ; for ATSUI ;;;; Keyboard layout/language change events @@ -1715,9 +1716,21 @@ ;; Setup the default fontset. (setup-default-fontset) -;; Add Mac-encoding fonts unless ETL fonts are installed. -(unless (x-list-fonts "*-iso8859-1") - (fontset-add-mac-fonts "fontset-default")) +(cond ((x-list-fonts "*-iso10646-1") + ;; Use ATSUI (if available) for the following charsets. + (dolist + (charset '(latin-iso8859-1 + latin-iso8859-2 latin-iso8859-3 latin-iso8859-4 + thai-tis620 greek-iso8859-7 arabic-iso8859-6 + hebrew-iso8859-8 cyrillic-iso8859-5 + latin-iso8859-9 latin-iso8859-15 latin-iso8859-14 + japanese-jisx0212 chinese-sisheng ipa + vietnamese-viscii-lower vietnamese-viscii-upper + lao ethiopic tibetan)) + (set-fontset-font nil charset '(nil . "iso10646-1")))) + ((null (x-list-fonts "*-iso8859-1")) + ;; Add Mac-encoding fonts unless ETL fonts are installed. + (fontset-add-mac-fonts "fontset-default"))) ;; Create a fontset that uses mac-roman font. With this fontset, ;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1, diff -r 7a3090aca393 -r 2a679c81f552 lisp/term/rxvt.el --- a/lisp/term/rxvt.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/term/rxvt.el Sun Oct 09 20:00:17 2005 +0000 @@ -40,12 +40,13 @@ (define-key rxvt-function-map "\e[B" [down]) (define-key rxvt-function-map "\e[C" [right]) (define-key rxvt-function-map "\e[D" [left]) - (define-key rxvt-function-map "\e[7~" [home]) (define-key rxvt-function-map "\e[2~" [insert]) (define-key rxvt-function-map "\e[3~" [delete]) (define-key rxvt-function-map "\e[4~" [select]) (define-key rxvt-function-map "\e[5~" [prior]) (define-key rxvt-function-map "\e[6~" [next]) + (define-key rxvt-function-map "\e[7~" [home]) + (define-key rxvt-function-map "\e[8~" [end]) (define-key rxvt-function-map "\e[11~" [f1]) (define-key rxvt-function-map "\e[12~" [f2]) (define-key rxvt-function-map "\e[13~" [f3]) @@ -110,8 +111,8 @@ (define-key rxvt-function-map "\e[3$" [S-delete]) (define-key rxvt-function-map "\e[5$" [S-prior]) (define-key rxvt-function-map "\e[6$" [S-next]) + (define-key rxvt-function-map "\e[7$" [S-home]) (define-key rxvt-function-map "\e[8$" [S-end]) - (define-key rxvt-function-map "\e[7$" [S-home]) (define-key rxvt-function-map "\e[d" [S-left]) (define-key rxvt-function-map "\e[c" [S-right]) (define-key rxvt-function-map "\e[a" [S-up]) @@ -128,7 +129,7 @@ ;; a PC-style keyboard these keys correspond to ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C-, C-S-. The ;; code here subsitutes the corresponding defintions in - ;; function-key-map. This substitution is needed because if a key + ;; function-key-map. This substitution is needed because if a key ;; definition if found in function-key-map, there are no further ;; lookups in other keymaps. (let ((m (terminal-local-value 'local-function-key-map nil))) @@ -142,7 +143,7 @@ (substitute-key-definition [f18] [S-f8] m) (substitute-key-definition [f19] [S-f9] m) (substitute-key-definition [f20] [S-f10] m) - + (substitute-key-definition [f23] [C-f1] m) (substitute-key-definition [f24] [C-f2] m) (substitute-key-definition [f25] [C-f3] m) @@ -189,8 +190,8 @@ ("blue" 4 ( 0 0 205)) ; blue3 ("magenta" 5 (205 0 205)) ; magenta3 ("cyan" 6 ( 0 205 205)) ; cyan3 - ("white" 7 (250 235 215)) ; AntiqueWhite - ("brightblack" 8 ( 64 64 64)) ; gray25 + ("white" 7 (229 229 229)) ; gray90 + ("brightblack" 8 ( 77 77 77)) ; gray30 ("brightred" 9 (255 0 0)) ; red ("brightgreen" 10 ( 0 255 0)) ; green ("brightyellow" 11 (255 255 0)) ; yellow @@ -223,6 +224,67 @@ (setq colors (cdr colors) color (car colors) ncolors (1- ncolors))) + (when (> ncolors 0) + (cond + ((= ncolors 240) ; 256-color rxvt + ;; 216 non-gray colors first + (let ((r 0) (g 0) (b 0)) + (while (> ncolors 24) + ;; This and other formulae taken from 256colres.pl and + ;; 88colres.pl in the xterm distribution. + (tty-color-define (format "color-%d" (- 256 ncolors)) + (- 256 ncolors) + (mapcar 'rxvt-rgb-convert-to-16bit + (list (round (* r 42.5)) + (round (* g 42.5)) + (round (* b 42.5))))) + (setq b (1+ b)) + (if (> b 5) + (setq g (1+ g) + b 0)) + (if (> g 5) + (setq r (1+ r) + g 0)) + (setq ncolors (1- ncolors)))) + ;; Now the 24 gray colors + (while (> ncolors 0) + (setq color (rxvt-rgb-convert-to-16bit (+ 8 (* (- 24 ncolors) 10)))) + (tty-color-define (format "color-%d" (- 256 ncolors)) + (- 256 ncolors) + (list color color color)) + (setq ncolors (1- ncolors)))) + + ((= ncolors 72) ; rxvt-unicode + ;; 64 non-gray colors + (let ((levels '(0 139 205 255)) + (r 0) (g 0) (b 0)) + (while (> ncolors 8) + (tty-color-define (format "color-%d" (- 88 ncolors)) + (- 88 ncolors) + (mapcar 'rxvt-rgb-convert-to-16bit + (list (nth r levels) + (nth g levels) + (nth b levels)))) + (setq b (1+ b)) + (if (> b 3) + (setq g (1+ g) + b 0)) + (if (> g 3) + (setq r (1+ r) + g 0)) + (setq ncolors (1- ncolors)))) + ;; Now the 8 gray colors + (while (> ncolors 0) + (setq color (rxvt-rgb-convert-to-16bit + (floor + (if (= ncolors 8) + 46.36363636 + (+ (* (- 8 ncolors) 23.18181818) 69.54545454))))) + (tty-color-define (format "color-%d" (- 88 ncolors)) + (- 88 ncolors) + (list color color color)) + (setq ncolors (1- ncolors)))) + (t (error "Unsupported number of rxvt colors (%d)" (+ 16 ncolors))))) ;; Modifying color mappings means realized faces don't use the ;; right colors, so clear them. (clear-face-cache))) @@ -250,5 +312,5 @@ (setq default-frame-background-mode 'dark))) (frame-set-background-mode (selected-frame)))) -;;; arch-tag: 20cf2fb6-6318-4bab-9dbf-1d15048f2257 +;; arch-tag: 20cf2fb6-6318-4bab-9dbf-1d15048f2257 ;;; rxvt.el ends here diff -r 7a3090aca393 -r 2a679c81f552 lisp/term/xterm.el --- a/lisp/term/xterm.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/term/xterm.el Sun Oct 09 20:00:17 2005 +0000 @@ -197,7 +197,7 @@ (if (and (server-getenv "COLORTERM") (string-match "\\`rxvt" (server-getenv "COLORTERM"))) (progn - (eval-when-compile (load "term/rxvt")) + (eval-and-compile (load "term/rxvt")) (terminal-init-rxvt)) ;; The terminal-local stuff only need to be set up on the first diff -r 7a3090aca393 -r 2a679c81f552 lisp/terminal.el --- a/lisp/terminal.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/terminal.el Sun Oct 09 20:00:17 2005 +0000 @@ -1115,7 +1115,7 @@ (getenv "SHELL") "/bin/sh")) (s (read-string - (format "Run program in emulator: (default %s) " + (format "Run program in emulator (default %s): " default-s)))) (if (equal s "") (list default-s '()) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/artist.el --- a/lisp/textmodes/artist.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/artist.el Sun Oct 09 20:00:17 2005 +0000 @@ -2863,9 +2863,9 @@ "Read any extra arguments for figlet." (interactive) (let* ((avail-fonts (artist-figlet-get-font-list)) - (font (completing-read (concat "Select font: (default " + (font (completing-read (concat "Select font (default " artist-figlet-default-font - ") ") + "): ") (mapcar (lambda (font) (cons font font)) avail-fonts)))) @@ -4162,7 +4162,7 @@ (setq artist-key-is-drawing t) ;; Feedback - (message (substitute-command-keys + (message "%s" (substitute-command-keys (concat "First point set. " "Set next with \\[artist-key-set-point], " "set last with C-u \\[artist-key-set-point]")))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/bibtex.el --- a/lisp/textmodes/bibtex.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/bibtex.el Sun Oct 09 20:00:17 2005 +0000 @@ -1120,7 +1120,7 @@ "Regexp matching the name of a valid BibTeX entry.") (defvar bibtex-valid-entry-whitespace-re - (concat "[ \t\n]*\\(" bibtex-valid-entry-re "\\)") + (concat "[ \t]*\\(" bibtex-valid-entry-re "\\)") "Regexp matching the name of a valid BibTeX entry preceded by whitespace.") (defvar bibtex-any-valid-entry-re @@ -2566,34 +2566,33 @@ "Return summary of current BibTeX entry. Used as default value of `bibtex-summary-function'." ;; It would be neat to customize this function. How? - (save-excursion - (if (looking-at bibtex-entry-maybe-empty-head) - (let* ((bibtex-autokey-name-case-convert 'identity) - (bibtex-autokey-name-length 'infty) - (bibtex-autokey-names 1) - (bibtex-autokey-names-stretch 0) - (bibtex-autokey-name-separator " ") - (bibtex-autokey-additional-names " etal") - (names (bibtex-autokey-get-names)) - (bibtex-autokey-year-length 4) - (year (bibtex-autokey-get-year)) - (bibtex-autokey-titlewords 5) - (bibtex-autokey-titlewords-stretch 2) - (bibtex-autokey-titleword-case-convert 'identity) - (bibtex-autokey-titleword-length 5) - (bibtex-autokey-titleword-separator " ") - (title (bibtex-autokey-get-title)) - (journal (bibtex-autokey-get-field - "journal" bibtex-autokey-transcriptions)) - (volume (bibtex-autokey-get-field "volume")) - (pages (bibtex-autokey-get-field "pages" '(("-.*\\'" . ""))))) - (mapconcat (lambda (arg) - (if (not (string= "" (cdr arg))) - (concat (car arg) (cdr arg)))) - `((" " . ,names) (" " . ,year) (": " . ,title) - (", " . ,journal) (" " . ,volume) (":" . ,pages)) - "")) - (error "Entry not found")))) + (if (looking-at bibtex-entry-maybe-empty-head) + (let* ((bibtex-autokey-name-case-convert 'identity) + (bibtex-autokey-name-length 'infty) + (bibtex-autokey-names 1) + (bibtex-autokey-names-stretch 0) + (bibtex-autokey-name-separator " ") + (bibtex-autokey-additional-names " etal") + (names (bibtex-autokey-get-names)) + (bibtex-autokey-year-length 4) + (year (bibtex-autokey-get-year)) + (bibtex-autokey-titlewords 5) + (bibtex-autokey-titlewords-stretch 2) + (bibtex-autokey-titleword-case-convert 'identity) + (bibtex-autokey-titleword-length 5) + (bibtex-autokey-titleword-separator " ") + (title (bibtex-autokey-get-title)) + (journal (bibtex-autokey-get-field + "journal" bibtex-autokey-transcriptions)) + (volume (bibtex-autokey-get-field "volume")) + (pages (bibtex-autokey-get-field "pages" '(("-.*\\'" . ""))))) + (mapconcat (lambda (arg) + (if (not (string= "" (cdr arg))) + (concat (car arg) (cdr arg)))) + `((" " . ,names) (" " . ,year) (": " . ,title) + (", " . ,journal) (" " . ,volume) (":" . ,pages)) + "")) + (error "Entry not found"))) (defun bibtex-pop (arg direction) "Fill current field from the ARGth same field's text in DIRECTION. @@ -3007,7 +3006,7 @@ (cdr field-list)) t))) (if comment - (message (nth 1 comment)) + (message "%s" (nth 1 comment)) (message "No comment available"))))) (defun bibtex-make-field (field &optional move interactive) @@ -3950,9 +3949,9 @@ (insert " ") (indent-to-column bibtex-text-indentation))) (re-search-forward "[ \t\n]*=[ \t\n]*" end-field)) - (while (re-search-forward "[ \t\n]+" end-field 'move) - (replace-match " ")) - (do-auto-fill) + ;; Paragraphs within fields are not preserved. Bother? + (fill-region-as-paragraph (line-beginning-position) end-field + default-justification nil (point)) (if move (goto-char end-field)))) (defun bibtex-fill-field (&optional justify) @@ -3992,13 +3991,14 @@ (defun bibtex-realign () "Realign BibTeX entries such that they are separated by one blank line." (goto-char (point-min)) - (let ((case-fold-search t)) + (let ((case-fold-search t) + (valid-entry (concat "[ \t\n]*\\(" bibtex-valid-entry-re "\\)"))) ;; No blank lines prior to the first valid entry if there no ;; non-white characters in front of it. - (when (looking-at bibtex-valid-entry-whitespace-re) + (when (looking-at valid-entry) (replace-match "\\1")) ;; Valid entries are separated by one blank line. - (while (re-search-forward bibtex-valid-entry-whitespace-re nil t) + (while (re-search-forward valid-entry nil t) (replace-match "\n\n\\1")) ;; One blank line past the last valid entry if it is followed by ;; non-white characters, no blank line otherwise. diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/flyspell.el --- a/lisp/textmodes/flyspell.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/flyspell.el Sun Oct 09 20:00:17 2005 +0000 @@ -169,11 +169,12 @@ (defcustom flyspell-incorrect-hook nil "*List of functions to be called when incorrect words are encountered. -Each function is given three arguments: the beginning and the end -of the incorrect region. The third is either the symbol 'doublon' or the list +Each function is given three arguments. The first two +arguments are the beginning and the end of the incorrect region. +The third is either the symbol `doublon' or the list of possible corrections as returned by `ispell-parse-output'. -If any of the functions return non-Nil, the word is not highlighted as +If any of the functions return non-nil, the word is not highlighted as incorrect." :group 'flyspell :version "21.1" @@ -535,6 +536,7 @@ ;*---------------------------------------------------------------------*/ (defun flyspell-mode-on () "Turn Flyspell mode on. Do not use this; use `flyspell-mode' instead." + (ispell-maybe-find-aspell-dictionaries) (setq ispell-highlight-face 'flyspell-incorrect) ;; local dictionaries setup (or ispell-local-dictionary ispell-dictionary @@ -566,7 +568,7 @@ (interactive-p)) (let ((binding (where-is-internal 'flyspell-auto-correct-word nil 'non-ascii))) - (message + (message "%s" (if binding (format "Welcome to flyspell. Use %s or Mouse-2 to correct words." (key-description binding)) @@ -942,7 +944,7 @@ (sort (car (cdr (cdr poss))) 'string<) (car (cdr (cdr poss))))))) (if flyspell-issue-message-flag - (message (format "mispelling `%s' %S" word replacements))))) + (message "mispelling `%s' %S" word replacements)))) ;*---------------------------------------------------------------------*/ ;* flyspell-word-search-backward ... */ @@ -1086,11 +1088,13 @@ word (+ end flyspell-duplicate-distance)))))) + ;; This is a misspelled word which occurs + ;; twice within flyspell-duplicate-distance. (setq flyspell-word-cache-result nil) (if flyspell-highlight-flag (flyspell-highlight-duplicate-region start end poss) - (message (format "duplicate `%s'" word))) + (message "duplicate `%s'" word)) nil) (t (setq flyspell-word-cache-result nil) @@ -1559,7 +1563,11 @@ ;* flyspell-highlight-incorrect-region ... */ ;*---------------------------------------------------------------------*/ (defun flyspell-highlight-incorrect-region (beg end poss) - "Set up an overlay on a misspelled word, in the buffer from BEG to END." + "Set up an overlay on a misspelled word, in the buffer from BEG to END. +POSS is usually a list of possible spelling/correction lists, +as returned by `ispell-parse-output'. +It can also be the symbol `doublon', in the case where the word +is itself incorrect, but suspiciously repeated." (let ((inhibit-read-only t)) (unless (run-hook-with-args-until-success 'flyspell-incorrect-hook beg end poss) @@ -1592,8 +1600,9 @@ ;* flyspell-highlight-duplicate-region ... */ ;*---------------------------------------------------------------------*/ (defun flyspell-highlight-duplicate-region (beg end poss) - "Set up an overlay on a duplicated word, in the buffer from BEG to END. -??? What does POSS mean?" + "Set up an overlay on a duplicate misspelled word, in the buffer from BEG to END. +POSS is a list of possible spelling/correction lists, +as returned by `ispell-parse-output'." (let ((inhibit-read-only t)) (unless (run-hook-with-args-until-success 'flyspell-incorrect-hook beg end poss) @@ -1679,7 +1688,7 @@ (setq pos (cdr pos))) (if (fboundp 'display-message) (display-message 'no-log string) - (message string)))) + (message "%s" string)))) ;*---------------------------------------------------------------------*/ ;* flyspell-abbrev-table ... */ diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/ispell.el --- a/lisp/textmodes/ispell.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/ispell.el Sun Oct 09 20:00:17 2005 +0000 @@ -719,6 +719,12 @@ (defvar ispell-really-aspell nil) ; Non-nil if aspell extensions should be used +(defvar ispell-aspell-supports-utf8 nil + "Non-nil means to try to automatically find aspell dictionaries. +This is set to t in ispell-check-version for aspell >= 0.60. + +Earlier aspell versions do not consistently support UTF-8. Handling +this would require some extra guessing in `ispell-aspell-find-dictionary'.") @@ -782,7 +788,7 @@ (point)) ", " ispell-version)) - (message result)) + (message "%s" result)) ;; return library directory. (if (re-search-forward "LIBDIR = \\\"\\([^ \t\n]*\\)\\\"" nil t) (setq result (buffer-substring (match-beginning 1) (match-end 1))))) @@ -814,9 +820,11 @@ (goto-char (point-min)) (let (case-fold-search) (setq ispell-really-aspell - (and (search-forward-regexp "(but really Aspell \\(.*\\))" nil t) - (if (version< (match-string 1) "0.60") - (error "aspell version 0.60 or greater is required") + (and (search-forward-regexp + "(but really Aspell \\(.*\\))" nil t) + (progn + (setq ispell-aspell-supports-utf8 + (not (version< (match-string 1) "0.60"))) t))))) (kill-buffer (current-buffer))) result)) @@ -872,9 +880,18 @@ (defvar ispell-have-aspell-dictionaries nil "Non-nil if we have queried Aspell for dictionaries at least once.") +(defun ispell-maybe-find-aspell-dictionaries () + "Find Aspell's dictionaries, unless already done." + (when (and (not ispell-have-aspell-dictionaries) + (condition-case () + (progn (ispell-check-version) t) + (error nil)) + ispell-really-aspell + ispell-aspell-supports-utf8) + (ispell-find-aspell-dictionaries))) + (defun ispell-find-aspell-dictionaries () "Find Aspell's dictionaries, and record in `ispell-dictionary-alist'." - (interactive) (unless ispell-really-aspell (error "This function only works with aspell")) (let ((dictionaries @@ -968,12 +985,7 @@ "Returns a list of valid dictionaries. The variable `ispell-library-directory' defines the library location." ;; If Ispell is really Aspell, query it for the dictionary list. - (when (and (not ispell-have-aspell-dictionaries) - (condition-case () - (progn (ispell-check-version) t) - (error nil)) - ispell-really-aspell) - (ispell-find-aspell-dictionaries)) + (ispell-maybe-find-aspell-dictionaries) (let ((dicts (append ispell-local-dictionary-alist ispell-dictionary-alist)) (dict-list (cons "default" nil)) name load-dict) @@ -1545,6 +1557,7 @@ (interactive (list ispell-following-word ispell-quietly current-prefix-arg)) (if continue (ispell-continue) + (ispell-maybe-find-aspell-dictionaries) (ispell-accept-buffer-local-defs) ; use the correct dictionary (let ((cursor-location (point)) ; retain cursor location (word (ispell-get-word following)) @@ -2378,7 +2391,7 @@ (substring output 2)) ; return root word ((equal 0 (string-match "[\ra-zA-Z]" output)) (ding) ; error message from ispell! - (message (concat "Ispell error: " output)) + (message "Ispell error: %s" output) (sit-for 5) nil) (t ; need to process &, ?, and #'s @@ -2603,6 +2616,7 @@ Return nil if spell session is quit, otherwise returns shift offset amount for last line processed." (interactive "r") ; Don't flag errors on read-only bufs. + (ispell-maybe-find-aspell-dictionaries) (if (not recheckp) (ispell-accept-buffer-local-defs)) ; set up dictionary, local words, etc. (let ((skip-region-start (make-marker)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/org.el --- a/lisp/textmodes/org.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/org.el Sun Oct 09 20:00:17 2005 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik <dominik at science dot uva dot nl> ;; Keywords: outlines, hypermedia, calendar ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 3.15 +;; Version: 3.16 ;; ;; This file is part of GNU Emacs. ;; @@ -21,8 +21,8 @@ ;; 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., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Commentary: @@ -80,6 +80,17 @@ ;; ;; Changes: ;; ------- +;; Version 3.16 +;; - In tables, directly after the field motion commands like TAB and RET, +;; typing a character will blank the field. Can be turned off with +;; variable `org-table-auto-blank-field'. +;; - Inactive timestamps with `C-c !'. These do not trigger the agenda +;; and are not linked to the calendar. +;; - Additional key bindings to allow Org-mode to function on a tty emacs. +;; - `C-c C-h' prefix key replaced by `C-c C-x', and `C-c C-x C-h' replaced +;; by `C-c C-x b' (b=Browser). This was necessary to recover the +;; standard meaning of C-h after a prefix key (show prefix bindings). +;; ;; Version 3.15 ;; - QUOTE keyword at the beginning of an entry causes fixed-width export ;; of unmodified entry text. `C-c :' toggles this keyword. @@ -199,7 +210,7 @@ ;;; Customization variables -(defvar org-version "3.15" +(defvar org-version "3.16" "The version number of the file org.el.") (defun org-version () (interactive) @@ -843,6 +854,13 @@ :group 'org-structure :type 'hook) +(defcustom org-level-color-stars-only nil + "Non-nil means fontify only the stars in each headline. +When nil, the entire headline is fontified. +After changin this, requires restart of Emacs to become effective." + :group 'org-structure + :type 'boolean) + (defcustom org-adapt-indentation t "Non-nil means, adapt indentation when promoting and demoting. When this is set and the *entire* text in an entry is indented, the @@ -852,6 +870,14 @@ :group 'org-structure :type 'boolean) +(defcustom org-enable-fixed-width-editor t + "Non-nil means, lines starting with \":\" are treated as fixed-width. +This currently only means, they are never auto-wrapped. +When nil, such lines will be treated like ordinary lines. +See also the QUOTE keyword." + :group 'org-structure + :type 'boolean) + (defcustom org-cycle-emulate-tab t "Where should `org-cycle' emulate TAB. nil Never @@ -1155,24 +1181,34 @@ field does not exceed the column width. - Minimize the number of realigns. Normally, the table is aligned each time TAB or RET are pressed to move to another field. With optimization this - happens only if changes to a field might have changed the column width. + happens only if changes to a field might have changed the column width. Optimization requires replacing the functions `self-insert-command', `delete-char', and `backward-delete-char' in Org-mode buffers, with a slight (in fact: unnoticeable) speed impact for normal typing. Org-mode is very good at guessing when a re-align will be necessary, but you can always -force one with `C-c C-c'. +force one with \\[org-ctrl-c-ctrl-c]. If you would like to use the optimized version in Org-mode, but the un-optimized version in OrgTbl-mode, see the variable `orgtbl-optimized'. This variable can be used to turn on and off the table editor during a session, -but in order to toggle optimization, a restart is required." +but in order to toggle optimization, a restart is required. + +See also the variable `org-table-auto-blank-field'." :group 'org-table :type '(choice (const :tag "off" nil) (const :tag "on" t) (const :tag "on, optimized" optimized))) +(defcustom org-table-auto-blank-field t + "Non-nil means, automatically blank table field when starting to type into it. +This only happens when typing immediately after a field motion +command (TAB, S-TAB or RET). +Only relevant when `org-enable-table-editor' is equal to `optimized'." + :group 'org-table + :type 'boolean) + (defcustom org-table-default-size "5x2" "The default size for newly created tables, Columns x Rows." :group 'org-table @@ -1248,14 +1284,6 @@ :group 'org-table :type 'boolean) -;; FIXME: Should this one be in another group? Which one? -(defcustom org-enable-fixed-width-editor t - "Non-nil means, lines starting with \":\" are treated as fixed-width. -This currently only means, they are never auto-wrapped. -When nil, such lines will be treated like ordinary lines." - :group 'org-table - :type 'boolean) - (defgroup org-table-calculation nil "Options concerning tables in Org-mode." :tag "Org Table Calculation" @@ -1978,17 +2006,19 @@ (append (if org-noutline-p ; FIXME: I am not sure if eval will work ; on XEmacs if noutline is ever ported - '((eval . (list "^\\(\\*+\\).*" - 0 '(nth + `((eval . (list "^\\(\\*+\\).*" + ,(if org-level-color-stars-only 1 0) + '(nth ;; FIXME: 1<->0 ???? (% (- (match-end 1) (match-beginning 1) 1) org-n-levels) org-level-faces) nil t))) - '(("^\\(\\(\\*+\\)[^\r\n]*\\)[\n\r]" - (1 (nth (% (- (match-end 2) (match-beginning 2) 1) - org-n-levels) - org-level-faces) - nil t)))) + `(("^\\(\\(\\*+\\)[^\r\n]*\\)[\n\r]" + (,(if org-level-color-stars-only 2 0) + (nth (% (- (match-end 2) (match-beginning 2) 1) + org-n-levels) + org-level-faces) + nil t)))) org-font-lock-extra-keywords)) (set (make-local-variable 'font-lock-defaults) '(org-font-lock-keywords t nil nil backward-paragraph)) @@ -2805,8 +2835,8 @@ (assoc completion table)) (insert " ")) (if (and (equal type :opt) (assoc completion table)) - (message (substitute-command-keys - "Press \\[org-complete] again to insert example settings")))) + (message "%s" (substitute-command-keys + "Press \\[org-complete] again to insert example settings")))) (t (message "Making completion list...") (let ((list (sort (all-completions pattern table) 'string<))) @@ -2912,8 +2942,8 @@ org-deadline-string " " (format-time-string (car org-time-stamp-formats) (org-read-date nil 'to-time))) - (message (substitute-command-keys - "Use \\[org-timestamp-up-day] and \\[org-timestamp-down-day] to change the date."))) + (message "%s" (substitute-command-keys + "Use \\[org-timestamp-up-day] and \\[org-timestamp-down-day] to change the date."))) (defun org-schedule () "Insert the SCHEDULED: string to schedule a TODO item. @@ -2924,8 +2954,8 @@ org-scheduled-string " " (format-time-string (car org-time-stamp-formats) (org-read-date nil 'to-time))) - (message (substitute-command-keys - "Use \\[org-timestamp-up-day] and \\[org-timestamp-down-day] to change the date."))) + (message "%s" (substitute-command-keys + "Use \\[org-timestamp-up-day] and \\[org-timestamp-down-day] to change the date."))) (defun org-occur (regexp &optional callback) @@ -2997,7 +3027,7 @@ (setq current org-default-priority)) (cond ((eq action 'set) - (message (format "Priority A-%c, SPC to remove: " org-lowest-priority)) + (message "Priority A-%c, SPC to remove: " org-lowest-priority) (setq new (read-char-exclusive)) (cond ((equal new ?\ ) (setq remove t)) ((or (< (upcase new) ?A) (> (upcase new) org-lowest-priority)) @@ -3077,6 +3107,21 @@ (if org-time-was-given (setq fmt (cdr org-time-stamp-formats))) (insert (format-time-string fmt time)))))) +(defun org-time-stamp-inactive (&optional arg) + "Insert an inactive time stamp. +An inactive time stamp is enclosed in square brackets instead of angle +brackets. It is inactive in the sense that it does not trigger agenda entries, +does not link to the calendar and cannot be changed with the S-cursor keys." + (interactive "P") + (let ((fmt (if arg (cdr org-time-stamp-formats) + (car org-time-stamp-formats))) + (org-time-was-given nil) + time) + (setq time (org-read-date arg 'totime)) + (if org-time-was-given (setq fmt (cdr org-time-stamp-formats))) + (setq fmt (concat "[" (substring fmt 1 -1) "]")) + (insert (format-time-string fmt time)))) + ;;; FIXME: Make the function take "Fri" as "next friday" (defun org-read-date (&optional with-time to-time) "Read a date and make things smooth for the user. @@ -3539,6 +3584,8 @@ (define-key org-agenda-mode-map "w" 'org-agenda-week-view) (define-key org-agenda-mode-map (org-key 'S-right) 'org-agenda-date-later) (define-key org-agenda-mode-map (org-key 'S-left) 'org-agenda-date-earlier) +(define-key org-agenda-mode-map [?\C-c ?\C-x (right)] 'org-agenda-date-later) +(define-key org-agenda-mode-map [?\C-c ?\C-x (left)] 'org-agenda-date-earlier) (define-key org-agenda-mode-map ">" 'org-agenda-date-prompt) (let ((l '(1 2 3 4 5 6 7 8 9 0))) @@ -3574,6 +3621,8 @@ (define-key org-agenda-mode-map "-" 'org-agenda-priority-down) (define-key org-agenda-mode-map (org-key 'S-up) 'org-agenda-priority-up) (define-key org-agenda-mode-map (org-key 'S-down) 'org-agenda-priority-down) +(define-key org-agenda-mode-map [?\C-c ?\C-x (up)] 'org-agenda-priority-up) +(define-key org-agenda-mode-map [?\C-c ?\C-x (down)] 'org-agenda-priority-down) (define-key org-agenda-mode-map [(right)] 'org-agenda-later) (define-key org-agenda-mode-map [(left)] 'org-agenda-earlier) @@ -6321,7 +6370,8 @@ (defun org-table-check-inside-data-field () "Is point inside a table data field? -I.e. not on a hline or before the first or after the last column?" +I.e. not on a hline or before the first or after the last column? +This actually throws an error, so it aborts the current command." (if (or (not (org-at-table-p)) (= (org-table-current-column) 0) (org-at-table-hline-p) @@ -7014,7 +7064,8 @@ (format "%d:%02d:%02d" h m s)))) (kill-new sres) (if (interactive-p) - (message (substitute-command-keys + (message "%s" + (substitute-command-keys (format "Sum of %d items: %-20s (\\[yank] will insert result into buffer)" (length numbers) sres)))) sres)))) @@ -7122,7 +7173,7 @@ (stored-list (org-table-get-stored-formulas)) (stored (cdr (assoc scol stored-list))) (eq (cond - ((and stored equation (string-match "^ *= *$" equation)) + ((and stored equation (string-match "^ *=? *$" equation)) stored) ((stringp equation) equation) @@ -7290,7 +7341,7 @@ (when org-table-formula-evaluate-inline (let* ((field (org-trim (or (org-table-get-field) ""))) named eq) - (when (string-match "^:?=\\(.+\\)" field) + (when (string-match "^:?=\\(.*\\)" field) (setq named (equal (string-to-char field) ?:) eq (match-string 1 field)) (if (fboundp 'calc-eval) @@ -7912,8 +7963,7 @@ '("\C-c\M-w" org-table-copy-region) '("\C-c\C-y" org-table-paste-rectangle) '("\C-c-" org-table-insert-hline) - '([(shift tab)] org-table-previous-field) - '("\C-c\C-c" org-ctrl-c-ctrl-c) +; '([(shift tab)] org-table-previous-field) '("\C-m" org-table-next-row) (list (org-key 'S-return) 'org-table-copy-down) '([(meta return)] org-table-wrap-region) @@ -7942,16 +7992,18 @@ (orgtbl-make-binding 'orgtbl-tab 102 [(tab)] "\C-i")) (define-key orgtbl-mode-map "\C-i" (orgtbl-make-binding 'orgtbl-tab 103 "\C-i" [(tab)]))) + (define-key orgtbl-mode-map "\C-i" + (orgtbl-make-binding 'orgtbl-tab 104 [(shift tab)])) + (define-key orgtbl-mode-map "\C-c\C-c" + (orgtbl-make-binding 'org-ctrl-c-ctrl-c 105 "\C-c\C-c")) (when orgtbl-optimized ;; If the user wants maximum table support, we need to hijack ;; some standard editing functions - (substitute-key-definition 'self-insert-command 'orgtbl-self-insert-command - orgtbl-mode-map global-map) - (substitute-key-definition 'delete-char 'orgtbl-delete-char - orgtbl-mode-map global-map) - (substitute-key-definition 'delete-backward-char 'orgtbl-delete-backward-char - orgtbl-mode-map global-map) - (define-key org-mode-map "|" 'self-insert-command)) + (org-remap orgtbl-mode-map + 'self-insert-command 'orgtbl-self-insert-command + 'delete-char 'orgtbl-delete-char + 'delete-backward-char 'orgtbl-delete-backward-char) + (define-key orgtbl-mode-map "|" 'org-force-self-insert)) (easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu" '("OrgTbl" ["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"] @@ -7976,9 +8028,9 @@ "--" ["Insert Hline" org-table-insert-hline :active (org-at-table-p) :keys "C-c -"]) ("Rectangle" - ["Copy Rectangle" org-copy-special :active (org-at-table-p) :keys "C-c M-w"] - ["Cut Rectangle" org-cut-special :active (org-at-table-p) :keys "C-c C-w"] - ["Paste Rectangle" org-paste-special :active (org-at-table-p) :keys "C-c C-y"] + ["Copy Rectangle" org-copy-special :active (org-at-table-p) :keys "C-c C-x M-w"] + ["Cut Rectangle" org-cut-special :active (org-at-table-p) :keys "C-c C-x C-w"] + ["Paste Rectangle" org-paste-special :active (org-at-table-p) :keys "C-c C-x C-y"] ["Fill Rectangle" org-table-wrap-region :active (org-at-table-p) :keys "C-c C-q"]) "--" ["Set Column Formula" org-table-eval-formula :active (org-at-table-p) :keys "C-c ="] @@ -8014,6 +8066,17 @@ overwritten, and the table is not marked as requiring realignment." (interactive "p") (if (and (org-at-table-p) + (or + (and org-table-auto-blank-field + (member last-command + '(orgtbl-hijacker-command-100 + orgtbl-hijacker-command-101 + orgtbl-hijacker-command-102 + orgtbl-hijacker-command-103 + orgtbl-hijacker-command-104 + orgtbl-hijacker-command-105)) + (org-table-blank-field)) + t) (eq N 1) (looking-at "[^|\n]* +|")) (let (org-table-may-need-update) @@ -8025,6 +8088,11 @@ (let (orgtbl-mode) (call-interactively (key-binding (vector last-input-event)))))) +(defun org-force-self-insert (N) + "Needed to enforce self-insert under remapping." + (interactive "p") + (self-insert-command N)) + (defun orgtbl-delete-backward-char (N) "Like `delete-backward-char', insert whitespace at field end in tables. When deleting backwards, in tables this function will insert whitespace in @@ -9340,23 +9408,55 @@ ;; i k @ expendable from outline-mode ;; 0123456789 ! %^& ()_{} " `' free -(define-key org-mode-map "\C-i" 'org-cycle) +;; TAB key with modifiers +(define-key org-mode-map "\C-i" 'org-cycle) (define-key org-mode-map [(meta tab)] 'org-complete) -(define-key org-mode-map "\M-\C-i" 'org-complete) -(define-key org-mode-map [(meta shift left)] 'org-shiftmetaleft) -(define-key org-mode-map [(meta left)] 'org-metaleft) -(define-key org-mode-map [(meta shift right)] 'org-shiftmetaright) -(define-key org-mode-map [(meta shift up)] 'org-shiftmetaup) -(define-key org-mode-map [(meta shift down)] 'org-shiftmetadown) +(define-key org-mode-map "\M-\C-i" 'org-complete) ; for tty emacs +;; The following line is necessary under Suse GNU/Linux +(unless org-xemacs-p + (define-key org-mode-map [S-iso-lefttab] 'org-shifttab)) +(define-key org-mode-map [(shift tab)] 'org-shifttab) + +(define-key org-mode-map (org-key 'S-return) 'org-table-copy-down) +(define-key org-mode-map "\C-c\C-xc" 'org-table-copy-down) ; tty +(define-key org-mode-map [(meta shift return)] 'org-insert-todo-heading) +(define-key org-mode-map "\C-c\C-xM" 'org-insert-todo-heading) ; tty +(define-key org-mode-map [(meta return)] 'org-meta-return) +(define-key org-mode-map "\C-c\C-xm" 'org-meta-return) ; tty emacs +(define-key org-mode-map [?\e (return)] 'org-meta-return) ; tty emacs + +;; Cursor keys with modifiers +(define-key org-mode-map [(meta left)] 'org-metaleft) +(define-key org-mode-map [?\e (left)] 'org-metaleft) ; for tty emacs +(define-key org-mode-map "\C-c\C-xl" 'org-metaleft) ; for tty emacs (define-key org-mode-map [(meta right)] 'org-metaright) -(define-key org-mode-map [(meta up)] 'org-metaup) -(define-key org-mode-map [(meta down)] 'org-metadown) -;(define-key org-mode-map "\C-c\C-h\C-w" 'org-cut-subtree) -;(define-key org-mode-map "\C-c\C-h\M-w" 'org-copy-subtree) -;(define-key org-mode-map "\C-c\C-h\C-y" 'org-paste-subtree) -(define-key org-mode-map "\C-c\C-h\C-w" 'org-cut-special) -(define-key org-mode-map "\C-c\C-h\M-w" 'org-copy-special) -(define-key org-mode-map "\C-c\C-h\C-y" 'org-paste-special) +(define-key org-mode-map [?\e (right)] 'org-metaright) ; for tty emacs +(define-key org-mode-map "\C-c\C-xr" 'org-metaright) ; for tty emacs +(define-key org-mode-map [(meta up)] 'org-metaup) +(define-key org-mode-map [?\e (up)] 'org-metaup) ; for tty emacs +(define-key org-mode-map "\C-c\C-xu" 'org-metaup) ; for tty emacs +(define-key org-mode-map [(meta down)] 'org-metadown) +(define-key org-mode-map [?\e (down)] 'org-metadown) ; for tty emacs +(define-key org-mode-map "\C-c\C-xd" 'org-metadown) ; for tty emacs + +(define-key org-mode-map [(meta shift left)] 'org-shiftmetaleft) +(define-key org-mode-map "\C-c\C-xL" 'org-shiftmetaleft) ; tty +(define-key org-mode-map [(meta shift right)] 'org-shiftmetaright) +(define-key org-mode-map "\C-c\C-xR" 'org-shiftmetaright) ; tty +(define-key org-mode-map [(meta shift up)] 'org-shiftmetaup) +(define-key org-mode-map "\C-c\C-xU" 'org-shiftmetaup) ; tty +(define-key org-mode-map [(meta shift down)] 'org-shiftmetadown) +(define-key org-mode-map "\C-c\C-xD" 'org-shiftmetadown) ; tty +(define-key org-mode-map (org-key 'S-up) 'org-shiftup) +(define-key org-mode-map [?\C-c ?\C-x (up)] 'org-shiftup) +(define-key org-mode-map (org-key 'S-down) 'org-shiftdown) +(define-key org-mode-map [?\C-c ?\C-x (down)] 'org-shiftdown) +(define-key org-mode-map (org-key 'S-left) 'org-timestamp-down-day) +(define-key org-mode-map [?\C-c ?\C-x (left)] 'org-timestamp-down-day) +(define-key org-mode-map (org-key 'S-right) 'org-timestamp-up-day) +(define-key org-mode-map [?\C-c ?\C-x (right)] 'org-timestamp-up-day) + +;; All the other keys (define-key org-mode-map "\C-c$" 'org-archive-subtree) (define-key org-mode-map "\C-c\C-j" 'org-goto) (define-key org-mode-map "\C-c\C-t" 'org-todo) @@ -9368,11 +9468,11 @@ (define-key org-mode-map "\C-c/" 'org-occur) ; Minor-mode reserved (define-key org-mode-map "\C-c\C-m" 'org-insert-heading) (define-key org-mode-map "\M-\C-m" 'org-insert-heading) -(define-key org-mode-map [(meta shift return)] 'org-insert-todo-heading) (define-key org-mode-map "\C-c\C-l" 'org-insert-link) (define-key org-mode-map "\C-c\C-o" 'org-open-at-point) (define-key org-mode-map "\C-c\C-z" 'org-time-stamp) ; Alternative binding (define-key org-mode-map "\C-c." 'org-time-stamp) ; Minor-mode reserved +(define-key org-mode-map "\C-c!" 'org-time-stamp-inactive) ; Minor-mode r. (define-key org-mode-map "\C-c," 'org-priority) ; Minor-mode reserved (define-key org-mode-map "\C-c\C-y" 'org-evaluate-time-range) (define-key org-mode-map "\C-c>" 'org-goto-calendar) @@ -9380,19 +9480,9 @@ (define-key org-mode-map "\C-c[" 'org-add-file) (define-key org-mode-map "\C-c]" 'org-remove-file) (define-key org-mode-map "\C-c\C-r" 'org-timeline) -(define-key org-mode-map (org-key 'S-up) 'org-shiftup) -(define-key org-mode-map (org-key 'S-down) 'org-shiftdown) -(define-key org-mode-map (org-key 'S-left) 'org-timestamp-down-day) -(define-key org-mode-map (org-key 'S-right) 'org-timestamp-up-day) (define-key org-mode-map "\C-c-" 'org-table-insert-hline) -;; The following line is necessary for German keyboards under Suse GNU/Linux -(unless org-xemacs-p - (define-key org-mode-map [S-iso-lefttab] 'org-shifttab)) -(define-key org-mode-map [(shift tab)] 'org-shifttab) (define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) (define-key org-mode-map "\C-m" 'org-return) -(define-key org-mode-map (org-key 'S-return) 'org-table-copy-down) -(define-key org-mode-map [(meta return)] 'org-meta-return) (define-key org-mode-map "\C-c?" 'org-table-current-column) (define-key org-mode-map "\C-c " 'org-table-blank-field) (define-key org-mode-map "\C-c+" 'org-table-sum) @@ -9407,12 +9497,18 @@ (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) (define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) (define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) +;; OPML support is only planned ;(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) ;(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) -(define-key org-mode-map "\C-c\C-x\C-h" 'org-export-as-html-and-open) +(define-key org-mode-map "\C-c\C-xb" 'org-export-as-html-and-open) +(define-key org-mode-map "\C-c\C-x\C-b" 'org-export-as-html-and-open) + +(define-key org-mode-map "\C-c\C-x\C-w" 'org-cut-special) +(define-key org-mode-map "\C-c\C-x\M-w" 'org-copy-special) +(define-key org-mode-map "\C-c\C-x\C-y" 'org-paste-special) (defsubst org-table-p () (org-at-table-p)) @@ -9422,6 +9518,12 @@ overwritten, and the table is not marked as requiring realignment." (interactive "p") (if (and (org-table-p) + (or + (and org-table-auto-blank-field + (member last-command + '(org-cycle org-return org-shifttab org-ctrl-c-ctrl-c)) + (org-table-blank-field)) + t) (eq N 1) (looking-at "[^|\n]* +|")) (let (org-table-may-need-update) @@ -9476,30 +9578,42 @@ ;; How to do this: Measure non-white length of current string ;; If equal to column width, we should realign. +(defun org-remap (map &rest commands) + "In MAP, remap the functions given in COMMANDS. +COMMANDS is a list of alternating OLDDEF NEWDEF command names." + (let (new old) + (while commands + (setq old (pop commands) new (pop commands)) + (if (fboundp 'command-remapping) + (define-key map (vector 'remap old) new) + (substitute-key-definition old new map global-map))))) + (when (eq org-enable-table-editor 'optimized) ;; If the user wants maximum table support, we need to hijack ;; some standard editing functions - (substitute-key-definition 'self-insert-command 'org-self-insert-command - org-mode-map global-map) - (substitute-key-definition 'delete-char 'org-delete-char - org-mode-map global-map) - (substitute-key-definition 'delete-backward-char 'org-delete-backward-char - org-mode-map global-map) - (define-key org-mode-map "|" 'self-insert-command)) + (org-remap org-mode-map + 'self-insert-command 'org-self-insert-command + 'delete-char 'org-delete-char + 'delete-backward-char 'org-delete-backward-char) + (define-key org-mode-map "|" 'org-force-self-insert)) (defun org-shiftcursor-error () "Throw an error because Shift-Cursor command was applied in wrong context." (error "This command is only active in tables and on headlines")) (defun org-shifttab () - "Call `(org-cycle t)' or `org-table-previous-field'." + "Global visibility cycling or move to previous table field. +Calls `(org-cycle t)' or `org-table-previous-field', depending on context. +See the individual commands for more information." (interactive) (cond ((org-at-table-p) (org-table-previous-field)) (t (org-cycle '(4))))) (defun org-shiftmetaleft () - "Call `org-promote-subtree' or `org-table-delete-column'." + "Promote subtree or delete table column. +Calls `org-promote-subtree' or `org-table-delete-column', depending on context. +See the individual commands for more information." (interactive) (cond ((org-at-table-p) (org-table-delete-column)) @@ -9507,7 +9621,9 @@ (t (org-shiftcursor-error)))) (defun org-shiftmetaright () - "Call `org-demote-subtree' or `org-table-insert-column'." + "Demote subtree or insert table column. +Calls `org-demote-subtree' or `org-table-insert-column', depending on context. +See the individual commands for more information." (interactive) (cond ((org-at-table-p) (org-table-insert-column)) @@ -9515,14 +9631,18 @@ (t (org-shiftcursor-error)))) (defun org-shiftmetaup (&optional arg) - "Call `org-move-subtree-up' or `org-table-kill-row'." + "Move subtree up or kill table row. +Calls `org-move-subtree-up' or `org-table-kill-row', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-kill-row)) ((org-on-heading-p) (org-move-subtree-up arg)) (t (org-shiftcursor-error)))) (defun org-shiftmetadown (&optional arg) - "Call `org-move-subtree-down' or `org-table-insert-row'." + "Move subtree down or insert table row. +Calls `org-move-subtree-down' or `org-table-insert-row', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-insert-row arg)) @@ -9530,7 +9650,9 @@ (t (org-shiftcursor-error)))) (defun org-metaleft (&optional arg) - "Call `org-do-promote' or `org-table-move-column' to left." + "Promote heading or move table column to left. +Calls `org-do-promote' or `org-table-move-column', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-column 'left)) @@ -9538,7 +9660,9 @@ (t (backward-word (prefix-numeric-value arg))))) (defun org-metaright (&optional arg) - "Call `org-do-demote' or `org-table-move-column' to right." + "Demote subtree or move table column to right. +Calls `org-do-demote' or `org-table-move-column', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-column nil)) @@ -9546,7 +9670,9 @@ (t (forward-word (prefix-numeric-value arg))))) (defun org-metaup (&optional arg) - "Call `org-move-subtree-up' or `org-table-move-row' up." + "Move subtree up or move table row up. +Calls `org-move-subtree-up' or `org-table-move-row', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-row 'up)) @@ -9554,7 +9680,9 @@ (t (org-shiftcursor-error)))) (defun org-metadown (&optional arg) - "Call `org-move-subtree-down' or `org-table-move-row' down." + "Move subtree down or move table row down. +Calls `org-move-subtree-down' or `org-table-move-row', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) (org-table-move-row nil)) @@ -9562,33 +9690,43 @@ (t (org-shiftcursor-error)))) (defun org-shiftup (&optional arg) - "Call `org-timestamp-up' or `org-priority-up'." + "Increase item in timestamp or increase priority of current item. +Calls `org-timestamp-up' or `org-priority-up', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-timestamp-p) (org-timestamp-up arg)) (t (org-priority-up)))) (defun org-shiftdown (&optional arg) - "Call `org-timestamp-down' or `org-priority-down'." + "Decrease item in timestamp or decrease priority of current item. +Calls `org-timestamp-down' or `org-priority-down', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-timestamp-p) (org-timestamp-down arg)) (t (org-priority-down)))) (defun org-copy-special () - "Call either `org-table-copy' or `org-copy-subtree'." + "Copy region in table or copy current subtree. +Calls `org-table-copy' or `org-copy-subtree', depending on context. +See the individual commands for more information." (interactive) (call-interactively (if (org-at-table-p) 'org-table-copy-region 'org-copy-subtree))) (defun org-cut-special () - "Call either `org-table-copy' or `org-cut-subtree'." + "Cut region in table or cut current subtree. +Calls `org-table-copy' or `org-cut-subtree', depending on context. +See the individual commands for more information." (interactive) (call-interactively (if (org-at-table-p) 'org-table-cut-region 'org-cut-subtree))) (defun org-paste-special (arg) - "Call either `org-table-paste-rectangle' or `org-paste-subtree'." + "Paste rectangular region into table, or past subtree relative to level. +Calls `org-table-paste-rectangle' or `org-paste-subtree', depending on context. +See the individual commands for more information." (interactive "P") (if (org-at-table-p) (org-table-paste-rectangle) @@ -9601,7 +9739,8 @@ created with org.el, re-align that table. This command works even if the automatic table editor has been turned off. If the cursor is in one of the special #+KEYWORD lines, this triggers -scanning the buffer for these lines and updating the information." +scanning the buffer for these lines and updating the information. +If the cursor is on a #+TBLFM line, re-apply the formulae to the table." (interactive "P") (let ((org-enable-table-editor t)) (cond @@ -9625,7 +9764,7 @@ (skip-chars-backward " \r\n\t") (if (org-at-table-p) (org-table-recalculate t)))) (t - (let ((org-inhibit-startup t)) (org-mode))))) + (org-mode-restart)))) ((org-region-active-p) (org-table-convert-region (region-beginning) (region-end) arg)) ((and (region-beginning) (region-end)) @@ -9634,8 +9773,17 @@ (error "Abort"))) (t (error "No table at point, and no region to make one"))))) +(defun org-mode-restart () + "Restart Org-mode, to scan again for special lines. +Also updates the keyword regular expressions." + (interactive) + (let ((org-inhibit-startup t)) (org-mode)) + (message "Org-mode restarted to refresh keyword and special line setup")) + (defun org-return () - "Call `org-table-next-row' or `newline'." + "Goto next table row or insert a newline. +Calls `org-table-next-row' or `newline', depending on context. +See the individual commands for more information." (interactive) (cond ((org-at-table-p) @@ -9644,7 +9792,9 @@ (t (newline)))) (defun org-meta-return (&optional arg) - "Call `org-insert-heading' or `org-table-wrap-region'." + "Insert a new heading or wrap a region in a table. +Calls `org-insert-heading' or `org-table-wrap-region', depending on context. +See the individual commands for more information." (interactive "P") (cond ((org-at-table-p) @@ -9712,6 +9862,7 @@ (easy-menu-define org-org-menu org-mode-map "Org menu" '("Org" ["Cycle Visibility" org-cycle (or (bobp) (outline-on-heading-p))] + ["Cycle Global Visibility" org-shifttab (not (org-at-table-p))] ["Sparse Tree" org-occur t] ["Show All" show-all t] "--" @@ -9748,6 +9899,7 @@ ["Priority Down" org-shiftdown t]) ("Dates and Scheduling" ["Timestamp" org-time-stamp t] + ["Timestamp (inactive)" org-time-stamp-inactive t] ("Change Date" ["1 Day Later" org-timestamp-up-day t] ["1 Day Earlier" org-timestamp-down-day t] @@ -9791,6 +9943,8 @@ "--" ["Build Full Customize Menu" org-create-customize-menu (fboundp 'customize-menu-create)]) + "--" + ["Refresh setup" org-mode-restart t] )) (defun org-info (&optional node) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/refer.el --- a/lisp/textmodes/refer.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/refer.el Sun Oct 09 20:00:17 2005 +0000 @@ -339,7 +339,7 @@ (list (expand-file-name (if (eq major-mode 'bibtex-mode) (read-file-name - (format ".bib file: (default %s) " + (format ".bib file (default %s): " (file-name-nondirectory (buffer-file-name))) (file-name-directory (buffer-file-name)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-auc.el --- a/lisp/textmodes/reftex-auc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-auc.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-auc.el --- RefTeX's interface to AUCTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -68,26 +67,26 @@ (setq items (list (or (reftex-citation t) "")))) (t (setq prompt (concat (if optional "(Optional) " "") - (if prompt prompt "Add key") - ": (default none) ")) + (if prompt prompt "Add key") + " (default none): ")) (setq items (multi-prompt "," t prompt (LaTeX-bibitem-list))))) (apply 'LaTeX-add-bibitems items) (TeX-argument-insert (mapconcat 'identity items ",") optional))) (defun reftex-arg-index-tag (optional &optional prompt &rest args) - "Prompt for an index tag with completion. + "Prompt for an index tag with completion. This is the name of an index, not the entry." (let (tag taglist) (setq prompt (concat (if optional "(Optional) " "") - (if prompt prompt "Index tag") - ": (default none) ")) + (if prompt prompt "Index tag") + " (default none): ")) (if (and reftex-support-index (reftex-plug-flag 4)) ;; Use RefTeX completion (progn (reftex-access-scan-info nil) - (setq taglist - (cdr (assoc 'index-tags + (setq taglist + (cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol))) tag (completing-read prompt (mapcar 'list taglist)))) ;; Just ask like AUCTeX does. @@ -132,7 +131,7 @@ ;; Replace AUCTeX functions with RefTeX functions. ;; Which functions are replaced is controlled by the variable ;; `reftex-plug-into-AUCTeX'. - + (if (reftex-plug-flag 0) (setq LaTeX-label-function 'reftex-label) (setq LaTeX-label-function nil)) @@ -144,11 +143,11 @@ (and (reftex-plug-flag 3) (fboundp 'TeX-arg-cite) (fset 'TeX-arg-cite 'reftex-arg-cite)) - - (and (reftex-plug-flag 4) + + (and (reftex-plug-flag 4) (fboundp 'TeX-arg-index-tag) (fset 'TeX-arg-index-tag 'reftex-arg-index-tag)) - (and (reftex-plug-flag 4) + (and (reftex-plug-flag 4) (fboundp 'TeX-arg-index) (fset 'TeX-arg-index 'reftex-arg-index))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-cite.el --- a/lisp/textmodes/reftex-cite.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-cite.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-cite.el --- creating citations with RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -70,7 +69,7 @@ (unless (eq (get 'reftex-default-bibliography :reftex-raw) reftex-default-bibliography) (put 'reftex-default-bibliography :reftex-expanded - (reftex-locate-bibliography-files + (reftex-locate-bibliography-files default-directory reftex-default-bibliography)) (put 'reftex-default-bibliography :reftex-raw reftex-default-bibliography)) @@ -129,7 +128,7 @@ ;; If RETURN is non-nil, just return the entry. (let* ((re - (if item + (if item (concat "\\\\bibitem\\(\\[[^]]*\\]\\)?{" (regexp-quote key) "}") (concat "@[a-zA-Z]+[ \t\n\r]*[{(][ \t\n\r]*" (regexp-quote key) "[, \t\r\n}]"))) @@ -151,7 +150,7 @@ (when return ;; Just return the relevant entry (if item (goto-char (match-end 0))) - (setq return (buffer-substring + (setq return (buffer-substring (point) (reftex-end-of-bib-entry item))) (set-buffer buffer-conf) (throw 'exit return)) @@ -167,9 +166,9 @@ (error "No BibTeX entry with citation key %s" key))))) (defun reftex-end-of-bib-entry (item) - (save-excursion + (save-excursion (condition-case nil - (if item + (if item (progn (end-of-line) (re-search-forward "\\\\bibitem\\|\\end{thebibliography}") @@ -190,16 +189,16 @@ ;; Read a regexp, completing on known citation keys. (setq default (regexp-quote (reftex-get-bibkey-default))) - (setq re-list - (split-string - (completing-read + (setq re-list + (split-string + (completing-read (concat "Regex { && Regex...}: " "[" default "]: ") (if reftex-mode (if (fboundp 'LaTeX-bibitem-list) (LaTeX-bibitem-list) - (cdr (assoc 'bibview-cache + (cdr (assoc 'bibview-cache (symbol-value reftex-docstruct-symbol)))) nil) nil nil nil 'reftex-cite-regexp-hist) @@ -246,7 +245,7 @@ (error (goto-char key-point) (throw 'search-again nil))) (setq end-point (point)) - + ;; Ignore @string, @comment and @c entries or things ;; outside entries (when (or (string= (downcase (match-string 2)) "string") @@ -255,12 +254,12 @@ (< (point) key-point)) ; this means match not in {} (goto-char key-point) (throw 'search-again nil)) - + ;; Well, we have got a match ;;(setq entry (concat ;; (buffer-substring start-point (point)) "\n")) (setq entry (buffer-substring start-point (point))) - + ;; Check if other regexp match as well (setq re-list rest-re) (while re-list @@ -268,24 +267,24 @@ ;; nope - move on (throw 'search-again nil)) (pop re-list)) - + (setq alist (reftex-parse-bibtex-entry nil start-point end-point)) (push (cons "&entry" entry) alist) - + ;; check for crossref entries (if (assoc "crossref" alist) (setq alist (append alist (reftex-get-crossref-alist alist)))) - + ;; format the entry (push (cons "&formatted" (reftex-format-bib-entry alist)) alist) - + ;; make key the first element (push (reftex-get-bib-field "&key" alist) alist) - + ;; add it to the list (push alist found-list))))) (reftex-kill-temporary-buffers)))) @@ -348,7 +347,7 @@ (unless files (error "Need file name to find thebibliography environment")) (while (setq file (pop files)) - (setq buf (reftex-get-file-buffer-force + (setq buf (reftex-get-file-buffer-force file (not reftex-keep-temporary-buffers))) (unless buf (error "No such file %s" file)) @@ -359,21 +358,21 @@ (save-restriction (widen) (goto-char (point-min)) - (while (re-search-forward + (while (re-search-forward "\\(\\`\\|[\n\r]\\)[ \t]*\\\\begin{thebibliography}" nil t) (beginning-of-line 2) (setq start (point)) - (if (re-search-forward + (if (re-search-forward "\\(\\`\\|[\n\r]\\)[ \t]*\\\\end{thebibliography}" nil t) (progn (beginning-of-line 1) (setq end (point)))) (when (and start end) - (setq entries + (setq entries (append entries (mapcar 'reftex-parse-bibitem (delete "" - (split-string + (split-string (buffer-substring-no-properties start end) "[ \t\n\r]*\\\\bibitem\\(\\[[^]]*]\\)*")))))) (goto-char end))))) @@ -382,16 +381,16 @@ ;; Read a regexp, completing on known citation keys. (setq default (regexp-quote (reftex-get-bibkey-default))) - (setq re-list - (split-string - (completing-read + (setq re-list + (split-string + (completing-read (concat "Regex { && Regex...}: " "[" default "]: ") (if reftex-mode (if (fboundp 'LaTeX-bibitem-list) (LaTeX-bibitem-list) - (cdr (assoc 'bibview-cache + (cdr (assoc 'bibview-cache (symbol-value reftex-docstruct-symbol)))) nil) nil nil nil 'reftex-cite-regexp-hist) @@ -404,14 +403,14 @@ (error "Empty regular expression")) (while (and (setq re (pop re-list)) entries) - (setq entries + (setq entries (delq nil (mapcar (lambda (x) (if (string-match re (cdr (assoc "&entry" x))) x nil)) entries)))) - (setq entries - (mapcar + (setq entries + (mapcar (lambda (x) (push (cons "&formatted" (reftex-format-bibitem x)) x) (push (reftex-get-bib-field "&key" x) x) @@ -632,7 +631,6 @@ ;; This really does the work of reftex-citation. (let* ((format (reftex-figure-out-cite-format arg no-insert format-key)) - (start 0) (docstruct-symbol reftex-docstruct-symbol) (selected-entries (reftex-offer-bib-menu)) (insert-entries selected-entries) @@ -655,9 +653,9 @@ ;; FIXME: Unfortunately, this meens that commenting does not work right. (pop selected-entries) (let ((concat-keys (mapconcat 'car selected-entries ","))) - (setq insert-entries + (setq insert-entries (list (list concat-keys (cons "&key" concat-keys)))))) - + (unless no-insert ;; We shall insert this into the buffer... @@ -684,7 +682,7 @@ ;; it has to go. If there is only a single arg and empty, it can go ;; as well. (when reftex-cite-cleanup-optional-args - (cond + (cond ((string-match "\\([a-zA-Z0-9]\\)\\[\\]{" string) (setq string (replace-match "\\1{" nil nil string))) ((string-match "\\[\\]\\(\\[[a-zA-Z0-9., ]+\\]\\)" string) @@ -699,14 +697,14 @@ (delete-char 1)) ;; Tell AUCTeX - (when (and reftex-mode + (when (and reftex-mode (fboundp 'LaTeX-add-bibitems) reftex-plug-into-AUCTeX) (apply 'LaTeX-add-bibitems (mapcar 'car selected-entries))) - + ;; Produce the cite-view strings (when (and reftex-mode reftex-cache-cite-echo cite-view) - (mapcar (lambda (entry) + (mapcar (lambda (entry) (reftex-make-cite-echo-string entry docstruct-symbol)) selected-entries)) @@ -714,16 +712,16 @@ (set-marker reftex-select-return-marker nil) (reftex-kill-buffer "*RefTeX Select*") - + ;; Check if the prefix arg was numeric, and call recursively (when (integerp arg) (if (> arg 1) - (progn + (progn (skip-chars-backward "}") (decf arg) (reftex-do-citation arg)) (forward-char 1))) - + ;; Return the citation key (car (car selected-entries)))) @@ -737,7 +735,7 @@ (no-insert ;; Format does not really matter because nothing will be inserted. (setq format "%l")) - + ((and (stringp macro) (string-match "\\`\\\\cite\\|cite\\'" macro)) ;; We are already inside a cite macro @@ -758,7 +756,7 @@ (when (listp format) (setq key (or format-key - (reftex-select-with-char + (reftex-select-with-char "" (concat "SELECT A CITATION FORMAT\n\n" (mapconcat (lambda (x) @@ -787,8 +785,8 @@ (let ((bibtype (reftex-bib-or-thebib)) found-list rtn key data selected-entries) - (while - (not + (while + (not (catch 'done ;; Scan bibtex files (setq found-list @@ -803,20 +801,20 @@ (reftex-extract-bib-entries-from-thebibliography (reftex-uniquify (mapcar 'cdr - (reftex-all-assq + (reftex-all-assq 'thebib (symbol-value reftex-docstruct-symbol)))))) (reftex-default-bibliography (message "Using default bibliography") (reftex-extract-bib-entries (reftex-default-bibliography))) (t (error "No valid bibliography in this document, and no default available")))) - + (unless found-list (error "Sorry, no matches found")) - + ;; Remember where we came from (setq reftex-call-back-to-this-buffer (current-buffer)) (set-marker reftex-select-return-marker (point)) - + ;; Offer selection (save-window-excursion (delete-other-windows) @@ -857,15 +855,15 @@ (goto-char 1)) ((eq key ?A) ;; Take all (marked) - (setq selected-entries + (setq selected-entries (if reftex-select-marked (mapcar 'car (nreverse reftex-select-marked)) found-list)) (throw 'done t)) ((eq key ?a) ;; Take all (marked), and push the symbol 'concat - (setq selected-entries - (cons 'concat + (setq selected-entries + (cons 'concat (if reftex-select-marked (mapcar 'car (nreverse reftex-select-marked)) found-list))) @@ -884,9 +882,9 @@ ((or (eq key ?\C-m) (eq key 'return)) ;; Take selected - (setq selected-entries + (setq selected-entries (if reftex-select-marked - (cons 'concat + (cons 'concat (mapcar 'car (nreverse reftex-select-marked))) (if data (list data) nil))) (throw 'done t)) @@ -926,7 +924,7 @@ (let ((file (read-file-name "File to create: "))) (find-file-other-window file) (if (> (buffer-size) 0) - (unless (yes-or-no-p + (unless (yes-or-no-p (format "Overwrite non-empty file %s? " file)) (error "Abort"))) (erase-buffer) @@ -951,7 +949,7 @@ reftex-mouse-selected-face nil)) tmp len) - (mapcar + (mapcar (lambda (x) (setq tmp (cdr (assoc "&formatted" x)) len (length tmp)) @@ -1046,7 +1044,7 @@ (defun reftex-make-cite-echo-string (entry docstruct-symbol) ;; Format a bibtex entry for the echo area and cache the result. (let* ((key (reftex-get-bib-field "&key" entry)) - (string + (string (let* ((reftex-cite-punctuation '(" " " & " " etal."))) (reftex-format-citation entry reftex-cite-view-format))) (cache (assq 'bibview-cache (symbol-value docstruct-symbol))) @@ -1088,7 +1086,7 @@ (setq bibfile-list (reftex-uniquify (mapcar 'cdr - (reftex-all-assq + (reftex-all-assq 'thebib (symbol-value reftex-docstruct-symbol)))) item t)) (reftex-default-bibliography @@ -1099,16 +1097,16 @@ (setq bibfile-list (reftex-visited-files bibfile-list))) (condition-case nil - (reftex-pop-to-bibtex-entry + (reftex-pop-to-bibtex-entry key bibfile-list (not reftex-keep-temporary-buffers) t item) (error (ding)))) - + (select-window win))) ;;; Global BibTeX file (defun reftex-all-used-citation-keys () (reftex-access-scan-info) - (let ((files (reftex-all-document-files)) file keys kkk kk k) + (let ((files (reftex-all-document-files)) file keys kk k) (save-excursion (while (setq file (pop files)) (set-buffer (reftex-get-file-buffer-force file 'mark)) @@ -1131,7 +1129,7 @@ "Create a new BibTeX database file with all entries referenced in document. The command prompts for a filename and writes the collected entries to that file. Only entries referenced in the current document with -any \\cite-like macros are used. +any \\cite-like macros are used. The sequence in the new file is the same as it was in the old database." (interactive "FNew BibTeX file: ") (let ((keys (reftex-all-used-citation-keys)) @@ -1145,7 +1143,7 @@ (save-restriction (widen) (goto-char (point-min)) - (while (re-search-forward + (while (re-search-forward "^[ \t]*@[a-zA-Z]+[ \t]*{\\([^ \t\r\n]+\\)," nil t) (setq key (match-string 1) @@ -1162,7 +1160,7 @@ keys (delete key keys))))))))) (find-file-other-window bibfile) (if (> (buffer-size) 0) - (unless (yes-or-no-p + (unless (yes-or-no-p (format "Overwrite non-empty file %s? " bibfile)) (error "Abort"))) (erase-buffer) diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-dcr.el --- a/lisp/textmodes/reftex-dcr.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-dcr.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-dcr.el --- viewing cross references and citations with RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; ;; This file is part of GNU Emacs. @@ -268,7 +267,7 @@ ;; Display crossref info in echo area. (cond ((null docstruct) - (message (substitute-command-keys (format reftex-no-info-message "ref")))) + (message "%s" (substitute-command-keys (format reftex-no-info-message "ref")))) ((null entry) (message "ref: unknown label: %s" label)) (t @@ -301,7 +300,7 @@ (error (if (and files (= (length all-files) (length files))) (message "cite: no such database entry: %s" key) - (message (substitute-command-keys + (message "%s" (substitute-command-keys (format reftex-no-info-message "cite")))) nil))) (when entry diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-global.el --- a/lisp/textmodes/reftex-global.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-global.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-global.el --- operations on entire documents with RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -32,9 +31,6 @@ (require 'reftex) ;;; -(defvar isearch-next-buffer-function) -(defvar TeX-master) - (defun reftex-create-tags-file () "Create TAGS file by running `etags' on the current document. The TAGS file is also immediately visited with `visit-tags-table'." @@ -103,6 +99,10 @@ (tags-query-replace from to (or delimited current-prefix-arg) (list 'reftex-all-document-files)))) +(eval-when-compile + (defvar TeX-master) + (defvar isearch-next-buffer-function)) + (defun reftex-find-duplicate-labels () "Produce a list of all duplicate labels in the document." @@ -140,7 +140,7 @@ (set (make-local-variable 'TeX-master) master) (erase-buffer) (insert " MULTIPLE LABELS IN CURRENT DOCUMENT:\n") - (insert + (insert " Move point to label and type `r' to run a query-replace on the label\n" " and its references. Type `q' to exit this buffer.\n\n") (insert " LABEL FILE\n") @@ -198,8 +198,8 @@ (not (yes-or-no-p "Replacing all simple labels in multiple files is risky. Continue? "))) (error "Abort")) ;; Make the translation list - (let* ((re-core (concat "\\(" - (mapconcat 'cdr reftex-typekey-to-prefix-alist "\\|") + (let* ((re-core (concat "\\(" + (mapconcat 'cdr reftex-typekey-to-prefix-alist "\\|") "\\)")) (label-re (concat "\\`" re-core "\\([0-9]+\\)\\'")) (search-re (concat "[{,]\\(" re-core "\\([0-9]+\\)\\)[,}]")) @@ -232,11 +232,11 @@ (reftex-save-all-document-buffers) ;; First test to check for erros - (setq n (reftex-translate + (setq n (reftex-translate files search-re translate-alist error-fmt 'test)) ;; Now the real thing. - (if (yes-or-no-p + (if (yes-or-no-p (format "Replace %d items at %d places in %d files? " (length translate-alist) n (length files))) (progn @@ -254,9 +254,9 @@ (defun reftex-translate (files search-re translate-alist error-fmt test) ;; In FILES, look for SEARCH-RE and replace match 1 of it with - ;; its association in TRANSLATE-ALSIT. + ;; its association in TRANSLATE-ALSIT. ;; If we do not find an association and TEST is non-nil, query - ;; to ignore the problematic string. + ;; to ignore the problematic string. ;; If TEST is nil, it is ignored without query. ;; Return the number of replacements. (let ((n 0) file label match-data buf macro pos cell) @@ -282,7 +282,7 @@ (or (looking-at "\\\\ref") (looking-at "\\\\[a-zA-Z]*ref\\(range\\)?[^a-zA-Z]") (looking-at "\\\\ref[a-zA-Z]*[^a-zA-Z]") - (looking-at (format + (looking-at (format reftex-find-label-regexp-format (regexp-quote label))))) ;; OK, we should replace it. @@ -345,7 +345,7 @@ (defun reftex-isearch-wrap-function () (if (not isearch-word) - (switch-to-buffer + (switch-to-buffer (funcall isearch-next-buffer-function (current-buffer) t))) (goto-char (if isearch-forward (point-min) (point-max)))) @@ -431,7 +431,7 @@ `reftex-isearch-minor-mode' on iff ARG is positive." (interactive "P") (let ((old-reftex-isearch-minor-mode reftex-isearch-minor-mode)) - (setq reftex-isearch-minor-mode + (setq reftex-isearch-minor-mode (not (or (and (null arg) reftex-isearch-minor-mode) (<= (prefix-numeric-value arg) 0)))) (unless (eq reftex-isearch-minor-mode old-reftex-isearch-minor-mode) @@ -462,7 +462,7 @@ ;; Force modeline redisplay. (set-buffer-modified-p (buffer-modified-p)))) -(add-minor-mode 'reftex-isearch-minor-mode "/I" nil nil +(add-minor-mode 'reftex-isearch-minor-mode "/I" nil nil 'reftex-isearch-minor-mode) ;;; arch-tag: 2dbf7633-92c8-4340-8656-7aa019d0f80d diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-index.el --- a/lisp/textmodes/reftex-index.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-index.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-index.el --- index support with RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -32,13 +31,11 @@ (require 'reftex) ;;; -(defvar reftex-index-phrases-marker) -(defvar TeX-master) - ;; START remove for XEmacs release (defvar mark-active) (defvar zmacs-regions) (defvar transient-mark-mode) +(defvar TeX-master) ;; END remove for XEmacs release (defun reftex-index-selection-or-word (&optional arg phrase) "Put selection or the word near point into the default index macro. @@ -56,13 +53,13 @@ (active (if (boundp 'zmacs-regions) (and zmacs-regions (region-exists-p)) ; XEmacs (and transient-mark-mode mark-active))) ; Emacs - (beg (if active + (beg (if active (region-beginning) - (save-excursion + (save-excursion (skip-syntax-backward "w\\") (point)))) (end (if active (region-end) - (save-excursion + (save-excursion (skip-syntax-forward "w\\") (point)))) (sel (buffer-substring beg end)) (mathp (condition-case nil (texmathp) (error nil))) @@ -93,7 +90,7 @@ ;; Delete what is in the buffer and make the index entry (delete-region beg end) (reftex-index def-char full-entry def-tag sel))))) - + (defun reftex-index (&optional char key tag sel no-insert) "Query for an index macro and insert it along with its argments. The index macros available are those defined in `reftex-index-macro' or @@ -169,13 +166,20 @@ ;; OPT-ARGS is a list of optional argument indices, as given by ;; `reftex-parse-args'. (let* ((opt (and (integerp itag) (member itag opt-args))) - (index-tags (cdr (assq 'index-tags - (symbol-value reftex-docstruct-symbol)))) - (default (reftex-default-index)) - (prompt (concat "Index tag" - (if default (format " (default: %s)" default) "") - (if opt " (optional)" "") ": ")) - (tag (completing-read prompt (mapcar 'list index-tags)))) + (index-tags (cdr (assq 'index-tags + (symbol-value reftex-docstruct-symbol)))) + (default (reftex-default-index)) + (prompt (concat "Index tag" + (if (or opt default) + (format " (%s): " + (concat + (if opt "optional" "") + (if default + (concat (if opt ", " "") + (format "default %s" default)) + ""))) + ": "))) + (tag (completing-read prompt (mapcar 'list index-tags)))) (if (and default (equal tag "")) (setq tag default)) (reftex-update-default-index tag) tag)) @@ -183,17 +187,17 @@ (defun reftex-index-select-tag () ;; Have the user select an index tag. ;; FIXME: should we cache tag-alist, prompt and help? - (let* ((index-tags (cdr (assoc 'index-tags + (let* ((index-tags (cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))) (default (reftex-default-index))) - (cond + (cond ((null index-tags) (error "No index tags available")) ((= (length index-tags) 1) ;; Just one index, use it (car index-tags)) - + ((> (length index-tags) 1) ;; Several indices, ask. (let* ((tags (copy-sequence index-tags)) @@ -214,12 +218,12 @@ (unless (assq (aref tag i) tag-alist) (push (list (aref tag i) tag - (concat (substring tag 0 i) + (concat (substring tag 0 i) "[" (substring tag i (incf i)) "]" (substring tag i))) tag-alist) (throw 'exit t))) - (push (list (+ ?0 (incf cnt)) tag + (push (list (+ ?0 (incf cnt)) tag (concat "[" (int-to-string cnt) "]:" tag)) tag-alist))) (setq tag-alist (nreverse tag-alist)) @@ -234,7 +238,7 @@ (if default (format "[^M] %s (the default)\n" default) "") - (mapconcat (lambda(x) + (mapconcat (lambda(x) (apply 'format "[%c] %s" x)) tag-alist "\n"))) ;; Query the user for an index-tag @@ -263,7 +267,7 @@ key)) (defun reftex-index-update-taglist (newtag) - ;; add NEWTAG to the list of available index tags. + ;; add NEWTAG to the list of available index tags. (let ((cell (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))) (and newtag (cdr cell) (not (member newtag (cdr cell))) (push newtag (cdr cell))))) @@ -314,7 +318,7 @@ (easy-menu-add reftex-index-menu reftex-index-map) (add-hook 'post-command-hook 'reftex-index-post-command-hook nil t) (add-hook 'pre-command-hook 'reftex-index-pre-command-hook nil t) - (run-mode-hooks 'reftex-index-mode-hook)) + (run-hooks 'reftex-index-mode-hook)) (defconst reftex-index-help " AVAILABLE KEYS IN INDEX BUFFER @@ -344,7 +348,7 @@ ;; Note: This function just looks for the nearest match of the ;; context string and may fail if the entry moved and an identical ;; entry is close to the old position. Frequent rescans make this - ;; safer. + ;; safer. (let* ((file (nth 3 data)) (literal (nth 2 data)) (pos (nth 4 data)) @@ -392,7 +396,7 @@ (calling-file (buffer-file-name)) (restriction (or overriding-restriction - (and (not redo) + (and (not redo) (reftex-get-restriction current-prefix-arg docstruct)))) (locations ;; See if we are on an index macro as initial position @@ -401,7 +405,7 @@ (macro (car what-macro)) (here-I-am (when (member macro reftex-macros-with-index) (save-excursion - (goto-char (+ (cdr what-macro) + (goto-char (+ (cdr what-macro) (length macro))) (reftex-move-over-touching-args) (reftex-where-am-I))))) @@ -412,7 +416,7 @@ (setq buffer-name (reftex-make-index-buffer-name index-tag)) ;; Goto the buffer and put it into the correct mode - + (when (or restriction current-prefix-arg) (reftex-kill-buffer buffer-name)) @@ -505,7 +509,7 @@ ;; Delete the entry at place (and (bolp) (forward-char 1)) (delete-region (previous-single-property-change (1+ (point)) :data) - (or (next-single-property-change (point) :data) + (or (next-single-property-change (point) :data) (point-max)))) ;; Walk through the list and insert all entries @@ -526,7 +530,7 @@ (insert indent (nth 7 cell)) (when font (setq to (point)) - (put-text-property + (put-text-property (- (point) (length (nth 7 cell))) to 'face index-face) (goto-char to)) @@ -554,7 +558,7 @@ (defun reftex-index-insert-new-letter (letter &optional font) ;; Start a new section in the index (let ((from (point))) - (insert "\n" letter letter letter + (insert "\n" letter letter letter "-----------------------------------------------------------------") (when font (put-text-property from (point) 'face reftex-index-section-face)) @@ -631,10 +635,10 @@ (interactive "p") (setq reftex-callback-fwd t) (or (eobp) (forward-char 1)) - (goto-char (or (next-single-property-change (point) :data) + (goto-char (or (next-single-property-change (point) :data) (point))) (unless (get-text-property (point) :data) - (goto-char (or (next-single-property-change (point) :data) + (goto-char (or (next-single-property-change (point) :data) (point))))) (defun reftex-index-previous (&optional arg) "Move to previous selectable item." @@ -777,7 +781,7 @@ (reftex-index-restrict-to-section t) (setq reftex-index-restriction-indicator (nth 6 bor) reftex-index-restriction-data - (list bor + (list bor (car (memq (assq 'toc (cdr (memq bor docstruct))) docstruct)))) (reftex-index-revert)))) @@ -809,7 +813,7 @@ show-window show-buffer match) (unless data (error "Don't know which index entry to visit")) - + (if (eq (car data) 'index) (setq match (reftex-index-show-entry data no-revisit))) @@ -880,7 +884,7 @@ attr (nth 2 analyze)) (setf (nth 2 analyze) (if (string= attr bor) "" bor)) (setq new (apply 'concat analyze)) - (reftex-index-change-entry + (reftex-index-change-entry new (if (string= (nth 2 analyze) bor) "Entry is now START-OF-PAGE-RANGE" "START-OF-PAGE-RANGE canceled")))) @@ -938,7 +942,7 @@ (t (setf (nth n analyze) (concat initial npart)))) (setq new (apply 'concat analyze)) ;; Change the entry and insert the changed version into the index. - (reftex-index-change-entry + (reftex-index-change-entry new (if (string= npart "") (format "Deleted: %s" opart) (format "New value is: %s" npart))))) @@ -952,14 +956,14 @@ (unless data (error "Don't know which index entry to change")) (setq old (nth 2 data) key (nth 6 data) - prefix (completing-read - "Prefix: " - (reftex-sublist-nth + prefix (completing-read + "Prefix: " + (reftex-sublist-nth docstruct 6 (lambda (x) (and (eq (car x) 'index) (string= (nth 1 x) reftex-index-tag))) t))) - (unless (string-match + (unless (string-match (concat (regexp-quote (car reftex-index-special-chars)) "\\'") prefix) (setq prefix (concat prefix (car reftex-index-special-chars)))) @@ -999,7 +1003,7 @@ (defun reftex-index-change-entry (new &optional message) ;; Change the full context string of the index entry at point to ;; NEW. This actually edits the buffer where the entry is defined. - + (let* ((data (get-text-property (point) :data)) old beg end info) (unless data (error "Cannot change entry")) @@ -1025,7 +1029,7 @@ (reftex-insert-index (list data) reftex-index-tag t "EDITED"))) (setq reftex-last-follow-point 1) - (and message (message message)))) + (and message (message "%s" message)))) ;; Index map (define-key reftex-index-map (if (featurep 'xemacs) [(button2)] [(mouse-2)]) @@ -1091,14 +1095,14 @@ (if (eq char ?!) (error "This <%s> index does not contain entries sorted before the letters" reftex-index-tag) - (error "This <%s> index does not contain entries starting with `%c'" + (error "This <%s> index does not contain entries starting with `%c'" reftex-index-tag char))))) -(easy-menu-define +(easy-menu-define reftex-index-menu reftex-index-map "Menu for Index buffer" `("Index" - ["Goto section A-Z" + ["Goto section A-Z" (message "To go to a section, just press any of: !%s" reftex-index-section-letters) t] ["Show Entry" reftex-index-view-entry t] @@ -1138,7 +1142,7 @@ ["Context" reftex-index-toggle-context :style toggle :selected reftex-index-include-context] "--" - ["Follow Mode" reftex-index-toggle-follow :style toggle + ["Follow Mode" reftex-index-toggle-follow :style toggle :selected reftex-index-follow-mode]) "--" ["Help" reftex-index-show-help t])) @@ -1190,7 +1194,7 @@ (set-marker reftex-index-return-marker (point)) (reftex-index-selection-or-word arg 'phrase) (if (eq major-mode 'reftex-index-phrases-mode) - (message + (message "%s" (substitute-command-keys "Return to LaTeX with \\[reftex-index-phrases-save-and-return]")))) @@ -1219,7 +1223,7 @@ (sort (copy-sequence reftex-index-macro-alist) (lambda (a b) (equal (car a) default-macro)))) macro entry key repeat) - + (if master (set (make-local-variable 'TeX-master) (file-name-nondirectory master))) @@ -1232,10 +1236,10 @@ (if (looking-at reftex-index-phrases-comment-regexp) (beginning-of-line 2)) (while (looking-at "^[ \t]*$") - (beginning-of-line 2)) + (beginning-of-line 2)) (cond ((fboundp 'zmacs-activate-region) (zmacs-activate-region)) ((boundp 'make-active) (setq mark-active t))) - (if (yes-or-no-p "Delete and rebuilt header ") + (if (yes-or-no-p "Delete and rebuild header? ") (delete-region (point-min) (point)))) ;; Insert the mode line @@ -1277,6 +1281,7 @@ (defvar reftex-index-phrases-menu) +(defvar reftex-index-phrases-marker) (defvar reftex-index-phrases-restrict-file nil) ;;;###autoload (defun reftex-index-phrases-mode () @@ -1308,17 +1313,17 @@ (setq major-mode 'reftex-index-phrases-mode mode-name "Phrases") (use-local-map reftex-index-phrases-map) - (set (make-local-variable 'font-lock-defaults) + (set (make-local-variable 'font-lock-defaults) reftex-index-phrases-font-lock-defaults) (easy-menu-add reftex-index-phrases-menu reftex-index-phrases-map) (set (make-local-variable 'reftex-index-phrases-marker) (make-marker)) - (run-mode-hooks 'reftex-index-phrases-mode-hook)) + (run-hooks 'reftex-index-phrases-mode-hook)) (add-hook 'reftex-index-phrases-mode-hook 'turn-on-font-lock) ;; Font Locking stuff (let ((ss (if (featurep 'xemacs) 'secondary-selection ''secondary-selection))) (setq reftex-index-phrases-font-lock-keywords - (list + (list (cons reftex-index-phrases-comment-regexp 'font-lock-comment-face) (list reftex-index-phrases-macrodef-regexp '(1 font-lock-type-face) @@ -1342,7 +1347,7 @@ (setq reftex-index-phrases-font-lock-defaults '((reftex-index-phrases-font-lock-keywords) nil t nil beginning-of-line)) - (put 'reftex-index-phrases-mode 'font-lock-defaults + (put 'reftex-index-phrases-mode 'font-lock-defaults reftex-index-phrases-font-lock-defaults) ; XEmacs ) @@ -1404,10 +1409,10 @@ (move-marker reftex-index-phrases-marker (match-beginning 0) (current-buffer)) ;; Start the query-replace - (reftex-query-index-phrase-globally - files phrase macro-fmt + (reftex-query-index-phrase-globally + files phrase macro-fmt index-key repeat as-words) - (message "%s replaced" + (message "%s replaced" (reftex-number replace-count "occurrence")))))) (t (error "Cannot parse this line"))))) @@ -1450,7 +1455,7 @@ (unless buf (error "Master file %s not found" master)) (set-buffer buf) (reftex-access-scan-info) - (setq reftex-index-phrases-files + (setq reftex-index-phrases-files (reftex-all-document-files)))) ;; Parse the files header for macro definitions (setq reftex-index-phrases-macro-data nil) @@ -1465,7 +1470,7 @@ ;; Reverse the list, so that the first macro is first (if (null reftex-index-phrases-macro-data) (error "No valid MACRO DEFINITION line in %s file (make sure to use TAB separators)" reftex-index-phrase-file-extension)) - (setq reftex-index-phrases-macro-data + (setq reftex-index-phrases-macro-data (nreverse reftex-index-phrases-macro-data)) (goto-char (point-min))))) @@ -1477,7 +1482,7 @@ index the new part without having to go over the unchanged parts again." (interactive "r") (let ((win-conf (current-window-configuration)) - (reftex-index-phrases-restrict-file (buffer-file-name))) + (reftex-index-phrases-restrict-file (buffer-file-name))) (save-excursion (save-restriction (narrow-to-region beg end) @@ -1500,7 +1505,7 @@ (setq text (reftex-index-simplify-phrase text)) (goto-char (point-min)) (if (re-search-forward - (concat "^\\(\\S-*\\)\t\\(" (regexp-quote text) + (concat "^\\(\\S-*\\)\t\\(" (regexp-quote text) "\\) *[\t\n]") nil t) (progn (goto-char (match-end 2)) @@ -1530,7 +1535,7 @@ (let* ((phrase (match-string 3)) (case-fold-search reftex-index-phrases-case-fold-search) (re (reftex-index-phrases-find-dup-re phrase t))) - (if (save-excursion + (if (save-excursion (goto-char (point-min)) (and (re-search-forward re nil t) (re-search-forward re nil t))) @@ -1623,7 +1628,7 @@ (progn (princ (format " Superphrases: Phrase matches the following %s in the phrase buffer:\n" (reftex-number ntimes2 "line"))) - (mapcar (lambda(x) + (mapcar (lambda(x) (princ (format " Line %4d: %s\n" (car x) (cdr x)))) (nreverse superphrases)))))))) @@ -1676,7 +1681,7 @@ beg end) (goto-char (point-min)) ;; Find first and last phrase line in buffer - (setq beg + (setq beg (and (re-search-forward reftex-index-phrases-phrase-regexp12 nil t) (match-beginning 0))) (goto-char (point-max)) @@ -1703,15 +1708,15 @@ (if (string-match reftex-index-phrases-phrase-regexp12 a) (progn ;; Extract macro char and phrase-or-key for a - (setq ca (match-string 1 a) - pa (downcase + (setq ca (match-string 1 a) + pa (downcase (or (and reftex-index-phrases-sort-prefers-entry (match-string 6 a)) (match-string 3 a)))) (if (string-match reftex-index-phrases-phrase-regexp12 b) (progn ;; Extract macro char and phrase-or-key for b - (setq cb (match-string 1 b) + (setq cb (match-string 1 b) pb (downcase (or (and reftex-index-phrases-sort-prefers-entry (match-string 6 b)) @@ -1719,7 +1724,7 @@ (setq c-p (string< ca cb) p-p (string< pa pb)) ;; Do the right comparison, based on the value of `chars-first' - ;; `chars-first' is bound locally in the calling function + ;; `chars-first' is bound locally in the calling function (if chars-first (if (string= ca cb) p-p c-p) (if (string= pa pb) c-p p-p))))) @@ -1730,7 +1735,7 @@ (not reftex-index-phrases-sort-in-blocks)))) (defvar reftex-index-phrases-menu) -(defun reftex-index-make-phrase-regexp (phrase &optional +(defun reftex-index-make-phrase-regexp (phrase &optional as-words allow-newline) "Return a regexp matching PHRASE, even if distributed over lines. With optional arg AS-WORDS, require word boundary at beginning and end. @@ -1741,12 +1746,12 @@ "\\([ \t]+\\)"))) (concat (if (and as-words (string-match "\\`\\w" (car words))) "\\(\\<\\|[`']\\)" "") - (mapconcat (lambda (w) (regexp-quote + (mapconcat (lambda (w) (regexp-quote (if reftex-index-phrases-case-fold-search (downcase w) w))) words space-re) - (if (and as-words + (if (and as-words (string-match "\\w\\'" (nth (1- (length words)) words))) "\\(\\>\\|'\\)" "")))) @@ -1769,8 +1774,8 @@ (let ((index-keys (split-string (or index-key match) reftex-index-phrases-logical-and-regexp))) (concat - (mapconcat (lambda (x) - (format macro-fmt + (mapconcat (lambda (x) + (format macro-fmt (format (if mathp reftex-index-math-format "%s") x))) index-keys "") (if repeat (reftex-index-simplify-phrase match) "")))) @@ -1782,7 +1787,7 @@ (unless files (error "No files")) (unwind-protect (progn - (switch-to-buffer-other-window (reftex-get-file-buffer-force + (switch-to-buffer-other-window (reftex-get-file-buffer-force (car files))) (catch 'no-more-files (while (setq file (pop files)) @@ -1822,13 +1827,15 @@ both ends." (let* ((re (reftex-index-make-phrase-regexp phrase as-words 'allow-newline)) (case-fold-search reftex-index-phrases-case-fold-search) - (index-keys (split-string + (index-keys (split-string (or index-key phrase) reftex-index-phrases-logical-or-regexp)) (nkeys (length index-keys)) (ckey (nth 0 index-keys)) - (all-yes nil) - match rpl char beg end mathp) + (all-yes nil) + match rpl char (beg (make-marker)) (end (make-marker)) mathp) + (move-marker beg 1) + (move-marker end 1) (unwind-protect (while (re-search-forward re nil t) (catch 'next-match @@ -1841,24 +1848,24 @@ (setq mathp (save-match-data (condition-case nil (texmathp) (error nil)))) - (setq beg (car (match-data)) - end (nth 1 (match-data))) + (setq beg (move-marker beg (match-beginning 0)) + end (move-marker end (match-end 0))) (if (and reftex-index-phrases-skip-indexed-matches (save-match-data (reftex-index-phrase-match-is-indexed beg end))) (throw 'next-match nil)) (reftex-highlight 0 (match-beginning 0) (match-end 0)) - (setq rpl + (setq rpl (save-match-data (reftex-index-make-replace-string macro-fmt (match-string 0) ckey repeat mathp))) - (while + (while (not (catch 'loop (message "REPLACE: %s? (yn!qoe%s?)" rpl - (if (> nkeys 1) + (if (> nkeys 1) (concat "1-" (int-to-string nkeys)) "")) (setq char (if all-yes ?y (read-char-exclusive))) @@ -1892,7 +1899,7 @@ ((member char '(?o ?O)) ;; Select a differnt macro (let* ((nc (reftex-index-select-phrases-macro 2)) - (macro-data + (macro-data (cdr (assoc nc reftex-index-phrases-macro-data))) (macro-fmt (car macro-data)) (repeat (nth 1 macro-data))) @@ -1910,7 +1917,7 @@ ;; Recursive edit (save-match-data (save-excursion - (message + (message "%s" (substitute-command-keys "Recursive edit. Resume with \\[exit-recursive-edit]")) (recursive-edit)))) @@ -1930,6 +1937,8 @@ (t (ding))) nil))))) (message "") + (move-marker beg nil) + (move-marker end nil) (setq all-yes nil) (reftex-unhighlight 0)))) @@ -1939,7 +1948,7 @@ (save-excursion (goto-char end) (let* ((all-macros (reftex-what-macro t)) - (this-macro (car (car all-macros))) +; (this-macro (car (car all-macros))) (before-macro (and (> beg 2) (goto-char (1- beg)) @@ -2043,7 +2052,7 @@ ("\C-i" . self-insert-command)) do (define-key reftex-index-phrases-map (car x) (cdr x))) -(easy-menu-define +(easy-menu-define reftex-index-phrases-menu reftex-index-phrases-map "Menu for Phrases buffer" '("Phrases" diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-parse.el --- a/lisp/textmodes/reftex-parse.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-parse.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-parse.el --- parser functions for RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; ;; This file is part of GNU Emacs. diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-ref.el --- a/lisp/textmodes/reftex-ref.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-ref.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-ref.el --- code to create labels and references with RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-sel.el --- a/lisp/textmodes/reftex-sel.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-sel.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-sel.el --- the selection modes for RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2440, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -61,7 +60,7 @@ (when (syntax-table-p reftex-latex-syntax-table) (set-syntax-table reftex-latex-syntax-table)) ;; We do not set a local map - reftex-select-item does this. - (run-mode-hooks 'reftex-select-label-mode-hook)) + (run-hooks 'reftex-select-label-mode-hook)) (defvar reftex-select-bib-map nil "Keymap used for *RefTeX Select* buffer, when selecting a BibTeX entry. @@ -89,7 +88,7 @@ mode-name "BSelect") (set (make-local-variable 'reftex-select-marked) nil) ;; We do not set a local map - reftex-select-item does this. - (run-mode-hooks 'reftex-select-bib-mode-hook)) + (run-hooks 'reftex-select-bib-mode-hook)) ;;; (defun reftex-get-offset (buf here-am-I &optional typekey toc index file) ;;; ;; Find the correct offset data, like insert-docstruct would, but faster. diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-toc.el --- a/lisp/textmodes/reftex-toc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-toc.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-toc.el --- RefTeX's table of contents mode - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -36,8 +35,9 @@ "Keymap used for *toc* buffer.") (defvar reftex-toc-menu) -(defvar zmacs-regions) - +(eval-when-compile (defvar zmacs-regions)) +(defvar reftex-last-window-height nil) +(defvar reftex-last-window-width nil) (defvar reftex-toc-include-labels-indicator nil) (defvar reftex-toc-include-index-indicator nil) (defvar reftex-toc-max-level-indicator nil) @@ -79,13 +79,11 @@ (add-hook 'post-command-hook 'reftex-toc-post-command-hook nil t) (add-hook 'pre-command-hook 'reftex-toc-pre-command-hook nil t) (easy-menu-add reftex-toc-menu reftex-toc-map) - (run-mode-hooks 'reftex-toc-mode-hook)) + (run-hooks 'reftex-toc-mode-hook)) (defvar reftex-last-toc-file nil "Stores the file name from which `reftex-toc' was called. For redo command.") -(defvar reftex-last-window-height nil) -(defvar reftex-last-window-width nil) (defvar reftex-toc-return-marker (make-marker) "Marker which makes it possible to return from toc to old position.") @@ -152,7 +150,7 @@ (frame-parameter (selected-frame) 'unsplittable))) offset toc-window) - (if (setq toc-window (get-buffer-window + (if (setq toc-window (get-buffer-window "*toc*" (if reuse 'visible))) (select-window toc-window) @@ -168,7 +166,7 @@ (split-window-horizontally (floor (* (window-width) reftex-toc-split-windows-fraction))) - (split-window-vertically + (split-window-vertically (floor (* (window-height) reftex-toc-split-windows-fraction))))) @@ -213,11 +211,11 @@ reftex-toc-include-context nil ; counter nil ; commented - here-I-am + here-I-am "" ; xr-prefix t ; a toc buffer )) - + (run-hooks 'reftex-display-copied-context-hook) (message "Building *toc* buffer...done.") (setq buffer-read-only t)) @@ -229,7 +227,7 @@ t reftex-toc-include-index-entries reftex-toc-include-file-boundaries) - (reftex-last-assoc-before-elt + (reftex-last-assoc-before-elt 'toc here-I-am (symbol-value reftex-docstruct-symbol)))) (put 'reftex-toc :reftex-line 3) @@ -254,7 +252,7 @@ (not (get-text-property (point) 'intangible)) (memq reftex-highlight-selection '(cursor both)) (reftex-highlight 2 - (or (previous-single-property-change + (or (previous-single-property-change (min (point-max) (1+ (point))) :data) (point-min)) (or (next-single-property-change (point) :data) @@ -301,10 +299,10 @@ (window-height)))))) (defun reftex-toc-dframe-p (&optional frame error) - ;; Check if FRAME is the dedicated TOC frame. + ;; Check if FRAME is the dedicated TOC frame. ;; If yes, and ERROR is non-nil, throw an error. (setq frame (or frame (selected-frame))) - (let ((res (equal + (let ((res (equal (if (fboundp 'frame-property) (frame-property frame 'name) (frame-parameter frame 'name)) @@ -330,7 +328,7 @@ (if (boundp 'zmacs-region-stays) (setq zmacs-region-stays t)) (setq reftex-callback-fwd t) (or (eobp) (forward-char 1)) - (goto-char (or (next-single-property-change (point) :data) + (goto-char (or (next-single-property-change (point) :data) (point)))) (defun reftex-toc-previous (&optional arg) "Move to previous selectable item." @@ -367,7 +365,7 @@ With prefix ARG, prompt for a label type and include only labels of that specific type." (interactive "P") - (setq reftex-toc-include-labels + (setq reftex-toc-include-labels (if arg (reftex-query-label-type) (not reftex-toc-include-labels))) (reftex-toc-revert)) @@ -471,7 +469,7 @@ (defun reftex-toc-rescan (&rest ignore) "Regenerate the *toc* buffer by reparsing file of section at point." (interactive) - (if (and reftex-enable-partial-scans + (if (and reftex-enable-partial-scans (null current-prefix-arg)) (let* ((data (get-text-property (point) :data)) (what (car data)) @@ -505,7 +503,7 @@ (defun reftex-toc-revert (&rest ignore) "Regenerate the *toc* from the internal lists." (interactive) - (let ((unsplittable + (let ((unsplittable (if (fboundp 'frame-property) (frame-property (selected-frame) 'unsplittable) (frame-parameter (selected-frame) 'unsplittable))) @@ -547,6 +545,13 @@ ;; Promotion/Demotion stuff +(defvar delta) +(defvar mpos) +(defvar pro-or-de) +(defvar start-pos) +(defvar start-line) +(defvar mark-line) + (defun reftex-toc-demote (&optional arg) "Demote section at point. If region is active, apply to all in region." (interactive "p") @@ -592,7 +597,7 @@ (goto-char start-pos) (setq sections (reftex-toc-extract-section-number (car entries))) (if (> (setq nsec (length entries)) 1) - (setq sections + (setq sections (concat sections "-" (reftex-toc-extract-section-number (nth (1- nsec) entries))))) @@ -617,17 +622,11 @@ (save-window-excursion (reftex-toc-Rescan)) (reftex-toc-restore-region start-line mark-line) - (message "%d section%s %smoted" + (message "%d section%s %smoted" nsec (if (= 1 nsec) "" "s") pro-or-de) nil)) (if msg (progn (ding) (message msg))))) -(defvar delta) -(defvar mpos) -(defvar pro-or-de) -(defvar start-pos) -(defvar start-line) -(defvar mark-line) (defun reftex-toc-restore-region (point-line &optional mark-line) (if mark-line @@ -642,6 +641,10 @@ (setq mark-active t deactivate-mark nil))))) +(defvar name1) +(defvar dummy) +(defvar dummy2) + (defun reftex-toc-promote-prepare (x) "Look at a toc entry and see if we could pro/demote it. Expects the level change DELTA to be dynamically scoped into this function. @@ -670,7 +673,7 @@ (beginning-of-line 1) (if (looking-at reftex-section-regexp) (setq name (reftex-match-string 2)) - (error "Something is wrong! Contact maintainer!"))) + (error "Something is wrong! Contact maintainer!"))) ;; Section has changed, request scan and loading ;; We use a variable to delay until after the safe-exc. ;; because otherwise we loose the region. @@ -779,7 +782,7 @@ (error "This is not a label entry.")) (setq newlabel (read-string (format "Rename label \"%s\" to:" label))) (if (assoc newlabel (symbol-value reftex-docstruct-symbol)) - (if (not (y-or-n-p + (if (not (y-or-n-p (format "Label '%s' exists. Use anyway? " label))) (error "Abort"))) (save-excursion @@ -789,7 +792,7 @@ (reftex-query-replace-document (concat "{" (regexp-quote label) "}") (format "{%s}" newlabel)) - (error t)))) + (error t)))) (reftex-toc-rescan))) @@ -808,9 +811,9 @@ show-window show-buffer match) (unless toc (error "Don't know which toc line to visit")) - + (cond - + ((eq (car toc) 'toc) ;; a toc entry (setq match (reftex-toc-find-section toc no-revisit))) @@ -826,7 +829,7 @@ (file (nth 1 toc))) (if (or (not no-revisit) (reftex-get-buffer-visiting file)) (progn - (switch-to-buffer-other-window + (switch-to-buffer-other-window (reftex-get-file-buffer-force file nil)) (goto-char (if (eq where 'bof) (point-min) (point-max)))) (message reftex-no-follow-message) nil)))) @@ -879,8 +882,8 @@ (looking-at (reftex-make-desperate-section-regexp literal)) (looking-at (concat "\\\\" (regexp-quote - (car - (rassq level + (car + (rassq level reftex-section-levels-all))) "[[{]?")))) ((or (not no-revisit) @@ -1050,7 +1053,7 @@ (define-key reftex-toc-map (vector (list key)) 'digit-argument)) (define-key reftex-toc-map "-" 'negative-argument) -(easy-menu-define +(easy-menu-define reftex-toc-menu reftex-toc-map "Menu for Table of Contents buffer" '("TOC" @@ -1083,7 +1086,7 @@ ["Context" reftex-toc-toggle-context :style toggle :selected reftex-toc-include-context] "--" - ["Follow Mode" reftex-toc-toggle-follow :style toggle + ["Follow Mode" reftex-toc-toggle-follow :style toggle :selected reftex-toc-follow-mode] ["Auto Recenter" reftex-toggle-auto-toc-recenter :style toggle :selected reftex-toc-auto-recenter-timer] diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex-vars.el --- a/lisp/textmodes/reftex-vars.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex-vars.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex-vars.el --- configuration variables for RefTeX - -;; Copyright (C) 1997, 1998, 1999, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; This file is part of GNU Emacs. @@ -26,10 +25,9 @@ ;;; Commentary: ;;; Code: - +(eval-when-compile (defvar reftex-tables-dirty)) (eval-when-compile (require 'cl)) (eval-and-compile - (defvar reftex-tables-dirty) (defun reftex-set-dirty (symbol value) (setq reftex-tables-dirty t) (set symbol value))) @@ -102,22 +100,22 @@ ("enumerate" ?i "item:" "~\\ref{%s}" item (regexp "items?" "Punkte?")) - + ("equation" ?e "eq:" "~(\\ref{%s})" t (regexp "equations?" "eqs?\\." "eqn\\." "Gleichung\\(en\\)?" "Gl\\.")) ("eqnarray" ?e "eq:" nil eqnarray-like) - + ("figure" ?f "fig:" "~\\ref{%s}" caption (regexp "figure?[sn]?" "figs?\\." "Abbildung\\(en\\)?" "Abb\\.")) ("figure*" ?f nil nil caption) - + ("table" ?t "tab:" "~\\ref{%s}" caption (regexp "tables?" "tab\\." "Tabellen?")) ("table*" ?t nil nil caption) - + ("\\footnote[]{}" ?n "fn:" "~\\ref{%s}" 2 (regexp "footnotes?" "Fussnoten?")) - + ("any" ?\ " " "~\\ref{%s}" nil) ;; The label macro is hard coded, but it *could* be defined like this: @@ -209,7 +207,7 @@ `?t' should point to a textual citation (citation as a noun). `?p' should point to a parenthetical citation.") -(defconst reftex-index-macros-builtin +(defconst reftex-index-macros-builtin '((default "Default \\index and \\glossary macros" (("\\index{*}" "idx" ?i "" nil t) ("\\glossary{*}" "glo" ?g "" nil t))) @@ -221,7 +219,7 @@ (Index-Shortcut "index.sty with \\shortindexingon" (("\\index[]{*}" 1 ?i "" nil t) ("\\index*[]{*}" 1 ?I "" nil nil) - ("^[]{*}" 1 ?^ "" texmathp t) + ("^[]{*}" 1 ?^ "" texmathp t) ("_[]{*}" 1 ?_ "" texmathp nil)))) "Builtin stuff for reftex-index-macros. Lower-case symbols correspond to a style file of the same name in the LaTeX @@ -233,7 +231,7 @@ (defgroup reftex nil "LaTeX label and citation support." :tag "RefTeX" - :link '(url-link :tag "Home Page" + :link '(url-link :tag "Home Page" "http://zon.astro.uva.nl/~dominik/Tools/") :link '(emacs-commentary-link :tag "Commentary in reftex.el" "reftex.el") :link '(custom-manual "(reftex)Top") @@ -328,14 +326,14 @@ automatic recentering is turned on. When the frame gets destroyed, automatic recentering is turned off again. -This feature can be turned on and off from the menu +This feature can be turned on and off from the menu \(Ref->Options)." :group 'reftex-table-of-contents-browser :type '(choice (const :tag "never" nil) (const :tag "always" t) (const :tag "in dedicated frame only" frame))) - + (defcustom reftex-toc-split-windows-horizontally nil "*Non-nil means, create TOC window by splitting window horizontally." :group 'reftex-table-of-contents-browser @@ -427,7 +425,7 @@ '(amsmath endnotes fancybox floatfig longtable picinpar rotating sidecap subfigure supertab wrapfig LaTeX) "Default label alist specifications. LaTeX should always be the last entry. -The value of this variable is a list of symbols with associations in the +The value of this variable is a list of symbols with associations in the constant `reftex-label-alist-builtin'. Check that constant for a full list of options." :group 'reftex-defining-label-environments @@ -626,7 +624,7 @@ (defcustom reftex-section-prefixes '((0 . "part:") (1 . "cha:") (t . "sec:")) "Prefixes for section labels. When the label prefix given in an entry in `reftex-label-alist' contains `%S', -this list is used to determine the correct prefix string depending on the +this list is used to determine the correct prefix string depending on the current section level. The list is an alist, with each entry of the form (KEY . PREFIX) Possible keys are sectioning macro names like `chapter', section levels @@ -688,7 +686,7 @@ (regexp) (repeat :tag "List" (string :tag "prefix (with colon)")))) - + (defcustom reftex-special-environment-functions nil "List of functions to be called when trying to figure out current environment. These are special functions to detect \"environments\" which do not @@ -734,7 +732,7 @@ (let ((pos (point)) p1) (save-excursion ;; Search for any of the linguex item macros at the beginning of a line - (if (re-search-backward + (if (re-search-backward \"^[ \\t]*\\\\(\\\\\\\\\\\\(ex\\\\|a\\\\|b\\\\|c\\\\|d\\\\|e\\\\|f\\\\)g?\\\\.\\\\)\" bound t) (progn (setq p1 (match-beginning 1)) @@ -744,7 +742,7 @@ nil ;; OK, we got it (cons \"linguex\" p1))) - ;; Return nil for not found + ;; Return nil for not found nil)))) 3. Tell RefTeX to use this function @@ -943,7 +941,7 @@ (defcustom reftex-vref-is-default nil "*Non-nil means, the varioref macro \\vref is used as default. -In the selection buffer, the `v' key toggles the reference macro between +In the selection buffer, the `v' key toggles the reference macro between `\\ref' and `\\vref'. The value of this variable determines the default which is active when entering the selection process. Instead of nil or t, this may also be a string of type letters indicating @@ -953,7 +951,7 @@ (defcustom reftex-fref-is-default nil "*Non-nil means, the fancyref macro \\fref is used as default. -In the selection buffer, the `V' key toggles the reference macro between +In the selection buffer, the `V' key toggles the reference macro between `\\ref', `\\fref' and `\\Fref'. The value of this variable determines the default which is active when entering the selection process. Instead of nil or t, this may also be a string of type letters indicating @@ -977,7 +975,7 @@ (defcustom reftex-format-ref-function nil "Function which produces the string to insert as a reference. -Normally should be nil, because the format to insert a reference can +Normally should be nil, because the format to insert a reference can already be specified in `reftex-label-alist'. This hook also is used by the special commands to insert `\\vref' and `\\fref' references, so even if you set this, your setting will be ignored by @@ -1058,13 +1056,13 @@ %i institution %j journal %k key %m month %n number %o organization %p pages %P first page %r address %s school %u publisher %t title -%v volume %y year +%v volume %y year %B booktitle, abbreviated %T title, abbreviated Usually, only %l is needed. The other stuff is mainly for the echo area display, and for (setq reftex-comment-citations t). -%< as a special operator kills punctuation and space around it after the +%< as a special operator kills punctuation and space around it after the string has been formatted. A pair of square brackets indicates an optional argument, and RefTeX @@ -1079,7 +1077,7 @@ strings. In order to configure this variable, you can either set `reftex-cite-format' directly yourself or set it to the SYMBOL of one of -the predefined styles. The predefined symbols are those which have an +the predefined styles. The predefined symbols are those which have an association in the constant `reftex-cite-format-builtin'. E.g.: (setq reftex-cite-format 'natbib)" :group 'reftex-citation-support @@ -1173,7 +1171,7 @@ (defcustom reftex-format-cite-function nil "Function which produces the string to insert as a citation. -Normally should be nil, because the format to insert a reference can +Normally should be nil, because the format to insert a reference can already be specified in `reftex-cite-format'. The function will be called with two arguments, the CITATION KEY and the DEFAULT FORMAT, which is taken from `reftex-cite-format'. The function @@ -1256,7 +1254,7 @@ :group 'reftex-index-support :set 'reftex-set-dirty :type `(list - (repeat + (repeat :inline t (list :value ("" "idx" ?a "" nil) (string :tag "Macro with args") @@ -1283,7 +1281,7 @@ This is a list with (MACRO-KEY DEFAULT-TAG). MACRO-KEY: Character identifying an index macro - see `reftex-index-macros'. -DEFAULT-TAG: This is the tag to be used if the macro requires a TAG argument. +DEFAULT-TAG: This is the tag to be used if the macro requires a TAG argument. When this is nil and a TAG is needed, RefTeX will ask for it. When this is the empty string and the TAG argument of the index macro is optional, the TAG argument will be omitted." @@ -1424,7 +1422,7 @@ (defcustom reftex-index-include-context nil "*Non-nil means, display the index definition context in the index buffer. -This flag may also be toggled from the index buffer with the `c' key." +This flag may also be toggled from the index buffer with the `c' key." :group 'reftex-index-support :type 'boolean) @@ -1447,7 +1445,7 @@ argument of a macro. Note that crossref viewing for citations, references (both ways) and index entries is hard-coded. This variable is only to configure additional structures for which crossreference -viewing can be useful. Each entry has the structure +viewing can be useful. Each entry has the structure \(MACRO-RE SEARCH-RE HIGHLIGHT). @@ -1468,7 +1466,7 @@ displayed, the echo area will display information about that cross reference. You can also set the variable to the symbol `window'. In this case a small temporary window is used for the display. -This feature can be turned on and off from the menu +This feature can be turned on and off from the menu \(Ref->Options)." :group 'reftex-viewing-cross-references :type '(choice (const :tag "off" nil) @@ -1514,7 +1512,7 @@ - If an element is the name of an environment variable, its content is used. - If an element starts with an exclamation mark, it is used as a command to retrieve the path. A typical command with the kpathsearch library would - be `!kpsewhich -show-path=.tex'. + be `!kpsewhich -show-path=.tex'. - Otherwise the element itself is interpreted as a path. Multiple directories can be separated by the system dependent `path-separator'. Directories ending in `//' or `!!' will be expanded recursively. @@ -1529,7 +1527,7 @@ - If an element is the name of an environment variable, its content is used. - If an element starts with an exclamation mark, it is used as a command to retrieve the path. A typical command with the kpathsearch library would - be `!kpsewhich -show-path=.bib'. + be `!kpsewhich -show-path=.bib'. - Otherwise the element itself is interpreted as a path. Multiple directories can be separated by the system dependent `path-separator'. Directories ending in `//' or `!!' will be expanded recursively. @@ -1574,7 +1572,7 @@ TEXINPUTS and BIBINPUTS to find TeX files and BibTeX database files. With this option turned on, it calls an external program specified in the option `reftex-external-file-finders' instead. As a side effect, -the variables `reftex-texpath-environment-variables' and +the variables `reftex-texpath-environment-variables' and `reftex-bibpath-environment-variables' will be ignored." :group 'reftex-finding-files :type 'boolean) @@ -1665,7 +1663,7 @@ (defcustom reftex-save-parse-info nil "*Non-nil means, save information gathered with parsing in a file. The file MASTER.rel in the same directory as MASTER.tex is used to save the -information. When this variable is t, +information. When this variable is t, - accessing the parsing information for the first time in an editing session will read that file (if available) instead of parsing the document. - exiting Emacs or killing a buffer in reftex-mode will cause a new version @@ -1858,7 +1856,7 @@ may require a restart of Emacs in order to become effective." :group 'reftex-miscellaneous-configurations :group 'LaTeX - :type '(choice + :type '(choice (const :tag "No plug-ins" nil) (const :tag "All possible plug-ins" t) (list diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/reftex.el --- a/lisp/textmodes/reftex.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/reftex.el Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,9 @@ ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX - -;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, -;; 2005 Free Software Foundation, Inc. +;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Carsten Dominik <dominik@science.uva.nl> -;; Version: 4.28 +;; Version: VERSIONTAG ;; Keywords: tex ;; This file is part of GNU Emacs. @@ -27,7 +26,7 @@ ;;--------------------------------------------------------------------------- ;; ;;; Commentary: -;; +;; ;; RefTeX is a minor mode with distinct support for \ref, \label, \cite, ;; and \index commands in (multi-file) LaTeX documents. ;; - A table of contents provides easy access to any part of a document. @@ -72,7 +71,7 @@ ;; ;; Introduction ;; ************ -;; +;; ;; RefTeX is a specialized package for support of labels, references, ;; citations, and the index in LaTeX. RefTeX wraps itself round 4 LaTeX ;; macros: `\label', `\ref', `\cite', and `\index'. Using these macros @@ -81,13 +80,13 @@ ;; time-consuming tasks almost entirely. It also provides functions to ;; display the structure of a document and to move around in this ;; structure quickly. -;; +;; ;; *Note Imprint::, for information about who to contact for help, bug ;; reports or suggestions. -;; +;; ;; Environment ;; =========== -;; +;; ;; RefTeX needs to access all files which are part of a multifile ;; document, and the BibTeX database files requested by the ;; `\bibliography' command. To find these files, RefTeX will require a @@ -96,26 +95,26 @@ ;; which are also used by RefTeX. However, on some systems these ;; variables do not contain the full search path. If RefTeX does not work ;; for you because it cannot find some files, read *Note Finding Files::. -;; +;; ;; Entering RefTeX Mode ;; ==================== -;; +;; ;; To turn RefTeX Mode on and off in a particular buffer, use `M-x ;; reftex-mode'. To turn on RefTeX Mode for all LaTeX files, add the ;; following lines to your `.emacs' file: -;; +;; ;; (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode ;; (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode -;; +;; ;; RefTeX in a Nutshell ;; ==================== -;; +;; ;; 1. Table of Contents ;; Typing `C-c =' (`reftex-toc') will show a table of contents of the ;; document. This buffer can display sections, labels and index ;; entries defined in the document. From the buffer, you can jump ;; quickly to every part of your document. Press `?' to get help. -;; +;; ;; 2. Labels and References ;; RefTeX helps to create unique labels and to find the correct key ;; for references quickly. It distinguishes labels for different @@ -123,7 +122,7 @@ ;; others), and can be configured to recognize any additional labeled ;; environments you have defined yourself (variable ;; `reftex-label-alist'). -;; +;; ;; * Creating Labels ;; Type `C-c (' (`reftex-label') to insert a label at point. ;; RefTeX will either @@ -132,17 +131,17 @@ ;; tables) or ;; - insert a simple label made of a prefix and a number (all ;; other environments) -;; +;; ;; Which labels are created how is configurable with the variable ;; `reftex-insert-label-flags'. -;; +;; ;; * Referencing Labels ;; To make a reference, type `C-c )' (`reftex-reference'). This ;; shows an outline of the document with all labels of a certain ;; type (figure, equation,...) and some label context. ;; Selecting a label inserts a `\ref{LABEL}' macro into the ;; original buffer. -;; +;; ;; 3. Citations ;; Typing `C-c [' (`reftex-citation') will let you specify a regular ;; expression to search in current BibTeX database files (as @@ -151,7 +150,7 @@ ;; sorted. The selected article is referenced as `\cite{KEY}' (see ;; the variable `reftex-cite-format' if you want to insert different ;; macros). -;; +;; ;; 4. Index Support ;; RefTeX helps to enter index entries. It also compiles all entries ;; into an alphabetically sorted `*Index*' buffer which you can use @@ -159,25 +158,25 @@ ;; index macros and can be configured to recognize any additional ;; macros you have defined (`reftex-index-macros'). Multiple indices ;; are supported. -;; +;; ;; * Creating Index Entries ;; To index the current selection or the word at point, type ;; `C-c /' (`reftex-index-selection-or-word'). The default macro ;; `reftex-index-default-macro' will be used. For a more ;; complex entry type `C-c <' (`reftex-index'), select any of ;; the index macros and enter the arguments with completion. -;; +;; ;; * The Index Phrases File (Delayed Indexing) ;; Type `C-c \' (`reftex-index-phrase-selection-or-word') to add ;; the current word or selection to a special _index phrase ;; file_. RefTeX can later search the document for occurrences ;; of these phrases and let you interactively index the matches. -;; +;; ;; * Displaying and Editing the Index ;; To display the compiled index in a special buffer, type `C-c ;; >' (`reftex-display-index'). From that buffer you can check ;; and edit all entries. -;; +;; ;; 5. Viewing Cross-References ;; When point is on the KEY argument of a cross-referencing macro ;; (`\label', `\ref', `\cite', `\bibitem', `\index', and variations) @@ -187,14 +186,14 @@ ;; When the enclosing macro is `\cite' or `\ref' and no other message ;; occupies the echo area, information about the citation or label ;; will automatically be displayed in the echo area. -;; +;; ;; 6. Multifile Documents ;; Multifile Documents are fully supported. The included files must ;; have a file variable `TeX-master' or `tex-main-file' pointing to ;; the master file. RefTeX provides cross-referencing information ;; from all parts of the document, and across document borders ;; (`xr.sty'). -;; +;; ;; 7. Document Parsing ;; RefTeX needs to parse the document in order to find labels and ;; other information. It does it automatically once and updates its @@ -203,23 +202,23 @@ ;; with a raw `C-u' prefix, or press the `r' key in the label ;; selection buffer, the table of contents buffer, or the index ;; buffer. -;; +;; ;; 8. AUCTeX ;; If your major LaTeX mode is AUCTeX, RefTeX can cooperate with it ;; (see variable `reftex-plug-into-AUCTeX'). AUCTeX contains style ;; files which trigger appropriate settings in RefTeX, so that for ;; many of the popular LaTeX packages no additional customizations ;; will be necessary. -;; +;; ;; 9. Useful Settings ;; To make RefTeX faster for large documents, try these: ;; (setq reftex-enable-partial-scans t) ;; (setq reftex-save-parse-info t) ;; (setq reftex-use-multiple-selection-buffers t) -;; +;; ;; To integrate with AUCTeX, use ;; (setq reftex-plug-into-AUCTeX t) -;; +;; ;; To make your own LaTeX macro definitions known to RefTeX, ;; customize the variables ;; `reftex-label-alist' (for label macros/environments) @@ -229,7 +228,7 @@ ;; `reftex-index-default-macro' (to set the default macro) ;; If you have a large number of macros defined, you may want to write ;; an AUCTeX style file to support them with both AUCTeX and RefTeX. -;; +;; ;; 10. Where Next? ;; Go ahead and use RefTeX. Use its menus until you have picked up ;; the key bindings. For an overview of what you can do in each of @@ -238,7 +237,7 @@ ;; The first part of the manual explains in a tutorial way how to use ;; and customize RefTeX. The second part is a command and variable ;; reference. -;; +;; ;;--------------------------------------------------------------------------- ;; ;; AUTHOR @@ -289,8 +288,6 @@ (setq reftex-tables-dirty t) (set symbol value))) -(defvar font-lock-keywords) - ;;; ========================================================================= ;;; @@ -304,7 +301,7 @@ ;;; Define the formal stuff for a minor mode named RefTeX. ;;; -(defconst reftex-version "RefTeX version 4.28" +(defconst reftex-version "RefTeX version VERSIONTAG" "Version string for RefTeX.") (defvar reftex-mode nil @@ -322,7 +319,7 @@ (setq reftex-syntax-table (copy-syntax-table)) (modify-syntax-entry ?\( "." reftex-syntax-table) (modify-syntax-entry ?\) "." reftex-syntax-table)) - + (unless reftex-syntax-table-for-bib (setq reftex-syntax-table-for-bib (copy-syntax-table reftex-syntax-table)) @@ -398,7 +395,7 @@ (setq reftex-syntax-table (copy-syntax-table (syntax-table))) (modify-syntax-entry ?\( "." reftex-syntax-table) (modify-syntax-entry ?\) "." reftex-syntax-table) - + (setq reftex-syntax-table-for-bib (copy-syntax-table reftex-syntax-table)) (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) @@ -457,6 +454,7 @@ (defvar tex-main-file) (defvar outline-minor-mode) (defvar font-lock-mode) + (defvar font-lock-keywords) (defvar font-lock-fontify-region-function) (defvar font-lock-syntactic-keywords)) @@ -539,7 +537,7 @@ ((master (cond ((fboundp 'TeX-master-file) ; AUCTeX is loaded. Use its mechanism. - (condition-case nil + (condition-case nil (TeX-master-file t) (error (buffer-file-name)))) ((fboundp 'tex-main-file) (tex-main-file)) ; Emacs LaTeX mode @@ -579,7 +577,7 @@ ) (t ;; Use buffer file name. - (buffer-file-name))) + (setq master (buffer-file-name)))) (expand-file-name master))) (defun reftex-is-multi () @@ -740,14 +738,14 @@ ;; A list of all variables in the cache. ;; The cache is used to save the compiled versions of some variables. -(defconst reftex-cache-variables +(defconst reftex-cache-variables '(reftex-memory ;; This MUST ALWAYS be the first! - + ;; Outline reftex-section-levels-all ;; Labels - reftex-env-or-mac-alist + reftex-env-or-mac-alist reftex-special-env-parsers reftex-macros-with-labels reftex-label-mac-list @@ -764,7 +762,7 @@ reftex-index-macro-alist reftex-macros-with-index reftex-query-index-macro-prompt - reftex-query-index-macro-help + reftex-query-index-macro-help reftex-key-to-index-macro-alist ;; Regular expressions @@ -809,7 +807,7 @@ (t (reftex-compile-variables))))) (defun reftex-reset-mode () - "Reset RefTeX Mode. + "Reset RefTeX Mode. This will re-compile the configuration information and remove all current scanning information and the parse file to enforce a rescan on next use." @@ -860,12 +858,12 @@ (defun reftex-erase-all-selection-and-index-buffers () ;; Remove all selection buffers associated with current document. - (mapcar + (mapcar (lambda (type) (reftex-erase-buffer (reftex-make-selection-buffer-name type))) reftex-typekey-list) ;; Kill all index buffers - (mapcar + (mapcar (lambda (tag) (reftex-kill-buffer (reftex-make-index-buffer-name tag))) (cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol))))) @@ -881,7 +879,7 @@ ;; Record that we have done this, and what we have used. (setq reftex-tables-dirty nil) - (setq reftex-memory + (setq reftex-memory (list reftex-label-alist (get reftex-docstruct-symbol 'reftex-section-levels) (get reftex-docstruct-symbol 'reftex-label-alist-style) @@ -900,7 +898,7 @@ '(nil))) (all-index (reftex-uniquify-by-car (reftex-splice-symbols-into-list - (append reftex-index-macros + (append reftex-index-macros (get reftex-docstruct-symbol 'reftex-index-macros-style) '(default)) @@ -911,7 +909,7 @@ macro verify repeat nindex tag key toc-level toc-levels) (setq reftex-words-to-typekey-alist nil - reftex-prefix-to-typekey-alist + reftex-prefix-to-typekey-alist '(("sec:" . "s") ("cha:" . "s") ("chap:" . "s")) reftex-typekey-list nil reftex-typekey-to-format-alist nil @@ -967,7 +965,7 @@ ((symbolp env-or-mac) ;; A special parser function (unless (fboundp env-or-mac) - (message "Warning: %s does not seem to be a valid function" + (message "Warning: %s does not seem to be a valid function" env-or-mac)) (setq nargs nil nlabel nil opt-args nil) (add-to-list 'reftex-special-env-parsers env-or-mac) @@ -995,8 +993,8 @@ (push (cons string toc-level) toc-levels)))))))) ;; Translate some special context cases (when (assq context reftex-default-context-regexps) - (setq context - (format + (setq context + (format (cdr (assq context reftex-default-context-regexps)) (regexp-quote env-or-mac)))) ;; See if this is the first format for this typekey @@ -1029,7 +1027,7 @@ (nreverse reftex-typekey-to-prefix-alist)) ;; Prepare the typekey query prompt and help string. - (setq qh-list + (setq qh-list (sort qh-list (lambda (x1 x2) (string< (downcase (car x1)) (downcase (car x2)))))) @@ -1040,7 +1038,7 @@ "]")) ;; In the help string, we need to wrap lines... (setq reftex-type-query-help - (concat + (concat "SELECT A LABEL TYPE:\n--------------------\n" (mapconcat (lambda(x) @@ -1060,7 +1058,7 @@ ;; which allow for some chars from the ref format to be in the buffer. ;; These characters will be seen and removed. (setq reftex-words-to-typekey-alist - (mapcar + (mapcar (lambda (x) (setq word (car x) typekey (cdr x) @@ -1113,18 +1111,18 @@ (setq reftex-key-to-index-macro-alist (sort reftex-key-to-index-macro-alist (lambda (a b) (< (downcase (car a)) (downcase (car b)))))) - (setq reftex-query-index-macro-prompt + (setq reftex-query-index-macro-prompt (concat "Index macro: [" (mapconcat (lambda (x) (char-to-string (car x))) reftex-key-to-index-macro-alist "") "]")) (setq i 0 reftex-query-index-macro-help - (concat + (concat "SELECT A MACRO:\n---------------\n" (mapconcat (lambda(x) - (format "[%c] %-20.20s%s" (car x) (nth 1 x) + (format "[%c] %-20.20s%s" (car x) (nth 1 x) (if (= 0 (mod (incf i) 3)) "\n" ""))) reftex-key-to-index-macro-alist ""))) @@ -1138,11 +1136,11 @@ (let* ( ; (wbol "\\(\\`\\|[\n\r]\\)[ \t]*") (wbol "\\(^\\)[ \t]*") ; Need to keep the empty group because - ;;; because match number are hard coded + ;;; because match number are hard coded (label-re "\\\\label{\\([^}]*\\)}") - (include-re (concat wbol + (include-re (concat wbol "\\\\\\(" - (mapconcat 'identity + (mapconcat 'identity reftex-include-file-commands "\\|") "\\)[{ \t]+\\([^} \t\n\r]+\\)")) (section-re @@ -1196,7 +1194,7 @@ reftex-macros-with-labels macros-with-labels reftex-find-index-entry-regexp-format find-index-re-format reftex-find-label-regexp-format find-label-re-format - reftex-find-label-regexp-format2 + reftex-find-label-regexp-format2 "\\([]} \t\n\r]\\)\\([[{]\\)\\(%s\\)[]}]") (message "Compiling label environment definitions...done"))) (put reftex-docstruct-symbol 'reftex-cache @@ -1273,7 +1271,7 @@ (and (symbolp reftex-docstruct-symbol) (symbol-value reftex-docstruct-symbol) t)) - + (defun reftex-silence-toc-markers (list n) ;; Set all toc markers in the first N entries in list to nil (while (and list (> (decf n) -1)) @@ -1290,7 +1288,7 @@ (master (reftex-TeX-master-file)) (enable-local-variables nil) (file (if (string-match "\\.[a-zA-Z]+\\'" master) - (concat (substring master 0 (match-beginning 0)) + (concat (substring master 0 (match-beginning 0)) reftex-parse-file-extension) (concat master reftex-parse-file-extension)))) (cond @@ -1369,7 +1367,7 @@ ;; Check if the master is the same: when moving a document, this will see it. (let* ((real-master (reftex-TeX-master-file)) - (parsed-master + (parsed-master (nth 1 (assq 'bof (symbol-value reftex-docstruct-symbol))))) (unless (string= (file-truename real-master) (file-truename parsed-master)) (message "Master file name in load file is different: %s versus %s" @@ -1389,7 +1387,7 @@ (defun reftex-select-external-document (xr-alist xr-index) ;; Return index of an external document. (let* ((len (length xr-alist)) (highest (1- (+ ?0 len))) - (prompt (format "[%c-%c] Select TAB: Read prefix with completion" + (prompt (format "[%c-%c] Select TAB: Read prefix with completion" ?0 highest)) key prefix) (cond @@ -1400,7 +1398,7 @@ (- 1 xr-index)) (t (save-excursion - (let* ((length (apply 'max (mapcar + (let* ((length (apply 'max (mapcar (lambda(x) (length (car x))) xr-alist))) (fmt (format " [%%c] %%-%ds %%s\n" length)) (n (1- ?0))) @@ -1410,7 +1408,7 @@ (concat "SELECT EXTERNAL DOCUMENT\n------------------------\n" (mapconcat - (lambda (x) + (lambda (x) (format fmt (incf n) (or (car x) "") (abbreviate-file-name (cdr x)))) xr-alist "")) @@ -1434,7 +1432,7 @@ (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t))) (extensions (cdr (assoc type reftex-file-extensions))) (def-ext (car extensions)) - (ext-re (concat "\\(" + (ext-re (concat "\\(" (mapconcat 'regexp-quote extensions "\\|") "\\)\\'")) (files (if (string-match ext-re file) @@ -1443,8 +1441,8 @@ path old-path file1) (cond ((file-name-absolute-p file) - (setq file1 - (or + (setq file1 + (or (and (car files) (file-regular-p (car files)) (car files)) (and (cdr files) (file-regular-p (cdr files)) (cdr files))))) ((and reftex-use-external-file-finders @@ -1459,10 +1457,10 @@ (setq old-path path path (cons master-dir path) file1 (or (and (car files) - (reftex-find-file-on-path + (reftex-find-file-on-path (car files) path master-dir)) (and (cdr files) - (reftex-find-file-on-path + (reftex-find-file-on-path (cdr files) path master-dir)))))))) (cond (file1 file1) (die (error "No such file: %s" file) nil) @@ -1507,7 +1505,7 @@ (reftex-uniquify (reftex-parse-colon-path (mapconcat - (lambda(x) + (lambda(x) (if (string-match "^!" x) (apply 'reftex-process-string (split-string (substring x 1))) @@ -1516,7 +1514,7 @@ ;; (cdr (assoc type reftex-path-environment)) ;; However, historically we have separate options for the ;; environment variables, so we have to do this: - (symbol-value (intern (concat "reftex-" type + (symbol-value (intern (concat "reftex-" type "path-environment-variables"))) path-separator)))) (put pathvar 'status 'split) @@ -1542,11 +1540,11 @@ ;; or: Relative recursive path elements need to be expanded ;; relative to new default directory (message "Expanding search path to find %s file: %s ..." type file) - (put pathvar 'recursive-path + (put pathvar 'recursive-path (reftex-expand-path (symbol-value pathvar) master-dir)) (put pathvar 'master-dir master-dir) (get pathvar 'recursive-path)) - (t + (t ;; Recursive path computed earlier is still OK. (get pathvar 'recursive-path))) ;; The simple path was requested @@ -1575,7 +1573,7 @@ ;; Trailing ! or !! will be converted into `//' (emTeX convention) (mapcar (lambda (dir) - (if (string-match "\\(//+\\|/*!+\\)\\'" dir) + (if (string-match "\\(//+\\|/*!+\\)\\'" dir) (setq dir (replace-match "//" t t dir))) (file-name-as-directory dir)) (delete "" (split-string path (concat path-separator "+"))))) @@ -1604,7 +1602,7 @@ (when (file-directory-p dir) (setq files (nreverse (directory-files dir t "[^.]"))) (while (setq file (pop files)) - (if (file-directory-p file) + (if (file-directory-p file) (push (file-name-as-directory file) path))) (push dir path1))) path1)) @@ -1667,7 +1665,7 @@ "Show the table of contents for the current document." t) (autoload 'reftex-toc-recenter "reftex-toc" "Display the TOC window and highlight line corresponding to current position." t) -(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" +(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" "Toggle automatic recentering of TOC window." t) ;;; ========================================================================= @@ -1886,7 +1884,7 @@ (while list (if (funcall predicate (car list)) (push (if completion - (list (nth nth (car list))) + (list (nth nth (car list))) (nth nth (car list))) rtn)) (setq list (cdr list))) @@ -1922,7 +1920,7 @@ ;; If POS is given, calculate distances relative to it. ;; Return nil if there is no match. (let ((pos (point)) - (dist (or max-length (length regexp))) + (dist (or max-length (length regexp))) match1 match2 match) (goto-char (min (+ pos dist) (point-max))) (when (re-search-backward regexp nil t) @@ -2008,10 +2006,10 @@ ((and scroll (equal char ?\C-? )) (condition-case nil (scroll-down) (error nil)) (message prompt)) - (t (message "") + (t (message "") (throw 'exit char))) (setq char (read-char-exclusive))))))) - + (defun reftex-make-regexp-allow-for-ctrl-m (string) ;; convert STRING into a regexp, allowing ^M for \n and vice versa @@ -2209,10 +2207,10 @@ ;; Restrict number of words (if (> (length words) nwords) (setcdr (nthcdr (1- nwords) words) nil)) - + ;; First, try to use all words (setq string (mapconcat 'identity words sep)) - + ;; Abbreviate words if enforced by user settings or string length (if (or (eq t abbrev) (and abbrev @@ -2304,7 +2302,7 @@ (font-lock-set-defaults-1) (reftex-select-font-lock-fontify-region (point-min) (point-max)))) (t - ;; Oops? + ;; Oops? (message "Sorry: cannot refontify RefTeX Select buffer.")))) (rename-buffer oldname)))) @@ -2353,7 +2351,7 @@ ;; Initialize the overlays (aset reftex-highlight-overlays 0 (reftex-make-overlay 1 1)) -(reftex-overlay-put (aref reftex-highlight-overlays 0) +(reftex-overlay-put (aref reftex-highlight-overlays 0) 'face 'highlight) (aset reftex-highlight-overlays 1 (reftex-make-overlay 1 1)) (reftex-overlay-put (aref reftex-highlight-overlays 1) @@ -2378,7 +2376,7 @@ ;;; ========================================================================= ;;; -;;; Keybindings +;;; Keybindings ;; The default bindings in the mode map. (loop for x in @@ -2398,10 +2396,10 @@ ;; Bind `reftex-mouse-view-crossref' only when the key is still free (if (featurep 'xemacs) (unless (key-binding [(shift button2)]) - (define-key reftex-mode-map [(shift button2)] + (define-key reftex-mode-map [(shift button2)] 'reftex-mouse-view-crossref)) (unless (key-binding [(shift mouse-2)]) - (define-key reftex-mode-map [(shift mouse-2)] + (define-key reftex-mode-map [(shift mouse-2)] 'reftex-mouse-view-crossref))) ;; Bind `reftex-view-crossref-from-bibtex' in BibTeX mode map @@ -2505,7 +2503,7 @@ ("Reference Style" ["Default" (setq reftex-vref-is-default nil reftex-fref-is-default nil) - :style radio :selected (not (or reftex-vref-is-default + :style radio :selected (not (or reftex-vref-is-default reftex-fref-is-default))] ["Varioref" (setq reftex-vref-is-default t reftex-fref-is-default nil) @@ -2540,7 +2538,7 @@ (list 'reftex-add-index-macros (list 'list (list 'quote (car x)))) :style 'radio :selected (list 'memq (list 'quote (car x)) - (list 'get 'reftex-docstruct-symbol + (list 'get 'reftex-docstruct-symbol (list 'quote 'reftex-index-macros-style))))) reftex-index-macros-builtin)) "--" @@ -2549,7 +2547,7 @@ ("Customize" ["Browse RefTeX Group" reftex-customize t] "--" - ["Build Full Customize Menu" reftex-create-customize-menu + ["Build Full Customize Menu" reftex-create-customize-menu (fboundp 'customize-menu-create)]) ("Documentation" ["Info" reftex-info t] @@ -2565,7 +2563,7 @@ (interactive) (if (fboundp 'customize-menu-create) (progn - (easy-menu-change + (easy-menu-change '("Ref") "Customize" `(["Browse RefTeX group" reftex-customize t] "--" @@ -2603,7 +2601,7 @@ ;;; That's it! ---------------------------------------------------------------- (setq reftex-tables-dirty t) ; in case this file is evaluated by hand -(provide 'reftex) +(provide 'reftex) ;;;============================================================================ diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/tex-mode.el --- a/lisp/textmodes/tex-mode.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/tex-mode.el Sun Oct 09 20:00:17 2005 +0000 @@ -472,7 +472,7 @@ (arg "{\\(\\(?:[^{}\\]+\\|\\\\.\\|{[^}]*}\\)+\\)")) (list ;; font-lock-syntactic-keywords causes the \ of \end{verbatim} to be - ;; highlighted as tex-verbatim-face. Let's undo that. + ;; highlighted as tex-verbatim face. Let's undo that. ;; This is ugly and brittle :-( --Stef '("^\\(\\\\\\)end" (1 (get-text-property (match-end 1) 'face) t)) ;; display $$ math $$ @@ -509,7 +509,7 @@ (defun tex-font-lock-append-prop (prop) (unless (memq (get-text-property (match-end 1) 'face) - '(font-lock-comment-face tex-verbatim-face)) + '(font-lock-comment-face tex-verbatim)) prop)) (defconst tex-font-lock-keywords-2 @@ -583,7 +583,7 @@ (defun tex-font-lock-suscript (pos) (unless (or (memq (get-text-property pos 'face) '(font-lock-constant-face font-lock-builtin-face - font-lock-comment-face tex-verbatim-face)) + font-lock-comment-face tex-verbatim)) ;; Check for backslash quoting (let ((odd nil) (pos pos)) @@ -631,7 +631,10 @@ (,(concat "^\\(\\\\\\)end *{" verbs "}\\(.?\\)") (1 "|") (3 "<")) ;; ("^\\(\\\\\\)begin *{comment}" 1 "< b") ;; ("^\\\\end *{comment}.*\\(\n\\)" 1 "> b") - ("\\\\verb\\**\\([^a-z@*]\\)" 1 "\"")))) + ("\\\\verb\\**\\([^a-z@*]\\)" + ;; Do it last, because it uses syntax-ppss which needs the + ;; syntax-table properties of previous entries. + 1 (tex-font-lock-verb (match-end 1)))))) (defun tex-font-lock-unfontify-region (beg end) (font-lock-default-unfontify-region beg end) @@ -670,22 +673,38 @@ (put 'tex-verbatim-face 'face-alias 'tex-verbatim) (defvar tex-verbatim-face 'tex-verbatim) +(defun tex-font-lock-verb (end) + "Place syntax-table properties on the \verb construct. +END is the position of the first delimiter after \verb." + (unless (nth 8 (syntax-ppss end)) + ;; Do nothing if the \verb construct is itself inside a comment or + ;; verbatim env. + (save-excursion + ;; Let's find the end and mark it. + ;; We used to do it inside tex-font-lock-syntactic-face-function, but + ;; this leads to funny effects when jumping to the end of the buffer, + ;; because font-lock applies font-lock-syntactic-keywords to the whole + ;; preceding text but font-lock-syntactic-face-function only to the + ;; actually displayed text. + (goto-char end) + (let ((char (char-before))) + (skip-chars-forward (string ?^ char)) ;; Use `end' ? + (when (eq (char-syntax (preceding-char)) ?/) + (put-text-property (1- (point)) (point) 'syntax-table '(1))) + (unless (eobp) + (put-text-property (point) (1+ (point)) 'syntax-table '(7)) + ;; Cause the rest of the buffer to be re-fontified. + ;; (remove-text-properties (1+ (point)) (point-max) '(fontified)) + ))) + "\"")) + ;; Use string syntax but math face for $...$. (defun tex-font-lock-syntactic-face-function (state) (let ((char (nth 3 state))) (cond ((not char) font-lock-comment-face) ((eq char ?$) tex-math-face) - (t - (when (char-valid-p char) - ;; This is a \verb?...? construct. Let's find the end and mark it. - (save-excursion - (skip-chars-forward (string ?^ char)) ;; Use `end' ? - (when (eq (char-syntax (preceding-char)) ?/) - (put-text-property (1- (point)) (point) 'syntax-table '(1))) - (unless (eobp) - (put-text-property (point) (1+ (point)) 'syntax-table '(7))))) - tex-verbatim-face)))) + (t tex-verbatim-face)))) (defun tex-define-common-keys (keymap) @@ -1109,7 +1128,7 @@ inserts \" characters." (interactive "*P") (if (or arg (memq (char-syntax (preceding-char)) '(?/ ?\\)) - (eq (get-text-property (point) 'face) tex-verbatim-face) + (eq (get-text-property (point) 'face) 'tex-verbatim) (save-excursion (backward-char (length tex-open-quote)) (when (or (looking-at (regexp-quote tex-open-quote)) @@ -2341,7 +2360,7 @@ (defun latex-indent (&optional arg) (if (and (eq (get-text-property (line-beginning-position) 'face) - tex-verbatim-face)) + 'tex-verbatim)) 'noindent (with-syntax-table tex-latex-indent-syntax-table ;; TODO: Rather than ignore $, we should try to be more clever about it. diff -r 7a3090aca393 -r 2a679c81f552 lisp/textmodes/tildify.el --- a/lisp/textmodes/tildify.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/textmodes/tildify.el Sun Oct 09 20:00:17 2005 +0000 @@ -222,11 +222,11 @@ (if (> (point) (marker-position marker-end)) (setq finish t)) (message - (format "End of environment not found: %s" end-env)) + "End of environment not found: %s" end-env) (setq finish t)))))) ;; No ignored environments, tildify directly (tildify-tildify beg end ask))) - (message (format "%d spaces replaced." tildify-count))) + (message "%d spaces replaced." tildify-count)) ;;;###autoload (defun tildify-buffer () diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/alias.pbm Binary file lisp/toolbar/alias.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/alias.xpm --- a/lisp/toolbar/alias.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* XPM */ -static char * alias_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 4 1", -" c None", -". c #61b761b7600a", -"X c #a5d8a5d89550", -"o c black", -/* pixels */ -" ", -" ", -" ", -" ...... ", -" ...XXXX..XX ", -" o..ooooooo... ", -" ooo oooo..X ", -" o.X ooo... ", -" o.X ooo.XX ", -" o.X oo.. ", -" o.X oo. ", -" o... oo.. ", -" o.X o.. ", -" o.XX oX. ", -" o.... oo. ", -" o..XX oooo ", -" o...XXX XXoooo ", -" ooo........ooooo ", -" oooooXXooooo.oo ", -" ooo o..oo", -" o...", -" ooo", -" oo", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/execute.pbm Binary file lisp/toolbar/execute.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/execute.xpm --- a/lisp/toolbar/execute.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* XPM */ -static char * mail_exec_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 6 1", -" c None", -". c black", -"X c #a5d8a5d89550", -"o c #d305d305bc3c", -"O c #ea03ea03d271", -"+ c white", -/* pixels */ -" ", -" ", -" ", -" .. ", -" XX .. ", -" oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX .. ", -" OO oo XX ", -" OO oo ", -" OO + .. ", -" XX .. ", -" oo XX ", -" OO oo ", -" OO ", -" ", -" ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/highlight.pbm Binary file lisp/toolbar/highlight.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/highlight.xpm --- a/lisp/toolbar/highlight.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* XPM */ -static char * highlight_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 4 1", -" c None", -". c black", -"X c #828282827474", -"o c #dd00df007e00", -/* pixels */ -" ..... ", -" ..XXX.. ", -" .XXXXX. ", -" .XXXXX.. ", -" .XXXXX. ", -" .XXXXX. ", -" .XXXXX. ", -" .ooXX. ", -" ..ooo. ", -" oooo .... ", -"oo.ooo....oo ... ", -"o.o.ooo.oo.o.ooo.o ", -".ooo.oo.oo.o.ooooo ", -".ooo.oo.oo.o.ooooo ", -".ooo.oo...oo.ooooo ", -".....oo.oo.o.ooooo ", -".ooo.oo.oo.o.ooooo ", -".ooo.oo.oo.o.ooo.o ", -". oo.o....ooo...o ", -" oo oooo ", -" ", -" ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/mh-logo.xpm --- a/lisp/toolbar/mh-logo.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -/* XPM */ -static char *mh-e[] = { -/* width height num_colors chars_per_pixel */ -" 18 13 2 1", -/* colors */ -"# c #666699", -". c None s None", -/* pixels */ -"........##........", -".......####.......", -"......######......", -"......######......", -"....#########.....", -"..##############..", -".##...######....#.", -"##...#.#.####...#.", -"....#..#.##.#...#.", -"...#..##.#.#.#....", -"...#..#..#..#.#...", -"...#..#.##..#.##..", -"...#..#.#..#....#." -}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/page-down.pbm Binary file lisp/toolbar/page-down.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/page-down.xpm --- a/lisp/toolbar/page-down.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* XPM */ -static char * mail_page_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 5 1", -" c None", -". c black", -"X c #ea03ea03d271", -"o c #a5d8a5d89550", -"O c #d305d305bc3c", -/* pixels */ -" ", -" ", -" .................. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XoooooooooooooXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .Xoooooooooo..oXX. ", -" .XXXXXXXXXXX..XXX. ", -" .XXXXXXXXXXX..XXX. ", -" .XooooooXXXX..XXX. ", -" .XXXXXXXXXXX..XXX. ", -" .XXXXXXXXX.O..O.X. ", -" .Xoooooooo.....XX. ", -" .XXXXXXXXXX....XX. ", -" .XXXXXXXXXXX..XXX. ", -" .XXXXXXXXXXXooXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .................. ", -" ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/refile.pbm Binary file lisp/toolbar/refile.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/refile.xpm --- a/lisp/toolbar/refile.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* XPM */ -static char * refile_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 7 1", -" c None", -". c black", -"X c #a5d8a5d89550", -"o c #d305d305bc3c", -"O c #ea03ea03d271", -"+ c #828282827474", -"@ c #61b761b7600a", -/* pixels */ -" . ", -" ..X. ", -" ..XoO.... ", -" ..XooooO.+. ", -" ..XooooooOX.. .. ", -" .@@ooooooOOO@. ... ", -" .O@oooooOOOOO..@@. ", -" .OO@oooOOOOOO..@@. ", -" ...OO@XooOOOOO...@@. ", -" ..+.O@XooOOOO..@@@@@. ", -" .++..XooOOOO..@@@@@@. ", -" .++.@oooOO...@@@@@@@. ", -" ..+.XooOOO..@@@@@@@. ", -" .++.OOOO.@@@@@@@@. ", -" .+.oOO..@@@@@@@. ", -" .++.OO.@@@@@@@. ", -" .++.O.@@@@@.. ", -" ..+.O.@@@@@. ", -" .++..@@@@. ", -" ..++.@@@. ", -" .+.@@. ", -" ...@. ", -" ... ", -" . "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/repack.pbm Binary file lisp/toolbar/repack.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/repack.xpm --- a/lisp/toolbar/repack.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* XPM */ -static char * mail_repack_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 6 1", -" c None", -". c black", -"X c #a5d8a5d89550", -"o c #d305d305bc3c", -"O c #ea03ea03d271", -"+ c #828282827474", -/* pixels */ -" ", -" ", -" .............. ", -" .XXXXXXXXXXXX.. ", -" .XXXXXXXXXXXX.X. ", -" .XXXXXXXXXXXX.oo. ", -" ..............ooo. ", -" .OOOOOOOOOOOO.oo. ", -" .O++++++++++O.oo. ", -" .O+XXXXXXXX+O.o. ", -" .+XXXXXXXX+.o.. ", -" .+XX...XXX+.... ", -" ....o.......oo. ", -" ....o.....Oooo. ", -" .OOO...OOOO.oooo. ", -" .++++++++++.oooo. ", -" .+XXXXXXXX+.oooo. ", -" .O+XXXXXXXX+O.ooX. ", -" .O+XXXXXXXX+O.oo.. ", -" .O++++++++++O.o.. ", -" ..OOOOOOOOOOOO... ", -" ................ ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-all.pbm Binary file lisp/toolbar/reply-all.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-all.xpm --- a/lisp/toolbar/reply-all.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* XPM */ -static char * reply_all_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 9 1", -" c None", -". c black", -"X c #673e666663d4", -"o c #eb46ea1de471", -"O c #a852a7bea3d2", -"+ c #ae51c17b9b26", -"@ c #8d4d97577838", -"# c #7c7c8b8b6e6e", -"$ c #5e0868be52d3", -/* pixels */ -" ", -" ", -" .... ", -" .....XooO. ", -" .....XOooooooO. ", -" .XOooooooooooXOO. ", -" .oXXooooooooOXOo. ", -" .OoOXXooooooXOoo. ", -" .oooOOXOooXXXooO. ", -" ........XXOoOXOo. ", -" ..++++@.ooooooXO. ", -" ..+@@@.oooooooXO. ", -" ..+@@@#.oooooooO.. ", -" ..++@@@#$.ooooO... ", -" .++++@@#.$ .. ", -" .+@@@#.o .. .O .O ", -" .+@#$. .O. .O .O ", -" .#$. .O .o .O .O ", -" .$. . .O .O .O ", -" . ....O .O .O ", -" .O .O .O .O ", -" .O .O .O .O ", -" .O .O .O .O ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-from.pbm Binary file lisp/toolbar/reply-from.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-from.xpm --- a/lisp/toolbar/reply-from.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* XPM */ -static char * reply_from_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 9 1", -" c None", -". c black", -"X c #673e666663d4", -"o c #eb46ea1de471", -"O c #a852a7bea3d2", -"+ c #ae51c17b9b26", -"@ c #8d4d97577838", -"# c #7c7c8b8b6e6e", -"$ c #5e0868be52d3", -/* pixels */ -" ", -" ", -" .... ", -" .....XooO. ", -" .....XOooooooO. ", -" .XOooooooooooXOO. ", -" .oXXooooooooOXOo. ", -" .OoOXXooooooXOoo. ", -" .oooOOXOooXXXooO. ", -" ........XXOoOXOo. ", -" ..++++@.ooooooXO. ", -" ..+@@@.oooooooXO. ", -" ..+@@@#.oooooooO.. ", -" ..++@@@#$.ooooO... ", -" #.$.oO... ", -" ...O . .... ", -" ...O ", -" .O ", -" ...O ..O .... .O O. ", -" ...O ..O .OO. ..... ", -" .O .O . . . . . ", -" .O .O .OO. . . . ", -" .O .O .... . O . ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-to.pbm Binary file lisp/toolbar/reply-to.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/reply-to.xpm --- a/lisp/toolbar/reply-to.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* XPM */ -static char * reply_to_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 9 1", -" c None", -". c black", -"X c #673e666663d4", -"o c #eb46ea1de471", -"O c #a852a7bea3d2", -"+ c #ae51c17b9b26", -"@ c #8d4d97577838", -"# c #7c7c8b8b6e6e", -"$ c #5e0868be52d3", -/* pixels */ -" ", -" ", -" .... ", -" .....XooO. ", -" .....XOooooooO. ", -" .XOooooooooooXOO. ", -" .oXXooooooooOXOo. ", -" .OoOXXooooooXOoo. ", -" .oooOOXOooXXXooO. ", -" ........XXOoOXOo. ", -" ..++++@.ooooooXO. ", -" ..+@@@.oooooooXO. ", -" ..+@@@#.oooooooO.. ", -" ..++@@@#$.ooooO... ", -" .++++@@#.$ ", -" .+@@@#.o ...... ", -" .+@#$. OO.OOO ", -" .#$. .O ", -" .$. .O .... ", -" . .O .OO. ", -" .O . . ", -" .O .OO. ", -" .O .... ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/rescan.pbm Binary file lisp/toolbar/rescan.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/rescan.xpm --- a/lisp/toolbar/rescan.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* XPM */ -static char * mail_rescan_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 6 1", -" c None", -". c black", -"X c #a5d8a5d89550", -"o c #d305d305bc3c", -"O c #ea03ea03d271", -"+ c #828282827474", -/* pixels */ -" ", -" ", -" .............. ", -" .XXXXXXXXXXXX.. ", -" .XXXXXXXXXXXX.X. ", -" .XXXXXXXXXXXX.oo. ", -" ..............ooo. ", -" .OOOOOOOOOOOO.ooo. ", -" .O++++++++++O.ooo. ", -" .O+XXXXXXXX+O.ooo. ", -" .O+XXXXXXXX+O.ooo. ", -" .O+XXXXXXXX+O.ooo. ", -" .O+XXXXXXXX+O.ooo. ", -" .O++++++++++O.ooo. ", -" .OOOOOOOOOOOO.ooo. ", -" .O++++++++++O.ooo. ", -" .O+XXXXXXXX+O.ooo. ", -" .O+XXXXXXXX+O.ooX. ", -" .O+XXXXXXXX+O.oo.. ", -" .O++++++++++O.o.. ", -" ..OOOOOOOOOOOO... ", -" ................ ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/show.pbm Binary file lisp/toolbar/show.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/show.xpm --- a/lisp/toolbar/show.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* XPM */ -static char * mail_show_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 4 1", -" c None", -". c black", -"X c #ea03ea03d271", -"o c #a5d8a5d89550", -/* pixels */ -" ", -" ", -" .................. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XoooooooooooooXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XoooooooooooooXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XooooooXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XoooooooooXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .XXXXXXXXXXXXXXXX. ", -" .................. ", -" ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/widen.pbm Binary file lisp/toolbar/widen.pbm has changed diff -r 7a3090aca393 -r 2a679c81f552 lisp/toolbar/widen.xpm --- a/lisp/toolbar/widen.xpm Mon Sep 19 21:25:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* XPM */ -static char * widen_xpm[] = { -/* columns rows colors chars-per-pixel */ -"24 24 3 1", -" c None", -". c #8d4d97577838", -"X c black", -/* pixels */ -" ", -" ", -" ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . XX XX . ", -" . XX XX . ", -" . XX XX . ", -" .XXXXXXXX XXXXXXXX. ", -" .XXXXXXXX XXXXXXXX. ", -" . XX XX . ", -" . XX XX . ", -" . XX XX . ", -" . . ", -" . . ", -" . . ", -" . . ", -" . . ", -" ", -" ", -" "}; diff -r 7a3090aca393 -r 2a679c81f552 lisp/tooltip.el --- a/lisp/tooltip.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/tooltip.el Sun Oct 09 20:00:17 2005 +0000 @@ -113,7 +113,8 @@ (t :inherit variable-pitch)) "Face for tooltips." - :group 'tooltip) + :group 'tooltip + :group 'basic-faces) (defcustom tooltip-use-echo-area nil "Use the echo area instead of tooltip frames for help and GUD tooltips." diff -r 7a3090aca393 -r 2a679c81f552 lisp/tree-widget.el --- a/lisp/tree-widget.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/tree-widget.el Sun Oct 09 20:00:17 2005 +0000 @@ -131,14 +131,29 @@ :type 'boolean :group 'tree-widget) +(defvar tree-widget-themes-load-path + '(load-path + (let ((dir (if (fboundp 'locate-data-directory) + (locate-data-directory "tree-widget") ;; XEmacs + data-directory))) + (and dir (list dir (expand-file-name "images" dir)))) + ) + "List of locations where to search for the themes sub-directory. +Each element is an expression that will be evaluated to return a +single directory or a list of directories to search. + +The default is to search in the `load-path' first, then in the +\"images\" sub directory in the data directory, then in the data +directory. +The data directory is the value of the variable `data-directory' on +Emacs, and what `(locate-data-directory \"tree-widget\")' returns on +XEmacs.") + (defcustom tree-widget-themes-directory "tree-widget" "*Name of the directory where to look up for image themes. When nil use the directory where the tree-widget library is located. When a relative name is specified, try to locate that sub directory in -`load-path', then in the data directory, and use the first one found. -The data directory is the value of the variable `data-directory' on -Emacs, and what `(locate-data-directory \"tree-widget\")' returns on -XEmacs. +the locations specified in `tree-widget-themes-load-path'. The default is to use the \"tree-widget\" relative name." :type '(choice (const :tag "Default" "tree-widget") (const :tag "With the library" nil) @@ -236,7 +251,7 @@ (apply 'create-image `(,file ,type nil ,@props))) (defsubst tree-widget-image-formats () "Return the alist of image formats/file name extensions. -See also the option `widget-image-file-name-suffixes'." +See also the option `widget-image-conversion'." (delq nil (mapcar #'(lambda (fmt) @@ -264,47 +279,54 @@ (make-vector 4 nil)) (aset tree-widget--theme 0 name))) +(defun tree-widget--locate-sub-directory (name path) + "Locate the sub-directory NAME in PATH. +Return the absolute name of the directory found, or nil if not found." + (let (dir elt) + (while (and (not dir) (consp path)) + (setq elt (condition-case nil (eval (car path)) (error nil)) + path (cdr path)) + (cond + ((stringp elt) + (setq dir (expand-file-name name elt)) + (or (file-accessible-directory-p dir) + (setq dir nil))) + ((and elt (not (equal elt (car path)))) + (setq dir (tree-widget--locate-sub-directory name elt))))) + dir)) + (defun tree-widget-themes-directory () "Locate the directory where to search for a theme. It is defined in variable `tree-widget-themes-directory'. Return the absolute name of the directory found, or nil if the specified directory is not accessible." (let ((found (aref tree-widget--theme 1))) - (if found - ;; The directory is available in the cache. - (unless (eq found 'void) found) - (cond - ;; Use the directory where tree-widget is located. - ((null tree-widget-themes-directory) - (setq found (locate-library "tree-widget")) - (when found - (setq found (file-name-directory found)) - (or (file-accessible-directory-p found) - (setq found nil)))) - ;; Check accessibility of absolute directory name. - ((file-name-absolute-p tree-widget-themes-directory) - (setq found (expand-file-name tree-widget-themes-directory)) + (cond + ;; The directory was not found. + ((eq found 'void) + (setq found nil)) + ;; The directory is available in the cache. + (found) + ;; Use the directory where this library is located. + ((null tree-widget-themes-directory) + (setq found (locate-library "tree-widget")) + (when found + (setq found (file-name-directory found)) (or (file-accessible-directory-p found) - (setq found nil))) - ;; Locate a sub-directory in `load-path' and data directory. - (t - (let ((path - (append load-path - (list (if (fboundp 'locate-data-directory) - ;; XEmacs - (locate-data-directory "tree-widget") - ;; Emacs - data-directory))))) - (while (and path (not found)) - (when (car path) - (setq found (expand-file-name - tree-widget-themes-directory (car path))) - (or (file-accessible-directory-p found) - (setq found nil))) - (setq path (cdr path)))))) - ;; Store the result in the cache for later use. - (aset tree-widget--theme 1 (or found 'void)) - found))) + (setq found nil)))) + ;; Check accessibility of absolute directory name. + ((file-name-absolute-p tree-widget-themes-directory) + (setq found (expand-file-name tree-widget-themes-directory)) + (or (file-accessible-directory-p found) + (setq found nil))) + ;; Locate a sub-directory in `tree-widget-themes-load-path'. + (t + (setq found (tree-widget--locate-sub-directory + tree-widget-themes-directory + tree-widget-themes-load-path)))) + ;; Store the result in the cache for later use. + (aset tree-widget--theme 1 (or found 'void)) + found)) (defsubst tree-widget-set-image-properties (props) "In current theme, set images properties to PROPS." @@ -351,9 +373,9 @@ plist)) (defconst tree-widget--cursors - ;; Pointer shapes when the mouse pointer is over tree-widget images. - ;; This feature works since Emacs 22, and ignored on older versions, - ;; and XEmacs. + ;; Pointer shapes when the mouse pointer is over inactive + ;; tree-widget images. This feature works since Emacs 22, and + ;; ignored on older versions, and XEmacs. '( ("guide" . arrow) ("no-guide" . arrow) @@ -647,14 +669,17 @@ (when (and (not args) xpandr) (setq args (mapcar 'widget-convert (funcall xpandr tree))) (widget-put tree :args args)) + ;; Defer the node widget creation after icon creation. + (widget-put tree :node (widget-convert node)) ;; Create the icon widget for the expanded tree. (push (widget-create-child-and-convert tree (widget-get tree (if args :open-icon :empty-icon)) - ;; At this point the node widget isn't yet created. - :node (setq node (widget-convert node))) + ;; Pass the node widget to child. + :node (widget-get tree :node)) buttons) ;; Create the tree node widget. - (push (widget-create-child tree node) children) + (push (widget-create-child tree (widget-get tree :node)) + children) ;; Update the icon :node with the created node widget. (widget-put (car buttons) :node (car children)) ;; Create the tree children. @@ -696,14 +721,17 @@ ;; Update the icon :node with the created node widget. (widget-put (car buttons) :node (car children))))) ;;;; Collapsed node. + ;; Defer the node widget creation after icon creation. + (widget-put tree :node (widget-convert node)) ;; Create the icon widget for the collapsed tree. (push (widget-create-child-and-convert tree (widget-get tree :close-icon) - ;; At this point the node widget isn't yet created. - :node (setq node (widget-convert node))) + ;; Pass the node widget to child. + :node (widget-get tree :node)) buttons) ;; Create the tree node widget. - (push (widget-create-child tree node) children) + (push (widget-create-child tree (widget-get tree :node)) + children) ;; Update the icon :node with the created node widget. (widget-put (car buttons) :node (car children))) ;; Save widget children and buttons. The tree-widget :node child diff -r 7a3090aca393 -r 2a679c81f552 lisp/url/ChangeLog --- a/lisp/url/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/url/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,15 @@ +2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca> + + * url-http.el (url-http-create-request): Avoid incorrect implicit + unibyte->multibyte conversion. + +2005-09-17 Richard M. Stallman <rms@gnu.org> + + * url-vars.el (url-mail-command): Don't test fboundp of `compose-mail'. + + * url-mailto.el (url-mailto): Special case `mail'. + Don't test fboundp of `compose-mail'. + 2005-09-15 Chong Yidong <cyd@stupidchicken.com> * url-mailto.el (url-mailto): Delete mail buffer after sending diff -r 7a3090aca393 -r 2a679c81f552 lisp/url/url-http.el --- a/lisp/url/url-http.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/url/url-http.el Sun Oct 09 20:00:17 2005 +0000 @@ -194,79 +194,92 @@ (setq extra-headers (concat extra-headers "\r\n"))) ;; This was done with a call to `format'. Concatting parts has - ;; the advantage of keeping the parts of each header togther and + ;; the advantage of keeping the parts of each header together and ;; allows us to elide null lines directly, at the cost of making ;; the layout less clear. (setq request - (concat - ;; The request - (or url-request-method "GET") " " - (if proxy-obj (url-recreate-url proxy-obj) real-fname) - " HTTP/" url-http-version "\r\n" - ;; Version of MIME we speak - "MIME-Version: 1.0\r\n" - ;; (maybe) Try to keep the connection open - "Connection: " (if (or proxy-obj - (not url-http-attempt-keepalives)) - "close" "keep-alive") "\r\n" - ;; HTTP extensions we support - (if url-extensions-header - (format - "Extension: %s\r\n" url-extensions-header)) - ;; Who we want to talk to - (if (/= (url-port (or proxy-obj url)) - (url-scheme-get-property - (url-type (or proxy-obj url)) 'default-port)) - (format - "Host: %s:%d\r\n" host (url-port (or proxy-obj url))) - (format "Host: %s\r\n" host)) - ;; Who its from - (if url-personal-mail-address - (concat - "From: " url-personal-mail-address "\r\n")) - ;; Encodings we understand - (if url-mime-encoding-string - (concat - "Accept-encoding: " url-mime-encoding-string "\r\n")) - (if url-mime-charset-string - (concat - "Accept-charset: " url-mime-charset-string "\r\n")) - ;; Languages we understand - (if url-mime-language-string - (concat - "Accept-language: " url-mime-language-string "\r\n")) - ;; Types we understand - "Accept: " (or url-mime-accept-string "*/*") "\r\n" - ;; User agent - (url-http-user-agent-string) - ;; Proxy Authorization - proxy-auth - ;; Authorization - auth - ;; Cookies - (url-cookie-generate-header-lines host real-fname - (equal "https" (url-type url))) - ;; If-modified-since - (if (and (not no-cache) - (member url-request-method '("GET" nil))) - (let ((tm (url-is-cached (or proxy-obj url)))) - (if tm - (concat "If-modified-since: " - (url-get-normalized-date tm) "\r\n")))) - ;; Whence we came - (if ref-url (concat - "Referer: " ref-url "\r\n")) - extra-headers - ;; Length of data - (if url-request-data - (concat - "Content-length: " (number-to-string - (length url-request-data)) - "\r\n")) - ;; End request - "\r\n" - ;; Any data - url-request-data)) + ;; We used to concat directly, but if one of the strings happens + ;; to being multibyte (even if it only contains pure ASCII) then + ;; every string gets converted with `string-MAKE-multibyte' which + ;; turns the 127-255 codes into things like latin-1 accented chars + ;; (it would work right if it used `string-TO-multibyte' instead). + ;; So to avoid the problem we force every string to be unibyte. + (mapconcat + ;; FIXME: Instead of `string-AS-unibyte' we'd want + ;; `string-to-unibyte', so as to properly signal an error if one + ;; of the strings contains a multibyte char. + 'string-as-unibyte + (delq nil + (list + ;; The request + (or url-request-method "GET") " " + (if proxy-obj (url-recreate-url proxy-obj) real-fname) + " HTTP/" url-http-version "\r\n" + ;; Version of MIME we speak + "MIME-Version: 1.0\r\n" + ;; (maybe) Try to keep the connection open + "Connection: " (if (or proxy-obj + (not url-http-attempt-keepalives)) + "close" "keep-alive") "\r\n" + ;; HTTP extensions we support + (if url-extensions-header + (format + "Extension: %s\r\n" url-extensions-header)) + ;; Who we want to talk to + (if (/= (url-port (or proxy-obj url)) + (url-scheme-get-property + (url-type (or proxy-obj url)) 'default-port)) + (format + "Host: %s:%d\r\n" host (url-port (or proxy-obj url))) + (format "Host: %s\r\n" host)) + ;; Who its from + (if url-personal-mail-address + (concat + "From: " url-personal-mail-address "\r\n")) + ;; Encodings we understand + (if url-mime-encoding-string + (concat + "Accept-encoding: " url-mime-encoding-string "\r\n")) + (if url-mime-charset-string + (concat + "Accept-charset: " url-mime-charset-string "\r\n")) + ;; Languages we understand + (if url-mime-language-string + (concat + "Accept-language: " url-mime-language-string "\r\n")) + ;; Types we understand + "Accept: " (or url-mime-accept-string "*/*") "\r\n" + ;; User agent + (url-http-user-agent-string) + ;; Proxy Authorization + proxy-auth + ;; Authorization + auth + ;; Cookies + (url-cookie-generate-header-lines host real-fname + (equal "https" (url-type url))) + ;; If-modified-since + (if (and (not no-cache) + (member url-request-method '("GET" nil))) + (let ((tm (url-is-cached (or proxy-obj url)))) + (if tm + (concat "If-modified-since: " + (url-get-normalized-date tm) "\r\n")))) + ;; Whence we came + (if ref-url (concat + "Referer: " ref-url "\r\n")) + extra-headers + ;; Length of data + (if url-request-data + (concat + "Content-length: " (number-to-string + (length url-request-data)) + "\r\n")) + ;; End request + "\r\n" + ;; Any data + url-request-data)) + "")) (url-http-debug "Request is: \n%s" request) request)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/url/url-mailto.el --- a/lisp/url/url-mailto.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/url/url-mailto.el Sun Oct 09 20:00:17 2005 +0000 @@ -92,11 +92,11 @@ (setq args (cons (list "to" to) args)))) (setq subject (cdr-safe (assoc "subject" args))) - (if (fboundp url-mail-command) - (if (eq url-mail-command 'compose-mail) - (compose-mail nil nil nil 'new) - (funcall url-mail-command)) - (mail 'new)) + (if (eq url-mail-command 'compose-mail) + (compose-mail nil nil nil 'new) + (if (eq url-mail-command 'mail) + (mail 'new) + (funcall url-mail-command))) (while args (if (string= (caar args) "body") (progn diff -r 7a3090aca393 -r 2a679c81f552 lisp/url/url-vars.el --- a/lisp/url/url-vars.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/url/url-vars.el Sun Oct 09 20:00:17 2005 +0000 @@ -174,9 +174,7 @@ (string :tag "Encoding"))) :group 'url-mime) -(defcustom url-mail-command (if (fboundp 'compose-mail) - 'compose-mail - 'url-mail) +(defcustom url-mail-command 'compose-mail "*This function will be called whenever url needs to send mail. It should enter a mail-mode-like buffer in the current window. The commands `mail-to' and `mail-subject' should still work in this diff -r 7a3090aca393 -r 2a679c81f552 lisp/vc-mcvs.el --- a/lisp/vc-mcvs.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/vc-mcvs.el Sun Oct 09 20:00:17 2005 +0000 @@ -225,7 +225,7 @@ ;; Make sure the `mcvs add' will not fire up the CVSEDITOR ;; to add a rule for the given file's extension. (when (and ext (not (assoc ext types))) - (let ((type (completing-read "Type to use [default]: " + (let ((type (completing-read "Type to use (default): " '("default" "name-only" "keep-old" "binary" "value-only") nil t nil nil "default"))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/vc.el --- a/lisp/vc.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/vc.el Sun Oct 09 20:00:17 2005 +0000 @@ -1707,7 +1707,7 @@ (interactive (let ((file (expand-file-name (read-file-name (if buffer-file-name - "File or dir to diff: (default visited file) " + "File or dir to diff (default visited file): " "File or dir to diff: ") default-directory buffer-file-name t))) (rev1-default nil) (rev2-default nil)) @@ -1728,14 +1728,14 @@ ;; construct argument list (list file (read-string (if rev1-default - (concat "Older version: (default " - rev1-default ") ") + (concat "Older version (default " + rev1-default "): ") "Older version: ") nil nil rev1-default) (read-string (if rev2-default - (concat "Newer version: (default " - rev2-default ") ") - "Newer version (default: current source): ") + (concat "Newer version (default " + rev2-default "): ") + "Newer version (default current source): ") nil nil rev2-default)))) (if (file-directory-p file) ;; recursive directory diff @@ -1998,7 +1998,7 @@ (error "Merge aborted")))) (setq first-version (read-string (concat "Branch or version to merge from " - "(default: news on current branch): "))) + "(default news on current branch): "))) (if (string= first-version "") (if (not (vc-find-backend-function backend 'merge-news)) (error "Sorry, merging news is not implemented for %s" backend) @@ -2333,10 +2333,10 @@ (format "Updating %s... " (abbreviate-file-name dir)) (format "Retrieving snapshot into %s... " (abbreviate-file-name dir))))) - (message msg) + (message "%s" msg) (vc-call-backend (vc-responsible-backend dir) 'retrieve-snapshot dir name update) - (message (concat msg "done")))) + (message "%s" (concat msg "done")))) (defun vc-default-retrieve-snapshot (backend dir name update) (if (string= name "") @@ -2727,7 +2727,7 @@ (error "Deleting files under %s is not supported in VC" backend)) (if (and buf (buffer-modified-p buf)) (error "Please save files before deleting them")) - (unless (y-or-n-p (format "Really want to delete %s ? " + (unless (y-or-n-p (format "Really want to delete %s? " (file-name-nondirectory file))) (error "Abort!")) (unless (or (file-directory-p file) (null make-backup-files)) @@ -3080,7 +3080,7 @@ (bfn buffer-file-name) (vc-annotate-version (if prefix (read-string - (format "Annotate from version: (default %s) " rev) + (format "Annotate from version (default %s): " rev) nil nil rev) rev))) (if display-mode @@ -3088,7 +3088,7 @@ (if prefix (setq vc-annotate-display-mode (float (string-to-number - (read-string "Annotate span days: (default 20) " + (read-string "Annotate span days (default 20): " nil nil "20")))))) (setq temp-buffer-name (format "*Annotate %s (rev %s)*" (buffer-name) vc-annotate-version)) diff -r 7a3090aca393 -r 2a679c81f552 lisp/w32-fns.el --- a/lisp/w32-fns.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/w32-fns.el Sun Oct 09 20:00:17 2005 +0000 @@ -283,7 +283,7 @@ (interactive (list (let ((default locale-coding-system)) (read-coding-system - (format "Coding system for system calls (default, %s): " + (format "Coding system for system calls (default %s): " default) default)))) (check-coding-system coding-system) diff -r 7a3090aca393 -r 2a679c81f552 lisp/wdired.el --- a/lisp/wdired.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/wdired.el Sun Oct 09 20:00:17 2005 +0000 @@ -264,7 +264,7 @@ (set-buffer-modified-p nil) (setq buffer-undo-list nil) (run-mode-hooks 'wdired-mode-hook) - (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ + (message "%s" (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ or \\[wdired-abort-changes] to abort changes"))) diff -r 7a3090aca393 -r 2a679c81f552 lisp/wid-edit.el --- a/lisp/wid-edit.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/wid-edit.el Sun Oct 09 20:00:17 2005 +0000 @@ -2991,12 +2991,12 @@ "Perform completion on file name preceding point." (interactive) (let* ((end (point)) - (beg (save-excursion - (skip-chars-backward "^ ") - (point))) + (beg (widget-field-start widget)) (pattern (buffer-substring beg end)) (name-part (file-name-nondirectory pattern)) - (directory (file-name-directory pattern)) + ;; I think defaulting to root is right + ;; because these really should be absolute file names. + (directory (or (file-name-directory pattern) "/")) (completion (file-name-completion name-part directory))) (cond ((eq completion t)) ((null completion) @@ -3018,7 +3018,7 @@ (abbreviate-file-name (if unbound (read-file-name prompt) - (let ((prompt2 (format "%s (default %s) " prompt value)) + (let ((prompt2 (format "%s (default %s): " prompt value)) (dir (file-name-directory value)) (file (file-name-nondirectory value)) (must-match (widget-get widget :must-match))) @@ -3031,7 +3031,7 @@ ;;; (file (file-name-nondirectory value)) ;;; (menu-tag (widget-apply widget :menu-tag-get)) ;;; (must-match (widget-get widget :must-match)) -;;; (answer (read-file-name (concat menu-tag ": (default `" value "') ") +;;; (answer (read-file-name (concat menu-tag " (default " value "): ") ;;; dir nil must-match file))) ;;; (widget-value-set widget (abbreviate-file-name answer)) ;;; (widget-setup) @@ -3135,10 +3135,10 @@ "Read coding-system from minibuffer." (if (widget-get widget :base-only) (intern - (completing-read (format "%s (default %s) " prompt value) + (completing-read (format "%s (default %s): " prompt value) (mapcar #'list (coding-system-list t)) nil nil nil coding-system-history)) - (read-coding-system (format "%s (default %s) " prompt value) value))) + (read-coding-system (format "%s (default %s): " prompt value) value))) (defun widget-coding-system-action (widget &optional event) (let ((answer diff -r 7a3090aca393 -r 2a679c81f552 lisp/woman.el --- a/lisp/woman.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/woman.el Sun Oct 09 20:00:17 2005 +0000 @@ -1229,7 +1229,7 @@ word-at-point))) (completing-read (if default - (format "Manual entry [default: %s]: " default) + (format "Manual entry (default %s): " default) "Manual entry: ") woman-topic-all-completions nil 1 nil @@ -1926,7 +1926,7 @@ ;; Output the result: (and (apropos-print t nil) message - (message message)))) + (message "%s" message)))) (defun WoMan-getpage-in-background (topic) diff -r 7a3090aca393 -r 2a679c81f552 lisp/x-dnd.el --- a/lisp/x-dnd.el Mon Sep 19 21:25:51 2005 +0000 +++ b/lisp/x-dnd.el Sun Oct 09 20:00:17 2005 +0000 @@ -308,13 +308,17 @@ (action (aref state 5)) (w (posn-window (event-start event)))) (when handler - (if (and (windowp w) (window-live-p w)) - ;; If dropping in a window, open files in that window rather - ;; than in a new widow. - (let ((dnd-open-file-other-window nil)) + (if (and (windowp w) (window-live-p w) + (not (window-minibuffer-p w)) + (not (window-dedicated-p w))) + ;; If dropping in an ordinary window which we could use, + ;; let dnd-open-file-other-window specify what to do. + (progn (goto-char (posn-point (event-start event))) (funcall handler window action data)) - (let ((dnd-open-file-other-window t)) ;; Dropping on non-window. + ;; If we can't display the file here, + ;; make a new window for it. + (let ((dnd-open-file-other-window t)) (select-frame frame) (funcall handler window action data)))))) diff -r 7a3090aca393 -r 2a679c81f552 lispintro/.cvsignore --- a/lispintro/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/lispintro/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -18,3 +18,4 @@ *.tmp *.txt Makefile +makefile diff -r 7a3090aca393 -r 2a679c81f552 lispintro/ChangeLog --- a/lispintro/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lispintro/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,8 @@ +2005-09-16 Romain Francoise <romain@orebokech.com> + + * emacs-lisp-intro.texi (GNU Free Documentation License): + Specify GFDL version 1.2. + 2005-07-30 Eli Zaretskii <eliz@gnu.org> * makefile.w32-in (info): Don't run install-info. diff -r 7a3090aca393 -r 2a679c81f552 lispintro/emacs-lisp-intro.texi --- a/lispintro/emacs-lisp-intro.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispintro/emacs-lisp-intro.texi Sun Oct 09 20:00:17 2005 +0000 @@ -213,7 +213,7 @@ ISBN 1-882114-43-4 Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; there being no Invariant Section, with the Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of diff -r 7a3090aca393 -r 2a679c81f552 lispref/.cvsignore --- a/lispref/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -6,6 +6,7 @@ config.cache config.status Makefile +makefile index.texi elisp elisp-? diff -r 7a3090aca393 -r 2a679c81f552 lispref/ChangeLog --- a/lispref/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,44 @@ +2005-10-04 Kim F. Storm <storm@cua.dk> + + * windows.texi (Window Split Tree): New section describing + new function window-split-tree function. + +2005-10-03 Nick Roberts <nickrob@snap.net.nz> + + * display.texi (Fringe Size/Pos): Simplify and add detail. + +2005-09-30 Romain Francoise <romain@orebokech.com> + + * minibuf.texi (High-Level Completion): Explain that the prompt + given to `read-buffer' should end with a colon and a space. + Update usage examples. + +2005-09-29 Juri Linkov <juri@jurta.org> + + * display.texi (Displaying Messages): Rename argument name + `string' to `format-string' in functions `message', `message-box', + `message-or-box'. + +2005-09-26 Chong Yidong <cyd@stupidchicken.com> + + * errors.texi (Standard Errors): Corrected xrefs. + +2005-09-18 Chong Yidong <cyd@stupidchicken.com> + + * display.texi (Defining Images): Updated documentation for + `image-load-path'. + +2005-09-17 Richard M. Stallman <rms@gnu.org> + + * display.texi (Defining Images): Clean up previous change. + +2005-09-16 Romain Francoise <romain@orebokech.com> + + * elisp.texi: Specify GFDL version 1.2. + + * doclicense.texi (GNU Free Documentation License): Update to + version 1.2. + 2005-09-15 Chong Yidong <cyd@stupidchicken.com> * display.texi (Defining Images): Document `image-load-path'. diff -r 7a3090aca393 -r 2a679c81f552 lispref/display.texi --- a/lispref/display.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/display.texi Sun Oct 09 20:00:17 2005 +0000 @@ -208,9 +208,9 @@ This section describes the functions for explicitly producing echo area messages. Many other Emacs features display messages there, too. -@defun message string &rest arguments -This function displays a message in the echo area. The -argument @var{string} is similar to a C language @code{printf} control +@defun message format-string &rest arguments +This function displays a message in the echo area. The argument +@var{format-string} is similar to a C language @code{printf} format string. See @code{format} in @ref{Formatting Strings}, for the details on the conversion specifications. @code{message} returns the constructed string. @@ -218,14 +218,15 @@ In batch mode, @code{message} prints the message text on the standard error stream, followed by a newline. -If @var{string}, or strings among the @var{arguments}, have @code{face} -text properties, these affect the way the message is displayed. +If @var{format-string}, or strings among the @var{arguments}, have +@code{face} text properties, these affect the way the message is displayed. @c Emacs 19 feature -If @var{string} is @code{nil}, @code{message} clears the echo area; if -the echo area has been expanded automatically, this brings it back to -its normal size. If the minibuffer is active, this brings the -minibuffer contents back onto the screen immediately. +If @var{format-string} is @code{nil} or the empty string, +@code{message} clears the echo area; if the echo area has been +expanded automatically, this brings it back to its normal size. +If the minibuffer is active, this brings the minibuffer contents back +onto the screen immediately. @example @group @@ -254,7 +255,7 @@ the previous echo area contents. @end defmac -@defun message-or-box string &rest arguments +@defun message-or-box format-string &rest arguments This function displays a message like @code{message}, but may display it in a dialog box instead of the echo area. If this function is called in a command that was invoked using the mouse---more precisely, if @@ -268,7 +269,7 @@ @code{last-nonmenu-event} to a suitable value around the call. @end defun -@defun message-box string &rest arguments +@defun message-box format-string &rest arguments This function displays a message like @code{message}, but uses a dialog box (or a pop-up menu) whenever that is possible. If it is impossible to use a dialog box or pop-up menu, because the terminal does not @@ -2729,23 +2730,25 @@ @node Fringe Size/Pos @subsection Fringe Size and Position - Here's how to control the position and width of the window fringes. + The following buffer-local variables control the position and width +of the window fringes. @defvar fringes-outside-margins -If the value is non-@code{nil}, the frames appear outside the display -margins. The fringes normally appear between the display margins and -the window text. It works to set @code{fringes-outside-margins} -buffer-locally. @xref{Display Margins}. +The fringes normally appear between the display margins and the window +text. If the value is non-@code{nil}, they appear outside the display +margins. @xref{Display Margins}. @end defvar @defvar left-fringe-width This variable, if non-@code{nil}, specifies the width of the left -fringe in pixels. +fringe in pixels. A value of @code{nil} means to use the left fringe +width from the window's frame. @end defvar @defvar right-fringe-width This variable, if non-@code{nil}, specifies the width of the right -fringe in pixels. +fringe in pixels. A value of @code{nil} means to use the right fringe +width from the window's frame. @end defvar The values of these variables take effect when you display the @@ -3952,20 +3955,22 @@ @defvar image-load-path @tindex image-load-path This variable's value is a list of locations in which to search for -image files. If an element is a string, it is taken to be the name of -a directory to search. If an element is a variable symbol, the value -of that variable is used as a list of directories to search. - -The default is to search in @file{@code{data-directory}/images}, then -in @code{data-directory}, and finally in the directories specified by +image files. If an element is a string or a variable symbol whose +value is a string, the string is taken to be the name of a directory +to search. If an element is a variable symbol whose value is a list, +that is taken to be a list of directory names to search. + +The default is to search in the @file{images} subdirectory of the +directory specified by @code{data-directory}, then the directory +specified by @code{data-directory}, and finally in the directories in @code{load-path}. Subdirectories are not automatically included in the search, so if you put an image file in a subdirectory, you have to -supply the subdirectory name explicitly. For example, if you put an -image file @file{bar.xpm} in @file{@code{data-directory}/images/foo/}, -you should define the image as: +supply the subdirectory name explicitly. For example, to find the +image @file{images/foo/bar.xpm} within @code{data-directory}, you +should specify the image as follows: @example - (defimage foo-image '((:type xpm :file "foo/bar.xpm"))) +(defimage foo-image '((:type xpm :file "foo/bar.xpm"))) @end example @end defvar diff -r 7a3090aca393 -r 2a679c81f552 lispref/doclicense.texi --- a/lispref/doclicense.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/doclicense.texi Sun Oct 09 20:00:17 2005 +0000 @@ -2,10 +2,10 @@ @node GNU Free Documentation License, GPL, Antinews, Top @appendix GNU Free Documentation License -@center Version 1.1, March 2000 +@center Version 1.2, November 2002 @display -Copyright (C) 2000 Free Software Foundation, Inc. +Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies @@ -17,12 +17,12 @@ PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document ``free'' in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document ``free'' in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It @@ -41,11 +41,15 @@ @item APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The ``Document'', below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as ``you''. +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with @@ -55,7 +59,7 @@ the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a +within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, @@ -64,33 +68,41 @@ The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not ``Transparent'' is called ``Opaque''. +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque.'' + Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple -HTML designed for human modification. Opaque formats include -PostScript, PDF, proprietary formats that can be read and edited only -by proprietary word processors, SGML or XML for which the DTD and/or +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the -machine-generated HTML produced by some word processors for output -purposes only. +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -98,6 +110,21 @@ formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. @sp 1 @item VERBATIM COPYING @@ -118,9 +145,10 @@ @item COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -138,16 +166,15 @@ If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give @@ -171,7 +198,8 @@ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five).@* + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement.@* C. State on the Title page the name of the publisher of the Modified Version, as the publisher.@* D. Preserve all the copyright notices of the Document.@* @@ -183,10 +211,10 @@ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.@* H. Include an unaltered copy of this License.@* -I. Preserve the section entitled ``History'', and its title, and add to - it an item stating at least the title, year, new authors, and +I. Preserve the section Entitled ``History'', Preserve its Title, and add + to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If - there is no section entitled ``History'' in the Document, create one + there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.@* @@ -197,17 +225,18 @@ You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.@* -K. In any section entitled ``Acknowledgements'' or ``Dedications'', - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements +K. For any section Entitled ``Acknowledgements'' or ``Dedications'', + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements and/or dedications given therein.@* L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.@* -M. Delete any section entitled ``Endorsements''. Such a section +M. Delete any section Entitled ``Endorsements.'' Such a section may not be included in the Modified Version.@* -N. Do not retitle any existing section as ``Endorsements'' +N. Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section.@* +O. Preserve any Warranty Disclaimers.@* @sp 1 If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material @@ -216,7 +245,7 @@ list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. -You may add a section entitled ``Endorsements'', provided it contains +You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a @@ -244,7 +273,7 @@ versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its -license notice. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -255,11 +284,11 @@ Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled ``History'' -in the various original documents, forming one section entitled -``History''; likewise combine any sections entitled ``Acknowledgements'', -and any sections entitled ``Dedications''. You must delete all sections -entitled ``Endorsements.'' +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications.'' You must delete all sections +Entitled ``Endorsements.'' @sp 1 @item COLLECTIONS OF DOCUMENTS @@ -280,18 +309,20 @@ A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an ``aggregate'', and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. @sp 1 @item TRANSLATION @@ -302,10 +333,17 @@ permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. @sp 1 @item TERMINATION @@ -346,21 +384,30 @@ @smallexample @group - - Copyright (C) @var{year} @var{your name}. - 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 the Invariant Sections being @var{list their titles}, with the - Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. +Copyright (C) @var{year} @var{your name}. +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 group @end smallexample -If you have no Invariant Sections, write ``with no Invariant Sections'' -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write ``no Front-Cover Texts'' instead of -``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with...Texts.'' line with this: + +@smallexample +@group +with the Invariant Sections being @var{list their titles}, with the +Front-Cover Texts being @var{list}, and with the Back-Cover Texts being +@var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of diff -r 7a3090aca393 -r 2a679c81f552 lispref/elisp.texi --- a/lispref/elisp.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/elisp.texi Sun Oct 09 20:00:17 2005 +0000 @@ -35,7 +35,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'', with the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover diff -r 7a3090aca393 -r 2a679c81f552 lispref/errors.texi --- a/lispref/errors.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/errors.texi Sun Oct 09 20:00:17 2005 +0000 @@ -41,15 +41,17 @@ @item args-out-of-range @code{"Args out of range"}@* -@xref{Sequences Arrays Vectors}. +This happens when trying to access an element beyond the range of a +sequence or buffer.@* +@xref{Sequences Arrays Vectors}, @xref{Text}. @item arith-error @code{"Arithmetic error"}@* -See @code{/} and @code{%} in @ref{Numbers}. +@xref{Arithmetic Operations}. @item beginning-of-buffer @code{"Beginning of buffer"}@* -@xref{Motion}. +@xref{Character Motion}. @item buffer-read-only @code{"Buffer is read-only"}@* @@ -57,7 +59,7 @@ @item coding-system-error @code{"Invalid coding system"}@* -@xref{Coding Systems}. +@xref{Lisp and Coding Systems}. @item cyclic-function-indirection @code{"Symbol's chain of function indirections\@* contains a loop"}@* @@ -69,7 +71,7 @@ @item end-of-buffer @code{"End of buffer"}@* -@xref{Motion}. +@xref{Character Motion}. @item end-of-file @code{"End of file during parsing"}@* @@ -111,11 +113,11 @@ @item invalid-function @code{"Invalid function"}@* -@xref{Classifying Lists}. +@xref{Function Indirection}. @item invalid-read-syntax @code{"Invalid read syntax"}@* -@xref{Input Functions}. +@xref{Printed Representation}. @item invalid-regexp @code{"Invalid regexp"}@* diff -r 7a3090aca393 -r 2a679c81f552 lispref/minibuf.texi --- a/lispref/minibuf.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/minibuf.texi Sun Oct 09 20:00:17 2005 +0000 @@ -1044,6 +1044,11 @@ it should be a string or a buffer. It is mentioned in the prompt, but is not inserted in the minibuffer as initial input. +The argument @var{prompt} should be a string ending with a colon and a +space. If @var{default} is non-@code{nil}, the function inserts it in +@var{prompt} before the colon to follow the convention for reading from +the minibuffer with a default value (@pxref{Programming Tips}). + If @var{existing} is non-@code{nil}, then the name specified must be that of an existing buffer. The usual commands to exit the minibuffer do not exit if the text is not valid, and @key{RET} does completion to @@ -1058,7 +1063,7 @@ @samp{minibuffer.texi}, so that name is the value. @example -(read-buffer "Buffer name? " "foo" t) +(read-buffer "Buffer name: " "foo" t) @group ;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears,} @@ -1067,7 +1072,7 @@ @group ---------- Buffer: Minibuffer ---------- -Buffer name? (default foo) @point{} +Buffer name (default foo): @point{} ---------- Buffer: Minibuffer ---------- @end group diff -r 7a3090aca393 -r 2a679c81f552 lispref/windows.texi --- a/lispref/windows.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/lispref/windows.texi Sun Oct 09 20:00:17 2005 +0000 @@ -30,6 +30,7 @@ * Size of Window:: Accessing the size of a window. * Resizing Windows:: Changing the size of a window. * Coordinates and Windows:: Converting coordinates to windows. +* Window Split Tree:: The layout and sizes of all windows in a frame. * Window Configurations:: Saving and restoring the state of the screen. * Window Hooks:: Hooks for scrolling, window size changes, redisplay going past a certain point, @@ -2167,6 +2168,32 @@ argument because it always uses the frame that @var{window} is on. @end defun +@node Window Split Tree +@section The Window Split Tree +@cindex window split tree + + A @dfn{window split tree} specifies the layout, size, and relationship +between all windows in one frame. + +@defun split-window-tree &optional frame +This function returns the window split tree for frame @var{frame}. +If @var{frame} is omitted, the selected frame is used. + +The return value is a list of the form @code{(@var{root} @var{mini})}, +where @var{root} represents the window split tree of the frame's +root window, and @var{mini} is the frame's minibuffer window. + +If the root window is not split, @var{root} is the root window itself. +Otherwise, @var{root} is a list @code{(@var{dir} @var{edges} @var{w1} +@var{w2} ...)} where @var{dir} is @code{nil} for a horisontal split, +and @code{t} for a vertical split, @var{edges} gives the combined size and +position of the subwindows in the split, and the rest of the elements +are the subwindows in the split. Each of the subwindows may again be +a window or a list representing a window split, and so on. The +@var{edges} element is a list @code{(@var{left}@var{ top}@var{ right}@var{ bottom})} +similar to the value returned by @code{window-edges}. +@end defun + @node Window Configurations @section Window Configurations @cindex window configurations diff -r 7a3090aca393 -r 2a679c81f552 lwlib/ChangeLog --- a/lwlib/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/lwlib/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,14 @@ +2005-09-27 Dan Nicolaescu <dann@ics.uci.edu> + + * xlwmenu.c (find_next_selectable): + (find_prev_selectable): Add missing parameter + declarations. + +2005-09-24 Dan Nicolaescu <dann@ics.uci.edu> + + * xlwmenu.c: Fix the return type for x_clear_errors and + x_uncatch_errors. + 2005-07-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> * lwlib-Xm.c (make_menu_in_widget): Disable drag and drop for diff -r 7a3090aca393 -r 2a679c81f552 lwlib/xlwmenu.c --- a/lwlib/xlwmenu.c Mon Sep 19 21:25:51 2005 +0000 +++ b/lwlib/xlwmenu.c Sun Oct 09 20:00:17 2005 +0000 @@ -59,9 +59,9 @@ unsigned long *, double, int)); extern int x_catch_errors __P ((Display*)); -extern int x_uncatch_errors __P ((Display*, int)); +extern void x_uncatch_errors P_ ((Display *, int)); extern int x_had_errors_p __P ((Display*)); -extern int x_clear_errors __P ((Display*)); +extern void x_clear_errors __P ((Display*)); extern unsigned long x_copy_dpy_color __P ((Display *, Colormap, unsigned long)); @@ -2138,6 +2138,7 @@ find_next_selectable (mw, item, skip_titles) XlwMenuWidget mw; widget_value *item; + int skip_titles; { widget_value *current = item; enum menu_separator separator; @@ -2174,6 +2175,7 @@ find_prev_selectable (mw, item, skip_titles) XlwMenuWidget mw; widget_value *item; + int skip_titles; { widget_value *current = item; widget_value *prev = item; diff -r 7a3090aca393 -r 2a679c81f552 mac/ChangeLog --- a/mac/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/mac/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,15 @@ +2005-09-24 Eli Zaretskii <eliz@gnu.org> + + * INSTALL (NOTES): Update the list of versions of MacOS on which + Emacs should build. + + * README: Remove a link to ftp://ftp.gnu.org/gnu/mac/emacs/ (which + does not exist). + +2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * inc/config.h: Sync with src/config.in. + 2005-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> * Emacs.app/Contents/Info.plist (mail-to, mail-selection): New diff -r 7a3090aca393 -r 2a679c81f552 mac/INSTALL --- a/mac/INSTALL Mon Sep 19 21:25:51 2005 +0000 +++ b/mac/INSTALL Sun Oct 09 20:00:17 2005 +0000 @@ -206,7 +206,7 @@ * NOTES -Emacs should build and run on a PowerMac running Mac OS 8.6 - 10.3. +Emacs should build and run on a PowerMac running Mac OS 8.6 - 10.4. You will need around 100 MB of disk space for the source files and intermediate files. diff -r 7a3090aca393 -r 2a679c81f552 mac/README --- a/mac/README Mon Sep 19 21:25:51 2005 +0000 +++ b/mac/README Sun Oct 09 20:00:17 2005 +0000 @@ -36,10 +36,6 @@ the Developer Tools. See the INSTALL file in this directory for instructions on building Emacs. -Binary distributions will be available in - - ftp://ftp.gnu.org/gnu/mac/emacs/ - Read the Mac OS section of the on-line help to find out about how to use Emacs on the Mac. diff -r 7a3090aca393 -r 2a679c81f552 mac/inc/config.h --- a/mac/inc/config.h Mon Sep 19 21:25:51 2005 +0000 +++ b/mac/inc/config.h Sun Oct 09 20:00:17 2005 +0000 @@ -46,11 +46,10 @@ /* Define to 1 if using `getloadavg.c'. */ /* #undef C_GETLOADAVG */ -/* Define C_SWITCH_X_SITE to contain any special flags your compiler - may need to deal with X Windows. For instance, if you've defined - HAVE_X_WINDOWS above and your X include files aren't in a place - that your compiler can find on its own, you might want to add - "-I/..." or something similar. */ +/* Define C_SWITCH_X_SITE to contain any special flags your compiler may need + to deal with X Windows. For instance, if you've defined HAVE_X_WINDOWS + above and your X include files aren't in a place that your compiler can + find on its own, you might want to add "-I/..." or something similar. */ /* #undef C_SWITCH_X_SITE */ /* Define to 1 for DGUX with <sys/dg_sys_info.h>. */ @@ -69,6 +68,10 @@ /* Define to the options passed to configure. */ #define EMACS_CONFIG_OPTIONS "" +/* Define to 1 if the `getloadavg' function needs to be run setuid or setgid. + */ +/* #undef GETLOADAVG_PRIVILEGED */ + /* Define to 1 if the `getpgrp' function requires zero arguments. */ /* #undef GETPGRP_VOID */ @@ -104,6 +107,9 @@ /* Define to 1 if you have the `bzero' function. */ /* #define HAVE_BZERO */ +/* Define to 1 if CancelMenuTracking is available (Mac OSX). */ +/* #undef HAVE_CANCELMENUTRACKING */ + /* Define to 1 if you are using the Carbon API on Mac OS X. */ /* #undef HAVE_CARBON */ @@ -196,6 +202,12 @@ /* Define to 1 if you have the `getloadavg' function. */ /* #undef HAVE_GETLOADAVG */ +/* Define to 1 if you have the <getopt.h> header file. */ +/* #undef HAVE_GETOPT_H */ + +/* Define to 1 if you have the `getopt_long_only' function. */ +/* #undef HAVE_GETOPT_LONG_ONLY */ + /* Define to 1 if you have the `getpagesize' function. */ /* #undef HAVE_GETPAGESIZE */ @@ -220,6 +232,9 @@ /* Define to 1 if you have the `getwd' function. */ #define HAVE_GETWD 1 +/* Define to 1 if you have the `get_current_dir_name' function. */ +/* #undef HAVE_GET_CURRENT_DIR_NAME */ + /* Define to 1 if you have the ungif library (-lungif). */ /* #undef HAVE_GIF */ @@ -509,7 +524,7 @@ /* #undef HAVE_SETSID */ /* Define to 1 if you have the `setsockopt' function. */ -/* #undefine HAVE_SETSOCKOPT */ +/* #undef HAVE_SETSOCKOPT */ /* Define to 1 if you have the `shutdown' function. */ /* #undef HAVE_SHUTDOWN */ @@ -586,7 +601,7 @@ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the <sys/resource.h> header file. */ -/* #undefine HAVE_SYS_RESOURCE_H */ +/* #undef HAVE_SYS_RESOURCE_H */ /* Define to 1 if you have the <sys/select.h> header file. */ /* #undef HAVE_SYS_SELECT_H */ @@ -863,6 +878,10 @@ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +/* #undef __GETOPT_PREFIX */ + /* Define like PROTOTYPES; this can be used by system headers. */ /* #undef __PROTOTYPES */ diff -r 7a3090aca393 -r 2a679c81f552 man/.cvsignore --- a/man/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/man/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -19,3 +19,4 @@ *.vr *.vrs Makefile +makefile diff -r 7a3090aca393 -r 2a679c81f552 man/ChangeLog --- a/man/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/man/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,111 @@ +2005-10-05 Nick Roberts <nickrob@snap.net.nz> + + * speedbar.texi (GDB): Describe use of watch expressions. + +2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * frames.texi (Drag and Drop): Remove the x- from + x-dnd-open-file-other-window and xdnd-protocol-alist. + +2005-09-30 Romain Francoise <romain@orebokech.com> + + * mini.texi (Minibuffer): The default value now appears before the + colon in minibuffer prompts. + +2005-09-28 Simon Josefsson <jas@extundo.com> + + * message.texi (IDNA): Fix. + +2005-09-28 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (NNTP): Remove nntp-buggy-select, nntp-read-timeout, + nntp-server-hook, and nntp-warn-about-losing-connection; fix + description of nntp-open-connection-function. + (Common Variables): Fix descriptions. + +2005-09-26 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Server Buffer Format): Document the %a format spec. + +2005-09-25 Richard M. Stallman <rms@gnu.org> + + * search.texi (Regexp Search): Doc search-whitespace-regexp. + +2005-09-22 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Mail): Fix gnus-confirm-mail-reply-to-news entry. + +2005-09-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change) + + * text.texi (Paragraphs): Correction about Paragraph-Indent Text mode. + +2005-09-23 Carsten Dominik <dominik@science.uva.nl> + + * org.texi Version 3.16 + +2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * emacs.texi (Top): Update submenus from macos.texi. + + * macos.texi: Change `Mac OS 8 or 9' to `Mac OS Classic'. + (Mac OS): Update feature support status. + (Mac Input): List supported input scripts. Remove description + about `mac-keyboard-text-encoding'. Mention mouse button + emulation and related variables. + (Mac International): Mention Central European and Cyrillic + support. Now `keyboard-coding-system' is dynamically changed. + Add description about coding system for selection. Add + description about language environment. + (Mac Environment Variables): Mention + `~/.MacOSX/environment.plist'. Give example of command line + arguments. Add Preferences support. + (Mac Directories): Explicitly state that this node is for Mac OS + Classic only. + (Mac Font Specs): Mention specification for scalable fonts. List + supported charsets. Add preferred way of creating fontsets. Add + description about `mac-allow-anti-aliasing'. + (Mac Functions): Add descriptions about `mac-set-file-creator', + `mac-get-file-creator', `mac-set-file-type', `mac-get-file-type', + and `mac-get-preference'. + +2005-09-19 Miles Bader <miles@gnu.org> + + * newsticker.texi: Get rid of CVS keywords. + +2005-09-15 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus.texi (Finding the Parent): Fix description of how Gnus + finds article. + +2005-09-14 Jari Aalto <jari.aalto@cante.net> + + * gnus.texi (Advanced Scoring Examples): New examples to teach how + to drop off non-answered articles. + +2005-09-19 Juanma Barranquero <lekktu@gmail.com> + + * makefile.w32-in (newsticker.dvi): Use parentheses instead of curly + braces (which are unsupported by NMAKE) for macro `srcdir'. + +2005-09-17 Eli Zaretskii <eliz@gnu.org> + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets. + (../info/newsticker, newsticker.dvi): New targets. + +2005-09-17 Ulf Jasper <ulf.jasper@web.de> + + * newsticker.texi: Replace @command with @code. Replace @example + with @lisp. + (Top): Added explanations to menu items. + (GNU Free Documentation License): Removed. + +2005-09-16 Romain Francoise <romain@orebokech.com> + + Update all files to specify GFDL version 1.2. + + * doclicense.texi (GNU Free Documentation License): Update to + version 1.2. + 2005-09-15 Richard M. Stallman <rms@gnu.org> * buffers.texi (List Buffers): Fix xref. @@ -2817,8 +2925,8 @@ 2004-02-29 Juanma Barranquero <lektu@terra.es> - * makefile.w32-in (mostlyclean, clean, maintainer-clean): Use - $(DEL) instead of rm, and ignore exit code. + * makefile.w32-in (mostlyclean, clean, maintainer-clean): + Use $(DEL) instead of rm, and ignore exit code. 2004-02-29 Kai Grossjohann <kgrossjo@eu.uu.net> diff -r 7a3090aca393 -r 2a679c81f552 man/ada-mode.texi --- a/man/ada-mode.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/ada-mode.texi Sun Oct 09 20:00:17 2005 +0000 @@ -13,7 +13,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU diff -r 7a3090aca393 -r 2a679c81f552 man/autotype.texi --- a/man/autotype.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/autotype.texi Sun Oct 09 20:00:17 2005 +0000 @@ -17,7 +17,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU diff -r 7a3090aca393 -r 2a679c81f552 man/calc.texi --- a/man/calc.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/calc.texi Sun Oct 09 20:00:17 2005 +0000 @@ -88,7 +88,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being just ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover diff -r 7a3090aca393 -r 2a679c81f552 man/cc-mode.texi --- a/man/cc-mode.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/cc-mode.texi Sun Oct 09 20:00:17 2005 +0000 @@ -71,7 +71,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU diff -r 7a3090aca393 -r 2a679c81f552 man/cl.texi --- a/man/cl.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/cl.texi Sun Oct 09 20:00:17 2005 +0000 @@ -9,7 +9,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/doclicense.texi --- a/man/doclicense.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/doclicense.texi Sun Oct 09 20:00:17 2005 +0000 @@ -1,10 +1,10 @@ @c -*-texinfo-*- @node GNU Free Documentation License, Emacs Invocation, Copying, Top @appendix GNU Free Documentation License -@center Version 1.1, March 2000 +@center Version 1.2, November 2002 @display -Copyright (C) 2000 Free Software Foundation, Inc. +Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies @@ -16,12 +16,12 @@ PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document ``free'' in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document ``free'' in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It @@ -40,11 +40,15 @@ @item APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The ``Document'', below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as ``you.'' +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with @@ -54,7 +58,7 @@ the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a +within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, @@ -63,33 +67,41 @@ The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not ``Transparent'' is called ``Opaque.'' +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque.'' + Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple -HTML designed for human modification. Opaque formats include -PostScript, PDF, proprietary formats that can be read and edited only -by proprietary word processors, SGML or XML for which the DTD and/or +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the -machine-generated HTML produced by some word processors for output -purposes only. +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -97,6 +109,21 @@ formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. @sp 1 @item VERBATIM COPYING @@ -117,9 +144,10 @@ @item COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -137,16 +165,15 @@ If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give @@ -170,7 +197,8 @@ B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five).@* + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement.@* C. State on the Title page the name of the publisher of the Modified Version, as the publisher.@* D. Preserve all the copyright notices of the Document.@* @@ -182,10 +210,10 @@ G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.@* H. Include an unaltered copy of this License.@* -I. Preserve the section entitled ``History'', and its title, and add to - it an item stating at least the title, year, new authors, and +I. Preserve the section Entitled ``History'', Preserve its Title, and add + to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If - there is no section entitled ``History'' in the Document, create one + there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.@* @@ -196,17 +224,18 @@ You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.@* -K. In any section entitled ``Acknowledgements'' or ``Dedications'', - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements +K. For any section Entitled ``Acknowledgements'' or ``Dedications'', + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements and/or dedications given therein.@* L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.@* -M. Delete any section entitled ``Endorsements.'' Such a section +M. Delete any section Entitled ``Endorsements.'' Such a section may not be included in the Modified Version.@* -N. Do not retitle any existing section as ``Endorsements'' +N. Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section.@* +O. Preserve any Warranty Disclaimers.@* @sp 1 If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material @@ -215,7 +244,7 @@ list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. -You may add a section entitled ``Endorsements'', provided it contains +You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a @@ -243,7 +272,7 @@ versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its -license notice. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -254,11 +283,11 @@ Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled ``History'' -in the various original documents, forming one section entitled -``History''; likewise combine any sections entitled ``Acknowledgements'', -and any sections entitled ``Dedications.'' You must delete all sections -entitled ``Endorsements.'' +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications.'' You must delete all sections +Entitled ``Endorsements.'' @sp 1 @item COLLECTIONS OF DOCUMENTS @@ -279,18 +308,20 @@ A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an ``aggregate'', and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. @sp 1 @item TRANSLATION @@ -301,10 +332,17 @@ permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. @sp 1 @item TERMINATION @@ -347,19 +385,28 @@ @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; -with the Invariant Sections being @var{list their titles}, with the -Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. -A copy of the license is included in the section entitled "GNU -Free Documentation License." +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 group @end smallexample -If you have no Invariant Sections, write ``with no Invariant Sections'' -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write ``no Front-Cover Texts'' instead of -``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with...Texts.'' line with this: + +@smallexample +@group +with the Invariant Sections being @var{list their titles}, with the +Front-Cover Texts being @var{list}, and with the Back-Cover Texts being +@var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of diff -r 7a3090aca393 -r 2a679c81f552 man/ebrowse.texi --- a/man/ebrowse.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/ebrowse.texi Sun Oct 09 20:00:17 2005 +0000 @@ -15,7 +15,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/ediff.texi --- a/man/ediff.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/ediff.texi Sun Oct 09 20:00:17 2005 +0000 @@ -30,7 +30,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/emacs-mime.texi --- a/man/emacs-mime.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/emacs-mime.texi Sun Oct 09 20:00:17 2005 +0000 @@ -14,7 +14,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/emacs-xtra.texi --- a/man/emacs-xtra.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/emacs-xtra.texi Sun Oct 09 20:00:17 2005 +0000 @@ -14,7 +14,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/emacs.texi --- a/man/emacs.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/emacs.texi Sun Oct 09 20:00:17 2005 +0000 @@ -16,7 +16,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU @@ -877,13 +877,13 @@ * LessTif Resources:: X resources for LessTif and Motif menus. * GTK resources:: Resources for GTK widgets. -Emacs and the Mac OS +Emacs and Mac OS -* Mac Input:: Keyboard input on the Mac. -* Mac International:: International character sets on the Mac. +* Mac Input:: Keyboard and mouse input on Mac. +* Mac International:: International character sets on Mac. * Mac Environment Variables:: Setting environment variables for Emacs. -* Mac Directories:: Volumes and directories on the Mac. -* Mac Font Specs:: Specifying fonts on the Mac. +* Mac Directories:: Volumes and directories on Mac. +* Mac Font Specs:: Specifying fonts on Mac. * Mac Functions:: Mac-specific Lisp functions. MS-DOS and Windows 95/98/NT diff -r 7a3090aca393 -r 2a679c81f552 man/eshell.texi --- a/man/eshell.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/eshell.texi Sun Oct 09 20:00:17 2005 +0000 @@ -13,7 +13,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/eudc.texi --- a/man/eudc.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/eudc.texi Sun Oct 09 20:00:17 2005 +0000 @@ -17,7 +17,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/flymake.texi --- a/man/flymake.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/flymake.texi Sun Oct 09 20:00:17 2005 +0000 @@ -15,7 +15,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the license diff -r 7a3090aca393 -r 2a679c81f552 man/forms.texi --- a/man/forms.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/forms.texi Sun Oct 09 20:00:17 2005 +0000 @@ -23,7 +23,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/frames.texi --- a/man/frames.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/frames.texi Sun Oct 09 20:00:17 2005 +0000 @@ -857,10 +857,10 @@ (according to the conventions of the application it came from) into the directory displayed in that buffer. -@vindex x-dnd-open-file-other-window +@vindex dnd-open-file-other-window Dropping a file normally visits it in the window you drop it on. If you prefer to visit the file in a new window in such cases, customize -the variable @code{x-dnd-open-file-other-window}. +the variable @code{dnd-open-file-other-window}. @ignore @c ??? To Lisp manual @@ -881,10 +881,10 @@ detailed knowledge of what types other applications use for drag and drop. -@vindex x-dnd-protocol-alist +@vindex dnd-protocol-alist When an URL is dropped on Emacs it may be a file, but it may also be another URL type (ftp, http, etc.). Emacs first checks -@code{x-dnd-protocol-alist} to determine what to do with the URL. If +@code{dnd-protocol-alist} to determine what to do with the URL. If there is no match there and if @code{browse-url-browser-function} is an alist, Emacs looks for a match there. If no match is found the text for the URL is inserted. If you want to alter Emacs behavior, diff -r 7a3090aca393 -r 2a679c81f552 man/gnu.texi --- a/man/gnu.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/gnu.texi Sun Oct 09 20:00:17 2005 +0000 @@ -10,7 +10,7 @@ 2005 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/gnus.texi --- a/man/gnus.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/gnus.texi Sun Oct 09 20:00:17 2005 +0000 @@ -12,7 +12,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the @@ -9624,17 +9624,16 @@ @kindex M-^ (Summary) @cindex Message-ID @cindex fetching by Message-ID -You can also ask the @acronym{NNTP} server for an arbitrary article, no -matter what group it belongs to. @kbd{M-^} -(@code{gnus-summary-refer-article}) will ask you for a -@code{Message-ID}, which is one of those long, hard-to-read thingies -that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You -have to get it all exactly right. No fuzzy searches, I'm afraid. -@end table - -The current select method will be used when fetching by -@code{Message-ID} from non-news select method, but you can override this -by giving this command a prefix. +You can also ask Gnus for an arbitrary article, no matter what group it +belongs to. @kbd{M-^} (@code{gnus-summary-refer-article}) will ask you +for a @code{Message-ID}, which is one of those long, hard-to-read +thingies that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. +You have to get it all exactly right. No fuzzy searches, I'm afraid. + +Gnus looks for the @code{Message-ID} in the headers that have already +been fetched, but also tries all the select methods specified by +@code{gnus-refer-article-method} if it is not found. +@end table @vindex gnus-refer-article-method If the group you are reading is located on a back end that does not @@ -11432,13 +11431,15 @@ @item gnus-confirm-mail-reply-to-news @vindex gnus-confirm-mail-reply-to-news -This can also be a function receiving the group name as the only -parameter which should return non-@code{nil} if a confirmation is -needed, or a regular expression matching group names, where -confirmation is should be asked for. +If non-@code{nil}, Gnus will ask you for a confirmation when you are +about to reply to news articles by mail. If it is @code{nil}, nothing +interferes in what you want to do. This can also be a function +receiving the group name as the only parameter which should return +non-@code{nil} if a confirmation is needed, or a regular expression +matching group names, where confirmation should be asked for. If you find yourself never wanting to reply to mail, but occasionally -press R anyway, this variable might be for you. +press @kbd{R} anyway, this variable might be for you. @item gnus-confirm-treat-mail-like-news @vindex gnus-confirm-treat-mail-like-news @@ -12198,6 +12199,9 @@ @item s The opened/closed/denied status of the server. + +@item a +Whether this server is agentized. @end table @vindex gnus-server-mode-line-format @@ -12676,35 +12680,6 @@ connection before giving up. If it is @code{nil}, which is the default, no timeouts are done. -@c @item nntp-command-timeout -@c @vindex nntp-command-timeout -@c @cindex PPP connections -@c @cindex dynamic IP addresses -@c If you're running Gnus on a machine that has a dynamically assigned -@c address, Gnus may become confused. If the address of your machine -@c changes after connecting to the @acronym{NNTP} server, Gnus will simply sit -@c waiting forever for replies from the server. To help with this -@c unfortunate problem, you can set this command to a number. Gnus will -@c then, if it sits waiting for a reply from the server longer than that -@c number of seconds, shut down the connection, start a new one, and resend -@c the command. This should hopefully be transparent to the user. A -@c likely number is 30 seconds. -@c -@c @item nntp-retry-on-break -@c @vindex nntp-retry-on-break -@c If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus -@c hangs. This will have much the same effect as the command timeout -@c described above. - -@item nntp-server-hook -@vindex nntp-server-hook -This hook is run as the last step when connecting to an @acronym{NNTP} -server. - -@item nntp-buggy-select -@vindex nntp-buggy-select -Set this to non-@code{nil} if your select routine is buggy. - @item nntp-nov-is-evil @vindex nntp-nov-is-evil If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this @@ -12736,11 +12711,6 @@ @vindex nntp-prepare-server-hook A hook run before attempting to connect to an @acronym{NNTP} server. -@item nntp-warn-about-losing-connection -@vindex nntp-warn-about-losing-connection -If this variable is non-@code{nil}, some noise will be made when a -server closes connection. - @item nntp-record-commands @vindex nntp-record-commands If non-@code{nil}, @code{nntp} will log all commands it sends to the @@ -12753,8 +12723,8 @@ It is possible to customize how the connection to the nntp server will be opened. If you specify an @code{nntp-open-connection-function} parameter, Gnus will use that function to establish the connection. -Five pre-made functions are supplied. These functions can be grouped in -two categories: direct connection functions (three pre-made), and +Six pre-made functions are supplied. These functions can be grouped in +two categories: direct connection functions (four pre-made), and indirect ones (two pre-made). @item nntp-prepare-post-hook @@ -12772,14 +12742,6 @@ Note that not all servers support the recommended ID. This works for INN versions 2.3.0 and later, for instance. -@item nntp-read-timeout -@vindex nntp-read-timeout -How long nntp should wait between checking for the end of output. -Shorter values mean quicker response, but is more CPU intensive. The -default is 0.1 seconds. If you have a slow line to the server (and -don't like to see Emacs eat your available CPU power), you might set -this to, say, 1. - @end table @menu @@ -12954,7 +12916,9 @@ The following variables affect the behavior of all, or several of the pre-made connection functions. When not specified, all functions are -affected. +affected (the values of the following variables will be used as the +default if each virtual @code{nntp} server doesn't specify those server +variables individually). @table @code @@ -12962,7 +12926,7 @@ @vindex nntp-pre-command A command wrapper to use when connecting through a non native connection function (all except @code{nntp-open-network-stream}, -@code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}. This is +@code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}). This is where you would put a @samp{SOCKS} wrapper for instance. @item nntp-address @@ -12973,7 +12937,7 @@ @vindex nntp-port-number Port number to connect to the @acronym{NNTP} server. The default is @samp{nntp}. If you use @acronym{NNTP} over -@acronym{tls}/@acronym{ssl}, you may want to use integer ports rather +@acronym{TLS}/@acronym{SSL}, you may want to use integer ports rather than named ports (i.e, use @samp{563} instead of @samp{snews} or @samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may not work with named ports. @@ -20501,9 +20465,20 @@ 1000) @end example +Suppose you're reading a high volume group and you're only interested +in replies. The plan is to score down all articles that don't have +subject that begin with "Re:", "Fw:" or "Fwd:" and then score up all +parents of articles that have subjects that begin with reply marks. + +@example +((! ("subject" "re:\\|fwd?:" r)) + -200) +((1- ("subject" "re:\\|fwd?:" r)) + 200) +@end example + The possibilities are endless. - @node Advanced Scoring Tips @subsection Advanced Scoring Tips diff -r 7a3090aca393 -r 2a679c81f552 man/idlwave.texi --- a/man/idlwave.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/idlwave.texi Sun Oct 09 20:00:17 2005 +0000 @@ -33,7 +33,7 @@ 2005 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the @@ -65,7 +65,7 @@ @sp 2 @cindex Copyright, of IDLWAVE Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the @@ -2677,21 +2677,17 @@ The many debugging, compiling, and examination commands provided in IDLWAVE are available simultaneously through two different interfaces: the original, multi-key command interface, and the new Electric Debug -Mode. The functionality they offer is similar, but the way you -interact with them is quite different. The main difference is that, -in Electric Debug Mode, the source buffers are made read-only, and -single key-strokes are used to step through, examine expressions, set -and remove breakpoints, etc. The same variables, prefix arguments, -and settings apply to both versions, and both can be used -interchangeably. By default, when breakpoints are hit, Electric Debug -Mode is enabled. The traditional interface is described first. -@xref{Electric Debug Mode}, for more on that mode. - - -@sp 1 -@noindent @strong{Note that electric debug mode can be prevented from -activating automatically by customizing the variable -@code{idlwave-shell-automatic-electric-debug}.} +Mode. The functionality they offer is similar, but the way you interact +with them is quite different. The main difference is that, in Electric +Debug Mode, the source buffers are made read-only, and single +key-strokes are used to step through, examine expressions, set and +remove breakpoints, etc. The same variables, prefix arguments, and +settings apply to both versions, and both can be used interchangeably. +By default, when breakpoints are hit, Electric Debug Mode is enabled. +The traditional interface is described first. @xref{Electric Debug +Mode}, for more on that mode. Note that electric debug mode can be +prevented from activating automatically by customizing the variable +@code{idlwave-shell-automatic-electric-debug}. @node Debug Key Bindings, Breakpoints and Stepping, A Tale of Two Modes, Debugging IDL Programs @subsection Debug Key Bindings diff -r 7a3090aca393 -r 2a679c81f552 man/info.texi --- a/man/info.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/info.texi Sun Oct 09 20:00:17 2005 +0000 @@ -19,7 +19,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/macos.texi --- a/man/macos.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/macos.texi Sun Oct 09 20:00:17 2005 +0000 @@ -3,48 +3,47 @@ @c 2005 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Mac OS, MS-DOS, Antinews, Top -@appendix Emacs and the Mac OS +@appendix Emacs and Mac OS @cindex Mac OS @cindex Macintosh - Emacs built on Mac OS X supports most of its major features: -multiple frames, colors, scroll bars, menu bars, use of the mouse, -fontsets, international characters, input methods, coding systems, -asynchronous and synchronous subprocesses, unexec (@code{dump-emacs}), -and networking (@code{open-network-stream}). Support for various -image file formats has not been implemented yet. + This section briefly describes the peculiarities of using Emacs +under Mac OS with native window system support. For Mac OS X, Emacs +can be built either without window system support, with X11, or with +Carbon API. This section only applies to the Carbon build. For Mac +OS Classic, Emacs can be built with or without Carbon API, and this +section applies to either of them because they run on the native +window system. - The following features of Emacs are not yet supported on the Mac OS -8 or 9: unexec (@code{dump-emacs}), asynchronous subprocesses -(@code{start-process}), and networking (@code{open-network-stream}). -As a result, packages such as Gnus, GUD, and Comint do not work. -However, synchronous subprocesses (@code{call-process}) are supported. -Since external programs to handle commands such as @code{print-buffer} -and @code{diff} are not available on Mac OS 8 or 9, they are not -supported. - - Most of the features that are supported work in the same way as on -other platforms and are therefore documented in the rest of this -manual. This section describes the peculiarities of using Emacs under -the Mac OS. + Emacs built on Mac OS X supports most of its major features except +display support of PostScript images. The following features of Emacs +are not supported on Mac OS Classic: unexec (@code{dump-emacs}), +asynchronous subprocesses (@code{start-process}), and networking +(@code{open-network-stream}). As a result, packages such as Gnus, +GUD, and Comint do not work. Synchronous subprocesses +(@code{call-process}) are supported on non-Carbon build, but +specially-crafted external programs are needed. Since external +programs to handle commands such as @code{print-buffer} and +@code{diff} are not available on Mac OS Classic, they are not +supported. Non-Carbon build on Mac OS Classic does not support some +features such as file dialogs, drag-and-drop, and Unicode menus. @menu -* Input: Mac Input. Keyboard input on the Mac. -* Intl: Mac International. International character sets on the Mac. +* Input: Mac Input. Keyboard and mouse input on Mac. +* Intl: Mac International. International character sets on Mac. * Env: Mac Environment Variables. Setting environment variables for Emacs. -* Directories: Mac Directories. Volumes and directories on the Mac. -* Font: Mac Font Specs. Specifying fonts on the Mac. +* Directories: Mac Directories. Volumes and directories on Mac. +* Font: Mac Font Specs. Specifying fonts on Mac. * Functions: Mac Functions. Mac-specific Lisp functions. @end menu @node Mac Input -@section Keyboard Input on the Mac +@section Keyboard and Mouse Input on Mac @cindex Meta (Mac OS) @cindex keyboard coding (Mac OS) + @vindex mac-command-key-is-meta -@vindex mac-keyboard-text-encoding - - On the Mac, Emacs can use either the @key{option} key or the + On Mac, Emacs can use either the @key{option} key or the @key{command} key as the @key{META} key. If the value of the variable @code{mac-command-key-is-meta} is non-@code{nil} (its default value), Emacs uses the @key{command} key as the @key{META} key. Otherwise it @@ -55,89 +54,124 @@ useful for entering non-@acronym{ASCII} Latin characters directly from the Mac keyboard, for example. - Emacs recognizes the setting in the Keyboard control panel and -supports international and alternative keyboard layouts (e.g., Dvorak). -Selecting one of the layouts from the keyboard layout pull-down menu -will affect how the keys typed on the keyboard are interpreted. - - The Mac OS intercepts and handles certain key combinations (e.g., -@key{command}-@key{SPC} for switching input languages). These will not -be passed to Emacs. + Emacs recognizes the setting in the Keyboard control panel (Mac OS +Classic) or the International system preference pane (Mac OS X) and +supports international and alternative keyboard layouts (e.g., Dvorak) +if its script is either Roman, Japanese, Traditional Chinese, Korean, +Cyrillic, Simplified Chinese, or Central European. Keyboard layouts +based on Unicode may not work properly. Selecting one of the layouts +from the keyboard layout pull-down menu will affect how the keys typed +on the keyboard are interpreted. - The Mac keyboard ordinarily generates characters in the Mac Roman -encoding. To use it for entering ISO Latin-1 characters directly, set -the value of the variable @code{mac-keyboard-text-encoding} to -@code{kTextEncodingISOLatin1}. Note that not all Mac Roman characters -that can be entered at the keyboard can be converted to ISO Latin-1 -characters. +@vindex mac-pass-command-to-system +@vindex mac-pass-control-to-system + Mac OS intercepts and handles certain key combinations (e.g., +@key{command}-@key{SPC} for switching input languages). These will not +be passed to Emacs. One can disable this interception by setting +@code{mac-pass-command-to-system} or @code{mac-pass-control-to-system} +to @code{nil}. - To enter ISO Latin-2 characters directly from the Mac keyboard, set -the value of @code{mac-keyboard-text-encoding} to -@code{kTextEncodingISOLatin2}. Then let Emacs know that the keyboard -generates Latin-2 codes, by typing @kbd{C-x @key{RET} k iso-latin-2 -@key{RET}}. To make this setting permanent, put this in your -@file{.emacs} init file: +@vindex mac-emulate-three-button-mouse + Especially for one-button mice, the multiple button feature can be +emulated by setting @code{mac-emulate-three-button-mouse} to @code{t} +or @code{reverse}. If set to @code{t} (@code{reverse}, respectively), +pressing the mouse button with the @key{option} key is recognized as +the second (third) button, and that with the @key{command} key is +recognized as the third (second) button. -@lisp -(set-keyboard-coding-system 'iso-latin-2) -@end lisp +@vindex mac-wheel-button-is-mouse-2 + For multi-button mice, the wheel button and the secondary button are +recognized as the second and the third button, respectively. If +@code{mac-wheel-button-is-mouse-2} is set to @code{nil}, their roles +are exchanged. @node Mac International -@section International Character Set Support on the Mac +@section International Character Set Support on Mac @cindex Mac Roman coding system @cindex clipboard support (Mac OS) - The Mac uses a non-standard encoding for the upper 128 single-byte -characters. It also deviates from the ISO 2022 standard by using -character codes in the range 128-159. The coding system -@code{mac-roman} is used to represent this Mac encoding. It is used -for editing files stored in this native encoding, and for displaying -file names in Dired mode. - - Any native (non-symbol) Mac font can be used to correctly display -characters in the @code{mac-roman} coding system. + Mac uses non-standard encodings for the upper 128 single-byte +characters. They also deviate from the ISO 2022 standard by using +character codes in the range 128-159. The coding systems +@code{mac-roman}, @code{mac-centraleurroman}, and @code{mac-cyrillic} +are used to represent these Mac encodings. The fontset @code{fontset-mac} is created automatically when Emacs -is run on the Mac. It displays characters in the @code{mac-roman} -coding system using 12-point Monaco. - - To insert characters directly in the @code{mac-roman} coding system, -type @kbd{C-x @key{RET} k mac-roman @key{RET}}, customize the variable -@code{keyboard-coding-system}, or put this in your init file: - -@lisp -(set-keyboard-coding-system 'mac-roman) -@end lisp - -@noindent -This is useful for editing documents in native Mac encoding. +is run on Mac, and used by default. It displays as many kinds of +characters as possible using 12-point Monaco as a base font. If you +see some character as a hollow box with this fontset, then it's almost +impossible to display it only by customizing font settings (@pxref{Mac +Font Specs}). You can use input methods provided either by LEIM (@pxref{Input -Methods}) or the Mac OS to enter international characters. - - To use the former, see the International Character Set Support section -of the manual (@pxref{International}). +Methods}) or Mac OS to enter international characters. To use the +former, see the International Character Set Support section of the +manual (@pxref{International}). - To use input methods provided by the Mac OS, set the keyboard coding -system accordingly using the @kbd{C-x @key{RET} k} command -(@code{set-keyboard-coding-system}). For example, for Traditional -Chinese, use @samp{chinese-big5} as keyboard coding system; for -Japanese, use @samp{sjis}, etc. Then select the desired input method in -the keyboard layout pull-down menu. + Emacs on Mac OS automatically changes the value of +@code{keyboard-coding-system} according to the current keyboard +layout. So users don't need to set it manually, and even if set, it +will be changed when the keyboard layout change is detected next time. The Mac clipboard and the Emacs kill ring (@pxref{Killing}) are -connected as follows: the most recent kill is copied to the clipboard -when Emacs is suspended and the contents of the clipboard is inserted -into the kill ring when Emacs resumes. The result is that you can yank -a piece of text and paste it into another Mac application, or cut or copy -one in another Mac application and yank it into a Emacs buffer. +synchronized by default: you can yank a piece of text and paste it +into another Mac application, or cut or copy one in another Mac +application and yank it into a Emacs buffer. This feature can be +disabled by setting @code{x-select-enable-clipboard} to @code{nil}. +One can still do copy and paste with another application from the Edit +menu. + + On Mac, the role of the coding system for selection that is set by +@code{set-selection-coding-system} (@pxref{Specify Coding}) is +two-fold. First, it is used as a preferred coding system for the +traditional text flavor that does not specify any particular encodings +and is mainly used by applications on Mac OS Classic. Second, it +specifies the intermediate encoding for the UTF-16 text flavor that is +mainly used by applications on Mac OS X. - The encoding of text selections must be specified using the commands -@kbd{C-x @key{RET} x} (@code{set-selection-coding-system}) or @kbd{C-x -@key{RET} X} (@code{set-next-selection-coding-system}) (e.g., for -Traditional Chinese, use @samp{chinese-big5-mac} and for Japanese, -@samp{sjis-mac}). @xref{Specify Coding}, for more details. + When pasting UTF-16 text data from the clipboard, it is first +converted to the encoding specified by the selection coding system +using the converter in the Mac OS system, and then decoded into the +Emacs internal encoding using the converter in Emacs. If the first +conversion failed, then the UTF-16 data is directly converted to Emacs +internal encoding using the converter in Emacs. Copying UTF-16 text +to the clipboard goes through the inverse path. The reason for this +two-path decoding is to avoid subtle differences in Unicode mappings +between the Mac OS system and Emacs such as various kinds of hyphens, +and to minimize users' customization. For example, users that mainly +use Latin characters would prefer Greek characters to be decoded into +the @code{mule-unicode-0100-24ff} charset, but Japanese users would +prefer them to be decoded into the @code{japanese-jisx0208} charset. +Since the coding system for selection is automatically set according +to the system locale setting, users usually don't have to set it +manually. + + The default language environment (@pxref{Language Environments}) is +set according to the locale setting at the startup time. On Mac OS, +the locale setting is consulted in the following order: +@enumerate +@item +Environment variables @env{LC_ALL}, @env{LC_CTYPE} and @env{LANG} as +in other systems. + +@item +Preference @code{AppleLocale} that is set by default on Mac OS X 10.3 +and later. + +@item +Preference @code{AppleLanguages} that is set by default on Mac OS X +10.1 and later. + +@item +Variable @code{mac-system-locale} that is derived from the system +language and region codes. This variable is available on all +supported Mac OS versions including Mac OS Classic. +@end enumerate + + The default values of almost all variables about coding systems are +also set according to the language environment. So usually you don't +have to customize these variables manually. @node Mac Environment Variables @section Environment Variables and Command Line Arguments. @@ -145,10 +179,23 @@ On Mac OS X, when Emacs is run in a terminal, it inherits the values of environment variables from the shell from which it is invoked. -However, when it is run from the Finder as a GUI application, it -inherits no environment variable values. +However, when it is run from the Finder as a GUI application, it only +inherits environment variable values defined in the file +@file{~/.MacOSX/environment.plist} that affects all the applications +invoked from the Finder or the @command{open} command. + + Command line arguments are specified like - On Mac OS 8 or 9, environment variables and command line arguments +@example +/Applications/Emacs.app/Contents/MacOS/Emacs -geometry 80x25 & +@end example + +@noindent +if Emacs is installed at @file{/Applications/Emacs.app}. If Emacs is +invoked like this, then it also inherits the values of environment +variables from the shell from which it is invoked. + + On Mac OS Classic, environment variables and command line arguments for Emacs can be set by modifying the @samp{STR#} resources 128 and 129, respectively. A common environment variable that one may want to set is @samp{HOME}. @@ -169,12 +216,45 @@ EMACS_UNIBYTE=1 @end example +@cindex Mac Preferences + Although Emacs on Mac does not support X resources (@pxref{X +Resources}) directly, one can use the Preferences system in place of X +resources. For example, adding the line + +@example +Emacs.cursorType: bar +@end example + +@noindent +to @file{~/.Xresources} in X11 corresponds to the execution of + +@example +defaults write org.gnu.Emacs Emacs.cursorType bar +@end example + +@noindent +on Mac OS X. One can use boolean or numeric values as well as string +values as follows: + +@example +defaults write org.gnu.Emacs Emacs.toolBar -bool false +defaults write org.gnu.Emacs Emacs.lineSpacing -int 3 +@end example + +@noindent +Try @kbd{M-x man RET defaults RET} for the usage of the +@command{defaults} command. Alternatively, if you have Developer +Tools installed on Mac OS X, you can use Property List Editor to edit +the file @file{~/Library/Preferences/org.gnu.Emacs.plist}. + @node Mac Directories -@section Volumes and Directories on the Mac +@section Volumes and Directories on Mac @cindex file names (Mac OS) - The directory structure in the Mac OS is seen by Emacs as + This node applies to Mac OS Classic only. + + The directory structure in Mac OS Classic is seen by Emacs as @example /@var{volumename}/@var{filename} @@ -184,11 +264,11 @@ @file{/} will display all volumes on the system. You can use @file{..} to go up a directory level. - On Mac OS 8 or 9, to access files and folders on the desktop, look + On Mac OS Classic, to access files and folders on the desktop, look in the folder @file{Desktop Folder} in your boot volume (this folder is usually invisible in the Mac @code{Finder}). - On Mac OS 8 or 9, Emacs creates the Mac folder + On Mac OS Classic, Emacs creates the Mac folder @file{:Preferences:Emacs:} in the @file{System Folder} and uses it as the temporary directory. Emacs maps the directory name @file{/tmp/} to that. Therefore it is best to avoid naming a volume @file{tmp}. @@ -199,12 +279,12 @@ @node Mac Font Specs -@section Specifying Fonts on the Mac +@section Specifying Fonts on Mac @cindex font names (Mac OS) It is rare that you need to specify a font name in Emacs; usually you specify face attributes instead. But when you do need to specify -a font name in Emacs on the Mac, use a standard X font name: +a font name in Emacs on Mac, use a standard X font name: @smallexample -@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{} @@ -216,11 +296,57 @@ Native Apple fonts in Mac Roman encoding has maker name @code{apple} and charset @code{mac-roman}. For example 12-point Monaco can be -specified by the name @samp{-apple-monaco-*-12-*-mac-roman}. +specified by the name @samp{-apple-monaco-*-12-*-mac-roman}. When +using a particular size of scalable fonts, it must be specified in a +format containing 14 @samp{-}s like +@samp{-apple-monaco-medium-r-normal--13-*-*-*-*-*-mac-roman}. + + You can specify a @code{mac-roman} font for @acronym{ASCII} +characters like + +@lisp +(add-to-list + 'default-frame-alist + '(font . "-apple-monaco-medium-r-normal--13-*-*-*-*-*-mac-roman")) +@end lisp + +@noindent +but that does not extend to ISO-8859-1: specifying a @code{mac-roman} +font for Latin-1 characters introduces wrong glyphs. + + Native Apple Traditional Chinese, Simplified Chinese, Japanese, +Korean, Central European, Cyrillic, Symbol, and Dingbats fonts have +charsets @samp{big5-0}, @samp{gb2312.1980-0}, +@samp{jisx0208.1983-sjis} and @samp{jisx0201.1976-0}, +@samp{ksc5601.1989-0}, @samp{mac-centraleurroman}, +@samp{mac-cyrillic}, @samp{mac-symbol}, and @samp{mac-dingbats}, +respectively. - Native Apple Traditional Chinese, Simplified Chinese, Japanese, and -Korean fonts have charsets @samp{big5-0}, @samp{gb2312.1980-0}, -@samp{jisx0208.1983-sjis}, and @samp{ksc5601.1989-0}, respectively. + Since Emacs as of the current version uses QuickDraw Text routines +for drawing texts, only characters in the charsets listed above can be +displayed with the OS-bundled fonts, even if other applications that +use @acronym{ATSUI} or Cocoa can display variety of characters with +them. + + The use of @code{create-fontset-from-fontset-spec} (@pxref{Defining +Fontsets}) for defining fontsets often results in wrong ones +especially when using only OS-bundled fonts. The recommended way is +to create a fontset using @code{create-fontset-from-mac-roman-font}: + +@lisp +(create-fontset-from-mac-roman-font + "-apple-courier-medium-r-normal--13-*-*-*-*-*-mac-roman" + nil "foo") +@end lisp + +@noindent +and then optionally specifying Chinese, Japanese, or Korean font +families using @code{set-fontset-font}: + +@lisp +(set-fontset-font "fontset-foo" + 'chinese-gb2312 '("song" . "gb2312.1980-0")) +@end lisp Single-byte fonts converted from GNU fonts in BDF format, which are not in the Mac Roman encoding, have foundry, family, and character sets @@ -228,6 +354,12 @@ @samp{ETL-Fixed-ISO8859-1} contains fonts which can be referred to by the name @samp{-ETL-fixed-*-iso8859-1}. +@vindex mac-allow-anti-aliasing + Emacs uses the QuickDraw text rendering by default. On Mac OS X +10.2 and later, it can be changed so that it uses the Quartz 2D text +rendering (aka CG text rendering) by setting +@code{mac-allow-anti-aliasing} to @code{t}. However, it is reported +to sometimes leave some garbages. @node Mac Functions @section Mac-Specific Lisp Functions @@ -246,6 +378,19 @@ are useful for constructing AppleScript commands to be passed to @code{do-applescript}. +@findex mac-set-file-creator +@findex mac-get-file-creator +@findex mac-set-file-type +@findex mac-get-file-type + The functions @code{mac-set-file-creator}, +@code{mac-get-file-creator}, @code{mac-set-file-type}, and +@code{mac-get-file-type} can be used to set and get creator and file +codes. + +@findex mac-get-preference + The function @code{mac-get-preference} returns the preferences value +converted to a Lisp object for a specified key and application. + @ignore arch-tag: a822c2ab-4273-4997-927e-c153bb71dcf6 @end ignore diff -r 7a3090aca393 -r 2a679c81f552 man/makefile.w32-in --- a/man/makefile.w32-in Mon Sep 19 21:25:51 2005 +0000 +++ b/man/makefile.w32-in Sun Oct 09 20:00:17 2005 +0000 @@ -41,7 +41,8 @@ $(infodir)/eudc $(infodir)/ebrowse $(infodir)/pcl-cvs \ $(infodir)/woman $(infodir)/eshell $(infodir)/org \ $(infodir)/url $(infodir)/speedbar $(infodir)/tramp \ - $(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake + $(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \ + $(infodir)/newsticker DVI_TARGETS = emacs.dvi 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 \ @@ -49,7 +50,7 @@ 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 \ - emacs-xtra.dvi + newsticker.dvi emacs-xtra.dvi INFOSOURCES = info.texi # The following rule does not work with all versions of `make'. @@ -317,16 +318,19 @@ $(infodir)/org: org.texi $(MAKEINFO) org.texi - org.dvi: org.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/org.texi $(infodir)/url: url.texi $(MAKEINFO) url.texi - url.dvi: url.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/url.texi +$(infodir)/newsticker: newsticker.texi + $(MAKEINFO) newsticker.texi +newsticker.dvi: newsticker.texi + $(ENVADD) $(TEXI2DVI) $(srcdir)/newsticker.texi + mostlyclean: - $(DEL) *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.* diff -r 7a3090aca393 -r 2a679c81f552 man/message.texi --- a/man/message.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/message.texi Sun Oct 09 20:00:17 2005 +0000 @@ -13,7 +13,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the @@ -839,13 +839,14 @@ The @code{message-use-idna} variable control whether @acronym{IDNA} is used. If the variable is @code{nil} no @acronym{IDNA} encoding will ever happen, if it is set to the symbol @code{ask} the user will be -queried (the default), and if set to @code{t} @acronym{IDNA} encoding -happens automatically. +queried, and if set to @code{t} @acronym{IDNA} encoding happens +automatically (the default). @findex message-idna-to-ascii-rhs If you want to experiment with the @acronym{IDNA} encoding, you can invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer -to have the non-@acronym{ASCII} domain names encoded while you edit the message. +to have the non-@acronym{ASCII} domain names encoded while you edit +the message. Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU Libidn} installed in order to use this functionality. diff -r 7a3090aca393 -r 2a679c81f552 man/mh-e.texi --- a/man/mh-e.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/mh-e.texi Sun Oct 09 20:00:17 2005 +0000 @@ -20,7 +20,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/mini.texi --- a/man/mini.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/mini.texi Sun Oct 09 20:00:17 2005 +0000 @@ -22,7 +22,7 @@ prompt normally ends with a colon. @cindex default argument - Sometimes a @dfn{default argument} appears in parentheses after the + Sometimes a @dfn{default argument} appears in parentheses before the colon; it too is part of the prompt. The default will be used as the argument value if you enter an empty argument (that is, just type @key{RET}). For example, commands that read buffer names always show a diff -r 7a3090aca393 -r 2a679c81f552 man/newsticker.texi --- a/man/newsticker.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/newsticker.texi Sun Oct 09 20:00:17 2005 +0000 @@ -1,9 +1,7 @@ \input texinfo @c -*-texinfo-*- -@comment $Id: newsticker.texi,v 1.4 2005/09/15 12:32:57 rms Exp $ @comment %**start of header @setfilename ../info/newsticker @set VERSION 1.8 -@set UPDATED ``$Id: newsticker.texi,v 1.4 2005/09/15 12:32:57 rms Exp $'' @settitle Newsticker @value{VERSION} @syncodeindex vr cp @syncodeindex fn cp @@ -20,9 +18,19 @@ 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''. +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 @@ -39,7 +47,6 @@ @author @uref{http://de.geocities.com/ulf_jasper} @page @vskip 0pt plus 1filll -@insertcopying @end titlepage @contents @@ -47,19 +54,16 @@ @ifnottex @node Top @top Newsticker - -@insertcopying @end ifnottex @menu -* Overview:: -* Requirements:: -* Installation:: -* Usage:: -* Configuration:: -* Remarks:: -* GNU Free Documentation License:: -* Index:: +* Overview:: General description of newsticker. +* Requirements:: Requirements for using newsticker. +* Installation:: Installing newsticker on your system. +* Usage:: Basic newsticker instructions. +* Configuration:: Customizable newsticker settings. +* Remarks:: Remarks about newsticker. +* Index:: Variable, function, and concept index. @end menu @node Overview @@ -120,19 +124,19 @@ Place Newsticker in a directory where Emacs can find it. Add the following line to your Emacs startup file (@file{~/.emacs}). -@example +@lisp (add-to-list 'load-path "/path/to/newsticker/") (autoload 'newsticker-start "newsticker" "Emacs Newsticker" t) (autoload 'newsticker-show-news "newsticker" "Emacs Newsticker" t) -@end example +@end lisp Newsticker-mode supports imenu. This allows for navigating with the help of a menu. In order to use this feature you should also add the following. -@example +@lisp (add-hook 'newsticker-mode-hook 'imenu-add-menubar-index) -@end example +@end lisp That's it. @@ -140,33 +144,33 @@ @chapter Usage @findex newsticker-show-news -The command @command{newsticker-show-news} will display all available +The command @code{newsticker-show-news} will display all available headlines in a special buffer, called @samp{*newsticker*}. It will also start the asynchronous download of headlines. The modeline in the @samp{*newsticker*} buffer informs whenever new headlines have arrived. Clicking mouse-button 2 or pressing RET in this buffer on a -headline will call @command{browse-url} to load the corresponding news +headline will call @code{browse-url} to load the corresponding news story in your favourite web browser. @findex newsticker-start-ticker @findex newsticker-stop-ticker The scrolling, or flashing of headlines in the echo area, can be -started with the command @command{newsticker-start-ticker}. It can be -stopped with @command{newsticker-stop-ticker}. +started with the command @code{newsticker-start-ticker}. It can be +stopped with @code{newsticker-stop-ticker}. @findex newsticker-start @findex newsticker-stop If you just want to start the periodic download of headlines use the -command @command{newsticker-start}. Calling @command{newsticker-stop} -will stop the periodic download, but will call -@command{newsticker-stop-ticker} as well. +command @code{newsticker-start}. Calling @code{newsticker-stop} will +stop the periodic download, but will call +@code{newsticker-stop-ticker} as well. @node Configuration @chapter Configuration All Newsticker options are customizable, i.e. they can be changed with Emacs customization methods: Call the command -@command{customize-group} and enter @samp{newsticker} for the customization +@code{customize-group} and enter @samp{newsticker} for the customization group. All Newsticker options have reasonable default values, so that in most @@ -178,69 +182,69 @@ @itemize @item -@command{newsticker-feed} contains options that define which news +@code{newsticker-feed} contains options that define which news feeds are retrieved and how this is done. @itemize @item @vindex newsticker-url-list -@command{newsticker-url-list} defines the list of headlines which are +@code{newsticker-url-list} defines the list of headlines which are retrieved. @item @vindex newsticker-retrieval-interval -@command{newsticker-retrieval-interval} defines how often headlines +@code{newsticker-retrieval-interval} defines how often headlines are retrieved. @end itemize @item -@command{newsticker-headline-processing} contains options that define +@code{newsticker-headline-processing} contains options that define how the retrieved headlines are processed. @itemize @item @vindex newsticker-keep-obsolete-items -@command{newsticker-keep-obsolete-items} decides whether unread +@code{newsticker-keep-obsolete-items} decides whether unread headlines that have been removed from the feed are kept in the Newsticker cache. @end itemize @item -@command{newsticker-layout} contains options that define how the +@code{newsticker-layout} contains options that define how the buffer for reading RSS headlines is formatted. @itemize @item @vindex newsticker-heading-format -@command{newsticker-item-format} defines how the title of a headline +@code{newsticker-item-format} defines how the title of a headline is formatted. @end itemize @item -@command{newsticker-ticker} contains options that define how headlines +@code{newsticker-ticker} contains options that define how headlines are shown in the echo area. @itemize @item @vindex newsticker-display-interval @vindex newsticker-scroll-smoothly -@command{newsticker-display-interval} and -@command{newsticker-scroll-smoothly} define how headlines are shown in +@code{newsticker-display-interval} and +@code{newsticker-scroll-smoothly} define how headlines are shown in the echo area. @end itemize @item -@command{newsticker-hooks} contains options for hooking other Emacs +@code{newsticker-hooks} contains options for hooking other Emacs commands to newsticker functions. @itemize @item @vindex newsticker-new-item-functions -@command{newsticker-new-item-functions} allows for automatic +@code{newsticker-new-item-functions} allows for automatic processing of headlines. See `newsticker-download-images', and `newsticker-download-enclosures' for sample functions. @end itemize @item -@command{newsticker-miscellaneous} contains other Newsticker options. +@code{newsticker-miscellaneous} contains other Newsticker options. @end itemize @@ -258,409 +262,6 @@ Byte-compiling newsticker.el is recommended. -@node GNU Free Documentation License -@chapter GNU Free Documentation License - -@verbatim - - GNU Free Documentation License - ============================== - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - -@end verbatim @node Index @unnumbered Index diff -r 7a3090aca393 -r 2a679c81f552 man/org.texi --- a/man/org.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/org.texi Sun Oct 09 20:00:17 2005 +0000 @@ -4,7 +4,7 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.15 +@set VERSION 3.16 @set DATE September 2005 @dircategory Emacs @@ -100,7 +100,7 @@ * Outlines:: Org-mode is based on outline-mode * Headlines:: How to typeset org-tree headlines -* Visibility cycling:: Show ad hide, much simplified +* Visibility cycling:: Show and hide, much simplified * Motion:: Jumping to other headlines * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place @@ -120,7 +120,7 @@ * Advanced features:: Field names, parameters and automatic recalc * Named-field formulas:: Formulas valid in single fields * Editing/debugging formulas:: Changing a stored formula -* Appetizer:: +* Appetizer:: Taste the power of calc Hyperlinks @@ -169,6 +169,7 @@ * Customization:: Adapting Org-mode to your taste * FAQ:: Frequently asked questions * Interaction:: Other Emacs packages +* TTY keys:: Using Org-mode on a tty * Bugs:: Things which do not work perfectly * Acknowledgments:: These people provided feedback and more @@ -312,7 +313,7 @@ @menu * Outlines:: Org-mode is based on outline-mode * Headlines:: How to typeset org-tree headlines -* Visibility cycling:: Show ad hide, much simplified +* Visibility cycling:: Show and hide, much simplified * Motion:: Jumping to other headlines * Structure editing:: Changing sequence and level of headlines * Archiving:: Move done task trees to a different place @@ -475,14 +476,14 @@ @kindex M-S-@key{down} @item M-S-@key{down} Move subtree down (swap with next subtree of same level) -@kindex C-c C-h C-w -@item C-c C-h C-w +@kindex C-c C-x C-w +@item C-c C-x C-w Kill subtree, i.e. remove it from buffer but save in kill ring. -@kindex C-c C-h M-w -@item C-c C-h M-w +@kindex C-c C-x M-w +@item C-c C-x M-w Copy subtree to kill ring. -@kindex C-c C-h C-y -@item C-c C-h C-y +@kindex C-c C-x C-y +@item C-c C-x C-y Yank subtree from kill ring. This does modify the level of the subtree to make sure the tree fits in nicely at the yank position. The yank level can also be specified with a prefix arg, or by yanking after a @@ -610,10 +611,18 @@ |Name|Phone|Age |- @end example - @noindent and then press @key{TAB} to align the table and start filling in fields. +When typing text into a field, Org-mode treats @key{DEL}, +@key{Backspace}, and all character keys in a special way, so that +inserting and deleting avoids shifting other fields. Also, when +typing @emph{immediately after the cursor was moved into a new field +with @kbd{@key{TAB}}, @kbd{S-@key{TAB}} or @kbd{@key{RET}}}, the +field is automatically made blank. If this behavior is too +unpredictable for you, configure the variables +@code{org-enable-table-editor} and @code{org-table-auto-blank-field}. + @table @kbd @tsubheading{Creation and conversion} @item M-x org-table-create @@ -684,17 +693,17 @@ is created above the current line. @tsubheading{Regions} -@kindex C-c C-h M-w -@item C-c C-h M-w +@kindex C-c C-x M-w +@item C-c C-x M-w Copy a rectangular region from a table to a special clipboard. Point and mark determine edge fields of the rectangle. The process ignores horizontal separator lines. -@kindex C-c C-h C-w -@item C-c C-h C-w +@kindex C-c C-x C-w +@item C-c C-x C-w Copy a rectangular region from a table to a special clipboard, and blank all fields in the rectangle. So this is the ``cut'' operation. -@kindex C-c C-h C-y -@item C-c C-h C-y +@kindex C-c C-x C-y +@item C-c C-x C-y Paste a rectangular region into a table. The upper right corner ends up in the current field. All involved fields will be overwritten. If the rectangle does not fit into the present table, @@ -802,16 +811,16 @@ @section Calculations in tables @cindex calculations, in tables -The table editor has some spreadsheet-like capabilities. The Emacs -@file{calc} package is required for this feature to work. There are -basically two levels of complexity for table calculations in Org-mode. -On the basic level, tables do only horizontal computations, so a field -can be computed from other fields @emph{in the same row}, and Org-mode -assumes that there is only one formula for each column. This is very -efficient to work with and enough for many tasks. On the complex -level, columns and individual fields can be named for easier -referencing in formulas, individual named fields can have their own -formula associated with them, and recalculation can be automated. +The table editor makes use of the Emacs @file{calc} package to +implement spreadsheet-like capabilities. Org-mode has two levels of +complexity for table calculations. On the basic level, tables do only +horizontal computations, so a field can be computed from other fields +@emph{in the same row}, and Org-mode assumes that there is only one +formula for each column. This is very efficient to work with and +enough for many tasks. On the complex level, columns and individual +fields can be named for easier referencing in formulas, individual +named fields can have their own formula associated with them, and +recalculation can be automated. @menu * Formula syntax:: How to write a formula @@ -859,8 +868,8 @@ string consists of flags to influence calc's modes@footnote{By default, Org-mode uses the standard calc modes (precision 12, angular units degrees, fraction and symbolic modes off). However, the display -format which has been changed to @code{(float 5)} to keep tables -compact. The default settings can be configured using the variable +format has been changed to @code{(float 5)} to keep tables compact. +The default settings can be configured using the variable @code{org-calc-default-modes}.} during execution, e.g. @samp{p20} to switch the internal precision to 20 digits, @samp{n3}, @samp{s3}, @samp{e2} or @samp{f4} to switch to normal, scientific, engineering, @@ -1357,8 +1366,9 @@ @end lisp @cindex completion, of TODO keywords +Changing these variables becomes only effective in a new Emacs session. With this setup, the command @kbd{C-c C-t} will cycle an entry from -TODO to FEEDBACK, then to VERIFY, and finally too DONE. You may also +TODO to FEEDBACK, then to VERIFY, and finally to DONE. You may also use a prefix argument to quickly select a specific state. For example @kbd{C-3 C-c C-t} will change the state immediately to VERIFY. If you define many keywords, you can use in-buffer completion (see @@ -1388,7 +1398,7 @@ command @kbd{C-c C-t} is changed slightly@footnote{This is also true for the @kbd{t} command in the timeline and agenda buffers.}. When used several times in succession, it will still cycle through all -names. But when when you return to the item after some time and +names. But when you return to the item after some time and execute @kbd{C-c C-t} again, it will switch from each name directly to DONE. Use prefix arguments or completion to quickly select a specific name. @@ -1423,7 +1433,7 @@ changing one of these lines, use @kbd{C-c C-c} with the cursor still in the line to make the changes known to Org-mode@footnote{Org-mode parses these lines only when Org-mode is activated after visiting a -file. @kbd{C-c C-c} with the cursor in a line starting with @samp{#-} +file. @kbd{C-c C-c} with the cursor in a line starting with @samp{#+} is simply restarting Org-mode, making sure that these changes will be respected.}. @@ -1565,6 +1575,11 @@ Like @kbd{C-c .}, but use the alternative format which contains date and time. +@kindex C-c ! +@item C-c ! +Like @kbd{C-c .}, but insert an inactive time stamp not triggering the +agenda. + @kindex C-c < @item C-c < Insert a time stamp corresponding to the cursor date in the Calendar. @@ -2171,15 +2186,15 @@ @kindex C-c C-x h @item C-c C-x h Export as HTML file @file{myfile.html}. -@kindex C-c C-x C-h -@item C-c C-x C-h +@kindex C-c C-x b +@item C-c C-x b Export as HTML file and open it with a browser. @kindex C-c C-x t @item C-c C-x t Insert template with export options, see below. @kindex C-c : @item C-c : -Toggle fixed-width for line or region, see below. +Toggle fixed-width for entry (QUOTE) or region, see below. @end table @node HTML formatting, Export options, Export commands, Exporting @@ -2242,7 +2257,7 @@ additional information. These lines may be put anywhere in the file. The whole set of lines can be inserted into the buffer with @kbd{C-c C-x t}. For individual lines, a good way to make sure the keyword is -correct it to type @samp{#+} and then use @kbd{M-@key{TAB}} completion +correct is to type @samp{#+} and then use @kbd{M-@key{TAB}} completion (@pxref{Completion}). @example @@ -2304,6 +2319,7 @@ * Customization:: Adapting Org-mode to your taste * FAQ:: Frequently asked questions * Interaction:: Other Emacs packages +* TTY keys:: Using Org-mode on a tty * Bugs:: Things which do not work perfectly * Acknowledgments:: These people provided feedback and more @end menu @@ -2436,7 +2452,7 @@ @end enumerate -@node Interaction, Bugs, FAQ, Miscellaneous +@node Interaction, TTY keys, FAQ, Miscellaneous @section Interaction with other packages @cindex packages, interaction with other Org-mode can cooperate with the following packages: @@ -2498,7 +2514,44 @@ on the diary support of planner. @end table -@node Bugs, Acknowledgments, Interaction, Miscellaneous +@node TTY keys, Bugs, Interaction, Miscellaneous +@section Using org-mode on a tty + +Org-mode uses a number of keys that are not accessible on a tty. This +applies to most special keys like cursor keys, @key{TAB} and +@key{RET}, when these are combined with modifier keys like @key{Meta} +and/or @key{Shift}. Org-mode uses these bindings because it needs to +provide keys for a large number of commands, and because these keys +appeared particularly easy to remember. In order to still be able to +access the core functionality of Org-mode on a tty, alternative +bindings are provided. Here is a complete list of these bindings, +which are obviously more cumbersome to use. Note that sometimes a +work-around can be better. For example changing a time stamp is +really only fun with @kbd{S-@key{cursor}} keys. On a tty you would +rather use @kbd{C-c .} to re-insert the timestamp. + +@page +@multitable @columnfractions 0.15 0.2 0.2 +@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2} +@item @kbd{S-@key{TAB}} @tab @kbd{C-u @key{TAB}} @tab +@item @kbd{M-@key{left}} @tab @kbd{C-c C-x l} @tab @kbd{@key{Esc} @key{left}} +@item @kbd{M-S-@key{left}} @tab @kbd{C-c C-x L} @tab +@item @kbd{M-@key{right}} @tab @kbd{C-c C-x r} @tab @kbd{@key{Esc} @key{right}} +@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R} @tab +@item @kbd{M-@key{up}} @tab @kbd{C-c C-x u} @tab @kbd{@key{Esc} @key{up}} +@item @kbd{M-S-@key{up}} @tab @kbd{C-c C-x U} @tab +@item @kbd{M-@key{down}} @tab @kbd{C-c C-x d} @tab @kbd{@key{Esc} @key{down}} +@item @kbd{M-S-@key{down}} @tab @kbd{C-c C-x D} @tab +@item @kbd{S-@key{RET}} @tab @kbd{C-c C-x c} @tab +@item @kbd{M-@key{RET}} @tab @kbd{C-c C-x m} @tab @kbd{@key{Esc} @key{RET}} +@item @kbd{M-S-@key{RET}} @tab @kbd{C-c C-x M} @tab +@item @kbd{S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab +@item @kbd{S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab +@item @kbd{S-@key{up}} @tab @kbd{C-c C-x @key{up}} @tab +@item @kbd{S-@key{down}} @tab @kbd{C-c C-x @key{down}} @tab +@end multitable + +@node Bugs, Acknowledgments, TTY keys, Miscellaneous @section Bugs @cindex bugs @@ -2514,13 +2567,21 @@ normal text. Also, @code{fill-region} does bypass the @code{fill-paragraph} code and will fill tables like normal text. @item +Text in an entry protected with the @samp{QUOTE} keyword should not +autowrap. +@item When the application called by @kbd{C-c C-o} to open a file link fails (for example because the application does not exits or refuses to open the file), it does so silently. No error message is displayed. @item +The remote-editing commands in the agenda buffer cannot be undone with +@code{undo} called from within the agenda buffer. But you can go to +the corresponding buffer (using @key{TAB} or @key{RET} and execute +@code{undo} there. +@item Recalculating a table line applies the formulas from left to right. -If a formula calculated fields further down the row, multiple -recalculation may be needed to get all fields consistent. +If a formula uses @emph{calculated} fields further down the row, +multiple recalculation may be needed to get all fields consistent. @item Under XEmacs, if Org-mode entries are included into the diary, it is not possible to jump back from the diary to the org file. Apparently, @@ -2592,6 +2653,9 @@ @item Kai Grossjohann pointed out that a number of key bindings in Org-mode conflict with other packages. +@item +Roland Winkler pointed out that additional keybindings are need to use +Org-mode on a tty. @end itemize @node Index, Key Index, Miscellaneous, Top diff -r 7a3090aca393 -r 2a679c81f552 man/pcl-cvs.texi --- a/man/pcl-cvs.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/pcl-cvs.texi Sun Oct 09 20:00:17 2005 +0000 @@ -11,7 +11,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU diff -r 7a3090aca393 -r 2a679c81f552 man/pgg.texi --- a/man/pgg.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/pgg.texi Sun Oct 09 20:00:17 2005 +0000 @@ -13,7 +13,7 @@ @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 +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 diff -r 7a3090aca393 -r 2a679c81f552 man/reftex.texi --- a/man/reftex.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/reftex.texi Sun Oct 09 20:00:17 2005 +0000 @@ -7,9 +7,9 @@ @syncodeindex fn cp @c Version and Contact Info -@set VERSION 4.28 -@set EDITION 4.28 -@set DATE May 2005 +@set VERSION 4.30 +@set EDITION 4.30 +@set DATE September 2005 @set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site} @set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage} @set MAINTAINER Carsten Dominik @@ -25,12 +25,11 @@ This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for @b{Ref@TeX{}} @value{VERSION} -Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, - 2005 Free Software Foundation, Inc. +Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005 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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the @@ -154,7 +153,7 @@ * Citation Info:: View the corresponding database entry. * Chapterbib and Bibunits:: Multiple bibliographies in a Document. * Citations Outside LaTeX:: How to make citations in Emails etc. -* BibTeX Database Subsets:: Extract parts of a big database. +* BibTeX Database Subsets:: Extract parts of a big database. Index Support @@ -1669,7 +1668,7 @@ * Citation Info:: View the corresponding database entry. * Chapterbib and Bibunits:: Multiple bibliographies in a Document. * Citations Outside LaTeX:: How to make citations in Emails etc. -* BibTeX Database Subsets:: Extract parts of a big database. +* BibTeX Database Subsets:: Extract parts of a big database. @end menu @node Creating Citations, Citation Styles, , Citations @@ -1773,12 +1772,12 @@ @item e Create a new BibTeX database file which contains all @i{marked} entries in the selection buffer. If no entries are marked, all entries are -selected. +selected. @item E Create a new BibTeX database file which contains all @i{unmarked} entries in the selection buffer. If no entries are marked, all entries -are selected. +are selected. @item @key{TAB} Enter a citation key with completion. This may also be a key which does @@ -3212,7 +3211,7 @@ Before calling a @b{Ref@TeX{}} function, the style hook should always test for the availability of the function, so that the style file will -also work for people who do not use @b{Ref@TeX{}}. +also work for people who do not use @b{Ref@TeX{}}. Additions made with style files in the way described below remain local to the current document. For example, if one package uses AMSTeX, the @@ -3493,7 +3492,7 @@ @b{Ref@TeX{}} was written by @i{Carsten Dominik} @email{dominik@@science.uva.nl}, with contributions by @i{Stephen -Eglen}. @b{Ref@TeX{}} is currently maintained by +Eglen}. @b{Ref@TeX{}} is currently maintained by @noindent Carsten Dominik <dominik@@science.uva.nl> @@ -3713,7 +3712,7 @@ Create a new BibTeX database file with all entries referenced in document. The command prompts for a filename and writes the collected entries to that file. Only entries referenced in the current document with -any @code{\cite}-like macros are used. +any @code{\cite}-like macros are used. The sequence in the new file is the same as it was in the old database. @end deffn @@ -3818,7 +3817,7 @@ ordinary TOC window), the automatic recentering is turned on. When the frame gets destroyed, automatic recentering is turned off again. -This feature can be turned on and off from the menu +This feature can be turned on and off from the menu (Ref->Options). @end defopt @@ -3928,7 +3927,7 @@ This may also be a function to do local parsing and identify point to be in a non-standard label environment. The function must take an argument @var{bound} and limit backward searches to this value. It -should return either @code{nil} or a cons cell @code{(@var{function} +should return either nil or a cons cell @code{(@var{function} . @var{position})} with the function symbol and the position where the special environment starts. See the Info documentation for an example. @@ -4085,7 +4084,7 @@ default does parse around each label to detect the correct label type, but this process can be slow when a document contains thousands of labels. If you use label prefixes consistently, you may speed up -document parsing by setting this variable to a non-@code{nil} value. RefTeX +document parsing by setting this variable to a non-nil value. RefTeX will then compare the label prefix with the prefixes found in `reftex-label-alist' and derive the correct label type in this way. Possible values for this option are: @@ -4094,7 +4093,7 @@ t @r{This means to trust any label prefixes found.} regexp @r{If a regexp, only prefixes matched by the regexp are trusted.} list @r{List of accepted prefixes, as strings. The colon is part of} - @r{the prefix, e.g. ("fn:" "eqn:" "item:").} + @r{the prefix, e.g. ("fn:" "eqn:" "item:").} nil @r{Never trust a label prefix.} @end example The only disadvantage of using this feature is that the label context @@ -4650,7 +4649,7 @@ @defopt reftex-index-verify-function A function which is called at each match during global indexing. -If the function returns @code{nil}, the current match is skipped. +If the function returns nil, the current match is skipped. @end defopt @defopt reftex-index-phrases-skip-indexed-matches @@ -4770,10 +4769,10 @@ @defopt reftex-revisit-to-echo Non-@code{nil} means, automatic citation display will revisit files if -necessary. When @code{nil}, citation display in echo area will only -be active for cached echo strings (see @code{reftex-cache-cite-echo}), -or for BibTeX database files which are already visited by a live -associated buffers. +necessary. When nil, citation display in echo area will only be active +for cached echo strings (see @code{reftex-cache-cite-echo}), or for +BibTeX database files which are already visited by a live associated +buffers. @end defopt @defopt reftex-cache-cite-echo @@ -5114,7 +5113,7 @@ @defopt reftex-revisit-to-follow Non-@code{nil} means, follow-mode will revisit files if necessary. -When @code{nil}, follow-mode will be suspended for stuff in unvisited files. +When nil, follow-mode will be suspended for stuff in unvisited files. @end defopt @defopt reftex-allow-detached-macro-args @@ -5178,11 +5177,11 @@ @noindent @b{Version 4.24} @itemize @bullet -@item +@item Inserting citation commands now prompts for optional arguments when called with a prefix argument. Related new options are @code{reftex-cite-prompt-optional-args} and -@code{reftex-cite-cleanup-optional-args}. +@code{reftex-cite-cleanup-optional-args}. @item New option @code{reftex-trust-label-prefix}. Configure this variable if you'd like RefTeX to base its classification of labels on prefixes. @@ -5190,7 +5189,7 @@ quality of the context used by RefTeX to describe a label. @item Fixed bug in @code{reftex-create-bibtex-file} when @code{reftex-comment-citations} -is non-@code{nil}. +is non-nil. @item Fixed bugs in indexing: Case-sensitive search, quotes before and/or after words. Disabbled indexing in comment lines. @@ -5198,7 +5197,7 @@ @noindent @b{Version 4.22} @itemize @bullet -@item +@item New command @code{reftex-create-bibtex-file} to create a new database with all entries referenced in the current document. @item @@ -5208,7 +5207,7 @@ @noindent @b{Version 4.21} @itemize @bullet -@item +@item Renaming labels from the toc buffer with key @kbd{M-%}. @end itemize @@ -5424,7 +5423,7 @@ document, all labels and associated context. New keys @kbd{i}, @kbd{l}, and @kbd{c}. New options @code{reftex-toc-include-labels}, @code{reftex-toc-include-context}, -@code{reftex-toc-include-file-boundaries}. +@code{reftex-toc-include-file-boundaries}. @end itemize @noindent @b{Version 3.41} @@ -5537,7 +5536,7 @@ @kbd{M-x reftex-reset-mode} now also removes the file with parsing info. @item -Default of @code{reftex-revisit-to-follow} changed to @code{nil}. +Default of @code{reftex-revisit-to-follow} changed to nil. @end itemize @noindent @b{Version 3.24} diff -r 7a3090aca393 -r 2a679c81f552 man/sc.texi --- a/man/sc.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/sc.texi Sun Oct 09 20:00:17 2005 +0000 @@ -20,7 +20,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/search.texi --- a/man/search.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/search.texi Sun Oct 09 20:00:17 2005 +0000 @@ -464,9 +464,12 @@ defaults. They also have separate search rings that you can access with @kbd{M-p} and @kbd{M-n}. +@vindex search-whitespace-regexp If you type @key{SPC} in incremental regexp search, it matches any -sequence of whitespace characters, including newlines. If you want -to match just a space, type @kbd{C-q @key{SPC}}. +sequence of whitespace characters, including newlines. If you want to +match just a space, type @kbd{C-q @key{SPC}}. You can control what a +bare spece matches by setting the variable +@code{search-whitespace-regexp} to the desired regexp. Note that adding characters to the regexp in an incremental regexp search can make the cursor move back and start again. For example, if diff -r 7a3090aca393 -r 2a679c81f552 man/ses.texi --- a/man/ses.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/ses.texi Sun Oct 09 20:00:17 2005 +0000 @@ -15,7 +15,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/sieve.texi --- a/man/sieve.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/sieve.texi Sun Oct 09 20:00:17 2005 +0000 @@ -13,7 +13,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/smtpmail.texi --- a/man/smtpmail.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/smtpmail.texi Sun Oct 09 20:00:17 2005 +0000 @@ -7,7 +7,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the license diff -r 7a3090aca393 -r 2a679c81f552 man/speedbar.texi --- a/man/speedbar.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/speedbar.texi Sun Oct 09 20:00:17 2005 +0000 @@ -10,7 +10,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU @@ -591,9 +591,10 @@ key bindings and visuals, but will have specialized behaviors. @menu -* RMAIL:: Managing folders in speedbar -* Info:: Browsing topics in speedbar -* GDB:: Managing the current stack trace in speedbar +* RMAIL:: Managing folders. +* Info:: Browsing topics. +* GDB:: Watching expressions or managing the current + stack trace. @end menu @node RMAIL, Info, Minor Modes, Minor Modes @@ -639,7 +640,15 @@ @cindex gdb @cindex gud -If you are debugging an application with GDB in Emacs, speedbar can show +You can debug an application with GDB in Emacs using graphical mode or +text command mode (@pxref{GDB Graphical Interface,,, emacs, The +extensible self-documenting text editor}). + +If you are using graphical mode you can see how selected variables +change each time your program stops (@pxref{Watch Expressions,,, +emacs, The extensible self-documenting text editor}). + +If you are using text command mode, speedbar can show you the current stack when the current buffer is the @file{*gdb*} buffer. Usually, it will just report that there is no stack, but when the application is stopped, the current stack will be shown. diff -r 7a3090aca393 -r 2a679c81f552 man/text.texi --- a/man/text.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/text.texi Sun Oct 09 20:00:17 2005 +0000 @@ -266,10 +266,11 @@ @kbd{M-@{} moves to the beginning of the current or previous paragraph, while @kbd{M-@}} moves to the end of the current or next paragraph. Blank lines and text-formatter command lines separate -paragraphs and are not considered part of any paragraph. In Indented -Text mode, but not in Text mode, an indented line also starts a new -paragraph. If there is a blank line before the paragraph, @kbd{M-@{} -moves to the blank line, because that is convenient in practice. +paragraphs and are not considered part of any paragraph. In +Paragraph-Indent Text mode, but not in Text mode, an indented line +also starts a new paragraph. If there is a blank line before the +paragraph, @kbd{M-@{} moves to the blank line, because that is +convenient in practice. In major modes for programs, paragraphs begin and end only at blank lines. This makes the paragraph commands continue to be useful even diff -r 7a3090aca393 -r 2a679c81f552 man/tramp.texi --- a/man/tramp.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/tramp.texi Sun Oct 09 20:00:17 2005 +0000 @@ -30,7 +30,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/url.texi --- a/man/url.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/url.texi Sun Oct 09 20:00:17 2005 +0000 @@ -26,7 +26,7 @@ Copyright (C) 1993, 1994, 1995, 1996 William M. Perry Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU GENERAL PUBLIC LICENSE''. A copy of the @@ -55,7 +55,7 @@ 2005 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU GENERAL PUBLIC LICENSE''. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/vip.texi --- a/man/vip.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/vip.texi Sun Oct 09 20:00:17 2005 +0000 @@ -9,7 +9,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/viper.texi --- a/man/viper.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/viper.texi Sun Oct 09 20:00:17 2005 +0000 @@ -12,7 +12,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 man/widget.texi --- a/man/widget.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/widget.texi Sun Oct 09 20:00:17 2005 +0000 @@ -14,7 +14,7 @@ @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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU diff -r 7a3090aca393 -r 2a679c81f552 man/woman.texi --- a/man/woman.texi Mon Sep 19 21:25:51 2005 +0000 +++ b/man/woman.texi Sun Oct 09 20:00:17 2005 +0000 @@ -22,7 +22,7 @@ @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 +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 the Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the diff -r 7a3090aca393 -r 2a679c81f552 nt/emacs.rc --- a/nt/emacs.rc Mon Sep 19 21:25:51 2005 +0000 +++ b/nt/emacs.rc Sun Oct 09 20:00:17 2005 +0000 @@ -6,8 +6,8 @@ #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 21,3,50,0 - PRODUCTVERSION 21,3,50,0 + FILEVERSION 22,0,50,0 + PRODUCTVERSION 22,0,50,0 FILEFLAGSMASK 0x3FL #ifdef EMACSDEBUG FILEFLAGS 0x1L @@ -24,12 +24,12 @@ BEGIN VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "GNU Emacs for Windows NT/95/98/2000/ME/XP\0" - VALUE "FileVersion", "21, 3, 50, 0\0" + VALUE "FileVersion", "22, 0, 50, 0\0" VALUE "InternalName", "Emacs\0" VALUE "LegalCopyright", "Copyright (C) 2002, 2003, 2004, 2005\0" VALUE "OriginalFilename", "emacs.exe" VALUE "ProductName", "Emacs: The extensible self-documenting text editor\0" - VALUE "ProductVersion", "21, 3, 50, 0\0" + VALUE "ProductVersion", "22, 0, 50, 0\0" VALUE "OLESelfRegister", "\0" END END diff -r 7a3090aca393 -r 2a679c81f552 src/.cvsignore --- a/src/.cvsignore Mon Sep 19 21:25:51 2005 +0000 +++ b/src/.cvsignore Sun Oct 09 20:00:17 2005 +0000 @@ -3,6 +3,7 @@ *.pdb .gdb_history Makefile +makefile Makefile.c TAGS-LISP _gdbinit diff -r 7a3090aca393 -r 2a679c81f552 src/ChangeLog --- a/src/ChangeLog Mon Sep 19 21:25:51 2005 +0000 +++ b/src/ChangeLog Sun Oct 09 20:00:17 2005 +0000 @@ -1,3 +1,225 @@ +2005-10-04 Kim F. Storm <storm@cua.dk> + + * window.c (window_split_tree): New function. + (Fwindow_split_tree): New defun. + (syms_of_window): Defsubr it. + +2005-10-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macterm.c (mac_invert_rectangle): New function. + (XTflash): Use it. + +2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca> + + * regex.h (re_char): Don't expose it in the interface. + (re_set_whitespace_regexp): Adjust the arg's type to not use it. + + * regex.c (re_char): Move it back here. + (re_set_whitespace_regexp): Change the arg's type to not use it. + + * keyboard.c (make_lispy_event): If point has moved between down and up + event, make it a drag, not a click, to mirror what + mouse-drag-region expects. + +2005-10-02 Dan Nicolaescu <dann@ics.uci.edu> + + * lisp.h (fatal): Undo previous change. + * term.c (fatal): Undo previous change. + +2005-10-01 Richard M. Stallman <rms@gnu.org> + + * xfaces.c (face_color_gray_p): Colors close to black count as gray. + +2005-10-01 Kim F. Storm <storm@cua.dk> + + * xdisp.c (try_window): Skip scroll-margin check if ZV is visible. + +2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * keyboard.c (init_keyboard) [MAC_OSX]: Don't install SIGINT handler. + + * macfns.c (start_hourglass): Apply 2005-05-07 change for xfns.c. + (x_create_tip_frame) [GLYPH_DEBUG]: Uncomment debug code. + (Fx_create_frame, x_create_tip_frame) [USE_ATSUI]: + Try ATSUI-compatible 12pt Monaco font first. + + * macgui.h (struct _XCharStruct): New member valid_p. + (STORE_XCHARSTRUCT): Set valid_p. + (struct MacFontStruct) [USE_ATSUI]: New member mac_style. + + * macterm.c (mac_draw_string_common, x_per_char_metric) + (mac_compute_glyph_string_overhangs, init_font_name_table) + (XLoadQueryFont, mac_unload_font) [USE_ATSUI]: Add ATSUI support. + (atsu_get_text_layout_with_text_ptr) [USE_ATSUI]: New function. + (x_draw_glyph_string_background) + (x_draw_glyph_string_foreground) [MAC_OS8 && USE_ATSUI]: Don't use + XDrawImageString. Always draw background and foreground separately. + (x_draw_glyph_string_foreground) [USE_ATSUI]: Don't use 8-bit + functions for one-byte chars when using ATSUI-compatible fonts. + (atsu_font_id_hash) [USE_ATSUI]: New variable. + (syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it. + (XLoadQueryFont): Set min_byte1, max_byte1, min_char_or_byte2, and + max_char_or_byte2 more in detail. + (quit_char_comp, mac_check_for_quit_char) [MAC_OSX]: Remove functions. + +2005-09-30 Dan Nicolaescu <dann@ics.uci.edu> + + * image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct type. + * xterm.c (handle_one_xevent, handle_one_xevent): Likewise. + + * unexelf.c (fatal): Fix prototype. + + * term.c (fatal): Implement using varargs. + + * regex.c (re_char): Move typedef ... + * regex.h (re_char): ... here. + (re_iswctype, re_wctype, re_set_whitespace_regexp): New prototypes. + + * emacs.c (malloc_set_state): Fix return type. + (endif): Fix type. + + * lisp.h (fatal): Add argument types. + + * dispextern.h (fatal): Delete prototype. + + * systime.h: (make_time): Prototype moved from ... + * editfns.c (make_time): ... here. + + * editfns.c: Move systime.h include after lisp.h. + * dired.c: + * xsmfns.c: + * process.c: Likewise. + + * alloc.c (old_malloc_hook, old_realloc_hook, old_realloc_hook): + Add parameter types. + (__malloc_hook, __realloc_hook, __free_hook): Fix prototypes. + (emacs_blocked_free): Change definition to match __free_hook. + (emacs_blocked_malloc): Change definition to match __malloc_hook. + (emacs_blocked_realloc): Change definition to match __realloc_hook. + +2005-09-30 Romain Francoise <romain@orebokech.com> + + * minibuf.c (Fread_buffer): Follow convention for reading from the + minibuffer with a default value. Doc fix. + +2005-09-29 Juri Linkov <juri@jurta.org> + + * editfns.c (Fmessage, Fmessage_box, Fmessage_or_box): + Rename argument name `string' to `format-string'. + (Fformat): Doc fix. + +2005-09-28 Kim F. Storm <storm@cua.dk> + + * image.c (gif_load): Fix size of allocated image buffer + for images where a sub-image may be larger than the image's + total height/width specifications. + +2005-09-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macgui.h (struct _XCharStruct): Each member now takes short value. + +2005-09-27 Dan Nicolaescu <dann@ics.uci.edu> + + * xfaces.c (lookup_derived_face): Add parameter type. + + * xdisp.c (cursor_row_fully_visible_p): Add parameter type. + + * marker.c (verify_bytepos): Add parameter type. + + * process.c (get_operating_system_release): Move prototype ... + + * systime.h (get_operating_system_release): ... here. + + * xterm.c (set_vertical_scroll_bar): Move prototype ... + (handle_one_xevent): Refer to union field to match the type + required by the function definition. + + * xterm.h: ... here. + + * fns.c (internal_equal, seed_random): Fix prototypes. + (internal_equal): Add missing parameter. + +2005-09-25 Richard M. Stallman <rms@gnu.org> + + * keyboard.c (update_menu_bindings): Variable deleted. + (syms_of_keyboard): Don't defvar it. + (parse_menu_item): Don't test it. + +2005-09-23 Richard M. Stallman <rms@gnu.org> + + * editfns.c (Fformat): Explicitly test for end of format string + and don't use `index'. + +2005-09-23 Dan Nicolaescu <dann@ics.uci.edu> + + * s/aix4-2.h (BROKEN_GET_CURRENT_DIR_NAME): + Define BROKEN_GET_CURRENT_DIR_NAME. + + * sysdep.c (get_current_dir_name): Also define if + BROKEN_GET_CURRENT_DIR_NAME. + + * m/ibmrs6000.h: Test for USG5, not USG5_4. + +2005-09-22 Kim F. Storm <storm@cua.dk> + + * xdisp.c (message_dolog): Add warning about GC and Lisp strings. + (message2): Fix commentary. Ok to use alloca'ed memory. + Still not ok to use Lisp string data (because of GC). + (set_message): Add comment why GC cannot happen. + +2005-09-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * macterm.c (xlfdpat_block_match_1): Fix assertion. + (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't add style + variants for a scalable font multiple times. + +2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * process.c (create_process) [RTU || UNIPLUS || DONT_REOPEN_PTY]: + Setup slave tty options before forking. + +2005-09-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> + + * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program + positions have been set for the frame (as is done for frames in + special-display-buffer-names). + +2005-09-19 Kim F. Storm <storm@cua.dk> + + * editfns.c (Fformat): Don't scan past end of format string that + ends in %. Reported by: Johan Bockg,Ae(Brd. + +2005-09-18 Andreas Schwab <schwab@suse.de> + + * window.h (struct window): Remove height_fixed_p, no longer set. + + * window.c (make_window): Don't initialize height_fixed_p. + (window_fixed_size_p): Don't use it. + +2005-09-18 John Paul Wallington <jpw@pobox.com> + + * data.c (Fdefalias): Signal an error if SYMBOL is not a symbol. + +2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> + + * Makefile.in (SOME_MACHINE_OBJECTS): Undo previous change. + + * macfns.c (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]: + New variables. + [TARGET_API_MAC_CARBON] (Fx_file_dialog): Don't allow multiple + file selection. + + * sysdep.c [MAC_OS8]: Don't include stdlib.h. Include sys/param.h. + +2005-09-17 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (XMENU_OBJ) [!HAVE_CARBON]: Reinstate variable. + (obj): Use XMENU_OBJ, not a literal xmenu.o. + +2005-09-16 Romain Francoise <romain@orebokech.com> + + * fileio.c (syms_of_fileio) <write-region-inhibit-fsync>: Doc fix. + 2005-09-15 Richard M. Stallman <rms@gnu.org> * xdisp.c (overlay_arrow_at_row): Add HAVE_WINDOW_SYSTEM conditional. diff -r 7a3090aca393 -r 2a679c81f552 src/Makefile.in --- a/src/Makefile.in Mon Sep 19 21:25:51 2005 +0000 +++ b/src/Makefile.in Sun Oct 09 20:00:17 2005 +0000 @@ -304,6 +304,11 @@ #define LIB_X11_LIB -lX11 #endif +/* xmenu.c should not be compiled on OSX. */ +#ifndef HAVE_CARBON +XMENU_OBJ = xmenu.o +#endif + #ifdef HAVE_X_WINDOWS XOBJ= xterm.o xfns.o xselect.o xrdb.o fontset.o xsmfns.o fringe.o image.o @@ -570,7 +575,7 @@ /* lastfile must follow all files whose initialized data areas should be dumped as pure by dump-emacs. */ -obj= dispnew.o frame.o scroll.o xdisp.o xmenu.o window.o \ +obj= dispnew.o frame.o scroll.o xdisp.o $(XMENU_OBJ) window.o \ charset.o coding.o category.o ccl.o \ cm.o term.o xfaces.o $(XOBJ) $(GTK_OBJ)\ emacs.o keyboard.o macros.o keymap.o sysdep.o \ @@ -589,7 +594,7 @@ These go in the DOC file on all machines in case they are needed there. */ SOME_MACHINE_OBJECTS = sunfns.o dosfns.o msdos.o \ - xterm.o xfns.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ + xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o \ w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o \ w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o diff -r 7a3090aca393 -r 2a679c81f552 src/alloc.c --- a/src/alloc.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/alloc.c Sun Oct 09 20:00:17 2005 +0000 @@ -548,6 +548,21 @@ return (spare_memory ? Qnil : Qt); } +/* If we released our reserve (due to running out of memory), + and we have a fair amount free once again, + try to set aside another reserve in case we run out once more. + + This is called when a relocatable block is freed in ralloc.c. */ + +void +refill_memory_reserve () +{ +#ifndef SYSTEM_MALLOC + if (spare_memory == 0) + spare_memory = (char *) malloc ((size_t) SPARE_MEMORY); +#endif +} + /* Called if we can't allocate relocatable space for a buffer. */ void @@ -1135,20 +1150,6 @@ #ifndef SYSTEM_MALLOC -/* If we released our reserve (due to running out of memory), - and we have a fair amount free once again, - try to set aside another reserve in case we run out once more. - - This is called when a relocatable block is freed in ralloc.c. */ - -void -refill_memory_reserve () -{ - if (spare_memory == 0) - spare_memory = (char *) malloc ((size_t) SPARE_MEMORY); -} - - /* Arranging to disable input signals while we're in malloc. This only works with GNU malloc. To help out systems which can't @@ -1162,20 +1163,21 @@ #ifndef SYNC_INPUT #ifndef DOUG_LEA_MALLOC -extern void * (*__malloc_hook) P_ ((size_t)); -extern void * (*__realloc_hook) P_ ((void *, size_t)); -extern void (*__free_hook) P_ ((void *)); +extern void * (*__malloc_hook) P_ ((size_t, const void *)); +extern void * (*__realloc_hook) P_ ((void *, size_t, const void *)); +extern void (*__free_hook) P_ ((void *, const void *)); /* Else declared in malloc.h, perhaps with an extra arg. */ #endif /* DOUG_LEA_MALLOC */ -static void * (*old_malloc_hook) (); -static void * (*old_realloc_hook) (); -static void (*old_free_hook) (); +static void * (*old_malloc_hook) P_ ((size_t, const void *)); +static void * (*old_realloc_hook) P_ ((void *, size_t, const void*)); +static void (*old_free_hook) P_ ((void*, const void*)); /* This function is used as the hook for free to call. */ static void -emacs_blocked_free (ptr) +emacs_blocked_free (ptr, ptr2) void *ptr; + const void *ptr2; { BLOCK_INPUT_ALLOC; @@ -1222,8 +1224,9 @@ /* This function is the malloc hook that Emacs uses. */ static void * -emacs_blocked_malloc (size) +emacs_blocked_malloc (size, ptr) size_t size; + const void *ptr; { void *value; @@ -1269,9 +1272,10 @@ /* This function is the realloc hook that Emacs uses. */ static void * -emacs_blocked_realloc (ptr, size) +emacs_blocked_realloc (ptr, size, ptr2) void *ptr; size_t size; + const void *ptr2; { void *value; diff -r 7a3090aca393 -r 2a679c81f552 src/data.c --- a/src/data.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/data.c Sun Oct 09 20:00:17 2005 +0000 @@ -720,6 +720,7 @@ (symbol, definition, docstring) register Lisp_Object symbol, definition, docstring; { + CHECK_SYMBOL (symbol); if (CONSP (XSYMBOL (symbol)->function) && EQ (XCAR (XSYMBOL (symbol)->function), Qautoload)) LOADHIST_ATTACH (Fcons (Qt, symbol)); diff -r 7a3090aca393 -r 2a679c81f552 src/dired.c --- a/src/dired.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/dired.c Sun Oct 09 20:00:17 2005 +0000 @@ -33,7 +33,6 @@ #include <grp.h> #endif -#include "systime.h" #include <errno.h> #ifdef VMS @@ -93,6 +92,7 @@ #endif #include "lisp.h" +#include "systime.h" #include "buffer.h" #include "commands.h" #include "charset.h" diff -r 7a3090aca393 -r 2a679c81f552 src/dispextern.h --- a/src/dispextern.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/dispextern.h Sun Oct 09 20:00:17 2005 +0000 @@ -2936,7 +2936,6 @@ extern struct device *init_initial_device P_ ((void)); extern struct device *init_tty P_ ((char *, char *, int)); extern void delete_tty P_ ((struct device *)); -extern void fatal P_ ((/* char *, ... */)); extern void cursor_to P_ ((struct frame *, int, int)); extern int tty_capable_p P_ ((struct tty_display_info *, unsigned, unsigned long, unsigned long)); extern void tty_set_terminal_modes P_ ((struct device *)); diff -r 7a3090aca393 -r 2a679c81f552 src/editfns.c --- a/src/editfns.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/editfns.c Sun Oct 09 20:00:17 2005 +0000 @@ -37,6 +37,8 @@ #include <sys/utsname.h> #endif +#include "lisp.h" + /* systime.h includes <sys/time.h> which, on some systems, is required for <sys/resource.h>; thus systime.h must be included before <sys/resource.h> */ @@ -48,7 +50,6 @@ #include <ctype.h> -#include "lisp.h" #include "intervals.h" #include "buffer.h" #include "charset.h" @@ -71,7 +72,6 @@ extern char **environ; #endif -extern Lisp_Object make_time P_ ((time_t)); extern size_t emacs_strftimeu P_ ((char *, size_t, const char *, const struct tm *, int)); static int tm_diff P_ ((struct tm *, struct tm *)); @@ -3124,7 +3124,7 @@ any existing message; this lets the minibuffer contents show. See also `current-message'. -usage: (message STRING &rest ARGS) */) +usage: (message FORMAT-STRING &rest ARGS) */) (nargs, args) int nargs; Lisp_Object *args; @@ -3154,7 +3154,7 @@ If the first argument is nil or the empty string, clear any existing message; let the minibuffer contents show. -usage: (message-box STRING &rest ARGS) */) +usage: (message-box FORMAT-STRING &rest ARGS) */) (nargs, args) int nargs; Lisp_Object *args; @@ -3216,7 +3216,7 @@ If the first argument is nil or the empty string, clear any existing message; let the minibuffer contents show. -usage: (message-or-box STRING &rest ARGS) */) +usage: (message-or-box FORMAT-STRING &rest ARGS) */) (nargs, args) int nargs; Lisp_Object *args; @@ -3281,8 +3281,8 @@ : SBYTES (STRING)) DEFUN ("format", Fformat, Sformat, 1, MANY, 0, - doc: /* Format a string out of a control-string and arguments. -The first argument is a control string. + doc: /* Format a string out of a format-string and arguments. +The first argument is a format control string. The other arguments are substituted into it to make the result, a string. It may contain %-sequences meaning to substitute the next argument. %s means print a string argument. Actually, prints any object, with `princ'. @@ -3424,7 +3424,9 @@ digits to print after the '.' for floats, or the max. number of chars to print from a string. */ - while (index ("-0# ", *format)) + while (format != end + && (*format == '-' || *format == '0' || *format == '#' + || * format == ' ')) ++format; if (*format >= '0' && *format <= '9') diff -r 7a3090aca393 -r 2a679c81f552 src/emacs.c --- a/src/emacs.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/emacs.c Sun Oct 09 20:00:17 2005 +0000 @@ -149,7 +149,7 @@ /* From glibc, a routine that returns a copy of the malloc internal state. */ extern void *malloc_get_state (); /* From glibc, a routine that overwrites the malloc internal state. */ -extern void malloc_set_state (); +extern int malloc_set_state (); /* Non-zero if the MALLOC_CHECK_ enviroment variable was set while dumping. Used to work around a bug in glibc's malloc. */ int malloc_using_checking; @@ -1002,7 +1002,7 @@ && !getrlimit (RLIMIT_STACK, &rlim)) { long newlim; - extern int re_max_failures; + extern size_t re_max_failures; /* Approximate the amount regex.c needs per unit of re_max_failures. */ int ratio = 20 * sizeof (char *); /* Then add 33% to cover the size of the smaller stacks that regex.c diff -r 7a3090aca393 -r 2a679c81f552 src/fileio.c --- a/src/fileio.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/fileio.c Sun Oct 09 20:00:17 2005 +0000 @@ -6751,8 +6751,9 @@ #ifdef HAVE_FSYNC DEFVAR_BOOL ("write-region-inhibit-fsync", &write_region_inhibit_fsync, - doc: /* *Non-nil means don't call fsync after saving files. -Enabling this variable may result in data loss! */); + doc: /* *Non-nil means don't call fsync in `write-region'. +This variable affects calls to `write-region' as well as save commands. +A non-nil value may result in data loss! */); write_region_inhibit_fsync = 0; #endif diff -r 7a3090aca393 -r 2a679c81f552 src/fns.c --- a/src/fns.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/fns.c Sun Oct 09 20:00:17 2005 +0000 @@ -78,10 +78,10 @@ extern Lisp_Object Qinput_method_function; -static int internal_equal (); +static int internal_equal P_ ((Lisp_Object , Lisp_Object, int, int)); extern long get_random (); -extern void seed_random (); +extern void seed_random P_ ((long)); #ifndef HAVE_UNISTD_H extern long time (); @@ -2251,7 +2251,7 @@ if (!internal_equal (OVERLAY_START (o1), OVERLAY_START (o2), depth + 1, props) || !internal_equal (OVERLAY_END (o1), OVERLAY_END (o2), - depth + 1)) + depth + 1, props)) return 0; o1 = XOVERLAY (o1)->plist; o2 = XOVERLAY (o2)->plist; diff -r 7a3090aca393 -r 2a679c81f552 src/gtkutil.c --- a/src/gtkutil.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/gtkutil.c Sun Oct 09 20:00:17 2005 +0000 @@ -554,6 +554,9 @@ if (!gtk_window_parse_geometry (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), geom_str)) fprintf (stderr, "Failed to parse: '%s'\n", geom_str); + } else if (f->size_hint_flags & PPosition) { + gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), + f->left_pos, f->top_pos); } } diff -r 7a3090aca393 -r 2a679c81f552 src/image.c --- a/src/image.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/image.c Sun Oct 09 20:00:17 2005 +0000 @@ -2178,7 +2178,7 @@ if (stat (file, &st) == 0 && (fp = fopen (file, "rb")) != NULL - && (buf = (char *) xmalloc (st.st_size), + && (buf = (unsigned char *) xmalloc (st.st_size), fread (buf, 1, st.st_size, fp) == st.st_size)) { *size = st.st_size; @@ -3029,7 +3029,7 @@ bytes_per_line = (*width + 7) / 8 + padding_p; nbytes = bytes_per_line * *height; - p = *data = (char *) xmalloc (nbytes); + p = *data = (unsigned char *) xmalloc (nbytes); if (v10) { @@ -7369,8 +7369,17 @@ return 0; } - width = img->width = max (gif->SWidth, gif->Image.Left + gif->Image.Width); - height = img->height = max (gif->SHeight, gif->Image.Top + gif->Image.Height); + image_top = gif->SavedImages[ino].ImageDesc.Top; + image_left = gif->SavedImages[ino].ImageDesc.Left; + image_width = gif->SavedImages[ino].ImageDesc.Width; + image_height = gif->SavedImages[ino].ImageDesc.Height; + + width = img->width = max (gif->SWidth, + max (gif->Image.Left + gif->Image.Width, + image_left + image_width)); + height = img->height = max (gif->SHeight, + max (gif->Image.Top + gif->Image.Height, + image_top + image_height)); /* Create the X image and pixmap. */ if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) @@ -7405,11 +7414,6 @@ requires more than can be done here (see the gif89 spec, disposal methods). Let's simply assume that the part not covered by a sub-image is in the frame's background color. */ - image_top = gif->SavedImages[ino].ImageDesc.Top; - image_left = gif->SavedImages[ino].ImageDesc.Left; - image_width = gif->SavedImages[ino].ImageDesc.Width; - image_height = gif->SavedImages[ino].ImageDesc.Height; - for (y = 0; y < image_top; ++y) for (x = 0; x < width; ++x) XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); diff -r 7a3090aca393 -r 2a679c81f552 src/keyboard.c --- a/src/keyboard.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/keyboard.c Sun Oct 09 20:00:17 2005 +0000 @@ -464,10 +464,6 @@ /* Nonzero if input is available. */ int input_pending; -/* Non-zero means force key bindings update in parse_menu_item. */ - -int update_menu_bindings; - extern char *pending_malloc_warning; /* Circular buffer for pre-read keyboard input. */ @@ -5565,13 +5561,23 @@ if (CONSP (down) && INTEGERP (XCAR (down)) && INTEGERP (XCDR (down))) { - xdiff = XFASTINT (event->x) - XFASTINT (XCAR (down)); - ydiff = XFASTINT (event->y) - XFASTINT (XCDR (down)); + xdiff = XINT (event->x) - XINT (XCAR (down)); + ydiff = XINT (event->y) - XINT (XCDR (down)); } if (xdiff < double_click_fuzz && xdiff > - double_click_fuzz - && ydiff < double_click_fuzz - && ydiff > - double_click_fuzz) + && ydiff < double_click_fuzz && ydiff > - double_click_fuzz + /* Maybe the mouse has moved a lot, caused scrolling, and + eventually ended up at the same screen position (but + not buffer position) in which case it is a drag, not + a click. */ + /* FIXME: OTOH if the buffer position has changed + because of a timer or process filter rather than + because of mouse movement, it should be considered as + a click. But mouse-drag-region completely ignores + this case and it hasn't caused any real problem, so + it's probably OK to ignore it as well. */ + && EQ (Fcar (Fcdr (start_pos)), Fcar (Fcdr (position)))) /* Mouse hasn't moved (much). */ event->modifiers |= click_modifier; else @@ -7528,9 +7534,7 @@ else def = AREF (item_properties, ITEM_PROPERTY_DEF); - if (!update_menu_bindings) - chkcache = 0; - else if (NILP (XCAR (cachelist))) /* Have no saved key. */ + if (NILP (XCAR (cachelist))) /* Have no saved key. */ { if (newcache /* Always check first time. */ /* Should we check everything when precomputing key @@ -10946,11 +10950,6 @@ poll_suppress_count = 1; start_polling (); #endif - -#ifdef MAC_OSX - /* At least provide an escape route since C-g doesn't work. */ - signal (SIGINT, interrupt_signal); -#endif } /* This type's only use is in syms_of_keyboard, to initialize the @@ -11675,12 +11674,6 @@ `disable-point-adjustment' (which see) to non-nil. */); Vglobal_disable_point_adjustment = Qnil; - DEFVAR_BOOL ("update-menu-bindings", &update_menu_bindings, - doc: /* Non-nil means updating menu bindings is allowed. -A value of nil means menu bindings should not be updated. -Used during Emacs' startup. */); - update_menu_bindings = 1; - DEFVAR_LISP ("minibuffer-message-timeout", &Vminibuffer_message_timeout, doc: /* *How long to display an echo-area message when the minibuffer is active. If the value is not a number, such messages don't time out. */); diff -r 7a3090aca393 -r 2a679c81f552 src/m/ibmrs6000.h --- a/src/m/ibmrs6000.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/m/ibmrs6000.h Sun Oct 09 20:00:17 2005 +0000 @@ -112,7 +112,7 @@ #define OBJECTS_MACHINE hftctl.o #endif -#ifndef USG5_4 +#ifndef USG5 #define C_SWITCH_MACHINE -D_BSD #endif diff -r 7a3090aca393 -r 2a679c81f552 src/macfns.c --- a/src/macfns.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/macfns.c Sun Oct 09 20:00:17 2005 +0000 @@ -94,6 +94,11 @@ extern Lisp_Object Vwindow_system_version; +#if GLYPH_DEBUG +int image_cache_refcount, dpyinfo_refcount; +#endif + + #if 0 /* Use xstricmp instead. */ /* compare two strings ignoring case */ @@ -2527,6 +2532,10 @@ } /* Try out a font which we hope has bold and italic variations. */ +#if USE_ATSUI + if (! STRINGP (font)) + font = x_new_font (f, "-*-monaco-medium-r-normal--12-*-*-*-*-*-iso10646-1"); +#endif if (! STRINGP (font)) font = x_new_font (f, "-ETL-fixed-medium-r-*--*-160-*-*-*-*-iso8859-1"); /* If those didn't work, look for something which will at least work. */ @@ -3335,6 +3344,10 @@ EMACS_TIME delay; int secs, usecs = 0; + /* Don't bother for ttys. */ + if (NILP (Vwindow_system)) + return; + cancel_hourglass (); if (INTEGERP (Vhourglass_delay) @@ -3581,7 +3594,7 @@ FRAME_FONTSET (f) = -1; f->icon_name = Qnil; -#if 0 /* GLYPH_DEBUG TODO: image support. */ +#if GLYPH_DEBUG image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount; dpyinfo_refcount = dpyinfo->reference_count; #endif /* GLYPH_DEBUG */ @@ -3625,6 +3638,10 @@ } /* Try out a font which we hope has bold and italic variations. */ +#if USE_ATSUI + if (! STRINGP (font)) + font = x_new_font (f, "-*-monaco-medium-r-normal--12-*-*-*-*-*-iso10646-1"); +#endif if (! STRINGP (font)) font = x_new_font (f, "-ETL-fixed-medium-r-*--*-160-*-*-*-*-iso8859-1"); /* If those didn't work, look for something which will at least work. */ @@ -4145,6 +4162,7 @@ options.optionFlags = kNavDefaultNavDlogOptions; options.optionFlags |= kNavAllFilesInPopup; /* All files allowed */ options.optionFlags |= kNavSelectAllReadableItem; + options.optionFlags &= ~kNavAllowMultipleFiles; if (!NILP(prompt)) { message = cfstring_create_with_string (prompt); diff -r 7a3090aca393 -r 2a679c81f552 src/macgui.h --- a/src/macgui.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/macgui.h Sun Oct 09 20:00:17 2005 +0000 @@ -95,11 +95,15 @@ /* Emulate XCharStruct. */ typedef struct _XCharStruct { - int rbearing; - int lbearing; - int width; - int ascent; - int descent; + short lbearing; /* origin to left edge of raster */ + short rbearing; /* origin to right edge of raster */ + short width; /* advance to next char's origin */ + short ascent; /* baseline to top edge of raster */ + short descent; /* baseline to bottom edge of raster */ +#if 0 + unsigned short attributes; /* per char flags (not predefined) */ +#endif + unsigned valid_p : 1; } XCharStruct; #define STORE_XCHARSTRUCT(xcs, w, bds) \ @@ -107,7 +111,8 @@ (xcs).lbearing = (bds).left, \ (xcs).rbearing = (bds).right, \ (xcs).ascent = -(bds).top, \ - (xcs).descent = (bds).bottom) + (xcs).descent = (bds).bottom, \ + (xcs).valid_p = 1) struct MacFontStruct { char *full_name; @@ -120,19 +125,9 @@ #else short mac_scriptcode; /* Mac OS script code for font used */ #endif - -#if 0 - SInt16 mFontNum; /* font number of font used in this window */ - short mScriptCode; /* Mac OS script code for font used */ - int mFontSize; /* size of font */ - Style mFontFace; /* plain, bold, italics, etc. */ - int mHeight; /* height of one line of text in pixels */ - int mWidth; /* width of one character in pixels */ - int mAscent; - int mDescent; - int mLeading; - char mTwoByte; /* true for two-byte font */ -#endif /* 0 */ +#if USE_ATSUI + ATSUStyle mac_style; /* NULL if QuickDraw Text is used */ +#endif /* from Xlib.h */ #if 0 diff -r 7a3090aca393 -r 2a679c81f552 src/macterm.c --- a/src/macterm.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/macterm.c Sun Oct 09 20:00:17 2005 +0000 @@ -658,6 +658,79 @@ #endif +#if USE_ATSUI +static OSStatus +atsu_get_text_layout_with_text_ptr (text, text_length, style, text_layout) + ConstUniCharArrayPtr text; + UniCharCount text_length; + ATSUStyle style; + ATSUTextLayout *text_layout; +{ + OSStatus err; + static ATSUTextLayout saved_text_layout = NULL; /* not reentrant */ + + if (saved_text_layout == NULL) + { + UniCharCount lengths[] = {kATSUToTextEnd}; + ATSUAttributeTag tags[] = {kATSULineLayoutOptionsTag}; + ByteCount sizes[] = {sizeof (ATSLineLayoutOptions)}; + static ATSLineLayoutOptions line_layout = +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020 + kATSLineDisableAllLayoutOperations | kATSLineUseDeviceMetrics +#else + kATSLineIsDisplayOnly +#endif + ; + ATSUAttributeValuePtr values[] = {&line_layout}; + + err = ATSUCreateTextLayoutWithTextPtr (text, + kATSUFromTextBeginning, + kATSUToTextEnd, + text_length, + 1, lengths, &style, + &saved_text_layout); + if (err == noErr) + err = ATSUSetLayoutControls (saved_text_layout, + sizeof (tags) / sizeof (tags[0]), + tags, sizes, values); + /* XXX: Should we do this? */ + if (err == noErr) + err = ATSUSetTransientFontMatching (saved_text_layout, true); + } + else + { + err = ATSUSetRunStyle (saved_text_layout, style, + kATSUFromTextBeginning, kATSUToTextEnd); + if (err == noErr) + err = ATSUSetTextPointerLocation (saved_text_layout, text, + kATSUFromTextBeginning, + kATSUToTextEnd, + text_length); + } + + if (err == noErr) + *text_layout = saved_text_layout; + return err; +} +#endif + +static void +mac_invert_rectangle (display, w, x, y, width, height) + Display *display; + WindowPtr w; + int x, y; + unsigned int width, height; +{ + Rect r; + + SetPortWindowPort (w); + + SetRect (&r, x, y, x + width, y + height); + + InvertRect (&r); +} + + static void mac_draw_string_common (display, w, gc, x, y, buf, nchars, mode, bytes_per_char) @@ -682,6 +755,89 @@ if (mode != srcOr) RGBBackColor (GC_BACK_COLOR (gc)); +#if USE_ATSUI + if (GC_FONT (gc)->mac_style) + { + OSErr err; + ATSUTextLayout text_layout; + + xassert (bytes_per_char == 2); + +#ifndef WORDS_BIG_ENDIAN + { + int i; + Unichar *text = (Unichar *)buf; + + for (i = 0; i < nchars; i++) + text[i] = buf[2*i] << 8 | buf[2*i+1]; + } +#endif + err = atsu_get_text_layout_with_text_ptr ((ConstUniCharArrayPtr)buf, + nchars, + GC_FONT (gc)->mac_style, + &text_layout); + if (err == noErr) + { +#ifdef MAC_OSX + if (NILP (Vmac_use_core_graphics)) + { +#endif + MoveTo (x, y); + ATSUDrawText (text_layout, + kATSUFromTextBeginning, kATSUToTextEnd, + kATSUUseGrafPortPenLoc, kATSUUseGrafPortPenLoc); +#ifdef MAC_OSX + } + else + { + CGrafPtr port; + CGContextRef context; + Rect rect; + RgnHandle region = NewRgn (); + float port_height; + ATSUAttributeTag tags[] = {kATSUCGContextTag}; + ByteCount sizes[] = {sizeof (CGContextRef)}; + ATSUAttributeValuePtr values[] = {&context}; + + GetPort (&port); + QDBeginCGContext (port, &context); + GetPortBounds (port, &rect); + port_height = rect.bottom - rect.top; + GetClip (region); + GetRegionBounds (region, &rect); + /* XXX: This is not correct if the clip region is not a + simple rectangle. */ + CGContextClipToRect (context, + CGRectMake (rect.left, + port_height - rect.bottom, + rect.right - rect.left, + rect.bottom - rect.top)); + DisposeRgn (region); + CGContextSetRGBFillColor + (context, + RED_FROM_ULONG (gc->xgcv.foreground) / 255.0, + GREEN_FROM_ULONG (gc->xgcv.foreground) / 255.0, + BLUE_FROM_ULONG (gc->xgcv.foreground) / 255.0, + 1.0); + err = ATSUSetLayoutControls (text_layout, + sizeof (tags) / sizeof (tags[0]), + tags, sizes, values); + if (err == noErr) + ATSUDrawText (text_layout, + kATSUFromTextBeginning, kATSUToTextEnd, + Long2Fix (x), Long2Fix (port_height - y)); + ATSUClearLayoutControls (text_layout, + sizeof (tags) / sizeof (tags[0]), + tags); + CGContextSynchronize (context); + QDEndCGContext (port, &context); + } +#endif + } + } + else + { +#endif TextFont (GC_FONT (gc)->mac_fontnum); TextSize (GC_FONT (gc)->mac_fontsize); TextFace (GC_FONT (gc)->mac_fontface); @@ -689,6 +845,9 @@ MoveTo (x, y); DrawText (buf, 0, nchars * bytes_per_char); +#if USE_ATSUI + } +#endif if (mode != srcOr) RGBBackColor (GC_BACK_COLOR (MAC_WINDOW_NORMAL_GC (w))); @@ -1549,6 +1708,61 @@ xassert (font && char2b); +#if USE_ATSUI + if (font->mac_style) + { + if (char2b->byte1 >= font->min_byte1 + && char2b->byte1 <= font->max_byte1 + && char2b->byte2 >= font->min_char_or_byte2 + && char2b->byte2 <= font->max_char_or_byte2) + { + pcm = (font->per_char + + ((font->max_char_or_byte2 - font->min_char_or_byte2 + 1) + * (char2b->byte1 - font->min_byte1)) + + (char2b->byte2 - font->min_char_or_byte2)); + } + + if (pcm && !pcm->valid_p) + { + OSErr err; + ATSUTextLayout text_layout; + UniChar c; + int char_width; + ATSTrapezoid glyph_bounds; + Rect char_bounds; + + c = (char2b->byte1 << 8) + char2b->byte2; + BLOCK_INPUT; + err = atsu_get_text_layout_with_text_ptr (&c, 1, + font->mac_style, + &text_layout); + if (err == noErr) + err = ATSUMeasureTextImage (text_layout, + kATSUFromTextBeginning, kATSUToTextEnd, + 0, 0, &char_bounds); + + if (err == noErr) + err = ATSUGetGlyphBounds (text_layout, 0, 0, + kATSUFromTextBeginning, kATSUToTextEnd, + kATSUseFractionalOrigins, 1, + &glyph_bounds, NULL); + UNBLOCK_INPUT; + if (err != noErr) + pcm = NULL; + else + { + xassert (glyph_bounds.lowerRight.x - glyph_bounds.lowerLeft.x + == glyph_bounds.upperRight.x - glyph_bounds.upperLeft.x); + + char_width = Fix2Long (glyph_bounds.upperRight.x + - glyph_bounds.upperLeft.x); + STORE_XCHARSTRUCT (*pcm, char_width, char_bounds); + } + } + } + else + { +#endif if (font->per_char != NULL) { if (font->min_byte1 == 0 && font->max_byte1 == 0) @@ -1600,6 +1814,9 @@ && char2b->byte2 <= font->max_char_or_byte2) pcm = &font->max_bounds; } +#if USE_ATSUI + } +#endif return ((pcm == NULL || (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0)) @@ -1925,6 +2142,35 @@ Rect r; MacFontStruct *font = s->font; +#if USE_ATSUI + if (font->mac_style) + { + OSErr err; + ATSUTextLayout text_layout; + UniChar *buf; + int i; + + SetRect (&r, 0, 0, 0, 0); + buf = xmalloc (sizeof (UniChar) * s->nchars); + if (buf) + { + for (i = 0; i < s->nchars; i++) + buf[i] = (s->char2b[i].byte1 << 8) + s->char2b[i].byte2; + + err = atsu_get_text_layout_with_text_ptr (buf, s->nchars, + font->mac_style, + &text_layout); + if (err == noErr) + err = ATSUMeasureTextImage (text_layout, + kATSUFromTextBeginning, + kATSUToTextEnd, + 0, 0, &r); + xfree (buf); + } + } + else + { +#endif TextFont (font->mac_fontnum); TextSize (font->mac_fontsize); TextFace (font->mac_fontface); @@ -1946,6 +2192,9 @@ xfree (buf); } } +#if USE_ATSUI + } +#endif s->right_overhang = r.right > s->width ? r.right - s->width : 0; s->left_overhang = r.left < 0 ? -r.left : 0; @@ -2003,7 +2252,7 @@ } else #endif -#ifdef MAC_OS8 +#if defined (MAC_OS8) && !USE_ATSUI if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width || s->font_not_found_p || s->extends_to_end_of_line_p @@ -2057,11 +2306,15 @@ boff = VCENTER_BASELINE_OFFSET (s->font, s->f) - boff; /* If we can use 8-bit functions, condense S->char2b. */ - if (!s->two_byte_p) + if (!s->two_byte_p +#if USE_ATSUI + && GC_FONT (s->gc)->mac_style == NULL +#endif + ) for (i = 0; i < s->nchars; ++i) char1b[i] = s->char2b[i].byte2; -#ifdef MAC_OS8 +#if defined (MAC_OS8) && !USE_ATSUI /* Draw text with XDrawString if background has already been filled. Otherwise, use XDrawImageString. (Note that XDrawImageString is usually faster than XDrawString.) Always @@ -2072,14 +2325,18 @@ #endif { /* Draw characters with 16-bit or 8-bit functions. */ - if (s->two_byte_p) + if (s->two_byte_p +#if USE_ATSUI + || GC_FONT (s->gc)->mac_style +#endif + ) XDrawString16 (s->display, s->window, s->gc, x, s->ybase - boff, s->char2b, s->nchars); else XDrawString (s->display, s->window, s->gc, x, s->ybase - boff, char1b, s->nchars); } -#ifdef MAC_OS8 +#if defined (MAC_OS8) && !USE_ATSUI else { if (s->two_byte_p) @@ -3246,9 +3503,57 @@ XTflash (f) struct frame *f; { + /* Get the height not including a menu bar widget. */ + int height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f)); + /* Height of each line to flash. */ + int flash_height = FRAME_LINE_HEIGHT (f); + /* These will be the left and right margins of the rectangles. */ + int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); + int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); + + int width; + + /* Don't flash the area between a scroll bar and the frame + edge it is next to. */ + switch (FRAME_VERTICAL_SCROLL_BAR_TYPE (f)) + { + case vertical_scroll_bar_left: + flash_left += VERTICAL_SCROLL_BAR_WIDTH_TRIM; + break; + + case vertical_scroll_bar_right: + flash_right -= VERTICAL_SCROLL_BAR_WIDTH_TRIM; + break; + + default: + break; + } + + width = flash_right - flash_left; + BLOCK_INPUT; - FlashMenuBar (0); + /* If window is tall, flash top and bottom line. */ + if (height > 3 * FRAME_LINE_HEIGHT (f)) + { + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, + (FRAME_INTERNAL_BORDER_WIDTH (f) + + FRAME_TOOL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)), + width, flash_height); + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, + (height - flash_height + - FRAME_INTERNAL_BORDER_WIDTH (f)), + width, flash_height); + } + else + /* If it is short, flash it all. */ + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), + width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); + + x_flush (f); { struct timeval wakeup; @@ -3260,24 +3565,49 @@ wakeup.tv_sec += (wakeup.tv_usec / 1000000); wakeup.tv_usec %= 1000000; - /* Keep waiting until past the time wakeup. */ - while (1) + /* Keep waiting until past the time wakeup or any input gets + available. */ + while (! detect_input_pending ()) { - struct timeval timeout; - - EMACS_GET_TIME (timeout); - - /* In effect, timeout = wakeup - timeout. - Break if result would be negative. */ - if (timeval_subtract (&timeout, wakeup, timeout)) - break; - - /* Try to wait that long--but we might wake up sooner. */ - select (0, NULL, NULL, NULL, &timeout); + struct timeval current; + struct timeval timeout; + + EMACS_GET_TIME (current); + + /* Break if result would be negative. */ + if (timeval_subtract (¤t, wakeup, current)) + break; + + /* How long `select' should wait. */ + timeout.tv_sec = 0; + timeout.tv_usec = 10000; + + /* Try to wait that long--but we might wake up sooner. */ + select (0, NULL, NULL, NULL, &timeout); } } - FlashMenuBar (0); + /* If window is tall, flash top and bottom line. */ + if (height > 3 * FRAME_LINE_HEIGHT (f)) + { + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, + (FRAME_INTERNAL_BORDER_WIDTH (f) + + FRAME_TOOL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)), + width, flash_height); + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, + (height - flash_height + - FRAME_INTERNAL_BORDER_WIDTH (f)), + width, flash_height); + } + else + /* If it is short, flash it all. */ + mac_invert_rectangle (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), + flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), + width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); + + x_flush (f); UNBLOCK_INPUT; } @@ -6277,7 +6607,7 @@ xlfdpat_exact_p (pat) struct xlfdpat *pat; { - return (pat)->blocks == NULL; + return pat->blocks == NULL; } /* Return the first string in STRING + 0, ..., STRING + START_MAX such @@ -6295,7 +6625,7 @@ xassert (blk->len > 0); xassert (start_max + blk->len <= strlen (string)); - xassert (blk->pattern[blk->len - 1] != '?'); + xassert (blk->last_char != '?'); /* See the comments in the function `boyer_moore' (search.c) for the use of `infinity'. */ @@ -6431,6 +6761,10 @@ static int font_name_table_size = 0; static int font_name_count = 0; +#if USE_ATSUI +static Lisp_Object atsu_font_id_hash; +#endif + /* Alist linking character set strings to Mac text encoding and Emacs coding system. */ static Lisp_Object Vmac_charset_info_alist; @@ -6630,6 +6964,74 @@ Lisp_Object text_encoding_info_alist; struct gcpro gcpro1; + text_encoding_info_alist = create_text_encoding_info_alist (); + +#if USE_ATSUI + if (!NILP (assq_no_quit (make_number (kTextEncodingMacUnicode), + text_encoding_info_alist))) + { + OSErr err; + ItemCount nfonts, i; + ATSUFontID *font_ids = NULL; + Ptr name, prev_name = NULL; + ByteCount name_len; + + atsu_font_id_hash = + make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), + make_float (DEFAULT_REHASH_SIZE), + make_float (DEFAULT_REHASH_THRESHOLD), + Qnil, Qnil, Qnil);; + err = ATSUFontCount (&nfonts); + if (err == noErr) + font_ids = xmalloc (sizeof (ATSUFontID) * nfonts); + if (font_ids) + err = ATSUGetFontIDs (font_ids, nfonts, NULL); + if (err == noErr) + for (i = 0; i < nfonts; i++) + { + err = ATSUFindFontName (font_ids[i], kFontFamilyName, + kFontMacintoshPlatform, kFontNoScript, + kFontNoLanguage, 0, NULL, &name_len, NULL); + if (err != noErr) + continue; + name = xmalloc (name_len + 1); + if (name == NULL) + continue; + name[name_len] = '\0'; + err = ATSUFindFontName (font_ids[i], kFontFamilyName, + kFontMacintoshPlatform, kFontNoScript, + kFontNoLanguage, name_len, name, + NULL, NULL); + if (err == noErr + && *name != '.' + && (prev_name == NULL + || strcmp (name, prev_name) != 0)) + { + static char *cs = "iso10646-1"; + + add_font_name_table_entry (mac_to_x_fontname (name, 0, + normal, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, 0, + italic, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, 0, + bold, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, 0, + italic | bold, cs)); + Fputhash (Fdowncase (make_unibyte_string (name, name_len)), + long_to_cons (font_ids[i]), atsu_font_id_hash); + xfree (prev_name); + prev_name = name; + } + else + xfree (name); + } + if (prev_name) + xfree (prev_name); + if (font_ids) + xfree (font_ids); + } +#endif + /* Create a dummy instance iterator here to avoid creating and destroying it in the loop. */ if (FMCreateFontFamilyInstanceIterator (0, &ffii) != noErr) @@ -6642,8 +7044,6 @@ return; } - text_encoding_info_alist = create_text_encoding_info_alist (); - GCPRO1 (text_encoding_info_alist); while (FMGetNextFontFamily (&ffi, &ff) == noErr) @@ -6683,28 +7083,29 @@ { Lisp_Object rest = XCDR (XCDR (text_encoding_info)); - for (; !NILP (rest); rest = XCDR (rest)) - { - char *cs = SDATA (XCAR (rest)); - - if (size == 0) - { - add_font_name_table_entry (mac_to_x_fontname (name, size, - style, cs)); - add_font_name_table_entry (mac_to_x_fontname (name, size, - italic, cs)); - add_font_name_table_entry (mac_to_x_fontname (name, size, - bold, cs)); - add_font_name_table_entry (mac_to_x_fontname (name, size, - italic | bold, - cs)); - } - else - { - add_font_name_table_entry (mac_to_x_fontname (name, size, - style, cs)); - } - } + if (size > 0 || style == normal) + for (; !NILP (rest); rest = XCDR (rest)) + { + char *cs = SDATA (XCAR (rest)); + + if (size == 0) + { + add_font_name_table_entry (mac_to_x_fontname (name, size, + style, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, size, + italic, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, size, + bold, cs)); + add_font_name_table_entry (mac_to_x_fontname (name, size, + italic | bold, + cs)); + } + else + { + add_font_name_table_entry (mac_to_x_fontname (name, size, + style, cs)); + } + } } } @@ -7139,6 +7540,9 @@ Str255 mfontname, mfontname_decoded; Str31 charset; SInt16 fontnum; +#if USE_ATSUI + ATSUStyle mac_style = NULL; +#endif Style fontface; #if TARGET_API_MAC_CARBON TextEncoding encoding; @@ -7190,6 +7594,48 @@ x_font_name_to_mac_font_name (name, mfontname, mfontname_decoded, &fontface, charset); +#if USE_ATSUI + if (strcmp (charset, "iso10646-1") == 0) /* XXX */ + { + OSErr err; + ATSUAttributeTag tags[] = {kATSUFontTag, kATSUSizeTag, + kATSUQDBoldfaceTag, kATSUQDItalicTag}; + ByteCount sizes[] = {sizeof (ATSUFontID), sizeof (Fixed), + sizeof (Boolean), sizeof (Boolean)}; + static ATSUFontID font_id; + static Fixed size_fixed; + static Boolean bold_p, italic_p; + ATSUAttributeValuePtr values[] = {&font_id, &size_fixed, + &bold_p, &italic_p}; + ATSUFontFeatureType types[] = {kAllTypographicFeaturesType}; + ATSUFontFeatureSelector selectors[] = {kAllTypeFeaturesOffSelector}; + Lisp_Object font_id_cons; + + font_id_cons = Fgethash (Fdowncase + (make_unibyte_string (mfontname, + strlen (mfontname))), + atsu_font_id_hash, Qnil); + if (NILP (font_id_cons)) + return NULL; + font_id = cons_to_long (font_id_cons); + size_fixed = Long2Fix (size); + bold_p = (fontface & bold) != 0; + italic_p = (fontface & italic) != 0; + err = ATSUCreateStyle (&mac_style); + if (err != noErr) + return NULL; + err = ATSUSetFontFeatures (mac_style, sizeof (types) / sizeof (types[0]), + types, selectors); + if (err != noErr) + return NULL; + err = ATSUSetAttributes (mac_style, sizeof (tags) / sizeof (tags[0]), + tags, sizes, values); + fontnum = -1; + scriptcode = kTextEncodingMacUnicode; + } + else + { +#endif c2pstr (mfontname); #if TARGET_API_MAC_CARBON fontnum = FMGetFontFamilyFromName (mfontname); @@ -7203,6 +7649,9 @@ return NULL; scriptcode = FontToScript (fontnum); #endif +#if USE_ATSUI + } +#endif font = (MacFontStruct *) xmalloc (sizeof (struct MacFontStruct)); @@ -7210,6 +7659,9 @@ font->mac_fontsize = size; font->mac_fontface = fontface; font->mac_scriptcode = scriptcode; +#if USE_ATSUI + font->mac_style = mac_style; +#endif /* Apple Japanese (SJIS) font is listed as both "*-jisx0208.1983-sjis" (Japanese script) and "*-jisx0201.1976-0" @@ -7220,6 +7672,91 @@ font->full_name = mac_to_x_fontname (mfontname_decoded, size, fontface, charset); +#if USE_ATSUI + if (font->mac_style) + { + OSErr err; + ATSUTextLayout text_layout; + UniChar c = 0x20; + Rect char_bounds, min_bounds, max_bounds; + int min_width, max_width; + ATSTrapezoid glyph_bounds; + + font->per_char = xmalloc (sizeof (XCharStruct) * 0x10000); + if (font->per_char == NULL) + { + mac_unload_font (&one_mac_display_info, font); + return NULL; + } + bzero (font->per_char, sizeof (XCharStruct) * 0x10000); + + err = atsu_get_text_layout_with_text_ptr (&c, 1, + font->mac_style, + &text_layout); + if (err != noErr) + { + mac_unload_font (&one_mac_display_info, font); + return NULL; + } + + for (c = 0x20; c <= 0x7e; c++) + { + err = ATSUClearLayoutCache (text_layout, kATSUFromTextBeginning); + if (err == noErr) + err = ATSUMeasureTextImage (text_layout, + kATSUFromTextBeginning, kATSUToTextEnd, + 0, 0, &char_bounds); + if (err == noErr) + err = ATSUGetGlyphBounds (text_layout, 0, 0, + kATSUFromTextBeginning, kATSUToTextEnd, + kATSUseFractionalOrigins, 1, + &glyph_bounds, NULL); + if (err == noErr) + { + xassert (glyph_bounds.lowerRight.x - glyph_bounds.lowerLeft.x + == glyph_bounds.upperRight.x - glyph_bounds.upperLeft.x); + + char_width = Fix2Long (glyph_bounds.upperRight.x + - glyph_bounds.upperLeft.x); + STORE_XCHARSTRUCT (font->per_char[c], + char_width, char_bounds); + if (c == 0x20) + { + min_width = max_width = char_width; + min_bounds = max_bounds = char_bounds; + font->ascent = -Fix2Long (glyph_bounds.upperLeft.y); + font->descent = Fix2Long (glyph_bounds.lowerLeft.y); + } + else + { + if (char_width > 0) + { + min_width = min (min_width, char_width); + max_width = max (max_width, char_width); + } + if (!EmptyRect (&char_bounds)) + { + SetRect (&min_bounds, + max (min_bounds.left, char_bounds.left), + max (min_bounds.top, char_bounds.top), + min (min_bounds.right, char_bounds.right), + min (min_bounds.bottom, char_bounds.bottom)); + UnionRect (&max_bounds, &char_bounds, &max_bounds); + } + } + } + } + STORE_XCHARSTRUCT (font->min_bounds, min_width, min_bounds); + STORE_XCHARSTRUCT (font->max_bounds, max_width, max_bounds); + + font->min_byte1 = 0; + font->max_byte1 = 0xff; + font->min_char_or_byte2 = 0; + font->max_char_or_byte2 = 0xff; + } + else + { +#endif is_two_byte_font = font->mac_scriptcode == smJapanese || font->mac_scriptcode == smTradChinese || font->mac_scriptcode == smSimpChinese || @@ -7234,24 +7771,26 @@ font->ascent = the_fontinfo.ascent; font->descent = the_fontinfo.descent; - font->min_byte1 = 0; if (is_two_byte_font) - font->max_byte1 = 1; - else - font->max_byte1 = 0; - font->min_char_or_byte2 = 0x20; - font->max_char_or_byte2 = 0xff; - - if (is_two_byte_font) - { + { + font->min_byte1 = 0xa1; + font->max_byte1 = 0xfe; + font->min_char_or_byte2 = 0xa1; + font->max_char_or_byte2 = 0xfe; + /* Use the width of an "ideographic space" of that font because the_fontinfo.widMax returns the wrong width for some fonts. */ switch (font->mac_scriptcode) { case smJapanese: + font->min_byte1 = 0x81; + font->max_byte1 = 0xfc; + font->min_char_or_byte2 = 0x40; + font->max_char_or_byte2 = 0xfc; char_width = StringWidth("\p\x81\x40"); break; case smTradChinese: + font->min_char_or_byte2 = 0x40; char_width = StringWidth("\p\xa1\x40"); break; case smSimpChinese: @@ -7263,9 +7802,15 @@ } } else - /* Do this instead of use the_fontinfo.widMax, which incorrectly - returns 15 for 12-point Monaco! */ - char_width = CharWidth ('m'); + { + font->min_byte1 = font->max_byte1 = 0; + font->min_char_or_byte2 = 0x20; + font->max_char_or_byte2 = 0xff; + + /* Do this instead of use the_fontinfo.widMax, which incorrectly + returns 15 for 12-point Monaco! */ + char_width = CharWidth ('m'); + } if (is_two_byte_font) { @@ -7284,55 +7829,56 @@ } else { - font->per_char = (XCharStruct *) - xmalloc (sizeof (XCharStruct) * (0xff - 0x20 + 1)); - { - int c, min_width, max_width; - Rect char_bounds, min_bounds, max_bounds; - char ch; - - min_width = max_width = char_width; - SetRect (&min_bounds, -32767, -32767, 32767, 32767); - SetRect (&max_bounds, 0, 0, 0, 0); - for (c = 0x20; c <= 0xff; c++) - { - ch = c; - char_width = CharWidth (ch); - QDTextBounds (1, &ch, &char_bounds); - STORE_XCHARSTRUCT (font->per_char[c - 0x20], - char_width, char_bounds); - /* Some Japanese fonts (in SJIS encoding) return 0 as the - character width of 0x7f. */ - if (char_width > 0) - { - min_width = min (min_width, char_width); - max_width = max (max_width, char_width); - } - if (!EmptyRect (&char_bounds)) - { - SetRect (&min_bounds, - max (min_bounds.left, char_bounds.left), - max (min_bounds.top, char_bounds.top), - min (min_bounds.right, char_bounds.right), - min (min_bounds.bottom, char_bounds.bottom)); - UnionRect (&max_bounds, &char_bounds, &max_bounds); - } - } - STORE_XCHARSTRUCT (font->min_bounds, min_width, min_bounds); - STORE_XCHARSTRUCT (font->max_bounds, max_width, max_bounds); - if (min_width == max_width - && max_bounds.left >= 0 && max_bounds.right <= max_width) - { - /* Fixed width and no overhangs. */ - xfree (font->per_char); - font->per_char = NULL; - } - } + int c, min_width, max_width; + Rect char_bounds, min_bounds, max_bounds; + char ch; + + font->per_char = xmalloc (sizeof (XCharStruct) * (0xff - 0x20 + 1)); + + min_width = max_width = char_width; + SetRect (&min_bounds, -32767, -32767, 32767, 32767); + SetRect (&max_bounds, 0, 0, 0, 0); + for (c = 0x20; c <= 0xff; c++) + { + ch = c; + char_width = CharWidth (ch); + QDTextBounds (1, &ch, &char_bounds); + STORE_XCHARSTRUCT (font->per_char[c - 0x20], + char_width, char_bounds); + /* Some Japanese fonts (in SJIS encoding) return 0 as the + character width of 0x7f. */ + if (char_width > 0) + { + min_width = min (min_width, char_width); + max_width = max (max_width, char_width); + } + if (!EmptyRect (&char_bounds)) + { + SetRect (&min_bounds, + max (min_bounds.left, char_bounds.left), + max (min_bounds.top, char_bounds.top), + min (min_bounds.right, char_bounds.right), + min (min_bounds.bottom, char_bounds.bottom)); + UnionRect (&max_bounds, &char_bounds, &max_bounds); + } + } + STORE_XCHARSTRUCT (font->min_bounds, min_width, min_bounds); + STORE_XCHARSTRUCT (font->max_bounds, max_width, max_bounds); + if (min_width == max_width + && max_bounds.left >= 0 && max_bounds.right <= max_width) + { + /* Fixed width and no overhangs. */ + xfree (font->per_char); + font->per_char = NULL; + } } TextFont (old_fontnum); /* restore previous font number, size and face */ TextSize (old_fontsize); TextFace (old_fontface); +#if USE_ATSUI + } +#endif return font; } @@ -7346,6 +7892,10 @@ xfree (font->full_name); if (font->per_char) xfree (font->per_char); +#if USE_ATSUI + if (font->mac_style) + ATSUDisposeStyle (font->mac_style); +#endif xfree (font); } @@ -10188,75 +10738,6 @@ mac_determine_quit_char_modifiers(); } - -static Boolean -quit_char_comp (EventRef inEvent, void *inCompData) -{ - if (GetEventClass(inEvent) != kEventClassKeyboard) - return false; - if (GetEventKind(inEvent) != kEventRawKeyDown) - return false; - { - UInt32 keyCode; - UInt32 keyModifiers; - GetEventParameter(inEvent, kEventParamKeyCode, - typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode); - if (keyCode != mac_quit_char_keycode) - return false; - GetEventParameter(inEvent, kEventParamKeyModifiers, - typeUInt32, NULL, sizeof(UInt32), NULL, &keyModifiers); - if (keyModifiers != mac_quit_char_modifiers) - return false; - } - return true; -} - -void -mac_check_for_quit_char () -{ - EventRef event; - static EMACS_TIME last_check_time = { 0, 0 }; - static EMACS_TIME one_second = { 1, 0 }; - EMACS_TIME now, t; - - /* If windows are not initialized, return immediately (keep it bouncin'). */ - if (!mac_quit_char_modifiers) - return; - - /* Don't check if last check is less than a second ago. */ - EMACS_GET_TIME (now); - EMACS_SUB_TIME (t, now, last_check_time); - if (EMACS_TIME_LT (t, one_second)) - return; - last_check_time = now; - - /* Redetermine modifiers because they are based on lisp variables */ - mac_determine_quit_char_modifiers (); - - /* Fill the queue with events */ - BLOCK_INPUT; - ReceiveNextEvent (0, NULL, kEventDurationNoWait, false, &event); - event = FindSpecificEventInQueue (GetMainEventQueue (), quit_char_comp, - NULL); - UNBLOCK_INPUT; - if (event) - { - struct input_event e; - - /* Use an input_event to emulate what the interrupt handler does. */ - EVENT_INIT (e); - e.kind = ASCII_KEYSTROKE_EVENT; - e.code = quit_char; - e.arg = Qnil; - e.modifiers = NULL; - e.timestamp = EventTimeToTicks (GetEventTime (event)) * (1000/60); - XSETFRAME (e.frame_or_window, mac_focus_frame (&one_mac_display_info)); - /* Remove event from queue to prevent looping. */ - RemoveEventFromQueue (GetMainEventQueue (), event); - ReleaseEvent (event); - kbd_buffer_store_event (&e); - } -} #endif /* MAC_OSX */ static void @@ -10435,6 +10916,11 @@ Qmac_ready_for_drag_n_drop = intern ("mac-ready-for-drag-n-drop"); staticpro (&Qmac_ready_for_drag_n_drop); +#if USE_ATSUI + staticpro (&atsu_font_id_hash); + atsu_font_id_hash = Qnil; +#endif + DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars, doc: /* If not nil, Emacs uses toolkit scroll bars. */); #ifdef USE_TOOLKIT_SCROLL_BARS diff -r 7a3090aca393 -r 2a679c81f552 src/marker.c --- a/src/marker.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/marker.c Sun Oct 09 20:00:17 2005 +0000 @@ -256,6 +256,7 @@ int verify_bytepos (charpos) + int charpos; { int below = 1; int below_byte = 1; diff -r 7a3090aca393 -r 2a679c81f552 src/minibuf.c --- a/src/minibuf.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/minibuf.c Sun Oct 09 20:00:17 2005 +0000 @@ -1138,11 +1138,14 @@ Prompt with PROMPT. Optional second arg DEF is value to return if user enters an empty line. If optional third arg REQUIRE-MATCH is non-nil, - only existing buffer names are allowed. */) + only existing buffer names are allowed. +The argument PROMPT should be a string ending with a colon and a space. */) (prompt, def, require_match) Lisp_Object prompt, def, require_match; { Lisp_Object args[4]; + unsigned char *s; + int len; if (BUFFERP (def)) def = XBUFFER (def)->name; @@ -1151,7 +1154,26 @@ { if (!NILP (def)) { - args[0] = build_string ("%s(default %s) "); + /* A default value was provided: we must change PROMPT, + editing the default value in before the colon. To achieve + this, we replace PROMPT with a substring that doesn't + contain the terminal space and colon (if present). They + are then added back using Fformat. */ + + if (STRINGP (prompt)) + { + s = SDATA (prompt); + len = strlen (s); + if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ') + len = len - 2; + else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' ')) + len--; + + prompt = make_specified_string (s, -1, len, + STRING_MULTIBYTE (prompt)); + } + + args[0] = build_string ("%s (default %s): "); args[1] = prompt; args[2] = def; prompt = Fformat (3, args); diff -r 7a3090aca393 -r 2a679c81f552 src/process.c --- a/src/process.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/process.c Sun Oct 09 20:00:17 2005 +0000 @@ -118,10 +118,10 @@ #include <sys/wait.h> #endif +#include "lisp.h" #include "systime.h" #include "systty.h" -#include "lisp.h" #include "window.h" #include "buffer.h" #include "charset.h" @@ -187,7 +187,6 @@ #include "syswait.h" -extern void set_waiting_for_input P_ ((EMACS_TIME *)); extern char *get_operating_system_release (); #ifndef USE_CRT_DLL @@ -1793,6 +1792,12 @@ #endif if (forkin < 0) report_file_error ("Opening pty", Qnil); +#if defined (RTU) || defined (UNIPLUS) || defined (DONT_REOPEN_PTY) + /* In the case that vfork is defined as fork, the parent process + (Emacs) may send some data before the child process completes + tty options setup. So we setup tty before forking. */ + child_setup_tty (forkout); +#endif /* RTU or UNIPLUS or DONT_REOPEN_PTY */ #else forkin = forkout = -1; #endif /* not USG, or USG_SUBTTY_WORKS */ @@ -2077,8 +2082,10 @@ #endif /* SIGCHLD */ #endif /* !POSIX_SIGNALS */ +#if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY) if (pty_flag) child_setup_tty (xforkout); +#endif /* not RTU and not UNIPLUS and not DONT_REOPEN_PTY */ #ifdef WINDOWSNT pid = child_setup (xforkin, xforkout, xforkout, new_argv, 1, current_dir); diff -r 7a3090aca393 -r 2a679c81f552 src/regex.c --- a/src/regex.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/regex.c Sun Oct 09 20:00:17 2005 +0000 @@ -1265,9 +1265,9 @@ void re_set_whitespace_regexp (regexp) - re_char *regexp; + const char *regexp; { - whitespace_regexp = regexp; + whitespace_regexp = (re_char *) regexp; } WEAK_ALIAS (__re_set_syntax, re_set_syntax) diff -r 7a3090aca393 -r 2a679c81f552 src/regex.h --- a/src/regex.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/regex.h Sun Oct 09 20:00:17 2005 +0000 @@ -603,8 +603,13 @@ RECC_ASCII, RECC_UNIBYTE } re_wctype_t; +extern char re_iswctype (int ch, re_wctype_t cc); +extern re_wctype_t re_wctype (const unsigned char* str); + typedef int re_wchar_t; +extern void re_set_whitespace_regexp (const char *regexp); + #endif /* not WIDE_CHAR_SUPPORT */ #endif /* regex.h */ diff -r 7a3090aca393 -r 2a679c81f552 src/s/aix4-2.h --- a/src/s/aix4-2.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/s/aix4-2.h Sun Oct 09 20:00:17 2005 +0000 @@ -2,5 +2,23 @@ #undef ALIGN_DATA_RELOC +/* On AIX Emacs uses the gmalloc.c malloc implementation. But given + the way this system works, libc functions that return malloced + memory use the libc malloc implementation. Calling xfree or + xrealloc on the results of such functions results in a crash. + + One solution for this could be to define SYSTEM_MALLOC here, but + that does not currently work on this system. + + It is possible to completely override the malloc implementation on + AIX, but that involves putting the malloc functions in a shared + library and setting the MALLOCTYPE environment variable to point to + tha shared library. + + Emacs currently calls xrealloc on the results of get_current_dir name, + to avoid a crash just use the Emacs implementation for that function. +*/ +#define BROKEN_GET_CURRENT_DIR_NAME 1 + /* arch-tag: 38fe75ea-6aef-42bd-8449-bc34d921a562 (do not change this comment) */ diff -r 7a3090aca393 -r 2a679c81f552 src/sysdep.c --- a/src/sysdep.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/sysdep.c Sun Oct 09 20:00:17 2005 +0000 @@ -51,10 +51,7 @@ #include "blockinput.h" #ifdef MAC_OS8 -/* It is essential to include stdlib.h so that this file picks up - the correct definitions of rand, srand, and RAND_MAX. - Otherwise random numbers will not work correctly. */ -#include <stdlib.h> +#include <sys/param.h> #ifndef subprocesses /* Nonzero means delete a process right away if it exits (process.c). */ @@ -257,7 +254,7 @@ SIGMASKTYPE sigprocmask_set; -#ifndef HAVE_GET_CURRENT_DIR_NAME +#if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME) /* Return the current working directory. Returns NULL on errors. Any other returned value must be freed with free. This is used diff -r 7a3090aca393 -r 2a679c81f552 src/systime.h --- a/src/systime.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/systime.h Sun Oct 09 20:00:17 2005 +0000 @@ -154,6 +154,17 @@ extern int set_file_times __P ((const char *, EMACS_TIME, EMACS_TIME)); +/* defined in keyboard.c */ +extern void set_waiting_for_input __P ((EMACS_TIME *)); + +/* When lisp.h is not included Lisp_Object is not defined (this can + happen when this files is used outside the src directory). + Use GCPRO1 to determine if lisp.h was included. */ +#ifdef GCPRO1 +/* defined in dired.c */ +extern Lisp_Object make_time __P ((time_t)); +#endif + /* Compare times T1 and T2. Value is 0 if T1 and T2 are the same. Value is < 0 if T1 is less than T2. Value is > 0 otherwise. */ diff -r 7a3090aca393 -r 2a679c81f552 src/unexelf.c --- a/src/unexelf.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/unexelf.c Sun Oct 09 20:00:17 2005 +0000 @@ -412,7 +412,7 @@ #include <string.h> #else #include <config.h> -extern void fatal (char *, ...); +extern void fatal (const char *msgid, ...); #endif #include <sys/types.h> diff -r 7a3090aca393 -r 2a679c81f552 src/window.c --- a/src/window.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/window.c Sun Oct 09 20:00:17 2005 +0000 @@ -275,7 +275,6 @@ XSETWINDOW (val, p); XSETFASTINT (p->last_point, 0); p->frozen_window_start_p = 0; - p->height_fixed_p = 0; p->last_cursor_off_p = p->cursor_off_p = 0; p->left_margin_cols = Qnil; p->right_margin_cols = Qnil; @@ -2440,27 +2439,22 @@ } else if (BUFFERP (w->buffer)) { - if (w->height_fixed_p && !width_p) - fixed_p = 1; - else + struct buffer *old = current_buffer; + Lisp_Object val; + + current_buffer = XBUFFER (w->buffer); + val = find_symbol_value (Qwindow_size_fixed); + current_buffer = old; + + fixed_p = 0; + if (!EQ (val, Qunbound)) { - struct buffer *old = current_buffer; - Lisp_Object val; - - current_buffer = XBUFFER (w->buffer); - val = find_symbol_value (Qwindow_size_fixed); - current_buffer = old; - - fixed_p = 0; - if (!EQ (val, Qunbound)) - { - fixed_p = !NILP (val); - - if (fixed_p - && ((EQ (val, Qheight) && width_p) - || (EQ (val, Qwidth) && !width_p))) - fixed_p = 0; - } + fixed_p = !NILP (val); + + if (fixed_p + && ((EQ (val, Qheight) && width_p) + || (EQ (val, Qwidth) && !width_p))) + fixed_p = 0; } /* Can't tell if this one is resizable without looking at @@ -6233,6 +6227,85 @@ return unbind_to (count, val); } + + +/*********************************************************************** + Window Split Tree + ***********************************************************************/ + +static Lisp_Object +window_split_tree (w) + struct window *w; +{ + Lisp_Object tail = Qnil; + Lisp_Object result = Qnil; + + while (w) + { + Lisp_Object wn; + + XSETWINDOW (wn, w); + if (!NILP (w->hchild)) + wn = Fcons (Qnil, Fcons (Fwindow_edges (wn), + window_split_tree (XWINDOW (w->hchild)))); + else if (!NILP (w->vchild)) + wn = Fcons (Qt, Fcons (Fwindow_edges (wn), + window_split_tree (XWINDOW (w->vchild)))); + + if (NILP (result)) + { + result = tail = Fcons (wn, Qnil); + } + else + { + XSETCDR (tail, Fcons (wn, Qnil)); + tail = XCDR (tail); + } + + w = NILP (w->next) ? 0 : XWINDOW (w->next); + } + + return result; +} + + + +DEFUN ("window-split-tree", Fwindow_split_tree, Swindow_split_tree, + 0, 1, 0, + doc: /* Return the window split tree for frame FRAME. + +The return value is a list of the form (ROOT MINI), where ROOT +represents the window split tree of the frame's root window, and MINI +is the frame's minibuffer window. + +If the root window is not split, ROOT is the root window itself. +Otherwise, ROOT is a list (DIR EDGES W1 W2 ...) where DIR is nil for a +horisontal split, and t for a vertical split, EDGES gives the combined +size and position of the subwindows in the split, and the rest of the +elements are the subwindows in the split. Each of the subwindows may +again be a window or a list representing a window split, and so on. +EDGES is a list \(LEFT TOP RIGHT BOTTOM) as returned by `window-edges'. + +If FRAME is nil or omitted, return information on the currently +selected frame. */) + (frame) + Lisp_Object frame; +{ + Lisp_Object alist; + FRAME_PTR f; + + if (NILP (frame)) + frame = selected_frame; + + CHECK_FRAME (frame); + f = XFRAME (frame); + + if (!FRAME_LIVE_P (f)) + return Qnil; + + return window_split_tree (XWINDOW (FRAME_ROOT_WINDOW (f))); +} + /*********************************************************************** Marginal Areas @@ -7039,6 +7112,7 @@ defsubr (&Sset_window_configuration); defsubr (&Scurrent_window_configuration); defsubr (&Ssave_window_excursion); + defsubr (&Swindow_split_tree); defsubr (&Sset_window_margins); defsubr (&Swindow_margins); defsubr (&Sset_window_fringes); diff -r 7a3090aca393 -r 2a679c81f552 src/window.h --- a/src/window.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/window.h Sun Oct 09 20:00:17 2005 +0000 @@ -290,11 +290,6 @@ be changed during redisplay. If point is not in the window, accept that. */ unsigned frozen_window_start_p : 1; - - /* 1 means that this window's height is temporarily fixed. Used - in resize_mini_window to precent resizing selected_window, if - possible. */ - unsigned height_fixed_p : 1; }; /* 1 if W is a minibuffer window. */ diff -r 7a3090aca393 -r 2a679c81f552 src/xdisp.c --- a/src/xdisp.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/xdisp.c Sun Oct 09 20:00:17 2005 +0000 @@ -6739,7 +6739,10 @@ terminated with a newline when NLFLAG is non-zero. MULTIBYTE, if nonzero, means interpret the contents of M as multibyte. This function calls low-level routines in order to bypass text property - hooks, etc. which might not be safe to run. */ + hooks, etc. which might not be safe to run. + + This may GC (insert may run before/after change hooks), + so the buffer M must NOT point to a Lisp string. */ void message_dolog (m, nbytes, nlflag, multibyte) @@ -6950,10 +6953,7 @@ out any existing message, and let the mini-buffer text show through. - The buffer M must continue to exist until after the echo area gets - cleared or some other message gets displayed there. This means do - not pass text that is stored in a Lisp string; do not pass text in - a buffer that was alloca'd. */ + This may GC, so the buffer M must NOT point to a Lisp string. */ void message2 (m, nbytes, multibyte) @@ -8025,7 +8025,11 @@ If S is not null, set the message to the first LEN bytes of S. LEN zero means use the whole string. MULTIBYTE_P non-zero means S is - multibyte. Display the message multibyte in that case. */ + multibyte. Display the message multibyte in that case. + + Doesn't GC, as with_echo_area_buffer binds Qinhibit_modification_hooks + to t before calling set_message_1 (which calls insert). + */ void set_message (s, string, nbytes, multibyte_p) @@ -11378,6 +11382,7 @@ cursor_row_fully_visible_p (w, force_p, current_matrix_p) struct window *w; int force_p; + int current_matrix_p; { struct glyph_matrix *matrix; struct glyph_row *row; @@ -12855,7 +12860,8 @@ this_scroll_margin *= FRAME_LINE_HEIGHT (it.f); if ((w->cursor.y < this_scroll_margin - && CHARPOS (pos) > BEGV) + && CHARPOS (pos) > BEGV + && IT_CHARPOS (it) < ZV) /* rms: considering make_cursor_line_fully_visible_p here seems to give wrong results. We don't want to recenter when the last line is partly visible, we want to allow diff -r 7a3090aca393 -r 2a679c81f552 src/xfaces.c --- a/src/xfaces.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/xfaces.c Sun Oct 09 20:00:17 2005 +0000 @@ -1480,7 +1480,9 @@ /* Return non-zero if COLOR_NAME is a shade of gray (or white or - black) on frame F. The algorithm is taken from 20.2 faces.el. */ + black) on frame F. + + The criterion implemented here is not a terribly sophisticated one. */ static int face_color_gray_p (f, color_name) @@ -1491,12 +1493,15 @@ int gray_p; if (defined_color (f, color_name, &color, 0)) - gray_p = ((abs (color.red - color.green) - < max (color.red, color.green) / 20) - && (abs (color.green - color.blue) - < max (color.green, color.blue) / 20) - && (abs (color.blue - color.red) - < max (color.blue, color.red) / 20)); + gray_p = (/* Any color sufficiently close to black counts as grey. */ + (color.red < 5000 && color.green < 5000 && color.blue < 5000) + || + ((abs (color.red - color.green) + < max (color.red, color.green) / 20) + && (abs (color.green - color.blue) + < max (color.green, color.blue) / 20) + && (abs (color.blue - color.red) + < max (color.blue, color.red) / 20))); else gray_p = 0; @@ -5827,6 +5832,7 @@ Lisp_Object symbol; int c; int face_id; + int signal_p; { Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; diff -r 7a3090aca393 -r 2a679c81f552 src/xsmfns.c --- a/src/xsmfns.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/xsmfns.c Sun Oct 09 20:00:17 2005 +0000 @@ -45,9 +45,9 @@ #include <sys/param.h> #include <stdio.h> +#include "lisp.h" #include "systime.h" #include "sysselect.h" -#include "lisp.h" #include "frame.h" #include "termhooks.h" #include "termopts.h" diff -r 7a3090aca393 -r 2a679c81f552 src/xterm.c --- a/src/xterm.c Mon Sep 19 21:25:51 2005 +0000 +++ b/src/xterm.c Sun Oct 09 20:00:17 2005 +0000 @@ -4037,8 +4037,6 @@ static Boolean xaw3d_pick_top; -extern void set_vertical_scroll_bar P_ ((struct window *)); - /* Action hook installed via XtAppAddActionHook when toolkit scroll bars are used.. The hook is responsible for detecting when the user ends an interaction with the scroll bar, and generates @@ -6246,7 +6244,7 @@ if (status_return == XBufferOverflow) { copy_bufsiz = nbytes + 1; - copy_bufptr = (char *) alloca (copy_bufsiz); + copy_bufptr = (unsigned char *) alloca (copy_bufsiz); nbytes = XmbLookupString (FRAME_XIC (f), &event.xkey, copy_bufptr, copy_bufsiz, &keysym, @@ -6264,7 +6262,7 @@ if (status_return == XBufferOverflow) { copy_bufsiz = nbytes + 1; - copy_bufptr = (char *) alloca (copy_bufsiz); + copy_bufptr = (unsigned char *) alloca (copy_bufsiz); nbytes = Xutf8LookupString (FRAME_XIC (f), &event.xkey, copy_bufptr, @@ -6765,13 +6763,13 @@ && (int)(event.xbutton.time - ignore_next_mouse_click_timeout) > 0) { ignore_next_mouse_click_timeout = 0; - construct_mouse_click (&inev.ie, &event, f); + construct_mouse_click (&inev.ie, &event.xbutton, f); } if (event.type == ButtonRelease) ignore_next_mouse_click_timeout = 0; } else - construct_mouse_click (&inev.ie, &event, f); + construct_mouse_click (&inev.ie, &event.xbutton, f); } } } diff -r 7a3090aca393 -r 2a679c81f552 src/xterm.h --- a/src/xterm.h Mon Sep 19 21:25:51 2005 +0000 +++ b/src/xterm.h Sun Oct 09 20:00:17 2005 +0000 @@ -1003,6 +1003,7 @@ extern void x_query_colors P_ ((struct frame *f, XColor *, int)); extern void x_query_color P_ ((struct frame *f, XColor *)); extern void x_clear_area P_ ((Display *, Window, int, int, int, int, int)); +extern void set_vertical_scroll_bar P_ ((struct window *)); extern int x_dispatch_event P_ ((XEvent *, Display *));