Quassia Gnus v0.12. qgnus-0_12
authormorioka <morioka>
Thu, 27 Nov 1997 07:38:42 +0000 (07:38 +0000)
committermorioka <morioka>
Thu, 27 Nov 1997 07:38:42 +0000 (07:38 +0000)
25 files changed:
GNUS-NEWS
lisp/ChangeLog
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cache.el
lisp/gnus-demon.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-msg.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-sum.el
lisp/gnus-uu.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/messcompat.el
lisp/nndraft.el
lisp/nnmail.el
lisp/nnmh.el
lisp/nntp.el
texi/ChangeLog
texi/gnus-faq.texi
texi/gnus.texi
texi/message.texi

index cfa841d..c7e4692 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
@@ -51,3 +51,5 @@ limit.
 
 *** `M-RET' is a new Message command for breaking cited text.
 
+*** \\1-expressions are now valid in `nnmail-split-methods'.
+
index 3a3d50b..f22101b 100644 (file)
@@ -2,6 +2,101 @@ Sat Sep 13 21:21:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.1 is released.
 
+Sat Oct  4 00:53:55 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.12 is released.
+
+Sat Oct  4 00:16:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnmail.el (nnmail-delete-incoming): Changed default to nil.
+
+       * gnus-int.el (gnus-request-scan): Don't do anything if
+       unplugged. 
+
+Fri Oct  3 21:09:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (gnus-ignored-headers): Doc fix.
+
+       * gnus-demon.el (gnus-demon-add-nntp-close-connection): New
+       function. 
+       (gnus-demon-nntp-close-connection): Ditto.
+
+       * nntp.el (nntp-last-command-time): New variable.
+       (nntp-retrieve-data): Use it.
+
+       * message.el (message-news-p): Messages with Posted-To aren't
+       news. 
+       (message-mode): Heed message-yank-prefix when filling.
+
+       * nndraft.el (nndraft-request-restore-buffer): Remove Xrefs and
+       Lines headers.
+
+       * nntp.el (nntp-encode-text): Encode according to RFC977.
+
+Wed Oct  1 18:27:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): gcc-self didn't
+       work if `gnus-message-archive-method' was nil.
+
+       * nnmail.el (nnmail-article-group): Allow \\1 substitution.
+
+Sat Sep 27 12:57:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-salt.el (gnus-pick-mouse-pick-region): Use it.
+
+       * gnus-xmas.el (gnus-xmas-window-edges): New function.
+
+       * gnus-score.el (gnus-score-edit-current-scores): Don't select
+       window. 
+
+Sat Sep 27 12:52:31 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * messcompat.el ((boundp 'mail-mode-hook)): Check.
+
+Sat Sep 27 09:22:15 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nndraft.el (nndraft-possibly-change-group): Always open server.
+
+       * gnus-sum.el (gnus-summary-pop-article): Force.
+
+       * gnus-art.el (gnus-article-prepare): Push the article onto the
+       history. 
+
+       * gnus-sum.el (gnus-summary-pop-article): Pop to the right
+       article. 
+
+       * gnus-demon.el (gnus-demon-scan-news): Save excursion.
+
+Sat Sep 27 09:06:55 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * gnus-cache.el (gnus-summary-limit-include-cached): New command
+       and keystroke.
+
+Sat Sep 27 06:45:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-uu.el (gnus-uu-invert-processable): Make interactive.
+
+Sat Sep 27 06:43:38 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
+
+       * gnus-picon.el: Doc fixes.
+
+1997-09-23  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus.el: Removed definition of `custom-face-lookup'.
+
+Sat Sep 27 05:36:11 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nndraft.el: Would block nnmh.
+
+       * gnus-sum.el (gnus-mark-article-as-unread): Don't allow marking
+       negative articles.
+
+       * gnus-group.el (gnus-fetch-group): Use `gnus-no-server'.
+
+       * gnus-agent.el (gnus-agent-with-fetch): Moved.
+
+       * gnus-sum.el (gnus-nov-read-integer): Really skip to next field.
+
 Sat Sep 27 04:32:45 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Quassia Gnus v0.11 is released.
index 721b92b..cb893b5 100644 (file)
@@ -62,9 +62,6 @@
 (defvar gnus-agent-file-name nil)
 (defvar gnus-agent-send-mail-function nil)
 
-(defvar gnus-plugged t
-  "Whether Gnus is plugged or not.")
-
 ;; Dynamic variables
 (defvar gnus-headers)
 (defvar gnus-score)
   "The full path of the Gnus agent library FILE."
   (concat (gnus-agent-directory) "agent.lib/" file))
 
+;;; Fetching setup functions.
+
+(defun gnus-agent-start-fetch ()
+  "Initialize data structures for efficient fetching."
+  (gnus-agent-open-history)
+  (setq gnus-agent-current-history (gnus-agent-history-buffer)))
+
+(defun gnus-agent-stop-fetch ()
+  "Save all data structures and clean up."
+  (gnus-agent-save-history)
+  (gnus-agent-close-history)
+  (setq gnus-agent-spam-hashtb nil)
+  (save-excursion
+    (set-buffer nntp-server-buffer)
+    (widen)))
+
+(defmacro gnus-agent-with-fetch (&rest forms)
+  "Do FORMS safely."
+  `(unwind-protect
+       (progn
+        (gnus-agent-start-fetch)
+        ,@forms)
+     (gnus-agent-stop-fetch)))
+
+(put 'gnus-agent-with-fetch 'lisp-indent-function 0)
+(put 'gnus-agent-with-fetch 'edebug-form-spec '(body))
+
 ;;;
 ;;; Mode infestation
 ;;;
@@ -522,31 +546,6 @@ the actual number of articles toggled is returned."
 ;;; Fetching
 ;;;
 
-(defun gnus-agent-start-fetch ()
-  "Initialize data structures for efficient fetching."
-  (gnus-agent-open-history)
-  (setq gnus-agent-current-history (gnus-agent-history-buffer)))
-
-(defun gnus-agent-stop-fetch ()
-  "Save all data structures and clean up."
-  (gnus-agent-save-history)
-  (gnus-agent-close-history)
-  (setq gnus-agent-spam-hashtb nil)
-  (save-excursion
-    (set-buffer nntp-server-buffer)
-    (widen)))
-
-(defmacro gnus-agent-with-fetch (&rest forms)
-  "Do FORMS safely."
-  `(unwind-protect
-       (progn
-        (gnus-agent-start-fetch)
-        ,@forms)
-     (gnus-agent-stop-fetch)))
-
-(put 'gnus-agent-with-fetch 'lisp-indent-function 0)
-(put 'gnus-agent-with-fetch 'edebug-form-spec '(body))
-
 (defun gnus-agent-fetch-articles (group articles)
   "Fetch ARTICLES from GROUP and put them into the agent."
   (when articles
index db13b3d..ec6cbbe 100644 (file)
@@ -95,7 +95,7 @@
     "^Date-Received:" "^References:" "^Control:" "^Xref:" "^Lines:"
     "^Posted:" "^Relay-Version:" "^Message-ID:" "^Nf-ID:" "^Nf-From:"
     "^Approved:" "^Sender:" "^Received:" "^Mail-from:")
-  "All headers that match this regexp will be hidden.
+  "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."
   :type '(choice :custom-show nil
@@ -1953,9 +1953,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
              (progn
                (save-excursion
                  (set-buffer summary-buffer)
+                 (push article gnus-newsgroup-history)
                  (setq gnus-last-article gnus-current-article
-                       gnus-newsgroup-history (cons gnus-current-article
-                                                    gnus-newsgroup-history)
                        gnus-current-article 0
                        gnus-current-headers nil
                        gnus-article-current nil)
@@ -1973,9 +1972,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
              ;; `gnus-current-article' must be an article number.
              (save-excursion
                (set-buffer summary-buffer)
+               (push article gnus-newsgroup-history)
                (setq gnus-last-article gnus-current-article
-                     gnus-newsgroup-history (cons gnus-current-article
-                                                  gnus-newsgroup-history)
                      gnus-current-article article
                      gnus-current-headers
                      (gnus-summary-article-header gnus-current-article)
index 3a7cd8d..8744414 100644 (file)
@@ -362,10 +362,13 @@ Returns the list of articles removed."
   (let ((cached gnus-newsgroup-cached)
        (gnus-verbose (max 6 gnus-verbose)))
     (unless cached
-      (error "No cached articles for this group"))
+      (gnus-message 3 "No cached articles for this group"))
     (while cached
       (gnus-summary-goto-subject (pop cached) t))))
 
+(defalias 'gnus-summary-limit-include-cached
+  'gnus-summary-insert-cached-articles)
+
 ;;; Internal functions.
 
 (defun gnus-cache-change-buffer (group)
index ec1f2bd..40934ac 100644 (file)
@@ -30,6 +30,7 @@
 (require 'gnus)
 (require 'gnus-int)
 (require 'nnheader)
+(require 'nntp)
 (eval-and-compile
   (if (string-match "XEmacs" (emacs-version))
       (require 'itimer)
@@ -259,6 +260,18 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   (save-window-excursion
     (gnus-close-backends)))
 
+(defun gnus-demon-add-nntp-close-connection ()
+  "Add daemonic nntp server disconnection to Gnus.
+If no commands have gone out via nntp during the last five
+minutes, the connection is closed."
+  (gnus-demon-add-handler 'gnus-demon-close-connections 5 nil))
+
+(defun gnus-demon-nntp-close-connection ()
+  (save-window-excursion
+    (when (nnmail-time-less '(0 300)
+                           (nnmail-time-since nntp-last-command-time))
+      (nntp-close-server))))
+
 (defun gnus-demon-add-scanmail ()
   "Add daemonic scanning of mail from the mail backends."
   (gnus-demon-add-handler 'gnus-demon-scan-mail 120 60))
@@ -278,11 +291,15 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   (gnus-demon-add-handler 'gnus-demon-scan-news 120 60))
 
 (defun gnus-demon-scan-news ()
-  (save-window-excursion
-    (when (gnus-alive-p)
-      (save-excursion
-       (set-buffer gnus-group-buffer)
-       (gnus-group-get-new-news)))))
+  (let ((win (current-window-configuration)))
+    (unwind-protect
+       (save-window-excursion
+         (save-excursion
+           (when (gnus-alive-p)
+             (save-excursion
+               (set-buffer gnus-group-buffer)
+               (gnus-group-get-new-news)))))
+      (set-window-configuration win))))
 
 (defun gnus-demon-add-scan-timestamps ()
   "Add daemonic updating of timestamps in empty newgroups."
index d63442b..6196b5f 100644 (file)
@@ -1558,7 +1558,7 @@ be permanent."
 Returns whether the fetching was successful or not."
   (interactive "sGroup name: ")
   (unless (get-buffer gnus-group-buffer)
-    (gnus))
+    (gnus-no-server))
   (gnus-group-read-group nil nil group))
 
 (defvar gnus-ephemeral-group-server 0)
index 1fc205b..674f2be 100644 (file)
@@ -361,12 +361,13 @@ If BUFFER, insert the article in that group."
 (defun gnus-request-scan (group gnus-command-method)
   "Request a SCAN being performed in GROUP from GNUS-COMMAND-METHOD.
 If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
-  (let ((gnus-command-method
-        (if group (gnus-find-method-for-group group) gnus-command-method))
-       (gnus-inhibit-demon t))
-    (funcall (gnus-get-function gnus-command-method 'request-scan)
-            (and group (gnus-group-real-name group))
-            (nth 1 gnus-command-method))))
+  (when gnus-plugged
+    (let ((gnus-command-method
+          (if group (gnus-find-method-for-group group) gnus-command-method))
+         (gnus-inhibit-demon t))
+      (funcall (gnus-get-function gnus-command-method 'request-scan)
+              (and group (gnus-group-real-name group))
+              (nth 1 gnus-command-method)))))
 
 (defsubst gnus-request-update-info (info gnus-command-method)
   "Request that GNUS-COMMAND-METHOD update INFO."
index 12f06ae..86d5941 100644 (file)
@@ -981,8 +981,12 @@ this is a reply."
   "Insert the Gcc to say where the article is to be archived."
   (let* ((var gnus-message-archive-group)
         (group (or group gnus-newsgroup-name ""))
-        result
-        gcc-self-val
+        (gcc-self-val
+         (and gnus-newsgroup-name
+              (setq gcc-self-val
+                    (gnus-group-find-parameter
+                     gnus-newsgroup-name 'gcc-self))))
+        result 
         (groups
          (cond
           ((null gnus-message-archive-method)
@@ -1018,7 +1022,7 @@ this is a reply."
              (setq var (cdr var)))
            result)))
         name)
-    (when groups
+    (when (or groups gcc-self-val)
       (when (stringp groups)
        (setq groups (list groups)))
       (save-excursion
@@ -1026,10 +1030,8 @@ this is a reply."
          (message-narrow-to-headers)
          (goto-char (point-max))
          (insert "Gcc: ")
-         (if (and gnus-newsgroup-name
-                  (setq gcc-self-val
-                        (gnus-group-find-parameter
-                         gnus-newsgroup-name 'gcc-self)))
+         (if gcc-self-val
+             ;; Use the `gcc-self' param value instead.
              (progn
                (insert
                 (if (stringp gcc-self-val)
@@ -1040,6 +1042,7 @@ this is a reply."
                  (progn
                    (beginning-of-line)
                    (kill-line))))
+           ;; Use the list of groups.
            (while (setq name (pop groups))
              (insert (if (string-match ":" name)
                          name
index 955d203..07ba0b1 100644 (file)
@@ -203,7 +203,7 @@ This must be bound to a button-down mouse event."
          (start-line (1+ (count-lines 1 start-point)))
         (start-window (posn-window start-posn))
         (start-frame (window-frame start-window))
-        (bounds (window-edges start-window))
+        (bounds (gnus-window-edges start-window))
         (top (nth 1 bounds))
         (bottom (if (window-minibuffer-p start-window)
                     (nth 3 bounds)
index 59d4741..36692c7 100644 (file)
@@ -1019,7 +1019,6 @@ SCORE is the score to add."
     (gnus-make-directory (file-name-directory file))
     (setq gnus-score-edit-buffer (find-file-noselect file))
     (gnus-configure-windows 'edit-score)
-    (select-window (get-buffer-window gnus-score-edit-buffer))
     (gnus-score-mode)
     (setq gnus-score-edit-exit-function 'gnus-score-edit-done)
     (make-local-variable 'gnus-prev-winconf)
index 5d5a4f0..dd6591f 100644 (file)
@@ -33,6 +33,7 @@
 (require 'gnus-range)
 (require 'gnus-int)
 (require 'gnus-undo)
+(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -1248,6 +1249,7 @@ increase the score of each group you read."
     "u" gnus-summary-limit-to-unread
     "m" gnus-summary-limit-to-marks
     "v" gnus-summary-limit-to-score
+    "*" gnus-summary-limit-include-cached
     "D" gnus-summary-limit-include-dormant
     "T" gnus-summary-limit-include-thread
     "d" gnus-summary-limit-exclude-dormant
@@ -4408,7 +4410,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (let ((num (ignore-errors (read buffer))))
           (if (numberp num) num 0)))
      (unless (eobp)
-       (forward-char 1))))
+       (search-forward "\t" eol 'move))))
 
 (defmacro gnus-nov-skip-field ()
   '(search-forward "\t" eol 'move))
@@ -5824,7 +5826,7 @@ NUMBER articles will be popped off."
     (setq gnus-newsgroup-history
          (cdr (setq to (nthcdr number gnus-newsgroup-history))))
     (if to
-       (gnus-summary-goto-article (car to))
+       (gnus-summary-goto-article (car to) nil t)
       (error "Article history empty")))
   (gnus-summary-position-point))
 
@@ -7603,8 +7605,8 @@ returned."
 (defun gnus-summary-mark-article-as-unread (mark)
   "Mark the current article quickly as unread with MARK."
   (let ((article (gnus-summary-article-number)))
-    (if (< article 0)
-       (gnus-error 1 "Unmarkable article")
+    (if (<= article 0)
+       (gnus-error 1 "Can't mark negative article numbers")
       (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked))
       (setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant))
       (setq gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable))
@@ -7740,19 +7742,24 @@ marked."
          gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable)
          gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads))
 
-    ;; Unsuppress duplicates?
-    (when gnus-suppress-duplicates
-      (gnus-dup-unsuppress-article article))
-
-    (cond ((= mark gnus-ticked-mark)
-          (push article gnus-newsgroup-marked))
-         ((= mark gnus-dormant-mark)
-          (push article gnus-newsgroup-dormant))
-         (t
-          (push article gnus-newsgroup-unreads)))
-    (setq gnus-newsgroup-reads
-         (delq (assq article gnus-newsgroup-reads)
-               gnus-newsgroup-reads))))
+    (if (<= article 0)
+       (progn
+         (gnus-error 1 "Can't mark negative article numbers")
+         nil)
+      ;; Unsuppress duplicates?
+      (when gnus-suppress-duplicates
+       (gnus-dup-unsuppress-article article))
+
+      (cond ((= mark gnus-ticked-mark)
+            (push article gnus-newsgroup-marked))
+           ((= mark gnus-dormant-mark)
+            (push article gnus-newsgroup-dormant))
+           (t
+            (push article gnus-newsgroup-unreads)))
+      (setq gnus-newsgroup-reads
+           (delq (assq article gnus-newsgroup-reads)
+                 gnus-newsgroup-reads))
+      t)))
 
 (defalias 'gnus-summary-mark-as-unread-forward
   'gnus-summary-tick-article-forward)
index 48c502d..8e095f6 100644 (file)
@@ -634,6 +634,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 
 (defun gnus-uu-invert-processable ()
   "Invert the list of process-marked articles."
+  (interactive)
   (let ((data gnus-newsgroup-data)
        d number)
     (save-excursion
index bb49aab..02ed971 100644 (file)
@@ -417,6 +417,7 @@ call it with the value of the `gnus-data' text property."
   (fset 'gnus-add-text-properties 'gnus-xmas-add-text-properties)
   (fset 'gnus-put-text-property 'gnus-xmas-put-text-property)
   (fset 'gnus-deactivate-mark 'ignore)
+  (fset 'gnus-window-edges 'window-pixel-edges)
 
   (require 'text-props)
   (if (and (<= emacs-major-version 19)
index 34e6cb9..cacbd7d 100644 (file)
@@ -244,7 +244,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.11"
+(defconst gnus-version-number "0.12"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
@@ -281,47 +281,9 @@ be set in `.emacs' instead."
   (defalias 'gnus-mode-line-buffer-identification 'identity)
   (defalias 'gnus-characterp 'numberp)
   (defalias 'gnus-deactivate-mark 'deactivate-mark)
+  (defalias 'gnus-window-edges 'window-edges)
   (defalias 'gnus-key-press-event-p 'numberp))
 
-;; The XEmacs people think this is evil, so it must go.
-(defun custom-face-lookup (&optional fg bg stipple bold italic underline)
-  "Lookup or create a face with specified attributes."
-  (let ((name (intern (format "custom-face-%s-%s-%s-%S-%S-%S"
-                             (or fg "default")
-                             (or bg "default")
-                             (or stipple "default")
-                             bold italic underline))))
-    (if (and (custom-facep name)
-            (fboundp 'make-face))
-       ()
-      (copy-face 'default name)
-      (when (and fg
-                (not (string-equal fg "default")))
-       (ignore-errors
-         (set-face-foreground name fg)))
-      (when (and bg
-                (not (string-equal bg "default")))
-       (ignore-errors
-         (set-face-background name bg)))
-      (when (and stipple
-                (not (string-equal stipple "default"))
-                (not (eq stipple 'custom:asis))
-                (fboundp 'set-face-stipple))
-       (set-face-stipple name stipple))
-      (when (and bold
-                (not (eq bold 'custom:asis)))
-       (ignore-errors
-         (make-face-bold name)))
-      (when (and italic
-                (not (eq italic 'custom:asis)))
-       (ignore-errors
-         (make-face-italic name)))
-      (when (and underline
-                (not (eq underline 'custom:asis)))
-       (ignore-errors
-         (set-face-underline-p name t))))
-    name))
-
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
 
@@ -1397,6 +1359,9 @@ want."
   :group 'gnus-article-saving
   :type 'directory)
 
+(defvar gnus-plugged t
+  "Whether Gnus is plugged or not.")
+
 \f
 ;;; Internal variables
 
index 257d226..2c062d5 100644 (file)
@@ -199,13 +199,13 @@ included.  Organization, Lines and X-Mailer are optional."
   :type 'sexp)
 
 (defcustom message-ignored-news-headers
-  "^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:\\|^Resent-Fcc:"
+  "^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:"
   "*Regexp of headers to be removed unconditionally before posting."
   :group 'message-news
   :group 'message-headers
   :type 'regexp)
 
-(defcustom message-ignored-mail-headers "^Gcc:\\|^Fcc:\\|^Resent-Fcc:"
+(defcustom message-ignored-mail-headers "^[GF]cc:\\|^Resent-Fcc:"
   "*Regexp of headers to be removed unconditionally before mailing."
   :group 'message-mail
   :group 'message-headers
@@ -1074,7 +1074,8 @@ Return the number of headers removed."
       (save-excursion
        (save-restriction
          (message-narrow-to-headers)
-         (message-fetch-field "newsgroups")))))
+         (and (message-fetch-field "newsgroups")
+              (not (message-fetch-field "posted-to")))))))
 
 (defun message-mail-p ()
   "Say whether the current buffer contains a mail message."
@@ -1267,16 +1268,19 @@ C-c C-r  message-caesar-buffer-body (rot13 the message body)."
        facemenu-remove-face-function t)
   (make-local-variable 'paragraph-separate)
   (make-local-variable 'paragraph-start)
-  (setq paragraph-start (concat (regexp-quote mail-header-separator)
-                               "$\\|[ \t]*[-_][-_][-_]+$\\|"
-                               "-- $\\|"
-                               "[> ]+$\\|"
-                               paragraph-start))
-  (setq paragraph-separate (concat (regexp-quote mail-header-separator)
-                                  "$\\|[ \t]*[-_][-_][-_]+$\\|"
-                                  "-- $\\|"
-                                  "[> ]+$\\|"
-                                  paragraph-separate))
+  (setq paragraph-start
+       (concat (regexp-quote mail-header-separator)
+               "$\\|[ \t]*[-_][-_][-_]+$\\|"
+               "-- $\\|"
+               ;;!!! Uhm... shurely this can't be right.
+               "[> " (regexp-quote message-yank-prefix) "]+$\\|"
+               paragraph-start))
+  (setq paragraph-separate
+       (concat (regexp-quote mail-header-separator)
+               "$\\|[ \t]*[-_][-_][-_]+$\\|"
+               "-- $\\|"
+               "[> " (regexp-quote message-yank-prefix) "]+$\\|"
+               paragraph-separate))
   (make-local-variable 'message-reply-headers)
   (setq message-reply-headers nil)
   (make-local-variable 'message-newsreader)
index 19371fe..ca29462 100644 (file)
@@ -56,8 +56,9 @@ nil means let mailer mail back a message to report errors.")
   "Normal hook, run each time a new outgoing message is initialized.
 The function `message-setup' runs this hook.")
 
-(defvar message-mode-hook mail-mode-hook
-  "Hook run in message mode buffers.")
+(if (boundp 'mail-mode-hook)
+    (defvar message-mode-hook mail-mode-hook
+      "Hook run in message mode buffers."))
 
 (defvar message-indentation-spaces mail-indentation-spaces
   "*Number of spaces to insert at the beginning of each cited line.
index 31eaf32..5e134ec 100644 (file)
   "Request a new buffer that is restored to the state of ARTICLE."
   (nndraft-possibly-change-group group)
   (when (nndraft-request-article article group server (current-buffer))
+    (message-remove-header "xrefs")
+    (message-remove-header "lines")
     (let ((gnus-verbose-backends nil))
       (nndraft-request-expire-articles (list article) group server t))
     t))
 (deffoo nndraft-request-expire-articles (articles group &optional server force)
   (nndraft-possibly-change-group group)
   (let* ((nnmh-allow-delete-final t)
-        (res (nndraft-execute-nnmh-command
-              `(nnmh-request-expire-articles
-                ',articles group ,server ,force)))
+        (res (nnmh-request-expire-articles
+              articles group server force))
         article)
     ;; Delete all the "state" files of articles that have been expired.
     (while articles
 (deffoo nndraft-request-accept-article (group &optional server last noinsert)
   (nndraft-possibly-change-group group)
   (let ((gnus-verbose-backends nil))
-    (nndraft-execute-nnmh-command
-     `(nnmh-request-accept-article group ,server ,last noinsert))))
+    (nnmh-request-accept-article group server last noinsert)))
 
 (deffoo nndraft-request-create-group (group &optional server args)
   (nndraft-possibly-change-group group)
 (defun nndraft-possibly-change-group (group)
   (when (and group
             (not (equal group nndraft-current-group)))
+    (nndraft-open-server "")
     (setq nndraft-current-group group)
     (setq nndraft-current-directory
          (nnheader-concat nndraft-directory group))))
 
-(defun nndraft-execute-nnmh-command (command)
-  (let* ((dir (directory-file-name
-              (expand-file-name nndraft-current-directory)))
-        (group (file-name-nondirectory dir))
-        (nnmh-directory (file-name-directory dir))
-        (nnmail-keep-last-article nil)
-        (nnmh-get-new-mail nil))
-    (eval command)))
-
 (defun nndraft-article-filename (article &rest args)
   (apply 'concat
         (file-name-as-directory nndraft-current-directory)
index 200d060..4fde8c8 100644 (file)
@@ -405,7 +405,7 @@ Example:
   :group 'nnmail-split
   :type '(repeat (cons :format "%v" symbol regexp)))
 
-(defcustom nnmail-delete-incoming t
+(defcustom nnmail-delete-incoming nil
   "*If non-nil, the mail backends will delete incoming files after
 splitting."
   :group 'nnmail-retrieve
@@ -1038,14 +1038,13 @@ FUNC will be called with the buffer narrowed to each mail."
        (funcall exit-func))
       (kill-buffer (current-buffer)))))
 
-;; Mail crossposts suggested by Brian Edmonds <edmonds@cs.ubc.ca>.
 (defun nnmail-article-group (func)
   "Look at the headers and return an alist of groups that match.
 FUNC will be called with the group name to determine the article number."
   (let ((methods nnmail-split-methods)
        (obuf (current-buffer))
        (beg (point-min))
-       end group-art method)
+       end group-art method regrepp)
     (if (and (sequencep methods) (= (length methods) 1))
        ;; If there is only just one group to put everything in, we
        ;; just return a list with just this one method in.
@@ -1092,21 +1091,31 @@ FUNC will be called with the group name to determine the article number."
                       (lambda (group) (cons group (funcall func group)))
                       split))))
          ;; Go through the split methods to find a match.
-         (while (and methods (or nnmail-crosspost (not group-art)))
+         (while (and methods
+                     (or nnmail-crosspost
+                         (not group-art)))
            (goto-char (point-max))
-           (setq method (pop methods))
+           (setq method (pop methods)
+                 regrepp nil)
            (if (or methods
                    (not (equal "" (nth 1 method))))
                (when (and
                       (ignore-errors
                         (if (stringp (nth 1 method))
-                            (re-search-backward (cadr method) nil t)
+                            (progn
+                              (setq regrepp
+                                    (string-match "\\\\[0-9&]" (car method)))
+                              (re-search-backward (cadr method) nil t))
                           ;; Function to say whether this is a match.
                           (funcall (nth 1 method) (car method))))
                       ;; Don't enter the article into the same
                       ;; group twice.
                       (not (assoc (car method) group-art)))
-                 (push (cons (car method) (funcall func (car method)))
+                 (push (cons (if regrepp
+                                 (replace-match
+                                  (car method) nil nil (car method))
+                               (car method))
+                             (funcall func (car method)))
                        group-art))
              ;; This is the final group, which is used as a
              ;; catch-all.
index 6db83bd..900eede 100644 (file)
         (string-to-int (file-name-nondirectory file)))))
 
 (deffoo nnmh-request-group (group &optional server dont-check)
+  (nnmh-possibly-change-directory group server)
   (let ((pathname (nnmail-group-pathname group nnmh-directory))
        (pathname-coding-system 'binary)
        dir)
index d1470f6..2971db9 100644 (file)
@@ -168,6 +168,7 @@ server there that you can connect to.  See also `nntp-open-connection-function'"
 (defvar nntp-process-decode nil)
 (defvar nntp-process-start-point nil)
 (defvar nntp-inside-change-function nil)
+(defvoo nntp-last-command-time nil)
 
 (defvar nntp-connection-list nil)
 
@@ -261,6 +262,7 @@ server there that you can connect to.  See also `nntp-open-connection-function'"
 (defsubst nntp-retrieve-data (command address port buffer
                                   &optional wait-for callback decode)
   "Use COMMAND to retrieve data into BUFFER from PORT on ADDRESS."
+  (setq nntp-last-command-time (current-time))
   (let ((process (or (nntp-find-connection buffer)
                     (nntp-open-connection buffer))))
     (if (not process)
@@ -896,7 +898,12 @@ This function is supposed to be called from `nntp-server-opened-hook'."
       (insert "\n"))
     ;; Insert `.' at end of buffer (end of text mark).
     (goto-char (point-max))
-    (insert "." nntp-end-of-line)))
+    (insert ".\n")
+    (goto-char (point-min))
+    (while (not (eobp))
+      (end-of-line)
+      (insert "\r")
+      (forward-line 1))))
 
 (defun nntp-retrieve-headers-with-xover (articles &optional fetch-old)
   (set-buffer nntp-server-buffer)
index f883167..c4608be 100644 (file)
@@ -1,3 +1,17 @@
+Wed Oct  1 18:37:55 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Startup Files): Addition.
+
+Sat Sep 27 09:37:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Sending Variables): Fix.
+
+       * gnus.texi (Choosing Commands): Addition.
+
+Sat Sep 27 05:56:44 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * gnus.texi: Various fixes.
+
 Sat Sep 27 04:24:41 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * message.texi (Various Commands): Addition.
index a6fb13a..abc9054 100644 (file)
@@ -1,4 +1,4 @@
-\input texinfo
+@c Insert  "\input texinfo" at 1st line before texing this file alone.
 @c -*-texinfo-*-
 @c Copyright (C) 1995 Free Software Foundation, Inc.
 @setfilename gnus-faq.info
index e70d9f9..c262bc5 100644 (file)
@@ -833,7 +833,9 @@ files was the most recently saved, which enabled people to swap between
 That was kinda silly, so Gnus went one better: In addition to the
 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
 @file{.newsrc.eld}.  It will read whichever of these files that are most
-recent, but it will never write a @file{.newsrc.el} file.
+recent, but it will never write a @file{.newsrc.el} file.  You should
+never delete the @file{.newsrc.eld} file---it contains much information
+not stored in the @file{.newsrc} file.
 
 @vindex gnus-save-newsrc-file
 You can turn off writing the @file{.newsrc} file by setting
@@ -3157,7 +3159,7 @@ cases.  If this is unacceptable to you, use the other function instead.
 @vindex gnus-summary-same-subject
 @code{gnus-summary-same-subject} is a string indicating that the current
 article has the same subject as the previous.  This string will be used
-with those specs that require it.  The default is @samp{}.
+with those specs that require it.  The default is @code{""}.
 
 
 @node Summary Buffer Lines
@@ -3181,7 +3183,7 @@ Subject string.
 @item s
 Subject if the article is the root of the thread or the previous article
 had a different subject, @code{gnus-summary-same-subject} otherwise.
-(@code{gnus-summary-same-subject} defaults to @samp{}.)
+(@code{gnus-summary-same-subject} defaults to @code{""}.)
 @item F
 Full @code{From} header.
 @item n
@@ -3543,8 +3545,9 @@ Go to the previous article read (@code{gnus-summary-goto-last-article}).
 Pop an article off the summary history and go to this article
 (@code{gnus-summary-pop-article}).  This command differs from the
 command above in that you can pop as many previous articles off the
-history as you like.  For a somewhat related issue (if you use this
-command a lot), @pxref{Article Backlog}.
+history as you like, while @kbd{l} toggles the two last read articles.
+For a somewhat related issue (if you use these commands a lot),
+@pxref{Article Backlog}.
 @end table
 
 
@@ -6879,7 +6882,7 @@ A hook called in all tree mode buffers.
 @item gnus-tree-mode-line-format
 @vindex gnus-tree-mode-line-format
 A format string for the mode bar in the tree mode buffers.  The default
-is @samp{Gnus: %%b [%A] %Z}.  For a list of valid specs, @pxref{Summary
+is @samp{Gnus: %%b %S %Z}.  For a list of valid specs, @pxref{Summary
 Buffer Mode Line}. 
 
 @item gnus-selected-tree-face
@@ -6922,7 +6925,7 @@ Variables related to the display are:
 This is used for differentiating between ``real'' articles and
 ``sparse'' articles.  The format is @var{((real-open . real-close)
 (sparse-open . sparse-close) (dummy-open . dummy-close))}, and the
-default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}.
+default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
 
 @item gnus-tree-parent-child-edges
 @vindex gnus-tree-parent-child-edges
@@ -8028,7 +8031,10 @@ use to store sent messages.  The default is:
 
 @lisp
 (nnfolder "archive"
-          (nnfolder-directory "~/Mail/archive/"))
+          (nnfolder-directory   "~/Mail/archive")
+          (nnfolder-active-file "~/Mail/archive/active")
+          (nnfolder-get-new-mail nil)
+          (nnfolder-inhibit-expiry t))
 @end lisp
 
 You can, however, use any mail select method (@code{nnml},
@@ -8972,7 +8978,7 @@ and might be useful, for instance, to speed up reading groups that
 contain very big articles---@samp{alt.binaries.pictures.furniture}, for
 instance. 
 
-Anyways, you just specify @code{nnspool} as the method and @samp{} (or
+Anyways, you just specify @code{nnspool} as the method and @code{""} (or
 anything else) as the address.
 
 If you have access to a local spool, you should probably use that as the
@@ -9118,7 +9124,13 @@ This variable is a list of lists, where the first element of each of
 these lists is the name of the mail group (they do not have to be called
 something beginning with @samp{mail}, by the way), and the second
 element is a regular expression used on the header of each mail to
-determine if it belongs in this mail group.
+determine if it belongs in this mail group.  The first string may
+contain @samp{\\1} forms, like the ones used by @code{replace-match} to
+insert sub-expressions from the matched text.  For instance:
+
+@lisp
+("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
+@end lisp
 
 If the first element is the special symbol @code{junk}, then messages
 that match the regexp will disappear into the aether.  Use with
@@ -13992,6 +14004,7 @@ your @file{.gnus} file:
 @findex gnus-demon-add-disconnection
 Some ready-made functions to do this have been created:
 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection},
+@code{gnus-demon-add-nntp-close-connection}, 
 @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and
 @code{gnus-demon-add-scanmail}.  Just put those functions in your
 @file{.gnus} if you want those abilities.
@@ -14049,7 +14062,8 @@ default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
 @vindex gnus-nocem-issuers
 There are many people issuing NoCeM messages.  This list says what
 people you want to listen to.  The default is @code{("Automoose-1"
-"clewis@@ferret.ocunix.on.ca;" "jem@@xpat.com;" "red@@redpoll.mrfs.oh.us
+"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
+"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
 (Richard E. Depew)")}; fine, upstanding citizens all of them.
 
 Known despammers that you can put in this list include:
@@ -15847,6 +15861,7 @@ could point your Web browser over that-a-way.
 
 @iftex
 
+@page
 @node The Manual
 @section The Manual
 @cindex colophon
@@ -15908,6 +15923,7 @@ of the mysteries of this world, I guess.)
 @end iftex
 
 
+@page
 @node Terminology
 @section Terminology
 
@@ -16092,6 +16108,7 @@ specified by RFC1153.
 @end table
 
 
+@page
 @node Customization
 @section Customization
 @cindex general customization
@@ -16218,6 +16235,7 @@ Set @code{gnus-article-display-hook} to @code{nil} to make article
 processing a bit faster.
 
 
+@page
 @node Troubleshooting
 @section Troubleshooting
 @cindex troubleshooting
@@ -16294,6 +16312,7 @@ You can also ask on the ding mailing list---@samp{ding@@gnus.org}.
 Write to @samp{ding-request@@gnus.org} to subscribe.
 
 
+@page
 @node A Programmers Guide to Gnus
 @section A Programmer@'s Guide to Gnus
 
@@ -17646,6 +17665,7 @@ description   = <string>
 @end example
 
 
+@page
 @node Emacs for Heathens
 @section Emacs for Heathens
 
@@ -17765,7 +17785,7 @@ On the other hand, if the manual says ``set @code{gnus-nntp-server} to
 So be careful not to mix up strings (the latter) with symbols (the
 former).  The manual is unambiguous, but it can be confusing.
 
-
+@page
 @include gnus-faq.texi
 
 @node Index
index 4371e49..c5f8b18 100644 (file)
@@ -229,7 +229,7 @@ supersede the message in the current buffer.
 Headers matching the @code{message-ignored-supersedes-headers} are
 removed before popping up the new message buffer.  The default is@*
 @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
-^Received:\\|^X-From-Line:\\|Return-Path:}.
+^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:}.
 
 
 
@@ -292,7 +292,7 @@ undeliverable.
 @vindex message-ignored-bounced-headers
 Headers that match the @code{message-ignored-bounced-headers} regexp
 will be removed before popping up the buffer.  The default is
-@samp{^Received:}. 
+@samp{^\\(Received\\|Return-Path\\):}.
 
 
 @node Commands
@@ -705,7 +705,7 @@ buffers.
 @item message-ignored-mail-headers
 @vindex message-ignored-mail-headers
 Regexp of headers to be removed before mailing.  The default is
-@samp{^Gcc:\\|^Fcc:}. 
+@samp{^[GF]cc:\\|^Resent-Fcc:}.
 
 @item message-default-mail-headers
 @vindex message-default-mail-headers
@@ -905,7 +905,7 @@ All these conditions are checked by default.
 @item message-ignored-news-headers
 @vindex message-ignored-news-headers
 Regexp of headers to be removed before posting.  The default is@*
-@samp{^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:}.
+@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:}.
 
 @item message-default-news-headers
 @vindex message-default-news-headers
@@ -979,7 +979,8 @@ you send to mailing lists, you could do something like the following:
               (gnus-group-find-parameter group 'to-list))
       (insert "Mail-Copies-To: never\n"))))
 
-(add-hook 'message-header-setup-hook 'my-message-header-setup-hook)
+(add-hook 'message-header-setup-hook
+          'my-message-header-setup-hook)
 @end lisp
 
 @item message-send-hook
@@ -1059,7 +1060,7 @@ A function to be called if @var{predicate} returns non-@code{nil}.
 @vindex message-fcc-handler-function 
 A function called to save outgoing articles.  This function will be
 called with the name of the file to store the article in. The default
-function is @code{rmail-output} which saves in Unix mailbox format.
+function is @code{message-output} which saves in Unix mailbox format.
 
 @item message-courtesy-message
 @vindex message-courtesy-message