From 780dcfaaf2e442afee8514e1f2a247c3b97d3722 Mon Sep 17 00:00:00 2001 From: yamaoka Date: Sun, 15 Apr 2001 22:42:46 +0000 Subject: [PATCH] Importing Oort Gnus v0.02. --- lisp/ChangeLog | 24 +++++++++++++ lisp/gnus-agent.el | 25 ++++++-------- lisp/gnus-sum.el | 97 ++++++++++++++++++++++++++++++++++------------------ lisp/gnus.el | 2 +- lisp/mm-util.el | 3 +- texi/gnus.texi | 2 +- 6 files changed, 100 insertions(+), 53 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1c1790b..7da8061 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2001-04-14 01:14:42 Lars Magne Ingebrigtsen + + *gnus.el: Oort Gnus v0.02 is released. + +2001-04-14 00:48:42 Lars Magne Ingebrigtsen + + * gnus.el: Oort Gnus v0.01 is released. + +2001-04-13 22:01:46 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-highlight): Highlight read + undownloaded articles as read articles. + + * gnus-agent.el (gnus-agent-get-undownloaded-list): Clean up. + (gnus-agent-get-undownloaded-list): Mark all undownloaded + articles, even read ones, as such. + + * gnus-sum.el (gnus-summary-find-matching): Clean up. + (gnus-find-matching-articles): New function. + (gnus-summary-limit-include-matching-articles): New command. + (gnus-summary-limit-include-thread): Include articles that have + matching subjects. + (gnus-offer-save-summaries): Clean up. + 2001-04-13 Kai Gro,A_(Bjohann * nnmail.el (nnmail-split-fancy-with-parent): Add docstring. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index a2ed42c..d5c9017 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -641,23 +641,18 @@ the actual number of articles toggled is returned." (gnus-agent-method-p gnus-command-method)) (gnus-agent-load-alist gnus-newsgroup-name) ;; First mark all undownloaded articles as undownloaded. - (let ((articles (append gnus-newsgroup-unreads - gnus-newsgroup-marked - gnus-newsgroup-dormant)) - article) - (while (setq article (pop articles)) - (unless (or (cdr (assq article gnus-agent-article-alist)) - (memq article gnus-newsgroup-downloadable) - (memq article gnus-newsgroup-cached)) - (push article gnus-newsgroup-undownloaded)))) + (dolist (article (mapcar (lambda (header) (mail-header-number header)) + gnus-newsgroup-headers)) + (unless (or (cdr (assq article gnus-agent-article-alist)) + (memq article gnus-newsgroup-downloadable) + (memq article gnus-newsgroup-cached)) + (push article gnus-newsgroup-undownloaded))) ;; Then mark downloaded downloadable as not-downloadable, ;; if you get my drift. - (let ((articles gnus-newsgroup-downloadable) - article) - (while (setq article (pop articles)) - (when (cdr (assq article gnus-agent-article-alist)) - (setq gnus-newsgroup-downloadable - (delq article gnus-newsgroup-downloadable)))))))) + (dolist (article gnus-newsgroup-downloadable) + (when (cdr (assq article gnus-agent-article-alist)) + (setq gnus-newsgroup-downloadable + (delq article gnus-newsgroup-downloadable))))))) (defun gnus-agent-catchup () "Mark all undownloaded articles as read." diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 119d740..5263405 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -820,8 +820,11 @@ automatically when it is selected." ((and (< score default) (memq mark (list gnus-downloadable-mark gnus-undownloaded-mark))) . gnus-summary-low-unread-face) - ((memq mark (list gnus-downloadable-mark gnus-undownloaded-mark)) + ((and (memq mark (list gnus-downloadable-mark gnus-undownloaded-mark)) + (memq article gnus-newsgroup-unreads)) . gnus-summary-normal-unread-face) + ((memq mark (list gnus-downloadable-mark gnus-undownloaded-mark)) + . gnus-summary-normal-read-face) ((> score default) . gnus-summary-high-read-face) ((< score default) @@ -4360,7 +4363,7 @@ or a straight list of headers." (not (eq gnus-fetch-old-headers 'some)) (not (numberp gnus-fetch-old-headers))) (> (length articles) 1)) - gnus-fetch-old-headers)))) + gnus-fetch-old-headers)))) (gnus-get-newsgroup-headers-xover articles nil nil gnus-newsgroup-name t) (gnus-get-newsgroup-headers)) @@ -6714,12 +6717,27 @@ Returns how many articles were removed." (gnus-summary-position-point)))) (defun gnus-summary-limit-include-thread (id) - "Display all the hidden articles that in the current thread." + "Display all the hidden articles that is in the thread with ID in it. +When called interactively, ID is the Message-ID of the current +article." (interactive (list (mail-header-id (gnus-summary-article-header)))) (let ((articles (gnus-articles-in-thread (gnus-id-to-thread (gnus-root-id id))))) (prog1 (gnus-summary-limit (nconc articles gnus-newsgroup-limit)) + (gnus-summary-limit-include-matching-articles + "subject" + (regexp-quote (gnus-simplify-subject-re + (mail-header-subject (gnus-id-to-header id))))) + (gnus-summary-position-point)))) + +(defun gnus-summary-limit-include-matching-articles (header regexp) + "Display all the hidden articles that have HEADERs that match REGEXP." + (interactive (list (read-string "Match on header: ") + (read-string "Regexp: "))) + (let ((articles (gnus-find-matching-articles header regexp))) + (prog1 + (gnus-summary-limit (nconc articles gnus-newsgroup-limit)) (gnus-summary-position-point)))) (defun gnus-summary-limit-include-dormant () @@ -7388,6 +7406,18 @@ Optional argument BACKWARD means do search for backward. (gnus-summary-position-point) t))) +(defun gnus-find-matching-articles (header regexp) + "Return a list of all articles that match REGEXP on HEADER. +This search includes all articles in the current group that Gnus has +fetched headers for, whether they are displayed or not." + (let ((articles nil) + (func `(lambda (h) (,(intern (concat "mail-header-" header)) h))) + (case-fold-search t)) + (dolist (header gnus-newsgroup-headers) + (when (string-match regexp (funcall func header)) + (push (mail-header-number header) articles))) + (nreverse articles))) + (defun gnus-summary-find-matching (header regexp &optional backward unread not-case-fold) "Return a list of all articles that match REGEXP on HEADER. @@ -7396,10 +7426,7 @@ BACKWARD is non-nil. If BACKWARD is `all', do all articles. If UNREAD is non-nil, only unread articles will be taken into consideration. If NOT-CASE-FOLD, case won't be folded in the comparisons." - (let ((data (if (eq backward 'all) gnus-newsgroup-data - (gnus-data-find-list - (gnus-summary-article-number) (gnus-data-list backward)))) - (case-fold-search (not not-case-fold)) + (let ((case-fold-search (not not-case-fold)) articles d func) (if (consp header) (if (eq (car header) 'extra) @@ -7411,14 +7438,17 @@ in the comparisons." (unless (fboundp (intern (concat "mail-header-" header))) (error "%s is not a valid header" header)) (setq func `(lambda (h) (,(intern (concat "mail-header-" header)) h)))) - (while data - (setq d (car data)) - (and (or (not unread) ; We want all articles... - (gnus-data-unread-p d)) ; Or just unreads. - (vectorp (gnus-data-header d)) ; It's not a pseudo. - (string-match regexp (funcall func (gnus-data-header d))) ; Match. - (push (gnus-data-number d) articles)) ; Success! - (setq data (cdr data))) + (dolist (d (if (eq backward 'all) + gnus-newsgroup-data + (gnus-data-find-list + (gnus-summary-article-number) + (gnus-data-list backward)))) + (when (and (or (not unread) ; We want all articles... + (gnus-data-unread-p d)) ; Or just unreads. + (vectorp (gnus-data-header d)) ; It's not a pseudo. + (string-match regexp + (funcall func (gnus-data-header d)))) ; Match. + (push (gnus-data-number d) articles))) ; Success! (nreverse articles))) (defun gnus-summary-execute-command (header regexp command &optional backward) @@ -9991,25 +10021,24 @@ If REVERSE, save parts that do not match TYPE." (defun gnus-offer-save-summaries () "Offer to save all active summary buffers." - (save-excursion - (let ((buflist (buffer-list)) - buffers bufname) - ;; Go through all buffers and find all summaries. - (while buflist - (and (setq bufname (buffer-name (car buflist))) - (string-match "Summary" bufname) - (save-excursion - (set-buffer bufname) - ;; We check that this is, indeed, a summary buffer. - (and (eq major-mode 'gnus-summary-mode) - ;; Also make sure this isn't bogus. - gnus-newsgroup-prepared - ;; Also make sure that this isn't a dead summary buffer. - (not gnus-dead-summary-mode))) - (push bufname buffers)) - (setq buflist (cdr buflist))) - ;; Go through all these summary buffers and offer to save them. - (when buffers + (let (buffers) + ;; Go through all buffers and find all summaries. + (dolist (buffer (buffer-list)) + (when (and (setq buffer (buffer-name buffer)) + (string-match "Summary" buffer) + (save-excursion + (set-buffer buffer) + ;; We check that this is, indeed, a summary buffer. + (and (eq major-mode 'gnus-summary-mode) + ;; Also make sure this isn't bogus. + gnus-newsgroup-prepared + ;; Also make sure that this isn't a + ;; dead summary buffer. + (not gnus-dead-summary-mode)))) + (push buffer buffers))) + ;; Go through all these summary buffers and offer to save them. + (when buffers + (save-excursion (map-y-or-n-p "Update summary buffer %s? " (lambda (buf) diff --git a/lisp/gnus.el b/lisp/gnus.el index 8718565..0168cd7 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -256,7 +256,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.01" +(defconst gnus-version-number "0.02" "Version number for this version of Gnus.") (defconst gnus-version (format "Oort Gnus v%s" gnus-version-number) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 0b8f48a..d0ff546 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -128,8 +128,7 @@ (setq idx (1+ idx))) string))) (string-as-unibyte . identity) - (multibyte-string-p . ignore) - ))) + (multibyte-string-p . ignore)))) (eval-and-compile (defalias 'mm-char-or-char-int-p diff --git a/texi/gnus.texi b/texi/gnus.texi index 56e3ea3..542e9fe 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -365,7 +365,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Oort Gnus v0.01. +This manual corresponds to Oort Gnus v. @end ifinfo -- 1.7.10.4