*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 5 Mar 1997 00:31:33 +0000 (00:31 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 5 Mar 1997 00:31:33 +0000 (00:31 +0000)
16 files changed:
lisp/ChangeLog
lisp/article.el
lisp/gnus-art.el
lisp/gnus-gl.el
lisp/gnus-group.el
lisp/gnus-score.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-util.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/messagexmas.el
lisp/nnfolder.el
lisp/nnmail.el
texi/gnus.texi

index 6a6ddaf..ca50c7d 100644 (file)
@@ -1,3 +1,77 @@
+Mon Nov 18 21:42:40 1996  Loren Schall  <schall@saifr00.ateng.az.honeywell.com>
+
+       * gnus-sum.el (gnus-summary-insert-line): Pick apart the From
+       header in reversed order.
+
+Mon Nov 18 02:00:33 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-refer-references): Protect against nil
+       References.
+
+       * gnus-score.el (gnus-all-score-files): Remove duplicate score
+       files from the end first.
+
+       * gnus-start.el (gnus-after-getting-new-news-hook,
+       gnus-get-new-news-hook): Switched defaults.
+
+       * gnus-score.el (gnus-all-score-files): Returned score files in
+       reverse order. 
+
+       * gnus-util.el (gnus-make-directory): Protect against nil dirs.
+
+       * gnus-art.el (gnus-decode-encoded-word-method): Default to
+       'gnus-article-de-quoted-unreadable. 
+
+       * gnus.el (gnus-read-group): Prohibit : in group name.
+       (gnus-article-display-hook): Removed
+       `gnus-article-de-quoted-unreadable'. 
+
+       * article.el (gnus-emphasis-alist): Accept "-" as word marker.
+
+       * messagexmas.el (message-xmas-dont-activate-region): Changed
+       default to t.
+
+Sun Nov 17 01:09:21 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el: Added customize support.
+
+Sun Nov 17 23:42:03 1996  Raja R. Harinath  <harinath@cs.umn.edu>
+
+       * gnus-gl.el (bbb-extract-token-number): Fix.
+
+Sun Nov 17 12:18:27 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-next-article): Use it.
+       (gnus-group-make-articles-read): Quote undo forms.
+       (gnus-update-read-articles): Ditto.
+
+       * gnus.el (gnus-key-press-event-p): New alias.
+
+Sat Nov 16 22:05:24 1996  Steven L Baur  <steve@miranova.com>
+
+       * gnus-sum.el (gnus-summary-next-article): XEmacs doesn't use
+       integers for keyboard events.
+
+Sun Nov 17 12:09:44 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-group.el (gnus-group-set-timestamp): Protect against nil
+       gnus-newsgroup-name. 
+
+Sun Nov 17 01:09:21 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nnmail.el: Added customize support.
+
+Sat Nov 16 22:59:47 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-summary-line-format): Dox fix.
+
+       * nnfolder.el (nnfolder-save-mail): Would insert extra newline at
+       the start.
+
+Sat Nov 16 19:43:22 1996  Lars Magne Ingebrigtsen  <menja.larsi@ifi.uio.no>
+
+       * gnus.el: Red Gnus v0.63 is released.
+
 Sat Nov 16 11:32:43 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus-sum.el (gnus-summary-next-article): Ignore non-keyboard
index c2869b3..6677078 100644 (file)
@@ -120,7 +120,7 @@ asynchronously.      The compressed face will be piped to this command."
 
 (defcustom gnus-emphasis-alist
   (let ((format
-        "\\(\\s-\\|^\\|[\"\(]\\)\\(%s\\(\\w+\\(\\s-+\\w+\\)*\\)%s\\)\\(\\s-\\|[?!.,;:\"\)]\\)")
+        "\\(\\s-\\|^\\|[-\"\(]\\)\\(%s\\(\\w+\\(\\s-+\\w+\\)*\\)%s\\)\\(\\s-\\|[-?!.,;:\"\)]\\)")
        (types
         '(("_" "_" underline)
           ("/" "/" italic)
index 62b91c7..342ffe1 100644 (file)
@@ -146,8 +146,8 @@ The function is called from the article buffer."
   :group 'article
   :type 'function)
 
-(defcustom gnus-decode-encoded-word-method (lambda ())
-  "*Function to decode a MIME encoded-words.
+(defcustom gnus-decode-encoded-word-method 'gnus-article-de-quoted-unreadable
+  "*Function to decode MIME encoded words.
 The function is called from the article buffer."
   :group 'article
   :type 'function)
index a961126..b83925d 100644 (file)
@@ -192,7 +192,7 @@ GroupLens scores can be combined with gnus scores in one of three ways.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Program global variables
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar grouplens-bbb-token "0"
+(defvar grouplens-bbb-token nil
   "Current session token number")
 
 (defvar grouplens-bbb-process nil
@@ -316,7 +316,7 @@ If this times out we give up and assume that something has died..." )
   grouplens-bbb-token)
 
 (defun bbb-extract-token-number ()
-  (let ((token-pos (search-forward "token=" nil t) ))
+  (let ((token-pos (search-forward "token=" nil t)))
     (when (looking-at "[0-9]+")
       (buffer-substring token-pos (match-end 0)))))
 
@@ -358,25 +358,22 @@ recommend using both scores and grouplens predictions together."
 
 (defun bbb-get-predictions (midlist groupname)
   "Ask the bbb for predictions, and build up the score alist."
-  (if (or (null grouplens-bbb-token)
-         (equal grouplens-bbb-token "0"))
-      (progn
-       (gnus-message 3 "Error: You are not logged in to a BBB")
-       (ding))
-    (gnus-message 5 "Fetching Predictions...")
-    (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
-                                           grouplens-bbb-port)))
-      (when bbb-process
-       (save-excursion
-         (set-buffer (process-buffer bbb-process))
-         (bbb-send-command bbb-process
-                           (bbb-build-predict-command midlist groupname
-                                                      grouplens-bbb-token))
-         (if (not (bbb-read-response bbb-process))
-             (progn
-               (gnus-message 1 "Invalid Token, login and try again")
-               (ding))
-           (bbb-get-prediction-response bbb-process)))))))
+  (gnus-message 5 "Fetching Predictions...")
+  (if grouplens-bbb-token
+      (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
+                                             grouplens-bbb-port)))
+       (when bbb-process
+         (save-excursion
+           (set-buffer (process-buffer bbb-process))
+           (bbb-send-command bbb-process
+                             (bbb-build-predict-command midlist groupname
+                                                        grouplens-bbb-token))
+           (if (bbb-read-response bbb-process)
+               (bbb-get-prediction-response bbb-process)
+             (gnus-message 1 "Invalid Token, login and try again")
+             (ding)))))
+    (gnus-message 3 "Error: You are not logged in to a BBB")
+    (ding)))
 
 (defun bbb-get-all-mids ()
   (mapcar (function (lambda (x) (mail-header-id x))) gnus-newsgroup-headers))
@@ -833,9 +830,9 @@ recommend using both scores and grouplens predictions together."
        ;; leave the gnus-score-find-score-files variable alone
        ((eq gnus-grouplens-override-scoring 'separate)
        (add-hook 'gnus-select-group-hook 
-                 '(lambda ()
-                    (bbb-get-predictions (bbb-get-all-mids) 
-                                         gnus-newsgroup-name))))
+                 (lambda ()
+                   (bbb-get-predictions (bbb-get-all-mids)
+                                        gnus-newsgroup-name))))
        ;; default is to override
        (t 
        (setq gnus-score-find-score-files-function 
index 81af8ec..0ec9b97 100644 (file)
@@ -3401,9 +3401,10 @@ and the second element is the address."
   "Change the timestamp of the current group to the current time.
 This function can be used in hooks like `gnus-select-group-hook'
 or `gnus-group-catchup-group-hook'."
-  (let ((time (current-time)))
-    (setcdr (cdr time) nil)
-    (gnus-group-set-parameter gnus-newsgroup-name 'timestamp time)))
+  (when gnus-newsgroup-name
+    (let ((time (current-time)))
+      (setcdr (cdr time) nil)
+      (gnus-group-set-parameter gnus-newsgroup-name 'timestamp time))))
 
 (defsubst gnus-group-timestamp (group)
   "Return the timestamp for GROUP."
index d2d3012..4383555 100644 (file)
@@ -2558,7 +2558,7 @@ The list is determined from the variable gnus-score-file-alist."
         (setq funcs (list funcs)))
     ;; Get the initial score files for this group.
     (when funcs 
-      (setq score-files (gnus-score-find-alist group)))
+      (setq score-files (nreverse (gnus-score-find-alist group))))
     ;; Add any home adapt files.
     (let ((home (gnus-home-score-file group t)))
       (when home
@@ -2590,6 +2590,7 @@ The list is determined from the variable gnus-score-file-alist."
        (when (stringp (car files))
          (setcar files (expand-file-name (car files))))
        (pop files)))
+    (setq score-files (nreverse score-files))
     ;; Remove any duplicate score files.
     (while (and score-files
                (member (car score-files) (cdr score-files)))
index 120eb76..6e894a4 100644 (file)
@@ -30,6 +30,7 @@
 (require 'gnus-int)
 (require 'gnus-spec)
 (require 'gnus-range)
+(require 'gnus-util)
 (require 'message)
 
 (defcustom gnus-startup-file "~/.newsrc"
@@ -336,14 +337,14 @@ This hook is called after Gnus is connected to the NNTP server."
   :group 'gnus-start
   :type 'hook)
 
-(defcustom gnus-get-new-news-hook 
-  (when (gnus-boundp 'display-time-timer)
-    '(display-time-event-handler))
+(defcustom gnus-get-new-news-hook nil
   "A hook run just before Gnus checks for new news."
   :group 'gnus-start
   :type 'hook)
 
-(defcustom gnus-after-getting-new-news-hook nil
+(defcustom gnus-after-getting-new-news-hook 
+  (when (gnus-boundp 'display-time-timer)
+    '(display-time-event-handler))
   "A hook run after Gnus checks for new news."
   :group 'gnus-start
   :type 'hook)
index 98ec380..a706a0d 100644 (file)
@@ -2477,15 +2477,15 @@ This is all marks except unread, ticked, dormant, and expirable."
         (gnus-tmp-from (mail-header-from gnus-tmp-header))
         (gnus-tmp-name
          (cond
-          ((string-match "(.+)" gnus-tmp-from)
-           (substring gnus-tmp-from
-                      (1+ (match-beginning 0)) (1- (match-end 0))))
           ((string-match "<[^>]+> *$" gnus-tmp-from)
            (let ((beg (match-beginning 0)))
              (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
                       (substring gnus-tmp-from (1+ (match-beginning 0))
                                  (1- (match-end 0))))
                  (substring gnus-tmp-from 0 beg))))
+          ((string-match "(.+)" gnus-tmp-from)
+           (substring gnus-tmp-from
+                      (1+ (match-beginning 0)) (1- (match-end 0))))
           (t gnus-tmp-from)))
         (gnus-tmp-subject (mail-header-subject gnus-tmp-header))
         (gnus-tmp-number (mail-header-number gnus-tmp-header))
@@ -3552,15 +3552,15 @@ or a straight list of headers."
             gnus-tmp-from (mail-header-from gnus-tmp-header)
             gnus-tmp-name
             (cond
-             ((string-match "(.+)" gnus-tmp-from)
-              (substring gnus-tmp-from
-                         (1+ (match-beginning 0)) (1- (match-end 0))))
              ((string-match "<[^>]+> *$" gnus-tmp-from)
               (setq beg-match (match-beginning 0))
               (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
                        (substring gnus-tmp-from (1+ (match-beginning 0))
                                   (1- (match-end 0))))
                   (substring gnus-tmp-from 0 beg-match)))
+             ((string-match "(.+)" gnus-tmp-from)
+              (substring gnus-tmp-from
+                         (1+ (match-beginning 0)) (1- (match-end 0))))
              (t gnus-tmp-from)))
            (when (string= gnus-tmp-name "")
              (setq gnus-tmp-name gnus-tmp-from))
@@ -4047,8 +4047,8 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (setq articles (delq id articles))))))
     (gnus-undo-register
       `(progn
-        (gnus-info-set-marks ,info ,(gnus-info-marks info))
-        (gnus-info-set-read ,info ,(gnus-info-read info))
+        (gnus-info-set-marks ,info ',(gnus-info-marks info))
+        (gnus-info-set-read ,info ',(gnus-info-read info))
         (gnus-group-update-group group t)))
     ;; If the read list is nil, we init it.
     (and active
@@ -5332,7 +5332,7 @@ If BACKWARD, the previous article is selected instead of the next."
                          "exiting"))
          (gnus-summary-next-group nil group backward)))
        (t
-       (when (numberp last-input-event)
+       (when (gnus-key-press-event-p last-input-event)
          (gnus-summary-walk-group-buffer
           gnus-newsgroup-name cmd unread backward))))))))
 
@@ -6018,16 +6018,19 @@ Return how many articles were fetched."
   (let ((ref (mail-header-references (gnus-summary-article-header)))
        (current (gnus-summary-article-number))
        (n 0))
-    ;; For each Message-ID in the References header...
-    (while (string-match "<[^>]*>" ref)
-      (incf n)
-      ;; ... fetch that article.
-      (gnus-summary-refer-article
-       (prog1 (match-string 0 ref)
-        (setq ref (substring ref (match-end 0))))))
-    (gnus-summary-goto-subject current)
-    (gnus-summary-position-point)
-    n))
+    (if (or (not ref)
+           (equal ref ""))
+       (error "No References in the current article")
+      ;; For each Message-ID in the References header...
+      (while (string-match "<[^>]*>" ref)
+       (incf n)
+       ;; ... fetch that article.
+       (gnus-summary-refer-article
+        (prog1 (match-string 0 ref)
+          (setq ref (substring ref (match-end 0))))))
+      (gnus-summary-goto-subject current)
+      (gnus-summary-position-point)
+      n)))
 
 (defun gnus-summary-refer-article (message-id)
   "Fetch an article specified by MESSAGE-ID."
@@ -8420,8 +8423,8 @@ save those articles instead."
        (push (cons prev (cdr active)) read))
       (gnus-undo-register
        `(progn
-          (gnus-info-set-marks ,info ,(gnus-info-marks info))
-          (gnus-info-set-read ,info ,(gnus-info-read info))
+          (gnus-info-set-marks ,info ',(gnus-info-marks info))
+          (gnus-info-set-read ,info ',(gnus-info-read info))
           (gnus-get-unread-articles-in-group ,info (gnus-active ,group))))
       ;; Enter this list into the group info.
       (gnus-info-set-read
index 1b927e1..892604d 100644 (file)
@@ -572,7 +572,8 @@ Bind `print-quoted' to t while printing."
 
 (defun gnus-make-directory (directory)
   "Make DIRECTORY (and all its parents) if it doesn't exist."
-  (when (not (file-exists-p directory))
+  (when (and directory
+            (not (file-exists-p directory)))
     (make-directory directory t))
   t)
 
index fddc12f..3dbd621 100644 (file)
@@ -446,6 +446,7 @@ call it with the value of the `gnus-data' text property."
   (fset 'gnus-article-show-hidden-text 'gnus-xmas-article-show-hidden-text)
   (fset 'gnus-mode-line-buffer-identification
        'gnus-xmas-mode-line-buffer-identification)
+  (fset 'gnus-key-press-event-p 'key-press-event-p)
 
   (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
   (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
index e765407..1259e3d 100644 (file)
@@ -42,7 +42,7 @@
   "Score and kill file handling."
   :group 'gnus )
 
-(defconst gnus-version-number "0.63"
+(defconst gnus-version-number "0.64"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
@@ -88,7 +88,8 @@ be set in `.emacs' instead."
   (defalias 'gnus-character-to-event 'identity)
   (defalias 'gnus-add-text-properties 'add-text-properties)
   (defalias 'gnus-put-text-property 'put-text-property)
-  (defalias 'gnus-mode-line-buffer-identification 'identity))
+  (defalias 'gnus-mode-line-buffer-identification 'identity)
+  (defalias 'gnus-key-press-event-p 'numberp))
 
 ;; The XEmacs people think this is evil, so it must go.
 (defun custom-face-lookup (&optional fg bg stipple bold italic underline)
@@ -837,12 +838,10 @@ face."
        gnus-article-hide-boring-headers
        gnus-article-treat-overstrike
        gnus-article-maybe-highlight
-       gnus-article-de-quoted-unreadable
        gnus-article-display-x-face)
     '(gnus-article-hide-headers-if-wanted
       gnus-article-hide-boring-headers
       gnus-article-treat-overstrike
-      gnus-article-de-quoted-unreadable
       gnus-article-maybe-highlight))
   "Controls how the article buffer will look.
 
@@ -1216,6 +1215,7 @@ with some simple extensions.
 %t   Number of articles under the current thread (number).
 %e   Whether the thread is empty or not (character).
 %l   GroupLens score (string).
+%V   Total thread score (number).
 %P   The line number (number).
 %u   User defined specifier.  The next character in the format string should
      be a letter.  Gnus will call the function gnus-user-format-function-X,
@@ -1954,7 +1954,7 @@ Disallow illegal group names."
        group)
     (while (not group)
       (when (string-match
-            "[ `'\"/]\\|^$"
+            "[: `'\"/]\\|^$"
             (setq group (read-string (concat prefix prompt)
                                      "" 'gnus-group-history)))
        (setq prefix (format "Illegal group name: \"%s\".  " group)
index 51209e1..9141fe6 100644 (file)
 (require 'nnheader)
 (require 'timezone)
 (require 'easymenu)
+(require 'custom)
 (if (string-match "XEmacs\\|Lucid" emacs-version)
     (require 'mail-abbrevs)
   (require 'mailabbrev))
 
-(defvar message-directory "~/Mail/"
-  "*Directory from which all other mail file variables are derived.")
+(defgroup message nil
+  "Mail and news message composing."
+  :group 'emacs)
 
-(defvar message-max-buffers 10
-  "*How many buffers to keep before starting to kill them off.")
+(defcustom message-directory "~/Mail/"
+  "*Directory from which all other mail file variables are derived."
+  :group 'message
+  :type 'directory)
 
-(defvar message-send-rename-function nil
-  "Function called to rename the buffer after sending it.")
+(defcustom message-max-buffers 10
+  "*How many buffers to keep before starting to kill them off."
+  :group 'message
+  :type 'integer)
+
+(defcustom message-send-rename-function nil
+  "Function called to rename the buffer after sending it."
+  :group 'message
+  :type 'function)
 
 ;;;###autoload
 (defvar message-fcc-handler-function 'rmail-output
 This function will be called with the name of the file to store the
 article in.  The default function is `rmail-output' which saves in Unix
 mailbox format.")
-
-(defvar message-courtesy-message
+(put 'message-fcc-handler-function 
+     'custom-type '(radio (function-item rmail-output)
+                         (function :tag "Other")))
+(put 'message-fcc-handler-function
+     'factory-value '('rmail-output))
+(custom-add-to-group 'message 'message-fcc-handler-function 'custom-variable)
+
+(defcustom message-courtesy-message
   "The following message is a courtesy copy of an article\nthat has been posted to %s as well.\n\n"
   "*This is inserted at the start of a mailed copy of a posted message.
 If the string contains the format spec \"%s\", the Newsgroups
 the article has been posted to will be inserted there.
-If this variable is nil, no such courtesy message will be added.")
+If this variable is nil, no such courtesy message will be added."
+  :group 'message
+  :type 'string)
 
-(defvar message-ignored-bounced-headers "^\\(Received\\|Return-Path\\):"
-  "*Regexp that matches headers to be removed in resent bounced mail.")
+(defcustom message-ignored-bounced-headers "^\\(Received\\|Return-Path\\):"
+  "*Regexp that matches headers to be removed in resent bounced mail."
+  :group 'message
+  :type 'regexp)
 
 ;;;###autoload
 (defvar message-from-style 'default
@@ -79,8 +100,17 @@ If `angles', they look like:
 
 Otherwise, most addresses look like `angles', but they look like
 `parens' if `angles' would need quoting and `parens' would not.")
+(put 'message-from-style
+     'custom-type '(choice (const :tag "simple" nil)
+                          (const parens)
+                          (const angles)
+                          (const default)))
+(put 'message-from-style
+     'factory-value '('default))
+(custom-add-to-group 'message 'message-from-style 'custom-variable)
 
 (defvar message-syntax-checks nil
+  ;; Guess this one shouldn't be easy to customize...
   "Controls what syntax checks should not be performed on outgoing posts.
 To disable checking of long signatures, for instance, add
  `(signature . disabled)' to this list.
@@ -92,96 +122,145 @@ long-lines control-chars size new-text redirected-followup signature
 approved sender empty empty-headers message-id from subject
 shorten-followup-to existing-newsgroups.")
 
-(defvar message-required-news-headers
+(defcustom message-required-news-headers
   '(From Newsgroups Subject Date Message-ID 
         (optional . Organization) Lines 
         (optional . X-Newsreader))
-  "*Headers to be generated or prompted for when posting an article.
+  "Headers to be generated or prompted for when posting an article.
 RFC977 and RFC1036 require From, Date, Newsgroups, Subject,
 Message-ID.  Organization, Lines, In-Reply-To, Expires, and
 X-Newsreader are optional.  If don't you want message to insert some
-header, remove it from this list.")
+header, remove it from this list."
+  :group 'message
+  :type 'sexp)
 
-(defvar message-required-mail-headers 
+(defcustom message-required-mail-headers 
   '(From Subject Date (optional . In-Reply-To) Message-ID Lines
         (optional . X-Mailer))
-  "*Headers to be generated or prompted for when mailing a message.
+  "Headers to be generated or prompted for when mailing a message.
 RFC822 required that From, Date, To, Subject and Message-ID be
-included.  Organization, Lines and X-Mailer are optional.")
+included.  Organization, Lines and X-Mailer are optional."
+  :group 'message
+  :type 'sexp)
 
-(defvar message-deletable-headers '(Message-ID Date Lines)
-  "*Headers to be deleted if they already exist and were generated by message previously.")
+(defcustom message-deletable-headers '(Message-ID Date Lines)
+  "Headers to be deleted if they already exist and were generated by message previously."
+  :group 'message
+  :type 'sexp)
 
-(defvar message-ignored-news-headers 
+(defcustom message-ignored-news-headers 
   "^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:\\|^Resent-Fcc:"
-  "*Regexp of headers to be removed unconditionally before posting.")
+  "*Regexp of headers to be removed unconditionally before posting."
+  :group 'message
+  :type 'regexp)
 
-(defvar message-ignored-mail-headers "^Gcc:\\|^Fcc:\\|^Resent-Fcc:"
-  "*Regexp of headers to be removed unconditionally before mailing.")
+(defcustom message-ignored-mail-headers "^Gcc:\\|^Fcc:\\|^Resent-Fcc:"
+  "*Regexp of headers to be removed unconditionally before mailing."
+  :group 'message
+  :type 'regexp)
 
-(defvar message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:"
   "*Header lines matching this regexp will be deleted before posting.
 It's best to delete old Path and Date headers before posting to avoid
-any confusion.")
+any confusion."
+  :group 'message
+  :type 'regexp)
 
 ;;;###autoload
 (defvar message-signature-separator "^-- *$"
   "Regexp matching the signature separator.")
+(put 'message-signature-separator
+     'custom-type 'regexp)
+(put 'message-signature-separator
+     'factory-value '("^-- *$"))
+(custom-add-to-group 'message 'message-signature-separator 'custom-variable)
 
-(defvar message-interactive nil 
+(defcustom message-interactive nil 
   "Non-nil means when sending a message wait for and display errors.
-nil means let mailer mail back a message to report errors.")
+nil means let mailer mail back a message to report errors."
+  :group 'message
+  :type 'boolean)
 
-(defvar message-generate-new-buffers t
+(defcustom message-generate-new-buffers t
   "*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.
 If this is a function, call that function with three parameters:  The type,
 the to address and the group name.  (Any of these may be nil.)  The function
-should return the new buffer name.")
+should return the new buffer name."
+  :group 'message
+  :type '(choice (const :tag "off" nil)
+                (const :tag "on" t)
+                (function fun)))
 
-(defvar message-kill-buffer-on-exit nil
-  "*Non-nil means that the message buffer will be killed after sending a message.")
+(defcustom message-kill-buffer-on-exit nil
+  "*Non-nil means that the message buffer will be killed after sending a message."
+  :group 'message
+  :type 'boolean)
 
 (defvar gnus-local-organization)
-(defvar message-user-organization 
+(defcustom message-user-organization 
   (or (and (boundp 'gnus-local-organization)
           gnus-local-organization)
       (getenv "ORGANIZATION")
       t)
   "*String to be used as an Organization header.
-If t, use `message-user-organization-file'.")
+If t, use `message-user-organization-file'."
+  :group 'message
+  :type '(choice string
+                (const :tag "consult file" t)))
 
 ;;;###autoload
 (defvar message-user-organization-file "/usr/lib/news/organization"
   "*Local news organization file.")
+(put 'message-user-organization-file
+     'custom-type 'file)
+(put 'message-user-organization-file
+     'factory-value '("/usr/lib/news/organization"))
+(custom-add-to-group 'message 'message-user-organization-file 'custom-variable)
 
-(defvar message-autosave-directory "~/"
+(defcustom message-autosave-directory "~/"
   ; (concat (file-name-as-directory message-directory) "drafts/")
   "*Directory where message autosaves buffers.
-If nil, message won't autosave.")
+If nil, message won't autosave."
+  :group 'message
+  :type 'directory)
 
-(defvar message-forward-start-separator 
+(defcustom message-forward-start-separator 
   "------- Start of forwarded message -------\n"
-  "*Delimiter inserted before forwarded messages.")
+  "*Delimiter inserted before forwarded messages."
+  :group 'message
+  :type 'string)
 
-(defvar message-forward-end-separator
+(defcustom message-forward-end-separator
   "------- End of forwarded message -------\n"
-  "*Delimiter inserted after forwarded messages.")
+  "*Delimiter inserted after forwarded messages."
+  :group 'message
+  :type 'string)
 
-(defvar message-signature-before-forwarded-message t
-  "*If non-nil, put the signature before any included forwarded message.")
+(defcustom message-signature-before-forwarded-message t
+  "*If non-nil, put the signature before any included forwarded message."
+  :group 'message
+  :type 'boolean)
 
-(defvar message-included-forward-headers 
+(defcustom message-included-forward-headers 
   "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-\\|^Message-ID:\\|^References:"
-  "*Regexp matching headers to be included in forwarded messages.")
+  "*Regexp matching headers to be included in forwarded messages."
+  :group 'message
+  :type 'regexp)
 
-(defvar message-ignored-resent-headers "^Return-receipt"
-  "*All headers that match this regexp will be deleted when resending a message.")
+(defcustom message-ignored-resent-headers "^Return-receipt"
+  "*All headers that match this regexp will be deleted when resending a message."
+  :group 'message
+  :type 'regexp)
 
-(defvar message-ignored-cited-headers "."
-  "*Delete these headers from the messages you yank.")
+(defcustom message-ignored-cited-headers "."
+  "*Delete these headers from the messages you yank."
+  :group 'message
+  :type 'regexp)
 
-(defvar message-cancel-message "I am canceling my own article."
-  "Message to be inserted in the cancel message.")
+(defcustom message-cancel-message "I am canceling my own article."
+  "Message to be inserted in the cancel message."
+  :group 'message
+  :type 'string)
 
 ;; Useful to set in site-init.el
 ;;;###autoload
@@ -192,90 +271,145 @@ variable `mail-header-separator'.
 
 Legal values include `message-send-mail-with-sendmail' (the default),
 `message-send-mail-with-mh' and `message-send-mail-with-qmail'.")
+(put 'message-send-mail-function
+     'custom-type '(radio (function-item message-send-mail-with-sendmail)
+                         (function-item message-send-mail-with-mh)
+                         (function-item message-send-mail-with-qmail)
+                         (function :tag "Other")))
+(put 'message-send-mail-function
+     'factory-value '('rmail-output))
+(custom-add-to-group 'message 'message-send-mail-function 'custom-variable)
 
-(defvar message-send-news-function 'message-send-news
+
+(defcustom message-send-news-function 'message-send-news
   "Function to call to send the current buffer as news.
 The headers should be delimited by a line whose contents match the
-variable `mail-header-separator'.")
+variable `mail-header-separator'."
+  :group 'message
+  :type 'function)
 
-(defvar message-reply-to-function nil
+(defcustom message-reply-to-function nil
   "Function that should return a list of headers.
 This function should pick out addresses from the To, Cc, and From headers
-and respond with new To and Cc headers.")
+and respond with new To and Cc headers."
+  :group 'message
+  :type 'function)
 
-(defvar message-wide-reply-to-function nil
+(defcustom message-wide-reply-to-function nil
   "Function that should return a list of headers.
 This function should pick out addresses from the To, Cc, and From headers
-and respond with new To and Cc headers.")
+and respond with new To and Cc headers."
+  :group 'message
+  :type 'function)
 
-(defvar message-followup-to-function nil
+(defcustom message-followup-to-function nil
   "Function that should return a list of headers.
 This function should pick out addresses from the To, Cc, and From headers
-and respond with new To and Cc headers.")
+and respond with new To and Cc headers."
+  :group 'message
+  :type 'function)
 
-(defvar message-use-followup-to 'ask
+(defcustom message-use-followup-to 'ask
   "*Specifies what to do with Followup-To header.
 If nil, ignore the header.  If it is t, use its value, but query before
 using the \"poster\" value.  If it is the symbol `ask', query the user
 whether to ignore the \"poster\" value.  If it is the symbol `use',
-always use the value.")
+always use the value."
+  :group 'message
+  :type '(choice (const :tag "ignore" nil)
+                (const use)
+                (const ask)))
 
 ;; qmail-related stuff
-(defvar message-qmail-inject-program "/var/qmail/bin/qmail-inject"
-  "Location of the qmail-inject program.")
+(defcustom message-qmail-inject-program "/var/qmail/bin/qmail-inject"
+  "Location of the qmail-inject program."
+  :group 'message
+  :type 'file)
 
-(defvar message-qmail-inject-args nil
+(defcustom message-qmail-inject-args nil
   "Arguments passed to qmail-inject programs.
 This should be a list of strings, one string for each argument.
 
 For e.g., if you wish to set the envelope sender address so that bounces
 go to the right place or to deal with listserv's usage of that address, you
-might set this variable to '(\"-f\" \"you@some.where\").")
+might set this variable to '(\"-f\" \"you@some.where\")."
+  :group 'message
+  :type '(repeat string))
 
 (defvar gnus-post-method)
 (defvar gnus-select-method)
-(defvar message-post-method 
+(defcustom message-post-method 
   (cond ((and (boundp 'gnus-post-method)
              gnus-post-method)
         gnus-post-method)
        ((boundp 'gnus-select-method)
         gnus-select-method)
        (t '(nnspool "")))
-  "Method used to post news.")
-
-(defvar message-generate-headers-first nil
-  "*If non-nil, generate all possible headers before composing.")
-
-(defvar message-setup-hook nil
+  "Method used to post news."
+  :group 'message
+  ;; This should be the `gnus-select-method' widget, but that might
+  ;; create a dependence to `gnus.el'.
+  :type 'sexp)
+
+(defcustom message-generate-headers-first nil
+  "*If non-nil, generate all possible headers before composing."
+  :group 'message
+  :type 'boolean)
+
+(defcustom message-setup-hook nil
   "Normal hook, run each time a new outgoing message is initialized.
-The function `message-setup' runs this hook.")
+The function `message-setup' runs this hook."
+  :group 'message
+  :type 'hook)
 
-(defvar message-signature-setup-hook nil
+(defcustom message-signature-setup-hook nil
   "Normal hook, run each time a new outgoing message is initialized.
 It is run after the headers have been inserted and before 
-the signature is inserted.")
-
-(defvar message-mode-hook nil
-  "Hook run in message mode buffers.")
-
-(defvar message-header-hook nil
-  "Hook run in a message mode buffer narrowed to the headers.")
-
-(defvar message-header-setup-hook nil
-  "Hook called narrowed to the headers when setting up a message buffer.")
+the signature is inserted."
+  :group 'message
+  :type 'hook)
+
+(defcustom message-mode-hook nil
+  "Hook run in message mode buffers."
+  :group 'message
+  :type 'hook)
+
+(defcustom message-header-hook nil
+  "Hook run in a message mode buffer narrowed to the headers."
+  :group 'message
+  :type 'hook)
+
+(defcustom message-header-setup-hook nil
+  "Hook called narrowed to the headers when setting up a message
+buffer."
+  :group 'message
+  :type 'hook)
 
 ;;;###autoload
 (defvar message-citation-line-function 'message-insert-citation-line
   "*Function called to insert the \"Whomever writes:\" line.")
+(put 'message-citation-line-function
+     'custom-type 'function)
+(put 'message-citation-line-function
+     'factory-value '('message-insert-citation-line))
+(custom-add-to-group 'message 'message-citation-line-function 'custom-variable)
+
 
 ;;;###autoload
 (defvar message-yank-prefix "> "
   "*Prefix inserted on the lines of yanked messages.
 nil means use indentation.")
+(put 'message-yank-prefix
+     'custom-type 'string)
+(put 'message-yank-prefix
+     'factory-value '("> "))
+(custom-add-to-group 'message 'message-yank-prefix 'custom-variable)
 
-(defvar message-indentation-spaces 3
+(defcustom message-indentation-spaces 3
   "*Number of spaces to insert at the beginning of each cited line.
-Used by `message-yank-original' via `message-yank-cite'.")
+Used by `message-yank-original' via `message-yank-cite'."
+  :group 'message
+  :type 'integer)
 
 ;;;###autoload
 (defvar message-cite-function
@@ -284,6 +418,13 @@ Used by `message-yank-original' via `message-yank-cite'.")
       mail-citation-hook
     'message-cite-original)
   "*Function for citing an original message.")
+(put 'message-cite-function
+     'custom-type '(radio (function-item message-cite-original)
+                         (function-item sc-cite-original)
+                         (function :tag "Other")))
+(put 'message-cite-function
+     'factory-value '('message-cite-original))
+(custom-add-to-group 'message 'message-cite-function 'custom-variable)
 
 ;;;###autoload
 (defvar message-indent-citation-function 'message-indent-citation
@@ -291,6 +432,11 @@ Used by `message-yank-original' via `message-yank-cite'.")
 This can also be a list of functions.  Each function can find the
 citation between (point) and (mark t).  And each function should leave
 point and mark around the citation text as modified.")
+(put 'message-indent-citation-function
+     'custom-type 'function)
+(put 'message-indent-citation-function
+     'factory-value '('message-indent-citation))
+(custom-add-to-group 'message 'message-indent-citation-function 'custom-variable)
 
 (defvar message-abbrevs-loaded nil)
 
@@ -300,20 +446,38 @@ point and mark around the citation text as modified.")
 If t, the `message-signature-file' file will be inserted instead.
 If a function, the result from the function will be used instead.
 If a form, the result from the form will be used instead.")
+(put 'message-signature
+     'custom-type 'sexp)
+(put 'message-signature
+     'factory-value '(t))
+(custom-add-to-group 'message 'message-signature 'custom-variable)
 
 ;;;###autoload
 (defvar message-signature-file "~/.signature"
   "*File containing the text inserted at end of message buffer.")
-
-(defvar message-distribution-function nil
-  "*Function called to return a Distribution header.")
-
-(defvar message-expires 14
-  "*Number of days before your article expires.")
-
-(defvar message-user-path nil
+(put 'message-signature-file
+     'custom-type 'file)
+(put 'message-signature-file
+     'factory-value '("~/.signature"))
+(custom-add-to-group 'message 'message-signature-file 'custom-variable)
+
+(defcustom message-distribution-function nil
+  "*Function called to return a Distribution header."
+  :group 'message
+  :type 'function)
+
+(defcustom message-expires 14
+  "*Number of days before your article expires."
+  :group 'message
+  :type 'integer)
+
+(defcustom message-user-path nil
   "If nil, use the NNTP server name in the Path header.
-If stringp, use this; if non-nil, use no host name (user name only).")
+If stringp, use this; if non-nil, use no host name (user name only)."
+  :group 'message
+  :type '(choice (const :tag "nntp" nil)
+                (string :tag "name")
+                (sexp :tag "none" :format "%t" t)))
 
 (defvar message-reply-buffer nil)
 (defvar message-reply-headers nil)
@@ -330,20 +494,27 @@ If stringp, use this; if non-nil, use no host name (user name only).")
 (defvar message-postpone-actions nil
   "A list of actions to be performed after postponing a message.")
 
-(defvar message-default-headers nil
+(defcustom message-default-headers ""
   "*A string containing header lines to be inserted in outgoing messages.
 It is inserted before you edit the message, so you can edit or delete
-these lines.")
+these lines."
+  :group 'message
+  :type 'string)
 
-(defvar message-default-mail-headers nil
-  "*A string of header lines to be inserted in outgoing mails.")
+(defcustom message-default-mail-headers ""
+  "*A string of header lines to be inserted in outgoing mails."
+  :group 'message
+  :type 'string)
 
-(defvar message-default-news-headers nil
-  "*A string of header lines to be inserted in outgoing news articles.")
+(defcustom message-default-news-headers ""
+  "*A string of header lines to be inserted in outgoing news
+articles."
+  :group 'message
+  :type 'string)
 
 ;; Note: could use /usr/ucb/mail instead of sendmail;
 ;; options -t, and -v if not interactive.
-(defvar message-mailer-swallows-blank-line
+(defcustom message-mailer-swallows-blank-line
   (if (and (string-match "sparc-sun-sunos\\(\\'\\|[^5]\\)" 
                         system-configuration)
           (file-readable-p "/etc/sendmail.cf")
@@ -364,7 +535,9 @@ these lines.")
   "Set this non-nil if the system's mailer runs the header and body together.
 \(This problem exists on Sunos 4 when sendmail is run in remote mode.)
 The value should be an expression to test whether the problem will
-actually occur.")
+actually occur."
+  :group 'message
+  :type 'sexp)
 
 ;;; Internal variables.
 ;;; Well, not really internal.
@@ -404,17 +577,26 @@ Defaults to `text-mode-abbrev-table'.")
   "Alist of mail and news faces for facemenu.
 The cdr of ech entry is a function for applying the face to a region.")
 
-(defvar message-send-hook nil
-  "Hook run before sending messages.")
-
-(defvar message-send-mail-hook nil
-  "Hook run before sending mail messages.")
-
-(defvar message-send-news-hook nil
-  "Hook run before sending news messages.")
-
-(defvar message-sent-hook nil
-  "Hook run after sending messages.")
+(defcustom message-send-hook nil
+  "Hook run before sending messages."
+  :group 'message
+  :options '(ispell-message)
+  :type 'hook)
+
+(defcustom message-send-mail-hook nil
+  "Hook run before sending mail messages."
+  :group 'message
+  :type 'hook)
+
+(defcustom message-send-news-hook nil
+  "Hook run before sending news messages."
+  :group 'message
+  :type 'hook)
+
+(defcustom message-sent-hook nil
+  "Hook run after sending messages."
+  :group 'message
+  :type 'hook)
 
 ;;; Internal variables.
 
index b1ff9c5..dcae0ba 100644 (file)
@@ -27,7 +27,7 @@
 
 (require 'nnheader)
 
-(defvar message-xmas-dont-activate-region nil
+(defvar message-xmas-dont-activate-region t
   "If t, don't activate region after yanking.")
 
 (defvar message-xmas-glyph-directory nil
index c10c8b8..52d303d 100644 (file)
@@ -140,8 +140,7 @@ time saver for large mailboxes.")
 (deffoo nnfolder-open-server (server &optional defs)
   (nnoo-change-server 'nnfolder server defs)
   (when (not (file-exists-p nnfolder-directory))
-    (ignore-errors
-      (gnus-make-directory nnfolder-directory)))
+    (gnus-make-directory nnfolder-directory))
   (cond 
    ((not (file-exists-p nnfolder-directory))
     (nnfolder-close-server)
@@ -582,7 +581,8 @@ time saver for large mailboxes.")
        (goto-char (point-max))
        (unless (eolp)
          (insert "\n"))
-       (insert "\n")
+       (unless (bobp)
+         (insert "\n"))
        (insert-buffer-substring obuf beg end)
        (set-buffer obuf)))
 
index 741d84f..6fad48f 100644 (file)
 (require 'timezone)
 (require 'message)
 (eval-when-compile (require 'cl))
+(require 'custom)
 
-(defvar nnmail-split-methods
+(defgroup gnus-mail nil
+  "Mailreading.."
+  :group 'gnus)
+
+(defcustom nnmail-split-methods
   '(("mail.misc" ""))
-  "*Incoming mail will be split according to this variable.
+  "Incoming mail will be split according to this variable.
 
 If you'd like, for instance, one mail group for mail from the
 \"4ad-l\" mailing list, one group for junk mail and one for everything
@@ -56,35 +61,51 @@ mail belongs in that group.
 
 The last element should always have \"\" as the regexp.
 
-This variable can also have a function as its value.")
+This variable can also have a function as its value."
+  :group 'gnus-mail
+  :type '(choice (repeat :tag "Alist" (group (string :tag "Name") regexp))
+                (function-item nnmail-split-fancy)
+                (function :tag "Other")))
 
 ;; Suggested by Erik Selberg <speed@cs.washington.edu>.
-(defvar nnmail-crosspost t
-  "*If non-nil, do crossposting if several split methods match the mail.
-If nil, the first match found will be used.")
+(defcustom nnmail-crosspost t
+  "If non-nil, do crossposting if several split methods match the mail.
+If nil, the first match found will be used."
+  :group 'gnus-mail
+  :type 'boolean)
 
 ;; Added by gord@enci.ucalgary.ca (Gordon Matzigkeit).
-(defvar nnmail-keep-last-article nil
-  "*If non-nil, nnmail will never delete the last expired article in a directory.  
+(defcustom nnmail-keep-last-article nil
+  "If non-nil, nnmail will never delete the last expired article in a directory.  
 You may need to set this variable if other programs are putting
-new mail into folder numbers that Gnus has marked as expired.")
+new mail into folder numbers that Gnus has marked as expired."
+  :group 'gnus-mail
+  :type 'boolean)
 
-(defvar nnmail-use-long-file-names nil
-  "*If non-nil the mail backends will use long file and directory names.
+(defcustom nnmail-use-long-file-names nil
+  "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/\".")
+\"mail/misc/\"."
+  :group 'gnus-mail
+  :type 'boolean)
 
-(defvar nnmail-default-file-modes 384
-  "Set the mode bits of all new mail files to this integer.")
+(defcustom nnmail-default-file-modes 384
+  "Set the mode bits of all new mail files to this integer."
+  :group 'gnus-mail
+  :type 'integer)
 
-(defvar nnmail-expiry-wait 7
+(defcustom nnmail-expiry-wait 7
   "*Expirable articles that are older than this will be expired.
 This variable can either be a number (which will be interpreted as a
 number of days) -- this doesn't have to be an integer.  This variable
-can also be `immediate' and `never'.")
-
-(defvar nnmail-expiry-wait-function nil
-  "*Variable that holds function to specify how old articles should be before they are expired.
+can also be `immediate' and `never'."
+  :group 'gnus-mail
+  :type '(choice (const immediate)
+                (integer :tag "days")
+                (const never)))
+
+(defcustom nnmail-expiry-wait-function nil
+  "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
@@ -92,14 +113,17 @@ says how many days an article can be stored before it is considered
 
 Eg.:
 
-(setq nnmail-expiry-wait-function
+\(setq nnmail-expiry-wait-function
       (lambda (newsgroup)
         (cond ((string-match \"private\" newsgroup) 31)
               ((string-match \"junk\" newsgroup) 1)
              ((string-match \"important\" newsgroup) 'never)
-             (t 7))))")
+             (t 7))))"
+  :group 'gnus-mail
+  :type '(choice (const :tag "nnmail-expiry-wait" nil)
+                (function :format "%v" nnmail-)))
 
-(defvar nnmail-spool-file 
+(defcustom nnmail-spool-file 
   (or (getenv "MAIL")
       (concat "/usr/spool/mail/" (user-login-name)))
   "Where the mail backends will look for incoming mail.
@@ -108,49 +132,74 @@ If this variable is nil, no mail backends will read incoming mail.
 If this variable is a list, all files mentioned in this list will be
 used as incoming mailboxes.
 If this variable is a directory (i. e., it's name ends with a \"/\"),
-treat all files in that directory as incoming spool files.")
+treat all files in that directory as incoming spool files."
+  :group 'gnus-mail
+  :type 'file)
 
-(defvar nnmail-crash-box "~/.gnus-crash-box"
-  "*File where Gnus will store mail while processing it.")
+(defcustom nnmail-crash-box "~/.gnus-crash-box"
+  "File where Gnus will store mail while processing it."
+  :group 'gnus-mail
+  :type 'file)
 
-(defvar nnmail-use-procmail nil
+(defcustom nnmail-use-procmail nil
   "*If non-nil, the mail backends will look in `nnmail-procmail-directory' for spool files.
-The file(s) in `nnmail-spool-file' will also be read.")
+The file(s) in `nnmail-spool-file' will also be read."
+  :group 'gnus-mail
+  :type 'boolean)
 
-(defvar nnmail-procmail-directory "~/incoming/"
+(defcustom nnmail-procmail-directory "~/incoming/"
   "*When using procmail (and the like), incoming mail is put in this directory.
-The Gnus mail backends will read the mail from this directory.")
+The Gnus mail backends will read the mail from this directory."
+  :group 'gnus-mail
+  :type 'directory)
 
-(defvar nnmail-procmail-suffix "\\.spool"
+(defcustom nnmail-procmail-suffix "\\.spool"
   "*Suffix of files created by procmail (and the like).
 This variable might be a suffix-regexp to match the suffixes of
-several files - eg. \".spool[0-9]*\".")
+several files - eg. \".spool[0-9]*\"."
+  :group 'gnus-mail
+  :type 'regexp)
 
-(defvar nnmail-resplit-incoming nil
-  "*If non-nil, re-split incoming procmail sorted mail.")
+(defcustom nnmail-resplit-incoming nil
+  "*If non-nil, re-split incoming procmail sorted mail."
+  :group 'gnus-mail
+  :type 'boolean)
 
-(defvar nnmail-delete-file-function 'delete-file
-  "Function called to delete files in some mail backends.")
+(defcustom nnmail-delete-file-function 'delete-file
+  "Function called to delete files in some mail backends."
+  :group 'gnus-mail
+  :type 'function)
 
-(defvar nnmail-crosspost-link-function 'add-name-to-file
+(defcustom nnmail-crosspost-link-function 'add-name-to-file
   "Function called to create a copy of a file.
 This is `add-name-to-file' by default, which means that crossposts
 will use hard links.  If your file system doesn't allow hard
-links, you could set this variable to `copy-file' instead.")
+links, you could set this variable to `copy-file' instead."
+  :group 'gnus-mail
+  :type '(radio (function-item add-name-to-file)
+               (function-item copy-file)
+               (function :tag "Other")))
 
-(defvar nnmail-movemail-program "movemail"
+(defcustom nnmail-movemail-program "movemail"
   "*A command to be executed to move mail from the inbox.
 The default is \"movemail\".
 
 This can also be a function.  In that case, the function will be
 called with two parameters -- the name of the INBOX file, and the file
-to be moved to.")
-
-(defvar nnmail-pop-password-required nil
-  "*Non-nil if a password is required when reading mail using POP.")
-
-(defvar nnmail-read-incoming-hook nil
-  "*Hook that will be run after the incoming mail has been transferred.
+to be moved to."
+  :group 'gnus-mail
+  :type 'string)
+
+(defcustom nnmail-pop-password-required nil
+  "*Non-nil if a password is required when reading mail using POP."
+  :group 'gnus-mail
+  :type 'boolean)
+
+(defcustom nnmail-read-incoming-hook 
+  (if (eq system-type 'windows-nt)
+      '(nnheader-ms-strip-cr)
+    nil)
+  "Hook that will be run after the incoming mail has been transferred.
 The incoming mail is moved from `nnmail-spool-file' (which normally is
 something like \"/usr/spool/mail/$user\") to the user's home
 directory.  This hook is called after the incoming mail box has been
@@ -174,51 +223,70 @@ If you use `display-time', you could use something like this:
            ;; Update the displayed time, since that will clear out
            ;; the flag that says you have mail.
            (when (eq (process-status \"display-time\") 'run)
-             (display-time-filter display-time-process \"\"))))")
-
-(when (eq system-type 'windows-nt)
-  (add-hook 'nnmail-prepare-incoming-hook 'nnheader-ms-strip-cr))
+             (display-time-filter display-time-process \"\"))))"
+  :group 'gnus-mail
+  :type 'hook)
 
 ;; Suggested by Erik Selberg <speed@cs.washington.edu>.
-(defvar nnmail-prepare-incoming-hook nil
-  "*Hook called before treating incoming mail.
-The hook is run in a buffer with all the new, incoming mail.")
-
-(defvar nnmail-prepare-incoming-header-hook nil
-  "*Hook called narrowed to the headers of each message.
+(defcustom nnmail-prepare-incoming-hook nil
+  "Hook called before treating incoming mail.
+The hook is run in a buffer with all the new, incoming mail."
+  :group 'gnus-mail
+  :type 'hook)
+
+(defcustom nnmail-prepare-incoming-header-hook nil
+  "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.")
+that) from the headers before splitting and saving the messages."
+  :group 'gnus-mail
+  :type 'hook)
 
-(defvar nnmail-prepare-incoming-message-hook nil
-  "*Hook called narrowed to each message.")
+(defcustom nnmail-prepare-incoming-message-hook nil
+  "Hook called narrowed to each message."
+  :group 'gnus-mail
+  :type 'hook)
 
-(defvar nnmail-list-identifiers nil
+(defcustom nnmail-list-identifiers nil
   "Regexp that match list identifiers to be removed.
-This can also be a list of regexps.")
-
-(defvar nnmail-pre-get-new-mail-hook nil
-  "Hook called just before starting to handle new incoming mail.")
-
-(defvar nnmail-post-get-new-mail-hook nil
-  "Hook called just after finishing handling new incoming mail.")
-
-(defvar nnmail-split-hook nil
+This can also be a list of regexps."
+  :group 'gnus-mail
+  :type '(choice regexp
+                (repeat regexp)))
+
+(defcustom nnmail-pre-get-new-mail-hook nil
+  "Hook called just before starting to handle new incoming mail."
+  :group 'gnus-mail
+  :type 'hook)
+
+(defcustom nnmail-post-get-new-mail-hook nil
+  "Hook called just after finishing handling new incoming mail."
+  :group 'gnus-mail
+  :type 'hook)
+
+(defcustom nnmail-split-hook nil
   "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.")
+discarded after running the split process."
+  :group 'gnus-mail
+  :type 'hook)
 
 ;; Suggested by Mejia Pablo J <pjm9806@usl.edu>.
-(defvar nnmail-tmp-directory nil
-  "*If non-nil, use this directory for temporary storage when reading incoming mail.")
+(defcustom nnmail-tmp-directory nil
+  "*If non-nil, use this directory for temporary storage when reading incoming mail."
+  :group 'gnus-mail
+  :type '(choice (const :tag "default" nil)
+                (directory :format "%v")))
 
-(defvar nnmail-large-newsgroup 50
+(defcustom nnmail-large-newsgroup 50
   "*The number of the articles which indicates a large newsgroup.
 If the number of the articles is greater than the value, verbose
-messages will be shown to indicate the current status.")
+messages will be shown to indicate the current status."
+  :group 'gnus-mail
+  :type 'integer)
 
-(defvar nnmail-split-fancy "mail.misc"
-  "*Incoming mail can be split according to this fancy variable.
+(defcustom nnmail-split-fancy "mail.misc"
+  "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
@@ -269,25 +337,38 @@ Example:
             ;; People...
             (any \"larsi@ifi\\\\.uio\\\\.no\" \"people.Lars Magne Ingebrigtsen\"))
          ;; Unmatched mail goes to the catch all group.
-         \"misc.misc\"))")
+         \"misc.misc\"))"
+  :group 'gnus-mail
+  ;; Sigh!
+  :type 'sexp)
 
-(defvar nnmail-split-abbrev-alist
+(defcustom nnmail-split-abbrev-alist
   '((any . "from\\|to\\|cc\\|sender\\|apparently-to\\|resent-from\\|resent-to\\|resent-cc")
     (mail . "mailer-daemon\\|postmaster\\|uucp"))
-  "*Alist of abbreviations allowed in `nnmail-split-fancy'.")
+  "Alist of abbreviations allowed in `nnmail-split-fancy'."
+  :group 'gnus-mail
+  :type '(repeat (cons :format "%v" symbol regexp)))
 
-(defvar nnmail-delete-incoming nil
-  "*If non-nil, the mail backends will delete incoming files after splitting.")
+(defcustom nnmail-delete-incoming nil
+  "*If non-nil, the mail backends will delete incoming files after
+splitting."
+  :group 'gnus-mail
+  :type 'boolean)
 
-(defvar nnmail-message-id-cache-length 1000
+(defcustom nnmail-message-id-cache-length 1000
   "*The approximate number of Message-IDs nnmail will keep in its cache.
 If this variable is nil, no checking on duplicate messages will be
-performed.")
+performed."
+  :group 'gnus-mail
+  :type '(choice (const :tag "disable" nil)
+                (integer :format "%v")))
 
-(defvar nnmail-message-id-cache-file "~/.nnmail-cache"
-  "*The file name of the nnmail Message-ID cache.")
+(defcustom nnmail-message-id-cache-file "~/.nnmail-cache"
+  "*The file name of the nnmail Message-ID cache."
+  :group 'gnus-mail
+  :type 'file)
 
-(defvar nnmail-treat-duplicates 'warn
+(defcustom nnmail-treat-duplicates 'warn
   "*If non-nil, nnmail keep a cache of Message-IDs to discover mail duplicates.
 Three values are legal: nil, which means that nnmail is not to keep a
 Message-ID cache; `warn', which means that nnmail should insert extra
@@ -296,7 +377,11 @@ and `delete', which means that nnmail will delete duplicated mails.
 
 This variable can also be a function.  It will be called from a buffer
 narrowed to the article in question with the Message-ID as a
-parameter.  It should return nil, `warn' or `delete'.")
+parameter.  It should return nil, `warn' or `delete'."
+  :group 'gnus-mail
+  :type '(choice (const :tag "off" nil)
+                (const warn)
+                (const delete)))
 
 ;;; Internal variables.
 
index 1b4d8a3..1690ac8 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Red Gnus 0.63 Manual
+@settitle Red Gnus 0.64 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 Red Gnus 0.63 Manual
+@title Red Gnus 0.64 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 Red Gnus 0.63
+This manual corresponds to Red Gnus 0.64
 
 @end ifinfo