Merge from gnus--rel--5.10
Revision: emacs@sv.gnu.org/emacs--rel--22--patch-115
This commit is contained in:
parent
80025c1c5f
commit
4b70e299ef
9 changed files with 298 additions and 101 deletions
|
@ -1,4 +1,26 @@
|
|||
%!PS-Adobe-2.0 EPSF-2.0
|
||||
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
% Free Software Foundation, Inc.
|
||||
%
|
||||
% Author: Luis Fernandes <elf@ee.ryerson.ca>
|
||||
%
|
||||
% This file is part of GNU Emacs.
|
||||
%
|
||||
% GNU Emacs is free software; you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation; either version 3, or (at your option)
|
||||
% any later version.
|
||||
%
|
||||
% GNU Emacs is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
% Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
% Boston, MA 02110-1301, USA.
|
||||
%
|
||||
%%Title: gnuslogo1.ps
|
||||
%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
|
||||
%%BoundingBox: 0 0 493 505
|
||||
|
|
|
@ -1,3 +1,48 @@
|
|||
2007-10-08 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* mm-util.el (mm-charset-synonym-alist): Alias gbk to cp936.
|
||||
|
||||
2007-10-04 Reiner Steib <Reiner.Steib@gmx.de>
|
||||
|
||||
* Relicense "GPLv2 or later" files to "GPLv3 or later".
|
||||
|
||||
2007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-sum.el (gnus-newsgroup-maximum-articles): Move from gnus.el.
|
||||
Suggested by Leo <sdl.web@gmail.com>.
|
||||
|
||||
* gnus.el: Do.
|
||||
|
||||
2007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus.el (gnus-newsgroup-maximum-articles): Rename from
|
||||
gnus-maximum-newsgroup. Suggested by Leo <sdl.web@gmail.com>.
|
||||
|
||||
* gnus-agent.el (gnus-agent-fetch-headers): Do.
|
||||
|
||||
* gnus-sum.el (gnus-articles-to-read, gnus-list-of-unread-articles)
|
||||
(gnus-list-of-read-articles, gnus-sequence-of-unread-articles): Do.
|
||||
|
||||
2007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* nnmbox.el (nnmbox-request-article): Don't assume delim regexp matches
|
||||
newline.
|
||||
(nnmbox-request-accept-article): Don't change article in source buffer;
|
||||
narrow to header to use message-fetch-field rather than
|
||||
nnmail-fetch-field; use with-current-buffer instead of save-excursion.
|
||||
(nnmbox-request-replace-article): Quote lines that'll be misidentified
|
||||
as delimiters; make sure article ends with newline.
|
||||
(nnmbox-delete-mail): Correct last position of article to be deleted;
|
||||
ignore X-Gnus-Newsgroup header in article body.
|
||||
(nnmbox-save-mail): Quote lines looking like delimiters at the right
|
||||
positions; make sure article ends with newline.
|
||||
|
||||
2007-09-05 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* gnus-cus.el (gnus-score-extra): New widget.
|
||||
(gnus-score-extra-convert): New function.
|
||||
(gnus-score-customize): Use it for Extra.
|
||||
|
||||
2007-08-23 Katsumi Yamaoka <yamaoka@jpl.org>
|
||||
|
||||
* mml.el (mml-generate-mime): Make sure it uses multibyte temp buffer.
|
||||
|
|
|
@ -1765,12 +1765,13 @@ article numbers will be returned."
|
|||
(gnus-agent-find-parameter group
|
||||
'agent-predicate)))))
|
||||
(articles (if fetch-all
|
||||
(if gnus-maximum-newsgroup
|
||||
(if gnus-newsgroup-maximum-articles
|
||||
(let ((active (gnus-active group)))
|
||||
(gnus-uncompress-range
|
||||
(cons (max (car active)
|
||||
(- (cdr active)
|
||||
gnus-maximum-newsgroup -1))
|
||||
gnus-newsgroup-maximum-articles
|
||||
-1))
|
||||
(cdr active))))
|
||||
(gnus-uncompress-range (gnus-active group)))
|
||||
(gnus-list-of-unread-articles group)))
|
||||
|
|
|
@ -766,6 +766,67 @@ eh?")))
|
|||
,group))))
|
||||
widget)
|
||||
|
||||
(define-widget 'gnus-score-extra 'group
|
||||
"Edit score entries for extra headers."
|
||||
:convert-widget 'gnus-score-extra-convert)
|
||||
|
||||
(defun gnus-score-extra-convert (widget)
|
||||
;; Set args appropriately.
|
||||
(let* ((tag (widget-get widget :tag))
|
||||
(item `(const :format "" :value ,(downcase tag)))
|
||||
(match '(string :tag "Match"))
|
||||
(score '(choice :tag "Score"
|
||||
(const :tag "default" nil)
|
||||
(integer :format "%v"
|
||||
:hide-front-space t)))
|
||||
(expire '(choice :tag "Expire"
|
||||
(const :tag "off" nil)
|
||||
(integer :format "%v"
|
||||
:hide-front-space t)))
|
||||
(type '(choice :tag "Type"
|
||||
:value s
|
||||
;; I should really create a forgiving :match
|
||||
;; function for each type below, that only
|
||||
;; looked at the first letter.
|
||||
(const :tag "Regexp" r)
|
||||
(const :tag "Regexp (fixed case)" R)
|
||||
(const :tag "Substring" s)
|
||||
(const :tag "Substring (fixed case)" S)
|
||||
(const :tag "Exact" e)
|
||||
(const :tag "Exact (fixed case)" E)
|
||||
(const :tag "Word" w)
|
||||
(const :tag "Word (fixed case)" W)
|
||||
(const :tag "default" nil)))
|
||||
(header (if gnus-extra-headers
|
||||
(let (name)
|
||||
`(choice :tag "Header"
|
||||
,@(mapcar (lambda (h)
|
||||
(setq name (symbol-name h))
|
||||
(list 'const :tag name name))
|
||||
gnus-extra-headers)
|
||||
(string :tag "Other" :format "%v")))
|
||||
'(string :tag "Header")))
|
||||
(group `(group ,match ,score ,expire ,type ,header))
|
||||
(doc (concat (or (widget-get widget :doc)
|
||||
(concat "Change score based on the " tag
|
||||
" header.\n")))))
|
||||
(widget-put
|
||||
widget :args
|
||||
`(,item
|
||||
(repeat :inline t
|
||||
:indent 0
|
||||
:tag ,tag
|
||||
:doc ,doc
|
||||
:format "%t:\n%h%v%i\n\n"
|
||||
(choice :format "%v"
|
||||
:value ("" nil nil s
|
||||
,(if gnus-extra-headers
|
||||
(symbol-name (car gnus-extra-headers))
|
||||
""))
|
||||
,group
|
||||
sexp)))))
|
||||
widget)
|
||||
|
||||
(defvar gnus-custom-scores)
|
||||
(defvar gnus-custom-score-alist)
|
||||
|
||||
|
@ -822,7 +883,7 @@ if you do all your changes will be lost. ")
|
|||
(gnus-score-string :tag "Subject")
|
||||
(gnus-score-string :tag "References")
|
||||
(gnus-score-string :tag "Xref")
|
||||
(gnus-score-string :tag "Extra")
|
||||
(gnus-score-extra :tag "Extra")
|
||||
(gnus-score-string :tag "Message-ID")
|
||||
(gnus-score-integer :tag "Lines")
|
||||
(gnus-score-integer :tag "Chars")
|
||||
|
|
|
@ -1029,6 +1029,17 @@ default charset will be used instead."
|
|||
:type '(repeat symbol)
|
||||
:group 'gnus-charset)
|
||||
|
||||
(defcustom gnus-newsgroup-maximum-articles 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))
|
||||
|
||||
(gnus-define-group-parameter
|
||||
ignored-charsets
|
||||
:type list
|
||||
|
@ -5472,11 +5483,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
|
||||
(if gnus-maximum-newsgroup
|
||||
(if gnus-newsgroup-maximum-articles
|
||||
(let ((active (gnus-active group)))
|
||||
(gnus-uncompress-range
|
||||
(cons (max (car active)
|
||||
(- (cdr active) gnus-maximum-newsgroup -1))
|
||||
(- (cdr active)
|
||||
gnus-newsgroup-maximum-articles
|
||||
-1))
|
||||
(cdr active))))
|
||||
(gnus-uncompress-range (gnus-active group)))
|
||||
(gnus-cache-articles-in-group group))
|
||||
|
@ -6540,8 +6553,9 @@ 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))
|
||||
(bottom (if gnus-newsgroup-maximum-articles
|
||||
(max (car active)
|
||||
(- last gnus-newsgroup-maximum-articles -1))
|
||||
(car active)))
|
||||
first nlast unread)
|
||||
;; If none are read, then all are unread.
|
||||
|
@ -6585,9 +6599,11 @@ displayed, no centering will be performed."
|
|||
(gnus-list-range-difference
|
||||
(gnus-sorted-complement
|
||||
(gnus-uncompress-range
|
||||
(if gnus-maximum-newsgroup
|
||||
(if gnus-newsgroup-maximum-articles
|
||||
(cons (max (car active)
|
||||
(- (cdr active) gnus-maximum-newsgroup -1))
|
||||
(- (cdr active)
|
||||
gnus-newsgroup-maximum-articles
|
||||
-1))
|
||||
(cdr active))
|
||||
active))
|
||||
(gnus-list-of-unread-articles group))
|
||||
|
@ -6601,8 +6617,9 @@ 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))
|
||||
(bottom (if gnus-newsgroup-maximum-articles
|
||||
(max (car active)
|
||||
(- last gnus-newsgroup-maximum-articles -1))
|
||||
(car active)))
|
||||
first nlast unread)
|
||||
;; If none are read, then all are unread.
|
||||
|
|
|
@ -1501,17 +1501,6 @@ 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.
|
||||
|
|
|
@ -256,6 +256,12 @@ the alias. Else windows-NUMBER is used."
|
|||
,@(when (and (not (mm-coding-system-p 'windows-31j))
|
||||
(mm-coding-system-p 'cp932))
|
||||
'((windows-31j . cp932)))
|
||||
;; Charset name: GBK, Charset aliases: CP936, MS936, windows-936
|
||||
;; http://www.iana.org/assignments/charset-reg/GBK
|
||||
;; Emacs 22.1 has cp936, but not gbk, so we alias it:
|
||||
,@(when (and (not (mm-coding-system-p 'gbk))
|
||||
(mm-coding-system-p 'cp936))
|
||||
'((gbk . cp936)))
|
||||
)
|
||||
"A mapping from unknown or invalid charset names to the real charset names.
|
||||
|
||||
|
|
|
@ -153,11 +153,11 @@
|
|||
(re-search-backward (concat "^" message-unix-mail-delimiter) nil t)
|
||||
(setq start (point))
|
||||
(forward-line 1)
|
||||
(or (and (re-search-forward
|
||||
(concat "^" message-unix-mail-delimiter) nil t)
|
||||
(forward-line -1))
|
||||
(goto-char (point-max)))
|
||||
(setq stop (point))
|
||||
(setq stop (if (re-search-forward (concat "^"
|
||||
message-unix-mail-delimiter)
|
||||
nil 'move)
|
||||
(match-beginning 0)
|
||||
(point)))
|
||||
(let ((nntp-server-buffer (or buffer nntp-server-buffer)))
|
||||
(set-buffer nntp-server-buffer)
|
||||
(erase-buffer)
|
||||
|
@ -313,39 +313,45 @@
|
|||
(nnmbox-possibly-change-newsgroup group server)
|
||||
(nnmail-check-syntax)
|
||||
(let ((buf (current-buffer))
|
||||
result)
|
||||
(goto-char (point-min))
|
||||
;; The From line may have been quoted by movemail.
|
||||
(when (looking-at (concat ">" message-unix-mail-delimiter))
|
||||
(delete-char 1))
|
||||
(if (looking-at "X-From-Line: ")
|
||||
(replace-match "From ")
|
||||
(insert "From nobody " (current-time-string) "\n"))
|
||||
result cont)
|
||||
(and
|
||||
(nnmail-activate 'nnmbox)
|
||||
(progn
|
||||
(set-buffer buf)
|
||||
(with-temp-buffer
|
||||
(insert-buffer-substring buf)
|
||||
(goto-char (point-min))
|
||||
(search-forward "\n\n" nil t)
|
||||
(forward-line -1)
|
||||
(cond (;; The From line may have been quoted by movemail.
|
||||
(looking-at (concat ">" message-unix-mail-delimiter))
|
||||
(delete-char 1)
|
||||
(forward-line 1))
|
||||
((looking-at "X-From-Line: ")
|
||||
(replace-match "From ")
|
||||
(forward-line 1))
|
||||
(t
|
||||
(insert "From nobody " (current-time-string) "\n")))
|
||||
(narrow-to-region (point)
|
||||
(if (search-forward "\n\n" nil 'move)
|
||||
(1- (point))
|
||||
(point)))
|
||||
(while (re-search-backward "^X-Gnus-Newsgroup: " nil t)
|
||||
(delete-region (point) (progn (forward-line 1) (point))))
|
||||
(when nnmail-cache-accepted-message-ids
|
||||
(nnmail-cache-insert (nnmail-fetch-field "message-id")
|
||||
(nnmail-cache-insert (message-fetch-field "message-id")
|
||||
group
|
||||
(nnmail-fetch-field "subject")
|
||||
(nnmail-fetch-field "from")))
|
||||
(message-fetch-field "subject")
|
||||
(message-fetch-field "from")))
|
||||
(widen)
|
||||
(setq result (if (stringp group)
|
||||
(list (cons group (nnmbox-active-number group)))
|
||||
(nnmail-article-group 'nnmbox-active-number)))
|
||||
(if (and (null result)
|
||||
(yes-or-no-p "Moved to `junk' group; delete article? "))
|
||||
(setq result 'junk)
|
||||
(setq result (car (nnmbox-save-mail result)))))
|
||||
(save-excursion
|
||||
(set-buffer nnmbox-mbox-buffer)
|
||||
(prog1
|
||||
(if (and (null result)
|
||||
(yes-or-no-p "Moved to `junk' group; delete article? "))
|
||||
(setq result 'junk)
|
||||
(setq result (car (nnmbox-save-mail result))))
|
||||
(setq cont (buffer-string))))
|
||||
(with-current-buffer nnmbox-mbox-buffer
|
||||
(goto-char (point-max))
|
||||
(insert-buffer-substring buf)
|
||||
(insert cont)
|
||||
(when last
|
||||
(when nnmail-cache-accepted-message-ids
|
||||
(nnmail-cache-close))
|
||||
|
@ -360,7 +366,20 @@
|
|||
(if (not (nnmbox-find-article article))
|
||||
nil
|
||||
(nnmbox-delete-mail t t)
|
||||
(insert-buffer-substring buffer)
|
||||
(insert
|
||||
(with-temp-buffer
|
||||
(insert-buffer-substring buffer)
|
||||
(goto-char (point-min))
|
||||
(when (looking-at "X-From-Line:")
|
||||
(delete-region (point) (progn (forward-line 1) (point))))
|
||||
(while (re-search-forward (concat "^" message-unix-mail-delimiter)
|
||||
nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(insert ">"))
|
||||
(goto-char (point-max))
|
||||
(unless (bolp)
|
||||
(insert "\n"))
|
||||
(buffer-string)))
|
||||
(nnmbox-save-buffer)
|
||||
t)))
|
||||
|
||||
|
@ -430,21 +449,20 @@
|
|||
(save-excursion
|
||||
(save-restriction
|
||||
(narrow-to-region
|
||||
(save-excursion
|
||||
(re-search-backward (concat "^" message-unix-mail-delimiter) nil t)
|
||||
(if leave-delim (progn (forward-line 1) (point))
|
||||
(match-beginning 0)))
|
||||
(progn
|
||||
(forward-line 1)
|
||||
(or (and (re-search-forward (concat "^" message-unix-mail-delimiter)
|
||||
nil t)
|
||||
(if (and (not (bobp)) leave-delim)
|
||||
(progn (forward-line -2) (point))
|
||||
(match-beginning 0)))
|
||||
(point-max))))
|
||||
(prog2
|
||||
(re-search-backward (concat "^" message-unix-mail-delimiter) nil t)
|
||||
(if leave-delim (progn (forward-line 1) (point))
|
||||
(match-beginning 0))
|
||||
(forward-line 1))
|
||||
(or (and (re-search-forward (concat "^" message-unix-mail-delimiter)
|
||||
nil t)
|
||||
(match-beginning 0))
|
||||
(point-max)))
|
||||
(goto-char (point-min))
|
||||
;; Only delete the article if no other group owns it as well.
|
||||
(when (or force (not (re-search-forward "^X-Gnus-Newsgroup: " nil t)))
|
||||
(when (or force
|
||||
(not (re-search-forward "^X-Gnus-Newsgroup: " nil t))
|
||||
(search-backward "\n\n" nil t))
|
||||
(delete-region (point-min) (point-max))))))
|
||||
|
||||
(defun nnmbox-possibly-change-newsgroup (newsgroup &optional server)
|
||||
|
@ -552,24 +570,26 @@
|
|||
(let ((delim (concat "^" message-unix-mail-delimiter)))
|
||||
(goto-char (point-min))
|
||||
;; This might come from somewhere else.
|
||||
(unless (looking-at delim)
|
||||
(insert "From nobody " (current-time-string) "\n")
|
||||
(goto-char (point-min)))
|
||||
(if (looking-at delim)
|
||||
(forward-line 1)
|
||||
(insert "From nobody " (current-time-string) "\n"))
|
||||
;; Quote all "From " lines in the article.
|
||||
(forward-line 1)
|
||||
(while (re-search-forward delim nil t)
|
||||
(beginning-of-line)
|
||||
(insert "> "))
|
||||
(nnmail-insert-lines)
|
||||
(nnmail-insert-xref group-art)
|
||||
(nnmbox-insert-newsgroup-line group-art)
|
||||
(let ((alist group-art))
|
||||
(while alist
|
||||
(nnmbox-record-active-article (car alist))
|
||||
(setq alist (cdr alist))))
|
||||
(run-hooks 'nnmail-prepare-save-mail-hook)
|
||||
(run-hooks 'nnmbox-prepare-save-mail-hook)
|
||||
group-art))
|
||||
(goto-char (match-beginning 0))
|
||||
(insert ">")))
|
||||
(goto-char (point-max))
|
||||
(unless (bolp)
|
||||
(insert "\n"))
|
||||
(nnmail-insert-lines)
|
||||
(nnmail-insert-xref group-art)
|
||||
(nnmbox-insert-newsgroup-line group-art)
|
||||
(let ((alist group-art))
|
||||
(while alist
|
||||
(nnmbox-record-active-article (car alist))
|
||||
(setq alist (cdr alist))))
|
||||
(run-hooks 'nnmail-prepare-save-mail-hook)
|
||||
(run-hooks 'nnmbox-prepare-save-mail-hook)
|
||||
group-art)
|
||||
|
||||
(defun nnmbox-insert-newsgroup-line (group-art)
|
||||
(save-excursion
|
||||
|
|
|
@ -2153,7 +2153,7 @@ most recently will be fetched.
|
|||
@code{gnus-large-newsgroup}, but is only used for ephemeral
|
||||
newsgroups.
|
||||
|
||||
@vindex gnus-maximum-newsgroup
|
||||
@vindex gnus-newsgroup-maximum-articles
|
||||
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)}
|
||||
|
@ -2162,14 +2162,14 @@ 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.
|
||||
variable @code{gnus-newsgroup-maximum-articles} 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-newsgroup-maximum-articles} is @code{nil}, which
|
||||
means Gnus never ignores old articles.
|
||||
|
||||
@vindex gnus-select-group-hook
|
||||
@vindex gnus-auto-select-first
|
||||
|
@ -10676,10 +10676,9 @@ get does not read @samp{Xref:full}, then you should shout and whine at
|
|||
your news admin until she includes the @code{Xref} header in the
|
||||
overview files.
|
||||
|
||||
@vindex gnus-nov-is-evil
|
||||
If you want Gnus to get the @code{Xref}s right all the time, you have to
|
||||
set @code{gnus-nov-is-evil} to @code{t}, which slows things down
|
||||
considerably.
|
||||
set @code{nntp-nov-is-evil} to @code{t}, which slows things down
|
||||
considerably. Also @pxref{Slow/Expensive Connection}.
|
||||
|
||||
C'est la vie.
|
||||
|
||||
|
@ -22768,7 +22767,7 @@ readers.
|
|||
@c @anchor{X-Face}
|
||||
|
||||
Viewing an @code{X-Face} header either requires an Emacs that has
|
||||
@samp{compface} support (which most XEmacs versions has), or that you
|
||||
@samp{compface} support (which most XEmacs versions have), or that you
|
||||
have suitable conversion or display programs installed. If your Emacs
|
||||
has image support the default action is to display the face before the
|
||||
@code{From} header. If there's no native @code{X-Face} support, Gnus
|
||||
|
@ -27398,8 +27397,8 @@ that's already there. This is not how this manual is written. When
|
|||
implementing something, I write the manual entry for that something
|
||||
straight away. I then see that it's difficult to explain the
|
||||
functionality, so I write how it's supposed to be, and then I change the
|
||||
implementation. Writing the documentation and writing the code goes
|
||||
hand in hand.
|
||||
implementation. Writing the documentation and writing the code go hand
|
||||
in hand.
|
||||
|
||||
This, of course, means that this manual has no, or little, flow. It
|
||||
documents absolutely everything in Gnus, but often not where you're
|
||||
|
@ -27407,7 +27406,7 @@ looking for it. It is a reference manual, and not a guide to how to get
|
|||
started with Gnus.
|
||||
|
||||
That would be a totally different book, that should be written using the
|
||||
reference manual as source material. It would look quite differently.
|
||||
reference manual as source material. It would look quite different.
|
||||
|
||||
|
||||
@page
|
||||
|
@ -27519,11 +27518,32 @@ collection of @acronym{NOV} lines.
|
|||
|
||||
@item @acronym{NOV}
|
||||
@cindex @acronym{NOV}
|
||||
@acronym{NOV} stands for News OverView, which is a type of news server
|
||||
header which provide datas containing the condensed header information
|
||||
of articles. They are produced by the server itself; in the @code{nntp}
|
||||
back end Gnus uses the ones that the @acronym{NNTP} server makes, but
|
||||
Gnus makes them by itself for some backends (in particular, @code{nnml}).
|
||||
|
||||
When Gnus enters a group, it asks the back end for the headers of all
|
||||
unread articles in the group. Most servers support the News OverView
|
||||
format, which is more compact and much faster to read and parse than the
|
||||
normal @sc{head} format.
|
||||
|
||||
The @acronym{NOV} data consist of one or more text lines (@pxref{Text
|
||||
Lines, ,Motion by Text Lines, elisp, The Emacs Lisp Reference Manual})
|
||||
where each line has the header information of one article. The header
|
||||
information is a tab-separated series of the header's contents including
|
||||
an article number, a subject, an author, a date, a message-id,
|
||||
references, etc.
|
||||
|
||||
Those data enable Gnus to generate summary lines quickly. However, if
|
||||
the server does not support @acronym{NOV} or you disable it purposely or
|
||||
for some reason, Gnus will try to generate the header information by
|
||||
parsing each article's headers one by one. It will take time.
|
||||
Therefore, it is not usually a good idea to set nn*-nov-is-evil
|
||||
(@pxref{Slow/Expensive Connection}) to a non-@code{nil} value unless you
|
||||
know that the server makes wrong @acronym{NOV} data.
|
||||
|
||||
@item level
|
||||
@cindex levels
|
||||
Each group is subscribed at some @dfn{level} or other (1-9). The ones
|
||||
|
@ -27656,11 +27676,11 @@ for some quite common situations.
|
|||
|
||||
|
||||
@node Slow/Expensive Connection
|
||||
@subsection Slow/Expensive NNTP Connection
|
||||
@subsection Slow/Expensive Connection
|
||||
|
||||
If you run Emacs on a machine locally, and get your news from a machine
|
||||
over some very thin strings, you want to cut down on the amount of data
|
||||
Gnus has to get from the @acronym{NNTP} server.
|
||||
Gnus has to get from the server.
|
||||
|
||||
@table @code
|
||||
|
||||
|
@ -27672,9 +27692,25 @@ also have to set @code{gnus-check-new-newsgroups} and
|
|||
doesn't suddenly decide to fetch the active file anyway.
|
||||
|
||||
@item gnus-nov-is-evil
|
||||
This one has to be @code{nil}. If not, grabbing article headers from
|
||||
the @acronym{NNTP} server will not be very fast. Not all @acronym{NNTP} servers
|
||||
support @sc{xover}; Gnus will detect this by itself.
|
||||
@vindex gnus-nov-is-evil
|
||||
Usually this one must @emph{always} be @code{nil} (which is the
|
||||
default). If, for example, you wish to not use @acronym{NOV}
|
||||
(@pxref{Terminology}) with the @code{nntp} back end (@pxref{Crosspost
|
||||
Handling}), set @code{nntp-nov-is-evil} to a non-@code{nil} value
|
||||
instead of setting this. But you normally do not need to set
|
||||
@code{nntp-nov-is-evil} since Gnus by itself will detect whether the
|
||||
@acronym{NNTP} server supports @acronym{NOV}. Anyway, grabbing article
|
||||
headers from the @acronym{NNTP} server will not be very fast if you tell
|
||||
Gnus not to use @acronym{NOV}.
|
||||
|
||||
As the variables for the other back ends, there are
|
||||
@code{nndiary-nov-is-evil}, @code{nndir-nov-is-evil},
|
||||
@code{nnfolder-nov-is-evil}, @code{nnimap-nov-is-evil},
|
||||
@code{nnml-nov-is-evil}, @code{nnspool-nov-is-evil}, and
|
||||
@code{nnwarchive-nov-is-evil}. Note that a non-@code{nil} value for
|
||||
@code{gnus-nov-is-evil} overrides all those variables.@footnote{Although
|
||||
the back ends @code{nnkiboze}, @code{nnslashdot}, @code{nnultimate}, and
|
||||
@code{nnwfm} don't have their own nn*-nov-is-evil.}
|
||||
@end table
|
||||
|
||||
|
||||
|
@ -27765,7 +27801,7 @@ Set @code{gnus-check-new-newsgroups} and
|
|||
|
||||
Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
|
||||
@code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
|
||||
summary buffer faster.
|
||||
summary buffer faster. Also @pxref{Slow/Expensive Connection}.
|
||||
|
||||
|
||||
@page
|
||||
|
|
Loading…
Add table
Reference in a new issue