aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMiles Bader2008-03-01 01:28:14 +0000
committerMiles Bader2008-03-01 01:28:14 +0000
commit14e8de0c3f87a228c05902be66c5bcf953636611 (patch)
treef5dedbed1ff15d1badc46a54951fae5e4bdafadc /lisp
parent5831b5a64833baa4a1baa7b3c5d17e72b74d8e4c (diff)
downloademacs-14e8de0c3f87a228c05902be66c5bcf953636611.tar.gz
emacs-14e8de0c3f87a228c05902be66c5bcf953636611.zip
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1089
Diffstat (limited to 'lisp')
-rw-r--r--lisp/gnus/ChangeLog48
-rw-r--r--lisp/gnus/gnus-registry.el369
-rw-r--r--lisp/gnus/mm-uu.el12
-rw-r--r--lisp/gnus/nnmairix.el22
-rw-r--r--lisp/gnus/nnweb.el2
5 files changed, 321 insertions, 132 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 1657f08b22c..93bf2c1e1e5 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,20 @@
12008-02-29 Andreas Seltenreich <andreas@gate450.dyndns.org>
2
3 * nnweb.el (nnweb-google-parse-1): Fix date parsing on articles with
4 empty author.
5
62008-02-29 Teodor Zlatanov <tzz@lifelogs.com>
7
8 * gnus-registry.el (gnus-registry-marks): Add variable for
9 customization of marks and their appearance.
10 (gnus-registry-read-mark): Use it.
11 (gnus-registry-do-marks): Add utility function to loop through
12 `gnus-registry-marks'.
13 (gnus-registry-install-shortcuts-and-menus): Add function to install
14 shortcuts and menus.
15 (gnus-registry-initialize): Use it.
16 (gnus-registry-default-mark): Clarify documentation.
17
12008-02-29 Glenn Morris <rgm@gnu.org> 182008-02-29 Glenn Morris <rgm@gnu.org>
2 19
3 * gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-draft.el: 20 * gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-draft.el:
@@ -6,10 +23,38 @@
6 * nnmail.el, pop3.el, smiley.el, smime.el, spam-report.el: 23 * nnmail.el, pop3.el, smiley.el, smime.el, spam-report.el:
7 Change defcustom :version from 23.0 to 23.1. 24 Change defcustom :version from 23.0 to 23.1.
8 25
262008-02-28 Teodor Zlatanov <tzz@lifelogs.com>
27
28 * gnus-registry.el (gnus-registry-follow-group-p)
29 (gnus-registry-post-process-groups): Add functions to aid registry
30 splitting and improve logging. Clarify behavior in function
31 documentation.
32 (gnus-registry-split-fancy-with-parent): Use them.
33
92008-02-28 Stefan Monnier <monnier@iro.umontreal.ca> 342008-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
10 35
11 * gnus-art.el: Use with-current-buffer. 36 * gnus-art.el: Use with-current-buffer.
12 37
382008-02-27 David Engster <dengste@eml.cc>
39
40 * nnmairix.el (nnmairix-request-group-with-article-number-correction):
41 Express real group name in the response.
42
432008-02-27 Katsumi Yamaoka <yamaoka@jpl.org>
44
45 * nnmairix.el (nnmairix-group-regexp, nnmairix-valid-backends)
46 (nnmairix-last-server, nnmairix-current-server): Defvar them.
47 (nnmairix-goto-original-article): Defvar gnus-registry-install and
48 autoload gnus-registry-fetch-group when compiling.
49 (nnmairix-request-group-with-article-number-correction): remove
50 unreferenced argument passed to nnmairix-call-backend.
51
522008-02-27 Reiner Steib <Reiner.Steib@gmx.de>
53
54 * mm-uu.el (mm-uu-type-alist): Fix message-marks non-hide arguments.
55 (mm-uu-extract): Improve face for low color ttys. Reported by Sascha
56 Wilde.
57
132008-02-27 Glenn Morris <rgm@gnu.org> 582008-02-27 Glenn Morris <rgm@gnu.org>
14 59
15 * nnmairix.el: Change defcustom :version from 23.0 to 23.1. 60 * nnmairix.el: Change defcustom :version from 23.0 to 23.1.
@@ -20,7 +65,8 @@
20 (gnus-registry-fetch-group): Autoload. 65 (gnus-registry-fetch-group): Autoload.
21 (nnmairix-replace-group-and-numbers): Use mapc rather than mapcar. 66 (nnmairix-replace-group-and-numbers): Use mapc rather than mapcar.
22 (nnmairix-widget-get-values, nnmairix-widget-make-query-from-widgets) 67 (nnmairix-widget-get-values, nnmairix-widget-make-query-from-widgets)
23 (nnmairix-widget-build-editable-fields): Use car cddr rather than caddr. 68 (nnmairix-widget-build-editable-fields): Use car cddr rather than
69 caddr.
24 (nnmairix-request-group): Bind nnmairix-fast and nnmairix-group around 70 (nnmairix-request-group): Bind nnmairix-fast and nnmairix-group around
25 nnmairix-request-group-with-article-number-correction call. 71 nnmairix-request-group-with-article-number-correction call.
26 (nnmairix-fast, nnmairix-group): New, less general names, for free 72 (nnmairix-fast, nnmairix-group): New, less general names, for free
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 873ebb604f9..2803cd9db6d 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -79,17 +79,49 @@
79 "*The article registry by Message ID.") 79 "*The article registry by Message ID.")
80 80
81(defcustom gnus-registry-marks 81(defcustom gnus-registry-marks
82 '(Important Work Personal To-Do Later) 82 '((Important
83 "List of marks that `gnus-registry-mark-article' will offer for completion." 83 (char . ?i)
84 (image . "summary_important"))
85 (Work
86 (char . ?w)
87 (image . "summary_work"))
88 (Personal
89 (char . ?p)
90 (image . "summary_personal"))
91 (To-Do
92 (char . ?t)
93 (image . "summary_todo"))
94 (Later
95 (char . ?l)
96 (image . "summary_later")))
97
98 "List of registry marks and their options.
99
100`gnus-registry-mark-article' will offer symbols from this list
101for completion.
102
103Each entry must have a character to be useful for summary mode
104line display and for keyboard shortcuts.
105
106Each entry must have an image string to be useful for visual
107display."
84 :group 'gnus-registry 108 :group 'gnus-registry
85 :type '(repeat symbol)) 109 :type '(alist :key-type symbol
110 :value-type (set :tag "Mark details"
111 (cons :tag "Shortcut"
112 (const :tag "Character code" char)
113 character)
114 (cons :tag "Visual"
115 (const :tag "Image" image)
116 string))))
86 117
87(defcustom gnus-registry-default-mark 'To-Do 118(defcustom gnus-registry-default-mark 'To-Do
88 "The default mark." 119 "The default mark. Should be a valid key for `gnus-registry-marks'."
89 :group 'gnus-registry 120 :group 'gnus-registry
90 :type 'symbol) 121 :type 'symbol)
91 122
92(defcustom gnus-registry-unfollowed-groups '("delayed$" "drafts$" "queue$" "INBOX$") 123(defcustom gnus-registry-unfollowed-groups
124 '("delayed$" "drafts$" "queue$" "INBOX$")
93 "List of groups that gnus-registry-split-fancy-with-parent won't return. 125 "List of groups that gnus-registry-split-fancy-with-parent won't return.
94The group names are matched, they don't have to be fully 126The group names are matched, they don't have to be fully
95qualified. This parameter tells the Registry 'never split a 127qualified. This parameter tells the Registry 'never split a
@@ -197,7 +229,8 @@ considered precious) will not be trimmed."
197 (if gnus-save-startup-file-via-temp-buffer 229 (if gnus-save-startup-file-via-temp-buffer
198 (let ((coding-system-for-write gnus-ding-file-coding-system) 230 (let ((coding-system-for-write gnus-ding-file-coding-system)
199 (standard-output (current-buffer))) 231 (standard-output (current-buffer)))
200 (gnus-gnus-to-quick-newsrc-format t "gnus registry startup file" 'gnus-registry-alist) 232 (gnus-gnus-to-quick-newsrc-format
233 t "gnus registry startup file" 'gnus-registry-alist)
201 (gnus-registry-cache-whitespace file) 234 (gnus-registry-cache-whitespace file)
202 (save-buffer)) 235 (save-buffer))
203 (let ((coding-system-for-write gnus-ding-file-coding-system) 236 (let ((coding-system-for-write gnus-ding-file-coding-system)
@@ -221,7 +254,8 @@ considered precious) will not be trimmed."
221 (unwind-protect 254 (unwind-protect
222 (progn 255 (progn
223 (gnus-with-output-to-file working-file 256 (gnus-with-output-to-file working-file
224 (gnus-gnus-to-quick-newsrc-format t "gnus registry startup file" 'gnus-registry-alist)) 257 (gnus-gnus-to-quick-newsrc-format
258 t "gnus registry startup file" 'gnus-registry-alist))
225 259
226 ;; These bindings will mislead the current buffer 260 ;; These bindings will mislead the current buffer
227 ;; into thinking that it is visiting the startup 261 ;; into thinking that it is visiting the startup
@@ -382,7 +416,8 @@ Any entries with extra data (marks, currently) are left alone."
382 (subject (gnus-string-remove-all-properties 416 (subject (gnus-string-remove-all-properties
383 (gnus-registry-simplify-subject 417 (gnus-registry-simplify-subject
384 (mail-header-subject data-header)))) 418 (mail-header-subject data-header))))
385 (sender (gnus-string-remove-all-properties (mail-header-from data-header))) 419 (sender (gnus-string-remove-all-properties
420 (mail-header-from data-header)))
386 (from (gnus-group-guess-full-name-from-command-method from)) 421 (from (gnus-group-guess-full-name-from-command-method from))
387 (to (if to (gnus-group-guess-full-name-from-command-method to) nil)) 422 (to (if to (gnus-group-guess-full-name-from-command-method to) nil))
388 (to-name (if to to "the Bit Bucket")) 423 (to-name (if to to "the Bit Bucket"))
@@ -425,119 +460,152 @@ messages.
425For a message to be split, it looks for the parent message in the 460For a message to be split, it looks for the parent message in the
426References or In-Reply-To header and then looks in the registry 461References or In-Reply-To header and then looks in the registry
427to see which group that message was put in. This group is 462to see which group that message was put in. This group is
428returned, unless it matches one of the entries in 463returned, unless `gnus-registry-follow-group-p' return nil for
429gnus-registry-unfollowed-groups or 464that group.
430nnmail-split-fancy-with-parent-ignore-groups.
431 465
432See the Info node `(gnus)Fancy Mail Splitting' for more details." 466See the Info node `(gnus)Fancy Mail Splitting' for more details."
433 (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string 467 (let* ((refstr (or (message-fetch-field "references") "")) ; guaranteed
434 (reply-to (message-fetch-field "in-reply-to")) ; grab reply-to 468 (reply-to (message-fetch-field "in-reply-to")) ; may be nil
435 ;; now, if reply-to is valid, append it to the References 469 ;; now, if reply-to is valid, append it to the References
436 (refstr (if reply-to 470 (refstr (if reply-to
437 (concat refstr " " reply-to) 471 (concat refstr " " reply-to)
438 refstr)) 472 refstr))
439 (nnmail-split-fancy-with-parent-ignore-groups 473 ;; these may not be used, but the code is cleaner having them up here
440 (if (listp nnmail-split-fancy-with-parent-ignore-groups) 474 (sender (gnus-string-remove-all-properties
441 nnmail-split-fancy-with-parent-ignore-groups 475 (message-fetch-field "from")))
442 (list nnmail-split-fancy-with-parent-ignore-groups))) 476 (subject (gnus-string-remove-all-properties
443 res) 477 (gnus-registry-simplify-subject
444 ;; the references string must be valid and parse to valid references 478 (message-fetch-field "subject"))))
445 (if (and refstr (gnus-extract-references refstr)) 479
446 (dolist (reference (nreverse (gnus-extract-references refstr))) 480 (nnmail-split-fancy-with-parent-ignore-groups
447 (setq res (or (gnus-registry-fetch-group reference) res)) 481 (if (listp nnmail-split-fancy-with-parent-ignore-groups)
448 (when (or (gnus-registry-grep-in-list 482 nnmail-split-fancy-with-parent-ignore-groups
449 res 483 (list nnmail-split-fancy-with-parent-ignore-groups)))
450 gnus-registry-unfollowed-groups) 484 (log-agent "gnus-registry-split-fancy-with-parent")
451 (gnus-registry-grep-in-list 485 found)
452 res 486
453 nnmail-split-fancy-with-parent-ignore-groups)) 487 ;; this is a big if-else statement. it uses
454 (setq res nil))) 488 ;; gnus-registry-post-process-groups to filter the results after
455 489 ;; every step.
456 ;; else: there were no references, now try the extra tracking 490 (cond
457 (let ((sender (gnus-string-remove-all-properties(message-fetch-field "from"))) 491 ;; the references string must be valid and parse to valid references
458 (subject (gnus-string-remove-all-properties 492 ((and refstr (gnus-extract-references refstr))
459 (gnus-registry-simplify-subject 493 (dolist (reference (nreverse (gnus-extract-references refstr)))
460 (message-fetch-field "subject")))) 494 (gnus-message
461 (single-match t)) 495 9
462 (when (and single-match 496 "%s is looking for matches for reference %s from [%s]"
463 (gnus-registry-track-sender-p) 497 log-agent reference refstr)
464 sender) 498 (dolist (group (gnus-registry-fetch-groups reference))
465 (maphash 499 (when (and group (gnus-registry-follow-group-p group))
466 (lambda (key value)
467 (let ((this-sender (cdr
468 (gnus-registry-fetch-extra key 'sender))))
469 (when (and single-match
470 this-sender
471 (equal sender this-sender))
472 ;; too many matches, bail
473 (unless (equal res (gnus-registry-fetch-group key))
474 (setq single-match nil))
475 (setq res (gnus-registry-fetch-group key))
476 (when (and sender res)
477 (gnus-message
478 ;; raise level of messaging if gnus-registry-track-extra
479 (if gnus-registry-track-extra 7 9)
480 "%s (extra tracking) traced sender %s to group %s"
481 "gnus-registry-split-fancy-with-parent"
482 sender
483 res)))))
484 gnus-registry-hashtb))
485 (when (and single-match
486 (gnus-registry-track-subject-p)
487 subject
488 (< gnus-registry-minimum-subject-length (length subject)))
489 (maphash
490 (lambda (key value)
491 (let ((this-subject (cdr
492 (gnus-registry-fetch-extra key 'subject))))
493 (when (and single-match
494 this-subject
495 (equal subject this-subject))
496 ;; too many matches, bail
497 (unless (equal res (gnus-registry-fetch-group key))
498 (setq single-match nil))
499 (setq res (gnus-registry-fetch-group key))
500 (when (and subject res)
501 (gnus-message
502 ;; raise level of messaging if gnus-registry-track-extra
503 (if gnus-registry-track-extra 7 9)
504 "%s (extra tracking) traced subject %s to group %s"
505 "gnus-registry-split-fancy-with-parent"
506 subject
507 res)))))
508 gnus-registry-hashtb))
509 (unless single-match
510 (gnus-message
511 3
512 "gnus-registry-split-fancy-with-parent: too many extra matches for %s"
513 refstr)
514 (setq res nil))))
515 (when (and refstr res)
516 (gnus-message
517 5
518 "gnus-registry-split-fancy-with-parent traced %s to group %s"
519 refstr res))
520
521 (when (and res gnus-registry-use-long-group-names)
522 (let ((m1 (gnus-find-method-for-group res))
523 (m2 (or gnus-command-method
524 (gnus-find-method-for-group gnus-newsgroup-name)))
525 (short-res (gnus-group-short-name res)))
526 (if (gnus-methods-equal-p m1 m2)
527 (progn
528 (gnus-message 500 (gnus-message
529 9 501 7
530 "gnus-registry-split-fancy-with-parent stripped group %s to %s" 502 "%s traced the reference %s from [%s] to group %s"
531 res 503 log-agent reference refstr group)
532 short-res) 504 (push group found))))
533 (setq res short-res)) 505 ;; filter the found groups and return them
534 ;; else... 506 (setq found (gnus-registry-post-process-groups
507 "references" refstr found)))
508
509 ;; else: there were no matches, now try the extra tracking by sender
510 ((and (gnus-registry-track-sender-p)
511 sender)
512 (maphash
513 (lambda (key value)
514 (let ((this-sender (cdr
515 (gnus-registry-fetch-extra key 'sender)))
516 matches)
517 (when (and this-sender
518 (equal sender this-sender))
519 (setq found (append (gnus-registry-fetch-groups key) found))
520 (push key matches)
521 (gnus-message
522 ;; raise level of messaging if gnus-registry-track-extra
523 (if gnus-registry-track-extra 7 9)
524 "%s (extra tracking) traced sender %s to groups %s (keys %s)"
525 log-agent sender found matches))))
526 gnus-registry-hashtb)
527 ;; filter the found groups and return them
528 (setq found (gnus-registry-post-process-groups "sender" sender found)))
529
530 ;; else: there were no matches, now try the extra tracking by subject
531 ((and (gnus-registry-track-subject-p)
532 subject
533 (< gnus-registry-minimum-subject-length (length subject)))
534 (maphash
535 (lambda (key value)
536 (let ((this-subject (cdr
537 (gnus-registry-fetch-extra key 'subject)))
538 matches)
539 (when (and this-subject
540 (equal subject this-subject))
541 (setq found (append (gnus-registry-fetch-groups key) found))
542 (push key matches)
543 (gnus-message
544 ;; raise level of messaging if gnus-registry-track-extra
545 (if gnus-registry-track-extra 7 9)
546 "%s (extra tracking) traced subject %s to groups %s (keys %s)"
547 log-agent subject found matches))))
548 gnus-registry-hashtb)
549 ;; filter the found groups and return them
550 (setq found (gnus-registry-post-process-groups
551 "subject" subject found))))))
552
553(defun gnus-registry-post-process-groups (mode key groups)
554 "Modifies GROUPS found by MODE for KEY to determine which ones to follow.
555
556MODE can be 'subject' or 'sender' for example. The KEY is the
557value by which MODE was searched.
558
559Transforms each group name to the equivalent short name.
560
561Checks if the current Gnus method (from `gnus-command-method' or
562from `gnus-newsgroup-name') is the same as the group's method.
563This is not possible if gnus-registry-use-long-group-names is
564false. Foreign methods are not supported so they are rejected.
565
566Reduces the list to a single group, or complains if that's not
567possible."
568 (let ((log-agent "gnus-registry-post-process-group")
569 out)
570 (if gnus-registry-use-long-group-names
571 (dolist (group groups)
572 (let ((m1 (gnus-find-method-for-group group))
573 (m2 (or gnus-command-method
574 (gnus-find-method-for-group gnus-newsgroup-name)))
575 (short-name (gnus-group-short-name group)))
576 (if (gnus-methods-equal-p m1 m2)
577 (progn
578 ;; this is REALLY just for debugging
579 (gnus-message
580 10
581 "%s stripped group %s to %s"
582 log-agent group short-name)
583 (unless (member short-name out)
584 (push short-name out)))
585 ;; else...
586 (gnus-message
587 7
588 "%s ignored foreign group %s"
589 log-agent group))))
590 (setq out groups))
591 (when (cdr-safe out)
535 (gnus-message 592 (gnus-message
536 7 593 5
537 "gnus-registry-split-fancy-with-parent ignored foreign group %s" 594 "%s: too many extra matches (%s) for %s %s. Returning none."
538 res) 595 log-agent out mode key)
539 (setq res nil)))) 596 (setq out nil))
540 res)) 597 out))
598
599(defun gnus-registry-follow-group-p (group)
600 "Determines if a group name should be followed.
601Consults `gnus-registry-unfollowed-groups' and
602`nnmail-split-fancy-with-parent-ignore-groups'."
603 (not (or (gnus-registry-grep-in-list
604 group
605 gnus-registry-unfollowed-groups)
606 (gnus-registry-grep-in-list
607 group
608 nnmail-split-fancy-with-parent-ignore-groups))))
541 609
542(defun gnus-registry-wash-for-keywords (&optional force) 610(defun gnus-registry-wash-for-keywords (&optional force)
543 (interactive) 611 (interactive)
@@ -627,6 +695,78 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
627 (string-match word x)) 695 (string-match word x))
628 list))))) 696 list)))))
629 697
698(defun gnus-registry-do-marks (type function)
699 "For each known mark, call FUNCTION for each cell of type TYPE.
700
701FUNCTION should take two parameters, a mark symbol and the cell value."
702 (dolist (mark-info gnus-registry-marks)
703 (let ((mark (car-safe mark-info))
704 (data (cdr-safe mark-info)))
705 (dolist (cell data)
706 (let ((cell-type (car-safe cell))
707 (cell-data (cdr-safe cell)))
708 (when (equal type cell-type)
709 (funcall function mark cell-data)))))))
710
711;;; this is ugly code, but I don't know how to do it better
712;;; TODO: clear the gnus-registry-mark-map before running
713(defun gnus-registry-install-shortcuts-and-menus ()
714 "Install the keyboard shortcuts and menus for the registry.
715Uses `gnus-registry-marks' to find what shortcuts to install."
716 (gnus-registry-do-marks
717 'char
718 (lambda (mark data)
719 (let ((function-format
720 (format "gnus-registry-%%s-article-%s-mark" mark)))
721
722;;; The following generates these functions:
723;;; (defun gnus-registry-set-article-Important-mark (&rest articles)
724;;; "Apply the Important mark to process-marked ARTICLES."
725;;; (interactive (gnus-summary-work-articles current-prefix-arg))
726;;; (gnus-registry-set-article-mark-internal 'Important articles nil t))
727;;; (defun gnus-registry-remove-article-Important-mark (&rest articles)
728;;; "Apply the Important mark to process-marked ARTICLES."
729;;; (interactive (gnus-summary-work-articles current-prefix-arg))
730;;; (gnus-registry-set-article-mark-internal 'Important articles t t))
731
732 (dolist (remove '(t nil))
733 (let* ((variant-name (if remove "remove" "set"))
734 (function-name (format function-format variant-name))
735 (shortcut (format "%c" data))
736 (shortcut (if remove (upcase shortcut) shortcut)))
737 (unintern function-name)
738 (eval
739 `(defun
740 ;; function name
741 ,(intern function-name)
742 ;; parameter definition
743 (&rest articles)
744 ;; documentation
745 ,(format
746 "%s the %s mark over process-marked ARTICLES."
747 (upcase-initials variant-name)
748 mark)
749 ;; interactive definition
750 (interactive
751 (gnus-summary-work-articles current-prefix-arg))
752 ;; actual code
753 (gnus-registry-set-article-mark-internal
754 ;; all this just to get the mark, I must be doing it wrong
755 (intern ,(symbol-name mark))
756 articles ,remove t))))))))
757 ;; I don't know how to do this inside the loop above, because
758 ;; gnus-define-keys is a macro
759 (gnus-define-keys (gnus-registry-mark-map "M" gnus-summary-mark-map)
760 "i" gnus-registry-set-article-Important-mark
761 "I" gnus-registry-remove-article-Important-mark
762 "w" gnus-registry-set-article-Work-mark
763 "W" gnus-registry-remove-article-Work-mark
764 "l" gnus-registry-set-article-Later-mark
765 "L" gnus-registry-remove-article-Later-mark
766 "p" gnus-registry-set-article-Personal-mark
767 "P" gnus-registry-remove-article-Personal-mark
768 "t" gnus-registry-set-article-To-Do-mark
769 "T" gnus-registry-remove-article-To-Do-mark))
630 770
631(defun gnus-registry-read-mark () 771(defun gnus-registry-read-mark ()
632 "Read a mark name from the user with completion." 772 "Read a mark name from the user with completion."
@@ -634,7 +774,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
634 (symbol-name gnus-registry-default-mark) 774 (symbol-name gnus-registry-default-mark)
635 "Label" 775 "Label"
636 (mapcar (lambda (x) ; completion list 776 (mapcar (lambda (x) ; completion list
637 (cons (symbol-name x) x)) 777 (cons (symbol-name (car-safe x)) (car-safe x)))
638 gnus-registry-marks)))) 778 gnus-registry-marks))))
639 (when (stringp mark) 779 (when (stringp mark)
640 (intern mark)))) 780 (intern mark))))
@@ -896,6 +1036,7 @@ Returns the first place where the trail finds a group name."
896 (interactive) 1036 (interactive)
897 (setq gnus-registry-install t) 1037 (setq gnus-registry-install t)
898 (gnus-registry-install-hooks) 1038 (gnus-registry-install-hooks)
1039 (gnus-registry-install-shortcuts-and-menus)
899 (gnus-registry-read)) 1040 (gnus-registry-read))
900 1041
901;;;###autoload 1042;;;###autoload
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 898be5a5bac..bf5125e37a2 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -167,7 +167,7 @@ This can be either \"inline\" or \"attachment\".")
167 ;; dependency on `message.el'. 167 ;; dependency on `message.el'.
168 "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$" 168 "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$"
169 "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$" 169 "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$"
170 (lambda () (mm-uu-verbatim-marks-extract 0 -1 1 -1)) 170 (lambda () (mm-uu-verbatim-marks-extract -1 0 1 -1))
171 nil) 171 nil)
172 ;; Omitting [a-z8<] leads to false positives (bogus signature separators 172 ;; Omitting [a-z8<] leads to false positives (bogus signature separators
173 ;; and mailing list banners). 173 ;; and mailing list banners).
@@ -248,11 +248,19 @@ The value should be nil on displays where the face
248 :version "23.1" ;; No Gnus 248 :version "23.1" ;; No Gnus
249 :group 'gnus-article-mime) 249 :group 'gnus-article-mime)
250 250
251(defface mm-uu-extract '(;; Colors from `gnus-cite-3' plus background: 251(defface mm-uu-extract '(;; Inspired by `gnus-cite-3'
252 (((type tty)
253 (class color)
254 (background dark))
255 (:background "dark blue"))
252 (((class color) 256 (((class color)
253 (background dark)) 257 (background dark))
254 (:foreground "light yellow" 258 (:foreground "light yellow"
255 :background "dark green")) 259 :background "dark green"))
260 (((type tty)
261 (class color)
262 (background light))
263 (:foreground "dark blue"))
256 (((class color) 264 (((class color)
257 (background light)) 265 (background light))
258 (:foreground "dark green" 266 (:foreground "dark green"
diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el
index 27f8fa035d7..57b840ff692 100644
--- a/lisp/gnus/nnmairix.el
+++ b/lisp/gnus/nnmairix.el
@@ -434,10 +434,8 @@ Other backends might or might not work.")
434 "request-scan" folder nnmairix-backend-server) 434 "request-scan" folder nnmairix-backend-server)
435 (if fast 435 (if fast
436 t 436 t
437 (let ((nnmairix-fast fast) 437 (nnmairix-request-group-with-article-number-correction
438 (nnmairix-group group)) 438 folder qualgroup)))
439 (nnmairix-request-group-with-article-number-correction
440 folder qualgroup))))
441 ((and (= rval 1) 439 ((and (= rval 1)
442 (save-excursion (set-buffer nnmairix-mairix-output-buffer) 440 (save-excursion (set-buffer nnmairix-mairix-output-buffer)
443 (goto-char (point-min)) 441 (goto-char (point-min))
@@ -849,7 +847,10 @@ with `nnmairix-mairix-update-options'."
849 (set-process-sentinel (apply 'start-process args) 847 (set-process-sentinel (apply 'start-process args)
850 'nnmairix-sentinel-mairix-update-finished)))))) 848 'nnmairix-sentinel-mairix-update-finished))))))
851 849
852(autoload 'gnus-registry-fetch-group "gnus-registry") 850;; Silence byte-compiler.
851(eval-when-compile
852 (defvar gnus-registry-install)
853 (autoload 'gnus-registry-fetch-group "gnus-registry"))
853 854
854(defun nnmairix-goto-original-article (&optional no-registry) 855(defun nnmairix-goto-original-article (&optional no-registry)
855 "Jump to the original group and display article. 856 "Jump to the original group and display article.
@@ -978,17 +979,10 @@ search in raw mode."
978 979
979;;; ==== Helper functions 980;;; ==== Helper functions
980 981
981;; Set locally in nnmairix-request-group, which is the only caller of
982;; this function.
983(defvar nnmairix-fast)
984(defvar nnmairix-group)
985
986(defun nnmairix-request-group-with-article-number-correction (folder qualgroup) 982(defun nnmairix-request-group-with-article-number-correction (folder qualgroup)
987 "Request FOLDER on backend for nnmairix QUALGROUP and article number correction." 983 "Request FOLDER on backend for nnmairix QUALGROUP and article number correction."
988 (save-excursion 984 (save-excursion
989 ;; FIXME nnmairix-request-group only calls this when fast is nil (?). 985 (nnmairix-call-backend "request-group" folder nnmairix-backend-server)
990 (nnmairix-call-backend
991 "request-group" folder nnmairix-backend-server nnmairix-fast)
992 (set-buffer nnmairix-mairix-output-buffer) 986 (set-buffer nnmairix-mairix-output-buffer)
993 (goto-char (point-min)) 987 (goto-char (point-min))
994 (re-search-forward "^Matched.*messages") 988 (re-search-forward "^Matched.*messages")
@@ -1021,7 +1015,7 @@ search in raw mode."
1021 qualgroup 'numcorr (list nil 0 high)))) 1015 qualgroup 'numcorr (list nil 0 high))))
1022 (erase-buffer) 1016 (erase-buffer)
1023 (insert (format "%d %d %d %d %s" status total low high 1017 (insert (format "%d %d %d %d %s" status total low high
1024 nnmairix-group)) 1018 (gnus-group-real-name qualgroup)))
1025 t) 1019 t)
1026 (progn 1020 (progn
1027 (nnheader-report 1021 (nnheader-report
diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el
index f472aeacb14..56a287ef5e7 100644
--- a/lisp/gnus/nnweb.el
+++ b/lisp/gnus/nnweb.el
@@ -367,7 +367,7 @@ Valid types include `google', `dejanews', and `gmane'.")
367 (goto-char (point-max)) 367 (goto-char (point-max))
368 (when 368 (when
369 (re-search-backward 369 (re-search-backward
370 "^\\(?:\\(\\w+\\) \\([0-9]+\\)\\|\\S-+\\)\\(?: \\([0-9]\\{4\\}\\)\\)? by \\(.*\\)" 370 "^\\(?:\\(\\w+\\) \\([0-9]+\\)\\|\\S-+\\)\\(?: \\([0-9]\\{4\\}\\)\\)? by ?\\(.*\\)"
371 nil t) 371 nil t)
372 (setq Date (if (match-string 1) 372 (setq Date (if (match-string 1)
373 (format "%s %s 00:00:00 %s" 373 (format "%s %s 00:00:00 %s"