(shr-insert): Get white space at the beginning/end of elements right.
[gnus] / lisp / nnml.el
index 8fca41e..b84ce51 100644 (file)
@@ -846,7 +846,9 @@ article number.  This function is called narrowed to an article."
     buffer))
 
 (defun nnml-open-nov (group)
-  (or (cdr (assoc group nnml-nov-buffer-alist))
+  (or (let ((buffer (cdr (assoc group nnml-nov-buffer-alist))))
+       (and (buffer-name buffer)
+            buffer))
       (let ((buffer (nnml-get-nov-buffer group)))
        (push (cons group buffer) nnml-nov-buffer-alist)
        buffer)))
@@ -878,6 +880,7 @@ article number.  This function is called narrowed to an article."
   ;; Save the active file.
   (nnmail-save-active nnml-group-alist nnml-active-file))
 
+(defvar nnml-files)
 (defun nnml-generate-nov-databases-directory (dir &optional seen no-active)
   "Regenerate the NOV database in DIR.
 
@@ -897,9 +900,9 @@ Unless no-active is non-nil, update the active file too."
                   (file-directory-p dir))
          (nnml-generate-nov-databases-directory dir seen)))
       ;; Do this directory.
-      (let ((files (sort (nnheader-article-to-file-alist dir)
+      (let ((nnml-files (sort (nnheader-article-to-file-alist dir)
                         'car-less-than-car)))
-       (if (not files)
+       (if (not nnml-files)
            (let* ((group (nnheader-file-to-group
                           (directory-file-name dir) nnml-directory))
                   (info (cadr (assoc group nnml-group-alist))))
@@ -907,11 +910,10 @@ Unless no-active is non-nil, update the active file too."
                (setcar info (1+ (cdr info)))))
          (funcall nnml-generate-active-function dir)
          ;; Generate the nov file.
-         (nnml-generate-nov-file dir files)
+         (nnml-generate-nov-file dir nnml-files)
          (unless no-active
            (nnmail-save-active nnml-group-alist nnml-active-file)))))))
 
-(defvar files)
 (defun nnml-generate-active-info (dir)
   ;; Update the active info for this group.
   (let ((group (directory-file-name dir))
@@ -922,9 +924,9 @@ Unless no-active is non-nil, update the active file too."
          last (or (caadr entry) 0)
          nnml-group-alist (delq entry nnml-group-alist))
     (push (list group
-               (cons (or (caar files) (1+ last))
+               (cons (or (caar nnml-files) (1+ last))
                      (max last
-                          (or (caar (last files))
+                          (or (caar (last nnml-files))
                               0))))
          nnml-group-alist)))
 
@@ -941,24 +943,24 @@ Unless no-active is non-nil, update the active file too."
       ;; Delete the old NOV file.
       (when (file-exists-p nov)
        (funcall nnmail-delete-file-function nov))
-      (while files
-       (unless (file-directory-p (setq file (concat dir (cdar files))))
-         (erase-buffer)
-         (nnheader-insert-file-contents file)
-         (narrow-to-region
-          (goto-char (point-min))
-          (progn
-            (re-search-forward "\n\r?\n" nil t)
-            (setq chars (- (point-max) (point)))
-            (max (point-min) (1- (point)))))
-         (unless (zerop (buffer-size))
-           (goto-char (point-min))
-           (setq headers (nnml-parse-head chars (caar files)))
-           (with-current-buffer nov-buffer
-             (goto-char (point-max))
-             (nnheader-insert-nov headers)))
-         (widen))
-       (setq files (cdr files)))
+      (dolist (file files)
+       (let ((path (concat dir (cdr file))))
+         (unless (file-directory-p path)
+           (erase-buffer)
+           (nnheader-insert-file-contents path)
+           (narrow-to-region
+            (goto-char (point-min))
+            (progn
+              (re-search-forward "\n\r?\n" nil t)
+              (setq chars (- (point-max) (point)))
+              (max (point-min) (1- (point)))))
+           (unless (zerop (buffer-size))
+             (goto-char (point-min))
+             (setq headers (nnml-parse-head chars (car file)))
+             (with-current-buffer nov-buffer
+               (goto-char (point-max))
+               (nnheader-insert-nov headers)))
+           (widen))))
       (with-current-buffer nov-buffer
        (nnmail-write-region (point-min) (point-max) nov nil 'nomesg)
        (kill-buffer (current-buffer))))))
@@ -995,11 +997,9 @@ Use the nov database for that directory if available."
     ;; build list from .overview if available
     ;; We would use nnml-open-nov, except that nnml-nov-buffer-alist is
     ;; defvoo'd, and we might get called when it hasn't been swapped in.
-    (save-excursion
+    (with-current-buffer (nnml-get-nov-buffer nnml-current-group)
       (let ((list nil)
-           art
-           (buffer (nnml-get-nov-buffer nnml-current-group)))
-       (set-buffer buffer)
+           art)
        (goto-char (point-min))
        (while (not (eobp))
          (setq art (read (current-buffer)))
@@ -1018,11 +1018,9 @@ Use the nov database for the current group if available."
                                  nnml-current-directory))))
       (nnheader-article-to-file-alist nnml-current-directory)
     ;; build list from .overview if available
-    (save-excursion
+    (with-current-buffer (nnml-get-nov-buffer nnml-current-group)
       (let ((alist nil)
-           (buffer (nnml-get-nov-buffer nnml-current-group))
            art)
-       (set-buffer buffer)
        (goto-char (point-min))
        (while (not (eobp))
          (setq art (read (current-buffer)))
@@ -1051,7 +1049,7 @@ Use the nov database for the current group if available."
     (nnml-save-marks group server))
   nil)
 
-(deffoo nnml-request-update-info (group info &optional server)
+(deffoo nnml-request-marks (group info &optional server)
   (nnml-possibly-change-directory group server)
   (when (and (not nnml-marks-is-evil) (nnml-marks-changed-p group server))
     (nnheader-message 8 "Updating marks for %s..." group)