changeset 89985:0b158db81c28

Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-44 Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-562 Update from CVS: lisp/subr.el (after-change-major-mode-hook): Doc fix. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-563 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-570 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 25 Sep 2004 12:05:36 +0000
parents 8592df97bf76 (current diff) 82faaf96bf77 (diff)
children eebcd044d7bc
files ChangeLog configure configure.in etc/NEWS leim/quail/uni-input.el lisp/ChangeLog lisp/calc/calc-graph.el lisp/calendar/calendar.el lisp/calendar/holidays.el lisp/ido.el lisp/image.el lisp/ls-lisp.el lisp/printing.el lisp/progmodes/tcl.el lisp/subr.el lisp/textmodes/enriched.el lispref/ChangeLog lispref/display.texi lispref/hooks.texi lispref/modes.texi lispref/text.texi man/ChangeLog man/calc.texi man/display.texi src/ChangeLog src/Makefile.in src/config.in
diffstat 27 files changed, 1192 insertions(+), 235 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Sep 21 20:44:26 2004 +0000
+++ b/ChangeLog	Sat Sep 25 12:05:36 2004 +0000
@@ -1,3 +1,8 @@
+2004-09-24  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* configure.in: Check for exec-shield.
+	* configure: Rebuild.
+
 2004-08-06  Andreas Schwab  <schwab@suse.de>
 
 	* Makefile.in (install-arch-indep, uninstall): Add flymake.
--- a/configure	Tue Sep 21 20:44:26 2004 +0000
+++ b/configure	Sat Sep 25 12:05:36 2004 +0000
@@ -310,7 +310,7 @@
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LN_S CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO EGREP LIBSOUND SET_MAKE PKG_CONFIG GTK_CFLAGS GTK_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LN_S CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO EGREP SETARCH LIBSOUND SET_MAKE PKG_CONFIG GTK_CFLAGS GTK_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -4278,6 +4278,80 @@
 
 
 
+echo "$as_me:$LINENO: checking for /proc/sys/kernel/exec-shield" >&5
+echo $ECHO_N "checking for /proc/sys/kernel/exec-shield... $ECHO_C" >&6
+if test "${ac_cv_file__proc_sys_kernel_exec_shield+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  test "$cross_compiling" = yes &&
+  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+if test -r "/proc/sys/kernel/exec-shield"; then
+  ac_cv_file__proc_sys_kernel_exec_shield=yes
+else
+  ac_cv_file__proc_sys_kernel_exec_shield=no
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_file__proc_sys_kernel_exec_shield" >&5
+echo "${ECHO_T}$ac_cv_file__proc_sys_kernel_exec_shield" >&6
+if test $ac_cv_file__proc_sys_kernel_exec_shield = yes; then
+  emacs_cv_execshield=1
+else
+  emacs_cv_execshield=0
+fi
+
+if test "$emacs_cv_execshield" = 1; then
+   # Extract the first word of "setarch", so it can be a program name with args.
+set dummy setarch; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_SETARCH+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $SETARCH in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SETARCH="$SETARCH" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_SETARCH="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_SETARCH" && ac_cv_path_SETARCH="no"
+  ;;
+esac
+fi
+SETARCH=$ac_cv_path_SETARCH
+
+if test -n "$SETARCH"; then
+  echo "$as_me:$LINENO: result: $SETARCH" >&5
+echo "${ECHO_T}$SETARCH" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+   if test "$setarch" != no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_EXECSHIELD 1
+_ACEOF
+
+   fi
+fi
+
 #### Extract some information from the operating system and machine files.
 
 { echo "$as_me:$LINENO: checking the machine- and system-dependent files to find out
@@ -13277,7 +13351,6 @@
 
 
 
-
 for ac_func in gethostname getdomainname dup2 \
 rename closedir mkdir rmdir sysinfo \
 random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime res_init setsid \
@@ -13286,7 +13359,7 @@
 __fpending mblen mbrlen mbsinit strsignal setitimer ualarm index rindex \
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap memmove fsync bzero \
-memset memcmp memmove difftime memcpy mempcpy mblen mbrlen posix_memalign
+memset memcmp difftime memcpy mempcpy mblen mbrlen posix_memalign
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -22002,6 +22075,7 @@
 s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
 s,@INSTALL_INFO@,$INSTALL_INFO,;t t
 s,@EGREP@,$EGREP,;t t
+s,@SETARCH@,$SETARCH,;t t
 s,@LIBSOUND@,$LIBSOUND,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
 s,@PKG_CONFIG@,$PKG_CONFIG,;t t
--- a/configure.in	Tue Sep 21 20:44:26 2004 +0000
+++ b/configure.in	Sat Sep 25 12:05:36 2004 +0000
@@ -1286,6 +1286,17 @@
 dnl checks for Unix variants
 AC_AIX
 
+dnl check if exec-shield is present.
+AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1,
+					    emacs_cv_execshield=0)
+if test "$emacs_cv_execshield" = 1; then
+   AC_PATH_PROG(SETARCH, setarch, no)
+   AC_SUBST(SETARCH)
+   if test "$setarch" != no; then
+     AC_DEFINE(HAVE_EXECSHIELD, 1, [Define to 1 if this OS has exec shield.])
+   fi
+fi
+
 #### Extract some information from the operating system and machine files.
 
 AC_CHECKING([the machine- and system-dependent files to find out
@@ -2342,7 +2353,7 @@
 __fpending mblen mbrlen mbsinit strsignal setitimer ualarm index rindex \
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap memmove fsync bzero \
-memset memcmp memmove difftime memcpy mempcpy mblen mbrlen posix_memalign)
+memset memcmp difftime memcpy mempcpy mblen mbrlen posix_memalign)
 
 AC_CHECK_HEADERS(sys/un.h)
 
--- a/etc/NEWS	Tue Sep 21 20:44:26 2004 +0000
+++ b/etc/NEWS	Sat Sep 25 12:05:36 2004 +0000
@@ -436,6 +436,7 @@
 	% emacsclient -s foo file1
 	% emacsclient -s bar file2
 
++++
 ** On window systems, lines which are exactly as wide as the window
 (not counting the final newline character) are no longer broken into
 two lines on the display (with just the newline on the second line).
@@ -445,6 +446,7 @@
 The new user option 'overflow-newline-into-fringe' may be set to nil to
 revert to the old behaviour of continuing such lines.
 
++++
 ** The buffer boundaries (i.e. first and last line in the buffer) may
 now be marked with angle bitmaps in the fringes.  In addition, up and
 down arrow bitmaps may be shown at the top and bottom of the left or
@@ -1482,6 +1484,12 @@
 year and day number, and moves to that date. Negative day numbers
 count backward from the end of the year.
 
+---
+** The functions `holiday-easter-etc' and `holiday-advent' now take
+arguments, and only report on the specified holiday rather than all.
+This makes customization of the variable `christian-holidays' simpler,
+but existing customizations may need to be updated.
+
 ** The function `simple-diary-display' now by default sets a header line.
 This can be controlled through the variables `diary-header-line-flag'
 and `diary-header-line-format'.
@@ -2395,9 +2403,11 @@
 if the file is indeed remote.  (Before, the return value was t in
 this case.)
 
++++
 ** The display space :width and :align-to text properties are now
 supported on text terminals.
 
++++
 ** Support for displaying image slices
 
 *** New display property (slice X Y WIDTH HEIGHT) may be used with
@@ -2409,6 +2419,7 @@
 *** New function insert-sliced-image inserts a given image as a
 specified number of evenly sized slices (rows x columns).
 
++++
 ** New line-height and line-spacing properties for newline characters
 
 A newline may now have line-height and line-spacing text or overlay
@@ -2445,10 +2456,10 @@
 total height of the line, i.e. a varying number of pixels are inserted
 after each line to make each line exactly that many pixels high.
 
-
 ** The buffer local line-spacing variable may now have a float value,
 which is used as a height relative to the default frame line height.
 
++++
 ** Enhancements to stretch display properties
 
 The display property stretch specification form `(space PROPS)', where
@@ -2505,6 +2516,7 @@
 The form `(+ EXPR ...)' adds up the value of the expressions.
 The form `(- EXPR ...)' negates or subtracts the value of the expressions.
 
++++
 ** Normally, the cursor is displayed at the end of any overlay and
 text property string that may be present at the current window
 position.  The cursor may now be placed on any character of such
@@ -2522,7 +2534,10 @@
 preferred method for defining default faces in a way that makes a good
 use of the capabilities of the display.
 
-** New function 'define-fringe-bitmap' can now be used to change the
++++
+** Customizable fringe bitmaps
+
+*** New function 'define-fringe-bitmap' can now be used to change the
 built-in fringe bitmaps, as well as create new fringe bitmaps.
 The return value is a number identifying the new fringe bitmap.
 
@@ -2530,15 +2545,15 @@
 bitmap to change with the value of the corresponding symbol, like
 `left-truncation-fringe-bitmap' or `continued-line-fringe-bitmap'.
 
-** New function 'destroy-fringe-bitmap' may be used to destroy a
+*** New function 'destroy-fringe-bitmap' may be used to destroy a
 previously created bitmap, or restore a built-in bitmap.
 
-** New function 'set-fringe-bitmap-face' can now be used to set a
+*** New function 'set-fringe-bitmap-face' can now be used to set a
 specific face to be used for a specific fringe bitmap.  Normally,
 this should be a face derived from the `fringe' face, specifying
 the foreground color as the desired color of the bitmap.
 
-** There are new display properties, left-fringe and right-fringe,
+*** There are new display properties, left-fringe and right-fringe,
 that can be used to show a specific bitmap in the left or right fringe
 bitmap of the display line.
 
@@ -2547,7 +2562,7 @@
 `define-fringe-bitmap', and FACE is an optional face name to be used
 for displaying the bitmap.
 
-** New function `fringe-bitmaps-at-pos' returns a cons (LEFT . RIGHT)
+*** New function `fringe-bitmaps-at-pos' returns a cons (LEFT . RIGHT)
 identifying the current fringe bitmaps in the display line at a given
 buffer position.  A nil value means no bitmap.
 
@@ -2614,18 +2629,23 @@
 whose cdr is the overlay in which the property was found, or nil if
 it was found as a text property or not found at all.
 
++++ (lispref)
+??? (man)
 ** The mouse pointer shape in void text areas (i.e. after the end of a
 line or below the last line in the buffer) of the text window is now
 controlled by the new variable `void-text-area-pointer'.  The default
 is to use the `arrow' (non-text) pointer.  Other choices are `text'
 (or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'.
 
++++
 ** The mouse pointer shape over an image can now be controlled by the
 :pointer image property.
 
++++
 ** The mouse pointer shape over ordinary text or images may now be
 controlled/overriden via the `pointer' text property.
 
++++
 ** Images may now have an associated image map via the :map property.
 
 An image map is an alist where each element has the format (AREA ID PLIST).
--- a/leim/quail/uni-input.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/leim/quail/uni-input.el	Sat Sep 25 12:05:36 2004 +0000
@@ -73,8 +73,9 @@
 			(ucs-input-insert-char key))
 		    (let ((last-command-char key)
 			  (current-prefix-arg))
-		      (condition-case nil
-			  (call-interactively (key-binding seq))))
+		      (condition-case err
+			  (call-interactively (key-binding seq))
+			(quail-error (message "%s" (cdr err)) (beep))))
 		    (quail-delete-region)
 		    (throw 'non-digit (append (reverse events)
 					      (listify-key-sequence seq))))))
--- a/lisp/ChangeLog	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/ChangeLog	Sat Sep 25 12:05:36 2004 +0000
@@ -1,3 +1,93 @@
+2004-09-25  Lars Hansen  <larsh@math.ku.dk>
+
+	* ls-lisp.el (ls-lisp-format): Mark file names with poperty
+	dired-filename.
+
+2004-09-25  Kim F. Storm  <storm@cua.dk>
+
+	* ido.el (ido-max-directory-size): New defcustom.
+	(ido-decorations): Add "too big" element.
+	(ido-directory-too-big): New dynamic var.
+	(ido-may-cache-directory): Don't cache big directories.
+	(ido-directory-too-big-p): New defun.
+	(ido-set-current-directory): Update ido-directory-too-big.
+	(ido-read-internal): Make empty ido-cur-item if too-big.
+	(ido-buffer-internal): Use ido-read-internal directly instead of
+	ido-read-buffer.
+	(ido-file-internal): Init ido-directory-too-big.
+	(ido-complete): <TAB> If ido-directory-too-big is set, clear it,
+	and redo completion with full list.
+	(ido-toggle-ignore): <C-a> If ido-directory-too-big is set, clear
+	it, and show completions.
+	(ido-all-completions): Let bind ido-directory-too-big to nil.
+	(ido-exhibit): Handle ido-directory-too-big.
+	(ido-read-buffer): Handle fallback to read-buffer.  Init
+	ido-directory-too-big.
+	(ido-read-file-name, ido-read-directory-name, ido-completing-read):
+	Init ido-directory-too-big.
+
+2004-09-24  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* subr.el (delay-mode-hooks): Doc fix.
+
+2004-09-23  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* textmodes/enriched.el
+	(enriched-default-text-properties-local-flag): New variable.
+	(enriched-mode): Make sure that enabling and disabling the mode is
+	a no-op.  Doc fix.
+
+2004-09-23  H,Ae(Bkon Malmedal  <hmalmedal@yahoo.no>  (tiny change)
+
+	* calendar/holidays.el (holiday-advent): Report on a specified day
+	offset from advent, not just advent.
+	(holiday-easter-etc): Report on one specified day offset from
+	easter, not all easter holidays. Various Easter holidays moved to
+	`christian-holidays' variable in calendar.el.
+	* calendar/calendar.el (christian-holidays): Adapt for new
+	behaviour of `holiday-advent' and `holiday-easter-etc' functions.
+
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* image.el (insert-sliced-image): Add doc string.
+
+	* ido.el (ido-choice-list): New dynamic var for `list' context.
+	(ido-context-switch-command): New dynamic var.
+	(ido-define-mode-map): Generalize switch between file/buffer contexts.
+	(ido-read-internal): Handle new `list' context.
+	Handle insert-buffer and insert-file ido-exit values.
+	(ido-buffer-internal): New arg switch-cmd.  Use it to setup
+	ido-context-switch-command. Handle insert-file ido-exit value.
+	(ido-read-buffer): Set ido-context-switch-command to 'ignore
+	unless it is already bound by caller.
+	(ido-file-internal): New arg switch-cmd.  Use it to setup
+	ido-context-switch-command.  Handle insert-buffer ido-exit value.
+	(ido-enter-insert-buffer, ido-enter-insert-file): New commands
+	used for context switching.
+	(ido-all-completions): Handle new `list' context.
+	(ido-make-choice-list): Return choices for `list' context.
+	(ido-find-file-in-dir, ido-display-file, ido-write-file)
+	(ido-display-buffer, ido-kill-buffer): Disable context switching.
+	(ido-insert-buffer, ido-insert-file): Setup context switching.
+	(ido-exhibit): Handle `list' context.
+	(ido-read-file-name): Disable context switching.  Handle fallback.
+	(ido-read-directory-name): Disable context switching.
+	(ido-completing-read): New defun like completing-read.  Setup and
+	use new `list' context.
+
+2004-09-20  Jesper Harder  <harder@ifa.au.dk>
+
+	* progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
+
+2004-09-21  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* subr.el (after-change-major-mode-hook): Doc fix.
+
+2004-09-21  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el: Doc fix.  Add a new tip about the use of gsprint instead
+	of ghostscript for monochrome PostScript file in Windows.
+
 2004-09-21  Kenichi Handa  <handa@m17n.org>
 
 	* descr-text.el (describe-char): Checking of quail activation
--- a/lisp/calc/calc-graph.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/calc/calc-graph.el	Sat Sep 25 12:05:36 2004 +0000
@@ -210,13 +210,13 @@
 	      "title \"" (symbol-name (nth 1 ydata)) "\" "
 	      "with dots")
       (setq pstyle (and (eq (car-safe pstyle) 'vec) (nth (1+ num) pstyle)))
-      (setq lstyle (and (eq (car-safe lstyle) 'vec) (nth (1+ num) lstyle)))
-      (calc-graph-set-styles
-       (or (and (Math-num-integerp lstyle) (math-trunc lstyle))
-	   0)
-       (or (and (Math-num-integerp pstyle) (math-trunc pstyle))
-	   (if (eq (car-safe (calc-var-value (nth 2 ydata))) 'vec)
-	       0 -1))))))
+      (setq lstyle (and (eq (car-safe lstyle) 'vec) (nth (1+ num) lstyle))))
+    (calc-graph-set-styles
+     (or (and (Math-num-integerp lstyle) (math-trunc lstyle))
+         0)
+     (or (and (Math-num-integerp pstyle) (math-trunc pstyle))
+         (if (eq (car-safe (calc-var-value (nth 2 ydata))) 'vec)
+             0 -1)))))
 
 (defun calc-graph-lookup (thing)
   (if (and (eq (car-safe thing) 'var)
--- a/lisp/calendar/calendar.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/calendar/calendar.el	Sat Sep 25 12:05:36 2004 +0000
@@ -4,6 +4,7 @@
 ;;	2000, 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: calendar, Gregorian calendar, diary, holidays
 
@@ -1046,13 +1047,43 @@
 (defcustom christian-holidays
   '((if all-christian-calendar-holidays
         (holiday-fixed 1 6 "Epiphany"))
-    (holiday-easter-etc)
+    (holiday-easter-etc 0 "Easter Sunday")
+    (holiday-easter-etc -2 "Good Friday")
+    (holiday-easter-etc -46 "Ash Wednesday")
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -63 "Septuagesima Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -56 "Sexagesima Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -49 "Shrove Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -48 "Shrove Monday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -47 "Shrove Tuesday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -14 "Passion Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -7 "Palm Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -3 "Maundy Thursday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 35 "Rogation Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 39 "Ascension Day"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 49 "Pentecost (Whitsunday)"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 50 "Whitmonday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 56 "Trinity Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 60 "Corpus Christi"))
     (if all-christian-calendar-holidays
         (holiday-greek-orthodox-easter))
     (if all-christian-calendar-holidays
         (holiday-fixed 8 15 "Assumption"))
     (if all-christian-calendar-holidays
-        (holiday-advent))
+        (holiday-advent 0 "Advent"))
     (holiday-fixed 12 25 "Christmas")
     (if all-christian-calendar-holidays
         (holiday-julian 12 25 "Eastern Orthodox Christmas")))
--- a/lisp/calendar/holidays.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/calendar/holidays.el	Sat Sep 25 12:05:36 2004 +0000
@@ -1,8 +1,10 @@
 ;;; holidays.el --- holiday functions for the calendar package
 
-;; Copyright (C) 1989, 90, 92, 93, 94, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1997, 2004 Free
+;;   Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: holidays, calendar
 
 ;; This file is part of GNU Emacs.
@@ -398,86 +400,46 @@
              (string (if date (eval string))))
         (list (list date string)))))))
 
-(defun holiday-advent ()
-  "Date of Advent, if visible in calendar window."
+(defun holiday-advent (n string)
+  "Date of Nth day after advent (named STRING), if visible in calendar window."
   (let ((year displayed-year)
         (month displayed-month))
     (increment-calendar-month month year -1)
     (let ((advent (calendar-gregorian-from-absolute
-                   (calendar-dayname-on-or-before 0
-                    (calendar-absolute-from-gregorian
-                     (list 12 3 year))))))
+                   (+ n
+                      (calendar-dayname-on-or-before
+                       0
+                       (calendar-absolute-from-gregorian
+                        (list 12 3 year)))))))
       (if (calendar-date-is-visible-p advent)
-          (list (list advent "Advent"))))))
+          (list (list advent string))))))
 
-(defun holiday-easter-etc ()
-  "List of dates related to Easter, as visible in calendar window."
- (if (and (> displayed-month 5) (not all-christian-calendar-holidays))
-     nil;; Ash Wednesday, Good Friday, and Easter are not visible.
-   (let* ((century (1+ (/ displayed-year 100)))
-          (shifted-epact        ;; Age of moon for April 5...
-           (% (+ 14 (* 11 (% displayed-year 19));;     ...by Nicaean rule
-                 (-           ;; ...corrected for the Gregorian century rule
-                  (/ (* 3 century) 4))
-                 (/    ;; ...corrected for Metonic cycle inaccuracy.
-                  (+ 5 (* 8 century)) 25)
-                 (* 30 century));;              Keeps value positive.
-              30))
-          (adjusted-epact       ;;  Adjust for 29.5 day month.
-           (if (or (= shifted-epact 0)
-                   (and (= shifted-epact 1) (< 10 (% displayed-year 19))))
-               (1+ shifted-epact)
-             shifted-epact))
-          (paschal-moon       ;; Day after the full moon on or after March 21.
-           (- (calendar-absolute-from-gregorian (list 4 19 displayed-year))
-              adjusted-epact))
-          (abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))
-          (mandatory
+(defun holiday-easter-etc (n string)
+  "Date of Nth day after Easter (named STRING), if visible in calendar window."
+  (let* ((century (1+ (/ displayed-year 100)))
+         (shifted-epact        ;; Age of moon for April 5...
+          (% (+ 14 (* 11 (% displayed-year 19));;     ...by Nicaean rule
+                (-           ;; ...corrected for the Gregorian century rule
+                 (/ (* 3 century) 4))
+                (/    ;; ...corrected for Metonic cycle inaccuracy.
+                 (+ 5 (* 8 century)) 25)
+                (* 30 century));;              Keeps value positive.
+             30))
+         (adjusted-epact       ;;  Adjust for 29.5 day month.
+          (if (or (= shifted-epact 0)
+                  (and (= shifted-epact 1) (< 10 (% displayed-year 19))))
+              (1+ shifted-epact)
+            shifted-epact))
+         (paschal-moon       ;; Day after the full moon on or after March 21.
+          (- (calendar-absolute-from-gregorian (list 4 19 displayed-year))
+             adjusted-epact))
+         (abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))
+         (mandatory
            (list
-            (list (calendar-gregorian-from-absolute abs-easter)
-                  "Easter Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 2))
-                  "Good Friday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 46))
-                  "Ash Wednesday")))
-          (optional
-           (list
-            (list (calendar-gregorian-from-absolute (- abs-easter 63))
-                  "Septuagesima Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 56))
-                  "Sexagesima Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 49))
-                  "Shrove Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 48))
-                  "Shrove Monday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 47))
-                  "Shrove Tuesday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 14))
-                  "Passion Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 7))
-                  "Palm Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 3))
-                  "Maundy Thursday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 35))
-                  "Rogation Sunday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 39))
-                  "Ascension Day")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 49))
-                  "Pentecost (Whitsunday)")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 50))
-                  "Whitmonday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 56))
-                  "Trinity Sunday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 60))
-                  "Corpus Christi")))
-          (output-list
-           (filter-visible-calendar-holidays mandatory)))
-     (if all-christian-calendar-holidays
-         (setq output-list
-               (append
-                (filter-visible-calendar-holidays optional)
-                output-list)))
-     output-list)))
+            (list (calendar-gregorian-from-absolute (+ abs-easter n))
+                  string)))
+         (output-list (filter-visible-calendar-holidays mandatory)))
+    output-list))
 
 (defun holiday-greek-orthodox-easter ()
   "Date of Easter according to the rule of the Council of Nicaea."
--- a/lisp/ido.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/ido.el	Sat Sep 25 12:05:36 2004 +0000
@@ -666,6 +666,14 @@
   :type 'integer
   :group 'ido)
 
+(defcustom ido-max-directory-size 30000
+  "*Maximum size (in bytes) for directories to use ido completion.
+If you enter a directory with a size larger than this size, ido will
+not provide the normal completion.  To show the completions, use C-a."
+  :type '(choice (const :tag "No limit" nil)
+		 (integer :tag "Size in bytes" 30000))
+  :group 'ido)
+
 (defcustom ido-rotate-file-list-default nil
   "*Non-nil means that `ido' will always rotate file list to get default in front."
   :type 'boolean
@@ -699,9 +707,9 @@
   :type '(choice string (const nil))
   :group 'ido)
 
-(defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " [Matched]" " [Not readable]")
+(defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]")
   "*List of strings used by ido to display the alternatives in the minibuffer.
-There are 9 elements in this list:
+There are 10 elements in this list:
 1st and 2nd elements are used as brackets around the prospect list,
 3rd element is the separator between prospects (ignored if ido-separator is set),
 4th element is the string inserted at the end of a truncated list of prospects,
@@ -709,7 +717,8 @@
 can be completed using TAB,
 7th element is the string displayed when there are a no matches, and
 8th element is displayed if there is a single match (and faces are not used).
-9th element is displayed when the current directory is non-readable."
+9th element is displayed when the current directory is non-readable.
+10th element is displayed when directory exceeds `ido-max-directory-size'."
   :type '(repeat string)
   :group 'ido)
 
@@ -933,7 +942,7 @@
 ;;; Variables with dynamic bindings.
 ;;; Declared here to keep the byte compiler quiet.
 
-;; Stores the current ido item type ('file, 'dir or 'buffer).
+;; Stores the current ido item type ('file, 'dir, 'buffer, or 'list).
 (defvar ido-cur-item)
 
 ;; Stores the current list of items that will be searched through.
@@ -942,6 +951,9 @@
 ;; at the end of the list.  Created by `ido-make-item-list'.
 (defvar ido-cur-list)
 
+;; Stores the choice list for ido-completing-read
+(defvar ido-choice-list)
+
 ;; Stores the list of items which are ignored when building
 ;; `ido-cur-list'.  It is in no specific order.
 (defvar ido-ignored-list)
@@ -949,6 +961,9 @@
 ;; Remember if current directory is non-readable (so we cannot do completion).
 (defvar ido-directory-nonreadable)
 
+;; Remember if current directory is 'huge' (so we don't want to do completion).
+(defvar ido-directory-too-big)
+
 ;; Keep current item list if non-nil.
 (defvar ido-keep-item-list)
 
@@ -992,6 +1007,8 @@
 ;; Stores temporary state of literal find file.
 (defvar ido-find-literal)
 
+;; Set to 'ignore to inhibit switching between find-file/switch-buffer.
+(defvar ido-context-switch-command)
 
 ;;; FUNCTIONS
 
@@ -1077,6 +1094,8 @@
 (defun ido-may-cache-directory (&optional dir)
   (setq dir (or dir ido-current-directory))
   (cond
+   ((ido-directory-too-big-p dir)
+    nil)
    ((and (ido-is-root-directory dir)
 	 (or ido-enable-tramp-completion
 	     (memq system-type '(windows-nt ms-dos))))
@@ -1346,8 +1365,8 @@
     (define-key map "?" 'ido-completion-help)
 
     (when (memq ido-cur-item '(file dir))
-      (define-key map "\C-b" 'ido-enter-switch-buffer)
-      (define-key map "\C-d" 'ido-enter-dired)
+      (define-key map "\C-b" (or ido-context-switch-command 'ido-enter-switch-buffer))
+      (define-key map "\C-d" (or (and ido-context-switch-command 'ignore) 'ido-enter-dired))
       (define-key map "\C-f" 'ido-fallback-command)
       (define-key map [down] 'ido-next-match-dir)
       (define-key map [up]   'ido-prev-match-dir)
@@ -1378,8 +1397,8 @@
       )
 
     (when (eq ido-cur-item 'buffer)
+      (define-key map "\C-f" (or ido-context-switch-command 'ido-enter-find-file))
       (define-key map "\C-b" 'ido-fallback-command)
-      (define-key map "\C-f" 'ido-enter-find-file)
       (define-key map "\C-k" 'ido-kill-buffer-at-head)
       )
 
@@ -1420,6 +1439,16 @@
 	 (file-directory-p dir)
 	 (not (file-readable-p dir)))))
 
+(defun ido-directory-too-big-p (dir)
+  ;; Return t if dir is a directory, but too big to show
+  ;; Do not check for non-readable directories via tramp, as this causes a premature
+  ;; connect on incomplete tramp paths (after entring just method:).
+  (let ((ido-enable-tramp-completion nil))
+    (and (numberp ido-max-directory-size)
+	 (ido-final-slash dir)
+	 (file-directory-p dir)
+	 (> (nth 7 (file-attributes dir)) ido-max-directory-size))))
+
 (defun ido-set-current-directory (dir &optional subdir no-merge)
   ;; Set ido's current directory to DIR or DIR/SUBDIR
   (setq dir (ido-final-slash dir t))
@@ -1434,6 +1463,8 @@
     (if (get-buffer ido-completion-buffer)
 	(kill-buffer ido-completion-buffer))
     (setq ido-directory-nonreadable (ido-nonreadable-directory-p dir))
+    (setq ido-directory-too-big (and (not ido-directory-nonreadable)
+				     (ido-directory-too-big-p dir)))
     t))
 
 (defun ido-set-current-home (&optional dir)
@@ -1618,13 +1649,20 @@
 	      ido-rescan nil))
        ((eq ido-cur-item 'file)
 	(setq ido-ignored-list nil
-	      ido-cur-list (ido-make-file-list ido-default-item)))
+	      ido-cur-list (and (not ido-directory-nonreadable)
+				(not ido-directory-too-big)
+				(ido-make-file-list ido-default-item))))
        ((eq ido-cur-item 'dir)
 	(setq ido-ignored-list nil
-	      ido-cur-list (ido-make-dir-list ido-default-item)))
+	      ido-cur-list (and (not ido-directory-nonreadable)
+				(not ido-directory-too-big)
+				(ido-make-dir-list ido-default-item))))
        ((eq ido-cur-item 'buffer)
 	(setq ido-ignored-list nil
 	      ido-cur-list (ido-make-buffer-list ido-default-item)))
+       ((eq ido-cur-item 'list)
+	(setq ido-ignored-list nil
+	      ido-cur-list (ido-make-choice-list ido-default-item)))
        (t nil))
       (setq ido-rotate-temp nil)
 
@@ -1709,7 +1747,7 @@
        ((eq ido-exit 'keep)
 	(setq ido-keep-item-list t))
 
-       ((memq ido-exit '(dired fallback findfile findbuffer))
+       ((memq ido-exit '(dired fallback find-file switch-to-buffer insert-buffer insert-file))
 	(setq done t))
 
        ((eq ido-exit 'updir)
@@ -1789,19 +1827,26 @@
   (exit-minibuffer))
 
 ;;; MAIN FUNCTIONS
-(defun ido-buffer-internal (method &optional fallback prompt default initial)
+(defun ido-buffer-internal (method &optional fallback prompt default initial switch-cmd)
   ;; Internal function for ido-switch-buffer and friends
   (if (not ido-mode)
       (call-interactively (or fallback 'switch-to-buffer))
-    (let ((buf (ido-read-buffer (or prompt "Buffer: ") default nil initial)))
+    (let* ((ido-context-switch-command switch-cmd)
+	   (ido-current-directory nil)
+	   (ido-directory-nonreadable nil)
+	   (ido-directory-too-big nil)
+	   (buf (ido-read-internal 'buffer (or prompt "Buffer: ") 'ido-buffer-history default nil initial)))
 
       ;; Choose the buffer name: either the text typed in, or the head
       ;; of the list of matches
 
       (cond
-       ((eq ido-exit 'findfile)
+       ((eq ido-exit 'find-file)
 	(ido-file-internal ido-default-file-method nil nil nil nil ido-text))
 
+       ((eq ido-exit 'insert-file)
+	(ido-file-internal 'insert 'insert-file nil "Insert file: " nil ido-text 'ido-enter-insert-buffer))
+
        ((eq ido-exit 'fallback)
 	(let ((read-buffer-function nil))
 	  (call-interactively (or fallback 'switch-to-buffer))))
@@ -1833,18 +1878,6 @@
 	    (set-buffer-major-mode buf))
 	(ido-visit-buffer buf method t))))))
 
-;;;###autoload
-(defun ido-read-buffer (prompt &optional default require-match initial)
-  "Replacement for the built-in `read-buffer'.
-Return the name of a buffer selected.
-PROMPT is the prompt to give to the user.  DEFAULT if given is the default
-buffer to be selected, which will go to the front of the list.
-If REQUIRE-MATCH is non-nil, an existing-buffer must be selected.
-If INITIAL is non-nil, it specifies the initial input string."
-  (let ((ido-current-directory nil)
-	(ido-directory-nonreadable nil))
-    (ido-read-internal 'buffer prompt 'ido-buffer-history default require-match initial)))
-
 (defun ido-record-work-directory (&optional dir)
   (when (and (numberp ido-max-work-directory-list) (> ido-max-work-directory-list 0))
     (if (and (setq dir (or dir ido-current-directory)) (> (length dir) 0))
@@ -1886,12 +1919,15 @@
   ;; Add final slash to result in case it was missing from DEFAULT-DIRECTORY.
   (ido-final-slash (expand-file-name (or dir default-directory)) t))
 
-(defun ido-file-internal (method &optional fallback default prompt item initial)
+(defun ido-file-internal (method &optional fallback default prompt item initial switch-cmd)
   ;; Internal function for ido-find-file and friends
   (unless item
     (setq item 'file))
   (let* ((ido-current-directory (ido-expand-directory default))
 	 (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory))
+	 (ido-directory-too-big (and (not ido-directory-nonreadable)
+				     (ido-directory-too-big-p ido-current-directory)))
+	 (ido-context-switch-command switch-cmd)
 	 filename)
 
     (cond
@@ -1943,9 +1979,12 @@
 	      (read-file-name-function nil))
 	  (call-interactively (or fallback 'find-file))))
 
-       ((eq ido-exit 'findbuffer)
+       ((eq ido-exit 'switch-to-buffer)
 	(ido-buffer-internal ido-default-buffer-method nil nil nil ido-text))
 
+       ((eq ido-exit 'insert-buffer)
+	(ido-buffer-internal 'insert 'insert-buffer "Insert buffer: " nil ido-text 'ido-enter-insert-file))
+
        ((eq ido-exit 'dired)
 	(dired (concat ido-current-directory (or ido-text ""))))
 
@@ -2062,6 +2101,12 @@
 	  (setq ido-exit 'refresh)
 	  (exit-minibuffer))))
 
+     (ido-directory-too-big
+      (setq ido-directory-too-big nil)
+      (setq ido-text-init ido-text)
+      (setq ido-exit 'refresh)
+      (exit-minibuffer))
+
      ((not ido-matches)
       (when ido-completion-buffer
 	(call-interactively (setq this-command ido-cannot-complete-command))))
@@ -2165,7 +2210,9 @@
 (defun ido-toggle-ignore ()
   "Toggle ignoring files specified with `ido-ignore-files'."
   (interactive)
-  (setq ido-process-ignore-lists (not ido-process-ignore-lists))
+  (if ido-directory-too-big
+      (setq ido-directory-too-big nil)
+    (setq ido-process-ignore-lists (not ido-process-ignore-lists)))
   (setq ido-text-init ido-text)
   (setq ido-exit 'refresh)
   (exit-minibuffer))
@@ -2227,13 +2274,13 @@
 (defun ido-enter-find-file ()
   "Drop into find-file from buffer switching."
   (interactive)
-  (setq ido-exit 'findfile)
+  (setq ido-exit 'find-file)
   (exit-minibuffer))
 
 (defun ido-enter-switch-buffer ()
   "Drop into ido-switch-buffer from file switching."
   (interactive)
-  (setq ido-exit 'findbuffer)
+  (setq ido-exit 'switch-to-buffer)
   (exit-minibuffer))
 
 (defun ido-enter-dired ()
@@ -2242,6 +2289,18 @@
   (setq ido-exit 'dired)
   (exit-minibuffer))
 
+(defun ido-enter-insert-buffer ()
+  "Drop into insert buffer from insert file."
+  (interactive)
+  (setq ido-exit 'insert-buffer)
+  (exit-minibuffer))
+
+(defun ido-enter-insert-file ()
+  "Drop into insert file from insert buffer."
+  (interactive)
+  (setq ido-exit 'insert-file)
+  (exit-minibuffer))
+
 
 (defun ido-up-directory (&optional clear)
   "Go up one directory level."
@@ -2295,6 +2354,7 @@
 	       (not (equal dir ido-current-directory))
 	       (file-directory-p dir)
 	       (or (not must-match)
+		   ;; TODO. check for nonreadable and too-big.
 		   (ido-set-matches1
 		    (if (eq ido-cur-item 'file)
 			(ido-make-file-list1 dir)
@@ -2552,7 +2612,8 @@
 
 (defun ido-all-completions ()
   ;; Return unsorted list of all competions.
-  (let ((ido-process-ignore-lists nil))
+  (let ((ido-process-ignore-lists nil)
+	(ido-directory-too-big nil))
     (cond
      ((eq ido-cur-item 'file)
       (ido-make-file-list1 ido-current-directory))
@@ -2560,6 +2621,8 @@
       (ido-make-dir-list1 ido-current-directory))
      ((eq ido-cur-item 'buffer)
       (ido-make-buffer-list1))
+     ((eq ido-cur-item 'list)
+      ido-choice-list)
      (t nil))))
 
 
@@ -2669,6 +2732,7 @@
 		       (or ido-merge-ftp-work-directories
 			   (not (ido-is-ftp-directory dir)))
 		       (file-directory-p dir)
+		       ;; TODO. check for nonreadable and too-big.
 		       (setq fl (if (eq ido-cur-item 'file)
 				    (ido-make-file-list1 dir t)
 				  (ido-make-dir-list1 dir t))))
@@ -2722,6 +2786,20 @@
     (run-hooks 'ido-make-buffer-list-hook)
     ido-temp-list))
 
+(defun ido-make-choice-list (default)
+  ;; Return the current list of choices.
+  ;; If DEFAULT is non-nil, and corresponds to an element of choices,
+  ;; it is put to the start of the list.
+  (let ((ido-temp-list ido-choice-list))
+    (if default
+	(progn
+	  (setq ido-temp-list
+		(delete default ido-temp-list))
+	  (setq ido-temp-list
+		(cons default ido-temp-list))))
+    ; (run-hooks 'ido-make-choice-list-hook)
+    ido-temp-list))
+
 (defun ido-to-end (items)
   ;; Move the elements from ITEMS to the end of `ido-temp-list'
   (mapcar
@@ -2735,6 +2813,8 @@
 (defun ido-file-name-all-completions1 (dir)
   (cond
    ((ido-nonreadable-directory-p dir) '())
+   ;; do not check (ido-directory-too-big-p dir) here.
+   ;; Caller must have done that if necessary.
    ((and ido-enable-tramp-completion
 	 (string-match "\\`/\\([^/:]+:\\([^/:@]+@\\)?\\)\\'" dir))
 
@@ -3277,7 +3357,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'display 'display-buffer))
+  (ido-buffer-internal 'display 'display-buffer nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-kill-buffer ()
@@ -3285,7 +3365,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer))))
+  (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer)) nil 'ignore))
 
 ;;;###autoload
 (defun ido-insert-buffer ()
@@ -3293,7 +3373,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: "))
+  (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: " nil nil 'ido-enter-insert-file))
 
 ;;;###autoload
 (defun ido-switch-buffer-other-frame ()
@@ -3311,7 +3391,7 @@
   (interactive "DDir: ")
   (if (not (equal (substring dir -1) "/"))
       (setq dir (concat dir "/")))
-  (ido-file-internal ido-default-file-method nil dir))
+  (ido-file-internal ido-default-file-method nil dir nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-find-file ()
@@ -3404,7 +3484,7 @@
 The file name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido-find-file'."
   (interactive)
-  (ido-file-internal 'display))
+  (ido-file-internal 'display nil nil nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-find-file-other-frame ()
@@ -3426,7 +3506,7 @@
 	(ido-report-no-match nil)
 	(ido-confirm-unique-completion t)
 	(ido-auto-merge-work-directories-length -1))
-    (ido-file-internal 'write 'write-file nil "Write file: ")))
+    (ido-file-internal 'write 'write-file nil "Write file: " nil nil 'ignore)))
 
 ;;;###autoload
 (defun ido-insert-file ()
@@ -3434,7 +3514,7 @@
 The file name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido-find-file'."
   (interactive)
-  (ido-file-internal 'insert 'insert-file nil "Insert file: "))
+  (ido-file-internal 'insert 'insert-file nil "Insert file: " nil nil 'ido-enter-insert-buffer))
 
 ;;;###autoload
 (defun ido-dired ()
@@ -3515,7 +3595,7 @@
 
 	;; Handle explicit directory changes
 	(cond
-	 ((eq ido-cur-item 'buffer)
+	 ((memq ido-cur-item '(buffer list))
 	  )
 
 	 ((= (length contents) 0)
@@ -3571,7 +3651,7 @@
 		 (expand-file-name "/" ido-current-directory)
 	       "/"))
 	    (setq refresh t))
-	   ((and ido-directory-nonreadable
+	   ((and (or ido-directory-nonreadable ido-directory-too-big)
 		 (file-directory-p (concat ido-current-directory (file-name-directory contents))))
 	    (ido-set-current-directory
 	     (concat ido-current-directory (file-name-directory contents)))
@@ -3633,6 +3713,7 @@
 
 	(when (and (not ido-matches)
 		   (not ido-directory-nonreadable)
+		   (not ido-directory-too-big)
 		   ;; ido-rescan ?
 		   ido-process-ignore-lists
 		   ido-ignored-list)
@@ -3656,7 +3737,8 @@
 	       (not (ido-is-root-directory))
 	       (> (length contents) 1)
 	       (not (string-match "[$]" contents))
-	       (not ido-directory-nonreadable))
+	       (not ido-directory-nonreadable)
+	       (not ido-directory-too-big))
 	  (ido-trace "merge?")
 	  (if ido-use-merged-list
 	      (ido-undo-merge-work-directory contents nil)
@@ -3721,6 +3803,8 @@
 	   (cond
 	    (ido-directory-nonreadable
 	     (or (nth 8 ido-decorations) " [Not readable]"))
+	    (ido-directory-too-big
+	     (or (nth 9 ido-decorations) " [Too big]"))
 	    (ido-report-no-match
 	     (nth 6 ido-decorations))  ;; [No match]
 	    (t "")))
@@ -3827,41 +3911,75 @@
 (put 'dired-do-rename 'ido 'ignore)
 
 ;;;###autoload
+(defun ido-read-buffer (prompt &optional default require-match)
+  "Ido replacement for the built-in `read-buffer'.
+Return the name of a buffer selected.
+PROMPT is the prompt to give to the user.  DEFAULT if given is the default
+buffer to be selected, which will go to the front of the list.
+If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
+  (let* ((ido-current-directory nil)
+	 (ido-directory-nonreadable nil)
+	 (ido-directory-too-big nil)
+	 (ido-context-switch-command 'ignore)
+	 (buf (ido-read-internal 'buffer prompt 'ido-buffer-history default require-match)))
+    (if (eq ido-exit 'fallback)
+	(let ((read-buffer-function nil))
+	  (read-buffer prompt default require-match))
+      buf)))
+
+;;;###autoload
 (defun ido-read-file-name (prompt &optional dir default-filename mustmatch initial predicate)
-  "Read file name, prompting with PROMPT and completing in directory DIR.
+  "Ido replacement for the built-in `read-file-name'.
+Read file name, prompting with PROMPT and completing in directory DIR.
 See `read-file-name' for additional parameters."
-  (cond
-  ((or (eq predicate 'file-directory-p)
-       (eq (get this-command 'ido) 'dir)
-       (memq this-command ido-read-file-name-as-directory-commands))
-   (ido-read-directory-name prompt dir default-filename mustmatch initial))
-  ((and (not (eq (get this-command 'ido) 'ignore))
-	(not (memq this-command ido-read-file-name-non-ido))
-	(or (null predicate) (eq predicate 'file-exists-p)))
-   (let* (filename
-	  ido-saved-vc-hb
-	  (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))
-	  (ido-current-directory (ido-expand-directory dir))
-	  (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
-	  (ido-work-directory-index -1)
-	  (ido-work-file-index -1)
-	  (ido-find-literal nil))
-     (setq filename
-	   (ido-read-internal 'file prompt 'ido-file-history default-filename mustmatch initial))
-     (if filename
-	 (concat ido-current-directory filename))))
-  (t
-   (let ((read-file-name-function nil))
-     (read-file-name prompt dir default-filename mustmatch initial predicate)))))
+  (let (filename)
+    (cond
+     ((or (eq predicate 'file-directory-p)
+	  (eq (get this-command 'ido) 'dir)
+	  (memq this-command ido-read-file-name-as-directory-commands))
+      (setq filename
+	    (ido-read-directory-name prompt dir default-filename mustmatch initial)))
+     ((and (not (eq (get this-command 'ido) 'ignore))
+	   (not (memq this-command ido-read-file-name-non-ido))
+	   (or (null predicate) (eq predicate 'file-exists-p)))
+      (let* (ido-saved-vc-hb
+	     (ido-context-switch-command 'ignore)
+	     (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))
+	     (ido-current-directory (ido-expand-directory dir))
+	     (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
+	     (ido-directory-too-big (and (not ido-directory-nonreadable)
+					 (ido-directory-too-big-p ido-current-directory)))
+	     (ido-work-directory-index -1)
+	     (ido-work-file-index -1)
+	     (ido-find-literal nil))
+	(setq ido-exit nil)
+	(setq filename
+	      (ido-read-internal 'file prompt 'ido-file-history default-filename mustmatch initial))
+	(cond
+	 ((eq ido-exit 'fallback)
+	  (setq filename 'fallback))
+	 (filename
+	  (setq filename
+		(concat ido-current-directory filename))))))
+     (t
+      (setq filename 'fallback)))
+    (if (eq filename 'fallback)
+	(let ((read-file-name-function nil))
+	  (read-file-name prompt dir default-filename mustmatch initial predicate))
+      filename)))
 
 ;;;###autoload
 (defun ido-read-directory-name (prompt &optional dir default-dirname mustmatch initial)
-  "Read directory name, prompting with PROMPT and completing in directory DIR.
-See `read-file-name' for additional parameters."
+  "Ido replacement for the built-in `read-directory-name'.
+Read directory name, prompting with PROMPT and completing in directory DIR.
+See `read-directory-name' for additional parameters."
   (let* (filename
+	 (ido-context-switch-command 'ignore)
 	 ido-saved-vc-hb
 	 (ido-current-directory (ido-expand-directory dir))
 	 (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
+	 (ido-directory-too-big (and (not ido-directory-nonreadable)
+				     (ido-directory-too-big-p ido-current-directory)))
 	 (ido-work-directory-index -1)
 	 (ido-work-file-index -1))
     (setq filename
@@ -3871,5 +3989,29 @@
 	    ido-current-directory
 	  (concat ido-current-directory filename)))))
 
+;;;###autoload
+(defun ido-completing-read (prompt choices &optional predicate require-match initial-input hist def)
+  "Ido replacement for the built-in `completing-read'.
+Read a string in the minibuffer with ido-style completion.
+PROMPT is a string to prompt with; normally it ends in a colon and a space.
+CHOICES is a list of strings which are the possible completions.
+PREDICATE is currently ignored; it is included to be compatible
+ with `completing-read'.
+If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
+ the input is (or completes to) an element of CHOICES or is null.
+ If the input is null, `ido-completing-read' returns DEF, or an empty
+ string if DEF is nil, regardless of the value of REQUIRE-MATCH.
+If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
+ with point positioned at the end.
+HIST, if non-nil, specifies a history list.
+DEF, if non-nil, is the default value."
+  (let ((ido-current-directory nil)
+	(ido-directory-nonreadable nil)
+	(ido-directory-too-big nil)
+	(ido-context-switch-command 'ignore)
+	(ido-choice-list choices))
+    (ido-read-internal 'list prompt hist def require-match initial-input)))
+
+
 ;;; arch-tag: b63a3500-1735-41bd-8a01-05373f0864da
 ;;; ido.el ends here
--- a/lisp/image.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/image.el	Sat Sep 25 12:05:36 2004 +0000
@@ -228,6 +228,15 @@
 
 
 (defun insert-sliced-image (image &optional string area rows cols)
+  "Insert IMAGE into current buffer at point.
+IMAGE is displayed by inserting STRING into the current buffer
+with a `display' property whose value is the image.  STRING is
+defaulted if you omit it.
+AREA is where to display the image.  AREA nil or omitted means
+display it in the text area, a value of `left-margin' means
+display it in the left marginal area, a value of `right-margin'
+means display it in the right marginal area.
+The image is automatically split into ROW x COLS slices."
   (unless string (setq string " "))
   (unless (eq (car-safe image) 'image)
     (error "Not an image: %s" image))
--- a/lisp/ls-lisp.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/ls-lisp.el	Sat Sep 25 12:05:36 2004 +0000
@@ -534,7 +534,7 @@
 	    " "
 	    (ls-lisp-format-time file-attr time-index now)
 	    " "
-	    file-name
+	    (propertize file-name 'dired-filename t)
 	    (if (stringp file-type)	; is a symbolic link
 		(concat " -> " file-type))
 	    "\n"
--- a/lisp/printing.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/printing.el	Sat Sep 25 12:05:36 2004 +0000
@@ -5,13 +5,13 @@
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
-;; Time-stamp: <2004/07/20 21:44:43 vinicius>
+;; Time-stamp: <2004/09/21 22:51:58 vinicius>
 ;; Keywords: wp, print, PostScript
 ;; Version: 6.8
 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
 
 (defconst pr-version "6.8"
-  "printing.el, v 6.8 <2004/07/12 vinicius>
+  "printing.el, v 6.8 <2004/09/21 vinicius>
 
 Please send all bug fixes and enhancements to
 	Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -259,6 +259,17 @@
 ;;    PostScript printer.  So, please, don't include this printer in
 ;;    `pr-txt-printer-alist' (which see).
 ;;
+;; 5. Use gsprint instead of ghostscript to print monochrome PostScript files
+;;    in Windows.  The gsprint utility is faster than ghostscript to print
+;;    monochrome PostScript.
+;;
+;;    The efficiency is similar to print non-monochrome PostScript file.
+;;
+;;    Also the gsprint utility comes together with gsview distribution.
+;;
+;;    For more information about gsprint see
+;;    `http://www.cs.wisc.edu/~ghost/gsview/gsprint.htm'.
+;;
 ;;
 ;; Using `printing'
 ;; ----------------
@@ -922,6 +933,7 @@
 ;;
 ;;    gswin32, gsview32
 ;;                   `http://www.gnu.org/software/ghostscript/ghostscript.html'
+;;    gsprint        `http://www.cs.wisc.edu/~ghost/gsview/gsprint.htm'.
 ;;    enscript       `http://people.ssh.fi/mtr/genscript/'
 ;;    psnup          `http://www.dcs.ed.ac.uk/home/ajcd/psutils/index.html'
 ;;    redmon         `http://www.cs.wisc.edu/~ghost/redmon/'
@@ -930,6 +942,9 @@
 ;; Acknowledgments
 ;; ---------------
 ;;
+;; Thanks to Lennart Borgman <lennart.borgman.073@student.lu.se> for gsprint
+;; suggestion (see tip 5 in section Tips).
+;;
 ;; Thanks to Drew Adams <drew.adams@oracle.com> for suggestions:
 ;;    - directory processing.
 ;;    - `pr-path-alist' variable.
--- a/lisp/progmodes/tcl.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/progmodes/tcl.el	Sat Sep 25 12:05:36 2004 +0000
@@ -1,6 +1,6 @@
 ;;; tcl.el --- Tcl code editing commands for Emacs
 
-;; Copyright (C) 1994,98,1999,2000,01,02,2003  Free Software Foundation, Inc.
+;; Copyright (C) 1994,98,1999,2000,01,02,2003,2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Author: Tom Tromey <tromey@redhat.com>
@@ -1104,15 +1104,13 @@
    (list (if current-prefix-arg
 	     (read-string "Run Tcl: " tcl-application)
 	   tcl-application)))
-  (if (not (comint-check-proc "*inferior-tcl*"))
-      (progn
-	(set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
-			   tcl-command-switches))
-	(inferior-tcl-mode)))
-  (make-local-variable 'tcl-application)
-  (setq tcl-application cmd)
+  (unless (comint-check-proc "*inferior-tcl*")
+    (set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
+		       tcl-command-switches))
+    (inferior-tcl-mode))
+  (set (make-local-variable 'tcl-application) cmd)
   (setq inferior-tcl-buffer "*inferior-tcl*")
-  (switch-to-buffer "*inferior-tcl*"))
+  (pop-to-buffer "*inferior-tcl*"))
 
 (defalias 'run-tcl 'inferior-tcl)
 
--- a/lisp/subr.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/subr.el	Sat Sep 25 12:05:36 2004 +0000
@@ -1938,8 +1938,7 @@
 (put 'delay-mode-hooks 'permanent-local t)
 
 (defvar after-change-major-mode-hook nil
-  "Mode independent hook run at the end of major mode functions.
-This is run just before the mode dependent hooks.")
+  "Normal hook run at the very end of major mode functions.")
 
 (defun run-mode-hooks (&rest hooks)
   "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
@@ -1959,6 +1958,8 @@
 
 (defmacro delay-mode-hooks (&rest body)
   "Execute BODY, but delay any `run-mode-hooks'.
+These hooks will be executed by the first following call to
+`run-mode-hooks' that occurs outside any `delayed-mode-hooks' form.
 Only affects hooks run in the current buffer."
   (declare (debug t))
   `(progn
--- a/lisp/textmodes/enriched.el	Tue Sep 21 20:44:26 2004 +0000
+++ b/lisp/textmodes/enriched.el	Sat Sep 25 12:05:36 2004 +0000
@@ -154,6 +154,12 @@
 The value is a list of \(VAR VALUE VAR VALUE...).")
 (make-variable-buffer-local 'enriched-old-bindings)
 
+;; The next variable is buffer local if and only if Enriched mode is
+;; enabled.  The buffer local value records whether
+;; `default-text-properties' should remain buffer local when disabling
+;; Enriched mode.  For technical reasons, the default value should be t.
+(defvar enriched-default-text-properties-local-flag t)
+
 ;; Technical internal variable.  Bound to t if `enriched-mode' is
 ;; being rerun by a major mode to allow it to restore buffer-local
 ;; variables and to correctly update `enriched-old-bindings'.
@@ -169,7 +175,7 @@
   "Minor mode for editing text/enriched files.
 These are files with embedded formatting information in the MIME standard
 text/enriched format.
-Turning the mode on runs `enriched-mode-hook'.
+Turning the mode on or off runs `enriched-mode-hook'.
 
 More information about Enriched mode is available in the file
 etc/enriched.doc in the Emacs distribution directory.
@@ -183,7 +189,11 @@
 	 (setq buffer-file-format (delq 'text/enriched buffer-file-format))
 	 ;; restore old variable values
 	 (while enriched-old-bindings
-	   (set (pop enriched-old-bindings) (pop enriched-old-bindings))))
+	   (set (pop enriched-old-bindings) (pop enriched-old-bindings)))
+	 (unless enriched-default-text-properties-local-flag
+	   (kill-local-variable 'default-text-properties))
+	 (kill-local-variable 'enriched-default-text-properties-local-flag)
+	 (unless use-hard-newlines (use-hard-newlines 0)))
 
 	((and (memq 'text/enriched buffer-file-format)
 	      (not enriched-rerun-flag))
@@ -196,7 +206,11 @@
 	 ;; These will be restored if we exit Enriched mode.
 	 (setq enriched-old-bindings
 	       (list 'buffer-display-table buffer-display-table
-		     'default-text-properties default-text-properties))
+		     'default-text-properties default-text-properties
+		     'use-hard-newlines use-hard-newlines))
+	 (make-local-variable 'enriched-default-text-properties-local-flag)
+	 (setq enriched-default-text-properties-local-flag
+	       (local-variable-p 'default-text-properties))
 	 (make-local-variable 'default-text-properties)
 	 (setq buffer-display-table  enriched-display-table)
 	 (use-hard-newlines 1 (if enriched-rerun-flag 'never nil))
--- a/lispref/ChangeLog	Tue Sep 21 20:44:26 2004 +0000
+++ b/lispref/ChangeLog	Sat Sep 25 12:05:36 2004 +0000
@@ -1,3 +1,62 @@
+2004-09-25  Richard M. Stallman  <rms@gnu.org>
+
+	* text.texi (Special Properties): Cleanups in `cursor'.
+	Rewrites in `line-height' and `line-spacing'; exchange them.
+
+	* display.texi (Fringes): Rewrite previous change.
+	(Fringe Bitmaps): Merge text from Display Fringe Bitmaps.  Rewrite.
+	(Display Fringe Bitmaps): Node deleted, text moved.
+	(Customizing Bitmaps): Split off from Fringe Bitmaps.  Rewrite.
+	(Scroll Bars): Clarify set-window-scroll-bars.
+	(Pointer Shape): Rewrite.
+	(Specified Space): Clarify :align-to, etc.
+	(Pixel Specification): Use @var.  Clarify new text.
+	(Other Display Specs): Clarify `slice'.
+	(Image Descriptors): Cleanups.
+	(Showing Images): Cleanups.
+
+2004-09-24  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* hooks.texi (Standard Hooks): Add `after-change-major-mode-hook'.
+
+	* modes.texi: Various minor changes in addition to:
+	(Major Mode Conventions): Final call to `run-mode-hooks' should
+	not be inside the `delay-mode-hooks' form.
+	(Mode Hooks): New node.
+	(Hooks): Delete obsolete example.
+	Move definitions of `run-mode-hooks' and `delay-mode-hooks' to new
+	node "Mode Hooks".
+
+2004-09-22  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* display.texi: Correct various typos.
+	(Display): Rename node "Pointer Shapes" to "Pointer
+	Shape".  (There is already a node called "Pointer Shapes" in
+	frames.texi.)
+	(Images): Remove non-existent node "Image Slices" from menu.
+
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* text.texi (Special Properties): Add `cursor', `pointer',
+	`line-height', and `line-spacing' properties.
+
+	* display.texi (Display): Add 'Fringe Bitmaps' and 'Pointer
+	Shapes' to menu.
+	(Standard Faces): Doc fix for fringe face.
+	(Fringes): Add `overflow-newline-into-fringe' and
+	'indicate-buffer-boundaries'.
+	(Fringe Bitmaps, Pointer Shapes): New nodes.
+	(Display Property): Add 'Pixel Specification' and 'Display Fringe
+	Bitmaps' to menu.
+	(Specified Space): Describe pixel width and height.
+	(Pixel Specification): New node.
+	(Other Display Specs): Add `slice' property.
+	(Display Fringe Bitmaps): New node.
+	(Images): Add 'Image Slices' to menu.
+	(Image Descriptors): Add `:pointer' and `:map' properties.
+	(Showing Images): Add slice arg to `insert-image'.  Add
+	'insert-sliced-image'.
+
 2004-09-20  Richard M. Stallman  <rms@gnu.org>
 
 	* commands.texi (Key Sequence Input):
--- a/lispref/display.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/lispref/display.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -25,7 +25,10 @@
 * Faces::               A face defines a graphics style for text characters:
                           font, colors, etc.
 * Fringes::             Controlling window fringes.
+* Fringe Bitmaps::      Displaying bitmaps in the window fringes.
+* Customizing Bitmaps:: Specifying your own bitmaps to use in the fringes.
 * Scroll Bars::         Controlling vertical scroll bars.
+* Pointer Shape::       Controlling the mouse pointer shape.
 * Display Property::    Enabling special display features.
 * Images::              Displaying images in Emacs buffers.
 * Buttons::             Adding clickable buttons to Emacs buffers.
@@ -1486,7 +1489,7 @@
 
 @item fringe
 @kindex fringe @r{(face name)}
-This face controls the colors of window fringes, the thin areas on
+This face controls the default colors of window fringes, the thin areas on
 either side that are used to display continuation and truncation glyphs.
 
 @item minibuffer-prompt
@@ -2560,7 +2563,7 @@
 
 @defvar fringes-outside-margins
 If the value is non-@code{nil}, the frames appear outside
-the display margins. 
+the display margins.
 @end defvar
 
 @defvar left-fringe-width
@@ -2596,6 +2599,191 @@
 @var{right-width} @var{frames-outside-margins})}.
 @end defun
 
+@defvar overflow-newline-into-fringe
+If this is non-@code{nil}, lines exactly as wide as the window (not
+counting the final newline character) are not continued.  Instead,
+when point is at the end of the line, the cursor appears in the right
+fringe.
+@end defvar
+
+@node Fringe Bitmaps
+@section Fringe Bitmaps
+@cindex fringe bitmaps
+@cindex bitmaps, fringe
+
+  The @dfn{fringe bitmaps} are tiny icons Emacs displays in the window
+fringe (on a graphic display) to indicate truncated or continued
+lines, buffer boundaries, overlay arrow, etc.  The fringe bitmaps are
+shared by all frames and windows.  You can redefine the built-in
+fringe bitmaps, and you can define new fringe bitmaps.  However, Emacs
+can handle only 255 different fringe bitmaps.
+
+  The way to display a bitmap in the left or right fringes for a given
+line in a window is by specifying the @code{display} property for one
+of the characters that appears in it.  Use a display specification of
+the form @code{(left-fringe @var{bitmap} [@var{face}])} or
+@code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display
+Property}).  Here, @var{bitmap} is an integer identifying the bitmap
+you want, and @var{face} (which is optional) is the name of the face
+whose colors should be used for displaying the bitmap.
+@c ??? Shouldn't the symbol name be used?
+
+  These are the symbols identify the standard fringe bitmaps.
+Evaluate @code{(require 'fringe)} to define them.  Each symbol's
+value is an integer that identifies the corresponding bitmap.
+
+@table @asis
+@item Truncation and continuation line bitmaps:
+@code{left-truncation-fringe-bitmap},
+@code{right-truncation-fringe-bitmap},
+@code{continued-line-fringe-bitmap},
+@code{continuation-line-fringe-bitmap}.
+
+@item Buffer indication bitmaps:
+@code{up-arrow-fringe-bitmap},
+@code{down-arrow-fringe-bitmap},
+@code{top-left-angle-fringe-bitmap},
+@code{top-right-angle-fringe-bitmap},
+@code{bottom-left-angle-fringe-bitmap},
+@code{bottom-right-angle-fringe-bitmap},
+@code{left-bracket-fringe-bitmap},
+@code{right-bracket-fringe-bitmap}.
+
+@item Empty line indication bitmap:
+@code{empty-line-fringe-bitmap}.
+
+@item Overlay arrow bitmap:
+@code{overlay-arrow-fringe-bitmap}.
+
+@item Bitmaps for displaying the cursor in right fringe:
+@code{filled-box-cursor-fringe-bitmap},
+@code{hollow-box-cursor-fringe-bitmap},
+@code{hollow-square-fringe-bitmap}, @code{bar-cursor-fringe-bitmap},
+@code{hbar-cursor-fringe-bitmap}.
+
+@item Value indicating that no fringe bitmap is present:
+@code{no-fringe-bitmap}.
+@c ??? I don't understand what that means.
+@c ??? Where would you find that value?
+
+@item Value indicating a reference to an undefined bitmap:
+@code{undef-fringe-bitmap}.
+@c ??? I don't understand what that means.
+@c ??? Where would you find that value?
+@end table
+
+@defun fringe-bitmaps-at-pos &optional pos window
+This function returns the fringe bitmaps of the display line
+containing position @var{pos} in window @var{window}.  The return
+value has the form @code{(@var{left} . @var{right})}, where @var{left}
+is a list of fringe bitmap numbers for left fringe, and @var{right} is
+similar for the right fringe.  These bitmap numbers are usually values
+of symbols such as the ones listed above.
+
+@c ??? Why not return a list of symbols that identify the bitmaps?
+@c ??? This is Lisp, not C.
+
+The value is @code{nil} if @var{pos} is not visible in @var{window}.
+If @var{window} is @code{nil}, that stands for the selected window.
+If @var{pos} is @code{nil}, that stands for the value of point in
+@var{window}.
+@end defun
+
+@node Customizing Bitmaps
+@section Customizing Fringe Bitmaps
+
+@c ??? Why not pass a symbol as the first argument
+@c ??? and define that symbol.  It would be cleaner.
+
+@defun define-fringe-bitmap bits &optional height width align bitmap
+This function defines a new fringe bitmap, or replaces an existing
+bitmap.
+
+The argument @var{bits} specifies the image to use.  It should be
+either a string or a vector of integers, where each element (an
+integer) corresponds to one row of the bitmap.  Each bit of an integer
+corresponds to one pixel of the bitmap.
+@c ??? Is the low bit the leftmost or the rightmost bit?
+
+The height is normally the length of @var{bits}.  However, you
+can specify a different height with non-@code{nil} @var{height}.  The width
+is normally 8, but you can specify a different width with non-@code{nil}
+@var{width}.  The width must be an integer between 1 and 16.
+
+The argument @var{align} specifies the positioning of the bitmap
+relative to the range of rows where it is used; the default is to
+center the bitmap.  The allowed values are @code{top}, @code{center},
+or @code{bottom}.
+
+The @var{align} argument may also be a list @code{(@var{align}
+@var{periodic})} where @var{align} is intepreted as described above.
+If @var{periodic} is non-@code{nil}, it specifies that the rows in
+@code{bits} should be repeated enough times to reach the specified
+height.
+
+The argument @var{bitmap} specifies an existing bitmap to redefine.
+You should pass the value of the symbol that identifies the bitmap.
+
+The return value on success is an integer identifying the new bitmap.
+You should save that integer in a variable so it can be used to select
+this bitmap.  The value can also be @code{nil} of there are no more
+free bitmap slots.
+@c ??? Why not signal an error?  That would be cleaner.
+@end defun
+
+@defun destroy-fringe-bitmap bitmap
+This function destroy the fringe bitmap identified by @var{bitmap}.
+If @var{bitmap} identifies a standard fringe bitmap, it actually
+restores the standard definition of that bitmap, instead of
+eliminating it entirely.
+@end defun
+
+@defun set-fringe-bitmap-face bitmap &optional face
+This sets the face for the fringe bitmap @var{bitmap} to @var{face}.
+If @var{face} is @code{nil}, it selects the @code{fringe} face.  The
+bitmap's face controls the color to draw it in.
+
+The face you use here should be derived from @code{fringe}, and should
+specify only the foreground color.
+@end defun
+
+@defvar indicate-buffer-boundaries
+This buffer-local variable controls how the buffer boundaries and
+window scrolling are indicated in the window fringes.
+
+Emacs can indicate the buffer boundaries---that is, the first and last
+line in the buffer---with angle icons when they appear on the screen.
+In addition, Emacs can display an up-arrow in the fringe to show
+that there is text above the screen, and a down-arrow to show
+there is text below the screen.
+
+There are four kinds of basic values:
+
+@table @asis
+@item @code{nil}
+Don't display the icons.
+@item @code{left}
+Display them in the left fringe.
+@item @code{right}
+Display them in the right fringe.
+@item @var{anything-else}
+Display the icon at the top of the window top in the left fringe, and other
+in the right fringe.
+@end table
+
+If value is a cons @code{(@var{angles} . @var{arrows})}, @var{angles}
+controls the angle icons, and @var{arrows} controls the arrows.  Both
+@var{angles} and @var{arrows} work according to the table above.
+Thus, @code{(t .  right)} places the top angle icon in the left
+fringe, the bottom angle icon in the right fringe, and both arrows in
+the right fringe.
+@end defvar
+
+@defvar default-indicate-buffer-boundaries
+The value of this variable is the default value for
+@code{indicate-buffer-boundaries} in buffers that do not override it.
+@end defvar
+
 @node Scroll Bars
 @section Scroll Bars
 
@@ -2609,18 +2797,19 @@
 @code{set-window-scroll-bars} to specify what to do for a specific window:
 
 @defun set-window-scroll-bars window width &optional vertical-type horizontal-type
-Set width and type of scroll bars of window @var{window}.  
-If @var{window} is @code{nil}, the selected window is used.
+This function sets the width and type of scroll bars for window
+@var{window}.
+
 @var{width} specifies the scroll bar width in pixels (@code{nil} means
-use whatever is specified for width for the frame).
-@var{vertical-type} specifies whether to have a vertical scroll bar
-and, if so, where.  The possible values are @code{left}, @code{right}
-and @code{nil}, just like the values of the
-@code{vertical-scroll-bars} frame parameter.
+use the width specified for the frame).  @var{vertical-type} specifies
+whether to have a vertical scroll bar and, if so, where.  The possible
+values are @code{left}, @code{right} and @code{nil}, just like the
+values of the @code{vertical-scroll-bars} frame parameter.
 
 The argument @var{horizontal-type} is meant to specify whether and
 where to have horizontal scroll bars, but since they are not
-implemented, it has no effect.
+implemented, it has no effect.  If @var{window} is @code{nil}, the
+selected window is used.
 @end defun
 
 @defun window-scroll-bars &optional window
@@ -2644,6 +2833,26 @@
 window take note of the new values by calling @code{set-window-buffer}
 specifying the same buffer that is already displayed.
 
+@node Pointer Shape
+@section Pointer Shape
+
+  Normally, the mouse pointer has the @code{text} shape over text and
+the @code{arrow} shape over window areas which do not correspond to
+any buffer text.  You can specify the mouse pointer shape over text or
+images via the @code{pointer} text property, and for images with the
+@code{:pointer} and @code{:map} image properties.
+
+  The available pointer shapes are: @code{text} (or @code{nil}),
+@code{arrow}, @code{hand}, @code{vdrag}, @code{hdrag},
+@code{modeline}, and @code{hourglass}.
+
+@defvar void-text-area-pointer
+@tindex void-text-area-pointer
+This variable specifies the mouse pointer shape in void text areas,
+i.e. the areas after the end of a line or below the last line in the
+buffer.  The default is to use the @code{arrow} (non-text) pointer.
+@end defvar
+
 @node Display Property
 @section The @code{display} Property
 @cindex display specification
@@ -2659,6 +2868,7 @@
 
 @menu
 * Specified Space::      Displaying one space with a specified width.
+* Pixel Specification::  Specifying space width or height in pixels.
 * Other Display Specs::  Displaying an image; magnifying text; moving it
                           up or down on the page; adjusting the width
                           of spaces within text.
@@ -2683,9 +2893,10 @@
 
 @table @code
 @item :width @var{width}
-Specifies that the space width should be @var{width} times the normal
-character width.  @var{width} can be an integer or floating point
-number.
+If @var{width} is an integer or floating point number, it specifies
+that the space width should be @var{width} times the normal character
+width.  @var{width} can also be a @dfn{pixel width} specification
+(@pxref{Pixel Specification}).
 
 @item :relative-width @var{factor}
 Specifies that the width of the stretch should be computed from the
@@ -2694,41 +2905,131 @@
 character, multiplied by @var{factor}.
 
 @item :align-to @var{hpos}
-Specifies that the space should be wide enough to reach @var{hpos}.  The
-value @var{hpos} is measured in units of the normal character width.  It
-may be an integer or a floating point number.
+Specifies that the space should be wide enough to reach @var{hpos}.
+If @var{hpos} is a number, it is measured in units of the normal
+character width.  @var{hpos} can also be a @dfn{pixel width}
+specification (@pxref{Pixel Specification}).
 @end table
 
   You should use one and only one of the above properties.  You can
-also specify the height of the space, with other properties:
+also specify the height of the space, with these properties:
 
 @table @code
 @item :height @var{height}
-Specifies the height of the space, as @var{height},
-measured in terms of the normal line height.
+Specifies the height of the space.
+If @var{height} is an integer or floating point number, it specifies
+that the space height should be @var{height} times the normal character
+height.  The @var{height} may also be a @dfn{pixel height} specification
+(@pxref{Pixel Specification}).
 
 @item :relative-height @var{factor}
 Specifies the height of the space, multiplying the ordinary height
 of the text having this display specification by @var{factor}.
 
 @item :ascent @var{ascent}
-Specifies that @var{ascent} percent of the height of the space should be
-considered as the ascent of the space---that is, the part above the
-baseline.  The value of @var{ascent} must be a non-negative number no
-greater than 100.
+If the value of @var{ascent} is a non-negative number no greater than
+100, it specifies that @var{ascent} percent of the height of the space
+should be considered as the ascent of the space---that is, the part
+above the baseline.  The ascent may also be specified in pixel units
+with a @dfn{pixel ascent} specification (@pxref{Pixel Specification}).
+
 @end table
 
   Don't use both @code{:height} and @code{:relative-height} together.
 
+  The @code{:height} and @code{:align-to} properties are supported on
+non-graphic terminals, but the other space properties in this section
+are not.
+
+@node Pixel Specification
+@subsection Pixel Specification for Spaces
+@cindex spaces, pixel specification
+
+  The value of the @code{:width}, @code{:align-to}, @code{:height},
+and @code{:ascent} properties can be a special kind of expression that
+is evaluated during redisplay.  The result of the evaluation is used
+as an absolute number of pixels.
+
+  The following expressions are supported:
+
+@example
+@group
+  @var{expr} ::= @var{num} | (@var{num}) | @var{unit} | @var{elem} | @var{pos} | IMAGE | @var{form}
+  @var{num}  ::= @var{integer} | @var{float} | @var{symbol}
+  @var{unit} ::= in | mm | cm | width | height
+  @var{elem} ::= left-fringe | right-fringe | left-margin | right-margin
+        |  scroll-bar | text
+  @var{pos}  ::= left | center | right
+  @var{form} ::= (@var{num} . @var{expr}) | (@var{op} @var{expr} ...)
+  @var{op}   ::= + | -
+@end group
+@end example
+
+  The form @var{num} specifies a fraction of the default frame font
+height or width.  The form @code{(@var{num})} specifies an absolute
+number of pixels.  If @var{num} is a symbol, @var{symbol}, its
+buffer-local variable binding is used.
+
+  The @code{in}, @code{mm}, and @code{cm} units specify the number of
+pixels per inch, millimeter, and centimeter, respectively.  The
+@code{width} and @code{height} units correspond to the default width
+and height of the current face.  An image specification @code{IMAGE}
+corresponds to the width or height of the image.
+
+  The @code{left-fringe}, @code{right-fringe}, @code{left-margin},
+@code{right-margin}, @code{scroll-bar}, and @code{text} elements
+specify to the width of the corresponding area of the window.
+
+  The @code{left}, @code{center}, and @code{right} positions can be
+used with @code{:align-to} to specify a position relative to the left
+edge, center, or right edge of the text area.
+
+  Any of the above window elements (except @code{text}) can also be
+used with @code{:align-to} to specify that the position is relative to
+the left edge of the given area.  Once the base offset for a relative
+position has been set (by the first occurrence of one of these
+symbols), further occurences of these symbols are interpreted as the
+width of the specified area.  For example, to align to the center of
+the left-margin, use
+
+@example
+:align-to (+ left-margin (0.5 . left-margin))
+@end example
+
+  If no specific base offset is set for alignment, it is always relative
+to the left edge of the text area.  For example, @samp{:align-to 0} in a
+header-line aligns with the first text column in the text area.
+
+  A value of the form @code{(@var{num} . @var{expr})} stands
+multiplying the values of @var{num} and @var{expr}.  For example,
+@code{(2 . in)} specifies a width of 2 inches, while @code{(0.5 .
+IMAGE)} specifies half the width (or height) of the specified image.
+
+  The form @code{(+ @var{expr} ...)} adds up the value of the
+expressions.  The form @code{(- @var{expr} ...)} negates or subtracts
+the value of the expressions.
+
 @node Other Display Specs
 @subsection Other Display Specifications
 
+  Here are the other sorts of display specifications that you can use
+in the @code{display} text property.
+
 @table @code
 @item (image . @var{image-props})
 This is in fact an image descriptor (@pxref{Images}).  When used as a
 display specification, it means to display the image instead of the text
 that has the display specification.
 
+@item (slice @var{x} @var{y} @var{width} @var{height})
+This specification together with @code{image} specifies a @dfn{slice}
+(a partial area) of the image to display.  The elements @var{y} and
+@var{x} specify the top left corner of the slice, within the image;
+@var{width} and @var{height} specify the width and height of the
+slice.  Integer values are numbers of pixels.  A floating point number
+in the range 0.0--1.0 stands for that fraction of the width or height
+of the entire image.
+
 @item ((margin nil) @var{string})
 @itemx @var{string}
 A display specification of this form means to display @var{string}
@@ -3105,6 +3406,43 @@
 If @var{mask} is @code{nil}, remove a mask from the image, if it has
 one.  Images in some formats include a mask which can be removed by
 specifying @code{:mask nil}.
+
+@item :pointer @var{shape}
+This specifies the pointer shape when the mouse pointer is over this
+image.  @xref{Pointer Shapes}, for available pointer shapes.
+
+@item :map @var{map}
+This associates an image map of @dfn{hot spots} with this image.
+
+An image map is an alist where each element has the format
+@code{(@var{area} @var{id} @var{plist})}.  An @var{area} is specified
+as either a rectangle, a circle, or a polygon.
+
+A rectangle is a cons
+@code{(rect . ((@var{x0} . @var{y0}) . (@var{x1} . @var{y1})))}
+which specifies the pixel coordinates of the upper left and bottom right
+corners of the rectangle area.
+
+A circle is a cons
+@code{(circle . ((@var{x0} . @var{y0}) . @var{r}))}
+which specifies the center and the radius of the circle; @var{r} may
+be a float or integer.
+
+A polygon is a cons
+@code{(poly . [@var{x0} @var{y0} @var{x1} @var{y1} ...])}
+where each pair in the vector describes one corner in the polygon.
+
+When the mouse pointer is above a hot-spot area of an image, the
+@var{plist} of that hot-spot is consulted; if it contains a @code{help-echo}
+property it defines a tool-tip for the hot-spot, and if it contains
+a @code{pointer} property, it defines the shape of the mouse cursor when
+it is over the hot-spot.
+@xref{Pointer Shapes}, for available pointer shapes.
+
+When you click the mouse when the mouse pointer is over a hot-spot, an
+event is composed by combining the @var{id} of the hot-spot with the
+mouse event; for instance, @code{[area4 mouse-1]} if the hot-spot's
+@var{id} is @code{area4}.
 @end table
 
 @defun image-mask-p spec &optional frame
@@ -3372,7 +3710,7 @@
 property yourself, but it is easier to use the functions in this
 section.
 
-@defun insert-image image &optional string area
+@defun insert-image image &optional string area slice
 This function inserts @var{image} in the current buffer at point.  The
 value @var{image} should be an image descriptor; it could be a value
 returned by @code{create-image}, or the value of a symbol defined with
@@ -3385,11 +3723,26 @@
 @code{nil} or omitted, the image is displayed at point within the
 buffer's text.
 
+The argument @var{slice} specifies a slice of the image to insert.  If
+@var{slice} is @code{nil} or omitted the whole image is inserted.
+Otherwise, @var{slice} is a list @code{(@var{x} @var{y} @var{width}
+@var{height})} which specifies the @var{x} and @var{y} positions and
+@var{width} and @var{height} of the image area to insert.  Integer
+values are in units of pixels.  A floating point number in the range
+0.0--1.0 stands for that fraction of the width or height of the entire
+image.
+
 Internally, this function inserts @var{string} in the buffer, and gives
 it a @code{display} property which specifies @var{image}.  @xref{Display
 Property}.
 @end defun
 
+@defun insert-sliced-image image &optional string area rows cols
+This function inserts @var{image} in the current buffer at point, like
+@code{insert-image}, but splits the image into @var{rows}x@var{cols}
+equally sized slices.
+@end defun
+
 @defun put-image image pos &optional string area
 This function puts image @var{image} in front of @var{pos} in the
 current buffer.  The argument @var{pos} should be an integer or a
@@ -3498,7 +3851,7 @@
 * Making Buttons::         Adding buttons to Emacs buffers.
 * Manipulating Buttons::   Getting and setting properties of buttons.
 * Button Buffer Commands:: Buffer-wide commands and bindings for buttons.
-* Manipulating Button Types:: 
+* Manipulating Button Types::
 @end menu
 
 @node Button Properties
--- a/lispref/hooks.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/lispref/hooks.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -35,6 +35,7 @@
 @table @code
 @item activate-mark-hook
 @item after-change-functions
+@item after-change-major-mode-hook
 @item after-init-hook
 @item after-insert-file-functions
 @item after-make-frame-functions
--- a/lispref/modes.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/lispref/modes.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2003
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2003, 2004
 @c   Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/modes
@@ -103,6 +103,7 @@
 * Mode Help::               Finding out how to use a mode.
 * Derived Modes::           Defining a new major mode based on another major
                               mode.
+* Mode Hooks::              Hooks run at the end of major mode functions.
 @end menu
 
 @node Major Mode Conventions
@@ -276,7 +277,7 @@
 Each major mode should have a @dfn{mode hook} named
 @code{@var{modename}-mode-hook}.  The major mode command should run that
 hook, with @code{run-mode-hooks}, as the very last thing it
-does.  @xref{Hooks}.
+does.  @xref{Mode Hooks}.
 
 @item
 The major mode command may start by calling some other major mode
@@ -284,9 +285,11 @@
 settings.  A mode that does this is called a @dfn{derived mode}.  The
 recommended way to define one is to use @code{define-derived-mode},
 but this is not required.  Such a mode should use
-@code{delay-mode-hooks} around its entire body, including the call to
-the parent mode command and the final call to @code{run-mode-hooks}.
-(Using @code{define-derived-mode} does this automatically.)
+@code{delay-mode-hooks} around its entire body (including the call to
+the parent mode command) @emph{except} for the final call to
+@code{run-mode-hooks}, which runs the derived mode's hook.  (Using
+@code{define-derived-mode} does this automatically.)  @xref{Derived
+Modes}, and @ref{Mode Hooks}.
 
 @item
 If something special should be done if the user switches a buffer from
@@ -575,7 +578,7 @@
 in particular.  Other major modes are defined in effect by comparison
 with this one---their definitions say what to change, starting from
 Fundamental mode.  The @code{fundamental-mode} function does @emph{not}
-run any hooks; you're not supposed to customize it.  (If you want Emacs
+run any mode hooks; you're not supposed to customize it.  (If you want Emacs
 to behave differently in Fundamental mode, change the @emph{global}
 state of Emacs.)
 @end deffn
@@ -808,6 +811,58 @@
 @code{define-derived-mode} does that automatically.
 @end defmac
 
+@node Mode Hooks
+@subsection Mode Hooks
+
+The two last things a major mode function does is to run its mode
+hook and finally the mode independent normal hook
+@code{after-change-major-mode-hook}.  If the major mode is a derived
+mode, that is if it calls another major mode (the parent mode) in its
+body, then the parent's mode hook is run just before the derived
+mode's hook.  Neither the parent's mode hook nor
+@code{after-change-major-mode-hook} are run at the end of the actual
+call to the parent mode.  This applies recursively if the parent mode
+has itself a parent.  That is, the mode hooks of all major modes called
+directly or indirectly by the major mode function are all run in
+sequence at the end, just before @code{after-change-major-mode-hook}.
+
+If you are customizing a major mode, rather than defining one, the
+above is all you need to know about the hooks run at the end of a
+major mode.  This also applies if you use @code{define-derived-mode}
+to define a major mode, because that macro will automatically
+implement the above for you.
+
+Programmers wishing to define a major mode without using
+@code{define-derived-mode}, should make sure that their major mode
+follows the above conventions.  @xref{Major Mode Conventions}, for how
+this should be accomplished.  Below, we give some implementation
+details.
+
+@defun run-mode-hooks &rest hookvars
+Major modes should run their mode hook using this function.  It is
+similar to @code{run-hooks} (@pxref{Hooks}), but if run inside a
+@code{delay-mode-hooks} form, this function does not run any hooks.
+Instead, it arranges for @var{hookvars} to be run at a later call to
+the function.  Otherwise, @code{run-mode-hooks} runs any delayed hooks
+in order, then @var{hookvars} and finally
+@code{after-change-major-mode-hook}.
+@end defun
+
+@defmac delay-mode-hooks body...
+This macro executes @var{body} like @code{progn}, but all calls to
+@code{run-mode-hooks} inside @var{body} delay running their hooks.
+They will be run by the first call to @code{run-mode-hooks} after exit
+from @code{delay-mode-hooks}.
+@end defmac
+
+@defvar after-change-major-mode-hook
+Every major mode function should run this normal hook at its very end.
+It normally does not need to do so explicitly.  Indeed, a major mode
+function should normally run its mode hook with @code{run-mode-hooks}
+as the very last thing it does and @code{run-mode-hooks} runs
+@code{after-change-major-mode-hook} at its very end.
+@end defvar
+
 @node Minor Modes
 @section Minor Modes
 @cindex minor mode
@@ -2087,7 +2142,7 @@
 Obviously, fontification of the subexpression numbered @var{subexp} will
 not occur.  However, fontification of other subexpressions (and other
 regexps) will continue.  If @var{laxmatch} is @code{nil}, and the
-specified subexpression is missing, then an error is signalled which
+specified subexpression is missing, then an error is signaled which
 terminates search-based fontification.
 
 Here are some examples of elements of this kind, and what they do:
@@ -2450,7 +2505,7 @@
 
 For buffers not visiting a file to have their state saved, the major
 mode must bind the buffer local variable @code{desktop-save-buffer} to
-a non-nil value.
+a non-@code{nil} value.
 
 @defvar desktop-save-buffer
 If this buffer-local variable is non-@code{nil}, the buffer will have
@@ -2563,26 +2618,8 @@
 a symbol with a function definition), it is called.  If it is a list
 that isn't a function, its elements are called, consecutively.  All
 the hook functions are called with no arguments.
-
-For example, here's how @code{emacs-lisp-mode} runs its mode hook:
-
-@example
-(run-hooks 'emacs-lisp-mode-hook)
-@end example
 @end defun
 
-@defun run-mode-hooks &rest hookvars
-Like @code{run-hooks}, but is affected by the @code{delay-mode-hooks}
-macro.
-@end defun
-
-@defmac delay-mode-hooks body...
-This macro executes the @var{body} forms but defers all calls to
-@code{run-mode-hooks} within them until the end of @var{body}.
-This macro enables a derived mode to arrange not to run
-its parent modes' mode hooks until the end.
-@end defmac
-
 @defun run-hook-with-args hook &rest args
 This function is the way to run an abnormal hook and always call all
 of the hook functions.  It calls each of the hook functions one by
--- a/lispref/text.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/lispref/text.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -2974,6 +2974,70 @@
 @code{beginning-of-line} stop moving at a field boundary.
 @xref{Fields}.
 
+@item cursor
+@kindex cursor @r{(text property)}
+Normally, the cursor is displayed at the end of any overlay and text
+property strings present at the current window position.  You can
+place the cursor on any desired character of these strings by giving
+that character a non-@code{nil} @var{cursor} text property.
+
+@item pointer
+@kindex pointer @r{(text property)}
+This specifies a specific pointer shape when the mouse pointer is over
+this text or image.  See the variable @var{void-area-text-pointer}
+for possible pointer shapes.
+
+@item line-spacing
+@kindex line-spacing @r{(text property)}
+A newline can have a @code{line-spacing} text or overlay property
+that controls the height of the corresponding display line.
+@c ???  Which display line is "corresponding"?
+The @code{line-spacing} property overrides the default frame line
+spacing and the buffer local @code{line-spacing} variable.  We will
+call the property value @var{line-spacing}.
+
+If @var{line-spacing} is a positive integer, the value specifies
+additional vertical space, below the display line, in pixels.
+
+If @var{line-spacing} is a floating point number or cons, the
+additional vertical space is the product of @var{line-spacing} and the
+default frame line height.
+
+If the @var{line-spacing} value is a cons @code{(total .
+@var{spacing})} where @var{spacing} is any of the forms described
+above, the value of @var{spacing} specifies the total displayed height
+of the line, regardless of the height of the characters in it.  This
+is equivalent to using the @code{line-height} property.
+
+@item line-height
+@kindex line-height @r{(text property)}
+A newline can have a @code{line-height} text or overlay property that
+controls the total height of the corresponding display line.
+@c ???  Which display line is "corresponding"?
+We will call the property value @var{line-height}.
+
+If @var{line-height} is 0, the newline does not contribute to the
+height of the display row; instead the height of the newline glyph is
+reduced.
+@c ??? That is not clear.  Reduced how much?
+In that case, any @code{line-spacing} property on
+this newline is ignored.  This can be used to tile small images or
+image slices without adding blank areas between the images.
+@c ??? Precisely which of these features does ``this'' mean?
+
+If @var{line-height} is a positive integer, the value specifies the
+minimum line height in pixels.  The line's ascent height is
+increased as necessary to achieve the specified height.
+
+If @var{line-height} is a floating point number, the minimum line
+height is the product of @var{line-height} and the default frame line
+height.
+
+If @var{line-height} is a cons @code{(@var{ratio} . @var{face})}, the
+minimum line height is calculated as @var{ratio} times the height of
+face @var{face}.  The @var{ratio} is an integer or a floating point
+number.  If @var{face} is @code{t}, it refers to the current face.
+
 @item modification-hooks
 @cindex change hooks for a character
 @cindex hooks for changing a character
--- a/man/ChangeLog	Tue Sep 21 20:44:26 2004 +0000
+++ b/man/ChangeLog	Sat Sep 25 12:05:36 2004 +0000
@@ -1,3 +1,12 @@
+2004-09-22  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* display.texi (Display Custom): Remove stray `@end defvar'.
+
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* display.texi (Display Custom): Add `overflow-newline-into-fringe',
+	`indicate-buffer-boundaries' and `default-indicate-buffer-boundaries'.
+
 2004-09-20  Richard M. Stallman  <rms@gnu.org>
 
 	* custom.texi (Hooks): Explain using setq to clear out a hook.
--- a/man/calc.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/man/calc.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -4108,7 +4108,13 @@
 display the graph in Emacs itself using rough character graphics.
 Press @kbd{q} when you are done viewing the character graphics.
 
-Next, let's add the line we got from our least-squares fit:
+Next, let's add the line we got from our least-squares fit.
+@ifinfo
+(If you are reading this tutorial on-line while running Calc, typing
+@kbd{g a} may cause the tutorial to disappear from its window and be
+replaced by a buffer named @samp{*Gnuplot Commands*}.  The tutorial
+will reappear when you terminate GNUPLOT by typing @kbd{g q}.) 
+@end ifinfo
 
 @smallexample
 @group
--- a/man/display.texi	Tue Sep 21 20:44:26 2004 +0000
+++ b/man/display.texi	Sat Sep 25 12:05:36 2004 +0000
@@ -990,6 +990,45 @@
 windows, see @ref{Split Window}.  See also @ref{Display,, Display,
 elisp, The Emacs Lisp Reference Manual}.
 
+@vindex overflow-newline-into-fringe
+  If the variable @code{overflow-newline-into-fringe} is
+non-@code{nil} on a window system, it specifies that lines which are
+exactly as wide as the window (not counting the final newline
+character) shall not be broken into two lines on the display (with
+just the newline on the second line).  Instead, the newline
+overflows into the right fringe, and the cursor will be displayed in
+the fringe when positioned on that newline.
+
+@vindex indicate-buffer-boundaries
+  On a window system, Emacs may indicate the buffer boundaries in the
+fringes.  The buffer boundaries, i.e. first and last line in the
+buffer, can be marked with angle bitmaps in the left or right fringe.
+This can be combined with up and down arrow bitmaps shown at the top
+and bottom of the left or right fringe if the window can be scrolled
+in either direction.
+
+The buffer-local variable @code{indicate-buffer-boundaries} controls
+how the buffer boundaries and window scrolling is indicated in the
+fringes.
+
+If the value is @code{left} or @code{right}, both angle and arrow
+bitmaps are displayed in the left or right fringe, respectively.
+Any other non-@code{nil} value causes the bitmap on the top line to be
+displayed in the left fringe, and the bitmap on the bottom line in the
+right fringe.
+
+If value is a cons @code{(angles . arrows)}, the car specifies the
+position of the angle bitmaps, and the cdr specifies the position of
+the arrow bitmaps.  For example, @code{(t .  right)} places the top
+angle bitmap in left fringe, the bottom angle bitmap in right fringe,
+and both arrow bitmaps in right fringe.  To show just the angle
+bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}.
+
+@vindex default-indicate-buffer-boundaries
+  The value of the variable @code{default-indicate-buffer-boundaries}
+is the default value for @code{indicate-buffer-boundaries} in buffers
+that do not override it.
+
 @vindex baud-rate
   The variable @code{baud-rate} holds the output speed of the
 terminal, as far as Emacs knows.  Setting this variable does not
--- a/src/ChangeLog	Tue Sep 21 20:44:26 2004 +0000
+++ b/src/ChangeLog	Sat Sep 25 12:05:36 2004 +0000
@@ -1,3 +1,9 @@
+2004-09-24  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* config.in: Rebuild.
+
+	* Makefile.in: Run setarch i386 ./temacs if exec-shield  is present.
+
 2004-09-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* xterm.c (x_term_init): Work around a bug in some X servers.
--- a/src/Makefile.in	Tue Sep 21 20:44:26 2004 +0000
+++ b/src/Makefile.in	Sat Sep 25 12:05:36 2004 +0000
@@ -887,6 +887,13 @@
 #define OBJECTS_MACHINE
 #endif
 
+#ifdef HAVE_EXECSHIELD
+#undef i386
+RUN_TEMACS = @SETARCH@ i386 ./temacs
+#else
+RUN_TEMACS = ./temacs
+#endif
+
 all: emacs${EXEEXT} OTHER_FILES
 
 emacs${EXEEXT}: temacs${EXEEXT} ${etc}DOC ${lisp}
@@ -895,9 +902,9 @@
 	ln temacs${EXEEXT} emacs${EXEEXT}
 #else
 #ifdef HAVE_SHM
-	LC_ALL=C ./temacs -nl -batch -l loadup dump
+	LC_ALL=C $(RUN_TEMACS) -nl -batch -l loadup dump
 #else /* ! defined (HAVE_SHM) */
-	LC_ALL=C ./temacs -batch -l loadup dump
+	LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
 #endif /* ! defined (HAVE_SHM) */
 #endif /* ! defined (CANNOT_DUMP) */
 	-./emacs -q -batch -f list-load-path-shadows
@@ -1326,9 +1333,9 @@
 	ln temacs${EXEEXT} bootstrap-emacs${EXEEXT}
 #else
 #ifdef HAVE_SHM
-	./temacs -nl -batch -l loadup bootstrap
+	$(RUN_TEMACS) -nl -batch -l loadup bootstrap
 #else /* ! defined (HAVE_SHM) */
-	./temacs --batch --load loadup bootstrap
+	$(RUN_TEMACS) --batch --load loadup bootstrap
 #endif /* ! defined (HAVE_SHM) */
 	mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
 #endif /* ! defined (CANNOT_DUMP) */
--- a/src/config.in	Tue Sep 21 20:44:26 2004 +0000
+++ b/src/config.in	Sat Sep 25 12:05:36 2004 +0000
@@ -136,6 +136,9 @@
 /* Define to 1 if you have the `euidaccess' function. */
 #undef HAVE_EUIDACCESS
 
+/* Define to 1 if this OS has exec shield. */
+#undef HAVE_EXECSHIELD
+
 /* Define to 1 if you have the <fcntl.h> header file. */
 #undef HAVE_FCNTL_H