diff options
| author | Dave Love | 2000-09-20 16:54:57 +0000 |
|---|---|---|
| committer | Dave Love | 2000-09-20 16:54:57 +0000 |
| commit | 8b93df0128d3c27cc67aa77885d925ca991c0215 (patch) | |
| tree | c075a34664f453e5da61d2aeebe4afc1141fe4ac | |
| parent | 805b7fc07472cdd3d863b9ade9235d871c96d545 (diff) | |
| download | emacs-8b93df0128d3c27cc67aa77885d925ca991c0215.tar.gz emacs-8b93df0128d3c27cc67aa77885d925ca991c0215.zip | |
Merge from Gnus trunk.
| -rw-r--r-- | lisp/gnus/ChangeLog | 150 | ||||
| -rw-r--r-- | lisp/gnus/gnus-art.el | 57 | ||||
| -rw-r--r-- | lisp/gnus/gnus-group.el | 16 | ||||
| -rw-r--r-- | lisp/gnus/gnus-msg.el | 7 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 25 | ||||
| -rw-r--r-- | lisp/gnus/gnus-topic.el | 43 | ||||
| -rw-r--r-- | lisp/gnus/gnus-util.el | 4 | ||||
| -rw-r--r-- | lisp/gnus/nnheader.el | 4 | ||||
| -rw-r--r-- | lisp/gnus/nnkiboze.el | 232 | ||||
| -rw-r--r-- | lisp/gnus/nnmail.el | 7 |
10 files changed, 396 insertions, 149 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 0ed8e88e7d8..847ab7eb586 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,8 +1,158 @@ | |||
| 1 | 2000-09-20 Dave Love <fx@gnu.org> | ||
| 2 | |||
| 3 | * mail-source.el (mail-source-delete-incoming): Set to t, assuming | ||
| 4 | we'll be careful merging development changes. | ||
| 5 | |||
| 6 | * gnus-start.el (gnus-1) <gnus-simple-splash>: Don't test for X | ||
| 7 | specifically. | ||
| 8 | |||
| 9 | * gnus-ems.el (gnus-smiley-display): Autoload from smiley-ems. | ||
| 10 | (mouse-set-point, set-face-foreground) | ||
| 11 | (set-face-background, x-popup-menu) [not window-system]: Don't zap | ||
| 12 | them. | ||
| 13 | |||
| 14 | * mm-decode.el (mm-valid-and-fit-image-p): Use display-graphic-p. | ||
| 15 | |||
| 16 | * gnus.el (gnus-version-number): Start 5.9 series. Avoid some | ||
| 17 | redundant autoloads. | ||
| 18 | |||
| 1 | 2000-09-20 Gerd Moellmann <gerd@gnu.org> | 19 | 2000-09-20 Gerd Moellmann <gerd@gnu.org> |
| 2 | 20 | ||
| 3 | * gnus-ems.el (gnus-article-display-xface): Don't convert PBM | 21 | * gnus-ems.el (gnus-article-display-xface): Don't convert PBM |
| 4 | to XBM; we always have PBM support. | 22 | to XBM; we always have PBM support. |
| 5 | 23 | ||
| 24 | 2000-09-19 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 25 | |||
| 26 | * gnus-group.el (gnus-group-make-kiboze-group): Makedir. | ||
| 27 | * nnheader.el (nnheader-parse-nov): Remove Xref in mail-header-xref. | ||
| 28 | * gnus-sum.el (gnus-nov-parse-line): Ditto. | ||
| 29 | * nnkiboze.el (nnkiboze-file-coding-system): New. | ||
| 30 | (nnkiboze-retrieve-headers): Use it. | ||
| 31 | (nnkiboze-request-group): Ditto. | ||
| 32 | (nnkiboze-close-group): Ditto. | ||
| 33 | (nnkiboze-generate-group): Ditto. | ||
| 34 | (nnkiboze-enter-nov): Insert first Xref properly. | ||
| 35 | |||
| 36 | 2000-09-19 Dave Love <fx@gnu.org> | ||
| 37 | |||
| 38 | * nnmail.el (nnmail-cache-accepted-message-ids): Default to nil. | ||
| 39 | (nnmail-get-new-mail): Test `sources' in top-level conditional. | ||
| 40 | |||
| 41 | * mail-source.el (mail-sources): Change default to '((file)). | ||
| 42 | Add useful custom type. | ||
| 43 | |||
| 44 | 2000-09-18 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> | ||
| 45 | |||
| 46 | * gnus-util.el (gnus-time-iso8601): Correct doc string (four digit | ||
| 47 | year). | ||
| 48 | (gnus-date-iso8601): Ditto. | ||
| 49 | |||
| 50 | 2000-09-18 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 51 | |||
| 52 | * mail-source.el (mail-source-fetch-imap): Disable multibyte. | ||
| 53 | |||
| 54 | 2000-09-17 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 55 | |||
| 56 | * rfc2047.el (rfc2047-q-encoding-alist): Remove = and _ from the | ||
| 57 | pattern. Avoid using 8 bit chars. | ||
| 58 | * qp.el (quoted-printable-encode-region): Avoid using 8 bit chars. | ||
| 59 | |||
| 60 | 2000-09-16 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 61 | |||
| 62 | * smiley.el (smiley-buffer-ems, smiley-create-glyph-ems, | ||
| 63 | smiley-toggle-extent-ems, smiley-toggle-extents-ems, | ||
| 64 | smiley-toggle-buffer-ems): New functions for Emacs 21. Toggle | ||
| 65 | functions are not implemented yet. | ||
| 66 | |||
| 67 | * dgnushack.el (dgnushack-compile): Remove smiley.el and | ||
| 68 | x-overlay.el from the FSF Emacs black list. | ||
| 69 | |||
| 70 | 2000-09-15 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 71 | |||
| 72 | * mm-decode.el (mm-inlined-types): Add application/emacs-lisp. | ||
| 73 | (mm-inline-media-tests): Ditto. | ||
| 74 | (mm-automatic-display): Ditto. | ||
| 75 | * mm-view.el (mm-display-inline-fontify): Generalize from | ||
| 76 | mm-display-patch-inline. | ||
| 77 | (mm-display-patch-inline): Use it. | ||
| 78 | (mm-display-elisp-inline): Ditto. | ||
| 79 | |||
| 80 | 2000-09-15 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 81 | |||
| 82 | * gnus-topic.el (gnus-topic-find-groups): Add recursive parameter. | ||
| 83 | (gnus-topic-unmark-topic): Ditto. | ||
| 84 | (gnus-topic-mark-topic): Ditto. | ||
| 85 | (gnus-topic-get-new-news-this-topic): Use it. | ||
| 86 | |||
| 87 | 2000-09-15 09:01:40 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 88 | |||
| 89 | * gnus-art.el (gnus-treat-display-xface): By default, Emacs 21 | ||
| 90 | display xface. | ||
| 91 | |||
| 92 | 2000-09-15 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 93 | |||
| 94 | * gnus-group.el (gnus-group-rename-group): Inhibit renaming of | ||
| 95 | zombie or killed groups. | ||
| 96 | |||
| 97 | 2000-09-15 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 98 | |||
| 99 | * mml.el (mml-preview): Reinsert unibyte content. | ||
| 100 | (mml-parse-1): Remove with-unibyte-current-buffer. | ||
| 101 | (mml-generate-mime-1): Ditto. | ||
| 102 | * gnus-msg.el (gnus-summary-mail-forward): Ditto. | ||
| 103 | * message.el (message-forward): Ditto. | ||
| 104 | |||
| 105 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 106 | |||
| 107 | * gnus-art.el (article-de-quoted-unreadable): Guess charset from | ||
| 108 | original article buffer. | ||
| 109 | (article-de-base64-unreadable): Ditto. | ||
| 110 | (article-wash-html): Ditto. | ||
| 111 | |||
| 112 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 113 | |||
| 114 | * gnus-msg.el (gnus-summary-mail-forward): Disable multibyte | ||
| 115 | unless forward-show-mml. | ||
| 116 | |||
| 117 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 118 | |||
| 119 | * gnus-sum.el (gnus-summary-save-parts-type-history): New. | ||
| 120 | (gnus-summary-save-parts-last-directory): New. | ||
| 121 | (gnus-summary-save-parts): Save history. | ||
| 122 | |||
| 123 | 2000-09-14 Ben Gertzfield <che@debian.org> | ||
| 124 | |||
| 125 | * gnus-sum.el (gnus-summary-save-parts-default-mime): New | ||
| 126 | variable. | ||
| 127 | (gnus-summary-save-parts): Use it. | ||
| 128 | |||
| 129 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 130 | |||
| 131 | * gnus-art.el (gnus-article-setup-buffer): Clean handle-alist. | ||
| 132 | * gnus-sum.el (gnus-summary-exit): Ditto. | ||
| 133 | (gnus-summary-exit-no-update): Ditto. | ||
| 134 | (gnus-summary-show-article): Ditto. | ||
| 135 | |||
| 136 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 137 | |||
| 138 | * nndoc.el (nndoc-dissect-mime-parts-sub): Remove | ||
| 139 | Content-Disposition. | ||
| 140 | |||
| 141 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 142 | |||
| 143 | * webmail.el: Hotmail updated. Add X-Gnus-Webmail. | ||
| 144 | |||
| 145 | 2000-09-14 ShengHuo ZHU <zsh@cs.rochester.edu> | ||
| 146 | |||
| 147 | * gnus-art.el (gnus-article-setup-buffer): Set | ||
| 148 | gnus-article-mime-handles to nil. | ||
| 149 | * gnus-sum.el (gnus-summary-exit): Ditto. | ||
| 150 | (gnus-summary-exit-no-update): Ditto. | ||
| 151 | (gnus-summary-show-article): Ditto. | ||
| 152 | (gnus-summary-save-parts): Use gnus-article-mime-handles if | ||
| 153 | dissected. | ||
| 154 | * mm-partial.el (mm-partial-find-parts): Remove redundancy. | ||
| 155 | |||
| 6 | 2000-09-14 Dave Love <fx@gnu.org> | 156 | 2000-09-14 Dave Love <fx@gnu.org> |
| 7 | 157 | ||
| 8 | * gnus.el (gnus-charset): | 158 | * gnus.el (gnus-charset): |
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index c552c966d10..4bc1e3fe708 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el | |||
| @@ -871,8 +871,11 @@ See the manual for details." | |||
| 871 | :type gnus-article-treat-custom) | 871 | :type gnus-article-treat-custom) |
| 872 | (put 'gnus-treat-overstrike 'highlight t) | 872 | (put 'gnus-treat-overstrike 'highlight t) |
| 873 | 873 | ||
| 874 | (defcustom gnus-treat-display-xface (if (and gnus-xemacs (featurep 'xface)) | 874 | (defcustom gnus-treat-display-xface |
| 875 | 'head nil) | 875 | (and (or (and (fboundp 'image-type-available-p) |
| 876 | (image-type-available-p 'xbm)) | ||
| 877 | (and gnus-xemacs (featurep 'xface))) | ||
| 878 | 'head) | ||
| 876 | "Display X-Face headers. | 879 | "Display X-Face headers. |
| 877 | Valid values are nil, t, `head', `last', an integer or a predicate. | 880 | Valid values are nil, t, `head', `last', an integer or a predicate. |
| 878 | See the manual for details." | 881 | See the manual for details." |
| @@ -1510,9 +1513,21 @@ If FORCE, decode the article whether it is marked as quoted-printable | |||
| 1510 | or not." | 1513 | or not." |
| 1511 | (interactive (list 'force)) | 1514 | (interactive (list 'force)) |
| 1512 | (save-excursion | 1515 | (save-excursion |
| 1513 | (let ((buffer-read-only nil) | 1516 | (let ((buffer-read-only nil) type charset) |
| 1514 | (type (gnus-fetch-field "content-transfer-encoding")) | 1517 | (if (gnus-buffer-live-p gnus-original-article-buffer) |
| 1515 | (charset gnus-newsgroup-charset)) | 1518 | (with-current-buffer gnus-original-article-buffer |
| 1519 | (setq type | ||
| 1520 | (gnus-fetch-field "content-transfer-encoding")) | ||
| 1521 | (let* ((ct (gnus-fetch-field "content-type")) | ||
| 1522 | (ctl (and ct | ||
| 1523 | (ignore-errors | ||
| 1524 | (mail-header-parse-content-type ct))))) | ||
| 1525 | (setq charset (and ctl | ||
| 1526 | (mail-content-type-get ctl 'charset))) | ||
| 1527 | (if (stringp charset) | ||
| 1528 | (setq charset (intern (downcase charset))))))) | ||
| 1529 | (unless charset | ||
| 1530 | (setq charset gnus-newsgroup-charset)) | ||
| 1516 | (when (or force | 1531 | (when (or force |
| 1517 | (and type (string-match "quoted-printable" (downcase type)))) | 1532 | (and type (string-match "quoted-printable" (downcase type)))) |
| 1518 | (article-goto-body) | 1533 | (article-goto-body) |
| @@ -1523,9 +1538,21 @@ or not." | |||
| 1523 | If FORCE, decode the article whether it is marked as base64 not." | 1538 | If FORCE, decode the article whether it is marked as base64 not." |
| 1524 | (interactive (list 'force)) | 1539 | (interactive (list 'force)) |
| 1525 | (save-excursion | 1540 | (save-excursion |
| 1526 | (let ((buffer-read-only nil) | 1541 | (let ((buffer-read-only nil) type charset) |
| 1527 | (type (gnus-fetch-field "content-transfer-encoding")) | 1542 | (if (gnus-buffer-live-p gnus-original-article-buffer) |
| 1528 | (charset gnus-newsgroup-charset)) | 1543 | (with-current-buffer gnus-original-article-buffer |
| 1544 | (setq type | ||
| 1545 | (gnus-fetch-field "content-transfer-encoding")) | ||
| 1546 | (let* ((ct (gnus-fetch-field "content-type")) | ||
| 1547 | (ctl (and ct | ||
| 1548 | (ignore-errors | ||
| 1549 | (mail-header-parse-content-type ct))))) | ||
| 1550 | (setq charset (and ctl | ||
| 1551 | (mail-content-type-get ctl 'charset))) | ||
| 1552 | (if (stringp charset) | ||
| 1553 | (setq charset (intern (downcase charset))))))) | ||
| 1554 | (unless charset | ||
| 1555 | (setq charset gnus-newsgroup-charset)) | ||
| 1529 | (when (or force | 1556 | (when (or force |
| 1530 | (and type (string-match "base64" (downcase type)))) | 1557 | (and type (string-match "base64" (downcase type)))) |
| 1531 | (article-goto-body) | 1558 | (article-goto-body) |
| @@ -1551,7 +1578,19 @@ If FORCE, decode the article whether it is marked as base64 not." | |||
| 1551 | (interactive) | 1578 | (interactive) |
| 1552 | (save-excursion | 1579 | (save-excursion |
| 1553 | (let ((buffer-read-only nil) | 1580 | (let ((buffer-read-only nil) |
| 1554 | (charset gnus-newsgroup-charset)) | 1581 | charset) |
| 1582 | (if (gnus-buffer-live-p gnus-original-article-buffer) | ||
| 1583 | (with-current-buffer gnus-original-article-buffer | ||
| 1584 | (let* ((ct (gnus-fetch-field "content-type")) | ||
| 1585 | (ctl (and ct | ||
| 1586 | (ignore-errors | ||
| 1587 | (mail-header-parse-content-type ct))))) | ||
| 1588 | (setq charset (and ctl | ||
| 1589 | (mail-content-type-get ctl 'charset))) | ||
| 1590 | (if (stringp charset) | ||
| 1591 | (setq charset (intern (downcase charset))))))) | ||
| 1592 | (unless charset | ||
| 1593 | (setq charset gnus-newsgroup-charset)) | ||
| 1555 | (article-goto-body) | 1594 | (article-goto-body) |
| 1556 | (save-window-excursion | 1595 | (save-window-excursion |
| 1557 | (save-restriction | 1596 | (save-restriction |
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index c4ee639c09e..0aead88df25 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el | |||
| @@ -2046,10 +2046,12 @@ and NEW-NAME will be prompted for." | |||
| 2046 | 2046 | ||
| 2047 | (gnus-message 6 "Renaming group %s to %s..." group new-name) | 2047 | (gnus-message 6 "Renaming group %s to %s..." group new-name) |
| 2048 | (prog1 | 2048 | (prog1 |
| 2049 | (if (not (gnus-request-rename-group group new-name)) | 2049 | (if (progn |
| 2050 | (gnus-group-goto-group group) | ||
| 2051 | (not (when (< (gnus-group-group-level) gnus-level-zombie) | ||
| 2052 | (gnus-request-rename-group group new-name)))) | ||
| 2050 | (gnus-error 3 "Couldn't rename group %s to %s" group new-name) | 2053 | (gnus-error 3 "Couldn't rename group %s to %s" group new-name) |
| 2051 | ;; We rename the group internally by killing it... | 2054 | ;; We rename the group internally by killing it... |
| 2052 | (gnus-group-goto-group group) | ||
| 2053 | (gnus-group-kill-group) | 2055 | (gnus-group-kill-group) |
| 2054 | ;; ... changing its name ... | 2056 | ;; ... changing its name ... |
| 2055 | (setcar (cdar gnus-list-of-killed-groups) new-name) | 2057 | (setcar (cdar gnus-list-of-killed-groups) new-name) |
| @@ -2335,9 +2337,13 @@ score file entries for articles to include in the group." | |||
| 2335 | (push (cons header regexps) scores)) | 2337 | (push (cons header regexps) scores)) |
| 2336 | scores))) | 2338 | scores))) |
| 2337 | (gnus-group-make-group group "nnkiboze" address) | 2339 | (gnus-group-make-group group "nnkiboze" address) |
| 2338 | (with-temp-file (gnus-score-file-name (concat "nnkiboze:" group)) | 2340 | (let* ((score-file (gnus-score-file-name (concat "nnkiboze:" group))) |
| 2339 | (let (emacs-lisp-mode-hook) | 2341 | (score-dir (file-name-directory score-file))) |
| 2340 | (pp scores (current-buffer))))) | 2342 | (unless (file-exists-p score-dir) |
| 2343 | (make-directory score-dir)) | ||
| 2344 | (with-temp-file score-file | ||
| 2345 | (let (emacs-lisp-mode-hook) | ||
| 2346 | (pp scores (current-buffer)))))) | ||
| 2341 | 2347 | ||
| 2342 | (defun gnus-group-add-to-virtual (n vgroup) | 2348 | (defun gnus-group-add-to-virtual (n vgroup) |
| 2343 | "Add the current group to a virtual group." | 2349 | "Add the current group to a virtual group." |
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index e371db143f8..7f80f8ea049 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el | |||
| @@ -723,19 +723,18 @@ If POST, post instead of mail." | |||
| 723 | text) | 723 | text) |
| 724 | (save-excursion | 724 | (save-excursion |
| 725 | (set-buffer gnus-original-article-buffer) | 725 | (set-buffer gnus-original-article-buffer) |
| 726 | (mm-with-unibyte-current-buffer | 726 | (setq text (buffer-string))) |
| 727 | (setq text (buffer-string)))) | ||
| 728 | (set-buffer | 727 | (set-buffer |
| 729 | (gnus-get-buffer-create | 728 | (gnus-get-buffer-create |
| 730 | (generate-new-buffer-name " *Gnus forward*"))) | 729 | (generate-new-buffer-name " *Gnus forward*"))) |
| 731 | (erase-buffer) | 730 | (erase-buffer) |
| 732 | (mm-disable-multibyte) | 731 | (unless message-forward-show-mml |
| 732 | (mm-disable-multibyte)) | ||
| 733 | (insert text) | 733 | (insert text) |
| 734 | (goto-char (point-min)) | 734 | (goto-char (point-min)) |
| 735 | (when (looking-at "From ") | 735 | (when (looking-at "From ") |
| 736 | (replace-match "X-From-Line: ") ) | 736 | (replace-match "X-From-Line: ") ) |
| 737 | (when message-forward-show-mml | 737 | (when message-forward-show-mml |
| 738 | (mm-enable-multibyte) | ||
| 739 | (mime-to-mml)) | 738 | (mime-to-mml)) |
| 740 | (message-forward post))))) | 739 | (message-forward post))))) |
| 741 | 740 | ||
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 52d93cb3c18..999e3b039fe 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -885,6 +885,14 @@ For example: ((1 . cn-gb-2312) (2 . big5))." | |||
| 885 | :type '(choice (const nil) | 885 | :type '(choice (const nil) |
| 886 | integer)) | 886 | integer)) |
| 887 | 887 | ||
| 888 | (defcustom gnus-summary-save-parts-default-mime "image/.*" | ||
| 889 | "*A regexp to match MIME parts when saving multiple parts of a message | ||
| 890 | with gnus-summary-save-parts (X m). This regexp will be used by default | ||
| 891 | when prompting the user for which type of files to save." | ||
| 892 | :group 'gnus-summary | ||
| 893 | :type 'regexp) | ||
| 894 | |||
| 895 | |||
| 888 | ;;; Internal variables | 896 | ;;; Internal variables |
| 889 | 897 | ||
| 890 | (defvar gnus-article-mime-handles nil) | 898 | (defvar gnus-article-mime-handles nil) |
| @@ -902,6 +910,9 @@ For example: ((1 . cn-gb-2312) (2 . big5))." | |||
| 902 | (defvar gnus-sort-gathered-threads-function 'gnus-thread-sort-by-number | 910 | (defvar gnus-sort-gathered-threads-function 'gnus-thread-sort-by-number |
| 903 | "Function called to sort the articles within a thread after it has been gathered together.") | 911 | "Function called to sort the articles within a thread after it has been gathered together.") |
| 904 | 912 | ||
| 913 | (defvar gnus-summary-save-parts-type-history nil) | ||
| 914 | (defvar gnus-summary-save-parts-last-directory nil) | ||
| 915 | |||
| 905 | ;; Avoid highlighting in kill files. | 916 | ;; Avoid highlighting in kill files. |
| 906 | (defvar gnus-summary-inhibit-highlight nil) | 917 | (defvar gnus-summary-inhibit-highlight nil) |
| 907 | (defvar gnus-newsgroup-selected-overlay nil) | 918 | (defvar gnus-newsgroup-selected-overlay nil) |
| @@ -3300,7 +3311,9 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise." | |||
| 3300 | (nnheader-nov-read-integer) ; chars | 3311 | (nnheader-nov-read-integer) ; chars |
| 3301 | (nnheader-nov-read-integer) ; lines | 3312 | (nnheader-nov-read-integer) ; lines |
| 3302 | (unless (eobp) | 3313 | (unless (eobp) |
| 3303 | (nnheader-nov-field)) ; misc | 3314 | (if (looking-at "Xref: ") |
| 3315 | (goto-char (match-end 0))) | ||
| 3316 | (nnheader-nov-field)) ; Xref | ||
| 3304 | (nnheader-nov-parse-extra)))) ; extra | 3317 | (nnheader-nov-parse-extra)))) ; extra |
| 3305 | 3318 | ||
| 3306 | (widen)) | 3319 | (widen)) |
| @@ -9195,8 +9208,14 @@ save those articles instead." | |||
| 9195 | "Save parts matching TYPE to DIR. | 9208 | "Save parts matching TYPE to DIR. |
| 9196 | If REVERSE, save parts that do not match TYPE." | 9209 | If REVERSE, save parts that do not match TYPE." |
| 9197 | (interactive | 9210 | (interactive |
| 9198 | (list (read-string "Save parts of type: " "image/.*") | 9211 | (list (read-string "Save parts of type: " |
| 9199 | (read-file-name "Save to directory: " nil nil t) | 9212 | (or (car gnus-summary-save-parts-type-history) |
| 9213 | gnus-summary-save-parts-default-mime) | ||
| 9214 | 'gnus-summary-save-parts-type-history) | ||
| 9215 | (setq gnus-summary-save-parts-last-directory | ||
| 9216 | (read-file-name "Save to directory: " | ||
| 9217 | gnus-summary-save-parts-last-directory | ||
| 9218 | nil t)) | ||
| 9200 | current-prefix-arg)) | 9219 | current-prefix-arg)) |
| 9201 | (gnus-summary-iterate n | 9220 | (gnus-summary-iterate n |
| 9202 | (let ((gnus-display-mime-function nil) | 9221 | (let ((gnus-display-mime-function nil) |
diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el index 2a320d40866..35324395bb7 100644 --- a/lisp/gnus/gnus-topic.el +++ b/lisp/gnus/gnus-topic.el | |||
| @@ -192,8 +192,9 @@ If TOPIC, start with that topic." | |||
| 192 | (beginning-of-line) | 192 | (beginning-of-line) |
| 193 | (get-text-property (point) 'gnus-active))) | 193 | (get-text-property (point) 'gnus-active))) |
| 194 | 194 | ||
| 195 | (defun gnus-topic-find-groups (topic &optional level all lowest) | 195 | (defun gnus-topic-find-groups (topic &optional level all lowest recursive) |
| 196 | "Return entries for all visible groups in TOPIC." | 196 | "Return entries for all visible groups in TOPIC. |
| 197 | If RECURSIVE is t, return groups in its subtopics too." | ||
| 197 | (let ((groups (cdr (assoc topic gnus-topic-alist))) | 198 | (let ((groups (cdr (assoc topic gnus-topic-alist))) |
| 198 | info clevel unread group params visible-groups entry active) | 199 | info clevel unread group params visible-groups entry active) |
| 199 | (setq lowest (or lowest 1)) | 200 | (setq lowest (or lowest 1)) |
| @@ -231,7 +232,18 @@ If TOPIC, start with that topic." | |||
| 231 | (cdr (assq 'visible params))) | 232 | (cdr (assq 'visible params))) |
| 232 | ;; Add this group to the list of visible groups. | 233 | ;; Add this group to the list of visible groups. |
| 233 | (push (or entry group) visible-groups))) | 234 | (push (or entry group) visible-groups))) |
| 234 | (nreverse visible-groups))) | 235 | (setq visible-groups (nreverse visible-groups)) |
| 236 | (when recursive | ||
| 237 | (if (eq recursive t) | ||
| 238 | (setq recursive (cdr (gnus-topic-find-topology topic)))) | ||
| 239 | (mapcar (lambda (topic-topology) | ||
| 240 | (setq visible-groups | ||
| 241 | (nconc visible-groups | ||
| 242 | (gnus-topic-find-groups | ||
| 243 | (caar topic-topology) | ||
| 244 | level all lowest topic-topology)))) | ||
| 245 | (cdr recursive))) | ||
| 246 | visible-groups)) | ||
| 235 | 247 | ||
| 236 | (defun gnus-topic-previous-topic (topic) | 248 | (defun gnus-topic-previous-topic (topic) |
| 237 | "Return the previous topic on the same level as TOPIC." | 249 | "Return the previous topic on the same level as TOPIC." |
| @@ -1292,30 +1304,37 @@ If PERMANENT, make it stay shown in subsequent sessions as well." | |||
| 1292 | (setcar (cdr (cadr topic)) 'visible) | 1304 | (setcar (cdr (cadr topic)) 'visible) |
| 1293 | (gnus-group-list-groups))))) | 1305 | (gnus-group-list-groups))))) |
| 1294 | 1306 | ||
| 1295 | (defun gnus-topic-mark-topic (topic &optional unmark) | 1307 | (defun gnus-topic-mark-topic (topic &optional unmark recursive) |
| 1296 | "Mark all groups in the topic with the process mark." | 1308 | "Mark all groups in the TOPIC with the process mark. |
| 1297 | (interactive (list (gnus-group-topic-name))) | 1309 | If RECURSIVE is t, mark its subtopics too." |
| 1310 | (interactive (list (gnus-group-topic-name) | ||
| 1311 | nil | ||
| 1312 | (and current-prefix-arg t))) | ||
| 1298 | (if (not topic) | 1313 | (if (not topic) |
| 1299 | (call-interactively 'gnus-group-mark-group) | 1314 | (call-interactively 'gnus-group-mark-group) |
| 1300 | (save-excursion | 1315 | (save-excursion |
| 1301 | (let ((groups (gnus-topic-find-groups topic gnus-level-killed t))) | 1316 | (let ((groups (gnus-topic-find-groups topic gnus-level-killed t nil |
| 1317 | recursive))) | ||
| 1302 | (while groups | 1318 | (while groups |
| 1303 | (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark) | 1319 | (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark) |
| 1304 | (gnus-info-group (nth 2 (pop groups))))))))) | 1320 | (gnus-info-group (nth 2 (pop groups))))))))) |
| 1305 | 1321 | ||
| 1306 | (defun gnus-topic-unmark-topic (topic &optional unmark) | 1322 | (defun gnus-topic-unmark-topic (topic &optional dummy recursive) |
| 1307 | "Remove the process mark from all groups in the topic." | 1323 | "Remove the process mark from all groups in the TOPIC. |
| 1308 | (interactive (list (gnus-group-topic-name))) | 1324 | If RECURSIVE is t, unmark its subtopics too." |
| 1325 | (interactive (list (gnus-group-topic-name) | ||
| 1326 | nil | ||
| 1327 | (and current-prefix-arg t))) | ||
| 1309 | (if (not topic) | 1328 | (if (not topic) |
| 1310 | (call-interactively 'gnus-group-unmark-group) | 1329 | (call-interactively 'gnus-group-unmark-group) |
| 1311 | (gnus-topic-mark-topic topic t))) | 1330 | (gnus-topic-mark-topic topic t recursive))) |
| 1312 | 1331 | ||
| 1313 | (defun gnus-topic-get-new-news-this-topic (&optional n) | 1332 | (defun gnus-topic-get-new-news-this-topic (&optional n) |
| 1314 | "Check for new news in the current topic." | 1333 | "Check for new news in the current topic." |
| 1315 | (interactive "P") | 1334 | (interactive "P") |
| 1316 | (if (not (gnus-group-topic-p)) | 1335 | (if (not (gnus-group-topic-p)) |
| 1317 | (gnus-group-get-new-news-this-group n) | 1336 | (gnus-group-get-new-news-this-group n) |
| 1318 | (gnus-topic-mark-topic (gnus-group-topic-name)) | 1337 | (gnus-topic-mark-topic (gnus-group-topic-name) nil (and n t)) |
| 1319 | (gnus-group-get-new-news-this-group))) | 1338 | (gnus-group-get-new-news-this-group))) |
| 1320 | 1339 | ||
| 1321 | (defun gnus-topic-move-matching (regexp topic &optional copyp) | 1340 | (defun gnus-topic-move-matching (regexp topic &optional copyp) |
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 10f5076815e..72e4d031e1c 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el | |||
| @@ -311,11 +311,11 @@ Cache the result as a text property stored in DATE." | |||
| 311 | time))))) | 311 | time))))) |
| 312 | 312 | ||
| 313 | (defsubst gnus-time-iso8601 (time) | 313 | (defsubst gnus-time-iso8601 (time) |
| 314 | "Return a string of TIME in YYMMDDTHHMMSS format." | 314 | "Return a string of TIME in YYYYMMDDTHHMMSS format." |
| 315 | (format-time-string "%Y%m%dT%H%M%S" time)) | 315 | (format-time-string "%Y%m%dT%H%M%S" time)) |
| 316 | 316 | ||
| 317 | (defun gnus-date-iso8601 (date) | 317 | (defun gnus-date-iso8601 (date) |
| 318 | "Convert the DATE to YYMMDDTHHMMSS." | 318 | "Convert the DATE to YYYYMMDDTHHMMSS." |
| 319 | (condition-case () | 319 | (condition-case () |
| 320 | (gnus-time-iso8601 (gnus-date-get-time date)) | 320 | (gnus-time-iso8601 (gnus-date-get-time date)) |
| 321 | (error ""))) | 321 | (error ""))) |
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el index a8c16c4777e..848d7e47a7a 100644 --- a/lisp/gnus/nnheader.el +++ b/lisp/gnus/nnheader.el | |||
| @@ -332,7 +332,9 @@ on your system, you could say something like: | |||
| 332 | (nnheader-nov-read-integer) ; lines | 332 | (nnheader-nov-read-integer) ; lines |
| 333 | (if (eq (char-after) ?\n) | 333 | (if (eq (char-after) ?\n) |
| 334 | nil | 334 | nil |
| 335 | (nnheader-nov-field)) ; misc | 335 | (if (looking-at "Xref: ") |
| 336 | (goto-char (match-end 0))) | ||
| 337 | (nnheader-nov-field)) ; Xref | ||
| 336 | (nnheader-nov-parse-extra)))) ; extra | 338 | (nnheader-nov-parse-extra)))) ; extra |
| 337 | 339 | ||
| 338 | (defun nnheader-insert-nov (header) | 340 | (defun nnheader-insert-nov (header) |
diff --git a/lisp/gnus/nnkiboze.el b/lisp/gnus/nnkiboze.el index 864a18acb9e..d93800a5b97 100644 --- a/lisp/gnus/nnkiboze.el +++ b/lisp/gnus/nnkiboze.el | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | (require 'gnus) | 36 | (require 'gnus) |
| 37 | (require 'gnus-score) | 37 | (require 'gnus-score) |
| 38 | (require 'nnoo) | 38 | (require 'nnoo) |
| 39 | (require 'mm-util) | ||
| 39 | (eval-when-compile (require 'cl)) | 40 | (eval-when-compile (require 'cl)) |
| 40 | 41 | ||
| 41 | (nnoo-declare nnkiboze) | 42 | (nnoo-declare nnkiboze) |
| @@ -57,6 +58,9 @@ | |||
| 57 | (defvoo nnkiboze-regexp nil | 58 | (defvoo nnkiboze-regexp nil |
| 58 | "Regexp for matching component groups.") | 59 | "Regexp for matching component groups.") |
| 59 | 60 | ||
| 61 | (defvoo nnkiboze-file-coding-system mm-text-coding-system | ||
| 62 | "Coding system for nnkiboze files.") | ||
| 63 | |||
| 60 | 64 | ||
| 61 | 65 | ||
| 62 | (defconst nnkiboze-version "nnkiboze 1.0") | 66 | (defconst nnkiboze-version "nnkiboze 1.0") |
| @@ -82,7 +86,8 @@ | |||
| 82 | (save-excursion | 86 | (save-excursion |
| 83 | (set-buffer nntp-server-buffer) | 87 | (set-buffer nntp-server-buffer) |
| 84 | (erase-buffer) | 88 | (erase-buffer) |
| 85 | (nnheader-insert-file-contents nov) | 89 | (let ((nnheader-file-coding-system nnkiboze-file-coding-system)) |
| 90 | (nnheader-insert-file-contents nov)) | ||
| 86 | (nnheader-nov-delete-outside-range | 91 | (nnheader-nov-delete-outside-range |
| 87 | (car articles) (car (last articles))) | 92 | (car articles) (car (last articles))) |
| 88 | 'nov)))))) | 93 | 'nov)))))) |
| @@ -121,7 +126,8 @@ | |||
| 121 | (nnkiboze-request-scan group)) | 126 | (nnkiboze-request-scan group)) |
| 122 | (if (not (file-exists-p nov-file)) | 127 | (if (not (file-exists-p nov-file)) |
| 123 | (nnheader-report 'nnkiboze "Can't select group %s" group) | 128 | (nnheader-report 'nnkiboze "Can't select group %s" group) |
| 124 | (nnheader-insert-file-contents nov-file) | 129 | (let ((nnheader-file-coding-system nnkiboze-file-coding-system)) |
| 130 | (nnheader-insert-file-contents nov-file)) | ||
| 125 | (if (zerop (buffer-size)) | 131 | (if (zerop (buffer-size)) |
| 126 | (nnheader-insert "211 0 0 0 %s\n" group) | 132 | (nnheader-insert "211 0 0 0 %s\n" group) |
| 127 | (goto-char (point-min)) | 133 | (goto-char (point-min)) |
| @@ -138,15 +144,17 @@ | |||
| 138 | ;; Remove NOV lines of articles that are marked as read. | 144 | ;; Remove NOV lines of articles that are marked as read. |
| 139 | (when (and (file-exists-p (nnkiboze-nov-file-name)) | 145 | (when (and (file-exists-p (nnkiboze-nov-file-name)) |
| 140 | nnkiboze-remove-read-articles) | 146 | nnkiboze-remove-read-articles) |
| 141 | (with-temp-file (nnkiboze-nov-file-name) | 147 | (let ((coding-system-for-write nnkiboze-file-coding-system)) |
| 142 | (let ((cur (current-buffer))) | 148 | (with-temp-file (nnkiboze-nov-file-name) |
| 143 | (nnheader-insert-file-contents (nnkiboze-nov-file-name)) | 149 | (let ((cur (current-buffer)) |
| 144 | (goto-char (point-min)) | 150 | (nnheader-file-coding-system nnkiboze-file-coding-system)) |
| 145 | (while (not (eobp)) | 151 | (nnheader-insert-file-contents (nnkiboze-nov-file-name)) |
| 146 | (if (not (gnus-article-read-p (read cur))) | 152 | (goto-char (point-min)) |
| 147 | (forward-line 1) | 153 | (while (not (eobp)) |
| 148 | (gnus-delete-line)))))) | 154 | (if (not (gnus-article-read-p (read cur))) |
| 149 | (setq nnkiboze-current-group nil)) | 155 | (forward-line 1) |
| 156 | (gnus-delete-line)))))) | ||
| 157 | (setq nnkiboze-current-group nil))) | ||
| 150 | 158 | ||
| 151 | (deffoo nnkiboze-open-server (server &optional defs) | 159 | (deffoo nnkiboze-open-server (server &optional defs) |
| 152 | (unless (assq 'nnkiboze-regexp defs) | 160 | (unless (assq 'nnkiboze-regexp defs) |
| @@ -233,93 +241,94 @@ Finds out what articles are to be part of the nnkiboze groups." | |||
| 233 | ;; Load the kiboze newsrc file for this group. | 241 | ;; Load the kiboze newsrc file for this group. |
| 234 | (when (file-exists-p newsrc-file) | 242 | (when (file-exists-p newsrc-file) |
| 235 | (load newsrc-file)) | 243 | (load newsrc-file)) |
| 236 | (with-temp-file nov-file | 244 | (let ((coding-system-for-write nnkiboze-file-coding-system)) |
| 237 | (when (file-exists-p nov-file) | 245 | (with-temp-file nov-file |
| 238 | (insert-file-contents nov-file)) | 246 | (when (file-exists-p nov-file) |
| 239 | (setq nov-buffer (current-buffer)) | 247 | (insert-file-contents nov-file)) |
| 240 | ;; Go through the active hashtb and add new all groups that match the | 248 | (setq nov-buffer (current-buffer)) |
| 241 | ;; kiboze regexp. | 249 | ;; Go through the active hashtb and add new all groups that match the |
| 242 | (mapatoms | 250 | ;; kiboze regexp. |
| 243 | (lambda (group) | 251 | (mapatoms |
| 244 | (and (string-match nnkiboze-regexp | 252 | (lambda (group) |
| 245 | (setq gname (symbol-name group))) ; Match | 253 | (and (string-match nnkiboze-regexp |
| 246 | (not (assoc gname nnkiboze-newsrc)) ; It isn't registered | 254 | (setq gname (symbol-name group))) ; Match |
| 247 | (numberp (car (symbol-value group))) ; It is active | 255 | (not (assoc gname nnkiboze-newsrc)) ; It isn't registered |
| 248 | (or (> nnkiboze-level 7) | 256 | (numberp (car (symbol-value group))) ; It is active |
| 249 | (and (setq glevel (nth 1 (nth 2 (gnus-gethash | 257 | (or (> nnkiboze-level 7) |
| 250 | gname gnus-newsrc-hashtb)))) | 258 | (and (setq glevel (nth 1 (nth 2 (gnus-gethash |
| 251 | (>= nnkiboze-level glevel))) | 259 | gname gnus-newsrc-hashtb)))) |
| 252 | (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes | 260 | (>= nnkiboze-level glevel))) |
| 253 | (push (cons gname (1- (car (symbol-value group)))) | 261 | (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes |
| 254 | nnkiboze-newsrc))) | 262 | (push (cons gname (1- (car (symbol-value group)))) |
| 255 | gnus-active-hashtb) | 263 | nnkiboze-newsrc))) |
| 256 | ;; `newsrc' is set to the list of groups that possibly are | 264 | gnus-active-hashtb) |
| 257 | ;; component groups to this kiboze group. This list has elements | 265 | ;; `newsrc' is set to the list of groups that possibly are |
| 258 | ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest | 266 | ;; component groups to this kiboze group. This list has elements |
| 259 | ;; number that has been kibozed in GROUP in this kiboze group. | 267 | ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest |
| 260 | (setq newsrc nnkiboze-newsrc) | 268 | ;; number that has been kibozed in GROUP in this kiboze group. |
| 261 | (while newsrc | 269 | (setq newsrc nnkiboze-newsrc) |
| 262 | (if (not (setq active (gnus-gethash | 270 | (while newsrc |
| 263 | (caar newsrc) gnus-active-hashtb))) | 271 | (if (not (setq active (gnus-gethash |
| 264 | ;; This group isn't active after all, so we remove it from | 272 | (caar newsrc) gnus-active-hashtb))) |
| 265 | ;; the list of component groups. | 273 | ;; This group isn't active after all, so we remove it from |
| 266 | (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc)) | 274 | ;; the list of component groups. |
| 267 | (setq lowest (cdar newsrc)) | 275 | (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc)) |
| 268 | ;; Ok, we have a valid component group, so we jump to it. | 276 | (setq lowest (cdar newsrc)) |
| 269 | (switch-to-buffer gnus-group-buffer) | 277 | ;; Ok, we have a valid component group, so we jump to it. |
| 270 | (gnus-group-jump-to-group (caar newsrc)) | 278 | (switch-to-buffer gnus-group-buffer) |
| 271 | (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc)) | 279 | (gnus-group-jump-to-group (caar newsrc)) |
| 272 | (setq ginfo (gnus-get-info (gnus-group-group-name)) | 280 | (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc)) |
| 273 | orig-info (gnus-copy-sequence ginfo) | 281 | (setq ginfo (gnus-get-info (gnus-group-group-name)) |
| 274 | num-unread (car (gnus-gethash (caar newsrc) | 282 | orig-info (gnus-copy-sequence ginfo) |
| 275 | gnus-newsrc-hashtb))) | 283 | num-unread (car (gnus-gethash (caar newsrc) |
| 276 | (unwind-protect | 284 | gnus-newsrc-hashtb))) |
| 277 | (progn | 285 | (unwind-protect |
| 278 | ;; We set all list of article marks to nil. Since we operate | 286 | (progn |
| 279 | ;; on copies of the real lists, we can destroy anything we | 287 | ;; We set all list of article marks to nil. Since we operate |
| 280 | ;; want here. | 288 | ;; on copies of the real lists, we can destroy anything we |
| 281 | (when (nth 3 ginfo) | 289 | ;; want here. |
| 282 | (setcar (nthcdr 3 ginfo) nil)) | 290 | (when (nth 3 ginfo) |
| 283 | ;; We set the list of read articles to be what we expect for | 291 | (setcar (nthcdr 3 ginfo) nil)) |
| 284 | ;; this kiboze group -- either nil or `(1 . LOWEST)'. | 292 | ;; We set the list of read articles to be what we expect for |
| 285 | (when ginfo | 293 | ;; this kiboze group -- either nil or `(1 . LOWEST)'. |
| 286 | (setcar (nthcdr 2 ginfo) | 294 | (when ginfo |
| 287 | (and (not (= lowest 1)) (cons 1 lowest)))) | 295 | (setcar (nthcdr 2 ginfo) |
| 288 | (when (and (or (not ginfo) | 296 | (and (not (= lowest 1)) (cons 1 lowest)))) |
| 289 | (> (length (gnus-list-of-unread-articles | 297 | (when (and (or (not ginfo) |
| 290 | (car ginfo))) | 298 | (> (length (gnus-list-of-unread-articles |
| 291 | 0)) | 299 | (car ginfo))) |
| 292 | (progn | 300 | 0)) |
| 293 | (ignore-errors | 301 | (progn |
| 294 | (gnus-group-select-group nil)) | 302 | (ignore-errors |
| 295 | (eq major-mode 'gnus-summary-mode))) | 303 | (gnus-group-select-group nil)) |
| 296 | ;; We are now in the group where we want to be. | 304 | (eq major-mode 'gnus-summary-mode))) |
| 297 | (setq method (gnus-find-method-for-group | 305 | ;; We are now in the group where we want to be. |
| 298 | gnus-newsgroup-name)) | 306 | (setq method (gnus-find-method-for-group |
| 299 | (when (eq method gnus-select-method) | 307 | gnus-newsgroup-name)) |
| 300 | (setq method nil)) | 308 | (when (eq method gnus-select-method) |
| 301 | ;; We go through the list of scored articles. | 309 | (setq method nil)) |
| 302 | (while gnus-newsgroup-scored | 310 | ;; We go through the list of scored articles. |
| 303 | (when (> (caar gnus-newsgroup-scored) lowest) | 311 | (while gnus-newsgroup-scored |
| 304 | ;; If it has a good score, then we enter this article | 312 | (when (> (caar gnus-newsgroup-scored) lowest) |
| 305 | ;; into the kiboze group. | 313 | ;; If it has a good score, then we enter this article |
| 306 | (nnkiboze-enter-nov | 314 | ;; into the kiboze group. |
| 307 | nov-buffer | 315 | (nnkiboze-enter-nov |
| 308 | (gnus-summary-article-header | 316 | nov-buffer |
| 309 | (caar gnus-newsgroup-scored)) | 317 | (gnus-summary-article-header |
| 310 | gnus-newsgroup-name)) | 318 | (caar gnus-newsgroup-scored)) |
| 311 | (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored))) | 319 | gnus-newsgroup-name)) |
| 312 | ;; That's it. We exit this group. | 320 | (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored))) |
| 313 | (when (eq major-mode 'gnus-summary-mode) | 321 | ;; That's it. We exit this group. |
| 314 | (kill-buffer (current-buffer))))) | 322 | (when (eq major-mode 'gnus-summary-mode) |
| 315 | ;; Restore the proper info. | 323 | (kill-buffer (current-buffer))))) |
| 316 | (when ginfo | 324 | ;; Restore the proper info. |
| 317 | (setcdr ginfo (cdr orig-info))) | 325 | (when ginfo |
| 318 | (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb) | 326 | (setcdr ginfo (cdr orig-info))) |
| 319 | num-unread))) | 327 | (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb) |
| 320 | (setcdr (car newsrc) (car active)) | 328 | num-unread))) |
| 321 | (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc)) | 329 | (setcdr (car newsrc) (car active)) |
| 322 | (setq newsrc (cdr newsrc)))) | 330 | (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc)) |
| 331 | (setq newsrc (cdr newsrc))))) | ||
| 323 | ;; We save the kiboze newsrc for this group. | 332 | ;; We save the kiboze newsrc for this group. |
| 324 | (with-temp-file newsrc-file | 333 | (with-temp-file newsrc-file |
| 325 | (insert "(setq nnkiboze-newsrc '") | 334 | (insert "(setq nnkiboze-newsrc '") |
| @@ -343,19 +352,22 @@ Finds out what articles are to be part of the nnkiboze groups." | |||
| 343 | (forward-line 1)) | 352 | (forward-line 1)) |
| 344 | (setq article 1)) | 353 | (setq article 1)) |
| 345 | (mail-header-set-number oheader article) | 354 | (mail-header-set-number oheader article) |
| 346 | (nnheader-insert-nov oheader) | 355 | (with-temp-buffer |
| 347 | (search-backward "\t" nil t 2) | 356 | (insert (mail-header-xref oheader)) |
| 348 | (if (re-search-forward " [^ ]+:[0-9]+" nil t) | 357 | (goto-char (point-min)) |
| 349 | (goto-char (match-beginning 0)) | 358 | (if (re-search-forward " [^ ]+:[0-9]+" nil t) |
| 359 | (goto-char (match-beginning 0)) | ||
| 350 | (forward-char 1)) | 360 | (forward-char 1)) |
| 351 | ;; The first Xref has to be the group this article | 361 | ;; The first Xref has to be the group this article |
| 352 | ;; really came for - this is the article nnkiboze | 362 | ;; really came for - this is the article nnkiboze |
| 353 | ;; will request when it is asked for the article. | 363 | ;; will request when it is asked for the article. |
| 354 | (insert " " group ":" | 364 | (insert " " group ":" |
| 355 | (int-to-string (mail-header-number header)) " ") | 365 | (int-to-string (mail-header-number header)) " ") |
| 356 | (while (re-search-forward " [^ ]+:[0-9]+" nil t) | 366 | (while (re-search-forward " [^ ]+:[0-9]+" nil t) |
| 357 | (goto-char (1+ (match-beginning 0))) | 367 | (goto-char (1+ (match-beginning 0))) |
| 358 | (insert prefix))))) | 368 | (insert prefix)) |
| 369 | (mail-header-set-xref oheader (buffer-string))) | ||
| 370 | (nnheader-insert-nov oheader)))) | ||
| 359 | 371 | ||
| 360 | (defun nnkiboze-nov-file-name (&optional suffix) | 372 | (defun nnkiboze-nov-file-name (&optional suffix) |
| 361 | (concat (file-name-as-directory nnkiboze-directory) | 373 | (concat (file-name-as-directory nnkiboze-directory) |
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el index be8984866d7..9ccf564b365 100644 --- a/lisp/gnus/nnmail.el +++ b/lisp/gnus/nnmail.el | |||
| @@ -185,7 +185,7 @@ The return value should be `delete' or a group name (a string)." | |||
| 185 | :group 'nnmail | 185 | :group 'nnmail |
| 186 | :type 'boolean) | 186 | :type 'boolean) |
| 187 | 187 | ||
| 188 | (defcustom nnmail-spool-file '((file)) | 188 | (defcustom nnmail-spool-file nil |
| 189 | "*Where the mail backends will look for incoming mail. | 189 | "*Where the mail backends will look for incoming mail. |
| 190 | This variable is a list of mail source specifiers. | 190 | This variable is a list of mail source specifiers. |
| 191 | This variable is obsolete; `mail-sources' should be used instead." | 191 | This variable is obsolete; `mail-sources' should be used instead." |
| @@ -226,7 +226,7 @@ links, you could set this variable to `copy-file' instead." | |||
| 226 | '(nnheader-ms-strip-cr) | 226 | '(nnheader-ms-strip-cr) |
| 227 | nil) | 227 | nil) |
| 228 | "*Hook that will be run after the incoming mail has been transferred. | 228 | "*Hook that will be run after the incoming mail has been transferred. |
| 229 | The incoming mail is moved from `nnmail-spool-file' (which normally is | 229 | The incoming mail is moved from the specified spool file (which normally is |
| 230 | something like \"/usr/spool/mail/$user\") to the user's home | 230 | something like \"/usr/spool/mail/$user\") to the user's home |
| 231 | directory. This hook is called after the incoming mail box has been | 231 | directory. This hook is called after the incoming mail box has been |
| 232 | emptied, and can be used to call any mail box programs you have | 232 | emptied, and can be used to call any mail box programs you have |
| @@ -1513,7 +1513,8 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." | |||
| 1513 | (new 0) | 1513 | (new 0) |
| 1514 | (total 0) | 1514 | (total 0) |
| 1515 | incoming incomings source) | 1515 | incoming incomings source) |
| 1516 | (when (nnmail-get-value "%s-get-new-mail" method) | 1516 | (when (and (nnmail-get-value "%s-get-new-mail" method) |
| 1517 | sources) | ||
| 1517 | (while (setq source (pop sources)) | 1518 | (while (setq source (pop sources)) |
| 1518 | ;; Be compatible with old values. | 1519 | ;; Be compatible with old values. |
| 1519 | (cond | 1520 | (cond |