Synch with Gnus.
authoryamaoka <yamaoka>
Mon, 14 Aug 2000 01:46:56 +0000 (01:46 +0000)
committeryamaoka <yamaoka>
Mon, 14 Aug 2000 01:46:56 +0000 (01:46 +0000)
24 files changed:
lisp/ChangeLog
lisp/gnus-async.el
lisp/gnus-cus.el
lisp/gnus-dup.el
lisp/gnus-group.el
lisp/gnus-mailcap.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-topic.el
lisp/imap.el
lisp/mail-source.el
lisp/message.el
lisp/mm-decode.el
lisp/mm-view.el
lisp/nnimap.el
lisp/nnmail.el
lisp/nnvirtual.el
texi/ChangeLog
texi/Makefile.in
texi/emacs-mime.texi
texi/gnus-ja.texi
texi/gnus.texi
texi/message-ja.texi
texi/message.texi

index ba8b911..3c38576 100644 (file)
@@ -1,3 +1,77 @@
+2000-08-13 18:53:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-select-group): Touch the dribble
+       buffer.
+       (gnus-topic-hide-topic): Take a PERMANENT parameter.
+       (gnus-topic-show-topic): Ditto.
+
+       * gnus-dup.el (gnus-dup-suppress-articles): Do auto-expiry.
+
+2000-08-12 21:48:00  John H. Palmieri  <palmieri@math.washington.edu>
+
+       * mail-source.el (mail-source-incoming-file-prefix): New
+       variable. 
+
+2000-08-12 20:29:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-check-first-time-used): Clean up a bit.
+
+       * mailcap.el (mailcap-maybe-eval): Be even more warning.
+
+2000-08-11  Florian Weimer  <fw@deneb.enyo.de>
+
+       * message.el (message-syntax-checks): New check quotin-style: 
+       Text must be written below quoted text.
+       (message-check-news-body-syntax): Check it.
+
+2000-08-11  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-authenticator-alist): Fix typo.
+       (imap-gssapi-open): Copy krb4 fixes for modern imtest's, thanks to
+       Jonas Oberg for debugging.
+
+2000-08-11  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-async.el (gnus-asynchronous): Disable by default.
+
+2000-08-10 20:22:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-inline-text): Bind fill-column.
+
+       * nnvirtual.el (nnvirtual-request-expire-articles): Return the
+       list of unexpired articles.
+
+       * gnus-group.el (gnus-group-expire-articles-1): Return the list of
+       un-expired articles. 
+
+       * gnus-sum.el (gnus-summary-reparent-thread): Narrow to the
+       headers. 
+
+       * gnus-topic.el (gnus-topic-kill-group): Move up one line so that
+       we update the right topic.. 
+
+       * mm-decode.el (mm-display-external): Put point at start. 
+
+2000-08-10  Kai Großjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-expiry-target): More explicit documentation.
+
+       * gnus-cus.el (gnus-group-parameters): Add parameter `expiry-wait'.
+
+2000-08-09  Simon Josefsson <simon@josefsson.org>
+
+       * imap.el (imap-parse-body):
+       (imap-parse-string-list): Add bug workarounds for Stalker
+       Communigate Pro 3.0 server.
+       (imap-body-lines): Remove bogus comment.
+
+       * imap.el (imap-range-to-message-set): Move from nnimap.el.
+
+       * nnimap.el (nnimap-retrieve-which-headers):
+       (nnimap-retrieve-headers-from-server):
+       (nnimap-request-set-mark):
+       (nnimap-request-expire-articles): Use `i-r-t-m-set' instead.
+
 2000-08-08 00:53:41  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * message.el (message-dont-reply-to-names):
index 1cd7d7b..e661658 100644 (file)
@@ -35,7 +35,7 @@
   "Support for asynchronous operations."
   :group 'gnus)
 
-(defcustom gnus-asynchronous t
+(defcustom gnus-asynchronous nil
   "*If nil, inhibit all Gnus asynchronicity.
 If non-nil, let the other asynch variables be heeded."
   :group 'gnus-asynchronous
index 442ca05..7af9c93 100644 (file)
@@ -181,6 +181,15 @@ when expiring expirable messages.  The value can either be a number of
 days (not necessarily an integer) or the symbols `never' or
 `immediate'.")
 
+    (expiry-target (choice :tag "Expiry Target"
+                           :value delete
+                           (const delete)
+                           (function :format "%v" nnmail-)
+                           string) "\
+Where expired messages end up.
+
+Overrides `nnmail-expiry-target', which see.")
+
     (score-file (file :tag "Score File") "\
 Make the specified file into the current score file.
 This means that all score commands you issue will end up in this file.")
index 96609cb..e148f45 100644 (file)
@@ -137,6 +137,8 @@ seen in the same session."
     (gnus-dup-open))
   (gnus-message 6 "Suppressing duplicates...")
   (let ((headers gnus-newsgroup-headers)
+       (auto (and gnus-newsgroup-auto-expire
+                  (memq gnus-duplicate-mark gnus-auto-expirable-marks)))
        number header)
     (while (setq header (pop headers))
       (when (and (intern-soft (mail-header-id header) gnus-dup-hashtb)
@@ -144,8 +146,10 @@ seen in the same session."
        (setq gnus-newsgroup-unreads
              (delq (setq number (mail-header-number header))
                    gnus-newsgroup-unreads))
-       (push (cons number gnus-duplicate-mark)
-             gnus-newsgroup-reads))))
+       (if (not auto)
+           (push (cons number gnus-duplicate-mark) gnus-newsgroup-reads)
+         (push number gnus-newsgroup-expirable)
+         (push (cons number gnus-expirable-mark) gnus-newsgroup-reads)))))
   (gnus-message 6 "Suppressing duplicates...done"))
 
 (defun gnus-dup-unsuppress-article (article)
index 7367cd4..99f8c58 100644 (file)
@@ -2821,7 +2821,9 @@ or nil if no action could be taken."
            (gnus-request-expire-articles
             (gnus-uncompress-sequence (cdr expirable)) group))))
        (gnus-close-group group))
-      (gnus-message 6 "Expiring articles in %s...done" group))))
+      (gnus-message 6 "Expiring articles in %s...done" group)
+      ;; Return the list of un-expired articles.
+      (cdr expirable))))
 
 (defun gnus-group-expire-all-groups ()
   "Expire all expirable articles in all newsgroups."
@@ -3638,7 +3640,7 @@ and the second element is the address."
 
 (defun gnus-add-marked-articles (group type articles &optional info force)
   ;; Add ARTICLES of TYPE to the info of GROUP.
-  ;; If INFO is non-nil, use that info.         If FORCE is non-nil, don't
+  ;; 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)))
        marked m)
index 1cf91ce..1c72d9f 100644 (file)
@@ -315,7 +315,7 @@ Gnus might fail to display all of it.")
                           mailcap-maybe-eval-warning))
                  (goto-char (point-min))
                  (display-buffer buffer)
-                 (yes-or-no-p "This is emacs-lisp code, evaluate it? "))
+                 (yes-or-no-p "This is potentially dangerous emacs-lisp code, evaluate it? "))
              (kill-buffer buffer))))
       (eval-buffer (current-buffer)))
     (when (buffer-live-p lisp-buffer)
index aae46aa..1bdc275 100644 (file)
@@ -1134,29 +1134,30 @@ for new groups, and subscribe the new groups as zombies."
 
 (defun gnus-check-first-time-used ()
   (catch 'ended
-    (let ((files (list gnus-current-startup-file
-                      (concat gnus-current-startup-file ".el")
-                      (concat gnus-current-startup-file ".eld")
-                      gnus-startup-file
-                      (concat gnus-startup-file ".el")
-                      (concat gnus-startup-file ".eld"))))
-      (while files
-       (when (file-exists-p (pop files))
-         (throw 'ended nil))))
+    ;; First check if any of the following files exist.  If they do,
+    ;; it's not the first time the user has used Gnus.
+    (dolist (file (list gnus-current-startup-file
+                       (concat gnus-current-startup-file ".el")
+                       (concat gnus-current-startup-file ".eld")
+                       gnus-startup-file
+                       (concat gnus-startup-file ".el")
+                       (concat gnus-startup-file ".eld")))
+      (when (file-exists-p file)
+       (throw 'ended nil)))
     (gnus-message 6 "First time user; subscribing you to default groups")
     (unless (gnus-read-active-file-p)
       (let ((gnus-read-active-file t))
        (gnus-read-active-file)))
     (setq gnus-newsrc-last-checked-date (current-time-string))
-    (let ((groups gnus-default-subscribed-newsgroups)
+    ;; Subscribe to the default newsgroups.
+    (let ((groups (or gnus-default-subscribed-newsgroups
+                     gnus-backup-default-subscribed-newsgroups))
          group)
-      (if (eq groups t)
-         nil
-       (setq groups (or groups gnus-backup-default-subscribed-newsgroups))
+      (when (eq groups t)
+       ;; If t, we subscribe (or not) all groups as if they were new.
        (mapatoms
         (lambda (sym)
-          (if (null (setq group (symbol-name sym)))
-              ()
+          (when (setq group (symbol-name sym))
             (let ((do-sub (gnus-matches-options-n group)))
               (cond
                ((eq do-sub 'subscribe)
@@ -1167,18 +1168,17 @@ for new groups, and subscribe the new groups as zombies."
                (t
                 (push group gnus-killed-list))))))
         gnus-active-hashtb)
-       (while groups
-         (when (gnus-active (car groups))
+       (dolist (group groups)
+         ;; Only subscribe the default groups that are activated.
+         (when (gnus-active group)
            (gnus-group-change-level
-            (car groups) gnus-level-default-subscribed gnus-level-killed))
-         (setq groups (cdr groups)))
+            group gnus-level-default-subscribed gnus-level-killed)))
        (save-excursion
          (set-buffer gnus-group-buffer)
          (gnus-group-make-help-group))
        (when gnus-novice-user
          (gnus-message 7 "`A k' to list killed groups"))))))
 
-
 (defun gnus-subscribe-group (group &optional previous method)
   "Subcribe GROUP and put it after PREVIOUS."
   (gnus-group-change-level
index 6fff1ec..fc4ba15 100644 (file)
@@ -8824,14 +8824,16 @@ is non-nil or the Subject: of both articles are the same."
        (unless (and message-id (not (equal message-id "")))
          (error "No message-id in desired parent"))
        (gnus-with-article current-article
-         (goto-char (point-min))
-         (if (re-search-forward "^References: " nil t)
-             (progn
-               (re-search-forward "^[^ \t]" nil t)
-               (forward-line -1)
-               (end-of-line)
-               (insert " " message-id))
-           (insert "References: " message-id "\n")))
+         (save-restriction
+           (goto-char (point-min))
+           (message-narrow-to-head)
+           (if (re-search-forward "^References: " nil t)
+               (progn
+                 (re-search-forward "^[^ \t]" nil t)
+                 (forward-line -1)
+                 (end-of-line)
+                 (insert " " message-id))
+             (insert "References: " message-id "\n"))))
        (set-buffer gnus-summary-buffer)
        (gnus-summary-unmark-all-processable)
        (gnus-summary-update-article current-article)
index 43a3c18..2a4b20a 100644 (file)
@@ -1065,7 +1065,8 @@ If performed over a topic line, toggle folding the topic."
   (if (gnus-group-topic-p)
       (let ((gnus-group-list-mode
             (if all (cons (if (numberp all) all 7) t) gnus-group-list-mode)))
-       (gnus-topic-fold all))
+       (gnus-topic-fold all)
+       (gnus-dribble-touch))
     (gnus-group-select-group all)))
 
 (defun gnus-mouse-pick-topic (e)
@@ -1207,7 +1208,12 @@ If COPYP, copy the groups instead."
        (gnus-topic-find-topology topic nil nil gnus-topic-topology)
        (gnus-topic-enter-dribble))
     (gnus-group-kill-group n discard)
-    (gnus-topic-update-topic)))
+    (if (not (gnus-group-topic-p))
+       (gnus-topic-update-topic)
+      ;; Move up one line so that we update the right topic.
+      (forward-line -1)
+      (gnus-topic-update-topic)
+      (forward-line 1))))
 
 (defun gnus-topic-yank-group (&optional arg)
   "Yank the last topic."
@@ -1257,17 +1263,21 @@ If COPYP, copy the groups instead."
            (setq alist (cdr alist))))))
     (gnus-topic-update-topic)))
 
-(defun gnus-topic-hide-topic ()
-  "Hide the current topic."
-  (interactive)
+(defun gnus-topic-hide-topic (&optional permanent)
+  "Hide the current topic.
+If PERMANENT, make it stay hidden in subsequent sessions as well."
+  (interactive "P")
   (when (gnus-current-topic)
     (gnus-topic-goto-topic (gnus-current-topic))
+    (setcar (cddr (assoc (gnus-current-topic) gnus-topic-topology)) 'hidden)
     (gnus-topic-remove-topic nil nil)))
 
-(defun gnus-topic-show-topic ()
-  "Show the hidden topic."
-  (interactive)
+(defun gnus-topic-show-topic (&optional permanent)
+  "Show the hidden topic.
+If PERMANENT, make it stay shown in subsequent sessions as well."
+  (interactive "P")
   (when (gnus-group-topic-p)
+    (setcar (cddr (assoc (gnus-current-topic) gnus-topic-topology)) nil)
     (gnus-topic-remove-topic t nil)))
 
 (defun gnus-topic-mark-topic (topic &optional unmark)
index 570001b..26aa54b 100644 (file)
@@ -245,7 +245,7 @@ stream.")
   "Priority of authenticators to consider when authenticating to server.")
 
 (defvar imap-authenticator-alist 
-  '((gssapi     imap-gssapi-auth-p    imap-gssapia-auth)
+  '((gssapi     imap-gssapi-auth-p    imap-gssapi-auth)
     (kerberos4  imap-kerberos4-auth-p imap-kerberos4-auth)
     (cram-md5   imap-cram-md5-p       imap-cram-md5-auth)
     (login      imap-login-p          imap-login-auth)
@@ -502,6 +502,10 @@ If ARGS, PROMPT is used as an argument to `format'."
            (setq imap-client-eol "\n")
            (while (and (memq (process-status process) '(open run))
                        (goto-char (point-min))
+                        ;; cyrus 1.6.x (13? < x <= 22) queries capabilities
+                       (or (while (looking-at "^C:")
+                             (forward-line))
+                           t)
                        ;; cyrus 1.6 imtest print "S: " before server greeting
                        (or (not (looking-at "S: "))
                            (forward-char 3)
@@ -1222,6 +1226,18 @@ returned, if ITEMS is a symbol only it's value is returned."
               (list list))
             ","))
 
+(defun imap-range-to-message-set (range)
+  (mapconcat
+   (lambda (item)
+     (if (consp item)
+         (format "%d:%d"
+                 (car item) (cdr item))
+       (format "%d" item)))
+   (if (and (listp range) (not (listp (cdr range))))
+       (list range) ;; make (1 . 2) into ((1 . 2))
+     range)
+   ","))
+
 (defun imap-fetch-asynch (uids props &optional nouidfetch buffer)
   (with-current-buffer (or buffer (current-buffer))
     (imap-send-command (format "%sFETCH %s %s" (if nouidfetch "" "UID ")
@@ -1435,7 +1451,6 @@ on failure."
   "Return number of lines in article by looking at the mime bodystructure BODY."
   (if (listp body)
       (if (stringp (car body))
-         ;; upcase for bug in courier imap server
          (cond ((and (string= (upcase (car body)) "TEXT")
                      (numberp (nth 7 body)))
                 (nth 7 body))
@@ -2212,7 +2227,10 @@ Return nil if no complete line has arrived."
           (imap-forward)
           (while (setq str (imap-parse-string))
             (push str strlist)
-            (imap-forward))
+            ;; buggy stalker communigate pro 3.0 doesn't print SPC
+            ;; between body-fld-param's sometimes
+            (or (eq (char-after) ?\")
+                (imap-forward)))
           (nreverse strlist)))
        ((imap-parse-nil)
         nil)))
@@ -2343,6 +2361,11 @@ Return nil if no complete line has arrived."
          (let (subbody)
            (while (and (eq (char-after) ?\()
                        (setq subbody (imap-parse-body)))
+             ;; buggy stalker communigate pro 3.0 insert a SPC between
+             ;; parts in multiparts
+             (when (and (eq (char-after) ?\ )
+                        (eq (char-after (1+ (point))) ?\())
+               (imap-forward))
              (push subbody body))
            (imap-forward)
            (push (imap-parse-string) body);; media-subtype
@@ -2392,12 +2415,16 @@ Return nil if no complete line has arrived."
                   (push (imap-parse-envelope) body);; envelope
                   (imap-forward)
                   (push (imap-parse-body) body);; body
-                  (imap-forward)
-                  (push (imap-parse-number) body));; body-fld-lines
-                 ((setq lines (imap-parse-number));; body-type-text:
-                  (push lines body));; body-fld-lines
+                  ;; buggy stalker communigate pro 3.0 doesn't print
+                  ;; number of lines in message/rfc822 attachment
+                  (if (eq (char-after) ?\))
+                      (push 0 body)
+                    (imap-forward)
+                    (push (imap-parse-number) body))) ;; body-fld-lines
+                 ((setq lines (imap-parse-number))    ;; body-type-text:
+                  (push lines body))                  ;; body-fld-lines
                  (t
-                  (backward-char)))));; no match...
+                  (backward-char)))))                 ;; no match...
 
        ;; ...and then parse the third one here...
 
index 016fcc7..654bac9 100644 (file)
@@ -68,6 +68,11 @@ If non-nil, this maildrop will be checked periodically for new mail."
   :group 'mail-source
   :type 'boolean)
 
+(defcustom mail-source-incoming-file-prefix "Incoming"
+  "Prefix for file name for storing incoming mail"
+  :group 'mail-source
+  :type 'string)
+
 (defcustom mail-source-report-new-mail-interval 5
   "Interval in minutes between checks for new mail."
   :group 'mail-source
@@ -298,7 +303,8 @@ Pass INFO on to CALLBACK."
          (let ((incoming
                 (mail-source-make-complex-temp-name
                  (expand-file-name
-                  "Incoming" mail-source-directory))))
+                  mail-source-incoming-file-prefix
+                  mail-source-directory))))
            (unless (file-exists-p (file-name-directory incoming))
              (make-directory (file-name-directory incoming) t))
            (rename-file mail-source-crash-box incoming t)))))))
index a910739..bdcebae 100644 (file)
@@ -194,10 +194,10 @@ To disable checking of long signatures, for instance, add
 Don't touch this variable unless you really know what you're doing.
 
 Checks include subject-cmsg multiple-headers sendsys message-id from
-long-lines control-chars size new-text redirected-followup signature
-approved sender empty empty-headers message-id from subject
-shorten-followup-to existing-newsgroups buffer-file-name unchanged
-newsgroups."
+long-lines control-chars size new-text quoting-style
+redirected-followup signature approved sender empty empty-headers
+message-id from subject shorten-followup-to existing-newsgroups
+buffer-file-name unchanged newsgroups."
   :group 'message-news
   :type '(repeat sexp))
 
@@ -3454,11 +3454,24 @@ This sub function is for exclusive use of `message-send-news'."
    (message-check 'signature
      (goto-char (point-max))
      (if (> (count-lines (point) (point-max)) 5)
-        (y-or-n-p
-         (format
-          "Your .sig is %d lines; it should be max 4.  Really post? "
-          (1- (count-lines (point) (point-max)))))
-       t))))
+        (y-or-n-p
+         (format
+          "Your .sig is %d lines; it should be max 4.  Really post? "
+          (1- (count-lines (point) (point-max)))))
+       t))
+   ;; Ensure that text follows last quoted portion.
+   (message-check 'quoting-style
+     (goto-char (point-max))
+     (let ((no-problem t))
+       (when (search-backward-regexp "^>[^\n]*\n>" nil t)
+        (setq no-problem nil)
+        (while (not (eobp))
+          (when (and (not (eolp)) (looking-at "[^> \t]"))
+            (setq no-problem t))
+          (forward-line)))
+       (if no-problem
+          t
+        (y-or-n-p "Your text should follow quoted text.  Really post? "))))))
 
 (defun message-check-mail-syntax ()
   "Check the syntax of the message."
index 0ea60e1..5f79449 100644 (file)
@@ -368,6 +368,7 @@ external if displayed external."
            (buffer-disable-undo)
            (mm-set-buffer-file-coding-system mm-binary-coding-system)
            (insert-buffer-substring cur)
+           (goto-char (point-min))
            (message "Viewing with %s" method)
            (let ((mm (current-buffer))
                  (non-viewer (assq 'non-viewer
index 6b21d71..45ed4d2 100644 (file)
            (save-window-excursion
              (save-restriction
                (let ((w3-strict-width width)
+                     ;; Don't let w3 set the global version of
+                     ;; this variable.
+                     (fill-column fill-column)
                      (url-standalone-mode t))
                  (condition-case var
                      (w3-region (point-min) (point-max))
index 083e233..0a22b96 100644 (file)
@@ -417,7 +417,7 @@ If EXAMINE is non-nil the group is selected read-only."
     (if (numberp (car-safe articles))
        (imap-search
         (concat "UID "
-                (nnimap-range-to-string
+                (imap-range-to-message-set
                  (gnus-compress-sequence
                   (append (gnus-uncompress-sequence
                            (and fetch-old
@@ -470,7 +470,7 @@ If EXAMINE is non-nil the group is selected read-only."
     (let ((imap-fetch-data-hook '(nnimap-retrieve-headers-progress))
          (nnimap-length (gnus-range-length articles))
          (nnimap-counter 0))
-      (imap-fetch (nnimap-range-to-string articles)
+      (imap-fetch (imap-range-to-message-set articles)
                  (concat "(UID RFC822.SIZE BODY "
                          (let ((headers
                                 (append '(Subject From Date Message-Id
@@ -869,15 +869,15 @@ function is generally only called when Gnus is shutting down."
            (when (and range marks)
              (cond ((eq what 'del)
                     (imap-message-flags-del
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))
                    ((eq what 'add)
                     (imap-message-flags-add
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))
                    ((eq what 'set)
                     (imap-message-flags-set
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))))))
        (gnus-message 7 "nnimap: Setting marks in %s...done" group))))
   nil)
@@ -1033,25 +1033,25 @@ function is generally only called when Gnus is shutting down."
       (with-current-buffer nnimap-server-buffer
        (if force
            (and (imap-message-flags-add
-                 (nnimap-range-to-string artseq) "\\Deleted")
+                 (imap-range-to-message-set artseq) "\\Deleted")
                 (setq articles nil))
          (let ((days (or (and nnmail-expiry-wait-function
                               (funcall nnmail-expiry-wait-function group))
                          nnmail-expiry-wait)))
            (cond ((eq days 'immediate)
                   (and (imap-message-flags-add
-                        (nnimap-range-to-string artseq) "\\Deleted")
+                        (imap-range-to-message-set artseq) "\\Deleted")
                        (setq articles nil)))
                  ((numberp days)
                   (let ((oldarts (imap-search
                                   (format "UID %s NOT SINCE %s"
-                                          (nnimap-range-to-string artseq)
+                                          (imap-range-to-message-set artseq)
                                           (nnimap-date-days-ago days))))
                         (imap-fetch-data-hook
                          '(nnimap-request-expire-articles-progress)))
                     (and oldarts
                          (imap-message-flags-add
-                          (nnimap-range-to-string
+                          (imap-range-to-message-set
                            (gnus-compress-sequence oldarts))
                           "\\Deleted")
                          (setq articles (gnus-set-difference
@@ -1236,18 +1236,6 @@ sure of changing the value of `foo'."
       (cons (cons key value) (nnimap-remassoc key alist))
     (nnimap-remassoc key alist)))
 
-(defun nnimap-range-to-string (range)
-  (mapconcat
-   (lambda (item)
-     (if (consp item)
-         (format "%d:%d"
-                 (car item) (cdr item))
-       (format "%d" item)))
-   (if (and (listp range) (not (listp (cdr range))))
-       (list range);; make (1 . 2) into ((1 . 2))
-     range)
-   ","))
-
 (when nnimap-debug
   (require 'trace)
   (buffer-disable-undo (get-buffer-create nnimap-debug))
@@ -1309,7 +1297,6 @@ sure of changing the value of `foo'."
          nnimap-mark-permanent-p
          nnimap-remassoc
          nnimap-update-alist-soft
-         nnimap-range-to-string
           )))
 
 (provide 'nnimap)
index ca36dd3..230aa20 100644 (file)
@@ -176,7 +176,13 @@ Eg.:
                 (function :format "%v" nnmail-)))
 
 (defcustom nnmail-expiry-target 'delete
-  "*Variable that says where expired messages should end up."
+  "*Variable that says where expired messages should end up.
+The default value is `delete' (which says to delete the messages),
+but it can also be a string or a function.  If it is a string, expired
+messages end up in that group.  If it is a function, the function is
+called in a buffer narrowed to the message in question.  The function
+receives one argument, the name of the group the message comes from.
+The return value should be `delete' or a group name (a string)."
     :group 'nnmail-expire
     :type '(choice (const delete)
                   (function :format "%v" nnmail-)
index e75b311..2440ad0 100644 (file)
@@ -368,8 +368,15 @@ component group will show up when you enter the virtual group.")
   (nnvirtual-possibly-change-server server)
   (setq nnvirtual-component-groups
        (delete (nnvirtual-current-group) nnvirtual-component-groups))
-  (dolist (group nnvirtual-component-groups)
-    (gnus-group-expire-articles-1 group)))
+  (let (unexpired)
+    (dolist (group nnvirtual-component-groups)
+      (setq unexpired (nconc unexpired
+                            (mapcar
+                             #'(lambda (article)
+                                 (nnvirtual-reverse-map-article
+                                  group article))
+                             (gnus-group-expire-articles-1 group)))))
+    (sort unexpired '<)))
 
 \f
 ;;; Internal functions.
index b8dbed8..12e5d7b 100644 (file)
@@ -1,3 +1,26 @@
+2000-08-13 20:00:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Topic Commands): Fix typo.
+
+2000-08-13 20:20:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Topic Commands): Addition.
+
+2000-08-11  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Expiring Mail): Extend documentation of variable
+       `nnmail-expiry-target' and of group parameter `expiry-target'.
+       Explain interaction between these.  Add Lisp example for setting
+       `nnmail-expiry-target'.
+
+2000-05-07  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi: direntry added.
+
+       * message.texi: direntry added.
+
+       * emacs-mime.texi: direntry added.
+
 2000-08-04  Andreas Oeldenberger <andreas.oeldenberger@gmx.net>
 
        * message.texi (Forwarding): Fix.
 
        * gnus.texi (Mail Source Specifiers): Update maildir.
 
+2000-05-07  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi: direntry added.
+
+       * message.texi: direntry added.
+
+       * emacs-mime.texi: direntry added.
+
 2000-05-02  Pavel Janik  <Pavel.Janik@inet.cz>
 
        * gnus.texi (MIME comands): Spelling fix.
index 2e07a96..8b215cc 100644 (file)
@@ -80,7 +80,7 @@ clean:
        rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
        *.pdf *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
        gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
-       gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
+       gnustmp.texi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
        gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi \
        gnus.info* gnus-ja.info* message.info* message-ja.info* \
        emacs-mime.info
index efda9aa..488a24c 100644 (file)
@@ -5,9 +5,10 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Emacs MIME: (emacs-mime).   The MIME de/composition library.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Emacs MIME: (emacs-mime).   The MIME de/composition library.
+@end direntry
 @iftex
 @finalout
 @end iftex
index 6a00dd7..c18d5ef 100644 (file)
@@ -5,9 +5,10 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Gnus-ja: (gnus-ja).   The news reader gnus (\e$BF|K\8lHG\e(B).
-@c @end direntry
+@dircategory Editors
+@direntry
+* Gnus-ja: (gnus-ja).         The newsreader gnus (\e$BF|K\8lHG\e(B).
+@end direntry
 @iftex
 @finalout
 @end iftex
@@ -3270,6 +3271,18 @@ Gnus
 (@code{gnus-topic-copy-group})\e$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W\e(B
 \e$B%l%U%#%C%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-hide-topic
+\e$B8=:_$N%H%T%C%/$r1#$7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C\e(B
+\e$B%/$r1J5W$K1#$7$^$9!#\e(B
+
+@item T s
+@kindex T s (Topic)
+@findex gnus-topic-show-topic
+\e$B8=:_$N%H%T%C%/$rI=<($7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C\e(B
+\e$B%/$r1J5W$KI=<($7$^$9!#\e(B
+
 @item T D
 @kindex T D (Topic)
 @findex gnus-topic-remove-group
@@ -11426,13 +11439,21 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 @vindex nnmail-expiry-target
 \e$B5-;v$N4|8B@Z$l>C5n$NIaDL$NF0:n$O$=$l$i$r>C5n$9$k$3$H$G$9!#$7$+$7!">l9g$K\e(B
 \e$B$h$C$F$O$=$l$i$r>C5n$9$k$h$j$bJL$N%0%k!<%W$K0\F0$7$?J}$,M-0U5A$+$b$7$l$^\e(B
-\e$B$;$s!#\e(B@code{nnmail-expiry-target} (\e$B$H%0%k!<%W%Q%i%a!<%?\e(B
-@code{expiry-target}) \e$B$O$3$l$r@)8f$7$^$9!#%G%#%U%)%k%H$NCM$O\e(B
+\e$B$;$s!#JQ?t\e(B @code{nnmail-expiry-target} (\e$B$H%0%k!<%W%Q%i%a!<%?\e(B
+@code{expiry-target}) \e$B$O$3$l$r@)8f$7$^$9!#$3$NJQ?t$NCM$O$9$Y$F$N%0%k!<%W\e(B
+\e$B$KBP$9$k%G%#%U%)%k%H$K$J$j$^$9$,!"FCDj$N%0%k!<%W$4$H$K%0%k!<%W%Q%i%a!<%?\e(B
+\e$B$r;H$C$F;XDj$9$l$P>e=q$-$9$k$3$H$,$G$-$^$9!#%G%#%U%)%k%H$NCM$O\e(B
 @code{delete} \e$B$G$9$,!"J8;zNs\e(B (\e$B5-;v$r0\F0$9$k@h$N%0%k!<%WL>\e(B) \e$B$^$?$O0\F0@h\e(B
 \e$B$N%0%k!<%WL>$+\e(B @code{delete} \e$B$rJV$94X?t\e(B (\e$B5-;v$KHO0O$r69$a$?%P%C%U%!$G!"\e(B
 \e$B$=$N5-;v$,B8:_$7$F$$$k%0%k!<%WL>$,0z?t$H$7$FM?$($i$l$^$9\e(B) \e$B$K$9$k$3$H$,$G\e(B
 \e$B$-$^$9!#\e(B
 
+\e$B%0%k!<%WL>$r;XDj$9$k>l9g$NNc\e(B:
+@lisp
+(setq nnmail-expiry-target "nnml:expired")
+@end lisp
+
+
 @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
 \e$B%9%0%k!<%W$N:G8e$N5-;v$r7h$7$F4|8B@Z$l>C5n$7$^$;$s!#$3$l$O\e(B procmail \e$B$NMx\e(B
@@ -20649,6 +20670,9 @@ Allow mail splitting on bodies when using advanced mail splitting.
 @end lisp
 
 @item
+Be able to run `J u' from summary buffers.
+
+@item
 Solve the halting problem.
 
 @c TODO
index 84e6eeb..33d5a0c 100644 (file)
@@ -5,9 +5,10 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Gnus: (gnus).         The newsreader Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Gnus: (gnus).         The newsreader Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
@@ -3229,6 +3230,18 @@ Copy the current group to some other topic
 (@code{gnus-topic-copy-group}).  This command uses the process/prefix
 convention (@pxref{Process/Prefix}).
 
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-hide-topic
+Hide the current topic (@code{gnus-topic-hide-topic}).  If given
+a prefix, hide the topic permanently.
+
+@item T s
+@kindex T s (Topic)
+@findex gnus-topic-show-topic
+Show the current topic (@code{gnus-topic-show-topic}).  If given
+a prefix, show the topic permanently.
+
 @item T D
 @kindex T D (Topic)
 @findex gnus-topic-remove-group
@@ -7724,6 +7737,8 @@ Translate the article from one language to another
 @node MIME Commands
 @section @sc{mime} Commands
 @cindex MIME decoding
+@cindex attachments
+@cindex viewing attachments
 
 The following commands all understand the numerical prefix.  For
 instance, @kbd{3 b} means ``view the third @sc{mime} part''.
@@ -11876,14 +11891,22 @@ change the expiry period (@pxref{Group Parameters}).
 @vindex nnmail-expiry-target
 The normal action taken when expiring articles is to delete them.
 However, in some circumstances it might make more sense to move them to
-other groups instead of deleting them.  The @code{nnmail-expiry-target}
+other groups instead of deleting them.  The variable @code{nnmail-expiry-target}
 (and the @code{expiry-target} group parameter) controls this.  The
+variable supplies a default value for all groups, which can be
+overridden for specific groups by the group parameter.
 default value is @code{delete}, but this can also be a string (which
 should be the name of the group the message should be moved to), or a
 function (which will be called in a buffer narrowed to the message in
 question, and with the name of the group being moved from as its
 parameter) which should return a target -- either a group name or
-@code{delete}. 
+@code{delete}.
+
+Here's an example for specifying a group name:
+@lisp
+(setq nnmail-expiry-target "nnml:expired")
+@end lisp
+
 
 @vindex nnmail-keep-last-article
 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
@@ -20958,6 +20981,9 @@ Allow mail splitting on bodies when using advanced mail splitting.
 @end lisp
 
 @item
+Be able to run `J u' from summary buffers.
+
+@item
 Solve the halting problem.
 
 @c TODO
index fa5ae35..a56eb14 100644 (file)
@@ -5,9 +5,10 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Message: (message).   Mail and news composition mode that goes with Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Message: (message).   Mail and news composition mode that goes with Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
@@ -579,7 +580,8 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 @kindex C-c C-e
 @findex message-elide-region
 \e$B%]%$%s%H$H%^!<%/$N4V$NJ8$r>J$-$^$9\e(B (@code{message-elide-region})\e$B!#J8>O$O\e(B
-\e$B@Z$i$l$F\e(B (killed) \e$B>JN,Id9f\e(B (@samp{[...]} \e$B$,$=$N>l=j$KA^F~$5$l$^$9!#\e(B
+\e$B@Z$i$l$F\e(B (killed) \e$BJQ?t\e(B @code{message-elide-ellipsis} \e$B$NCM$GCV$-49$($i$l\e(B
+\e$B$^$9!#%G%#%U%)%k%H$N>JN,Id9f$H$7$F;H$o$l$kCM$O\e(B (@samp{[...]}) \e$B$G$9!#\e(B
 
 @item C-c C-z
 @kindex C-c C-x
index ac644fc..27b5dfe 100644 (file)
@@ -5,9 +5,10 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Message: (message).   Mail and news composition mode that goes with Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Message: (message).   Mail and news composition mode that goes with Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
@@ -590,8 +591,9 @@ many places to rotate the text.  The default is 13.
 @kindex C-c C-e
 @findex message-elide-region
 Elide the text between point and mark (@code{message-elide-region}).
-The text is killed and an ellipsis (@samp{[...]}) will be inserted in
-its place.
+The text is killed and replaced with the contents of the variable
+@code{message-elide-ellipsis}. The default value is to use an ellipsis
+(@samp{[...]}).
 
 @item C-c C-z
 @kindex C-c C-x