diff options
| author | Miles Bader | 2007-10-09 08:55:58 +0000 |
|---|---|---|
| committer | Miles Bader | 2007-10-09 08:55:58 +0000 |
| commit | 4b70e299ef66906fd285198003c72a1439d1f252 (patch) | |
| tree | 6acb886b895a5fd7d148aafe670ff9dab02ff7b3 | |
| parent | 80025c1c5f9a536a1a825aa16b5982688d8fd7b0 (diff) | |
| download | emacs-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.eps | 22 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 45 | ||||
| -rw-r--r-- | lisp/gnus/gnus-agent.el | 5 | ||||
| -rw-r--r-- | lisp/gnus/gnus-cus.el | 63 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 33 | ||||
| -rw-r--r-- | lisp/gnus/gnus.el | 11 | ||||
| -rw-r--r-- | lisp/gnus/mm-util.el | 6 | ||||
| -rw-r--r-- | lisp/gnus/nnmbox.el | 134 | ||||
| -rw-r--r-- | man/gnus.texi | 80 |
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 @@ | |||
| 1 | 2007-10-08 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 2 | |||
| 3 | * mm-util.el (mm-charset-synonym-alist): Alias gbk to cp936. | ||
| 4 | |||
| 5 | 2007-10-04 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 6 | |||
| 7 | * Relicense "GPLv2 or later" files to "GPLv3 or later". | ||
| 8 | |||
| 9 | 2007-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 | |||
| 16 | 2007-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 | |||
| 26 | 2007-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 | |||
| 40 | 2007-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 | |||
| 1 | 2007-08-23 Katsumi Yamaoka <yamaoka@jpl.org> | 46 | 2007-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. | ||
| 1034 | If this is a number, old articles in a newsgroup exceeding this number | ||
| 1035 | are silently ignored. If it is nil, no article is ignored. Note that | ||
| 1036 | setting this variable to a number might prevent you from reading very | ||
| 1037 | old 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. | ||
| 1506 | If this is a number, old articles in a newsgroup exceeding this number | ||
| 1507 | are silently ignored. If it is nil, no article is ignored. Note that | ||
| 1508 | setting this variable to a number might prevent you from reading very | ||
| 1509 | old 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. |
| 1517 | If it's nil, the directory form of the group name is used instead. | 1506 | If 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 |
| 2154 | newsgroups. | 2154 | newsgroups. |
| 2155 | 2155 | ||
| 2156 | @vindex gnus-maximum-newsgroup | 2156 | @vindex gnus-newsgroup-maximum-articles |
| 2157 | In groups in some news servers, there might be a big gap between a few | 2157 | In groups in some news servers, there might be a big gap between a few |
| 2158 | very old articles that will never be expired and the recent ones. In | 2158 | very old articles that will never be expired and the recent ones. In |
| 2159 | such a case, the server will return the data like @code{(1 . 30000000)} | 2159 | 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 | |||
| 2162 | know it at first and prepares for getting 30000000 articles. However, | 2162 | know it at first and prepares for getting 30000000 articles. However, |
| 2163 | it will consume hundreds megabytes of memories and might make Emacs get | 2163 | it will consume hundreds megabytes of memories and might make Emacs get |
| 2164 | stuck as the case may be. If you use such news servers, set the | 2164 | stuck as the case may be. If you use such news servers, set the |
| 2165 | variable @code{gnus-maximum-newsgroup} to a positive number. The value | 2165 | variable @code{gnus-newsgroup-maximum-articles} to a positive number. |
| 2166 | means that Gnus ignores articles other than this number of the latest | 2166 | The value means that Gnus ignores articles other than this number of the |
| 2167 | ones in every group. For instance, the value 10000 makes Gnus get only | 2167 | latest ones in every group. For instance, the value 10000 makes Gnus |
| 2168 | the articles 29990001-30000000 (if the latest article number is 30000000 | 2168 | get only the articles 29990001-30000000 (if the latest article number is |
| 2169 | in a group). Note that setting this variable to a number might prevent | 2169 | 30000000 in a group). Note that setting this variable to a number might |
| 2170 | you from reading very old articles. The default value of the variable | 2170 | prevent you from reading very old articles. The default value of the |
| 2171 | @code{gnus-maximum-newsgroup} is @code{nil}, which means Gnus never | 2171 | variable @code{gnus-newsgroup-maximum-articles} is @code{nil}, which |
| 2172 | ignores old articles. | 2172 | means 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 | |||
| 10676 | your news admin until she includes the @code{Xref} header in the | 10676 | your news admin until she includes the @code{Xref} header in the |
| 10677 | overview files. | 10677 | overview files. |
| 10678 | 10678 | ||
| 10679 | @vindex gnus-nov-is-evil | ||
| 10680 | If you want Gnus to get the @code{Xref}s right all the time, you have to | 10679 | If you want Gnus to get the @code{Xref}s right all the time, you have to |
| 10681 | set @code{gnus-nov-is-evil} to @code{t}, which slows things down | 10680 | set @code{nntp-nov-is-evil} to @code{t}, which slows things down |
| 10682 | considerably. | 10681 | considerably. Also @pxref{Slow/Expensive Connection}. |
| 10683 | 10682 | ||
| 10684 | C'est la vie. | 10683 | C'est la vie. |
| 10685 | 10684 | ||
| @@ -22768,7 +22767,7 @@ readers. | |||
| 22768 | @c @anchor{X-Face} | 22767 | @c @anchor{X-Face} |
| 22769 | 22768 | ||
| 22770 | Viewing an @code{X-Face} header either requires an Emacs that has | 22769 | Viewing 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 |
| 22772 | have suitable conversion or display programs installed. If your Emacs | 22771 | have suitable conversion or display programs installed. If your Emacs |
| 22773 | has image support the default action is to display the face before the | 22772 | has 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 | |||
| 27398 | implementing something, I write the manual entry for that something | 27397 | implementing something, I write the manual entry for that something |
| 27399 | straight away. I then see that it's difficult to explain the | 27398 | straight away. I then see that it's difficult to explain the |
| 27400 | functionality, so I write how it's supposed to be, and then I change the | 27399 | functionality, so I write how it's supposed to be, and then I change the |
| 27401 | implementation. Writing the documentation and writing the code goes | 27400 | implementation. Writing the documentation and writing the code go hand |
| 27402 | hand in hand. | 27401 | in hand. |
| 27403 | 27402 | ||
| 27404 | This, of course, means that this manual has no, or little, flow. It | 27403 | This, of course, means that this manual has no, or little, flow. It |
| 27405 | documents absolutely everything in Gnus, but often not where you're | 27404 | 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 | |||
| 27407 | started with Gnus. | 27406 | started with Gnus. |
| 27408 | 27407 | ||
| 27409 | That would be a totally different book, that should be written using the | 27408 | That would be a totally different book, that should be written using the |
| 27410 | reference manual as source material. It would look quite differently. | 27409 | reference 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 | ||
| 27522 | header which provide datas containing the condensed header information | ||
| 27523 | of articles. They are produced by the server itself; in the @code{nntp} | ||
| 27524 | back end Gnus uses the ones that the @acronym{NNTP} server makes, but | ||
| 27525 | Gnus makes them by itself for some backends (in particular, @code{nnml}). | ||
| 27526 | |||
| 27522 | When Gnus enters a group, it asks the back end for the headers of all | 27527 | When Gnus enters a group, it asks the back end for the headers of all |
| 27523 | unread articles in the group. Most servers support the News OverView | 27528 | unread articles in the group. Most servers support the News OverView |
| 27524 | format, which is more compact and much faster to read and parse than the | 27529 | format, which is more compact and much faster to read and parse than the |
| 27525 | normal @sc{head} format. | 27530 | normal @sc{head} format. |
| 27526 | 27531 | ||
| 27532 | The @acronym{NOV} data consist of one or more text lines (@pxref{Text | ||
| 27533 | Lines, ,Motion by Text Lines, elisp, The Emacs Lisp Reference Manual}) | ||
| 27534 | where each line has the header information of one article. The header | ||
| 27535 | information is a tab-separated series of the header's contents including | ||
| 27536 | an article number, a subject, an author, a date, a message-id, | ||
| 27537 | references, etc. | ||
| 27538 | |||
| 27539 | Those data enable Gnus to generate summary lines quickly. However, if | ||
| 27540 | the server does not support @acronym{NOV} or you disable it purposely or | ||
| 27541 | for some reason, Gnus will try to generate the header information by | ||
| 27542 | parsing each article's headers one by one. It will take time. | ||
| 27543 | Therefore, 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 | ||
| 27545 | know that the server makes wrong @acronym{NOV} data. | ||
| 27546 | |||
| 27527 | @item level | 27547 | @item level |
| 27528 | @cindex levels | 27548 | @cindex levels |
| 27529 | Each group is subscribed at some @dfn{level} or other (1-9). The ones | 27549 | Each 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 | ||
| 27661 | If you run Emacs on a machine locally, and get your news from a machine | 27681 | If you run Emacs on a machine locally, and get your news from a machine |
| 27662 | over some very thin strings, you want to cut down on the amount of data | 27682 | over some very thin strings, you want to cut down on the amount of data |
| 27663 | Gnus has to get from the @acronym{NNTP} server. | 27683 | Gnus 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 | |||
| 27672 | doesn't suddenly decide to fetch the active file anyway. | 27692 | doesn't suddenly decide to fetch the active file anyway. |
| 27673 | 27693 | ||
| 27674 | @item gnus-nov-is-evil | 27694 | @item gnus-nov-is-evil |
| 27675 | This one has to be @code{nil}. If not, grabbing article headers from | 27695 | @vindex gnus-nov-is-evil |
| 27676 | the @acronym{NNTP} server will not be very fast. Not all @acronym{NNTP} servers | 27696 | Usually this one must @emph{always} be @code{nil} (which is the |
| 27677 | support @sc{xover}; Gnus will detect this by itself. | 27697 | default). If, for example, you wish to not use @acronym{NOV} |
| 27698 | (@pxref{Terminology}) with the @code{nntp} back end (@pxref{Crosspost | ||
| 27699 | Handling}), set @code{nntp-nov-is-evil} to a non-@code{nil} value | ||
| 27700 | instead 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 | ||
| 27703 | headers from the @acronym{NNTP} server will not be very fast if you tell | ||
| 27704 | Gnus not to use @acronym{NOV}. | ||
| 27705 | |||
| 27706 | As 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 | ||
| 27712 | the 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 | ||
| 27766 | Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and | 27802 | Set @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 |
| 27768 | summary buffer faster. | 27804 | summary buffer faster. Also @pxref{Slow/Expensive Connection}. |
| 27769 | 27805 | ||
| 27770 | 27806 | ||
| 27771 | @page | 27807 | @page |