From a3f57c41e2c6e84264e13c893e7e0f9b85d6ca1f Mon Sep 17 00:00:00 2001 From: Gnus developers Date: Fri, 1 Oct 2010 23:08:25 +0000 Subject: [PATCH] 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. --- doc/misc/gnus.texi | 11 ++++++ lisp/gnus/ChangeLog | 78 ++++++++++++++++++++++++++++++++++++++ lisp/gnus/gnus-art.el | 10 ++--- lisp/gnus/gnus-async.el | 7 ++-- lisp/gnus/gnus-group.el | 12 +++--- lisp/gnus/gnus-msg.el | 3 +- lisp/gnus/gnus-registry.el | 20 +++++----- lisp/gnus/gnus-start.el | 2 +- lisp/gnus/gnus-sum.el | 32 ++++------------ lisp/gnus/gnus-win.el | 3 ++ lisp/gnus/gnus.el | 5 ++- lisp/gnus/mailcap.el | 7 +++- lisp/gnus/message.el | 1 + lisp/gnus/mm-encode.el | 11 +----- lisp/gnus/nndoc.el | 6 +-- lisp/gnus/nnimap.el | 23 ++++++++--- lisp/gnus/nnmail.el | 46 ++++++++++++++-------- lisp/gnus/nnmbox.el | 1 + 18 files changed, 192 insertions(+), 86 deletions(-) diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 61a2171baa..3365e05943 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -9477,6 +9477,14 @@ signature should be removed, or other symbol, meaning that the 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 @@ arguments in a buffer narrowed to the headers of an incoming mail 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 --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 3cc5be14af..75651936bb 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -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 --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 91ff355b6d..8a0193b26d 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -3958,7 +3958,7 @@ Directory to save to is default to `gnus-article-save-directory'." "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 @@ Directory to save to is default to `gnus-article-save-directory'." "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 @@ Directory to save to is default to `gnus-article-save-directory'." "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 @@ The directory to save in defaults to `gnus-article-save-directory'." "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 @@ and the raw article including all headers will be piped." (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 --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el index a2ab54bea8..9bb28f3a05 100644 --- a/lisp/gnus/gnus-async.el +++ b/lisp/gnus/gnus-async.el @@ -316,7 +316,8 @@ that was fetched." (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 @@ that was fetched." "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 --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index eb594f3e71..2ea5cce784 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -2170,21 +2170,21 @@ be permanent." 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 --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index a3794f28a9..891718e65b 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -1265,7 +1265,8 @@ For the `inline' alternatives, also see the variable (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 --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 4e6dca536a..cbea1e17ed 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el @@ -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 @@ Returns the first place where the trail finds a group name." (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 @@ Returns the first place where the trail finds a group name." (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 --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index 68f26ea143..e5a3ec7737 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -1465,7 +1465,7 @@ newsgroup." (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 --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index cc1c3823c9..d9a7621baa 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -3109,16 +3109,6 @@ The following commands are available: ;; 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 @@ displayed, no centering will be performed." ;; 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 @@ If FORCE (the prefix), also save the .newsrc file(s)." (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 FORCE (the prefix), also save the .newsrc file(s)." (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 @@ If at the beginning of the article, go to the next article." (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 @@ Argument LINES specifies lines to be scrolled up (or down if negative)." (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 --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el index 4956be9fd8..df883769b7 100644 --- a/lisp/gnus/gnus-win.el +++ b/lisp/gnus/gnus-win.el @@ -107,6 +107,9 @@ used to display Gnus windows." (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 --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 9f2ea1e347..4a5f0f79d6 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -1491,7 +1491,9 @@ newsgroups." "*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 @@ If ARG, insert string at point." (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 --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el index 524928586f..36a710d58c 100644 --- a/lisp/gnus/mailcap.el +++ b/lisp/gnus/mailcap.el @@ -812,7 +812,10 @@ If NO-DECODE is non-nil, don't decode STRING." ;;; (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 @@ If NO-DECODE is non-nil, don't decode STRING." (".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 @@ If NO-DECODE is non-nil, don't decode STRING." (".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 --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 59d3485f7d..d5a620b3b7 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -6049,6 +6049,7 @@ If the current line has `message-yank-prefix', insert it on the new line." 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 --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el index c6ca4c40d0..296a24351b 100644 --- a/lisp/gnus/mm-encode.el +++ b/lisp/gnus/mm-encode.el @@ -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 --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el index 588eeb1168..46d775a345 100644 --- a/lisp/gnus/nndoc.el +++ b/lisp/gnus/nndoc.el @@ -74,14 +74,14 @@ from the document.") (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 --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 70aa573525..0aaa797b83 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -623,10 +623,11 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") (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 --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el index 23cb604d55..463f87e44f 100644 --- a/lisp/gnus/nnmail.el +++ b/lisp/gnus/nnmail.el @@ -104,7 +104,9 @@ mail belongs in that group. 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 @@ FUNC will be called with the group name to determine the article number." (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 --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el index bc5c01e51a..003c424f58 100644 --- a/lisp/gnus/nnmbox.el +++ b/lisp/gnus/nnmbox.el @@ -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 -- 2.20.1