*** 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-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.
index be05cb1..3569cf4 100644 (file)
@@ -52,7 +52,7 @@
 
 (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)
index c818b64..e879b24 100644 (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
@@ -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)
-  (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
@@ -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"))
-  (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."
@@ -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)
-       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
-       (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))
-           ;; 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"))))
 
+(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
 ;;;
@@ -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))))
-   
+
 (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))
+               (gnus-summary-goto-subject gnus-current-article)
                (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.
-      (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)
index 7679f3e..15a10c8 100644 (file)
 \\{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)
-                   (> (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))
 (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
-                      (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)
     (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))
index d8490d5..6d6dd68 100644 (file)
@@ -2544,7 +2544,7 @@ Destroys the current buffer."
            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.
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."
-  (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))
-      (gnus-subscribe-group "nndraft:draft" nil '(nndraft "")))
+      (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
     (gnus-group-set-parameter
-     "nndraft:draft" 'gnus-dummy '((gnus-draft-mode)))))
+     "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode)))))
 
 ;;;###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)
-             (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.
-    (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))
index 2fb7d64..d7d0c90 100644 (file)
@@ -244,7 +244,7 @@ is restarted, and sometimes reloaded."
   :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)
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-v" 'message-delete-not-region)
 
   (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)]
+   ["Delete Outside Region" message-delete-not-region (mark 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-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)
@@ -1402,6 +1406,22 @@ With the prefix argument FORCE, insert the header anyway."
 
 ;;; 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))
@@ -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))
+      (setq buffer-file-name nil)
       (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."
-  (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
 
index 6b46765..d5d564d 100644 (file)
   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
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)
-      (cadar (sort results (lambda (r1 r2) (< (car r1) (car r2))))))))
+      (cadar (sort results 'car-less-than-car)))))
 
 ;;;
 ;;; Built-in type predicates and functions
index 17227be..37e9ab4 100644 (file)
@@ -35,7 +35,7 @@
 (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)
 
 (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)
 (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
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)
-              (lambda (a1 a2) (< (car a1) (car a2))))))
+              'car-less-than-car)))
       (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)
-                      (lambda (a b) (< (car a) (car b))))))
+                      'car-less-than-car)))
       (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
-             (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))
          (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))
              (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))
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.
index 5d32478..ec316b9 100644 (file)
@@ -1,7 +1,7 @@
 \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
@@ -309,7 +309,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Quassia Gnus 0.5 Manual
+@title Quassia Gnus 0.6 Manual
 
 @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.
 
-This manual corresponds to Quassia Gnus 0.5.
+This manual corresponds to Quassia Gnus 0.6.
 
 @end ifinfo
 
@@ -4498,45 +4498,76 @@ displayed as empty lines in the summary buffer.
 @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 loose threads
 
 @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
@@ -4630,60 +4661,54 @@ something like:
       '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
+@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
@@ -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.
 
+@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
@@ -4737,9 +4770,9 @@ meaningful.  Here's one example:
 (defun my-alter-message-id (header)
   (let ((id (mail-header-id header)))
     (when (string-match
-           "\\(<[^<>@]*\\)\\.?cygnus\\..*@\\([^<>@]*>\\)" id)
+           "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" 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
 
@@ -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.
-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,
@@ -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}). 
+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)
@@ -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.
+* Example Setup::          An example @file{.gnus.el} file for offline people.
 @end menu
 
 
@@ -11288,6 +11331,52 @@ Hook run when disconnecting from the network.
 @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
index 698c01a..436697d 100644 (file)
@@ -1,7 +1,7 @@
 \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
@@ -39,7 +39,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 0.5 Manual
+@title Message 0.6 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@ buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 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. 
 
@@ -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.
 
+@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