*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 24 May 1997 09:58:14 +0000 (09:58 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 24 May 1997 09:58:14 +0000 (09:58 +0000)
15 files changed:
lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-cache.el
lisp/gnus-cite.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus.el
lisp/message.el
lisp/nnheaderxm.el
lisp/nnmail.el
lisp/nnml.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi
todo

index c110f72..2055477 100644 (file)
@@ -1,3 +1,62 @@
+Sat May 24 11:55:04 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.4.54 is released.
+
+Sat May 24 10:35:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-set-auto-save-file-name): Don't use "*" in
+       autosave name.
+
+       * gnus-art.el (gnus-article-delete-text-of-type): New version.
+
+Sat May 24 10:33:43 1997  Dan Christensen  <jdchrist@math.mit.edu>
+
+       * gnus-art.el (gnus-article-delete-invisible-text): New version. 
+
+Sat May 24 10:26:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnmail.el (nnmail-article-group): Remove all 'junk splits.
+
+Wed May 21 16:18:03 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-cite.el (gnus-cite-attribution-prefix): Recognize
+       Microsoft/Agent style attribution lines.
+       (gnus-cite-attribution-suffix): Ditto.
+
+Sat May 24 05:23:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-cache.el (gnus-cache-read-active): Would generate cache
+       active file too often.
+       (gnus-cache-possibly-alter-active): Test statement removed.
+       (gnus-cache-articles-in-group): Would destroy hashtb.
+
+       * gnus-sum.el (gnus-summary-limit-mark-excluded-as-read): Don't
+       mark everything as read.
+
+       * gnus-cite.el (gnus-article-fill-cited-article): Nix out
+       gnus-cite-article. 
+
+Tue May 20 21:43:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-move-article): Don't suppress moved
+       articles. 
+
+       * gnus-start.el (gnus-dribble-read-file): Check that the dribble
+       file exists.
+
+       * gnus-cache.el (gnus-cache-articles-in-group): Update cache
+       active file.
+
+Mon May 19 02:04:01 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-search-article): Typo.
+
+       * nnml.el (nnml-update-file-alist): Allow forcing.
+
+       * nnheaderxm.el (nnheader-xmas-find-file-noselect): Removed.
+       (nnheader-xmas-cancel-timer): Removed.
+       (nnheader-xmas-cancel-function-timers): Removed.
+
 Sun May 18 07:35:43 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Gnus v5.4.53 is released.
index f09c3fd..3ceffbf 100644 (file)
@@ -580,20 +580,18 @@ Initialized from `text-mode-syntax-table.")
 (defun gnus-article-delete-text-of-type (type)
   "Delete text of TYPE in the current buffer."
   (save-excursion
-    (let ((e (point-min))
-         b)
-      (while (setq b (text-property-any e (point-max) 'article-type type))
-       (setq e (text-property-not-all b (point-max) 'article-type type))
-       (delete-region b e)))))
+    (let ((b (point-min)))
+      (while (setq b (text-property-any b (point-max) 'article-type type))
+       (delete-region
+        b (text-property-not-all b (point-max) 'article-type type))))))
 
 (defun gnus-article-delete-invisible-text ()
   "Delete all invisible text in the current buffer."
   (save-excursion
-    (let ((e (point-min))
-         b)
-      (while (setq b (text-property-any e (point-max) 'invisible t))
-       (setq e (text-property-not-all b (point-max) 'invisible t))
-       (delete-region b e)))))
+    (let ((b (point-min)))
+      (while (setq b (text-property-any b (point-max) 'invisible t))
+       (delete-region
+        b (text-property-not-all b (point-max) 'invisible t))))))
 
 (defun gnus-article-text-type-exists-p (type)
   "Say whether any text of type TYPE exists in the buffer."
index 6121992..3ece68a 100644 (file)
@@ -255,15 +255,13 @@ variable to \"^nnml\"."
 
 (defun gnus-cache-possibly-alter-active (group active)
   "Alter the ACTIVE info for GROUP to reflect the articles in the cache."
-  (when (equal group "no.norsk") (error "hie"))
   (when gnus-cache-active-hashtb
     (let ((cache-active (gnus-gethash group gnus-cache-active-hashtb)))
-      (and cache-active
-          (< (car cache-active) (car active))
-          (setcar active (car cache-active)))
-      (and cache-active
-          (> (cdr cache-active) (cdr active))
-          (setcdr active (cdr cache-active))))))
+      (when cache-active
+       (when (< (car cache-active) (car active))
+         (setcar active (car cache-active)))
+       (when (> (cdr cache-active) (cdr active))
+         (setcdr active (cdr cache-active)))))))
 
 (defun gnus-cache-retrieve-headers (articles group &optional fetch-old)
   "Retrieve the headers for ARTICLES in GROUP."
@@ -452,11 +450,18 @@ Returns the list of articles removed."
 
 (defun gnus-cache-articles-in-group (group)
   "Return a sorted list of cached articles in GROUP."
-  (let ((dir (file-name-directory (gnus-cache-file-name group 1))))
+  (let ((dir (file-name-directory (gnus-cache-file-name group 1)))
+       articles)
     (when (file-exists-p dir)
-      (sort (mapcar (lambda (name) (string-to-int name))
-                   (directory-files dir nil "^[0-9]+$" t))
-           '<))))
+      (setq articles
+           (sort (mapcar (lambda (name) (string-to-int name))
+                         (directory-files dir nil "^[0-9]+$" t))
+                 '<))
+      ;; Update the cache active file, just to synch more.
+      (when articles
+       (gnus-cache-update-active group (car articles) t)
+       (gnus-cache-update-active group (car (last articles))))
+      articles)))
 
 (defun gnus-cache-braid-nov (group cached)
   (let ((cache-buf (get-buffer-create " *gnus-cache*"))
@@ -553,8 +558,8 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
 (defun gnus-cache-read-active (&optional force)
   "Read the cache active file."
   (gnus-make-directory gnus-cache-directory)
-  (if (not (and (file-exists-p gnus-cache-active-file)
-               (or force (not gnus-cache-active-hashtb))))
+  (if (or (not (file-exists-p gnus-cache-active-file))
+         force)
       ;; There is no active file, so we generate one.
       (gnus-cache-generate-active)
     ;; We simply read the active file.
index f0507a0..3b80b74 100644 (file)
@@ -98,13 +98,14 @@ The first regexp group should match the Supercite attribution."
   :group 'gnus-cite
   :type 'integer)
 
-(defcustom gnus-cite-attribution-prefix "in article\\|in <"
+(defcustom gnus-cite-attribution-prefix 
+  "in article\\|in <\\|On \\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\Sat\\|Sun\\),"
   "Regexp matching the beginning of an attribution line."
   :group 'gnus-cite
   :type 'regexp)
 
 (defcustom gnus-cite-attribution-suffix
-  "\\(wrote\\|writes\\|said\\|says\\):[ \t]*$"
+  "\\(\\(wrote\\|writes\\|said\\|says\\|>\\)\\(:\\|\\.\\.\\.\\)\\)[    ]*$"
   "Regexp matching the end of an attribution line.
 The text matching the first grouping will be used as a button."
   :group 'gnus-cite
@@ -437,7 +438,8 @@ If WIDTH (the numerical prefix), use that text width when filling."
        (setq gnus-cite-prefix-alist nil
              gnus-cite-attribution-alist nil
              gnus-cite-loose-prefix-alist nil
-             gnus-cite-loose-attribution-alist nil)))))
+             gnus-cite-loose-attribution-alist nil
+             gnus-cite-article nil)))))
 
 (defun gnus-article-hide-citation (&optional arg force)
   "Toggle hiding of all cited text except attribution lines.
index 6310920..aca6c8a 100644 (file)
@@ -762,6 +762,7 @@ prompt the user for the name of an NNTP server to use."
          ;; Set the file modes to reflect the .newsrc file modes.
          (save-buffer)
          (when (and (file-exists-p gnus-current-startup-file)
+                    (file-exists-p dribble-file)
                     (setq modes (file-modes gnus-current-startup-file)))
            (set-file-modes dribble-file modes))
          ;; Possibly eval the file later.
@@ -1648,7 +1649,7 @@ newsgroup."
                                (gnus-make-hashtable
                                 (count-lines (point-min) (point-max)))
                              (gnus-make-hashtable 4096)))))))
-    ;; Delete unnecessary lines, cleaned up dmoore@ucsd.edu 31.10.1996
+    ;; Delete unnecessary lines.
     (goto-char (point-min))
     (cond ((gnus-ignored-newsgroups-has-to-p)
           (delete-matching-lines gnus-ignored-newsgroups))
@@ -1660,21 +1661,20 @@ newsgroup."
 
     ;; Make the group names readable as a lisp expression even if they
     ;; contain special characters.
-    ;; Fix by Luc Van Eycken <Luc.VanEycken@esat.kuleuven.ac.be>.
     (goto-char (point-max))
     (while (re-search-backward "[][';?()#]" nil t)
       (insert ?\\))
 
     ;; If these are groups from a foreign select method, we insert the
     ;; group prefix in front of the group names.
-    (and method (not (gnus-server-equal
-                     (gnus-server-get-method nil method)
-                     (gnus-server-get-method nil gnus-select-method)))
-        (let ((prefix (gnus-group-prefixed-name "" method)))
-          (goto-char (point-min))
-          (while (and (not (eobp))
-                      (progn (insert prefix)
-                             (zerop (forward-line 1)))))))
+    (when (not (gnus-server-equal
+               (gnus-server-get-method nil method)
+               (gnus-server-get-method nil gnus-select-method)))
+      (let ((prefix (gnus-group-prefixed-name "" method)))
+       (goto-char (point-min))
+       (while (and (not (eobp))
+                   (progn (insert prefix)
+                          (zerop (forward-line 1)))))))
     ;; Store the active file in a hash table.
     (goto-char (point-min))
     (let (group max min)
index d4f0732..0e62453 100644 (file)
@@ -5858,7 +5858,7 @@ If ALL, mark even excluded ticked and dormants as read."
                    '<)
                   (sort gnus-newsgroup-limit '<)))
        article)
-    (setq gnus-newsgroup-unreads nil)
+    (setq gnus-newsgroup-unreads gnus-newsgroup-limit)
     (if all
        (setq gnus-newsgroup-dormant nil
              gnus-newsgroup-marked nil
@@ -6334,7 +6334,7 @@ Optional argument BACKWARD means do search for backward.
 `gnus-select-article-hook' is not called during the search."
   ;; We have to require this here to make sure that the following
   ;; dynamic binding isn't shadowed by autoloading.
-  (require 'gnus-asynch)
+  (require 'gnus-async)
   (let ((gnus-select-article-hook nil) ;Disable hook.
        (gnus-article-display-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
@@ -6663,6 +6663,8 @@ and `request-accept' functions."
        (cond
        ;; Move the article.
        ((eq action 'move)
+        ;; Remove this article from future suppression.
+        (gnus-dup-unsuppress-article article)
         (gnus-request-move-article
          article                       ; Article to move
          gnus-newsgroup-name           ; From newsgroup
index 6cb70cb..61db02a 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.53"
+(defconst gnus-version-number "5.4.54"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
index 52c2a3a..a8eb428 100644 (file)
@@ -2968,7 +2968,9 @@ Headers already prepared in the buffer are not modified."
     (let ((name (make-temp-name
                 (expand-file-name
                  (concat (file-name-as-directory message-autosave-directory)
-                         "msg." (buffer-name))))))
+                         "msg."
+                         (nnheader-replace-chars-in-string
+                          (buffer-name) ?* ?.))))))
       (setq buffer-auto-save-file-name
            (save-excursion
              (prog1
index 4ac2462..0a5fc99 100644 (file)
@@ -25,9 +25,6 @@
 
 ;;; Code:
 
-(eval-and-compile
-  (autoload 'nnheader-insert-file-contents "nnheader"))
-
 (defun nnheader-xmas-run-at-time (time repeat function &rest args)
   (start-itimer
    "nnheader-run-at-time"
       (,function ,@args))
    time repeat))
 
-(defun nnheader-xmas-cancel-timer (timer)
-  (delete-itimer timer))
-
-(defun nnheader-xmas-cancel-function-timers (function)
-  )
-
-(defun nnheader-xmas-find-file-noselect (filename &optional nowarn rawfile)
-  "Read file FILENAME into a buffer and return the buffer.
-If a buffer exists visiting FILENAME, return that one, but
-verify that the file has not changed since visited or saved.
-The buffer is not selected, just returned to the caller."
-  (setq filename
-       (abbreviate-file-name
-        (expand-file-name filename)))
-  (if (file-directory-p filename)
-      (if find-file-run-dired
-         (dired-noselect filename)
-       (error "%s is a directory." filename))
-    (let* ((buf (get-file-buffer filename))
-          (truename (abbreviate-file-name (file-truename filename)))
-          (number (nthcdr 10 (file-attributes truename)))
-          ;; Find any buffer for a file which has same truename.
-          (other (and (not buf)
-                      (get-file-buffer filename)))
-          error)
-      ;; Let user know if there is a buffer with the same truename.
-      (when other
-       (or nowarn
-           (string-equal filename (buffer-file-name other))
-           (message "%s and %s are the same file"
-                    filename (buffer-file-name other)))
-       ;; Optionally also find that buffer.
-       (when (or (and (boundp 'find-file-existing-other-name)
-                      find-file-existing-other-name)
-                 find-file-visit-truename)
-         (setq buf other)))
-      (if buf
-         (or nowarn
-             (verify-visited-file-modtime buf)
-             (cond ((not (file-exists-p filename))
-                    (error "File %s no longer exists!" filename))
-                   ((yes-or-no-p
-                     (if (string= (file-name-nondirectory filename)
-                                  (buffer-name buf))
-                         (format
-                          (if (buffer-modified-p buf)
-                              "File %s changed on disk.  Discard your edits? "
-                            "File %s changed on disk.  Reread from disk? ")
-                          (file-name-nondirectory filename))
-                       (format
-                        (if (buffer-modified-p buf)
-                            "File %s changed on disk.  Discard your edits in %s? "
-                          "File %s changed on disk.  Reread from disk into %s? ")
-                        (file-name-nondirectory filename)
-                        (buffer-name buf))))
-                    (save-excursion
-                      (set-buffer buf)
-                      (revert-buffer t t)))))
-       (save-excursion
-;;; The truename stuff makes this obsolete.
-;;;      (let* ((link-name (car (file-attributes filename)))
-;;;             (linked-buf (and (stringp link-name)
-;;;                              (get-file-buffer link-name))))
-;;;        (if (bufferp linked-buf)
-;;;            (message "Symbolic link to file in buffer %s"
-;;;                     (buffer-name linked-buf))))
-         (setq buf (create-file-buffer filename))
-         ;;      (set-buffer-major-mode buf)
-         (set-buffer buf)
-         (erase-buffer)
-         (if rawfile
-             (condition-case ()
-                 (nnheader-insert-file-contents filename t)
-               (file-error
-                ;; Unconditionally set error
-                (setq error t)))
-           (condition-case ()
-               (insert-file-contents filename t)
-             (file-error
-              ;; Run find-file-not-found-hooks until one returns non-nil.
-              (or t                    ; (run-hook-with-args-until-success 'find-file-not-found-hooks)
-                  ;; If they fail too, set error.
-                  (setq error t)))))
-         ;; Find the file's truename, and maybe use that as visited name.
-         (setq buffer-file-truename truename)
-         (setq buffer-file-number number)
-         ;; On VMS, we may want to remember which directory in a search list
-         ;; the file was found in.
-         (and (eq system-type 'vax-vms)
-              (let (logical)
-                (when (string-match ":" (file-name-directory filename))
-                  (setq logical (substring (file-name-directory filename)
-                                           0 (match-beginning 0))))
-                (not (member logical find-file-not-true-dirname-list)))
-              (setq buffer-file-name buffer-file-truename))
-         (when find-file-visit-truename
-           (setq buffer-file-name
-                 (setq filename
-                       (expand-file-name buffer-file-truename))))
-         ;; Set buffer's default directory to that of the file.
-         (setq default-directory (file-name-directory filename))
-         ;; Turn off backup files for certain file names.  Since
-         ;; this is a permanent local, the major mode won't eliminate it.
-         (when (not (funcall backup-enable-predicate buffer-file-name))
-           (make-local-variable 'backup-inhibited)
-           (setq backup-inhibited t))
-         (if rawfile
-             nil
-           (after-find-file error (not nowarn)))))
-      buf)))
-
 (fset 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
-(fset 'nnheader-cancel-timer 'nnheader-xmas-cancel-timer)
-(fset 'nnheader-cancel-function-timers 'nnheader-xmas-cancel-function-timers)
-(fset 'nnheader-find-file-noselect 'nnheader-xmas-find-file-noselect)
+(fset 'nnheader-cancel-timer 'delete-itimer)
+(fset 'nnheader-cancel-function-timers 'ignore)
 
 (provide 'nnheaderxm)
 
index f4c7cd0..6ba318f 100644 (file)
@@ -1042,6 +1042,9 @@ FUNC will be called with the group name to determine the article number."
                 (fboundp nnmail-split-methods))
            (let ((split
                   (condition-case nil
+                      ;; `nnmail-split-methods' is a function, so we
+                      ;; just call this function here and use the
+                      ;; result.
                       (or (funcall nnmail-split-methods)
                           '("bogus"))
                     (error
@@ -1049,9 +1052,13 @@ FUNC will be called with the group name to determine the article number."
                       "Error in `nnmail-split-methods'; using `bogus' mail group")
                      (sit-for 1)
                      '("bogus")))))
-             (unless (equal split '(junk))
-               ;; `nnmail-split-methods' is a function, so we just call
-               ;; this function here and use the result.
+             ;; The article may be "cross-posted" to `junk'.  What
+             ;; to do?  Just remove the `junk' spec.  Don't really
+             ;; see anything else to do...
+             (let (elem)
+               (while (setq elem (assq 'junk split))
+                 (setq split (delq elem split))))
+             (when split
                (setq group-art
                      (mapcar
                       (lambda (group) (cons group (funcall func group)))
@@ -1085,7 +1092,10 @@ FUNC will be called with the group name to determine the article number."
          ;; The article may be "cross-posted" to `junk'.  What
          ;; to do?  Just remove the `junk' spec.  Don't really
          ;; see anything else to do...
-         (nreverse (delq (assq 'junk group-art) group-art)))))))
+         (let (elem)
+           (while (setq elem (assq 'junk group-art))
+             (setq group-art (delq elem group-art)))
+           (nreverse group-art)))))))
 
 (defun nnmail-insert-lines ()
   "Insert how many lines there are in the body of the mail.
index bfd5a46..043912e 100644 (file)
@@ -460,8 +460,15 @@ all.  This may very well take some time.")
 (defun nnml-article-to-file (article)
   (nnml-update-file-alist)
   (let (file)
-    (when (setq file (cdr (assq article nnml-article-file-alist)))
-      (concat nnml-current-directory file))))
+    (if (setq file (cdr (assq article nnml-article-file-alist)))
+       (concat nnml-current-directory file)
+      ;; Just to make sure nothing went wrong when reading over NFS --
+      ;; check once more.
+      (when (file-exists-p
+            (setq file (concat nnml-current-directory "/"
+                               (number-to-string article))))
+       (nnml-update-file-alist t)
+       file))))
 
 (defun nnml-deletable-article-p (group article)
   "Say whether ARTICLE in GROUP can be deleted."
@@ -783,8 +790,9 @@ all.  This may very well take some time.")
                (setf (car active) num)))))))
     t))
 
-(defun nnml-update-file-alist ()
-  (unless nnml-article-file-alist
+(defun nnml-update-file-alist (&optional force)
+  (when (or (not nnml-article-file-alist)
+           force)
     (setq nnml-article-file-alist
          (nnheader-article-to-file-alist nnml-current-directory))))
 
index 5b4823b..1ff4978 100644 (file)
@@ -1,3 +1,11 @@
+Sat May 24 05:26:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Score File Format): Update.
+
+Tue May 20 21:56:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Document Server Internals): Typo.
+
 Sun May 18 05:59:24 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Topic Commands): Addition.
index e69dd49..d07c946 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4.53 Manual
+@settitle Gnus 5.4.54 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -287,7 +287,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Gnus 5.4.53 Manual
+@title Gnus 5.4.54 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -323,7 +323,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Gnus 5.4.53.
+This manual corresponds to Gnus 5.4.54.
 
 @end ifinfo
 
@@ -9943,7 +9943,7 @@ the article.
 @item body-end
 If present, this should match the end of the body of the article.
 
-@item nndoc-file-end
+@item file-end
 If present, this should match the end of the file.  All text after this
 regexp will be totally ignored. 
 
@@ -11144,7 +11144,8 @@ articles, but also all followups to the matching articles.  This allows
 you e.g. increase the score of followups to your own articles, or
 decrease the score of followups to the articles of some known
 trouble-maker.  Uses the same match types as the @code{From} header
-uses.
+uses.  (Using this match key will lead to creation of @file{ADAPT}
+files.) 
 
 @item Thread
 This match key works along the same lines as the @code{Followup} match
@@ -11156,7 +11157,8 @@ article that has @var{X} in its @code{References} header.  (These new
 articles.)  This will ensure that you can raise/lower the score of an
 entire thread, even though some articles in the thread may not have
 complete @code{References} headers.  Note that using this may lead to
-undeterministic scores of the articles in the thread.
+undeterministic scores of the articles in the thread.  (Using this match
+key will lead to creation of @file{ADAPT} files.)
 @end table
 @end enumerate
 
index 564aa32..81c1eb7 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 5.4.53 Manual
+@settitle Message 5.4.54 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -39,7 +39,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 5.4.53 Manual
+@title Message 5.4.54 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@ buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 5.4.53.  Message is distributed with
+This manual corresponds to Message 5.4.54.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has. 
 
diff --git a/todo b/todo
index b8ea88f..4c3d1ca 100644 (file)
--- a/todo
+++ b/todo
@@ -679,4 +679,38 @@ articles that match a certain From header.
 saving living summary buffers.
 
 * a function for selecting a particular group which will contain
-the articles listed in a list of article numbers/id's.
\ No newline at end of file
+the articles listed in a list of article numbers/id's.
+
+* a battery of character translation functions to translate common
+Mac, MS (etc) characters into ISO 8859-1.
+
+(defun article-fix-m$word ()
+  "Fix M$Word smartquotes in an article."
+  (interactive)
+  (save-excursion
+    (let ((buffer-read-only nil))
+      (goto-char (point-min))
+      (while (search-forward "\221" nil t)
+       (replace-match "`" t t))
+      (goto-char (point-min))
+      (while (search-forward "\222" nil t)
+       (replace-match "'" t t))
+      (goto-char (point-min))
+      (while (search-forward "\223" nil t)
+       (replace-match "\"" t t))
+      (goto-char (point-min))
+      (while (search-forward "\224" nil t)
+       (replace-match "\"" t t)))))
+
+* (add-hook 'gnus-exit-query-functions
+'(lambda ()
+   (if (and (file-exists-p nnmail-spool-file)
+           (> (nnheader-file-size nnmail-spool-file) 0))
+       (yes-or-no-p "New mail has arrived.  Quit Gnus anyways? ")
+       (y-or-n-p "Are you sure you want to quit Gnus? "))))
+
+* allow message-default-headers to be a function.
+
+* new Date score match types -- < > = (etc) that take floating point
+numbers and match on the age of the article.
+