# HG changeset patch # User Katsumi Yamaoka # Date 1285974505 0 # Node ID 42815c76b976fda0ea8ca8d13c57ba10fcf1466e # Parent f2f31dc6273a12ca89ae0b3f0e6a656332d34aa1 Merge changes made in Gnus trunk. gnus-registry.el: Fix and extend header docs. Move the nnregistry feature check. nnimap.el (nnimap-update-info): Ignore groups that have no UIDNEXT values. nnimap.el: Implement nnimap-request-newgroups. gnus-group.el (gnus-group-completing-read): Return the symbol name, not the value from the collection. nnimap.el: Don't error out on empty non-UIDNEXT groups. nnmail.el (nnmail-article-group): Allow using the fancy split method directly. gnus.el (gnus-continuum-version): Make inactive, since it doesn't really message anything to the user. gnus-msg.el (gnus-summary-resend-message): When resending, don't externalize attachments. gnus.el (gnus-large-newsgroup): Mention gnus-large-ephemeral-newsgroup. gnus-sum.el (gnus-summary-scroll-up): Add more documentation. message.el (message-shorten-references): Comment on the number "21". mm-encode.el (mm-content-transfer-encoding-defaults): Try to make the documentation clearer. ChangeLog: jidanni -> Dan Jacobson. nnmbox.el (nnmbox-read-mbox): Mark buffer for deletion on Gnus exit. gnus-sum.el, gnus-win.el: Change the `h' command to only show the article buffer. gnus-art.el (gnus-summary-save-in-file, gnus-summary-save-in-rmail): Use with-current-buffer instead of gnus-eval-in-buffer-window to avoid popping up frames. gnus-sum.el (gnus-summary-clear-local-variables): Removed. gnus-async.el (gnus-async-delete-prefetched-entry): Remove from hash table, too. gnus-async.el: Try to keep the async hash table size reasonable. nndoc.el (nndoc-type-alist): Do babyl before mime-parts. gnus-start.el (gnus-check-bogus-newsgroups): Say how many groups we're being queried about. diff -r f2f31dc6273a -r 42815c76b976 doc/misc/gnus.texi --- a/doc/misc/gnus.texi Fri Oct 01 22:18:24 2010 +0200 +++ b/doc/misc/gnus.texi Fri Oct 01 23:08:25 2010 +0000 @@ -9477,6 +9477,14 @@ corresponding regular expression in @code{gnus-article-banner-alist} is used. +For instance: + +@lisp +(setq gnus-article-banner-alist + ((googleGroups . + "^\n*--~--~---------\\(.+\n\\)+"))) +@end lisp + Regardless of a group, you can hide things like advertisements only when the sender of an article has a certain mail address specified in @code{gnus-article-address-banner-alist}. @@ -15102,6 +15110,9 @@ message. The function should return a list of group names that it thinks should carry this mail message. +This variable can also be a fancy split method. See @xref{Fancy Mail +Splitting} for the syntax. + Note that the mail back ends are free to maul the poor, innocent, incoming headers all they want to. They all add @code{Lines} headers; some add @code{X-Gnus-Group} headers; most rename the Unix mbox diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/ChangeLog Fri Oct 01 23:08:25 2010 +0000 @@ -1,3 +1,81 @@ +2010-10-01 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-check-bogus-newsgroups): Say how many groups + we're being queried about. Suggested by Dan Jacobson. + + * nndoc.el (nndoc-type-alist): Do babyl before mime-parts. Suggested + by Jason Eisner. + + * gnus-async.el (gnus-async-delete-prefetched-entry): Remove from hash + table, too. Suggested by Stefan Wiens. + (gnus-async-prefetched-article-entry): Use intern-soft to avoid growing + the table unnecessary. Suggested by Stefan Wiens. + + * gnus-sum.el (gnus-summary-clear-local-variables): This is probably no + longer needed, and probably doesn't work either, as pointed out by + Stefan Wiens. + (gnus-summary-exit): Remove call to the clearing function. + (gnus-summary-exit-no-update): Ditto. + + * gnus-art.el (gnus-summary-save-in-file): Use with-current-buffer + instead of gnus-eval-in-buffer-window to avoid popping up frames. + Reported by Stefan Monnier. + (gnus-summary-save-in-rmail): Ditto. + + * gnus-sum.el (gnus-summary-select-article-buffer): Show only the + article buffer, instead of both the article buffer and the summary + buffer. Sort of suggested by Dan Jacobson. + + * gnus-win.el (gnus-buffer-configuration): Add an only-article spec. + + * nnmbox.el (nnmbox-read-mbox): Mark buffer for deletion on Gnus exit. + Suggested by Dan Jacobson. + + * mm-encode.el (mm-content-transfer-encoding-defaults): Try to make the + documentation clearer. + + * message.el (message-shorten-references): Comment on the number "21". + Suggested by Stefan Monnier. + + * gnus-sum.el (gnus-summary-scroll-up): Add more documentation. + Suggested by Dan Jacobson. + + * gnus.el (gnus-large-newsgroup): Mention + gnus-large-ephemeral-newsgroup. Suggested by Dan Jacobson. + + * gnus-msg.el (gnus-summary-resend-message): When resending, don't + externalize attachments. Bug reported by Steve Wen. + + * gnus.el (gnus-continuum-version): Make inactive, since it doesn't + really message anything to the user. + + * nnmail.el (nnmail-article-group): Allow using the fancy split method + directly. + + * nnimap.el (nnimap-request-group): Low higher than high to signal no + messages in empty groups. + +2010-10-01 Ted Zlatanov + + * nnimap.el (nnimap-request-group): Don't bug out when there's an empty + non-UIDNEXT group. + +2010-10-01 Lars Magne Ingebrigtsen + + * gnus-group.el (gnus-group-completing-read): Return the symbol name, + not the value from the collection. + + * nnimap.el (nnimap-update-info): Ignore groups that have no UIDNEXT + values. This sometimes happens on some groups that have no info. + (nnimap-request-newgroups): New function. + +2010-10-01 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-install-nnregistry): Move the feature + check into `gnus-registry-initialize'. + (gnus-registry-initialize): Ditto. + Fix and extend header docs. + 2010-10-01 Lars Magne Ingebrigtsen * gnus-html.el (gnus-html-prefetch-images): Adjust regexp to avoid diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-art.el --- a/lisp/gnus/gnus-art.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-art.el Fri Oct 01 23:08:25 2010 +0000 @@ -3958,7 +3958,7 @@ "Save %s in rmail file" filename gnus-rmail-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-rmail)) - (gnus-eval-in-buffer-window gnus-save-article-buffer + (with-current-buffer gnus-save-article-buffer (save-excursion (save-restriction (widen) @@ -3976,7 +3976,7 @@ "Save %s in Unix mail file" filename gnus-mail-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-mail)) - (gnus-eval-in-buffer-window gnus-save-article-buffer + (with-current-buffer gnus-save-article-buffer (save-excursion (save-restriction (widen) @@ -3997,7 +3997,7 @@ "Save %s in file" filename gnus-file-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-file)) - (gnus-eval-in-buffer-window gnus-save-article-buffer + (with-current-buffer gnus-save-article-buffer (save-excursion (save-restriction (widen) @@ -4029,7 +4029,7 @@ "Save %s body in file" filename gnus-file-save-name gnus-newsgroup-name gnus-current-headers 'gnus-newsgroup-last-file)) - (gnus-eval-in-buffer-window gnus-save-article-buffer + (with-current-buffer gnus-save-article-buffer (save-excursion (save-restriction (widen) @@ -4108,7 +4108,7 @@ (if default (setq command default) (error "A command is required"))) - (gnus-eval-in-buffer-window save-buffer + (with-current-buffer save-buffer (save-restriction (widen) (shell-command-on-region (point-min) (point-max) command nil))) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-async.el --- a/lisp/gnus/gnus-async.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-async.el Fri Oct 01 23:08:25 2010 +0000 @@ -316,7 +316,8 @@ (set-marker (caddr entry) nil)) (gnus-async-with-semaphore (setq gnus-async-article-alist - (delq entry gnus-async-article-alist)))) + (delq entry gnus-async-article-alist)) + (unintern (car entry) gnus-async-hashtb))) (defun gnus-async-prefetch-remove-group (group) "Remove all articles belonging to GROUP from the prefetch buffer." @@ -332,8 +333,8 @@ "Return the entry for ARTICLE in GROUP if it has been prefetched." (let ((entry (save-excursion (gnus-async-set-buffer) - (assq (intern (format "%s-%d" group article) - gnus-async-hashtb) + (assq (intern-soft (format "%s-%d" group article) + gnus-async-hashtb) gnus-async-article-alist)))) ;; Perhaps something has emptied the buffer? (if (and entry diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-group.el --- a/lisp/gnus/gnus-group.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-group.el Fri Oct 01 23:08:25 2010 +0000 @@ -2170,21 +2170,21 @@ The arguments are the same as `completing-read' except that COLLECTION and HIST default to `gnus-active-hashtb' and `gnus-group-history' respectively if they are omitted." - (let* ((choices (mapcar (lambda (symbol) + (let* ((collection (or collection (or gnus-active-hashtb [0]))) + (choices (mapcar (lambda (symbol) (let ((group (symbol-name symbol))) (if (string-match "[^\000-\177]" group) (gnus-group-decoded-name group) group))) - (remove-if-not - 'symbolp - (or collection (or gnus-active-hashtb [0]))))) + (remove-if-not 'symbolp collection))) (group (gnus-completing-read (or prompt "Group") choices require-match initial-input (or hist 'gnus-group-history) def))) - (or (symbol-value (intern-soft group collection)) - (mm-encode-coding-string group (gnus-group-name-charset nil group))))) + (if (symbol-value (intern-soft group collection)) + group + (mm-encode-coding-string group (gnus-group-name-charset nil group))))) ;;;###autoload (defun gnus-fetch-group (group &optional articles) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-msg.el --- a/lisp/gnus/gnus-msg.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-msg.el Fri Oct 01 23:08:25 2010 +0000 @@ -1265,7 +1265,8 @@ (dolist (article (gnus-summary-work-articles n)) (gnus-summary-select-article nil nil nil article) (with-current-buffer gnus-original-article-buffer - (message-resend address)) + (let ((gnus-gcc-externalize-attachments nil)) + (message-resend address))) (gnus-summary-mark-article-as-forwarded article))) ;; From: Matthieu Moy diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-registry.el --- a/lisp/gnus/gnus-registry.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-registry.el Fri Oct 01 23:08:25 2010 +0000 @@ -36,10 +36,12 @@ ;; Put this in your startup file (~/.gnus.el for instance) +;; (require 'nnregistry) ;; optional, or see below (automatically calls `gnus-registry-install-nnregistry' when `gnus-registry-initialize' is called) ;; (setq gnus-registry-max-entries 2500 ;; gnus-registry-use-long-group-names t) ;; (gnus-registry-initialize) +;; (gnus-registry-install-nnregistry) ;; optional, or see above (loading nnregistry makes it unnecessary) ;; Then use this in your fancy-split: @@ -1129,7 +1131,8 @@ (setq gnus-registry-install t) ; in case it was 'ask or nil (gnus-registry-install-hooks) (gnus-registry-install-shortcuts) - (gnus-registry-install-nnregistry) + (when (featurep 'nnregistry) + (gnus-registry-install-nnregistry)) (gnus-registry-read)) ;;;###autoload @@ -1150,14 +1153,13 @@ (defun gnus-registry-install-nnregistry () "Install the nnregistry refer method in `gnus-refer-article-method'." (interactive) - (when (featurep 'nnregistry) - (setq gnus-refer-article-method - (delete-dups - (append - (if (listp gnus-refer-article-method) - gnus-refer-article-method - (list gnus-refer-article-method)) - (list 'nnregistry)))))) + (setq gnus-refer-article-method + (delete-dups + (append + (if (listp gnus-refer-article-method) + gnus-refer-article-method + (list gnus-refer-article-method)) + (list 'nnregistry))))) (defun gnus-registry-unload-hook () "Uninstall the registry hooks." diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-start.el --- a/lisp/gnus/gnus-start.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-start.el Fri Oct 01 23:08:25 2010 +0000 @@ -1465,7 +1465,7 @@ (push group bogus))) (if confirm (map-y-or-n-p - "Remove bogus group %s? " + (format "Remove bogus group %%s (of %d groups)? " (length bogus)) (lambda (group) ;; Remove all bogus subscribed groups by first killing them, and ;; then removing them from the list of killed groups. diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-sum.el --- a/lisp/gnus/gnus-sum.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-sum.el Fri Oct 01 23:08:25 2010 +0000 @@ -3109,16 +3109,6 @@ ;; Simple nil-valued local variable. (set (make-local-variable local) nil))))) -(defun gnus-summary-clear-local-variables () - (let ((locals gnus-summary-local-variables)) - (while locals - (if (consp (car locals)) - (and (symbolp (caar locals)) - (set (caar locals) nil)) - (and (symbolp (car locals)) - (set (car locals) nil))) - (setq locals (cdr locals))))) - ;; Summary data functions. (defmacro gnus-data-number (data) @@ -6939,12 +6929,12 @@ ;; Various summary commands (defun gnus-summary-select-article-buffer () - "Reconfigure windows to show article buffer." + "Reconfigure windows to show the article buffer." (interactive) (if (not (gnus-buffer-live-p gnus-article-buffer)) (error "There is no article buffer for this summary buffer") - (gnus-configure-windows 'article) - (select-window (get-buffer-window gnus-article-buffer)))) + (select-window (get-buffer-window gnus-article-buffer)) + (gnus-configure-windows 'only-article t))) (defun gnus-summary-universal-argument (arg) "Perform any operation on all articles that are process/prefixed." @@ -7129,13 +7119,6 @@ (progn (gnus-deaden-summary) (setq mode nil)) - ;; We set all buffer-local variables to nil. It is unclear why - ;; this is needed, but if we don't, buffer-local variables are - ;; not garbage-collected, it seems. This would the lead to en - ;; ever-growing Emacs. - (gnus-summary-clear-local-variables) - (let ((gnus-summary-local-variables gnus-newsgroup-variables)) - (gnus-summary-clear-local-variables)) (when (get-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer)) ;; Return to group mode buffer. @@ -7194,9 +7177,6 @@ (if (not gnus-kill-summary-on-exit) (gnus-deaden-summary) (gnus-close-group group) - (gnus-summary-clear-local-variables) - (let ((gnus-summary-local-variables gnus-newsgroup-variables)) - (gnus-summary-clear-local-variables)) (gnus-kill-buffer gnus-summary-buffer)) (unless gnus-single-article-buffer (setq gnus-article-current nil)) @@ -7844,7 +7824,8 @@ (defun gnus-summary-scroll-up (lines) "Scroll up (or down) one line current article. -Argument LINES specifies lines to be scrolled up (or down if negative)." +Argument LINES specifies lines to be scrolled up (or down if negative). +If no article is selected, then the current article will be selected first." (interactive "p") (gnus-configure-windows 'article) (gnus-summary-show-thread) @@ -7860,7 +7841,8 @@ (defun gnus-summary-scroll-down (lines) "Scroll down (or up) one line current article. -Argument LINES specifies lines to be scrolled down (or up if negative)." +Argument LINES specifies lines to be scrolled down (or up if negative). +If no article is selected, then the current article will be selected first." (interactive "p") (gnus-summary-scroll-up (- lines))) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus-win.el --- a/lisp/gnus/gnus-win.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus-win.el Fri Oct 01 23:08:25 2010 +0000 @@ -107,6 +107,9 @@ (vertical 1.0 (summary 0.25) (faq 1.0 point))) + (only-article + (vertical 1.0 + (article 1.0 point))) (edit-article (vertical 1.0 (article 1.0 point))) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/gnus.el --- a/lisp/gnus/gnus.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/gnus.el Fri Oct 01 23:08:25 2010 +0000 @@ -1491,7 +1491,9 @@ "*The number of articles which indicates a large newsgroup. If the number of articles in a newsgroup is greater than this value, confirmation is required for selecting the newsgroup. -If it is nil, no confirmation is required." +If it is nil, no confirmation is required. + +Also see `gnus-large-ephemeral-newsgroup'." :group 'gnus-group-select :type '(choice (const :tag "No limit" nil) integer)) @@ -3206,7 +3208,6 @@ (defun gnus-continuum-version (&optional version) "Return VERSION as a floating point number." - (interactive) (unless version (setq version gnus-version)) (when (or (string-match "^\\([^ ]+\\)? ?Gnus v?\\([0-9.]+\\)$" version) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/mailcap.el --- a/lisp/gnus/mailcap.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/mailcap.el Fri Oct 01 23:08:25 2010 +0000 @@ -812,7 +812,10 @@ ;;; (defvar mailcap-mime-extensions - '(("" . "text/plain") + '(("" . "text/plain") + (".1" . "text/plain") ;; Manual pages + (".3" . "text/plain") + (".8" . "text/plain") (".abs" . "audio/x-mpeg") (".aif" . "audio/aiff") (".aifc" . "audio/aiff") @@ -828,6 +831,7 @@ (".css" . "text/css") (".dvi" . "application/x-dvi") (".diff" . "text/x-patch") + (".dpatch". "test/x-patch") (".el" . "application/emacs-lisp") (".eps" . "application/postscript") (".etx" . "text/x-setext") @@ -869,6 +873,7 @@ (".pict" . "image/pict") (".png" . "image/png") (".pnm" . "image/x-portable-anymap") + (".pod" . "text/plain") (".ppm" . "image/portable-pixmap") (".ps" . "application/postscript") (".qt" . "video/quicktime") diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/message.el --- a/lisp/gnus/message.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/message.el Fri Oct 01 23:08:25 2010 +0000 @@ -6049,6 +6049,7 @@ When sending via news, also check that the REFERENCES are less than 988 characters long, and if they are not, trim them until they are." + ;; 21 is the number suggested by USEAGE. (let ((maxcount 21) (count 0) (cut 2) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/mm-encode.el --- a/lisp/gnus/mm-encode.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/mm-encode.el Fri Oct 01 23:08:25 2010 +0000 @@ -42,15 +42,8 @@ If the encoding is `qp-or-base64', then either quoted-printable or base64 will be used, depending on what is more efficient. -`qp-or-base64' has another effect. It will fold long lines so that -MIME parts may not be broken by MTA. So do `quoted-printable' and -`base64'. - -Note: It affects body encoding only when a part is a raw forwarded -message (which will be made by `gnus-summary-mail-forward' with the -arg 2 for example) or is neither the text/* type nor the message/* -type. Even though in those cases, you can use the `encoding' MML tag -to specify encoding of non-ASCII MIME parts." +This list is only consulted when encoding MIME parts in the +bodies -- not for the regular non-MIME-ish messages." :type '(repeat (list (regexp :tag "MIME type") (choice :tag "encoding" (const 7bit) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/nndoc.el --- a/lisp/gnus/nndoc.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/nndoc.el Fri Oct 01 23:08:25 2010 +0000 @@ -74,14 +74,14 @@ (mbox (article-begin-function . nndoc-mbox-article-begin) (body-end-function . nndoc-mbox-body-end)) - (mime-parts - (generate-head-function . nndoc-generate-mime-parts-head) - (article-transform-function . nndoc-transform-mime-parts)) (babyl (article-begin . "\^_\^L *\n") (body-end . "\^_") (body-begin-function . nndoc-babyl-body-begin) (head-begin-function . nndoc-babyl-head-begin)) + (mime-parts + (generate-head-function . nndoc-generate-mime-parts-head) + (article-transform-function . nndoc-transform-mime-parts)) (exim-bounce (article-begin . "^------ This is a copy of the message, including all the headers. ------\n\n") (body-end-function . nndoc-exim-bounce-body-end-function)) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/nnimap.el --- a/lisp/gnus/nnimap.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/nnimap.el Fri Oct 01 23:08:25 2010 +0000 @@ -623,10 +623,11 @@ (nnimap-update-infos marks (list info))) (goto-char (point-max)) (let ((uidnext (nth 5 (car marks)))) - (setq high (if uidnext - (1- uidnext) - (nth 3 (car marks))) - low (or (nth 4 (car marks)) uidnext))))) + (setq high (or (if uidnext + (1- uidnext) + (nth 3 (car marks))) + 0) + low (or (nth 4 (car marks)) uidnext 1))))) (erase-buffer) (insert (format @@ -912,6 +913,16 @@ (or highest exists))))))))) t)))) +(deffoo nnimap-request-newgroups (date &optional server) + (nnimap-possibly-change-group nil server) + (with-current-buffer nntp-server-buffer + (erase-buffer) + (dolist (group (with-current-buffer (nnimap-buffer) + (nnimap-get-groups))) + (unless (assoc group nnimap-current-infos) + ;; Insert dummy numbers here -- they don't matter. + (insert (format "%S 0 1 y\n" group)))))) + (deffoo nnimap-retrieve-group-data-early (server infos) (when (nnimap-possibly-change-group nil server) (with-current-buffer (nnimap-buffer) @@ -990,7 +1001,9 @@ (nnimap-update-info info (cdr (assoc group flags)))))) (defun nnimap-update-info (info marks) - (when marks + (when (and marks + ;; Ignore groups with no UIDNEXT values. + (nth 4 marks)) (destructuring-bind (existing flags high low uidnext start-article permanent-flags) marks (let ((group (gnus-info-group info)) diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/nnmail.el --- a/lisp/gnus/nnmail.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/nnmail.el Fri Oct 01 23:08:25 2010 +0000 @@ -104,7 +104,9 @@ The last element should always have \"\" as the regexp. -This variable can also have a function as its value." +This variable can also have a function as its value, and it can +also have a fancy split method as its value. See +`nnmail-split-fancy' for an explanation of that syntax." :group 'nnmail-split :type '(choice (repeat :tag "Alist" (group (string :tag "Name") (choice regexp function))) @@ -1145,21 +1147,33 @@ (run-hooks 'nnmail-split-hook) (when (setq nnmail-split-tracing trace) (setq nnmail-split-trace nil)) - (if (and (symbolp nnmail-split-methods) - (fboundp nnmail-split-methods)) - (let ((split - (condition-case error-info - ;; `nnmail-split-methods' is a function, so we - ;; just call this function here and use the - ;; result. - (or (funcall nnmail-split-methods) - (and (not nnmail-inhibit-default-split-group) - '("bogus"))) - (error - (nnheader-message - 5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info) - (sit-for 1) - '("bogus"))))) + (if (or (and (symbolp nnmail-split-methods) + (fboundp nnmail-split-methods)) + (and (listp nnmail-split-methods) + ;; Not a regular split method, so it has to be a + ;; fancy one. + (not (let ((top-element (car-safe nnmail-split-methods))) + (and (= 2 (length top-element)) + (stringp (nth 0 top-element)) + (stringp (nth 1 top-element))))))) + (let* ((method-function + (if (and (symbolp nnmail-split-methods) + (fboundp nnmail-split-methods)) + nnmail-split-methods + 'nnmail-split-fancy)) + (split + (condition-case error-info + ;; `nnmail-split-methods' is a function, so we + ;; just call this function here and use the + ;; result. + (or (funcall method-function) + (and (not nnmail-inhibit-default-split-group) + '("bogus"))) + (error + (nnheader-message + 5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info) + (sit-for 1) + '("bogus"))))) (setq split (mm-delete-duplicates split)) ;; The article may be "cross-posted" to `junk'. What ;; to do? Just remove the `junk' spec. Don't really diff -r f2f31dc6273a -r 42815c76b976 lisp/gnus/nnmbox.el --- a/lisp/gnus/nnmbox.el Fri Oct 01 22:18:24 2010 +0200 +++ b/lisp/gnus/nnmbox.el Fri Oct 01 23:08:25 2010 +0000 @@ -640,6 +640,7 @@ nnmbox-mbox-file t t)))) (mm-enable-multibyte) (buffer-disable-undo) + (gnus-add-buffer) ;; Go through the group alist and compare against the mbox file. (while alist