*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 02:00:36 +0000 (02:00 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 02:00:36 +0000 (02:00 +0000)
lisp/ChangeLog
lisp/gnus-kill.el
lisp/gnus-msg.el [moved from lisp/gnus-message.el with 83% similarity]
lisp/gnus-score.el
lisp/gnus-uu.el
lisp/gnus-vis.el [moved from lisp/gnus-visual.el with 99% similarity]
lisp/gnus.el
lisp/nnfolder.el
lisp/nnmail.el
lisp/nnspool.el
texi/gnus.texi

index 028be5e..06afbfd 100644 (file)
@@ -1,4 +1,61 @@
-Wed Apr 26 15:57:28 1995  Lars Magne Ingebrigtsen  <larsi@gymir.ifi.uio.no>
+Fri Apr 28 00:24:34 1995  Lars Magne Ingebrigtsen  <larsi@gjalp.ifi.uio.no>
+
+       * gnus.el (gnus-set-mode-line): Would bug out on nil max-lens. 
+       (gnus-summary-read-group): Did not properly configure windows on
+       breaks. 
+
+Wed Apr 26 19:48:36 1995  Scott Byer  <byer@mv.us.adobe.com>
+
+       * gnus.el (gnus-group-get-new-news) Off by one with relation to
+        the fix in gnus-get-unread-articles.
+
+Thu Apr 27 23:46:32 1995  Lars Magne Ingebrigtsen  <larsi@gymir.ifi.uio.no>
+
+       * gnus.el (gnus-summary-next-article): Would bug out on nndigest
+       groups. 
+
+Thu Apr 27 13:45:21 1995  Scott Byer  <byer@mv.us.adobe.com>
+
+       * nnfolder.el (nnfolder-request-group) Fixed it so it returns an
+        active list even when the flag for not checking mail is t.
+
+       * gnus.el (gnus-get-unread-articles) Changed comparison with level
+        to < to fix fencepost error.  Forced active to nil in the case
+        where a foreign newsgroup shouldn't be activated.
+
+Wed Apr 26 19:48:36 1995  Scott Byer  <byer@mv.us.adobe.com>
+
+       * nnfolder.el (nnfolder-request-group) Small performance tweak.
+
+       * nnfolder.el (nnfolder-save-mail) Moved the code to kill previous
+        newsgroups headers into the loop, affects mail saved to multiple
+        folders so that they don't have multiple newsgroup markers
+        anymore.
+
+       * nnfolder.el (various) Made sure buffer needed saving before each
+        request.
+
+Thu Apr 27 22:34:13 1995  Lars Magne Ingebrigtsen  <larsi@gymir.ifi.uio.no>
+
+       * gnus.el (gnus-parse-newsrc-body): Would reverse the list of
+       groups if no .newsrc.eld file is present.
+       (gnus-parse-newsrc-body): Would subscribe unsubscribed groups.
+       (gnus-summary-mode-map): Many keymap changes.
+
+Thu Apr 27 21:45:05 1995  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus-msg.el (gnus-inews-organization): Use the standard work
+       buffer.
+       (gnus-post-news): Did not use followup-to.
+
+Thu Apr 27 12:38:41 1995  Lars Magne Ingebrigtsen  <larsi@bera.ifi.uio.no>
+
+       * gnus-kill.el (gnus-apply-kill-file-internal): Give abetter error
+       massage on rn kill files.
+
+       * gnus.el (gnus-article-de-quoted-unreadable): No interactive spec.
+
+Wed Apr 26 15:57:28 1995  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-message.el (gnus-inews-check-post): Would warn about too
        long lines when the last line didn't have a newline.
@@ -6,6 +63,8 @@ Wed Apr 26 15:57:28 1995  Lars Magne Ingebrigtsen  <larsi@gymir.ifi.uio.no>
        * gnus-score.el (gnus-score-string): Would loop forever on empty
        matches. 
 
+       * gnus.el: 0.60 is released.
+
 Wed Apr 26 15:08:00 1995  Lars Magne Ingebrigtsen  <larsi@gjalp.ifi.uio.no>
 
        * gnus.el (gnus-groups-to-gnus-format): Would ding on non-existant
index 2bcf86c..be0b37f 100644 (file)
@@ -372,6 +372,10 @@ Returns the number of articles marked as read."
                           (setq form (condition-case nil 
                                          (read (current-buffer)) 
                                        (error nil))))
+                   (or (listp form)
+                       (error 
+                        "Illegal kill entry (possibly rn kill file?): %s"
+                        form))
                    (if (or (eq (car form) 'gnus-kill)
                            (eq (car form) 'gnus-raise)
                            (eq (car form) 'gnus-lower))
similarity index 83%
rename from lisp/gnus-message.el
rename to lisp/gnus-msg.el
index c5815af..47c8ba9 100644 (file)
   (define-key gnus-summary-send-map "Om" 'gnus-uu-digest-mail-forward)
   (define-key gnus-summary-send-map "Op" 'gnus-uu-digest-post-forward)
 
+;;; Internal functions.
+
+;; Return NUM konverted to a key of exactly LEN chars.  Requires NUM>=0.
+;; If LEN=-1, return 0 or more chars as necessary.
+(defun gnus-number-base31 (num len)
+  (if (if (< len 0) (<= num 0) (= len 0))
+      ""
+    (concat (gnus-number-base31 (/ num 31) (1- len))
+           (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+                                 (% num 31))))))
+
+(defun gnus-number-base36 (num len)
+  (if (if (< len 0) (<= num 0) (= len 0))
+      ""
+    (concat (gnus-number-base36 (/ num 36) (1- len))
+           (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+                                 (% num 36))))))
+
 ;;; Post news commands of Gnus group mode and summary mode
 
 (defun gnus-group-post-news ()
@@ -254,7 +272,7 @@ Type \\[describe-mode] in the buffer to get a list of commands."
                               (save-excursion
                                 (set-buffer article-buffer)
                                 (funcall gnus-followup-to-function group)))))
-                (eq gnus-use-followup-to t)))
+                gnus-use-followup-to))
          (if post
              (progn
                (gnus-configure-windows '(1 0 0))
@@ -322,145 +340,140 @@ Type \\[describe-mode] in the buffer to get a list of commands."
 If given a prefix, and the group is a foreign group, this function
 will attempt to use the foreign server to post the article."
   (interactive "P")
-  ;; Check whether the article is a good Net Citizen.
-  (if (and gnus-article-check-size (not (gnus-inews-check-post)))
-      ;; Aber nein!
-      ()
-    ;; Looks ok, so we do the nasty.
-    (let* ((case-fold-search nil)
-          (server-running (gnus-server-opened gnus-select-method))
-          (reply gnus-article-reply))
-      (save-excursion
-       ;; Connect to default NNTP server if necessary.
-       ;; Suggested by yuki@flab.fujitsu.junet.
-       (gnus-start-news-server)        ;Use default server.
-       ;; NNTP server must be opened before current buffer is modified.
-       (widen)
+  (let* ((case-fold-search nil)
+        (server-running (gnus-server-opened gnus-select-method))
+        (reply gnus-article-reply))
+    (save-excursion
+      ;; Connect to default NNTP server if necessary.
+      ;; Suggested by yuki@flab.fujitsu.junet.
+      (gnus-start-news-server)         ;Use default server.
+      ;; NNTP server must be opened before current buffer is modified.
+      (widen)
+      (goto-char (point-min))
+      (run-hooks 'news-inews-hook)
+      (save-restriction
+       (narrow-to-region
+        (point-min)
+        (progn
+          (goto-char (point-min))
+          (re-search-forward 
+           (concat "^" (regexp-quote mail-header-separator) "$"))))
+
+       ;; Correct newsgroups field: change sequence of spaces to comma and 
+       ;; eliminate spaces around commas.  Eliminate imbedded line breaks.
        (goto-char (point-min))
-       (run-hooks 'news-inews-hook)
-       (save-restriction
-         (narrow-to-region
-          (point-min)
-          (progn
-            (goto-char (point-min))
-            (re-search-forward 
-             (concat "^" (regexp-quote mail-header-separator) "$"))))
-
-         ;; Correct newsgroups field: change sequence of spaces to comma and 
-         ;; eliminate spaces around commas.  Eliminate imbedded line breaks.
-         (goto-char (point-min))
-         (if (search-forward-regexp "^Newsgroups: +" nil t)
-             (save-restriction
-               (narrow-to-region
-                (point)
-                (if (re-search-forward "^[^ \t]" nil 'end)
-                    (match-beginning 0)
-                  (point-max)))
-               (goto-char (point-min))
-               (replace-regexp "\n[ \t]+" " ") ;No line breaks (too confusing)
-               (goto-char (point-min))
-               (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ",")))
-
-         ;; Added by Per Abrahamsen <abraham@iesd.auc.dk>.
-         ;; Help save the the world!
-         (or 
-          gnus-expert-user
-          (let ((newsgroups (mail-fetch-field "newsgroups"))
-                (followup-to (mail-fetch-field "followup-to"))
-                groups to)
-            (if (and (string-match "," newsgroups) (not followup-to))
-                (progn
-                  (while (string-match "," newsgroups)
-                    (setq groups
-                          (cons (list (substring newsgroups
-                                                 0 (match-beginning 0)))
-                                groups))
-                    (setq newsgroups (substring newsgroups (match-end 0))))
-                  (setq groups (nreverse (cons (list newsgroups) groups)))
-
-                  (setq to
-                        (completing-read "Followups to: (default all groups) "
-                                         groups))
-                  (if (> (length to) 0)
-                      (progn
-                        (goto-char (point-min))
-                        (insert "Followup-To: " to "\n")))))))
+       (if (search-forward-regexp "^Newsgroups: +" nil t)
+           (save-restriction
+             (narrow-to-region
+              (point)
+              (if (re-search-forward "^[^ \t]" nil 'end)
+                  (match-beginning 0)
+                (point-max)))
+             (goto-char (point-min))
+             (replace-regexp "\n[ \t]+" " ") ;No line breaks (too confusing)
+             (goto-char (point-min))
+             (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ",")))
+
+       ;; Added by Per Abrahamsen <abraham@iesd.auc.dk>.
+       ;; Help save the the world!
+       (or 
+        gnus-expert-user
+        (let ((newsgroups (mail-fetch-field "newsgroups"))
+              (followup-to (mail-fetch-field "followup-to"))
+              groups to)
+          (if (and (string-match "," newsgroups) (not followup-to))
+              (progn
+                (while (string-match "," newsgroups)
+                  (setq groups
+                        (cons (list (substring newsgroups
+                                               0 (match-beginning 0)))
+                              groups))
+                  (setq newsgroups (substring newsgroups (match-end 0))))
+                (setq groups (nreverse (cons (list newsgroups) groups)))
+
+                (setq to
+                      (completing-read "Followups to: (default all groups) "
+                                       groups))
+                (if (> (length to) 0)
+                    (progn
+                      (goto-char (point-min))
+                      (insert "Followup-To: " to "\n")))))))
+
+       ;; Cleanup Followup-To.
+       (goto-char (point-min))
+       (if (search-forward-regexp "^Followup-To: +" nil t)
+           (save-restriction
+             (narrow-to-region
+              (point)
+              (if (re-search-forward "^[^ \t]" nil 'end)
+                  (match-beginning 0)
+                (point-max)))
+             (goto-char (point-min))
+             (replace-regexp "\n[ \t]+" " ") ;No line breaks (too confusing)
+             (goto-char (point-min))
+             (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ",")))
 
-         ;; Cleanup Followup-To.
-         (goto-char (point-min))
-         (if (search-forward-regexp "^Followup-To: +" nil t)
-             (save-restriction
-               (narrow-to-region
-                (point)
-                (if (re-search-forward "^[^ \t]" nil 'end)
-                    (match-beginning 0)
-                  (point-max)))
-               (goto-char (point-min))
-               (replace-regexp "\n[ \t]+" " ") ;No line breaks (too confusing)
-               (goto-char (point-min))
-               (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ",")))
-
-         ;; Mail the message too if To:, Bcc:. or Cc: exists.
-         (if (or (mail-fetch-field "to" nil t)
-                 (mail-fetch-field "bcc" nil t)
-                 (mail-fetch-field "cc" nil t))
-             (if gnus-mail-send-method
-                 (save-excursion
-                   (save-restriction
-                     (widen)
-                     (message "Sending via mail...")
+       ;; Mail the message too if To:, Bcc:. or Cc: exists.
+       (if (or (mail-fetch-field "to" nil t)
+               (mail-fetch-field "bcc" nil t)
+               (mail-fetch-field "cc" nil t))
+           (if gnus-mail-send-method
+               (save-excursion
+                 (save-restriction
+                   (widen)
+                   (message "Sending via mail...")
                      
-                     (if gnus-mail-courtesy-message
-                         (progn
-                           ;; Insert "courtesy" mail message.
-                           (goto-char 1)
-                           (re-search-forward
-                            (concat "^" (regexp-quote
-                                         mail-header-separator) "$"))
-                           (forward-line 1)
-                           (insert gnus-mail-courtesy-message)
-                           (funcall gnus-mail-send-method)
-                           (goto-char 1)
-                           (search-forward gnus-mail-courtesy-message)
-                           (replace-match "" t t))
-                       (funcall gnus-mail-send-method))
-
-                     (message "Sending via mail... done")
+                   (if gnus-mail-courtesy-message
+                       (progn
+                         ;; Insert "courtesy" mail message.
+                         (goto-char 1)
+                         (re-search-forward
+                          (concat "^" (regexp-quote
+                                       mail-header-separator) "$"))
+                         (forward-line 1)
+                         (insert gnus-mail-courtesy-message)
+                         (funcall gnus-mail-send-method)
+                         (goto-char 1)
+                         (search-forward gnus-mail-courtesy-message)
+                         (replace-match "" t t))
+                     (funcall gnus-mail-send-method))
+
+                   (message "Sending via mail... done")
                      
-                     (goto-char 1)
-                     (narrow-to-region
-                      1 (re-search-forward 
-                         (concat "^" (regexp-quote 
-                                      mail-header-separator) "$")))
-                     (goto-char 1)
-                     (delete-matching-lines "BCC:.*")))
-               (ding)
-               (message "No mailer defined.  To: and/or Cc: fields ignored.")
-               (sit-for 1))))
-
-       ;; Send to NNTP server. 
-       (message "Posting to USENET...")
-       (if (gnus-inews-article use-group-method)
-           (progn
-             (message "Posting to USENET... done")
-             (if (gnus-buffer-exists-p (car-safe reply))
-                 (progn
-                   (save-excursion
-                     (set-buffer gnus-summary-buffer)
-                     (gnus-summary-mark-article-as-replied 
-                      (cdr reply))))))
-         ;; We cannot signal an error.
-         (ding) (message "Article rejected: %s" 
-                         (gnus-status-message gnus-select-method)))
-       (set-buffer-modified-p nil))
-      ;; If NNTP server is opened by gnus-inews-news, close it by myself.
-      (or server-running
-         (gnus-close-server (gnus-find-method-for-group gnus-newsgroup-name)))
-      (and (fboundp 'bury-buffer) (bury-buffer))
-      ;; Restore last window configuration.
-      (and gnus-winconf-post-news
-          (set-window-configuration gnus-winconf-post-news))
-      (setq gnus-winconf-post-news nil))))
+                   (goto-char 1)
+                   (narrow-to-region
+                    1 (re-search-forward 
+                       (concat "^" (regexp-quote 
+                                    mail-header-separator) "$")))
+                   (goto-char 1)
+                   (delete-matching-lines "BCC:.*")))
+             (ding)
+             (message "No mailer defined.  To: and/or Cc: fields ignored.")
+             (sit-for 1))))
+
+      ;; Send to NNTP server. 
+      (message "Posting to USENET...")
+      (if (gnus-inews-article use-group-method)
+         (progn
+           (message "Posting to USENET... done")
+           (if (gnus-buffer-exists-p (car-safe reply))
+               (progn
+                 (save-excursion
+                   (set-buffer gnus-summary-buffer)
+                   (gnus-summary-mark-article-as-replied 
+                    (cdr reply))))))
+       ;; We cannot signal an error.
+       (ding) (message "Article rejected: %s" 
+                       (gnus-status-message gnus-select-method)))
+      (set-buffer-modified-p nil))
+    ;; If NNTP server is opened by gnus-inews-news, close it by myself.
+    (or server-running
+       (gnus-close-server (gnus-find-method-for-group gnus-newsgroup-name)))
+    (and (fboundp 'bury-buffer) (bury-buffer))
+    ;; Restore last window configuration.
+    (and gnus-winconf-post-news
+        (set-window-configuration gnus-winconf-post-news))
+    (setq gnus-winconf-post-news nil)))
 
 (defun gnus-inews-check-post ()
   "Check whether the post looks ok."
@@ -621,51 +634,56 @@ will attempt to use the foreign server to post the article."
 
 (defun gnus-inews-article (&optional use-group-method)
   "Post an article in current buffer using NNTP protocol."
-  (let ((artbuf (current-buffer))
-       (tmpbuf (get-buffer-create " *Gnus-posting*")))
-    (widen)
-    (goto-char (point-max))
-    ;; require a newline at the end for inews to append .signature to
-    (or (= (preceding-char) ?\n)
-       (insert ?\n))
-    ;; Prepare article headers.  All message body such as signature
-    ;; must be inserted before Lines: field is prepared.
-    (save-restriction
-      (goto-char (point-min))
-      (narrow-to-region 
-       (point-min) 
-       (save-excursion
-        (re-search-forward 
-         (concat "^" (regexp-quote mail-header-separator) "$"))
-        (match-beginning 0)))
-      (gnus-inews-remove-headers)
-      (gnus-inews-insert-headers)
-      (run-hooks gnus-inews-article-header-hook)
-      (widen))
-    (save-excursion
-      (set-buffer tmpbuf)
-      (buffer-disable-undo (current-buffer))
-      (erase-buffer)
-      (insert-buffer-substring artbuf)
-      ;; Remove the header separator.
-      (goto-char (point-min))
-      (re-search-forward
-       (concat "^" (regexp-quote mail-header-separator) "$"))
-      (replace-match "" t t)
-      ;; This hook may insert a signature.
-      (run-hooks 'gnus-prepare-article-hook)
-      ;; Run final inews hooks.  This hook may do FCC.
-      ;; The article must be saved before being posted because
-      ;; `gnus-request-post' modifies the buffer.
-      (run-hooks 'gnus-inews-article-hook)
-      ;; Post an article to NNTP server.
-      ;; Return NIL if post failed.
-      (prog1
-         (gnus-request-post 
-          (if use-group-method
-              (gnus-find-method-for-group gnus-newsgroup-name)
-            gnus-select-method) use-group-method)
-       (kill-buffer (current-buffer))))))
+  ;; Check whether the article is a good Net Citizen.
+  (if (and gnus-article-check-size (not (gnus-inews-check-post)))
+      ;; Aber nein!
+      ()
+    ;; Looks ok, so we do the nasty.
+    (let ((artbuf (current-buffer))
+         (tmpbuf (get-buffer-create " *Gnus-posting*")))
+      (widen)
+      (goto-char (point-max))
+      ;; require a newline at the end for inews to append .signature to
+      (or (= (preceding-char) ?\n)
+         (insert ?\n))
+      ;; Prepare article headers.  All message body such as signature
+      ;; must be inserted before Lines: field is prepared.
+      (save-restriction
+       (goto-char (point-min))
+       (narrow-to-region 
+        (point-min) 
+        (save-excursion
+          (re-search-forward 
+           (concat "^" (regexp-quote mail-header-separator) "$"))
+          (match-beginning 0)))
+       (gnus-inews-remove-headers)
+       (gnus-inews-insert-headers)
+       (run-hooks gnus-inews-article-header-hook)
+       (widen))
+      (save-excursion
+       (set-buffer tmpbuf)
+       (buffer-disable-undo (current-buffer))
+       (erase-buffer)
+       (insert-buffer-substring artbuf)
+       ;; Remove the header separator.
+       (goto-char (point-min))
+       (re-search-forward
+        (concat "^" (regexp-quote mail-header-separator) "$"))
+       (replace-match "" t t)
+       ;; This hook may insert a signature.
+       (run-hooks 'gnus-prepare-article-hook)
+       ;; Run final inews hooks.  This hook may do FCC.
+       ;; The article must be saved before being posted because
+       ;; `gnus-request-post' modifies the buffer.
+       (run-hooks 'gnus-inews-article-hook)
+       ;; Post an article to NNTP server.
+       ;; Return NIL if post failed.
+       (prog1
+           (gnus-request-post 
+            (if use-group-method
+                (gnus-find-method-for-group gnus-newsgroup-name)
+              gnus-select-method) use-group-method)
+         (kill-buffer (current-buffer)))))))
 
 (defun gnus-inews-remove-headers ()
   (let ((case-fold-search t))
@@ -960,9 +978,41 @@ domain is undefined, the domain name is got from it."
   "Generate unique ID from user name and current time."
   (concat (downcase (gnus-inews-login-name))
          (mapconcat 
-          (lambda (num) (gnus-number-base-x num 3 31))
+          (lambda (num) (gnus-number-base31 num 3))
           (current-time) "")))
 
+
+(defvar gnus-unique-id-char nil)
+
+;; If you ever change this function, make sure the new version
+;; cannot generate IDs that the old version could.
+;; You might for example insert a "." somewhere (not next to another dot
+;; or string boundary), or modify the newsreader name to "Ding".
+(defun gnus-inews-unique-id-new ()
+  ;; Dont use microseconds from (current-time), they may be unsupported.
+  ;; Instead we use this randomly inited counter.
+  (setq gnus-unique-id-char
+       (% (1+ (or gnus-unique-id-char (logand (random t) (1- (lsh 1 20)))))
+          ;; (current-time) returns 16-bit ints,
+          ;; and 2^16*25 just fits into 4 digits i base 36.
+          (* 25 25)))
+  (let ((tm (if (fboundp 'current-time)
+               (current-time) '(12191 46742 287898))))
+    (concat
+     (if (memq system-type '(ms-dos emx vax-vms))
+        (let ((user (downcase (gnus-inews-login-name))))
+          (while (string-match "[^a-z0-9_]" user)
+            (aset user (match-beginning 0) ?_))
+          user)
+       (gnus-number-base36 (user-uid) -1))
+     (gnus-number-base36 (+ (car   tm) (lsh (% gnus-unique-id-char 25) 16)) 4)
+     (gnus-number-base36 (+ (nth 1 tm) (lsh (/ gnus-unique-id-char 25) 16)) 4)
+     ;; Append the newsreader name, because while the generated
+     ;; ID is unique to this newsreader, other newsreaders might
+     ;; otherwise generate the same ID via another algorithm.
+     ".DING")))
+
+
 (defun gnus-inews-date ()
   "Current time string."
   (timezone-make-date-arpa-standard 
@@ -991,9 +1041,7 @@ organization."
             (string-match " " organization)
             (not (string-match  "^/[^/]+/" (expand-file-name organization))))
         (save-excursion
-          (set-buffer (get-buffer-create " *Gnus organization*"))
-          (buffer-disable-undo (current-buffer))
-          (erase-buffer)
+          (gnus-set-work-buffer)
           (if (file-exists-p organization)
               (insert-file-contents organization)
             (insert organization))
@@ -1258,6 +1306,6 @@ mailer."
   (use-local-map (copy-keymap (current-local-map)))
   (local-set-key "\C-c\C-c" 'gnus-mail-send-and-exit))
 
-(provide 'gnus-message)
+(provide 'gnus-msg)
 
 ;;; gnus-message.el ends here
index 3d230db..dd9920d 100644 (file)
@@ -647,7 +647,7 @@ See `gnus-score-expiry-days'."
          (read-only (gnus-score-get 'read-only alist))
          (files (gnus-score-get 'files alist))
          (exclude-files (gnus-score-get 'exclude-files alist))
-          (orphan (gnus-score-get 'orphan alist))
+          (orphan (car (gnus-score-get 'orphan alist)))
          (adapt (gnus-score-get 'adapt alist))
          (eval (gnus-score-get 'eval alist)))
       ;; We do not respect eval and files atoms from global score
@@ -661,9 +661,9 @@ See `gnus-score-expiry-days'."
       (setq gnus-scores-exclude-files exclude-files)
       (if orphan (setq gnus-orphan-score (car orphan)))
       (setq gnus-adaptive-score-alist
-           (cond ((eq adapt t)
+           (cond ((equal adapt '(t))
                   gnus-default-adaptive-score-alist)
-                 ((eq adapt 'ignore)
+                 ((equal adapt '(ignore))
                   nil)
                  ((consp adapt)
                   adapt)))
@@ -785,7 +785,7 @@ See `gnus-score-expiry-days'."
                  (gnus-score-get 'read-only score)
                  (not (file-writable-p file)))
              ()
-           (setq score (delq (assq 'touched score) score))
+           (setq score (setcdr entry (delq (assq 'touched score) score)))
            (erase-buffer)
            (let (emacs-lisp-mode-hook)
              (pp score (current-buffer)))
@@ -1470,4 +1470,4 @@ This mode is an extended emacs-lisp mode.
 
 (provide 'gnus-score)
 
-;;; gnus-score.el ends here
\ No newline at end of file
+;;; gnus-score.el ends here
index 5a21951..c0bd5e1 100644 (file)
@@ -27,7 +27,7 @@
 ;;; Code: 
 
 (require 'gnus)
-(require 'gnus-message)
+(require 'gnus-msg)
 
 ;; Default viewing action rules
 
@@ -1074,7 +1074,7 @@ so I simply dropped them.")
 
 (defun gnus-uu-part-number (article)
   (let ((subject (header-subject (gnus-get-header-by-number article))))
-    (if (string-match "([0-9]+ */[0-9]+)\\|([0-9]+ * of *[0-9]+)"
+    (if (string-match "[0-9]+ */[0-9]+\\|[0-9]+ * of *[0-9]+"
                      subject)
        (substring subject (match-beginning 0) (match-end 0))
       "")))
similarity index 99%
rename from lisp/gnus-visual.el
rename to lisp/gnus-vis.el
index df9e5b8..bef0c25 100644 (file)
@@ -495,6 +495,6 @@ To check for marks, e.g. to underline replied articles, use
           (easy-menu-add gnus-article-treatment-menu)) 
         gnus-article-mode-hook)))
 
-(provide 'gnus-visual)
+(provide 'gnus-vis)
 
 ;;; gnus-visual.el ends here
index 9249b50..ebfa395 100644 (file)
@@ -1314,7 +1314,7 @@ variable (string, integer, character, etc).")
 (defconst gnus-maintainer "Lars Magne Ingebrigtsen <larsi@ifi.uio.no>"
   "The mail address of the Gnus maintainer.")
 
-(defconst gnus-version "(ding) Gnus v0.60"
+(defconst gnus-version "(ding) Gnus v0.61"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -1519,7 +1519,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
   (autoload 'mail-setup "sendmail")
   (autoload 'news-mail-other-window "rnewspost")
   (autoload 'news-reply-yank-original "rnewspost")
-  
+  (autoload 'news-caesar-buffer-body "rnewspost")
+
   (autoload 'rmail-insert-rmail-file-header "rmail")
   (autoload 'rmail-count-new-messages "rmail")
   (autoload 'rmail-show-message "rmail")
@@ -1531,11 +1532,11 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
   (autoload 'gnus-Folder-save-name "gnus-mh")
   (autoload 'gnus-folder-save-name "gnus-mh")
   
-  (autoload 'gnus-group-make-menu-bar "gnus-visual")
-  (autoload 'gnus-summary-make-menu-bar "gnus-visual")
-  (autoload 'gnus-article-make-menu-bar "gnus-visual")
-  (autoload 'gnus-visual-highlight-selected-summary "gnus-visual")
-  (autoload 'gnus-visual-summary-highlight-line "gnus-visual")
+  (autoload 'gnus-group-make-menu-bar "gnus-vis")
+  (autoload 'gnus-summary-make-menu-bar "gnus-vis")
+  (autoload 'gnus-article-make-menu-bar "gnus-vis")
+  (autoload 'gnus-visual-highlight-selected-summary "gnus-vis")
+  (autoload 'gnus-visual-summary-highlight-line "gnus-vis")
 
   (autoload 'gnus-uu-mark-by-regexp "gnus-uu" nil t)
   (autoload 'gnus-uu-mark-region "gnus-uu" nil t)
@@ -1584,27 +1585,27 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
   (autoload 'gnus-score-adaptive "gnus-score")
   (autoload 'gnus-score-remove-lines-adaptive "gnus-score")
 
-  (autoload 'gnus-summary-send-map "gnus-message" nil nil 'keymap)
-  (autoload 'gnus-group-post-news "gnus-message" nil t)
-  (autoload 'gnus-summary-post-news "gnus-message" nil t)
-  (autoload 'gnus-summary-followup "gnus-message" nil t)
-  (autoload 'gnus-summary-followup-with-original "gnus-message" nil t)
-  (autoload 'gnus-summary-followup-and-reply "gnus-message" nil t)
-  (autoload 'gnus-summary-followup-and-reply-with-original "gnus-message" nil t)
-  (autoload 'gnus-summary-cancel-article "gnus-message" nil t)
-  (autoload 'gnus-summary-supersede-article "gnus-message" nil t)
-  (autoload 'gnus-post-news "gnus-message" nil t)
-  (autoload 'gnus-inews-news "gnus-message" nil t)
-  (autoload 'gnus-cancel-news "gnus-message" nil t)
-  (autoload 'gnus-summary-reply "gnus-message" nil t)
-  (autoload 'gnus-summary-reply-with-original "gnus-message" nil t)
-  (autoload 'gnus-summary-mail-forward "gnus-message" nil t)
-  (autoload 'gnus-summary-mail-other-window "gnus-message" nil t)
-  (autoload 'gnus-mail-reply-using-mail "gnus-message")
-  (autoload 'gnus-mail-yank-original "gnus-message")
-  (autoload 'gnus-mail-send-and-exit "gnus-message")
-  (autoload 'gnus-mail-forward-using-mail "gnus-message")
-  (autoload 'gnus-mail-other-window-using-mail "gnus-message")
+  (autoload 'gnus-summary-send-map "gnus-msg" nil nil 'keymap)
+  (autoload 'gnus-group-post-news "gnus-msg" nil t)
+  (autoload 'gnus-summary-post-news "gnus-msg" nil t)
+  (autoload 'gnus-summary-followup "gnus-msg" nil t)
+  (autoload 'gnus-summary-followup-with-original "gnus-msg" nil t)
+  (autoload 'gnus-summary-followup-and-reply "gnus-msg" nil t)
+  (autoload 'gnus-summary-followup-and-reply-with-original "gnus-msg" nil t)
+  (autoload 'gnus-summary-cancel-article "gnus-msg" nil t)
+  (autoload 'gnus-summary-supersede-article "gnus-msg" nil t)
+  (autoload 'gnus-post-news "gnus-msg" nil t)
+  (autoload 'gnus-inews-news "gnus-msg" nil t)
+  (autoload 'gnus-cancel-news "gnus-msg" nil t)
+  (autoload 'gnus-summary-reply "gnus-msg" nil t)
+  (autoload 'gnus-summary-reply-with-original "gnus-msg" nil t)
+  (autoload 'gnus-summary-mail-forward "gnus-msg" nil t)
+  (autoload 'gnus-summary-mail-other-window "gnus-msg" nil t)
+  (autoload 'gnus-mail-reply-using-mail "gnus-msg")
+  (autoload 'gnus-mail-yank-original "gnus-msg")
+  (autoload 'gnus-mail-send-and-exit "gnus-msg")
+  (autoload 'gnus-mail-forward-using-mail "gnus-msg")
+  (autoload 'gnus-mail-other-window-using-mail "gnus-msg")
 
   )
 
@@ -2491,17 +2492,6 @@ If nothing is specified, use the variable gnus-overload-functions."
       (yes-or-no-p prompt)
     (message "")))
 
-;; Return a string of length POS+1 representing NUMber in reverse
-;; BASE. The resulting string will be left padded with zeds.
-(defun gnus-number-base-x (num pos base)
-  (if (< pos 0)
-      ""
-    (concat 
-     (char-to-string
-      (aref "zyxwvutsrqponmlkjihgfedcba9876543210" (/ num (expt base pos))))
-     (gnus-number-base-x 
-      (% num (expt base pos)) (1- pos) base))))
-
 ;; Check whether to use long file names.
 (defun gnus-use-long-file-name (symbol)
   ;; The variable has to be set...
@@ -3325,6 +3315,7 @@ If VISIBLE-ONLY is non-nil, the group won't be displayed if it isn't already."
          (or visible-only
              (let ((entry (cdr (gnus-gethash group gnus-newsrc-hashtb))))
                (while (and entry
+                           (car entry)
                            (not
                             (gnus-goto-char
                              (text-property-any
@@ -3593,10 +3584,10 @@ ADDRESS."
 (defun gnus-group-edit-group (group &optional part)
   "Edit the group on the current line."
   (interactive (list (gnus-group-group-name)))
-  (let ((done-func (lambda () 
-                    "Exit editing mode and update the information."
-                    (interactive)
-                    (gnus-group-edit-group-done 'part 'group)))
+  (let ((done-func '(lambda () 
+                     "Exit editing mode and update the information."
+                     (interactive)
+                     (gnus-group-edit-group-done 'part 'group)))
        (part (or part 'info))
        info)
     (if group (setq info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
@@ -4037,15 +4028,16 @@ If ARG is non-nil, it should be a number between one and nine to
 specify which levels you are interested in re-scanning."
   (interactive "P")
   (run-hooks 'gnus-get-new-news-hook)
-  (if (and gnus-read-active-file (not arg))
-      (progn
-       (gnus-read-active-file)
-       (gnus-get-unread-articles (or arg (1+ gnus-level-subscribed))))
-    (let ((gnus-read-active-file nil))
-      (gnus-get-unread-articles (or arg (1+ gnus-level-subscribed)))))
-  (gnus-group-list-groups 
-   (or gnus-group-always-list-unread arg gnus-level-subscribed)
-   gnus-have-all-newsgroups))
+  (let ((level arg))
+    (if (and gnus-read-active-file (not level))
+       (progn
+         (gnus-read-active-file)
+         (gnus-get-unread-articles (or level (1+ gnus-level-subscribed))))
+      (let ((gnus-read-active-file nil))
+       (gnus-get-unread-articles (or level (1+ gnus-level-subscribed)))))
+    (gnus-group-list-groups 
+     (or gnus-group-always-list-unread level gnus-level-subscribed)
+     gnus-have-all-newsgroups)))
 
 (defun gnus-group-get-new-news-this-group (n)
   "Check for newly arrived news in the current group (and the N-1 next groups).
@@ -4533,8 +4525,10 @@ and the second element is the address."
 (defvar gnus-summary-interest-map nil)
 (defvar gnus-summary-process-map nil)
 (defvar gnus-summary-sort-map nil)
-(defvar gnus-summary-mgroup-map nil)
-(defvar gnus-summary-vsave-map nil)
+(defvar gnus-summary-backend-map nil)
+(defvar gnus-summary-save-map nil)
+(defvar gnus-summary-wash-map nil)
+(defvar gnus-summary-help-map nil)
 
 (put 'gnus-summary-mode 'mode-class 'special)
 
@@ -4725,6 +4719,8 @@ and the second element is the address."
   (define-key gnus-summary-exit-map "Q" 'gnus-summary-exit)
   (define-key gnus-summary-exit-map "Z" 'gnus-summary-exit)
   (define-key gnus-summary-exit-map "n" 'gnus-summary-catchup-and-goto-next-group)
+  (define-key gnus-summary-exit-map "R" 'gnus-summary-reselect-current-group)
+  (define-key gnus-summary-exit-map "G" 'gnus-summary-rescan-group)
 
 
   (define-prefix-command 'gnus-summary-article-map)
@@ -4744,21 +4740,54 @@ and the second element is the address."
   (define-key gnus-summary-article-map "c" 'gnus-summary-caesar-message)
   (define-key gnus-summary-article-map "g" 'gnus-summary-show-article)
   (define-key gnus-summary-article-map "t" 'gnus-summary-toggle-header)
-  (define-key gnus-summary-article-map "hh" 'gnus-article-hide-headers)
-  (define-key gnus-summary-article-map "hs" 'gnus-article-hide-signature)
-  (define-key gnus-summary-article-map "hc" 'gnus-article-hide-citation)
-  (define-key gnus-summary-article-map "ho" 'gnus-article-treat-overstrike)
-  (define-key gnus-summary-article-map "hw" 'gnus-article-word-wrap)
-  (define-key gnus-summary-article-map "hd" 'gnus-article-remove-cr)
-  (define-key gnus-summary-article-map "hq" 'gnus-article-de-quoted-unreadable)
-  (define-key gnus-summary-article-map "hf" 'gnus-article-display-x-face)
-  (define-key gnus-summary-article-map "ht" 'gnus-article-date-ut)
-  (define-key gnus-summary-article-map "h\C-t" 'gnus-article-date-local)
-  (define-key gnus-summary-article-map "hT" 'gnus-article-date-lapsed)
   (define-key gnus-summary-article-map "m" 'gnus-summary-toggle-mime)
   (define-key gnus-summary-article-map "s" 'gnus-summary-isearch-article)
 
 
+  (define-prefix-command 'gnus-summary-wash-map)
+  (define-key gnus-summary-mode-map "W" 'gnus-summary-wash-map)
+  (define-key gnus-summary-wash-map "h" 'gnus-article-hide-headers)
+  (define-key gnus-summary-wash-map "s" 'gnus-article-hide-signature)
+  (define-key gnus-summary-wash-map "c" 'gnus-article-hide-citation)
+  (define-key gnus-summary-wash-map "o" 'gnus-article-treat-overstrike)
+  (define-key gnus-summary-wash-map "w" 'gnus-article-word-wrap)
+  (define-key gnus-summary-wash-map "d" 'gnus-article-remove-cr)
+  (define-key gnus-summary-wash-map "q" 'gnus-article-de-quoted-unreadable)
+  (define-key gnus-summary-wash-map "f" 'gnus-article-display-x-face)
+  (define-key gnus-summary-wash-map "t" 'gnus-article-date-ut)
+  (define-key gnus-summary-wash-map "\C-t" 'gnus-article-date-local)
+  (define-key gnus-summary-wash-map "T" 'gnus-article-date-lapsed)
+
+
+  (define-prefix-command 'gnus-summary-help-map)
+  (define-key gnus-summary-mode-map "H" 'gnus-summary-help-map)
+  (define-key gnus-summary-help-map "v" 'gnus-version)
+  (define-key gnus-summary-help-map "f" 'gnus-summary-fetch-faq)
+  (define-key gnus-summary-help-map "d" 'gnus-summary-describe-group)
+  (define-key gnus-summary-help-map "h" 'gnus-summary-describe-briefly)
+  (define-key gnus-summary-help-map "i" 'gnus-info-find-node)
+
+
+  (define-prefix-command 'gnus-summary-backend-map)
+  (define-key gnus-summary-mode-map "B" 'gnus-summary-backend-map)
+  (define-key gnus-summary-backend-map "e" 'gnus-summary-expire-articles)
+  (define-key gnus-summary-backend-map "\177" 'gnus-summary-delete-article)
+  (define-key gnus-summary-backend-map "m" 'gnus-summary-move-article)
+  (define-key gnus-summary-backend-map "r" 'gnus-summary-respool-article)
+  (define-key gnus-summary-backend-map "w" 'gnus-summary-edit-article)
+  (define-key gnus-summary-backend-map "c" 'gnus-summary-copy-article)
+
+
+  (define-prefix-command 'gnus-summary-save-map)
+  (define-key gnus-summary-mode-map "O" 'gnus-summary-save-map)
+  (define-key gnus-summary-save-map "o" 'gnus-summary-save-article)
+  (define-key gnus-summary-save-map "m" 'gnus-summary-save-article-mail)
+  (define-key gnus-summary-save-map "r" 'gnus-summary-save-article-rmail)
+  (define-key gnus-summary-save-map "f" 'gnus-summary-save-article-file)
+  (define-key gnus-summary-save-map "h" 'gnus-summary-save-article-folder)
+  (define-key gnus-summary-save-map "p" 'gnus-summary-pipe-output)
+
+
   (define-prefix-command 'gnus-summary-extract-map)
   (define-key gnus-summary-mode-map "X" 'gnus-summary-extract-map)
 ;  (define-key gnus-summary-extract-map "x" 'gnus-summary-extract-any)
@@ -4798,26 +4827,10 @@ and the second element is the address."
   (define-key gnus-summary-various-map "&" 'gnus-summary-execute-command)
   (define-key gnus-summary-various-map "T" 'gnus-summary-toggle-truncation)
   (define-key gnus-summary-various-map "e" 'gnus-summary-expand-window)
-  (define-key gnus-summary-various-map "S" 'gnus-summary-reselect-current-group)
-  (define-key gnus-summary-various-map "g" 'gnus-summary-rescan-group)
-  (define-key gnus-summary-various-map "V" 'gnus-version)
-  (define-key gnus-summary-various-map "f" 'gnus-summary-fetch-faq)
-  (define-key gnus-summary-various-map "d" 'gnus-summary-describe-group)
-  (define-key gnus-summary-various-map "?" 'gnus-summary-describe-briefly)
-  (define-key gnus-summary-various-map "i" 'gnus-info-find-node)
   (define-key gnus-summary-various-map "D" 'gnus-summary-enter-digest-group)
   (define-key gnus-summary-various-map "k" 'gnus-summary-edit-local-kill)
   (define-key gnus-summary-various-map "K" 'gnus-summary-edit-global-kill)
 
-  (define-prefix-command 'gnus-summary-vsave-map)
-  (define-key gnus-summary-various-map "o" 'gnus-summary-vsave-map)
-  (define-key gnus-summary-vsave-map "o" 'gnus-summary-save-article)
-  (define-key gnus-summary-vsave-map "m" 'gnus-summary-save-article-mail)
-  (define-key gnus-summary-vsave-map "r" 'gnus-summary-save-article-rmail)
-  (define-key gnus-summary-vsave-map "f" 'gnus-summary-save-article-file)
-  (define-key gnus-summary-vsave-map "h" 'gnus-summary-save-article-folder)
-  (define-key gnus-summary-vsave-map "p" 'gnus-summary-pipe-output)
-
   (define-key gnus-summary-various-map "S" 'gnus-summary-score-map)
 
   (define-prefix-command 'gnus-summary-sort-map)
@@ -4828,15 +4841,6 @@ and the second element is the address."
   (define-key gnus-summary-sort-map "d" 'gnus-summary-sort-by-date)
   (define-key gnus-summary-sort-map "i" 'gnus-summary-sort-by-score)
 
-  (define-prefix-command 'gnus-summary-mgroup-map)
-  (define-key gnus-summary-various-map "m" 'gnus-summary-mgroup-map)
-  (define-key gnus-summary-mgroup-map "e" 'gnus-summary-expire-articles)
-  (define-key gnus-summary-mgroup-map "\177" 'gnus-summary-delete-article)
-  (define-key gnus-summary-mgroup-map "m" 'gnus-summary-move-article)
-  (define-key gnus-summary-mgroup-map "r" 'gnus-summary-respool-article)
-  (define-key gnus-summary-mgroup-map "w" 'gnus-summary-edit-article)
-  (define-key gnus-summary-mgroup-map "c" 'gnus-summary-copy-article)
-
   (define-key gnus-summary-mode-map "I" 'gnus-summary-increase-map)
   (define-key gnus-summary-mode-map "L" 'gnus-summary-lower-map)
   )
@@ -5040,6 +5044,8 @@ If NO-ARTICLE is non-nil, no article is selected initially."
             (gnus-group-next-unread-group 1)))
       nil)
      ((eq did-select 'quit)
+      (gnus-configure-windows 'summary)
+      (gnus-configure-windows 'newsgroup)
       (and (eq major-mode 'gnus-summary-mode)
           (not (equal (current-buffer) kill-buffer))
           (kill-buffer (current-buffer)))
@@ -5854,15 +5860,15 @@ If WHERE is `summary', the summary mode line format will be used."
                               (- (frame-width) gnus-mode-non-string-length)))
                 header) ;; passed as argument to any user-format-funcs
            (setq mode-string (eval mformat))
-           (if (< max-len 4) (setq max-len 4))
-           (and (numberp max-len)
-                (progn
-                  (if (> (length mode-string) max-len)
-                      (setq mode-string 
-                            (concat (substring mode-string 0 (- max-len 3))
-                                    "...")))
-                  (setq mode-string (format (format "%%-%ds" max-len)
-                                            mode-string))))))
+            (or (numberp max-len)
+               (setq max-len (length mode-string)))
+           (if (< max-len 4) (setq max-len 4))
+           (if (> (length mode-string) max-len)
+               (setq mode-string 
+                     (concat (substring mode-string 0 (- max-len 3))
+                             "...")))
+           (setq mode-string (format (format "%%-%ds" max-len)
+                                     mode-string))))
        (setq mode-line-buffer-identification mode-string)
        (set-buffer-modified-p t))))
 
@@ -6696,8 +6702,10 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
          (bury-buffer gnus-article-buffer))
       (setq gnus-current-select-method gnus-select-method)
       (pop-to-buffer gnus-group-buffer)
-      (gnus-group-jump-to-group group)
-      (gnus-group-next-group 1)
+      (if (eq method 'nndigest)
+         ()
+       (gnus-group-jump-to-group group)
+       (gnus-group-next-group 1))
       (if (gnus-buffer-exists-p quit-buffer)
          (progn
            (switch-to-buffer quit-buffer)
@@ -6968,7 +6976,8 @@ If BACKWARD, the previous article is selected instead of the next."
                                   gnus-newsgroup-end)))
      ;; Go to next/previous group.
      (t
-      (gnus-summary-jump-to-group gnus-newsgroup-name)
+      (or (eq method 'nndigest)
+         (gnus-summary-jump-to-group gnus-newsgroup-name))
       (let ((cmd (aref (this-command-keys) 0))
            (group 
             (if (eq gnus-keep-same-level 'best) 
@@ -9541,6 +9550,7 @@ This is in no way, shape or form meant as a replacement for real MIME
 processing, but is simply a stop-gap measure until MIME support is
 written."
   ;; Unquote quoted-printable from news articles.
+  (interactive)
   (save-excursion
     (set-buffer gnus-article-buffer)
     (let ((case-fold-search t)
@@ -11491,6 +11501,7 @@ If FORCE is non-nil, the .newsrc file is read."
   (let ((subscribe nil)
        (read-list nil)
        (line (1+ (count-lines (point-min) (point))))
+       (already-read (> (length gnus-newsrc-alist) 1))
        newsgroup
        p p2)
     (save-restriction
@@ -11591,15 +11602,17 @@ If FORCE is non-nil, the .newsrc file is read."
                    (cons (list newsgroup 
                                (if subscribe
                                    gnus-level-default-subscribed 
-                                 (if read-list gnus-level-default-subscribed
-                                   (1+ gnus-level-default-subscribed)))
+                                 (if read-list 
+                                     (1+ gnus-level-default-subscribed)
+                                   gnus-level-default-unsubscribed))
                                (nreverse read-list))
                          gnus-newsrc-alist))))))
        (setq line (1+ line))
-       (forward-line 1))))
-  (setq gnus-newsrc-alist (cdr gnus-newsrc-alist))
-  (gnus-make-hashtable-from-newsrc-alist)
-  nil)
+       (forward-line 1)))
+    (setq gnus-newsrc-alist (cdr gnus-newsrc-alist))
+    (and already-read (setq gnus-newsrc-alist (nreverse gnus-newsrc-alist)))
+    (gnus-make-hashtable-from-newsrc-alist)
+    nil))
 
 (defun gnus-parse-n-options (options)
   "Parse -n NEWSGROUPS options and return a cons of YES and NO regexps."
index c415e92..a8db42d 100644 (file)
@@ -212,22 +212,22 @@ such things as moving mail.  All buffers always get killed upon server close.")
   (save-excursion
     (nnfolder-possibly-change-group group)
     (and (assoc group nnfolder-group-alist)
-        (save-excursion
-          (set-buffer nntp-server-buffer)
-          (erase-buffer)
+        (progn
           (if dont-check
               t
-            (nnfolder-get-new-mail)
-            (let ((active (assoc group nnfolder-group-alist)))
-              ;; I've been getting stray 211 lines in my nnfolder active
-              ;; file.  So, let's make sure that doesn't happen. -SLB
-              (set-buffer nntp-server-buffer)
-              (insert (format "211 %d %d %d %s\n" 
-                              (1+ (- (cdr (car (cdr active)))
-                                     (car (car (cdr active)))))
-                              (car (car (cdr active)))
-                              (cdr (car (cdr active)))
-                              (car active))))
+            (nnfolder-get-new-mail))
+          (let* ((active (assoc group nnfolder-group-alist))
+                 (group (car active))
+                 (range (car (cdr active)))
+                 (minactive (car range))
+                 (maxactive (cdr range)))
+            ;; I've been getting stray 211 lines in my nnfolder active
+            ;; file.  So, let's make sure that doesn't happen. -SLB
+            (set-buffer nntp-server-buffer)
+            (erase-buffer)
+            (insert (format "211 %d %d %d %s\n" 
+                            (1+ (- maxactive minactive))
+                            minactive maxactive group))
             t)))))
 
 ;; Don't close the buffer if we're not shutting down the server.  This way,
@@ -240,7 +240,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
   (save-excursion
     (set-buffer nnfolder-current-buffer)
     ;; If the buffer was modified, write the file out now.
-    (save-buffer)
+    (and (buffer-modified-p) (save-buffer))
     (if (or force
            nnfolder-always-close)
        ;; If we're shutting the server down, we need to kill the buffer and
@@ -297,7 +297,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
                  (nnfolder-delete-mail))
              (setq rest (cons (car articles) rest))))
        (setq articles (cdr articles)))
-      (save-buffer)
+      (and (buffer-modified-p) (save-buffer))
       ;; Find the lowest active article in this group.
       (let* ((active (car (cdr (assoc newsgroup nnfolder-group-alist))))
             (marker (concat "\n" nnfolder-article-marker))
@@ -341,7 +341,9 @@ such things as moving mail.  All buffers always get killed upon server close.")
        (goto-char 1)
        (if (search-forward (nnfolder-article-string article) nil t)
           (nnfolder-delete-mail))
-       (and last (save-buffer))))
+       (and last 
+           (buffer-modified-p)
+           (save-buffer))))
     result))
 
 (defun nnfolder-request-accept-article (group &optional last)
@@ -365,7 +367,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
      (save-excursion
        (set-buffer nnfolder-current-buffer)
        (insert-buffer-substring buf)
-       (and last (save-buffer))
+       (and last (buffer-modified-p) (save-buffer))
        result)
      (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
     result))
@@ -379,7 +381,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
        nil
       (nnfolder-delete-mail t t)
       (insert-buffer-substring buffer)
-      (save-buffer)
+      (and (buffer-modified-p) (save-buffer))
       t)))
 
 \f
@@ -464,26 +466,28 @@ such things as moving mail.  All buffers always get killed upon server close.")
     (nnmail-insert-lines)
     (nnmail-insert-xref group-art-list)
 
-    ;; Kill the previous newsgroup markers.
-    (goto-char (point-min))
-    (search-forward "\n\n" nil t)
-    (forward-line -1)
-    (while (re-search-backward (concat "^" nnfolder-article-marker) nil t)
-      (delete-region (point) (progn (forward-line 1) (point))))
-
     ;; Insert the mail into each of the destination groups.
     (while group-art-list
       (setq group-art (car group-art-list)
            group-art-list (cdr group-art-list))
+
+      ;; Kill the previous newsgroup markers.
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
+      (forward-line -1)
+      (while (search-backward (concat "\n" nnfolder-article-marker) nil t)
+       (delete-region (point) (progn (forward-line 1) (point))))
+
+      ;; Insert the new newsgroup marker.
       (nnfolder-possibly-change-group (car group-art))
       (nnfolder-insert-newsgroup-line group-art)
       (let ((beg (point-min))
            (end (point-max))
            (obuf (current-buffer)))
-       (save-excursion
-         (set-buffer nnfolder-current-buffer)
-         (goto-char (point-max))
-         (insert-buffer-substring obuf beg end))))
+       (set-buffer nnfolder-current-buffer)
+       (goto-char (point-max))
+       (insert-buffer-substring obuf beg end)
+       (set-buffer obuf)))
 
     ;; Did we save it anywhere?
     save-list))
@@ -555,9 +559,9 @@ such things as moving mail.  All buffers always get killed upon server close.")
                                 (1- (lsh 1 25))))
            (while (and (search-forward marker nil t)
                        (re-search-forward number nil t))
-             (let (newnum (string-to-number (buffer-substring
+             (let ((newnum (string-to-number (buffer-substring
                                              (match-beginning 0)
-                                             (match-end 0))))
+                                             (match-end 0)))))
                (setq activenumber (max activenumber newnum))
                (setq activemin (min activemin newnum))))
            (setcar active (min activemin activenumber))
@@ -616,8 +620,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
              (setq nnfolder-buffer-alist 
                    (delq (car bufs) nnfolder-buffer-alist))
            (set-buffer (nth 1 (car bufs)))
-           (and (buffer-modified-p)
-                (save-buffer)))
+           (and (buffer-modified-p) (save-buffer)))
          (setq bufs (cdr bufs)))))
     ;; (if incoming (delete-file incoming))
     ))
index cfdd8a6..20d2f24 100644 (file)
@@ -128,7 +128,7 @@ messages will be shown to indicate the current status.")
 
 (defun nnmail-request-post-buffer (post group subject header article-buffer
                                        info follow-to respect-poster)
-  (let ((method-address (cdr (assq 'to-address (nth 4 info))))
+  (let ((method-address (cdr (assq 'to-address (nth 5 info))))
        from subject date to reply-to message-of
        references message-id sender cc sendto elt)
     (setq method-address
index 1dc670c..8a2c929 100644 (file)
@@ -126,18 +126,22 @@ Newsgroup must be selected before calling this function."
            'nov
          (while sequence
            (setq article (car sequence))
-           (setq file (concat nnspool-current-directory 
-                              (int-to-string article)))
-           (and (file-exists-p file)
-                (progn
-                  (insert (format "221 %d Article retrieved.\n" article))
-                  (setq beg (point))
-                  (insert-file-contents file)
-                  (goto-char beg)
-                  (search-forward "\n\n" nil t)
-                  (forward-char -1)
-                  (insert ".\n")
-                  (delete-region (point) (point-max))))
+           (if (stringp article)
+               (progn
+                 (format "221 %d Article retrieved.\n" 0)
+                 (nnspool-request-article article))
+             (setq file (concat nnspool-current-directory 
+                                (int-to-string article)))
+             (and (file-exists-p file)
+                  (progn
+                    (insert (format "221 %d Article retrieved.\n" article))
+                    (setq beg (point))
+                    (insert-file-contents file)
+                    (goto-char beg)
+                    (search-forward "\n\n" nil t)
+                    (forward-char -1)
+                    (insert ".\n")
+                    (delete-region (point) (point-max)))))
            (setq sequence (cdr sequence))
            
            (and do-message
index 4cd50d9..292f3ba 100644 (file)
@@ -3773,6 +3773,20 @@ Mark all articles, even the ticked ones, as read and then exit
 @findex gnus-summary-catchup-and-goto-next-group
 Mark all articles as read and go to the next group
 (@code{gnus-summary-catchup-and-goto-next-group}). 
+@item Z R
+@kindex Z R (Summary)
+@findex gnus-summary-reselect-current-group
+Exit this group, and then enter it again
+(@code{gnus-summary-reselect-current-group}).  If given a prefix, select
+all articles, both read and unread.
+@item Z G
+@itemx M-g
+@kindex Z G (Summary)
+@kindex M-g (Summary)
+@findex gnus-summary-rescan-group
+Exit the group, check for new articles in the group, and select the
+group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
+articles, both read and unread.
 @end table
 
 @vindex gnus-exit-group-hook
@@ -3859,35 +3873,35 @@ If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
 unwanted headers before saving the article.
 
 @table @kbd
-@item V o o
+@item O o
 @itemx o
-@kindex V o o (Summary)
+@kindex O o (Summary)
 @kindex o (Summary)
 @findex gnus-summary-save-article
 Save the current article using the default article saver
 (@code{gnus-summary-save-article}). 
-@item V o m
-@kindex V o m (Summary)
+@item O m
+@kindex O m (Summary)
 @findex gnus-summary-save-article-mail
 Save the current article in mail format
 (@code{gnus-summary-save-article-mail}). 
-@item V o r
-@kindex V o r (Summary)
+@item O r
+@kindex O r (Summary)
 @findex gnus-summary-save-article-mail
 Save the current article in rmail format
 (@code{gnus-summary-save-article-rmail}). 
-@item V o f
-@kindex V o f (Summary)
+@item O f
+@kindex O f (Summary)
 @findex gnus-summary-save-article-file
 Save the current article in plain file format
 (@code{gnus-summary-save-article-file}). 
-@item V o h
-@kindex V o h (Summary)
+@item O h
+@kindex O h (Summary)
 @findex gnus-summary-save-article-folder
 Save the current article in mh folder format
 (@code{gnus-summary-save-article-folder}). 
-@item V o p
-@kindex V o p (Summary)
+@item O p
+@kindex O p (Summary)
 @findex gnus-summary-pipe-output
 Save the current article in a pipe.  Uhm, like, what I mean is - Pipe
 the current article to a process (@code{gnus-summary-pipe-output}).
@@ -4321,36 +4335,36 @@ Toggle whether to run the article through @sc{mime} before displaying
 There's a battery of commands for washing the article buffer:
 
 @table @kbd
-@item A h h
-@kindex A h h (Summary)
+@item W h
+@kindex W h (Summary)
 @findex gnus-article-hide-headers
 Hide headers (@code{gnus-article-hide-headers}).
-@item A h s
-@kindex A h s (Summary)
+@item W s
+@kindex W s (Summary)
 @findex gnus-article-hide-signature
 Hide signature (@code{gnus-article-hide-signature}).
-@item A h c
-@kindex A h c (Summary)
+@item W c
+@kindex W c (Summary)
 @findex gnus-article-hide-citation
 Hide citation (@code{gnus-article-hide-citation}).
-@item A h o
-@kindex A h o (Summary)
+@item W o
+@kindex W o (Summary)
 @findex gnus-article-treat-overstrike
 Treat overstrike (@code{gnus-article-treat-overstrike}).
-@item A h w
-@kindex A h w (Summary)
+@item W w
+@kindex W w (Summary)
 @findex gnus-article-word-wrap
 Do word wrap (@code{gnus-article-word-wrap}).
-@item A h d
-@kindex A h d (Summary)
+@item W d
+@kindex W d (Summary)
 @findex gnus-article-remove-cr
 Remove CR (@code{gnus-article-remove-cr}).
-@item A h q
-@kindex A h q (Summary)
+@item W q
+@kindex W q (Summary)
 @findex gnus-article-de-quoted-unreadable
 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
-@item A h f
-@kindex A h f (Summary)
+@item W f
+@kindex W f (Summary)
 @findex gnus-article-display-x-face
 @findex gnus-article-x-face-command
 Look for and display any X-Face headers
@@ -5157,34 +5171,34 @@ All these commands (except the expiry and edit commands) use the
 process/prefix convention (@pxref{Process/Prefix}).
 
 @table @kbd
-@item V m e
-@kindex V m e (Summary)
+@item B e
+@kindex B e (Summary)
 @findex gnus-summary-expire-articles
 Expire all expirable articles in the group
 (@code{gnus-summary-expire-articles}).
-@item V m DEL
-@kindex V m DEL (Summary)
+@item B DEL
+@kindex B DEL (Summary)
 @findex gnus-summary-delete-articles
 Delete the mail article.  This is "delete" as in "delete it from your
 disk forever and ever, never to return again." Use with caution.
 (@code{gnus-summary-delete-article}).
-@item V m m
-@kindex V m m (Summary)
+@item B m
+@kindex B m (Summary)
 @findex gnus-summary-move-article
 Move the article from one mail group to another
 (@code{gnus-summary-move-article}). 
-@item V m c
-@kindex V m c (Summary)
+@item B c
+@kindex B c (Summary)
 @findex gnus-summary-copy-article
 Copy the article from one group (mail group or not) to a mail group
 (@code{gnus-summary-copy-article}).
-@item V m r
-@kindex V m r (Summary)
+@item B r
+@kindex B r (Summary)
 @findex gnus-summary-respool-article
 Respool the mail article (@code{gnus-summary-move-article}).
-@item V m w
+@item B w
 @itemx e
-@kindex V m w (Summary)
+@kindex B w (Summary)
 @kindex e (Summary)
 @findex gnus-summary-edit-article
 @kindex C-c C-c (Article)
@@ -5212,27 +5226,27 @@ care.
 @subsection Group Information
 
 @table @kbd
-@item V f
-@kindex V f (Summary)
+@item H f
+@kindex H f (Summary)
 @findex gnus-summary-fetch-faq
 @vindex gnus-group-faq-directory
 Try to fetch the FAQ (list of frequently asked questions) for the
 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
 on a remote machine. @code{ange-ftp} will be used for fetching the file.
-@item V d
-@kindex V d (Summary)
+@item H d
+@kindex H d (Summary)
 @findex gnus-summary-describe-group
 Give a brief description of the current group
 (@code{gnus-summary-describe-group}).  If given a prefix, force
 rereading the description from the server.
-@item V ?
-@kindex V ? (Summary)
+@item H h
+@kindex H h (Summary)
 @findex gnus-summary-describe-briefly
 Give a very brief description of the most important summary keystrokes
 (@code{gnus-summary-describe-briefly}). 
-@item V i
-@kindex V i (Summary)
+@item H i
+@kindex H i (Summary)
 @findex gnus-info-find-node
 Go to the Gnus info node (@code{gnus-info-find-node}).
 @end table
@@ -5282,20 +5296,6 @@ Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
 @kindex V e (Summary)
 @findex gnus-summary-expand-window
 Expand the summary buffer window (@code{gnus-summary-expand-window}).
-@item V S
-@kindex V S (Summary)
-@findex gnus-summary-reselect-current-group
-Exit this group, and then enter it again
-(@code{gnus-summary-reselect-current-group}).  If given a prefix, select
-all articles, both read and unread.
-@item V g
-@itemx M-g
-@kindex V g (Summary)
-@kindex M-g (Summary)
-@findex gnus-summary-rescan-group
-Exit the group, check for new articles in the group, and select the
-group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
-articles, both read and unread.
 @end table
 
 @node The Article Buffer