*** pub/dgnus/lisp/custom.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/custom.el	Fri Aug 25 00:55:17 1995
***************
*** 3,9 ****
  ;;
  ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
  ;; Keywords: help
! ;; Version: 0.4
  
  ;;; Commentary:
  ;;
--- 3,9 ----
  ;;
  ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
  ;; Keywords: help
! ;; Version: 0.5
  
  ;;; Commentary:
  ;;
***************
*** 41,46 ****
--- 41,47 ----
  ;; - Implement remaining types.
  ;; - XEmacs port.
  ;; - Allow `URL', `info', and internal hypertext buttons.
+ ;; - Support meta-variables and goal directed customization.
  
  ;;; Code:
  
***************
*** 123,138 ****
  	   (and (symbolp x) (assq x global-face-data)))
         t)))
        
  (eval-when-compile
    (defvar x-colors nil)
    (defvar custom-button-face nil)
-   (defvar custom-modified-list nil)
    (defvar custom-field-uninitialized-face nil)
    (defvar custom-field-invalid-face nil)
    (defvar custom-field-modified-face nil)
    (defvar custom-field-face nil)
-   (defvar custom-button-properties nil)
-   (defvar custom-documentation-properties nil)
    (defvar custom-mouse-face nil)
    (defvar custom-field-active-face nil))
  
--- 124,166 ----
  	   (and (symbolp x) (assq x global-face-data)))
         t)))
        
+ (if (facep 'underline)
+     ()
+   ;; No underline face in XEmacs 19.12.
+   (funcall (intern "make-face") 'underline)
+   ;; Must avoid calling set-face-underline-p directly, because it
+   ;; is a defsubst in emacs19, and will make the .elc files non
+   ;; portable!
+   (or (face-differs-from-default-p 'underline)
+       (funcall 'set-face-underline-p 'underline t)))
+ 
+ (or (fboundp 'set-text-properties)
+     ;; Missing in XEmacs 19.12.
+     (defun set-text-properties (start end props &optional buffer)
+       (if (or (null buffer) (bufferp buffer))
+ 	  (if props
+ 	      (while props
+ 		(put-text-property 
+ 		 start end (car props) (nth 1 props) buffer)
+ 		(setq props (nthcdr 2 props)))
+ 	    (remove-text-properties start end ())))))
+ 
+ (or (fboundp 'event-closest-point)
+     ;; Missing in Emacs 19.29.
+     (defun event-point (event)
+       "Return the character position of the given mouse-motion, button-press,
+ or button-release event.  If the event did not occur over a window, or did
+ not occur over text, then this returns nil.  Otherwise, it returns an index
+ into the buffer visible in the event's window."
+       (posn-point (event-start event))))
+ 
  (eval-when-compile
    (defvar x-colors nil)
    (defvar custom-button-face nil)
    (defvar custom-field-uninitialized-face nil)
    (defvar custom-field-invalid-face nil)
    (defvar custom-field-modified-face nil)
    (defvar custom-field-face nil)
    (defvar custom-mouse-face nil)
    (defvar custom-field-active-face nil))
  
***************
*** 190,206 ****
    (set-face-underline-p face underline-p)
    (and (interactive-p) (redraw-display))))
  
- 
  ;; We can't easily check for a working intangible.
! (defvar intangible nil
    "The symbol making text intangible")
  
! (if (and (boundp 'emacs-minor-version)
! 	 (or (> emacs-major-version 19)
! 	     (and (> emacs-major-version 18)
! 		  (> emacs-minor-version 28))))
!     (setq intangible 'intangible)
!   (setq intangible 'intangible-if-it-had-been-working))
  
  ;; Put it in the Help menu, if possible.
  (condition-case nil
--- 218,246 ----
    (set-face-underline-p face underline-p)
    (and (interactive-p) (redraw-display))))
  
  ;; We can't easily check for a working intangible.
! (defconst intangible (if (and (boundp 'emacs-minor-version)
! 			      (or (> emacs-major-version 19)
! 				  (and (> emacs-major-version 18)
! 				       (> emacs-minor-version 28))))
! 			 (setq intangible 'intangible)
! 		       (setq intangible 'intangible-if-it-had-been-working))
    "The symbol making text intangible")
  
! (defconst rear-nonsticky (if (string-match "XEmacs" emacs-version)
! 			     'end-open
! 			   'rear-nonsticky)
!   "The symbol making text proeprties non-sticky in the rear end.")
! 
! (defconst front-sticky (if (string-match "XEmacs" emacs-version)
! 			   'front-closed
! 			 'front-sticky)
!   "The symbol making text properties sticky in the front.")
! 
! (defconst mouse-face (if (string-match "XEmacs" emacs-version)
! 			 'highlight
! 		       'mouse-face)
!   "Symbol used for highlighting text under mouse.")
  
  ;; Put it in the Help menu, if possible.
  (condition-case nil
***************
*** 209,214 ****
--- 249,296 ----
  		    '("Customize..." . customize))
    (error nil))
  
+ ;;; Categories:
+ ;;
+ ;; XEmacs use inheritable extents for the same purpose as Emacs uses
+ ;; the category text property.
+ 
+ (if (string-match "XEmacs" emacs-version)
+     (progn 
+       ;; XEmacs categories.
+       (defun custom-category-create (name)
+ 	(set name (make-extent nil nil))
+ 	"Create a text property category named NAME.")
+ 
+       (defun custom-category-put (name property value)
+ 	"In CATEGORY set PROPERTY to VALUE."
+ 	(set-extent-property (symbol-value name) property value))
+       
+       (defun custom-category-get (name property)
+ 	"In CATEGORY get PROPERTY."
+ 	(extent-property (symbol-value name) property))
+       
+       (defun custom-category-set (from to category)
+ 	"Make text between FROM and TWO have category CATEGORY."
+ 	(let ((extent (make-extent from to)))
+ 	  (set-extent-parent extent (symbol-value category)))))
+       
+   ;; Emacs categories.
+   (defun custom-category-create (name)
+     "Create a text property category named NAME."
+     (set name name))
+ 
+   (defun custom-category-put (name property value)
+     "In CATEGORY set PROPERTY to VALUE."
+     (put name property value))
+ 
+   (defun custom-category-get (name property)
+     "In CATEGORY get PROPERTY."
+     (get name property))
+ 
+   (defun custom-category-set (from to category)
+     "Make text between FROM and TWO have category CATEGORY."
+     (put-text-property from to 'category category)))
+ 
  ;;; External Data:
  ;; 
  ;; The following functions and variables defines the interface for
***************
*** 252,257 ****
--- 334,342 ----
      (funcall (custom-property custom 'export) custom
  	     (car (custom-field-extract custom field)))))
  
+ (defvar custom-save 'custom-save
+   "Function that will save current customization buffer.")
+ 
  ;;; Custom Functions:
  ;;
  ;; The following functions are part of the public interface to the
***************
*** 705,710 ****
--- 790,803 ----
  ;;
  ;; Each FIELD can be seen as an instanciation of a CUSTOM.
  
+ (defvar custom-field-last nil)
+ ;; Last field containing point.
+ (make-variable-buffer-local 'custom-field-last)
+ 
+ (defvar custom-modified-list nil)
+ ;; List of modified fields.
+ (make-variable-buffer-local 'custom-modified-list)
+ 
  (defun custom-field-create (custom value)
    "Create a field structure of type CUSTOM containing VALUE.
  
***************
*** 840,846 ****
    "Insert field for CUSTOM at nesting LEVEL in customization buffer."
    (let* ((field (custom-field-create custom nil))
  	 (add-tag (custom-property custom 'add-tag))
- 	 (del-tag (custom-property custom 'del-tag))
  	 (start (make-marker))
  	 (data (vector field nil start nil)))
      (custom-text-insert "\n")
--- 933,938 ----
***************
*** 1137,1144 ****
  (defun custom-choice-insert (custom level)
    "Insert field for CUSTOM at nesting LEVEL in customization buffer."
    (let* ((field (custom-field-create custom nil))
! 	 (from (point))
! 	 (tag (custom-tag custom)))
      (custom-text-insert "lars er en nisse")
      (custom-field-move field from (point))
      (custom-documentation-insert custom)
--- 1229,1235 ----
  (defun custom-choice-insert (custom level)
    "Insert field for CUSTOM at nesting LEVEL in customization buffer."
    (let* ((field (custom-field-create custom nil))
! 	 (from (point)))
      (custom-text-insert "lars er en nisse")
      (custom-field-move field from (point))
      (custom-documentation-insert custom)
***************
*** 1167,1175 ****
      (setq from (point))
      (insert-before-markers " ")
      (backward-char 1)
!     (set-text-properties (point) (1+ (point)) 
! 			 (list 'invisible t 
! 			       intangible t))
      (custom-tag-insert (custom-tag custom) field)
      (custom-text-insert ": ")
      (let ((data (custom-data custom))
--- 1258,1264 ----
      (setq from (point))
      (insert-before-markers " ")
      (backward-char 1)
!     (custom-category-set (point) (1+ (point)) 'custom-hidden-properties)
      (custom-tag-insert (custom-tag custom) field)
      (custom-text-insert ": ")
      (let ((data (custom-data custom))
***************
*** 1184,1190 ****
  	(setq begin (point)
  	      found (custom-insert (custom-property custom 'none) nil))
  	(add-text-properties begin (point)
! 			     (list 'rear-nonsticky t
  				   'face custom-field-uninitialized-face)))
        (or original
  	  (custom-field-original-set found (custom-field-original field)))
--- 1273,1279 ----
  	(setq begin (point)
  	      found (custom-insert (custom-property custom 'none) nil))
  	(add-text-properties begin (point)
! 			     (list rear-nonsticky t
  				   'face custom-field-uninitialized-face)))
        (or original
  	  (custom-field-original-set found (custom-field-original field)))
***************
*** 1294,1300 ****
  
  (defun custom-face-hack (field value)
    "Face that should be used for highlighting FIELD containing VALUE."
!   (eval (funcall (custom-property (custom-field-custom field) 'export) custom value)))
  
  (defun custom-const-insert (custom level)
    "Insert field for CUSTOM at nesting LEVEL in customization buffer."
--- 1383,1390 ----
  
  (defun custom-face-hack (field value)
    "Face that should be used for highlighting FIELD containing VALUE."
!   (let ((custom (custom-field-custom field)))
!     (eval (funcall (custom-property custom 'export) custom value))))
  
  (defun custom-const-insert (custom level)
    "Insert field for CUSTOM at nesting LEVEL in customization buffer."
***************
*** 1304,1310 ****
      (custom-text-insert (custom-tag custom))
      (add-text-properties from (point) 
  			 (list 'face face
! 			       'rear-nonsticky t))
      (custom-documentation-insert custom)
      (custom-field-move field from (point))
      field))
--- 1394,1400 ----
      (custom-text-insert (custom-tag custom))
      (add-text-properties from (point) 
  			 (list 'face face
! 			       rear-nonsticky t))
      (custom-documentation-insert custom)
      (custom-field-move field from (point))
      field))
***************
*** 1600,1608 ****
    "Insert TAG for FIELD in current buffer."
    (let ((from (point)))
      (insert tag)
!     (set-text-properties from (point) 
! 			 (list 'category custom-button-properties
! 			       'custom-tag field))
      (if data
  	(add-text-properties from (point) (list 'custom-data data)))))
  
--- 1690,1697 ----
    "Insert TAG for FIELD in current buffer."
    (let ((from (point)))
      (insert tag)
!     (custom-category-set from (point) 'custom-button-properties)
!     (put-text-property from (point) 'custom-tag field)
      (if data
  	(add-text-properties from (point) (list 'custom-data data)))))
  
***************
*** 1617,1634 ****
    "Insert ARGS as documentation text."
    (let ((from (point)))
      (apply 'insert args)
!     (set-text-properties from (point) 
! 			 (list 'category custom-documentation-properties))))
  
  (defun custom-help-button (command)
    "Describe how to execute COMMAND."
    (let ((from (point)))
      (insert "`" (key-description (where-is-internal command nil t)) "'")
      (set-text-properties from (point)
! 			 (list 'category custom-documentation-properties
! 			       'face custom-button-face
! 			       'mouse-face custom-mouse-face
! 			       'custom-tag command)))
    (custom-help-insert ": " (custom-first-line (documentation command)) "\n"))
  
  ;;; Mode:
--- 1706,1722 ----
    "Insert ARGS as documentation text."
    (let ((from (point)))
      (apply 'insert args)
!     (custom-category-set from (point) 'custom-documentation-properties)))
  
  (defun custom-help-button (command)
    "Describe how to execute COMMAND."
    (let ((from (point)))
      (insert "`" (key-description (where-is-internal command nil t)) "'")
      (set-text-properties from (point)
! 			 (list 'face custom-button-face
! 			       mouse-face custom-mouse-face
! 			       'custom-tag command))
!     (custom-category-set from (point) 'custom-documentation-properties))
    (custom-help-insert ": " (custom-first-line (documentation command)) "\n"))
  
  ;;; Mode:
***************
*** 1717,1726 ****
  If the optional argument is non-nil, show text iff the argument is positive."
    (interactive "P")
    (let ((hide (or (and (null arg) 
! 		       (null (get custom-documentation-properties 'invisible)))
  		  (<= (prefix-numeric-value arg) 0))))
!     (put custom-documentation-properties 'invisible hide)
!     (put custom-documentation-properties intangible hide))
    (redraw-display))
  
  (defun custom-enter-value (field data)
--- 1805,1815 ----
  If the optional argument is non-nil, show text iff the argument is positive."
    (interactive "P")
    (let ((hide (or (and (null arg) 
! 		       (null (custom-category-get 
! 			      'custom-documentation-properties 'invisible)))
  		  (<= (prefix-numeric-value arg) 0))))
!     (custom-category-put 'custom-documentation-properties 'invisible hide)
!     (custom-category-put 'custom-documentation-properties intangible hide))
    (redraw-display))
  
  (defun custom-enter-value (field data)
***************
*** 1750,1758 ****
  
  (defun custom-push-button (event)
    "Activate button below mouse pointer."
!   (interactive "e")
!   (set-buffer (window-buffer (posn-window (event-start event))))
!   (let* ((pos (posn-point (event-start event)))
           (field (get-text-property pos 'custom-field))
           (tag (get-text-property pos 'custom-tag))
  	 (data (get-text-property pos 'custom-data)))
--- 1839,1846 ----
  
  (defun custom-push-button (event)
    "Activate button below mouse pointer."
!   (interactive "@e")
!   (let* ((pos (event-point event))
           (field (get-text-property pos 'custom-field))
           (tag (get-text-property pos 'custom-tag))
  	 (data (get-text-property pos 'custom-data)))
***************
*** 1773,1782 ****
  		    (not (y-or-n-p "Discard all changes? "))
  		    (error "Reset aborted")))
    (let ((all custom-name-fields)
! 	current name field)
      (while all
        (setq current (car all)
- 	    name (car current)
  	    field (cdr current)
  	    all (cdr all))
        (custom-field-reset field))))
--- 1861,1869 ----
  		    (not (y-or-n-p "Discard all changes? "))
  		    (error "Reset aborted")))
    (let ((all custom-name-fields)
! 	current field)
      (while all
        (setq current (car all)
  	    field (cdr current)
  	    all (cdr all))
        (custom-field-reset field))))
***************
*** 1825,1831 ****
  		 (error "No changes to apply.")))
    (custom-field-parse custom-field-last)
    (let ((all custom-name-fields)
! 	name field)
      (while all
        (setq field (cdr (car all))
  	    all (cdr all))
--- 1912,1918 ----
  		 (error "No changes to apply.")))
    (custom-field-parse custom-field-last)
    (let ((all custom-name-fields)
! 	field)
      (while all
        (setq field (cdr (car all))
  	    all (cdr all))
***************
*** 1835,1841 ****
  	  (goto-char (car error))
  	  (error (cdr error))))))
    (let ((all custom-name-fields)
! 	current name field)
      (while all
        (setq field (cdr (car all))
  	    all (cdr all))
--- 1922,1928 ----
  	  (goto-char (car error))
  	  (error (cdr error))))))
    (let ((all custom-name-fields)
! 	field)
      (while all
        (setq field (cdr (car all))
  	    all (cdr all))
***************
*** 1858,1866 ****
    (interactive)
    (error "This button is not yet implemented"))
  
- (defvar custom-save 'custom-save
-   "Function that will save current customization buffer.")
- 
  (defun custom-save-and-exit ()
    "Save and exit customization buffer."
    (interactive "@")
--- 1945,1950 ----
***************
*** 1930,1939 ****
  ;; Various internal functions for implementing the direct editing of
  ;; fields in the customization buffer.
  
- (defvar custom-modified-list nil)
- ;; List of modified fields.
- (make-variable-buffer-local 'custom-modified-list)
- 
  (defun custom-field-untouch (field)
    ;; Remove FIELD and its children from `custom-modified-list'.
    (setq custom-modified-list (delq field custom-modified-list))
--- 2014,2019 ----
***************
*** 1959,1966 ****
       from (point)
       (list 'custom-field field
  	   'custom-tag field
! 	   'face (custom-field-face field)
! 	   'front-sticky t))))
  
  (defun custom-field-read (field)
    ;; Read the screen content of FIELD.
--- 2039,2047 ----
       from (point)
       (list 'custom-field field
  	   'custom-tag field
! 	   'face (let ((face (custom-field-face field)))
! 		   (if (facep face) face nil))
! 	   front-sticky t))))
  
  (defun custom-field-read (field)
    ;; Read the screen content of FIELD.
***************
*** 2003,2010 ****
  	 (size (- end begin)))
      (cond ((< size width)
  	   (goto-char end)
! 	   (insert-before-markers-and-inherit
! 	    (make-string (- width size) padding))
  	   (goto-char pos))
  	  ((> size width)
  	   (let ((start (if (and (< (+ begin width) pos) (<= pos end))
--- 2084,2094 ----
  	 (size (- end begin)))
      (cond ((< size width)
  	   (goto-char end)
! 	   (condition-case nil
! 	       (insert-before-markers-and-inherit
! 		(make-string (- width size) padding))
! 	     (error (insert-before-markers
! 		     (make-string (- width size) padding))))
  	   (goto-char pos))
  	  ((> size width)
  	   (let ((start (if (and (< (+ begin width) pos) (<= pos end))
***************
*** 2027,2036 ****
  	(custom-field-value-set field (custom-field-read field))
  	(custom-field-update field))))
  
- (defvar custom-field-last nil)
- ;; Last field containing point.
- (make-variable-buffer-local 'custom-field-last)
- 
  (defun custom-post-command ()
    ;; Keep track of their active field.
    (custom-assert '(eq major-mode 'custom-mode))
--- 2111,2116 ----
***************
*** 2172,2179 ****
  	   (doc . "Face used for tags in customization buffers.")
  	   (name . custom-button-face)
  	   (synchronize . (lambda (f)
! 			    (put custom-button-properties 
! 				 'face custom-button-face)))
  	   (type . face))
  	  ((tag . "Mouse Face")
  	   (default . highlight)
--- 2252,2259 ----
  	   (doc . "Face used for tags in customization buffers.")
  	   (name . custom-button-face)
  	   (synchronize . (lambda (f)
! 			    (custom-category-put 'custom-button-properties 
! 						 'face custom-button-face)))
  	   (type . face))
  	  ((tag . "Mouse Face")
  	   (default . highlight)
***************
*** 2181,2188 ****
  Face used when mouse is above a button in customization buffers.")
  	   (name . custom-mouse-face)
  	   (synchronize . (lambda (f)
! 			    (put custom-button-properties 
! 				 'mouse-face custom-mouse-face)))
  	   (type . face))
  	  ((tag . "Field Face")
  	   (default . italic)
--- 2261,2269 ----
  Face used when mouse is above a button in customization buffers.")
  	   (name . custom-mouse-face)
  	   (synchronize . (lambda (f)
! 			    (custom-category-put 'custom-button-properties 
! 						 mouse-face 
! 						 custom-mouse-face)))
  	   (type . face))
  	  ((tag . "Field Face")
  	   (default . italic)
***************
*** 2212,2229 ****
  	   (name . custom-field-active-face)
  	   (type . face)))))
  
  (if (file-readable-p custom-file)
      (load-file custom-file))
- 
- (defvar custom-documentation-properties 'custom-documentation-properties
-   "The properties of this symbol will be in effect for all documentation.")
- (put custom-documentation-properties 'rear-nonsticky t)
- 
- (defvar custom-button-properties 'custom-button-properties 
-   "The properties of this symbol will be in effect for all buttons.")
- (put custom-button-properties 'face custom-button-face)
- (put custom-button-properties 'mouse-face custom-mouse-face)
- (put custom-button-properties 'rear-nonsticky t)
  
  (provide 'custom)
  
--- 2293,2315 ----
  	   (name . custom-field-active-face)
  	   (type . face)))))
  
+ ;; custom.el uses two categories.
+ 
+ (custom-category-create 'custom-documentation-properties)
+ (custom-category-put 'custom-documentation-properties rear-nonsticky t)
+ 
+ (custom-category-create 'custom-button-properties)
+ (custom-category-put 'custom-button-properties 'face custom-button-face)
+ (custom-category-put 'custom-button-properties mouse-face custom-mouse-face)
+ (custom-category-put 'custom-button-properties rear-nonsticky t)
+ 
+ (custom-category-create 'custom-hidden-properties)
+ (custom-category-put 'custom-hidden-properties 'invisible
+ 		     (not (string-match "XEmacs" emacs-version)))
+ (custom-category-put 'custom-hidden-properties intangible t)
+ 
  (if (file-readable-p custom-file)
      (load-file custom-file))
  
  (provide 'custom)
  
*** pub/dgnus/lisp/gnus-cite.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/gnus-cite.el	Fri Aug 25 00:55:59 1995
***************
*** 54,72 ****
  (defvar gnus-cite-minimum-match-count 2
    "Minimal number of identical prefix'es before we believe it is a citation.")
  
! (defvar gnus-cite-face-list 
!   (if (eq gnus-display-type 'color)
!       (if (eq gnus-background-mode 'dark) 'light 'dark)
!     '(italic))
!   "Faces used for displaying different citations.
! It is either a list of face names, or one of the following special
! values:
  
! dark: Create faces from `gnus-face-dark-name-list'.
! light: Create faces from `gnus-face-light-name-list'.
  
! The variable `gnus-make-foreground' determines whether the created
! faces change the foreground or the background colors.")
  
  (defvar gnus-cite-attribution-prefix "in article\\|in <"
    "Regexp matching the beginning of an attribution line.")
--- 54,73 ----
  (defvar gnus-cite-minimum-match-count 2
    "Minimal number of identical prefix'es before we believe it is a citation.")
  
! ;see gnus-cus.el
! ;(defvar gnus-cite-face-list 
! ;  (if (eq gnus-display-type 'color)
! ;      (if (eq gnus-background-mode 'dark) 'light 'dark)
! ;    '(italic))
! ;  "Faces used for displaying different citations.
! ;It is either a list of face names, or one of the following special
! ;values:
  
! ;dark: Create faces from `gnus-face-dark-name-list'.
! ;light: Create faces from `gnus-face-light-name-list'.
  
! ;The variable `gnus-make-foreground' determines whether the created
! ;faces change the foreground or the background colors.")
  
  (defvar gnus-cite-attribution-prefix "in article\\|in <"
    "Regexp matching the beginning of an attribution line.")
***************
*** 76,107 ****
    "Regexp matching the end of an attribution line.
  The text matching the first grouping will be used as a button.")
  
! (defvar gnus-cite-attribution-face 'underline
!   "Face used for attribution lines.
! It is merged with the face for the cited text belonging to the attribution.")
! 
! (defvar gnus-cite-hide-percentage 50
!   "Only hide cited text if it is larger than this percent of the body.")
! 
! (defvar gnus-cite-hide-absolute 10
!   "Only hide cited text if there is at least this number of cited lines.")
! 
! (defvar gnus-face-light-name-list
!   '("light blue" "light cyan" "light yellow" "light pink"
!     "pale green" "beige" "orange" "magenta" "violet" "medium purple"
!     "turquoise")
!   "Names of light colors.")
! 
! (defvar gnus-face-dark-name-list
!   '("dark salmon" "firebrick"
!     "dark green" "dark orange" "dark khaki" "dark violet"
!     "dark turquoise")
!   "Names of dark colors.")
  
  ;;; Internal Variables:
  
  (defvar gnus-article-length nil)
  ;; Length of article last time we parsed it.
  
  (defvar gnus-cite-prefix-alist nil)
  ;; Alist of citation prefixes.  
--- 77,114 ----
    "Regexp matching the end of an attribution line.
  The text matching the first grouping will be used as a button.")
  
! ;see gnus-cus.el
! ;(defvar gnus-cite-attribution-face 'underline
! ;  "Face used for attribution lines.
! ;It is merged with the face for the cited text belonging to the attribution.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-cite-hide-percentage 50
! ;  "Only hide cited text if it is larger than this percent of the body.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-cite-hide-absolute 10
! ;  "Only hide cited text if there is at least this number of cited lines.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-face-light-name-list
! ;  '("light blue" "light cyan" "light yellow" "light pink"
! ;    "pale green" "beige" "orange" "magenta" "violet" "medium purple"
! ;    "turquoise")
! ;  "Names of light colors.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-face-dark-name-list
! ;  '("dark salmon" "firebrick"
! ;    "dark green" "dark orange" "dark khaki" "dark violet"
! ;    "dark turquoise")
! ;  "Names of dark colors.")
  
  ;;; Internal Variables:
  
  (defvar gnus-article-length nil)
  ;; Length of article last time we parsed it.
+ ;; BUG! KLUDGE! UGLY! FIX ME!
  
  (defvar gnus-cite-prefix-alist nil)
  ;; Alist of citation prefixes.  
*** pub/dgnus/lisp/gnus-msg.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/gnus-msg.el	Fri Aug 25 00:55:19 1995
***************
*** 460,469 ****
  	  (setq gnus-article-reply sumart)
  	  ;; Handle `gnus-auto-mail-to-author'.
  	  ;; Suggested by Daniel Quinlan <quinlan@best.com>.
! 	  (let ((to (and (not post)
! 			 (if (eq gnus-auto-mail-to-author 'ask)
! 			     (and (y-or-n-p "Also send mail to author? ") from)
! 			   (and gnus-auto-mail-to-author from)))))
  	    (if to
  		(progn
  		  (if (mail-fetch-field "To")
--- 460,474 ----
  	  (setq gnus-article-reply sumart)
  	  ;; Handle `gnus-auto-mail-to-author'.
  	  ;; Suggested by Daniel Quinlan <quinlan@best.com>.
! 	  ;; Revised to respect Reply-To by Ulrik Dickow <dickow@nbi.dk>.
!           (let ((to (and (not post)
! 			 (if (or (and (eq gnus-auto-mail-to-author 'ask)
! 				      (y-or-n-p "Also send mail to author? "))
! 				 gnus-auto-mail-to-author)
! 			     (or (save-excursion
! 				   (set-buffer gnus-article-copy)
! 				   (gnus-fetch-field "reply-to"))
! 				 from)))))
  	    (if to
  		(progn
  		  (if (mail-fetch-field "To")
*** pub/dgnus/lisp/gnus-vis.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/gnus-vis.el	Fri Aug 25 03:39:21 1995
***************
*** 26,192 ****
  ;;; Code:
  
  (require 'gnus)
  (require gnus-easymenu)
  (require 'custom)
- (require 'gnus-ems)
    
  ;;; Summary highlights.
  
! (defvar gnus-summary-highlight-properties
!   '((unread "ForestGreen" "green")
!     (ticked "Firebrick" "pink")
!     (read "black" "white")
!     (low italic italic)
!     (high bold bold)
!     (canceled "yellow/black" "black/yellow")))
! 
! (defvar gnus-summary-highlight-translation
!   '(((unread (= mark gnus-unread-mark))
!      (ticked (or (= mark gnus-ticked-mark) (= mark gnus-dormant-mark)))
!      (read (not (or (= mark gnus-unread-mark) (= mark gnus-dormant-mark)
! 		    (= mark gnus-ticked-mark) (= mark gnus-canceled-mark))))
!      (canceled (= mark gnus-canceled-mark)))
!     ((low (< score gnus-summary-default-score))
!      (high (> score gnus-summary-default-score)))))
! 
! (defun gnus-visual-map-face-translation ()
!   (let ((props gnus-summary-highlight-properties)
! 	(trans gnus-summary-highlight-translation)
! 	map)
!     (while props)))
        
! (defvar gnus-summary-selected-face 'underline
!   "*Face used for highlighting the current article in the summary buffer.")
   
! (defvar gnus-summary-highlight
!   (cond ((not (eq gnus-display-type 'color))
! 	 '(((> score default) . bold)
! 	   ((< score default) . italic)))
! 	((eq gnus-background-mode 'dark)
! 	 (list (cons '(= mark gnus-canceled-mark)
! 		     (custom-face-lookup "yellow" "black" nil nil nil nil))
! 	       (cons '(and (> score default) 
! 			   (or (= mark gnus-dormant-mark)
! 			       (= mark gnus-ticked-mark)))
! 		     (custom-face-lookup "pink" nil nil t nil nil))
! 	       (cons '(and (< score default) 
! 			   (or (= mark gnus-dormant-mark)
! 			       (= mark gnus-ticked-mark)))
! 		     (custom-face-lookup "pink" nil nil nil t nil))
! 	       (cons '(or (= mark gnus-dormant-mark)
! 			  (= mark gnus-ticked-mark))
! 		     (custom-face-lookup "pink" nil nil nil nil nil))
! 
! 	       (cons '(and (> score default) (= mark gnus-ancient-mark))
! 		     (custom-face-lookup "SkyBlue" nil nil t nil nil))
! 	       (cons '(and (< score default) (= mark gnus-ancient-mark))
! 		     (custom-face-lookup "SkyBlue" nil nil nil t nil))
! 	       (cons '(= mark gnus-ancient-mark)
! 		     (custom-face-lookup "SkyBlue" nil nil nil nil nil))
! 
! 	       (cons '(and (> score default) (= mark gnus-unread-mark))
! 		     (custom-face-lookup "white" nil nil t nil nil))
! 	       (cons '(and (< score default) (= mark gnus-unread-mark))
! 		     (custom-face-lookup "white" nil nil nil t nil))
! 	       (cons '(= mark gnus-unread-mark)
! 		     (custom-face-lookup "white" nil nil nil nil nil))
! 
! 	       (cons '(> score default) 'bold)
! 	       (cons '(< score default) 'italic)))
! 	(t
! 	 (list (cons '(= mark gnus-canceled-mark)
! 		     (custom-face-lookup "yellow" "black" nil nil nil nil))
! 	       (cons '(and (> score default) 
! 			   (or (= mark gnus-dormant-mark)
! 			       (= mark gnus-ticked-mark)))
! 		     (custom-face-lookup "firebrick" nil nil t nil nil))
! 	       (cons '(and (< score default) 
! 			   (or (= mark gnus-dormant-mark)
! 			       (= mark gnus-ticked-mark)))
! 		     (custom-face-lookup "firebrick" nil nil nil t nil))
! 	       (cons '(or (= mark gnus-dormant-mark)
! 			  (= mark gnus-ticked-mark))
! 		     (custom-face-lookup "firebrick" nil nil nil nil nil))
! 
! 	       (cons '(and (> score default) (= mark gnus-ancient-mark))
! 		     (custom-face-lookup "RoyalBlue" nil nil t nil nil))
! 	       (cons '(and (< score default) (= mark gnus-ancient-mark))
! 		     (custom-face-lookup "RoyalBlue" nil nil nil t nil))
! 	       (cons '(= mark gnus-ancient-mark)
! 		     (custom-face-lookup "RoyalBlue" nil nil nil nil nil))
! 
! 	       (cons '(and (> score default) (/= mark gnus-unread-mark))
! 		     (custom-face-lookup "DarkGreen" nil nil t nil nil))
! 	       (cons '(and (< score default) (/= mark gnus-unread-mark))
! 		     (custom-face-lookup "DarkGreen" nil nil nil t nil))
! 	       (cons '(/= mark gnus-unread-mark)
! 		     (custom-face-lookup "DarkGreen" nil nil nil nil nil))
! 
! 	       (cons '(> score default) 'bold)
! 	       (cons '(< score default) 'italic))))
!   "*Alist of `(FORM . FACE)'.
! Summary lines are highlighted with the FACE for the first FORM which
! evaluate to a non-nil value.  
! 
! Point will be at the beginning of the line when FORM is evaluated.
! The following can be used for convenience:
! 
! score:   (gnus-summary-article-score)
! default: gnus-summary-default-score
! below:   gnus-summary-mark-below
! mark:    (gnus-summary-article-mark)
  
! The latter can be used like this:
!    ((= mark gnus-replied-mark) . underline)")
  
  ;;; article highlights
  
! (defvar gnus-header-face-alist 
!   (cond ((not (eq gnus-display-type 'color))
! 	 '(("" bold italic)))
! 	((eq gnus-background-mode 'dark)
! 	 (list (list "From" nil 
! 		     (custom-face-lookup "SkyBlue" nil nil t t nil))
! 	       (list "Subject" nil 
! 		     (custom-face-lookup "pink" nil nil t t nil))
! 	       (list "Newsgroups:.*," nil
! 		     (custom-face-lookup "yellow" nil nil t t nil))
! 	       (list "" 
! 		     (custom-face-lookup "cyan" nil nil t nil nil)
! 		     (custom-face-lookup "green" nil nil nil t nil))))
! 	(t
! 	 (list (list "From" nil 
! 		     (custom-face-lookup "RoyalBlue" nil nil t t nil))
! 	       (list "Subject" nil 
! 		     (custom-face-lookup "firebrick" nil nil t t nil))
! 	       (list "Newsgroups:.*," nil
! 		     (custom-face-lookup "red" nil nil t t nil))
! 	       (list ""
! 		     (custom-face-lookup "DarkGreen" nil nil t nil nil)
! 		     (custom-face-lookup "DarkGreen" nil nil nil t nil)))))
!   "Alist of headers and faces used for highlighting them.
! The entries in the list has the form `(REGEXP NAME CONTENT)', where
! REGEXP is a regular expression matching the beginning of the header,
! NAME is the face used for highlighting the header name and CONTENT is
! the face used for highlighting the header content. 
! 
! The first non-nil NAME or CONTENT with a matching REGEXP in the list
! will be used.")
! 
! 
! (defvar gnus-make-foreground t
!   "Non nil means foreground color to highlight citations.")
! 
! (defvar gnus-article-button-face 'bold
!   "Face used for text buttons.")
! 
! (defvar gnus-article-mouse-face (if (boundp 'gnus-mouse-face)
! 				    gnus-mouse-face
! 				  'highlight)
!   "Face used when the mouse is over the button.")
! 
! (defvar gnus-signature-face 'italic
!   "Face used for signature.")
  
  (defvar gnus-button-alist 
    '(("in\\( +article\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2 
--- 26,199 ----
  ;;; Code:
  
  (require 'gnus)
+ (require 'gnus-ems)
  (require gnus-easymenu)
  (require 'custom)
    
  ;;; Summary highlights.
  
! ;(defvar gnus-summary-highlight-properties
! ;  '((unread "ForestGreen" "green")
! ;    (ticked "Firebrick" "pink")
! ;    (read "black" "white")
! ;    (low italic italic)
! ;    (high bold bold)
! ;    (canceled "yellow/black" "black/yellow")))
! 
! ;(defvar gnus-summary-highlight-translation
! ;  '(((unread (= mark gnus-unread-mark))
! ;     (ticked (or (= mark gnus-ticked-mark) (= mark gnus-dormant-mark)))
! ;     (read (not (or (= mark gnus-unread-mark) (= mark gnus-dormant-mark)
! ;		    (= mark gnus-ticked-mark) (= mark gnus-canceled-mark))))
! ;     (canceled (= mark gnus-canceled-mark)))
! ;    ((low (< score gnus-summary-default-score))
! ;     (high (> score gnus-summary-default-score)))))
! 
! ;(defun gnus-visual-map-face-translation ()
! ;  (let ((props gnus-summary-highlight-properties)
! ;	(trans gnus-summary-highlight-translation)
! ;	map)
! ;    (while props)))
        
! ;see gnus-cus.el
! ;(defvar gnus-summary-selected-face 'underline
! ;  "*Face used for highlighting the current article in the summary buffer.")
   
! ;see gnus-cus.el
! ;(defvar gnus-summary-highlight
! ;  (cond ((not (eq gnus-display-type 'color))
! ;	 '(((> score default) . bold)
! ;	   ((< score default) . italic)))
! ;	((eq gnus-background-mode 'dark)
! ;	 (list (cons '(= mark gnus-canceled-mark)
! ;		     (custom-face-lookup "yellow" "black" nil nil nil nil))
! ;	       (cons '(and (> score default) 
! ;			   (or (= mark gnus-dormant-mark)
! ;			       (= mark gnus-ticked-mark)))
! ;		     (custom-face-lookup "pink" nil nil t nil nil))
! ;	       (cons '(and (< score default) 
! ;			   (or (= mark gnus-dormant-mark)
! ;			       (= mark gnus-ticked-mark)))
! ;		     (custom-face-lookup "pink" nil nil nil t nil))
! ;	       (cons '(or (= mark gnus-dormant-mark)
! ;			  (= mark gnus-ticked-mark))
! ;		     (custom-face-lookup "pink" nil nil nil nil nil))
! 
! ;	       (cons '(and (> score default) (= mark gnus-ancient-mark))
! ;		     (custom-face-lookup "SkyBlue" nil nil t nil nil))
! ;	       (cons '(and (< score default) (= mark gnus-ancient-mark))
! ;		     (custom-face-lookup "SkyBlue" nil nil nil t nil))
! ;	       (cons '(= mark gnus-ancient-mark)
! ;		     (custom-face-lookup "SkyBlue" nil nil nil nil nil))
! 
! ;	       (cons '(and (> score default) (= mark gnus-unread-mark))
! ;		     (custom-face-lookup "white" nil nil t nil nil))
! ;	       (cons '(and (< score default) (= mark gnus-unread-mark))
! ;		     (custom-face-lookup "white" nil nil nil t nil))
! ;	       (cons '(= mark gnus-unread-mark)
! ;		     (custom-face-lookup "white" nil nil nil nil nil))
! 
! ;	       (cons '(> score default) 'bold)
! ;	       (cons '(< score default) 'italic)))
! ;	(t
! ;	 (list (cons '(= mark gnus-canceled-mark)
! ;		     (custom-face-lookup "yellow" "black" nil nil nil nil))
! ;	       (cons '(and (> score default) 
! ;			   (or (= mark gnus-dormant-mark)
! ;			       (= mark gnus-ticked-mark)))
! ;		     (custom-face-lookup "firebrick" nil nil t nil nil))
! ;	       (cons '(and (< score default) 
! ;			   (or (= mark gnus-dormant-mark)
! ;			       (= mark gnus-ticked-mark)))
! ;		     (custom-face-lookup "firebrick" nil nil nil t nil))
! ;	       (cons '(or (= mark gnus-dormant-mark)
! ;			  (= mark gnus-ticked-mark))
! ;		     (custom-face-lookup "firebrick" nil nil nil nil nil))
! 
! ;	       (cons '(and (> score default) (= mark gnus-ancient-mark))
! ;		     (custom-face-lookup "RoyalBlue" nil nil t nil nil))
! ;	       (cons '(and (< score default) (= mark gnus-ancient-mark))
! ;		     (custom-face-lookup "RoyalBlue" nil nil nil t nil))
! ;	       (cons '(= mark gnus-ancient-mark)
! ;		     (custom-face-lookup "RoyalBlue" nil nil nil nil nil))
! 
! ;	       (cons '(and (> score default) (/= mark gnus-unread-mark))
! ;		     (custom-face-lookup "DarkGreen" nil nil t nil nil))
! ;	       (cons '(and (< score default) (/= mark gnus-unread-mark))
! ;		     (custom-face-lookup "DarkGreen" nil nil nil t nil))
! ;	       (cons '(/= mark gnus-unread-mark)
! ;		     (custom-face-lookup "DarkGreen" nil nil nil nil nil))
! 
! ;	       (cons '(> score default) 'bold)
! ;	       (cons '(< score default) 'italic))))
! ;  "*Alist of `(FORM . FACE)'.
! ;Summary lines are highlighted with the FACE for the first FORM which
! ;evaluate to a non-nil value.  
! 
! ;Point will be at the beginning of the line when FORM is evaluated.
! ;The following can be used for convenience:
! 
! ;score:   (gnus-summary-article-score)
! ;default: gnus-summary-default-score
! ;below:   gnus-summary-mark-below
! ;mark:    (gnus-summary-article-mark)
  
! ;The latter can be used like this:
! ;   ((= mark gnus-replied-mark) . underline)")
  
  ;;; article highlights
  
! ;see gnus-cus.el
! ;(defvar gnus-header-face-alist 
! ;  (cond ((not (eq gnus-display-type 'color))
! ;	 '(("" bold italic)))
! ;	((eq gnus-background-mode 'dark)
! ;	 (list (list "From" nil 
! ;		     (custom-face-lookup "SkyBlue" nil nil t t nil))
! ;	       (list "Subject" nil 
! ;		     (custom-face-lookup "pink" nil nil t t nil))
! ;	       (list "Newsgroups:.*," nil
! ;		     (custom-face-lookup "yellow" nil nil t t nil))
! ;	       (list "" 
! ;		     (custom-face-lookup "cyan" nil nil t nil nil)
! ;		     (custom-face-lookup "green" nil nil nil t nil))))
! ;	(t
! ;	 (list (list "From" nil 
! ;		     (custom-face-lookup "RoyalBlue" nil nil t t nil))
! ;	       (list "Subject" nil 
! ;		     (custom-face-lookup "firebrick" nil nil t t nil))
! ;	       (list "Newsgroups:.*," nil
! ;		     (custom-face-lookup "red" nil nil t t nil))
! ;	       (list ""
! ;		     (custom-face-lookup "DarkGreen" nil nil t nil nil)
! ;		     (custom-face-lookup "DarkGreen" nil nil nil t nil)))))
! ;  "Alist of headers and faces used for highlighting them.
! ;The entries in the list has the form `(REGEXP NAME CONTENT)', where
! ;REGEXP is a regular expression matching the beginning of the header,
! ;NAME is the face used for highlighting the header name and CONTENT is
! ;the face used for highlighting the header content. 
! 
! ;The first non-nil NAME or CONTENT with a matching REGEXP in the list
! ;will be used.")
! 
! 
! ;see gnus-cus.el
! ;(defvar gnus-make-foreground t
! ;  "Non nil means foreground color to highlight citations.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-article-button-face 'bold
! ;  "Face used for text buttons.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-article-mouse-face (if (boundp 'gnus-mouse-face)
! ;				    gnus-mouse-face
! ;				  'highlight)
! ;  "Face used when the mouse is over the button.")
! 
! ;see gnus-cus.el
! ;(defvar gnus-signature-face 'italic
! ;  "Face used for signature.")
  
  (defvar gnus-button-alist 
    '(("in\\( +article\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2 
***************
*** 211,233 ****
  CALLBACK can also be a variable, in that case the value of that
  variable it the real callback function.")
  
! (eval-when-compile
!   (defvar browse-url-browser-function))
! 
! (defvar gnus-button-url
!   (cond ((boundp 'browse-url-browser-function) browse-url-browser-function)
! 	((fboundp 'w3-fetch) 'w3-fetch)
! 	((eq window-system 'x) 'gnus-netscape-open-url))
!   "*Function to fetch URL.
! The function will be called with one argument, the URL to fetch.
! Useful values of this function are:
! 
! w3-fetch: 
!    defined in the w3 emacs package by William M. Perry.
! gnus-netscape-open-url:
!    open url in existing netscape, start netscape if none found.
! gnus-netscape-start-url:
!    start new netscape with url.")
  
  
  
--- 218,242 ----
  CALLBACK can also be a variable, in that case the value of that
  variable it the real callback function.")
  
! ;see gnus-cus.el
! ;(eval-when-compile
! ;  (defvar browse-url-browser-function))
! 
! ;see gnus-cus.el
! ;(defvar gnus-button-url
! ;  (cond ((boundp 'browse-url-browser-function) browse-url-browser-function)
! ;	((fboundp 'w3-fetch) 'w3-fetch)
! ;	((eq window-system 'x) 'gnus-netscape-open-url))
! ;  "*Function to fetch URL.
! ;The function will be called with one argument, the URL to fetch.
! ;Useful values of this function are:
! 
! ;w3-fetch: 
! ;   defined in the w3 emacs package by William M. Perry.
! ;gnus-netscape-open-url:
! ;   open url in existing netscape, start netscape if none found.
! ;gnus-netscape-start-url:
! ;   start new netscape with url.")
  
  
  
***************
*** 317,323 ****
  	["Send a bug report" gnus-bug t]
  	["Send a mail" gnus-group-mail t]
  	["Post an article" gnus-group-post-news t]
! 	["Customize score file" gnus-score-customize t]
  	["Check for new news" gnus-group-get-new-news t]     
  	["Delete bogus groups" gnus-group-check-bogus-groups t]
  	["Find new newsgroups" gnus-find-new-newsgroups t]
--- 326,332 ----
  	["Send a bug report" gnus-bug t]
  	["Send a mail" gnus-group-mail t]
  	["Post an article" gnus-group-post-news t]
! 	["Customize score file" gnus-score-customize (not (string-match "XEmacs" emacs-version)) ]
  	["Check for new news" gnus-group-get-new-news t]     
  	["Delete bogus groups" gnus-group-check-bogus-groups t]
  	["Find new newsgroups" gnus-find-new-newsgroups t]
***************
*** 472,479 ****
  	  ["Edit score file" gnus-score-edit-file t]
  	  ["Trace score" gnus-score-find-trace t]
  	  ["Increase score" gnus-summary-increase-score t]
! 	  ["Lower score" gnus-summary-lower-score t]
! 	  ("Default header"
  	   ["Ask" (gnus-score-set-default 'gnus-score-default-header nil)
  	    :style radio 
  	    :selected (null gnus-score-default-header)]
--- 481,490 ----
  	  ["Edit score file" gnus-score-edit-file t]
  	  ["Trace score" gnus-score-find-trace t]
  	  ["Increase score" gnus-summary-increase-score t]
! 	  ["Lower score" gnus-summary-lower-score t]))))
! 
!      (and nil
! 	  '(("Default header"
  	   ["Ask" (gnus-score-set-default 'gnus-score-default-header nil)
  	    :style radio 
  	    :selected (null gnus-score-default-header)]
***************
*** 580,586 ****
  	    (gnus-score-set-default 'gnus-score-default-duration 'i)
  	    :style radio
  	    :selected (eq gnus-score-default-duration 'i)])
! 	  ))))
  
       (easy-menu-define
        gnus-summary-article-menu
--- 591,597 ----
  	    (gnus-score-set-default 'gnus-score-default-duration 'i)
  	    :style radio
  	    :selected (eq gnus-score-default-duration 'i)])
! 	  ))
  
       (easy-menu-define
        gnus-summary-article-menu
***************
*** 588,605 ****
        ""
        '("Article"
  	("Hide"
! 	 ("Date"
! 	  ["Local" gnus-article-date-local t]
! 	  ["UT" gnus-article-date-local t]
! 	  ["Lapsed" gnus-article-date-local t])
  	 ["Headers" gnus-article-hide-headers t]
  	 ["Signature" gnus-article-hide-signature t]
! 	 ["Citation" gnus-article-hide-citation t]
  	 ["Overstrike" gnus-article-treat-overstrike t]
  	 ["Word wrap" gnus-article-word-wrap t]
  	 ["CR" gnus-article-remove-cr t]
  	 ["Show X-Face" gnus-article-display-x-face t]
! 	 ["Quoted-Printable" gnus-article-de-quoted-unreadable t])
  	("Extract"
  	 ["Uudecode" gnus-uu-decode-uu t]
  	 ["Uudecode and save" gnus-uu-decode-uu-and-save t]
--- 599,643 ----
        ""
        '("Article"
  	("Hide"
! 	 ["All" gnus-article-hide t]
  	 ["Headers" gnus-article-hide-headers t]
  	 ["Signature" gnus-article-hide-signature t]
! 	 ["Citation" gnus-article-hide-citation t])
! 	("Highlight"
! 	 ["All" gnus-article-highlight t]
! 	 ["Headers" gnus-article-highlight-headers t]
! 	 ["Signature" gnus-article-highlight-signature t]
! 	 ["Citation" gnus-article-highlight-citation t])
! 	("Date"
! 	 ["Local" gnus-article-date-local t]
! 	 ["UT" gnus-article-date-local t]
! 	 ["Lapsed" gnus-article-date-local t])
! 	("Filter"
  	 ["Overstrike" gnus-article-treat-overstrike t]
  	 ["Word wrap" gnus-article-word-wrap t]
  	 ["CR" gnus-article-remove-cr t]
  	 ["Show X-Face" gnus-article-display-x-face t]
! 	 ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
! 	 ["Rot 13" gnus-summary-caesar-message t]
! 	 ["Add buttons" gnus-article-add-buttons t]
! 	 ["Stop page breaking" gnus-summary-stop-page-breaking t]
! 	 ["Toggle MIME" gnus-summary-toggle-mime t]
! 	 ["Toggle header" gnus-summary-toggle-header t])
! 	("Output"
! 	 ["Save in default format" gnus-summary-save-article t]
! 	 ["Save in file" gnus-summary-save-article-file t]
! 	 ["Save in Unix mail format" gnus-summary-save-article-mail t]
! 	 ["Save in MH folder" gnus-summary-save-article-folder t]
! 	 ["Save in VM folder" gnus-summary-save-article-vm t]
! 	 ["Save in RMAIL mbox" gnus-summary-save-article-rmail t]
! 	 ["Pipe through a filter" gnus-summary-pipe-output t])
! 	("Backend"
! 	 ["Respool article" gnus-summary-respool-article t]
! 	 ["Move article" gnus-summary-move-article t]
! 	 ["Copy article" gnus-summary-copy-article t]
! 	 ["Import file" gnus-summary-import-article t]
! 	 ["Edit article" gnus-summary-edit-article t]
! 	 ["Delete article" gnus-summary-delete-article t])
  	("Extract"
  	 ["Uudecode" gnus-uu-decode-uu t]
  	 ["Uudecode and save" gnus-uu-decode-uu-and-save t]
***************
*** 614,636 ****
  	["End of the article" gnus-summary-end-of-article t]
  	["Fetch parent of article" gnus-summary-refer-parent-article t]
  	["Fetch article with id..." gnus-summary-refer-article t]
! 	["Stop page breaking" gnus-summary-stop-page-breaking t]
! 	["Rot 13" gnus-summary-caesar-message t]
! 	["Redisplay" gnus-summary-show-article t]
! 	["Toggle header" gnus-summary-toggle-header t]
! 	["Toggle MIME" gnus-summary-toggle-mime t]
! 	["Save" gnus-summary-save-article t]
! 	["Save in mail format" gnus-summary-save-article-mail t]
! 	["Pipe through a filter" gnus-summary-pipe-output t]
! 	("Mail articles"
! 	 ["Respool article" gnus-summary-respool-article t]
! 	 ["Move article" gnus-summary-move-article t]
! 	 ["Copy article" gnus-summary-copy-article t]
! 	 ["Import file" gnus-summary-import-article t]
! 	 ["Edit article" gnus-summary-edit-article t]
! 	 ["Delete article" gnus-summary-delete-article t])
! 	))
  
       (easy-menu-define
        gnus-summary-thread-menu
        gnus-summary-mode-map
--- 652,660 ----
  	["End of the article" gnus-summary-end-of-article t]
  	["Fetch parent of article" gnus-summary-refer-parent-article t]
  	["Fetch article with id..." gnus-summary-refer-article t]
! 	["Redisplay" gnus-summary-show-article t]))
  
+ 	 
       (easy-menu-define
        gnus-summary-thread-menu
        gnus-summary-mode-map
***************
*** 869,875 ****
  	  ;; If no mouse-face prop on line (e.g. xemacs) we 
  	  ;; will have to = from = end, so we highlight the
  	  ;; entire line instead.
! 	  (if (= to from)
  	      (progn
  		(setq from beg)
  		(setq to end)))
--- 893,899 ----
  	  ;; If no mouse-face prop on line (e.g. xemacs) we 
  	  ;; will have to = from = end, so we highlight the
  	  ;; entire line instead.
! 	  (if (= (+ to 2) from)
  	      (progn
  		(setq from beg)
  		(setq to end)))
***************
*** 1305,1315 ****
  	  (remove-text-properties end (point-max) gnus-hidden-properties)
  	(add-text-properties end (point-max) gnus-hidden-properties)))))
  
! (defun gnus-make-face (color)
!   ;; Create entry for face with COLOR.
!   (if gnus-make-foreground
!       (custom-face-lookup color nil nil nil nil nil)
!     (custom-face-lookup nil color nil nil nil nil)))
  
  (defun gnus-button-entry ()
    ;; Return the first entry in `gnus-button-alist' matching this place.
--- 1329,1340 ----
  	  (remove-text-properties end (point-max) gnus-hidden-properties)
  	(add-text-properties end (point-max) gnus-hidden-properties)))))
  
! ;see gnus-cus.el
! ;(defun gnus-make-face (color)
! ;  ;; Create entry for face with COLOR.
! ;  (if gnus-make-foreground
! ;      (custom-face-lookup color nil nil nil nil nil)
! ;    (custom-face-lookup nil color nil nil nil nil)))
  
  (defun gnus-button-entry ()
    ;; Return the first entry in `gnus-button-alist' matching this place.
*** pub/dgnus/lisp/gnus.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/gnus.el	Fri Aug 25 03:45:51 1995
***************
*** 23,31 ****
  
  ;;; Commentary:
  
! ;; Although (ding) Gnus looks suspiciously like GNUS, it isn't quite
! ;; the same beast. Most internal structures have been changed. If you
! ;; have written packages that depend on any of the hash tables,
  ;; `gnus-newsrc-alist', `gnus-killed-assoc', marked lists, the .newsrc
  ;; buffer, or internal knowledge of the `nntp-header-' macros, or
  ;; dependence on the buffers having a certain format, your code will
--- 23,31 ----
  
  ;;; Commentary:
  
! ;; Although Gnus looks suspiciously like GNUS, it isn't quite the same
! ;; beast. Most internal structures have been changed. If you have
! ;; written packages that depend on any of the hash tables,
  ;; `gnus-newsrc-alist', `gnus-killed-assoc', marked lists, the .newsrc
  ;; buffer, or internal knowledge of the `nntp-header-' macros, or
  ;; dependence on the buffers having a certain format, your code will
***************
*** 36,42 ****
  (require 'mail-utils)
  (require 'timezone)
  (require 'nnheader)
- (require 'gnus-cus)
  
  ;; Site dependent variables. These variables should be defined in
  ;; paths.el.
--- 36,41 ----
***************
*** 170,175 ****
--- 169,178 ----
  This will most commonly be on a remote machine, and the file will be
  fetched by ange-ftp.
  
+ Note that Gnus uses an aol machine as the default directory.  If this
+ feels fundamentally unclean, just think of it as a way to finally get
+ something of value back from them.
+ 
  If the default site is too slow, try one of these:
  
     North America: ftp.uu.net                     /usenet/news.answers
***************
*** 187,192 ****
--- 190,199 ----
    "/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/" 
    "*The address of the (ding) archives.")
  
+ (defvar gnus-group-recent-archive-directory
+   "/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list-recent/"
+   "*The address of the most recent (ding) articles.")
+ 
  (defvar gnus-default-subscribed-newsgroups nil
    "*This variable lists what newsgroups should be subscribed the first time Gnus is used.
  It should be a list of strings.
***************
*** 356,366 ****
  
  The server has to support XOVER for any of this to work.")
  
! (defvar gnus-visual t
!   "*If non-nil, will do various highlighting.
! If nil, no mouse highlights (or any other highlights) will be
! performed.  This might speed up Gnus some when generating large group
! and summary buffers.")
  
  (defvar gnus-novice-user t
    "*Non-nil means that you are a usenet novice.
--- 363,374 ----
  
  The server has to support XOVER for any of this to work.")
  
! ;see gnus-cus.el
! ;(defvar gnus-visual t
! ;  "*If non-nil, will do various highlighting.
! ;If nil, no mouse highlights (or any other highlights) will be
! ;performed.  This might speed up Gnus some when generating large group
! ;and summary buffers.")
  
  (defvar gnus-novice-user t
    "*Non-nil means that you are a usenet novice.
***************
*** 957,969 ****
  
  %S  The subject")
  
! (defvar gnus-summary-mode-line-format "(ding) %G/%A %Z"
    "*The format specification for the summary mode line.")
  
! (defvar gnus-article-mode-line-format "(ding) %G/%A %S"
    "*The format specification for the article mode line.")
  
! (defvar gnus-group-mode-line-format "(ding) List of groups   {%M:%S}  "
    "*The format specification for the group mode line.")
  
  (defvar gnus-valid-select-methods
--- 965,977 ----
  
  %S  The subject")
  
! (defvar gnus-summary-mode-line-format "Gnus  %G/%A %Z"
    "*The format specification for the summary mode line.")
  
! (defvar gnus-article-mode-line-format "Gnus  %G/%A %S"
    "*The format specification for the article mode line.")
  
! (defvar gnus-group-mode-line-format "Gnus  List of groups   {%M:%S}  "
    "*The format specification for the group mode line.")
  
  (defvar gnus-valid-select-methods
***************
*** 1002,1010 ****
  If this is nil, Gnus will take space as is needed, leaving the rest
  of the modeline intact.")
  
! (defvar gnus-mouse-face 'highlight
!   "*Face used for mouse highlighting in Gnus.
! No mouse highlights will be done if `gnus-visual' is nil.")
  
  (defvar gnus-summary-mark-below nil
    "*Mark all articles with a score below this variable as read.
--- 1010,1019 ----
  If this is nil, Gnus will take space as is needed, leaving the rest
  of the modeline intact.")
  
! ;see gnus-cus.el
! ;(defvar gnus-mouse-face 'highlight
! ;  "*Face used for mouse highlighting in Gnus.
! ;No mouse highlights will be done if `gnus-visual' is nil.")
  
  (defvar gnus-summary-mark-below nil
    "*Mark all articles with a score below this variable as read.
***************
*** 1102,1118 ****
    "*A hook called after an article has been prepared in the article buffer.
  If you want to run a special decoding program like nkf, use this hook.")
  
! (defvar gnus-article-display-hook nil
!   "*A hook called after the article is displayed in the article buffer.
! The hook is designed to change the contents of the article
! buffer. Typical functions that this hook may contain are
! `gnus-article-hide-headers' (hide selected headers),
! `gnus-article-maybe-highlight' (perform fancy article highlighting), 
! `gnus-article-hide-signature' (hide signature) and
! `gnus-article-treat-overstrike' (turn \"^H_\" into bold characters).")
! (add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted)
! (add-hook 'gnus-article-display-hook 'gnus-article-treat-overstrike)
! (add-hook 'gnus-article-display-hook 'gnus-article-maybe-highlight)
  
  (defvar gnus-article-x-face-command
    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -"
--- 1111,1127 ----
    "*A hook called after an article has been prepared in the article buffer.
  If you want to run a special decoding program like nkf, use this hook.")
  
! ;(defvar gnus-article-display-hook nil
! ;  "*A hook called after the article is displayed in the article buffer.
! ;The hook is designed to change the contents of the article
! ;buffer. Typical functions that this hook may contain are
! ;`gnus-article-hide-headers' (hide selected headers),
! ;`gnus-article-maybe-highlight' (perform fancy article highlighting), 
! ;`gnus-article-hide-signature' (hide signature) and
! ;`gnus-article-treat-overstrike' (turn \"^H_\" into bold characters).")
! ;(add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted)
! ;(add-hook 'gnus-article-display-hook 'gnus-article-treat-overstrike)
! ;(add-hook 'gnus-article-display-hook 'gnus-article-maybe-highlight)
  
  (defvar gnus-article-x-face-command
    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -"
***************
*** 1157,1163 ****
  a string `rmgroup' in subject in newsgroup `control', you can use the
  following hook:
  
! \(setq gnus-apply-kill-hook
        (list
  	(lambda ()
  	  (cond ((string-match \"control\" gnus-newsgroup-name)
--- 1166,1172 ----
  a string `rmgroup' in subject in newsgroup `control', you can use the
  following hook:
  
!  (setq gnus-apply-kill-hook
        (list
  	(lambda ()
  	  (cond ((string-match \"control\" gnus-newsgroup-name)
***************
*** 1330,1336 ****
    "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
    "The mail address of the Gnus maintainers.")
  
! (defconst gnus-version "(ding) Gnus v0.99.19"
    "Version number for this version of Gnus.")
  
  (defvar gnus-info-nodes
--- 1339,1345 ----
    "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
    "The mail address of the Gnus maintainers.")
  
! (defconst gnus-version "(ding) Gnus v0.99.20"
    "Version number for this version of Gnus.")
  
  (defvar gnus-info-nodes
***************
*** 1340,1346 ****
    "Assoc list of major modes and related Info nodes.")
  
  (defvar gnus-documentation-group-file "~/dgnus/lisp/doc.txt"
!   "The location of the (ding) Gnus documentation group.")
  
  (defvar gnus-group-buffer "*Group*")
  (defvar gnus-summary-buffer "*Summary*")
--- 1349,1355 ----
    "Assoc list of major modes and related Info nodes.")
  
  (defvar gnus-documentation-group-file "~/dgnus/lisp/doc.txt"
!   "The location of the Gnus documentation group.")
  
  (defvar gnus-group-buffer "*Group*")
  (defvar gnus-summary-buffer "*Summary*")
***************
*** 1810,1815 ****
--- 1819,1825 ----
  
  ;;; Load the compatability functions. 
  
+ (require 'gnus-cus)
  (require 'gnus-ems)
  
  
***************
*** 2067,2074 ****
  
  (defun gnus-numeric-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is nil, it is ~/News/news.group/num.
! Otherwise, it is like ~/News/news/group/num."
    (let ((default
  	  (expand-file-name
  	   (concat (if (gnus-use-long-file-name 'not-save)
--- 2077,2084 ----
  
  (defun gnus-numeric-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is non-nil, it is
! ~/News/news.group/num.  Otherwise, it is like ~/News/news/group/num."
    (let ((default
  	  (expand-file-name
  	   (concat (if (gnus-use-long-file-name 'not-save)
***************
*** 2085,2092 ****
  
  (defun gnus-Plain-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is nil, it is ~/News/News.group.
! Otherwise, it is like ~/News/news/group/news."
    (or last-file
        (expand-file-name
         (if (gnus-use-long-file-name 'not-save)
--- 2095,2102 ----
  
  (defun gnus-Plain-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is non-nil, it is
! ~/News/News.group.  Otherwise, it is like ~/News/news/group/news."
    (or last-file
        (expand-file-name
         (if (gnus-use-long-file-name 'not-save)
***************
*** 2096,2103 ****
  
  (defun gnus-plain-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is nil, it is ~/News/news.group.
! Otherwise, it is like ~/News/news/group/news."
    (or last-file
        (expand-file-name
         (if (gnus-use-long-file-name 'not-save)
--- 2106,2113 ----
  
  (defun gnus-plain-save-name (newsgroup headers &optional last-file)
    "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
! If variable `gnus-use-long-file-name' is non-nil, it is
! ~/News/news.group.  Otherwise, it is like ~/News/news/group/news."
    (or last-file
        (expand-file-name
         (if (gnus-use-long-file-name 'not-save)
***************
*** 3203,3210 ****
    (setq gnus-group-use-permanent-levels t)
    (gnus (or arg (1- gnus-level-default-subscribed)) t))
  
- (defalias '\(ding\) 'gnus)
- 
  ;;;###autoload
  (defun gnus (&optional arg dont-connect)
    "Read network news.
--- 3213,3218 ----
***************
*** 4176,4182 ****
      (gnus-group-position-cursor)))
  
  (defun gnus-group-make-help-group ()
!   "Create the (ding) Gnus documentation group."
    (interactive)
    (let ((path load-path)
  	name)
--- 4184,4190 ----
      (gnus-group-position-cursor)))
  
  (defun gnus-group-make-help-group ()
!   "Create the Gnus documentation group."
    (interactive)
    (let ((path load-path)
  	name)
***************
*** 4220,4232 ****
  	   (list 'nndoc-address file)
  	   (list 'nndoc-article-type type)))))
  
! (defun gnus-group-make-archive-group ()
!   "Create the (ding) Gnus archive group."
!   (interactive)
!   (and (gnus-gethash (gnus-group-prefixed-name "ding.archives" '(nndir ""))
! 		     gnus-newsrc-hashtb)
!        (error "Archive group already exists"))
!   (gnus-group-make-group "ding.archives" "nndir" gnus-group-archive-directory)
    (gnus-group-position-cursor))
  
  (defun gnus-group-make-directory-group (dir)
--- 4228,4246 ----
  	   (list 'nndoc-address file)
  	   (list 'nndoc-article-type type)))))
  
! (defun gnus-group-make-archive-group (&optional all)
!   "Create the (ding) Gnus archive group of the most recent articles.
! Given a prefix, create a full group."
!   (interactive)
!   (let ((group (gnus-group-prefixed-name 
! 		(if all "ding.archives" "ding.recent") '(nndir ""))))
!     (and (gnus-gethash group gnus-newsrc-hashtb)
! 	 (error "Archive group already exists"))
!     (gnus-group-make-group
!      (gnus-group-real-name group)
!      "nndir" 
!      (if all gnus-group-archive-directory 
!        gnus-group-recent-archive-directory)))
    (gnus-group-position-cursor))
  
  (defun gnus-group-make-directory-group (dir)
***************
*** 5034,5040 ****
      (gnus-browse-mode)
      (setq mode-line-buffer-identification
  	  (format
! 	   "(ding) Browse Server {%s:%s}" (car method) (car (cdr method))))
      (save-excursion
        (set-buffer nntp-server-buffer)
        (let ((cur (current-buffer)))
--- 5048,5054 ----
      (gnus-browse-mode)
      (setq mode-line-buffer-identification
  	  (format
! 	   "Gnus  Browse Server {%s:%s}" (car method) (car (cdr method))))
      (save-excursion
        (set-buffer nntp-server-buffer)
        (let ((cur (current-buffer)))
***************
*** 7768,7775 ****
  (defun gnus-summary-fetch-faq (group)
    "Fetch the FAQ for the current group."
    (interactive (list gnus-newsgroup-name))
!   (and (gnus-group-fetch-faq group)
!        (gnus-configure-windows 'summary-faq)))
  
  ;; Suggested by Per Abrahamsen <amanda@iesd.auc.dk>.
  (defun gnus-summary-describe-group (&optional force)
--- 7782,7790 ----
  (defun gnus-summary-fetch-faq (group)
    "Fetch the FAQ for the current group."
    (interactive (list gnus-newsgroup-name))
!   (let (gnus-faq-buffer)
!     (and (setq gnus-faq-buffer (gnus-group-fetch-faq group))
! 	 (gnus-configure-windows 'summary-faq))))
  
  ;; Suggested by Per Abrahamsen <amanda@iesd.auc.dk>.
  (defun gnus-summary-describe-group (&optional force)
***************
*** 8121,8127 ****
  			 (single-key-description cmd)
  			 gnus-newsgroup-name)))
  	      ;; Confirm auto selection.
! 	      (let* ((event (read-event)))
  		(setq key (if (listp event) (car event) event))
  		(if (memq key keystrokes)
  		    (let ((obuf (current-buffer)))
--- 8136,8142 ----
  			 (single-key-description cmd)
  			 gnus-newsgroup-name)))
  	      ;; Confirm auto selection.
! 	      (let* ((event (read-char)))
  		(setq key (if (listp event) (car event) event))
  		(if (memq key keystrokes)
  		    (let ((obuf (current-buffer)))
***************
*** 8295,8303 ****
        ;; score. 
        (goto-char (point-min))
        (while (and (or (not (= (gnus-summary-article-mark) gnus-unread-mark))
! 		      (not (eq (cdr (assq (gnus-summary-article-number)
! 					  gnus-newsgroup-scored))
! 			       gnus-summary-default-score)))
  		  (zerop (forward-line 1))
  		  (not (eobp))))
        (if (= (gnus-summary-article-mark) gnus-unread-mark)
--- 8310,8320 ----
        ;; score. 
        (goto-char (point-min))
        (while (and (or (not (= (gnus-summary-article-mark) gnus-unread-mark))
! 		      (and (assq (gnus-summary-article-number)
! 				 gnus-newsgroup-scored)
! 			   (< (cdr (assq (gnus-summary-article-number)
! 					 gnus-newsgroup-scored))
! 			      gnus-summary-default-score)))
  		  (zerop (forward-line 1))
  		  (not (eobp))))
        (if (= (gnus-summary-article-mark) gnus-unread-mark)
***************
*** 8410,8415 ****
--- 8427,8436 ----
  		    (setq number (header-number gnus-current-headers))
  		    (gnus-rebuild-thread message-id)
  		    (gnus-summary-goto-subject number)
+ 		    (if (null gnus-use-full-window)
+ 			(progn
+ 			  (delete-windows-on tmp-buf)
+ 			  (gnus-configure-windows 'article 'force)))
  		    (gnus-summary-recenter)
  		    (gnus-article-set-window-start 
  		     (cdr (assq number gnus-newsgroup-bookmarks)))
***************
*** 8580,8585 ****
--- 8601,8607 ----
     gnus-article-buffer
     (widen)
     (goto-char (point-max))
+    (recenter -3)
     (and gnus-break-pages (gnus-narrow-to-page))))
  
  (defun gnus-summary-show-article ()
***************
*** 11023,11028 ****
--- 11045,11051 ----
  	(goto-char (point-min))
  	(if (not (and gnus-article-x-face-command
  		      (or force
+ 			  (not gnus-article-x-face-too-ugly)
  			  (and gnus-article-x-face-too-ugly
  			       (not (string-match gnus-article-x-face-too-ugly
  						  (mail-fetch-field "from")))))
***************
*** 13374,13380 ****
  
  (defun gnus-gnus-to-quick-newsrc-format ()
    "Insert Gnus variables such as gnus-newsrc-alist in lisp format."
!   (insert ";; (ding) Gnus startup file.\n")
    (insert ";; Never delete this file - touch .newsrc instead to force Gnus\n")
    (insert ";; to read .newsrc.\n")
    (insert "(setq gnus-newsrc-file-version "
--- 13397,13403 ----
  
  (defun gnus-gnus-to-quick-newsrc-format ()
    "Insert Gnus variables such as gnus-newsrc-alist in lisp format."
!   (insert ";; Gnus startup file.\n")
    (insert ";; Never delete this file - touch .newsrc instead to force Gnus\n")
    (insert ";; to read .newsrc.\n")
    (insert "(setq gnus-newsrc-file-version "
***************
*** 13521,13527 ****
  It works along the same lines as a normal formatting string,
  with some simple extensions.")
  
! (defvar gnus-server-mode-line-format "(ding) List of servers"
    "The format specification for the server mode line.")
  
  (defconst gnus-server-line-format-alist
--- 13544,13550 ----
  It works along the same lines as a normal formatting string,
  with some simple extensions.")
  
! (defvar gnus-server-mode-line-format "Gnus  List of servers"
    "The format specification for the server mode line.")
  
  (defconst gnus-server-line-format-alist
*** pub/dgnus/lisp/nndir.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/nndir.el	Fri Aug 25 03:45:51 1995
***************
*** 68,74 ****
    (and nntp-server-buffer
         (get-buffer nntp-server-buffer)))
  
! (defun nndir-status-message ()
    "Return server status response as string."
    nndir-status-string)
  
--- 68,74 ----
    (and nntp-server-buffer
         (get-buffer nntp-server-buffer)))
  
! (defun nndir-status-message (&optional server)
    "Return server status response as string."
    nndir-status-string)
  
*** pub/dgnus/lisp/nnfolder.el	Thu Aug 24 06:20:22 1995
--- dgnus/lisp/nnfolder.el	Thu Aug 24 06:47:00 1995
***************
*** 561,567 ****
  
  ;; This method has a problem if you've accidentally let the active list get
  ;; out of sync with the files.  This could happen, say, if you've
! ;; accidentally gotten new mail with something other than (ding) (but why
  ;; would _that_ ever happen? :-).  In that case, we will be in the middle of
  ;; processing the file, ready to add new X-Gnus article number markers, and
  ;; we'll run accross a message with no ID yet - the active list _may_not_ be
--- 561,567 ----
  
  ;; This method has a problem if you've accidentally let the active list get
  ;; out of sync with the files.  This could happen, say, if you've
! ;; accidentally gotten new mail with something other than Gnus (but why
  ;; would _that_ ever happen? :-).  In that case, we will be in the middle of
  ;; processing the file, ready to add new X-Gnus article number markers, and
  ;; we'll run accross a message with no ID yet - the active list _may_not_ be
*** pub/dgnus/lisp/ChangeLog	Thu Aug 24 06:20:24 1995
--- dgnus/lisp/ChangeLog	Fri Aug 25 03:45:52 1995
***************
*** 1,4 ****
--- 1,65 ----
+ Fri Aug 25 02:57:19 1995  Lars Magne Ingebrigtsen  <lingebri@sunscipw.cern.ch>
+ 
+ 	* nndir.el (nndir-status-message): Wrong number of arguments.
+ 
+ 	* gnus.el (gnus-summary-next-article): Woundn't go to the next
+ 	group. 
+ 	(gnus-group-recent-archive-directory): New variable.
+ 	(gnus-group-make-archive-group): Now makes both the recent and the
+ 	full groups. 
+ 
+ 	* gnus-vis.el (gnus-easymenu): Require gnus-ems first.
+ 
+ Fri Aug 25 01:13:52 1995  Lars Magne Ingebrigtsen  <lingebri@sunsci4.cern.ch>
+ 
+ 	* gnus-vis.el (gnus-highlight-selected-summary): Would underline
+ 	wrong part of line without mouse-face.
+ 
+ 	* gnus.el (gnus-summary-refer-article): Would mess up window
+ 	config when not useing full windows.
+ 
+ Fri Aug 25 00:22:14 1995  Per Abrahamsen  <abraham@dina.kvl.dk>
+ 
+ 	* gnus-vis.el (gnus-group-make-menu-bar): Disable
+ 	`gnus-score-customize' in XEmacs.
+ 	
+ 	* gnus-cus.el: Removed variables declared in `gnus-cus.el'.
+ 	* gnus.el: Ditto.
+ 	* gnus-cite.el: Ditto.
+ 
+ Fri Aug 25 00:06:35 1995  Lars Magne Ingebrigtsen  <lingebri@sunsci4.cern.ch>
+ 
+ 	* custom.el: New version.
+ 
+ 	* gnus.el (gnus-summary-fetch-faq): Would bug out.
+ 
+ Thu Aug 24 23:54:13 1995  Lars Magne Ingebrigtsen  <lingebri@sunsci4.cern.ch>
+ 
+ 	* gnus.el (gnus-apply-kill-hook): Doc fix.
+ 
+ Thu Aug 24 16:25:17 1995  Ulrik Dickow  <dickow@nbi.dk>
+ 
+ 	* gnus-msg.el (gnus-post-news): Respect Reply-To when handling
+ 	`gnus-auto-mail-to-author'.
+ 
  Thu Aug 24 01:41:33 1995  Lars Magne Ingebrigtsen  <lingebri@sunsci4.cern.ch>
+ 
+ 	* gnus.el (gnus-summary-end-of-article): Recenter at -3.
+ 
+ 	* gnus-vis.el (gnus-summary-make-menu-bar): Commented out score
+ 	thingies. 
+ 
+ 	* gnus.el (gnus-summary-best-unread-article): Would not find the
+ 	best unread.
+ 	(gnus-article-display-x-face): Did not work if x-face-too-ugly was
+ 	nil.
+ 
+ 	* gnus-vis.el (gnus-article-highlight-headers): Would infloop with
+ 	19.28. 
+ 
+ Thu Aug 24 01:41:33 1995  Lars Magne Ingebrigtsen  <lingebri@sunsci4.cern.ch>
+ 
+ 	* gnus.el: 0.99.19 is released.
  
  	* gnus.el (gnus-group-faq-directory): Changed the default to point
  	to aol.
*** pub/dgnus/texi/gnus.texi	Thu Aug 24 06:20:24 1995
--- dgnus/texi/gnus.texi	Fri Aug 25 03:39:15 1995
***************
*** 1,7 ****
  \input texinfo                  @c -*-texinfo-*-
  @comment %**start of header (This is for running Texinfo on a region.)
  @setfilename gnus.info
! @settitle (ding) Gnus 0.99.18 Manual
  @synindex fn cp
  @synindex vr cp
  @synindex pg cp
--- 1,7 ----
  \input texinfo                  @c -*-texinfo-*-
  @comment %**start of header (This is for running Texinfo on a region.)
  @setfilename gnus.info
! @settitle Gnus 5.0 Manual
  @synindex fn cp
  @synindex vr cp
  @synindex pg cp
***************
*** 45,51 ****
  @iftex
  
  @titlepage
! @title (ding) Gnus Manual
  
  @author by Lars Magne Ingebrigtsen
  @page
--- 45,51 ----
  @iftex
  
  @titlepage
! @title Gnus Manual
  
  @author by Lars Magne Ingebrigtsen
  @page
***************
*** 119,127 ****
  abbreviation should probably be pronounced "news" as UMEDA intended,
  which makes it a more appropriate name, don't you think?)
  
  @menu
  * Why?::                What's the point of Gnus?
! * Compatibility::       Just how compatible is (ding) Gnus with @sc{gnus}?
  * Contributors::        Oodles of people.  
  * New Features::        A short description of all the new stuff in Gnus.
  * Newest Features::     Features so new that they haven't been written yet.
--- 119,135 ----
  abbreviation should probably be pronounced "news" as UMEDA intended,
  which makes it a more appropriate name, don't you think?)
  
+ In any case, after spending all that energy with coming up with a new
+ and spiffy name, we decided that the name was @emph{too} spiffy, so we
+ renamamed it back again to "Gnus".  But in mixed case.  "Gnus" vs.
+ @sc{gnus}.  New vs. old.
+ 
+ Incidentally, the next Gnus generation will be called "September Gnus",
+ and won't be released until February.  Confused?  You will be.
+ 
  @menu
  * Why?::                What's the point of Gnus?
! * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
  * Contributors::        Oodles of people.  
  * New Features::        A short description of all the new stuff in Gnus.
  * Newest Features::     Features so new that they haven't been written yet.
***************
*** 141,155 ****
  newsreaders will be pretty much useless.  How do you deal with
  newsgroups that have hundreds (or thousands) of new articles each day? 
  
! (ding) Gnus offer no real solutions to these questions, but I would very
! much like to see Gnus being used as a testing ground for new methods of
! reading and fetching news.  Expanding on Umeda-san's wise decision to
! separate the newsreader from the backends, (ding) Gnus now offers a
! simple interface for anybody who wants to write new backends for
! fetching mail and news from different sources.  I have added hooks for
! customizations everywhere I can imagine useful.  By doing so, I'm
! inviting every one of you to explore and invent new ways of reading
! news. 
  
  May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
  
--- 149,162 ----
  newsreaders will be pretty much useless.  How do you deal with
  newsgroups that have hundreds (or thousands) of new articles each day? 
  
! Gnus offer no real solutions to these questions, but I would very much
! like to see Gnus being used as a testing ground for new methods of
! reading and fetching news. Expanding on Umeda-san's wise decision to
! separate the newsreader from the backends, Gnus now offers a simple
! interface for anybody who wants to write new backends for fetching mail
! and news from different sources. I have added hooks for customizations
! everywhere I can imagine useful. By doing so, I'm inviting every one of
! you to explore and invent new ways of reading news.
  
  May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
  
***************
*** 157,166 ****
  @section Compatibility
  
  @cindex compatibility
! (ding) Gnus was designed to be fully compatible with @sc{gnus}.  Almost
! all key bindings have been kept.  More key bindings have been added, of
! course, but only in one or two obscure cases have old bindings been
! changed.
  
  Our motto is:
  @quotation
--- 164,172 ----
  @section Compatibility
  
  @cindex compatibility
! Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
! bindings have been kept.  More key bindings have been added, of course,
! but only in one or two obscure cases have old bindings been changed.
  
  Our motto is:
  @quotation
***************
*** 202,217 ****
  
  Packages like @code{expire-kill} will no longer work.  As a matter of
  fact, you should probably remove all old @sc{gnus} packages (and other
! code) when you start using (ding) Gnus.  More likely than not, (ding)
! Gnus already does what you have written code to make @sc{gnus} do.
! (Snicker.)
  
  Even though old methods of doing things are still supported, only the
  new methods are documented in this manual.  If you detect a new method of
  doing something while reading this manual, that does not mean you have
  to stop doing it the old way.
  
! (ding) Gnus understands all @sc{gnus} startup files.
  
  @kindex M-x gnus-bug
  Overall, a casual user who hasn't written much code that depends on
--- 208,222 ----
  
  Packages like @code{expire-kill} will no longer work.  As a matter of
  fact, you should probably remove all old @sc{gnus} packages (and other
! code) when you start using Gnus.  More likely than not, Gnus already
! does what you have written code to make @sc{gnus} do.  (Snicker.)
  
  Even though old methods of doing things are still supported, only the
  new methods are documented in this manual.  If you detect a new method of
  doing something while reading this manual, that does not mean you have
  to stop doing it the old way.
  
! Gnus understands all @sc{gnus} startup files.
  
  @kindex M-x gnus-bug
  Overall, a casual user who hasn't written much code that depends on
***************
*** 311,317 ****
  @item
  Native @sc{mime} support is something that should be done.  I was hoping
  I could steal code from @code{Mew}, the @sc{mime} mail reader for Emacs,
! but I'm not quite sure what the status of that project is.  (ding) might
  support @sc{mime} quite soon, and it might not.
  @item
  When the user references the parent of an article, some sort of
--- 316,322 ----
  @item
  Native @sc{mime} support is something that should be done.  I was hoping
  I could steal code from @code{Mew}, the @sc{mime} mail reader for Emacs,
! but I'm not quite sure what the status of that project is.  Gnus might
  support @sc{mime} quite soon, and it might not.
  @item
  When the user references the parent of an article, some sort of
***************
*** 643,652 ****
  that were the most recently saved, which enabled people to swap between
  @sc{gnus} and other newsreaders.
  
! That was kinda silly, so (ding) Gnus went one better: In addition to the
! @file{.newsrc} and @file{.newsrc.el} files, (ding) Gnus also has a file
! called @file{.newsrc.eld}.  It will read whichever of these files that
! are most recent, but it will never write a @file{.newsrc.el} file.
  
  @vindex gnus-save-newsrc-file
  You can also turn off writing the @file{.newsrc} file by setting
--- 648,657 ----
  that were the most recently saved, which enabled people to swap between
  @sc{gnus} and other newsreaders.
  
! That was kinda silly, so Gnus went one better: In addition to the
! @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
! @file{.newsrc.eld}.  It will read whichever of these files that are most
! recent, but it will never write a @file{.newsrc.el} file.
  
  @vindex gnus-save-newsrc-file
  You can also turn off writing the @file{.newsrc} file by setting
***************
*** 1262,1276 ****
  @item G h 
  @kindex G h (Group)
  @findex gnus-group-make-help-group
! Make the (ding) Gnus help group (@code{gnus-group-make-help-group}).
  
  @item G a
  @kindex G a (Group)
  @findex gnus-group-make-archive-group
  @vindex gnus-group-archive-directory
! Make the (ding) Gnus archive group
! (@code{gnus-group-make-archive-group}).  The archive group will be
! fetched from @code{gnus-group-archive-directory}.
  
  @item G k
  @kindex G k (Group)
--- 1267,1283 ----
  @item G h 
  @kindex G h (Group)
  @findex gnus-group-make-help-group
! Make the Gnus help group (@code{gnus-group-make-help-group}).
  
  @item G a
  @kindex G a (Group)
  @findex gnus-group-make-archive-group
  @vindex gnus-group-archive-directory
! @vindex gnus-group-recent-archive-directory
! Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
! default a group pointing to the most recent articles will be created
! (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
! group will be created from from @code{gnus-group-archive-directory}.
  
  @item G k
  @kindex G k (Group)
***************
*** 5065,5073 ****
  @section Score Files
  @cindex score files
  
! Other people use @dfn{kill files}, but we here at (ding) Gnus Towers
! like scoring better than killing, so we'd rather switch than fight.  They
! do something completely different as well, so sit up straight and pay
  attention!
  
  @vindex gnus-summary-mark-below
--- 5072,5080 ----
  @section Score Files
  @cindex score files
  
! Other people use @dfn{kill files}, but we here at Gnus Towers like
! scoring better than killing, so we'd rather switch than fight.  They do
! something completely different as well, so sit up straight and pay
  attention!
  
  @vindex gnus-summary-mark-below
***************
*** 5712,5720 ****
  @subsection Kill Files
  @cindex kill files
  
! (ding) Gnus still supports those pesky old kill files.  In fact, the
! kill file entries can now be expiring, which is something I wrote before
! Per thought of doing score files, so I've left the code in there.
  
  In short, kill processing is a lot slower (and I do mean @emph{a lot})
  than score processing, so it might be a good idea to rewrite your kill
--- 5719,5727 ----
  @subsection Kill Files
  @cindex kill files
  
! Gnus still supports those pesky old kill files.  In fact, the kill file
! entries can now be expiring, which is something I wrote before Per
! thought of doing score files, so I've left the code in there.
  
  In short, kill processing is a lot slower (and I do mean @emph{a lot})
  than score processing, so it might be a good idea to rewrite your kill
***************
*** 6671,6678 ****
  @chapter Troubleshooting
  @cindex troubleshooting
  
! (ding) Gnus works @emph{so} well straight out of the box - I can't
! imagine any problems, really.
  
  Ahem.
  
--- 6678,6685 ----
  @chapter Troubleshooting
  @cindex troubleshooting
  
! Gnus works @emph{so} well straight out of the box - I can't imagine any
! problems, really.
  
  Ahem.
  
***************
*** 6685,6694 ****
  Gnus will work.
  @item
  Try doing an @kbd{M-x gnus-version}.  If you get something that looks
! like @samp{(ding) Gnus v0.46; nntp 4.0} you have the right files loaded.
! If, on the other hand, you get something like @samp{NNTP 3.x} or
! @samp{nntp flee}, you have some old @file{.el} files lying around.
! Delete these.
  @item
  Read the help group (@kbd{M h} in the group buffer) for a FAQ and a
  how-to. 
--- 6692,6700 ----
  Gnus will work.
  @item
  Try doing an @kbd{M-x gnus-version}.  If you get something that looks
! like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
! on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
! flee}, you have some old @file{.el} files lying around.  Delete these.
  @item
  Read the help group (@kbd{M h} in the group buffer) for a FAQ and a
  how-to. 
***************
*** 6701,6710 ****
  
  @kindex M-x gnus-bug
  @findex gnus-bug
! If you find a bug in (ding) Gnus, you can report it with the @kbd{M-x
! gnus-bug} command. @kbd{M-x set-variable RET debug-on-error RET t RET},
! and send me the backtrace. I will fix bugs, but I can only fix them if
! you send me a precise description as to how to reproduce the bug.
  
  @c If you just need help, you are better off asking on
  @c @samp{gnu.emacs.gnus}.  
--- 6707,6716 ----
  
  @kindex M-x gnus-bug
  @findex gnus-bug
! If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
! command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
! me the backtrace. I will fix bugs, but I can only fix them if you send
! me a precise description as to how to reproduce the bug.
  
  @c If you just need help, you are better off asking on
  @c @samp{gnu.emacs.gnus}.  
