Commits

cvs  committed ec9a17f

Import from CVS: tag r19-15b98

  • Participants
  • Parent commits 7976500
  • Tags r19-15b98

Comments (0)

Files changed (301)

File CHANGES-beta

 							-*- 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 ; 

File configure.in

       *-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.

File etc/Emacs.ad

 ! Emacs.leftToolBarWidth:		0
 ! Emacs.rightToolBarWidth:		0
 
-*topToolBarShadowColor:			Gray90
-*bottomToolBarShadowColor:		Gray40
+!*topToolBarShadowColor:			Gray90
+!*bottomToolBarShadowColor:		Gray40
 *backgroundToolBarColor:		Gray75
 *toolBarShadowThickness:		2
 

File etc/baw.xpm.Z

Binary file added.

File etc/bawm.xpm.Z

Binary file added.

File etc/bw.xpm.Z

Binary file added.

File etc/bwm.xpm.Z

Binary file added.

File etc/cthomp.xpm.Z

Binary file added.

File etc/cthompm.xpm.Z

Binary file added.

File etc/jwz.xpm.Z

Binary file added.

File etc/jwzm.xpm.Z

Binary file added.

File etc/kyle.xpm.Z

Binary file added.

File etc/kylem.xpm.Z

Binary file added.

File etc/larsi.xpm.Z

Binary file added.

File etc/larsim.xpm.Z

Binary file added.

File etc/mly.xpm.Z

Binary file added.

File etc/mlym.xpm.Z

Binary file added.

File etc/mrb.xpm.Z

Binary file added.

File etc/mrbm.xpm.Z

Binary file added.

File etc/piper.xpm.Z

Binary file added.

File etc/piperm.xpm.Z

Binary file added.

File etc/steve.xpm.Z

Binary file added.

File etc/stevem.xpm.Z

Binary file added.

File etc/stig.xpm.Z

Binary file added.

File etc/stigm.xpm.Z

Binary file added.

File etc/time/0.xpm

Added
New image

File etc/time/1.xpm

Added
New image

File etc/time/2.xpm

Added
New image

File etc/time/3.xpm

Added
New image

File etc/time/4.xpm

Added
New image

File etc/time/5.xpm

Added
New image

File etc/time/6.xpm

Added
New image

File etc/time/7.xpm

Added
New image

File etc/time/8.xpm

Added
New image

File etc/time/9.xpm

Added
New image

File etc/time/am.xpm

Added
New image

File etc/time/dp.xpm

Added
New image

File etc/time/l-0.0.xpm

Added
New image

File etc/time/l-0.5.xpm

Added
New image

File etc/time/l-1.0.xpm

Added
New image

File etc/time/l-1.5.xpm

Added
New image

File etc/time/l-2.0.xpm

Added
New image

File etc/time/l-2.5.xpm

Added
New image

File etc/time/l-3.0.xpm

Added
New image

File etc/time/letter.xpm

Old
Old image
New
New image

File etc/time/pm.xpm

Added
New image

File etc/vladimir.xpm.Z

Binary file added.

File etc/vladimirm.xpm.Z

Binary file added.

File etc/wing.xpm.Z

Binary file added.

File etc/wingm.xpm.Z

Binary file added.

File etc/wmperry.xpm.Z

Binary file added.

File etc/wmperrym.xpm.Z

Binary file added.

File 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)

File 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 */

File 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

File 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.

File 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 )

File 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.

File 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
 

File 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 

File 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.  

File 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
 

File 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 

File 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 
 ;; 

File 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."

File 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.

File 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.)

File 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

File 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)

File 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)

File 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.

File 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 (lambda (att)
-	    (list 'group 
-		  :inline t
-		  (list 'const :format "" :value (nth 0 att)) 
-		  (nth 1 att)))
-	  custom-face-attributes))
-
 (define-widget 'custom-face-edit 'checklist
   "Edit face attributes."
   :format "%t: %v"
   :tag "Attributes"
   :extra-offset 12
+  :button-args '(:help-echo "Control whether this attribute have any effect.")
   :args (mapcar (lambda (att)
 		  (list 'group 
 			:inline t
+			:sibling-args (widget-get (nth 1 att) :sibling-args)
 			(list 'const :format "" :value (nth 0 att)) 
 			(nth 1 att)))
 		custom-face-attributes))
   "Select a display type."
   :tag "Display"
   :value t
+  :help-echo "Specify frames where the face attributes should be used."
   :args '((const :tag "all" t)
-	  (checklist :offset 0
-		     :extra-offset 9
-		     :args ((group (const :format "Type: " type)
-				   (checklist :inline t
-					      :offset 0
-					      (const :format "X "
-						     x)
-					      (const :format "PM "
-						     pm)
-					      (const :format "Win32 "
-						     win32)
-					      (const :format "DOS "
-						     pc)
-					      (const :format "TTY%n"
-						     tty)))
-			    (group (const :format "Class: " class)
-				   (checklist :inline t
-					      :offset 0
-					      (const :format "Color "
-						     color)
-					      (const :format
-						     "Grayscale "
-						     grayscale)
-					      (const :format "Monochrome%n"
-						     mono)))
-			    (group  (const :format "Background: " background)
-				    (checklist :inline t
-					       :offset 0
-					       (const :format "Light "
-						      light)
-					       (const :format "Dark\n"
-						      dark)))))))
+	  (checklist
+	   :offset 0
+	   :extra-offset 9
+	   :args ((group :sibling-args (:help-echo "\
+Only match the specified window systems.")
+			 (const :format "Type: "
+				type)
+			 (checklist :inline t
+				    :offset 0
+				    (const :format "X "
+					   :sibling-args (:help-echo "\
+The X11 Window System.")
+					   x)
+				    (const :format "PM "
+					   :sibling-args (:help-echo "\
+OS/2 Presentation Manager.")
+					   pm)
+				    (const :format "Win32 "
+					   :sibling-args (:help-echo "\
+Windows NT/95/97.")
+					   win32)
+				    (const :format "DOS "
+					   :sibling-args (:help-echo "\
+Plain MS-DOS.")
+					   pc)
+				    (const :format "TTY%n"
+					   :sibling-args (:help-echo "\
+Plain text terminals.")
+					   tty)))
+		  (group :sibling-args (:help-echo "\
+Only match the frames with the specified color support.")
+			 (const :format "Class: "
+				class)
+			 (checklist :inline t
+				    :offset 0
+				    (const :format "Color "
+					   :sibling-args (:help-echo "\
+Match color frames.")
+					   color)
+				    (const :format "Grayscale "
+					   :sibling-args (:help-echo "\
+Match grayscale frames.")
+					   grayscale)
+				    (const :format "Monochrome%n"
+					   :sibling-args (:help-echo "\
+Match frames with no color support.")
+					   mono)))
+		  (group :sibling-args (:help-echo "\
+Only match frames with the specified intensity.")
+			 (const :format "\
+Background brightness: "
+				background)
+			 (checklist :inline t
+				    :offset 0
+				    (const :format "Light "
+					   :sibling-args (:help-echo "\
+Match frames with light backgrounds.")
+					   light)
+				    (const :format "Dark\n"
+					   :sibling-args (:help-echo "\
+Match frames with dark backgrounds.")
+					   dark)))))))
 
 ;;; The `custom-face' Widget.
 
   :format "%l%{%t%}: %s%m%h%a%v"
   :format-handler 'custom-face-format-handler
   :sample-face 'custom-face-tag-face
-  :help-echo "Push me to set or reset this face."
+  :help-echo "Set or reset this face."
   :documentation-property '(lambda (face)
-			     (face-documentation face))
+			     (face-doc-string face))
   :value-create 'custom-face-value-create
   :action 'custom-face-action
   :custom-set 'custom-face-set
 		  :entry-format "%i %d %v"
 		  :value (or (get symbol 'saved-face)
 			     (get symbol 'factory-face))
+		  :insert-button-args '(:help-echo "\
+Insert new display specification here.")
+		  :append-button-args '(:help-echo "\
+Append new display specification here.")
+		  :delete-button-args '(:help-echo "\
+Delete this display specification.")
 		  '(group :format "%v"
 			  custom-display custom-face-edit))))
       (custom-face-state-set widget)
   :format "%l%{%t%}:%L\n%m%h%a%v"
   :sample-face-get 'custom-group-sample-face-get
   :documentation-property 'group-documentation
-  :help-echo "Push me to set or reset all members of this group."
+  :help-echo "Set or reset all members of this group."
   :value-create 'custom-group-value-create
   :action 'custom-group-action
   :custom-set 'custom-group-set
 		,(widget-apply '(custom-group) :custom-menu 'emacs)
 		,@(cdr (cdr custom-help-menu)))))
     (if (fboundp 'add-submenu)
-	(add-submenu '("Help") menu)
+	(add-submenu '("Options") menu)
       (define-key global-map [menu-bar help-menu customize-menu]
 	(cons (car menu) (easy-menu-create-keymaps (car menu) (cdr menu)))))))
 

File lisp/custom/cus-face.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:
 
 (require 'custom)
 
+(eval-and-compile (require 'cl))
+
 ;;; Compatibility.
 
-(unless (fboundp 'frame-property)
-  ;; XEmacs function missing in Emacs 19.34.
-  (defun frame-property (frame property &optional default)
-    "Return FRAME's value for property PROPERTY."
-    (or (cdr (assq property (frame-parameters frame)))
-	default)))
+(eval-and-compile
+  (unless (fboundp 'frame-property)
+    ;; XEmacs function missing in Emacs 19.34.
+    (defun frame-property (frame property &optional default)
+      "Return FRAME's value for property PROPERTY."
+      (or (cdr (assq property (frame-parameters frame)))
+	  default)))
+
+  (unless (fboundp 'face-doc-string)
+    ;; XEmacs function missing in Emacs.
+    (defun face-doc-string (face)
+      "Get the documentation string for FACE."
+      (get face 'face-doc-string)))
+
+  (unless (fboundp 'set-face-doc-string)
+    ;; XEmacs function missing in Emacs.
+    (defun set-face-doc-string (face string)
+      "Set the documentation string for FACE to STRING."
+      (put face 'face-doc-string string))))
 
 (unless (fboundp 'x-color-values)
   ;; Emacs function missing in XEmacs 19.14.
 (unless (fboundp 'make-empty-face)
   ;; This should be moved to `faces.el'.
   (if (string-match "XEmacs" emacs-version)
+      ;; Give up for old XEmacs pre 19.15/20.1.
       (defalias 'make-empty-face 'make-face)
+    ;; Define for Emacs pre 19.35.
     (defun make-empty-face (name)
       "Define a new FACE on all frames, ignoring X resources."
       (interactive "SMake face: ")
       name)))
 
 (defcustom initialize-face-resources t
-  ;; Not implemented in XEmacs.
   "If non nil, allow X resources to initialize face properties.
 This only affects faces declared with `defface', and only NT or X11 frames."
   :group 'customize
        (defalias 'initialize-face-resources 'ignore)))
 
 (if (string-match "XEmacs" emacs-version)
-    (progn 
-      (defun custom-extract-frame-properties (frame)
-	"Return a plist with the frame properties of FRAME used by custom."
-	(list 'type (device-type (frame-device frame))
-	      'class (device-class (frame-device frame))
-	      'background (or custom-background-mode
-			      (frame-property frame
-					      'background-mode)
-			      (custom-background-mode frame))))
-
-(defun face-documentation (face)
-	"Get the documentation string for FACE."
-	(face-property face 'doc-string))
-
-      (defun set-face-documentation (face string)
-	"Set the documentation string for FACE to STRING."
-	(set-face-property face 'doc-string string)))
-  
-  (defun custom-extract-frame-properties (frame)
-    "Return a plist with the frame properties of FRAME used by custom."
-    (list 'type window-system
-	  'class (frame-property frame 'display-type)
-	  'background (or custom-background-mode
-			  (frame-property frame 'background-mode)
-			  (custom-background-mode frame))))  
-
-  (defun face-documentation (face)
-    "Get the documentation string for FACE."
-    (get face 'face-documentation))
-
-  (defun set-face-documentation (face string)
-    "Set the documentation string for FACE to STRING."
-    (put face 'face-documentation string)))
-
-;;; Declaring a face.
-
-;;;###autoload
-(defun custom-declare-face (face spec doc &rest args)
-  "Like `defface', but FACE is evaluated as a normal argument."
-  (when (fboundp 'load-gc)
-    ;; This should be allowed, somehow.
-    (error "Attempt to declare a face during dump"))
-  (unless (get face 'factory-face)
-    (put face 'factory-face spec)
-    (when (fboundp 'facep)
-      (unless (and (custom-facep face)
-		   (not (get face 'saved-face)))
-	;; If the user has already created the face, respect that.
-	(let ((value (or (get face 'saved-face) spec))
-	      (frames (custom-relevant-frames))
-	      frame)
-	  ;; Create global face.
-	  (make-empty-face face)
-	  (custom-face-display-set face value)
-	  ;; Create frame local faces
-	  (while frames
-	    (setq frame (car frames)
-		  frames (cdr frames))
-	    (custom-face-display-set face value frame))
-	  (initialize-face-resources face))))
-    (when (and doc (null (face-documentation face)))
-      (set-face-documentation face doc))
-    (custom-handle-all-keywords face args 'custom-face)
-    (run-hooks 'custom-define-hook))
-  face)
-
-;;; Font Attributes.
-
-(defun custom-face-attribites-set (face frame &rest atts)
-  "For FACE on FRAME set the attributes [KEYWORD VALUE]....
-Each keyword should be listed in `custom-face-attributes'.
-
-If FRAME is nil, set the default face."
-  (while atts 
-    (let* ((name (nth 0 atts))
-	   (value (nth 1 atts))
-	   (fun (nth 2 (assq name custom-face-attributes))))
-      (setq atts (cdr (cdr atts)))
-      (condition-case nil
-	  (funcall fun face value frame)
-	(error nil)))))
-
-(defconst custom-face-attributes
-  '((:bold (toggle :format "Bold: %[%v%]\n") custom-set-face-bold)
-    (:italic (toggle :format "Italic: %[%v%]\n") custom-set-face-italic)
-    (:underline
-     (toggle :format "Underline: %[%v%]\n") set-face-underline-p)
-    (:foreground (color :tag "Foreground") set-face-foreground)
-    (:background (color :tag "Background") set-face-background)
-    (:stipple (editable-field :format "Stipple: %v") set-face-stipple))
-  "Alist of face attributes. 
-
-The elements are of the form (KEY TYPE SET) where KEY is a symbol
-identifying the attribute, TYPE is a widget type for editing the
-attibute, SET is a function for setting the attribute value.
-
-The SET function should take three arguments, the face to modify, the
-value of the attribute, and optionally the frame where the face should
-be changed.")
-
-(defun custom-set-face-bold (face value &optional frame)
-  "Set the bold property of FACE to VALUE."
-  (if value
-      (make-face-bold face frame)
-    (make-face-unbold face frame)))
-
-(defun custom-set-face-italic (face value &optional frame)
-  "Set the italic property of FACE to VALUE."
-  (if value
-      (make-face-italic face frame)
-    (make-face-unitalic face frame)))
-
-(when (string-match "XEmacs" emacs-version)
-  ;; Support for special XEmacs font attributes.
-  (autoload 'font-create-object "font" nil)
-
-  (unless (fboundp 'face-font-name)
-    (defun face-font-name (face &rest args)
-      (apply 'face-font face args)))
-
-  (defun custom-set-face-font-size (face size &rest args)
-    "Set the font of FACE to SIZE"
-    (let* ((font (apply 'face-font-name face args))
-	   (fontobj (font-create-object font)))
-      (set-font-size fontobj size)
-      (apply 'set-face-font face fontobj args)))
-
-  (defun custom-set-face-font-family (face family &rest args)
-    "Set the font of FACE to FAMILY"
-    (let* ((font (apply 'face-font-name face args))
-	   (fontobj (font-create-object font)))
-      (set-font-family fontobj family)
-      (apply 'set-face-font face fontobj args)))
-
-  (nconc custom-face-attributes
-	 '((:family (editable-field :format "Family: %v")