From 8fb8110b5eb2c7b2af594bed58af40043cf9e5d7 Mon Sep 17 00:00:00 2001 From: yamaoka Date: Mon, 14 Aug 2000 01:46:56 +0000 Subject: [PATCH] Synch with Gnus. --- lisp/ChangeLog | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ lisp/gnus-async.el | 2 +- lisp/gnus-cus.el | 9 ++++++ lisp/gnus-dup.el | 8 ++++-- lisp/gnus-group.el | 6 ++-- lisp/gnus-mailcap.el | 2 +- lisp/gnus-start.el | 40 +++++++++++++-------------- lisp/gnus-sum.el | 18 ++++++------ lisp/gnus-topic.el | 26 ++++++++++++------ lisp/imap.el | 43 +++++++++++++++++++++++------ lisp/mail-source.el | 8 +++++- lisp/message.el | 31 +++++++++++++++------ lisp/mm-decode.el | 1 + lisp/mm-view.el | 3 ++ lisp/nnimap.el | 31 ++++++--------------- lisp/nnmail.el | 8 +++++- lisp/nnvirtual.el | 11 ++++++-- texi/ChangeLog | 31 +++++++++++++++++++++ texi/Makefile.in | 2 +- texi/emacs-mime.texi | 7 +++-- texi/gnus-ja.texi | 34 +++++++++++++++++++---- texi/gnus.texi | 36 ++++++++++++++++++++---- texi/message-ja.texi | 10 ++++--- texi/message.texi | 12 ++++---- 24 files changed, 345 insertions(+), 108 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ba8b911..3c38576 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,77 @@ +2000-08-13 18:53:08 Lars Magne Ingebrigtsen + + * 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 + + * mail-source.el (mail-source-incoming-file-prefix): New + variable. + +2000-08-12 20:29:53 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 + + * gnus-async.el (gnus-asynchronous): Disable by default. + +2000-08-10 20:22:09 Lars Magne Ingebrigtsen + + * 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 + + * nnmail.el (nnmail-expiry-target): More explicit documentation. + + * gnus-cus.el (gnus-group-parameters): Add parameter `expiry-wait'. + +2000-08-09 Simon Josefsson + + * 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 * message.el (message-dont-reply-to-names): diff --git a/lisp/gnus-async.el b/lisp/gnus-async.el index 1cd7d7b..e661658 100644 --- a/lisp/gnus-async.el +++ b/lisp/gnus-async.el @@ -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 diff --git a/lisp/gnus-cus.el b/lisp/gnus-cus.el index 442ca05..7af9c93 100644 --- a/lisp/gnus-cus.el +++ b/lisp/gnus-cus.el @@ -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.") diff --git a/lisp/gnus-dup.el b/lisp/gnus-dup.el index 96609cb..e148f45 100644 --- a/lisp/gnus-dup.el +++ b/lisp/gnus-dup.el @@ -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) diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 7367cd4..99f8c58 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -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) diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el index 1cf91ce..1c72d9f 100644 --- a/lisp/gnus-mailcap.el +++ b/lisp/gnus-mailcap.el @@ -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) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index aae46aa..1bdc275 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -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 diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 6fff1ec..fc4ba15 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -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) diff --git a/lisp/gnus-topic.el b/lisp/gnus-topic.el index 43a3c18..2a4b20a 100644 --- a/lisp/gnus-topic.el +++ b/lisp/gnus-topic.el @@ -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) diff --git a/lisp/imap.el b/lisp/imap.el index 570001b..26aa54b 100644 --- a/lisp/imap.el +++ b/lisp/imap.el @@ -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... diff --git a/lisp/mail-source.el b/lisp/mail-source.el index 016fcc7..654bac9 100644 --- a/lisp/mail-source.el +++ b/lisp/mail-source.el @@ -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))))))) diff --git a/lisp/message.el b/lisp/message.el index a910739..bdcebae 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -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." diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 0ea60e1..5f79449 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -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 diff --git a/lisp/mm-view.el b/lisp/mm-view.el index 6b21d71..45ed4d2 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -113,6 +113,9 @@ (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)) diff --git a/lisp/nnimap.el b/lisp/nnimap.el index 083e233..0a22b96 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -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) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index ca36dd3..230aa20 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -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-) diff --git a/lisp/nnvirtual.el b/lisp/nnvirtual.el index e75b311..2440ad0 100644 --- a/lisp/nnvirtual.el +++ b/lisp/nnvirtual.el @@ -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 '<))) ;;; Internal functions. diff --git a/texi/ChangeLog b/texi/ChangeLog index b8dbed8..12e5d7b 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,26 @@ +2000-08-13 20:00:35 ShengHuo ZHU + + * gnus.texi (Topic Commands): Fix typo. + +2000-08-13 20:20:56 Lars Magne Ingebrigtsen + + * gnus.texi (Topic Commands): Addition. + +2000-08-11 Kai Grossjohann + + * 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 + + * gnus.texi: direntry added. + + * message.texi: direntry added. + + * emacs-mime.texi: direntry added. + 2000-08-04 Andreas Oeldenberger * message.texi (Forwarding): Fix. @@ -46,6 +69,14 @@ * gnus.texi (Mail Source Specifiers): Update maildir. +2000-05-07 Pavel Janik + + * gnus.texi: direntry added. + + * message.texi: direntry added. + + * emacs-mime.texi: direntry added. + 2000-05-02 Pavel Janik * gnus.texi (MIME comands): Spelling fix. diff --git a/texi/Makefile.in b/texi/Makefile.in index 2e07a96..8b215cc 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -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 diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi index efda9aa..488a24c 100644 --- a/texi/emacs-mime.texi +++ b/texi/emacs-mime.texi @@ -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 diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 6a00dd7..c18d5ef 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -5,9 +5,10 @@ @synindex fn cp @synindex vr cp @synindex pg cp -@c @direntry -@c * Gnus-ja: (gnus-ja). The news reader gnus ($BF|K\8lHG(B). -@c @end direntry +@dircategory Editors +@direntry +* Gnus-ja: (gnus-ja). The newsreader gnus ($BF|K\8lHG(B). +@end direntry @iftex @finalout @end iftex @@ -3270,6 +3271,18 @@ Gnus (@code{gnus-topic-copy-group})$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W(B $B%l%U%#%C%/%9%k!<%k$K=>$$$^$9(B (@pxref{Process/Prefix})$B!#(B +@item T h +@kindex T h (Topic) +@findex gnus-topic-hide-topic +$B8=:_$N%H%T%C%/$r1#$7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C(B +$B%/$r1J5W$K1#$7$^$9!#(B + +@item T s +@kindex T s (Topic) +@findex gnus-topic-show-topic +$B8=:_$N%H%T%C%/$rI=<($7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C(B +$B%/$r1J5W$KI=<($7$^$9!#(B + @item T D @kindex T D (Topic) @findex gnus-topic-remove-group @@ -11426,13 +11439,21 @@ Gnus $B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8(B @vindex nnmail-expiry-target $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(B $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$^(B -$B$;$s!#(B@code{nnmail-expiry-target} ($B$H%0%k!<%W%Q%i%a!<%?(B -@code{expiry-target}) $B$O$3$l$r@)8f$7$^$9!#%G%#%U%)%k%H$NCM$O(B +$B$;$s!#JQ?t(B @code{nnmail-expiry-target} ($B$H%0%k!<%W%Q%i%a!<%?(B +@code{expiry-target}) $B$O$3$l$r@)8f$7$^$9!#$3$NJQ?t$NCM$O$9$Y$F$N%0%k!<%W(B +$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!<%?(B +$B$r;H$C$F;XDj$9$l$P>e=q$-$9$k$3$H$,$G$-$^$9!#%G%#%U%)%k%H$NCM$O(B @code{delete} $B$G$9$,!"J8;zNs(B ($B5-;v$r0\F0$9$k@h$N%0%k!<%WL>(B) $B$^$?$O0\F0@h(B $B$N%0%k!<%WL>$+(B @code{delete} $B$rJV$94X?t(B ($B5-;v$KHO0O$r69$a$?%P%C%U%!$G!"(B $B$=$N5-;v$,B8:_$7$F$$$k%0%k!<%WL>$,0z?t$H$7$FM?$($i$l$^$9(B) $B$K$9$k$3$H$,$G(B $B$-$^$9!#(B +$B%0%k!<%WL>$r;XDj$9$k>l9g$NNc(B: +@lisp +(setq nnmail-expiry-target "nnml:expired") +@end lisp + + @vindex nnmail-keep-last-article @code{nnmail-keep-last-article} $B$,(B @code{nil} $B$G$J$$$H!"(Bgnus $B$O%a!<%k%K%e!<(B $B%9%0%k!<%W$N:G8e$N5-;v$r7h$7$F4|8B@Z$l>C5n$7$^$;$s!#$3$l$O(B procmail $B$NMx(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 diff --git a/texi/gnus.texi b/texi/gnus.texi index 84e6eeb..33d5a0c 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -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 diff --git a/texi/message-ja.texi b/texi/message-ja.texi index fa5ae35..a56eb14 100644 --- a/texi/message-ja.texi +++ b/texi/message-ja.texi @@ -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 $B$O!"=pL>$O$=$NA0$K(B @samp{-- } $B$N(B3$BJ8;z$@$1$N9T$,$"$k$Y$ @kindex C-c C-e @findex message-elide-region $B%]%$%s%H$H%^!<%/$N4V$NJ8$r>J$-$^$9(B (@code{message-elide-region})$B!#J8>O$O(B -$B@Z$i$l$F(B (killed) $B>JN,Id9f(B (@samp{[...]} $B$,$=$N>l=j$KA^F~$5$l$^$9!#(B +$B@Z$i$l$F(B (killed) $BJQ?t(B @code{message-elide-ellipsis} $B$NCM$GCV$-49$($i$l(B +$B$^$9!#%G%#%U%)%k%H$N>JN,Id9f$H$7$F;H$o$l$kCM$O(B (@samp{[...]}) $B$G$9!#(B @item C-c C-z @kindex C-c C-x diff --git a/texi/message.texi b/texi/message.texi index ac644fc..27b5dfe 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -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 -- 1.7.10.4