Commits

Anonymous committed 585fb29

Import from CVS: tag r20-2b4

  • Participants
  • Parent commits 2b52039
  • Tags r20-2b4

Comments (0)

Files changed (63)

File CHANGES-beta

 							-*- indented-text -*-
+to 20.2 beta4
+-- Miscellaneous Mule/ Egg/Quail patches courtesy of Jareth Hein
+-- featurep reader macro code introduced and enabled for this beta only.
+-- Do not default with-xim to Motif if Motif libraries are availble
+-- Delete/Backspace correction from Gary Foster
+-- Gnus-5.4.50
+-- VM-6.30
+-- miscellaneous bug fixes
+
 to 20.2 beta3
 -- Miscellaneous Mule/ Egg/Quail patches courtesy of Jareth Hein
 -- Various hyperbole fixes courtesy of Bob Weiner
+Fri May  2 16:50:02 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.2-b4 is released.
+
+Thu May  1 18:13:38 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* configure.in (--with-xim): Don't default it to Motif since it
+	causes crashes at startup on some systems.
+
 Sun Apr 27 12:25:55 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.2-b3 is released.
 			the Motif XmIm* routines (when available).
 			If the XmIm* routines are autodetected,
 			then the default is --with-xim=motif, else --with-xim=no.
+			NOTE:  On some systems like SunOS4 use of this option
+			will cause XEmacs to crash at startup.
 --with-canna		Compile with support for Canna (a Japanese input method
 			used in conjunction with Mule support).
 --with-wnn		Compile with support for WNN (a multi-language input method
 rm -f conftest*
 
     LIBS="$xim_save_libs"
-    if   test "$have_XmIm" = "yes"; then with_xim=motif
+    if test "$with_xim" = "yes" -a "$have_XmIm" = "yes"; then with_xim=motif
     elif test "$with_xim"  = "yes"; then with_xim=xlib
     else                                 with_xim=no
     fi

File configure.in

 			the Motif XmIm* routines (when available).
 			If the XmIm* routines are autodetected,
 			then the default is --with-xim=motif, else --with-xim=no.
+			NOTE:  On some systems like SunOS4 use of this option
+			will cause XEmacs to crash at startup.
 --with-canna		Compile with support for Canna (a Japanese input method
 			used in conjunction with Mule support).
 --with-wnn		Compile with support for WNN (a multi-language input method
     LIBS="${motif_libs} ${LIBS}"
     AC_FUNC_CHECK(XmImMbLookupString, have_XmIm=yes, have_XmIm=no)
     LIBS="$xim_save_libs"
-    if   test "$have_XmIm" = "yes"; then with_xim=motif
+    if test "$with_xim" = "yes" -a "$have_XmIm" = "yes"; then with_xim=motif
     elif test "$with_xim"  = "yes"; then with_xim=xlib
     else                                 with_xim=no
     fi

File etc/COOKIES

-Original annotation:
-[Someone sent this in from California, and we decided to extend
-our campaign against information hoarding to recipes as well
-as software.  (Recipes are the closest thing, not involving computers,
-to software.)
-
-The story appears to be a myth, according to the Chicago Tribune,
-which says that Mrs Fields Cookies hoards the information completely.
-Therefore, this recipe can be thought of as a compatible replacement.
-We have reports that the cookies it makes are pretty good.]
-
-New annotation for XEmacs 19.15/20.1:
-[This file originally contained SPAM.  It has been updated for XEmacs. -sb]
-
-From: jhayward@math.uiuc.edu (Jonathan Hayward)
-Subject: A delicacy of delicacies
-Date: 19 Feb 1997 16:30:02 -0800
-
-Okay, everyone...  a true story of justice in the good old U.S. of A.  Thought
-y'all might enjoy this; if nothing else, it shows internet justice, if it can
-be called that.
-
-On a whim, I decided to visit Hormel's main plant, and, after a tour, we were
-allowed to taste samples of their various products.  And there was one...  I
-don't think that words can describe how it tasted.  It was a meat product, but
-to call it meat would not do it justice.  The memory of the taste brings tears
-to my eyes.
-
-I like to cook in my spare time, so I asked the tour guide if they could give
-me the recipe.  She frowned, and said, "I'm afraid not."  Well, I said, would
-you let me buy the recipe?  With a cute smile, she said, "Yes."  I asked how
-much, and she responded, "Two-fifty."  I said with approval, just add it to my
-tab.
-
-Thirty days later, I received my VISA statement from Hormel and it was $285.00.
-I looked again and remembered I had only spent $9.95 for a couple of tins, and
-about $20.00 for an anti-nauseant.  As I glanced at the bottom of the
-statement, it said, "Recipe -- $250.00."  Boy, was I upset!  I called Hormel's
-Accounting Dept. and told them the waitress said it was "two-fifty," and I did
-not realize she meant $250.00 for a recipe.  I asked them to take back the
-recipe and reduce my bill and they said they were sorry, but because all the
-recipes were this expensive so not just everyone could duplicate any of our
-delicacies...  the bill would stand.
-
-I waited, thinking of how I could get even or even try and get any of my money
-back.  I just said, "Okay, you folks got my $250.00 and now I'm going to have
-$250.00 worth of fun."  I told her that I was going to see to it that every
-gourmet will have a $250.00 recipe from Hormel for nothing.  She replied, "I
-wish you wouldn't do this."  I said, "I'm sorry but this is the only way I feel
-I could get even," and I will.
-
-So, here it is, and please pass it on to someone else or run a few copies...  I
-paid for it; now you can have it for free.
-
-	(Trust me; this recipe is so good that you will want to make as much as
-	you can at once, which is why I list so much.  This may be doubled, of
-	course):
-	1 pig carcass (all parts that are technically digestible but can't be
-		used for any other purpose, even hot dogs)
-	1 gallon castor oil
-	1 salt lick
-	1 gallon vomit
-	16 lbs recycled plastic
-
-	The cooking technique is simple.  Use a blender, branch shredder, or
-	anything else handy to shred the carcass, salt, and plastic; mix evenly
-	in a sufficiently large container.  There are a variety of ways to cook
-	it; in experimenting, I have found the best option to be slow boiling
-	in motor oil.  But the specific method of cooking doesn't matter much;
-	with such an extraordinary combination of ingredients, nobody will know
-	the difference.  When it is cooked, compress it into small tins (at
-	Hormel, it came in dark blue tins with four large white or yellow
-	letters -- I won't specify which four letter word, because there are
-	some people who find it to be more obscene and offensive than a certain
-	crude word for sex), and open and enjoy at leisure.  You don't need to
-	worry about it spoiling; bacteria won't touch it, and at any rate
-	there is a specific reason why it _can't_ go bad.  Makes at least 112
-	tins.
-
-Have fun!!  This is not a joke --- this is a true story.  That's it.  Please,
-pass it along to everyone you know, single people, mailing lists, etc...
-
-Oh, and one last thing I almost forgot...
-
-I feel a little guilty for presuming to speak about how to best serve a
-delicacy so wonderful -- the final word must go to gourmets and chefs with a
-taste far more refined than mine -- but there are a thousand ways in which it
-may be served, and, after a little experimenting, I really HAVE to share with
-you my personal favorite:
-
-	Open one tin; slice thinly.  Marinate in pesto sauce, with a touch of
-	thyme.  Roast slowly over an open flame (I have found wood --
-	preferably oak -- to work best), then THROW THE STUPID THING OUT THE
-	WINDOW AND COOK YOURSELF A STEAK.
 * Changes in XEmacs 20.2
 ========================
 
+** configure no longer defaults to using --with-xim=motif if Motif libraries
+are linked.
+
+There are many bugs in the Xlib XIM support in X11R6.3.
+
+** Why XEmacs 20.1 is called 20.2
+
 Testing of XEmacs 20.1 revealed a number of showstopping bugs at the
 very final moment.  Instead of confusing the version numbers further,
 the `20.1' designation was abandoned, and the release was renamed to
 `20.2'.
 
-** The `C-z' key now iconifies only the current X frame.  You can use
-`C-x C-z' to get the old behavior.
-
-On the tty frames `C-z' behaves as before.
-
-** Several Egg/Wnn-related crashes were fixed.
-
-** lib-complete.el was MULE-ized.
-
-The commands `find-library', `find-library-other-window' and
-`find-library-other-frame' now take an optional coding system
-argument.
+** Delete/backspace keysyms have been separated
+
+The Delete and Backspace keysyms are now no longer identical.  A better
+version of delbackspace.el has been added called delbs.el.
 
 ** XEmacs 20.0 MULE API supported for backwards compatibilty
 
 XEmacs 20.2 primarily supports the MULE 3 API.  It now also supports
 the XEmacs 20.0 MULE API.
 
-** `values' now has a setf method
-
-** W3-3.0.85 Courtesy of William Perry
-
-Bug fixes.  See the 20.1 notes for further details.
-
-** Gnus-5.4.47 Courtesy of Lars Magne Ingebrigtsen
-
-Bug fixes.  See the 20.1 notes for further details.
-
-** edmacro.el-3.10 Courtesy of Hrvoje Niksic
-
-Interface changes to maintain Emacs compatibility.
-
-** live-icon.el-1.3
-
-Bug fixes.
-
-** tpu-edt.el
-
-Restoration of proper behavior with respect to the zmacs region.
-
-** xmine.el-1.8
-
-** balloon-help.el-1.06 Courtesy of Kyle Jones
-
-** VM-6.29
-
-** Verilog.el-2.25 Courtesy of Michael McNamara
-
-** etags.c-11.83 Courtesy of F. Potort�
-
-** Further support of Custom package by Hrvoje Niksic
-
-* Changes in XEmacs 20.1 (never publicly released)
-========================
-
 ** The logo has been changed, and the default background color is
 now a shade of gray instead of the eye-burning white.
 
 ** A number of new packages are added, and many packages were
 updated.
 
-** Gnus-5.4.45, courtesy of Lars Magne Ingebrigtsen
+** Gnus-5.4.50, courtesy of Lars Magne Ingebrigtsen
 
 *** nntp.el has been totally rewritten in an asynchronous fashion.
 
 and how to add custom support to your Lisp packages.  Custom is also
 documented in the XEmacs info manuals.
 
-** W3-3.0.80, courtesy of William Perry
+** W3-3.0.85, courtesy of William Perry
 
 Version 3 of Emacs/W3, the Emacs World Wide Web browser, has been
 included.  It is significantly faster than any of the previous
 or named as a command.  The recorded/edited macros can be dumped to
 `.emacs' file.
 
-** xmine.el-1.7, courtesy of Jens Lautenbacher
+** xmine.el-1.8, courtesy of Jens Lautenbacher
 
 XEmacs now includes a minesweeper game with a full-featured graphics
 and mouse interface.  Invoke with `M-x xmine'.
 
-** efs-1.15 courtesy of Andy Norman and Michael Sperber
+** efs-1.15-x5 courtesy of Andy Norman and Michael Sperber
 
 EFS is now integrated with XEmacs, and replaces the old ange-ftp.  It
 has many more features, including info documentation, support for many
 ** hyperbole-4.022, courtesy of Bob Weiner
 ** hm--html-menus-5.3, courtesy of Heiko Muenkel
 ** python-mode.el-2.90, courtesy of Barry Warsaw
-** balloon-help-1.05, courtesy of Kyle Jones
+** balloon-help-1.06, courtesy of Kyle Jones
 ** xrdb-mode.el-1.21, courtesy of Barry Warsaw
 ** igrep.el-2.56, courtesy of Kevin Rodgers
 ** frame-icon.el, courtesy of Michael Lamoureux and Bob Weiner
 ** itimer.el-1.05, courtesy of Kyle Jones
-** VM-6.26, courtesy of Kyle Jones
+** VM-6.30, courtesy of Kyle Jones
 ** OO-Browser-2.10, courtesy of Bob Weiner
 ** viper-2.93, courtesy of Michael Kifer
 ** ediff-2.64, courtesy of Michael Kifer
 ** browse-cltl2.el-1.1, courtesy of Holger Schauer
 ** eldoc.el-1.10, courtesy of Noah Friedman
 ** tm-7.105, courtesy of MORIOKA Tomohiko
-** verilog-mode.el, courtesy of Michael McNamara & Adrian Aichner
+** verilog-mode.el-2.25, courtesy of Michael McNamara & Adrian Aichner
 ** overlay.el, courtesy of Joseph Nuspl
+** live-icon.el-1.3, fixes courtesy of Karl Hegbloom
+** tpu-edt.el, fixes courtesy of R. Kevin Oberman
+** etags.c-11.83 Courtesy of F. Potort�
+
 
 
 * Lisp and internal changes in XEmacs 20.2
 ==========================================
 
+** lib-complete.el was MULE-ized.
+
+The commands `find-library', `find-library-other-window' and
+`find-library-other-frame' now take an optional coding system
+argument.
+
+** Experimental support for Lisp reader macros #-, #+.
+
+The Common Lisp reader macros for feature test are now supported.  This
+feature is present for evaluation purposes and is subject to change.
+
+** `values' now has a setf method
+
+** The `C-z' key now iconifies only the current X frame.  You can use
+`C-x C-z' to get the old behavior.
+
+On the tty frames `C-z' behaves as before.
+
 ** `defcustom' and `defgroup' can now be used to specify types and
 placement of the user-settable variables.
 
 ** Many bugs in the scrollbar code have been fixed.
 
 ** First alpha level support of MS Windows NT is available, courtesy
-of David Hobley.
+of David Hobley and Marc Paquette.
 
 ** Wnn/egg now has initial support Courtesy of Jareth Hein.
 
 distribution.
 
 
-* Changes in XEmacs 20.1
-========================
-
-XEmacs 20.1 has not been released to the net.  Please consult the 20.2
-entries instead.
-
-
 * Major Differences Between 19.14 and 20.0
 ===========================================
 

File lib-src/ChangeLog

+Thu May  1 15:26:20 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* update-elc.sh (mule_p): Test for mule bombs with change in format
+	of new output of featurep.
+
 Fri Apr 25 09:12:04 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* pstogif: Use Martin Buchholz magic to automagically find perl

File lib-src/update-elc.sh

 if test "$mule_p" = nil ; then
   echo No
   ignore_dirs="$ignore_dirs its egg mule"
-elif test "$mule_p" = t; then
+else
   echo Yes
-else
-  echo "Error -- call Martin"
-  exit 1;
 fi
 
 # first recompile the byte-compiler, so that the other compiles take place

File lisp/ChangeLog

+Wed Apr 30 18:06:35 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* prim/loadup.el: Put features.elc in the dump list.
+
+	* prim/about.el (about-xemacs): Change date.
+
+Tue Apr 29 18:51:31 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* mule/mule-files.el (buffer-file-coding-system-alist): Regexp for 
+	handling info files didn't match the right pattern.
+
+Sun Apr 27 18:09:48 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* prim/sound.el (load-sound-file): Fix typo.
+
 Sat Apr 26 16:25:49 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* utils/lib-complete.el: Make conformant to Lisp coding standards
 
 Fri Apr 25 08:39:50 1997  Steven L Baur  <steve@altair.xemacs.org>
 
-	* packages/info.el: Remove mouse-1 binding.
-
 	* modes/sh-script.el (sh-indent-line): Deal with pathological case 
 	of indenting a first line containing a `#' as first non-white
 	space character.

File lisp/bytecomp/byte-optimize.el

 ;;      (byte-optimize-two-args-right form)
 ;;      form))
 
+;; jwz: (byte-optimize-approx-equal 0.0 0.0) was returning nil
+;; in xemacs 19.15 because it used < instead of <=.
 (defun byte-optimize-approx-equal (x y)
-  (< (* (abs (- x y)) 100) (abs (+ x y))))
+  (<= (* (abs (- x y)) 100) (abs (+ x y))))
 
 ;; Collect all the constants from FORM, after the STARTth arg,
 ;; and apply FUN to them to make one argument at the end.
 	 (condition-case ()
 	     (eval form)
 	   (error form)))
+
+	;; `add1' and `sub1' are a marginally fewer instructions
+	;; than `plus' and `minus', so use them when possible.
+	((and (null (nthcdr 3 form))
+	      (eq (nth 2 form) 1))
+	 (list '1+ (nth 1 form)))	; (+ x 1)  -->  (1+ x)
+	((and (null (nthcdr 3 form))
+	      (eq (nth 1 form) 1))
+	 (list '1+ (nth 2 form)))	; (+ 1 x)  -->  (1+ x)
+	((and (null (nthcdr 3 form))
+	      (eq (nth 2 form) -1))
+	 (list '1- (nth 1 form)))	; (+ x -1)  -->  (1- x)
+	((and (null (nthcdr 3 form))
+	      (eq (nth 1 form) -1))
+	 (list '1- (nth 2 form)))	; (+ -1 x)  -->  (1- x)
+
 ;;; It is not safe to delete the function entirely
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker).
 		(numberp last))
 	   (setq form (nconc (list '- (- (nth 1 form) last) (nth 2 form))
 			     (delq last (copy-sequence (nthcdr 3 form))))))))
+  (setq form
 ;;; It is not safe to delete the function entirely
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker).
 	 (cons (car form) (cdr (cdr form)))
        form))
 ;;;    )
+    )
+
+  ;; `add1' and `sub1' are a marginally fewer instructions than `plus'
+  ;; and `minus', so use them when possible.
+  (cond ((and (null (nthcdr 3 form))
+	      (eq (nth 2 form) 1))
+	 (list '1- (nth 1 form)))	; (- x 1)  -->  (1- x)
+	((and (null (nthcdr 3 form))
+	      (eq (nth 2 form) -1))
+	 (list '1+ (nth 1 form)))	; (- x -1)  -->  (1+ x)
+	(t
+	 form))
   )
 
 (defun byte-optimize-multiply (form)

File lisp/calendar/cal-french.el

 (require 'calendar)
 
 (defconst french-calendar-month-name-array
-  ["Vende'miaire" "Brumaire" "Frimaire" "Nivo^se" "Pluvio^se" "Vento^se"
-   "Germinal" "Flore'al" "Prairial" "Messidor" "Thermidor" "Fructidor"])
+  ["Vend�miaire" "Brumaire" "Frimaire" "Niv�se" "Pluvi�se" "Vent�se"
+   "Germinal" "Flor�al" "Prairial" "Messidor" "Thermidor" "Fructidor"])
 
 (defconst french-calendar-day-name-array
   ["Primidi" "Duodi" "Tridi" "Quartidi" "Quintidi" "Sextidi" "Septidi"
          (d (extract-calendar-day french-date)))
     (cond
      ((< y 1) "")
-     ((= m 13) (format "Jour %s de l'Anne'e %d de la Revolution"
+     ((= m 13) (format "Jour %s de l'Anne %d de la Revolution"
                        (aref french-calendar-special-days-array (1- d))
                        y))
-     (t (format "Decade %s, %s de %s de l'Anne'e %d de la Revolution"
+     (t (format "Decade %s, %s de %s de l'Anne %d de la Revolution"
                 (make-string (1+ (/ (1- d) 10)) ?I)
                 (aref french-calendar-day-name-array (% (1- d) 10))
                 (aref french-calendar-month-name-array (1- m))
 Echo French Revolutionary date unless NOECHO is t."
   (interactive
    (let* ((year (calendar-read
-                 "Anne'e de la Revolution (>0): "
+                 "Anne de la Revolution (>0): "
                  '(lambda (x) (> x 0))
                  (int-to-string
                   (extract-calendar-year
           (decade (if (> month 12)
                       1
                     (calendar-read
-                     "De'cade (1-3): "
+                     "Dcade (1-3): "
                      '(lambda (x) (memq x '(1 2 3))))))
           (day (if (> month 12)
                    (- month 12)

File lisp/egg/egg-wnn.el

       (no-rcfile "No egg-startup-file on %s")
       (file-saved "Wnn dictionary and frequency data recorded.")
       (henkan-mode-indicator "$B4A(B")
-      (begin-henkan "$BJQ493+;OJ8;zNs(B: ")
-      (end-henkan "$BJQ49=*N;J8;zNs(B: ")
-      (kugiri-dai "$BBgJ8@a6h@Z$jJ8;zNs(B: ")
-      (kugiri-sho "$B>.J8@a6h@Z$jJ8;zNs(B: ")
-      (face-henkan "$BJQ496h4VI=<(B0@-(B: ")
-      (face-dai "$BBgJ8@a6h4VI=<(B0@-(B: ")
-      (face-sho "$B>.J8@a6h4VI=<(B0@-(B: ")
-      (jikouho "$B<!8uJd(B:")
+      (begin-henkan "Fence starting character: ")
+      (end-henkan "Fence ending character: ")
+      (kugiri-dai "Large bunsetsu separator: ")
+      (kugiri-sho "Small bunsetsu separator: ")
+      (face-henkan "Face for conversion: ")
+      (face-dai "Face for large bunsetsu: ")
+      (face-sho "Face for small bunsetsu: ")
+      (jikouho "Entries:")
       (off-msg "%s %s(%s:%s) turned off.")
       (henkan-help "Kanji conversion mode:
-$BJ8@a0\F0(B
-  \\[henkan-first-bunsetu]\t$B@hF,J8@a(B\t\\[henkan-last-bunsetu]\t$B8eHxJ8@a(B  
-  \\[henkan-backward-bunsetu]\t$BD>A0J8@a(B\t\\[henkan-forward-bunsetu]\t$BD>8eJ8@a(B
-$BJQ49JQ99(B
-  $BBgJ8@a<!8uJd(B    \\[henkan-next-kouho-dai]\t$B>.J8@a<!8uJd(B    \\[henkan-next-kouho-sho]
-  $BA08uJd(B    \\[henkan-previous-kouho]  \t$B<!8uJd(B    \\[henkan-next-kouho]
-  $BBgJ8@a?-$7(B  \\[henkan-bunsetu-nobasi-dai]  \t$BBgJ8@a=L$a(B  \\[henkan-bunsetu-chijime-dai]
-  $B>.J8@a?-$7(B  \\[henkan-bunsetu-nobasi-sho]  \t$B>.J8@a=L$a(B  \\[henkan-bunsetu-chijime-sho]
-  $BBgJ8@aJQ498uJdA*Br(B  \\[henkan-select-kouho-dai]  \t$B>.J8@aJQ498uJdA*Br(B  \\[henkan-select-kouho-sho]
-$BJQ493NDj(B
-  $BA4J8@a3NDj(B  \\[henkan-kakutei]  \t$BD>A0J8@a$^$G3NDj(B  \\[henkan-kakutei-before-point]
-$BJQ49Cf;_(B    \\[henkan-quit]
+Bunsetsu motion commands
+  \\[henkan-first-bunsetu]\tFirst bunsetsu\t\\[henkan-last-bunsetu]\tLast bunsetsu
+  \\[henkan-backward-bunsetu]\tPrevious bunsetsu\t\\[henkan-forward-bunsetu]\tNext bunsetsu
+Bunsetsu conversion commands
+  \\[henkan-next-kouho-dai]\tNext larger match\t\\[henkan-next-kouho-sho]\tNext smaller match
+  \\[henkan-previous-kouho]\tPrevious match\t\\[henkan-next-kouho]\tNext match
+  \\[henkan-bunsetu-nobasi-dai]\tExtend bunsetsu largest\t\\[henkan-bunsetu-chijime-dai]\tShrink bunsetsu smallest
+  \\[henkan-bunsetu-nobasi-sho]\tExtend bunsetsu\t\\[henkan-bunsetu-chijime-sho]\tShrink bunsetsu
+  \\[henkan-select-kouho-dai]\tMenu select largest match\t\\[henkan-select-kouho-sho]\tMenu select smallest match
+Conversion commands
+  \\[henkan-kakutei]\tComplete conversion commit\t\\[henkan-kakutei-before-point]\tCommit before point
+  \\[henkan-quit]\tAbort conversion
 ")
       (hinsimei "Hinshi (product/noun) name:")
       (jishotouroku-yomi "Dictionary entry for$B!X(B%s$B!Y(B reading:")

File lisp/egg/egg.el

 (make-variable-buffer-local 'egg:*in-fence-mode*)
 (set-default 'egg:*in-fence-mode* nil)
 
+(defvar egg:fence-buffer nil "Buffer fence is active in")
+
 ;;(load-library "its-dump/roma-kana")         ;;;(define-its-mode "roma-kana"        " a$B$"(B")
 ;;(load-library "its-dump/roma-kata")         ;;;(define-its-mode "roma-kata"        " a$B%"(B")
 ;;(load-library "its-dump/downcase")          ;;;(define-its-mode "downcase"         " a a")
   ;; XEmacs change:
 ;  (buffer-disable-undo (current-buffer))
   (undo-boundary)
-  (setq egg:*in-fence-mode* t)
+  (setq egg:*in-fence-mode* t
+	egg:fence-buffer (current-buffer))
   (egg:mode-line-display)
   ;;;(setq egg:*global-map-backup* (current-global-map))
   (setq egg:*local-map-backup*  (current-local-map))
   (set-marker egg:*region-end* egg:*region-start*)
   (egg:fence-face-on)
   (goto-char egg:*region-start*)
+  (add-hook 'pre-command-hook 'fence-pre-command-hook)
   )
 
 (defun henkan-fence-region-or-single-space ()
 (defun egg:quit-egg-mode ()
   ;;;(use-global-map egg:*global-map-backup*)
   (use-local-map egg:*local-map-backup*)
+  (remove-hook 'pre-command-hook 'fence-pre-command-hook)
   (setq egg:*in-fence-mode* nil)
   (egg:mode-line-display)
   (if overwrite-mode
 (if (boundp 'mouse-track-cleanup-hook)
     (add-hook 'mouse-track-cleanup-hook 'fence-mouse-protect))
 
+(defun fence-pre-command-hook ()
+  ;; cribbed off of isearch-mode
+  ;;
+  ;; For use as the value of `pre-command-hook' when fence is active.
+  ;; If the command about to be executed is not ours,
+  ;; kill the fence before that command is executed.
+  ;;
+  (cond ((not (eq (current-buffer) egg:fence-buffer))
+	 ;; If the buffer (likely meaning "frame") has changed, bail.
+	 ;; This can also happen if a proc filter has popped up another
+	 ;; buffer, which is arguably a bad thing for it to have done,
+	 ;; but the way in which egg would have hosed you in that
+	 ;; case is unarguably even worse.
+	 (save-excursion
+	   (set-buffer egg:fence-buffer)
+	   (its:reset-input)
+	   (fence-cancel-input)))
+	((not (and this-command
+		   (symbolp this-command)
+		   (get this-command 'egg-fence-command)))
+	 (its:reset-input)
+	 (fence-cancel-input))
+	(t
+	 (if (or (not (pos-visible-in-window-safe
+		       (marker-position egg:*region-start*)))
+		 (not (pos-visible-in-window-safe
+		       (marker-position egg:*region-end*))))
+	     (recenter))))
+  )
+
 (defun egg-lang-switch-callback ()
   "Do whatever processing is necessary when the language-environment changes."
   (if egg:*in-fence-mode*
 	(fence-cancel-input)))
   (let ((func (get current-language-environment 'set-egg-environ)))
     (if (not (null func))
-      (funcall func))))
+      (funcall func)))
+  (egg:mode-line-display))
 
 (defun fence-mode-help-command ()
   "Display documentation for fence-mode."
 (define-key fence-mode-map [right] 'fence-forward-char)
 (define-key fence-mode-map [left] 'fence-backward-char)
 
+(put 'fence-self-insert-command 'egg-fence-command t)
+(put 'fence-hiragana 'egg-fence-command t)
+(put 'fence-katakana 'egg-fence-command t)
+(put 'fence-hankaku 'egg-fence-command t)
+(put 'fence-zenkaku 'egg-fence-command t)
+(put 'its:select-hiragana 'egg-fence-command t)
+(put 'its:select-katakana 'egg-fence-command t)
+(put 'its:select-downcase 'egg-fence-command t)
+(put 'its:select-upcase 'egg-fence-command t)
+(put 'its:select-zenkaku-downcase 'egg-fence-command t)
+(put 'its:select-zenkaku-upcase 'egg-fence-command t)
+(put 'its:minibuffer-completion-help 'egg-fence-command t)
+(put 'henkan-fence-region-or-single-space 'egg-fence-command t)
+(put 'henkan-fence-region 'egg-fence-command t)
+(put 'fence-beginning-of-line 'egg-fence-command t)
+(put 'fence-backward-char 'egg-fence-command t)
+(put 'fence-cancel-input 'egg-fence-command t)
+(put 'fence-delete-char 'egg-fence-command t)
+(put 'fence-end-of-line 'egg-fence-command t)
+(put 'fence-forward-char 'egg-fence-command t)
+(put 'fence-cancel-input 'egg-fence-command t)
+(put 'fence-mode-help-command 'egg-fence-command t)
+(put 'fence-kill-line 'egg-fence-command t)
+(put 'fence-exit-mode 'egg-fence-command t)
+(put 'fence-exit-mode 'egg-fence-command t)
+(put 'fence-exit-mode 'egg-fence-command t)
+(put 'its:select-previous-mode 'egg-fence-command t)
+(put 'fence-transpose-chars 'egg-fence-command t)
+(put 'eval-expression 'egg-fence-command t)
+(put 'fence-toggle-egg-mode 'egg-fence-command t)
+(put 'jis-code-input 'egg-fence-command t)
+(put 'fence-backward-delete-char 'egg-fence-command t)
+(put 'fence-backward-delete-char 'egg-fence-command t)
+(put 'fence-backward-delete-char 'egg-fence-command t)
+(put 'fence-forward-char 'egg-fence-command t)
+(put 'fence-backward-char 'egg-fence-command t)
+(put 'hiragana-region 'egg-fence-command t)
+(put 'hiragana-paragraph 'egg-fence-command t)
+(put 'hiragana-sentance 'egg-fence-command t)
+(put 'katakana-region 'egg-fence-command t)
+(put 'katakana-paragraph 'egg-fence-command t)
+(put 'katakana-sentance 'egg-fence-command t)
+(put 'hankaku-region 'egg-fence-command t)
+(put 'hankaku-paragraph 'egg-fence-command t)
+(put 'hankaku-sentance 'egg-fence-command t)
+(put 'hankaku-word 'egg-fence-command t)
+(put 'zenkaku-region 'egg-fence-command t)
+(put 'zenkaku-paragraph 'egg-fence-command t)
+(put 'zenkaku-sentance 'egg-fence-command t)
+(put 'zenkaku-word 'egg-fence-command t)
+(put 'roma-kana-region 'egg-fence-command t)
+(put 'roma-kana-paragraph 'egg-fence-command t)
+(put 'roma-kana-sentance 'egg-fence-command t)
+(put 'roma-kana-word 'egg-fence-command t)
+(put 'roma-kanji-region 'egg-fence-command t)
+(put 'roma-kanji-paragraph 'egg-fence-command t)
+(put 'roma-kanji-sentance 'egg-fence-command t)
+(put 'roma-kanji-word 'egg-fence-command t)
+(put 'its:select-mode 'egg-fence-command t)
+(put 'its:select-mode-from-menu 'egg-fence-command t)
+(put 'its:next-mode 'egg-fence-command t)
+(put 'its:previous-mode 'egg-fence-command t)
+(put 'its:select-hiragana 'egg-fence-command t)
+(put 'its:select-katakana 'egg-fence-command t)
+(put 'its:select-downcase 'egg-fence-command t)
+(put 'its:select-upcase   'egg-fence-command t)
+(put 'its:select-zenkaku-downcase 'egg-fence-command t)
+(put 'its:select-zenkaku-upcase   'egg-fence-command t)
+(put 'its:select-mode-temporally 'egg-fence-command t)
+(put 'its:select-previous-mode 'egg-fence-command t)
+(put 'fence-toggle-egg-mode 'egg-fence-command t)
+(put 'fence-transpose-chars 'egg-fence-command t)
+(put 'henkan-region 'egg-fence-command t)
+(put 'henkan-paragraph 'egg-fence-command t)
+(put 'henkan-sentance 'egg-fence-command t)
+(put 'henkan-word 'egg-fence-command t)
+(put 'henkan-kakutei 'egg-fence-command t)
+(put 'gyaku-henkan-region 'egg-fence-command t)
+(put 'gyaku-henkan-sentance 'egg-fence-command t)
+(put 'gyaku-henkan-word 'egg-fence-command t)
+(put 'gyaku-henkan-kakutei 'egg-fence-command t)
+(put 'henkan-kakutei-first-char 'egg-fence-command t)
+(put 'henkan-kakutei-before-point 'egg-fence-command t)
+(put 'sai-henkan 'egg-fence-command t)
+(put 'henkan-forward-bunsetu 'egg-fence-command t)
+(put 'henkan-backward-bunsetu 'egg-fence-command t)
+(put 'henkan-first-bunsetu 'egg-fence-command t)
+(put 'henkan-last-bunsetu 'egg-fence-command t)
+(put 'henkan-hiragana 'egg-fence-command t)
+(put 'henkan-katakana 'egg-fence-command t)
+(put 'henkan-next-kouho 'egg-fence-command t)
+(put 'henkan-next-kouho-dai 'egg-fence-command t)
+(put 'henkan-next-kouho-sho 'egg-fence-command t)
+(put 'henkan-previous-kouho 'egg-fence-command t)
+(put 'henkan-previous-kouho-dai 'egg-fence-command t)
+(put 'henkan-previous-kouho-sho 'egg-fence-command t)
+(put 'henkan-bunsetu-chijime-dai 'egg-fence-command t)
+(put 'henkan-bunsetu-chijime-sho 'egg-fence-command t)
+(put 'henkan-bunsetu-nobasi-dai 'egg-fence-command t)
+(put 'henkan-bunsetu-nobasi-sho 'egg-fence-command t)
+(put 'henkan-saishou-bunsetu 'egg-fence-command t)
+(put 'henkan-saichou-bunsetu 'egg-fence-command t)
+(put 'henkan-quit 'egg-fence-command t)
+(put 'henkan-select-kouho-dai 'egg-fence-command t)
+(put 'henkan-select-kouho-sho 'egg-fence-command t)
+(put 'henkan-word-off 'egg-fence-command t)
+(put 'henkan-kakutei-and-self-insert 'egg-fence-command t)
+(put 'henkan-help-command 'egg-fence-command t)
+(put 'toroku-region 'egg-fence-command t)
+(put 'toroku-henkan-mode 'egg-fence-command t)
+(put 'recenter 'egg-fence-command t)
+
 
 ;;;----------------------------------------------------------------------
 ;;;

File lisp/electric/electric.el

 				(prin1-to-string conditions)))
 		     (sit-for 2))))
 	(ding))
+      (and (not (eq (current-buffer) electrified-buffer)) ; XEmacs -
+	   (not (eq (selected-window) (minibuffer-window)))
+	   (progn (ding nil 'quit)
+		  (message "Leaving electric command loop %s."
+			   "because buffer has changed")
+		  (sit-for 2)
+		  (throw return-tag nil)))
       (if loop-function (funcall loop-function loop-state err))))
   ;; XEmacs - huh?  It should be impossible to ever get here...
   (ding nil 'alarm)

File lisp/gnus/ChangeLog

+Sat May  3 00:59:39 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.50 is released.
+
+Sat May  3 00:30:12 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
+
+	* gnus-picon.el (gnus-picons-prepare-for-annotations): New
+	function, and many changes.
+
+Sat May  3 00:03:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* nnfolder.el (nnfolder-possibly-change-group): Wouldn't always
+	switch buffers.
+
+	* gnus-sum.el (gnus-update-read-articles): Force boundary.
+
+	* gnus-undo.el (gnus-force-undo-boundary): New function.
+
+Fri May  2 23:44:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-art.el (gnus-article-treat-html): w3-parse-buffer
+	incompatibility. 
+
+Thu May  1 17:56:05 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.49 is released.
+
+Sat Apr 19 16:13:03 1997  Erik Toubro Nielsen  <erik@ifad.dk>
+
+	* gnus-sum.el (gnus-summary-exit): Returned to the wrong topic in
+ 	certain obscure cases if selected group occured in multiple
+ 	topics.
+
+	* gnus-topic.el (gnus-topic-update-topic): Did not preserve point
+ 	on the same instance of a group if group occured in multiple
+ 	topics. Caused gnus-summary-exit to return to wrong topic if the
+ 	selected group was in more than one topic.
+
+	Above two bugs happened only if the window configuration for
+ 	summary mode caused the group buffer not to be shown in a window.
+
+Thu May  1 14:28:20 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* message.el (message-send): Would pretend to have sent.
+
+	* nnmh.el (nnmh-request-list-1): Don't use truename.
+
+Sun Apr 27 15:16:16 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* gnus-xmas.el: Undo previous change, and restore the version from 
+	5.4.46 (without the require 'gnus-art).
+
+Tue Apr 29 11:08:27 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-score.el (gnus-summary-increase-score): Better error
+	messages. 
+
+Sun Apr 27 23:15:58 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.48 is released.
+
+Sun Apr 27 11:40:57 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* gnus-xmas.el (gnus-art): (require 'gnus-art) introduces a
+	circular dependency on gnus-xmas-define and gnus-xmas-redefine.
+	Brute force it away.
+
+Sun Apr 27 12:32:13 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.47 is released.
+
+Sun Apr 27 10:42:08 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-cache.el (gnus-cache-move-cache): Allow entering directory
+	name. 
+
+	* nntp.el (nntp-telnet-command, nntp-telnet-switches): New
+	variables. 
+
+	* gnus-score.el (gnus-summary-increase-score): Refuse illegal
+	match types.
+
+Fri Apr 25 06:16:05 1997  Arne Georg Gleditsch  <argggh@ifi.uio.no>
+
+	* gnus-sum.el (gnus-summary-refer-article): Go to article when
+	expunged. 
+
+Wed Apr 23 19:48:43 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* gnus-ems.el (gnus-article-x-face-command): Removed bogus
+	declaration.
+
+Mon Apr 21 16:44:00 1997  Paul Franklin  <paul@cs.washington.edu>
+
+	* nnmail.el (nnmail-move-inbox): fewer (0?) file calls on inbox if
+	popmail.
+
+Thu Apr 24 14:04:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* message.el (message-font-lock-keywords): Be more conservative in
+	determining headers.
+
+	* nnmh.el (nnmh-request-list-1): Use truenames.
+
+	* gnus-undo.el (gnus-undo-mode): Don't infest
+	gnus-summary-exit-hook. 
+
+	* gnus-sum.el (gnus-update-read-articles): Force an undo
+	boundary. 
+
+	* nnweb.el (nnweb-fetch-url): Don't rely on return values from
+	url-insert-file-contents. 
+
 Sat Apr 19 06:11:31 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 	* gnus.el: Gnus v5.4.46 is released.

File lisp/gnus/gnus-art.el

        (setq e (point-max)))
       (nnheader-temp-write nil
 	(insert-buffer-substring gnus-article-buffer b e)
+	(require 'url)
 	(save-window-excursion
-	  (setq buf (car (w3-parse-buffer (current-buffer))))))
+	  (w3-parse-buffer (current-buffer))
+	  (setq buf (buffer-string))))
       (when buf
 	(delete-region (point-min) (point-max))
 	(insert-buffer-substring buf)

File lisp/gnus/gnus-cache.el

 
 (defun gnus-cache-move-cache (dir)
   "Move the cache tree to somewhere else."
-  (interactive "DMove the cache tree to: ")
+  (interactive "FMove the cache tree to: ")
   (rename-file gnus-cache-directory dir))
 
 (provide 'gnus-cache)

File lisp/gnus/gnus-ems.el

       nil
 
     (defvar gnus-mouse-face-prop 'mouse-face
-      "Property used for highlighting mouse regions.")
-
-    (defvar gnus-article-x-face-command
-      "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -"
-      "String or function to be executed to display an X-Face header.
-If it is a string, the command will be executed in a sub-shell
-asynchronously.	 The compressed face will be piped to this command."))
+      "Property used for highlighting mouse regions."))
 
   (cond
    ((string-match "XEmacs\\|Lucid" emacs-version)

File lisp/gnus/gnus-picon.el

   :type 'string
   :group 'picons)
 
-(defcustom gnus-picons-user-directories '("local" "users" "usenix" "misc/MISC")
+(defcustom gnus-picons-user-directories '("local" "users" "usenix" "misc")
   "List of directories to search for user faces."
   :type '(repeat string)
   :group 'picons)
 
 (defcustom gnus-picons-display-article-move-p t
   "*Whether to move point to first empty line when displaying picons.
-This has only an effect if `gnus-picons-display-where' hs value article."
+This has only an effect if `gnus-picons-display-where' has value `article'."
   :type 'boolean
   :group 'picons)
 
 
 ;;; Internal variables.
 
-(defvar gnus-group-annotations nil)
-(defvar gnus-article-annotations nil)
-(defvar gnus-x-face-annotations nil)
+(defvar gnus-group-annotations nil
+  "List of annotations added/removed when selecting/exiting a group")
+(defvar gnus-article-annotations nil
+  "List of annotations added/removed when selecting an article")
+(defvar gnus-x-face-annotations nil
+  "List of annotations added/removed when selecting an article with an X-Face.")
 
-(defun gnus-picons-remove (plist)
-  (let ((listitem (car plist)))
-    (while (setq listitem (car plist))
-      (when (annotationp listitem)
-	(delete-annotation listitem))
-      (setq plist (cdr plist)))))
+(defun gnus-picons-remove (symbol)
+  "Remove all annotations/processes in variable named SYMBOL.
+This function is careful to set it to nil before removing anything so that
+asynchronous process don't get crazy."
+  (let ((listitems (symbol-value symbol)))
+    (set symbol nil)
+    (while listitems
+      (let ((item (pop listitems)))
+	(cond ((annotationp item)
+	       (delete-annotation item))
+	      ((processp item)
+	       ;; kill the process, ignore any output.
+	       (set-process-sentinel item (function (lambda (p e))))
+	       (delete-process item)))))))
 
 (defun gnus-picons-remove-all ()
   "Removes all picons from the Gnus display(s)."
   (interactive)
-  (gnus-picons-remove gnus-article-annotations)
-  (gnus-picons-remove gnus-group-annotations)
-  (gnus-picons-remove gnus-x-face-annotations)
-  (setq gnus-article-annotations nil
-        gnus-group-annotations nil
-	gnus-x-face-annotations nil)
+  (gnus-picons-remove 'gnus-article-annotations)
+  (gnus-picons-remove 'gnus-group-annotations)
+  (gnus-picons-remove 'gnus-x-face-annotations)
   (when (bufferp gnus-picons-buffer)
     (kill-buffer gnus-picons-buffer)))
 
         ((stringp variable)
          variable)))
 
+(defun gnus-picons-prepare-for-annotations (annotations)
+  "Prepare picons buffer for puting annotations memorized in ANNOTATIONS.
+ANNOTATIONS should be a symbol naming a variable wich contains a list of
+annotations.  Sets buffer to `gnus-picons-display-where'."
+  ;; let drawing catch up
+  (when gnus-picons-refresh-before-display
+    (sit-for 0))
+  (set-buffer (get-buffer-create
+	       (gnus-get-buffer-name gnus-picons-display-where)))
+  (gnus-add-current-to-buffer-list)
+  (goto-char (point-min))
+  (if (and (eq gnus-picons-display-where 'article)
+	   gnus-picons-display-article-move-p)
+      (when (search-forward "\n\n" nil t)
+	(forward-line -1)))
+  (gnus-picons-remove annotations))
+
 (defun gnus-picons-article-display-x-face ()
   "Display the x-face header bitmap in the 'gnus-picons-display-where buffer."
   ;; delete any old ones.
-  (gnus-picons-remove gnus-x-face-annotations)
-  (setq gnus-x-face-annotations nil)
+  ;; This is needed here because gnus-picons-display-x-face will not
+  ;; be called if there is no X-Face header
+  (gnus-picons-remove 'gnus-x-face-annotations)
   ;; display the new one.
   (let ((gnus-article-x-face-command 'gnus-picons-display-x-face))
     (gnus-article-display-x-face)))
 
+(defun gnus-picons-x-face-sentinel (process event)
+  ;; don't call gnus-picons-prepare-for-annotations, it would reset
+  ;; gnus-x-face-annotations.
+  (set-buffer (get-buffer-create
+	       (gnus-get-buffer-name gnus-picons-display-where)))
+  (gnus-add-current-to-buffer-list)
+  (goto-char (point-min))
+  (if (and (eq gnus-picons-display-where 'article)
+	   gnus-picons-display-article-move-p)
+      (when (search-forward "\n\n" nil t)
+	(forward-line -1)))
+  ;; If the process is still in the list, insert this icon
+  (let ((myself (member process gnus-x-face-annotations)))
+    (when myself
+      (setcar myself
+	      (make-annotation gnus-picons-x-face-file-name nil 'text))
+      (delete-file gnus-picons-x-face-file-name))))
+
 (defun gnus-picons-display-x-face (beg end)
   "Function to display the x-face header in the picons window.
 To use:  (setq gnus-article-x-face-command 'gnus-picons-display-x-face)"
   (interactive)
-  ;; convert the x-face header to a .xbm file
-  (let ((process-connection-type nil)
-	(process nil))
-    (process-kill-without-query
-     (setq process (start-process
-		    "gnus-x-face" nil shell-file-name shell-command-switch
-		    gnus-picons-convert-x-face)))
-    (process-send-region "gnus-x-face" beg end)
-    (process-send-eof "gnus-x-face")
-    ;; wait for it.
-    (while (not (equal (process-status process) 'exit))
-      (sleep-for .1)))
-  ;; display it
-  (save-excursion
-    (set-buffer (get-buffer-create (gnus-get-buffer-name
-				    gnus-picons-display-where)))
-    (gnus-add-current-to-buffer-list)
-    (goto-char (point-min))
-    (let (buffer-read-only)
-      (unless (eolp)
-	(push (make-annotation "\n" (point) 'text)
-	      gnus-x-face-annotations))
-      ;; append the annotation to gnus-article-annotations for deletion.
-      (setq gnus-x-face-annotations
-	    (append
-	     (gnus-picons-try-to-find-face gnus-picons-x-face-file-name t)
-	     gnus-x-face-annotations)))
-    ;; delete the tmp file
-    (delete-file gnus-picons-x-face-file-name)))
+  (if (featurep 'xface)
+      ;; Use builtin support
+      (let ((buf (current-buffer)))
+	(save-excursion
+	  (gnus-picons-prepare-for-annotations 'gnus-x-face-annotations)
+	  (setq gnus-x-face-annotations
+		(cons (make-annotation (concat "X-Face: "
+					       (buffer-substring beg end buf))
+				       nil 'text)
+		      gnus-x-face-annotations))))
+    ;; convert the x-face header to a .xbm file
+    (let* ((process-connection-type nil)
+	   (process (start-process "gnus-x-face" nil
+				   shell-file-name shell-command-switch
+				   gnus-picons-convert-x-face)))
+      (process-kill-without-query process)
+      (setq gnus-x-face-annotations (list process))
+      (set-process-sentinel process 'gnus-picons-x-face-sentinel)
+      (process-send-region process beg end)
+      (process-send-eof process))))
 
 (defun gnus-article-display-picons ()
   "Display faces for an author and his/her domain in gnus-picons-display-where."
   (interactive)
-  ;; let drawing catch up
-  (when gnus-picons-refresh-before-display
-    (sit-for 0))
-  (let ((first t)
-	from at-idx databases)
+  (let (from at-idx)
     (when (and (featurep 'xpm)
 	       (or (not (fboundp 'device-type)) (equal (device-type) 'x))
 	       (setq from (mail-fetch-field "from"))
 	(let ((username (substring from 0 at-idx))
 	      (addrs (if (eq at-idx (length from))
 			 (if gnus-local-domain
-			     (nreverse (message-tokenize-header
-					gnus-local-domain "."))
-			   '("."))
-		       (nreverse (message-tokenize-header
-				  (substring from (1+ at-idx)) ".")))))
-	  (set-buffer (get-buffer-create
-		       (gnus-get-buffer-name gnus-picons-display-where)))
-	  (gnus-add-current-to-buffer-list)
-	  (goto-char (point-min))
-	  (if (and (eq gnus-picons-display-where 'article)
-		   gnus-picons-display-article-move-p)
-	      (when (search-forward "\n\n" nil t)
-		(forward-line -1))
-	    (unless (eolp)
-	      (push (make-annotation "\n" (point) 'text)
-		    gnus-article-annotations)))
-
-	  (gnus-picons-remove gnus-article-annotations)
-	  (setq gnus-article-annotations nil)
-
-	  ;; look for domain paths.
-	  (setq databases gnus-picons-domain-directories)
-	  (while databases
-	    (setq gnus-article-annotations
-		  (nconc (gnus-picons-insert-face-if-exists
-			  (car databases)
-			  addrs
-			  "unknown" (or gnus-picons-display-as-address
-					gnus-article-annotations) t t)
-			 gnus-article-annotations))
-	    (setq databases (cdr databases)))
-
-	  ;; add an '@' if displaying as address
-	  (when gnus-picons-display-as-address
-	    (setq gnus-article-annotations
-		  (nconc gnus-article-annotations
-			 (list
-			  (make-annotation "@" (point) 'text nil nil nil t)))))
-
-	  ;; then do user directories,
-	  (let (found)
-	    (setq databases gnus-picons-user-directories)
-	    (setq username (downcase username))
-	    (while databases
-	      (setq found
-		    (nconc (gnus-picons-insert-face-if-exists
-			    (car databases) addrs username
-			    (or gnus-picons-display-as-address
-				gnus-article-annotations) nil t)
-			   found))
-	      (setq databases (cdr databases)))
-	    ;; add their name if no face exists
-	    (when (and gnus-picons-display-as-address (not found))
-	      (setq found
-		    (list
-		     (make-annotation username (point) 'text nil nil nil t))))
-	    (setq gnus-article-annotations
-		  (nconc found gnus-article-annotations)))
+			     (message-tokenize-header gnus-local-domain ".")
+			   nil)
+		       (message-tokenize-header (substring from (1+ at-idx))
+						"."))))
+	  (gnus-picons-prepare-for-annotations 'gnus-article-annotations)
+	  (setq gnus-article-annotations
+		(nconc gnus-article-annotations
+		       ;; look for domain paths.
+		       (gnus-picons-display-pairs
+			(gnus-picons-lookup-pairs addrs
+					       gnus-picons-domain-directories)
+			(not (or gnus-picons-display-as-address
+				 gnus-article-annotations))
+			nil "." t)
+		       ;; add an '@' if displaying as address
+		       (if  (and gnus-picons-display-as-address addrs)
+			 (list (make-annotation "@" nil 'text nil nil nil t)))
+		       ;; then do user directories,
+		       (gnus-picons-display-picon-or-name
+			(gnus-picons-lookup-user (downcase username) addrs)
+			username nil t)))
 
 	  (add-hook 'gnus-summary-exit-hook 'gnus-picons-remove-all))))))
 
 (defun gnus-group-display-picons ()
   "Display icons for the group in the gnus-picons-display-where buffer."
   (interactive)
-  ;; let display catch up so far
-  (when gnus-picons-refresh-before-display
-    (sit-for 0))
   (when (and (featurep 'xpm)
 	     (or (not (fboundp 'device-type)) (equal (device-type) 'x)))
     (save-excursion
-      (set-buffer (get-buffer-create
-		   (gnus-get-buffer-name gnus-picons-display-where)))
-      (gnus-add-current-to-buffer-list)
-      (goto-char (point-min))
-      (if (and (eq gnus-picons-display-where 'article)
-	       gnus-picons-display-article-move-p)
-	  (when (search-forward "\n\n" nil t)
-	    (forward-line -1))
-	(unless (eolp)
-	  (push (make-annotation "\n" (point) 'text)
-		gnus-group-annotations)))
-      (cond
-       ((listp gnus-group-annotations)
-	(mapc #'(lambda (ext) (when (extent-live-p ext)
-				(delete-annotation ext)))
-	      gnus-group-annotations)
-	(setq gnus-group-annotations nil))
-       ((annotationp gnus-group-annotations)
-	(delete-annotation gnus-group-annotations)
-	(setq gnus-group-annotations nil)))
-      (gnus-picons-remove gnus-group-annotations)
+      (gnus-picons-prepare-for-annotations 'gnus-group-annotations)
       (setq gnus-group-annotations
-	    (gnus-picons-insert-face-if-exists
-	     gnus-picons-news-directory
-	     (message-tokenize-header gnus-newsgroup-name ".")
-	     "unknown" nil t))
+	    (gnus-picons-display-pairs
+	     (gnus-picons-lookup-pairs (reverse (message-tokenize-header
+					      gnus-newsgroup-name "."))
+				    gnus-picons-news-directory)
+	     t nil "."))
       (add-hook 'gnus-summary-exit-hook 'gnus-picons-remove-all))))
 
+(defun gnus-picons-make-path (dir subdirs)
+  "Make a directory name from a base DIR and a list of SUBDIRS.
+Returns a directory name build by concatenating DIR and all elements of
+SUBDIRS with \"/\" between elements."
+  (while subdirs
+    (setq dir (file-name-as-directory (concat dir (pop subdirs)))))
+  dir)
+
 (defsubst gnus-picons-try-suffixes (file)
   (let ((suffixes gnus-picons-file-suffixes)
 	f)
       (setq f nil))
     f))
 
-(defun gnus-picons-insert-face-if-exists (database addrs filename &optional
-						   nobar-p dots rightp)
-  "Inserts a face at point if I can find one"
-  ;; '(gnus-picons-insert-face-if-exists
-  ;;    "Database" '("edu" "indiana" "cs") "Name")
-  ;; looks for:
-  ;;  1. edu/indiana/cs/Name
-  ;;  2. edu/indiana/Name
-  ;;  3. edu/Name
-  ;; '(gnus-picons-insert-face-if-exists
-  ;;     "Database/MISC" '("edu" "indiana" "cs") "Name")
-  ;; looks for:
-  ;;  1. MISC/Name
-  ;; The special treatment of MISC doesn't conform with the conventions for
-  ;; picon databases, but otherwise we would always see the MISC/unknown face.
-  (let ((bar (and (not nobar-p)
-		  (or gnus-picons-display-as-address
-		      (annotations-in-region
-		       (point) (min (point-max) (1+ (point)))
-		       (current-buffer)))))
-	(path (concat (file-name-as-directory gnus-picons-database)
-		      database "/"))
-	(domainp (and gnus-picons-display-as-address dots))
-	picons found bar-ann cur first)
-    (when (string-match "/MISC" database)
-      (setq addrs '(".")))
-    (while (and addrs
-		(file-accessible-directory-p path))
-      (setq cur (pop addrs)
-	    path (concat path cur "/"))
-      (if (setq found
-		(gnus-picons-try-suffixes (concat path filename "/face.")))
-	  (progn
-	    (setq picons (nconc (when (and domainp first rightp)
-				  (list (make-annotation
-					 "." (point) 'text
-					 nil nil nil rightp)
-					picons))
-				(gnus-picons-try-to-find-face
-				 found nil (if domainp cur filename) rightp)
-				(when (and domainp first (not rightp))
-				  (list (make-annotation
-					 "." (point) 'text
-					 nil nil nil rightp)
-					picons))
-				picons)))
-	(when domainp
-	  (setq picons
-		(nconc
-		 (list (make-annotation
-			(if first (concat (if (not rightp) ".") cur
-					  (if rightp ".")) cur)
-			(point) 'text nil nil nil rightp))
-		 picons))))
-      (when (and bar (or domainp found))
-	(setq bar-ann (gnus-picons-try-to-find-face
-		       (concat gnus-xmas-glyph-directory "bar.xbm")
-		       nil nil t))
-	(when bar-ann
-	  (setq picons (nconc picons bar-ann))
-	  (setq bar nil)))
-      (setq first t))
-    (when (and addrs domainp)
-      (let ((it (mapconcat 'downcase (nreverse addrs) ".")))
-	(setq picons
-	      (nconc picons (list (make-annotation
-				   (if first
-				       (concat (if (not rightp) ".")
-					       it (if rightp "."))
-				     it)
-				   (point) 'text
-				   nil nil nil rightp))))))
+(defun gnus-picons-lookup (addrs dirs)
+  "Lookup the picon for ADDRS in databases DIRS.
+Returns the picon filename or NIL if none found."
+  (let (result)
+    (while (and dirs (null result))
+      (setq result
+	    (gnus-picons-try-suffixes
+	     (expand-file-name "face."
+			       (gnus-picons-make-path
+				(file-name-as-directory
+				 (concat
+				  (file-name-as-directory gnus-picons-database)
+				  (pop dirs)))
+				(reverse addrs))))))
+    result))
+
+(defun gnus-picons-lookup-user-internal (user domains)
+  (let ((dirs gnus-picons-user-directories)
+	picon)
+    (while (and dirs (null picon))
+      (let ((dir (list (pop dirs)))
+	    (domains domains))
+	(while (and domains (null picon))
+	  (setq picon (gnus-picons-lookup (cons user domains) dir))
+	  (pop domains))
+	;; Also make a try MISC subdir
+	(unless picon
+	  (setq picon (gnus-picons-lookup (list user "MISC") dir)))))
+
+    picon))
+
+(defun gnus-picons-lookup-user (user domains)
+  "Lookup the picon for USER at DOMAINS.
+USER is a string containing a name.
+DOMAINS is a list of strings from the fully qualified domain name."
+  (or (gnus-picons-lookup-user-internal user domains)
+      (gnus-picons-lookup-user-internal "unknown" domains)))
+
+(defun gnus-picons-lookup-pairs (domains directories)
+  "Lookup picons for DOMAINS and all its parents in DIRECTORIES.
+Returns a list of PAIRS whose CAR is the picon filename or NIL if
+none, and whose CDR is the corresponding element of DOMAINS."
+  (let (picons)
+    (while domains
+      (push (list (gnus-picons-lookup (cons "unknown" domains)
+				      (if (listp directories)
+					  directories
+					(list directories)))
+		  (pop domains))
+	    picons))
+    picons))
+
+(defun gnus-picons-display-picon-or-name (picon name &optional xface-p right-p)
+  (if picon
+      (gnus-picons-try-to-find-face picon xface-p name right-p)
+    (list (make-annotation name nil 'text nil nil nil right-p))))
+
+(defun gnus-picons-display-pairs (pairs &optional bar-p xface-p dot-p right-p)
+  "Display picons in list PAIRS."
+  (let ((bar (and bar-p (or gnus-picons-display-as-address
+			  (annotations-in-region (point)
+						 (min (point-max) (1+ (point)))
+						 (current-buffer)))))
+	(domain-p (and gnus-picons-display-as-address dot-p))
+	picons)
+    (while pairs
+      (let ((pair (pop pairs)))
+	(setq picons (nconc (if (and domain-p picons (not right-p))
+				(list (make-annotation
+				       dot-p nil 'text nil nil nil right-p)))
+			    (gnus-picons-display-picon-or-name (car pair)
+							       (cadr pair)
+							       xface-p
+							       right-p)
+			    (if (and domain-p pairs right-p)
+				(list (make-annotation
+				       dot-p nil 'text nil nil nil right-p)))
+			    (when (and bar domain-p)
+			      (setq bar nil)
+			      (gnus-picons-try-to-find-face
+			       (expand-file-name "bar.xbm"
+						 gnus-xmas-glyph-directory)
+			       nil nil t))
+			    picons))))
     picons))
 
 (defvar gnus-picons-glyph-alist nil)
 	     (set-extent-property txt 'keymap gnus-picons-map)
 	     (set-extent-property txt 'mouse-face gnus-article-mouse-face)
 	     (set-extent-property new 'its-partner txt)
-	     (set-extent-property new 'keymap gnus-picons-map))))))))
-
-(defun gnus-picons-reverse-domain-path (str)
-  "a/b/c/d -> d/c/b/a"
-  (mapconcat 'downcase (nreverse (message-tokenize-header str "/")) "/"))
+	     (set-extent-property new 'keymap gnus-picons-map)
+	     (list txt))))))))
 
 (defun gnus-picons-toggle-extent (event)
   "Toggle picon glyph at given point"

File lisp/gnus/gnus-score.el

-;;; gnus-score.el --- scoring code for Gnus
+1;;; gnus-score.el --- scoring code for Gnus
 ;; Copyright (C) 1995,96,97 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
 
 	  (gnus-score-kill-help-buffer)
 	  (unless (setq entry (assq (downcase hchar) char-to-header))
-	    (if mimic (error "%c %c" prefix hchar) (error "")))
+	    (if mimic (error "%c %c" prefix hchar)
+	      (error "Illegal header type")))
 
 	  (when (/= (downcase hchar) hchar)
 	    ;; This was a majuscule, so we end reading and set the defaults.
 	    (setq tchar (or tchar ?s)
 		  pchar (or pchar ?t)))
 
-	  ;; We continue reading - the type.
-	  (while (not tchar)
-	    (if mimic
-		(progn
-		  (sit-for 1) (message "%c %c-" prefix hchar))
-	      (message "%s header '%s' with match type (%s?): "
-		       (if increase "Increase" "Lower")
-		       (nth 1 entry)
-		       (mapconcat (lambda (s)
-				    (if (eq (nth 4 entry)
-					    (nth 3 s))
-					(char-to-string (car s))
-				      ""))
-				  char-to-type "")))
-	    (setq tchar (read-char))
-	    (when (or (= tchar ??) (= tchar ?\C-h))
-	      (setq tchar nil)
-	      (gnus-score-insert-help
-	       "Match type"
-	       (delq nil
-		     (mapcar (lambda (s)
-			       (if (eq (nth 4 entry)
-				       (nth 3 s))
-				   s nil))
-			     char-to-type))
-	       2)))
+	  (let ((legal-types
+		 (delq nil
+		       (mapcar (lambda (s)
+				 (if (eq (nth 4 entry)
+					 (nth 3 s))
+				     s nil))
+			       char-to-type))))
+	    ;; We continue reading - the type.
+	    (while (not tchar)
+	      (if mimic
+		  (progn
+		    (sit-for 1) (message "%c %c-" prefix hchar))
+		(message "%s header '%s' with match type (%s?): "
+			 (if increase "Increase" "Lower")
+			 (nth 1 entry)
+			 (mapconcat (lambda (s) (char-to-string (car s)))
+				    legal-types "")))
+	      (setq tchar (read-char))
+	      (when (or (= tchar ??) (= tchar ?\C-h))
+		(setq tchar nil)
+		(gnus-score-insert-help "Match type" legal-types 2)))
 
-	  (gnus-score-kill-help-buffer)
-	  (unless (setq type (nth 1 (assq (downcase tchar) char-to-type)))
-	    (if mimic (error "%c %c" prefix hchar) (error "")))
+	    (gnus-score-kill-help-buffer)
+	    (unless (setq type (nth 1 (assq (downcase tchar) legal-types)))
+	      (if mimic (error "%c %c" prefix hchar)
+		(error "Illegal match type"))))
 
 	  (when (/= (downcase tchar) tchar)
 	    ;; It was a majuscule, so we end reading and use the default.
 	      (error "You rang?"))
 	    (if mimic
 		(error "%c %c %c %c" prefix hchar tchar pchar)
-	      (error ""))))
+	      (error "Illegal match duration"))))
       ;; Always kill the score help buffer.
       (gnus-score-kill-help-buffer))
 
 	  (if (looking-at "not.")
 	      (progn
 		(setq not-match t)
-		(setq regexp (concat "^" (buffer-substring 5 (point-max)))))
-	    (setq regexp (concat "^" (buffer-substring 1 (point-max))))
+		(setq regexp (concat "^" (buffer-substring 5 (point-max)) "$")))
+	    (setq regexp (concat "^" (buffer-substring 1 (point-max)) "$"))
 	    (setq not-match nil))
 	  ;; Finally - if this resulting regexp matches the group name,
 	  ;; we add this score file to the list of score files

File lisp/gnus/gnus-sum.el

   (let* ((group gnus-newsgroup-name)
 	 (quit-config (gnus-group-quit-config gnus-newsgroup-name))
 	 (mode major-mode)
+         (group-point nil)
 	 (buf (current-buffer)))
     (run-hooks 'gnus-summary-prepare-exit-hook)
     ;; If we have several article buffers, we kill them at exit.
     (run-hooks 'gnus-summary-exit-hook)
     (unless quit-config
       (gnus-group-next-unread-group 1))
+    (setq group-point (point))
     (if temporary
 	nil				;Nothing to do.
       ;; If we have several article buffers, we kill them at exit.
       ;; Clear the current group name.
       (if (not quit-config)
 	  (progn
-	    (gnus-group-jump-to-group group)
-	    (gnus-group-next-unread-group 1)
+	    (goto-char group-point)
 	    (gnus-configure-windows 'group 'force))
 	(gnus-handle-ephemeral-exit quit-config))
       (unless quit-config
 			 (mail-header-number header)))))
       (if header
 	  (prog1
-	      ;; The article is present in the buffer, to we just go to it.
+              ;; The article is present in the buffer, so we just go to it.
 	      (gnus-summary-goto-article
-	       (mail-header-number header) nil header)
+               (mail-header-number header) nil t)
 	    (when sparse
 	      (gnus-summary-update-article (mail-header-number header))))
 	;; We fetch the article
 	(push (cons prev (cdr active)) read))
       (save-excursion
 	(set-buffer gnus-group-buffer)
+	(gnus-undo-force-boundary)
 	(gnus-undo-register
 	  `(progn
 	     (gnus-info-set-marks ',info ',(gnus-info-marks info) t)

File lisp/gnus/gnus-topic.el

   (when (and (eq major-mode 'gnus-group-mode)
 	     gnus-topic-mode)
     (let ((group (gnus-group-group-name))
+          (m (point-marker))
 	  (buffer-read-only nil))
       (when (and group
 		 (gnus-get-info group)
 		 (gnus-topic-goto-topic (gnus-current-topic)))
 	(gnus-topic-update-topic-line (gnus-group-topic-name))
-	(gnus-group-goto-group group)
+	(goto-char m)
+	(set-marker m nil)
 	(gnus-group-position-point)))))
 
 (defun gnus-topic-goto-missing-group (group)

File lisp/gnus/gnus-undo.el

    "\M-\C-_"     gnus-undo
    "\C-_"        gnus-undo
    "\C-xu"       gnus-undo
-   [(control /)] gnus-undo    ; many people are used to type `C-/' on
-			      ; X terminals and get `C-_'.
-   ))
+   ;; many people are used to type `C-/' on X terminals and get `C-_'.
+   [(control /)] gnus-undo))
 
 (defun gnus-undo-make-menu-bar ()
+  ;; This is disabled for the time being.
   (when nil
-  (define-key-after (current-local-map) [menu-bar file gnus-undo]
-    (cons "Undo" 'gnus-undo-actions)
-    [menu-bar file whatever])))
+    (define-key-after (current-local-map) [menu-bar file gnus-undo]
+      (cons "Undo" 'gnus-undo-actions)
+      [menu-bar file whatever])))
 
 (defun gnus-undo-mode (&optional arg)
   "Minor mode for providing `undo' in Gnus buffers.
 	    minor-mode-map-alist))
     (make-local-hook 'post-command-hook)
     (add-hook 'post-command-hook 'gnus-undo-boundary nil t)
-    (add-hook 'gnus-summary-exit-hook 'gnus-undo-boundary)
     (run-hooks 'gnus-undo-mode-hook)))
 
 ;;; Interface functions.
       (setq gnus-undo-boundary-inhibit nil)
     (setq gnus-undo-boundary t)))
 
+(defun gnus-undo-force-boundary ()
+  "Set Gnus undo boundary."
+  (setq gnus-undo-boundary-inhibit nil
+	gnus-undo-boundary t))
+
 (defun gnus-undo-register (form)
   "Register FORMS as something to be performed to undo a change.
 FORMS may use backtick quote syntax."

File lisp/gnus/gnus.el

   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "5.4.46"
+(defconst gnus-version-number "5.4.50"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)

File lisp/gnus/message.el

       (,(concat "^\\([Nn]ewsgroups:\\|Followup-[Tt]o:\\)" content)
        (1 'message-header-name-face)
        (2 'message-header-newsgroups-face nil t))
-      (,(concat "^\\([^: \n\t]+:\\)" content)
+      (,(concat "^\\([A-Z][^: \n\t]+:\\)" content)
        (1 'message-header-name-face)
        (2 'message-header-other-face nil t))
       (,(concat "^\\(X-[A-Za-z0-9-]+\\|In-Reply-To\\):" content)
     (run-hooks 'message-send-hook)
     (message "Sending...")
     (let ((alist message-send-method-alist)
+	  (success t)
 	  elem sent)
-      (while (setq elem (pop alist))
+      (while (and success
+		  (setq elem (pop alist)))
 	(when (and (or (not (funcall (cadr elem)))
 		       (and (or (not (memq (car elem)
 					   message-sent-message-via))
 				 (format
 				  "Already sent message via %s; resend? "
 				  (car elem))))
-			    (funcall (caddr elem) arg))))
+			    (setq success (funcall (caddr elem) arg)))))
 	  (setq sent t)))
-      (when sent
+      (when (and success sent)
 	(message-do-fcc)
 	;;(when (fboundp 'mail-hist-put-headers-into-history)
 	;; (mail-hist-put-headers-into-history))

File lisp/gnus/nnfolder.el

 	;; If we have to change groups, see if we don't already have the
 	;; folder in memory.  If we do, verify the modtime and destroy
 	;; the folder if needed so we can rescan it.
-	(when (setq inf (assoc group nnfolder-buffer-alist))
-	  (setq nnfolder-current-buffer (nth 1 inf)))
+	(setq nnfolder-current-buffer
+	      (nth 1 (assoc group nnfolder-buffer-alist)))
 
 	;; If the buffer is not live, make sure it isn't in the alist.  If it
 	;; is live, verify that nobody else has touched the file since last

File lisp/gnus/nnmail.el

     (when (and (file-exists-p nnmail-crash-box)
 	       (zerop (nnheader-file-size (file-truename nnmail-crash-box))))
       (delete-file nnmail-crash-box))
-    (let ((inbox (file-truename (expand-file-name inbox)))
-	  (tofile (file-truename (expand-file-name nnmail-crash-box)))
-	  movemail popmail errors result)
-      (if (setq popmail (string-match
-			 "^po:" (file-name-nondirectory inbox)))
-	  (setq inbox (file-name-nondirectory inbox))
+    (let ((tofile (file-truename (expand-file-name nnmail-crash-box)))
+	  (popmail (string-match "^po:" inbox))
+	  movemail errors result)
+      (unless popmail
+	(setq inbox (file-truename (expand-file-name inbox)))
 	(setq movemail t)
 	;; On some systems, /usr/spool/mail/foo is a directory
 	;; and the actual inbox is /usr/spool/mail/foo/foo.

File lisp/gnus/nntp.el

 (defvoo nntp-telnet-passwd nil
   "Password to use to log in via telnet with.")
 
+(defvoo nntp-telnet-command "telnet"
+  "Command used to start telnet.")
+
+(defvoo nntp-telnet-switches '("-8")
+  "Switches given to the telnet command.")
+
 (defvoo nntp-end-of-line "\r\n"
   "String to use on the end of lines when talking to the NNTP server.
 This is \"\\r\\n\" by default, but should be \"\\n\" when
   (save-excursion
     (set-buffer buffer)
     (erase-buffer)
-    (let ((proc (start-process
-		 "nntpd" buffer "telnet" "-8"))
+    (let ((proc (apply
+		 'start-process
+		 "nntpd" buffer nntp-telnet-command nntp-telnet-switches))
 	  (case-fold-search t))
       (when (memq (process-status proc) '(open run))
 	(process-send-string proc "set escape \^X\n")

File lisp/gnus/nnweb.el

 	  (save-excursion
 	    (set-buffer nnweb-buffer)
 	    (erase-buffer)
-	    (prog1
-		(url-insert-file-contents url)
-	      (copy-to-buffer buf (point-min) (point-max)))))
+	    (url-insert-file-contents url)
+	    (copy-to-buffer buf (point-min) (point-max))
+	    t))
       (nnweb-url-retrieve-asynch
        url 'nnweb-callback (current-buffer) nnheader-callback-function)
       t)))
       (set-marker body nil))))
 
 (defun nnweb-reference-search (search)
-  (prog1
-      (url-insert-file-contents
-       (concat
-	(nnweb-definition 'address)
-	"?"
-	(nnweb-encode-www-form-urlencoded
-	 `(("search" . "advanced")
-	   ("querytext" . ,search)
-	   ("subj" . "")
-	   ("name" . "")
-	   ("login" . "")
-	   ("host" . "")
-	   ("organization" . "")
-	   ("groups" . "")
-	   ("keywords" . "")
-	   ("choice" . "Search")
-	   ("startmonth" . "Jul")
-	   ("startday" . "25")
-	   ("startyear" . "1996")
-	   ("endmonth" . "Aug")
-	   ("endday" . "24")
-	   ("endyear" . "1996")
-	   ("mode" . "Quick")
-	   ("verbosity" . "Verbose")
-	   ("ranking" . "Relevance")
-	   ("first" . "1")
-	   ("last" . "25")
-	   ("score" . "50")))))
-    (setq buffer-file-name nil))
+  (url-insert-file-contents
+   (concat
+    (nnweb-definition 'address)
+    "?"
+    (nnweb-encode-www-form-urlencoded
+     `(("search" . "advanced")
+       ("querytext" . ,search)
+       ("subj" . "")
+       ("name" . "")
+       ("login" . "")
+       ("host" . "")
+       ("organization" . "")
+       ("groups" . "")
+       ("keywords" . "")
+       ("choice" . "Search")
+       ("startmonth" . "Jul")
+       ("startday" . "25")
+       ("startyear" . "1996")
+       ("endmonth" . "Aug")
+       ("endday" . "24")
+       ("endyear" . "1996")
+       ("mode" . "Quick")
+       ("verbosity" . "Verbose")
+       ("ranking" . "Relevance")
+       ("first" . "1")
+       ("last" . "25")
+       ("score" . "50")))))
+  (setq buffer-file-name nil)
   t)
 
 ;;;
     (nnweb-remove-markup)))
 
 (defun nnweb-altavista-search (search &optional part)
-  (prog1
-      (url-insert-file-contents
-       (concat
-	(nnweb-definition 'address)
-	"?"
-	(nnweb-encode-www-form-urlencoded
-	 `(("pg" . "aq")
-	   ("what" . "news")
-	   ,@(when part `(("stq" . ,(int-to-string (* part 30)))))
-	   ("fmt" . "d")
-	   ("q" . ,search)
-	   ("r" . "")
-	   ("d0" . "")
-	   ("d1" . "")))))
-    (setq buffer-file-name nil)))
+  (url-insert-file-contents
+   (concat
+    (nnweb-definition 'address)
+    "?"
+    (nnweb-encode-www-form-urlencoded
+     `(("pg" . "aq")
+       ("what" . "news")
+       ,@(when part `(("stq" . ,(int-to-string (* part 30)))))
+       ("fmt" . "d")
+       ("q" . ,search)
+       ("r" . "")
+       ("d0" . "")
+       ("d1" . "")))))
+  (setq buffer-file-name nil)
+  t)
 
 (provide 'nnweb)
 

File lisp/mule/isearch-mule.el

 ;; #### This is far from working in XEmacs.
 
 (eval-when-compile (require 'quail))
+(eval-when-compile (require 'egg))
 
 
 ;;;###autoload
 (define-key isearch-mode-map "\C-\\" 'isearch-fep-egg)
 (define-key isearch-mode-map "\M-k"  'isearch-fep-egg)
 (define-key isearch-mode-map "\C-o"  'isearch-fep-canna)
-;;  (define-key isearch-mode-map "\C-\]" 'isearch-fep-quail)
+;(define-key isearch-mode-map "\C-\]" 'isearch-fep-quail)
+
+(put 'isearch-fep-string	'isearch-command t)
+(put 'isearch-fep-egg		'isearch-command t)
+(put 'isearch-fep-canna		'isearch-command t)
+(put 'isearch-fep-prompt-string	'isearch-command t)
+(put 'isearch-fep-prompt-egg	'isearch-command t)
+(put 'isearch-fep-prompt-canna	'isearch-comnand t)
+(put 'isearch-fep-read-string	'isearch-command t)
+(put 'isearch-fep-read-egg	'isearch-command t)
+(put 'isearch-fep-read-canna	'isearch-command t)
+;(put 'isearch-fep-quail		'isearch-command t)
 
 (defun isearch-fep-mode ()
   (let ((command this-command)
 		       (message "%s%s"
 				(isearch-message-prefix) isearch-message))
 		      (t
+		       (ding)
 		       (call-interactively current-command))))
 	    (setq isearch-fep-prompt nil)
 	    (message "%s%s" (isearch-message-prefix) isearch-message)))))))
 
 (defun isearch-fep-prompt-egg ()
   (if (featurep 'egg)
-      (format "[%s]" (map-indicator its:*current-map*))
+      (format "[%s]->" (map-indicator its:*current-map*))
     (setq isearch-fep-mode nil)
     (message "No EGG!! ")
     (sit-for 1)
 		(egg:*input-mode* t)
 		(egg:*mode-on* t)
 		(self-insert-after-hook 'isearch-exit-minibuffer-egg))
-	    (setq unread-command-events (listify-key-sequence first-str))
+	    (setq unread-command-events (mil-listify-key-sequence first-str))
 	    (unwind-protect
 		(read-from-minibuffer (isearch-message))
 	      (setq egg:henkan-mode-in-use nil)
-	      (setq disable-undo nil)))))
+	      ;;(setq disable-undo nil)
+	      ))))
     ""))
 
 
 	      (canna:*japanese-mode-in-minibuffer* t)
 	      (canna:*fence-mode* nil)
 	      (self-insert-after-hook 'isearch-exit-minibuffer-canna))
-	  (setq unread-command-events (listify-key-sequence first-str))
+	  (setq unread-command-events (mil-listify-key-sequence first-str))
 	  (unwind-protect
 	      (read-from-minibuffer (isearch-message))
 	    ;XEmacs change:
     (setq unread-command-events
 	  (nconc unread-command-events
 		 (cons (character-to-event ?\\)
-		       (listify-key-sequence first-str)))
+		       (mil-listify-key-sequence first-str)))
     (unwind-protect
 	(read-from-minibuffer
 	 (concat isearch-fep-prompt (isearch-message)))

File lisp/mule/mule-files.el

   'buffer-file-coding-system-for-read)
 
 (defvar buffer-file-coding-system-alist
-  '(("\\.\\(el\\|emacs\\|info\\|texi\\)$" . iso-2022-8)
+  '(("\\.\\(el\\|emacs\\|info\\(-[0-9]+\\)?\\|texi\\)$" . iso-2022-8)
     ("\\(ChangeLog\\|CHANGES-beta\\)$" . iso-2022-8)
     ("\\.\\(gz\\|Z\\)$" . no-conversion)
     ("/spool/mail/.*$" . convert-mbox-coding-system))

File lisp/mule/mule-misc.el

     (if (not (null func))
 	(funcall func)))
   (setq current-language-environment env)
-  (if (fboundp 'egg)
+  (if (featurep 'egg)
       (egg-lang-switch-callback))
-;;  (if (fboundp 'quail)
+;;  (if (featurep 'quail)
 ;;      (quail-lang-switch-callback))
 )
 

File lisp/prim/about.el

   (view-mode nil 'kill-buffer)		;; assume the new view-less
   (let* ((buffer-read-only nil)
          (emacs-short-version (concat emacs-major-version "." emacs-minor-version))
-         (emacs-about-version (format "version %s; April 1997" emacs-short-version))
+         (emacs-about-version (format "version %s; May 1997" emacs-short-version))
 	 (indent-tabs-mode t)
 	 )
     (erase-buffer)