Anonymous avatar Anonymous committed ec9a17f

Import from CVS: tag r19-15b98

Comments (0)

Files changed (301)

 							-*- indented-text -*-
+to 19.15 beta98
+-- filladapt.el-2.09 courtesy of Kyle Jones
+-- itimer.el-1.03
+-- more work on sit-for, etc. courtesy of David Moore
+-- describe-beta command added, etc/BETA, C-h B
+-- updates to hyper-apropos.el courtesy of Christoph Wedler
+-- texinfo manual updated to 2.23
+-- texinfo.tex update to 3.9
+-- Gnus-5.4.24
+-- tm-7.105.1
+-- W3-3.0.65
+-- Custom-1.59
+-- AUCTeX-9.7l
+-- VM-6.19
+-- Build fixes
+-- More work on Linux libc-5/libc-6 portability, it works out of the box now?
+-- more frame visibility patches courtesy of Jan Vroonhof
+-- graphical updates to time.el
+-- gnuattach fixes courtesy of Hunter Kelly
+-- dynamic PURESIZE fixes
+-- miscellaneous bug fixes
+
 to 19.15 beta97
 -- Gnus-5.4.17
 -- Freeze frame fixes Courtesy of Jan Vroonhof and Darrell Kindred [Mistakenly
 	  ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${mandir}/$${page}${manext} ; \
 	  chmod 0644 ${mandir}/$${page}${manext} ; \
 	done
+	@echo "If you would like to save approximately 15M of disk space, do"
+	@echo "make gzip-el"
+	@echo "or you may run"
+	@echo lib-src/gzip-el.sh lispdir " from the command line."
+	@echo "Where lispdir is where the lisp files were installed, i.e.,"
+	@echo "${lispdir}"
+
+gzip-el:
+	lib-src/gzip-el.sh ${lispdir}
 
 MAKEPATH=./lib-src/make-path
 ### Build all the directories we're going to install XEmacs in.	Since
       *-linux* )		opsys=linux ;;
       *-sco3.2v4* )		opsys=sco4 ; NON_GNU_CPP=/lib/cpp  ;;
       *-bsd386* | *-bsdi1* )	opsys=bsd386 ;;
+      *-bsdi3* )		opsys=bsdos2-1 ;;
       *-bsdi2.1* )		opsys=bsdos2-1 ;;
       *-bsdi2* )		opsys=bsdos2 ;;
       *-sco3.2v5* )		opsys=sco5 ; 
       *-linux* )		opsys=linux ;;
       *-sco3.2v4* )		opsys=sco4 ; NON_GNU_CPP=/lib/cpp  ;;
       *-bsd386* | *-bsdi1* )	opsys=bsd386 ;;
+      *-bsdi3* )		opsys=bsdos2-1 ;;
       *-bsdi2.1* )		opsys=bsdos2-1 ;;
       *-bsdi2* )		opsys=bsdos2 ;;
       *-sco3.2v5* )		opsys=sco5 ; 
+				-*- mode:outline; minor-mode:outl-mouse -*-
+
+* Introduction
+==============
+
+You are running an experimental version of XEmacs.  Please do not
+report problems with Beta XEmacs to comp.emacs.xemacs.  Report them to
+xemacs-beta@xemacs.org.
+
+** XEmacs Beta Mailing List
+===========================
+
+*** Subscribing
+---------------
+
+If you are not subscribed to the XEmacs beta list you should be.  Send
+an email message with a subject of `subscribe' (without the quotes) to
+xemacs-beta-request@xemacs.org and follow the directions.  You do not
+have to fill out the survey if you don't want to.
+
+*** Unsubscribing
+-----------------
+
+To unsubscribe from the list send an email message with a subject of
+`unsubscribe' (without the quotes) to xemacs-beta-request@xemacs.org.
+
+*** Administrivia
+-----------------
+
+The XEmacs beta list is managed by the SmartList mailing list package,
+and the usual SmartList commands work.  Do not send mailing list
+requests to the main address (xemacs-beta@xemacs.org), always send
+them to xemacs-beta-request@xemacs.org.  If you have problems with the
+list itself, they should be brought to the attention of the Mailing
+List manager Chuck Thompson <cthomp@xemacs.org>.
+
+
+** Reporting Problems
+=====================
+
+The best way to get problems fixed in XEmacs is to submit good problem
+reports.  Since this is beta software problems are certain to exist.
+Please read through all of part II of the XEmacs FAQ for an overview
+of problem reporting.  Other items which are most important are:
+
+1.  Do not submit C stack backtraces without line numbers.  Since it
+    is possible to compile optimized with debug information with GCC
+    it is never a good idea to compile XEmacs without the -g flag.
+    XEmacs runs on a variety of platforms, and often it is not
+    possible to recreate problems which afflict a specific platform.
+    The line numbers in the C stack backtrace help isolate where the
+    problem is actually occurring.
+ 
+2.  Attempt to recreate the problem starting with an invocation of
+    XEmacs with `xemacs -q -no-site-file'.  Quite often problems are
+    due to package interdependencies, and the like.  An actual bug in
+    XEmacs should be reproducible in a default configuration without
+    loading any special packages (or the one or two specific packages
+    that cause the bug to appear).
+
+3.  A picture can be worth a thousand words.  When reporting an
+    unusual display, it is generally best to capture the problem in a
+    screen dump and include that with the problem report.  The easiest
+    way to get a screen dump is to use the xv program and its grab
+    function.  Save the image as a GIF to keep bandwidth requirements
+    down without loss of information.  MIME is the preferred method
+    for making the image attachments.
+
+* Compiling Beta XEmacs
+=======================
+
+** Building an XEmacs from patches
+==================================
+
+All beta releases of XEmacs are included with patches from the
+previous version in an attempt to keep bandwidth requirements down.
+Patches should be applied with the GNU patch program in something like
+the following.  Let's say you're upgrading XEmacs 20.4-beta10 to
+XEmacs 20.4-beta11 and you have a full unmodified XEmacs 20.4-beta10
+source tree to work with.  Cd to the top level directory and issue the
+shell command:
+
+$ gunzip -c /tmp/xemacs-20.4-b10-20.4-b11.patch.gz | patch -p1
+
+After patching check to see that no patches were missed by doing
+$ find . -name \*.rej -print
+
+Any rejections should be treated as serious problems to be resolved
+before starting compilation.
+
+After seeing that there were no rejections, issue the command
+
+$ make all-elc
+
+and go play minesweep for awhile on an older XEmacs while the binary
+is rebuilt.
+
+** Building an XEmacs from a full distribution
+==============================================
+
+Locate a convenient place where you have at least 100MB of free space
+and issue the command
+
+$ gunzip -c /tmp/xemacs-20.4-b11.tar.gz | tar xvf -
+
+(or the simpler `tar zxvf /tmp/xemacs-20.4-b11.tar.gz' if you use GNU
+tar).
+
+cd to the top level directory and issue an appropriate configure
+command.  The maintainer uses the following at the time of this
+writing:
+
+./configure --with-offix --with-mule=yes --with-dialogs=athena3d \
+	--cflags="-m486 -g -O4 -fno-strength-reduce -malign-loops=2 \
+	-malign-jumps=2 -malign-functions=2" --with-sound=no \
+	--with-xface=yes --error-checking=all --debug=yes \
+	--with-scrollbars=athena3d \
+	--with-canna=yes --with-wnn=yes --wnn-includes=/usr/X11R6/include/wnn
+
+Save the output from configure that looks something like:
+Configured for `i586-unknown-linux2.0.28'.
+
+  Where should the build process find the source code?    /usr/src/xemacs-20.0
+  What installation prefix should install use?            /usr/local
+  What operating system and machine description files should XEmacs use?
+        `s/linux.h' and `m/intel386.h'
+  What compiler should XEmacs be built with?              gcc -m486 -g -O4 -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2
+  Should XEmacs use the GNU version of malloc?            yes
+  Should XEmacs use the relocating allocator for buffers? yes
+  What window system should XEmacs use?                   x11
+  Where do we find X Windows header files?                /usr/X11R6/include
+  Where do we find X Windows libraries?                   /usr/X11R6/lib
+  Compiling in support for XAUTH.
+  Compiling in support for XPM.
+  Compiling in support for X-Face headers.
+  Compiling in support for GIF image conversion.
+  Compiling in support for JPEG image conversion.
+  Compiling in support for PNG image conversion.
+  Compiling in support for Berkeley DB.
+  Compiling in support for GNU DBM.
+  Compiling in Mule (multi-lingual) support.
+  Compiling in support for OffiX.
+  Using the Lucid menubar.
+  Using the Athena-3d scrollbar.
+  Using the Athena-3d dialog boxes.
+
+Then type make and you should have a working XEmacs.
+
+After you have verified that you have a functional editor, fire up
+your favorite mail program and send a build report to
+xemacs-beta@xemacs.org.  The build report should include
+
+1. Your hardware configuration (OS version, etc.)
+
+2. Version numbers of software in use (X11 version, system library
+   versions if appropriate, graphics library versions if appropriate).
+   If you're on a system like Linux, include all the version numbers
+   you can because chances are it makes a difference.
+
+3. The options given to configure
+
+4. The configuration report illustrated above
+
+5. Any other unusual items you feel should be brought to the attention
+   of the developers.
 ! Emacs.leftToolBarWidth:		0
 ! Emacs.rightToolBarWidth:		0
 
-*topToolBarShadowColor:			Gray90
-*bottomToolBarShadowColor:		Gray40
+!*topToolBarShadowColor:			Gray90
+!*bottomToolBarShadowColor:		Gray40
 *backgroundToolBarColor:		Gray75
 *toolBarShadowThickness:		2
 

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1E1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"```a````a",
+"```a````a",
+"``a````a`",
+"``a````a`",
+"`````````",
+"`a````a``",
+"`a````a``",
+"a````a```",
+"a````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CA1E1C",
+/* pixels */
+"`````````",
+"`````````",
+"````````a",
+"````````a",
+"```````a`",
+"```````a`",
+"`````````",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"`````````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"a c #CB1D1C",
+"` s None c None",
+/* pixels */
+"`````````",
+"````aaaaa",
+"````````a",
+"````````a",
+"```````a`",
+"```````a`",
+"``aaaaa``",
+"`a```````",
+"`a```````",
+"a````````",
+"a````````",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1D1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"````````a",
+"````````a",
+"```````a`",
+"```````a`",
+"``aaaaa``",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CA1E1C",
+/* pixels */
+"`````````",
+"`````````",
+"```a````a",
+"```a````a",
+"``a````a`",
+"``a````a`",
+"``aaaaa``",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"`````````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1D1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"```a`````",
+"```a`````",
+"``a``````",
+"``a``````",
+"``aaaaa``",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1E1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"```a`````",
+"```a`````",
+"``a``````",
+"``a``````",
+"``aaaaa``",
+"`a````a``",
+"`a````a``",
+"a````a```",
+"a````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1E1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"````````a",
+"````````a",
+"```````a`",
+"```````a`",
+"`````````",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"`````````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1E1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"```a````a",
+"```a````a",
+"``a````a`",
+"``a````a`",
+"``aaaaa``",
+"`a````a``",
+"`a````a``",
+"a````a```",
+"a````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CB1E1C",
+/* pixels */
+"`````````",
+"````aaaaa",
+"```a````a",
+"```a````a",
+"``a````a`",
+"``a````a`",
+"``aaaaa``",
+"``````a``",
+"``````a``",
+"`````a```",
+"`````a```",
+"aaaaa````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"4 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CA1E1C",
+/* pixels */
+"````",
+"``aa",
+"``aa",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"9 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CA1E1C",
+/* pixels */
+"`````````",
+"`````````",
+"`````````",
+"`````````",
+"````a````",
+"````a````",
+"`````````",
+"```a`````",
+"```a`````",
+"`````````",
+"`````````",
+"`````````",
+"`````````"
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 1 1",
+/* colors */
+"  s None c None",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 2 1",
+/* colors */
+"  s None c None",
+"a c #2AD244",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+" aaaaaaaaa",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 2 1",
+/* colors */
+"  s None c None",
+"a c #2AD244",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"  aaaaaaaa",
+"          ",
+" aaaaaaaaa",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 3 1",
+/* colors */
+"  s None c None",
+"a c #2AD244",
+"b c #DEE614",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"   bbbbbbb",
+"          ",
+"  aaaaaaaa",
+"          ",
+" aaaaaaaaa",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 3 1",
+/* colors */
+"  s None c None",
+"a c #2AD244",
+"b c #DEE614",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"          ",
+"          ",
+"    bbbbbb",
+"          ",
+"   bbbbbbb",
+"          ",
+"  aaaaaaaa",
+"          ",
+" aaaaaaaaa",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 4 1",
+/* colors */
+"  s None c None",
+"` c #FE0204",
+"b c #2AD244",
+"c c #DEE614",
+/* pixels */
+"          ",
+"          ",
+"          ",
+"     `````",
+"          ",
+"    cccccc",
+"          ",
+"   ccccccc",
+"          ",
+"  bbbbbbbb",
+"          ",
+" bbbbbbbbb",
+"          "
+};
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"10 13 4 1",
+/* colors */
+"  s None c None",
+"` c #FE0204",
+"b c #2AD244",
+"c c #DEE614",
+/* pixels */
+"          ",
+"      ````",
+"          ",
+"     `````",
+"          ",
+"    cccccc",
+"          ",
+"   ccccccc",
+"          ",
+"  bbbbbbbb",
+"          ",
+" bbbbbbbbb",
+"          "
+};
Add a comment to this file

etc/time/letter.xpm

Old
Old image
New
New image
 /* XPM */
 static char * jmail_xpm[] = {
 "18 13 4 1",
-" 	s None	c None",
+" 	s None c None",
 ".	c gray85",
 "X	c yellow",
 "o	c black",
Added
New image
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"4 13 2 1",
+/* colors */
+"` s None c None",
+"a c #CA1E1C",
+/* pixels */
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"````",
+"aa``",
+"aa``",
+"````"
+};

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

Binary file added.

lib-src/gnuclient.c

 static char cwd[MAXPATHLEN+2];	/* current working directory when calculated */
 static char *cp = NULL;		/* ptr into valid bit of cwd above */
 
+#ifdef GNUATTACH
+#include <signal.h>
+
+static pid_t emacs_pid;			/* Process id for emacs process */
+
+void tell_emacs_to_resume(int sig)
+{
+    char buffer[GSERV_BUFSZ+1];
+    int s;					/* socket / msqid to server */
+    int connect_type;           			/* CONN_UNIX, CONN_INTERNET, or
+						 * CONN_IPC */
+
+  /* Why is SYSV so retarded? */
+  /* We want emacs to realize that we are resuming */
+    signal(SIGCONT, tell_emacs_to_resume); 
+
+    connect_type = make_connection (NULL, (u_short) 0, &s);
+
+    sprintf(buffer,"(server-eval '(resume-pid-console %d))", getpid());
+    send_string(s, buffer);
+  
+#ifdef SYSV_IPC
+  if (connect_type == (int) CONN_IPC)
+    disconnect_from_ipc_server (s, msgp, FALSE);
+#else /* !SYSV_IPC */
+  if (connect_type != (int) CONN_IPC)
+    disconnect_from_server (s, FALSE);
+#endif /* !SYSV_IPC */
+}
+
+void pass_signal_to_emacs(int sig)
+{
+  if (kill(emacs_pid, sig) == -1) {
+    fprintf(stderr, "gnuattach: Could not pass signal to emacs process\n");
+    exit(1);
+  }
+}
+
+void initialize_signals()
+{
+  /* Set up signal handler to pass relevant signals to emacs process */
+  signal(SIGHUP, pass_signal_to_emacs);
+  signal(SIGQUIT, pass_signal_to_emacs);
+  signal(SIGILL, pass_signal_to_emacs);
+  signal(SIGTRAP, pass_signal_to_emacs);
+  signal(SIGSEGV, pass_signal_to_emacs);
+  signal(SIGPIPE, pass_signal_to_emacs);
+  signal(SIGTERM, pass_signal_to_emacs);
+#ifdef SIGBUS
+  signal(SIGBUS, pass_signal_to_emacs);
+#endif
+#ifdef SIGIOT
+  signal(SIGIOT, pass_signal_to_emacs);
+#endif
+
+  /* We want emacs to realize that we are resuming */
+  signal(SIGCONT, tell_emacs_to_resume);
+}
+
+#endif /* GNUATTACH */
+
 
 /*
   get_current_working_directory -- return the cwd.
 main (int argc, char *argv[])
 {
   int starting_line = 1;			/* line to start editing at */
-  char command[MAXPATHLEN+50];			/* emacs command buffer */
+  char command[MAXPATHLEN+50];		/* emacs command buffer */
   char fullpath[MAXPATHLEN+1];			/* full pathname to file */
 #ifndef GNUATTACH
   int qflg = 0;					/* quick edit, don't wait for 
 #endif /* SYSV_IPC */
 #ifdef GNUATTACH
   char *tty;
+  char buffer[GSERV_BUFSZ+1];		/* buffer to read pid */
 #endif
 
 #ifdef INTERNET_DOMAIN_SOCKETS
   while ((c = getopt (argc, argv,
 
 #ifdef INTERNET_DOMAIN_SOCKETS
-# ifdef GNUATTACH
-		      "h:p:r"
-# else
 		      "h:p:r:q"
-# endif
 #else /* !INTERNET_DOMAIN_SOCKETS */
 # ifdef GNUATTACH
 		      ""
     {
       fprintf (stderr,
 #ifdef INTERNET_DOMAIN_SOCKETS
-# ifdef GNUATTACH
-	       "usage: %s [-h hostname] [-p port] [-r pathname] "
-	       "[[+line] path] ...\n",
-# else
 	       "usage: %s [-q] [-h hostname] [-p port] [-r pathname] "
 	       "[[+line] path] ...\n",
-# endif
 #else /* !INTERNET_DOMAIN_SOCKETS */
 # ifdef GNUATTACH
 	       "usage: %s [[+line] path] ...\n",
       fprintf (stderr, "%s: Not connected to a tty", progname);
       exit (1);
     }
-#endif
 
-#ifdef INTERNET_DOMAIN_SOCKETS
+  /* This next stuff added in an attempt to make handling of
+     the tty do the right thing when dealing with signals.
+     Idea is to pass all the appropriate signals to the emacs process
+     */
+
+  connect_type = make_connection (NULL, (u_short) 0, &s);
+
+  send_string(s,"(server-eval '(emacs-pid))");
+  send_string(s,EOT_STR);
+  
+  if (read_line(s,buffer) == 0) {
+    fprintf(stderr, "%s: Could not establish emacs procces id\n",progname);
+    exit(1);
+  }
+  /* don't do disconnect_from_server becasue we have already read data,
+     and disconnect doesn't do anything else
+   */
+#ifdef SYSV_IPC
+  if (connect_type == (int) CONN_IPC)
+    disconnect_from_ipc_server (s, msgp, FALSE);
+#endif /* !SYSV_IPC */
+
+  emacs_pid = (pid_t)atol(buffer);
+  initialize_signals();
+      
+#endif /*GNUATTACH */ 
+
+#if defined(INTERNET_DOMAIN_SOCKETS) && !defined(GNUATTACH)
   connect_type = make_connection (hostarg, portarg, &s);
 #else
   connect_type = make_connection (NULL, (u_short) 0, &s);
       fprintf (stderr, "%s: unknown terminal type\n", progname);
       exit (1);
     }
-  sprintf (command, "(server-tty-edit-files \"%s\" \"%s\" '(", tty, ptr);
+  sprintf (command, "(server-tty-edit-files \"%s\" \"%s\" %d '(", 
+	   tty, ptr, getpid());
   send_string (s, command);
 #else
   if (qflg)

lib-src/gnuserv.c

     fprintf(stderr,"%s: garbage after result\n",progname);
     exit(1);
   }
-  close(s);
+  /* send the newline */
+  buf[1] = '\0';
+  send_string(s,buf);
+  close(s); 
 
 } /* handle_response */
 #endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */

lib-src/gnuslib.c

 static char rcsid [] = "!Header: gnuslib.c,v 2.4 95/02/16 11:57:37 arup alpha !";
 #endif
 
+#include <errno.h>
 #include "gnuserv.h"
 
 #ifdef SYSV_IPC
   }; /* while */ 
 #endif
 } /* send_string */
+
+/*
+  read_line -- read a \n terminated line from a socket
+*/
+int read_line(s,dest)
+     int s;
+     char *dest;
+{
+  char *index = NULL;
+  int length;
+  int offset=0;
+  char buffer[GSERV_BUFSZ+1];
+
+  while ((length=read(s,buffer+offset,1)>0) && buffer[offset]!='\n'
+	 && buffer[offset] != EOT_CHR) {
+    offset += length;
+    if (offset >= GSERV_BUFSZ) 
+      break;
+  }
+  buffer[offset] = '\0';
+  strcpy(dest,buffer);
+  return 1;
+} /* read_line */
 #endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
 
 
     add_newline = (buffer[length-1] != '\n');
   }; /* while */
 #else
-  while ((length = read(s,buffer,GSERV_BUFSZ)) > 0) {
-    buffer[length] = '\0';
-    if (echo) {
-      fputs(buffer,stdout);
-      add_newline = (buffer[length-1] != '\n');
+  while ((length = read(s,buffer,GSERV_BUFSZ)) > 0 ||
+      (length == -1 && errno == EINTR)) {
+    if (length) {
+      buffer[length] = '\0';
+      if (echo) {
+	fputs(buffer,stdout);
+	add_newline = (buffer[length-1] != '\n');
+      }; /* if */
     }; /* if */
   }; /* while */
 #endif

lib-src/gzip-el.sh

+#! /bin/sh
+### gzip-el.sh --- compress superfluous installed source lisp
+
+# Author:	Jeff Miller <jmiller@bay1.bayserve.net>
+# Author:	Hrvoje Niksic <hniksic@srce.hr>
+# Maintainer:	Steve Baur <steve@altair.xemacs.org>
+# Created:	13 Feb 1997
+# Version:	1.0
+# Keywords:	internal
+
+
+#
+#
+echo Compressing .el files in "$1"...
+
+find "$1" -type f -name "*.el" -print |
+	while read file; do
+		[ -s "${file}c" ] && echo "$file" && gzip -f9 "$file"
+	done
+
+echo Compressing .el files in "$1"...done.

lib-src/update-elc.sh

 ### update-elc.sh --- recompile all missing or out-or-date .elc files
 
 # Author:	Jamie Zawinski <jwz@lucid.com>
-# Maintainer:	Ben Wing <ben.wing@Eng.Sun.COM>
+# Maintainer:	Steve Baur <steve@altair.xemacs.org>
 # Created:	?
 # Version:	1.0
-# Modified:     94/07/13 16:18:44
 # Keywords:	recompile .el .elc
 
 ### Commentary:
 echo "Recompiling in `pwd|sed 's|^/tmp_mnt||'`"
 echo "          with $REAL..."
 
+$EMACS -batch -q -no-site-file -l cleantree -f batch-remove-old-elc lisp
+
 prune_vc="( -name SCCS -o -name RCS -o -name CVS ) -prune -o"
 
 tmp1=/tmp/rcl1.$$
 comm -13 $tmp1 $tmp2 | sed 's/\(.*\)\.el$/echo \1.elc ; rm \1.elc/' | sh
 echo done.
 
-
 # first recompile the byte-compiler, so that the other compiles take place
 # with the latest version (assuming we're compiling the lisp dir of the emacs
 # we're running, which might not be the case, but often is.)
 echon "Checking the byte compiler... "
 $BYTECOMP -f batch-byte-recompile-directory lisp/bytecomp
 
+# vm is hard, and must be done first ...
+#
+echon "Compiling VM... "
+( cd lisp/vm ; make EMACS=$REAL )
+echo done.
+
 echo Compiling files without .elc...
 
 # Isn't it wonderful the number of different ways you can
 # iterate over a list of files?
 
 #
-# First compile all files which don't have a .elc version, except for these:
+# Second compile all files which don't have a .elc version, except for these:
 #
 
 NUMTOCOMPILE=20			# compile up to 20 files with each invocation
 rm -f $tmp1 $tmp2
 echo Done.
 
-# vm is hard...
-#
-echon "Compiling VM... "
-( cd lisp/vm ; make EMACS=$REAL )
-echo done.
-
 if [ -d lisp/ediff ]; then
   echo Compiling EDIFF...
   ( cd lisp/ediff ; make EMACS=$REAL elc )

lisp/auctex/ChangeLog

+Tue Mar 04 11:29:23 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 9.7l released.
+
+Tue Mar  4 11:27:43 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Makefile (some): Don't use `style/*.elc'.
+
+Thu Feb 27 11:02:24 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* tex.el (TeX-electric-macro): Default to space after dot.
+
 Wed Feb 26 23:15:27 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
 
 	* Version 9.7k released.

lisp/auctex/Makefile

 # Makefile - for the AUC TeX distribution.
 #
 # Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-# Version: 9.7k
+# Version: 9.7l
 #
 # Edit the makefile, type `make', and follow the instructions.
 
 ##  BELOW THIS LINE ON YOUR OWN RISK!
 ##----------------------------------------------------------------------
 
+.SUFFIXES: .el .elc .texi 
+
 SHELL = /bin/sh
 
 FTPDIR = /home/ftp/pub/Staff/Per.Abrahamsen/auctex
 lisp:
 	$(ELC) $(AUCSRC) $(STYLESRC) $(CONTRIB)
 
-some:	$(AUCELC) style/*.elc
+some:	$(AUCELC) $(STYLESRC:.el=.elc)
 
 install:	install-lisp
 

lisp/auctex/auc-old.el

 ;;; auc-old.el - Compatibility with AUC TeX 6.*
 ;;
 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-;; Version: 9.7k
+;; Version: 9.7l
 ;;
 ;; Copyright (C) 1991 Kresten Krab Thorup 
 ;; Copyright (C) 1993 Per Abrahamsen 

lisp/auctex/bib-cite.el

 ;; Version:   2.28 (22 January 97)
 ;; Keywords:  bibtex, cite, auctex, emacs, xemacs
 
-;; RCS $Id: bib-cite.el,v 1.1 1997/02/20 02:16:50 steve Exp $
+;; RCS $Id: bib-cite.el,v 1.2 1997/03/09 02:36:36 steve Exp $
 ;; Note: RCS version number does not correspond to release number.
 
 ;; Everyone is granted permission to copy, modify and redistribute this
 ;;
 ;;    For multi-file documents, you must be using auctex (so that bib-cite can
 ;;    find the master file) and all \input and \include commands must be first
-;;    on a line (not preceeded by any non-white text).
+;;    on a line (not preceded by any non-white text).
 ;;
 ;;  imenu support  (Suggested key binding: Shift-Mouse-3)  
 ;;
 ;;   - Add key def for bibtex-mode to create auc-tex's parsing file.
 ;;   - Fix bugs found by <thompson@loon.econ.wisc.edu>
 ;;     - fix bib-get-citation for options 
-;;     - fix bib-get-citation for commas preceeded citation command
+;;     - fix bib-get-citation for commas preceded citation command
 ;;     - better regexp for citations and their keys.
 ;;     - Added @string support for any entry (not just journal entries).
 ;;       (I had to disallow numbers in @string keys because of years.  

lisp/auctex/latex.el

 ;;; latex.el --- Support for LaTeX documents.
 ;; 
 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-;; Version: 9.7k
+;; Version: 9.7l
 ;; Keywords: wp
 ;; X-URL: http://sunsite.auc.dk/auctex
 

lisp/auctex/tex-buf.el

 ;;; tex-buf.el - External commands for AUC TeX.
 ;;
 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-;; Version: 9.7k
+;; Version: 9.7l
 
 ;; Copyright (C) 1991 Kresten Krab Thorup
 ;; Copyright (C) 1993, 1996 Per Abrahamsen 

lisp/auctex/tex-info.el

 ;;; tex-info.el - Support for editing TeXinfo source.
 ;;
 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-;; Version: 9.7k
+;; Version: 9.7l
 
 ;; Copyright (C) 1993, 1994, 1997 Per Abrahamsen 
 ;; 

lisp/auctex/tex.el

 ;;; tex.el --- Support for TeX documents.
 
 ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
-;; Version: 9.7k
+;; Version: 9.7l
 ;; Keywords: wp
 ;; X-URL: http://sunsite.auc.dk/auctex
 
 ;; These two variables are automatically updated with "make dist", so
 ;; be careful before changing anything.
 
-(defconst AUC-TeX-version "9.7k"
+(defconst AUC-TeX-version "9.7l"
   "AUC TeX version number")
 
-(defconst AUC-TeX-date "Wed Feb 26 23:15:31 MET 1997"
+(defconst AUC-TeX-date "Tue Mar  4 11:29:28 MET 1997"
   "AUC TeX release date")
 
 ;;; Buffer
 AUC TeX knows of some macros, and may query for extra arguments.
 Space will complete and exit."
   (interactive)
-  (if (memq (preceding-char) '(?\\ ?.))
-      (call-interactively 'self-insert-command)
-    (let ((minibuffer-local-completion-map TeX-electric-macro-map))
-      (call-interactively 'TeX-insert-macro))))
+  (cond ((eq (preceding-char) ?\\)
+	 (call-interactively 'self-insert-command))
+	((eq (preceding-char) ?.)
+	 (let ((TeX-default-macro " ")
+	       (minibuffer-local-completion-map TeX-electric-macro-map))
+	   (call-interactively 'TeX-insert-macro)))
+	(t
+	 (let ((minibuffer-local-completion-map TeX-electric-macro-map))
+	   (call-interactively 'TeX-insert-macro)))))
 
 (defun TeX-parse-macro (symbol args)
   "How to parse TeX macros which takes one or more arguments."

lisp/bytecomp/bytecomp-runtime.el

   warnings	  list of warnings	byte-compile-warnings
   file-format	  emacs18, emacs19	byte-compile-emacs18-compatibility
 
-The value specificed with the `warnings' option must be a list, containing
+The value specified with the `warnings' option must be a list, containing
 some subset of the following flags:
 
   free-vars	references to variables not in the current lexical scope.

lisp/calendar/appt.el

 ;;;     up so that you get a notification twenty minutes before each appt,
 ;;;     then a notification should come at 3:10 for the first appt, and at
 ;;;     3:15 for the second.  Currently, no notifications are generated for an
-;;;     appointment until all preceeding appointments have completely expired.
+;;;     appointment until all preceding appointments have completely expired.
 ;;;
 ;;;  o  If there are two appointments at the same time, all but the first are
 ;;;     ignored (not announced.)

lisp/comint/comint.el

 ;;; want them present in specific modes.
 
 (defvar comint-completion-autolist nil
-  "*If non-nil, automatically list possiblities on partial completion.
+  "*If non-nil, automatically list possibilities on partial completion.
 This mirrors the optional behavior of tcsh.")
 
 (defvar comint-completion-addsuffix t

lisp/comint/gud.el

 ;; annotation rule binding of whatever gdb sends to tell us this command
 ;; might have changed it's output.
 ;;
-;; NAME is the fucntion name.  DEMAND-PREDICATE tests if output is really needed.
+;; NAME is the function name.  DEMAND-PREDICATE tests if output is really needed.
 ;; GDB-COMMAND is a string of such.  OUTPUT-HANDLER is the function bound to the
 ;; input in the input queue (see comment about ``gdb communications'' above).
 (defmacro def-gdb-auto-update-trigger (name demand-predicate gdb-command output-handler)

lisp/comint/shell.el

   (remove-hook 'font-lock-mode-hook 'shell-font-lock-mode-hook))
 (add-hook 'font-lock-mode-hook 'shell-font-lock-mode-hook)
 
-(defvar shell-prompt-pattern-for-font-lock shell-prompt-pattern
-  "Pattern to use to font-lock the prompt.
-Defaults to `shell-prompt-pattern'.")
+(defvar shell-prompt-pattern-for-font-lock nil
+  "If non-nil, pattern to use to font-lock the prompt.
+When nil, shell-prompt-pattern will be used.  Set this to a regular
+expression if you want the font-locked pattern to be different then
+the shell's prompt pattern.")
 
 (defvar shell-font-lock-keywords
-  (list (cons 'shell-prompt-pattern-for-font-lock shell-prompt-face)
+  (list '(eval . (cons (if shell-prompt-pattern-for-font-lock
+			   shell-prompt-pattern-for-font-lock
+			 shell-prompt-pattern)
+		       shell-prompt-face))
 	'("[ \t]\\([+-][^ \t\n>]+\\)" 1 shell-option-face)
 	'("^[^ \t\n]+:.*" . shell-output-2-face)
 	'("^\\[[1-9][0-9]*\\]" . shell-output-3-face)

lisp/custom/ChangeLog

+Sat Mar 08 17:21:12 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.59 released.
+
+Sat Mar  8 10:16:59 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* widget.texi (editable-list): Documented new keywords.
+	(radio-button-choice): Ditto.
+	(checklist): Ditto.
+
+	* cus-edit.el (custom-face-edit-args): Deleted.
+
+	* wid-edit.el (color-item): Don't make sample a button.
+
+	* widget.el (:insert-button-args): New keyword.
+	(:delete-button-args): Ditto.
+
+	* wid-edit.el (widget-editable-list-entry-create): Use them.
+	* cus-edit.el (custom-face-value-create): Ditto.
+
+	* widget.el (:append-button-args): New keyword.
+	* wid-edit.el (widget-editable-list-format-handler): Use it.
+
+	* cus-edit.el (custom-face-edit): Add `:help-echo' to checkboxes.
+	* cus-face.el (custom-face-attributes): Add `:echo-help'.
+	* wid-edit.el (delete-button): Ditto.
+	(insert-button): Ditto.
+
+	* widget.el (:button-args): New keyword.
+	(:sibling-args): New keyword.
+	* wid-edit.el (widget-checklist-add-item): Support them.
+	(widget-radio-add-item): Ditto.
+
+	* wid-edit.el: (widget-mouse-help): Renamed from
+	`widget-ballon-help'.
+	(widget-specify-button): Support `help-echo'.
+	(widget-glyph-insert-glyph): Ditto.
+	(widget-specify-field-update): Ditto.
+	
+	* wid-edit.el: Minor spelling corrections.
+	Patch by Martin Buchholz <mrb@Eng.Sun.COM>.
+
+Fri Mar 07 21:29:07 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.58 released.
+
+Fri Mar  7 14:55:22 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-buffer-create): Go to top of buffer after
+	creating it. 
+
+	* custom.texi (The Customization Buttons): Documented `[Done]'.
+
+Fri Mar 07 14:40:52 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.57 released.
+
+Fri Mar  7 10:46:48 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el: Removed "Push me" from :help-echo strings.
+	* wid-edit.el: Ditto.
+
+	* wid-edit.el (widget-specify-button): Support ballon-help.
+	(widget-glyph-insert-glyph): Ditto.
+	(widget-balloon-help): New function.
+
+	* Makefile (some): New target.
+
+	* wid-edit.el: A bit of compiler warning avoidance with new target.
+
+	* cus-face.el (custom-face-attributes-set): Renamed from
+	`custom-face-attribites-set'.
+	(custom-face-display-set): Changed caller.
+	(custom-invert-face): Renamed from `reverse-face'.
+	(custom-face-attributes): Changed caller.
+
+Fri Mar  7 04:17:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* cus-face.el: Moved variable defintions around a bit to avoid
+	compilation warnings.
+
+Thu Mar 06 16:30:04 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.56 released.
+
+Thu Mar  6 15:40:34 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-notify): Don't modify hidden items.
+
+Wed Mar 05 17:42:47 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.55 released.
+
+Wed Mar  5 17:20:05 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-face.el (set-face-doc-string).  Renamed from
+	`set-face-documentation'. 
+	(face-doc-string).  Renamed from `face-documentation'. 
+	(custom-declare-face): Changed caller.
+	* cus-edit.el (custom-face): Changed caller.
+
+Wed Mar 05 17:00:42 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.54 released.
+
+	* cus-face.el (reverse-face): New function.
+	(custom-face-attributes): Use it.
+
+Wed Mar 05 15:08:30 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.53 released.
+
+Wed Mar  5 15:03:58 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-face.el (custom-relevant-frames): Don't cache the frames. 
+	(custom-initialize-frame): Ditto.
+
+Wed Mar 05 14:39:19 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.52 released.
+
+Wed Mar  5 14:38:20 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-choose): Call `try-completion' to make sure
+	case changes are done.
+
+Tue Mar 04 21:04:30 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.51 released.
+
+Tue Mar  4 11:58:02 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* widget.texi, custom.texi: Use @* instead of @br.
+
+	* wid-edit.el (widget-glyph-insert): Allow glyphs as well as file
+	names from `widget-glyph-directory'.
+
+Mon Mar  3 19:38:57 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-mode-map): Bind `bury-buffer' to `q'.
+	Suggested by Neal Becker <neal@ctd.comsat.com>.
+
+Mon Mar 03 18:29:27 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.50 released.
+
+Mon Mar  3 15:01:25 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-face.el (face-documentation): Renamed from
+	`get-face-documentation'. 
+	(custom-declare-face): Change caller.
+	* cus-edit.el (custom-face): Ditto.
+
+	* cus-face.el (make-empty-face): New function.
+	(initialize-face-resources): New option.
+	(initialize-face-resources): New function.
+	(custom-declare-face): Call them here.
+	(custom-face-display-set): Don't create face here.
+	(custom-set-faces): Clear face.
+	* cus-edit.el (custom-face-set): Ditto.
+	(custom-face-save): Ditto.
+	(custom-face-reset-saved): Ditto.
+	(custom-face-reset-factory): Ditto.
+
+Mon Mar 03 10:36:40 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.49 released.
+
+Mon Mar  3 10:34:44 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-face.el (custom-background-mode): Don't call
+	`x-color-values' on Emacs tty frame.
+	Patch by Katsumi Yamaoka <yamaoka@ga.sony.co.jp>.
+
+Sat Mar  1 22:55:17 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (cus-face): Require.
+
+Sat Mar 01 22:35:07 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.48 released.
+
+Sat Mar  1 21:45:44 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el: Renamed from widget-edit.el
+	* wid-browse.el: Renamed from widget-browse.el
+	* cus-edit.el: Renamed from custom-edit.el
+	* cus-face.el: New file.
+	* custom-xmas.el: Deleted.
+	* custom.el: Updated autoloads.
+	* widget.el: Ditto
+	* widget.texi: Updated examples.
+	* widget-example.el: Updated require.
+
+Fri Feb 28 02:04:49 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* custom.el (custom-declare-face): Ignore already declared faces.
+
+	* Version 1.47 released.
+
+Fri Feb 28 01:46:22 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* custom.el (custom-background-mode): Take a frame argument.
+	(custom-declare-face): Create frame local faces where relevant. 
+	(custom-declare-face): Whine when called during dump.
+	(custom-face-display-set): Don'e create frame local face if the
+	display is identical to the global face.
+	(custom-default-frame-properties): New variable and function.
+	(custom-extract-frame-properties): New function.
+	(custom-get-frame-properties): New function.
+	(custom-display-match-frame): Use it.
+	(custom-relevant-frames): New variable and function.
+	(custom-initialize-frame): New function.
+	(after-make-frame-hook): Enable it.
+
+Thu Feb 27 18:58:45 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* custom-edit.el (custom-buffer-create): Read up event when 
+
 Wed Feb 26 22:17:38 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
 
 	* Version 1.46 released.

lisp/custom/cus-edit.el

 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.50
+;; Version: 1.59
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
   
 (unless custom-mode-map
   (setq custom-mode-map (make-sparse-keymap))
-  (set-keymap-parent custom-mode-map widget-keymap))
+  (set-keymap-parent custom-mode-map widget-keymap)
+  (define-key custom-mode-map "q" 'bury-buffer))
 
 (easy-menu-define custom-mode-menu 
     custom-mode-map
 Push RET or click mouse-2 on the word ")
   (widget-create 'info-link 
 		 :tag "help"
-		 :help-echo "Push me for help."
+		 :help-echo "Read the online help."
 		 "(custom)The Customization Buffer")
   (widget-insert " for more information.\n\n")
   (setq custom-options 
   (mapcar 'custom-magic-reset custom-options)
   (widget-create 'push-button
 		 :tag "Set"
-		 :help-echo "Push me to set all modifications."
+		 :help-echo "Set all modifications for this session."
 		 :action (lambda (widget &optional event)
 			   (custom-set)))
   (widget-insert " ")
   (widget-create 'push-button
 		 :tag "Save"
-		 :help-echo "Push me to make the modifications default."
+		 :help-echo "\
+Make the modifications default for future sessions."
 		 :action (lambda (widget &optional event)
 			   (custom-save)))
   (widget-insert " ")
   (widget-create 'push-button
 		 :tag "Reset"
-		 :help-echo "Push me to undo all modifications."
+		 :help-echo "Undo all modifications."
 		 :action (lambda (widget &optional event)
 			   (custom-reset event)))
   (widget-insert " ")
   (widget-create 'push-button
 		 :tag "Done"
-		 :help-echo "Push me to bury the buffer."
+		 :help-echo "Bury the buffer."
 		 :action (lambda (widget &optional event)
 			   (bury-buffer)
 			   ;; Steal button release event.
 			     (when (memq 'down (event-modifiers event))
 			       (read-event)))))
   (widget-insert "\n")
-  (widget-setup))
+  (widget-setup)
+  (goto-char (point-min)))
 
 ;;; Modification of Basic Widgets.
 ;;
 
 (define-widget 'custom-manual 'info-link
   "Link to the manual entry for this customization option."
-  :help-echo "Push me to read the manual."
+  :help-echo "Read the manual entry for this option."
   :tag "Manual")
 
 ;;; The `custom-magic' Widget.
     (when custom-magic-show
       (push (widget-create-child-and-convert widget 'choice-item 
 					     :help-echo "\
-Push me to change the state of this item."
+Change the state of this item."
 					     :format "%[%t%]"
 					     :tag "State")
 	    children)
 	    (insert-char ?  indent))))
       (push (widget-create-child-and-convert widget 'choice-item 
 					     :button-face face
-					     :help-echo "\
-Push me to change the state."
+					     :help-echo "Change the state."
 					     :format "%[%t%]"
 					     :tag (if lisp 
 						      (concat "(" magic ")")
 (define-widget 'custom-level 'item
   "The custom level buttons."
   :format "%[%t%]"
-  :help-echo "Push me to expand or collapse this item."
+  :help-echo "Expand or collapse this item."
   :action 'custom-level-action)
 
 (defun custom-level-action (widget &optional event)
 
 (defun custom-notify (widget &rest args)
   "Keep track of changes."
-  (widget-put widget :custom-state 'modified)
+  (unless (memq (widget-get widget :custom-state) '(nil unknown hidden))
+    (widget-put widget :custom-state 'modified))
   (let ((buffer-undo-list t))
     (custom-magic-reset widget))
   (apply 'widget-default-notify widget args))
 (define-widget 'custom-variable 'custom
   "Customize variable."
   :format "%l%v%m%h%a"
-  :help-echo "Push me to set or reset this variable."
+  :help-echo "Set or reset this variable."
   :documentation-property 'variable-documentation
   :custom-state nil
   :custom-menu 'custom-variable-menu-create
 
 ;;; The `custom-face-edit' Widget.
 
-(defvar custom-face-edit-args
-  (mapcar