diff options
| author | Miles Bader | 2008-01-20 05:17:57 +0000 |
|---|---|---|
| committer | Miles Bader | 2008-01-20 05:17:57 +0000 |
| commit | 0b6799c345f8b7ffd5295fce000c615928ab7cde (patch) | |
| tree | b0ef8ac2ee8e60f49db47630d0256c5faec6c71f | |
| parent | f2c6de6aed9864b659d9abb60b109bd21d65474f (diff) | |
| download | emacs-0b6799c345f8b7ffd5295fce000c615928ab7cde.tar.gz emacs-0b6799c345f8b7ffd5295fce000c615928ab7cde.zip | |
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1001
| -rw-r--r-- | doc/misc/ChangeLog | 8 | ||||
| -rw-r--r-- | doc/misc/gnus-news.texi | 13 | ||||
| -rw-r--r-- | etc/GNUS-NEWS | 15 | ||||
| -rw-r--r-- | lisp/ChangeLog | 56 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 71 | ||||
| -rw-r--r-- | lisp/gnus/gnus-art.el | 69 | ||||
| -rw-r--r-- | lisp/gnus/gnus-registry.el | 231 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 4 | ||||
| -rw-r--r-- | lisp/net/imap.el | 20 |
9 files changed, 334 insertions, 153 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 0c425b04c09..a69f32a976e 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog | |||
| @@ -1,3 +1,11 @@ | |||
| 1 | 2008-01-18 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * gnus-news.texi: Mention gnus-article-describe-bindings. | ||
| 4 | |||
| 5 | 2008-01-18 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 6 | |||
| 7 | * gnus-news.texi: Mention gnus-article-wide-reply-with-original. | ||
| 8 | |||
| 1 | 2008-01-18 Carsten Dominik <dominik@science.uva.nl> | 9 | 2008-01-18 Carsten Dominik <dominik@science.uva.nl> |
| 2 | 10 | ||
| 3 | * org.texi (Property inheritance): New section. | 11 | * org.texi (Property inheritance): New section. |
diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi index e9549779232..8fcab4fc717 100644 --- a/doc/misc/gnus-news.texi +++ b/doc/misc/gnus-news.texi | |||
| @@ -140,6 +140,19 @@ inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text, | |||
| 140 | emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) | 140 | emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) |
| 141 | @c This entry is also present in the node "Oort Gnus". | 141 | @c This entry is also present in the node "Oort Gnus". |
| 142 | 142 | ||
| 143 | @item Now the new command @kbd{S W} | ||
| 144 | (@code{gnus-article-wide-reply-with-original}) for a wide reply in the | ||
| 145 | article buffer yanks a text that is in the active region, if it is set, | ||
| 146 | as well as the @kbd{R} (@code{gnus-article-reply-with-original}) command. | ||
| 147 | Note that the @kbd{R} command in the article buffer no longer accepts a | ||
| 148 | prefix argument, which was used to make it do a wide reply. | ||
| 149 | @xref{Article Keymap}. | ||
| 150 | |||
| 151 | @item The new command @kbd{C-h b} | ||
| 152 | (@code{gnus-article-describe-bindings}) used in the article buffer now | ||
| 153 | shows not only the article commands but also the real summary commands | ||
| 154 | that are accessible from the article buffer. | ||
| 155 | |||
| 143 | @end itemize | 156 | @end itemize |
| 144 | 157 | ||
| 145 | @item Changes in Message mode | 158 | @item Changes in Message mode |
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS index ee36984393d..5e41dd0bc4f 100644 --- a/etc/GNUS-NEWS +++ b/etc/GNUS-NEWS | |||
| @@ -58,7 +58,7 @@ Articles::. | |||
| 58 | 58 | ||
| 59 | ** International host names (IDNA) can now be decoded inside article bodies | 59 | ** International host names (IDNA) can now be decoded inside article bodies |
| 60 | using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn | 60 | using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn |
| 61 | (<http://www.gnu.org/software/libidn/>) has been installed. | 61 | (`http://www.gnu.org/software/libidn/') has been installed. |
| 62 | 62 | ||
| 63 | ** The non-ASCII group names handling has been much improved. The back | 63 | ** The non-ASCII group names handling has been much improved. The back |
| 64 | ends that fully support non-ASCII group names are now `nntp', `nnml', | 64 | ends that fully support non-ASCII group names are now `nntp', `nnml', |
| @@ -106,13 +106,24 @@ From Newsgroups::. | |||
| 106 | 106 | ||
| 107 | ** You can replace MIME parts with external bodies. See | 107 | ** You can replace MIME parts with external bodies. See |
| 108 | `gnus-mime-replace-part' and `gnus-article-replace-part'. *Note MIME | 108 | `gnus-mime-replace-part' and `gnus-article-replace-part'. *Note MIME |
| 109 | Commands::, *Note Using MIME::. | 109 | Commands::, *note Using MIME::. |
| 110 | 110 | ||
| 111 | ** The option `mm-fill-flowed' can be used to disable treatment of | 111 | ** The option `mm-fill-flowed' can be used to disable treatment of |
| 112 | format=flowed messages. Also, flowed text is disabled when sending | 112 | format=flowed messages. Also, flowed text is disabled when sending |
| 113 | inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text. | 113 | inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text. |
| 114 | (New in Gnus 5.10.7) | 114 | (New in Gnus 5.10.7) |
| 115 | 115 | ||
| 116 | ** Now the new command `S W' (`gnus-article-wide-reply-with-original') for | ||
| 117 | a wide reply in the article buffer yanks a text that is in the active | ||
| 118 | region, if it is set, as well as the `R' | ||
| 119 | (`gnus-article-reply-with-original') command. Note that the `R' command | ||
| 120 | in the article buffer no longer accepts a prefix argument, which was | ||
| 121 | used to make it do a wide reply. *Note Article Keymap::. | ||
| 122 | |||
| 123 | ** The new command `C-h b' (`gnus-article-describe-bindings') used in the | ||
| 124 | article buffer now shows not only the article commands but also the real | ||
| 125 | summary commands that are accessible from the article buffer. | ||
| 126 | |||
| 116 | 127 | ||
| 117 | 128 | ||
| 118 | * Changes in Message mode | 129 | * Changes in Message mode |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e24f1039787..9d845f233e3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,14 @@ | |||
| 1 | 2008-01-19 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 2 | |||
| 3 | * net/imap.el (imap-ping-server): New variable. | ||
| 4 | (imap-opened): On add extra ping if imap-ping-server is non-nil. | ||
| 5 | (imap-ping-server): Minor doc string fixes. | ||
| 6 | |||
| 7 | 2008-01-19 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) | ||
| 8 | |||
| 9 | * net/imap.el (imap-ping-server): New function. | ||
| 10 | (imap-opened): Call imap-ping-server. | ||
| 11 | |||
| 1 | 2008-01-20 Glenn Morris <rgm@gnu.org> | 12 | 2008-01-20 Glenn Morris <rgm@gnu.org> |
| 2 | 13 | ||
| 3 | * progmodes/python.el: Quote all calls to "auxiliary skeleton"s to | 14 | * progmodes/python.el: Quote all calls to "auxiliary skeleton"s to |
| @@ -108,9 +119,11 @@ | |||
| 108 | (org-flag-drawer): Use the original value of `outline-regexp'. | 119 | (org-flag-drawer): Use the original value of `outline-regexp'. |
| 109 | (org-remember-handler): Add invisible-ok flag to call to | 120 | (org-remember-handler): Add invisible-ok flag to call to |
| 110 | `org-end-of-subtree'. | 121 | `org-end-of-subtree'. |
| 111 | (org-agenda-highlight-todo): Respect `org-agenda-todo-keyword-format'. | 122 | (org-agenda-highlight-todo): Respect |
| 123 | `org-agenda-todo-keyword-format'. | ||
| 112 | (org-agenda-todo-keyword-format): New option. | 124 | (org-agenda-todo-keyword-format): New option. |
| 113 | (org-infile-export-plist): No restriction while searching for options. | 125 | (org-infile-export-plist): No restriction while searching for |
| 126 | options. | ||
| 114 | (org-remember-handler): Remove comments at the end of the buffer. | 127 | (org-remember-handler): Remove comments at the end of the buffer. |
| 115 | (org-remember-use-refile-when-interactive): New option. | 128 | (org-remember-use-refile-when-interactive): New option. |
| 116 | (org-table-sort-lines): Make sure sorting works on link | 129 | (org-table-sort-lines): Make sure sorting works on link |
| @@ -121,7 +134,8 @@ | |||
| 121 | `full-file-path'. | 134 | `full-file-path'. |
| 122 | (org-get-refile-targets): Respect new values for | 135 | (org-get-refile-targets): Respect new values for |
| 123 | `org-refile-use-outline-path'. | 136 | `org-refile-use-outline-path'. |
| 124 | (org-agenda-get-restriction-and-command): DEL goes back to initial list. | 137 | (org-agenda-get-restriction-and-command): DEL goes back to initial |
| 138 | list. | ||
| 125 | (org-export-as-xoxo): Restore point when done. | 139 | (org-export-as-xoxo): Restore point when done. |
| 126 | (org-open-file): Allow multiple %s in command. | 140 | (org-open-file): Allow multiple %s in command. |
| 127 | (org-clock-in-switch-to-state): New option. | 141 | (org-clock-in-switch-to-state): New option. |
| @@ -129,7 +143,8 @@ | |||
| 129 | (org-last-remember-storage-locations): New variable. | 143 | (org-last-remember-storage-locations): New variable. |
| 130 | (org-get-refile-targets): Interpret the new maxlevel setting. | 144 | (org-get-refile-targets): Interpret the new maxlevel setting. |
| 131 | (org-refile-targets): New option `:maxlevel'. | 145 | (org-refile-targets): New option `:maxlevel'. |
| 132 | (org-copy-subtree): Include empty lines before but not after subtree. | 146 | (org-copy-subtree): Include empty lines before but not after |
| 147 | subtree. | ||
| 133 | (org-back-over-empty-lines, org-skip-whitespace): New functions. | 148 | (org-back-over-empty-lines, org-skip-whitespace): New functions. |
| 134 | (org-move-item-down, org-move-item-up): Include empty lines before | 149 | (org-move-item-down, org-move-item-up): Include empty lines before |
| 135 | but not after item. | 150 | but not after item. |
| @@ -142,7 +157,8 @@ | |||
| 142 | (org-imenu-markers): New variable. | 157 | (org-imenu-markers): New variable. |
| 143 | (org-imenu-new-marker, org-imenu-get-tree) | 158 | (org-imenu-new-marker, org-imenu-get-tree) |
| 144 | (org-speedbar-set-agenda-restriction): New functions. | 159 | (org-speedbar-set-agenda-restriction): New functions. |
| 145 | (org-agenda-set-restriction-lock, org-agenda-remove-restriction-lock) | 160 | (org-agenda-set-restriction-lock) |
| 161 | (org-agenda-remove-restriction-lock) | ||
| 146 | (org-agenda-maybe-redo): New functions. | 162 | (org-agenda-maybe-redo): New functions. |
| 147 | (org-agenda-restriction-lock): New face. | 163 | (org-agenda-restriction-lock): New face. |
| 148 | (org-agenda-restriction-lock-overlay) | 164 | (org-agenda-restriction-lock-overlay) |
| @@ -164,8 +180,8 @@ | |||
| 164 | (org-link-escape-chars): Use characters instead of strings. | 180 | (org-link-escape-chars): Use characters instead of strings. |
| 165 | (org-link-escape-chars-browser, org-link-escape) | 181 | (org-link-escape-chars-browser, org-link-escape) |
| 166 | (org-link-unescape): Use characters instead of strings. | 182 | (org-link-unescape): Use characters instead of strings. |
| 167 | (org-export-html-convert-sub-super, org-html-do-expand): | 183 | (org-export-html-convert-sub-super, org-html-do-expand): Check for |
| 168 | Check for protected text. | 184 | protected text. |
| 169 | (org-emphasis-alist): Additional `verbatim' flag. | 185 | (org-emphasis-alist): Additional `verbatim' flag. |
| 170 | (org-set-emph-re): Handle the verbatim flag and compute | 186 | (org-set-emph-re): Handle the verbatim flag and compute |
| 171 | `org-verbatim-re'. | 187 | `org-verbatim-re'. |
| @@ -174,13 +190,15 @@ | |||
| 174 | (org-hide-emphasis-markers): New option. | 190 | (org-hide-emphasis-markers): New option. |
| 175 | (org-additional-option-like-keywords): Add new keywords. | 191 | (org-additional-option-like-keywords): Add new keywords. |
| 176 | (org-get-entry): Rename from `org-get-cleaned-entry'. | 192 | (org-get-entry): Rename from `org-get-cleaned-entry'. |
| 177 | (org-icalendar-cleanup-string): New function for quoting icalendar text. | 193 | (org-icalendar-cleanup-string): New function for quoting icalendar |
| 194 | text. | ||
| 178 | (org-agenda-skip-scheduled-if-done): New option. | 195 | (org-agenda-skip-scheduled-if-done): New option. |
| 179 | (org-agenda-get-scheduled, org-agenda-get-blocks): | 196 | (org-agenda-get-scheduled, org-agenda-get-blocks): Use |
| 180 | Use `org-agenda-skip-scheduled-if-done'. | 197 | `org-agenda-skip-scheduled-if-done'. |
| 181 | (org-prepare-agenda-buffers): Allow buffers as arguments. | 198 | (org-prepare-agenda-buffers): Allow buffers as arguments. |
| 182 | (org-entry-properties): Add CATEGORY as a special property. | 199 | (org-entry-properties): Add CATEGORY as a special property. |
| 183 | (org-use-property-inheritance): Allow a list of properties as a value. | 200 | (org-use-property-inheritance): Allow a list of properties as a |
| 201 | value. | ||
| 184 | (org-eval-in-calendar): No longer update the prompt. | 202 | (org-eval-in-calendar): No longer update the prompt. |
| 185 | (org-read-date-popup-calendar): Rename from | 203 | (org-read-date-popup-calendar): Rename from |
| 186 | `org-popup-calendar-for-date-prompt'. | 204 | `org-popup-calendar-for-date-prompt'. |
| @@ -191,8 +209,8 @@ | |||
| 191 | not yet defined. | 209 | not yet defined. |
| 192 | (org-remember-insinuate): New function. | 210 | (org-remember-insinuate): New function. |
| 193 | (org-read-date-prefer-future): New option. | 211 | (org-read-date-prefer-future): New option. |
| 194 | (org-read-date): Respect the setting of `org-read-date-prefer-future'. | 212 | (org-read-date): Respect the setting of |
| 195 | Use `org-read-date-analyze'. | 213 | `org-read-date-prefer-future'. Use `org-read-date-analyze'. |
| 196 | (org-set-font-lock-defaults): Use `org-archive-tag' instead of a | 214 | (org-set-font-lock-defaults): Use `org-archive-tag' instead of a |
| 197 | hardcoded string. | 215 | hardcoded string. |
| 198 | (org-remember-apply-template): Use `remember-finalize' instead of | 216 | (org-remember-apply-template): Use `remember-finalize' instead of |
| @@ -1482,6 +1500,12 @@ | |||
| 1482 | * newcomment.el (comment-region-default): Don't triple the | 1500 | * newcomment.el (comment-region-default): Don't triple the |
| 1483 | comment starter if the first region line isn't indented enough. | 1501 | comment starter if the first region line isn't indented enough. |
| 1484 | 1502 | ||
| 1503 | 2007-12-21 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 1504 | |||
| 1505 | * net/imap.el (imap-authenticate): Use current-buffer instead of | ||
| 1506 | buffer, for the cases where imap-authenticate is called with a nil | ||
| 1507 | buffer parameter. | ||
| 1508 | |||
| 1485 | 2007-12-21 Martin Rudalics <rudalics@gmx.at> | 1509 | 2007-12-21 Martin Rudalics <rudalics@gmx.at> |
| 1486 | 1510 | ||
| 1487 | * autoinsert.el (auto-insert-alist): Remove nonsensical precision | 1511 | * autoinsert.el (auto-insert-alist): Remove nonsensical precision |
| @@ -2172,6 +2196,12 @@ | |||
| 2172 | * textmodes/reftex-toc.el (reftex-make-separate-toc-frame): | 2196 | * textmodes/reftex-toc.el (reftex-make-separate-toc-frame): |
| 2173 | Try x-focus-frame before focus-frame. Only try focus-frame on XEmacs. | 2197 | Try x-focus-frame before focus-frame. Only try focus-frame on XEmacs. |
| 2174 | 2198 | ||
| 2199 | 2007-12-03 Nathan J. Williams <nathanw@MIT.EDU> (tiny change) | ||
| 2200 | |||
| 2201 | * net/imap.el (imap-mailbox-status-asynch): Upcase STATUS items. | ||
| 2202 | (imap-parse-status): Upcase status-att for servers that sends them | ||
| 2203 | lower-case (e.g., MS Exchange 2007). | ||
| 2204 | |||
| 2175 | 2007-12-03 Karl Fogel <kfogel@red-bean.com> | 2205 | 2007-12-03 Karl Fogel <kfogel@red-bean.com> |
| 2176 | 2206 | ||
| 2177 | * saveplace.el (save-place-quiet): Remove, reverting 2007-12-02T19:54:46Z!kfogel@red-bean.com. | 2207 | * saveplace.el (save-place-quiet): Remove, reverting 2007-12-02T19:54:46Z!kfogel@red-bean.com. |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index e3d4fcb0abc..569789888dd 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,54 @@ | |||
| 1 | 2008-01-18 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 2 | |||
| 3 | * gnus-art.el (gnus-article-describe-bindings): Make it possible to use | ||
| 4 | xrefs, i.e. [back] and [forward] buttons, in *Help* buffer. | ||
| 5 | |||
| 6 | 2008-01-18 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 7 | |||
| 8 | * gnus-registry.el (gnus-registry-trim): Use append, not concat. | ||
| 9 | |||
| 10 | 2008-01-17 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 11 | |||
| 12 | * gnus-art.el (gnus-article-read-summary-keys): Work for some `A' | ||
| 13 | prefix keys. | ||
| 14 | (gnus-article-read-summary-send-keys): Use gnus-character-to-event. | ||
| 15 | (gnus-article-describe-bindings): Simplify; move XEmacs stuff to | ||
| 16 | gnus-xmas.el. | ||
| 17 | |||
| 18 | 2008-01-16 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 19 | |||
| 20 | * gnus-registry.el (gnus-registry-marks, gnus-registry-default-mark): | ||
| 21 | Add new variables for article mark management. | ||
| 22 | (gnus-registry-extra-entries-precious, gnus-registry-trim): Define a | ||
| 23 | list of extra data entries which, when present, will indicate that the | ||
| 24 | article ID should not be trimmed from the registry. | ||
| 25 | (gnus-registry-mark-article, gnus-registry-article-marks): Remove these | ||
| 26 | functions. | ||
| 27 | (gnus-registry-read-mark): New function to read a mark name from the | ||
| 28 | user. | ||
| 29 | (gnus-registry-set-article-mark, gnus-registry-remove-article-mark) | ||
| 30 | (gnus-registry-set-article-mark-internal): New functions to add and | ||
| 31 | remove marks. | ||
| 32 | (gnus-registry-get-article-marks): New function to show the marks for | ||
| 33 | an article, or retrieve them for further use. | ||
| 34 | |||
| 35 | 2008-01-16 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 36 | |||
| 37 | * gnus-art.el (gnus-article-describe-bindings): Show all `S' prefix | ||
| 38 | keys when no argument is given. | ||
| 39 | |||
| 40 | 2008-01-12 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 41 | |||
| 42 | * gnus-sum.el (gnus-article-sort-by-random) | ||
| 43 | (gnus-thread-sort-by-random): Fix doc strings. Reported by | ||
| 44 | jidanni@jidanni.org. | ||
| 45 | |||
| 46 | 2008-01-11 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 47 | |||
| 48 | * gnus-art.el (gnus-article-describe-bindings): New function. | ||
| 49 | (gnus-article-read-summary-keys): Use it. | ||
| 50 | (gnus-article-mode-map): Bind `C-h b' to it. | ||
| 51 | |||
| 1 | 2008-01-10 Katsumi Yamaoka <yamaoka@jpl.org> | 52 | 2008-01-10 Katsumi Yamaoka <yamaoka@jpl.org> |
| 2 | 53 | ||
| 3 | * gnus-art.el (gnus-article-read-summary-keys): Work for `C-h' on | 54 | * gnus-art.el (gnus-article-read-summary-keys): Work for `C-h' on |
| @@ -5,8 +56,6 @@ | |||
| 5 | (gnus-article-describe-key, gnus-article-describe-key-briefly): Protect | 56 | (gnus-article-describe-key, gnus-article-describe-key-briefly): Protect |
| 6 | against non-character events. | 57 | against non-character events. |
| 7 | 58 | ||
| 8 | * lpath.el: Fbind map-keymap for Emacs 21. | ||
| 9 | |||
| 10 | 2008-01-09 Reiner Steib <Reiner.Steib@gmx.de> | 59 | 2008-01-09 Reiner Steib <Reiner.Steib@gmx.de> |
| 11 | 60 | ||
| 12 | * gnus-group.el (gnus-group-read-ephemeral-gmane-group-url): New | 61 | * gnus-group.el (gnus-group-read-ephemeral-gmane-group-url): New |
| @@ -31,9 +80,6 @@ | |||
| 31 | (gnus-article-reply-with-original): Ignore prefix argument. | 80 | (gnus-article-reply-with-original): Ignore prefix argument. |
| 32 | (gnus-article-wide-reply-with-original): New function. | 81 | (gnus-article-wide-reply-with-original): New function. |
| 33 | 82 | ||
| 34 | * lpath.el: Fbind character-to-event and set-keymap-default-binding for | ||
| 35 | Emacs 21. | ||
| 36 | |||
| 37 | 2008-01-08 Katsumi Yamaoka <yamaoka@jpl.org> | 83 | 2008-01-08 Katsumi Yamaoka <yamaoka@jpl.org> |
| 38 | 84 | ||
| 39 | * gnus-bookmark.el (gnus-bookmark-mouse-available-p): Don't test for | 85 | * gnus-bookmark.el (gnus-bookmark-mouse-available-p): Don't test for |
| @@ -55,12 +101,6 @@ | |||
| 55 | * mml-sec.el, sieve-manage.el, smime.el: Simplify loading of | 101 | * mml-sec.el, sieve-manage.el, smime.el: Simplify loading of |
| 56 | password-cache or password. Suggested by Glenn Morris <rgm@gnu.org>. | 102 | password-cache or password. Suggested by Glenn Morris <rgm@gnu.org>. |
| 57 | 103 | ||
| 58 | 2007-12-21 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 59 | |||
| 60 | * imap.el (imap-authenticate): Use current-buffer instead of buffer, | ||
| 61 | for the cases where imap-authenticate is called with a nil buffer | ||
| 62 | parameter. | ||
| 63 | |||
| 64 | 2007-12-19 Katsumi Yamaoka <yamaoka@jpl.org> | 104 | 2007-12-19 Katsumi Yamaoka <yamaoka@jpl.org> |
| 65 | 105 | ||
| 66 | * gnus-art.el (gnus-article-browse-html-parts): Work for two or more | 106 | * gnus-art.el (gnus-article-browse-html-parts): Work for two or more |
| @@ -364,12 +404,6 @@ | |||
| 364 | 404 | ||
| 365 | * message.el (message-ignored-supersedes-headers): Add "X-ID". | 405 | * message.el (message-ignored-supersedes-headers): Add "X-ID". |
| 366 | 406 | ||
| 367 | 2007-12-03 Nathan J. Williams <nathanw@MIT.EDU> (tiny change) | ||
| 368 | |||
| 369 | * imap.el (imap-mailbox-status-asynch): Upcase STATUS items. | ||
| 370 | (imap-parse-status): Upcase status-att for servers that sends them | ||
| 371 | lower-case (e.g., MS Exchange 2007). | ||
| 372 | |||
| 373 | 2007-12-03 Lars Magne Ingebrigtsen <larsi@gnus.org> | 407 | 2007-12-03 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 374 | 408 | ||
| 375 | * gnus-sum.el (gnus-uu-extract-map): Add a command for the yenc | 409 | * gnus-sum.el (gnus-uu-extract-map): Add a command for the yenc |
| @@ -837,9 +871,6 @@ | |||
| 837 | * webmail.el (webmail-debug): Replace mapcar called for effect with | 871 | * webmail.el (webmail-debug): Replace mapcar called for effect with |
| 838 | dolist. | 872 | dolist. |
| 839 | 873 | ||
| 840 | * gnus-xmas.el (gnus-group-add-icon): Replace mapcar called for effect | ||
| 841 | with mapc. | ||
| 842 | |||
| 843 | 2007-10-24 Katsumi Yamaoka <yamaoka@jpl.org> | 874 | 2007-10-24 Katsumi Yamaoka <yamaoka@jpl.org> |
| 844 | 875 | ||
| 845 | * gnus-agent.el (gnus-agent-read-agentview, gnus-agent-save-alist) | 876 | * gnus-agent.el (gnus-agent-read-agentview, gnus-agent-save-alist) |
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index f34f8f7376a..6e41f413609 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el | |||
| @@ -4215,6 +4215,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is | |||
| 4215 | "F" gnus-article-followup-with-original | 4215 | "F" gnus-article-followup-with-original |
| 4216 | "\C-hk" gnus-article-describe-key | 4216 | "\C-hk" gnus-article-describe-key |
| 4217 | "\C-hc" gnus-article-describe-key-briefly | 4217 | "\C-hc" gnus-article-describe-key-briefly |
| 4218 | "\C-hb" gnus-article-describe-bindings | ||
| 4218 | 4219 | ||
| 4219 | "\C-d" gnus-article-read-summary-keys | 4220 | "\C-d" gnus-article-read-summary-keys |
| 4220 | "\M-*" gnus-article-read-summary-keys | 4221 | "\M-*" gnus-article-read-summary-keys |
| @@ -6241,9 +6242,10 @@ not have a face in `gnus-article-boring-faces'." | |||
| 6241 | "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP" | 6242 | "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP" |
| 6242 | "=" "^" "\M-^" "|")) | 6243 | "=" "^" "\M-^" "|")) |
| 6243 | (nosave-but-article | 6244 | (nosave-but-article |
| 6244 | '("A\r")) | 6245 | '("A " "A<" "A>" "AM" "AP" "AR" "AT" "A\C-?" "A\M-\r" "A\r" "Ab" "Ae" |
| 6246 | "An" "Ap" [?A (meta return)] [?A delete])) | ||
| 6245 | (nosave-in-article | 6247 | (nosave-in-article |
| 6246 | '("\C-d")) | 6248 | '("AS" "\C-d")) |
| 6247 | (up-to-top | 6249 | (up-to-top |
| 6248 | '("n" "Gn" "p" "Gp")) | 6250 | '("n" "Gn" "p" "Gp")) |
| 6249 | keys new-sum-point) | 6251 | keys new-sum-point) |
| @@ -6260,27 +6262,7 @@ not have a face in `gnus-article-boring-faces'." | |||
| 6260 | 6262 | ||
| 6261 | (cond | 6263 | (cond |
| 6262 | ((eq (aref keys (1- (length keys))) ?\C-h) | 6264 | ((eq (aref keys (1- (length keys))) ?\C-h) |
| 6263 | (if (featurep 'xemacs) | 6265 | (gnus-article-describe-bindings (substring keys 0 -1))) |
| 6264 | (let ((keymap (with-current-buffer gnus-article-current-summary | ||
| 6265 | (copy-keymap (current-local-map))))) | ||
| 6266 | (map-keymap | ||
| 6267 | (lambda (key def) | ||
| 6268 | (define-key keymap (vector ?S key) def)) | ||
| 6269 | gnus-article-send-map) | ||
| 6270 | (with-temp-buffer | ||
| 6271 | (setq major-mode 'gnus-article-mode) | ||
| 6272 | (use-local-map keymap) | ||
| 6273 | (describe-bindings (substring keys 0 -1)))) | ||
| 6274 | (let ((keymap (make-sparse-keymap)) | ||
| 6275 | (map (copy-keymap gnus-article-send-map))) | ||
| 6276 | (define-key keymap "S" map) | ||
| 6277 | (define-key map [t] nil) | ||
| 6278 | (set-keymap-parent keymap | ||
| 6279 | (with-current-buffer gnus-article-current-summary | ||
| 6280 | (current-local-map))) | ||
| 6281 | (with-temp-buffer | ||
| 6282 | (use-local-map keymap) | ||
| 6283 | (describe-bindings (substring keys 0 -1)))))) | ||
| 6284 | ((or (member keys nosaves) | 6266 | ((or (member keys nosaves) |
| 6285 | (member keys nosave-but-article) | 6267 | (member keys nosave-but-article) |
| 6286 | (member keys nosave-in-article)) | 6268 | (member keys nosave-in-article)) |
| @@ -6368,9 +6350,7 @@ not have a face in `gnus-article-boring-faces'." | |||
| 6368 | 6350 | ||
| 6369 | (defun gnus-article-read-summary-send-keys () | 6351 | (defun gnus-article-read-summary-send-keys () |
| 6370 | (interactive) | 6352 | (interactive) |
| 6371 | (let ((unread-command-events (list (if (featurep 'xemacs) | 6353 | (let ((unread-command-events (list (gnus-character-to-event ?S)))) |
| 6372 | (character-to-event ?S) | ||
| 6373 | ?S)))) | ||
| 6374 | (gnus-article-read-summary-keys))) | 6354 | (gnus-article-read-summary-keys))) |
| 6375 | 6355 | ||
| 6376 | (defun gnus-article-describe-key (key) | 6356 | (defun gnus-article-describe-key (key) |
| @@ -6418,6 +6398,43 @@ KEY is a string or a vector." | |||
| 6418 | (describe-key-briefly (read-key-sequence nil t) insert))) | 6398 | (describe-key-briefly (read-key-sequence nil t) insert))) |
| 6419 | (describe-key-briefly key insert))) | 6399 | (describe-key-briefly key insert))) |
| 6420 | 6400 | ||
| 6401 | ;;`gnus-agent-mode' in gnus-agent.el will define it. | ||
| 6402 | (defvar gnus-agent-summary-mode) | ||
| 6403 | |||
| 6404 | (defun gnus-article-describe-bindings (&optional prefix) | ||
| 6405 | "Show a list of all defined keys, and their definitions. | ||
| 6406 | The optional argument PREFIX, if non-nil, should be a key sequence; | ||
| 6407 | then we display only bindings that start with that prefix." | ||
| 6408 | (interactive) | ||
| 6409 | (gnus-article-check-buffer) | ||
| 6410 | (let ((keymap (copy-keymap gnus-article-mode-map)) | ||
| 6411 | (map (copy-keymap gnus-article-send-map)) | ||
| 6412 | (sumkeys (where-is-internal 'gnus-article-read-summary-keys)) | ||
| 6413 | agent) | ||
| 6414 | (define-key keymap "S" map) | ||
| 6415 | (define-key map [t] nil) | ||
| 6416 | (with-current-buffer gnus-article-current-summary | ||
| 6417 | (set-keymap-parent map (key-binding "S")) | ||
| 6418 | (let (def gnus-pick-mode) | ||
| 6419 | (dolist (key sumkeys) | ||
| 6420 | (when (setq def (key-binding key)) | ||
| 6421 | (define-key keymap key def)))) | ||
| 6422 | (when (boundp 'gnus-agent-summary-mode) | ||
| 6423 | (setq agent gnus-agent-summary-mode))) | ||
| 6424 | (with-temp-buffer | ||
| 6425 | (use-local-map keymap) | ||
| 6426 | (set (make-local-variable 'gnus-agent-summary-mode) agent) | ||
| 6427 | (describe-bindings prefix)) | ||
| 6428 | (let ((item `((lambda (prefix) | ||
| 6429 | (save-excursion | ||
| 6430 | (set-buffer ,(current-buffer)) | ||
| 6431 | (gnus-article-describe-bindings prefix))) | ||
| 6432 | ,prefix))) | ||
| 6433 | (with-current-buffer (if (fboundp 'help-buffer) | ||
| 6434 | (let (help-xref-following) (help-buffer)) | ||
| 6435 | "*Help*") ;; Emacs 21 | ||
| 6436 | (setq help-xref-stack-item item))))) | ||
| 6437 | |||
| 6421 | (defun gnus-article-reply-with-original (&optional wide) | 6438 | (defun gnus-article-reply-with-original (&optional wide) |
| 6422 | "Start composing a reply mail to the current message. | 6439 | "Start composing a reply mail to the current message. |
| 6423 | The text in the region will be yanked. If the region isn't active, | 6440 | The text in the region will be yanked. If the region isn't active, |
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index b879c90e91f..4c2e77e4d46 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el | |||
| @@ -78,6 +78,17 @@ | |||
| 78 | :test 'equal) | 78 | :test 'equal) |
| 79 | "*The article registry by Message ID.") | 79 | "*The article registry by Message ID.") |
| 80 | 80 | ||
| 81 | (defcustom gnus-registry-marks | ||
| 82 | '(Important Work Personal To-Do Later) | ||
| 83 | "List of marks that `gnus-registry-mark-article' will offer for completion." | ||
| 84 | :group 'gnus-registry | ||
| 85 | :type '(repeat symbol)) | ||
| 86 | |||
| 87 | (defcustom gnus-registry-default-mark 'To-Do | ||
| 88 | "The default mark." | ||
| 89 | :group 'gnus-registry | ||
| 90 | :type 'symbol) | ||
| 91 | |||
| 81 | (defcustom gnus-registry-unfollowed-groups '("delayed$" "drafts$" "queue$" "INBOX$") | 92 | (defcustom gnus-registry-unfollowed-groups '("delayed$" "drafts$" "queue$" "INBOX$") |
| 82 | "List of groups that gnus-registry-split-fancy-with-parent won't return. | 93 | "List of groups that gnus-registry-split-fancy-with-parent won't return. |
| 83 | The group names are matched, they don't have to be fully | 94 | The group names are matched, they don't have to be fully |
| @@ -129,6 +140,16 @@ way." | |||
| 129 | :group 'gnus-registry | 140 | :group 'gnus-registry |
| 130 | :type 'boolean) | 141 | :type 'boolean) |
| 131 | 142 | ||
| 143 | (defcustom gnus-registry-extra-entries-precious '(marks) | ||
| 144 | "What extra entries are precious, meaning they won't get trimmed. | ||
| 145 | When you save the Gnus registry, it's trimmed to be no longer | ||
| 146 | than `gnus-registry-max-entries' (which is nil by default, so no | ||
| 147 | trimming happens). Any entries with extra data in this list (by | ||
| 148 | default, marks are included, so articles with marks are | ||
| 149 | considered precious) will not be trimmed." | ||
| 150 | :group 'gnus-registry | ||
| 151 | :type '(repeat symbol)) | ||
| 152 | |||
| 132 | (defcustom gnus-registry-cache-file | 153 | (defcustom gnus-registry-cache-file |
| 133 | (nnheader-concat | 154 | (nnheader-concat |
| 134 | (or gnus-dribble-directory gnus-home-directory "~/") | 155 | (or gnus-dribble-directory gnus-home-directory "~/") |
| @@ -313,30 +334,50 @@ way." | |||
| 313 | 334 | ||
| 314 | (defun gnus-registry-trim (alist) | 335 | (defun gnus-registry-trim (alist) |
| 315 | "Trim alist to size, using gnus-registry-max-entries. | 336 | "Trim alist to size, using gnus-registry-max-entries. |
| 316 | Also, drop all gnus-registry-ignored-groups matches." | 337 | Also, drop all gnus-registry-ignored-groups matches. |
| 317 | (if (null gnus-registry-max-entries) | 338 | Any entries with extra data (marks, currently) are left alone." |
| 339 | (if (null gnus-registry-max-entries) | ||
| 318 | alist ; just return the alist | 340 | alist ; just return the alist |
| 319 | ;; else, when given max-entries, trim the alist | 341 | ;; else, when given max-entries, trim the alist |
| 320 | (let* ((timehash (make-hash-table | 342 | (let* ((timehash (make-hash-table |
| 321 | :size 4096 | 343 | :size 20000 |
| 344 | :test 'equal)) | ||
| 345 | (precious (make-hash-table | ||
| 346 | :size 20000 | ||
| 322 | :test 'equal)) | 347 | :test 'equal)) |
| 323 | (trim-length (- (length alist) gnus-registry-max-entries)) | 348 | (trim-length (- (length alist) gnus-registry-max-entries)) |
| 324 | (trim-length (if (natnump trim-length) trim-length 0))) | 349 | (trim-length (if (natnump trim-length) trim-length 0)) |
| 350 | precious-list junk-list) | ||
| 325 | (maphash | 351 | (maphash |
| 326 | (lambda (key value) | 352 | (lambda (key value) |
| 327 | (puthash key (gnus-registry-fetch-extra key 'mtime) timehash)) | 353 | (let ((extra (gnus-registry-fetch-extra key))) |
| 354 | (dolist (item gnus-registry-extra-entries-precious) | ||
| 355 | (dolist (e extra) | ||
| 356 | (when (equal (nth 0 e) item) | ||
| 357 | (puthash key t precious) | ||
| 358 | (return)))) | ||
| 359 | (puthash key (gnus-registry-fetch-extra key 'mtime) timehash))) | ||
| 328 | gnus-registry-hashtb) | 360 | gnus-registry-hashtb) |
| 329 | |||
| 330 | ;; we use the return value of this setq, which is the trimmed alist | ||
| 331 | (setq alist | ||
| 332 | (nthcdr | ||
| 333 | trim-length | ||
| 334 | (sort alist | ||
| 335 | (lambda (a b) | ||
| 336 | (time-less-p | ||
| 337 | (or (cdr (gethash (car a) timehash)) '(0 0 0)) | ||
| 338 | (or (cdr (gethash (car b) timehash)) '(0 0 0)))))))))) | ||
| 339 | 361 | ||
| 362 | (dolist (item alist) | ||
| 363 | (let ((key (nth 0 item))) | ||
| 364 | (if (gethash key precious) | ||
| 365 | (push item precious-list) | ||
| 366 | (push item junk-list)))) | ||
| 367 | |||
| 368 | (sort | ||
| 369 | junk-list | ||
| 370 | (lambda (a b) | ||
| 371 | (let ((t1 (or (cdr (gethash (car a) timehash)) | ||
| 372 | '(0 0 0))) | ||
| 373 | (t2 (or (cdr (gethash (car b) timehash)) | ||
| 374 | '(0 0 0)))) | ||
| 375 | (time-less-p t1 t2)))) | ||
| 376 | |||
| 377 | ;; we use the return value of this setq, which is the trimmed alist | ||
| 378 | (setq alist (append precious-list | ||
| 379 | (nthcdr trim-length junk-list)))))) | ||
| 380 | |||
| 340 | (defun gnus-registry-action (action data-header from &optional to method) | 381 | (defun gnus-registry-action (action data-header from &optional to method) |
| 341 | (let* ((id (mail-header-id data-header)) | 382 | (let* ((id (mail-header-id data-header)) |
| 342 | (subject (gnus-string-remove-all-properties | 383 | (subject (gnus-string-remove-all-properties |
| @@ -577,6 +618,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." | |||
| 577 | (assoc article (gnus-data-list nil))))) | 618 | (assoc article (gnus-data-list nil))))) |
| 578 | nil)) | 619 | nil)) |
| 579 | 620 | ||
| 621 | ;;; this should be redone with catch/throw | ||
| 580 | (defun gnus-registry-grep-in-list (word list) | 622 | (defun gnus-registry-grep-in-list (word list) |
| 581 | (when word | 623 | (when word |
| 582 | (memq nil | 624 | (memq nil |
| @@ -586,80 +628,91 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." | |||
| 586 | (string-match word x)) | 628 | (string-match word x)) |
| 587 | list))))) | 629 | list))))) |
| 588 | 630 | ||
| 589 | (defun gnus-registry-mark-article (article &optional mark remove) | 631 | |
| 590 | "Mark ARTICLE with MARK in the Gnus registry or remove MARK. | 632 | (defun gnus-registry-read-mark () |
| 591 | MARK can be any symbol. If ARTICLE is nil, then the | 633 | "Read a mark name from the user with completion." |
| 592 | `gnus-current-article' will be marked. If MARK is nil, | 634 | (let ((mark (gnus-completing-read-with-default |
| 593 | `gnus-registry-flag-default' will be used." | 635 | (symbol-name gnus-registry-default-mark) |
| 594 | (interactive "nArticle number: ") | 636 | "Label" |
| 595 | (let ((article (or article gnus-current-article)) | 637 | (mapcar (lambda (x) ; completion list |
| 596 | (mark (or mark 'gnus-registry-flag-default)) | 638 | (cons (symbol-name x) x)) |
| 597 | article-id) | 639 | gnus-registry-marks)))) |
| 598 | (unless article | 640 | (when (stringp mark) |
| 599 | (error "No article on current line")) | 641 | (intern mark)))) |
| 600 | (setq article-id | 642 | |
| 601 | (gnus-registry-fetch-message-id-fast gnus-current-article)) | 643 | (defun gnus-registry-set-article-mark (&rest articles) |
| 602 | (unless article-id | 644 | "Apply a mark to process-marked ARTICLES." |
| 603 | (error "No article ID could be retrieved")) | 645 | (interactive (gnus-summary-work-articles current-prefix-arg)) |
| 604 | (let* ( | 646 | (gnus-registry-set-article-mark-internal (gnus-registry-read-mark) articles nil t)) |
| 605 | ;; all the marks for this article | 647 | |
| 606 | (marks (gnus-registry-fetch-extra-flags article-id)) | 648 | (defun gnus-registry-remove-article-mark (&rest articles) |
| 607 | ;; the marks without the mark of interest | 649 | "Remove a mark from process-marked ARTICLES." |
| 608 | (cleaned-marks (delq mark marks)) | 650 | (interactive (gnus-summary-work-articles current-prefix-arg)) |
| 609 | ;; the new marks we want to use | 651 | (gnus-registry-set-article-mark-internal (gnus-registry-read-mark) articles t t)) |
| 610 | (new-marks (if remove | 652 | |
| 611 | cleaned-marks | 653 | (defun gnus-registry-set-article-mark-internal (mark articles &optional remove show-message) |
| 612 | (cons mark cleaned-marks)))) | 654 | "Apply a mark to a list of ARTICLES." |
| 613 | (apply 'gnus-registry-store-extra-flags ; set the extra flags | 655 | (let ((article-id-list |
| 614 | article-id ; for the message ID | 656 | (mapcar 'gnus-registry-fetch-message-id-fast articles))) |
| 615 | new-marks) | 657 | (dolist (id article-id-list) |
| 616 | (gnus-registry-fetch-extra-flags article-id)))) | 658 | (let* ( |
| 617 | 659 | ;; all the marks for this article without the mark of | |
| 618 | (defun gnus-registry-article-marks (article) | 660 | ;; interest |
| 619 | "Get the Gnus registry marks for ARTICLE. | 661 | (marks |
| 620 | If ARTICLE is nil, then the `gnus-current-article' will be | 662 | (delq mark (gnus-registry-fetch-extra-marks id))) |
| 621 | used." | 663 | ;; the new marks we want to use |
| 622 | (interactive "nArticle number: ") | 664 | (new-marks (if remove |
| 623 | (let ((article (or article gnus-current-article)) | 665 | marks |
| 624 | article-id) | 666 | (cons mark marks)))) |
| 625 | (unless article | 667 | (when show-message |
| 626 | (error "No article on current line")) | 668 | (gnus-message 1 "%s mark %s with message ID %s, resulting in %S" |
| 627 | (setq article-id | 669 | (if remove "Removing" "Adding") |
| 628 | (gnus-registry-fetch-message-id-fast gnus-current-article)) | 670 | mark id new-marks)) |
| 629 | (unless article-id | 671 | |
| 630 | (error "No article ID could be retrieved")) | 672 | (apply 'gnus-registry-store-extra-marks ; set the extra marks |
| 631 | (gnus-message 1 | 673 | id ; for the message ID |
| 632 | "Message ID %s, Registry flags: %s" | 674 | new-marks))))) |
| 633 | article-id | 675 | |
| 634 | (concat (gnus-registry-fetch-extra-flags article-id))))) | 676 | (defun gnus-registry-get-article-marks (&rest articles) |
| 635 | 677 | "Get the Gnus registry marks for ARTICLES and show them if interactive. | |
| 636 | 678 | Uses process/prefix conventions. For multiple articles, | |
| 637 | ;;; if this extends to more than 'flags, it should be improved to be more generic. | 679 | only the last one's marks are returned." |
| 638 | (defun gnus-registry-fetch-extra-flags (id) | 680 | (interactive (gnus-summary-work-articles 1)) |
| 639 | "Get the flags of a message, based on the message ID. | 681 | (let (marks) |
| 640 | Returns a list of symbol flags or nil." | 682 | (dolist (article articles) |
| 641 | (car-safe (cdr (gnus-registry-fetch-extra id 'flags)))) | 683 | (let ((article-id |
| 642 | 684 | (gnus-registry-fetch-message-id-fast article))) | |
| 643 | (defun gnus-registry-has-extra-flag (id flag) | 685 | (setq marks (gnus-registry-fetch-extra-marks article-id)))) |
| 644 | "Checks if a message has `flag', based on the message ID." | 686 | (when (interactive-p) |
| 645 | (memq flag (gnus-registry-fetch-extra-flags id))) | 687 | (gnus-message 1 "Marks are %S" marks)) |
| 646 | 688 | marks)) | |
| 647 | (defun gnus-registry-store-extra-flags (id &rest flag-list) | 689 | |
| 648 | "Set the flags of a message, based on the message ID. | 690 | ;;; if this extends to more than 'marks, it should be improved to be more generic. |
| 649 | The `flag-list' can be nil, in which case no flags are left." | 691 | (defun gnus-registry-fetch-extra-marks (id) |
| 650 | (gnus-registry-store-extra-entry id 'flags (list flag-list))) | 692 | "Get the marks of a message, based on the message ID. |
| 651 | 693 | Returns a list of symbol marks or nil." | |
| 652 | (defun gnus-registry-delete-extra-flags (id &rest flag-delete-list) | 694 | (car-safe (cdr (gnus-registry-fetch-extra id 'marks)))) |
| 653 | "Delete the message flags in `flag-delete-list', based on the message ID." | 695 | |
| 654 | (let ((flags (gnus-registry-fetch-extra-flags id))) | 696 | (defun gnus-registry-has-extra-mark (id mark) |
| 655 | (when flags | 697 | "Checks if a message has `mark', based on the message ID `id'." |
| 656 | (dolist (flag flag-delete-list) | 698 | (memq mark (gnus-registry-fetch-extra-marks id))) |
| 657 | (setq flags (delq flag flags)))) | 699 | |
| 658 | (gnus-registry-store-extra-flags id (car flags)))) | 700 | (defun gnus-registry-store-extra-marks (id &rest mark-list) |
| 659 | 701 | "Set the marks of a message, based on the message ID. | |
| 660 | (defun gnus-registry-delete-all-extra-flags (id) | 702 | The `mark-list' can be nil, in which case no marks are left." |
| 661 | "Delete all the flags for a message ID." | 703 | (gnus-registry-store-extra-entry id 'marks (list mark-list))) |
| 662 | (gnus-registry-store-extra-flags id nil)) | 704 | |
| 705 | (defun gnus-registry-delete-extra-marks (id &rest mark-delete-list) | ||
| 706 | "Delete the message marks in `mark-delete-list', based on the message ID." | ||
| 707 | (let ((marks (gnus-registry-fetch-extra-marks id))) | ||
| 708 | (when marks | ||
| 709 | (dolist (mark mark-delete-list) | ||
| 710 | (setq marks (delq mark marks)))) | ||
| 711 | (gnus-registry-store-extra-marks id (car marks)))) | ||
| 712 | |||
| 713 | (defun gnus-registry-delete-all-extra-marks (id) | ||
| 714 | "Delete all the marks for a message ID." | ||
| 715 | (gnus-registry-store-extra-marks id nil)) | ||
| 663 | 716 | ||
| 664 | (defun gnus-registry-fetch-extra (id &optional entry) | 717 | (defun gnus-registry-fetch-extra (id &optional entry) |
| 665 | "Get the extra data of a message, based on the message ID. | 718 | "Get the extra data of a message, based on the message ID. |
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index beccca289bc..52eab645d4e 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -4797,11 +4797,11 @@ using some other form will lead to serious barfage." | |||
| 4797 | (gnus-thread-header h1) (gnus-thread-header h2))) | 4797 | (gnus-thread-header h1) (gnus-thread-header h2))) |
| 4798 | 4798 | ||
| 4799 | (defsubst gnus-article-sort-by-random (h1 h2) | 4799 | (defsubst gnus-article-sort-by-random (h1 h2) |
| 4800 | "Sort articles by article number." | 4800 | "Sort articles randomly." |
| 4801 | (zerop (random 2))) | 4801 | (zerop (random 2))) |
| 4802 | 4802 | ||
| 4803 | (defun gnus-thread-sort-by-random (h1 h2) | 4803 | (defun gnus-thread-sort-by-random (h1 h2) |
| 4804 | "Sort threads by root article number." | 4804 | "Sort threads randomly." |
| 4805 | (gnus-article-sort-by-random | 4805 | (gnus-article-sort-by-random |
| 4806 | (gnus-thread-header h1) (gnus-thread-header h2))) | 4806 | (gnus-thread-header h1) (gnus-thread-header h2))) |
| 4807 | 4807 | ||
diff --git a/lisp/net/imap.el b/lisp/net/imap.el index 0ee4de6fee8..27b434541ce 100644 --- a/lisp/net/imap.el +++ b/lisp/net/imap.el | |||
| @@ -1150,6 +1150,13 @@ necessary. If nil, the buffer name is generated." | |||
| 1150 | (when imap-stream | 1150 | (when imap-stream |
| 1151 | buffer)))) | 1151 | buffer)))) |
| 1152 | 1152 | ||
| 1153 | (defcustom imap-ping-server t | ||
| 1154 | "If non-nil, check if IMAP is open. | ||
| 1155 | See the function `imap-ping-server'." | ||
| 1156 | :version "23.0" ;; No Gnus | ||
| 1157 | :group 'imap | ||
| 1158 | :type 'boolean) | ||
| 1159 | |||
| 1153 | (defun imap-opened (&optional buffer) | 1160 | (defun imap-opened (&optional buffer) |
| 1154 | "Return non-nil if connection to imap server in BUFFER is open. | 1161 | "Return non-nil if connection to imap server in BUFFER is open. |
| 1155 | If BUFFER is nil then the current buffer is used." | 1162 | If BUFFER is nil then the current buffer is used." |
| @@ -1157,7 +1164,18 @@ If BUFFER is nil then the current buffer is used." | |||
| 1157 | (buffer-live-p buffer) | 1164 | (buffer-live-p buffer) |
| 1158 | (with-current-buffer buffer | 1165 | (with-current-buffer buffer |
| 1159 | (and imap-process | 1166 | (and imap-process |
| 1160 | (memq (process-status imap-process) '(open run)))))) | 1167 | (memq (process-status imap-process) '(open run)) |
| 1168 | (if imap-ping-server | ||
| 1169 | (imap-ping-server) | ||
| 1170 | t))))) | ||
| 1171 | |||
| 1172 | (defun imap-ping-server (&optional buffer) | ||
| 1173 | "Ping the IMAP server in BUFFER with a \"NOOP\" command. | ||
| 1174 | Return non-nil if the server responds, and nil if it does not | ||
| 1175 | respond. If BUFFER is nil, the current buffer is used." | ||
| 1176 | (condition-case () | ||
| 1177 | (imap-ok-p (imap-send-command-wait "NOOP" buffer)) | ||
| 1178 | (error nil))) | ||
| 1161 | 1179 | ||
| 1162 | (defun imap-authenticate (&optional user passwd buffer) | 1180 | (defun imap-authenticate (&optional user passwd buffer) |
| 1163 | "Authenticate to server in BUFFER, using current buffer if nil. | 1181 | "Authenticate to server in BUFFER, using current buffer if nil. |