aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2008-01-20 05:17:57 +0000
committerMiles Bader2008-01-20 05:17:57 +0000
commit0b6799c345f8b7ffd5295fce000c615928ab7cde (patch)
treeb0ef8ac2ee8e60f49db47630d0256c5faec6c71f
parentf2c6de6aed9864b659d9abb60b109bd21d65474f (diff)
downloademacs-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/ChangeLog8
-rw-r--r--doc/misc/gnus-news.texi13
-rw-r--r--etc/GNUS-NEWS15
-rw-r--r--lisp/ChangeLog56
-rw-r--r--lisp/gnus/ChangeLog71
-rw-r--r--lisp/gnus/gnus-art.el69
-rw-r--r--lisp/gnus/gnus-registry.el231
-rw-r--r--lisp/gnus/gnus-sum.el4
-rw-r--r--lisp/net/imap.el20
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 @@
12008-01-18 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * gnus-news.texi: Mention gnus-article-describe-bindings.
4
52008-01-18 Katsumi Yamaoka <yamaoka@jpl.org>
6
7 * gnus-news.texi: Mention gnus-article-wide-reply-with-original.
8
12008-01-18 Carsten Dominik <dominik@science.uva.nl> 92008-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,
140emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) 140emacs-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
145article buffer yanks a text that is in the active region, if it is set,
146as well as the @kbd{R} (@code{gnus-article-reply-with-original}) command.
147Note that the @kbd{R} command in the article buffer no longer accepts a
148prefix 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
153shows not only the article commands but also the real summary commands
154that 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
60using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn 60using `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
64ends that fully support non-ASCII group names are now `nntp', `nnml', 64ends 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
109Commands::, *Note Using MIME::. 109Commands::, *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
112format=flowed messages. Also, flowed text is disabled when sending 112format=flowed messages. Also, flowed text is disabled when sending
113inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text. 113inline 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
117a wide reply in the article buffer yanks a text that is in the active
118region, if it is set, as well as the `R'
119(`gnus-article-reply-with-original') command. Note that the `R' command
120in the article buffer no longer accepts a prefix argument, which was
121used 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
124article buffer now shows not only the article commands but also the real
125summary 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 @@
12008-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
72008-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
12008-01-20 Glenn Morris <rgm@gnu.org> 122008-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
15032007-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
14852007-12-21 Martin Rudalics <rudalics@gmx.at> 15092007-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
21992007-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
21752007-12-03 Karl Fogel <kfogel@red-bean.com> 22052007-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 @@
12008-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
62008-01-18 Teodor Zlatanov <tzz@lifelogs.com>
7
8 * gnus-registry.el (gnus-registry-trim): Use append, not concat.
9
102008-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
182008-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
352008-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
402008-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
462008-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
12008-01-10 Katsumi Yamaoka <yamaoka@jpl.org> 522008-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
102008-01-09 Reiner Steib <Reiner.Steib@gmx.de> 592008-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
372008-01-08 Katsumi Yamaoka <yamaoka@jpl.org> 832008-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
582007-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
642007-12-19 Katsumi Yamaoka <yamaoka@jpl.org> 1042007-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
3672007-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
3732007-12-03 Lars Magne Ingebrigtsen <larsi@gnus.org> 4072007-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
8432007-10-24 Katsumi Yamaoka <yamaoka@jpl.org> 8742007-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.
6406The optional argument PREFIX, if non-nil, should be a key sequence;
6407then 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.
6423The text in the region will be yanked. If the region isn't active, 6440The 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.
83The group names are matched, they don't have to be fully 94The 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.
145When you save the Gnus registry, it's trimmed to be no longer
146than `gnus-registry-max-entries' (which is nil by default, so no
147trimming happens). Any entries with extra data in this list (by
148default, marks are included, so articles with marks are
149considered 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.
316Also, drop all gnus-registry-ignored-groups matches." 337Also, drop all gnus-registry-ignored-groups matches.
317 (if (null gnus-registry-max-entries) 338Any 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 ()
591MARK 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
620If ARTICLE is nil, then the `gnus-current-article' will be 662 (delq mark (gnus-registry-fetch-extra-marks id)))
621used." 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 678Uses process/prefix conventions. For multiple articles,
637;;; if this extends to more than 'flags, it should be improved to be more generic. 679only 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)
640Returns 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.
649The `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 693Returns 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) 702The `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.
1155See 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.
1155If BUFFER is nil then the current buffer is used." 1162If 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.
1174Return non-nil if the server responds, and nil if it does not
1175respond. 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.