*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 14 Mar 1997 19:14:30 +0000 (19:14 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 14 Mar 1997 19:14:30 +0000 (19:14 +0000)
19 files changed:
lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-async.el
lisp/gnus-cache.el
lisp/gnus-nocem.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/messagexmas.el
lisp/nneething.el
lisp/nnfolder.el
texi/ChangeLog
texi/gnus.texi
todo

index 1372196..403aad9 100644 (file)
@@ -1,3 +1,79 @@
+Fri Mar 14 20:11:01 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.4.26 is released.
+
+Fri Mar 14 19:57:41 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-setup.el (gnus-use-sc): Changed default.
+
+Fri Mar 14 19:53:05 1997  Kurt Swanson  <kurt@dna.lth.se>
+
+       * gnus-art.el (gnus-article-goto-next-page): Place point.
+
+Fri Mar 14 18:46:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (gnus-article-mode-syntax-table): Make "-"
+       word-constituant. 
+
+       * gnus-sum.el (gnus-article-sort-by-author): Don't bug out on
+       Froms without names.
+
+       * messagexmas.el (message-xmas-make-caesar-translation-table): Use
+       char-int.
+
+Fri Mar 14 18:44:33 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-faces): New group.
+
+Fri Mar 14 18:43:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-limit-to-unread): Also exclude souped
+       articles. 
+
+Fri Mar 14 18:35:06 1997  Matt Armstrong  <Matt_Armstrong@geoworks.com>
+
+       * gnus-score.el (gnus-all-score-files): Remove duplicates.
+
+Fri Mar 14 18:21:07 1997  Andy Norman  <ange@hplb.hpl.hp.com>
+
+       * gnus-xmas.el (gnus-xmas-switch-horizontal-scrollbar-off): Check
+       whether we have a scrollbar first.
+
+Fri Mar 14 18:15:32 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnfolder.el (nnfolder-save-mail): Don't fold case when doing
+       From_. 
+
+Wed Mar 12 06:51:49 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnfolder.el (nnfolder-possibly-change-group): Accept a
+       dont-check param.
+       (nnfolder-request-group): Don't load folder.
+
+       * gnus.el (gnus-home-directory): New variable.
+
+Tue Mar 11 17:25:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-async.el (gnus-async-prefetch-article): Raise the level of
+       the message.
+
+Mon Mar 10 06:30:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-score.el (gnus-score-find-trace): Would clobber the score
+       of other articles.
+
+       * nneething.el (nneething-create-mapping): Make sure
+       nneething-directory exists.
+
+       * nnfolder.el (nnfolder-adjust-min-active): New function.
+       (nnfolder-request-expire-articles): Use it.
+       (nnfolder-request-move-article): Ditto.
+       (nnfolder-request-scan): Switch to the right server first. 
+
+Mon Mar 10 06:28:58 1997  Joev Dubach  <dubach1@husc.harvard.edu>
+
+       * nnfolder.el (nnfolder-generate-active-file): Didn't work.
+
 Sun Mar  9 18:38:37 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Gnus v5.4.25 is released.
index 437b014..f80c78a 100644 (file)
@@ -419,10 +419,10 @@ above them."
 (defface gnus-header-from-face
   '((((class color)
       (background dark))
-     (:foreground "spring green" :bold t :italic t))
+     (:foreground "spring green" :bold t))
     (((class color)
       (background light))
-     (:foreground "indianred" :bold t :italic t))
+     (:foreground "red3" :bold t))
     (t
      (:bold t :italic t)))
   "Face used for displaying from headers."
@@ -432,10 +432,10 @@ above them."
 (defface gnus-header-subject-face
   '((((class color)
       (background dark))
-     (:foreground "SeaGreen3" :bold t :italic t))
+     (:foreground "SeaGreen3" :bold t))
     (((class color)
       (background light))
-     (:foreground "firebrick" :bold t :italic t))
+     (:foreground "red4" :bold t))
     (t
      (:bold t :italic t)))
   "Face used for displaying subject headers."
@@ -510,7 +510,7 @@ displayed by the first non-nil matching CONTENT face."
 
 (defvar gnus-article-mode-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
-    ;;(modify-syntax-entry ?_ "w" table)
+    (modify-syntax-entry ?- "w" table)
     table)
   "Syntax table used in article mode buffers.
 Initialized from `text-mode-syntax-table.")
@@ -2039,6 +2039,7 @@ If given a numerical ARG, move forward ARG pages."
   "Show the next page of the article."
   (interactive)
   (when (gnus-article-next-page)
+    (goto-char (point-min))
     (gnus-article-read-summary-keys nil (gnus-character-to-event ?n))))
 
 (defun gnus-article-goto-prev-page ()
index de07c7d..a87d333 100644 (file)
@@ -196,7 +196,7 @@ It should return non-nil if the article is to be prefetched."
                      (nntp-server-buffer
                       (get-buffer gnus-async-prefetch-article-buffer)))
                  (when do-message
-                   (gnus-message 7 "Prefetching article %d in group %s"
+                   (gnus-message 9 "Prefetching article %d in group %s"
                                  article group))
                  (gnus-request-article article group))))))))))
 
index dbd42fc..c3e704f 100644 (file)
@@ -134,8 +134,7 @@ variable to \"^nnml\"."
   (when (and (or force (not (eq gnus-use-cache 'passive)))
             (numberp article)
             (> article 0)
-            (vectorp headers))
-                                       ; This might be a dummy article.
+            (vectorp headers))         ; This might be a dummy article.
     ;; If this is a virtual group, we find the real group.
     (when (gnus-virtual-group-p group)
       (let ((result (nnvirtual-find-group-art
index b4538ce..2131e0a 100644 (file)
@@ -48,7 +48,7 @@
    "clewis@ferret.ocunix.on.ca;" ; Chris Lewis
    "jem@xpat.com;"              ; Despammer from Korea
    "snowhare@xmission.com"       ; Benjamin "Snowhare" Franz
-   "red@redpoll.mrfs.oh.us (Richard E. Depew)"
+   "red@redpoll.mrfs.oh.us (Richard E. Depew)" ; ARMM! ARMM!
    )
   "List of NoCeM issuers to pay attention to."
   :group 'gnus-nocem
index adb33db..c6cbaad 100644 (file)
@@ -2181,26 +2181,29 @@ SCORE is the score to add."
 (defun gnus-score-find-trace ()
   "Find all score rules that applies to the current article."
   (interactive)
-  (let ((gnus-newsgroup-headers
-        (list (gnus-summary-article-header)))
-       (gnus-newsgroup-scored nil)
-       trace)
-    (save-excursion
-      (nnheader-set-temp-buffer "*Score Trace*"))
-    (setq gnus-score-trace nil)
-    (gnus-possibly-score-headers 'trace)
-    (if (not (setq trace gnus-score-trace))
-       (gnus-error
-        1 "No score rules apply to the current article (default score %d)."
-        gnus-summary-default-score)
-      (set-buffer "*Score Trace*")
-      (gnus-add-current-to-buffer-list)
-      (while trace
-       (insert (format "%S  ->  %s\n" (cdar trace)
-                       (file-name-nondirectory (caar trace))))
-       (setq trace (cdr trace)))
-      (goto-char (point-min))
-      (gnus-configure-windows 'score-trace))))
+  (let ((old-scored gnus-newsgroup-scored))
+    (let ((gnus-newsgroup-headers
+          (list (gnus-summary-article-header)))
+         (gnus-newsgroup-scored nil)
+         trace)
+      (save-excursion
+       (nnheader-set-temp-buffer "*Score Trace*"))
+      (setq gnus-score-trace nil)
+      (gnus-possibly-score-headers 'trace)
+      (if (not (setq trace gnus-score-trace))
+         (gnus-error
+          1 "No score rules apply to the current article (default score %d)."
+          gnus-summary-default-score)
+       (set-buffer "*Score Trace*")
+       (gnus-add-current-to-buffer-list)
+       (while trace
+         (insert (format "%S  ->  %s\n" (cdar trace)
+                         (file-name-nondirectory (caar trace))))
+         (setq trace (cdr trace)))
+       (goto-char (point-min))
+       (gnus-configure-windows 'score-trace)))
+    (set-buffer gnus-summary-buffer)
+    (setq gnus-newsgroup-scored old-scored)))
 
 (defun gnus-score-find-favourite-words ()
   "List words used in scoring."
@@ -2618,9 +2621,9 @@ The list is determined from the variable gnus-score-file-alist."
       (pop score-files))
     (let ((files score-files))
       (while (cdr files)
-       (when (member (cadr files) (cddr files))
-         (setcdr files (cddr files)))
-       (pop files)))
+       (if (member (cadr files) (cddr files))
+           (setcdr files (cddr files))
+         (pop files))))
     ;; Do the scoring if there are any score files for this group.
     score-files))
 
index 9c3fe71..3a0dda2 100644 (file)
@@ -75,7 +75,7 @@
   "Set this if you want to use SENDMAIL for mail reading")
 (defvar gnus-use-vm nil
   "Set this if you want to use the VM package for mail reading")
-(defvar gnus-use-sc t
+(defvar gnus-use-sc nil
   "Set this if you want to use Supercite")
 (defvar gnus-use-mailcrypt t
   "Set this if you want to use Mailcrypt for dealing with PGP messages")
index 10d143f..a04b96a 100644 (file)
 
 ;;; User Variables:
 
-(defvar gnus-soup-directory "~/SoupBrew/"
+(defvar gnus-soup-directory (nnheader-concat gnus-home-directory "SoupBrew/")
   "*Directory containing an unpacked SOUP packet.")
 
-(defvar gnus-soup-replies-directory (concat gnus-soup-directory "SoupReplies/")
+(defvar gnus-soup-replies-directory
+  (nnheader-concat gnus-soup-directory "SoupReplies/")
   "*Directory where Gnus will do processing of replies.")
 
 (defvar gnus-soup-prefix-file "gnus-prefix"
@@ -53,7 +54,7 @@ inserted where %d appears.")
   "*Format string command for unpacking a SOUP packet.
 The SOUP packet file name will be inserted at the %s.")
 
-(defvar gnus-soup-packet-directory "~/"
+(defvar gnus-soup-packet-directory gnus-home-directory
   "*Where gnus-soup will look for REPLIES packets.")
 
 (defvar gnus-soup-packet-regexp "Soupin"
index 2b20765..49672ac 100644 (file)
 (require 'gnus-util)
 (require 'message)
 
-(defcustom gnus-startup-file "~/.newsrc"
+(defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc")
   "Your `.newsrc' file.
 `.newsrc-SERVER' will be used instead if that exists."
   :group 'gnus-start
   :type 'file)
 
-(defcustom gnus-init-file "~/.gnus"
+(defcustom gnus-init-file (nnheader-concat gnus-home-directory ".gnus")
   "Your Gnus elisp startup file.
 If a file with the .el or .elc suffixes exist, it will be read
 instead."
index 5025530..ba115bc 100644 (file)
@@ -3190,11 +3190,11 @@ If NO-DISPLAY, don't generate a summary buffer."
    (let ((extract (funcall
                   gnus-extract-address-components
                   (mail-header-from h1))))
-     (or (car extract) (cdr extract)))
+     (or (car extract) (cadr extract) ""))
    (let ((extract (funcall
                   gnus-extract-address-components
                   (mail-header-from h2))))
-     (or (car extract) (cdr extract)))))
+     (or (car extract) (cadr extract) ""))))
 
 (defun gnus-thread-sort-by-author (h1 h2)
   "Sort threads by root author."
@@ -5668,7 +5668,7 @@ If ALL is non-nil, limit strictly to unread articles."
           gnus-killed-mark gnus-kill-file-mark
           gnus-low-score-mark gnus-expirable-mark
           gnus-canceled-mark gnus-catchup-mark gnus-sparse-mark
-          gnus-duplicate-mark)
+          gnus-duplicate-mark gnus-souped-mark)
      'reverse)))
 
 (defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-exclude-marks)
index dca5354..7c8ceb9 100644 (file)
@@ -142,7 +142,8 @@ It is provided only to ease porting of broken FSF Emacs programs."
 This is ugly, but it works around a bug in `window-displayed-height'.")
 
 (defun gnus-xmas-switch-horizontal-scrollbar-off ()
-  (set-specifier scrollbar-height (cons (current-buffer) 0)))
+  (when (featurep 'scrollbar)
+    (set-specifier scrollbar-height (cons (current-buffer) 0))))
 
 (defun gnus-xmas-summary-recenter ()
   "\"Center\" point in the summary window.
index 07faa20..2685aa7 100644 (file)
@@ -226,7 +226,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "5.4.25"
+(defconst gnus-version-number "5.4.26"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -711,7 +711,14 @@ be set in `.emacs' instead."
 (require 'gnus-util)
 (require 'nnheader)
 
-(defcustom gnus-directory (or (getenv "SAVEDIR") "~/News/")
+(defcustom gnus-home-directory "~/"
+  "Directory variable that specifies the \"home\" directory.
+All other Gnus path variables are initialized from this variable."
+  :group 'gnus-files
+  :type 'directory)
+
+(defcustom gnus-directory (or (getenv "SAVEDIR")
+                             (nnheader-concat gnus-home-directory "News/"))
   "Directory variable from which all other Gnus file variables are derived."
   :group 'gnus-files
   :type 'directory)
index dd56062..4c54c32 100644 (file)
   "Composing Mail Messages"
   :group 'message)
 
+(defgroup message-faces nil
+  "Faces used for message composing."
+  :group 'message
+  :group 'faces)
+
 (defcustom message-directory "~/Mail/"
   "*Directory from which all other mail file variables are derived."
   :group 'message-various
@@ -614,7 +619,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t :italic t)))
   "Face used for displaying From headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-cc-face
   '((((class color)
@@ -626,7 +631,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying Cc headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-subject-face
   '((((class color)
@@ -638,7 +643,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying subject headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-newsgroups-face
   '((((class color)
@@ -650,7 +655,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t :italic t)))
   "Face used for displaying newsgroups headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-other-face
   '((((class color)
@@ -662,7 +667,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t :italic t)))
   "Face used for displaying newsgroups headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-name-face
   '((((class color)
@@ -674,7 +679,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying header names."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-header-xheader-face
   '((((class color)
@@ -686,7 +691,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying X-Header headers."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-separator-face
   '((((class color)
@@ -698,7 +703,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying the separator."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defface message-cited-text-face
   '((((class color)
@@ -710,7 +715,7 @@ Defaults to `text-mode-abbrev-table'.")
     (t
      (:bold t)))
   "Face used for displaying cited text names."
-  :group 'message-headers)
+  :group 'message-faces)
 
 (defvar message-font-lock-keywords
   (let* ((cite-prefix "A-Za-z")
index cc9421a..4fd13d2 100644 (file)
@@ -101,8 +101,8 @@ If it is non-nil, it must be a toolbar.  The five legal values are
   "Create a rot table with offset N."
   (let ((i -1)
        (table (make-string 256 0))
-       (a (char-to-int ?a))
-       (A (char-to-int ?A)))
+       (a (char-int ?a))
+       (A (char-int ?A)))
     (while (< (incf i) 256)
       (aset table i i))
     (concat
index 1be95ff..bcd06fc 100644 (file)
@@ -188,69 +188,70 @@ If this variable is nil, no files will be excluded.")
 
 (defun nneething-create-mapping ()
   ;; Read nneething-active and nneething-map.
-  (let ((map-file (nneething-map-file))
-       (files (directory-files nneething-directory))
-       touched map-files)
-    (when (file-exists-p map-file)
-      (ignore-errors
-       (load map-file nil t t)))
-    (unless nneething-active
-      (setq nneething-active (cons 1 0)))
-    ;; Old nneething had a different map format.
-    (when (and (cdar nneething-map)
-              (atom (cdar nneething-map)))
-      (setq nneething-map
-           (mapcar (lambda (n)
-                     (list (cdr n) (car n)
-                           (nth 5 (file-attributes
-                                   (nneething-file-name (car n))))))
-                   nneething-map)))
-    ;; Remove files matching the exclusion regexp.
-    (when nneething-exclude-files
-      (let ((f files)
+  (when (file-exists-p nneething-directory)
+    (let ((map-file (nneething-map-file))
+         (files (directory-files nneething-directory))
+         touched map-files)
+      (when (file-exists-p map-file)
+       (ignore-errors
+         (load map-file nil t t)))
+      (unless nneething-active
+       (setq nneething-active (cons 1 0)))
+      ;; Old nneething had a different map format.
+      (when (and (cdar nneething-map)
+                (atom (cdar nneething-map)))
+       (setq nneething-map
+             (mapcar (lambda (n)
+                       (list (cdr n) (car n)
+                             (nth 5 (file-attributes
+                                     (nneething-file-name (car n))))))
+                     nneething-map)))
+      ;; Remove files matching the exclusion regexp.
+      (when nneething-exclude-files
+       (let ((f files)
+             prev)
+         (while f
+           (if (string-match nneething-exclude-files (car f))
+               (if prev (setcdr prev (cdr f))
+                 (setq files (cdr files)))
+             (setq prev f))
+           (setq f (cdr f)))))
+      ;; Remove deleted files from the map.
+      (let ((map nneething-map)
            prev)
-       (while f
-         (if (string-match nneething-exclude-files (car f))
-             (if prev (setcdr prev (cdr f))
-               (setq files (cdr files)))
-           (setq prev f))
-         (setq f (cdr f)))))
-    ;; Remove deleted files from the map.
-    (let ((map nneething-map)
-         prev)
-      (while map
-       (if (and (member (cadar map) files)
-                ;; We also remove files that have changed mod times.
-                (equal (nth 5 (file-attributes
-                               (nneething-file-name (cadar map))))
-                       (caddar map)))
-           (progn
-             (push (cadar map) map-files)
-             (setq prev map))
+       (while map
+         (if (and (member (cadar map) files)
+                  ;; We also remove files that have changed mod times.
+                  (equal (nth 5 (file-attributes
+                                 (nneething-file-name (cadar map))))
+                         (caddar map)))
+             (progn
+               (push (cadar map) map-files)
+               (setq prev map))
+           (setq touched t)
+           (if prev
+               (setcdr prev (cdr map))
+             (setq nneething-map (cdr nneething-map))))
+         (setq map (cdr map))))
+      ;; Find all new files and enter them into the map.
+      (while files
+       (unless (member (car files) map-files)
+         ;; This file is not in the map, so we enter it.
          (setq touched t)
-         (if prev
-             (setcdr prev (cdr map))
-           (setq nneething-map (cdr nneething-map))))
-       (setq map (cdr map))))
-    ;; Find all new files and enter them into the map.
-    (while files
-      (unless (member (car files) map-files)
-       ;; This file is not in the map, so we enter it.
-       (setq touched t)
-       (setcdr nneething-active (1+ (cdr nneething-active)))
-       (push (list (cdr nneething-active) (car files)
-                   (nth 5 (file-attributes
-                           (nneething-file-name (car files)))))
-             nneething-map))
-      (setq files (cdr files)))
-    (when (and touched
-              (not nneething-read-only))
-      (nnheader-temp-write map-file
-       (insert "(setq nneething-map '")
-       (gnus-prin1 nneething-map)
-       (insert ")\n(setq nneething-active '")
-       (gnus-prin1 nneething-active)
-       (insert ")\n")))))
+         (setcdr nneething-active (1+ (cdr nneething-active)))
+         (push (list (cdr nneething-active) (car files)
+                     (nth 5 (file-attributes
+                             (nneething-file-name (car files)))))
+               nneething-map))
+       (setq files (cdr files)))
+      (when (and touched
+                (not nneething-read-only))
+       (nnheader-temp-write map-file
+         (insert "(setq nneething-map '")
+         (gnus-prin1 nneething-map)
+         (insert ")\n(setq nneething-active '")
+         (gnus-prin1 nneething-active)
+         (insert ")\n"))))))
 
 (defun nneething-insert-head (file)
   "Insert the head of FILE."
index 1695a00..4fec257 100644 (file)
@@ -193,9 +193,8 @@ time saver for large mailboxes.")
                    (point) (progn (end-of-line) (point)))))))))))
 
 (deffoo nnfolder-request-group (group &optional server dont-check)
-  (nnfolder-possibly-change-group group server)
+  (nnfolder-possibly-change-group group server t)
   (save-excursion
-    (nnmail-activate 'nnfolder)
     (if (not (assoc group nnfolder-group-alist))
        (nnheader-report 'nnfolder "No such group: %s" group)
       (if dont-check
@@ -217,6 +216,7 @@ time saver for large mailboxes.")
                             (car range) (cdr range) group))))))))
 
 (deffoo nnfolder-request-scan (&optional group server)
+  (nnfolder-possibly-change-group nil server)
   (when nnfolder-get-new-mail
     (nnfolder-possibly-change-group group server)
     (nnmail-get-new-mail
@@ -321,19 +321,7 @@ time saver for large mailboxes.")
       (unless nnfolder-inhibit-expiry
        (nnheader-message 5 "Deleting articles...done"))
       (nnfolder-save-buffer)
-      ;; Find the lowest active article in this group.
-      (let* ((active (cadr (assoc newsgroup nnfolder-group-alist)))
-            (marker (concat "\n" nnfolder-article-marker))
-            (number "[0-9]+")
-            (activemin (cdr active)))
-       (goto-char (point-min))
-       (while (and (search-forward marker nil t)
-                   (re-search-forward number nil t))
-         (setq activemin (min activemin
-                              (string-to-number (buffer-substring
-                                                 (match-beginning 0)
-                                                 (match-end 0))))))
-       (setcar active activemin))
+      (nnfolder-adjust-min-active newsgroup)
       (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
       (nconc rest articles))))
 
@@ -364,7 +352,8 @@ time saver for large mailboxes.")
        (when (search-forward (nnfolder-article-string article) nil t)
         (nnfolder-delete-mail))
        (when last
-        (nnfolder-save-buffer))))
+        (nnfolder-save-buffer)
+        (nnfolder-adjust-min-active group))))
     result))
 
 (deffoo nnfolder-request-accept-article (group &optional server last)
@@ -454,6 +443,21 @@ time saver for large mailboxes.")
 \f
 ;;; Internal functions.
 
+(defun nnfolder-adjust-min-active (group)
+  ;; Find the lowest active article in this group.
+  (let* ((active (cadr (assoc group nnfolder-group-alist)))
+        (marker (concat "\n" nnfolder-article-marker))
+        (number "[0-9]+")
+        (activemin (cdr active)))
+    (goto-char (point-min))
+    (while (and (search-forward marker nil t)
+               (re-search-forward number nil t))
+      (setq activemin (min activemin
+                          (string-to-number (buffer-substring
+                                             (match-beginning 0)
+                                             (match-end 0))))))
+    (setcar active activemin)))
+
 (defun nnfolder-article-string (article)
   (if (numberp article)
       (concat "\n" nnfolder-article-marker (int-to-string article) " ")
@@ -475,7 +479,7 @@ time saver for large mailboxes.")
             (point))
         (point-max))))))
 
-(defun nnfolder-possibly-change-group (group &optional server)
+(defun nnfolder-possibly-change-group (group &optional server dont-check)
   ;; Change servers.
   (when (and server
             (not (nnfolder-server-opened server)))
@@ -491,35 +495,36 @@ time saver for large mailboxes.")
       (push (list group (cons 1 0)) nnfolder-group-alist)
       (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
 
-    (let (inf file)
-      ;; If we have to change groups, see if we don't already have the
-      ;; folder in memory.  If we do, verify the modtime and destroy
-      ;; the folder if needed so we can rescan it.
-      (when (setq inf (assoc group nnfolder-buffer-alist))
-       (setq nnfolder-current-buffer (nth 1 inf)))
-
-      ;; If the buffer is not live, make sure it isn't in the alist.  If it
-      ;; is live, verify that nobody else has touched the file since last
-      ;; time.
-      (when (and nnfolder-current-buffer
-                (not (gnus-buffer-live-p nnfolder-current-buffer)))
-       (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)
-             nnfolder-current-buffer nil))
-
-      (setq nnfolder-current-group group)
-
-      (when (or (not nnfolder-current-buffer)
-               (not (verify-visited-file-modtime nnfolder-current-buffer)))
-       (save-excursion
-         (setq file (nnfolder-group-pathname group))
-         ;; See whether we need to create the new file.
-         (unless (file-exists-p file)
-           (gnus-make-directory (file-name-directory file))
-           (nnmail-write-region 1 1 file t 'nomesg))
-         (when (setq nnfolder-current-buffer (nnfolder-read-folder group))
-           (set-buffer nnfolder-current-buffer)
-           (push (list group nnfolder-current-buffer)
-                 nnfolder-buffer-alist)))))))
+    (unless dont-check
+      (let (inf file)
+       ;; If we have to change groups, see if we don't already have the
+       ;; folder in memory.  If we do, verify the modtime and destroy
+       ;; the folder if needed so we can rescan it.
+       (when (setq inf (assoc group nnfolder-buffer-alist))
+         (setq nnfolder-current-buffer (nth 1 inf)))
+
+       ;; If the buffer is not live, make sure it isn't in the alist.  If it
+       ;; is live, verify that nobody else has touched the file since last
+       ;; time.
+       (when (and nnfolder-current-buffer
+                  (not (gnus-buffer-live-p nnfolder-current-buffer)))
+         (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)
+               nnfolder-current-buffer nil))
+
+       (setq nnfolder-current-group group)
+
+       (when (or (not nnfolder-current-buffer)
+                 (not (verify-visited-file-modtime nnfolder-current-buffer)))
+         (save-excursion
+           (setq file (nnfolder-group-pathname group))
+           ;; See whether we need to create the new file.
+           (unless (file-exists-p file)
+             (gnus-make-directory (file-name-directory file))
+             (nnmail-write-region 1 1 file t 'nomesg))
+           (when (setq nnfolder-current-buffer (nnfolder-read-folder group))
+             (set-buffer nnfolder-current-buffer)
+             (push (list group nnfolder-current-buffer)
+                   nnfolder-buffer-alist))))))))
 
 (defun nnfolder-save-mail (group-art-list)
   "Called narrowed to an article."
@@ -534,9 +539,10 @@ time saver for large mailboxes.")
       (goto-char (point-min)))
     ;; Quote all "From " lines in the article.
     (forward-line 1)
-    (while (re-search-forward "^From " nil t)
-      (beginning-of-line)
-      (insert "> "))
+    (let (case-fold-search)
+      (while (re-search-forward "^From " nil t)
+       (beginning-of-line)
+       (insert "> ")))
     (setq save-list group-art-list)
     (nnmail-insert-lines)
     (nnmail-insert-xref group-art-list)
@@ -714,12 +720,17 @@ time saver for large mailboxes.")
     (while (setq file (pop files))
       (when (and (not (backup-file-name-p file))
                  (message-mail-file-mbox-p
-                 (concat nnfolder-directory file)))
-        (nnheader-message 5 "Adding group %s..." file)
-        (push (list file (cons 1 0)) nnfolder-group-alist)
-        (nnfolder-possibly-change-group file)
-        (nnfolder-close-group file))
-      (message ""))))
+                 (nnheader-concat nnfolder-directory file)))
+        (let ((oldgroup (assoc file nnfolder-group-alist)))
+          (if oldgroup
+              (nnheader-message 5 "Refreshing group %s..." file)
+            (nnheader-message 5 "Adding group %s..." file))
+          (setq nnfolder-group-alist (remove oldgroup nnfolder-group-alist))
+          (push (list file (cons 1 0)) nnfolder-group-alist)
+          (nnfolder-possibly-change-folder file)
+          (nnfolder-possibly-change-group file)
+          (nnfolder-close-group file))))
+    (message "")))
 
 (defun nnfolder-group-pathname (group)
   "Make pathname for GROUP."
index e2adb16..b181eb8 100644 (file)
@@ -1,3 +1,7 @@
+Wed Mar 12 06:57:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Various Various): Addition.
+
 Sat Mar  8 03:41:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Group Parameters): Added example.
index 615a6f7..15784bb 100644 (file)
@@ -13386,11 +13386,15 @@ manglers masquerading as newsreaders.
 
 @table @code
 
+@item gnus-home-directory
+All Gnus path variables will be initialized from this variable, which
+defaults to @file{~/}.
+
 @item gnus-directory
 @vindex gnus-directory
-All Gnus directories will be initialized from this variable, which
-defaults to the @samp{SAVEDIR} environment variable, or @file{~/News/}
-if that variable isn't set.
+Most Gnus storage path variables will be initialized from this variable,
+which defaults to the @samp{SAVEDIR} environment variable, or
+@file{~/News/} if that variable isn't set.
 
 @item gnus-default-directory
 @vindex gnus-default-directory
diff --git a/todo b/todo
index 9da17be..286f9d8 100644 (file)
--- a/todo
+++ b/todo
@@ -1,3 +1,6 @@
+.gnus repository:
+http://superdave.socom.com/gnus/
+
 I would like the zombie-page to contain an URL to the source of the
 latest version of gnus or some explanation on where to find it.
 
@@ -600,3 +603,8 @@ the header
 * cache the newsgroups file locally to avoid reloading it all the time.
 
 * a command to import a buffer into a group.
+
+* nnweb should allow fetching by Message-ID from servers.
+
+* point in the article buffer doesn't always go to the
+beginning of the buffer when selecting new articles.