From e63995034b8e00e40077a7f352e3ae5f0214642f Mon Sep 17 00:00:00 2001 From: yamaoka Date: Sun, 12 Aug 2001 23:39:34 +0000 Subject: [PATCH] Synch with Oort Gnus. --- contrib/ChangeLog | 7 ++ contrib/gpg.el | 3 + lisp/ChangeLog | 75 +++++++++++++++++++++ lisp/gnus-delay.el | 5 +- lisp/gnus-gl.el | 2 +- lisp/gnus-ml.el | 2 +- lisp/gnus-salt.el | 2 +- lisp/gnus-score.el | 2 +- lisp/gnus-spec.el | 2 +- lisp/gnus-sum.el | 17 ++++- lisp/gnus.el | 7 +- lisp/mail-source.el | 3 +- lisp/message.el | 6 +- lisp/mm-bodies.el | 18 +++-- lisp/nndoc.el | 182 ++++++++++++++++++++++++++++++++++++++------------- lisp/nnimap.el | 15 ++++- lisp/nnmbox.el | 2 +- texi/ChangeLog | 22 +++++++ texi/gnus-ja.texi | 36 +++++----- texi/gnus.texi | 36 +++++----- 20 files changed, 339 insertions(+), 105 deletions(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 5c2a4fa..2c857ba 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,10 @@ +2001-08-07 Andreas Jaeger + + * gpg.el (gpg-passphrase-forget): Don't cache + gpg-passphrase-timer. + (gpg-passphrase-store): Check if gpg-passphrase-timer is + initialized already. + 2001-07-30 16:00:00 ShengHuo ZHU From Andreas Fuchs diff --git a/contrib/gpg.el b/contrib/gpg.el index 02ccf34..e28118c 100644 --- a/contrib/gpg.el +++ b/contrib/gpg.el @@ -799,6 +799,7 @@ evaluates BODY, like `progn'. If BODY evaluates to `nil' (or "Forget stored passphrase." (interactive) (cancel-timer gpg-passphrase-timer) + (setq gpg-passphrase-timer nil) (gpg-passphrase-clear-string gpg-passphrase) (setq gpg-passphrase nil)) @@ -806,6 +807,8 @@ evaluates BODY, like `progn'. If BODY evaluates to `nil' (or "Store PASSPHRASE in cache. Updates the timeout for clearing the cache to `gpg-passphrase-timeout'." (unless (equal gpg-passphrase-timeout 0) + (if (null gpg-passphrase-timer) + (setq gpg-passphrase-timer (timer-create))) (timer-set-time gpg-passphrase-timer (timer-relative-time (current-time) gpg-passphrase-timeout)) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2e9c551..2d101e7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,78 @@ +2001-08-12 Simon Josefsson + Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE + + Support `recent' mark indicating newly arrived messages (to + separate from old but unread messages). + + * nnimap.el (nnimap-retrieve-groups): Push dummy article into + `nnmail-split-history' if recent is > 0. + (nnimap-request-update-info-internal): Update `recent' marks. + (nnimap-request-set-mark): Never set `recent' marks. + (nnimap-mark-to-predicate-alist, nnimap-mark-to-flag-alist): Add + recent. + + * gnus-sum.el (gnus-recent-mark): New mark. + (gnus-newsgroup-recent): New variable. + (gnus-summary-local-variables): Add gnus-newsgroup-recent. + (gnus-summary-prepare-threads): Mark recent articles. + (gnus-summary-add-mark): Support recent. + (gnus-summary-update-secondary-mark): Support recent. + + * gnus.el (gnus-article-mark-lists): Add recent. + +2001-08-12 Simon Josefsson + + * mm-bodies.el (mm-decode-content-transfer-encoding): Returns + whether successful decoding took place. Add doc. + +2001-08-12 Simon Josefsson + Suggested by Per Abrahamsen + + * gnus.el (gnus-summary-line-format, gnus-parameters): + * gnus-gl.el (gnus-summary-grouplens-line-format): + * gnus-salt.el (gnus-summary-pick-line-format): + * gnus-spec.el (gnus-format-specs): %n is 23 chars. + +2001-08-11 09:40:00 Karl Kleinpaste + Committed by Kai Gro,A_(Bjohann. + + * gnus-score.el (gnus-score-string): Fix `match' regexp + for `extra' header case. + +2001-08-10 23:00:00 ShengHuo ZHU + + * nnmbox.el (nnmbox-read-mbox): No warning. + +2001-08-10 21:00:00 ShengHuo ZHU + + * nndoc.el (nndoc-article-type): Fix doc. + (nndoc-generate-article-function): New. + (nndoc-dissection-function): New. + (nndoc-type-alist): Add oe-dbx. + (nndoc-oe-dbx-type-p): New. + (nndoc-oe-dbx-dissection): New. + (nndoc-oe-dbx-generate-article): New. + +2001-08-11 Kai Gro,A_(Bjohann + + * gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check + whether deadline has been reached. Patch from Dan Nicolaescu + . + +2001-08-10 02:00:00 ShengHuo ZHU + + * gnus-ml.el (turn-on-gnus-mailing-list-mode): Use + gnus-group-find-parameter. Suggested by Janne Rinta-Manty + . + + * mail-source.el (mail-source-movemail): The error buffer is + modified, but nothing in it. + +2001-08-10 01:00:00 ShengHuo ZHU + + * message.el (message-bogus-system-names): New. + (message-make-fqdn): Use it. + 2001-08-09 15:00:00 ShengHuo ZHU * nndraft.el (nndraft-request-group): Use diff --git a/lisp/gnus-delay.el b/lisp/gnus-delay.el index 86ea4b4..faee7b4 100644 --- a/lisp/gnus-delay.el +++ b/lisp/gnus-delay.el @@ -115,8 +115,9 @@ DELAY is a string, giving the length of the time. Possible values are: (setq deadline (nnheader-header-value)) (setq deadline (apply 'encode-time (parse-time-string deadline))) (setq deadline (time-since deadline)) - (when (and (>= (nth 0 deadline) 0) - (>= (nth 1 deadline) 0)) + (when (time-less-p (apply 'encode-time + (parse-time-string deadline)) + (current-time)) (message "Sending article %d" article) (gnus-draft-send article group) (message "Sending article %d...done" article))) diff --git a/lisp/gnus-gl.el b/lisp/gnus-gl.el index a5083b8..df12c92 100644 --- a/lisp/gnus-gl.el +++ b/lisp/gnus-gl.el @@ -131,7 +131,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar gnus-summary-grouplens-line-format - "%U\%R\%z%l%I\%(%[%4L: %-20,20n%]%) %s\n" + "%U\%R\%z%l%I\%(%[%4L: %-23,23n%]%) %s\n" "*The line format spec in summary GroupLens mode buffers.") (defvar grouplens-pseudonym "" diff --git a/lisp/gnus-ml.el b/lisp/gnus-ml.el index 9070c85..6bd3e2d 100644 --- a/lisp/gnus-ml.el +++ b/lisp/gnus-ml.el @@ -67,7 +67,7 @@ ;;;###autoload (defun turn-on-gnus-mailing-list-mode () - (when (gnus-group-get-parameter gnus-newsgroup-name 'to-list) + (when (gnus-group-find-parameter gnus-newsgroup-name 'to-list) (gnus-mailing-list-mode 1))) ;;;###autoload diff --git a/lisp/gnus-salt.el b/lisp/gnus-salt.el index b754455..b76bac2 100644 --- a/lisp/gnus-salt.el +++ b/lisp/gnus-salt.el @@ -64,7 +64,7 @@ summary buffers.") :group 'gnus-summary-pick) (defcustom gnus-summary-pick-line-format - "%-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n" + "%-5P %U\%R\%z\%I\%(%[%4L: %-23,23n%]%) %s\n" "*The format specification of the lines in pick buffers. It accepts the same format specs that `gnus-summary-line-format' does." :type 'string diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index f79d627..e76760a 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -1987,7 +1987,7 @@ score in GNUS-NEWSGROUP-SCORED by SCORE." ;; Evil hackery to make match usable in non-standard headers. (when extra (setq match (concat "[ (](" extra " \\. \"[^)]*" - match "[^(]*\")[ )]") + match "[^\"]*\")[ )]") search-func 're-search-forward)) ; XXX danger?!? (cond diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index 999dac1..0eb668a 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -124,7 +124,7 @@ `((group ("%M\%S\%p\%P\%5y: %(%g%)%l\n" ,gnus-group-line-format-spec)) (summary-dummy ("* %(: :%) %S\n" ,gnus-summary-dummy-line-format-spec)) - (summary ("%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n" + (summary ("%U\%R\%z\%I\%(%[%4L: %-23,23n%]%) %s\n" ,gnus-summary-line-format-spec))) "Alist of format specs.") diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 62924f3..c21cb43 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -467,6 +467,11 @@ this variable specifies group names." :group 'gnus-summary-marks :type 'character) +(defcustom gnus-recent-mark ?N + "*Mark used for articles that are recent." + :group 'gnus-summary-marks + :type 'character) + (defcustom gnus-cached-mark ?* "*Mark used for articles that are in the cache." :group 'gnus-summary-marks @@ -1201,6 +1206,9 @@ end position and text.") (defvar gnus-newsgroup-forwarded nil "List of articles that have been forwarded in the current newsgroup.") +(defvar gnus-newsgroup-recent nil + "List of articles that have are recent in the current newsgroup.") + (defvar gnus-newsgroup-expirable nil "List of articles in the current newsgroup that can be expired.") @@ -1262,6 +1270,7 @@ end position and text.") gnus-newsgroup-unselected gnus-newsgroup-marked gnus-newsgroup-reads gnus-newsgroup-saved gnus-newsgroup-replied gnus-newsgroup-forwarded + gnus-newsgroup-recent gnus-newsgroup-expirable gnus-newsgroup-processable gnus-newsgroup-killed gnus-newsgroup-downloadable gnus-newsgroup-undownloaded @@ -4345,6 +4354,8 @@ or a straight list of headers." gnus-forwarded-mark) ((memq number gnus-newsgroup-saved) gnus-saved-mark) + ((memq number gnus-newsgroup-recent) + gnus-recent-mark) (t gnus-no-mark)) gnus-tmp-from (mail-header-from gnus-tmp-header) gnus-tmp-name @@ -8708,9 +8719,9 @@ the actual number of articles unmarked is returned." (error "No such mark type: %s" type) (setq var (intern (format "gnus-newsgroup-%s" type))) (set var (cons article (symbol-value var))) - (if (memq type '(processable cached replied forwarded saved)) + (if (memq type '(processable cached replied forwarded recent saved)) (gnus-summary-update-secondary-mark article) - ;;; !!! This is bobus. We should find out what primary + ;;; !!! This is bogus. We should find out what primary ;;; !!! mark we want to set. (gnus-summary-update-mark gnus-del-mark 'unread))))) @@ -8970,6 +8981,8 @@ Iff NO-EXPIRE, auto-expiry will be inhibited." gnus-forwarded-mark) ((memq article gnus-newsgroup-saved) gnus-saved-mark) + ((memq article gnus-newsgroup-recent) + gnus-recent-mark) (t gnus-no-mark)) 'replied) (when (gnus-visual-p 'summary-highlight 'highlight) diff --git a/lisp/gnus.el b/lisp/gnus.el index 7314e6f..48f0707 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -886,7 +886,7 @@ For example: ((\"mail\\\\..*\" (gnus-show-threads nil) (gnus-use-scoring nil) (gnus-summary-line-format - \"%U%R%z%I%(%[%d:%ub%-20,20f%]%) %s\\n\") + \"%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\\n\") (gcc-self . t) (display . all)) (\"mail\\\\.me\" (gnus-use-scoring t)) @@ -1828,7 +1828,8 @@ covered by that variable." (bookmarks . bookmark) (dormant . dormant) (scored . score) (saved . save) (cached . cache) (downloadable . download) - (unsendable . unsend) (forwarded . forward))) + (unsendable . unsend) (forwarded . forward) + (recent . recent))) (defvar gnus-headers-retrieved-by nil) (defvar gnus-article-reply nil) @@ -2165,7 +2166,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") ;;; gnus-sum.el thingies -(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n" +(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n" "*The format specification of the lines in the summary buffer. It works along the same lines as a normal formatting string, diff --git a/lisp/mail-source.el b/lisp/mail-source.el index aac3007..89116f4 100644 --- a/lisp/mail-source.el +++ b/lisp/mail-source.el @@ -524,7 +524,8 @@ Pass INFO on to CALLBACK." nil errors nil from to))))) (when (file-exists-p to) (set-file-modes to mail-source-default-file-modes)) - (if (and (not (buffer-modified-p errors)) + (if (and (or (not (buffer-modified-p errors)) + (zerop (buffer-size errors))) (zerop result)) ;; No output => movemail won. t diff --git a/lisp/message.el b/lisp/message.el index 738b6f5..399f4a5 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -1317,6 +1317,9 @@ no, only reply back to the author." (defvar message-send-mail-real-function nil "Internal send mail function.") +(defvar message-bogus-system-names "^localhost\\." + "The regexp of bogus system names.") + (eval-and-compile (autoload 'message-setup-toolbar "messagexmas") (autoload 'mh-new-draft-name "mh-comp") @@ -4080,7 +4083,8 @@ give as trustworthy answer as possible." (let ((system-name (system-name)) (user-mail (message-user-mail-address))) (cond - ((string-match "[^.]\\.[^.]" system-name) + ((and (string-match "[^.]\\.[^.]" system-name) + (not (string-match message-bogus-system-names system-name))) ;; `system-name' returned the right result. system-name) ;; Try `mail-host-address'. diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index c11b202..dacb792 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -180,11 +180,14 @@ If no encoding was done, nil is returned." ;;; (defun mm-decode-content-transfer-encoding (encoding &optional type) + "Decodes buffer encoded with ENCODING, returning success status. +If TYPE is `text/plain' CRLF->LF translation may occur." (prog1 (condition-case error (cond ((eq encoding 'quoted-printable) - (quoted-printable-decode-region (point-min) (point-max))) + (quoted-printable-decode-region (point-min) (point-max)) + t) ((eq encoding 'base64) (base64-decode-region (point-min) @@ -203,18 +206,21 @@ If no encoding was done, nil is returned." (point)))) ((memq encoding '(7bit 8bit binary)) ;; Do nothing. - ) + t) ((null encoding) ;; Do nothing. - ) + t) ((memq encoding '(x-uuencode x-uue)) (require 'mm-uu) - (funcall mm-uu-decode-function (point-min) (point-max))) + (funcall mm-uu-decode-function (point-min) (point-max)) + t) ((eq encoding 'x-binhex) (require 'mm-uu) - (funcall mm-uu-binhex-decode-function (point-min) (point-max))) + (funcall mm-uu-binhex-decode-function (point-min) (point-max)) + t) ((functionp encoding) - (funcall encoding (point-min) (point-max))) + (funcall encoding (point-min) (point-max)) + t) (t (message "Unknown encoding %s; defaulting to 8bit" encoding))) (error diff --git a/lisp/nndoc.el b/lisp/nndoc.el index 393ce39..7dd8d94 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -25,6 +25,8 @@ ;;; Commentary: +;; For Outlook mail boxes format, see http://mbx2mbox.sourceforge.net/ + ;;; Code: (eval-when-compile (require 'cl)) @@ -41,7 +43,8 @@ "*Type of the file. One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward', `rfc934', `rfc822-forward', `mime-parts', `standard-digest', -`slack-digest', `clari-briefs', `nsmail' or `guess'.") +`slack-digest', `clari-briefs', `nsmail', `outlook', `oe-dbx' or +`guess'.") (defvoo nndoc-post-type 'mail "*Whether the nndoc group is `mail' or `post'.") @@ -128,6 +131,10 @@ from the document.") (outlook (article-begin-function . nndoc-outlook-article-begin) (body-end . "\0")) + (oe-dbx ;; Outlook Express DBX format + (dissection-function . nndoc-oe-dbx-dissection) + (generate-head-function . nndoc-oe-dbx-generate-head) + (generate-article-function . nndoc-oe-dbx-generate-article)) (guess (guess . t) (subtype nil)) @@ -138,6 +145,9 @@ from the document.") (guess . t) (subtype nil)))) +(defvar nndoc-binary-file-names ".[Dd][Bb][Xx]$" + "Regexp for binary nndoc file names.") + (defvoo nndoc-file-begin nil) (defvoo nndoc-first-article nil) @@ -163,6 +173,8 @@ from the document.") (defvoo nndoc-generate-head-function nil) (defvoo nndoc-article-transform-function nil) (defvoo nndoc-article-begin-function nil) +(defvoo nndoc-generate-article-function nil) +(defvoo nndoc-dissection-function nil) (defvoo nndoc-status-string "") (defvoo nndoc-group-alist nil) @@ -213,8 +225,11 @@ from the document.") (set-buffer buffer) (erase-buffer) (when entry - (if (stringp article) - nil + (cond + ((stringp article) nil) + (nndoc-generate-article-function + (funcall nndoc-generate-article-function article)) + (t (insert-buffer-substring nndoc-current-buffer (car entry) (nth 1 entry)) (insert "\n") @@ -226,7 +241,7 @@ from the document.") (funcall nndoc-prepare-body-function)) (when nndoc-article-transform-function (funcall nndoc-article-transform-function article)) - t))))) + t)))))) (deffoo nndoc-request-group (group &optional server dont-check) "Select news GROUP." @@ -299,10 +314,14 @@ from the document.") (save-excursion (set-buffer nndoc-current-buffer) (erase-buffer) - (if (stringp nndoc-address) - (nnheader-insert-file-contents nndoc-address) - (insert-buffer-substring nndoc-address)) - (run-hooks 'nndoc-open-document-hook)))) + (if (and (stringp nndoc-address) + (string-match nndoc-binary-file-names nndoc-address)) + (let ((coding-system-for-read 'binary)) + (mm-insert-file-contents nndoc-address)) + (if (stringp nndoc-address) + (nnheader-insert-file-contents nndoc-address) + (insert-buffer-substring nndoc-address)) + (run-hooks 'nndoc-open-document-hook))))) ;; Initialize the nndoc structures according to this new document. (when (and nndoc-current-buffer (not nndoc-dissection-alist)) @@ -331,7 +350,9 @@ from the document.") nndoc-body-begin nndoc-body-end-function nndoc-body-end nndoc-prepare-body-function nndoc-article-transform-function nndoc-generate-head-function nndoc-body-begin-function - nndoc-head-begin-function))) + nndoc-head-begin-function + nndoc-generate-article-function + nndoc-dissection-function))) (while vars (set (pop vars) nil))) (let (defs) @@ -600,10 +621,75 @@ from the document.") ;; FIXME: Is JMF the magic of outlook mailbox? -- ShengHuo. (looking-at "JMF")) +(defun nndoc-oe-dbx-type-p () + (looking-at (mm-string-as-multibyte "\317\255\022\376"))) + +(defun nndoc-read-little-endian () + (+ (prog1 (char-after) (forward-char 1)) + (lsh (prog1 (char-after) (forward-char 1)) 8) + (lsh (prog1 (char-after) (forward-char 1)) 16) + (lsh (prog1 (char-after) (forward-char 1)) 24))) + +(defun nndoc-oe-dbx-decode-block () + (list + (nndoc-read-little-endian) ;; this address + (nndoc-read-little-endian) ;; next address offset + (nndoc-read-little-endian) ;; blocksize + (nndoc-read-little-endian))) ;; next address + +(defun nndoc-oe-dbx-dissection () + (let ((i 0) blk p tp) + (goto-char 60117) ;; 0x0000EAD4+1 + (setq p (point)) + (unless (eobp) + (setq blk (nndoc-oe-dbx-decode-block))) + (while (and blk (> (car blk) 0) (or (zerop (nth 3 blk)) + (> (nth 3 blk) p))) + (push (list (incf i) p nil nil nil 0) nndoc-dissection-alist) + (while (and (> (car blk) 0) (> (nth 3 blk) p)) + (goto-char (1+ (nth 3 blk))) + (setq blk (nndoc-oe-dbx-decode-block))) + (if (or (<= (car blk) p) + (<= (nth 1 blk) 0) + (not (zerop (nth 3 blk)))) + (setq blk nil) + (setq tp (+ (car blk) (nth 1 blk) 17)) + (if (or (<= tp p) (>= tp (point-max))) + (setq blk nil) + (goto-char tp) + (setq p tp + blk (nndoc-oe-dbx-decode-block))))))) + +(defun nndoc-oe-dbx-generate-article (article &optional head) + (let ((entry (cdr (assq article nndoc-dissection-alist))) + (cur (current-buffer)) + (begin (point)) + blk p) + (with-current-buffer nndoc-current-buffer + (setq p (car entry)) + (while (> p (point-min)) + (goto-char p) + (setq blk (nndoc-oe-dbx-decode-block)) + (setq p (point)) + (with-current-buffer cur + (insert-buffer-substring nndoc-current-buffer p (+ p (nth 2 blk)))) + (setq p (1+ (nth 3 blk))))) + (goto-char begin) + (while (re-search-forward "\r$" nil t) + (delete-backward-char 1)) + (when head + (goto-char begin) + (when (search-forward "\n\n" nil t) + (setcar (cddddr entry) (count-lines (point) (point-max))) + (delete-region (1- (point)) (point-max)))) + t)) + +(defun nndoc-oe-dbx-generate-head (article) + (nndoc-oe-dbx-generate-article article 'head)) + (deffoo nndoc-request-accept-article (group &optional server last) nil) - ;;; ;;; Functions for dissecting the documents ;;; @@ -625,43 +711,45 @@ from the document.") ;; Remove blank lines. (while (eq (following-char) ?\n) (delete-char 1)) - ;; Find the beginning of the file. - (when nndoc-file-begin - (nndoc-search nndoc-file-begin)) - ;; Go through the file. - (while (if (and first nndoc-first-article) - (nndoc-search nndoc-first-article) - (nndoc-article-begin)) - (setq first nil) - (cond (nndoc-head-begin-function - (funcall nndoc-head-begin-function)) - (nndoc-head-begin - (nndoc-search nndoc-head-begin))) - (if (or (eobp) - (and nndoc-file-end - (looking-at nndoc-file-end))) - (goto-char (point-max)) - (setq head-begin (point)) - (nndoc-search (or nndoc-head-end "^$")) - (setq head-end (point)) - (if nndoc-body-begin-function - (funcall nndoc-body-begin-function) - (nndoc-search (or nndoc-body-begin "^\n"))) - (setq body-begin (point)) - (or (and nndoc-body-end-function - (funcall nndoc-body-end-function)) - (and nndoc-body-end - (nndoc-search nndoc-body-end)) - (nndoc-article-begin) - (progn - (goto-char (point-max)) - (when nndoc-file-end - (and (re-search-backward nndoc-file-end nil t) - (beginning-of-line))))) - (setq body-end (point)) - (push (list (incf i) head-begin head-end body-begin body-end - (count-lines body-begin body-end)) - nndoc-dissection-alist)))))) + (if nndoc-dissection-function + (funcall nndoc-dissection-function) + ;; Find the beginning of the file. + (when nndoc-file-begin + (nndoc-search nndoc-file-begin)) + ;; Go through the file. + (while (if (and first nndoc-first-article) + (nndoc-search nndoc-first-article) + (nndoc-article-begin)) + (setq first nil) + (cond (nndoc-head-begin-function + (funcall nndoc-head-begin-function)) + (nndoc-head-begin + (nndoc-search nndoc-head-begin))) + (if (or (eobp) + (and nndoc-file-end + (looking-at nndoc-file-end))) + (goto-char (point-max)) + (setq head-begin (point)) + (nndoc-search (or nndoc-head-end "^$")) + (setq head-end (point)) + (if nndoc-body-begin-function + (funcall nndoc-body-begin-function) + (nndoc-search (or nndoc-body-begin "^\n"))) + (setq body-begin (point)) + (or (and nndoc-body-end-function + (funcall nndoc-body-end-function)) + (and nndoc-body-end + (nndoc-search nndoc-body-end)) + (nndoc-article-begin) + (progn + (goto-char (point-max)) + (when nndoc-file-end + (and (re-search-backward nndoc-file-end nil t) + (beginning-of-line))))) + (setq body-end (point)) + (push (list (incf i) head-begin head-end body-begin body-end + (count-lines body-begin body-end)) + nndoc-dissection-alist))))))) (defun nndoc-article-begin () (if nndoc-article-begin-function diff --git a/lisp/nnimap.el b/lisp/nnimap.el index cdc06a2..a715e4a 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -866,6 +866,10 @@ function is generally only called when Gnus is shutting down." (or (member "\\NoSelect" (imap-mailbox-get 'list-flags group nnimap-server-buffer)) (let ((info (nnimap-find-minmax-uid group 'examine))) + (when (> (or (imap-mailbox-get 'recent group + nnimap-server-buffer) 0) + 0) + (push (list (cons group 0)) nnmail-split-history)) (insert (format "\"%s\" %d %d y\n" group (or (nth 2 info) 0) (max 1 (or (nth 1 info) 1)))))))) @@ -902,9 +906,10 @@ function is generally only called when Gnus is shutting down." (gnus-info-set-read info seen))) (mapcar (lambda (pred) - (when (and (nnimap-mark-permanent-p (cdr pred)) - (member (nnimap-mark-to-flag (cdr pred)) - (imap-mailbox-get 'flags))) + (when (or (eq (cdr pred) 'recent) + (and (nnimap-mark-permanent-p (cdr pred)) + (member (nnimap-mark-to-flag (cdr pred)) + (imap-mailbox-get 'flags)))) (gnus-info-set-marks info (nnimap-update-alist-soft @@ -950,6 +955,8 @@ function is generally only called when Gnus is shutting down." marks) ;; cache flags are pointless on the server (setq cmdmarks (delq 'cache cmdmarks)) + ;; recent marks can't be set + (setq cmdmarks (delq 'recent cmdmarks)) (when nnimap-importantize-dormant ;; flag dormant articles as ticked (if (memq 'dormant cmdmarks) @@ -1293,6 +1300,7 @@ function is generally only called when Gnus is shutting down." '((read . "SEEN") (tick . "FLAGGED") (draft . "DRAFT") + (recent . "RECENT") (reply . "ANSWERED"))) (cons (cdr pair) (format "KEYWORD gnus-%s" (symbol-name (cdr pair)))))) @@ -1311,6 +1319,7 @@ to be used within a IMAP SEARCH query." '((read . "\\Seen") (tick . "\\Flagged") (draft . "\\Draft") + (recent . "\\Recent") (reply . "\\Answered"))) (cons (cdr pair) (format "gnus-%s" (symbol-name (cdr pair)))))) diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index 37cd094..2c29861 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -628,7 +628,7 @@ (let ((nnheader-file-coding-system nnmbox-file-coding-system)) (nnheader-find-file-noselect - nnmbox-mbox-file nil t)))) + nnmbox-mbox-file t t)))) (buffer-disable-undo) ;; Go through the group alist and compare against the mbox file. diff --git a/texi/ChangeLog b/texi/ChangeLog index e4ff951..7ab6263 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,25 @@ +2001-08-11 23:00:00 ShengHuo ZHU + From Nevin Kapur + + * gnus.texi (September Gnus): Typo. + +2001-08-12 Simon Josefsson + Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE + + * gnus.texi (Other Marks): Add recent. + (Optional Backend Functions): Add forward and recent. + +2001-08-12 Kai Grossjohann + + * gnus.texi (Window Layout): Renamed from `Windows + Configuration'. After all, we're not talking about Microsoft. + Suggested by Barry Fishman. + +2001-08-11 Kai Gro,A_(Bjohann + + * gnus.texi (Summary Mail Commands): Remove duplicate explanation + of `S W'. Reported by Norbert Koch. + 2001-08-09 15:00:00 ShengHuo ZHU From Benjamin Rutt diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 3124d09..08bcc1c 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -841,7 +841,7 @@ Various * Symbolic Prefixes:: $B$$$/$D$+$N(B gnus $B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!(B * Formatting Variables:: $B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v(B $B$,$G$-$k(B -* Windows Configuration:: Gnus $B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k(B +* Window Layout:: Gnus $B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k(B * Faces and Fonts:: $B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k(B * Compilation:: $B$I$N$h$&$K$7$F(B gnus $B$NB.EY$r>e$2$k$+(B * Mode Lines:: $B%b!<%I9T$K>pJs$rI=<($9$k(B @@ -4614,7 +4614,7 @@ Summary Buffer} $B$r;2>H$7$F2<$5$$!#(B $BF,0z?t$N=,47$r;H$$$^$9!#(B @item S v -@kindex S v (Summary) +@kindex S v ($B35N,(B) @findex gnus-summary-very-wide-reply $B8=:_$N5-;v$r=q$$$??M$KBP$7$F!"Hs>o$K9-$$JVEz(B (very wide reply) $B$r$7$^(B $B$9(B (@code{gnus-summary-very-wide-reply})$B!#(B@dfn{$BHs>o$K9-$$JVEz(B} $B$H$O!"%W(B @@ -4623,7 +4623,7 @@ Summary Buffer} $B$r;2>H$7$F2<$5$$!#(B $B$r$9$k$3$H$G$9!#$3$NL?Na$O%W%m%;%9(B/$B@\F,0z?t$N=,47$r;H$$$^$9!#(B @item S V -@kindex S V (Summary) +@kindex S V ($B35N,(B) @findex gnus-summary-very-wide-reply-with-original $B8=:_$N5-;v$KK\5-;v$r4^$s$@Hs>o$K9-$$JVEz$N%a!<%k$rAw$j$^(B $B$9(B (@code{gnus-summary-very-wide-reply-with-original})$B!#$3$NL?Na$O%W%m%;(B @@ -5012,6 +5012,11 @@ gnus $B<+BN$O2D;k5-;v$r4|8B@Z$l>C5n$7$^$;$s(B) $B$N$G!"1J1s$K5-;v$rJ]B8$7$F$* $BE>Aw$7$?5-;v$O$9$Y$FFs7eL\$K(B @samp{O} $B$N0u$,$D$-$^(B $B$9(B (@code{gnus-forwarded-mark})$B!#(B +@vindex gnus-recent-mark +$B$=$N%0%k!<%W$G(B ``$B:G6a(B'' (``recently'') $BFO$$$?5-;v$OFs7eL\$K(B @samp{N} $B$N(B +$B$N0u$,$D$-$^$9(B (@code{gnus-recent-mark})$B!#$?$$$F$$$N%P%C%/%(%s%I$O$3$N0u(B +$B$r%5%]!<%H$;$:!"$=$N>l9g$OI=<($5$l$^$;$s!#(B + @item @vindex gnus-cached-mark $B5-;v%-%c%C%7%e$KCy$a$i$l$F$$$k5-;v$OFs7eL\$K(B @samp{*} $B$N0u$,$D$-$^(B @@ -8132,7 +8137,7 @@ Line Formatting})$B!#%G%#%U%)%k%H$O(B @samp{Gnus: %%b %S %Z} $B$G$9!#;HMQ2DG= (article 1.0)))) @end lisp -@xref{Windows Configuration}$B!#(B +@xref{Window Layout}$B!#(B @node Mail Group Commands @section $B%a!<%k%0%k!<%WL?Na(B @@ -16956,7 +16961,7 @@ Gnus $B$O0lF|$K0l2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7(B gnus $B$r;MF| * Symbolic Prefixes:: $B$$$/$D$+$N(B gnus $B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!(B * Formatting Variables:: $B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v(B $B$,$G$-$k(B -* Windows Configuration:: Gnus $B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k(B +* Window Layout:: Gnus $B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k(B * Faces and Fonts:: $B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k(B * Compilation:: $B$I$N$h$&$K$7$F(B gnus $B$NB.EY$r>e$2$k$+(B * Mode Lines:: $B%b!<%I9T$K>pJs$rI=<($9$k(B @@ -17284,9 +17289,9 @@ Emacs $B$,(B @samp{%b} $B$rl=j!#$3$l$O=i4|@_Dj$G$O(B @code{picons} $B$G$9(B ( $B$O=i4|@_Dj$G(B @samp{*Picons*} $B%P%C%U%!$K0LCV$7$^$9(B)$B!#B>$NM-8z$J>l=j$H$7$F(B $B$O(B @code{article}, @code{summary} $B$"$k$$$O(B @samp{*scratch*} $B$@$m$&$HCN$C(B $B$?$3$H$G$O$"$j$^$;$s!#$?$@$=$N%P%C%U%!$rI8=`$N(B gnus $BAkG[CV=h(B -$BM}(B --- @pxref{Windows Configuration} $B$K$h$C$F8+$($k$h$&$K$7$F$*$/$3$H$r(B -$B3NG'$7$F$/$@$5$$!#(B +$BM}(B --- @pxref{Window Layout} $B$K$h$C$F8+$($k$h$&$K$7$F$*$/$3$H$r3NG'$7$F(B +$B$/$@$5$$!#(B @item gnus-picons-group-excluded-groups @vindex gnus-picons-group-excluded-groups @@ -19491,7 +19496,7 @@ Buttons})$B!#(B @item Gnus $B$N%&%#%s%I%&$H%U%l!<%`$N@_Dj$G$?$/$5$s$NJQ$J;v$r$G$-$k$h$&$K$J$j$^(B -$B$7$?(B (@pxref{Windows Configuration})$B!#(B +$B$7$?(B (@pxref{Window Layout})$B!#(B @item $B%-!<%\!<%I$r;H$&Be$o$j$K!"%\%?%s$r%/%j%C%/$G$-$k$h$&$K$J$j$^$7(B @@ -19645,7 +19650,7 @@ Washing})$B!#(B @item $B%U%l!<%`$,(B @code{gnus-buffer-configuration} $B$NItJ,$K$J$k;v$,$G$-$^(B -$B$9(B (@pxref{Windows Configuration})$B!#(B +$B$9(B (@pxref{Window Layout})$B!#(B @item $B%G!<%b%s$N%W%m%;%9$G%a!<%k$r:FAv::$9$k$3$H$,$G$-$k$h$&$K$J$j$^$7(B @@ -21042,9 +21047,10 @@ ACTION $B$O(B @code{set}, @code{add}, @code{del} $B$N$I$l$+$G!"$=$l$>$lA4$F$N $BB8:_$9$k0u$r>C5n$7$F!";XDj$5$l$?$h$&$K@_Dj!"0u$NDI2C(B ($B8@5Z$5$l$F$$$J$$0u(B $B$OJ]B8$7$^$9(B)$B!"0u$N>C5n(B ($B8@5Z$5$l$F$$$J$$0u$OJ]B8$7$^$9(B) $B$G$9!#(BMARK $B$O0u(B $B$N%j%9%H$G$9!#$=$l$>$l$N0u$O%7%s%\%k$G$9!#8=:_;H$o$l$F$$$k0u(B -$B$O(B @code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed}, @code{dormant}, @code{save}, @code{download}, @code{unsend} $B$G(B -$B$9$,!"$b$72DG=$J$i!"$"$J$?$N%P%C%/%(%s%I$O$3$l$i$K@)8B$r$9$k$Y$-$G$O$"$j(B -$B$^$;$s!#(B +$B$O(B @code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed}, +@code{dormant}, @code{save}, @code{download}, @code{unsend}, +@code{forward} $B$*$h$S(B @code{recent} $B$G$9$,!"$b$72DG=$J$i!"$"$J$?$N%P%C%/(B +$B%(%s%I$O$3$l$i$K@)8B$r$9$k$Y$-$G$O$"$j$^$;$s!#(B $BL7=b$9$kF0:n$,;XDj$5$l$?$H$-!"%j%9%H$N:G8e$NF0:n$,8zNO$r;}$D$b$N$K$J$j$^(B $B$9!#$9$J$o$A!"F0:n$K5-;v(B 1 $B$K(B @code{$B2D;k(B} $B0u$rDI2C$9$kMW5a$,$"$j!"%j%9%H(B diff --git a/texi/gnus.texi b/texi/gnus.texi index 423a8ad..5816e14 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -771,7 +771,7 @@ Various * Interactive:: Making Gnus ask you many questions. * Symbolic Prefixes:: How to supply some Gnus functions with options. * Formatting Variables:: You can specify what buffers should look like. -* Windows Configuration:: Configuring the Gnus buffer windows. +* Window Layout:: Configuring the Gnus buffer windows. * Faces and Fonts:: How to change how faces look. * Compilation:: How to speed Gnus up. * Mode Lines:: Displaying information in the mode lines. @@ -4688,13 +4688,6 @@ that goes out to all people listed in the @code{To}, @code{From} (or @code{Reply-to}) and @code{Cc} headers in all the process/prefixed articles. This command uses the process/prefix convention. -@item S W -@kindex S W (Summary) -@findex gnus-summary-wide-reply-with-original -Mail a very wide reply to the current article and include the original -message (@code{gnus-summary-wide-reply-with-original}). This command uses -the process/prefix convention. - @item S o m @itemx C-c C-f @kindex S o m (Summary) @@ -5093,6 +5086,11 @@ answered) will be marked with an @samp{A} in the second column All articles that you have forwarded will be marked with an @samp{O} in the second column (@code{gnus-forwarded-mark}). +@vindex gnus-recent-mark +Articles that are ``recently'' arrived in the group will be marked +with an @samp{N} in the second column (@code{gnus-recent-mark}). Most +backend doesn't support the mark, in which case it's not shown. + @item @vindex gnus-cached-mark Articles stored in the article cache will be marked with an @samp{*} in @@ -8651,7 +8649,7 @@ following to your @file{.gnus.el} file: (article 1.0)))) @end lisp -@xref{Windows Configuration}. +@xref{Window Layout}. @node Mail Group Commands @@ -17482,7 +17480,7 @@ four days, Gnus will decay the scores four times, for instance. * Interactive:: Making Gnus ask you many questions. * Symbolic Prefixes:: How to supply some Gnus functions with options. * Formatting Variables:: You can specify what buffers should look like. -* Windows Configuration:: Configuring the Gnus buffer windows. +* Window Layout:: Configuring the Gnus buffer windows. * Faces and Fonts:: How to change how faces look. * Compilation:: How to speed Gnus up. * Mode Lines:: Displaying information in the mode lines. @@ -17842,9 +17840,9 @@ Note that the @samp{%(} specs (and friends) do not make any sense on the mode-line variables. -@node Windows Configuration -@section Windows Configuration -@cindex windows configuration +@node Window Layout +@section Window Layout +@cindex window layout No, there's nothing here about X, so be quiet. @@ -18815,7 +18813,7 @@ default (which by default maps to the buffer @samp{*Picons*}). Other valid places could be @code{article}, @code{summary}, or @samp{*scratch*} for all I care. Just make sure that you've made the buffer visible using the standard Gnus window configuration -routines---@pxref{Windows Configuration}. +routines---@pxref{Window Layout}. @item gnus-picons-group-excluded-groups @vindex gnus-picons-group-excluded-groups @@ -20096,7 +20094,7 @@ Buttons}). @item You can do lots of strange stuff with the Gnus window & frame -configuration (@pxref{Windows Configuration}). +configuration (@pxref{Window Layout}). @item You can click on buttons instead of using the keyboard @@ -20245,8 +20243,8 @@ All summary mode commands are available directly from the article buffer (@pxref{Article Keymap}). @item -Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows -Configuration}). +Frames can be part of @code{gnus-buffer-configuration} (@pxref{Window +Layout}). @item Mail can be re-scanned by a daemonic process (@pxref{Daemons}). @@ -21691,8 +21689,8 @@ marks not mentioned) mark and removing (preserving the marks not mentioned) marks. MARK is a list of marks; where each mark is a symbol. Currently used marks are @code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed}, @code{dormant}, @code{save}, -@code{download} and @code{unsend}, but your backend should, if possible, -not limit itself to these. +@code{download}, @code{unsend}, @code{forward} and @code{recent}, +but your backend should, if possible, not limit itself to these. Given contradictory actions, the last action in the list should be the effective one. That is, if your action contains a request to add the -- 1.7.10.4