aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2007-10-09 08:55:58 +0000
committerMiles Bader2007-10-09 08:55:58 +0000
commit4b70e299ef66906fd285198003c72a1439d1f252 (patch)
tree6acb886b895a5fd7d148aafe670ff9dab02ff7b3
parent80025c1c5f9a536a1a825aa16b5982688d8fd7b0 (diff)
downloademacs-4b70e299ef66906fd285198003c72a1439d1f252.tar.gz
emacs-4b70e299ef66906fd285198003c72a1439d1f252.zip
Merge from gnus--rel--5.10
Revision: emacs@sv.gnu.org/emacs--rel--22--patch-115
-rw-r--r--etc/gnus-logo.eps22
-rw-r--r--lisp/gnus/ChangeLog45
-rw-r--r--lisp/gnus/gnus-agent.el5
-rw-r--r--lisp/gnus/gnus-cus.el63
-rw-r--r--lisp/gnus/gnus-sum.el33
-rw-r--r--lisp/gnus/gnus.el11
-rw-r--r--lisp/gnus/mm-util.el6
-rw-r--r--lisp/gnus/nnmbox.el134
-rw-r--r--man/gnus.texi80
9 files changed, 298 insertions, 101 deletions
diff --git a/etc/gnus-logo.eps b/etc/gnus-logo.eps
index 95408ba9af6..861414e52ee 100644
--- a/etc/gnus-logo.eps
+++ b/etc/gnus-logo.eps
@@ -1,4 +1,26 @@
1%!PS-Adobe-2.0 EPSF-2.0 1%!PS-Adobe-2.0 EPSF-2.0
2% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3% Free Software Foundation, Inc.
4%
5% Author: Luis Fernandes <elf@ee.ryerson.ca>
6%
7% This file is part of GNU Emacs.
8%
9% GNU Emacs is free software; you can redistribute it and/or modify
10% it under the terms of the GNU General Public License as published by
11% the Free Software Foundation; either version 3, or (at your option)
12% any later version.
13%
14% GNU Emacs is distributed in the hope that it will be useful,
15% but WITHOUT ANY WARRANTY; without even the implied warranty of
16% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17% GNU General Public License for more details.
18%
19% You should have received a copy of the GNU General Public License
20% along with GNU Emacs; see the file COPYING. If not, write to the
21% Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22% Boston, MA 02110-1301, USA.
23%
2%%Title: gnuslogo1.ps 24%%Title: gnuslogo1.ps
3%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley 25%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
4%%BoundingBox: 0 0 493 505 26%%BoundingBox: 0 0 493 505
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 0cf879fd264..1def50da1e3 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,48 @@
12007-10-08 Reiner Steib <Reiner.Steib@gmx.de>
2
3 * mm-util.el (mm-charset-synonym-alist): Alias gbk to cp936.
4
52007-10-04 Reiner Steib <Reiner.Steib@gmx.de>
6
7 * Relicense "GPLv2 or later" files to "GPLv3 or later".
8
92007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
10
11 * gnus-sum.el (gnus-newsgroup-maximum-articles): Move from gnus.el.
12 Suggested by Leo <sdl.web@gmail.com>.
13
14 * gnus.el: Do.
15
162007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
17
18 * gnus.el (gnus-newsgroup-maximum-articles): Rename from
19 gnus-maximum-newsgroup. Suggested by Leo <sdl.web@gmail.com>.
20
21 * gnus-agent.el (gnus-agent-fetch-headers): Do.
22
23 * gnus-sum.el (gnus-articles-to-read, gnus-list-of-unread-articles)
24 (gnus-list-of-read-articles, gnus-sequence-of-unread-articles): Do.
25
262007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
27
28 * nnmbox.el (nnmbox-request-article): Don't assume delim regexp matches
29 newline.
30 (nnmbox-request-accept-article): Don't change article in source buffer;
31 narrow to header to use message-fetch-field rather than
32 nnmail-fetch-field; use with-current-buffer instead of save-excursion.
33 (nnmbox-request-replace-article): Quote lines that'll be misidentified
34 as delimiters; make sure article ends with newline.
35 (nnmbox-delete-mail): Correct last position of article to be deleted;
36 ignore X-Gnus-Newsgroup header in article body.
37 (nnmbox-save-mail): Quote lines looking like delimiters at the right
38 positions; make sure article ends with newline.
39
402007-09-05 Katsumi Yamaoka <yamaoka@jpl.org>
41
42 * gnus-cus.el (gnus-score-extra): New widget.
43 (gnus-score-extra-convert): New function.
44 (gnus-score-customize): Use it for Extra.
45
12007-08-23 Katsumi Yamaoka <yamaoka@jpl.org> 462007-08-23 Katsumi Yamaoka <yamaoka@jpl.org>
2 47
3 * mml.el (mml-generate-mime): Make sure it uses multibyte temp buffer. 48 * mml.el (mml-generate-mime): Make sure it uses multibyte temp buffer.
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 347b57983e6..21b442aebbb 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -1765,12 +1765,13 @@ article numbers will be returned."
1765 (gnus-agent-find-parameter group 1765 (gnus-agent-find-parameter group
1766 'agent-predicate))))) 1766 'agent-predicate)))))
1767 (articles (if fetch-all 1767 (articles (if fetch-all
1768 (if gnus-maximum-newsgroup 1768 (if gnus-newsgroup-maximum-articles
1769 (let ((active (gnus-active group))) 1769 (let ((active (gnus-active group)))
1770 (gnus-uncompress-range 1770 (gnus-uncompress-range
1771 (cons (max (car active) 1771 (cons (max (car active)
1772 (- (cdr active) 1772 (- (cdr active)
1773 gnus-maximum-newsgroup -1)) 1773 gnus-newsgroup-maximum-articles
1774 -1))
1774 (cdr active)))) 1775 (cdr active))))
1775 (gnus-uncompress-range (gnus-active group))) 1776 (gnus-uncompress-range (gnus-active group)))
1776 (gnus-list-of-unread-articles group))) 1777 (gnus-list-of-unread-articles group)))
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index f1719eb04f4..1470f0cbac1 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -766,6 +766,67 @@ eh?")))
766 ,group)))) 766 ,group))))
767 widget) 767 widget)
768 768
769(define-widget 'gnus-score-extra 'group
770 "Edit score entries for extra headers."
771 :convert-widget 'gnus-score-extra-convert)
772
773(defun gnus-score-extra-convert (widget)
774 ;; Set args appropriately.
775 (let* ((tag (widget-get widget :tag))
776 (item `(const :format "" :value ,(downcase tag)))
777 (match '(string :tag "Match"))
778 (score '(choice :tag "Score"
779 (const :tag "default" nil)
780 (integer :format "%v"
781 :hide-front-space t)))
782 (expire '(choice :tag "Expire"
783 (const :tag "off" nil)
784 (integer :format "%v"
785 :hide-front-space t)))
786 (type '(choice :tag "Type"
787 :value s
788 ;; I should really create a forgiving :match
789 ;; function for each type below, that only
790 ;; looked at the first letter.
791 (const :tag "Regexp" r)
792 (const :tag "Regexp (fixed case)" R)
793 (const :tag "Substring" s)
794 (const :tag "Substring (fixed case)" S)
795 (const :tag "Exact" e)
796 (const :tag "Exact (fixed case)" E)
797 (const :tag "Word" w)
798 (const :tag "Word (fixed case)" W)
799 (const :tag "default" nil)))
800 (header (if gnus-extra-headers
801 (let (name)
802 `(choice :tag "Header"
803 ,@(mapcar (lambda (h)
804 (setq name (symbol-name h))
805 (list 'const :tag name name))
806 gnus-extra-headers)
807 (string :tag "Other" :format "%v")))
808 '(string :tag "Header")))
809 (group `(group ,match ,score ,expire ,type ,header))
810 (doc (concat (or (widget-get widget :doc)
811 (concat "Change score based on the " tag
812 " header.\n")))))
813 (widget-put
814 widget :args
815 `(,item
816 (repeat :inline t
817 :indent 0
818 :tag ,tag
819 :doc ,doc
820 :format "%t:\n%h%v%i\n\n"
821 (choice :format "%v"
822 :value ("" nil nil s
823 ,(if gnus-extra-headers
824 (symbol-name (car gnus-extra-headers))
825 ""))
826 ,group
827 sexp)))))
828 widget)
829
769(defvar gnus-custom-scores) 830(defvar gnus-custom-scores)
770(defvar gnus-custom-score-alist) 831(defvar gnus-custom-score-alist)
771 832
@@ -822,7 +883,7 @@ if you do all your changes will be lost. ")
822 (gnus-score-string :tag "Subject") 883 (gnus-score-string :tag "Subject")
823 (gnus-score-string :tag "References") 884 (gnus-score-string :tag "References")
824 (gnus-score-string :tag "Xref") 885 (gnus-score-string :tag "Xref")
825 (gnus-score-string :tag "Extra") 886 (gnus-score-extra :tag "Extra")
826 (gnus-score-string :tag "Message-ID") 887 (gnus-score-string :tag "Message-ID")
827 (gnus-score-integer :tag "Lines") 888 (gnus-score-integer :tag "Lines")
828 (gnus-score-integer :tag "Chars") 889 (gnus-score-integer :tag "Chars")
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 851ec88c96f..36e93796a63 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1029,6 +1029,17 @@ default charset will be used instead."
1029 :type '(repeat symbol) 1029 :type '(repeat symbol)
1030 :group 'gnus-charset) 1030 :group 'gnus-charset)
1031 1031
1032(defcustom gnus-newsgroup-maximum-articles nil
1033 "The maximum number of articles a newsgroup.
1034If this is a number, old articles in a newsgroup exceeding this number
1035are silently ignored. If it is nil, no article is ignored. Note that
1036setting this variable to a number might prevent you from reading very
1037old articles."
1038 :group 'gnus-group-select
1039 :version "22.2"
1040 :type '(choice (const :tag "No limit" nil)
1041 integer))
1042
1032(gnus-define-group-parameter 1043(gnus-define-group-parameter
1033 ignored-charsets 1044 ignored-charsets
1034 :type list 1045 :type list
@@ -5472,11 +5483,13 @@ If SELECT-ARTICLES, only select those articles from GROUP."
5472 ;; articles in the group, or (if that's nil), the 5483 ;; articles in the group, or (if that's nil), the
5473 ;; articles in the cache. 5484 ;; articles in the cache.
5474 (or 5485 (or
5475 (if gnus-maximum-newsgroup 5486 (if gnus-newsgroup-maximum-articles
5476 (let ((active (gnus-active group))) 5487 (let ((active (gnus-active group)))
5477 (gnus-uncompress-range 5488 (gnus-uncompress-range
5478 (cons (max (car active) 5489 (cons (max (car active)
5479 (- (cdr active) gnus-maximum-newsgroup -1)) 5490 (- (cdr active)
5491 gnus-newsgroup-maximum-articles
5492 -1))
5480 (cdr active)))) 5493 (cdr active))))
5481 (gnus-uncompress-range (gnus-active group))) 5494 (gnus-uncompress-range (gnus-active group)))
5482 (gnus-cache-articles-in-group group)) 5495 (gnus-cache-articles-in-group group))
@@ -6540,8 +6553,9 @@ displayed, no centering will be performed."
6540 (let* ((read (gnus-info-read (gnus-get-info group))) 6553 (let* ((read (gnus-info-read (gnus-get-info group)))
6541 (active (or (gnus-active group) (gnus-activate-group group))) 6554 (active (or (gnus-active group) (gnus-activate-group group)))
6542 (last (cdr active)) 6555 (last (cdr active))
6543 (bottom (if gnus-maximum-newsgroup 6556 (bottom (if gnus-newsgroup-maximum-articles
6544 (max (car active) (- last gnus-maximum-newsgroup -1)) 6557 (max (car active)
6558 (- last gnus-newsgroup-maximum-articles -1))
6545 (car active))) 6559 (car active)))
6546 first nlast unread) 6560 first nlast unread)
6547 ;; If none are read, then all are unread. 6561 ;; If none are read, then all are unread.
@@ -6585,9 +6599,11 @@ displayed, no centering will be performed."
6585 (gnus-list-range-difference 6599 (gnus-list-range-difference
6586 (gnus-sorted-complement 6600 (gnus-sorted-complement
6587 (gnus-uncompress-range 6601 (gnus-uncompress-range
6588 (if gnus-maximum-newsgroup 6602 (if gnus-newsgroup-maximum-articles
6589 (cons (max (car active) 6603 (cons (max (car active)
6590 (- (cdr active) gnus-maximum-newsgroup -1)) 6604 (- (cdr active)
6605 gnus-newsgroup-maximum-articles
6606 -1))
6591 (cdr active)) 6607 (cdr active))
6592 active)) 6608 active))
6593 (gnus-list-of-unread-articles group)) 6609 (gnus-list-of-unread-articles group))
@@ -6601,8 +6617,9 @@ displayed, no centering will be performed."
6601 (let* ((read (gnus-info-read (gnus-get-info group))) 6617 (let* ((read (gnus-info-read (gnus-get-info group)))
6602 (active (or (gnus-active group) (gnus-activate-group group))) 6618 (active (or (gnus-active group) (gnus-activate-group group)))
6603 (last (cdr active)) 6619 (last (cdr active))
6604 (bottom (if gnus-maximum-newsgroup 6620 (bottom (if gnus-newsgroup-maximum-articles
6605 (max (car active) (- last gnus-maximum-newsgroup -1)) 6621 (max (car active)
6622 (- last gnus-newsgroup-maximum-articles -1))
6606 (car active))) 6623 (car active)))
6607 first nlast unread) 6624 first nlast unread)
6608 ;; If none are read, then all are unread. 6625 ;; If none are read, then all are unread.
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 3f75bba6d1c..0e8e9908cf4 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1501,17 +1501,6 @@ If it is nil, no confirmation is required."
1501 :type '(choice (const :tag "No limit" nil) 1501 :type '(choice (const :tag "No limit" nil)
1502 integer)) 1502 integer))
1503 1503
1504(defcustom gnus-maximum-newsgroup nil
1505 "The maximum number of articles a newsgroup.
1506If this is a number, old articles in a newsgroup exceeding this number
1507are silently ignored. If it is nil, no article is ignored. Note that
1508setting this variable to a number might prevent you from reading very
1509old articles."
1510 :group 'gnus-group-select
1511 :version "22.2"
1512 :type '(choice (const :tag "No limit" nil)
1513 integer))
1514
1515(defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix))) 1504(defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix)))
1516 "*Non-nil means that the default name of a file to save articles in is the group name. 1505 "*Non-nil means that the default name of a file to save articles in is the group name.
1517If it's nil, the directory form of the group name is used instead. 1506If it's nil, the directory form of the group name is used instead.
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 76b1f2779c9..04a600abf25 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -256,6 +256,12 @@ the alias. Else windows-NUMBER is used."
256 ,@(when (and (not (mm-coding-system-p 'windows-31j)) 256 ,@(when (and (not (mm-coding-system-p 'windows-31j))
257 (mm-coding-system-p 'cp932)) 257 (mm-coding-system-p 'cp932))
258 '((windows-31j . cp932))) 258 '((windows-31j . cp932)))
259 ;; Charset name: GBK, Charset aliases: CP936, MS936, windows-936
260 ;; http://www.iana.org/assignments/charset-reg/GBK
261 ;; Emacs 22.1 has cp936, but not gbk, so we alias it:
262 ,@(when (and (not (mm-coding-system-p 'gbk))
263 (mm-coding-system-p 'cp936))
264 '((gbk . cp936)))
259 ) 265 )
260 "A mapping from unknown or invalid charset names to the real charset names. 266 "A mapping from unknown or invalid charset names to the real charset names.
261 267
diff --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el
index 6127974d24a..fd8ec27d225 100644
--- a/lisp/gnus/nnmbox.el
+++ b/lisp/gnus/nnmbox.el
@@ -153,11 +153,11 @@
153 (re-search-backward (concat "^" message-unix-mail-delimiter) nil t) 153 (re-search-backward (concat "^" message-unix-mail-delimiter) nil t)
154 (setq start (point)) 154 (setq start (point))
155 (forward-line 1) 155 (forward-line 1)
156 (or (and (re-search-forward 156 (setq stop (if (re-search-forward (concat "^"
157 (concat "^" message-unix-mail-delimiter) nil t) 157 message-unix-mail-delimiter)
158 (forward-line -1)) 158 nil 'move)
159 (goto-char (point-max))) 159 (match-beginning 0)
160 (setq stop (point)) 160 (point)))
161 (let ((nntp-server-buffer (or buffer nntp-server-buffer))) 161 (let ((nntp-server-buffer (or buffer nntp-server-buffer)))
162 (set-buffer nntp-server-buffer) 162 (set-buffer nntp-server-buffer)
163 (erase-buffer) 163 (erase-buffer)
@@ -313,39 +313,45 @@
313 (nnmbox-possibly-change-newsgroup group server) 313 (nnmbox-possibly-change-newsgroup group server)
314 (nnmail-check-syntax) 314 (nnmail-check-syntax)
315 (let ((buf (current-buffer)) 315 (let ((buf (current-buffer))
316 result) 316 result cont)
317 (goto-char (point-min))
318 ;; The From line may have been quoted by movemail.
319 (when (looking-at (concat ">" message-unix-mail-delimiter))
320 (delete-char 1))
321 (if (looking-at "X-From-Line: ")
322 (replace-match "From ")
323 (insert "From nobody " (current-time-string) "\n"))
324 (and 317 (and
325 (nnmail-activate 'nnmbox) 318 (nnmail-activate 'nnmbox)
326 (progn 319 (with-temp-buffer
327 (set-buffer buf) 320 (insert-buffer-substring buf)
328 (goto-char (point-min)) 321 (goto-char (point-min))
329 (search-forward "\n\n" nil t) 322 (cond (;; The From line may have been quoted by movemail.
330 (forward-line -1) 323 (looking-at (concat ">" message-unix-mail-delimiter))
324 (delete-char 1)
325 (forward-line 1))
326 ((looking-at "X-From-Line: ")
327 (replace-match "From ")
328 (forward-line 1))
329 (t
330 (insert "From nobody " (current-time-string) "\n")))
331 (narrow-to-region (point)
332 (if (search-forward "\n\n" nil 'move)
333 (1- (point))
334 (point)))
331 (while (re-search-backward "^X-Gnus-Newsgroup: " nil t) 335 (while (re-search-backward "^X-Gnus-Newsgroup: " nil t)
332 (delete-region (point) (progn (forward-line 1) (point)))) 336 (delete-region (point) (progn (forward-line 1) (point))))
333 (when nnmail-cache-accepted-message-ids 337 (when nnmail-cache-accepted-message-ids
334 (nnmail-cache-insert (nnmail-fetch-field "message-id") 338 (nnmail-cache-insert (message-fetch-field "message-id")
335 group 339 group
336 (nnmail-fetch-field "subject") 340 (message-fetch-field "subject")
337 (nnmail-fetch-field "from"))) 341 (message-fetch-field "from")))
342 (widen)
338 (setq result (if (stringp group) 343 (setq result (if (stringp group)
339 (list (cons group (nnmbox-active-number group))) 344 (list (cons group (nnmbox-active-number group)))
340 (nnmail-article-group 'nnmbox-active-number))) 345 (nnmail-article-group 'nnmbox-active-number)))
341 (if (and (null result) 346 (prog1
342 (yes-or-no-p "Moved to `junk' group; delete article? ")) 347 (if (and (null result)
343 (setq result 'junk) 348 (yes-or-no-p "Moved to `junk' group; delete article? "))
344 (setq result (car (nnmbox-save-mail result))))) 349 (setq result 'junk)
345 (save-excursion 350 (setq result (car (nnmbox-save-mail result))))
346 (set-buffer nnmbox-mbox-buffer) 351 (setq cont (buffer-string))))
352 (with-current-buffer nnmbox-mbox-buffer
347 (goto-char (point-max)) 353 (goto-char (point-max))
348 (insert-buffer-substring buf) 354 (insert cont)
349 (when last 355 (when last
350 (when nnmail-cache-accepted-message-ids 356 (when nnmail-cache-accepted-message-ids
351 (nnmail-cache-close)) 357 (nnmail-cache-close))
@@ -360,7 +366,20 @@
360 (if (not (nnmbox-find-article article)) 366 (if (not (nnmbox-find-article article))
361 nil 367 nil
362 (nnmbox-delete-mail t t) 368 (nnmbox-delete-mail t t)
363 (insert-buffer-substring buffer) 369 (insert
370 (with-temp-buffer
371 (insert-buffer-substring buffer)
372 (goto-char (point-min))
373 (when (looking-at "X-From-Line:")
374 (delete-region (point) (progn (forward-line 1) (point))))
375 (while (re-search-forward (concat "^" message-unix-mail-delimiter)
376 nil t)
377 (goto-char (match-beginning 0))
378 (insert ">"))
379 (goto-char (point-max))
380 (unless (bolp)
381 (insert "\n"))
382 (buffer-string)))
364 (nnmbox-save-buffer) 383 (nnmbox-save-buffer)
365 t))) 384 t)))
366 385
@@ -430,21 +449,20 @@
430 (save-excursion 449 (save-excursion
431 (save-restriction 450 (save-restriction
432 (narrow-to-region 451 (narrow-to-region
433 (save-excursion 452 (prog2
434 (re-search-backward (concat "^" message-unix-mail-delimiter) nil t) 453 (re-search-backward (concat "^" message-unix-mail-delimiter) nil t)
435 (if leave-delim (progn (forward-line 1) (point)) 454 (if leave-delim (progn (forward-line 1) (point))
436 (match-beginning 0))) 455 (match-beginning 0))
437 (progn 456 (forward-line 1))
438 (forward-line 1) 457 (or (and (re-search-forward (concat "^" message-unix-mail-delimiter)
439 (or (and (re-search-forward (concat "^" message-unix-mail-delimiter) 458 nil t)
440 nil t) 459 (match-beginning 0))
441 (if (and (not (bobp)) leave-delim) 460 (point-max)))
442 (progn (forward-line -2) (point))
443 (match-beginning 0)))
444 (point-max))))
445 (goto-char (point-min)) 461 (goto-char (point-min))
446 ;; Only delete the article if no other group owns it as well. 462 ;; Only delete the article if no other group owns it as well.
447 (when (or force (not (re-search-forward "^X-Gnus-Newsgroup: " nil t))) 463 (when (or force
464 (not (re-search-forward "^X-Gnus-Newsgroup: " nil t))
465 (search-backward "\n\n" nil t))
448 (delete-region (point-min) (point-max)))))) 466 (delete-region (point-min) (point-max))))))
449 467
450(defun nnmbox-possibly-change-newsgroup (newsgroup &optional server) 468(defun nnmbox-possibly-change-newsgroup (newsgroup &optional server)
@@ -552,24 +570,26 @@
552 (let ((delim (concat "^" message-unix-mail-delimiter))) 570 (let ((delim (concat "^" message-unix-mail-delimiter)))
553 (goto-char (point-min)) 571 (goto-char (point-min))
554 ;; This might come from somewhere else. 572 ;; This might come from somewhere else.
555 (unless (looking-at delim) 573 (if (looking-at delim)
556 (insert "From nobody " (current-time-string) "\n") 574 (forward-line 1)
557 (goto-char (point-min))) 575 (insert "From nobody " (current-time-string) "\n"))
558 ;; Quote all "From " lines in the article. 576 ;; Quote all "From " lines in the article.
559 (forward-line 1)
560 (while (re-search-forward delim nil t) 577 (while (re-search-forward delim nil t)
561 (beginning-of-line) 578 (goto-char (match-beginning 0))
562 (insert "> ")) 579 (insert ">")))
563 (nnmail-insert-lines) 580 (goto-char (point-max))
564 (nnmail-insert-xref group-art) 581 (unless (bolp)
565 (nnmbox-insert-newsgroup-line group-art) 582 (insert "\n"))
566 (let ((alist group-art)) 583 (nnmail-insert-lines)
567 (while alist 584 (nnmail-insert-xref group-art)
568 (nnmbox-record-active-article (car alist)) 585 (nnmbox-insert-newsgroup-line group-art)
569 (setq alist (cdr alist)))) 586 (let ((alist group-art))
570 (run-hooks 'nnmail-prepare-save-mail-hook) 587 (while alist
571 (run-hooks 'nnmbox-prepare-save-mail-hook) 588 (nnmbox-record-active-article (car alist))
572 group-art)) 589 (setq alist (cdr alist))))
590 (run-hooks 'nnmail-prepare-save-mail-hook)
591 (run-hooks 'nnmbox-prepare-save-mail-hook)
592 group-art)
573 593
574(defun nnmbox-insert-newsgroup-line (group-art) 594(defun nnmbox-insert-newsgroup-line (group-art)
575 (save-excursion 595 (save-excursion
diff --git a/man/gnus.texi b/man/gnus.texi
index 7cabf674102..0c9765d92b6 100644
--- a/man/gnus.texi
+++ b/man/gnus.texi
@@ -2153,7 +2153,7 @@ most recently will be fetched.
2153@code{gnus-large-newsgroup}, but is only used for ephemeral 2153@code{gnus-large-newsgroup}, but is only used for ephemeral
2154newsgroups. 2154newsgroups.
2155 2155
2156@vindex gnus-maximum-newsgroup 2156@vindex gnus-newsgroup-maximum-articles
2157In groups in some news servers, there might be a big gap between a few 2157In groups in some news servers, there might be a big gap between a few
2158very old articles that will never be expired and the recent ones. In 2158very old articles that will never be expired and the recent ones. In
2159such a case, the server will return the data like @code{(1 . 30000000)} 2159such 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
2162know it at first and prepares for getting 30000000 articles. However, 2162know it at first and prepares for getting 30000000 articles. However,
2163it will consume hundreds megabytes of memories and might make Emacs get 2163it will consume hundreds megabytes of memories and might make Emacs get
2164stuck as the case may be. If you use such news servers, set the 2164stuck as the case may be. If you use such news servers, set the
2165variable @code{gnus-maximum-newsgroup} to a positive number. The value 2165variable @code{gnus-newsgroup-maximum-articles} to a positive number.
2166means that Gnus ignores articles other than this number of the latest 2166The value means that Gnus ignores articles other than this number of the
2167ones in every group. For instance, the value 10000 makes Gnus get only 2167latest ones in every group. For instance, the value 10000 makes Gnus
2168the articles 29990001-30000000 (if the latest article number is 30000000 2168get only the articles 29990001-30000000 (if the latest article number is
2169in a group). Note that setting this variable to a number might prevent 216930000000 in a group). Note that setting this variable to a number might
2170you from reading very old articles. The default value of the variable 2170prevent you from reading very old articles. The default value of the
2171@code{gnus-maximum-newsgroup} is @code{nil}, which means Gnus never 2171variable @code{gnus-newsgroup-maximum-articles} is @code{nil}, which
2172ignores old articles. 2172means Gnus never ignores old articles.
2173 2173
2174@vindex gnus-select-group-hook 2174@vindex gnus-select-group-hook
2175@vindex gnus-auto-select-first 2175@vindex gnus-auto-select-first
@@ -10676,10 +10676,9 @@ get does not read @samp{Xref:full}, then you should shout and whine at
10676your news admin until she includes the @code{Xref} header in the 10676your news admin until she includes the @code{Xref} header in the
10677overview files. 10677overview files.
10678 10678
10679@vindex gnus-nov-is-evil
10680If you want Gnus to get the @code{Xref}s right all the time, you have to 10679If you want Gnus to get the @code{Xref}s right all the time, you have to
10681set @code{gnus-nov-is-evil} to @code{t}, which slows things down 10680set @code{nntp-nov-is-evil} to @code{t}, which slows things down
10682considerably. 10681considerably. Also @pxref{Slow/Expensive Connection}.
10683 10682
10684C'est la vie. 10683C'est la vie.
10685 10684
@@ -22768,7 +22767,7 @@ readers.
22768@c @anchor{X-Face} 22767@c @anchor{X-Face}
22769 22768
22770Viewing an @code{X-Face} header either requires an Emacs that has 22769Viewing an @code{X-Face} header either requires an Emacs that has
22771@samp{compface} support (which most XEmacs versions has), or that you 22770@samp{compface} support (which most XEmacs versions have), or that you
22772have suitable conversion or display programs installed. If your Emacs 22771have suitable conversion or display programs installed. If your Emacs
22773has image support the default action is to display the face before the 22772has image support the default action is to display the face before the
22774@code{From} header. If there's no native @code{X-Face} support, Gnus 22773@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
27398implementing something, I write the manual entry for that something 27397implementing something, I write the manual entry for that something
27399straight away. I then see that it's difficult to explain the 27398straight away. I then see that it's difficult to explain the
27400functionality, so I write how it's supposed to be, and then I change the 27399functionality, so I write how it's supposed to be, and then I change the
27401implementation. Writing the documentation and writing the code goes 27400implementation. Writing the documentation and writing the code go hand
27402hand in hand. 27401in hand.
27403 27402
27404This, of course, means that this manual has no, or little, flow. It 27403This, of course, means that this manual has no, or little, flow. It
27405documents absolutely everything in Gnus, but often not where you're 27404documents 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
27407started with Gnus. 27406started with Gnus.
27408 27407
27409That would be a totally different book, that should be written using the 27408That would be a totally different book, that should be written using the
27410reference manual as source material. It would look quite differently. 27409reference manual as source material. It would look quite different.
27411 27410
27412 27411
27413@page 27412@page
@@ -27519,11 +27518,32 @@ collection of @acronym{NOV} lines.
27519 27518
27520@item @acronym{NOV} 27519@item @acronym{NOV}
27521@cindex @acronym{NOV} 27520@cindex @acronym{NOV}
27521@acronym{NOV} stands for News OverView, which is a type of news server
27522header which provide datas containing the condensed header information
27523of articles. They are produced by the server itself; in the @code{nntp}
27524back end Gnus uses the ones that the @acronym{NNTP} server makes, but
27525Gnus makes them by itself for some backends (in particular, @code{nnml}).
27526
27522When Gnus enters a group, it asks the back end for the headers of all 27527When Gnus enters a group, it asks the back end for the headers of all
27523unread articles in the group. Most servers support the News OverView 27528unread articles in the group. Most servers support the News OverView
27524format, which is more compact and much faster to read and parse than the 27529format, which is more compact and much faster to read and parse than the
27525normal @sc{head} format. 27530normal @sc{head} format.
27526 27531
27532The @acronym{NOV} data consist of one or more text lines (@pxref{Text
27533Lines, ,Motion by Text Lines, elisp, The Emacs Lisp Reference Manual})
27534where each line has the header information of one article. The header
27535information is a tab-separated series of the header's contents including
27536an article number, a subject, an author, a date, a message-id,
27537references, etc.
27538
27539Those data enable Gnus to generate summary lines quickly. However, if
27540the server does not support @acronym{NOV} or you disable it purposely or
27541for some reason, Gnus will try to generate the header information by
27542parsing each article's headers one by one. It will take time.
27543Therefore, it is not usually a good idea to set nn*-nov-is-evil
27544(@pxref{Slow/Expensive Connection}) to a non-@code{nil} value unless you
27545know that the server makes wrong @acronym{NOV} data.
27546
27527@item level 27547@item level
27528@cindex levels 27548@cindex levels
27529Each group is subscribed at some @dfn{level} or other (1-9). The ones 27549Each group is subscribed at some @dfn{level} or other (1-9). The ones
@@ -27656,11 +27676,11 @@ for some quite common situations.
27656 27676
27657 27677
27658@node Slow/Expensive Connection 27678@node Slow/Expensive Connection
27659@subsection Slow/Expensive NNTP Connection 27679@subsection Slow/Expensive Connection
27660 27680
27661If you run Emacs on a machine locally, and get your news from a machine 27681If you run Emacs on a machine locally, and get your news from a machine
27662over some very thin strings, you want to cut down on the amount of data 27682over some very thin strings, you want to cut down on the amount of data
27663Gnus has to get from the @acronym{NNTP} server. 27683Gnus has to get from the server.
27664 27684
27665@table @code 27685@table @code
27666 27686
@@ -27672,9 +27692,25 @@ also have to set @code{gnus-check-new-newsgroups} and
27672doesn't suddenly decide to fetch the active file anyway. 27692doesn't suddenly decide to fetch the active file anyway.
27673 27693
27674@item gnus-nov-is-evil 27694@item gnus-nov-is-evil
27675This one has to be @code{nil}. If not, grabbing article headers from 27695@vindex gnus-nov-is-evil
27676the @acronym{NNTP} server will not be very fast. Not all @acronym{NNTP} servers 27696Usually this one must @emph{always} be @code{nil} (which is the
27677support @sc{xover}; Gnus will detect this by itself. 27697default). If, for example, you wish to not use @acronym{NOV}
27698(@pxref{Terminology}) with the @code{nntp} back end (@pxref{Crosspost
27699Handling}), set @code{nntp-nov-is-evil} to a non-@code{nil} value
27700instead of setting this. But you normally do not need to set
27701@code{nntp-nov-is-evil} since Gnus by itself will detect whether the
27702@acronym{NNTP} server supports @acronym{NOV}. Anyway, grabbing article
27703headers from the @acronym{NNTP} server will not be very fast if you tell
27704Gnus not to use @acronym{NOV}.
27705
27706As the variables for the other back ends, there are
27707@code{nndiary-nov-is-evil}, @code{nndir-nov-is-evil},
27708@code{nnfolder-nov-is-evil}, @code{nnimap-nov-is-evil},
27709@code{nnml-nov-is-evil}, @code{nnspool-nov-is-evil}, and
27710@code{nnwarchive-nov-is-evil}. Note that a non-@code{nil} value for
27711@code{gnus-nov-is-evil} overrides all those variables.@footnote{Although
27712the back ends @code{nnkiboze}, @code{nnslashdot}, @code{nnultimate}, and
27713@code{nnwfm} don't have their own nn*-nov-is-evil.}
27678@end table 27714@end table
27679 27715
27680 27716
@@ -27765,7 +27801,7 @@ Set @code{gnus-check-new-newsgroups} and
27765 27801
27766Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and 27802Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
27767@code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the 27803@code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
27768summary buffer faster. 27804summary buffer faster. Also @pxref{Slow/Expensive Connection}.
27769 27805
27770 27806
27771@page 27807@page