diff lisp/gnus/nnmh.el @ 31716:9968f55ad26e

Update to emacs-21-branch of the Gnus CVS repository.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 19 Sep 2000 13:37:09 +0000
parents 15fc6acbae7a
children 47d8bf1dec03
line wrap: on
line diff
--- a/lisp/gnus/nnmh.el	Tue Sep 19 13:28:27 2000 +0000
+++ b/lisp/gnus/nnmh.el	Tue Sep 19 13:37:09 2000 +0000
@@ -1,5 +1,7 @@
 ;;; nnmh.el --- mhspool access for Gnus
-;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;	Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; 	Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -48,7 +50,10 @@
   "*Hook run narrowed to an article before saving.")
 
 (defvoo nnmh-be-safe nil
-  "*If non-nil, nnmh will check all articles to make sure whether they are new or not.")
+  "*If non-nil, nnmh will check all articles to make sure whether they are new or not.
+Go through the .nnmh-articles file and compare with the actual
+articles in this folder.  The articles that are \"new\" will be marked
+as unread by Gnus.")
 
 
 
@@ -60,7 +65,10 @@
 
 (defvoo nnmh-status-string "")
 (defvoo nnmh-group-alist nil)
-(defvoo nnmh-allow-delete-final nil)
+;; Don't even think about setting this variable.  It does not exist.
+;; Forget about it.  Uh-huh.  Nope.  Nobody here.  It's only bound
+;; dynamically by certain functions in nndraft.
+(defvar nnmh-allow-delete-final nil)
 
 
 
@@ -77,8 +85,7 @@
 	   (large (and (numberp nnmail-large-newsgroup)
 		       (> number nnmail-large-newsgroup)))
 	   (count 0)
-	   (file-name-coding-system 'binary)
-	   (pathname-coding-system 'binary)
+	   (file-name-coding-system nnmail-pathname-coding-system)
 	   beg article)
       (nnmh-possibly-change-directory newsgroup server)
       ;; We don't support fetching by Message-ID.
@@ -106,7 +113,7 @@
 	  (and large
 	       (zerop (% count 20))
 	       (nnheader-message 5 "nnmh: Receiving headers... %d%%"
-			(/ (* count 100) number))))
+				 (/ (* count 100) number))))
 
 	(when large
 	  (nnheader-message 5 "nnmh: Receiving headers...done"))
@@ -137,8 +144,7 @@
   (let ((file (if (stringp id)
 		  nil
 		(concat nnmh-current-directory (int-to-string id))))
-	(pathname-coding-system 'binary)
-	(file-name-coding-system 'binary)
+	(file-name-coding-system nnmail-pathname-coding-system)
 	(nntp-server-buffer (or buffer nntp-server-buffer)))
     (and (stringp file)
 	 (file-exists-p file)
@@ -150,8 +156,7 @@
   (nnheader-init-server-buffer)
   (nnmh-possibly-change-directory group server)
   (let ((pathname (nnmail-group-pathname group nnmh-directory))
-	(pathname-coding-system 'binary)
-	(file-name-coding-system 'binary)
+	(file-name-coding-system nnmail-pathname-coding-system)
 	dir)
     (cond
      ((not (file-directory-p pathname))
@@ -174,16 +179,19 @@
 	       (mapcar (lambda (name) (string-to-int name))
 		       (directory-files pathname nil "^[0-9]+$" t))
 	       '<))
-	  (cond
-	   (dir
-	    (nnheader-report 'nnmh "Selected group %s" group)
-	    (nnheader-insert
-	     "211 %d %d %d %s\n" (length dir) (car dir)
-	     (progn (while (cdr dir) (setq dir (cdr dir))) (car dir))
-	     group))
-	   (t
-	    (nnheader-report 'nnmh "Empty group %s" group)
-	    (nnheader-insert (format "211 0 1 0 %s\n" group))))))))))
+	(cond
+	 (dir
+	  (setq nnmh-group-alist
+		(delq (assoc group nnmh-group-alist) nnmh-group-alist))
+	  (push (list group (cons (car dir) (car (last dir))))
+		nnmh-group-alist)
+	  (nnheader-report 'nnmh "Selected group %s" group)
+	  (nnheader-insert
+	   "211 %d %d %d %s\n" (length dir) (car dir)
+	   (car (last dir)) group))
+	 (t
+	  (nnheader-report 'nnmh "Empty group %s" group)
+	  (nnheader-insert (format "211 0 1 0 %s\n" group))))))))))
 
 (deffoo nnmh-request-scan (&optional group server)
   (nnmail-get-new-mail 'nnmh nil nnmh-directory group))
@@ -191,10 +199,9 @@
 (deffoo nnmh-request-list (&optional server dir)
   (nnheader-insert "")
   (nnmh-possibly-change-directory nil server)
-  (let* ((pathname-coding-system 'binary)
-	 (file-name-coding-system 'binary)
-	 (nnmh-toplev
-	  (file-truename (or dir (file-name-as-directory nnmh-directory)))))
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+	(nnmh-toplev
+	 (file-truename (or dir (file-name-as-directory nnmh-directory)))))
     (nnmh-request-list-1 nnmh-toplev))
   (setq nnmh-group-alist (nnmail-get-active))
   t)
@@ -233,8 +240,8 @@
 				(expand-file-name nnmh-toplev))))
 	       dir)
 	      (nnheader-replace-chars-in-string
-	       (gnus-decode-coding-string (substring dir (match-end 0))
-					  nnmail-pathname-coding-system)
+	       (mm-decode-coding-string (substring dir (match-end 0))
+					nnmail-pathname-coding-system)
 	       ?/ ?.))
 	    (apply 'max files)
 	    (apply 'min files)))))))
@@ -275,7 +282,7 @@
   t)
 
 (deffoo nnmh-request-move-article
-  (article group server accept-form &optional last)
+    (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnmh move*"))
 	result)
     (and
@@ -405,8 +412,7 @@
     (nnmh-open-server server))
   (when newsgroup
     (let ((pathname (nnmail-group-pathname newsgroup nnmh-directory))
-	  (file-name-coding-system 'binary)
-	  (pathname-coding-system 'binary))
+	  (file-name-coding-system nnmail-pathname-coding-system))
       (if (file-directory-p pathname)
 	  (setq nnmh-current-directory pathname)
 	(error "No such newsgroup: %s" newsgroup)))))
@@ -455,8 +461,8 @@
   "Compute the next article number in GROUP."
   (let ((active (cadr (assoc group nnmh-group-alist)))
 	(dir (nnmail-group-pathname group nnmh-directory))
-	(file-name-coding-system 'binary)
-	(pathname-coding-system 'binary))
+	(file-name-coding-system nnmail-pathname-coding-system)
+	file)
     (unless active
       ;; The group wasn't known to nnmh, so we just create an active
       ;; entry for it.
@@ -474,9 +480,15 @@
 	(when files
 	  (setcdr active (car files)))))
     (setcdr active (1+ (cdr active)))
-    (while (file-exists-p
-	    (concat (nnmail-group-pathname group nnmh-directory)
-		    (int-to-string (cdr active))))
+    (while (or
+	    ;; See whether the file exists...
+	    (file-exists-p
+	     (setq file (concat (nnmail-group-pathname group nnmh-directory)
+				(int-to-string (cdr active)))))
+	    ;; ... or there is a buffer that will make that file exist
+	    ;; in the future.
+	    (get-file-buffer file))
+      ;; Skip past that file.
       (setcdr active (1+ (cdr active))))
     (cdr active)))
 
@@ -539,7 +551,7 @@
     (setq articles (sort articles (lambda (art1 art2)
 				    (> (car art1) (car art2)))))
     ;; Finally write this list back to the .nnmh-articles file.
-    (nnheader-temp-write nnmh-file
+    (with-temp-file nnmh-file
       (insert ";; Gnus article active file for " group "\n\n")
       (insert "(setq nnmh-newsgroup-articles '")
       (gnus-prin1 articles)