*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 19:03:44 +0000 (19:03 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 19:03:44 +0000 (19:03 +0000)
18 files changed:
lisp/ChangeLog
lisp/gnus-cus.el
lisp/gnus-ems.el
lisp/gnus-msg.el
lisp/gnus-score.el
lisp/gnus-topic.el
lisp/gnus-uu.el
lisp/gnus-vis.el
lisp/gnus.el
lisp/message.el
lisp/nndb.el
lisp/nnheader.el
lisp/nnmail.el
lisp/nntp.el
lisp/nnvirtual.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index f340871..49b36db 100644 (file)
@@ -1,5 +1,79 @@
+Tue Jun  4 11:11:13 1996  Lars Magne Ingebrigtsen  <larsi@eistla.ifi.uio.no>
+
+       * gnus.el (gnus-summary-make-local-variables): Set local variables
+       correctly.
+
+Tue Jun  4 07:51:02 1996  Steven L. Baur  <steve@miranova.com>
+
+       * gnus-cus.el (()): New "light' group highlighting.
+
+Tue Jun  4 07:26:10 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-subscribe-hierarchical-interactive): Don't accept
+       wrong characters.
+
+       * message.el (message-directory): Autoload.
+
+Mon Jun  3 07:30:18 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-make-local-variables): Separated into own
+       function. 
+       (gnus-summary-make-local-variables): Respect global values.
+
+       * nnheader.el (sendmail): Unrequired.
+       (backquote): Ditto.
+
+       * nntp.el (rnews): Unrequired.
+
+       * gnus-msg.el (gnus-group-post-news): `C-u a' posts to the group
+       under point, `C-u 1 a' prompts, `a' uses an empty group name.
+
+       * message.el (message-setup): Make separator read-only.
+
+       * gnus-cus.el (()): Define `gnus-group-highlight'.
+
+       * gnus-vis.el (gnus-group-highlight): Commented out.
+
+       * gnus-topic.el (gnus-topic-yank-group): Yank topics at the end of
+       the buffer correctly.
+
+       * gnus-score.el (gnus-score-adaptive): Make sure we use the
+       buffer-local adaptive score variable.
+
+       * gnus-msg.el (gnus-group-post-news): Prompt when given a prefix.
+
+       * nnvirtual.el (nnvirtual-catchup-group): Might have corrupted the
+       list of component groups.
+
+       * gnus-ems.el: Work under OS/2 again.
+
+       * gnus.el (gnus-remove-header): New function.
+       (gnus-read-header): Use it.
+       (gnus-summary-insert-subject): Didn't work when editing articles
+       in a non-threaded display.
+       (gnus-summary-update-article): Would create multiple root
+       threads when editing.
+
+       * message.el (message-do-send-housekeeping): Reverse check. 
+
+       * nnheader.el (backquote): Required.
+
+       * gnus.el (backquote): Required.
+
+       * message.el (message-make-from): Use the `user-full-name'
+       variable. 
+
+Sun Jun  2 16:50:49 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.el (message-number-of-buffers): New variable.
+       (message-generate-new-buffers): Changed default.
+       (message-do-send-housekeeping): New function.
+       (message-buffer-name): New function.
+
 Sun Jun  2 07:41:20 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
 
+       * gnus.el: Gnus v5.2.5 is released.
+
        * gnus-topic.el (gnus-topic-remove-group): Only delete first
        instance. 
        (gnus-topic-move-group): Ditto.
index 3169fb0..4fea88d 100644 (file)
@@ -31,7 +31,7 @@
 (require 'browse-url)
 (eval-when-compile (require 'cl))
 
-;; The following is just helper functions and data, not ment to be set
+;; The following is just helper functions and data, not meant to be set
 ;; by the user.
 (defun gnus-make-face (color)
   ;; Create entry for face with COLOR.
     "turquoise"))
 
 (defvar gnus-face-dark-name-list
-  '("RoyalBlue" "firebrick"
-    "dark green" "OrangeRed" "dark khaki" "dark violet"
-    "SteelBlue4"))
+  '("RoyalBlue" "firebrick" "dark green" "OrangeRed" 
+    "dark khaki" "dark violet" "SteelBlue4"))
 ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3
 ; DarkOlviveGreen4 
 
 (custom-declare '()
-  '((tag . "GNUS")
+  '((tag . "Gnus")
     (doc . "\
 The coffee-brewing, all singing, all dancing, kitchen sink newsreader.")
     (type . group)
     (data
      ((tag . "Visual")
       (doc . "\
-GNUS can be made colorful and fun or grey and dull as you wish.")
+Gnus can be made colorful and fun or grey and dull as you wish.")
       (type . group)
       (data
        ((tag . "Visual")
        (doc . "Enable visual features.
 If `visual' is disabled, there will be no menus and few faces.  Most of
-the visual customization options below will be ignored.  GNUS will use
+the visual customization options below will be ignored.  Gnus will use
 less space and be faster as a result.")
        (default . 
          (summary-highlight group-highlight
@@ -563,6 +562,77 @@ mark:    The article's mark.")
                      ((type . face)
                       (tag . "Face"))
                      "\n")))))
+
+       ((tag . "Group Line Highlighting")
+       (doc . "\
+Controls the highlighting of group buffer lines. 
+
+Below is a list of `Form'/`Face' pairs.  When deciding how a a
+particular group line should be displayed, each form is
+evaluated. The content of the face field after the first true form is
+used.  You can change how those group lines are displayed by
+editing the face field.  
+
+It is also possible to change and add form fields, but currently that
+requires an understanding of Lisp expressions.  Hopefully this will
+change in a future release.  For now, you can use the following
+variables in the Lisp expression:
+
+group: The name of the group.
+unread: The number of unread articles in the group.
+method: The select method used.
+mailp: Whether it's a mail group or not.
+level: The level of the group.
+score: The score of the group.
+ticked: The number of ticked articles.")
+       (name . gnus-group-highlight)
+       (type . list)
+       (calculate 
+        . (cond 
+           ((not (eq gnus-display-type 'color))
+            '((mailp . bold)
+              ((= unread 0) . italic)))
+           ((eq gnus-background-mode 'dark)
+            `(((> unread 200) .
+               ,(custom-face-lookup "Red" nil nil t nil nil))
+              ((and (< level 3) (zerop unread)) . 
+               ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
+              ((< level 3) .
+               ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
+              ((zerop unread) . 
+               ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
+              (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))))
+           (t
+            `(((and (not mailp) (<= level 3)) .
+               ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
+              ((and (not mailp) (eq level 4)) .
+               ,(custom-face-lookup "DarkGreen" nil nil t nil nil))
+              ((and (not mailp) (eq level 5)) .
+               ,(custom-face-lookup "Red" nil nil t nil nil))
+              ((and mailp (eq level 1)) .
+               ,(custom-face-lookup "DeepPink3" nil nil t nil nil))
+              ((and mailp (eq level 2)) .
+               ,(custom-face-lookup "HotPink3" nil nil t nil nil))
+              ((and mailp (eq level 3)) .
+               ,(custom-face-lookup "dark magenta" nil nil t nil nil))
+              ((and mailp (eq level 4)) .
+               ,(custom-face-lookup "DeepPink4" nil nil t nil nil))
+              ((and mailp (> level 4)) .
+               ,(custom-face-lookup "DarkOrchid4" nil nil t nil nil))
+              ))))
+       (data
+        ((type . repeat)
+         (header . nil)
+         (data (type . pair)
+               (compact . t)
+               (data ((type . sexp)
+                      (width . 60)
+                      (tag . "Form"))
+                     "\n            "
+                     ((type . face)
+                      (tag . "Face"))
+                     "\n")))))
+
        ;; Do not define `gnus-button-alist' before we have
        ;; some `complexity' attribute so we can hide it from
        ;; beginners. 
@@ -576,16 +646,6 @@ mark:    The article's mark.")
         (setq alist (mapcar 'gnus-make-face gnus-face-dark-name-list))))
   (funcall (custom-super custom 'import) custom alist))
 
-;(defun gnus-custom-import-swap-alist (custom alist)
-;  ;; Swap key and value in CUSTOM ALIST.
-;  (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist)))
-;    (funcall (custom-super custom 'import) custom swap)))
-
-;(defun gnus-custom-export-swap-alist (custom alist)
-;  ;; Swap key and value in CUSTOM ALIST.
-;  (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist)))
-;    (funcall (custom-super custom 'export) custom swap)))
-
 (provide 'gnus-cus)
 
 ;;; gnus-cus.el ends here
index d3ef619..8613af3 100644 (file)
@@ -171,7 +171,7 @@ pounce directly on the real variables themselves."))
 (eval-and-compile
   (let ((case-fold-search t))
     (cond
-     ((string-match "windows-nt\\|os/2" (format "%s" system-type))
+     ((string-match "windows-nt\\|os/2\\|emx" (format "%s" system-type))
       (setq nnheader-file-name-translation-alist
            (append nnheader-file-name-translation-alist
                    '((?: . ?_)
index 7c17873..5260487 100644 (file)
@@ -27,7 +27,6 @@
 ;;; Code:
 
 (require 'gnus)
-(require 'sendmail)
 (require 'gnus-ems)
 (require 'message)
 (eval-when-compile (require 'cl))
@@ -164,14 +163,21 @@ the group.")
   (gnus-setup-message 'message
     (message-mail)))
 
-(defun gnus-group-post-news ()
+(defun gnus-group-post-news (&optional arg)
   "Start composing a news message.
-The newsgroup under the cursor is used as the group to post to."
-  (interactive)
+If ARG, post to the group under point.
+If ARG is 1, prompt for a group name."
+  (interactive "P")
   ;; Bind this variable here to make message mode hooks
   ;; work ok.
-  (let ((gnus-newsgroup-name (gnus-group-group-name)))
-    (gnus-post-news 'post (gnus-group-group-name))))
+  (let ((gnus-newsgroup-name
+        (if arg
+            (if (= 1 (prefix-numeric-value arg))
+                (completing-read "Newsgroup: " gnus-active-hashtb nil
+                                 (gnus-read-active-file-p))
+              (gnus-group-group-name))
+          "")))
+    (gnus-post-news 'post gnus-newsgroup-name)))
 
 (defun gnus-summary-post-news ()
   "Start composing a news message."
index 565b5dd..216bea3 100644 (file)
@@ -1807,10 +1807,12 @@ SCORE is the score to add."
          (setq elem (cdr elem)))
        (setq malist (cdr malist)))
       ;; We change the score file to the adaptive score file.
-      (gnus-score-load-file 
-       (or gnus-newsgroup-adaptive-score-file
-          (gnus-score-file-name 
-           gnus-newsgroup-name gnus-adaptive-file-suffix)))
+      (save-excursion
+       (set-buffer gnus-summary-buffer)
+       (gnus-score-load-file 
+        (or gnus-newsgroup-adaptive-score-file
+            (gnus-score-file-name 
+             gnus-newsgroup-name gnus-adaptive-file-suffix))))
       ;; The we score away.
       (while data
        (setq elem (cdr (assq (gnus-data-mark (car data)) alist)))
index 2e3e4ae..774b149 100644 (file)
@@ -881,7 +881,9 @@ If COPYP, copy the groups instead."
   "Yank the last topic."
   (interactive "p")
   (if gnus-topic-killed-topics
-      (let ((previous (gnus-group-parent-topic))
+      (let ((previous 
+            (or (gnus-group-topic-name)
+                (gnus-topic-next-topic (gnus-group-parent-topic))))
            (item (cdr (pop gnus-topic-killed-topics))))
        (gnus-topic-create-topic
         (caar item) (gnus-topic-parent-topic previous) previous
index ab570ac..f93a869 100644 (file)
@@ -1124,8 +1124,8 @@ The headers will be included in the sequence they are matched.")
 ;; 
 ;; This function returns a list of files decoded if the grabbing and
 ;; the process-function has been successful and nil otherwise.
-(defun gnus-uu-grab-articles 
-  (articles process-function &optional sloppy limit no-errors)
+(defun gnus-uu-grab-articles (articles process-function 
+                                      &optional sloppy limit no-errors)
   (let ((state 'first) 
        has-been-begin article result-file result-files process-state
        gnus-summary-display-article-function
@@ -1641,9 +1641,6 @@ The headers will be included in the sequence they are matched.")
 ;;; uuencoded posting
 ;;;
 
-(require 'sendmail)
-(require 'rnews)
-
 ;; Any function that is to be used as and encoding method will take two
 ;; parameters: PATH-NAME and FILE-NAME. (E.g. "/home/gaga/spiral.jpg"
 ;; and "spiral.jpg", respectively.) The function should return nil if
index f45febe..41984d6 100644 (file)
@@ -261,24 +261,8 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
 
 ;;; Group mode highlighting.
 
-(defvar gnus-group-highlight
-  (cond 
-   ((not (eq gnus-display-type 'color))
-    '((mailp . bold)
-      ((= unread 0) . italic)))
-   ((eq gnus-background-mode 'dark)
-    `(((> unread 200) . ,(custom-face-lookup "Red" nil nil t nil nil))
-      ((and (< level 3) (zerop unread)) . 
-       ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
-      ((< level 3) . ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
-      ((zerop unread) . ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
-      (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))
-      ))
-   (t
-    `(((not mailp) .
-       ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
-      ((zerop unread) .
-       ,(custom-face-lookup "Blue" nil nil t nil nil)))))
+;see gnus-cus.el
+(defvar gnus-group-highlight nil
   "Group lines are highlighted with the FACE for the first FORM which
 evaluate to a non-nil value.  
 
index 895f613..ba6db13 100644 (file)
 (require 'nnheader)
 (require 'message)
 (require 'nnmail)
+(require 'backquote)
 
 (eval-when-compile (require 'cl))
 
+;;;###autoload
 (defvar gnus-directory (or (getenv "SAVEDIR") "~/News/")
   "*Directory variable from which all other Gnus file variables are derived.")
 
@@ -1726,7 +1728,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.5"
+(defconst gnus-version-number "5.2.6"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -1736,7 +1738,7 @@ variable (string, integer, character, etc).")
   '((gnus-group-mode "(gnus)The Group Buffer")
     (gnus-summary-mode "(gnus)The Summary Buffer")
     (gnus-article-mode "(gnus)The Article Buffer"))
-  "Assoc list of major modes and related Info nodes.")
+  "Alist of major modes and related Info nodes.")
 
 (defvar gnus-group-buffer "*Group*")
 (defvar gnus-summary-buffer "*Summary*")
@@ -1937,7 +1939,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
     gnus-newsgroup-scored gnus-newsgroup-kill-headers
     gnus-newsgroup-async gnus-thread-expunge-below
     gnus-score-alist gnus-current-score-file gnus-summary-expunge-below
-    (gnus-summary-mark-below . 0)
+    (gnus-summary-mark-below . global)
     gnus-newsgroup-active gnus-scores-exclude-files
     gnus-newsgroup-history gnus-newsgroup-ancient
     gnus-newsgroup-sparse
@@ -1998,10 +2000,7 @@ Thank you for your help in stamping out bugs.
      ("nnvirtual" nnvirtual-catchup-group)
      ("timezone" timezone-make-date-arpa-standard timezone-fix-time
       timezone-make-sortable-date timezone-make-time-string)
-     ("sendmail" mail-position-on-field mail-setup)
      ("rmailout" rmail-output)
-     ("rnewspost" news-mail-other-window news-reply-yank-original
-      news-caesar-buffer-body)
      ("rmail" rmail-insert-rmail-file-header rmail-count-new-messages
       rmail-show-message)
      ("gnus-soup" :interactive t
@@ -2914,7 +2913,10 @@ If variable `gnus-use-long-file-name' is non-nil, it is
              (setq prefixes (cons prefix prefixes))
              (message "Descend hierarchy %s? ([y]nsq): "
                       (substring prefix 1 (1- (length prefix))))
-             (setq ans (read-char))
+             (while (not (memq (setq ans (read-char)) '(?y ?\n ?n ?s ?q)))
+               (ding)
+               (message "Descend hierarchy %s? ([y]nsq): "
+                        (substring prefix 1 (1- (length prefix)))))
              (cond ((= ans ?n)
                     (while (and groups
                                 (string-match prefix
@@ -2940,7 +2942,9 @@ If variable `gnus-use-long-file-name' is non-nil, it is
                       (setq groups (cdr groups))))
                    (t nil)))
          (message "Subscribe %s? ([n]yq)" (car groups))
-         (setq ans (read-char))
+         (while (not (memq (setq ans (read-char)) '(?y ?\n ?q ?n)))
+           (ding)
+           (message "Subscribe %s? ([n]yq)" (car groups)))
          (setq group (car groups))
          (cond ((= ans ?y)
                 (gnus-subscribe-alphabetically (car groups))
@@ -7147,15 +7151,7 @@ The following commands are available:
             (gnus-visual-p 'summary-menu 'menu))
     (gnus-summary-make-menu-bar))
   (kill-all-local-variables)
-  (let ((locals gnus-summary-local-variables))
-    (while locals
-      (if (consp (car locals))
-         (progn
-           (make-local-variable (caar locals))
-           (set (caar locals) (eval (cdar locals))))
-       (make-local-variable (car locals))
-       (set (car locals) nil))
-      (setq locals (cdr locals))))
+  (gnus-summary-make-local-variables)
   (gnus-make-thread-indent-array)
   (gnus-simplify-mode-line)
   (setq major-mode 'gnus-summary-mode)
@@ -7174,6 +7170,24 @@ The following commands are available:
   (make-local-variable 'gnus-summary-mark-positions)
   (run-hooks 'gnus-summary-mode-hook))
 
+(defun gnus-summary-make-local-variables ()
+  "Make all the local summary buffer variables."
+  (let ((locals gnus-summary-local-variables)
+       global local)
+    (while (setq local (pop locals))
+      (if (consp local)
+         (progn
+           (if (eq (cdr local) 'global)
+               ;; Copy the global value of the variable.
+               (setq global (symbol-value (car local)))
+             ;; Use the value from the list.
+             (setq global (eval (cdr local))))
+           (make-local-variable (car local))
+           (set (car local) global))
+       ;; Simple nil-valued local variable.
+       (make-local-variable local)
+       (set local nil)))))
+
 (defun gnus-summary-make-display-table ()
   ;; Change the display table. Odd characters have a tendency to mess
   ;; up nicely formatted displays - we make all possible glyphs
@@ -8073,10 +8087,14 @@ If NO-DISPLAY, don't generate a summary buffer."
         (id (mail-header-id header))
         (data (gnus-data-find article))
         (thread (gnus-id-to-thread id))
+        (references (mail-header-references header))
         (parent
-         (gnus-id-to-thread (or (gnus-parent-id 
-                                 (mail-header-references header))
-                                "tull")))
+         (gnus-id-to-thread
+          (or (gnus-parent-id 
+               (if (and references
+                        (not (equal "" references)))
+                   references))
+              "none")))
         (buffer-read-only nil)
         (old (car thread))
         (number (mail-header-number header))
@@ -8772,12 +8790,12 @@ If READ-ALL is non-nil, all articles in the group are selected."
       (unless gnus-single-article-buffer
        (gnus-article-setup-buffer))
       ;; First and last article in this newsgroup.
-      (and gnus-newsgroup-headers
-          (setq gnus-newsgroup-begin
-                (mail-header-number (car gnus-newsgroup-headers)))
-          (setq gnus-newsgroup-end
-                (mail-header-number
-                 (gnus-last-element gnus-newsgroup-headers))))
+      (when gnus-newsgroup-headers
+       (setq gnus-newsgroup-begin
+             (mail-header-number (car gnus-newsgroup-headers))
+             gnus-newsgroup-end
+             (mail-header-number
+              (gnus-last-element gnus-newsgroup-headers))))
       (setq gnus-reffed-article-number -1)
       ;; GROUP is successfully selected.
       (or gnus-newsgroup-headers t)))))
@@ -9411,13 +9429,12 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
                (setq header nil))
            (setcar (symbol-value id-dep) header))
        (set id-dep (list header))))
-    (if header
-       (progn
-         (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
-             (setcdr (symbol-value ref-dep)
-                     (nconc (cdr (symbol-value ref-dep))
-                            (list (symbol-value id-dep))))
-           (set ref-dep (list nil (symbol-value id-dep))))))
+    (when header
+      (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
+         (setcdr (symbol-value ref-dep)
+                 (nconc (cdr (symbol-value ref-dep))
+                        (list (symbol-value id-dep))))
+       (set ref-dep (list nil (symbol-value id-dep)))))
     header))
 
 (defun gnus-article-get-xrefs ()
@@ -9452,7 +9469,8 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
     (when header
       ;; Rebuild the thread that this article is part of and go to the
       ;; article we have fetched.
-      (when (and nil old-header)
+      (when (and (not gnus-show-threads)
+                old-header)
        (when (setq pos (text-property-any
                         (point-min) (point-max) 'gnus-number 
                         (mail-header-number old-header)))
@@ -13680,11 +13698,24 @@ The following commands are available:
                ;; numbers for this article.
                (mail-header-set-number header gnus-reffed-article-number))
            (decf gnus-reffed-article-number)
+           (gnus-remove-header (mail-header-number header))
            (push header gnus-newsgroup-headers)
            (setq gnus-current-headers header)
            (push (mail-header-number header) gnus-newsgroup-limit))
          header)))))
 
+(defun gnus-remove-header (number)
+  "Remove header NUMBER from `gnus-newsgroup-headers'."
+  (if (and gnus-newsgroup-headers
+          (= number (mail-header-number (car gnus-newsgroup-headers))))
+      (pop gnus-newsgroup-headers)
+    (let ((headers gnus-newsgroup-headers))
+      (while (and (cdr headers)
+                 (not (= number (mail-header-number (cadr headers)))))
+       (pop headers))
+      (when (cdr headers)
+       (setcdr headers (cddr headers))))))
+
 (defun gnus-article-prepare (article &optional all-headers header)
   "Prepare ARTICLE in article mode buffer.
 ARTICLE should either be an article number or a Message-ID.
@@ -13978,17 +14009,18 @@ always hide."
       (while (search-forward "\b" nil t)
        (let ((next (following-char))
              (previous (char-after (- (point) 2))))
-         (cond ((eq next previous)
-                (gnus-put-text-property (- (point) 2) (point) 'invisible t)
-                (gnus-put-text-property (point) (1+ (point)) 'face 'bold))
-               ((eq next ?_)
-                (gnus-put-text-property (1- (point)) (1+ (point)) 'invisible t)
-                (gnus-put-text-property
-                 (- (point) 2) (1- (point)) 'face 'underline))
-               ((eq previous ?_)
-                (gnus-put-text-property (- (point) 2) (point) 'invisible t)
-                (gnus-put-text-property
-                 (point) (1+ (point))  'face 'underline))))))))
+         (cond 
+          ((eq next previous)
+           (gnus-put-text-property (- (point) 2) (point) 'invisible t)
+           (gnus-put-text-property (point) (1+ (point)) 'face 'bold))
+          ((eq next ?_)
+           (gnus-put-text-property (1- (point)) (1+ (point)) 'invisible t)
+           (gnus-put-text-property
+            (- (point) 2) (1- (point)) 'face 'underline))
+          ((eq previous ?_)
+           (gnus-put-text-property (- (point) 2) (point) 'invisible t)
+           (gnus-put-text-property
+            (point) (1+ (point))       'face 'underline))))))))
 
 (defun gnus-article-word-wrap ()
   "Format too long lines."
@@ -14416,7 +14448,7 @@ function and want to see what the date was before converting."
   (if (gnus-visual-p 'article-highlight 'highlight)
       (gnus-article-highlight-some)))
 
-;; Article savers.
+;;; Article savers.
 
 (defun gnus-output-to-rmail (file-name)
   "Append the current article to an Rmail file named FILE-NAME."
index 2a4136c..03d9c12 100644 (file)
     (require 'mail-abbrevs)
   (require 'mailabbrev))
 
+;;;###autoload
 (defvar message-directory "~/Mail/"
   "*Directory from which all other mail file variables are derived.")
 
+(defvar message-max-buffers 10
+  "*How many buffers to keep before starting to kill them off.")
+
 ;;;###autoload
 (defvar message-fcc-handler-function 'rmail-output
   "*A function called to save outgoing articles.
@@ -134,7 +138,7 @@ any confusion.")
 nil means let mailer mail back a message to report errors.")
 
 ;;;###autoload
-(defvar message-generate-new-buffers nil
+(defvar message-generate-new-buffers t
   "*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.")
 
 ;;;###autoload
@@ -397,6 +401,8 @@ The cdr of ech entry is a function for applying the face to a region.")
 
 ;;; Internal variables.
 
+(defvar message-buffer-list nil)
+
 ;;; Regexp matching the delimiter of messages in UNIX mail format
 ;;; (UNIX From lines), minus the initial ^.  
 (defvar message-unix-mail-delimiter
@@ -1224,6 +1230,8 @@ the user from the mailer."
       (unless buffer-file-name
        (set-buffer-modified-p nil)
        (delete-auto-save-file-if-necessary t))
+      ;; Delete other mail buffers and stuff.
+      (message-do-send-housekeeping)
       (message-do-actions message-send-actions)
       ;; Return success.
       t)))
@@ -1879,7 +1887,10 @@ the user from the mailer."
 (defun message-make-from ()
   "Make a From header."
   (let* ((login (message-make-address))
-        (fullname (user-full-name)))
+        (fullname 
+         (or (and (boundp 'user-full-name)
+                  user-full-name)
+             (user-full-name))))
     (when (string= fullname "&")
       (setq fullname (user-login-name)))
     (save-excursion
@@ -2154,23 +2165,56 @@ Headers already prepared in the buffer are not modified."
       (forward-line 2)))
    (sit-for 0)))
 
+(defun message-buffer-name (type &optional to group)
+  "Return a new (unique) buffer name based on TYPE and TO."
+  (if message-generate-new-buffers
+      (generate-new-buffer-name
+       (concat "*" type
+              (if (or to group)
+                  (concat " to "
+                          (or (car (mail-extract-address-components to))
+                              to)
+                          (if group (concat " on " group) ""))
+                "")
+              "*"))
+    (format "*%s message*" type)))
+
 (defun message-pop-to-buffer (name)
   "Pop to buffer NAME, and warn if it already exists and is modified."
-  (if message-generate-new-buffers
-      (set-buffer (pop-to-buffer (generate-new-buffer name)))
-    (let ((buffer (get-buffer name)))
-      (if (and buffer
-              (buffer-name buffer))
-         (progn
-           (set-buffer (pop-to-buffer buffer))
-           (when (and (buffer-modified-p)
-                      (not (y-or-n-p
-                            "Message already being composed; erase? ")))
-             (error "Message being composed")))
-       (set-buffer (pop-to-buffer name)))))
+  (let ((buffer (get-buffer name)))
+    (if (and buffer
+            (buffer-name buffer))
+       (progn
+         (set-buffer (pop-to-buffer buffer))
+         (when (and (buffer-modified-p)
+                    (not (y-or-n-p
+                          "Message already being composed; erase? ")))
+           (error "Message being composed")))
+      (set-buffer (pop-to-buffer name))))
   (erase-buffer)
   (message-mode))
 
+(defun message-do-send-housekeeping ()
+  "Kill old message buffers."
+  ;; We might have sent this buffer already.  Delete it from the
+  ;; list of buffers.
+  (setq message-buffer-list (delq (current-buffer) message-buffer-list))
+  (when (and message-max-buffers
+            (>= (length message-buffer-list) message-max-buffers))
+    ;; Kill the oldest buffer -- unless it has been changed.
+    (let ((buffer (pop message-buffer-list)))
+      (when (and (buffer-name buffer)
+                (not (buffer-modified-p buffer)))
+       (kill-buffer buffer))))
+  ;; Rename the buffer.
+  (when (string-match "\\`\\*" (buffer-name))
+    (rename-buffer 
+     (concat "*sent " (substring (buffer-name) (match-end 0))) t))
+  ;; Push the current buffer onto the list.
+  (when message-max-buffers
+    (setq message-buffer-list 
+         (nconc message-buffer-list (list (current-buffer))))))
+
 (defun message-setup (headers &optional replybuffer actions)
   (when actions
     (setq message-send-actions actions))
@@ -2189,7 +2233,12 @@ Headers already prepared in the buffer are not modified."
   (forward-line -1)
   (when message-default-headers
     (insert message-default-headers))
-  (insert mail-header-separator "\n")
+  (put-text-property
+   (point)
+   (progn
+     (insert mail-header-separator "\n")
+     (point))
+   'read-only nil)
   (forward-line -1)
   (when (message-news-p)
     (when message-default-news-headers
@@ -2245,14 +2294,14 @@ Headers already prepared in the buffer are not modified."
 (defun message-mail (&optional to subject)
   "Start editing a mail message to be sent."
   (interactive)
-  (message-pop-to-buffer "*mail message*")
+  (message-pop-to-buffer (message-buffer-name "mail" to))
   (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
 
 ;;;###autoload
 (defun message-news (&optional newsgroups subject)
   "Start editing a news article to be sent."
   (interactive)
-  (message-pop-to-buffer "*news message*")
+  (message-pop-to-buffer (message-buffer-name "news" nil newsgroups))
   (message-setup `((Newsgroups . ,(or newsgroups "")) 
                   (Subject . ,(or subject "")))))
 
@@ -2340,7 +2389,7 @@ Headers already prepared in the buffer are not modified."
                    follow-to)))))
       (widen))
 
-    (message-pop-to-buffer "*mail message*")
+    (message-pop-to-buffer (message-buffer-name "reply" from))
 
     (setq message-reply-headers
          (vector 0 subject from date message-id references 0 0 ""))
@@ -2399,7 +2448,7 @@ Headers already prepared in the buffer are not modified."
       (setq subject (concat "Re: " subject))
       (widen))
 
-    (message-pop-to-buffer "*news message*")
+    (message-pop-to-buffer (message-buffer-name "followup" from newsgroups))
 
     (message-setup
      `((Subject . ,subject)
@@ -2511,7 +2560,7 @@ header line with the old Message-ID."
             (downcase (message-make-address)))
       (error "This article is not yours"))
     ;; Get a normal message buffer.
-    (message-pop-to-buffer "*supersede message*")
+    (message-pop-to-buffer (message-buffer-name "supersede"))
     (insert-buffer-substring cur)
     (message-narrow-to-head)
     ;; Remove unwanted headers.
@@ -2637,7 +2686,7 @@ you."
   (interactive)
   (let ((cur (current-buffer))
        boundary)
-    (message-pop-to-buffer "*mail message*")
+    (message-pop-to-buffer (message-buffer-name "bounce"))
     (insert-buffer-substring cur)
     (undo-boundary)
     (message-narrow-to-head)
@@ -2683,7 +2732,7 @@ you."
        (special-display-regexps nil)
        (same-window-buffer-names nil)
        (same-window-regexps nil))
-    (message-pop-to-buffer "*mail message*"))
+    (message-pop-to-buffer (message-buffer-name "mail" to)))
   (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
 
 ;;;###autoload
@@ -2695,7 +2744,7 @@ you."
        (special-display-regexps nil)
        (same-window-buffer-names nil)
        (same-window-regexps nil))
-    (message-pop-to-buffer "*mail message*"))
+    (message-pop-to-buffer (message-buffer-name "mail" to)))
   (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
 
 ;;;###autoload
@@ -2707,7 +2756,7 @@ you."
        (special-display-regexps nil)
        (same-window-buffer-names nil)
        (same-window-regexps nil))
-    (message-pop-to-buffer "*news message*"))
+    (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
   (message-setup `((Newsgroups . ,(or newsgroups "")) 
                   (Subject . ,(or subject "")))))
 
@@ -2720,7 +2769,7 @@ you."
        (special-display-regexps nil)
        (same-window-buffer-names nil)
        (same-window-regexps nil))
-    (message-pop-to-buffer "*news message*"))
+    (message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
   (message-setup `((Newsgroups . ,(or newsgroups "")) 
                   (Subject . ,(or subject "")))))
 
index 763dbd1..f7644fa 100644 (file)
@@ -37,8 +37,6 @@
 
 ;;; Code:
 
-(require 'rnews)
-(require 'sendmail)
 (require 'nnheader)
 (require 'nntp)
 (eval-when-compile (require 'cl))
index 9f5e48a..8beef0f 100644 (file)
@@ -38,7 +38,6 @@
 ;;; Code:
 
 (require 'mail-utils)
-(require 'sendmail)
 (eval-when-compile (require 'cl))
 
 (defvar nnheader-max-head-length 4096
index 18778d4..f30f7a1 100644 (file)
@@ -27,7 +27,6 @@
 
 (require 'nnheader)
 (require 'timezone)
-(require 'sendmail)
 (require 'message)
 (eval-when-compile (require 'cl))
 
index 139382c..0185a20 100644 (file)
@@ -26,8 +26,6 @@
 
 ;;; Code:
 
-(require 'rnews)
-(require 'sendmail)
 (require 'nnheader)
 (require 'nnoo)
 (eval-when-compile (require 'cl))
@@ -41,8 +39,6 @@
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
-  (autoload 'news-setup "rnewspost")
-  (autoload 'news-reply-mode "rnewspost")
   (autoload 'cancel-timer "timer")
   (autoload 'telnet "telnet" nil t)
   (autoload 'telnet-send-input "telnet" nil t)
index 470e341..2d1dbb0 100644 (file)
@@ -289,7 +289,7 @@ virtual group.")
 
 (deffoo nnvirtual-catchup-group (group &optional server all)
   (nnvirtual-possibly-change-server server)
-  (let ((gnus-group-marked nnvirtual-component-groups)
+  (let ((gnus-group-marked (copy-sequence nnvirtual-component-groups))
        (gnus-expert-user t))
     ;; Make sure all groups are activated.
     (mapcar
index f0aca96..b08cf79 100644 (file)
@@ -1,3 +1,9 @@
+Mon Jun  3 07:37:34 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (History): Change.
+
+       * message.texi (Wide Reply): Addition.
+
 Fri May 31 08:58:16 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
        * gnus.texi (Summary Mail and Post Commands): Removed.
index 7cedfd9..2ffcecf 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus.info
-@settitle September Gnus Manual
+@settitle Gnus 5.2 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -230,7 +230,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title September Gnus Manual
+@title Gnus Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -11130,8 +11130,8 @@ renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
 The first ``proper'' release of Gnus 5 was done in November 1995 when it
 was included in the Emacs 19.30 distribution.
 
-Incidentally, the next Gnus generation will be called ``September
-Gnus'', and won't be released until April 1996.  Confused?  You will be.
+In May 1996 the next Gnus generation (aka.  ``September Gnus'') was
+released under the name ``Gnus 5.2''.  
 
 @menu
 * Why?::                What's the point of Gnus?
index 3829874..c32493f 100644 (file)
@@ -177,6 +177,10 @@ but you can change the behavior to suit your needs by fiddling with the
 @code{message-wide-reply-to-function}.  It is used in the same way as
 @code{message-reply-to-function} (@pxref{Reply}). 
 
+@findex rmail-dont-reply-to-names
+Addresses that matches the @code{rmail-dont-reply-to-names} regular
+expression will be removed from the @code{Cc} header.
+
 
 @node Followup
 @section Followup
@@ -892,6 +896,33 @@ message will be added.
 @end table
 
 
+@node Message Buffers
+@section Message Buffers
+
+Message will generate new buffers with unique buffer names when you
+request a message buffer.  When you send the message, the buffer isn't
+normally killed off.  It's name is changed and a certain number of old
+message buffers are kept alive.
+
+@table @code
+@item message-generate-new-buffers
+@findex message-generate-new-buffers
+If non-@code{nil}, generate new buffers.  The default is @code{t}.
+
+@item message-max-buffers
+@findex message-max-buffers
+This variable says how many old message buffers to keep.  If there are
+more message buffers than this, the oldest buffer will be killed.  The
+default is 10.  If this variable is @code{nil}, no old message buffers
+will ever be killed.
+
+@item message-kill-buffer-on-exit
+@findex message-kill-buffer-on-exit
+If non-@code{nil}, kill the buffer immediately on exit.
+
+@end table
+
+
 @node Message Actions
 @section Message Actions