diff options
| author | Miles Bader | 2008-03-01 01:28:14 +0000 |
|---|---|---|
| committer | Miles Bader | 2008-03-01 01:28:14 +0000 |
| commit | 14e8de0c3f87a228c05902be66c5bcf953636611 (patch) | |
| tree | f5dedbed1ff15d1badc46a54951fae5e4bdafadc /lisp | |
| parent | 5831b5a64833baa4a1baa7b3c5d17e72b74d8e4c (diff) | |
| download | emacs-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/ChangeLog | 48 | ||||
| -rw-r--r-- | lisp/gnus/gnus-registry.el | 369 | ||||
| -rw-r--r-- | lisp/gnus/mm-uu.el | 12 | ||||
| -rw-r--r-- | lisp/gnus/nnmairix.el | 22 | ||||
| -rw-r--r-- | lisp/gnus/nnweb.el | 2 |
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 @@ | |||
| 1 | 2008-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 | |||
| 6 | 2008-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 | |||
| 1 | 2008-02-29 Glenn Morris <rgm@gnu.org> | 18 | 2008-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 | ||
| 26 | 2008-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 | |||
| 9 | 2008-02-28 Stefan Monnier <monnier@iro.umontreal.ca> | 34 | 2008-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 | ||
| 38 | 2008-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 | |||
| 43 | 2008-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 | |||
| 52 | 2008-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 | |||
| 13 | 2008-02-27 Glenn Morris <rgm@gnu.org> | 58 | 2008-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 | ||
| 101 | for completion. | ||
| 102 | |||
| 103 | Each entry must have a character to be useful for summary mode | ||
| 104 | line display and for keyboard shortcuts. | ||
| 105 | |||
| 106 | Each entry must have an image string to be useful for visual | ||
| 107 | display." | ||
| 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. |
| 94 | The group names are matched, they don't have to be fully | 126 | The group names are matched, they don't have to be fully |
| 95 | qualified. This parameter tells the Registry 'never split a | 127 | qualified. 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. | |||
| 425 | For a message to be split, it looks for the parent message in the | 460 | For a message to be split, it looks for the parent message in the |
| 426 | References or In-Reply-To header and then looks in the registry | 461 | References or In-Reply-To header and then looks in the registry |
| 427 | to see which group that message was put in. This group is | 462 | to see which group that message was put in. This group is |
| 428 | returned, unless it matches one of the entries in | 463 | returned, unless `gnus-registry-follow-group-p' return nil for |
| 429 | gnus-registry-unfollowed-groups or | 464 | that group. |
| 430 | nnmail-split-fancy-with-parent-ignore-groups. | ||
| 431 | 465 | ||
| 432 | See the Info node `(gnus)Fancy Mail Splitting' for more details." | 466 | See 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 | |||
| 556 | MODE can be 'subject' or 'sender' for example. The KEY is the | ||
| 557 | value by which MODE was searched. | ||
| 558 | |||
| 559 | Transforms each group name to the equivalent short name. | ||
| 560 | |||
| 561 | Checks if the current Gnus method (from `gnus-command-method' or | ||
| 562 | from `gnus-newsgroup-name') is the same as the group's method. | ||
| 563 | This is not possible if gnus-registry-use-long-group-names is | ||
| 564 | false. Foreign methods are not supported so they are rejected. | ||
| 565 | |||
| 566 | Reduces the list to a single group, or complains if that's not | ||
| 567 | possible." | ||
| 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. | ||
| 601 | Consults `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 | |||
| 701 | FUNCTION 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. | ||
| 715 | Uses `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" |