Commits

Anonymous committed 350a866

Synch with Quassia Gnus 0.29

Comments (0)

Files changed (23)

+1998-02-16  SL Baur  <steve@altair.xemacs.org>
+
+	* Synch with qgnus-0.28.
+
+1998-02-15  SL Baur  <steve@altair.xemacs.org>
+
+	* Synch with qgnus-0.27.
+
 1998-02-14  SL Baur  <steve@altair.xemacs.org>
 
 	* Synch with qgnus-0.26.
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-VERSION = 1.05
-AUTHOR_VERSION = 0.26q
+VERSION = 1.06
+AUTHOR_VERSION = 0.28q
 MAINTAINER = XEmacs Development Team <xemacs-beta@xemacs.org>
 PACKAGE = gnus
 PKG_TYPE = regular

gnus/lisp/ChangeLog

+Tue Feb 17 07:00:43 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Quassia Gnus v0.29 is released.
+
+Tue Feb 17 06:15:03 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* nnmail.el (nnmail-purge-split-history): List if alists, not
+	alist. 
+
+Mon Feb 16 20:22:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Quassia Gnus v0.28 is released.
+
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* message.el (message-dont-send): Make sure the article really is
+	saved. 
+
+	* nnmail.el (nnmail-purge-split-history): Alist; not a list of
+	alists. 
+
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* message.el (message-kill-to-signature): Do the right thing when
+	there is no signature.
+
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* message.el (message-elide-elipsis): Add type and group.
+	(message-elide-region): Docfix.
+
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-util.el (gnus-run-hooks): Use unwind-protect instead of
+	save-excursion. 
+
+1998-02-16  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* nntp.el (nntp-authinforc-file): Customized.
+
+Mon Feb 16 03:18:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-nocem.el (gnus-nocem-unwanted-article-p): Don't look if the
+	hashtable doesn't exist.
+
+	* gnus-start.el (gnus-ask-server-for-new-groups): Make sure the
+	killed groups hashtable exists.
+
+Sun Feb 15 23:02:11 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* nntp.el (nntp-authinforc-file): Changed name and default.
+	(nntp-send-authinfo): Use it.
+
+Sun Feb 15 19:50:10 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Quassia Gnus v0.27 is released.
+
+Sun Feb 15 19:41:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus.el (gnus-ephemeral-servers): New variable.
+	* gnus-srvr.el (gnus-server-prepare): Use it.
+	* gnus-group.el (gnus-group-read-ephemeral-group): Ditto.
+
+Sun Feb 15 19:35:11 1998  Kurt Swanson  <kurt@dna.lth.se>
+
+	* gnus-art.el (gnus-article-read-summary-keys): Go to top on
+	some. 
+
+Sun Feb 15 19:26:21 1998  SeokChan LEE  <chan@xfer.kren.nm.kr>
+
+	* message.el (message-ignored-supersedes-headers): Fix.
+
+Sun Feb 15 18:39:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-salt.el (gnus-tree-close): Start killing buffer again.
+
+	* gnus-sum.el (gnus-mark-article-as-read): Return t.
+
+	* gnus-art.el (gnus-article-edit-mode): Run text mode hook.
+
+Sun Feb 15 17:31:19 1998  Roland Roberts  <rroberts@muller.com>
+
+	* gnus-sum.el (gnus-nov-parse-line): Would bug out on bogus
+	References headers.
+
+Sun Feb 15 14:23:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-art.el (gnus-article-current-summary): New variable.
+	(gnus-article-mode): Make it local.
+
+	* gnus-score.el (gnus-summary-increase-score): Find the right
+	global score file.
+
+	* gnus-start.el (gnus-setup-news): Don't find new newsgroups
+	unless plugged.
+
+	* message.el (message-mode): Set font-lock things before running
+	mode hook.
+
+	* gnus-agent.el (gnus-agent-group-path): Respect long file names. 
+
+Sat Feb 14 21:31:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-sum.el (gnus-summary-goto-last-article): Force jumping to
+	articles outside limit.
+
+	* gnus-agent.el (gnus-agent-toggle-plugged): un/plug before hook. 
+
+Sat Feb 14 21:08:03 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+	* gnus-xmas.el (gnus-xmas-article-display-xface): t t would make
+	faces disappear.
+
+Sat Feb 14 20:52:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* nntp.el (nntp-netrc-file): New variable.
+
 Sat Feb 14 19:28:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 	* gnus.el: Quassia Gnus v0.26 is released.

gnus/lisp/_pkg.el

 ;;;###autoload
 (package-provide 'gnus
-		 :version 1.05
+		 :version 1.06
 		 :type 'regular)

gnus/lisp/auto-autoloads.el

 
 ;;;### (autoloads nil "_pkg" "lisp/_pkg.el")
 
-(package-provide 'gnus :version 1.05 :type 'regular)
+(package-provide 'gnus :version 1.06 :type 'regular)
 
 ;;;***
 

gnus/lisp/gnus-agent.el

 (defun gnus-agent-toggle-plugged (plugged)
   "Toggle whether Gnus is unplugged or not."
   (interactive (list (not gnus-plugged)))
+  (setq gnus-plugged plugged)
   (if plugged
       (progn
 	(gnus-run-hooks 'gnus-agent-plugged-hook)
     (gnus-agent-close-connections)
     (gnus-run-hooks 'gnus-agent-unplugged-hook)
     (setcar (cdr gnus-agent-mode-status) " Unplugged"))
-  (setq gnus-plugged plugged)
   (set-buffer-modified-p t))
 
 (defun gnus-agent-close-connections ()
 
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
-  (nnheader-translate-file-chars
-   (nnheader-replace-chars-in-string group ?. ?/)))
+  (if nnmail-use-long-file-names
+      group
+    (nnheader-translate-file-chars
+     (nnheader-replace-chars-in-string group ?. ?/))))
 
 
 

gnus/lisp/gnus-art.el

 ;;; Internal variables
 
 (defvar article-lapsed-timer nil)
+(defvar gnus-article-current-summary nil)
 
 (defvar gnus-article-mode-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
 (defvar gnus-save-article-buffer nil)
 
 (defvar gnus-article-mode-line-format-alist
-    (nconc '((?w (gnus-article-wash-status) ?s))
-	   gnus-summary-mode-line-format-alist))
+  (nconc '((?w (gnus-article-wash-status) ?s))
+	 gnus-summary-mode-line-format-alist))
 
 (defvar gnus-number-of-articles-to-be-saved nil)
 
 	     (gnus-number-of-articles-to-be-saved
 	      (when (eq gnus-prompt-before-saving t)
 		num)))			; Magic
-	(set-buffer gnus-summary-buffer)
+	(set-buffer gnus-article-current-summary)
 	(funcall gnus-default-article-saver filename)))))
 
 (defun gnus-read-save-file-name (prompt &optional filename
   (set (make-local-variable 'page-delimiter) gnus-page-delimiter)
   (set (make-local-variable 'gnus-page-broken) nil)
   (set (make-local-variable 'gnus-button-marker-list) nil)
+  (set (make-local-variable 'gnus-article-current-summary) nil)
   (gnus-set-default-directory)
   (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (let ((obuf (current-buffer))
 	(owin (current-window-configuration))
 	func)
-    (switch-to-buffer gnus-summary-buffer 'norecord)
+    (switch-to-buffer gnus-article-current-summary 'norecord)
     (setq func (lookup-key (current-local-map) (this-command-keys)))
     (call-interactively func)
     (set-buffer obuf)
   "Execute the last keystroke in the summary buffer."
   (interactive)
   (let (func)
-    (pop-to-buffer gnus-summary-buffer 'norecord)
+    (pop-to-buffer gnus-article-current-summary 'norecord)
     (setq func (lookup-key (current-local-map) (this-command-keys)))
     (call-interactively func)))
 
 	 '("A\r"))
 	(nosave-in-article
 	 '("\C-d"))
+        (up-to-top
+         '("n" "Gn" "p" "Gp"))
 	keys)
     (save-excursion
-      (set-buffer gnus-summary-buffer)
+      (set-buffer gnus-article-current-summary)
       (let (gnus-pick-mode)
 	(push (or key last-command-event) unread-command-events)
 	(setq keys (read-key-sequence nil))))
 	    (member keys nosave-in-article))
 	(let (func)
 	  (save-window-excursion
-	    (pop-to-buffer gnus-summary-buffer 'norecord)
+	    (pop-to-buffer gnus-article-current-summary 'norecord)
 	    ;; We disable the pick minor mode commands.
 	    (let (gnus-pick-mode)
 	      (setq func (lookup-key (current-local-map) keys))))
 	  (if (not func)
 	      (ding)
 	    (unless (member keys nosave-in-article)
-	      (set-buffer gnus-summary-buffer))
+	      (set-buffer gnus-article-current-summary))
 	    (call-interactively func))
 	  (when (member keys nosave-but-article)
 	    (pop-to-buffer gnus-article-buffer 'norecord)))
 	    (opoint (point))
 	    func in-buffer)
 	(if not-restore-window
-	    (pop-to-buffer gnus-summary-buffer 'norecord)
-	  (switch-to-buffer gnus-summary-buffer 'norecord))
+	    (pop-to-buffer gnus-article-current-summary 'norecord)
+	  (switch-to-buffer gnus-article-current-summary 'norecord))
 	(setq in-buffer (current-buffer))
 	;; We disable the pick minor mode commands.
 	(if (setq func (let (gnus-pick-mode)
 	  (set-buffer obuf)
 	  (unless not-restore-window
 	    (set-window-configuration owin))
-	  (set-window-point (get-buffer-window (current-buffer)) opoint))))))
+          (unless (member keys up-to-top)
+            (set-window-point (get-buffer-window (current-buffer))
+                              opoint)))))))
 
 (defun gnus-article-hide (&optional arg force)
   "Hide all the gruft in the current article.
 	   ;; It was a pseudo.
 	   (t article)))
 
+      ;; Associate this article with the current summary buffer.
+      (setq gnus-article-current-summary gnus-summary-buffer)
+      
       ;; Take the article from the original article buffer
       ;; and place it in the buffer it's supposed to be in.
       (when (and (get-buffer gnus-article-buffer)
-		 ;;(numberp article)
 		 (equal (buffer-name (current-buffer))
 			(buffer-name (get-buffer gnus-article-buffer))))
 	(save-excursion
   (setq buffer-read-only nil)
   (buffer-enable-undo)
   (widen)
-  (gnus-run-hooks 'text-mode 'gnus-article-edit-mode-hook))
+  (gnus-run-hooks 'text-mode-hook 'gnus-article-edit-mode-hook))
 
 (defun gnus-article-edit (&optional force)
   "Edit the current article.

gnus/lisp/gnus-group.el

 				(cons gnus-summary-buffer
 				      gnus-current-window-configuration))))))
      gnus-newsrc-hashtb)
+    (push method gnus-ephemeral-servers)
     (set-buffer gnus-group-buffer)
     (unless (gnus-check-server method)
       (error "Unable to contact server: %s" (gnus-status-message method)))

gnus/lisp/gnus-nocem.el

 
 (defun gnus-nocem-unwanted-article-p (id)
   "Say whether article ID in the current group is wanted."
-  (gnus-gethash id gnus-nocem-hashtb))
+  (and gnus-nocem-hashtb
+       (gnus-gethash id gnus-nocem-hashtb)))
 
 (provide 'gnus-nocem)
 

gnus/lisp/gnus-salt.el

   (gnus-get-tree-buffer))
 
 (defun gnus-tree-close (group)
-					;(gnus-kill-buffer gnus-tree-buffer)
-  )
+  (gnus-kill-buffer gnus-tree-buffer))
 
 (defun gnus-highlight-selected-tree (article)
   "Highlight the selected article in the tree."

gnus/lisp/gnus-score.el

       (save-excursion
 	(set-buffer gnus-summary-buffer)
 	(gnus-score-load-file
-	 (gnus-score-file-name "all"))))
+	 ;; This is a kludge; yes...
+	 (cond
+	  ((eq gnus-score-find-score-files-function
+	       'gnus-score-find-hierarchical)
+	   (gnus-score-file-name ""))
+	  ((eq gnus-score-find-score-files-function 'gnus-score-find-single)
+	   current-score-file)
+	  (t
+	   (gnus-score-file-name "all"))))))
     
     (gnus-summary-score-entry
      (nth 1 entry)			; Header
       ((or (null newsgroup)
 	   (string-equal newsgroup ""))
        ;; The global score file is placed at top of the directory.
-       (expand-file-name
-	suffix gnus-kill-files-directory))
+       (expand-file-name suffix gnus-kill-files-directory))
       ((gnus-use-long-file-name 'not-score)
        ;; Append ".SCORE" to newsgroup name.
        (expand-file-name (concat (gnus-newsgroup-savable-name newsgroup)

gnus/lisp/gnus-srvr.el

     ;; Then we insert the list of servers that have been opened in
     ;; this session.
     (while opened
-      (unless (member (caar opened) done)
+      (when (and (not (member (caar opened) done))
+		 ;; Just ignore ephemeral servers.
+		 (not (member (caar opened) gnus-ephemeral-servers)))
 	(push (caar opened) done)
 	(gnus-server-insert-server-line
 	 (setq op-ser (format "%s:%s" (caaar opened) (nth 1 (caar opened))))

gnus/lisp/gnus-start.el

   :type '(choice directory (const nil)))
 
 (defcustom gnus-check-new-newsgroups 'ask-server
-  "*Non-nil means that Gnus will run gnus-find-new-newsgroups at startup.
+  "*Non-nil means that Gnus will run `gnus-find-new-newsgroups' at startup.
 This normally finds new newsgroups by comparing the active groups the
 servers have already reported with those Gnus already knows, either alive
 or killed.
 
-When any of the following are true, gnus-find-new-newsgroups will instead
+When any of the following are true, `gnus-find-new-newsgroups' will instead
 ask the servers (primary, secondary, and archive servers) to list new
 groups since the last time it checked:
   1. This variable is `ask-server'.
   2. This variable is a list of select methods (see below).
   3. `gnus-read-active-file' is nil or `some'.
-  4. A prefix argument is given to gnus-find-new-newsgroups interactively.
+  4. A prefix argument is given to `gnus-find-new-newsgroups' interactively.
 
 Thus, if this variable is `ask-server' or a list of select methods or
 `gnus-read-active-file' is nil or `some', then the killed list is no
 	gnus-newsgroup-data nil
 	gnus-newsgroup-unreads nil
 	nnoo-state-alist nil
-	gnus-current-select-method nil)
+	gnus-current-select-method nil
+	gnus-ephemeral-servers nil)
   (gnus-shutdown 'gnus)
   ;; Kill the startup file.
   (and gnus-current-startup-file
     ;; Find new newsgroups and treat them.
     (when (and init gnus-check-new-newsgroups (not level)
 	       (gnus-check-server gnus-select-method)
-	       (not gnus-slave))
+	       (not gnus-slave)
+	       gnus-plugged)
       (gnus-find-new-newsgroups))
 
     ;; We might read in new NoCeM messages here.
 	 (new-date (current-time-string))
 	 group new-newsgroups got-new method hashtb
 	 gnus-override-subscribe-method)
+    (unless gnus-killed-hashtb
+      (gnus-make-hashtable-from-killed))
     ;; Go through both primary and secondary select methods and
     ;; request new newsgroups.
     (while (setq method (gnus-server-get-method nil (pop methods)))

gnus/lisp/gnus-sum.el

 			 (setq ref
 			       (buffer-substring
 				(1+ (point))
-				(search-backward "<" beg t)))
+				(or (search-backward "<" beg t) beg)))
 		       (setq ref nil))
 		     (goto-char beg))
 		   (gnus-nov-field))	; refs
   (interactive)
   (prog1
       (when gnus-last-article
-	(gnus-summary-goto-article gnus-last-article))
+	(gnus-summary-goto-article gnus-last-article nil t))
     (gnus-summary-position-point)))
 
 (defun gnus-summary-pop-article (number)
 	;; through the expiry process.
 	(gnus-message 6 "Expiring articles...")
 	;; The list of articles that weren't expired is returned.
-	(if expiry-wait
-	    (let ((nnmail-expiry-wait-function nil)
-		  (nnmail-expiry-wait expiry-wait))
-	      (setq es (gnus-request-expire-articles
-			expirable gnus-newsgroup-name)))
-	  (setq es (gnus-request-expire-articles
-		    expirable gnus-newsgroup-name)))
+	(save-excursion
+	  (if expiry-wait
+	      (let ((nnmail-expiry-wait-function nil)
+		    (nnmail-expiry-wait expiry-wait))
+		(setq es (gnus-request-expire-articles
+			  expirable gnus-newsgroup-name)))
+	    (setq es (gnus-request-expire-articles
+		      expirable gnus-newsgroup-name))))
 	(unless total
 	  (setq gnus-newsgroup-expirable es))
 	;; We go through the old list of expirable, and mark all
 This means that *all* articles that are marked as expirable will be
 deleted forever, right now."
   (interactive)
-  (or gnus-expert-user
-      (gnus-yes-or-no-p
-       "Are you really, really, really sure you want to delete all these messages? ")
-      (error "Phew!"))
+  (unless gnus-expert-user
+    (gnus-yes-or-no-p
+     "Are you really, really, really sure you want to delete all these messages? ")
+    (error "Phew!"))
   (gnus-summary-expire-articles t))
 
 ;; Suggested by Jack Vinson <vinson@unagi.cis.upenn.edu>.
     (push (cons article mark) gnus-newsgroup-reads)
     ;; Possibly remove from cache, if that is used.
     (when gnus-use-cache
-      (gnus-cache-enter-remove-article article))))
+      (gnus-cache-enter-remove-article article))
+    t))
 
 (defun gnus-mark-article-as-unread (article &optional mark)
   "Enter ARTICLE in the pertinent lists and remove it from others."

gnus/lisp/gnus-util.el

 
 (defun gnus-run-hooks (&rest funcs)
   "Does the same as `run-hooks', but saves excursion."
-  (save-excursion
-    (apply 'run-hooks funcs)))
+  (let ((buf (current-buffer)))
+    (unwind-protect
+	(apply 'run-hooks funcs)
+      (set-buffer buf))))
   
 ;;;
 ;;; .netrc and .authinforc parsing

gnus/lisp/gnus-xmas.el

 		      (make-glyph
 		       (vector 'xpm :data (buffer-string))))))
 		 (t
-		  (make-glyph [nothing])))))
+		  (make-glyph [nothing]))))
+	  (ext (make-extent (progn
+			      (goto-char (point-min))
+			      (re-search-forward "^From:" nil t)
+			      (point))
+			    (1+ (point)))))
       (set-glyph-face xface-glyph 'gnus-x-face)
-      (goto-char (point-min))
-      (re-search-forward "^From:" nil t)
-      (set-extent-begin-glyph
-       (make-extent (point) (1+ (point))) xface-glyph))))
+      (set-extent-begin-glyph ext xface-glyph)
+      (set-extent-property ext 'duplicable t))))
 
 ;;(defvar gnus-xmas-pointer-glyph
 ;;  (progn

gnus/lisp/gnus.el

   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.26"
+(defconst gnus-version-number "0.29"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
 (defvar gnus-group-get-parameter-function 'gnus-group-get-parameter)
 (defvar gnus-original-article-buffer " *Original Article*")
 (defvar gnus-newsgroup-name nil)
+(defvar gnus-ephemeral-servers nil)
 
 (defvar gnus-agent nil
   "Whether we want to use the Gnus agent or not.")

gnus/lisp/message.el

   :group 'message-headers
   :type 'regexp)
 
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|X-Trace:\\|X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
   "*Header lines matching this regexp will be deleted before posting.
 It's best to delete old Path and Date headers before posting to avoid
 any confusion."
   :group 'message-various)
 
 (defcustom message-elide-elipsis "\n[...]\n\n"
-  "*The string which is inserted for elided text.")
+  "*The string which is inserted for elided text."
+  :type 'string
+  :group 'message-various)
 
 (defcustom message-interactive nil
   "*Non-nil means when sending a message wait for and display errors.
 	(mail-abbrevs-setup)
       (funcall (intern "mail-aliases-setup"))))
   (message-set-auto-save-file-name)
-  (gnus-run-hooks 'text-mode-hook 'message-mode-hook)
   (unless (string-match "XEmacs" emacs-version)
     (set (make-local-variable 'font-lock-defaults)
-	 '(message-font-lock-keywords t))))
+	 '(message-font-lock-keywords t)))
+  (gnus-run-hooks 'text-mode-hook 'message-mode-hook))
 
 
 
   (interactive)
   (let ((point (point)))
     (message-goto-signature)
-    (forward-line -2)
+    (unless (eobp)
+      (forward-line -2))
     (kill-region point (point))
     (unless (bolp)
       (insert "\n"))))
       (or (bolp) (insert "\n")))))
 
 (defun message-elide-region (b e)
-  "Elide the text between point and mark.  An ellipsis (from
-message-elide-elipsis) will be inserted where the text was killed."
+  "Elide the text between point and mark.
+An ellipsis (from `message-elide-elipsis') will be inserted where the
+text was killed."
   (interactive "r")
   (kill-region b e)
   (unless (bolp)
 (defun message-dont-send ()
   "Don't send the message you have been editing."
   (interactive)
+  (set-buffer-modified-p t)
   (save-buffer)
   (let ((actions message-postpone-actions))
     (message-bury (current-buffer))

gnus/lisp/nnmail.el

 	(princ "\n")))))
 
 (defun nnmail-purge-split-history (group)
-  (let ((history nnmail-split-history))
+  (let ((history nnmail-split-history)
+	prev)
     (while history
-      (let ((pairs (car history)))
-	(while pairs
-	  (if (string= (car (car pairs)) group)
-	      (setcar pairs (cdr pairs))
-	    (setq pairs (cdr pairs)))))
-      (setq history (cdr history))))
-  (setq nnmail-split-history (delq nil nnmail-split-history)))
+      (setcar history (delete-if (lambda (e) (string= (car e) group))
+				 (car history)))
+      (pop history))
+    (setq nnmail-split-history (delq nil nnmail-split-history))))
 
 (defun nnmail-new-mail-p (group)
   "Say whether GROUP has new mail."

gnus/lisp/nntp.el

 have an account at the machine \"other.machine\".  This machine has
 access to an NNTP server that you can't access locally.  You could
 then use this hook to rsh to the remote machine and start a proxy NNTP
-server there that you can connect to.  See also `nntp-open-connection-function'")
+server there that you can connect to.  See also
+`nntp-open-connection-function'")
 
 (defvoo nntp-warn-about-losing-connection t
   "*If non-nil, beep when a server closes connection.")
   "*Coding system to read from NNTP.")
 
 (defvoo nntp-coding-system-for-write 'binary
-    "*Coding system to write to NNTP.")
+  "*Coding system to write to NNTP.")
+
+(defcustom nntp-authinforc-file "~/.authinforc"
+  "Docstring."
+  :type
+  '(choice file
+	   (repeat :tag "Entries"
+		   :menu-tag "Inline"
+		   (list :format "%v"
+			 :value ("" ("login" . "") ("password" . ""))
+			 (string :tag "Host")
+			 (checklist :inline t
+				    (cons :format "%v"
+					  (const :format "" "login")
+					  (string :format "Login: %v"))
+				    (cons :format "%v"
+					  (const :format "" "password")
+					  (string :format "Password: %v")))))))
 
 
 
 	(ignore-errors
 	  (nntp-send-string process "QUIT")
 	  (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
+	    ;; Ok, this is evil, but when using telnet and stuff
+	    ;; as the connection method, it's important that the
+	    ;; QUIT command actually is sent out before we kill
+	    ;; the process.  
 	    (sleep-for 1))))
       (when (buffer-name (process-buffer process))
 	(kill-buffer (process-buffer process))))))
 (defun nntp-send-authinfo ()
   "Send the AUTHINFO to the nntp server.
 This function is supposed to be called from `nntp-server-opened-hook'.
-It will look in the \"~/.netrc\" file for matching entries.  If
+It will look in the \"~/.authinforc\" file for matching entries.  If
 nothing suitable is found there, it will prompt for a user name
 and a password."
-  (let* ((list (gnus-parse-netrc "~/.netrc"))
+  (let* ((list (gnus-parse-netrc nntp-authinforc-file))
 	 (alist (gnus-netrc-machine list nntp-address))
 	 (user (gnus-netrc-get alist "login"))
 	 (passwd (gnus-netrc-get alist "password")))

gnus/texi/ChangeLog

+Sun Feb 15 23:04:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus.texi (NNTP): Change.
+
 Sat Feb 14 17:46:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
 	* gnus.texi (Virtual Groups): Fix.

gnus/texi/gnus.texi

 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Quassia Gnus 0.26 Manual
+@settitle Quassia Gnus 0.29 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @tex
 
 @titlepage
-@title Quassia Gnus 0.26 Manual
+@title Quassia Gnus 0.29 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Quassia Gnus 0.26.
+This manual corresponds to Quassia Gnus 0.29.
 
 @end ifinfo
 
 @item nntp-authinfo-function 
 @vindex nntp-authinfo-function 
 @findex nntp-send-authinfo
+@vindex nntp-authinforc-file
 This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
 server.  The default function is @code{nntp-send-authinfo}, which looks
-through your @file{~/.netrc} for applicable entries.  If none are found,
-it will prompt you for a login name and a password.  The format of the
-@file{~/.netrc} file is defined in the @code{ftp} manual page, but here
-are the salient facts:
+through your @file{~/.authinforc} (or whatever you've set the
+@code{nntp-authinforc-file} variable to) for applicable entries.  If
+none are found, it will prompt you for a login name and a password.  The
+format of the @file{~/.authinforc} file is the same as the @code{ftp}
+@file{~/.netrc} file, which is defined in the @code{ftp} manual page,
+but here are the salient facts:
 
 @enumerate
 @item
 
 Jari Aalto,
 Adrian Aichner,
+Russ Allbery,
 Peter Arius, 
 Matt Armstrong,
 Marc Auslander,
 Dave Disser,
 Joev Dubach,
 Michael Welsh Duggan,
+Dave Edmondson,
 Paul Eggert,
 Enami Tsugutomo, @c Enami
 Michael Ernst,
 Hisashige Kenji, @c Hisashige
 Marc Horowitz,
 Gunnar Horrigmo,
+Richard Hoskins,
 Brad Howes,
 Fran�ois Felix Ingrand,
 Ishikawa Ichiro, @c Ishikawa
 Andreas Jaeger,
 Randell Jesup,
 Fred Johansen, 
+Simon Josefsson,
 Greg Klanderman,
 Karl Kleinpaste,
 Peter Skov Knudsen,
 Tonny Madsen,
 Shlomo Mahlab,
 Nat Makarevitch,
+Istvan Marko,
 David Martin,
 Gordon Matzigkeit,
 Timo Metzemakers,
 Erik Toubro Nielsen,
 Hrvoje Niksic,
 Andy Norman,
+Fred Oberhauser,
 C. R. Oldham,
 Alexandre Oliva,
 Ken Olstad,
 John McClary Prevost,
 Colin Rafferty,
 Lars Balker Rasmussen,
+Joe Reiss,
+Renaud Rioboo,
+Roland B. Roberts,
 Bart Robinson,
+Christian von Roques,
 Jason Rumney,
 Jay Sachs,
 Dewey M. Sasser,
 Philippe Troin,
 James Troup,
 Aaron M. Ucko, 
+Aki Vehtari,
 Didier Verna,
 Jan Vroonhof,
 Stefan Waldherr,
+Pete Ware,
 Barry A. Warsaw,
 Christoph Wedler,
 Joe Wells,

gnus/texi/message.texi

 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 0.26 Manual
+@settitle Message 0.29 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @tex
 
 @titlepage
-@title Message 0.26 Manual
+@title Message 0.29 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 0.26.  Message is distributed with
+This manual corresponds to Message 0.29.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has.