Sync up with gnus-5.6.41
authorichikawa <ichikawa>
Thu, 27 Aug 1998 13:58:54 +0000 (13:58 +0000)
committerichikawa <ichikawa>
Thu, 27 Aug 1998 13:58:54 +0000 (13:58 +0000)
28 files changed:
lisp/ChangeLog
lisp/Makefile.in
lisp/dgnushack.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cache.el
lisp/gnus-cus.el
lisp/gnus-ems.el
lisp/gnus-group.el
lisp/gnus-kill.el
lisp/gnus-msg.el
lisp/gnus-salt.el
lisp/gnus-spec.el
lisp/gnus-srvr.el
lisp/gnus-sum.el
lisp/gnus-util.el
lisp/gnus-uu.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/nnkiboze.el
lisp/nnmh.el
lisp/nntp.el
lisp/nnvirtual.el
texi/ChangeLog
texi/gnus-ja.texi
texi/gnus.texi
texi/message.texi

index 5fe208e..94fbbde 100644 (file)
@@ -1,3 +1,91 @@
+Thu Aug 27 11:03:59 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.41 is released.
+
+1998-08-27  Mike McEwan  <mike@lotusland.demon.co.uk>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Leave the calculation
+       of `articles' to `gnus-agent-fetch-headers'.
+       (gnus-agent-fetch-headers): We only want headers that are after
+       the last entry in `gnus-group-alist'.
+
+1998-08-27 09:45:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * Makefile.in (warn): New.
+
+       * gnus.el: Removed unreferenced bound variables all over.
+
+       * gnus-group.el (gnus-update-group-mark-positions): Removed topic.
+
+       * gnus-cus.el (gnus-group-customize): No part.
+
+       * gnus-agent.el (gnus-category-line-format-alist): Renamed specs.
+       (gnus-category-insert-line): Use it.
+
+Thu Aug 27 09:29:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.40 is released.
+
+1998-08-27 09:19:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-mode): Only toggle plugged in group
+       mode. 
+
+1998-08-27 07:25:47  Lars Balker Rasmussen  <gnort@daimi.aau.dk>
+
+       * message.el (message-supersede): Check the right headers. 
+
+1998-08-26 13:51:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-sort-threads): Changed level.
+
+1998-08-26  Mike McEwan  <mike@lotusland.demon.co.uk>
+
+       * gnus-sum.el (gnus-build-all-threads): `save-excursion' and
+       `set-buffer' back to `gnus-summary-buffer' in order to access
+       buffer-local variables.
+
+1998-08-26 06:00:44  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-data-compute-positions): More and faster. 
+
+1998-08-26 05:41:15  Matt Pharr  <mmp@Graphics.Stanford.EDU>
+
+       * message.el (message-wash-subject): Remove more.
+
+1998-08-25 11:33:28  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
+
+       * gnus-cache.el (gnus-cache-overview-coding-system): New
+       variable. 
+
+1998-08-25 08:23:05  Albert L. Ting  <alt@artisan.com>
+
+       * gnus-group.el (gnus-fetch-group-other-frame): New command.
+
+1998-08-25 07:24:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-uu.el (gnus-uu-grab-articles): Check for pseudos.
+
+       * gnus-art.el (gnus-ignored-headers): More headers.
+
+       * gnus-sum.el (gnus-summary-move-article): Update the right
+       group. 
+
+1998-08-23 14:31:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-ignored-headers): More headers.
+
+1998-08-23  Mike McEwan  <mike@lotusland.demon.co.uk>
+
+       * gnus-agent.el (gnus-agent-copy-nov-line): Return to beginning of 
+       line before next read.
+       (gnus-agent-braid-nov): Remove redundant `let'. 
+
+1998-08-22 10:40:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-display-x-face): Allow multiple X-Faces
+       under XEmacs.
+
 Sat Aug 22 10:28:25 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Gnus v5.6.39 is released.
index cd61fdc..d143e8f 100644 (file)
@@ -18,6 +18,9 @@ total:
 all:
        rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
 
+warn:
+       rm -f *.elc ; $(EMACS) $(FLAGS) --eval '(dgnushack-compile t)' 2>&1 | egrep -v "variable G|inhibit-point-motion-hooks|coding-system|temp-results|variable gnus|variable nn|scroll-in-place|deactivate-mark|filladapt-mode|byte-code-function-p|print-quoted|ps-right-header|ps-left-header|article-inhibit|print-escape|ssl-program-arguments|message-log-max"
+
 clever:
        $(EMACS) $(FLAGS) -f dgnushack-compile
 
index 37bdb98..a5d1d65 100644 (file)
@@ -32,7 +32,7 @@
 (require 'bytecomp)
 (push "~/lisp/custom" load-path)
 (push "." load-path)
-(load "./lpath.el")
+(load "./lpath.el" nil t)
 
 (defalias 'device-sound-enabled-p 'ignore)
 (defalias 'play-sound-file 'ignore)
     (fset 'x-defined-colors 'ignore)
     (fset 'read-color 'ignore)))
 
-(setq byte-compile-warnings
-      '(free-vars unresolved callargs redefine))
-
-(defun dgnushack-compile ()
+(defun dgnushack-compile (&optional warn)
   ;;(setq byte-compile-dynamic t)
+  (unless warn
+    (setq byte-compile-warnings
+         '(free-vars unresolved callargs redefine)))
   (unless (locate-library "cus-edit")
     (error "You do not seem to have Custom installed.
 Fetch it from <URL:http://www.dina.kvl.dk/~abraham/custom/>.
index 0c81559..d9f56ba 100644 (file)
@@ -129,7 +129,7 @@ If nil, only read articles will be expired."
   "Load FILE and do a `read' there."
   (nnheader-temp-write nil
     (ignore-errors
-      (insert-file-contents file)
+      (nnheader-insert-file-contents file)
       (goto-char (point-min))
       (read (current-buffer)))))
 
@@ -203,7 +203,8 @@ If nil, only read articles will be expired."
       (push (cons mode (symbol-value (intern (format "gnus-agent-%s-mode-map"
                                                     buffer))))
            minor-mode-map-alist))
-    (gnus-agent-toggle-plugged gnus-plugged)
+    (when (eq major-mode 'gnus-group-mode)
+      (gnus-agent-toggle-plugged gnus-plugged))
     (gnus-run-hooks 'gnus-agent-mode-hook
                    (intern (format "gnus-agent-%s-mode-hook" buffer)))))
 
@@ -538,7 +539,7 @@ the actual number of articles toggled is returned."
       (gnus-make-directory (file-name-directory file))
       (nnheader-temp-write file
        (when (file-exists-p file)
-         (insert-file-contents file))
+         (nnheader-insert-file-contents file))
        (goto-char (point-min))
        (if nntp-server-list-active-group
            (progn
@@ -643,7 +644,7 @@ the actual number of articles toggled is returned."
     ;; Prune off articles that we have already fetched.
     (while (and articles
                (cdr (assq (car articles) gnus-agent-article-alist)))
-      (pop articles))
+     (pop articles))
     (let ((arts articles))
       (while (cdr arts)
        (if (cdr (assq (cadr arts) gnus-agent-article-alist))
@@ -655,15 +656,14 @@ the actual number of articles toggled is returned."
                  (gnus-agent-group-path group) "/"))
            (date (gnus-time-to-day (current-time)))
            (case-fold-search t)
-           pos alists crosses id elem)
+           pos crosses id elem)
        (gnus-make-directory dir)
        (gnus-message 7 "Fetching articles for %s..." group)
        ;; Fetch the articles from the backend.
        (if (gnus-check-backend-function 'retrieve-articles group)
            (setq pos (gnus-retrieve-articles articles group))
          (nnheader-temp-write nil
-           (let ((buf (current-buffer))
-                 article)
+           (let (article)
              (while (setq article (pop articles))
                (when (gnus-request-article article group)
                  (goto-char (point-max))
@@ -750,50 +750,38 @@ the actual number of articles toggled is returned."
        (insert "\n"))
       (pop gnus-agent-group-alist))))
 
-(defun gnus-agent-fetch-headers (group articles &optional force)
-  (gnus-agent-load-alist group)
-  ;; Find out what headers we need to retrieve.
-  (when articles
-    (while (and articles
-               (assq (car articles) gnus-agent-article-alist))
-      (pop articles))
-    (let ((arts articles))
-      (while (cdr arts)
-       (if (assq (cadr arts) gnus-agent-article-alist)
-           (setcdr arts (cddr arts))
-         (setq arts (cdr arts)))))
-    ;; Fetch them.
-    (when articles
-      (gnus-message 7 "Fetching headers for %s..." group)
-      (save-excursion
-       (set-buffer nntp-server-buffer)
-       (unless (eq 'nov (gnus-retrieve-headers articles group))
-         (nnvirtual-convert-headers))
-       ;;
-       ;; To gnus-agent-expire work fine with no Xref field in .overview 
-       ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
-       (goto-char (point-min))
-       (while (not (eobp))
-         (goto-char (point-at-eol))
-         (insert "\t")
-         (forward-line 1))
-       ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
-       ;; To gnus-agent-expire work fine with no Xref field in .overview 
-       ;;
-       ;; Save these headers for later processing.
-       (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
-       (let (file)
-         (when (file-exists-p
-                (setq file (gnus-agent-article-name ".overview" group)))
-           (gnus-agent-braid-nov group articles file))
-         (gnus-make-directory (nnheader-translate-file-chars
-                               (file-name-directory file)))
-         (write-region (point-min) (point-max) file nil 'silent)
-         (gnus-agent-save-alist group articles nil)
-         (gnus-agent-enter-history "last-header-fetched-for-session"
-                                   (list (cons group (nth (- (length  articles) 1) articles)))
-                                   (gnus-time-to-day (current-time)))
-       t)))))
+(defun gnus-agent-fetch-headers (group &optional force)
+  (when (gnus-agent-load-alist group)
+    (let ((articles (gnus-uncompress-range 
+                    (cons (1+ (caar (last (gnus-agent-load-alist group))))
+                          (cdr (gnus-active group))))))
+      ;; Fetch them.
+      (when articles
+       (gnus-message 7 "Fetching headers for %s..." group)
+       (save-excursion
+         (set-buffer nntp-server-buffer)
+         (unless (eq 'nov (gnus-retrieve-headers articles group))
+           (nnvirtual-convert-headers))
+         (goto-char (point-min))
+         (while (not (eobp))
+           (goto-char (point-at-eol))
+           (insert "\t")
+           (forward-line 1))
+         ;; Save these headers for later processing.
+         (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
+         (let (file)
+           (when (file-exists-p
+                  (setq file (gnus-agent-article-name ".overview" group)))
+             (gnus-agent-braid-nov group articles file))
+           (gnus-make-directory (nnheader-translate-file-chars
+                                 (file-name-directory file)))
+           (write-region (point-min) (point-max) file nil 'silent)
+           (gnus-agent-save-alist group articles nil)
+           (gnus-agent-enter-history
+            "last-header-fetched-for-session"
+            (list (cons group (nth (- (length  articles) 1) articles)))
+            (gnus-time-to-day (current-time)))
+           articles))))))
 
 (defsubst gnus-agent-copy-nov-line (article)
   (let (b e)
@@ -801,47 +789,48 @@ the actual number of articles toggled is returned."
     (setq b (point))
     (if (eq article (read (current-buffer)))
        (setq e (progn (forward-line 1) (point)))
-      (setq e b))
+      (progn
+       (beginning-of-line)
+       (setq e b)))
     (set-buffer nntp-server-buffer)
     (insert-buffer-substring gnus-agent-overview-buffer b e)))
 
 (defun gnus-agent-braid-nov (group articles file)
-  (let (beg end)
-    (set-buffer gnus-agent-overview-buffer)
-    (goto-char (point-min))
-    (set-buffer nntp-server-buffer)
-    (erase-buffer)
-    (nnheader-insert-file-contents file)
-    (goto-char (point-max))
-    (if (or (= (point-min) (point-max))
-           (progn
-             (forward-line -1)
-             (< (read (current-buffer)) (car articles))))
-       ;; We have only headers that are after the older headers,
-       ;; so we just append them.
-       (progn
-         (goto-char (point-max))
-         (insert-buffer-substring gnus-agent-overview-buffer))
-      ;; We do it the hard way.
-      (nnheader-find-nov-line (car articles))
-      (gnus-agent-copy-nov-line (car articles))
-      (pop articles)
-      (while (and articles
-                 (not (eobp)))
-       (while (and (not (eobp))
-                   (< (read (current-buffer)) (car articles)))
-         (forward-line 1))
-       (beginning-of-line)
-       (unless (eobp)
-         (gnus-agent-copy-nov-line (car articles))
-         (setq articles (cdr articles))))
-      (when articles
-       (let (b e)
-         (set-buffer gnus-agent-overview-buffer)
-         (setq b (point)
-               e (point-max))
-         (set-buffer nntp-server-buffer)
-         (insert-buffer-substring gnus-agent-overview-buffer b e))))))
+  (set-buffer gnus-agent-overview-buffer)
+  (goto-char (point-min))
+  (set-buffer nntp-server-buffer)
+  (erase-buffer)
+  (nnheader-insert-file-contents file)
+  (goto-char (point-max))
+  (if (or (= (point-min) (point-max))
+         (progn
+           (forward-line -1)
+           (< (read (current-buffer)) (car articles))))
+      ;; We have only headers that are after the older headers,
+      ;; so we just append them.
+      (progn
+       (goto-char (point-max))
+       (insert-buffer-substring gnus-agent-overview-buffer))
+    ;; We do it the hard way.
+    (nnheader-find-nov-line (car articles))
+    (gnus-agent-copy-nov-line (car articles))
+    (pop articles)
+    (while (and articles
+               (not (eobp)))
+      (while (and (not (eobp))
+                 (< (read (current-buffer)) (car articles)))
+       (forward-line 1))
+      (beginning-of-line)
+      (unless (eobp)
+       (gnus-agent-copy-nov-line (car articles))
+       (setq articles (cdr articles))))
+    (when articles
+      (let (b e)
+       (set-buffer gnus-agent-overview-buffer)
+       (setq b (point)
+             e (point-max))
+       (set-buffer nntp-server-buffer)
+       (insert-buffer-substring gnus-agent-overview-buffer b e)))))
 
 (defun gnus-agent-load-alist (group &optional dir)
   "Load the article-state alist for GROUP."
@@ -852,7 +841,7 @@ the actual number of articles toggled is returned."
           (gnus-agent-article-name ".agentview" group)))))
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
-  "Load the article-state alist for GROUP."
+  "Save the article-state alist for GROUP."
   (nnheader-temp-write (if dir
                           (concat dir ".agentview")
                         (gnus-agent-article-name ".agentview" group))
@@ -902,12 +891,11 @@ the actual number of articles toggled is returned."
   (let ((gnus-command-method method)
        gnus-newsgroup-dependencies gnus-newsgroup-headers
        gnus-newsgroup-scored gnus-headers gnus-score
-       gnus-use-cache articles score arts
+       gnus-use-cache articles arts
        category predicate info marks score-param)
     ;; Fetch headers.
     (when (and (or (gnus-active group) (gnus-activate-group group))
-              (setq articles (gnus-list-of-unread-articles group))
-              (gnus-agent-fetch-headers group articles))
+              (setq articles (gnus-agent-fetch-headers group)))
       ;; Parse them and see which articles we want to fetch.
       (setq gnus-newsgroup-dependencies
            (make-vector (length articles) 0))
@@ -975,8 +963,8 @@ the actual number of articles toggled is returned."
 (defvar gnus-category-buffer "*Agent Category*")
 
 (defvar gnus-category-line-format-alist
-  `((?c name ?s)
-    (?g groups ?d)))
+  `((?c gnus-tmp-name ?s)
+    (?g gnus-tmp-groups ?d)))
 
 (defvar gnus-category-mode-line-format-alist
   `((?u user-defined ?s)))
@@ -1052,15 +1040,15 @@ The following commands are available:
 (defalias 'gnus-category-position-point 'gnus-goto-colon)
 
 (defun gnus-category-insert-line (category)
-  (let* ((name (car category))
-        (groups (length (cadddr category))))
+  (let* ((gnus-tmp-name (car category))
+        (gnus-tmp-groups (length (cadddr category))))
     (beginning-of-line)
     (gnus-add-text-properties
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
        (eval gnus-category-line-format-spec))
-     (list 'gnus-category name))))
+     (list 'gnus-category gnus-tmp-name))))
 
 (defun gnus-enter-category-buffer ()
   "Go to the Category buffer."
index 957c13b..103eeaf 100644 (file)
@@ -2,7 +2,7 @@
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
     "^X-MimeOLE:" "^X-MSMail-Priority:" "^X-Priority:" "^X-Loop:"
     "^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face:"
     "^X-Attribution:" "^X-Originating-IP:" "^Delivered-To:"
-    "^NNTP-[-A-Za-z]*:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
+    "^NNTP-[-A-Za-z]+:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
     "^X-Complaints-To:" "^X-NNTP-Posting-Host:" "^X-Orig.*:"
     "^Abuse-Reports-To:" "^Cache-Post-Path:" "^X-Article-Creation-Date:"
     "^X-Poster:" "^X-Mail2News-Path:" "^X-Server-Date:" "^X-Cache:"
     "^Originator:" "^X-Problems-To:" "^X-Auth-User:" "^X-Post-Time:" 
-    "^X-Admin:" "^X-UID:")
+    "^X-Admin:" "^X-UID:" "^Resent-[-A-Za-z]+:" "^X-Mailing-List:"
+    "^Precedence:" "^Original-[-A-Za-z]+:" "^X-filename:" "^X-Orcpt:"
+    "^Old-Received:" "^X-Pgp-Fingerprint:" "^X-Pgp-Key-Id:"
+    "^X-Pgp-Public-Key-Url:" "^X-Auth:" "^X-From-Line:"
+    "^X-Gnus-Article-Number:" "^X-Majordomo:" "^X-Url:" "^X-Sender:"
+    "^X-Mailing-List:" "^MBOX-Line" "^Priority:" "^X-Pgp" "^X400-[-A-Za-z]+:"
+    "^Status:")
   "*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."
@@ -116,7 +122,7 @@ If `gnus-visible-headers' is non-nil, this variable will be ignored."
   :group 'gnus-article-hiding)
 
 (defcustom gnus-visible-headers
-  "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
+  "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
   "*All headers that do not match this regexp will be hidden.
 This variable can also be a list of regexp of headers to remain visible.
 If this variable is non-nil, `gnus-ignored-headers' will be ignored."
@@ -373,7 +379,7 @@ be used as possible file names."
                         (sexp :value nil))))
 
 (defcustom gnus-strict-mime t
-  "*If nil, MIME-decode even if there is no Mime-Version header."
+  "*If nil, MIME-decode even if there is no MIME-Version header."
   :group 'gnus-article-mime
   :type 'boolean)
 
@@ -676,7 +682,7 @@ always hide."
                             (listp gnus-visible-headers))
                        (mapconcat 'identity gnus-visible-headers "\\|"))))
                (inhibit-point-motion-hooks t)
-               want-list beg)
+               beg)
            ;; First we narrow to just the headers.
            (widen)
            (goto-char (point-min))
@@ -769,8 +775,8 @@ always hide."
                       from reply-to
                       (ignore-errors
                         (equal
-                         (nth 1 (mail-extract-address-components from))
-                         (nth 1 (mail-extract-address-components reply-to)))))
+                         (nth 1 (funcall gnus-extract-address-components from))
+                         (nth 1 (funcall gnus-extract-address-components reply-to)))))
                  (gnus-article-hide-header "reply-to"))))
             ((eq elem 'date)
              (let ((date (message-fetch-field "date")))
@@ -911,24 +917,27 @@ characters to translate to."
       (delete-process "article-x-face"))
     (let ((inhibit-point-motion-hooks t)
          (case-fold-search t)
-         from)
+         from last)
       (save-restriction
        (nnheader-narrow-to-headers)
        (setq from (message-fetch-field "from"))
        (goto-char (point-min))
-       ;; This used to try to do multiple faces (`while' instead of
-       ;; `when' below), but (a) sending multiple EOFs to xv doesn't
-       ;; work (b) it can crash some versions of Emacs (c) are
-       ;; multiple faces really something to encourage?
-       (when (and gnus-article-x-face-command
-                  (or force
-                      ;; Check whether this face is censored.
-                      (not gnus-article-x-face-too-ugly)
-                      (and gnus-article-x-face-too-ugly from
-                           (not (string-match gnus-article-x-face-too-ugly
-                                              from))))
-                  ;; Has to be present.
-                  (re-search-forward "^X-Face: " nil t))
+       (while (and gnus-article-x-face-command
+                   (not last)
+                   (or force
+                       ;; Check whether this face is censored.
+                       (not gnus-article-x-face-too-ugly)
+                       (and gnus-article-x-face-too-ugly from
+                            (not (string-match gnus-article-x-face-too-ugly
+                                               from))))
+                   ;; Has to be present.
+                   (re-search-forward "^X-Face: " nil t))
+         ;; This used to try to do multiple faces (`while' instead of
+         ;; `when' above), but (a) sending multiple EOFs to xv doesn't
+         ;; work (b) it can crash some versions of Emacs (c) are
+         ;; multiple faces really something to encourage?
+         (when (stringp gnus-article-x-face-command)
+           (setq last t))
          ;; We now have the area of the buffer where the X-Face is stored.
          (save-excursion
            (let ((beg (point))
@@ -1092,21 +1101,10 @@ always hide."
       (while (re-search-forward "^[ \t]*\n" nil t)
        (replace-match "" t t)))))
 
-(defvar mime::preview/content-list)
-(defvar mime::preview-content-info/point-min)
 (defun gnus-article-narrow-to-signature ()
   "Narrow to the signature; return t if a signature is found, else nil."
   (widen)
   (let ((inhibit-point-motion-hooks t))
-    (when (and (boundp 'mime::preview/content-list)
-              mime::preview/content-list)
-      ;; We have a MIMEish article, so we use the MIME data to narrow.
-      (let ((pcinfo (car (last mime::preview/content-list))))
-       (ignore-errors
-         (narrow-to-region
-          (funcall (intern "mime::preview-content-info/point-min") pcinfo)
-          (point-max)))))
-
     (when (gnus-article-search-signature)
       (forward-line 1)
       ;; Check whether we have some limits to what we consider
@@ -1205,8 +1203,7 @@ means show, 0 means toggle."
 
 (defun gnus-article-hidden-text-p (type)
   "Say whether the current buffer contains hidden text of type TYPE."
-  (let ((start (point-min))
-       (pos (text-property-any (point-min) (point-max) 'article-type type)))
+  (let ((pos (text-property-any (point-min) (point-max) 'article-type type)))
     (while (and pos
                (not (get-text-property pos 'invisible)))
       (setq pos
@@ -1969,27 +1966,24 @@ commands:
 
 (defun gnus-article-display-mime-message ()
   "Article display method for MIME message."
+  ;; called from `gnus-original-article-buffer'.
+  (let ((default-mime-charset (save-excursion
+                               (set-buffer gnus-summary-buffer)
+                               default-mime-charset)))
+    (mime-display-message mime-message-structure
+                         gnus-article-buffer nil gnus-article-mode-map))
+  ;; `mime-display-message' changes current buffer to `gnus-article-buffer'.
   (make-local-variable 'mime-button-mother-dispatcher)
   (setq mime-button-mother-dispatcher
        (function gnus-article-push-button))
-  (let ((default-mime-charset
-         (save-excursion
-           (set-buffer gnus-summary-buffer)
-           default-mime-charset))
-       )
-    (mime-display-message mime-message-structure
-                         gnus-article-buffer nil gnus-article-mode-map)
-    )
-  (run-hooks 'gnus-mime-article-prepare-hook)
-  )
+  (run-hooks 'gnus-mime-article-prepare-hook))
 
 (defun gnus-article-display-traditional-message ()
   "Article display method for traditional message."
   (set-buffer gnus-article-buffer)
   (let (buffer-read-only)
     (erase-buffer)
-    (insert-buffer-substring gnus-original-article-buffer)
-    ))
+    (insert-buffer-substring gnus-original-article-buffer)))
 
 (defun gnus-article-display-message-with-encoded-word ()
   "Article display method for message with encoded-words."
@@ -2001,12 +1995,9 @@ commands:
       (eword-decode-header charset)
       (goto-char (point-min))
       (if (search-forward "\n\n" nil t)
-         (decode-mime-charset-region (match-end 0) (point-max) charset))
-      )
-    (mime-maybe-hide-echo-buffer)
-    )
-  (gnus-run-hooks 'gnus-mime-article-prepare-hook)
-  )
+         (decode-mime-charset-region (match-end 0) (point-max) charset)))
+    (mime-maybe-hide-echo-buffer))
+  (gnus-run-hooks 'gnus-mime-article-prepare-hook))
 
 (defun gnus-article-prepare (article &optional all-headers header)
   "Prepare ARTICLE in article mode buffer.
@@ -2020,7 +2011,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
     (setq gnus-summary-buffer (current-buffer))
     (let* ((gnus-article (if header (mail-header-number header) article))
           (summary-buffer (current-buffer))
-          (internal-hook gnus-article-internal-prepare-hook)
+          (gnus-tmp-internal-hook gnus-article-internal-prepare-hook)
           (group gnus-newsgroup-name)
           result)
       (save-excursion
@@ -2101,18 +2092,10 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (or all-headers gnus-show-all-headers))))
            (when (or (numberp article)
                      (stringp article))
-             (let ((method
-                    (if gnus-show-mime
-                        (progn
-                          (mime-parse-buffer)
-                          (if (or (not gnus-strict-mime)
-                                  (mime-fetch-field "MIME-Version"))
-                              gnus-article-display-method-for-mime
-                            gnus-article-display-method-for-encoded-word))
-                      gnus-article-display-method-for-traditional)))
-               ;; Hooks for getting information from the article.
-               ;; This hook must be called before being narrowed.
-               (gnus-run-hooks 'internal-hook)
+             ;; Hooks for getting information from the article.
+             ;; This hook must be called before being narrowed.
+             (let (buffer-read-only)
+               (gnus-run-hooks 'gnus-tmp-internal-hook)
                (gnus-run-hooks 'gnus-article-prepare-hook)
                ;; Display message.
                (funcall method)
@@ -3158,7 +3141,7 @@ forbidden in URL encoding."
   ;; Send mail to someone
   (when (string-match "mailto:/*\\(.*\\)" url)
     (setq url (substring url (match-beginning 1) nil)))
-  (let (to args source-url subject func)
+  (let (to args subject func)
     (if (string-match (regexp-quote "?") url)
         (setq to (gnus-url-unhex-string (substring url 0 (match-beginning 0)))
               args (gnus-url-parse-query-string
@@ -3166,26 +3149,29 @@ forbidden in URL encoding."
       (setq to (gnus-url-unhex-string url)))
     (setq args (cons (list "to" to) args)
           subject (cdr-safe (assoc "subject" args)))
-    (message-mail)
-    (while args
-      (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
-      (if (fboundp func)
-          (funcall func)
-        (message-position-on-field (caar args)))
-      (insert (mapconcat 'identity (cdar args) ", "))
-      (setq args (cdr args)))
-    (if subject
-        (message-goto-body)
-      (message-goto-subject))))
+    (gnus-setup-message 'reply
+      (message-mail)
+      (while args
+       (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
+       (if (fboundp func)
+           (funcall func)
+         (message-position-on-field (caar args)))
+       (insert (mapconcat 'identity (cdar args) ", "))
+       (setq args (cdr args)))
+      (if subject
+         (message-goto-body)
+       (message-goto-subject)))))
 
 (defun gnus-button-mailto (address)
   ;; Mail to ADDRESS.
   (set-buffer (gnus-copy-article-buffer))
-  (message-reply address))
+  (gnus-setup-message 'reply
+    (message-reply address)))
 
 (defun gnus-button-reply (address)
   ;; Reply to ADDRESS.
-  (message-reply address))
+  (gnus-setup-message 'reply
+    (message-reply address)))
 
 (defun gnus-button-url (address)
   "Browse ADDRESS."
index 789ddf4..e10ae0d 100644 (file)
@@ -74,6 +74,9 @@ it's not cached."
   :type '(choice (const :tag "off" nil)
                 regexp))
 
+(defvar gnus-cache-overview-coding-system 'raw-text
+  "Coding system used on Gnus cache files.")
+
 \f
 
 ;;; Internal variables.
@@ -122,7 +125,8 @@ it's not cached."
          (set-buffer buffer)
          (if (> (buffer-size) 0)
              ;; Non-empty overview, write it to a file.
-             (let ((coding-system-for-write gnus-cache-write-file-coding-system))
+             (let ((coding-system-for-write
+                    gnus-cache-overview-coding-system))
                (gnus-write-buffer overview-file))
            ;; Empty overview file, remove it
            (when (file-exists-p overview-file)
@@ -152,7 +156,7 @@ it's not cached."
              headers (copy-sequence headers))
        (mail-header-set-number headers (cdr result))))
     (let ((number (mail-header-number headers))
-         file dir)
+         file)
       (when (and number
                 (> number 0)           ; Reffed article.
                 (or force
@@ -166,7 +170,7 @@ it's not cached."
                 (not (file-exists-p (setq file (gnus-cache-file-name
                                                 group number)))))
        ;; Possibly create the cache directory.
-       (gnus-make-directory (setq dir (file-name-directory file)))
+       (gnus-make-directory (file-name-directory file))
        ;; Save the article in the cache.
        (if (file-exists-p file)
            t                           ; The article already is saved.
index 6e25832..025273b 100644 (file)
@@ -170,11 +170,10 @@ DOC is a documentation string for the parameter.")
 (defvar gnus-custom-method)
 (defvar gnus-custom-group)
 
-(defun gnus-group-customize (group &optional part)
+(defun gnus-group-customize (group)
   "Edit the group on the current line."
   (interactive (list (gnus-group-group-name)))
-  (let ((part (or part 'info))
-       info
+  (let (info
        (types (mapcar (lambda (entry)
                         `(cons :format "%v%h\n"
                                :doc ,(nth 2 entry)
index a29494b..f798e12 100644 (file)
                 gnus-cite-overlay-list)
           (gnus-overlay-put (gnus-make-overlay from to) 'face face))))))
 
-(defun gnus-mule-max-width-function (el max-width)
-  (` (let* ((val (eval (, el)))
-           (valstr (if (numberp val)
-                       (int-to-string val) val)))
-       (if (> (length valstr) (, max-width))
-          (truncate-string valstr (, max-width))
-        valstr))))
-
 (defvar gnus-mule-bitmap-image-file nil)
 (defun gnus-mule-group-startup-message (&optional x y)
   "Insert startup message in current buffer."
     (fset 'gnus-encode-coding-string 'encode-coding-string)
     (fset 'gnus-decode-coding-string 'decode-coding-string)
 
+    (if (fboundp 'truncate-string-to-width)
+       (fset 'gnus-truncate-string 'truncate-string-to-width)
+      (fset 'gnus-truncate-string 'truncate-string))
+
+    (defun gnus-tilde-max-form (el max-width)
+      "Return a form that limits EL to MAX-WIDTH."
+      (let ((max (abs max-width)))
+       (if (symbolp el)
+           `(if (> (string-width ,el) ,max)
+                ,(if (< max-width 0)
+                     `(gnus-truncate-string
+                       ,el (string-width ,el)
+                       (- (string-width ,el) ,max))
+                   `(gnus-truncate-string ,el ,max))
+              ,el)
+         `(let ((val (eval ,el)))
+            (if (> (string-width val) ,max)
+                ,(if (< max-width 0)
+                     `(gnus-truncate-string
+                       val (string-width val)
+                       (- (string-width val) ,max))
+                   `(gnus-truncate-string val ,max))
+              val)))))
+
+    (defun gnus-tilde-cut-form (el cut-width)
+      "Return a form that cuts CUT-WIDTH off of EL."
+      (let ((cut (abs cut-width)))
+       (if (symbolp el)
+           `(if (> (string-width ,el) ,cut)
+                ,(if (< cut-width 0)
+                     `(gnus-truncate-string
+                       ,el (- (string-width ,el) ,cut))
+                   `(gnus-truncate-string
+                     ,el (- (string-width ,el) ,cut) ,cut))
+              ,el)
+         `(let ((val (eval ,el)))
+            (if (> (string-width val) ,cut)
+                ,(if (< cut-width 0)
+                     `(gnus-truncate-string
+                       val (- (string-width val) ,cut))
+                   `(gnus-truncate-string
+                     val (- (string-width val) ,cut) ,cut))
+              val)))))
+
     (when window-system
       (require 'path-util)
       (if (module-installed-p 'bitmap)
            (delq 'long-lines
                  (delq 'control-chars gnus-check-before-posting))))
 
-    (unless (and (fboundp 'set-buffer-multibyte)
-                (subrp (symbol-function 'set-buffer-multibyte)))
-      ;; For Emacs 20.1 and 20.2
-      (defalias 'gnus-truncate-string 'truncate-string)
-      (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face)
-      (fset 'gnus-max-width-function 'gnus-mule-max-width-function)
-
-      (defun gnus-tilde-max-form (el max-width)
-       "Return a form that limits EL to MAX-WIDTH."
-       (let ((max (abs max-width)))
-         (if (symbolp el)
-             `(if (> (length ,el) ,max)
-                  ,(if (< max-width 0)
-                       `(truncate-string
-                         ,el (string-width ,el) (- (string-width ,el) ,max))
-                     `(truncate-string ,el ,max))
-                ,el)
-           `(let ((val (eval ,el)))
-              (if (> (length val) ,max)
-                  ,(if (< max-width 0)
-                       `(truncate-string
-                         val (string-width val) (- (string-width val) ,max))
-                     `(truncate-string val ,max))
-                val)))))
-      )
+    (when (fboundp 'chars-in-string)
+      (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face))
+
     )))
 
 (defun gnus-region-active-p ()
index 03ec6d9..612be02 100644 (file)
@@ -1152,7 +1152,8 @@ already."
            found buffer-read-only)
        ;; Enter the current status into the dribble buffer.
        (let ((entry (gnus-gethash group gnus-newsrc-hashtb)))
-         (when (and entry (not (gnus-ephemeral-group-p group)))
+         (when (and entry
+                    (not (gnus-ephemeral-group-p group)))
            (gnus-dribble-enter
             (concat "(gnus-group-set-info '"
                     (gnus-prin1-to-string (nth 2 entry))
@@ -1567,6 +1568,19 @@ Returns whether the fetching was successful or not."
     (gnus-no-server))
   (gnus-group-read-group nil nil group))
 
+;;;###autoload
+(defun gnus-fetch-group-other-frame (group)
+  "Pop up a frame and enter GROUP."
+  (interactive "P")
+  (let ((window (get-buffer-window gnus-group-buffer)))
+    (cond (window
+          (select-frame (window-frame window)))
+         ((= (length (frame-list)) 1)
+          (select-frame (make-frame)))
+         (t
+          (other-frame 1))))
+  (gnus-fetch-group group))
+
 (defvar gnus-ephemeral-group-server 0)
 
 ;; Enter a group that is not in the group buffer.  Non-nil is returned
@@ -1998,8 +2012,7 @@ and NEW-NAME will be prompted for."
   "Create the Gnus documentation group."
   (interactive)
   (let ((name (gnus-group-prefixed-name "gnus-help" '(nndoc "gnus-help")))
-       (file (nnheader-find-etc-directory "gnus-tut.txt" t))
-       dir)
+       (file (nnheader-find-etc-directory "gnus-tut.txt" t)))
     (when (gnus-gethash name gnus-newsrc-hashtb)
       (error "Documentation group already exists"))
     (if (not file)
@@ -2392,7 +2405,7 @@ If REVERSE, sort in reverse order."
        (when (gnus-group-native-p (gnus-info-group info))
          (gnus-info-clear-data info)))
       (gnus-get-unread-articles)
-      (gnus-dribble-enter "")
+      (gnus-dribble-touch)
       (when (gnus-y-or-n-p
             "Move the cache away to avoid problems in the future? ")
        (call-interactively 'gnus-cache-move-cache)))))
@@ -3318,7 +3331,6 @@ and the second element is the address."
   ;; If INFO is non-nil, use that info.         If FORCE is non-nil, don't
   ;; add, but replace marked articles of TYPE with ARTICLES.
   (let ((info (or info (gnus-get-info group)))
-       (uncompressed '(score bookmark killed))
        marked m)
     (or (not info)
        (and (not (setq marked (nthcdr 3 info)))
index 4672116..abcc401 100644 (file)
@@ -468,9 +468,9 @@ Returns the number of articles marked as read."
           (?h . "")
           (?f . "from")
           (?: . "subject")))
-       (com-to-com
-        '((?m . " ")
-          (?j . "X")))
+       ;;(com-to-com
+       ;; '((?m . " ")
+       ;;   (?j . "X")))
        pattern modifier commands)
     (while (not (eobp))
       (if (not (looking-at "[ \t]*/\\([^/]*\\)/\\([ahfcH]\\)?:\\([a-z=:]*\\)"))
index 310c701..649b259 100644 (file)
@@ -2,8 +2,9 @@
 ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;;        Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;     Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
 ;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
@@ -120,7 +121,13 @@ the second with the current group name.")
 (defvar gnus-message-group-art nil)
 
 (defconst gnus-bug-message
-  "Sending a bug report to the Gnus Towers.
+  (format "Sending a bug report to the Gnus Towers.
+========================================
+
+This gnus is the %s%s.
+If you think the bug is a Semi-gnus bug, send a bug report to Semi-gnus
+Developers. (the addresses below are mailing list addresses)
+
 ========================================
 
 The buffer below is a mail buffer.  When you press `C-c C-c', it will
@@ -137,7 +144,11 @@ and include the backtrace in your bug report.
 Please describe the bug in annoying, painstaking detail.
 
 Thank you for your help in stamping out bugs.
-")
+"
+         gnus-product-name
+         (if (string= gnus-product-name "Semi-gnus")
+             ""
+           ", a modified version of Semi-gnus")))
 
 (eval-and-compile
   (autoload 'gnus-uu-post-news "gnus-uu" nil t)
@@ -168,8 +179,8 @@ Thank you for your help in stamping out bugs.
   "\M-c" gnus-summary-mail-crosspost-complaint
   "om" gnus-summary-mail-forward
   "op" gnus-summary-post-forward
-  "Om" gnus-uu-digest-mail-forward
-  "Op" gnus-uu-digest-post-forward)
+  "Om" gnus-summary-mail-digest
+  "Op" gnus-summary-post-digest)
 
 (gnus-define-keys (gnus-send-bounce-map "D" gnus-summary-send-map)
   "b" gnus-summary-resend-bounced-mail
@@ -178,6 +189,11 @@ Thank you for your help in stamping out bugs.
 
 ;;; Internal functions.
 
+(defun gnus-extended-version ()
+  "Stringified gnus version."
+  (interactive) ; ???
+  (concat gnus-product-name "/" gnus-version-number))
+
 (defvar gnus-article-reply nil)
 (defmacro gnus-setup-message (config &rest forms)
   (let ((winconf (make-symbol "gnus-setup-message-winconf"))
@@ -194,6 +210,9 @@ Thank you for your help in stamping out bugs.
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc)
        (add-hook 'message-mode-hook 'gnus-configure-posting-styles)
+       (add-hook 'message-mode-hook
+                (lambda ()
+                  (setq message-user-agent (gnus-extended-version))))
        (unwind-protect
           (progn
             ,@forms)
@@ -213,7 +232,6 @@ Thank you for your help in stamping out bugs.
   (setq message-post-method
        `(lambda (arg)
           (gnus-post-method arg ,gnus-newsgroup-name)))
-  (setq message-user-agent (gnus-extended-version))
   (message-add-action
    `(set-window-configuration ,winconf) 'exit 'postpone 'kill)
   (message-add-action
@@ -358,7 +376,7 @@ header line with the old Message-ID."
   (setq gnus-article-copy (gnus-get-buffer-create " *gnus article copy*"))
   (buffer-disable-undo gnus-article-copy)
   (let ((article-buffer (or article-buffer gnus-article-buffer))
-       end beg contents)
+       end beg)
     (if (not (and (get-buffer article-buffer)
                  (gnus-buffer-exists-p article-buffer)))
        (error "Can't find any article buffer")
@@ -525,61 +543,6 @@ If SILENT, don't prompt the user."
      (t gnus-select-method))))
 
 \f
-
-;; Dummy to avoid byte-compile warning.
-(defvar nnspool-rejected-article-hook)
-(defvar mule-version)
-(defvar xemacs-betaname)
-(defvar xemacs-codename)
-
-(defun gnus-extended-version ()
-  "Stringified Gnus version and Emacs version."
-  (interactive) ; ???
-  (concat
-   ;; Semi-gnus/VERSION
-   gnus-product-name "/" gnus-version-number
-   ;; EMACS/VERSION
-   (if (featurep 'xemacs)
-       ;; XEmacs
-       (concat
-       (format " XEmacs/%d.%d%s" emacs-major-version emacs-minor-version
-               (if (and (boundp 'xemacs-betaname) xemacs-betaname)
-                   (if (string-match "\\`(\\(.*\\))\\'" xemacs-betaname)
-                       (match-string 1 xemacs-betaname)
-                     "")               ; unknown format
-                 ""))                  ; not beta
-       (if (boundp 'xemacs-codename)
-           (concat " (" xemacs-codename ")")
-         "")                           ; no codename
-       )
-     ;; not XEmacs
-     (concat
-      (format " Emacs/%d.%d" emacs-major-version emacs-minor-version)
-      (if (and (boundp 'enable-multibyte-characters)
-              enable-multibyte-characters)
-         ;; Should return " (multibyte)" ?
-         ""
-       " (unibyte)")
-      ))
-   ;; MULE[/VERSION]
-   (if (featurep 'mule)
-       (if (and (boundp 'mule-version) mule-version)
-          (concat " MULE/" mule-version)
-        " MULE")                       ; no mule-version
-     "")                               ; not Mule
-   ;; Meadow/VERSION
-   (if (featurep 'meadow)
-       (let ((version (Meadow-version)))
-        (if (string-match "\\`Meadow.\\([^ ]*\\)\\( (.*)\\)\\'" version)
-            (concat " Meadow/"
-                    (match-string 1 version)
-                    (match-string 2 version)
-                    )
-          "Meadow"))                   ; unknown format
-     "")                               ; not Meadow
-   ))
-
-\f
 ;;;
 ;;; Gnus Mail Functions
 ;;;
@@ -642,6 +605,39 @@ If FULL-HEADERS (the prefix), include full headers when forwarding."
           (if full-headers "" message-included-forward-headers)))
       (message-forward post))))
 
+(defun gnus-summary-post-forward (&optional full-headers)
+  "Forward the current article to a newsgroup.
+If FULL-HEADERS (the prefix), include full headers when forwarding."
+  (interactive "P")
+  (gnus-summary-mail-forward full-headers t))
+
+;;; XXX: generate Subject and ``Topics''?
+(defun gnus-summary-mail-digest (&optional n post)
+  "Digests and forwards all articles in this series."
+  (interactive "P")
+  (let ((subject "Digested Articles")
+       (articles (gnus-summary-work-articles n))
+       article)
+    (gnus-setup-message 'forward
+      (gnus-summary-select-article)
+      (if post (message-news nil subject) (message-mail nil subject))
+      (message-goto-body)
+      (while (setq article (pop articles))
+       (save-window-excursion
+         (set-buffer gnus-summary-buffer)
+         (gnus-summary-select-article nil nil nil article)
+         (gnus-summary-remove-process-mark article))
+       (insert (mime-make-tag "message" "rfc822") "\n")
+       (insert-buffer-substring gnus-original-article-buffer))
+      (push-mark)
+      (message-goto-body)
+      (mime-edit-enclose-digest-region (point)(mark t)))))
+
+(defun gnus-summary-post-digest (&optional n)
+  "Digest and forwards all articles in this series to a newsgroup."
+  (interactive "P")
+  (gnus-summary-mail-digest n t))
 (defun gnus-summary-resend-message (address n)
   "Resend the current article to ADDRESS."
   (interactive "sResend message(s) to: \nP")
@@ -653,12 +649,6 @@ If FULL-HEADERS (the prefix), include full headers when forwarding."
        (set-buffer gnus-original-article-buffer)
        (message-resend address)))))
 
-(defun gnus-summary-post-forward (&optional full-headers)
-  "Forward the current article to a newsgroup.
-If FULL-HEADERS (the prefix), include full headers when forwarding."
-  (interactive "P")
-  (gnus-summary-mail-forward full-headers t))
-
 (defvar gnus-nastygram-message
   "The following article was inappropriately posted to %s.\n\n"
   "Format string to insert in nastygrams.
@@ -817,7 +807,8 @@ If YANK is non-nil, include the original article."
       (insert gnus-bug-message)
       (goto-char (point-min)))
     (message-pop-to-buffer "*Gnus Bug*")
-    (message-setup `((To . ,gnus-maintainer) (Subject . "")))
+    (message-setup
+     `((To . ,gnus-maintainer) (Cc . ,semi-gnus-developers) (Subject . "")))
     (when gnus-bug-create-help-buffer
       (push `(gnus-bug-kill-buffer) message-send-actions))
     (goto-char (point-min))
index 43c9d91..e98762e 100644 (file)
@@ -219,7 +219,6 @@ This must be bound to a button-down mouse event."
         (start-point (posn-point start-posn))
          (start-line (1+ (count-lines 1 start-point)))
         (start-window (posn-window start-posn))
-        (start-frame (window-frame start-window))
         (bounds (gnus-window-edges start-window))
         (top (nth 1 bounds))
         (bottom (if (window-minibuffer-p start-window)
@@ -239,7 +238,7 @@ This must be bound to a button-down mouse event."
     ;; end-of-range is used only in the single-click case.
     ;; It is the place where the drag has reached so far
     ;; (but not outside the window where the drag started).
-    (let (event end end-point last-end-point (end-of-range (point)))
+    (let (event end end-point (end-of-range (point)))
       (track-mouse
        (while (progn
                 (setq event (cdr (gnus-read-event-char)))
@@ -249,8 +248,6 @@ This must be bound to a button-down mouse event."
              nil
            (setq end (event-end event)
                  end-point (posn-point end))
-           (when end-point
-             (setq last-end-point end-point))
 
            (cond
             ;; Are we moving within the original window?
index 281cd21..d910ae6 100644 (file)
   "Return a form that limits EL to MAX-WIDTH."
   (let ((max (abs max-width)))
     (if (symbolp el)
-       `(if (> (gnus-string-width ,el) ,max)
+       `(if (> (length ,el) ,max)
             ,(if (< max-width 0)
-                 `(gnus-truncate-string
-                   ,el (gnus-string-width ,el)
-                   (- (gnus-string-width ,el) ,max))
-               `(gnus-truncate-string ,el ,max))
+                 `(substring ,el (- (length el) ,max))
+               `(substring ,el 0 ,max))
           ,el)
       `(let ((val (eval ,el)))
-        (if (> (gnus-string-width val) ,max)
+        (if (> (length val) ,max)
             ,(if (< max-width 0)
-                 `(gnus-truncate-string
-                   val (gnus-string-width val)
-                   (- (gnus-string-width val) ,max))
-               `(gnus-truncate-string val ,max))
+                 `(substring val (- (length val) ,max))
+               `(substring val 0 ,max))
           val)))))
 
 (defun gnus-tilde-cut-form (el cut-width)
   "Return a form that cuts CUT-WIDTH off of EL."
   (let ((cut (abs cut-width)))
     (if (symbolp el)
-       `(if (> (gnus-string-width ,el) ,cut)
+       `(if (> (length ,el) ,cut)
             ,(if (< cut-width 0)
-                 `(gnus-truncate-string
-                   ,el (- (gnus-string-width ,el) ,cut))
-               `(gnus-truncate-string
-                 ,el (- (gnus-string-width ,el) ,cut) ,cut))
+                 `(substring ,el 0 (- (length el) ,cut))
+               `(substring ,el ,cut))
           ,el)
       `(let ((val (eval ,el)))
-        (if (> (gnus-string-width val) ,cut)
+        (if (> (length val) ,cut)
             ,(if (< cut-width 0)
-                 `(gnus-truncate-string
-                   val (- (gnus-string-width val) ,cut))
-               `(gnus-truncate-string
-                 val (- (gnus-string-width val) ,cut) ,cut))
+                 `(substring val 0 (- (length val) ,cut))
+               `(substring val ,cut))
           val)))))
 
 (defun gnus-tilde-ignore-form (el ignore-value)
@@ -534,7 +526,7 @@ If PROPS, insert the result."
 
       (push (cons 'version emacs-version) gnus-format-specs)
       ;; Mark the .newsrc.eld file as "dirty".
-      (gnus-dribble-enter " ")
+      (gnus-dribble-touch)
       (gnus-message 7 "Compiling user specs...done"))))
 
 (defun gnus-set-format (type &optional insertable)
index e925ef1..ffe5533 100644 (file)
@@ -59,15 +59,15 @@ The following specs are understood:
 (defvar gnus-inserted-opened-servers nil)
 
 (defvar gnus-server-line-format-alist
-  `((?h how ?s)
-    (?n name ?s)
-    (?w where ?s)
-    (?s status ?s)))
+  `((?h gnus-tmp-how ?s)
+    (?n gnus-tmp-name ?s)
+    (?w gnus-tmp-where ?s)
+    (?s gnus-tmp-status ?s)))
 
 (defvar gnus-server-mode-line-format-alist
-  `((?S news-server ?s)
-    (?M news-method ?s)
-    (?u user-defined ?s)))
+  `((?S gnus-tmp-news-server ?s)
+    (?M gnus-tmp-news-method ?s)
+    (?u gnus-tmp-user-defined ?s)))
 
 (defvar gnus-server-line-format-spec nil)
 (defvar gnus-server-mode-line-format-spec nil)
@@ -166,11 +166,11 @@ The following commands are available:
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-server-mode-hook))
 
-(defun gnus-server-insert-server-line (name method)
-  (let* ((how (car method))
-        (where (nth 1 method))
+(defun gnus-server-insert-server-line (gnus-tmp-name method)
+  (let* ((gnus-tmp-how (car method))
+        (gnus-tmp-where (nth 1 method))
         (elem (assoc method gnus-opened-servers))
-        (status (cond ((eq (nth 1 elem) 'denied)
+        (gnus-tmp-status (cond ((eq (nth 1 elem) 'denied)
                        "(denied)")
                       ((or (gnus-server-opened method)
                            (eq (nth 1 elem) 'ok))
@@ -183,7 +183,7 @@ The following commands are available:
      (prog1 (1+ (point))
        ;; Insert the text.
        (eval gnus-server-line-format-spec))
-     (list 'gnus-server (intern name)))))
+     (list 'gnus-server (intern gnus-tmp-name)))))
 
 (defun gnus-enter-server-buffer ()
   "Set up the server buffer."
@@ -287,7 +287,7 @@ The following commands are available:
       (error "No server on the current line")))
   (unless (assoc server gnus-server-alist)
     (error "Read-only server %s" server))
-  (gnus-dribble-enter "")
+  (gnus-dribble-touch)
   (let ((buffer-read-only nil))
     (gnus-delete-line))
   (push (assoc server gnus-server-alist) gnus-server-killed-servers)
index e054214..ab32d6d 100644 (file)
@@ -34,6 +34,7 @@
 (require 'gnus-range)
 (require 'gnus-int)
 (require 'gnus-undo)
+(require 'gnus-util)
 (require 'mime-view)
 
 (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
@@ -1627,8 +1628,8 @@ increase the score of each group you read."
        ["Wide reply and yank" gnus-summary-wide-reply-with-original t]
        ["Mail forward" gnus-summary-mail-forward t]
        ["Post forward" gnus-summary-post-forward t]
-       ["Digest and mail" gnus-uu-digest-mail-forward t]
-       ["Digest and post" gnus-uu-digest-post-forward t]
+       ["Digest and mail" gnus-summary-mail-digest t]
+       ["Digest and post" gnus-summary-post-digest t]
        ["Resend message" gnus-summary-resend-message t]
        ["Send bounced mail" gnus-summary-resend-bounced-mail t]
        ["Send a mail" gnus-summary-mail-other-window t]
@@ -2043,14 +2044,15 @@ The following commands are available:
 (defun gnus-data-compute-positions ()
   "Compute the positions of all articles."
   (setq gnus-newsgroup-data-reverse nil)
-  (let ((data gnus-newsgroup-data)
-       pos)
-    (while data
-      (when (setq pos (text-property-any
-                      (point-min) (point-max)
-                      'gnus-number (gnus-data-number (car data))))
-       (gnus-data-set-pos (car data) (+ pos 3)))
-      (setq data (cdr data)))))
+  (let ((data gnus-newsgroup-data))
+    (save-excursion
+      (goto-char (point-min))
+      (while data
+       (while (get-text-property (point) 'gnus-intangible)
+         (forward-line 1))
+       (gnus-data-set-pos (car data) (+ (point) 3))
+       (setq data (cdr data))
+       (forward-line 1)))))
 
 (defun gnus-summary-article-pseudo-p (article)
   "Say whether this article is a pseudo article or not."
@@ -2362,7 +2364,7 @@ marks of articles."
          (gnus-score-over-mark 130)
          (gnus-download-mark 131)
          (spec gnus-summary-line-format-spec)
-         thread gnus-visual pos)
+         gnus-visual pos)
       (save-excursion
        (gnus-set-work-buffer)
        (let ((gnus-summary-line-format-spec spec)
@@ -2968,7 +2970,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
   (let ((headers gnus-newsgroup-headers)
        (gnus-summary-ignore-duplicates t)
        header references generation relations
-       cthread subject child end pthread relation new-child date)
+       subject child end new-child date)
     ;; First we create an alist of generations/relations, where
     ;; generations is how much we trust the relation, and the relation
     ;; is parent/child.
@@ -3056,7 +3058,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 (defsubst gnus-nov-parse-line (number dependencies &optional force-new)
   (let ((eol (gnus-point-at-eol))
        (buffer (current-buffer))
-       header)
+       header rawtext decoded)
 
     ;; overview: [num subject from date id refs chars lines misc]
     (unwind-protect
@@ -3068,10 +3070,22 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
          (setq header
                (make-full-mail-header
                 number                 ; number
-                (funcall
-                 gnus-unstructured-field-decoder (gnus-nov-field)) ; subject
-                (funcall
-                 gnus-structured-field-decoder (gnus-nov-field)) ; from
+                (progn
+                  (setq rawtext (gnus-nov-field) ; subject
+                        decoded (funcall
+                                 gnus-unstructured-field-decoder rawtext))
+                  (if (string= rawtext decoded)
+                      rawtext
+                    (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+                    decoded))
+                (progn
+                  (setq rawtext (gnus-nov-field) ; from
+                        decoded (funcall
+                                 gnus-structured-field-decoder rawtext))
+                  (if (string= rawtext decoded)
+                      rawtext
+                    (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+                    decoded))
                 (gnus-nov-field)       ; date
                 (or (gnus-nov-field)
                     (nnheader-generate-fake-message-id)) ; id
@@ -3126,7 +3140,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
   "Read all the headers."
   (let ((gnus-summary-ignore-duplicates t)
        (dependencies gnus-newsgroup-dependencies)
-       found header article)
+       header article)
     (save-excursion
       (set-buffer nntp-server-buffer)
       (let ((case-fold-search nil))
@@ -3137,14 +3151,16 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
                  header (gnus-nov-parse-line
                          article dependencies)))
          (when header
-           (push header gnus-newsgroup-headers)
-           (if (memq (setq article (mail-header-number header))
-                     gnus-newsgroup-unselected)
-               (progn
-                 (push article gnus-newsgroup-unreads)
-                 (setq gnus-newsgroup-unselected
-                       (delq article gnus-newsgroup-unselected)))
-             (push article gnus-newsgroup-ancient))
+           (save-excursion
+             (set-buffer gnus-summary-buffer)
+             (push header gnus-newsgroup-headers)
+             (if (memq (setq article (mail-header-number header))
+                       gnus-newsgroup-unselected)
+                 (progn
+                   (push article gnus-newsgroup-unreads)
+                   (setq gnus-newsgroup-unselected
+                         (delq article gnus-newsgroup-unselected)))
+               (push article gnus-newsgroup-ancient)))
            (forward-line 1)))))))
 
 (defun gnus-summary-update-article-line (article header)
@@ -3205,9 +3221,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
                  references))
               "none")))
         (buffer-read-only nil)
-        (old (car thread))
-        (number (mail-header-number header))
-        pos)
+        (old (car thread)))
     (when thread
       (unless iheader
        (setcar thread nil)
@@ -3418,10 +3432,10 @@ If LINE, insert the rebuilt thread starting on line LINE."
   "Sort THREADS."
   (if (not gnus-thread-sort-functions)
       threads
-    (gnus-message 7 "Sorting threads...")
+    (gnus-message 8 "Sorting threads...")
     (prog1
        (sort threads (gnus-make-sort-function gnus-thread-sort-functions))
-      (gnus-message 7 "Sorting threads...done"))))
+      (gnus-message 8 "Sorting threads...done"))))
 
 (defun gnus-sort-articles (articles)
   "Sort ARTICLES."
@@ -4377,13 +4391,14 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (or dependencies
             (save-excursion (set-buffer gnus-summary-buffer)
                             gnus-newsgroup-dependencies)))
-       headers id id-dep ref-dep end ref)
+       headers id end ref)
     (save-excursion
       (set-buffer nntp-server-buffer)
       ;; Translate all TAB characters into SPACE characters.
       (subst-char-in-region (point-min) (point-max) ?\t ?  t)
       (gnus-run-hooks 'gnus-parse-headers-hook)
       (let ((case-fold-search t)
+           rawtext decoded
            in-reply-to header p lines chars)
        (goto-char (point-min))
        ;; Search to the beginning of the next header.  Error messages
@@ -4413,15 +4428,27 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (if (search-forward "\nsubject: " nil t)
-                 (funcall
-                  gnus-unstructured-field-decoder (nnheader-header-value))
+                 (progn
+                   (setq rawtext (nnheader-header-value)
+                         decoded (funcall
+                                  gnus-unstructured-field-decoder rawtext))
+                   (if (string-equal rawtext decoded)
+                       rawtext
+                     (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+                     decoded))
                "(none)"))
            ;; From.
            (progn
              (goto-char p)
              (if (search-forward "\nfrom: " nil t)
-                 (funcall
-                  gnus-structured-field-decoder (nnheader-header-value))
+                 (progn
+                   (setq rawtext (nnheader-header-value)
+                         decoded (funcall
+                                  gnus-structured-field-decoder rawtext))
+                   (if (string-equal rawtext decoded)
+                       rawtext
+                     (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+                     decoded))
                "(nobody)"))
            ;; Date.
            (progn
@@ -4597,7 +4624,7 @@ the subject line on."
                      (t
                       (gnus-read-header id))))
        (number (and (numberp id) id))
-       pos d)
+       d)
     (when header
       ;; Rebuild the thread that this article is part of and go to the
       ;; article we have fetched.
@@ -6396,8 +6423,7 @@ of what's specified by the `gnus-refer-thread-limit' variable."
   (interactive "P")
   (let ((id (mail-header-id (gnus-summary-article-header)))
        (limit (if limit (prefix-numeric-value limit)
-                gnus-refer-thread-limit))
-       fmethod root)
+                gnus-refer-thread-limit)))
     ;; We want to fetch LIMIT *old* headers, but we also have to
     ;; re-fetch all the headers in the current buffer, because many of
     ;; them may be undisplayed.  So we adjust LIMIT.
@@ -6432,8 +6458,7 @@ or `gnus-select-method', no matter what backend the article comes from."
                        (gnus-summary-article-sparse-p
                         (mail-header-number header))
                        (memq (mail-header-number header)
-                             gnus-newsgroup-limit)))
-          h)
+                             gnus-newsgroup-limit))))
       (cond
        ;; If the article is present in the buffer we just go to it.
        ((and header
@@ -7005,15 +7030,10 @@ and `request-accept' functions."
        (gnus-summary-mark-article article gnus-canceled-mark)
        (gnus-message 4 "Deleted article %s" article))
        (t
-       (let* ((entry
-               (or
-                (gnus-gethash (car art-group) gnus-newsrc-hashtb)
-                (gnus-gethash
-                 (gnus-group-prefixed-name
-                  (car art-group)
-                  (or select-method
-                      (gnus-find-method-for-group to-newsgroup)))
-                 gnus-newsrc-hashtb)))
+       (let* ((pto-group (gnus-group-prefixed-name
+                          (car art-group) to-method))
+              (entry
+               (gnus-gethash pto-group gnus-newsrc-hashtb))
               (info (nth 2 entry))
               (to-group (gnus-info-group info)))
          ;; Update the group that has been moved to.
@@ -8554,8 +8574,7 @@ save those articles instead."
   "Pipe the current article through PROGRAM."
   (interactive "sProgram: ")
   (gnus-summary-select-article)
-  (let ((mail-header-separator "")
-        (art-buf (get-buffer gnus-article-buffer)))
+  (let ((mail-header-separator ""))
     (gnus-eval-in-buffer-window gnus-article-buffer
       (save-restriction
         (widen)
index 876e2fc..38e6bce 100644 (file)
         (set symbol nil))
      symbol))
 
-(defun gnus-string-width (str)
-  (length str))
-
-(defun gnus-truncate-string (str width)
+;; Avoid byte-compile warning.
+;; In Mule, this function will be redefined to `truncate-string',
+;; which takes 3 or 4 args.
+(defun gnus-truncate-string (str width &rest ignore)
   (substring str 0 width))
 
 ;; Added by Geoffrey T. Dairiki <dairiki@u.washington.edu>.  A safe way
@@ -841,8 +841,7 @@ with potentially long computations."
 (defun gnus-map-function (funs arg)
   "Applies the result of the first function in FUNS to the second, and so on.
 ARG is passed to the first function."
-  (let ((myfuns funs)
-        (myarg arg))
+  (let ((myfuns funs))
     (while myfuns
       (setq arg (funcall (pop myfuns) arg)))
     arg))
@@ -943,6 +942,7 @@ ARG is passed to the first function."
 
 ;;; Various
 
+(defvar gnus-group-buffer) ; Compiler directive
 (defun gnus-alive-p ()
   "Say whether Gnus is running or not."
   (and (boundp 'gnus-group-buffer)
index dee2d04..19929f3 100644 (file)
@@ -513,7 +513,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive "P")
   (let ((gnus-uu-save-in-digest t)
        (file (make-temp-name (nnheader-concat gnus-uu-tmp-dir "forward")))
-       buf subject from newsgroups)
+       buf subject from)
     (gnus-setup-message 'forward
       (setq gnus-uu-digest-from-subject nil)
       (gnus-uu-decode-save n file)
@@ -638,7 +638,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "Invert the list of process-marked articles."
   (interactive)
   (let ((data gnus-newsgroup-data)
-       d number)
+       number)
     (save-excursion
       (while data
        (if (memq (setq number (gnus-data-number (pop data)))
@@ -828,7 +828,6 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                  (mail-header-subject header))
            gnus-uu-digest-from-subject))
     (let ((name (file-name-nondirectory gnus-uu-saved-article-name))
-         (delim (concat "^" (make-string 30 ?-) "$"))
          beg subj headers headline sorthead body end-string state)
       (if (or (eq in-state 'first)
              (eq in-state 'first-and-last))
@@ -1023,34 +1022,33 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   ;; replaces the last thing that looks like "2/3" with "[0-9]+/3"
   ;; or, if it can't find something like that, tries "2 of 3", then
   ;; finally just replaces the next to last number with "[0-9]+".
-  (let ((count 2))
-    (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
-      (buffer-disable-undo (current-buffer))
-      (erase-buffer)
-      (insert (regexp-quote string))
+  (save-excursion
+    (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+    (buffer-disable-undo (current-buffer))
+    (erase-buffer)
+    (insert (regexp-quote string))
+
+    (setq case-fold-search nil)
 
-      (setq case-fold-search nil)
+    (end-of-line)
+    (if (re-search-backward "\\([^0-9]\\)[0-9]+/\\([0-9]+\\)" nil t)
+       (replace-match "\\1[0-9]+/\\2")
 
       (end-of-line)
-      (if (re-search-backward "\\([^0-9]\\)[0-9]+/\\([0-9]+\\)" nil t)
-         (replace-match "\\1[0-9]+/\\2")
+      (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*\\([0-9]+\\)"
+                             nil t)
+         (replace-match "\\1[0-9]+ of \\2")
 
        (end-of-line)
-       (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*\\([0-9]+\\)"
+       (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
                                nil t)
-           (replace-match "\\1[0-9]+ of \\2")
-
-         (end-of-line)
-          (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
-                                  nil t)
-              (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
+           (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
 
-      (goto-char 1)
-      (while (re-search-forward "[ \t]+" nil t)
-       (replace-match "[ \t]+" t t))
+    (goto-char 1)
+    (while (re-search-forward "[ \t]+" nil t)
+      (replace-match "[ \t]+" t t))
 
-      (buffer-substring 1 (point-max)))))
+    (buffer-substring 1 (point-max))))
 
 (defun gnus-uu-get-list-of-articles (n)
   ;; If N is non-nil, the article numbers of the N next articles
@@ -1212,120 +1210,121 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                    (not (memq 'end process-state))))
 
       (setq article (pop articles))
-      (push article article-series)
+      (when (vectorp (gnus-summary-article-header article))
+       (push article article-series)
 
-      (unless articles
-       (if (eq state 'first)
-           (setq state 'first-and-last)
-         (setq state 'last)))
+       (unless articles
+         (if (eq state 'first)
+             (setq state 'first-and-last)
+           (setq state 'last)))
 
-      (let ((part (gnus-uu-part-number article)))
-       (gnus-message 6 "Getting article %d%s..."
-                     article (if (string= part "") "" (concat ", " part))))
-      (gnus-summary-display-article article)
+       (let ((part (gnus-uu-part-number article)))
+         (gnus-message 6 "Getting article %d%s..."
+                       article (if (string= part "") "" (concat ", " part))))
+       (gnus-summary-display-article article)
 
-      ;; Push the article to the processing function.
-      (save-excursion
-       (set-buffer gnus-original-article-buffer)
-       (let ((buffer-read-only nil))
-         (save-excursion
-           (set-buffer gnus-summary-buffer)
-           (setq process-state
-                 (funcall process-function
-                          gnus-original-article-buffer state)))))
-
-      (gnus-summary-remove-process-mark article)
-
-      ;; If this is the beginning of a decoded file, we push it
-      ;; on to a list.
-      (when (or (memq 'begin process-state)
-               (and (or (eq state 'first)
-                        (eq state 'first-and-last))
-                    (memq 'ok process-state)))
-       (when has-been-begin
-         ;; If there is a `result-file' here, that means that the
-         ;; file was unsuccessfully decoded, so we delete it.
-         (when (and result-file
-                    (file-exists-p result-file)
-                    (not gnus-uu-be-dangerous)
-                    (or (eq gnus-uu-be-dangerous t)
-                        (gnus-y-or-n-p
-                         (format "Delete unsuccessfully decoded file %s"
-                                 result-file))))
-           (delete-file result-file)))
-       (when (memq 'begin process-state)
-         (setq result-file (car process-state)))
-       (setq has-been-begin t))
-
-      ;; Check whether we have decoded one complete file.
-      (when (memq 'end process-state)
-       (setq article-series nil)
-       (setq has-been-begin nil)
-       (if (stringp result-file)
-           (setq files (list result-file))
-         (setq files result-file))
-       (setq result-file (car files))
-       (while files
-         (push (list (cons 'name (pop files))
-                     (cons 'article article))
-               result-files))
-       ;; Allow user-defined functions to be run on this file.
-       (when gnus-uu-grabbed-file-functions
-         (let ((funcs gnus-uu-grabbed-file-functions))
-           (unless (listp funcs)
-             (setq funcs (list funcs)))
-           (while funcs
-             (funcall (pop funcs) result-file))))
-       (setq result-file nil)
-       ;; Check whether we have decoded enough articles.
-       (and limit (= (length result-files) limit)
-            (setq articles nil)))
-
-      ;; If this is the last article to be decoded, and
-      ;; we still haven't reached the end, then we delete
-      ;; the partially decoded file.
-      (and (or (eq state 'last) (eq state 'first-and-last))
-          (not (memq 'end process-state))
-          result-file
-          (file-exists-p result-file)
-          (not gnus-uu-be-dangerous)
-          (or (eq gnus-uu-be-dangerous t)
-              (gnus-y-or-n-p
-               (format "Delete incomplete file %s? " result-file)))
-          (delete-file result-file))
-
-      ;; If this was a file of the wrong sort, then
-      (when (and (or (memq 'wrong-type process-state)
-                    (memq 'error process-state))
-                gnus-uu-unmark-articles-not-decoded)
-       (gnus-summary-tick-article article t))
-
-      ;; Set the new series state.
-      (if (and (not has-been-begin)
-              (not sloppy)
-              (or (memq 'end process-state)
-                  (memq 'middle process-state)))
-         (progn
-           (setq process-state (list 'error))
-           (gnus-message 2 "No begin part at the beginning")
-           (sleep-for 2))
-       (setq state 'middle)))
-
-    ;; When there are no result-files, then something must be wrong.
-    (if result-files
-       (message "")
-      (cond
-       ((not has-been-begin)
-       (gnus-message 2 "Wrong type file"))
-       ((memq 'error process-state)
-       (gnus-message 2 "An error occurred during decoding"))
-       ((not (or (memq 'ok process-state)
-                (memq 'end process-state)))
-       (gnus-message 2 "End of articles reached before end of file")))
-      ;; Make unsuccessfully decoded articles unread.
-      (when gnus-uu-unmark-articles-not-decoded
-       (while article-series
-         (gnus-summary-tick-article (pop article-series) t))))
+       ;; Push the article to the processing function.
+       (save-excursion
+         (set-buffer gnus-original-article-buffer)
+         (let ((buffer-read-only nil))
+           (save-excursion
+             (set-buffer gnus-summary-buffer)
+             (setq process-state
+                   (funcall process-function
+                            gnus-original-article-buffer state)))))
+
+       (gnus-summary-remove-process-mark article)
+
+       ;; If this is the beginning of a decoded file, we push it
+       ;; on to a list.
+       (when (or (memq 'begin process-state)
+                 (and (or (eq state 'first)
+                          (eq state 'first-and-last))
+                      (memq 'ok process-state)))
+         (when has-been-begin
+           ;; If there is a `result-file' here, that means that the
+           ;; file was unsuccessfully decoded, so we delete it.
+           (when (and result-file
+                      (file-exists-p result-file)
+                      (not gnus-uu-be-dangerous)
+                      (or (eq gnus-uu-be-dangerous t)
+                          (gnus-y-or-n-p
+                           (format "Delete unsuccessfully decoded file %s"
+                                   result-file))))
+             (delete-file result-file)))
+         (when (memq 'begin process-state)
+           (setq result-file (car process-state)))
+         (setq has-been-begin t))
+
+       ;; Check whether we have decoded one complete file.
+       (when (memq 'end process-state)
+         (setq article-series nil)
+         (setq has-been-begin nil)
+         (if (stringp result-file)
+             (setq files (list result-file))
+           (setq files result-file))
+         (setq result-file (car files))
+         (while files
+           (push (list (cons 'name (pop files))
+                       (cons 'article article))
+                 result-files))
+         ;; Allow user-defined functions to be run on this file.
+         (when gnus-uu-grabbed-file-functions
+           (let ((funcs gnus-uu-grabbed-file-functions))
+             (unless (listp funcs)
+               (setq funcs (list funcs)))
+             (while funcs
+               (funcall (pop funcs) result-file))))
+         (setq result-file nil)
+         ;; Check whether we have decoded enough articles.
+         (and limit (= (length result-files) limit)
+              (setq articles nil)))
+
+       ;; If this is the last article to be decoded, and
+       ;; we still haven't reached the end, then we delete
+       ;; the partially decoded file.
+       (and (or (eq state 'last) (eq state 'first-and-last))
+            (not (memq 'end process-state))
+            result-file
+            (file-exists-p result-file)
+            (not gnus-uu-be-dangerous)
+            (or (eq gnus-uu-be-dangerous t)
+                (gnus-y-or-n-p
+                 (format "Delete incomplete file %s? " result-file)))
+            (delete-file result-file))
+
+       ;; If this was a file of the wrong sort, then
+       (when (and (or (memq 'wrong-type process-state)
+                      (memq 'error process-state))
+                  gnus-uu-unmark-articles-not-decoded)
+         (gnus-summary-tick-article article t))
+
+       ;; Set the new series state.
+       (if (and (not has-been-begin)
+                (not sloppy)
+                (or (memq 'end process-state)
+                    (memq 'middle process-state)))
+           (progn
+             (setq process-state (list 'error))
+             (gnus-message 2 "No begin part at the beginning")
+             (sleep-for 2))
+         (setq state 'middle)))
+
+      ;; When there are no result-files, then something must be wrong.
+      (if result-files
+         (message "")
+       (cond
+        ((not has-been-begin)
+         (gnus-message 2 "Wrong type file"))
+        ((memq 'error process-state)
+         (gnus-message 2 "An error occurred during decoding"))
+        ((not (or (memq 'ok process-state)
+                  (memq 'end process-state)))
+         (gnus-message 2 "End of articles reached before end of file")))
+       ;; Make unsuccessfully decoded articles unread.
+       (when gnus-uu-unmark-articles-not-decoded
+         (while article-series
+           (gnus-summary-tick-article (pop article-series) t)))))
 
     result-files))
 
@@ -1926,7 +1925,7 @@ If no file has been included, the user will be asked for a file."
        (top-string "[ cut here %s (%s %d/%d) %s gnus-uu ]")
        (separator (concat mail-header-separator "\n\n"))
        uubuf length parts header i end beg
-       beg-line minlen buf post-buf whole-len beg-binary end-binary)
+       beg-line minlen post-buf whole-len beg-binary end-binary)
 
     (setq post-buf (current-buffer))
 
index 00fc583..d8106d1 100644 (file)
@@ -478,7 +478,28 @@ call it with the value of the `gnus-data' text property."
            'x-color-values
          (lambda (color)
            (color-instance-rgb-components
-            (make-color-instance color))))))
+            (make-color-instance color)))))
+
+  (when (featurep 'mule)
+    (defun gnus-tilde-pad-form (el pad-width)
+      "Return a form that pads EL to PAD-WIDTH."
+      (let ((pad (abs pad-width)))
+       (if (symbolp el)
+           (if (< pad-width 0)
+               `(concat ,el (make-string
+                             (max 0 (- ,pad (string-width ,el))) ?\ ))
+             `(concat (make-string
+                       (max 0 (- ,pad (string-width ,el))) ?\ )
+                      ,el))
+         (if (< pad-width 0)
+             `(let ((val (eval ,el)))
+                (concat val (make-string
+                             (max 0 (- ,pad (string-width val))) ?\ )))
+           `(let ((val (eval ,el)))
+              (concat (make-string
+                       (max 0 (- ,pad (string-width val))) ?\ )
+                      val))))))
+    ))
 
 (defun gnus-xmas-redefine ()
   "Redefine lots of Gnus functions for XEmacs."
@@ -524,8 +545,91 @@ call it with the value of the `gnus-data' text property."
   (add-hook 'gnus-draft-mode-hook 'gnus-xmas-draft-menu-add)
   (add-hook 'gnus-summary-mode-hook
            'gnus-xmas-switch-horizontal-scrollbar-off)
-  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
-
+  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off)
+
+  (when (featurep 'mule)
+    (defun gnus-truncate-string (str end-column &optional start-column padding)
+      "Truncate string STR to end at column END-COLUMN.
+The optional 2nd arg START-COLUMN, if non-nil, specifies
+the starting column; that means to return the characters occupying
+columns START-COLUMN ... END-COLUMN of STR.
+
+The optional 3rd arg PADDING, if non-nil, specifies a padding character
+to add at the end of the result if STR doesn't reach column END-COLUMN,
+or if END-COLUMN comes in the middle of a character in STR.
+PADDING is also added at the beginning of the result
+if column START-COLUMN appears in the middle of a character in STR.
+
+If PADDING is nil, no padding is added in these cases, so
+the resulting string may be narrower than END-COLUMN.
+\[Emacs 20.3 emulating function]"
+      (or start-column
+         (setq start-column 0))
+      (let ((len (length str))
+           (idx 0)
+           (column 0)
+           (head-padding "") (tail-padding "")
+           ch last-column last-idx from-idx)
+       (condition-case nil
+           (while (< column start-column)
+             (setq ch (aref str idx)
+                   column (+ column (char-width ch))
+                   idx (1+ idx)))
+         (args-out-of-range (setq idx len)))
+       (if (< column start-column)
+           (if padding (make-string end-column padding) "")
+         (if (and padding (> column start-column))
+             (setq head-padding
+                   (make-string (- column start-column) padding)))
+         (setq from-idx idx)
+         (if (< end-column column)
+             (setq idx from-idx)
+           (condition-case nil
+               (while (< column end-column)
+                 (setq last-column column
+                       last-idx idx
+                       ch (aref str idx)
+                       column (+ column (char-width ch))
+                       idx (1+ idx)))
+             (args-out-of-range (setq idx len)))
+           (if (> column end-column)
+               (setq column last-column idx last-idx))
+           (if (and padding (< column end-column))
+               (setq tail-padding
+                     (make-string (- end-column column) padding))))
+         (setq str (substring str from-idx idx))
+         (if padding
+             (concat head-padding str tail-padding)
+           str))))
+
+    (defun gnus-tilde-max-form (el max-width)
+      "Return a form that limits EL to MAX-WIDTH."
+      (let ((max (abs max-width)))
+       (if (symbolp el)
+           (if (< max-width 0)
+               `(let ((width (string-width ,el)))
+                  (gnus-truncate-string ,el width (- width ,max)))
+             `(gnus-truncate-string ,el ,max))
+         (if (< max-width 0)
+             `(let* ((val (eval ,el))
+                     (width (string-width val)))
+                (gnus-truncate-string val width (- width ,max)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val ,max))))))
+
+    (defun gnus-tilde-cut-form (el cut-width)
+      "Return a form that cuts CUT-WIDTH off of EL."
+      (let ((cut (abs cut-width)))
+       (if (symbolp el)
+           (if (< cut-width 0)
+               `(gnus-truncate-string ,el (- (string-width ,el) ,cut))
+             `(gnus-truncate-string ,el (string-width ,el) ,cut))
+         (if (< cut-width 0)
+             `(let ((val (eval ,el)))
+                (gnus-truncate-string val (- (string-width val) ,cut)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val (string-width val) ,cut))))))
+    ))
 
 ;;; XEmacs logo and toolbar.
 
index d8daa9d..c131844 100644 (file)
@@ -253,11 +253,11 @@ is restarted, and sometimes reloaded."
 (defconst gnus-product-name "T-gnus"
   "Product name of this version of gnus.")
 
-(defconst gnus-version-number "6.8.15"
+(defconst gnus-version-number "6.8.16"
   "Version number for this version of gnus.")
 
 (defconst gnus-version
-  (format "%s %s (based on Gnus 5.6.39; for SEMI 1.8, FLIM 1.8/1.9)"
+  (format "%s %s (based on Gnus 5.6.41; for SEMI 1.8, FLIM 1.8/1.9)"
           gnus-product-name gnus-version-number)
   "Version string for this version of gnus.")
 
@@ -778,7 +778,7 @@ used to 899, you would say something along these lines:
   :group 'gnus-files
   :group 'gnus-server
   :type 'file)
-
+  
 ;; This function is used to check both the environment variable
 ;; NNTPSERVER and the /etc/nntpserver file to see whether one can find
 ;; an nntp server name default.
@@ -1710,7 +1710,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-start-date-timer gnus-stop-date-timer)
      ("gnus-int" gnus-request-type)
      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
-      gnus-dribble-enter gnus-read-init-file)
+      gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
      ("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article
       gnus-dup-enter-articles)
      ("gnus-range" gnus-copy-sequence)
@@ -1981,12 +1981,9 @@ STRINGS will be evaluated in normal `or' order."
   "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)
-    (if arg
-       (insert (message mess))
-      (message mess))))
+  (if arg
+      (insert (message gnus-version))
+    (message gnus-version)))
 
 (defun gnus-continuum-version (version)
   "Return VERSION as a floating point number."
index 4aa1177..58fdde1 100644 (file)
@@ -338,7 +338,7 @@ If t, use `message-user-organization-file'."
   :type 'string)
 
 (defcustom message-forward-end-separator
-  ""
+  (concat (mime-make-tag "text" "plain") "\n")
   "*Delimiter inserted after forwarded messages."
   :group 'message-forwarding
   :type 'string)
@@ -1917,6 +1917,7 @@ prefix, and don't delete any headers."
        (insert "\n"))
       (funcall message-citation-line-function))))
 
+(defvar mail-citation-hook) ;Compiler directive
 (defun message-cite-original ()
   "Cite function in the standard Message manner."
   (if (and (boundp 'mail-citation-hook)
@@ -3344,23 +3345,7 @@ Headers already prepared in the buffer are not modified."
 
 (defun message-pop-to-buffer (name)
   "Pop to buffer NAME, and warn if it already exists and is modified."
-  (let ((pop-up-frames pop-up-frames)
-       (special-display-buffer-names special-display-buffer-names)
-       (special-display-regexps special-display-regexps)
-       (same-window-buffer-names same-window-buffer-names)
-       (same-window-regexps same-window-regexps)
-       (buffer (get-buffer name))
-       (cur (current-buffer)))
-    (if (or (and (featurep 'xemacs)
-                (not (eq 'tty (device-type))))
-           window-system)
-       (when message-use-multi-frames
-         (setq pop-up-frames t
-               special-display-buffer-names nil
-               special-display-regexps nil
-               same-window-buffer-names nil
-               same-window-regexps nil))
-      (setq pop-up-frames nil))
+  (let ((buffer (get-buffer name)))
     (if (and buffer
             (buffer-name buffer))
        (progn
@@ -3884,13 +3869,18 @@ that further discussion should take place only in "
 This is done simply by taking the old article and adding a Supersedes
 header line with the old Message-ID."
   (interactive)
-  (let ((cur (current-buffer)))
+  (let ((cur (current-buffer))
+       (sender (message-fetch-field "sender"))
+       (from (message-fetch-field "from")))
     ;; Check whether the user owns the article that is to be superseded.
-    (unless (string-equal
-            (downcase (or (message-fetch-field "sender")
-                          (cadr (funcall gnus-extract-address-components
-                                         (message-fetch-field "from")))))
-            (downcase (message-make-sender)))
+    (unless (or (and sender
+                    (string-equal
+                     (downcase sender)
+                     (downcase (message-make-sender))))
+               (string-equal
+                (downcase (cadr (mail-extract-address-components from)))
+                (downcase (cadr (mail-extract-address-components
+                                 (message-make-from))))))
       (error "This article is not yours"))
     ;; Get a normal message buffer.
     (message-pop-to-buffer (message-buffer-name "supersede"))
@@ -3935,7 +3925,7 @@ header line with the old Message-ID."
     (goto-char (point-min))
     ;; strip Re/Fwd stuff off the beginning
     (while (re-search-forward
-           "\\([Rr][Ee]:\\|[Ff][Ww][Dd]:\\|[Ff][Ww]:\\)" nil t)
+           "\\([Rr][Ee]:\\|[Ff][Ww][Dd]\\(\\[[0-9]*\\]\\)?:\\|[Ff][Ww]:\\)" nil t)
       (replace-match ""))
 
     ;; and gnus-style forwards [foo@bar.com] subject
@@ -4261,7 +4251,6 @@ Do a `tab-to-tab-stop' if not in those headers."
                                            (point))))
         (hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
         (completions (all-completions string hashtb))
-        (cur (current-buffer))
         comp)
     (delete-region b (point))
     (cond
index b122d3e..38a0244 100644 (file)
@@ -331,10 +331,8 @@ Finds out what articles are to be part of the nnkiboze groups."
   (save-excursion
     (set-buffer buffer)
     (goto-char (point-max))
-    (let ((xref (mail-header-xref header))
-         (prefix (gnus-group-real-prefix group))
+    (let ((prefix (gnus-group-real-prefix group))
          (oheader (copy-sequence header))
-         (first t)
          article)
       (if (zerop (forward-line -1))
          (progn
index c359e95..8aafd7d 100644 (file)
 (deffoo nnmh-request-expire-articles (articles newsgroup
                                               &optional server force)
   (nnmh-possibly-change-directory newsgroup server)
-  (let* ((active-articles
-         (mapcar
-          (function
-           (lambda (name)
-             (string-to-int name)))
-          (directory-files nnmh-current-directory nil "^[0-9]+$" t)))
-        (is-old t)
+  (let* ((is-old t)
         article rest mod-time)
     (nnheader-init-server-buffer)
 
index a2b8009..487c72d 100644 (file)
@@ -549,7 +549,7 @@ If this variable is nil, which is the default, no timers are set.")
          (nntp-inhibit-erase t)
          (map (apply 'vector articles))
          (point 1)
-         article alist)
+         article)
       (set-buffer buf)
       (erase-buffer)
       ;; Send ARTICLE command.
index cc86c1a..d8bf70d 100644 (file)
@@ -276,10 +276,8 @@ to virtual article number.")
        (let ((mart (nnvirtual-map-article article)))
          (if mart
              (gnus-request-type (car mart) (cdr mart))))
-      (let ((method (gnus-find-method-for-group
-                    nnvirtual-last-accessed-component-group)))
-       (gnus-request-type
-        nnvirtual-last-accessed-component-group nil)))))
+      (gnus-request-type
+       nnvirtual-last-accessed-component-group nil))))
 
 (deffoo nnvirtual-request-update-mark (group article mark)
   (let* ((nart (nnvirtual-map-article article))
index 0524893..fd2879c 100644 (file)
@@ -1,3 +1,12 @@
+1998-08-27 07:29:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Mail Folders): Addition.
+
+1998-08-25 08:06:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Posting Styles): Document this-is.
+       (Virtual Groups): Addition.
+
 1998-08-18 00:30:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Article Hiding): Addition.
index 6468393..93d30d8 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus-ja
-@settitle Semi-gnus 6.8.13 Manual
+@settitle Semi-gnus 6.8.16 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -345,7 +345,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Semi-gnus 6.8.13 Manual
+@title Semi-gnus 6.8.16 Manual
 
 @author by Lars Magne Ingebrigtsen
 @author by members of Semi-gnus mailing-list
@@ -399,7 +399,7 @@ Semi-gnus \e$B$O!"Bg$-$J3($,F~$C$F$$$?$j$5$^$6$^$J7A<0$rMQ$$$?$j$7$F$$$k$A$g$C\e(B
 \e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
 \e$B$*BT$A$/$@$5$$!#\e(B
 
-\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.8.13 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.8.16 \e$B$KBP1~$7$^$9!#\e(B
 
 @end ifinfo
 
@@ -3720,12 +3720,12 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 @kindex SPACE \e$B!J35N,!K\e(B
 @findex gnus-summary-next-page
 @kbd{SPACE} \e$B$O5-;v$r0l%Z!<%8@h$K%9%/%m!<%k$7$^$9!#5-;v$N:G8e$K$$$k>l9g$O\e(B
-\e$B<!$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-prev-page})\e$B!#\e(B
+\e$B<!$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-next-page})\e$B!#\e(B
 
 @item DEL
 @kindex DEL \e$B!J35N,!K\e(B
 @findex gnus-summary-prev-page
-\e$B8=:_$N5-;v$r0l%Z!<%8A0$K%9%/%m!<%k$7$^$9\e(B (code{gnus-summary-prev-page})\e$B!#\e(B
+\e$B8=:_$N5-;v$r0l%Z!<%8A0$K%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-prev-page})\e$B!#\e(B
 
 @item RET
 @kindex RET \e$B!J35N,!K\e(B
@@ -6065,14 +6065,14 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 @kindex W H h \e$B!J35N,!K\e(B
 @findex gnus-article-highlight-headers
 @vindex gnus-header-face-alist
-\e$B%X%C%@!<$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-headers})\e$B!#%O%$%i\e(B
-\e$B%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=$l$>\e(B
-\e$B$l$NMWAG$,\e(B @var{(\e$B@55,I=8=\e(B \e$BL>A0\e(B \e$BFbMF\e(B)} \e$B$H$$$&MM<0$N%j%9%H$G$9!#\e(B @var{\e$B@55,I=\e(B
-\e$B8=\e(B}\e$B$O%X%C%@!<$K9gCW$9$k@55,I=8=!"\e(B@var{\e$BL>A0\e(B}\e$B$O%X%C%@!<$NL>A0$r%O%$%i%$%H$9\e(B
-\e$B$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{FacesandFonts})\e$B!"\e(B@var{\e$BFbMF\e(B}\e$B$O%X%C%@!<\e(B
-\e$B$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N$,;H$o$l$^$9!#\e(B@var{\e$B@5\e(B
-\e$B5,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U$7$F$/$@$5$$!=!=\e(Bgnus \e$B$,\e(B
-\e$B$=$l$rIU$12C$($^$9!#\e(B
+\e$B%X%C%@!<$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-headers})\e$B!#%O%$\e(B
+\e$B%i%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=\e(B
+\e$B$l$>$l$NMWAG$,\e(B @var{(\e$B@55,I=8=\e(B \e$BL>A0\e(B \e$BFbMF\e(B)} \e$B$H$$$&MM<0$N%j%9%H$G$9!#\e(B @var
+{\e$B@55,I=8=\e(B}\e$B$O%X%C%@!<$K9gCW$9$k@55,I=8=!"\e(B@var{\e$BL>A0\e(B}\e$B$O%X%C%@!<$NL>A0$r%O%$\e(B
+\e$B%i%$%H$9$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{Faces and Fonts})\e$B!"\e(B@var{\e$BFb\e(B
+\e$BMF\e(B}\e$B$O%X%C%@!<$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N$,;H$o\e(B
+\e$B$l$^$9!#\e(B@var{\e$B@55,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U$7$F$/\e(B
+\e$B$@$5$$!=!=\e(Bgnus \e$B$,$=$l$rIU$12C$($^$9!#\e(B
 
 @item W H c
 @kindex W H c \e$B!J35N,!K\e(B
@@ -6958,7 +6958,7 @@ gnus \e$B$N5-;vA*Br4X?t$r5-;v72$r\e(B uudecode \e$B$7$=$N7k2L$rI=<($9$k$h$&$KJQ99$9
 @vindex gnus-tree-mode-line-format
 \e$BLZ%b!<%I%P%C%U%!$G$N%b!<%I9T$N$?$a$N%U%)!<%^%C%HJ8;zNs$G$9\e(B (@pxref{Mode
 Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=\e(B
-\e$B$J;XDj$O\e(B @pxref{Summary Buffer ModeLine} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+\e$B$J;XDj$O\e(B @pxref{Summary Buffer Mode Line} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 
 @item gnus-selected-tree-face
 @vindex gnus-selected-tree-face
@@ -9686,7 +9686,7 @@ Unix mbox \e$B%U%!%$%k$,=EMW$@$1$l$I8E$$%a!<%k$GK~$?$5$l$F$$$^$9!#$"$J$?$O$=\e(B
 
 @item
 `G f' \e$B$HBG$C$F!"\e(Bmbox \e$B%U%!%$%k$+$i\e(B @code{nndoc} \e$B%0%k!<%W$r:n@.$9$k$h$&$K\e(B
-\e$BB%?J$5$l$?$H$-$K\e(B mbox \e$B%U%!%$%k$X$N%Q%9$rM?$($^$9\e(B (@pxref{Foregin
+\e$BB%?J$5$l$?$H$-$K\e(B mbox \e$B%U%!%$%k$X$N%Q%9$rM?$($^$9\e(B (@pxref{Foreign
 Groups})\e$B!#\e(B
 
 @item
@@ -9803,7 +9803,7 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 @code{never} \e$B$N$I$A$i$+$G$"$k;v$,$G$-$^$9!#\e(B
 
 \e$B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<%?\e(B 
-@code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Groups Parameters})\e$B!#\e(B
+@code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Group Parameters})\e$B!#\e(B
 
 @vindex nnmail-keep-last-article
 @code{nnmail-keep-last-article} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O%a!<%k%K%e!<\e(B
@@ -11535,7 +11535,7 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @kindex J S (Agent Group)
 @findex gnus-group-send-drafts
 \e$B2<=q$-%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9$k\e(B
-(@code{gnus-agent-fetch-session})\e$B!#\e(B @xref{Drafts}
+(@code{gnus-group-send-session})\e$B!#\e(B @xref{Drafts}
 
 @item J a
 @kindex J a (Agent Group)
@@ -13312,7 +13312,7 @@ bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B9000\e$B$G$9!#\e(B
 \e$BL>$OC1=c$J%9%3%"IU$1$r$9$k$H$-$N$b$N$HF1$8$G!"9gCW$N7?$bF1$8$G$9!#\e(B
 
 
-@node Advanced Scring Examples
+@node Advanced Scoring Examples
 @subsection \e$B>e5i%9%3%"IU$1$NNc\e(B
 
 Lars \e$B$,\e(B Gnus \e$B$K4X$7$FOC$r$7$F$$$k$H$-$KH`$K$h$C$F=q$+$l$?5-;v$N%9%3%"$r\e(B
@@ -13748,8 +13748,8 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 \e$BA^F~$5$l$^$9!#4X?t$O0UL#$NL5$$CM$H6&$K8F$P$l$k;v$b$"$j$($^$9$N$G!"$=$l$N\e(B
 \e$BBP:v$r$9$k$Y$-$G$9!#\e(B
 
-\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formattin}) \e$B$r\e(B
-\e$B;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
+\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formatting}) 
+\e$B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
 (count-lines (point-min) (point)))@@}\e$B!#$3$3$GM?$($i$l$?<0$OI>2A$5$l$F!"\e(B
 \e$B8=:_$N9T?t$r$b$?$i$7!"$=$l$+$iA^F~$5$l$^$9!#\e(B
 
@@ -14279,9 +14279,9 @@ Gnus \e$B$O$5$^$6$^$J@)8f;R\e(B @dfn{handlers} \e$B$rDj5A$9$k$3$H$K$h$C$F$=\e(B
 (gnus-demon-scan-pgp 60 t)
 @end lisp
 
-\e$B$3$N\e(B @var{\e$B;~4V\e(B} \e$B%Q%i%a!<%?$H$=$7$F\e(B @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$O!"4qL/\e(B
-\e$B$G$+$DAG@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var {\e$B6uE>\e(B} 
-\e$B$,\e(B @code{nil} \e$B$N;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
+\e$B$3$N\e(B @var{\e$B;~4V\e(B} \e$B%Q%i%a!<%?$H$=$7$F\e(B @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$O!"4qL/$G$+$DAG\e(B
+\e$B@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var{\e$B6uE>\e(B} \e$B$,\e(B @code{nil} \e$B$N\e(B
+\e$B;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
 
 \e$B$b$7\e(B @var{\e$B6uE>\e(B} \e$B$,\e(B @code{t} \e$B$G$"$l$P!"$3$N4X?t$O\e(B Emacs \e$B$,2?$b$7\e(B
 \e$B$F$$$J$$;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,8e$K8F$S=P$5$l$^$9!#0lC6\e(B Emacs \e$B$,\e(B
@@ -14415,17 +14415,16 @@ Richard E. Depew --- \e$B%"%a%j%+$NC1FHH?%9%Q%`2H!#<g$KHs%P%$%J%j%0\e(B
 \e$B$^$9!#\e(B
 @end table
 
-\e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B 
---- \e$B8@$&$3$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM
-\e$B%a%C%;!<%8A4$F$r<u$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O\e(B
-\e$B$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<\e(B
-\e$B%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O87L)$J!"DxEY$M!#$?$$$F$$$O>/\e(B
-\e$B$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B @samp{spew}\e$B!"\e(B 
-@samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r;XDj$9\e(B
-\e$B$k$K$O!"%j%9%H$NCf$G\e(B @var{(\e$BH/9T<T\e(B \e$B>r7o\e(B ...)} \e$BMWAG$r;H$&I,MW$,$"\e(B
-\e$B$j$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) \e$B$+!"$^\e(B
-\e$B$?$O\e(B @code {(not \e$BJ8;zNs\e(B)} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B 
-@var{\e$BJ8;zNs\e(B} \e$B$O;H$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
+\e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B --- \e$B8@$&$3\e(B
+\e$B$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM\e$B%a%C%;!<%8A4$F$r<u\e(B
+\e$B$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C\e(B
+\e$B%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O\e(B
+\e$B87L)$J!"DxEY$M!#$?$$$F$$$O>/$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B 
+@samp{spew}\e$B!"\e(B @samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r\e(B
+\e$B;XDj$9$k$K$O!"%j%9%H$NCf$G\e(B @var{(\e$BH/9T<T\e(B \e$B>r7o\e(B ...)} \e$BMWAG$r;H$&I,MW$,$"$j\e(B
+\e$B$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) \e$B$+!"$^$?$O\e(B 
+@code{(not \e$BJ8;zNs\e(B)} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B @var{\e$BJ8;zNs\e(B} \e$B$O;H\e(B
+\e$B$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
 
 \e$BNc$($P!"\e(BChris Lewis \e$B$+$i$N\e(B NoCeM \e$B%a%C%;!<%8$G!"\e(B@samp{troll} \e$B%a%C\e(B
 \e$B%;!<%80J30$NA4$F$rM_$7$$>l9g$K$O!"\e(B
@@ -15704,13 +15703,16 @@ Rajappa Iyer,
 Andreas Jaeger,
 Randell Jesup,
 Fred Johansen,
+Gareth Jones,
 Simon Josefsson,
 Greg Klanderman,
 Karl Kleinpaste,
 Peter Skov Knudsen,
 Shuhei Kobayashi, @c Kobayashi
+Koseki Yoshinori, @c Koseki
 Thor Kristoffersen,
 Jens Lautenbacher,
+Martin Larose,
 Seokchan Lee, @c Lee
 Carsten Leonhardt,
 James LewisMoss,
@@ -15742,7 +15744,9 @@ William Perry,
 Stephen Peters,
 Jens-Ulrik Holger Petersen,
 Ulrich Pfeifer,
+Matt Pharr,
 John McClary Prevost,
+Bill Pringlemeir,
 Mike Pullen,
 Jim Radford,
 Colin Rafferty,
@@ -15781,6 +15785,7 @@ Teddy,
 Chuck Thompson,
 Philippe Troin,
 James Troup,
+Trung Tran-Duc,
 Aaron M. Ucko,
 Aki Vehtari,
 Didier Verna,
@@ -16039,7 +16044,7 @@ Gnus \e$B%-%c%C%7%e$,$:$C$HB.$/$J$j$^$7$?!#\e(B
 
 @item
 \e$B%0%k!<%W$rB?$/$N4p=`$K=>$C$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B 
-(@pxref{Soring Groups})\e$B!#\e(B
+(@pxref{Sorting Groups})\e$B!#\e(B
 
 @item
 \e$B%"%I%l%9$N%j%9%H$H4|8B@Z$l>C5n$N;~4V$r@_Dj$9$k?7$7$$%0%k!<%W%Q%i%a!<%?$,\e(B
@@ -16060,7 +16065,7 @@ Gnus \e$B%-%c%C%7%e$,$:$C$HB.$/$J$j$^$7$?!#\e(B
 
 @item
 @kbd{*} \e$BL?Na$K$h$C$F!"5-;v$r1JB3$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
-(@pxref{Presistent Articles})\e$B!#\e(B
+(@pxref{Persistent Articles})\e$B!#\e(B
 
 @item
 \e$B5-;v$NMWAG$r1#$9A4$F$N4X?t$O@Z$jBX$(4X?t$K$J$j$^$7$?!#\e(B
index 5b8a226..28b0dee 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Semi-gnus 6.8.13 Manual
+@settitle Semi-gnus 6.8.16 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -318,7 +318,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Semi-gnus 6.8.13 Manual
+@title Semi-gnus 6.8.16 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -361,7 +361,7 @@ internationalization/localization and multiscript features based on MULE
 API.  So Semi-gnus does not discriminate various language communities.
 Oh, if you are a Klingon, please wait Unicode Next Generation.
 
-This manual corresponds to Semi-gnus 6.8.13.
+This manual corresponds to Semi-gnus 6.8.16.
 
 @end ifinfo
 
@@ -8407,6 +8407,14 @@ The attribute value can be a string (used verbatim), a function (the
 return value will be used), a variable (its value will be used) or a
 list (it will be @code{eval}ed and the return value will be used).
 
+If you wish to check whether the message you are about to compose is
+meant to be a news article or a mail message, you can check the values
+of the two dynamically bound variables @code{message-this-is-news} and
+@code{message-this-is-mail}.
+
+@vindex message-this-is-mail
+@vindex message-this-is-news
+
 So here's a new example:
 
 @lisp
@@ -8420,6 +8428,8 @@ So here's a new example:
          (signature my-funny-signature-randomizer))
         ((equal (system-name) "gnarly")
          (signature my-quote-randomizer))
+        (message-this-is-new
+         (signature my-news-signature))
         (posting-from-work-p
          (signature-file "~/.work-signature")
          (address "user@@bar.foo")
@@ -10394,8 +10404,25 @@ The name of the group descriptions file.  @xref{Newsgroups File Format}.
 @item nnfolder-get-new-mail
 @vindex nnfolder-get-new-mail
 If non-@code{nil}, @code{nnfolder} will read incoming mail.
+
+@item nnfolder-save-buffer-hook
+@vindex nnfolder-save-buffer-hook
+@cindex backup files
+Hook run before saving the folders.  Note that Emacs does the normal
+backup renaming of files even with the @code{nnfolder} buffers.  If you
+wish to switch this off, you could say something like the following in
+your @file{.emacs} file:
+
+@lisp
+(defun turn-off-backup ()
+  (set (make-local-variable 'backup-inhibited) t))
+
+(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
+@end lisp
+
 @end table
 
+
 @findex nnfolder-generate-active-file
 @kindex M-x nnfolder-generate-active-file
 If you have lots of @code{nnfolder}-like files you'd like to read with
@@ -11257,6 +11284,18 @@ common.  If that's the case, you should set this variable to @code{t}.
 Or you can just tap @code{M-g} on the virtual group every time before
 you enter it---it'll have much the same effect.
 
+@code{nnvirtual} can have both mail and news groups as component groups.
+When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
+has to ask the backend of the component group the article comes from
+whether it is a news or mail backend.  However, when you do a @kbd{^},
+there is typically no sure way for the component backend to know this,
+and in that case @code{nnvirtual} tells Gnus that the article came from a
+not-news backend.  (Just to be on the safe side.)
+
+@kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}
+line from the article you respond to in these cases.
+
+
 
 @node Kibozed Groups
 @subsection Kibozed Groups
@@ -15955,7 +15994,7 @@ actually are people who are using Gnus.  Who'd'a thunk it!
 * ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
 * September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
 * Red Gnus::           Third time best---Gnus 5.4/5.5.
-* Quassia Gnus::       Two times two is four, or Gnus 5.6.
+* Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
 @end menu
 
 These lists are, of course, just @emph{short} overviews of the
@@ -17814,6 +17853,13 @@ Group parameters and summary commands for un/subscribing to mailing
 lists. 
 
 @item
+Introduce nnmail-home-directory.
+
+@item
+gnus-fetch-group and friends should exit Gnus when the user
+exits the group.
+
+@item
 Solve the halting problem.
 
 @c TODO
index c1ab161..9133c73 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 5.6.33 Manual
+@settitle Message 5.6.41 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 5.6.33 Manual
+@title Message 5.6.41 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,7 +83,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 5.6.33.  Message is distributed with
+This manual corresponds to Message 5.6.41.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has.