*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 17 Sep 1997 01:32:22 +0000 (01:32 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 17 Sep 1997 01:32:22 +0000 (01:32 +0000)
20 files changed:
GNUS-NEWS
lisp/ChangeLog
lisp/dgnushack.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cite.el
lisp/gnus-draft.el
lisp/gnus-score.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus.el
lisp/message.el
lisp/nnagent.el
lisp/nndoc.el
lisp/nndraft.el
lisp/nnml.el
lisp/nnweb.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index 2d2bfd7..763b6a3 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
 ** Gnus changes.
 
 ** Gnus changes.
 
-*** `gnus-select-method' now defaults to `(nntp "news")' instead
-of `(nntp "localhost")'.
+*** New functionality for using Gnus as an offline newsreader has been
+added.  A plethora of new commands and modes have been added.  See the
+Gnus manual for the full story.
 
 
-*** `gnus-read-active-file' now defaults to `some' instead of t.
+*** The nndraft backend has returned, but works differently than
+before.  All Message buffers are now also articles in the nndraft
+group, which is created automatically.
 
 
-*** nntp.el has been totally rewritten in an asynchronous fashion.
+*** `gnus-alter-header-function' can now be used to alter header
+values.
 
 
-*** Article prefetching functionality has been moved up into 
-Gnus.  
+*** `gnus-summary-goto-article' now accept Message-ID's.
 
 
-*** Scoring can now be performed with logical operators like 
-`and', `or', `not', and parent redirection.
-
-*** Article washing status can be displayed in the
-article mode line.
-
-*** gnus.el has been split into many smaller files.
-
-*** Suppression of duplicate articles based on Message-ID.
-
-(setq gnus-suppress-duplicates t)
-
-*** New variables for specifying what score and adapt files
-are to be considered home score and adapt files.  See
-`gnus-home-score-file' and `gnus-home-adapt-files'.
-
-*** Groups can inherit group parameters from parent topics.
-
-*** Article editing has been revamped and is now usable.
-
-*** Signatures can be recognized in more intelligent fashions.
-See `gnus-signature-separator' and `gnus-signature-limit'.
-
-*** Summary pick mode has been made to look more nn-like.
-Line numbers are displayed and the `.' command can be
-used to pick articles.
-
-*** Commands for moving the .newsrc.eld from one server to
-another have been added.
-
-    `M-x gnus-change-server'
-
-*** A way to specify that "uninteresting" fields be suppressed when
-generating lines in buffers.
-
-*** Several commands in the group buffer can be undone with
-`M-C-_'.
-
-*** Scoring can be done on words using the new score type `w'.
-
-*** Adaptive scoring can be done on a Subject word-by-word basis:
-
-    (setq gnus-use-adaptive-scoring '(word))
-
-*** Scores can be decayed.
-    (setq gnus-decay-scores t)
-
-*** Scoring can be performed using a regexp on the Date header.  The
-Date is normalized to compact ISO 8601 format first.
-
-*** A new command has been added to remove all data on articles from
-the native server.
-
-   `M-x gnus-group-clear-data-on-native-groups'
-
-*** A new command for reading collections of documents
-(nndoc with nnvirtual on top) has been added -- `M-C-d'.
-
-*** Process mark sets can be pushed and popped.
-
-*** A new mail-to-news backend makes it possible to post
-even when the NNTP server doesn't allow posting.
-
-*** A new backend for reading searches from Web search engines
-(DejaNews, Alta Vista, InReference) has been added.
-
-    Use the `G w' command in the group buffer to create such
-    a group.
-
-*** Groups inside topics can now be sorted using the standard
-sorting functions, and each topic can be sorted independently.
-
-    See the commands under the `T S' submap.
-
-*** Subsets of the groups can be sorted independently.
-
-    See the commands under the `G P' submap.
-
-*** Cached articles can be pulled into the groups.
-  
-    Use the `Y c' command.
-
-*** Score files are now applied in a more reliable order.
-
-*** Reports on where mail messages end up can be generated.
-
-    `M-x nnmail-split-history'
-
-*** More hooks and functions have been added to remove junk
-from incoming mail before saving the mail.
-    See `nnmail-prepare-incoming-header-hook'.
-
-*** The nnml mail backend now understands compressed article files.
+*** A new Message command for deleting text in the body of a message
+outside the region: `C-c C-v'.
 
 
index 8525960..b501302 100644 (file)
@@ -1,3 +1,42 @@
+Wed Sep 17 03:28:36 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.6 is released.
+
+1997-08-17  SL Baur  <steve@altair.xemacs.org>
+
+       * dgnushack.el (dgnushack-compile): Ignore .el files beginning
+       with an `=' character.
+
+Wed Sep 17 02:30:04 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-build-sparse-threads): Allow display of looped
+       References.
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Separated out into
+       function. 
+
+       * message.el (message-delete-not-region): New command and
+       keystroke. 
+
+Tue Sep 16 00:58:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nndraft.el (nndraft-directory): Changed value.
+
+       * message.el (message-kill-buffer): Disassociate draft.
+       (message-mode): Use kill hook to disassociate.
+       (message-disassociate-draft): Double-check.
+
+       * gnus-agent.el (gnus-agentize): Don't set twice.
+
+       * gnus-art.el (gnus-article-prepare): Go to the right line before
+       marking. 
+
+       * gnus-start.el: Renamed the drafts group.
+
+       * gnus-agent.el (gnus-agent-lib-file): Changed name of directory.
+
+       * gnus-draft.el (gnus-draft-mode): Simplify.
+
 Tue Sep 16 00:18:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.5 is released.
 Tue Sep 16 00:18:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.5 is released.
index be05cb1..3569cf4 100644 (file)
@@ -52,7 +52,7 @@
 
 (defun dgnushack-compile ()
   ;;(setq byte-compile-dynamic t)
 
 (defun dgnushack-compile ()
   ;;(setq byte-compile-dynamic t)
-  (let ((files (directory-files "." nil ".el$"))
+  (let ((files (directory-files "." nil "^[^=].*\\.el$"))
        (xemacs (string-match "XEmacs" emacs-version))
        ;;(byte-compile-generate-call-tree t)
        byte-compile-warnings file elc)
        (xemacs (string-match "XEmacs" emacs-version))
        ;;(byte-compile-generate-call-tree t)
        byte-compile-warnings file elc)
index c818b64..e879b24 100644 (file)
 
 (defun gnus-agent-lib-file (file)
   "The full path of the Gnus agent library FILE."
 
 (defun gnus-agent-lib-file (file)
   "The full path of the Gnus agent library FILE."
-  (concat (gnus-agent-directory) "lib/" file))
+  (concat (gnus-agent-directory) "agent.lib/" file))
 
 ;;;
 ;;; Mode infestation
 
 ;;;
 ;;; Mode infestation
@@ -243,8 +243,11 @@ and `message-send-mail-function' variables, and install the Gnus
 agent minor mode in all Gnus buffers."
   (interactive)
   (add-hook 'gnus-before-startup-hook 'gnus-open-agent)
 agent minor mode in all Gnus buffers."
   (interactive)
   (add-hook 'gnus-before-startup-hook 'gnus-open-agent)
-  (setq gnus-agent-send-mail-function message-send-mail-function
-       message-send-mail-function 'gnus-agent-send-mail))
+  (unless gnus-agent-send-mail-function 
+    (setq gnus-agent-send-mail-function message-send-mail-function
+         message-send-mail-function 'gnus-agent-send-mail))
+  (unless gnus-agent-covered-methods
+    (setq gnus-agent-covered-methods (list gnus-select-method))))
 
 (defun gnus-agent-send-mail ()
   (if gnus-plugged
 
 (defun gnus-agent-send-mail ()
   (if gnus-plugged
@@ -264,10 +267,8 @@ agent minor mode in all Gnus buffers."
   (interactive (list (gnus-group-group-name)))
   (unless group
     (error "No group on the current line"))
   (interactive (list (gnus-group-group-name)))
   (unless group
     (error "No group on the current line"))
-  (let ((articles (gnus-list-of-unread-articles group))
-       (gnus-command-method (gnus-find-method-for-group group)))
-    (gnus-agent-with-fetch
-      (gnus-agent-fetch-articles group articles))))
+  (gnus-agent-with-fetch
+    (gnus-agent-fetch-group-1 group (gnus-find-method-for-group group))))
 
 (defun gnus-agent-add-group (category arg)
   "Add the current group to an agent category."
 
 (defun gnus-agent-add-group (category arg)
   "Add the current group to an agent category."
@@ -756,58 +757,62 @@ the actual number of articles toggled is returned."
   (unless gnus-plugged
     (error "Can't fetch articles while Gnus is unplugged"))
   (let ((methods gnus-agent-covered-methods)
   (unless gnus-plugged
     (error "Can't fetch articles while Gnus is unplugged"))
   (let ((methods gnus-agent-covered-methods)
-       gnus-newsgroup-dependencies gnus-newsgroup-headers
-       gnus-newsgroup-scored
-       gnus-headers gnus-score
-       gnus-use-cache
-       gnus-command-method groups group articles score arts
-       category predicate info marks score-param)
+       method groups group)
     (save-excursion
       (while methods
     (save-excursion
       (while methods
-       (setq gnus-command-method (car methods)
+       (setq method (car methods)
              groups (gnus-groups-from-server (pop methods)))
        (gnus-agent-with-fetch
          (while (setq group (pop groups))
              groups (gnus-groups-from-server (pop methods)))
        (gnus-agent-with-fetch
          (while (setq group (pop groups))
-           ;; Fetch headers.
-           (when (and (setq articles (gnus-list-of-unread-articles group))
-                      (gnus-agent-fetch-headers group articles))
-             ;; Parse them and see which articles we want to fetch.
-             (setq gnus-newsgroup-dependencies
-                   (make-vector (length articles) 0))
-             (setq gnus-newsgroup-headers
-                   (gnus-get-newsgroup-headers-xover articles nil nil group))
-             (setq category (gnus-group-category group))
-             (setq predicate
-                   (gnus-get-predicate 
-                    (or (gnus-group-get-parameter group 'agent-predicate)
-                        (cadr category))))
-             (setq score-param
-                   (or (gnus-group-get-parameter group 'agent-score)
-                       (caddr category)))
-             (when score-param
-               (gnus-score-headers (list (list score-param))))
-             (setq arts nil)
-             (while (setq gnus-headers (pop gnus-newsgroup-headers))
-               (setq gnus-score
-                     (or (cdr (assq (mail-header-number gnus-headers)
-                                    gnus-newsgroup-scored))
-                         gnus-summary-default-score))
-               (when (funcall predicate)
-                 (push (mail-header-number gnus-headers)
-                       arts)))
-             ;; Fetch the articles.
-             (when arts
-               (gnus-agent-fetch-articles group arts)))
-           ;; Perhaps we have some additional articles to fetch.
-           (setq arts (assq 'download (gnus-info-marks
-                                       (setq info (gnus-get-info group)))))
-           (when (cdr arts)
-             (gnus-agent-fetch-articles
-              group (gnus-uncompress-range (cdr arts)))
-             (setq marks (delq arts (gnus-info-marks info)))
-             (gnus-info-set-marks info marks)))))
+           (gnus-agent-fetch-group-1 group method))))
       (gnus-message 6 "Finished fetching articles into the Gnus agent"))))
 
       (gnus-message 6 "Finished fetching articles into the Gnus agent"))))
 
+(defun gnus-agent-fetch-group-1 (group method)
+  "Fetch GROUP."
+  (let ((gnus-command-method method)
+       gnus-newsgroup-dependencies gnus-newsgroup-headers
+       gnus-newsgroup-scored gnus-headers gnus-score
+       gnus-use-cache articles score arts
+       category predicate info marks score-param)
+    ;; Fetch headers.
+    (when (and (setq articles (gnus-list-of-unread-articles group))
+              (gnus-agent-fetch-headers group articles))
+      ;; Parse them and see which articles we want to fetch.
+      (setq gnus-newsgroup-dependencies
+           (make-vector (length articles) 0))
+      (setq gnus-newsgroup-headers
+           (gnus-get-newsgroup-headers-xover articles nil nil group))
+      (setq category (gnus-group-category group))
+      (setq predicate
+           (gnus-get-predicate 
+            (or (gnus-group-get-parameter group 'agent-predicate)
+                (cadr category))))
+      (setq score-param
+           (or (gnus-group-get-parameter group 'agent-score)
+               (caddr category)))
+      (when score-param
+       (gnus-score-headers (list (list score-param))))
+      (setq arts nil)
+      (while (setq gnus-headers (pop gnus-newsgroup-headers))
+       (setq gnus-score
+             (or (cdr (assq (mail-header-number gnus-headers)
+                            gnus-newsgroup-scored))
+                 gnus-summary-default-score))
+       (when (funcall predicate)
+         (push (mail-header-number gnus-headers)
+               arts)))
+      ;; Fetch the articles.
+      (when arts
+       (gnus-agent-fetch-articles group arts)))
+    ;; Perhaps we have some additional articles to fetch.
+    (setq arts (assq 'download (gnus-info-marks
+                               (setq info (gnus-get-info group)))))
+    (when (cdr arts)
+      (gnus-agent-fetch-articles
+       group (gnus-uncompress-range (cdr arts)))
+      (setq marks (delq arts (gnus-info-marks info)))
+      (gnus-info-set-marks info marks))))
+
 ;;;
 ;;; Agent Category Mode
 ;;;
 ;;;
 ;;; Agent Category Mode
 ;;;
@@ -1222,7 +1227,7 @@ The following commands are available:
                     (setq file (concat dir (number-to-string article))))
                (delete-file file))))))
       (gnus-agent-save-alist nil nil nil dir))))
                     (setq file (concat dir (number-to-string article))))
                (delete-file file))))))
       (gnus-agent-save-alist nil nil nil dir))))
-   
+
 (provide 'gnus-agent)
 
 ;;; gnus-agent.el ends here
 (provide 'gnus-agent)
 
 ;;; gnus-agent.el ends here
index ab9ae67..30e6711 100644 (file)
@@ -1977,6 +1977,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (cons gnus-newsgroup-name gnus-current-article))
                (unless (vectorp gnus-current-headers)
                  (setq gnus-current-headers nil))
                      (cons gnus-newsgroup-name gnus-current-article))
                (unless (vectorp gnus-current-headers)
                  (setq gnus-current-headers nil))
+               (gnus-summary-goto-subject gnus-current-article)
                (gnus-summary-show-thread)
                (run-hooks 'gnus-mark-article-hook)
                (gnus-set-mode-line 'summary)
                (gnus-summary-show-thread)
                (run-hooks 'gnus-mark-article-hook)
                (gnus-set-mode-line 'summary)
index 78701d0..2a1eb4f 100644 (file)
@@ -383,7 +383,7 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
       (gnus-article-search-signature)
       (push (cons (point-marker) "") marks)
       ;; Sort the marks.
       (gnus-article-search-signature)
       (push (cons (point-marker) "") marks)
       ;; Sort the marks.
-      (setq marks (sort marks (lambda (m1 m2) (< (car m1) (car m2)))))
+      (setq marks (sort marks 'car-less-than-car))
       (let ((omarks marks))
        (setq marks nil)
        (while (cdr omarks)
       (let ((omarks marks))
        (setq marks nil)
        (while (cdr omarks)
index 7679f3e..15a10c8 100644 (file)
 \\{gnus-draft-mode-map}"
   (interactive "P")
   (when (eq major-mode 'gnus-summary-mode)
 \\{gnus-draft-mode-map}"
   (interactive "P")
   (when (eq major-mode 'gnus-summary-mode)
-    (if (not (set (make-local-variable 'gnus-draft-mode)
+    (when (set (make-local-variable 'gnus-draft-mode)
                  (if (null arg) (not gnus-draft-mode)
                  (if (null arg) (not gnus-draft-mode)
-                   (> (prefix-numeric-value arg) 0))))
-       (remove-hook 'gnus-message-setup-hook 'gnus-draft-setup-message)
+                   (> (prefix-numeric-value arg) 0)))
       ;; Set up the menu.
       (when (gnus-visual-p 'draft-menu 'menu)
        (gnus-draft-make-menu-bar))
       ;; Set up the menu.
       (when (gnus-visual-p 'draft-menu 'menu)
        (gnus-draft-make-menu-bar))
 (defun gnus-group-send-drafts ()
   "Send all sendable articles from the draft group."
   (interactive)
 (defun gnus-group-send-drafts ()
   "Send all sendable articles from the draft group."
   (interactive)
-  (gnus-request-group "nndraft:draft")
+  (gnus-request-group "nndraft:drafts")
   (save-excursion
     (let ((articles (nndraft-articles))
          (unsendable (gnus-uncompress-range
   (save-excursion
     (let ((articles (nndraft-articles))
          (unsendable (gnus-uncompress-range
-                      (cdr (assq 'unsend (gnus-info-marks
-                                          (gnus-get-info "nndraft:draft"))))))
+                      (cdr (assq 'unsend
+                                 (gnus-info-marks
+                                  (gnus-get-info "nndraft:drafts"))))))
          article)
       (while (setq article (pop articles))
        (unless (memq article unsendable)
          article)
       (while (setq article (pop articles))
        (unless (memq article unsendable)
     (message-mail)
     (erase-buffer)
     (if (not (gnus-request-restore-buffer
     (message-mail)
     (erase-buffer)
     (if (not (gnus-request-restore-buffer
-             article (or gnus-newsgroup-name "nndraft:draft")))
+             article (or gnus-newsgroup-name "nndraft:drafts")))
        (error "Couldn't restore the article")
       ;; Insert the separator.
       (goto-char (point-min))
        (error "Couldn't restore the article")
       ;; Insert the separator.
       (goto-char (point-min))
index d8490d5..6d6dd68 100644 (file)
@@ -2544,7 +2544,7 @@ Destroys the current buffer."
            files)))
       (mapcar
        (lambda (f) (cdr f))
            files)))
       (mapcar
        (lambda (f) (cdr f))
-       (sort alist (lambda (f1 f2) (< (car f1) (car f2))))))))
+       (sort alist 'car-less-than-car)))))
 
 (defun gnus-score-find-alist (group)
   "Return list of score files for GROUP.
 
 (defun gnus-score-find-alist (group)
   "Return list of score files for GROUP.
index 243f81d..09884bb 100644 (file)
@@ -700,12 +700,12 @@ prompt the user for the name of an NNTP server to use."
 
 (defun gnus-start-draft-setup ()
   "Make sure the draft group exists."
 
 (defun gnus-start-draft-setup ()
   "Make sure the draft group exists."
-  (unless (gnus-gethash "nndraft:draft" gnus-newsrc-hashtb)
-    (gnus-request-create-group "draft" '(nndraft ""))
+  (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
+    (gnus-request-create-group "drafts" '(nndraft ""))
     (let ((gnus-level-default-subscribed 1))
     (let ((gnus-level-default-subscribed 1))
-      (gnus-subscribe-group "nndraft:draft" nil '(nndraft "")))
+      (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
     (gnus-group-set-parameter
     (gnus-group-set-parameter
-     "nndraft:draft" 'gnus-dummy '((gnus-draft-mode)))))
+     "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode)))))
 
 ;;;###autoload
 (defun gnus-unload ()
 
 ;;;###autoload
 (defun gnus-unload ()
index 0cea412..fe53b12 100644 (file)
@@ -2882,15 +2882,17 @@ If NO-DISPLAY, don't generate a summary buffer."
          (while (search-backward ">" nil t)
            (setq end (1+ (point)))
            (when (search-backward "<" nil t)
          (while (search-backward ">" nil t)
            (setq end (1+ (point)))
            (when (search-backward "<" nil t)
-             (push (list (incf generation)
-                         child (setq child (buffer-substring (point) end))
-                         subject)
-                   relations)))
+             (unless (string= (setq new-child (buffer-substring (point) end))
+                              child)
+               (push (list (incf generation)
+                           child (setq child new-child)
+                           subject)
+                     relations))))
          (push (list (1+ generation) child nil subject) relations)
          (erase-buffer)))
       (kill-buffer (current-buffer)))
     ;; Sort over trustworthiness.
          (push (list (1+ generation) child nil subject) relations)
          (erase-buffer)))
       (kill-buffer (current-buffer)))
     ;; Sort over trustworthiness.
-    (setq relations (sort relations (lambda (r1 r2) (< (car r1) (car r2)))))
+    (setq relations (sort relations 'car-less-than-car))
     (while (setq relation (pop relations))
       (when (if (boundp (setq cthread (intern (cadr relation) deps)))
                (unless (car (symbol-value cthread))
     (while (setq relation (pop relations))
       (when (if (boundp (setq cthread (intern (cadr relation) deps)))
                (unless (car (symbol-value cthread))
index 2fb7d64..d7d0c90 100644 (file)
@@ -244,7 +244,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.5"
+(defconst gnus-version-number "0.6"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
index 54d31f3..41351b6 100644 (file)
@@ -1170,6 +1170,7 @@ Return the number of headers removed."
   (define-key message-mode-map "\C-c\C-d" 'message-dont-send)
 
   (define-key message-mode-map "\C-c\C-e" 'message-elide-region)
   (define-key message-mode-map "\C-c\C-d" 'message-dont-send)
 
   (define-key message-mode-map "\C-c\C-e" 'message-elide-region)
+  (define-key message-mode-map "\C-c\C-v" 'message-delete-not-region)
 
   (define-key message-mode-map "\t" 'message-tab))
 
 
   (define-key message-mode-map "\t" 'message-tab))
 
@@ -1183,6 +1184,7 @@ Return the number of headers removed."
    ["Caesar (rot13) Message" message-caesar-buffer-body t]
    ["Caesar (rot13) Region" message-caesar-region (mark t)]
    ["Elide Region" message-elide-region (mark t)]
    ["Caesar (rot13) Message" message-caesar-buffer-body t]
    ["Caesar (rot13) Region" message-caesar-region (mark t)]
    ["Elide Region" message-elide-region (mark t)]
+   ["Delete Outside Region" message-delete-not-region (mark t)]
    ["Rename buffer" message-rename-buffer t]
    ["Spellcheck" ispell-message t]
    "----"
    ["Rename buffer" message-rename-buffer t]
    ["Spellcheck" ispell-message t]
    "----"
@@ -1240,6 +1242,8 @@ C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (make-local-variable 'message-kill-actions)
   (make-local-variable 'message-postpone-actions)
   (make-local-variable 'message-draft-article)
   (make-local-variable 'message-kill-actions)
   (make-local-variable 'message-postpone-actions)
   (make-local-variable 'message-draft-article)
+  (make-local-hook 'kill-buffer-hook)
+  (add-hook 'kill-buffer-hook 'message-disassociate-draft)
   (set-syntax-table message-mode-syntax-table)
   (use-local-map message-mode-map)
   (setq local-abbrev-table message-mode-abbrev-table)
   (set-syntax-table message-mode-syntax-table)
   (use-local-map message-mode-map)
   (setq local-abbrev-table message-mode-abbrev-table)
@@ -1402,6 +1406,22 @@ With the prefix argument FORCE, insert the header anyway."
 
 ;;; Various commands
 
 
 ;;; Various commands
 
+(defun message-delete-not-region (beg end)
+  "Delete everything in the body of the current message that is outside of the region."
+  (interactive "r")
+  (save-excursion
+    (goto-char end)
+    (delete-region (point) (progn (message-goto-signature)
+                                 (forward-line -2)
+                                 (point)))
+    (insert "\n")
+    (goto-char beg)
+    (delete-region beg (progn (message-goto-body)
+                             (forward-line 2)
+                             (point))))
+  (message-goto-signature)
+  (forward-line -2))
+
 (defun message-insert-signature (&optional force)
   "Insert a signature.  See documentation for the `message-signature' variable."
   (interactive (list 0))
 (defun message-insert-signature (&optional force)
   "Insert a signature.  See documentation for the `message-signature' variable."
   (interactive (list 0))
@@ -1726,6 +1746,7 @@ The text will also be indented the normal way."
   (when (or (not (buffer-modified-p))
            (yes-or-no-p "Message modified; kill anyway? "))
     (let ((actions message-kill-actions))
   (when (or (not (buffer-modified-p))
            (yes-or-no-p "Message modified; kill anyway? "))
     (let ((actions message-kill-actions))
+      (setq buffer-file-name nil)
       (kill-buffer (current-buffer))
       (message-do-actions actions))))
 
       (kill-buffer (current-buffer))
       (message-do-actions actions))))
 
@@ -3021,8 +3042,9 @@ Headers already prepared in the buffer are not modified."
 
 (defun message-disassociate-draft ()
   "Disassociate the message buffer from the drafts directory."
 
 (defun message-disassociate-draft ()
   "Disassociate the message buffer from the drafts directory."
-  (nndraft-request-expire-articles
-   (list message-draft-article) "drafts" nil t))
+  (when message-draft-article
+    (nndraft-request-expire-articles
+     (list message-draft-article) "drafts" nil t)))
 
 \f
 
 
 \f
 
index 6b46765..d5d564d 100644 (file)
   nil)
 
 (deffoo nnagent-request-post (&optional server)
   nil)
 
 (deffoo nnagent-request-post (&optional server)
-  (gnus-request-accept-article "nndraft:draft"))
+  (gnus-request-accept-article "nndraft:drafts"))
 
 ;; Use nnml functions for just about everything.
 (nnoo-import nnagent
 
 ;; Use nnml functions for just about everything.
 (nnoo-import nnagent
index e0816e8..396de86 100644 (file)
@@ -334,7 +334,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
       (error "Document is not of any recognized type"))
     (if result
        (car entry)
       (error "Document is not of any recognized type"))
     (if result
        (car entry)
-      (cadar (sort results (lambda (r1 r2) (< (car r1) (car r2))))))))
+      (cadar (sort results 'car-less-than-car)))))
 
 ;;;
 ;;; Built-in type predicates and functions
 
 ;;;
 ;;; Built-in type predicates and functions
index 17227be..37e9ab4 100644 (file)
@@ -35,7 +35,7 @@
 (nnoo-declare nndraft
   nnmh)
 
 (nnoo-declare nndraft
   nnmh)
 
-(defvoo nndraft-directory (nnheader-concat message-directory "drafts/")
+(defvoo nndraft-directory (nnheader-concat message-directory "message-drafts/")
   "Where nndraft will store its files."
   nnmh-current-directory)
 
   "Where nndraft will store its files."
   nnmh-current-directory)
 
 (deffoo nndraft-request-update-info (group info &optional server)
   (gnus-info-set-read
    info
 (deffoo nndraft-request-update-info (group info &optional server)
   (gnus-info-set-read
    info
-   (gnus-update-read-articles "nndraft:draft" (nndraft-articles) t))
+   (gnus-update-read-articles "nndraft:drafts" (nndraft-articles) t))
   (let (marks)
     (when (setq marks (nth 3 info))
       (setcar (nthcdr 3 info)
   (let (marks)
     (when (setq marks (nth 3 info))
       (setcar (nthcdr 3 info)
 (defun nndraft-articles ()
   "Return the list of messages in the group."
   (sort
 (defun nndraft-articles ()
   "Return the list of messages in the group."
   (sort
-   (mapcar
-    (lambda (file)
-      (string-to-int file))
-    (directory-files nndraft-directory nil "^[0-9]+$" t))
+   (mapcar 'string-to-int
+          (directory-files nndraft-directory nil "\\`[0-9]+\\'" t))
    '<))
 
 (nnoo-map-functions nndraft
    '<))
 
 (nnoo-map-functions nndraft
index ab03007..cee1e1f 100644 (file)
@@ -632,7 +632,7 @@ all.  This may very well take some time.")
        (setq nnml-article-file-alist
              (sort
               (nnheader-article-to-file-alist nnml-current-directory)
        (setq nnml-article-file-alist
              (sort
               (nnheader-article-to-file-alist nnml-current-directory)
-              (lambda (a1 a2) (< (car a1) (car a2))))))
+              'car-less-than-car)))
       (setq active
            (if nnml-article-file-alist
                (cons (caar nnml-article-file-alist)
       (setq active
            (if nnml-article-file-alist
                (cons (caar nnml-article-file-alist)
@@ -728,7 +728,7 @@ all.  This may very well take some time.")
          (nnml-generate-nov-databases-1 dir seen))))
     ;; Do this directory.
     (let ((files (sort (nnheader-article-to-file-alist dir)
          (nnml-generate-nov-databases-1 dir seen))))
     ;; Do this directory.
     (let ((files (sort (nnheader-article-to-file-alist dir)
-                      (lambda (a b) (< (car a) (car b))))))
+                      'car-less-than-car)))
       (when files
        (funcall nnml-generate-active-function dir)
        ;; Generate the nov file.
       (when files
        (funcall nnml-generate-active-function dir)
        ;; Generate the nov file.
index 6c09a76..4cc1fc9 100644 (file)
            (url-insert-file-contents more)))
        ;; Return the articles in the right order.
        (setq nnweb-articles
            (url-insert-file-contents more)))
        ;; Return the articles in the right order.
        (setq nnweb-articles
-             (sort (nconc nnweb-articles map)
-                   (lambda (s1 s2) (< (car s1) (car s2)))))))))
+             (sort (nconc nnweb-articles map) 'car-less-than-car))))))
 
 (defun nnweb-dejanews-wash-article ()
   (let ((case-fold-search t))
 
 (defun nnweb-dejanews-wash-article ()
   (let ((case-fold-search t))
          (setq more nil))
        ;; Return the articles in the right order.
        (setq nnweb-articles
          (setq more nil))
        ;; Return the articles in the right order.
        (setq nnweb-articles
-             (sort (nconc nnweb-articles map)
-                   (lambda (s1 s2) (< (car s1) (car s2)))))))))
+             (sort (nconc nnweb-articles map) 'car-less-than-car))))))
 
 (defun nnweb-reference-wash-article ()
   (let ((case-fold-search t))
 
 (defun nnweb-reference-wash-article ()
   (let ((case-fold-search t))
              (setq more nil)))
          ;; Return the articles in the right order.
          (setq nnweb-articles
              (setq more nil)))
          ;; Return the articles in the right order.
          (setq nnweb-articles
-               (sort (nconc nnweb-articles map)
-                     (lambda (s1 s2) (< (car s1) (car s2))))))))))
+               (sort (nconc nnweb-articles map) 'car-less-than-car)))))))
 
 (defun nnweb-altavista-wash-article ()
   (goto-char (point-min))
 
 (defun nnweb-altavista-wash-article ()
   (goto-char (point-min))
index 7d651cc..7fe16f6 100644 (file)
@@ -1,3 +1,14 @@
+Wed Sep 17 02:32:56 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Customizing Threading): Broken up into five nodes. 
+       (Article Washing): Addition.
+
+       * message.texi (Various Commands): Add.
+
+Tue Sep 16 04:04:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Setup): New.
+
 Mon Sep 15 23:10:05 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Customizing Threading): Addition.
 Mon Sep 15 23:10:05 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Customizing Threading): Addition.
index 5d32478..ec316b9 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Quassia Gnus 0.5 Manual
+@settitle Quassia Gnus 0.6 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -309,7 +309,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
 @tex
 
 @titlepage
-@title Quassia Gnus 0.5 Manual
+@title Quassia Gnus 0.6 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -345,7 +345,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.
 
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Quassia Gnus 0.5.
+This manual corresponds to Quassia Gnus 0.6.
 
 @end ifinfo
 
 
 @end ifinfo
 
@@ -4498,45 +4498,76 @@ displayed as empty lines in the summary buffer.
 @node Customizing Threading
 @subsection Customizing Threading
 @cindex customizing threading
 @node Customizing Threading
 @subsection Customizing Threading
 @cindex customizing threading
+
+@menu
+* Loose Threads::        How Gnus gathers loose threads into bigger threads.
+* Filling In Threads::   Making the threads displayed look fuller.
+* More Threading::       Even more variables for fiddling with threads.
+* Low-Level Threading::  You thought it was over... but you were wrong!
+@end menu
+
+
+@node Loose Threads
+@subsubsection Loose Threads
 @cindex <
 @cindex >
 @cindex <
 @cindex >
+@cindex loose threads
 
 @table @code
 
 @table @code
+@item gnus-summary-make-false-root
+@vindex gnus-summary-make-false-root
+If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
+and create a dummy root at the top.  (Wait a minute.  Root at the top?
+Yup.)  Loose subtrees occur when the real root has expired, or you've
+read or killed the root in a previous session.
 
 
-@item gnus-show-threads
-@vindex gnus-show-threads
-If this variable is @code{nil}, no threading will be done, and all of
-the rest of the variables here will have no effect.  Turning threading
-off will speed group selection up a bit, but it is sure to make reading
-slower and more awkward.
+When there is no real root of a thread, Gnus will have to fudge
+something.  This variable says what fudging method Gnus should use.
+There are four possible values:
 
 
-@item gnus-fetch-old-headers
-@vindex gnus-fetch-old-headers
-If non-@code{nil}, Gnus will attempt to build old threads by fetching
-more old headers---headers to articles marked as read.  If you
-would like to display as few summary lines as possible, but still
-connect as many loose threads as possible, you should set this variable
-to @code{some} or a number.  If you set it to a number, no more than
-that number of extra old headers will be fetched.  In either case,
-fetching old headers only works if the backend you are using carries
-overview files---this would normally be @code{nntp}, @code{nnspool} and
-@code{nnml}.  Also remember that if the root of the thread has been
-expired by the server, there's not much Gnus can do about that.
+@iftex
+@iflatex
+\gnusfigure{The Summary Buffer}{390}{
+\put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
+\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
+\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
+\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
+}
+@end iflatex
+@end iftex
 
 
-@item gnus-build-sparse-threads
-@vindex gnus-build-sparse-threads
-Fetching old headers can be slow.  A low-rent similar effect can be
-gotten by setting this variable to @code{some}.  Gnus will then look at
-the complete @code{References} headers of all articles and try to string
-together articles that belong in the same thread.  This will leave
-@dfn{gaps} in the threading display where Gnus guesses that an article
-is missing from the thread.  (These gaps appear like normal summary
-lines.  If you select a gap, Gnus will try to fetch the article in
-question.)  If this variable is @code{t}, Gnus will display all these
-``gaps'' without regard for whether they are useful for completing the
-thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
-off sparse leaf nodes that don't lead anywhere.  This variable is
-@code{nil} by default.
+@cindex adopting articles
+
+@table @code
+
+@item adopt
+Gnus will make the first of the orphaned articles the parent.  This
+parent will adopt all the other articles.  The adopted articles will be
+marked as such by pointy brackets (@samp{<>}) instead of the standard
+square brackets (@samp{[]}).  This is the default method.
+
+@item dummy
+@vindex gnus-summary-dummy-line-format
+Gnus will create a dummy summary line that will pretend to be the
+parent.  This dummy line does not correspond to any real article, so
+selecting it will just select the first real article after the dummy
+article.  @code{gnus-summary-dummy-line-format} is used to specify the
+format of the dummy roots.  It accepts only one format spec:  @samp{S},
+which is the subject of the article.  @xref{Formatting Variables}.
+
+@item empty
+Gnus won't actually make any article the parent, but simply leave the
+subject field of all orphans except the first empty.  (Actually, it will
+use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
+Buffer Format}).)
+
+@item none
+Don't make any article parent at all.  Just gather the threads and
+display them after one another.
+
+@item nil
+Don't gather loose threads.
+@end table
 
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
 
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
@@ -4630,60 +4661,54 @@ something like:
       'gnus-gather-threads-by-references)
 @end lisp
 
       'gnus-gather-threads-by-references)
 @end lisp
 
-@item gnus-summary-make-false-root
-@vindex gnus-summary-make-false-root
-If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
-and create a dummy root at the top.  (Wait a minute.  Root at the top?
-Yup.)  Loose subtrees occur when the real root has expired, or you've
-read or killed the root in a previous session.
-
-When there is no real root of a thread, Gnus will have to fudge
-something.  This variable says what fudging method Gnus should use.
-There are four possible values:
+@end table
 
 
-@iftex
-@iflatex
-\gnusfigure{The Summary Buffer}{390}{
-\put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
-\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
-\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
-\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
-}
-@end iflatex
-@end iftex
 
 
-@cindex adopting articles
+@node Filling In Threads
+@subsubsection Filling In Threads
 
 @table @code
 
 @table @code
+@item gnus-fetch-old-headers
+@vindex gnus-fetch-old-headers
+If non-@code{nil}, Gnus will attempt to build old threads by fetching
+more old headers---headers to articles marked as read.  If you
+would like to display as few summary lines as possible, but still
+connect as many loose threads as possible, you should set this variable
+to @code{some} or a number.  If you set it to a number, no more than
+that number of extra old headers will be fetched.  In either case,
+fetching old headers only works if the backend you are using carries
+overview files---this would normally be @code{nntp}, @code{nnspool} and
+@code{nnml}.  Also remember that if the root of the thread has been
+expired by the server, there's not much Gnus can do about that.
 
 
-@item adopt
-Gnus will make the first of the orphaned articles the parent.  This
-parent will adopt all the other articles.  The adopted articles will be
-marked as such by pointy brackets (@samp{<>}) instead of the standard
-square brackets (@samp{[]}).  This is the default method.
+@item gnus-build-sparse-threads
+@vindex gnus-build-sparse-threads
+Fetching old headers can be slow.  A low-rent similar effect can be
+gotten by setting this variable to @code{some}.  Gnus will then look at
+the complete @code{References} headers of all articles and try to string
+together articles that belong in the same thread.  This will leave
+@dfn{gaps} in the threading display where Gnus guesses that an article
+is missing from the thread.  (These gaps appear like normal summary
+lines.  If you select a gap, Gnus will try to fetch the article in
+question.)  If this variable is @code{t}, Gnus will display all these
+``gaps'' without regard for whether they are useful for completing the
+thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
+off sparse leaf nodes that don't lead anywhere.  This variable is
+@code{nil} by default.
 
 
-@item dummy
-@vindex gnus-summary-dummy-line-format
-Gnus will create a dummy summary line that will pretend to be the
-parent.  This dummy line does not correspond to any real article, so
-selecting it will just select the first real article after the dummy
-article.  @code{gnus-summary-dummy-line-format} is used to specify the
-format of the dummy roots.  It accepts only one format spec:  @samp{S},
-which is the subject of the article.  @xref{Formatting Variables}.
+@end table
 
 
-@item empty
-Gnus won't actually make any article the parent, but simply leave the
-subject field of all orphans except the first empty.  (Actually, it will
-use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
-Buffer Format}).)
 
 
-@item none
-Don't make any article parent at all.  Just gather the threads and
-display them after one another.
+@node More Threading
+@subsubsection More Threading
 
 
-@item nil
-Don't gather loose threads.
-@end table
+@table @code
+@item gnus-show-threads
+@vindex gnus-show-threads
+If this variable is @code{nil}, no threading will be done, and all of
+the rest of the variables here will have no effect.  Turning threading
+off will speed group selection up a bit, but it is sure to make reading
+slower and more awkward.
 
 @item gnus-thread-hide-subtree
 @vindex gnus-thread-hide-subtree
 
 @item gnus-thread-hide-subtree
 @vindex gnus-thread-hide-subtree
@@ -4714,6 +4739,14 @@ in a new thread.
 This is a number that says how much each sub-thread should be indented.
 The default is 4.
 
 This is a number that says how much each sub-thread should be indented.
 The default is 4.
 
+@end table
+
+
+@node Low-Level Threading
+@subsubsection Low-Level Threading
+
+@table @code
+
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
 Hook run before parsing any headers.  The default value is
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
 Hook run before parsing any headers.  The default value is
@@ -4737,9 +4770,9 @@ meaningful.  Here's one example:
 (defun my-alter-message-id (header)
   (let ((id (mail-header-id header)))
     (when (string-match
 (defun my-alter-message-id (header)
   (let ((id (mail-header-id header)))
     (when (string-match
-           "\\(<[^<>@]*\\)\\.?cygnus\\..*@\\([^<>@]*>\\)" id)
+           "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
       (mail-header-set-id
       (mail-header-set-id
-       (concat (match-string 1 id) "@" (match-string 2 id))
+       (concat (match-string 1 id) "@@" (match-string 2 id))
        header))))
 @end lisp
 
        header))))
 @end lisp
 
@@ -5100,7 +5133,9 @@ subscribed newsgroups, request all unread articles, score them, and
 store them in the cache.  You should only ever, ever ever ever, use this
 command if 1) your connection to the @sc{nntp} server is really, really,
 really slow and 2) you have a really, really, really huge disk.
 store them in the cache.  You should only ever, ever ever ever, use this
 command if 1) your connection to the @sc{nntp} server is really, really,
 really slow and 2) you have a really, really, really huge disk.
-Seriously.
+Seriously.  One way to cut down on the number of articles downloaded is
+to score unwanted articles down and have them marked as read.  They will
+not then be downloaded by this command.
 
 @vindex gnus-uncacheable-groups
 It is likely that you do not want caching on some groups.  For instance,
 
 @vindex gnus-uncacheable-groups
 It is likely that you do not want caching on some groups.  For instance,
@@ -6159,6 +6194,13 @@ Remove page breaks from the current article
 @c @icon{gnus-summary-caesar-message}
 Do a Caesar rotate (rot13) on the article buffer
 (@code{gnus-summary-caesar-message}). 
 @c @icon{gnus-summary-caesar-message}
 Do a Caesar rotate (rot13) on the article buffer
 (@code{gnus-summary-caesar-message}). 
+Unreadable articles that tell you to read them with Caesar rotate or rot13.
+(Typically offensive jokes and such.)
+
+It's commonly called ``rot13'' because each letter is rotated 13
+positions in the alphabet, e. g. @samp{B} (letter #2) -> @sam{O} (letter
+#15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
+is rumoured to have employed this form of, uh, somewhat weak encryption.
 
 @item W t
 @kindex W t (Summary)
 
 @item W t
 @kindex W t (Summary)
@@ -10871,6 +10913,7 @@ Of course, to use it as such, you have to learn a few new commands.
 * Agent Commands::         New commands for all the buffers.
 * Outgoing Messages::      What happens when you post/mail something?
 * Agent Variables::        Customizing is fun.
 * Agent Commands::         New commands for all the buffers.
 * Outgoing Messages::      What happens when you post/mail something?
 * Agent Variables::        Customizing is fun.
+* Example Setup::          An example @file{.gnus.el} file for offline people.
 @end menu
 
 
 @end menu
 
 
@@ -11288,6 +11331,52 @@ Hook run when disconnecting from the network.
 @end table
 
 
 @end table
 
 
+@node Example Setup
+@subsection Example Setup
+
+If you don't want to read this manual, and you have a fairly standard
+setup, you may be able to use something like the following as your
+@file{.gnus.el} file to get started.
+
+@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"))
+
+;;; Define how Gnus is to read your mail.  We read mail from
+;;; your ISP's POP server.
+(setenv "MAILSERVER" "pop.your-isp.com")
+(setq nnmail-spool-file "po:username")
+
+;;; Say how Gnus is to store the mail.  We use nnml groups.
+(setq gnus-secondary-select-methods '((nnml "")))
+
+;;; Make Gnus into an offline newsreader.
+(gnus-agentize)
+@end lisp
+
+That should be it, basically.  Put that in your @file{~/.gnus.el} file,
+edit to suit your needs, start up PPP (or whatever), and type @kbd{M-x
+gnus}.
+
+If this is the first time you've run Gnus, you will be subscribed
+automatically to a few default newsgroups.  You'll probably want to
+subscribe to more groups, and to do that, you have to query the
+@sc{nntp} server for a complete list of groups with the @kbd{A A}
+command.  This usually takes quite a while, but you only have to do it
+once.
+
+After reading and parsing a while, you'll be presented with a list of
+groups.  Subscribe to the ones you want to read with the @kbd{u}
+command.  @kbd{l} to make all the killed groups disappear after you've
+subscribe to all the groups you want to read.  (@kbd{A k} will bring
+back all the killed groups.)
+
+You can now read the groups at once, or you can download the articles
+with the @kbd{J s} command.  And then read the rest of this manual to
+find out which of the other gazillion things you want to customize.
+
+
 @node Scoring
 @chapter Scoring
 @cindex scoring
 @node Scoring
 @chapter Scoring
 @cindex scoring
index 698c01a..436697d 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 0.5 Manual
+@settitle Message 0.6 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -39,7 +39,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
 @tex
 
 @titlepage
-@title Message 0.5 Manual
+@title Message 0.6 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@ buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 0.5.  Message is distributed with
+This manual corresponds to Message 0.6.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has. 
 
 the Gnus distribution bearing the same version number as this manual
 has. 
 
@@ -510,6 +510,12 @@ Elide the text between point and mark (@code{message-elide-region}).
 The text is killed and an ellipsis (@samp{[...]}) will be inserted in
 its place.
 
 The text is killed and an ellipsis (@samp{[...]}) will be inserted in
 its place.
 
+@item C-c C-v
+@kindex C-c C-v
+@findex message-delete-not-region
+Delete all text in the body of the message that is outside the region
+(@code{message-delete-not-region}).
+
 @item C-c C-t
 @kindex C-c C-t 
 @findex message-insert-to
 @item C-c C-t
 @kindex C-c C-t 
 @findex message-insert-to