*** empty log message ***
[gnus] / lisp / nnmail.el
index 3a5297c..5c0cd70 100644 (file)
@@ -33,7 +33,9 @@
 (require 'custom)
 
 (eval-and-compile
-  (autoload 'gnus-error "gnus-util"))
+  (autoload 'gnus-error "gnus-util")
+  (autoload 'gnus-buffer-live-p "gnus-util")
+  (autoload 'gnus-encode-coding-string "gnus-ems"))
 
 (defgroup nnmail nil
   "Reading mail with Gnus."
@@ -106,14 +108,14 @@ This variable can also have a function as its value."
 
 ;; Suggested by Erik Selberg <speed@cs.washington.edu>.
 (defcustom nnmail-crosspost t
-  "*If non-nil, do crossposting if several split methods match the mail.
+  "If non-nil, do crossposting if several split methods match the mail.
 If nil, the first match found will be used."
   :group 'nnmail-split
   :type 'boolean)
 
 ;; Added by gord@enci.ucalgary.ca (Gordon Matzigkeit).
 (defcustom nnmail-keep-last-article nil
-  "*If non-nil, nnmail will never delete/move a group's last article.
+  "If non-nil, nnmail will never delete/move a group's last article.
 It can be marked expirable, so it will be deleted when it is no longer last.
 
 You may need to set this variable if other programs are putting
@@ -123,14 +125,14 @@ new mail into folder numbers that Gnus has marked as expired."
   :type 'boolean)
 
 (defcustom nnmail-use-long-file-names nil
-  "*If non-nil the mail backends will use long file and directory names.
+  "If non-nil the mail backends will use long file and directory names.
 If nil, groups like \"mail.misc\" will end up in directories like
 \"mail/misc/\"."
   :group 'nnmail-files
   :type 'boolean)
 
 (defcustom nnmail-default-file-modes 384
-  "*Set the mode bits of all new mail files to this integer."
+  "Set the mode bits of all new mail files to this integer."
   :group 'nnmail-files
   :type 'integer)
 
@@ -145,7 +147,7 @@ can also be `immediate' and `never'."
                 (const never)))
 
 (defcustom nnmail-expiry-wait-function nil
-  "*Variable that holds function to specify how old articles should be before they are expired.
+  "Variable that holds function to specify how old articles should be before they are expired.
   The function will be called with the name of the group that the
 expiry is to be performed in, and it should return an integer that
 says how many days an article can be stored before it is considered
@@ -164,7 +166,7 @@ Eg.:
                 (function :format "%v" nnmail-)))
 
 (defcustom nnmail-cache-accepted-message-ids nil
-  "*If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache."
+  "If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache."
   :group 'nnmail
   :type 'boolean)
 
@@ -182,7 +184,7 @@ treat all files in that directory as incoming spool files."
   :type 'file)
 
 (defcustom nnmail-crash-box "~/.gnus-crash-box"
-  "*File where Gnus will store mail while processing it."
+  "File where Gnus will store mail while processing it."
   :group 'nnmail-files
   :type 'file)
 
@@ -211,7 +213,7 @@ several files - eg. \".spool[0-9]*\"."
   :type 'boolean)
 
 (defcustom nnmail-delete-file-function 'delete-file
-  "*Function called to delete files in some mail backends."
+  "Function called to delete files in some mail backends."
   :group 'nnmail-files
   :type 'function)
 
@@ -278,25 +280,25 @@ If you use `display-time', you could use something like this:
 
 ;; Suggested by Erik Selberg <speed@cs.washington.edu>.
 (defcustom nnmail-prepare-incoming-hook nil
-  "*Hook called before treating incoming mail.
+  "Hook called before treating incoming mail.
 The hook is run in a buffer with all the new, incoming mail."
   :group 'nnmail-prepare
   :type 'hook)
 
 (defcustom nnmail-prepare-incoming-header-hook nil
-  "*Hook called narrowed to the headers of each message.
+  "Hook called narrowed to the headers of each message.
 This can be used to remove excessive spaces (and stuff like
 that) from the headers before splitting and saving the messages."
   :group 'nnmail-prepare
   :type 'hook)
 
 (defcustom nnmail-prepare-incoming-message-hook nil
-  "*Hook called narrowed to each message."
+  "Hook called narrowed to each message."
   :group 'nnmail-prepare
   :type 'hook)
 
 (defcustom nnmail-list-identifiers nil
-  "*Regexp that matches list identifiers to be removed.
+  "Regexp that matches list identifiers to be removed.
 This can also be a list of regexps."
   :group 'nnmail-prepare
   :type '(choice (const :tag "none" nil)
@@ -304,17 +306,17 @@ This can also be a list of regexps."
                 (repeat :value (".*") regexp)))
 
 (defcustom nnmail-pre-get-new-mail-hook nil
-  "*Hook called just before starting to handle new incoming mail."
+  "Hook called just before starting to handle new incoming mail."
   :group 'nnmail-retrieve
   :type 'hook)
 
 (defcustom nnmail-post-get-new-mail-hook nil
-  "*Hook called just after finishing handling new incoming mail."
+  "Hook called just after finishing handling new incoming mail."
   :group 'nnmail-retrieve
   :type 'hook)
 
 (defcustom nnmail-split-hook nil
-  "*Hook called before deciding where to split an article.
+  "Hook called before deciding where to split an article.
 The functions in this hook are free to modify the buffer
 contents in any way they choose -- the buffer contents are
 discarded after running the split process."
@@ -338,7 +340,7 @@ messages will be shown to indicate the current status."
   :type 'integer)
 
 (defcustom nnmail-split-fancy "mail.misc"
-  "*Incoming mail can be split according to this fancy variable.
+  "Incoming mail can be split according to this fancy variable.
 To enable this, set `nnmail-split-methods' to `nnmail-split-fancy'.
 
 The format is this variable is SPLIT, where SPLIT can be one of
@@ -752,7 +754,7 @@ is a spool.  If not using procmail, return GROUP."
       (goto-char (point-min))
       (when (looking-at ">From ")
        (replace-match "X-From-Line: ") )
-      (gnus-run-hooks 'nnmail-prepare-incoming-header-hook)
+      (run-hooks 'nnmail-prepare-incoming-header-hook)
       (goto-char (point-max))
       ;; Find the Message-ID header.
       (save-excursion
@@ -912,7 +914,7 @@ is a spool.  If not using procmail, return GROUP."
          ;; having a (possibly) faulty header.
          (beginning-of-line)
          (insert "X-"))
-       (gnus-run-hooks 'nnmail-prepare-incoming-header-hook)
+       (run-hooks 'nnmail-prepare-incoming-header-hook)
        ;; Find the end of this article.
        (goto-char (point-max))
        (widen)
@@ -987,7 +989,7 @@ is a spool.  If not using procmail, return GROUP."
              (insert "Original-")))
          (forward-line 1)
          (insert "Message-ID: " (setq message-id (nnmail-message-id)) "\n"))
-       (gnus-run-hooks 'nnmail-prepare-incoming-header-hook)
+       (run-hooks 'nnmail-prepare-incoming-header-hook)
        ;; Find the end of this article.
        (goto-char (point-max))
        (widen)
@@ -1024,7 +1026,7 @@ FUNC will be called with the buffer narrowed to each mail."
       (nnheader-insert-file-contents incoming)
       (unless (zerop (buffer-size))
        (goto-char (point-min))
-       (save-excursion (gnus-run-hooks 'nnmail-prepare-incoming-hook))
+       (save-excursion (run-hooks 'nnmail-prepare-incoming-hook))
        ;; Handle both babyl, MMDF and unix mail formats, since movemail will
        ;; use the former when fetching from a mailbox, the latter when
        ;; fetching from a file.
@@ -1066,7 +1068,7 @@ FUNC will be called with the group name to determine the article number."
        (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t)
          (replace-match " " t t))
        ;; Allow washing.
-       (gnus-run-hooks 'nnmail-split-hook)
+       (run-hooks 'nnmail-split-hook)
        (if (and (symbolp nnmail-split-methods)
                 (fboundp nnmail-split-methods))
            (let ((split
@@ -1494,7 +1496,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (message-fetch-field header))))
 
 (defun nnmail-check-duplication (message-id func artnum-func)
-  (gnus-run-hooks 'nnmail-prepare-incoming-message-hook)
+  (run-hooks 'nnmail-prepare-incoming-message-hook)
   ;; If this is a duplicate message, then we do not save it.
   (let* ((duplication (nnmail-cache-id-exists-p message-id))
         (case-fold-search t)
@@ -1551,7 +1553,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       ;; We first activate all the groups.
       (nnmail-activate method)
       ;; Allow the user to hook.
-      (gnus-run-hooks 'nnmail-pre-get-new-mail-hook)
+      (run-hooks 'nnmail-pre-get-new-mail-hook)
       ;; Open the message-id cache.
       (nnmail-cache-open)
       ;; The we go through all the existing spool files and split the
@@ -1596,12 +1598,12 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
         (nnmail-get-value "%s-active-file" method))
        (when exit-func
          (funcall exit-func))
-       (gnus-run-hooks 'nnmail-read-incoming-hook)
+       (run-hooks 'nnmail-read-incoming-hook)
        (nnheader-message 3 "%s: Reading incoming mail...done" method))
       ;; Close the message-id cache.
       (nnmail-cache-close)
       ;; Allow the user to hook.
-      (gnus-run-hooks 'nnmail-post-get-new-mail-hook)
+      (run-hooks 'nnmail-post-get-new-mail-hook)
       ;; Delete all the temporary files.
       (while incomings
        (setq incoming (pop incomings))
@@ -1739,15 +1741,14 @@ If ARGS, PROMPT is used as an argument to `format'."
        (princ "\n")))))
 
 (defun nnmail-purge-split-history (group)
-  (let ((history nnmail-split-history))
+  "Remove all instances of GROUP from `nnmail-split-history'."
+  (let ((history nnmail-split-history)
+       prev)
     (while history
-      (let ((pairs (car history)))
-       (while pairs
-         (if (string= (car (car pairs)) group)
-             (setcar pairs (cdr pairs))
-           (setq pairs (cdr pairs)))))
-      (setq history (cdr history))))
-  (setq nnmail-split-history (delq nil nnmail-split-history)))
+      (setcar history (delete-if (lambda (e) (string= (car e) group))
+                                (car history)))
+      (pop history))
+    (setq nnmail-split-history (delq nil nnmail-split-history))))
 
 (defun nnmail-new-mail-p (group)
   "Say whether GROUP has new mail."