Merge from gnus--rel--5.10

Patches applied:

 * gnus--rel--5.10  (patch 245)

   - Update from CVS

2007-08-17  Katsumi Yamaoka  <yamaoka@jpl.org>

   * lisp/gnus/gnus-art.el (gnus-article-summary-command-nosave)
   (gnus-article-read-summary-keys): Don't use 3rd arg of pop-to-buffer.

2007-08-14  Katsumi Yamaoka  <yamaoka@jpl.org>

   * lisp/gnus/gnus.el (gnus-maximum-newsgroup): New variable.

   * lisp/gnus/gnus-agent.el (gnus-agent-fetch-headers): Limit the range of articles
   according to gnus-maximum-newsgroup.

   * lisp/gnus/gnus-sum.el (gnus-articles-to-read, gnus-list-of-unread-articles)
   (gnus-list-of-read-articles, gnus-sequence-of-unread-articles): Limit
   the range of articles according to gnus-maximum-newsgroup.

2007-08-14  Katsumi Yamaoka  <yamaoka@jpl.org>

   * man/gnus.texi (Selecting a Group): Mention gnus-maximum-newsgroup.

Revision: emacs@sv.gnu.org/emacs--rel--22--patch-96
This commit is contained in:
Miles Bader 2007-08-21 04:52:22 +00:00
parent 30a718e6b7
commit 11abff8e05
7 changed files with 88 additions and 18 deletions

View file

@ -1,3 +1,19 @@
2007-08-17 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-article-summary-command-nosave)
(gnus-article-read-summary-keys): Don't use 3rd arg of pop-to-buffer.
2007-08-14 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.el (gnus-maximum-newsgroup): New variable.
* gnus-agent.el (gnus-agent-fetch-headers): Limit the range of articles
according to gnus-maximum-newsgroup.
* gnus-sum.el (gnus-articles-to-read, gnus-list-of-unread-articles)
(gnus-list-of-read-articles, gnus-sequence-of-unread-articles): Limit
the range of articles according to gnus-maximum-newsgroup.
2007-08-10 Katsumi Yamaoka <yamaoka@jpl.org>
* nntp.el (nntp-xref-number-is-evil): New server variable.

View file

@ -1765,7 +1765,14 @@ article numbers will be returned."
(gnus-agent-find-parameter group
'agent-predicate)))))
(articles (if fetch-all
(gnus-uncompress-range (gnus-active group))
(if gnus-maximum-newsgroup
(let ((active (gnus-active group)))
(gnus-uncompress-range
(cons (max (car active)
(- (cdr active)
gnus-maximum-newsgroup -1))
(cdr active))))
(gnus-uncompress-range (gnus-active group)))
(gnus-list-of-unread-articles group)))
(gnus-decode-encoded-word-function 'identity)
(gnus-decode-encoded-address-function 'identity)

View file

@ -5607,7 +5607,7 @@ not have a face in `gnus-article-boring-faces'."
"Execute the last keystroke in the summary buffer."
(interactive)
(let (func)
(pop-to-buffer gnus-article-current-summary nil (not (featurep 'xemacs)))
(pop-to-buffer gnus-article-current-summary)
(setq func (lookup-key (current-local-map) (this-command-keys)))
(call-interactively func)))
@ -5646,8 +5646,7 @@ not have a face in `gnus-article-boring-faces'."
(member keys nosave-in-article))
(let (func)
(save-window-excursion
(pop-to-buffer gnus-article-current-summary
nil (not (featurep 'xemacs)))
(pop-to-buffer gnus-article-current-summary)
;; We disable the pick minor mode commands.
(let (gnus-pick-mode)
(setq func (lookup-key (current-local-map) keys))))
@ -5659,16 +5658,14 @@ not have a face in `gnus-article-boring-faces'."
(call-interactively func)
(setq new-sum-point (point)))
(when (member keys nosave-but-article)
(pop-to-buffer gnus-article-buffer
nil (not (featurep 'xemacs)))))
(pop-to-buffer gnus-article-buffer)))
;; These commands should restore window configuration.
(let ((obuf (current-buffer))
(owin (current-window-configuration))
(opoint (point))
win func in-buffer selected new-sum-start new-sum-hscroll)
(cond (not-restore-window
(pop-to-buffer gnus-article-current-summary
nil (not (featurep 'xemacs))))
(pop-to-buffer gnus-article-current-summary))
((setq win (get-buffer-window gnus-article-current-summary))
(select-window win))
(t

View file

@ -5472,7 +5472,13 @@ If SELECT-ARTICLES, only select those articles from GROUP."
;; articles in the group, or (if that's nil), the
;; articles in the cache.
(or
(gnus-uncompress-range (gnus-active group))
(if gnus-maximum-newsgroup
(let ((active (gnus-active group)))
(gnus-uncompress-range
(cons (max (car active)
(- (cdr active) gnus-maximum-newsgroup -1))
(cdr active))))
(gnus-uncompress-range (gnus-active group)))
(gnus-cache-articles-in-group group))
;; Select only the "normal" subset of articles.
(gnus-sorted-nunion
@ -6534,23 +6540,26 @@ displayed, no centering will be performed."
(let* ((read (gnus-info-read (gnus-get-info group)))
(active (or (gnus-active group) (gnus-activate-group group)))
(last (cdr active))
(bottom (if gnus-maximum-newsgroup
(max (car active) (- last gnus-maximum-newsgroup -1))
(car active)))
first nlast unread)
;; If none are read, then all are unread.
(if (not read)
(setq first (car active))
(setq first bottom)
;; If the range of read articles is a single range, then the
;; first unread article is the article after the last read
;; article. Sounds logical, doesn't it?
(if (and (not (listp (cdr read)))
(or (< (car read) (car active))
(or (< (car read) bottom)
(progn (setq read (list read))
nil)))
(setq first (max (car active) (1+ (cdr read))))
(setq first (max bottom (1+ (cdr read))))
;; `read' is a list of ranges.
(when (/= (setq nlast (or (and (numberp (car read)) (car read))
(caar read)))
1)
(setq first (car active)))
(setq first bottom))
(while read
(when first
(while (< first nlast)
@ -6575,7 +6584,12 @@ displayed, no centering will be performed."
(gnus-list-range-difference
(gnus-list-range-difference
(gnus-sorted-complement
(gnus-uncompress-range active)
(gnus-uncompress-range
(if gnus-maximum-newsgroup
(cons (max (car active)
(- (cdr active) gnus-maximum-newsgroup -1))
(cdr active))
active))
(gnus-list-of-unread-articles group))
(cdr (assq 'dormant marked)))
(cdr (assq 'tick marked))))))
@ -6587,23 +6601,26 @@ displayed, no centering will be performed."
(let* ((read (gnus-info-read (gnus-get-info group)))
(active (or (gnus-active group) (gnus-activate-group group)))
(last (cdr active))
(bottom (if gnus-maximum-newsgroup
(max (car active) (- last gnus-maximum-newsgroup -1))
(car active)))
first nlast unread)
;; If none are read, then all are unread.
(if (not read)
(setq first (car active))
(setq first bottom)
;; If the range of read articles is a single range, then the
;; first unread article is the article after the last read
;; article. Sounds logical, doesn't it?
(if (and (not (listp (cdr read)))
(or (< (car read) (car active))
(or (< (car read) bottom)
(progn (setq read (list read))
nil)))
(setq first (max (car active) (1+ (cdr read))))
(setq first (max bottom (1+ (cdr read))))
;; `read' is a list of ranges.
(when (/= (setq nlast (or (and (numberp (car read)) (car read))
(caar read)))
1)
(setq first (car active)))
(setq first bottom))
(while read
(when first
(push (cons first nlast) unread))

View file

@ -1501,6 +1501,17 @@ If it is nil, no confirmation is required."
:type '(choice (const :tag "No limit" nil)
integer))
(defcustom gnus-maximum-newsgroup nil
"The maximum number of articles a newsgroup.
If this is a number, old articles in a newsgroup exceeding this number
are silently ignored. If it is nil, no article is ignored. Note that
setting this variable to a number might prevent you from reading very
old articles."
:group 'gnus-group-select
:version "22.2"
:type '(choice (const :tag "No limit" nil)
integer))
(defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix)))
"*Non-nil means that the default name of a file to save articles in is the group name.
If it's nil, the directory form of the group name is used instead.

View file

@ -1,3 +1,7 @@
2007-08-14 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.texi (Selecting a Group): Mention gnus-maximum-newsgroup.
2007-08-17 Eli Zaretskii <eliz@gnu.org>
* basic.texi (Position Info): Add index entry for face at point.

View file

@ -2153,6 +2153,24 @@ most recently will be fetched.
@code{gnus-large-newsgroup}, but is only used for ephemeral
newsgroups.
@vindex gnus-maximum-newsgroup
In groups in some news servers, there might be a big gap between a few
very old articles that will never be expired and the recent ones. In
such a case, the server will return the data like @code{(1 . 30000000)}
for the @code{LIST ACTIVE group} command, for example. Even if there
are actually only the articles 1-10 and 29999900-30000000, Gnus doesn't
know it at first and prepares for getting 30000000 articles. However,
it will consume hundreds megabytes of memories and might make Emacs get
stuck as the case may be. If you use such news servers, set the
variable @code{gnus-maximum-newsgroup} to a positive number. The value
means that Gnus ignores articles other than this number of the latest
ones in every group. For instance, the value 10000 makes Gnus get only
the articles 29990001-30000000 (if the latest article number is 30000000
in a group). Note that setting this variable to a number might prevent
you from reading very old articles. The default value of the variable
@code{gnus-maximum-newsgroup} is @code{nil}, which means Gnus never
ignores old articles.
@vindex gnus-select-group-hook
@vindex gnus-auto-select-first
@vindex gnus-auto-select-subject