*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 19:00:41 +0000 (19:00 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 19:00:41 +0000 (19:00 +0000)
19 files changed:
lisp/ChangeLog
lisp/custom.el
lisp/dgnushack.el
lisp/gnus-cus.el
lisp/gnus-demon.el
lisp/gnus-srvr.el
lisp/gnus-topic.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/mail-header.el [deleted file]
lisp/message-xmas.el [deleted file]
lisp/message.el
lisp/messagexmas.el [moved from lisp/message-xms.el with 96% similarity]
lisp/nnfolder.el
lisp/nnheader.el
lisp/nnheaderems.el [moved from lisp/nnheader-es.el with 98% similarity]
lisp/nnspool.el
texi/ChangeLog
texi/gnus.texi

index ceac342..f340871 100644 (file)
@@ -1,5 +1,68 @@
+Sun Jun  2 07:41:20 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
+
+       * gnus-topic.el (gnus-topic-remove-group): Only delete first
+       instance. 
+       (gnus-topic-move-group): Ditto.
+       (gnus-topic-change-level): Ditto.
+
+       * gnus.el (gnus-summary-insert-subject): Do rebuilding of sparse
+       articles right.
+       (gnus-summary-update-article): Do updating of referred articles
+       right. 
+       (gnus-delete-first): New function.
+
+       * gnus-cus.el (()): Color change.
+
+       * gnus.el (gnus-version): Accept a prefix to insert.
+
+Sat Jun  1 02:03:42 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * custom.el: Require cl.
+
+       * gnus.el (gnus-group-list-matching): `10 A m' to read the active
+       file. 
+
+       * message.el (message-supersede): Don't use
+       `mail-strip-quoted-names'. 
+       (message-cancel-news): Ditto.
+
+       * nnfolder.el (nnfolder-retrieve-headers): Don't allow selecting
+       empty groups.
+       (nnfolder-request-group): Ditto.
+
+Sat Jun  1 01:26:45 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * dgnushack.el (custom-file): Nix out.
+
+Sat Jun  1 01:24:28 1996  Massimo Campostrini  <campo@sunthpi3.difi.unipi.it>
+
+       * gnus-cus.el (()): Wrong number of arguments.
+
+Fri May 31 08:32:38 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el: Removed obsolete autoloads.
+
+       * gnus-demon.el (gnus-demon-init): Use `nnheader-run-at-time'. 
+
+       * gnus.el (gnus-group-catchup-current): Warn.
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Message better.
+
+       * gnus-topic.el (gnus-topic-change-level): Make sure we're in the
+       group buffer.
+
+       * gnus-srvr.el (gnus-server-exit-hook): New hook.
+       (gnus-server-exit): Use it.
+
+       * gnus-topic.el (gnus-topic-mode): Update more.
+
+       * gnus.el (gnus-group-update-group-hook): New hook.
+       (gnus-group-update-group): Use it.
+
 Fri May 31 04:33:16 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
 
+       * gnus.el: Gnus v5.2.4 is released.
+
        * custom.el (custom-face-lookup): Escape errors.
 
        * gnus-msg.el (gnus-inews-do-gcc): Don't do anything unless Gnus
index 3475fce..915f8fa 100644 (file)
@@ -68,6 +68,9 @@
 
 ;;; Code:
 
+(eval-when-compile
+  (require 'cl))
+
 ;;; Compatibility:
 
 (defun custom-xmas-add-text-properties (start end props &optional object)
@@ -1487,10 +1490,14 @@ custom-face-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)"
       (copy-face 'default name)
       (when (and fg
                 (not (string-equal fg "default")))
-       (set-face-foreground name fg))
+       (condition-case ()
+           (set-face-foreground name fg)
+         (error nil)))
       (when (and bg
                 (not (string-equal bg "default")))
-       (set-face-background name bg))
+       (condition-case ()
+           (set-face-background name bg)
+         (error nil)))
       (when (and stipple
                 (not (string-equal stipple "default"))
                 (not (eq stipple 'custom:asis))
@@ -2454,9 +2461,8 @@ Face used for customization fields while they are being edited.")
                     (not (string-match "XEmacs" emacs-version)))
 (custom-category-put 'custom-hidden-properties intangible t)
 
-(eval-when 'load
-  (if (file-readable-p custom-file)
-      (load-file custom-file)))
+(if (file-readable-p custom-file)
+    (load-file custom-file))
 
 (provide 'custom)
 
index 0abf64b..cb8aba2 100644 (file)
@@ -29,6 +29,8 @@
 (require 'cl)
 (setq load-path (cons "." load-path))
 
+(setq custom-file "/dev/null")
+
 (defun dgnushack-compile ()
   ;(setq byte-compile-dynamic t)
   (let ((files (directory-files "." nil ".el$"))
@@ -47,7 +49,7 @@
        (setq byte-compile-warnings 
              '(free-vars unresolved callargs redefine obsolete))))
       (when (or (not (member file '("gnus-xmas.el" "gnus-picon.el" 
-                                   "message-xmas.el")))
+                                   "messagexmas.el")))
                xemacs)
        (condition-case ()
            (byte-compile-file file)
index 8bbe89f..3169fb0 100644 (file)
@@ -470,7 +470,7 @@ mark:    The article's mark.")
                          (or (= mark gnus-dormant-mark)
                              (= mark gnus-ticked-mark)))
                    (custom-face-lookup 
-                    "pink" nil nil t nil nil nil))
+                    "pink" nil nil t nil nil))
              (cons '(and (< score default) 
                          (or (= mark gnus-dormant-mark)
                              (= mark gnus-ticked-mark)))
@@ -483,7 +483,7 @@ mark:    The article's mark.")
 
              (cons
               '(and (> score default) (= mark gnus-ancient-mark))
-              (custom-face-lookup "dark blue" nil nil t
+              (custom-face-lookup "medium blue" nil nil t
                                   nil nil))
              (cons 
               '(and (< score default) (= mark gnus-ancient-mark))
index 36d8aac..1038ab6 100644 (file)
@@ -57,7 +57,6 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
 (defvar gnus-demon-last-keys nil) 
 
 (eval-and-compile
-  (autoload 'cancel-timer "timer")
   (autoload 'timezone-parse-date "timezone")
   (autoload 'timezone-make-arpa-date "timezone"))
 
@@ -86,7 +85,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
       () ; Nothing to do.
     ;; Set up timer.
     (setq gnus-demon-timer 
-         (run-at-time 
+         (nnheader-run-at-time 
           gnus-demon-timestep gnus-demon-timestep 'gnus-demon))
     ;; Reset control variables.
     (setq gnus-demon-handler-state
@@ -105,7 +104,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's.")
   "Cancel any Gnus daemons."
   (interactive)
   (and gnus-demon-timer
-       (cancel-timer gnus-demon-timer))
+       (nnheader-cancel-timer gnus-demon-timer))
   (setq gnus-demon-timer nil
        gnus-use-demon nil))
 
index fce01ed..c257b34 100644 (file)
@@ -39,6 +39,9 @@ with some simple extensions.")
 (defvar gnus-server-mode-line-format "Gnus  List of servers"
   "The format specification for the server mode line.")
 
+(defvar gnus-server-exit-hook nil
+  "*Hook run when exiting the server buffer.")
+
 ;;; Internal variables.
 
 (defvar gnus-inserted-opened-servers nil)
@@ -290,7 +293,8 @@ The following commands are available:
   "Return to the group buffer."
   (interactive)
   (kill-buffer (current-buffer))
-  (switch-to-buffer gnus-group-buffer))
+  (switch-to-buffer gnus-group-buffer)
+  (run-hooks 'gnus-server-exit-hook))
 
 (defun gnus-server-list-servers ()
   "List all available servers."
@@ -558,6 +562,7 @@ The following commands are available:
       (switch-to-buffer (current-buffer))
       (goto-char (point-min))
       (gnus-group-position-point)
+      (gnus-message 5 "Connecting to %s...done" (nth 1 method))
       t))))
 
 (defun gnus-browse-mode ()
index 11f07da..2e3e4ae 100644 (file)
@@ -659,6 +659,7 @@ articles in the topic and its subtopics."
              minor-mode-map-alist))
       (add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
       (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
+      (add-hook 'gnus-group-update-group-hook 'gnus-topic-update-topic)
       (make-local-variable 'gnus-group-prepare-function)
       (setq gnus-group-prepare-function 'gnus-group-prepare-topics)
       (make-local-variable 'gnus-group-goto-next-group-function)
@@ -757,7 +758,7 @@ If COPYP, copy the groups instead."
                     (setq entry (assoc (gnus-group-parent-topic)
                                        gnus-topic-alist))
                     (not copyp))
-               (setcdr entry (delete g (cdr entry))))
+               (setcdr entry (gnus-delete-first g (cdr entry))))
              (nconc topicl (list g)))
            groups)
     (gnus-group-position-point))
@@ -772,7 +773,7 @@ If COPYP, copy the groups instead."
        (buffer-read-only nil))
     (when (and topicl group)
       (gnus-delete-line)
-      (delete group topicl))
+      (gnus-delete-first group topicl))
     (gnus-group-position-point)))
 
 (defun gnus-topic-copy-group (n topic)
@@ -791,51 +792,54 @@ If COPYP, copy the groups instead."
 
 (defun gnus-topic-change-level (group level oldlevel)
   "Run when changing levels to enter/remove groups from topics."
-  (when (and gnus-topic-mode 
-            gnus-topic-alist
-            (not gnus-topic-inhibit-change-level))
-    ;; Remove the group from the topics.
-    (when (and (< oldlevel gnus-level-zombie)
-              (>= level gnus-level-zombie))
-      (let (alist)
-       (when (setq alist (assoc (gnus-group-parent-topic) gnus-topic-alist))
-         (setcdr alist (delete group (cdr alist))))))
-    ;; If the group is subscribed. then we enter it into the topics.
-    (when (and (< level gnus-level-zombie)
-              (>= oldlevel gnus-level-zombie))
-      (let* ((prev (gnus-group-group-name))
-            (gnus-topic-inhibit-change-level t)
-            (gnus-group-indentation
-             (make-string 
-              (* gnus-topic-indent-level
-                 (or (save-excursion
-                       (gnus-topic-goto-topic (gnus-group-parent-topic))
-                       (gnus-group-topic-level)) 0)) ? ))
-            (yanked (list group))
-            alist talist end)
-       ;; Then we enter the yanked groups into the topics they belong
-       ;; to. 
-       (when (setq alist (assoc (save-excursion
-                                  (forward-line -1)
-                                  (or
-                                   (gnus-group-parent-topic)
-                                   (caar gnus-topic-topology)))
-                                gnus-topic-alist))
-         (setq talist alist)
-         (when (stringp yanked)
-           (setq yanked (list yanked)))
-         (if (not prev)
-             (nconc alist yanked)
-           (if (not (cdr alist))
-               (setcdr alist (nconc yanked (cdr alist)))
-             (while (and (not end) (cdr alist))
-               (when (equal (cadr alist) prev)
+  (save-excursion
+    (set-buffer gnus-group-buffer)
+    (when (and gnus-topic-mode 
+              gnus-topic-alist
+              (not gnus-topic-inhibit-change-level))
+      ;; Remove the group from the topics.
+      (when (and (< oldlevel gnus-level-zombie)
+                (>= level gnus-level-zombie))
+       (let (alist)
+         (forward-line -1)
+         (when (setq alist (assoc (gnus-group-parent-topic) gnus-topic-alist))
+           (setcdr alist (gnus-delete-first group (cdr alist))))))
+      ;; If the group is subscribed. then we enter it into the topics.
+      (when (and (< level gnus-level-zombie)
+                (>= oldlevel gnus-level-zombie))
+       (let* ((prev (gnus-group-group-name))
+              (gnus-topic-inhibit-change-level t)
+              (gnus-group-indentation
+               (make-string 
+                (* gnus-topic-indent-level
+                   (or (save-excursion
+                         (gnus-topic-goto-topic (gnus-group-parent-topic))
+                         (gnus-group-topic-level)) 0)) ? ))
+              (yanked (list group))
+              alist talist end)
+         ;; Then we enter the yanked groups into the topics they belong
+         ;; to. 
+         (when (setq alist (assoc (save-excursion
+                                    (forward-line -1)
+                                    (or
+                                     (gnus-group-parent-topic)
+                                     (caar gnus-topic-topology)))
+                                  gnus-topic-alist))
+           (setq talist alist)
+           (when (stringp yanked)
+             (setq yanked (list yanked)))
+           (if (not prev)
+               (nconc alist yanked)
+             (if (not (cdr alist))
                  (setcdr alist (nconc yanked (cdr alist)))
-                 (setq end t))
-               (setq alist (cdr alist)))
-             (unless end
-               (nconc talist yanked))))))
-      (gnus-topic-update-topic))))
+               (while (and (not end) (cdr alist))
+                 (when (equal (cadr alist) prev)
+                   (setcdr alist (nconc yanked (cdr alist)))
+                   (setq end t))
+                 (setq alist (cdr alist)))
+               (unless end
+                 (nconc talist yanked))))))
+       (gnus-topic-update-topic)))))
 
 (defun gnus-topic-goto-next-group (group props)
   "Go to group or the next group after group."
index 6d522f3..232f215 100644 (file)
@@ -28,7 +28,7 @@
 (require 'text-props)
 (eval-when-compile (require 'cl))
 (defvar menu-bar-mode t)
-(require 'message-xms)
+(require 'messagexmas)
 
 (defvar gnus-xmas-glyph-directory nil
   "*Directory where Gnus logos and icons are located.
index 5e119a6..895f613 100644 (file)
@@ -1362,6 +1362,9 @@ It calls `gnus-summary-expire-articles' by default.")
 (defvar gnus-group-catchup-group-hook nil
   "*A hook run when catching up a group from the group buffer.")
 
+(defvar gnus-group-update-group-hook nil
+  "*A hook called when updating group lines.")
+
 (defvar gnus-open-server-hook nil
   "*A hook called just before opening connection to the news server.")
 
@@ -1723,7 +1726,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version-number "5.2.4"
+(defconst gnus-version-number "5.2.5"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -2083,8 +2086,6 @@ Thank you for your help in stamping out bugs.
      ("gnus-msg" :interactive t
       gnus-group-post-news gnus-group-mail gnus-summary-post-news
       gnus-summary-followup gnus-summary-followup-with-original
-      gnus-summary-followup-and-reply
-      gnus-summary-followup-and-reply-with-original
       gnus-summary-cancel-article gnus-summary-supersede-article
       gnus-post-news gnus-inews-news gnus-cancel-news
       gnus-summary-reply gnus-summary-reply-with-original
@@ -2218,6 +2219,18 @@ Thank you for your help in stamping out bugs.
   (and gnus-group-buffer
        (get-buffer gnus-group-buffer)))
 
+(defun gnus-delete-first (elt list)
+  "Delete by side effect the first occurrence of ELT as a member of LIST."
+  (if (equal (car list) elt)
+      (cdr list)
+    (let ((total list))
+      (while (and (cdr list)
+                 (not (equal (cadr list) elt)))
+       (setq list (cdr list)))
+      (when (cdr list)
+       (setcdr list (cddr list)))
+      total)))
+
 ;; Delete the current line (and the next N lines.);
 (defmacro gnus-delete-line (&optional n)
   `(delete-region (progn (beginning-of-line) (point))
@@ -3507,9 +3520,10 @@ should have point."
             (delete-windows-on (car bufs)))
        (setq bufs (cdr bufs))))))
 
-(defun gnus-version ()
-  "Version numbers of this version of Gnus."
-  (interactive)
+(defun gnus-version (&optional arg)
+  "Version number of this version of Gnus.
+If ARG, insert string at point."
+  (interactive "P")
   (let ((methods gnus-valid-select-methods)
        (mess gnus-version)
        meth)
@@ -3523,7 +3537,9 @@ should have point."
           (stringp (symbol-value meth))
           (setq mess (concat mess "; " (symbol-value meth))))
       (setq methods (cdr methods)))
-    (gnus-message 2 mess)))
+    (if arg
+       (insert (message mess))
+      (message mess))))
 
 (defun gnus-info-find-node ()
   "Find Info documentation of Gnus."
@@ -5025,7 +5041,10 @@ already."
          (goto-char loc)
          (let ((gnus-group-indentation (gnus-group-group-indentation)))
            (gnus-delete-line)
-           (gnus-group-insert-group-line-info group))
+           (gnus-group-insert-group-line-info group)
+           (save-excursion
+             (forward-line -1)
+             (run-hooks 'gnus-group-update-group-hook)))
          (setq loc (1+ loc)))
        (unless (or found visible-only)
          ;; No such line in the buffer, find out where it's supposed to
@@ -5044,7 +5063,10 @@ already."
              (or entry (goto-char (point-max)))))
          ;; Finally insert the line.
          (let ((gnus-group-indentation (gnus-group-group-indentation)))
-           (gnus-group-insert-group-line-info group)))
+           (gnus-group-insert-group-line-info group)
+           (save-excursion
+             (forward-line -1)
+             (run-hooks 'gnus-group-update-group-hook))))
        (gnus-group-set-mode-line)))))
 
 (defun gnus-group-set-mode-line ()
@@ -6029,6 +6051,8 @@ read.  Cross references (Xref: header) of articles are ignored.
 The difference between N and actual number of newsgroups that were
 caught up is returned."
   (interactive "P")
+  (unless (gnus-group-group-name)
+    (error "No group on the current line"))
   (if (not (or (not gnus-interactive-catchup) ;Without confirmation?
               gnus-expert-user
               (gnus-y-or-n-p
@@ -6603,7 +6627,7 @@ This command may read the active file."
   (interactive "P\nsList newsgroups matching: ")
   ;; First make sure active file has been read.
   (when (and level
-            (>= (prefix-numeric-value level) gnus-level-killed))
+            (> (prefix-numeric-value level) gnus-level-killed))
     (gnus-get-killed-groups))
   (gnus-group-prepare-flat (or level gnus-level-subscribed)
                           all (or lowest 1) regexp)
@@ -8042,10 +8066,10 @@ If NO-DISPLAY, don't generate a summary buffer."
                      (delq number gnus-newsgroup-unselected)))
            (push number gnus-newsgroup-ancient)))))))
 
-(defun gnus-summary-update-article (article &optional header)
+(defun gnus-summary-update-article (article &optional iheader)
   "Update ARTICLE in the summary buffer."
   (set-buffer gnus-summary-buffer)
-  (let* ((header (or header (gnus-summary-article-header article)))
+  (let* ((header (or iheader (gnus-summary-article-header article)))
         (id (mail-header-id header))
         (data (gnus-data-find article))
         (thread (gnus-id-to-thread id))
@@ -8059,10 +8083,11 @@ If NO-DISPLAY, don't generate a summary buffer."
         pos)
     (when thread
       ;; !!! Should this be in or not?
-      ;(setcar thread nil)
+      (unless iheader
+       (setcar thread nil))
       (when parent
        (delq thread parent))
-      (if (gnus-summary-insert-subject id header)
+      (if (gnus-summary-insert-subject id header iheader)
          ;; Set the (possibly) new article number in the data structure.
          (gnus-data-set-number data (gnus-id-to-article id))
        (setcar thread old)
@@ -9418,15 +9443,16 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
                                               (progn (end-of-line) (point))))
                  (mail-header-set-xref headers xref))))))))
 
-(defun gnus-summary-insert-subject (id &optional old-header)
+(defun gnus-summary-insert-subject (id &optional old-header use-old-header)
   "Find article ID and insert the summary line for that article."
-  (let ((header (or old-header (gnus-read-header id)))
+  (let ((header (if (and old-header use-old-header)
+                   old-header (gnus-read-header id)))
        (number (and (numberp id) id))
        pos)
     (when header
       ;; Rebuild the thread that this article is part of and go to the
       ;; article we have fetched.
-      (when old-header
+      (when (and nil old-header)
        (when (setq pos (text-property-any
                         (point-min) (point-max) 'gnus-number 
                         (mail-header-number old-header)))
@@ -10201,7 +10227,7 @@ If FORCE, also allow jumping to articles not currently shown."
     ;; We read in the article if we have to.
     (and (not data)
         force
-        (gnus-summary-insert-subject article (and (vectorp force) force))
+        (gnus-summary-insert-subject article (and (vectorp force) force) t)
         (setq data (gnus-data-find article)))
     (goto-char b)
     (if (not data)
diff --git a/lisp/mail-header.el b/lisp/mail-header.el
deleted file mode 100644 (file)
index 405e275..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-;;; mail-header.el --- Mail header parsing, merging, formatting
-
-;; Copyright (C) 1996 by Free Software Foundation, Inc.
-
-;; Author: Erik Naggum <erik@arcana.naggum.no>
-;; Keywords: tools, mail, news
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; This package provides an abstraction to RFC822-style messages, used in
-;; mail news, and some other systems.  The simple syntactic rules for such
-;; headers, such as quoting and line folding, are routinely reimplemented
-;; in many individual packages.  This package removes the need for this
-;; redundancy by representing message headers as association lists,
-;; offering functions to extract the set of headers from a message, to
-;; parse individual headers, to merge sets of headers, and to format a set
-;; of headers.
-
-;; The car of each element in the message-header alist is a symbol whose
-;; print name is the name of the header, in all lower-case.  The cdr of an
-;; element depends on the operation.  After extracting headers from a
-;; messge, it is a string, the value of the header.  An extracted set of
-;; headers may be parsed further, which may turn it into a list, whose car
-;; is the original value and whose subsequent elements depend on the
-;; header.  For formatting, it is evaluated to obtain the strings to be
-;; inserted.  For merging, one set of headers consists of strings, while
-;; the other set will be evaluated with the symbols in the first set of
-;; headers bound to their respective values.
-
-;;; Code:
-
-;; Make the byte-compiler shut up.
-(defvar headers)
-
-(defun mail-header-extract ()
-  "Extract headers from current buffer after point.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (let ((message-headers ()) (top (point))
-       start end)
-    (while (and (setq start (point))
-               (> (skip-chars-forward "^\0- :") 0)
-               (= (following-char) ?:)
-               (setq end (point))
-               (progn (forward-char) 
-                      (> (skip-chars-forward " \t") 0)))
-      (let ((header (intern (downcase (buffer-substring start end))))
-           (value (list (buffer-substring
-                         (point) (progn (end-of-line) (point))))))
-       (while (progn (forward-char) (> (skip-chars-forward " \t") 0))
-         (push (buffer-substring (point) (progn (end-of-line) (point)))
-               value))
-       (push (if (cdr value)
-                 (cons header (mapconcat #'identity (nreverse value) " "))
-                 (cons header (car value)))
-             message-headers)))
-    (goto-char top)
-    (nreverse message-headers)))
-
-(defun mail-header-extract-no-properties ()
-  "Extract headers from current buffer after point, without properties.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (mapcar
-   (lambda (elt)
-     (set-text-properties 0 (length (cdr elt)) nil (cdr elt))
-     elt)
-   (mail-header-extract)))
-
-(defun mail-header-parse (parsing-rules headers)
-  "Apply PARSING-RULES to HEADERS.
-PARSING-RULES is an alist whose keys are header names (symbols) and whose
-value is a parsing function.  The function takes one argument, a string,
-and return a list of values, which will destructively replace the value
-associated with the key in HEADERS, after being prepended with the original
-value."
-  (dolist (rule parsing-rules)
-    (let ((header (assq (car rule) headers)))
-      (when header
-       (if (consp (cdr header))
-           (setf (cddr header) (funcall (cdr rule) (cadr header)))
-         (setf (cdr header)
-               (cons (cdr header) (funcall (cdr rule) (cdr header))))))))
-  headers)
-
-(defsubst mail-header (header &optional header-alist)
-  "Return the value associated with header HEADER in HEADER-ALIST.
-If the value is a string, it is the original value of the header.  If the
-value is a list, its first element is the original value of the header,
-with any subsequent elements bing the result of parsing the value.
-If HEADER-ALIST is nil, the dynamically bound variable `headers' is used."
-  (cdr (assq header (or header-alist headers))))
-
-(defun mail-header-set (header value &optional header-alist)
-  "Set the value associated with header HEADER to VALUE in HEADER-ALIST.
-HEADER-ALIST defaults to the dynamically bound variable `headers' if nil.
-See `mail-header' for the semantics of VALUE."
-  (let* ((alist (or header-alist headers))
-       (entry (assq header alist)))
-    (if entry
-       (setf (cdr entry) value)
-       (nconc alist (list (cons header value)))))
-  value)
-
-(defsetf mail-header (header &optional header-alist) (value)
-  `(mail-header-set ,header ,value ,header-alist))
-
-(defun mail-header-merge (merge-rules headers)
-  "Return a new header alist with MERGE-RULES applied to HEADERS.
-MERGE-RULES is an alist whose keys are header names (symbols) and whose
-values are forms to evaluate, the results of which are the new headers.  It
-should be a string or a list of string.  The first element may be nil to
-denote that the formatting functions must use the remaining elements, or
-skip the header altogether if there are no other elements.
-  The macro `mail-header' can be used to access headers in HEADERS."
-  (mapcar
-   (lambda (rule)
-     (cons (car rule) (eval (cdr rule))))
-   merge-rules))
-
-(defvar mail-header-format-function
-  (lambda (header value)
-    "Function to format headers without a specified formatting function."
-    (insert (capitalize (symbol-name header))
-           ": "
-           (if (consp value) (car value) value)
-           "\n")))
-
-(defun mail-header-format (format-rules headers)
-  "Use FORMAT-RULES to format HEADERS and insert into current buffer.
-FORMAT-RULES is an alist whose keys are header names (symbols), and whose
-values are functions that format the header, the results of which are
-inserted, unless it is nil.  The function takes two arguments, the header
-symbol, and the value of that header.  If the function itself is nil, the
-default action is to insert the value of the header, unless it is nil.
-The headers are inserted in the order of the FORMAT-RULES.
-A key of t represents any otherwise unmentioned headers.
-A key of nil has as its value a list of defaulted headers to ignore."
-  (let ((ignore (append (cdr (assq nil format-rules))
-                       (mapcar #'car format-rules))))
-    (dolist (rule format-rules)
-      (let* ((header (car rule))
-           (value (mail-header header)))
-       (cond ((null header) 'ignore)
-             ((eq header t)
-              (dolist (defaulted headers)
-                (unless (memq (car defaulted) ignore)
-                  (let* ((header (car defaulted))
-                         (value (cdr defaulted)))
-                    (if (cdr rule)
-                        (funcall (cdr rule) header value)
-                        (funcall mail-header-format-function header value))))))
-             (value
-              (if (cdr rule)
-                  (funcall (cdr rule) header value)
-                  (funcall mail-header-format-function header value))))))
-    (insert "\n")))
-
-(provide 'mail-header)
-
-;;; mail-header.el ends here
diff --git a/lisp/message-xmas.el b/lisp/message-xmas.el
deleted file mode 100644 (file)
index df67084..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-;;; message-xmas.el --- XEmacs extensions to message
-;; Copyright (C) 1996 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-;; Keywords: mail, news
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(defvar message-xmas-glyph-directory nil
-  "*Directory where Message logos and icons are located.
-If this variable is nil, Message will try to locate the directory
-automatically.")
-
-(defvar message-use-toolbar 'default-toolbar
-  "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar.  The five legal values are
-`default-toolbar', `top-toolbar', `bottom-toolbar',
-`right-toolbar', and `left-toolbar'.")
-
-(defvar message-toolbar 
-  '([message-spell toolbar-ispell t "Spell"]
-    [message-help toolbar-info t "Message help"])
-  "The message buffer toolbar.")
-
-(defun message-xmas-find-glyph-directory (&optional package)
-  (setq package (or package "message"))
-  (let ((path load-path)
-       dir result)
-    ;; We try to find the dir by looking at the load path,
-    ;; stripping away the last component and adding "etc/".
-    (while path
-      (if (and (car path)
-              (file-exists-p
-               (setq dir (concat
-                          (file-name-directory
-                           (directory-file-name (car path)))
-                          "etc/" (or package "message") "/")))
-              (file-directory-p dir))
-         (setq result dir
-               path nil)
-       (setq path (cdr path))))
-    result))
-
-(defun message-xmas-setup-toolbar (bar &optional force package)
-  (let ((dir (message-xmas-find-glyph-directory package))
-       icon up down disabled name)
-    (unless package
-      (setq message-xmas-glyph-directory dir))
-    (when dir
-      (if (and (not force)
-              (boundp (aref (car bar) 0)))
-         dir
-       (while bar
-         (setq icon (aref (car bar) 0)
-               name (symbol-name icon)
-               bar (cdr bar))
-         (setq up (concat dir name "-up.xpm"))
-         (setq down (concat dir name "-down.xpm"))
-         (setq disabled (concat dir name "-disabled.xpm"))
-         (if (not (file-exists-p up))
-             (set icon nil)
-           (set icon (toolbar-make-button-list
-                      up (and (file-exists-p down) down)
-                      (and (file-exists-p disabled) disabled)))))
-       dir))))
-
-(defun message-setup-toolbar ()
-  (and message-use-toolbar
-       (message-xmas-setup-toolbar message-toolbar)
-       (set-specifier (symbol-value message-use-toolbar)
-                     (cons (current-buffer) message-toolbar))))
-
-(provide 'message-xmas)
-
-;;; message-xmas.el ends here
index 82bcee4..2a4136c 100644 (file)
@@ -466,7 +466,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   "Alist used for formatting headers.")
 
 (eval-and-compile
-  (autoload 'message-setup-toolbar "message-xms")
+  (autoload 'message-setup-toolbar "messagexmas")
   (autoload 'mh-send-letter "mh-comp"))
 
 \f
@@ -2475,7 +2475,7 @@ responses here are directed to other newsgroups."))
                distribution (message-fetch-field "distribution")))
        ;; Make sure that this article was written by the user.
        (unless (string-equal
-                (downcase (mail-strip-quoted-names from))
+                (downcase (cadr (mail-extract-address-components from)))
                 (downcase (message-make-address)))
          (error "This article is not yours"))
        ;; Make control message.
@@ -2506,8 +2506,9 @@ header line with the old Message-ID."
   (let ((cur (current-buffer)))
     ;; Check whether the user owns the article that is to be superseded. 
     (unless (string-equal
-            (downcase (mail-strip-quoted-names (message-fetch-field "from")))
-            (downcase (mail-strip-quoted-names (message-make-address))))
+            (downcase (cadr (mail-extract-address-components
+                             (message-fetch-field "from"))))
+            (downcase (message-make-address)))
       (error "This article is not yours"))
     ;; Get a normal message buffer.
     (message-pop-to-buffer "*supersede message*")
@@ -2759,7 +2760,7 @@ which specify the range to operate on."
 
 ;; Support for toolbar
 (when (string-match "XEmacs\\|Lucid" emacs-version)
-  (require 'message-xms))
+  (require 'messagexmas))
 
 ;;; Group name completion.
 
similarity index 96%
rename from lisp/message-xms.el
rename to lisp/messagexmas.el
index 1f4a07b..416d05e 100644 (file)
@@ -1,4 +1,4 @@
-;;; message-xms.el --- XEmacs extensions to message
+;;; messagexmas.el --- XEmacs extensions to message
 ;; Copyright (C) 1996 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
@@ -89,6 +89,6 @@ If it is non-nil, it must be a toolbar.  The five legal values are
        (set-specifier (symbol-value message-use-toolbar)
                      (cons (current-buffer) message-toolbar))))
 
-(provide 'message-xms)
+(provide 'messagexmas)
 
-;;; message-xms.el ends here
+;;; messagexmas.el ends here
index 4928be4..5031c78 100644 (file)
@@ -100,35 +100,36 @@ it.")
     (let ((delim-string (concat "^" message-unix-mail-delimiter))
          article art-string start stop)
       (nnfolder-possibly-change-group group server)
-      (set-buffer nnfolder-current-buffer)
-      (goto-char (point-min))
-      (if (stringp (car articles))
-         'headers
-       (while articles
-         (setq article (car articles))
-         (setq art-string (nnfolder-article-string article))
-         (set-buffer nnfolder-current-buffer)
-         (if (or (search-forward art-string nil t)
-                 ;; Don't search the whole file twice!  Also, articles
-                 ;; probably have some locality by number, so searching
-                 ;; backwards will be faster.  Especially if we're at the
-                 ;; beginning of the buffer :-). -SLB
-                 (search-backward art-string nil t))
-             (progn
-               (setq start (or (re-search-backward delim-string nil t)
-                               (point)))
-               (search-forward "\n\n" nil t)
-               (setq stop (1- (point)))
-               (set-buffer nntp-server-buffer)
-               (insert (format "221 %d Article retrieved.\n" article))
-               (insert-buffer-substring nnfolder-current-buffer start stop)
-               (goto-char (point-max))
-               (insert ".\n")))
-         (setq articles (cdr articles)))
-
-       (set-buffer nntp-server-buffer)
-       (nnheader-fold-continuation-lines)
-       'headers))))
+      (when nnfolder-current-buffer
+       (set-buffer nnfolder-current-buffer)
+       (goto-char (point-min))
+       (if (stringp (car articles))
+           'headers
+         (while articles
+           (setq article (car articles))
+           (setq art-string (nnfolder-article-string article))
+           (set-buffer nnfolder-current-buffer)
+           (if (or (search-forward art-string nil t)
+                   ;; Don't search the whole file twice!  Also, articles
+                   ;; probably have some locality by number, so searching
+                   ;; backwards will be faster.  Especially if we're at the
+                   ;; beginning of the buffer :-). -SLB
+                   (search-backward art-string nil t))
+               (progn
+                 (setq start (or (re-search-backward delim-string nil t)
+                                 (point)))
+                 (search-forward "\n\n" nil t)
+                 (setq stop (1- (point)))
+                 (set-buffer nntp-server-buffer)
+                 (insert (format "221 %d Article retrieved.\n" article))
+                 (insert-buffer-substring nnfolder-current-buffer start stop)
+                 (goto-char (point-max))
+                 (insert ".\n")))
+           (setq articles (cdr articles)))
+
+         (set-buffer nntp-server-buffer)
+         (nnheader-fold-continuation-lines)
+         'headers)))))
 
 (deffoo nnfolder-open-server (server &optional defs)
   (nnoo-change-server 'nnfolder server defs)
@@ -207,6 +208,8 @@ it.")
          (cond 
           ((null active)
            (nnheader-report 'nnfolder "No such group: %s" group))
+          ((null nnfolder-current-group)
+           (nnheader-report 'nnfolder "Empty group: %s" group))
           (t
            (nnheader-report 'nnfolder "Selected group %s" group)
            (nnheader-insert "211 %d %d %d %s\n" 
index 197b2d0..9f5e48a 100644 (file)
@@ -544,7 +544,7 @@ without formatting."
   "Concat DIR as directory to FILE."
   (concat (file-name-as-directory dir) file))
 
-(require 'nnheader-es)
+(require 'nnheaderems)
 
 (run-hooks 'nnheader-load-hook)
 
similarity index 98%
rename from lisp/nnheader-es.el
rename to lisp/nnheaderems.el
index fb02e0f..a1cab6f 100644 (file)
@@ -1,4 +1,4 @@
-;;; nnheader-es.el --- making Gnus backends work under different Emacsen
+;;; nnheaderems.el --- making Gnus backends work under different Emacsen
 ;; Copyright (C) 1996 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
@@ -187,6 +187,6 @@ The buffer is not selected, just returned to the caller."
          'insert-file-contents-literally)
     )))
 
-(provide 'nnheader-es)
+(provide 'nnheaderems)
 
-;;; nnheader-es.el ends here.
+;;; nnheaderems.el ends here.
index dbb56e0..bde6ed5 100644 (file)
@@ -57,7 +57,7 @@ If you are using Cnews, you probably should set this variable to nil.")
 (defvoo nnspool-newsgroups-file (concat nnspool-lib-dir "newsgroups")
   "Local news newsgroups file.")
 
-(defvoo nnspool-distributions-file (concat nnspool-lib-dir "distributions")
+(defvoo nnspool-distributions-file (concat nnspool-lib-dir "distribs.pat")
   "Local news distributions file.")
 
 (defvoo nnspool-history-file (concat nnspool-lib-dir "history")
index 3faffb6..f0aca96 100644 (file)
@@ -1,3 +1,8 @@
+Fri May 31 08:58:16 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Summary Mail and Post Commands): Removed.
+       (Archived Messages): Addition.
+
 Fri May 31 03:07:47 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
 
        * message.texi (Message Headers): Typo.
index c2edc03..7cedfd9 100644 (file)
@@ -2981,7 +2981,6 @@ Perform an isearch in the article buffer
 @menu
 * Summary Mail Commands::            Sending mail.
 * Summary Post Commands::            Sending news.
-* Summary Mail and Post Commands::   Sending both news and mail.
 @end menu
 
 
@@ -3124,29 +3123,6 @@ Uuencode a file, split it into parts, and post it as a series
 @end table
 
 
-@node Summary Mail and Post Commands
-@subsection Summary Mail and Post Commands
-@cindex mail and post
-@cindex post and mail
-
-Commands for sending mail and post at the same time:
-
-@table @kbd
-@item S b
-@kindex S b (Summary)
-@findex gnus-summary-followup-and-reply
-Post a followup and send a reply to the current article
-(@code{gnus-summary-followup-and-reply}).
-
-@item S B
-@kindex S B (Summary)
-@findex gnus-summary-followup-and-reply-with-original
-Post a followup and send a reply to the current article and include the
-original message (@code{gnus-summary-followup-and-reply-with-original}).
-This command uses the process/prefix convention.
-@end table
-
-
 @node Canceling and Superseding
 @section Canceling Articles
 @cindex canceling articles
@@ -6631,6 +6607,10 @@ other variables for the people who don't like the default method.  In
 that case you should set @code{gnus-message-archive-group} to
 @code{nil}; this will disable archiving.
 
+XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
+use a different value for @code{gnus-message-archive-group} there.
+
+
 @table @code
 @item gnus-author-copy
 @vindex gnus-author-copy