*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 17 Apr 1999 05:41:22 +0000 (05:41 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 17 Apr 1999 05:41:22 +0000 (05:41 +0000)
22 files changed:
lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-cite.el
lisp/gnus-cus.el
lisp/gnus-group.el
lisp/gnus-picon.el
lisp/gnus-range.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus.el
lisp/mail-source.el
lisp/message.el
lisp/mm-decode.el
lisp/mm-view.el
lisp/mml.el
lisp/nndoc.el
lisp/nndraft.el
lisp/nnfolder.el
lisp/nnheader.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index 200c565..5539625 100644 (file)
@@ -1,3 +1,132 @@
+Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v0.81 is released.
+
+1999-04-16 15:54:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-get-split-value): Reverse result.
+
+1999-04-03 00:17:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-always-read-dribble-file): Doc fix.
+
+1999-04-02 15:33:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mml.el (mml-insert-tag): Insert concluding part.
+
+       * message.el (message-send-mail): Encode later.
+       (message-send-news): Ditto.
+
+       * nnfolder.el: Don't use mail delim.
+
+1999-03-28 19:14:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-cus.el (gnus-group-customize): Put point at min.
+
+       * mm-view.el (mm-inline-text): Allow toggling html.
+
+1999-03-28 17:11:15  William M. Perry  <wmperry@aventail.com>
+
+       * mail-source.el: Added prescript and postscript to file.
+
+1999-03-28 13:46:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnmail.el: Reverted.
+
+       * gnus-msg.el (gnus-setup-posting-charset): Didn't work.
+       (gnus-setup-posting-charset): Did work.
+
+1999-03-28 13:19:50  Jae-you Chung  <jay@pllab.kaist.ac.kr>
+
+       * gnus.el (gnus-short-group-name): Use
+       gnus-group-uncollapsed-levels. 
+
+1999-03-28 13:11:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-cite.el (gnus-dissect-cited-text): Don't remove overlays.
+
+1999-03-26 13:18:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-strip-headers-in-body): New variable.
+       (article-strip-headers-from-body): New command and keystroke.
+
+1999-03-14 16:09:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-pop): Check for symbol first. 
+
+       * nnheader.el (nnheader-insert-file-contents): Bind
+       enable-local-eval to nil.
+       (nnheader-find-file-noselect): Ditto.
+
+       * nnmail.el (nnmail-article-group): Don't remove long lines.
+       (nnmail-remove-long-lines): New function.
+       (nnmail-split-header-length-limit): Removed.
+
+       * mml.el (mml-generate-mime-1): Use unibyte buffers.
+
+       * gnus-group.el (gnus-group-kill-all-zombies): Query user.
+
+1999-03-06 07:20:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-generic-mark): New function.
+
+       * nnmail.el (nnmail-split-header-length-limit): Increased.
+       (nnmail-article-group): Allow nil.
+
+       * gnus-cite.el (gnus-cite-parse-wrapper): Inhibit point-motion. 
+
+       * nndoc.el (nndoc-generate-mime-parts-head): Insert real headers
+       first. 
+
+       * mml.el (mml-minibuffer-read-type): Include types from
+       mailcap-mime-data. 
+
+       * nndraft.el (nndraft-request-article): Would clobber Japanese. 
+
+1999-03-05  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * mml.el (mml-insert-tag): New function.
+       (mml-read-file): Renamed to mml-minibuffer-read-file to avoid
+       confusion with functions like `mml-read-tag'.
+       (mml-read-type): Ditto with `mml-minibuffer-read-type'.
+       (mml-minibuffer-read-description): Ditto with
+       `mml-minibuffer-read-description'.
+       (mml-attach-buffer): New function.
+       (mml-mode-map): New entry for /.
+       (mml-minibuffer-read-type): Accept DEFAULT.
+
+       * mml.el (mml-quote-region): Narrow the region.
+
+       * message.el (message-mode-menu): message-mime-attach-file is now
+       mml-attach-file.
+
+1999-03-05 21:24:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treatment-function-alist): Do emphasis earlier.
+
+1999-03-05 21:08:10  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * mml.el (mml-attach-buffer): New command.
+
+1999-02-27  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-sum.el (gnus-update-marks): Call gnus-remove-from-range
+       with a proper range. Compress range.
+
+       * gnus-range.el (gnus-remove-from-range): Protect arguments.
+
+1999-03-05 20:59:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-decode.el (mm-get-image): Create a temporary file for xbms.
+
+1999-03-04 04:20:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-picon.el (gnus-picons-x-face-file-name): Removed.
+       (gnus-picons-convert-x-face): Removed.
+       (gnus-picons-article-display-x-face): Removed.
+       (gnus-picons-x-face-sentinel): Ditto. 
+       (gnus-picons-display-x-face): Ditto.
+
 Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.80 is released.
@@ -63,6 +192,11 @@ Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * nnmail.el (nnmail-get-new-mail): honor suffix for spool-files of 
        type directory.
 
+1999-03-04  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * gnus-art.el (article-hide-boring-headers): Field names must not
+       contain whitespace.
+
 Fri Feb 26 18:54:16 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.79 is released.
index d26ec60..e5d0a07 100644 (file)
     "^X-Pgp-Public-Key-Url:" "^X-Auth:" "^X-From-Line:"
     "^X-Gnus-Article-Number:" "^X-Majordomo:" "^X-Url:" "^X-Sender:"
     "^X-Mailing-List:" "^MBOX-Line" "^Priority:" "^X-Pgp" "^X400-[-A-Za-z]+:"
-    "^Status:" "^X-Gnus-Mail-Source:")
+    "^Status:" "^X-Gnus-Mail-Source:" "^Cancel-Lock:")
   "*All headers that start with this regexp will be hidden.
 This variable can also be a list of regexps of headers to be ignored.
 If `gnus-visible-headers' is non-nil, this variable will be ignored."
@@ -773,6 +773,13 @@ See the manual for details."
   :group 'gnus-article-treat
   :type gnus-article-treat-head-custom)
 
+(defcustom gnus-treat-strip-headers-in-body t
+  "Strip the X-No-Archive header line from the beginning of the body.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
 (defcustom gnus-treat-strip-trailing-blank-lines nil
   "Strip trailing blank lines.
 Valid values are nil, t, `head', `last', an integer or a predicate.
@@ -865,11 +872,13 @@ See the manual for details."
 (defvar gnus-article-mime-handle-alist-1 nil)
 (defvar gnus-treatment-function-alist
   '((gnus-treat-strip-banner gnus-article-strip-banner)
+    (gnus-treat-strip-headers-in-body gnus-article-strip-headers-in-body)
     (gnus-treat-highlight-signature gnus-article-highlight-signature)
     (gnus-treat-buttonize gnus-article-add-buttons)
     (gnus-treat-fill-article gnus-article-fill-cited-article)
     (gnus-treat-fill-long-lines gnus-article-fill-long-lines)
     (gnus-treat-strip-cr gnus-article-remove-cr)
+    (gnus-treat-emphasize gnus-article-emphasize)
     (gnus-treat-hide-headers gnus-article-hide-headers)
     (gnus-treat-hide-boring-headers gnus-article-hide-boring-headers)
     (gnus-treat-hide-signature gnus-article-hide-signature)
@@ -879,7 +888,6 @@ See the manual for details."
     (gnus-treat-highlight-headers gnus-article-highlight-headers)
     (gnus-treat-highlight-citation gnus-article-highlight-citation)
     (gnus-treat-highlight-signature gnus-article-highlight-signature)
-    (gnus-treat-emphasize gnus-article-emphasize)
     (gnus-treat-date-ut gnus-article-date-ut)
     (gnus-treat-date-local gnus-article-date-local)
     (gnus-treat-date-lapsed gnus-article-date-lapsed)
@@ -1089,7 +1097,7 @@ always hide."
            (cond
             ;; Hide empty headers.
             ((eq elem 'empty)
-             (while (re-search-forward "^[^:]+:[ \t]*\n[^ \t]" nil t)
+             (while (re-search-forward "^[^: \t]+:[ \t]*\n[^ \t]" nil t)
                (forward-line -1)
                (gnus-article-hide-text-type
                 (progn (beginning-of-line) (point))
@@ -1529,6 +1537,15 @@ always hide."
            (gnus-article-hide-text-type
             (point-min) (point-max) 'signature)))))))
 
+(defun article-strip-headers-in-body ()
+  "Strip offensive headers from bodies."
+  (interactive)
+  (save-excursion
+    (article-goto-body)
+    (let ((case-fold-search t))
+      (when (looking-at "x-no-archive:")
+       (gnus-delete-line)))))
+
 (defun article-strip-leading-blank-lines ()
   "Remove all blank lines from the beginning of the article."
   (interactive)
@@ -2274,6 +2291,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      article-strip-banner
      article-hide-pem
      article-hide-signature
+     article-strip-headers-in-body
      article-remove-trailing-blank-lines
      article-strip-leading-blank-lines
      article-strip-multiple-blank-lines
index b8d4131..cd124a2 100644 (file)
@@ -366,7 +366,7 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
   "Dissect the article buffer looking for cited text."
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (gnus-cite-parse-maybe)
+    (gnus-cite-parse-maybe nil t)
     (let ((alist gnus-cite-prefix-alist)
          prefix numbers number marks m)
       ;; Loop through citation prefixes.
@@ -613,7 +613,6 @@ See also the documentation for `gnus-article-highlight-citation'."
 
 ;;; Internal functions:
 
-
 (defun gnus-cite-parse-maybe (&optional force no-overlay)
   "Always parse the buffer."
   (gnus-cite-localize)
@@ -641,14 +640,15 @@ See also the documentation for `gnus-article-highlight-citation'."
       (gnus-delete-overlay overlay))))
 
 (defun gnus-cite-parse-wrapper ()
-  ;; Wrap chopped gnus-cite-parse
+  ;; Wrap chopped gnus-cite-parse.
   (article-goto-body)
-  (save-excursion
-    (gnus-cite-parse-attributions))
-  (save-excursion
-    (gnus-cite-parse))
-  (save-excursion
-    (gnus-cite-connect-attributions)))
+  (let ((inhibit-point-motion-hooks t))
+    (save-excursion
+      (gnus-cite-parse-attributions))
+    (save-excursion
+      (gnus-cite-parse))
+    (save-excursion
+      (gnus-cite-connect-attributions))))
 
 (defun gnus-cite-parse ()
   ;; Parse and connect citation prefixes and attribution lines.
index e50aef0..0f3d5d3 100644 (file)
@@ -273,7 +273,8 @@ form, but who cares?"
                           :tag "Method"
                           :value (gnus-info-method info))))
     (use-local-map widget-keymap)
-    (widget-setup)))
+    (widget-setup)
+    (goto-char (point-min))))
 
 (defun gnus-group-customize-done (&rest ignore)
   "Apply changes and bury the buffer."
index 30fc67c..e8bfa68 100644 (file)
@@ -2680,10 +2680,11 @@ N and the number of steps taken is returned."
 (defun gnus-group-kill-all-zombies ()
   "Kill all zombie newsgroups."
   (interactive)
-  (setq gnus-killed-list (nconc gnus-zombie-list gnus-killed-list))
-  (setq gnus-zombie-list nil)
-  (gnus-dribble-touch)
-  (gnus-group-list-groups))
+  (when (gnus-yes-or-no-p "Really kill all zombies? ")
+    (setq gnus-killed-list (nconc gnus-zombie-list gnus-killed-list))
+    (setq gnus-zombie-list nil)
+    (gnus-dribble-touch)
+    (gnus-group-list-groups)))
 
 (defun gnus-group-kill-region (begin end)
   "Kill newsgroups in current region (excluding current point).
index 372bee6..3685732 100644 (file)
@@ -87,17 +87,6 @@ Some people may want to add \"unknown\" to this list."
   :type 'regexp
   :group 'picons)
 
-(defcustom gnus-picons-x-face-file-name
-  (format "/tmp/picon-xface.%s.xbm" (user-login-name))
-  "*The name of the file in which to store the converted X-face header."
-  :type 'string
-  :group 'picons)
-
-(defcustom gnus-picons-convert-x-face (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)
-  "*Command to convert the x-face header into a xbm file."
-  :type 'string
-  :group 'picons)
-
 (defcustom gnus-picons-display-as-address t
   "*If t display textual email addresses along with pictures."
   :type 'boolean
@@ -258,48 +247,6 @@ arguments necessary for the job.")
     (set-extent-property annot 'duplicable t)
     annot))
 
-(defun gnus-picons-article-display-x-face ()
-  "Display the x-face header bitmap in the 'gnus-picons-display-where buffer."
-  (let ((gnus-article-x-face-command 'gnus-picons-display-x-face))
-    (gnus-article-display-x-face)))
-
-(defun gnus-picons-x-face-sentinel (process event)
-  (when (memq process gnus-picons-processes-alist)
-    (setq gnus-picons-processes-alist
-         (delq process gnus-picons-processes-alist))
-    (gnus-picons-set-buffer)
-    (gnus-picons-make-annotation
-     (make-glyph gnus-picons-x-face-file-name) nil 'text)
-    (when (file-exists-p gnus-picons-x-face-file-name)
-      (delete-file gnus-picons-x-face-file-name))))
-
-(defun gnus-picons-display-x-face (beg end)
-  "Function to display the x-face header in the picons window.
-To use:  (setq gnus-article-x-face-command 'gnus-picons-display-x-face)"
-  (interactive)
-  (if (featurep 'xface)
-      ;; Use builtin support
-      (save-excursion
-       ;; Don't remove this binding, it is really needed: when
-       ;; `gnus-picons-set-buffer' changes buffer (like when it is
-       ;; set to display picons outside of the article buffer), BEG
-       ;; and END still refer the buffer current now !
-       (let ((buf (current-buffer)))
-         (gnus-picons-set-buffer)
-         (gnus-picons-make-annotation
-          (vector 'xface
-                  :data (concat "X-Face: " (buffer-substring beg end buf)))
-          nil 'text nil nil nil t)))
-    ;; convert the x-face header to a .xbm file
-    (let* ((process-connection-type nil)
-          (process (start-process-shell-command
-                    "gnus-x-face" nil gnus-picons-convert-x-face)))
-      (push process gnus-picons-processes-alist)
-      (process-kill-without-query process)
-      (set-process-sentinel process 'gnus-picons-x-face-sentinel)
-      (process-send-region process beg end)
-      (process-send-eof process))))
-
 (defun gnus-article-display-picons ()
   "Display faces for an author and her domain in gnus-picons-display-where."
   (interactive)
index 97197fe..14b6f49 100644 (file)
@@ -228,13 +228,15 @@ Note: LIST has to be sorted over `<'."
   "Return a range that has all articles from RANGE2 removed from
 RANGE1. The returned range is always a list. RANGE2 can also be a
 unsorted list of articles."
-  (if (listp (cdr range2))
-      (setq range2 (sort range2 (lambda (e1 e2)
-                                 (< (if (consp e1) (car e1) e1)
-                                    (if (consp e2) (car e2) e2))))))
   (if (or (null range1) (null range2))
       range1
-    (let (out r1 r2 r1_min r1_max r2_min r2_max)
+    (let (out r1 r2 r1_min r1_max r2_min r2_max
+             (range1 range1)
+             (range2 (if (listp (cdr range2))
+                         (sort range2 (lambda (e1 e2)
+                                        (< (if (consp e1) (car e1) e1)
+                                           (if (consp e2) (car e2) e2))))
+                       range2)))
       (setq range1 (if (listp (cdr range1)) range1 (list range1))
            range2 (if (listp (cdr range2)) range2 (list range2))
            r1 (car range1)
@@ -296,7 +298,7 @@ unsorted list of articles."
          (push (cons r1_min r1_max) out))
        (pop range1))
       (while range1
-        (push (pop range1) out))
+       (push (pop range1) out))
       (nreverse out))))
 
 (defun gnus-member-of-range (number ranges)
index 646c756..608a3c3 100644 (file)
@@ -222,12 +222,12 @@ not match this regexp will be removed before saving the list."
   :type 'boolean)
 
 (defcustom gnus-ignored-newsgroups
 (purecopy (mapconcat 'identity
-                      '("^to\\."       ; not "real" groups
-                        "^[0-9. \t]+ " ; all digits in name
-                        "[][\"#'()]"   ; bogus characters
-                        )
-                      "\\|"))
+ (mapconcat 'identity
+           '("^to\\."                  ; not "real" groups
+             "^[0-9. \t]+ "            ; all digits in name
+             "[][\"#'()]"              ; bogus characters
+             )
+           "\\|")
   "*A regexp to match uninteresting newsgroups in the active file.
 Any lines in the active file matching this regular expression are
 removed from the newsgroup list before anything else is done to it,
@@ -381,7 +381,7 @@ Can be used to turn version control on or off."
   :type 'hook)
 
 (defcustom gnus-always-read-dribble-file nil
-  "Uncoditionally read the dribble file."
+  "Unconditionally read the dribble file."
   :group 'gnus-newsrc
   :type 'boolean)
 
index 9a8a28c..dcba906 100644 (file)
@@ -1467,6 +1467,7 @@ increase the score of each group you read."
     "t" gnus-article-hide-headers
     "v" gnus-summary-verbose-headers
     "h" gnus-article-treat-html
+    "H" gnus-article-strip-headers-in-body
     "d" gnus-article-treat-dumbquotes)
 
   (gnus-define-keys (gnus-summary-wash-hide-map "W" gnus-summary-wash-map)
@@ -4285,19 +4286,20 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                (setq arts (cdr arts)))
              (setq list (cdr all))))
 
-         (when (gnus-check-backend-function 'request-set-mark
-                                            gnus-newsgroup-name)
-           ;; score & bookmark are not proper flags (they are cons cells)
-           ;; cache is a internal gnus flag
-           (unless (memq (cdr type) '(cache score bookmark))
-             (let* ((old (cdr (assq (cdr type) (gnus-info-marks info))))
-                    (del (gnus-remove-from-range old list))
-                    (add (gnus-remove-from-range list old)))
-               (if add
-                   (push (list add 'add (list (cdr type))) delta-marks))
-               (if del
-                   (push (list del 'del (list (cdr type))) delta-marks)))))
-
+         (when (gnus-check-backend-function 'request-set-mark
+                                            gnus-newsgroup-name)
+           ;; uncompressed:s are not proper flags (they are cons cells)
+           ;; cache is a internal gnus flag
+           (unless (memq (cdr type) (cons 'cache uncompressed))
+             (let* ((old (cdr (assq (cdr type) (gnus-info-marks info))))
+                    (list (gnus-compress-sequence (sort list '<)))
+                    (del (gnus-remove-from-range old list))
+                    (add (gnus-remove-from-range list old)))
+               (if add
+                   (push (list add 'add (list (cdr type))) delta-marks))
+               (if del
+                   (push (list del 'del (list (cdr type))) delta-marks)))))
+         
          (push (cons (cdr type)
                      (if (memq (cdr type) uncompressed) list
                        (gnus-compress-sequence
@@ -4305,7 +4307,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                newmarked)))
 
       (if delta-marks
-         (gnus-request-set-mark gnus-newsgroup-name delta-marks))
+         (gnus-request-set-mark gnus-newsgroup-name delta-marks))
 
       ;; Enter these new marks into the info of the group.
       (if (nthcdr 3 info)
@@ -8775,7 +8777,7 @@ save those articles instead."
                           split-name))
                    ((consp result)
                     (setq split-name (append result split-name)))))))))
-    split-name))
+    (nreverse split-name)))
 
 (defun gnus-valid-move-group-p (group)
   (and (boundp group)
@@ -9261,6 +9263,83 @@ Then replace the article with the result."
 (put 'gnus-with-article 'lisp-indent-function 1)
 (put 'gnus-with-article 'edebug-form-spec '(form body))
 
+;;;
+;;; Generic summary marking commands
+;;;
+
+(defvar gnus-summary-marking-alist
+  '((read gnus-del-mark "d")
+    (unread gnus-unread-mark "u")
+    (ticked gnus-ticked-mark "!")
+    (dormant gnus-dormant-mark "?")
+    (expirable gnus-expirable-mark "e"))
+  "An alist of names/marks/keystrokes.")
+
+(defvar gnus-summary-generic-mark-map (make-sparse-keymap))
+(defvar gnus-summary-mark-map)
+
+(defun gnus-summary-make-all-marking-commands ()
+  (define-key gnus-summary-mark-map "M" gnus-summary-generic-mark-map)
+  (dolist (elem gnus-summary-marking-alist)
+    (apply 'gnus-summary-make-marking-command elem)))
+
+(defun gnus-summary-make-marking-command (name mark keystroke)
+  (let ((map (make-sparse-keymap)))
+    (define-key gnus-summary-generic-mark-map keystroke map)
+    (dolist (lway `((next "next" next nil "n")
+                   (next-unread "next unread" next t "N")
+                   (prev "previous" prev nil "p")
+                   (prev-unread "previous unread" prev t "P")
+                   (nomove "" nil nil ,keystroke)))
+      (let ((func (gnus-summary-make-marking-command-1
+                  mark (car lway) lway name)))
+       (setq func (eval func))
+       (define-key map (nth 4 lway) func)))))
+      
+(defun gnus-summary-make-marking-command-1 (mark way lway name)      
+  `(defun ,(intern
+           (format "gnus-summary-put-mark-as-%s%s"
+                   name (if (eq way 'nomove)
+                            ""
+                          (concat "-" (symbol-name way)))))
+     (n)
+     ,(format
+       "Mark the current article as %s%s.
+If N, the prefix, then repeat N times.
+If N is negative, move in reverse order.
+The difference between N and the actual number of articles marked is
+returned."
+       name (cadr lway))
+     (interactive "p")
+     (gnus-summary-generic-mark n ,mark ',(nth 2 lway) ,(nth 3 lway))))
+    
+(defun gnus-summary-generic-mark (n mark move unread)
+  "Mark N articles with MARK."
+  (unless (eq major-mode 'gnus-summary-mode)
+    (error "This command can only be used in the summary buffer"))
+  (gnus-summary-show-thread)
+  (let ((nummove
+        (cond
+         ((eq move 'next) 1)
+         ((eq move 'prev) -1)
+         (t 0))))
+    (if (zerop nummove)
+       (setq n 1)
+      (when (< n 0)
+       (setq n (abs n)
+             nummove (* -1 nummove))))
+    (while (and (> n 0)
+               (gnus-summary-mark-article nil mark)
+               (zerop (gnus-summary-next-subject nummove unread t)))
+      (setq n (1- n)))
+    (when (/= 0 n)
+      (gnus-message 7 "No more %sarticles" (if mark "" "unread ")))
+    (gnus-summary-recenter)
+    (gnus-summary-position-point)
+    (gnus-set-mode-line 'summary)
+    n))
+
+(gnus-summary-make-all-marking-commands)
 
 (gnus-ems-redefine)
 
index 1283abc..7ae60c0 100644 (file)
@@ -260,7 +260,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.80"
+(defconst gnus-version-number "0.81"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
@@ -2561,7 +2561,6 @@ If SCORE is nil, add 1 to the score of GROUP."
     (when info
       (gnus-info-set-score info (+ (gnus-info-score info) (or score 1))))))
 
-;; Function written by Stainless Steel Rat <ratinox@peorth.gweep.net>
 (defun gnus-short-group-name (group &optional levels)
   "Collapse GROUP name LEVELS.
 Select methods are stripped and any remote host name is stripped down to
@@ -2571,6 +2570,7 @@ just the host name."
         (depth 0)
         (skip 1)
         (levels (or levels
+                    gnus-group-uncollapsed-levels
                     (progn
                       (while (string-match "\\." group skip)
                         (setq skip (match-end 0)
index bb7590d..bd27763 100644 (file)
@@ -62,6 +62,8 @@
 (eval-and-compile
   (defvar mail-source-keyword-map
     '((file
+       (:prescript)
+       (:postscript)
        (:path (or (getenv "MAIL")
                  (concat "/usr/spool/mail/" (user-login-name)))))
       (directory
@@ -294,9 +296,26 @@ If ARGS, PROMPT is used as an argument to `format'."
 (defun mail-source-fetch-file (source callback)
   "Fetcher for single-file sources."
   (mail-source-bind (file source)
+    (when prescript
+      (if (and (symbolp prescript) (fboundp prescript))
+         (funcall prescript)
+       (call-process shell-file-name nil nil nil
+                     shell-command-switch 
+                     (format-spec
+                      prescript
+                      (format-spec-make ?t mail-source-crash-box)))))
     (let ((mail-source-string (format "file:%s" path)))
       (if (mail-source-movemail path mail-source-crash-box)
+         (progn
          (mail-source-callback callback path)
+           (when prescript
+             (if (and (symbolp prescript) (fboundp prescript))
+                 (funcall prescript)
+               (call-process shell-file-name nil nil nil
+                             shell-command-switch 
+                             (format-spec
+                              postscript
+                              (format-spec-make ?t mail-source-crash-box))))))
        0))))
 
 (defun mail-source-fetch-directory (source callback)
@@ -316,7 +335,8 @@ If ARGS, PROMPT is used as an argument to `format'."
   "Fetcher for single-file sources."
   (mail-source-bind (pop source)
     (when prescript
-      (if (fboundp prescript)
+      (if (and (symbolp prescript)
+              (fboundp prescript))
          (funcall prescript)
        (call-process shell-file-name nil nil nil
                      shell-command-switch 
@@ -360,7 +380,8 @@ If ARGS, PROMPT is used as an argument to `format'."
          (prog1
              (mail-source-callback callback server)
            (when prescript
-             (if (fboundp prescript)
+             (if (and (symbolp postscript)
+                      (fboundp postscript))
                  (funcall prescript)
                (call-process shell-file-name nil nil nil
                              shell-command-switch 
index f0eb481..2ad70d1 100644 (file)
@@ -1320,7 +1320,7 @@ Point is left at the beginning of the narrowed-to region."
    ["Newline and Reformat" message-newline-and-reformat t]
    ["Rename buffer" message-rename-buffer t]
    ["Spellcheck" ispell-message t]
-   ["Attach file as MIME" message-mime-attach-file t]
+   ["Attach file as MIME" mml-attach-file t]
    "----"
    ["Send Message" message-send-and-exit t]
    ["Abort Message" message-dont-send t]
@@ -2088,14 +2088,12 @@ the user from the mailer."
        (case-fold-search nil)
        (news (message-news-p))
        (mailbuf (current-buffer)))
-    (message-encode-message-body)
     (save-restriction
       (message-narrow-to-headers)
       ;; Insert some headers.
       (let ((message-deletable-headers
             (if news nil message-deletable-headers)))
        (message-generate-headers message-required-mail-headers))
-      (mail-encode-encoded-word-buffer)
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (unwind-protect
@@ -2108,10 +2106,12 @@ the user from the mailer."
                          (set-buffer mailbuf)
                          (buffer-string))))
          ;; Remove some headers.
+         (message-encode-message-body)
          (save-restriction
            (message-narrow-to-headers)
            ;; Remove some headers.
-           (message-remove-header message-ignored-mail-headers t))
+           (message-remove-header message-ignored-mail-headers t)
+           (mail-encode-encoded-word-buffer))
          (goto-char (point-max))
          ;; require one newline at the end.
          (or (= (preceding-char) ?\n)
@@ -2264,13 +2264,10 @@ to find out how to use this."
        result)
     (if (not (message-check-news-body-syntax))
        nil
-      (message-encode-message-body)
       (save-restriction
        (message-narrow-to-headers)
        ;; Insert some headers.
        (message-generate-headers message-required-news-headers)
-       (let ((mail-parse-charset message-posting-charset))
-         (mail-encode-encoded-word-buffer))
        ;; Let the user do all of the above.
        (run-hooks 'message-header-hook))
       (message-cleanup-headers)
@@ -2286,11 +2283,14 @@ to find out how to use this."
                       "%s" (save-excursion
                              (set-buffer messbuf)
                              (buffer-string))))
+             (message-encode-message-body)
              ;; Remove some headers.
              (save-restriction
                (message-narrow-to-headers)
                ;; Remove some headers.
-               (message-remove-header message-ignored-news-headers t))
+               (message-remove-header message-ignored-news-headers t)
+               (let ((mail-parse-charset message-posting-charset))
+                 (mail-encode-encoded-word-buffer)))
              (goto-char (point-max))
              ;; require one newline at the end.
              (or (= (preceding-char) ?\n)
index 83cf901..2a2e55a 100644 (file)
     ("image/tiff" mm-inline-image
      (and window-system (featurep 'tiff) (mm-image-fit-p handle)))
     ("image/xbm" mm-inline-image
-     (and window-system (fboundp 'device-type)
-         (eq (device-type) 'x)))
+     (and window-system (fboundp 'device-type) (eq (device-type) 'x)))
     ("image/x-xbitmap" mm-inline-image
-     (and window-system (fboundp 'device-type)
-         (eq (device-type) 'x)))
+     (and window-system (fboundp 'device-type) (eq (device-type) 'x)))
     ("image/xpm" mm-inline-image
      (and window-system (featurep 'xpm)))
     ("image/x-pixmap" mm-inline-image
@@ -601,16 +599,24 @@ This overrides entries in the mailcap file."
          (prog1
              (setq spec
                    (ignore-errors
-                     (make-glyph
-                      (cond
-                       ((equal type "xbm")
-                        (let ((height 32)
-                              (width 32))
-                          (forward-line 2)
-                          (vector 'xbm :data (list height width
-                                                   (buffer-substring
-                                                    (point) (point-max))))))
-                       (t
+                     (cond
+                      ((equal type "xbm")
+                       ;; xbm images require special handling, since
+                       ;; the only way to create glyphs from these
+                       ;; (without a ton of work) is to write them
+                       ;; out to a file, and then create a file
+                       ;; specifier.
+                       (let ((file (make-temp-name
+                                    (expand-file-name "emm.xbm"
+                                                       mm-tmp-directory))))
+                         (unwind-protect
+                             (progn
+                               (write-region (point-min) (point-max) file)
+                               (make-glyph (list (cons 'x file))))
+                           (ignore-errors
+                             (delete-file file)))))
+                      (t
+                       (make-glyph
                         (vector (intern type) :data (buffer-string)))))))
            (mm-handle-set-cache handle spec))))))
 
index 1fc7992..b81c78b 100644 (file)
              (let ((w3-strict-width width)
                    (url-standalone-mode t))
                (w3-region (point-min) (point-max)))))
+         (narrow-to-region (1+ (point-min)) (point-max))
          (mm-handle-set-undisplayer
           handle
           `(lambda ()
              (let (buffer-read-only)
-              (mapc (lambda (prop)
-                     (remove-specifier
-                      (face-property 'default prop) (current-buffer)))
-                    '(background background-pixmap foreground))
-               (delete-region ,(point-min-marker) ,(point-max-marker))))))))
+               (mapc (lambda (prop)
+                       (remove-specifier
+                        (face-property 'default prop) (current-buffer)))
+                       '(background background-pixmap foreground))
+               (delete-region ,(point-min-marker)
+                              ,(point-max-marker))))))))
      ((or (equal type "enriched")
          (equal type "richtext"))
       (save-excursion
index d233adf..30974b8 100644 (file)
            (setq charset (mm-encode-body))
            (setq encoding (mm-body-encoding charset))
            (setq coded (buffer-string)))
-       (with-temp-buffer
+       (mm-with-unibyte-buffer
          (cond
           ((cdr (assq 'buffer cont))
            (insert-buffer-substring (cdr (assq 'buffer cont))))
        (main (make-sparse-keymap)))
     (define-key map "f" 'mml-attach-file)
     (define-key map "b" 'mml-attach-buffer)
+    (define-key map "e" 'mml-attach-external)
     (define-key map "q" 'mml-quote-region)
     (define-key map "m" 'mml-insert-multipart)
     (define-key map "p" 'mml-insert-part)
  '("MML"
    ("Attach"
     ["File" mml-attach-file t]
-    ["Buffer" mml-attach-buffer t])
+    ["Buffer" mml-attach-buffer t]
+    ["External" mml-attach-external t])
    ("Insert"
     ["Multipart" mml-insert-multipart t]
     ["Part" mml-insert-part t])
            minor-mode-map-alist)))
   (run-hooks 'mml-mode-hook))
 
-(defun mml-read-file (prompt)
+;;;
+;;; Helper functions for reading MIME stuff from the minibuffer and
+;;; inserting stuff to the buffer.
+;;;
+
+(defun mml-minibuffer-read-file (prompt)
   (let ((file (read-file-name prompt nil nil t)))
     ;; Prevent some common errors.  This is inspired by similar code in
     ;; VM.
       (error "Permission denied: %s" file))
     file))
 
-(defun mml-read-type (file)
-  (let* ((default (or (mm-default-file-encoding file)
+(defun mml-minibuffer-read-type (name &optional default)
+  (let* ((default (or default
+                     (mm-default-file-encoding name)
                      ;; Perhaps here we should check what the file
                      ;; looks like, and offer text/plain if it looks
                      ;; like text/plain.
                      "application/octet-stream"))
         (string (completing-read
                  (format "Content type (default %s): " default)
-                 (delete-duplicates
-                  (mapcar (lambda (m) (list (cdr m))) mailcap-mime-extensions)
-                  :test 'equal))))
+                 (mapcar
+                  'list
+                  (delete-duplicates
+                   (nconc
+                    (mapcar (lambda (m) (cdr m))
+                            mailcap-mime-extensions)
+                    (apply
+                     'nconc
+                     (mapcar
+                      (lambda (l)
+                        (delq nil
+                              (mapcar
+                               (lambda (m)
+                                 (let ((type (cdr (assq 'type (cdr m)))))
+                                   (if (equal (cadr (split-string type "/"))
+                                              "*")
+                                       nil
+                                     type)))
+                               (cdr l))))
+                      mailcap-mime-data)))
+                   :test 'equal)))))
     (if (not (equal string ""))
        string
       default)))
 
-(defun mml-read-description ()
+(defun mml-minibuffer-read-description ()
   (let ((description (read-string "One line description: ")))
     (when (string-match "\\`[ \t]*\\'" description)
       (setq description nil))
   "Quote the MML tags in the region."
   (interactive "r")
   (save-excursion
-    (goto-char beg)
-    ;; Quote parts.
-    (while (re-search-forward
-           "<#/?!*\\(multipart\\|part\\|external\\)" end t)
-      (goto-char (match-beginning 1))
-      (insert "!"))))
+    (save-restriction
+      ;; Temporarily narrow the region to defend from changes
+      ;; invalidating END.
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      ;; Quote parts.
+      (while (re-search-forward
+             "<#/?!*\\(multipart\\|part\\|external\\)" nil t)
+       (goto-char (match-beginning 1))
+       (insert "!")))))
+
+(defun mml-insert-tag (name &rest plist)
+  "Insert an MML tag described by NAME and PLIST."
+  (when (symbolp name)
+    (setq name (symbol-name name)))
+  (insert "<#" name)
+  (while plist
+    (let ((key (pop plist))
+         (value (pop plist)))
+      (when value
+       ;; Quote VALUE if it contains suspicious characters.
+       (when (string-match "[\"\\~/* \t\n]" value)
+         (setq value (prin1-to-string value)))
+       (insert (format " %s=%s" key value)))))
+  (insert ">\n<#/part>\n"))
+
+;;; Attachment functions.
 
 (defun mml-attach-file (file &optional type description)
   "Attach a file to the outgoing MIME message.
@@ -557,32 +604,46 @@ FILE is the name of the file to attach.  TYPE is its content-type, a
 string of the form \"type/subtype\".  DESCRIPTION is a one-line
 description of the attachment."
   (interactive
-   (let* ((file (mml-read-file "Attach file: "))
-         (type (mml-read-type file))
-         (description (mml-read-description)))
+   (let* ((file (mml-minibuffer-read-file "Attach file: "))
+         (type (mml-minibuffer-read-type file))
+         (description (mml-minibuffer-read-description)))
      (list file type description)))
-  (insert
-   (format
-    "<#part type=%s name=%s filename=%s%s disposition=attachment><#/part>\n"
-    type (prin1-to-string (file-name-nondirectory file))
-    (prin1-to-string file)
-    (if description
-       (format " description=%s" (prin1-to-string description))
-      ""))))
+  (mml-insert-tag 'part 'type type 'filename file 'disposition "attachment"
+                 'description description))
+
+(defun mml-attach-buffer (buffer &optional type description)
+  "Attach a buffer to the outgoing MIME message.
+See `mml-attach-file' for details of operation."
+  (interactive
+   (let* ((buffer (read-buffer "Attach buffer: "))
+         (type (mml-minibuffer-read-type buffer "text/plain"))
+         (description (mml-minibuffer-read-description)))
+     (list buffer type description)))
+  (mml-insert-tag 'part 'type type 'buffer buffer 'disposition "attachment"
+                 'description description))
 
 (defun mml-attach-external (file &optional type description)
   "Attach an external file into the buffer.
 FILE is an ange-ftp/efs specification of the part location.
 TYPE is the MIME type to use."
   (interactive
-   (let* ((file (mml-read-file "Attach external file: "))
-         (type (mml-read-type file))
-         (description (mml-read-description)))
+   (let* ((file (mml-minibuffer-read-file "Attach external file: "))
+         (type (mml-minibuffer-read-type file))
+         (description (mml-minibuffer-read-description)))
      (list file type description)))
-  (insert (format
-          "<#external type=%s name=%s disposition=attachment><#/external>\n"
-          type (prin1-to-string file))))
-
+  (mml-insert-tag 'external 'type type 'name file 'disposition "attachment"
+                 'description description))
+
+(defun mml-insert-multipart (&optional type)
+  (interactive (list (completing-read "Multipart type (default mixed): ")
+                    "mixed"
+                    '(("mixed") ("alternative") ("digest") ("parallel")
+                      ("signed") ("encrypted"))))
+  (or type
+      (setq type "mixed"))
+  (mml-insert-tag "multipart" 'type type)
+  (insert "<#/!multipart>\n")
+  (forward-line -1))
 
 (provide 'mml)
 
index 371c5c2..cca3283 100644 (file)
@@ -463,10 +463,13 @@ from the document.")
 (defun nndoc-generate-mime-parts-head (article)
   (let* ((entry (cdr (assq article nndoc-dissection-alist)))
         (headers (nth 6 entry)))
+    (save-restriction
+      (narrow-to-region (point) (point))
+      (insert-buffer-substring
+       nndoc-current-buffer (car entry) (nth 1 entry))
+      (goto-char (point-max)))
     (when headers
-      (insert headers))
-    (insert-buffer-substring
-     nndoc-current-buffer (car entry) (nth 1 entry))))
+      (insert headers))))
 
 (defun nndoc-clari-briefs-type-p ()
   (when (let ((case-fold-search nil))
index 662fb09..4e09515 100644 (file)
           (nntp-server-buffer (or buffer nntp-server-buffer)))
       (when (and (file-exists-p newest)
                 (let ((nnmail-file-coding-system
-                       message-draft-coding-system))
+                       (if (file-newer-than-file-p file auto)
+                           'binary
+                         message-draft-coding-system)))
                   (nnmail-find-file newest)))
        (save-excursion
          (set-buffer nntp-server-buffer)
index 9c8681e..72770a9 100644 (file)
@@ -407,7 +407,7 @@ time saver for large mailboxes.")
       (goto-char (point-min))
       (if xfrom
          (insert "From " xfrom "\n")
-       (unless (looking-at message-unix-mail-delimiter)
+       (unless (looking-at "From ")
          (insert "From nobody " (current-time-string) "\n"))))
     (nnfolder-normalize-buffer)
     (set-buffer nnfolder-current-buffer)
@@ -589,10 +589,10 @@ deleted.  Point is left where the deleted region was."
   (let* (save-list group-art)
     (goto-char (point-min))
     ;; The From line may have been quoted by movemail.
-    (when (looking-at (concat ">" message-unix-mail-delimiter))
+    (when (looking-at ">From")
       (delete-char 1))
     ;; This might come from somewhere else.
-    (unless (looking-at message-unix-mail-delimiter)
+    (unless (looking-at "From ")
       (insert "From nobody " (current-time-string) "\n")
       (goto-char (point-min)))
     ;; Quote all "From " lines in the article.
@@ -703,7 +703,7 @@ deleted.  Point is left where the deleted region was."
       (save-excursion
        (nnmail-activate 'nnfolder)
        ;; Read in the file.
-       (let ((delim (concat "^" message-unix-mail-delimiter))
+       (let ((delim "^From ")
              (marker (concat "\n" nnfolder-article-marker))
              (number "[0-9]+")
              (active (or (cadr (assoc group nnfolder-group-alist))
index 3b662a5..02fe048 100644 (file)
@@ -775,6 +775,7 @@ find-file-hooks, etc.
        (default-major-mode 'fundamental-mode)
        (enable-local-variables nil)
         (after-insert-file-functions nil)
+       (enable-local-eval nil)
        (find-file-hooks nil)
        (coding-system-for-read nnheader-file-coding-system))
     (insert-file-contents filename visit beg end replace)))
@@ -785,6 +786,7 @@ find-file-hooks, etc.
        (default-major-mode 'fundamental-mode)
        (enable-local-variables nil)
         (after-insert-file-functions nil)
+       (enable-local-eval nil)
        (find-file-hooks nil)
        (coding-system-for-read nnheader-file-coding-system))
     (apply 'find-file-noselect args)))
index cd413b4..2933784 100644 (file)
@@ -1,3 +1,11 @@
+1999-04-07 06:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Gnus Development): New.
+
+1999-03-06 20:12:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Generic Marking Commands): New.
+
 1999-03-01 16:41:42  Rob Browning  <rlb@cs.utexas.edu>
 
        * gnus.texi (Score Variables): Clarify.
index 3665f7b..ac4affa 100644 (file)
@@ -1,7 +1,8 @@
+
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Pterodactyl Gnus 0.80 Manual
+@settitle Pterodactyl Gnus 0.81 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -318,7 +319,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Gnus 0.80 Manual
+@title Pterodactyl Gnus 0.81 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -354,7 +355,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 Pterodactyl Gnus 0.80.
+This manual corresponds to Pterodactyl Gnus 0.81.
 
 @end ifinfo
 
@@ -4188,8 +4189,9 @@ There's a plethora of commands for manipulating these marks:
 @end ifinfo
 
 @menu
-* Setting Marks::           How to set and remove marks.
-* Setting Process Marks::   How to mark articles for later processing.
+* Setting Marks::             How to set and remove marks.
+* Generic Marking Commands::  How to customize the marking.
+* Setting Process Marks::     How to mark articles for later processing.
 @end menu
 
 
@@ -4507,6 +4509,44 @@ one line up or down.  As a special case, if this variable is
 The default is @code{t}.
 
 
+@node Generic Marking Commands
+@subsection Generic Marking Commands
+
+Some people would like the command that ticks an article (@kbd{!}) go to
+the next article.  Others would like it to go to the next unread
+article.  Yet others would like it to stay on the current article.  And
+even though I haven't heard of anybody wanting it to go the the
+previous (unread) article, I'm sure there are people that want that as
+well.
+
+Multiply these five behaviours with five different marking commands, and
+you get a potentially complex set of variable to control what each
+command should do.
+
+To sidestep that mess, Gnus provides commands that do all these
+different things.  They can be found on the @kbd{M M} map in the summary
+buffer.  Type @kbd{M M C-h} to see them all---there are too many of them
+to list in this manual.
+
+While you can use these commands directly, most users would prefer
+altering the summary mode keymap.  For instance, if you would like the
+@kbd{!} command to go the the next article instead of the next unread
+article, you could say something like:
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
+(defun my-alter-summary-map ()
+  (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
+@end lisp
+
+or
+
+@lisp
+(defun my-alter-summary-map ()
+  (local-set-key "!" "MM!n"))
+@end lisp
+
+
 @node Setting Process Marks
 @subsection Setting Process Marks
 @cindex setting process marks
@@ -6475,7 +6515,7 @@ annoying banners and/or signatures that some mailing lists and moderated
 groups adds to all the messages.  The way to use this function is to add
 the @code{banner} group parameter (@pxref{Group Parameters}) to the
 group you want banners stripped from.  The parameter either be a string,
-which will be interpreted as a regulax expression matching text to be
+which will be interpreted as a regular expression matching text to be
 removed, or the symbol @code{signature}, meaning that the (last)
 signature should be removed.
 
@@ -6696,6 +6736,12 @@ Add clickable buttons to the article (@code{gnus-article-add-buttons}).
 Add clickable buttons to the article headers
 (@code{gnus-article-add-buttons-to-head}).
 
+@item W W H
+@kindex W W H (Summary)
+@findex gnus-article-strip-headers-from-body
+Strip headers like the @code{X-No-Archive} header from the beginning of
+article bodies (@code{gnus-article-strip-headers-from-body}).
+
 @item W E l
 @kindex W E l (Summary)
 @findex gnus-article-strip-leading-blank-lines
@@ -8347,6 +8393,7 @@ group.
 @item gnus-treat-date-local
 @item gnus-treat-date-lapsed
 @item gnus-treat-date-original
+@item gnus-treat-strip-headers-in-body
 @item gnus-treat-strip-trailing-blank-lines
 @item gnus-treat-strip-leading-blank-lines
 @item gnus-treat-strip-multiple-blank-lines
@@ -9911,12 +9958,6 @@ links.  If that's the case for you, set
 @code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
 variable is @code{add-name-to-file} by default.)
 
-@findex nnmail-split-header-length-limit
-Header lines may be arbitrarily long.  However, the longer a line is,
-the longer it takes to match them.  Very long lines may lead to Gnus
-taking forever to split the mail, so Gnus excludes lines that are longer
-than @code{nnmail-split-header-length-limit} (which defaults to 1024).
-
 @kindex M-x nnmail-split-history
 @kindex nnmail-split-history
 If you wish to see where the previous mail split put the messages, you
@@ -10015,6 +10056,10 @@ The default is @code{identity}.  This is used as an additional
 filter---only files that have the right suffix @emph{and} satisfy this
 predicate are considered.
 
+@item :prescript
+@itemx :postscript
+Script run before/after fetching mail.
+
 @end table
 
 An example directory mail source:
@@ -10193,6 +10238,7 @@ All new mail files will get this file mode.  The default is 384.
 @node Fetching Mail
 @subsubsection Fetching Mail
 
+@vindex nnmail-spool-file
 The way to actually tell Gnus where to get new mail from is to set
 @code{nnmail-spool-file} to a list of mail source specifiers
 (@pxref{Mail Source Specifiers}).
@@ -12632,12 +12678,11 @@ setup, you may be able to use something like the following as your
 @lisp
 ;;; Define how Gnus is to fetch news.  We do this over NNTP
 ;;; from your ISP's server.
-(setq gnus-select-method '(nntp "nntp.your-isp.com"))
+(setq gnus-select-method '(nntp "news.your-isp.com"))
 
 ;;; Define how Gnus is to read your mail.  We read mail from
 ;;; your ISP's POP server.
-(setenv "MAILHOST" "pop.your-isp.com")
-(setq nnmail-spool-file "po:username")
+(setq nnmail-spool-file '((pop :server "pop.your-isp.com")))
 
 ;;; Say how Gnus is to store the mail.  We use nnml groups.
 (setq gnus-secondary-select-methods '((nnml "")))
@@ -16335,6 +16380,7 @@ to that instead.
 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
 * Conformity::          Gnus tries to conform to all standards.
 * Emacsen::             Gnus can be run on a few modern Emacsen.
+* Gnus Development::    How Gnus is developed.
 * Contributors::        Oodles of people.
 * New Features::        Pointers to some of the new stuff in Gnus.
 * Newest Features::     Features so new that they haven't been written yet.
@@ -16516,6 +16562,44 @@ other than that, things should look pretty much the same under all
 Emacsen.
 
 
+@node Gnus Development
+@subsection Gnus Development
+
+Gnus is developed in a two-phased cycle.  The first phase involves much
+discussion on the @samp{ding@@gnus.org} mailing list, where people
+propose changes and new features, post patches and new backends.  This
+phase is called the @dfn{alpha} phase, since the Gnusae released in this 
+phase are @dfn{alpha releases}, or (perhaps more commonly in other
+circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
+unstable and should not be used by casual users.  Gnus alpha releases
+have names like ``Red Gnus'' and ``Quassia Gnus''.
+
+After futzing around for 50-100 alpha releases, Gnus is declared
+@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
+and is called things like ``Gnus 5.6.32'' instead.  Normal people are
+supposed to be able to use these, and these are mostly discussed on the
+@samp{gnu.emacs.gnus} newsgroup.
+
+@cindex Incoming*
+@vindex nnmail-delete-incoming
+Some variable defaults differ between alpha Gnusae and released Gnusae.
+In particular, @code{nnmail-delete-incoming} defaults to @code{nil} in
+alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
+lossage of mail if an alpha release hiccups while handling the mail.
+
+The division of discussion between the ding mailing list and the Gnus
+newsgroup is not purely based on publicity concerns.  It's true that
+having people write about the horrible things that an alpha Gnus release 
+can do (sometimes) in a public forum may scare people off, but more
+importantly, talking about new experimental features that have been
+introduced may confuse casual users.  New features are frequently
+introduced, fiddled with, and judged to be found wanting, and then
+either discarded or totally rewritten.  People reading the mailing list
+usually keep up with these rapid changes, whille people on the newsgroup 
+can't be assumed to do so.
+
+
+
 @node Contributors
 @subsection Contributors
 @cindex contributors
@@ -18680,10 +18764,6 @@ groups it has been crossposted to, or something.  (Agent.)
 If point is on a group that appears multiple times in topics, and
 you press `l', point will move to the first instance of the group.
 
-@item
-The documentation should mention pop3.el, fetchmail, smtpmail and why
-po:username often fails.
-
 @item
 Fetch by Message-ID from dejanews.
 
@@ -18701,6 +18781,18 @@ timeout for all commands.
 When stading on a topic line and `t'-ing, point goes to the last line.
 It should go somewhere else.
 
+@item
+I'm having trouble accessing a newsgroup with a "+" in its name with
+Gnus.  There is a new newsgroup on msnews.microsoft.com named
+"microsoft.public.multimedia.directx.html+time" that I'm trying to
+access as
+"nntp+msnews.microsoft.com:microsoft.public.multimedia.directx.html+time"
+but it gives an error that it cant access the group.
+
+Is the "+" character illegal in newsgroup names?  Is there any way in
+Gnus to work around this?  (gnus 5.6.45 - XEmacs 20.4)
+
+
 @item
 Solve the halting problem.
 
index 3350daf..722ffed 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Pterodactyl Message 0.80 Manual
+@settitle Pterodactyl Message 0.81 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Message 0.80 Manual
+@title Pterodactyl Message 0.81 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,7 +83,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Pterodactyl Message 0.80.  Message is
+This manual corresponds to Pterodactyl Message 0.81.  Message is
 distributed with the Gnus distribution bearing the same version number
 as this manual.