aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/gnus
diff options
context:
space:
mode:
authorKaroly Lorentey2004-11-06 17:52:02 +0000
committerKaroly Lorentey2004-11-06 17:52:02 +0000
commit65ea79492334e2ef7b5b4e0d23b6f68ba2f4d0bb (patch)
tree853cf391ca1abda4f4ccd6fe8e7bb43f7c86ee08 /lisp/gnus
parente0bc17abe6979d607e8de4684dddb96e53c60065 (diff)
parent392cf16dd0ee9358f8af0cd0d8048b822456bbeb (diff)
downloademacs-65ea79492334e2ef7b5b4e0d23b6f68ba2f4d0bb.tar.gz
emacs-65ea79492334e2ef7b5b4e0d23b6f68ba2f4d0bb.zip
Merged in changes from CVS trunk.
Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-653 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-654 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-655 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-656 Update from CVS: lisp/man.el (Man-xref-normal-file): Fix help-echo. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-657 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-658 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-659 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-660 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-661 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-662 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-663 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-664 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-665 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-666 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-667 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-668 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-669 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-670 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-671 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-64 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-65 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-66 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-67 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-68 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-264
Diffstat (limited to 'lisp/gnus')
-rw-r--r--lisp/gnus/ChangeLog135
-rw-r--r--lisp/gnus/deuglify.el3
-rw-r--r--lisp/gnus/gnus-agent.el4
-rw-r--r--lisp/gnus/gnus-art.el11
-rw-r--r--lisp/gnus/gnus-cite.el5
-rw-r--r--lisp/gnus/gnus-delay.el1
-rw-r--r--lisp/gnus/gnus-diary.el3
-rw-r--r--lisp/gnus/gnus-msg.el6
-rw-r--r--lisp/gnus/gnus-registry.el1
-rw-r--r--lisp/gnus/gnus-spec.el2
-rw-r--r--lisp/gnus/gnus-srvr.el4
-rw-r--r--lisp/gnus/gnus-start.el2
-rw-r--r--lisp/gnus/gnus-sum.el7
-rw-r--r--lisp/gnus/gnus-win.el2
-rw-r--r--lisp/gnus/gnus.el3
-rw-r--r--lisp/gnus/html2text.el246
-rw-r--r--lisp/gnus/message.el7
-rw-r--r--lisp/gnus/mm-decode.el4
-rw-r--r--lisp/gnus/mm-url.el3
-rw-r--r--lisp/gnus/mm-util.el106
-rw-r--r--lisp/gnus/mm-uu.el1
-rw-r--r--lisp/gnus/mml-sec.el3
-rw-r--r--lisp/gnus/mml2015.el1
-rw-r--r--lisp/gnus/nndiary.el1
-rw-r--r--lisp/gnus/nnmail.el5
-rw-r--r--lisp/gnus/pgg-def.el3
-rw-r--r--lisp/gnus/sha1.el2
-rw-r--r--lisp/gnus/sieve.el1
-rw-r--r--lisp/gnus/spam-stat.el1
-rw-r--r--lisp/gnus/spam.el3
-rw-r--r--lisp/gnus/starttls.el7
31 files changed, 380 insertions, 203 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 2c658a4c562..d7ebedc53f8 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,5 +1,140 @@
12004-11-04 Richard M. Stallman <rms@gnu.org>
2
3 * spam.el (spam group): Add :version.
4
5 * pgg-def.el (pgg group): Add :version.
6
72004-11-04 Katsumi Yamaoka <yamaoka@jpl.org>
8
9 * gnus-art. (gnus-article-edit-article): Don't associate the
10 article buffer with a draft file. This is a temporary measure
11 against the 2004-08-22 change to gnus-article-edit-mode.
12
132004-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
14
15 * html2text.el (html2text-get-attr): Remove unused argument `tag'.
16 (html2text-format-tags): Remove unused variable `attr'.
17
18 * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Fix cleaning of
19 after-load-alist.
20
21 * mm-util.el (mm-mime-mule-charset-alist): Add the windows-1251
22 entry. From Ilya N. Golubev <gin@mo.msk.ru>.
23 (mm-enrich-utf-8-by-mule-ucs): New function run when Mule-UCS is
24 loaded under XEmacs.
25 (): Don't make duplicated entries in mm-mime-mule-charset-alist.
26
27 * mm-util.el (mm-coding-system-p): Return a coding-system.
28 (mm-mime-mule-charset-alist): Use shift_jis instead of
29 iso-2022-jp-2 for the katakana-jisx0201 mule charset; add new
30 entries for the mime charsets iso-2022-jp-3 and shift_jis.
31 (mm-coding-system-priorities): Use shift_jis and iso-8859-1
32 instead of japanese-shift-jis and iso-latin-1 respectively in
33 order to share the default value with both Emacs and XEmacs-mule.
34 (mm-mule-charset-to-mime-charset): Make
35 mm-coding-system-priorities effective.
36 (mm-sort-coding-systems-predicate): Canonicalize coding-systems
37 while predicating of candidates upon the priorities.
38
392004-11-01 Reiner Steib <Reiner.Steib@gmx.de>
40
41 * gnus-msg.el (gnus-summary-resend-default-address): Add :version.
42
43 * tls.el (tls-process-connection-type, tls-success)
44 (tls-certtool-program): Add :version.
45
46 * starttls.el (starttls-gnutls-program, starttls-use-gnutls)
47 (starttls-extra-arguments, starttls-process-connection-type)
48 (starttls-connect, starttls-failure, starttls-success):
49
50 * spam-stat.el (spam-stat): Add :version.
51
52 * sieve.el (sieve): Add :version.
53
54 * sha1.el (sha1): Added :version.
55 (sha1-use-external): Removed redundant version.
56
57 * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups)
58 (nnmail-cache-ignore-groups, nnmail-spool-hook)
59 (nnmail-split-fancy-match-partial-words)
60 (nnmail-split-lowercase-expanded):
61
62 * nndiary.el (nndiary): Add :version.
63
64 * mml2015.el (mml2015-unabbrev-trust-alist): Add :version.
65
66 * mml-sec.el (mml-default-sign-method)
67 (mml-default-encrypt-method, mml-signencrypt-style-alist): Add
68 :version.
69
70 * mm-uu.el (mm-uu-diff-groups-regexp): Add :version.
71
72 * mm-url.el (mm-url-use-external, mm-url-program)
73 (mm-url-arguments): Add :version.
74
75 * mm-decode.el (mm-inline-text-html-with-w3m-keymap)
76 (mm-attachment-file-modes, mm-decrypt-option)
77 (mm-w3m-safe-url-regexp): Add :version.
78
79 * message.el (message-cite-prefix-regexp)
80 (message-sendmail-envelope-from, message-minibuffer-local-map)
81 (message-user-fqdn, message-completion-alist): Add :version.
82
83 * gnus-win.el (gnus-configure-windows-hook)
84 (gnus-use-frames-on-any-display): Add :version.
85
86 * gnus-art.el (gnus-article-address-banner-alist)
87 (gnus-treat-unsplit-urls, gnus-treat-unfold-headers)
88 (gnus-treat-from-picon, gnus-treat-mail-picon)
89 (gnus-treat-x-pgp-sig): Add :version.
90
91 * gnus-sum.el (gnus-spam-mark, gnus-recent-mark)
92 (gnus-undownloaded-mark, gnus-summary-article-move-hook)
93 (gnus-summary-article-delete-hook)
94 (gnus-summary-display-while-building): Add :version.
95
96 * gnus-start.el (gnus-subscribe-newsgroup-hooks)
97 (gnus-get-top-new-news-hook):Add :version.
98
99 * gnus-srvr.el (gnus-server-agent-face, gnus-server-opened-face)
100 (gnus-server-closed-face, gnus-server-denied-face): Add :version.
101
102 * gnus-registry.el (gnus-registry): Add :version.
103
104 * gnus-spec.el (gnus-use-correct-string-widths)
105 (gnus-make-format-preserve-properties): Add :version.
106
107 * gnus.el (gnus-group-charter-alist)
108 (gnus-group-fetch-control-use-browse-url)
109 (gnus-install-group-spam-parameters): Add :version.
110
111 * gnus-diary.el (gnus-diary): Add :version.
112
113 * gnus-delay.el (gnus-delay): Add :version.
114
115 * gnus-cite.el (gnus-cite-unsightly-citation-regexp)
116 (gnus-cite-ignore-quoted-from, gnus-cite-attribution-face)
117 (gnus-cite-blank-line-after-header, gnus-article-boring-faces):
118 Add :version.
119
120 * gnus-agent.el (gnus-agent-max-fetch-size)
121 (gnus-agent-enable-expiration, gnus-agent-queue-mail)
122 (gnus-agent-prompt-send-queue): Add :version.
123
124 * deuglify.el (gnus-outlook-deuglify): Add :version.
125
126 * html2text.el: Beautify code. Improve doc strings. Some checkdoc
127 cleanup.
128 (html2text-get-attr, html2text-fix-paragraph): Simplify code.
129 (html2text-format-tag-list): Added "strong" and "em". From
130 "Alfred M. Szmidt" <ams@kemisten.nu> (tiny change).
131
12004-10-29 Katsumi Yamaoka <yamaoka@jpl.org> 1322004-10-29 Katsumi Yamaoka <yamaoka@jpl.org>
2 133
134 * gnus-msg.el (gnus-configure-posting-styles): Work with empty
135 signature file. Suggested by Manoj Srivastava
136 <srivasta@golden-gryphon.com>.
137
3 * mm-util.el (mm-coding-system-priorities): Prefer iso-8859-1 than 138 * mm-util.el (mm-coding-system-priorities): Prefer iso-8859-1 than
4 iso-2022-jp even in the Japanese language environment. Suggested 139 iso-2022-jp even in the Japanese language environment. Suggested
5 by Jason Rumney <jasonr@gnu.org>. 140 by Jason Rumney <jasonr@gnu.org>.
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index 07e630d793b..4fe1001a050 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -230,7 +230,8 @@
230;;; User Customizable Variables: 230;;; User Customizable Variables:
231 231
232(defgroup gnus-outlook-deuglify nil 232(defgroup gnus-outlook-deuglify nil
233 "Deuglify articles generated by broken user agents like MS Outlook (Express).") 233 "Deuglify articles generated by broken user agents like MS Outlook (Express)."
234 :version "21.4")
234 235
235;;;###autoload 236;;;###autoload
236(defcustom gnus-outlook-deuglify-unwrap-min 45 237(defcustom gnus-outlook-deuglify-unwrap-min 45
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index c62460946ab..23fcbbde5df 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -160,6 +160,7 @@ read articles as they would just be downloaded again."
160 "Chunk size for `gnus-agent-fetch-session'. 160 "Chunk size for `gnus-agent-fetch-session'.
161The function will split its article fetches into chunks smaller than 161The function will split its article fetches into chunks smaller than
162this limit." 162this limit."
163 :version "21.4"
163 :group 'gnus-agent 164 :group 'gnus-agent
164 :type 'integer) 165 :type 'integer)
165 166
@@ -170,6 +171,7 @@ contents from a group's local storage. This value may be overridden
170to disable expiration in specific categories, topics, and groups. Of 171to disable expiration in specific categories, topics, and groups. Of
171course, you could change gnus-agent-enable-expiration to DISABLE then 172course, you could change gnus-agent-enable-expiration to DISABLE then
172enable expiration per categories, topics, and groups." 173enable expiration per categories, topics, and groups."
174 :version "21.4"
173 :group 'gnus-agent 175 :group 'gnus-agent
174 :type '(radio (const :format "Enable " ENABLE) 176 :type '(radio (const :format "Enable " ENABLE)
175 (const :format "Disable " DISABLE))) 177 (const :format "Disable " DISABLE)))
@@ -195,6 +197,7 @@ See Info node `(gnus)Server Buffer'."
195 "Whether and when outgoing mail should be queued by the agent. 197 "Whether and when outgoing mail should be queued by the agent.
196When `always', always queue outgoing mail. When nil, never 198When `always', always queue outgoing mail. When nil, never
197queue. Otherwise, queue if and only if unplugged." 199queue. Otherwise, queue if and only if unplugged."
200 :version "21.4"
198 :group 'gnus-agent 201 :group 'gnus-agent
199 :type '(radio (const :format "Always" always) 202 :type '(radio (const :format "Always" always)
200 (const :format "Never" nil) 203 (const :format "Never" nil)
@@ -203,6 +206,7 @@ queue. Otherwise, queue if and only if unplugged."
203(defcustom gnus-agent-prompt-send-queue nil 206(defcustom gnus-agent-prompt-send-queue nil
204 "If non-nil, `gnus-group-send-queue' will prompt if called when 207 "If non-nil, `gnus-group-send-queue' will prompt if called when
205unplugged." 208unplugged."
209 :version "21.4"
206 :group 'gnus-agent 210 :group 'gnus-agent
207 :type 'boolean) 211 :type 'boolean)
208 212
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 7a365d81a2c..c0266300983 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -318,6 +318,7 @@ advertisements. For example:
318 (symbol :tag "Item in `gnus-article-banner-alist'" none) 318 (symbol :tag "Item in `gnus-article-banner-alist'" none)
319 regexp 319 regexp
320 (const :tag "None" nil)))) 320 (const :tag "None" nil))))
321 :version "21.4"
321 :group 'gnus-article-washing) 322 :group 'gnus-article-washing)
322 323
323(defcustom gnus-emphasis-alist 324(defcustom gnus-emphasis-alist
@@ -920,6 +921,7 @@ See Info node `(gnus)Customizing Articles' for details."
920 "Remove newlines from within URLs. 921 "Remove newlines from within URLs.
921Valid values are nil, t, `head', `last', an integer or a predicate. 922Valid values are nil, t, `head', `last', an integer or a predicate.
922See Info node `(gnus)Customizing Articles' for details." 923See Info node `(gnus)Customizing Articles' for details."
924 :version "21.4"
923 :group 'gnus-article-treat 925 :group 'gnus-article-treat
924 :link '(custom-manual "(gnus)Customizing Articles") 926 :link '(custom-manual "(gnus)Customizing Articles")
925 :type gnus-article-treat-custom) 927 :type gnus-article-treat-custom)
@@ -1124,6 +1126,7 @@ See Info node `(gnus)Customizing Articles' for details."
1124 "Unfold folded header lines. 1126 "Unfold folded header lines.
1125Valid values are nil, t, `head', `last', an integer or a predicate. 1127Valid values are nil, t, `head', `last', an integer or a predicate.
1126See Info node `(gnus)Customizing Articles' for details." 1128See Info node `(gnus)Customizing Articles' for details."
1129 :version "21.4"
1127 :group 'gnus-article-treat 1130 :group 'gnus-article-treat
1128 :link '(custom-manual "(gnus)Customizing Articles") 1131 :link '(custom-manual "(gnus)Customizing Articles")
1129 :type gnus-article-treat-custom) 1132 :type gnus-article-treat-custom)
@@ -1238,6 +1241,7 @@ See Info node `(gnus)Customizing Articles' and Info node
1238Valid values are nil, t, `head', `last', an integer or a predicate. 1241Valid values are nil, t, `head', `last', an integer or a predicate.
1239See Info node `(gnus)Customizing Articles' and Info node 1242See Info node `(gnus)Customizing Articles' and Info node
1240`(gnus)Picons' for details." 1243`(gnus)Picons' for details."
1244 :version "21.4"
1241 :group 'gnus-article-treat 1245 :group 'gnus-article-treat
1242 :group 'gnus-picon 1246 :group 'gnus-picon
1243 :link '(custom-manual "(gnus)Customizing Articles") 1247 :link '(custom-manual "(gnus)Customizing Articles")
@@ -1253,6 +1257,7 @@ See Info node `(gnus)Customizing Articles' and Info node
1253Valid values are nil, t, `head', `last', an integer or a predicate. 1257Valid values are nil, t, `head', `last', an integer or a predicate.
1254See Info node `(gnus)Customizing Articles' and Info node 1258See Info node `(gnus)Customizing Articles' and Info node
1255`(gnus)Picons' for details." 1259`(gnus)Picons' for details."
1260 :version "21.4"
1256 :group 'gnus-article-treat 1261 :group 'gnus-article-treat
1257 :group 'gnus-picon 1262 :group 'gnus-picon
1258 :link '(custom-manual "(gnus)Customizing Articles") 1263 :link '(custom-manual "(gnus)Customizing Articles")
@@ -1338,6 +1343,7 @@ See Info node `(gnus)Customizing Articles' for details."
1338To automatically treat X-PGP-Sig, set it to head. 1343To automatically treat X-PGP-Sig, set it to head.
1339Valid values are nil, t, `head', `last', an integer or a predicate. 1344Valid values are nil, t, `head', `last', an integer or a predicate.
1340See Info node `(gnus)Customizing Articles' for details." 1345See Info node `(gnus)Customizing Articles' for details."
1346 :version "21.4"
1341 :group 'gnus-article-treat 1347 :group 'gnus-article-treat
1342 :group 'mime-security 1348 :group 'mime-security
1343 :link '(custom-manual "(gnus)Customizing Articles") 1349 :link '(custom-manual "(gnus)Customizing Articles")
@@ -5645,7 +5651,10 @@ groups."
5645 "Start editing the contents of the current article buffer." 5651 "Start editing the contents of the current article buffer."
5646 (let ((winconf (current-window-configuration))) 5652 (let ((winconf (current-window-configuration)))
5647 (set-buffer gnus-article-buffer) 5653 (set-buffer gnus-article-buffer)
5648 (gnus-article-edit-mode) 5654 (let ((message-auto-save-directory
5655 ;; Don't associate the article buffer with a draft file.
5656 nil))
5657 (gnus-article-edit-mode))
5649 (funcall start-func) 5658 (funcall start-func)
5650 (set-buffer-modified-p nil) 5659 (set-buffer-modified-p nil)
5651 (gnus-configure-windows 'edit-article) 5660 (gnus-configure-windows 'edit-article)
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index bf9f5863428..5306f3b17bf 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -124,6 +124,7 @@ The text matching the first grouping will be used as a button."
124(defcustom gnus-cite-unsightly-citation-regexp 124(defcustom gnus-cite-unsightly-citation-regexp
125 "^-----Original Message-----\nFrom: \\(.+\n\\)+\n" 125 "^-----Original Message-----\nFrom: \\(.+\n\\)+\n"
126 "Regexp matching Microsoft-type rest-of-message citations." 126 "Regexp matching Microsoft-type rest-of-message citations."
127 :version "21.4"
127 :group 'gnus-cite 128 :group 'gnus-cite
128 :type 'regexp) 129 :type 'regexp)
129 130
@@ -131,6 +132,7 @@ The text matching the first grouping will be used as a button."
131 "Non-nil means don't regard lines beginning with \">From \" as cited text. 132 "Non-nil means don't regard lines beginning with \">From \" as cited text.
132Those lines may have been quoted by MTAs in order not to mix up with 133Those lines may have been quoted by MTAs in order not to mix up with
133the envelope From line." 134the envelope From line."
135 :version "21.4"
134 :group 'gnus-cite 136 :group 'gnus-cite
135 :type 'boolean) 137 :type 'boolean)
136 138
@@ -141,6 +143,7 @@ the envelope From line."
141(defcustom gnus-cite-attribution-face 'gnus-cite-attribution-face 143(defcustom gnus-cite-attribution-face 'gnus-cite-attribution-face
142 "Face used for attribution lines. 144 "Face used for attribution lines.
143It is merged with the face for the cited text belonging to the attribution." 145It is merged with the face for the cited text belonging to the attribution."
146 :version "21.4"
144 :group 'gnus-cite 147 :group 'gnus-cite
145 :type 'face) 148 :type 'face)
146 149
@@ -278,7 +281,6 @@ This should make it easier to see who wrote what."
278 281
279(defcustom gnus-cite-blank-line-after-header t 282(defcustom gnus-cite-blank-line-after-header t
280 "If non-nil, put a blank line between the citation header and the button." 283 "If non-nil, put a blank line between the citation header and the button."
281 :version "21.4"
282 :group 'gnus-cite 284 :group 'gnus-cite
283 :type 'boolean) 285 :type 'boolean)
284 286
@@ -290,7 +292,6 @@ This should make it easier to see who wrote what."
290If an article has more pages below the one you are looking at, but 292If an article has more pages below the one you are looking at, but
291nothing on those pages is a word of at least three letters that is not 293nothing on those pages is a word of at least three letters that is not
292in a boring face, then the pages will be skipped." 294in a boring face, then the pages will be skipped."
293 :version "21.4"
294 :type '(repeat face) 295 :type '(repeat face)
295 :group 'gnus-article-hiding) 296 :group 'gnus-article-hiding)
296 297
diff --git a/lisp/gnus/gnus-delay.el b/lisp/gnus/gnus-delay.el
index ee431076fad..8a566e3e5d8 100644
--- a/lisp/gnus/gnus-delay.el
+++ b/lisp/gnus/gnus-delay.el
@@ -41,6 +41,7 @@
41;;;###autoload 41;;;###autoload
42(defgroup gnus-delay nil 42(defgroup gnus-delay nil
43 "Arrange for sending postings later." 43 "Arrange for sending postings later."
44 :version "21.4"
44 :group 'gnus) 45 :group 'gnus)
45 46
46(defcustom gnus-delay-group "delayed" 47(defcustom gnus-delay-group "delayed"
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index e82d77fa58b..7d2df362bbc 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -102,7 +102,8 @@
102(require 'gnus-art) 102(require 'gnus-art)
103 103
104(defgroup gnus-diary nil 104(defgroup gnus-diary nil
105 "Utilities on top of the nndiary backend for Gnus.") 105 "Utilities on top of the nndiary backend for Gnus."
106 :version "21.4")
106 107
107(defcustom gnus-diary-summary-line-format "%U%R%z %uD: %(%s%) (%ud)\n" 108(defcustom gnus-diary-summary-line-format "%U%R%z %uD: %(%s%) (%ud)\n"
108 "*Summary line format for nndiary groups." 109 "*Summary line format for nndiary groups."
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index 7dcef4b813b..6b093480940 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -281,6 +281,7 @@ If nil, Gnus will never ask for confirmation if replying to mail."
281 "If non-nil, Gnus tries to suggest a default address to resend to. 281 "If non-nil, Gnus tries to suggest a default address to resend to.
282If nil, the address field will always be empty after invoking 282If nil, the address field will always be empty after invoking
283`gnus-summary-resend-message'." 283`gnus-summary-resend-message'."
284 :version "21.4"
284 :group 'gnus-message 285 :group 'gnus-message
285 :type 'boolean) 286 :type 'boolean)
286 287
@@ -1871,8 +1872,9 @@ this is a reply."
1871 (setq v (with-temp-buffer 1872 (setq v (with-temp-buffer
1872 (insert-file-contents v) 1873 (insert-file-contents v)
1873 (goto-char (point-max)) 1874 (goto-char (point-max))
1874 (while (bolp) 1875 (skip-chars-backward "\n")
1875 (delete-char -1)) 1876 (delete-region (+ (point) (if (bolp) 0 1))
1877 (point-max))
1876 (buffer-string)))) 1878 (buffer-string))))
1877 (setq results (delq (assoc element results) results)) 1879 (setq results (delq (assoc element results) results))
1878 (push (cons element v) results)))) 1880 (push (cons element v) results))))
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 841f0057566..046114cbe24 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -66,6 +66,7 @@
66 66
67(defgroup gnus-registry nil 67(defgroup gnus-registry nil
68 "The Gnus registry." 68 "The Gnus registry."
69 :version "21.4"
69 :group 'gnus) 70 :group 'gnus)
70 71
71(defvar gnus-registry-hashtb nil 72(defvar gnus-registry-hashtb nil
diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el
index dc93fef5176..1177df4731a 100644
--- a/lisp/gnus/gnus-spec.el
+++ b/lisp/gnus/gnus-spec.el
@@ -32,12 +32,14 @@
32 32
33(defcustom gnus-use-correct-string-widths (featurep 'xemacs) 33(defcustom gnus-use-correct-string-widths (featurep 'xemacs)
34 "*If non-nil, use correct functions for dealing with wide characters." 34 "*If non-nil, use correct functions for dealing with wide characters."
35 :version "21.4"
35 :group 'gnus-format 36 :group 'gnus-format
36 :type 'boolean) 37 :type 'boolean)
37 38
38(defcustom gnus-make-format-preserve-properties (featurep 'xemacs) 39(defcustom gnus-make-format-preserve-properties (featurep 'xemacs)
39 "*If non-nil, use a replacement `format' function which preserves 40 "*If non-nil, use a replacement `format' function which preserves
40text properties. This is only needed on XEmacs, as FSF Emacs does this anyway." 41text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
42 :version "21.4"
41 :group 'gnus-format 43 :group 'gnus-format
42 :type 'boolean) 44 :type 'boolean)
43 45
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 7fef378722a..d42c5d71cfd 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -205,21 +205,25 @@ If nil, a faster, but more primitive, buffer is used instead."
205 205
206(defcustom gnus-server-agent-face 'gnus-server-agent-face 206(defcustom gnus-server-agent-face 'gnus-server-agent-face
207 "Face name to use on AGENTIZED servers." 207 "Face name to use on AGENTIZED servers."
208 :version "21.4"
208 :group 'gnus-server-visual 209 :group 'gnus-server-visual
209 :type 'face) 210 :type 'face)
210 211
211(defcustom gnus-server-opened-face 'gnus-server-opened-face 212(defcustom gnus-server-opened-face 'gnus-server-opened-face
212 "Face name to use on OPENED servers." 213 "Face name to use on OPENED servers."
214 :version "21.4"
213 :group 'gnus-server-visual 215 :group 'gnus-server-visual
214 :type 'face) 216 :type 'face)
215 217
216(defcustom gnus-server-closed-face 'gnus-server-closed-face 218(defcustom gnus-server-closed-face 'gnus-server-closed-face
217 "Face name to use on CLOSED servers." 219 "Face name to use on CLOSED servers."
220 :version "21.4"
218 :group 'gnus-server-visual 221 :group 'gnus-server-visual
219 :type 'face) 222 :type 'face)
220 223
221(defcustom gnus-server-denied-face 'gnus-server-denied-face 224(defcustom gnus-server-denied-face 'gnus-server-denied-face
222 "Face name to use on DENIED servers." 225 "Face name to use on DENIED servers."
226 :version "21.4"
223 :group 'gnus-server-visual 227 :group 'gnus-server-visual
224 :type 'face) 228 :type 'face)
225 229
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index 971124ba831..81ca22a87ad 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -299,6 +299,7 @@ claim them."
299(defcustom gnus-subscribe-newsgroup-hooks nil 299(defcustom gnus-subscribe-newsgroup-hooks nil
300 "*Hooks run after you subscribe to a new group. 300 "*Hooks run after you subscribe to a new group.
301The hooks will be called with new group's name as argument." 301The hooks will be called with new group's name as argument."
302 :version "21.4"
302 :group 'gnus-group-new 303 :group 'gnus-group-new
303 :type 'hook) 304 :type 'hook)
304 305
@@ -405,6 +406,7 @@ This hook is called as the first thing when Gnus is started."
405 406
406(defcustom gnus-get-top-new-news-hook nil 407(defcustom gnus-get-top-new-news-hook nil
407 "A hook run just before Gnus checks for new news globally." 408 "A hook run just before Gnus checks for new news globally."
409 :version "21.4"
408 :group 'gnus-group-new 410 :group 'gnus-group-new
409 :type 'hook) 411 :type 'hook)
410 412
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 6ce2f55e2b7..5f2c2d7aeb1 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -469,6 +469,7 @@ this variable specifies group names."
469 469
470(defcustom gnus-spam-mark ?$ 470(defcustom gnus-spam-mark ?$
471 "*Mark used for spam articles." 471 "*Mark used for spam articles."
472 :version "21.4"
472 :group 'gnus-summary-marks 473 :group 'gnus-summary-marks
473 :type 'character) 474 :type 'character)
474 475
@@ -505,6 +506,7 @@ this variable specifies group names."
505 506
506(defcustom gnus-recent-mark ?N 507(defcustom gnus-recent-mark ?N
507 "*Mark used for articles that are recent." 508 "*Mark used for articles that are recent."
509 :version "21.4"
508 :group 'gnus-summary-marks 510 :group 'gnus-summary-marks
509 :type 'character) 511 :type 'character)
510 512
@@ -552,6 +554,7 @@ this variable specifies group names."
552 554
553(defcustom gnus-undownloaded-mark ?- 555(defcustom gnus-undownloaded-mark ?-
554 "*Mark used for articles that weren't downloaded." 556 "*Mark used for articles that weren't downloaded."
557 :version "21.4"
555 :group 'gnus-summary-marks 558 :group 'gnus-summary-marks
556 :type 'character) 559 :type 'character)
557 560
@@ -890,16 +893,19 @@ automatically when it is selected."
890 893
891(defcustom gnus-summary-article-move-hook nil 894(defcustom gnus-summary-article-move-hook nil
892 "*A hook called after an article is moved, copied, respooled, or crossposted." 895 "*A hook called after an article is moved, copied, respooled, or crossposted."
896 :version "21.4"
893 :group 'gnus-summary 897 :group 'gnus-summary
894 :type 'hook) 898 :type 'hook)
895 899
896(defcustom gnus-summary-article-delete-hook nil 900(defcustom gnus-summary-article-delete-hook nil
897 "*A hook called after an article is deleted." 901 "*A hook called after an article is deleted."
902 :version "21.4"
898 :group 'gnus-summary 903 :group 'gnus-summary
899 :type 'hook) 904 :type 'hook)
900 905
901(defcustom gnus-summary-article-expire-hook nil 906(defcustom gnus-summary-article-expire-hook nil
902 "*A hook called after an article is expired." 907 "*A hook called after an article is expired."
908 :version "21.4"
903 :group 'gnus-summary 909 :group 'gnus-summary
904 :type 'hook) 910 :type 'hook)
905 911
@@ -9178,6 +9184,7 @@ If nil, use to the current newsgroup method."
9178 "If non-nil, show and update the summary buffer as it's being built. 9184 "If non-nil, show and update the summary buffer as it's being built.
9179If the value is t, update the buffer after every line is inserted. If 9185If the value is t, update the buffer after every line is inserted. If
9180the value is an integer (N), update the display every N lines." 9186the value is an integer (N), update the display every N lines."
9187 :version "21.4"
9181 :group 'gnus-thread 9188 :group 'gnus-thread
9182 :type '(choice (const :tag "off" nil) 9189 :type '(choice (const :tag "off" nil)
9183 number 9190 number
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el
index 8de4673fddc..554c9dc3437 100644
--- a/lisp/gnus/gnus-win.el
+++ b/lisp/gnus/gnus-win.el
@@ -62,6 +62,7 @@
62 "*If non-nil, frames on all displays will be considered useable by Gnus. 62 "*If non-nil, frames on all displays will be considered useable by Gnus.
63When nil, only frames on the same display as the selected frame will be 63When nil, only frames on the same display as the selected frame will be
64used to display Gnus windows." 64used to display Gnus windows."
65 :version "21.4"
65 :group 'gnus-windows 66 :group 'gnus-windows
66 :type 'boolean) 67 :type 'boolean)
67 68
@@ -198,6 +199,7 @@ See the Gnus manual for an explanation of the syntax used.")
198 199
199(defcustom gnus-configure-windows-hook nil 200(defcustom gnus-configure-windows-hook nil
200 "*A hook called when configuring windows." 201 "*A hook called when configuring windows."
202 :version "21.4"
201 :group 'gnus-windows 203 :group 'gnus-windows
202 :type 'hook) 204 :type 'hook)
203 205
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index bff1c3bba2f..c8dc878eacd 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1314,6 +1314,7 @@ If the default site is too slow, try one of these:
1314 (gnus-replace-in-string name "\\." "-") "-charter.html"))) 1314 (gnus-replace-in-string name "\\." "-") "-charter.html")))
1315 "*An alist of (HIERARCHY . FORM) pairs used to construct the URL of a charter. 1315 "*An alist of (HIERARCHY . FORM) pairs used to construct the URL of a charter.
1316When FORM is evaluated `name' is bound to the name of the group." 1316When FORM is evaluated `name' is bound to the name of the group."
1317 :version "21.4"
1317 :group 'gnus-group-various 1318 :group 'gnus-group-various
1318 :type '(repeat (cons (string :tag "Hierarchy") (sexp :tag "Form")))) 1319 :type '(repeat (cons (string :tag "Hierarchy") (sexp :tag "Form"))))
1319 1320
@@ -1321,6 +1322,7 @@ When FORM is evaluated `name' is bound to the name of the group."
1321 "*Non-nil means that control messages are displayed using `browse-url'. 1322 "*Non-nil means that control messages are displayed using `browse-url'.
1322Otherwise they are fetched with ange-ftp and displayed in an ephemeral 1323Otherwise they are fetched with ange-ftp and displayed in an ephemeral
1323group." 1324group."
1325 :version "21.4"
1324 :group 'gnus-group-various 1326 :group 'gnus-group-various
1325 :type 'boolean) 1327 :type 'boolean)
1326 1328
@@ -1788,6 +1790,7 @@ total number of articles in the group.")
1788(defcustom gnus-install-group-spam-parameters t 1790(defcustom gnus-install-group-spam-parameters t
1789 "*Disable the group parameters for spam detection. 1791 "*Disable the group parameters for spam detection.
1790Enable if `G c' in XEmacs is giving you trouble, and make sure to submit a bug report." 1792Enable if `G c' in XEmacs is giving you trouble, and make sure to submit a bug report."
1793 :version "21.4"
1791 :type 'boolean 1794 :type 'boolean
1792 :group 'gnus-start) 1795 :group 'gnus-start)
1793 1796
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index 31d1869c695..ef05af9bae6 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -24,11 +24,11 @@
24 24
25;; These functions provide a simple way to wash/clean html infected 25;; These functions provide a simple way to wash/clean html infected
26;; mails. Definitely do not work in all cases, but some improvement 26;; mails. Definitely do not work in all cases, but some improvement
27;; in readability is generally obtained. Formatting is only done in 27;; in readability is generally obtained. Formatting is only done in
28;; the buffer, so the next time you enter the article it will be 28;; the buffer, so the next time you enter the article it will be
29;; "re-htmlized". 29;; "re-htmlized".
30;; 30;;
31;; The main function is "html2text" 31;; The main function is `html2text'.
32 32
33;;; Code: 33;;; Code:
34 34
@@ -47,9 +47,9 @@
47 "The map of entity to text. 47 "The map of entity to text.
48 48
49This is an alist were each element is a dotted pair consisting of an 49This is an alist were each element is a dotted pair consisting of an
50old string, and a replacement string. This replacement is done by the 50old string, and a replacement string. This replacement is done by the
51function \"html2text-substitute\" which basically performs a 51function `html2text-substitute' which basically performs a
52replace-string operation for every element in the list. This is 52`replace-string' operation for every element in the list. This is
53completely verbatim - without any use of REGEXP.") 53completely verbatim - without any use of REGEXP.")
54 54
55(defvar html2text-remove-tag-list 55(defvar html2text-remove-tag-list
@@ -57,11 +57,11 @@ completely verbatim - without any use of REGEXP.")
57 "A list of removable tags. 57 "A list of removable tags.
58 58
59This is a list of tags which should be removed, without any 59This is a list of tags which should be removed, without any
60formatting. Observe that if you the tags in the list are presented 60formatting. Note that tags in the list are presented *without*
61*without* any \"<\" or \">\". All occurences of a tag appearing in 61any \"<\" or \">\". All occurences of a tag appearing in this
62this list are removed, irrespective of whether it is a closing or 62list are removed, irrespective of whether it is a closing or
63opening tag, or if the tag has additional attributes. The actual 63opening tag, or if the tag has additional attributes. The
64deletion is done by the function \"html2text-remove-tags\". 64deletion is done by the function `html2text-remove-tags'.
65 65
66For instance the text: 66For instance the text:
67 67
@@ -75,8 +75,10 @@ If this list contains the element \"font\".")
75 75
76(defvar html2text-format-tag-list 76(defvar html2text-format-tag-list
77 '(("b" . html2text-clean-bold) 77 '(("b" . html2text-clean-bold)
78 ("strong" . html2text-clean-bold)
78 ("u" . html2text-clean-underline) 79 ("u" . html2text-clean-underline)
79 ("i" . html2text-clean-italic) 80 ("i" . html2text-clean-italic)
81 ("em" . html2text-clean-italic)
80 ("blockquote" . html2text-clean-blockquote) 82 ("blockquote" . html2text-clean-blockquote)
81 ("a" . html2text-clean-anchor) 83 ("a" . html2text-clean-anchor)
82 ("ul" . html2text-clean-ul) 84 ("ul" . html2text-clean-ul)
@@ -86,7 +88,7 @@ If this list contains the element \"font\".")
86 "An alist of tags and processing functions. 88 "An alist of tags and processing functions.
87 89
88This is an alist where each dotted pair consists of a tag, and then 90This is an alist where each dotted pair consists of a tag, and then
89the name of a function to be called when this tag is found. The 91the name of a function to be called when this tag is found. The
90function is called with the arguments p1, p2, p3 and p4. These are 92function is called with the arguments p1, p2, p3 and p4. These are
91demontrated below: 93demontrated below:
92 94
@@ -117,17 +119,15 @@ formatting, and then moved afterward.")
117;; 119;;
118 120
119 121
120(defun html2text-replace-string (from-string to-string p1 p2) 122(defun html2text-replace-string (from-string to-string min max)
121 (goto-char p1) 123 "Replace FROM-STRING with TO-STRING in region from MIN to MAX."
124 (goto-char min)
122 (let ((delta (- (string-width to-string) (string-width from-string))) 125 (let ((delta (- (string-width to-string) (string-width from-string)))
123 (change 0)) 126 (change 0))
124 (while (search-forward from-string p2 t) 127 (while (search-forward from-string max t)
125 (replace-match to-string) 128 (replace-match to-string)
126 (setq change (+ change delta)) 129 (setq change (+ change delta)))
127 ) 130 change))
128 change
129 )
130 )
131 131
132;; 132;;
133;; </Utility functions> 133;; </Utility functions>
@@ -140,11 +140,11 @@ formatting, and then moved afterward.")
140;; <Functions related to attributes> i.e. <font size=+3> 140;; <Functions related to attributes> i.e. <font size=+3>
141;; 141;;
142 142
143(defun html2text-attr-value (attr-list attr) 143(defun html2text-attr-value (list attribute)
144 (nth 1 (assoc attr attr-list)) 144 "Get value of ATTRIBUTE from LIST."
145 ) 145 (nth 1 (assoc attribute list)))
146 146
147(defun html2text-get-attr (p1 p2 tag) 147(defun html2text-get-attr (p1 p2)
148 (goto-char p1) 148 (goto-char p1)
149 (re-search-forward " +[^ ]" p2 t) 149 (re-search-forward " +[^ ]" p2 t)
150 (let* ((attr-string (buffer-substring-no-properties (1- (point)) (1- p2))) 150 (let* ((attr-string (buffer-substring-no-properties (1- (point)) (1- p2)))
@@ -161,14 +161,10 @@ formatting, and then moved afterward.")
161 ((string-match "[^ ]=[^ ]" prev) 161 ((string-match "[^ ]=[^ ]" prev)
162 (let ((attr (nth 0 (split-string prev "="))) 162 (let ((attr (nth 0 (split-string prev "=")))
163 (value (nth 1 (split-string prev "=")))) 163 (value (nth 1 (split-string prev "="))))
164 (setq attr-list (cons (list attr value) attr-list)) 164 (setq attr-list (cons (list attr value) attr-list))))
165 )
166 )
167 ;; size= 3 165 ;; size= 3
168 ((string-match "[^ ]=\\'" prev) 166 ((string-match "[^ ]=\\'" prev)
169 (setq attr-list (cons (list (substring prev 0 -1) this) attr-list)) 167 (setq attr-list (cons (list (substring prev 0 -1) this) attr-list))))
170 )
171 )
172 168
173 (while (< index (length tmp-list)) 169 (while (< index (length tmp-list))
174 (cond 170 (cond
@@ -176,29 +172,20 @@ formatting, and then moved afterward.")
176 ((string-match "[^ ]=[^ ]" this) 172 ((string-match "[^ ]=[^ ]" this)
177 (let ((attr (nth 0 (split-string this "="))) 173 (let ((attr (nth 0 (split-string this "=")))
178 (value (nth 1 (split-string this "=")))) 174 (value (nth 1 (split-string this "="))))
179 (setq attr-list (cons (list attr value) attr-list)) 175 (setq attr-list (cons (list attr value) attr-list))))
180 )
181 )
182 ;; size =3 176 ;; size =3
183 ((string-match "\\`=[^ ]" this) 177 ((string-match "\\`=[^ ]" this)
184 (setq attr-list (cons (list prev (substring this 1)) attr-list))) 178 (setq attr-list (cons (list prev (substring this 1)) attr-list)))
185
186 ;; size= 3 179 ;; size= 3
187 ((string-match "[^ ]=\\'" this) 180 ((string-match "[^ ]=\\'" this)
188 (setq attr-list (cons (list (substring this 0 -1) next) attr-list)) 181 (setq attr-list (cons (list (substring this 0 -1) next) attr-list)))
189 )
190
191 ;; size = 3 182 ;; size = 3
192 ((string= "=" this) 183 ((string= "=" this)
193 (setq attr-list (cons (list prev next) attr-list)) 184 (setq attr-list (cons (list prev next) attr-list))))
194 )
195 )
196 (setq index (1+ index)) 185 (setq index (1+ index))
197 (setq prev this) 186 (setq prev this)
198 (setq this next) 187 (setq this next)
199 (setq next (nth (1+ index) tmp-list)) 188 (setq next (nth (1+ index) tmp-list)))
200 )
201
202 ;; 189 ;;
203 ;; Tags with no accompanying "=" i.e. value=nil 190 ;; Tags with no accompanying "=" i.e. value=nil
204 ;; 191 ;;
@@ -207,41 +194,25 @@ formatting, and then moved afterward.")
207 (setq next (nth 2 tmp-list)) 194 (setq next (nth 2 tmp-list))
208 (setq index 1) 195 (setq index 1)
209 196
210 (if (not (string-match "=" prev)) 197 (when (and (not (string-match "=" prev))
211 (progn 198 (not (string= (substring this 0 1) "=")))
212 (if (not (string= (substring this 0 1) "=")) 199 (setq attr-list (cons (list prev nil) attr-list)))
213 (setq attr-list (cons (list prev nil) attr-list))
214 )
215 )
216 )
217
218 (while (< index (1- (length tmp-list))) 200 (while (< index (1- (length tmp-list)))
219 (if (not (string-match "=" this)) 201 (when (and (not (string-match "=" this))
220 (if (not (or (string= (substring next 0 1) "=") 202 (not (or (string= (substring next 0 1) "=")
221 (string= (substring prev -1) "="))) 203 (string= (substring prev -1) "="))))
222 (setq attr-list (cons (list this nil) attr-list)) 204 (setq attr-list (cons (list this nil) attr-list)))
223 )
224 )
225 (setq index (1+ index)) 205 (setq index (1+ index))
226 (setq prev this) 206 (setq prev this)
227 (setq this next) 207 (setq this next)
228 (setq next (nth (1+ index) tmp-list)) 208 (setq next (nth (1+ index) tmp-list)))
229 ) 209
230 210 (when (and this
231 (if this 211 (not (string-match "=" this))
232 (progn 212 (not (string= (substring prev -1) "=")))
233 (if (not (string-match "=" this)) 213 (setq attr-list (cons (list this nil) attr-list)))
234 (progn 214 ;; return - value
235 (if (not (string= (substring prev -1) "=")) 215 attr-list))
236 (setq attr-list (cons (list this nil) attr-list))
237 )
238 )
239 )
240 )
241 )
242 attr-list ;; return - value
243 )
244 )
245 216
246;; 217;;
247;; </Functions related to attributes> 218;; </Functions related to attributes>
@@ -266,10 +237,7 @@ formatting, and then moved afterward.")
266 (cond 237 (cond
267 ((string= list-type "ul") (insert " o ")) 238 ((string= list-type "ul") (insert " o "))
268 ((string= list-type "ol") (insert (format " %s: " item-nr))) 239 ((string= list-type "ol") (insert (format " %s: " item-nr)))
269 (t (insert " x "))) 240 (t (insert " x "))))))
270 )
271 )
272 )
273 241
274(defun html2text-clean-dtdd (p1 p2) 242(defun html2text-clean-dtdd (p1 p2)
275 (goto-char p1) 243 (goto-char p1)
@@ -308,61 +276,51 @@ formatting, and then moved afterward.")
308 (html2text-delete-single-tag p1 p2) 276 (html2text-delete-single-tag p1 p2)
309 (goto-char p1) 277 (goto-char p1)
310 (newline 1) 278 (newline 1)
311 (insert (make-string fill-column ?-)) 279 (insert (make-string fill-column ?-)))
312 )
313 280
314(defun html2text-clean-ul (p1 p2 p3 p4) 281(defun html2text-clean-ul (p1 p2 p3 p4)
315 (html2text-delete-tags p1 p2 p3 p4) 282 (html2text-delete-tags p1 p2 p3 p4)
316 (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ul") 283 (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ul"))
317 )
318 284
319(defun html2text-clean-ol (p1 p2 p3 p4) 285(defun html2text-clean-ol (p1 p2 p3 p4)
320 (html2text-delete-tags p1 p2 p3 p4) 286 (html2text-delete-tags p1 p2 p3 p4)
321 (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ol") 287 (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ol"))
322 )
323 288
324(defun html2text-clean-dl (p1 p2 p3 p4) 289(defun html2text-clean-dl (p1 p2 p3 p4)
325 (html2text-delete-tags p1 p2 p3 p4) 290 (html2text-delete-tags p1 p2 p3 p4)
326 (html2text-clean-dtdd p1 (- p3 (- p1 p2))) 291 (html2text-clean-dtdd p1 (- p3 (- p1 p2))))
327 )
328 292
329(defun html2text-clean-center (p1 p2 p3 p4) 293(defun html2text-clean-center (p1 p2 p3 p4)
330 (html2text-delete-tags p1 p2 p3 p4) 294 (html2text-delete-tags p1 p2 p3 p4)
331 (center-region p1 (- p3 (- p2 p1))) 295 (center-region p1 (- p3 (- p2 p1))))
332 )
333 296
334(defun html2text-clean-bold (p1 p2 p3 p4) 297(defun html2text-clean-bold (p1 p2 p3 p4)
335 (put-text-property p2 p3 'face 'bold) 298 (put-text-property p2 p3 'face 'bold)
336 (html2text-delete-tags p1 p2 p3 p4) 299 (html2text-delete-tags p1 p2 p3 p4))
337 )
338 300
339(defun html2text-clean-title (p1 p2 p3 p4) 301(defun html2text-clean-title (p1 p2 p3 p4)
340 (put-text-property p2 p3 'face 'bold) 302 (put-text-property p2 p3 'face 'bold)
341 (html2text-delete-tags p1 p2 p3 p4) 303 (html2text-delete-tags p1 p2 p3 p4))
342 )
343 304
344(defun html2text-clean-underline (p1 p2 p3 p4) 305(defun html2text-clean-underline (p1 p2 p3 p4)
345 (put-text-property p2 p3 'face 'underline) 306 (put-text-property p2 p3 'face 'underline)
346 (html2text-delete-tags p1 p2 p3 p4) 307 (html2text-delete-tags p1 p2 p3 p4))
347 )
348 308
349(defun html2text-clean-italic (p1 p2 p3 p4) 309(defun html2text-clean-italic (p1 p2 p3 p4)
350 (put-text-property p2 p3 'face 'italic) 310 (put-text-property p2 p3 'face 'italic)
351 (html2text-delete-tags p1 p2 p3 p4) 311 (html2text-delete-tags p1 p2 p3 p4))
352 )
353 312
354(defun html2text-clean-font (p1 p2 p3 p4) 313(defun html2text-clean-font (p1 p2 p3 p4)
355 (html2text-delete-tags p1 p2 p3 p4) 314 (html2text-delete-tags p1 p2 p3 p4))
356 )
357 315
358(defun html2text-clean-blockquote (p1 p2 p3 p4) 316(defun html2text-clean-blockquote (p1 p2 p3 p4)
359 (html2text-delete-tags p1 p2 p3 p4) 317 (html2text-delete-tags p1 p2 p3 p4))
360 )
361 318
362(defun html2text-clean-anchor (p1 p2 p3 p4) 319(defun html2text-clean-anchor (p1 p2 p3 p4)
363 ;; If someone can explain how to make the URL clickable I will 320 ;; If someone can explain how to make the URL clickable I will surely
364 ;; surely improve upon this. 321 ;; improve upon this.
365 (let* ((attr-list (html2text-get-attr p1 p2 "a")) 322 ;; Maybe `goto-addr.el' can be used here.
323 (let* ((attr-list (html2text-get-attr p1 p2))
366 (href (html2text-attr-value attr-list "href"))) 324 (href (html2text-attr-value attr-list "href")))
367 (delete-region p1 p4) 325 (delete-region p1 p4)
368 (when href 326 (when href
@@ -386,38 +344,27 @@ formatting, and then moved afterward.")
386 (let ((has-br-line) 344 (let ((has-br-line)
387 (refill-start) 345 (refill-start)
388 (refill-stop)) 346 (refill-stop))
389 (if (re-search-forward "<br>$" p2 t) 347 (when (re-search-forward "<br>$" p2 t)
390 (setq has-br-line t) 348 (goto-char p1)
391 ) 349 (when (re-search-forward ".+[^<][^b][^r][^>]$" p2 t)
392 (if has-br-line 350 (beginning-of-line)
393 (progn 351 (setq refill-start (point))
394 (goto-char p1) 352 (goto-char p2)
395 (if (re-search-forward ".+[^<][^b][^r][^>]$" p2 t) 353 (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t)
396 (progn 354 (next-line 1)
397 (beginning-of-line) 355 (end-of-line)
398 (setq refill-start (point)) 356 ;; refill-stop should ideally be adjusted to
399 (goto-char p2) 357 ;; accomodate the "<br>" strings which are removed
400 (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t) 358 ;; between refill-start and refill-stop. Can simply
401 (next-line 1) 359 ;; be returned from my-replace-string
402 (end-of-line) 360 (setq refill-stop (+ (point)
403 ;; refill-stop should ideally be adjusted to 361 (html2text-replace-string
404 ;; accomodate the "<br>" strings which are removed 362 "<br>" ""
405 ;; between refill-start and refill-stop. Can simply 363 refill-start (point))))
406 ;; be returned from my-replace-string 364 ;; (message "Point = %s refill-stop = %s" (point) refill-stop)
407 (setq refill-stop (+ (point) 365 ;; (sleep-for 4)
408 (html2text-replace-string 366 (fill-region refill-start refill-stop))))
409 "<br>" "" 367 (html2text-replace-string "<br>" "" p1 p2))
410 refill-start (point))))
411 ;; (message "Point = %s refill-stop = %s" (point) refill-stop)
412 ;; (sleep-for 4)
413 (fill-region refill-start refill-stop)
414 )
415 )
416 )
417 )
418 )
419 (html2text-replace-string "<br>" "" p1 p2)
420 )
421 368
422;; 369;;
423;; This one is interactive ... 370;; This one is interactive ...
@@ -452,7 +399,7 @@ fashion, quite close to pure guess-work. It does work in some cases though."
452;; 399;;
453 400
454(defun html2text-remove-tags (tag-list) 401(defun html2text-remove-tags (tag-list)
455 "Removes the tags listed in the list \"html2text-remove-tag-list\". 402 "Removes the tags listed in the list `html2text-remove-tag-list'.
456See the documentation for that variable." 403See the documentation for that variable."
457 (interactive) 404 (interactive)
458 (dolist (tag tag-list) 405 (dolist (tag tag-list)
@@ -461,7 +408,7 @@ See the documentation for that variable."
461 (delete-region (match-beginning 0) (match-end 0))))) 408 (delete-region (match-beginning 0) (match-end 0)))))
462 409
463(defun html2text-format-tags () 410(defun html2text-format-tags ()
464 "See the variable \"html2text-format-tag-list\" for documentation" 411 "See the variable `html2text-format-tag-list' for documentation."
465 (interactive) 412 (interactive)
466 (dolist (tag-and-function html2text-format-tag-list) 413 (dolist (tag-and-function html2text-format-tag-list)
467 (let ((tag (car tag-and-function)) 414 (let ((tag (car tag-and-function))
@@ -471,8 +418,7 @@ See the documentation for that variable."
471 (point-max) t) 418 (point-max) t)
472 (let ((p1) 419 (let ((p1)
473 (p2 (point)) 420 (p2 (point))
474 (p3) (p4) 421 (p3) (p4))
475 (attr (match-string 1)))
476 (search-backward "<" (point-min) t) 422 (search-backward "<" (point-min) t)
477 (setq p1 (point)) 423 (setq p1 (point))
478 (re-search-forward (format "</%s>" tag) (point-max) t) 424 (re-search-forward (format "</%s>" tag) (point-max) t)
@@ -480,27 +426,18 @@ See the documentation for that variable."
480 (search-backward "</" (point-min) t) 426 (search-backward "</" (point-min) t)
481 (setq p3 (point)) 427 (setq p3 (point))
482 (funcall function p1 p2 p3 p4) 428 (funcall function p1 p2 p3 p4)
483 (goto-char p1) 429 (goto-char p1))))))
484 )
485 )
486 )
487 )
488 )
489 430
490(defun html2text-substitute () 431(defun html2text-substitute ()
491 "See the variable \"html2text-replace-list\" for documentation" 432 "See the variable `html2text-replace-list' for documentation."
492 (interactive) 433 (interactive)
493 (dolist (e html2text-replace-list) 434 (dolist (e html2text-replace-list)
494 (goto-char (point-min)) 435 (goto-char (point-min))
495 (let ((old-string (car e)) 436 (let ((old-string (car e))
496 (new-string (cdr e))) 437 (new-string (cdr e)))
497 (html2text-replace-string old-string new-string (point-min) (point-max)) 438 (html2text-replace-string old-string new-string (point-min) (point-max)))))
498 )
499 )
500 )
501 439
502(defun html2text-format-single-elements () 440(defun html2text-format-single-elements ()
503 ""
504 (interactive) 441 (interactive)
505 (dolist (tag-and-function html2text-format-single-element-list) 442 (dolist (tag-and-function html2text-format-single-element-list)
506 (let ((tag (car tag-and-function)) 443 (let ((tag (car tag-and-function))
@@ -512,12 +449,7 @@ See the documentation for that variable."
512 (p2 (point))) 449 (p2 (point)))
513 (search-backward "<" (point-min) t) 450 (search-backward "<" (point-min) t)
514 (setq p1 (point)) 451 (setq p1 (point))
515 (funcall function p1 p2) 452 (funcall function p1 p2))))))
516 )
517 )
518 )
519 )
520 )
521 453
522;; 454;;
523;; Main function 455;; Main function
@@ -540,6 +472,6 @@ See the documentation for that variable."
540;; 472;;
541;; </Interactive functions> 473;; </Interactive functions>
542;; 474;;
543 475(provide 'html2text)
544;;; arch-tag: e9e57b79-35d4-4de1-a647-e7e01fe56d1e 476;;; arch-tag: e9e57b79-35d4-4de1-a647-e7e01fe56d1e
545;;; html2text.el ends here 477;;; html2text.el ends here
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 585a72af549..fb63d6724be 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -587,6 +587,7 @@ Done before generating the new subject of a forward."
587 non-word-constituents 587 non-word-constituents
588 "]\\)+>+\\|[ \t]*[]>|}+]\\)+")))) 588 "]\\)+>+\\|[ \t]*[]>|}+]\\)+"))))
589 "*Regexp matching the longest possible citation prefix on a line." 589 "*Regexp matching the longest possible citation prefix on a line."
590 :version "21.4"
590 :group 'message-insertion 591 :group 'message-insertion
591 :link '(custom-manual "(message)Insertion Variables") 592 :link '(custom-manual "(message)Insertion Variables")
592 :type 'regexp) 593 :type 'regexp)
@@ -743,6 +744,7 @@ Doing so would be even more evil than leaving it out."
743 "*Envelope-from when sending mail with sendmail. 744 "*Envelope-from when sending mail with sendmail.
744If this is nil, use `user-mail-address'. If it is the symbol 745If this is nil, use `user-mail-address'. If it is the symbol
745`header', use the From: header of the message." 746`header', use the From: header of the message."
747 :version "21.4"
746 :type '(choice (string :tag "From name") 748 :type '(choice (string :tag "From name")
747 (const :tag "Use From: header from message" header) 749 (const :tag "Use From: header from message" header)
748 (const :tag "Use `user-mail-address'" nil)) 750 (const :tag "Use `user-mail-address'" nil))
@@ -855,7 +857,8 @@ the signature is inserted."
855 (let ((map (make-sparse-keymap 'message-minibuffer-local-map))) 857 (let ((map (make-sparse-keymap 'message-minibuffer-local-map)))
856 (set-keymap-parent map minibuffer-local-map) 858 (set-keymap-parent map minibuffer-local-map)
857 map) 859 map)
858 "Keymap for `message-read-from-minibuffer'.") 860 "Keymap for `message-read-from-minibuffer'."
861 :version "21.4")
859 862
860;;;###autoload 863;;;###autoload
861(defcustom message-citation-line-function 'message-insert-citation-line 864(defcustom message-citation-line-function 'message-insert-citation-line
@@ -1435,6 +1438,7 @@ no, only reply back to the author."
1435 1438
1436(defcustom message-user-fqdn nil 1439(defcustom message-user-fqdn nil
1437 "*Domain part of Messsage-Ids." 1440 "*Domain part of Messsage-Ids."
1441 :version "21.4"
1438 :group 'message-headers 1442 :group 'message-headers
1439 :link '(custom-manual "(message)News Headers") 1443 :link '(custom-manual "(message)News Headers")
1440 :type '(radio (const :format "%v " nil) 1444 :type '(radio (const :format "%v " nil)
@@ -6590,6 +6594,7 @@ which specify the range to operate on."
6590 '("^\\(Disposition-Notification-To\\|Return-Receipt-To\\):" 6594 '("^\\(Disposition-Notification-To\\|Return-Receipt-To\\):"
6591 . message-expand-name)) 6595 . message-expand-name))
6592 "Alist of (RE . FUN). Use FUN for completion on header lines matching RE." 6596 "Alist of (RE . FUN). Use FUN for completion on header lines matching RE."
6597 :version "21.4"
6593 :group 'message 6598 :group 'message
6594 :type '(alist :key-type regexp :value-type function)) 6599 :type '(alist :key-type regexp :value-type function))
6595 6600
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 51ec38dc387..b167ea7d104 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -150,12 +150,14 @@ when displaying the image. The default value is \"\\\\`cid:\" which only
150matches parts embedded to the Multipart/Related type MIME contents and 150matches parts embedded to the Multipart/Related type MIME contents and
151Gnus will never connect to the spammer's site arbitrarily. You may 151Gnus will never connect to the spammer's site arbitrarily. You may
152set this variable to nil if you consider all urls to be safe." 152set this variable to nil if you consider all urls to be safe."
153 :version "21.4"
153 :type '(choice (regexp :tag "Regexp") 154 :type '(choice (regexp :tag "Regexp")
154 (const :tag "All URLs are safe" nil)) 155 (const :tag "All URLs are safe" nil))
155 :group 'mime-display) 156 :group 'mime-display)
156 157
157(defcustom mm-inline-text-html-with-w3m-keymap t 158(defcustom mm-inline-text-html-with-w3m-keymap t
158 "If non-nil, use emacs-w3m command keys in the article buffer." 159 "If non-nil, use emacs-w3m command keys in the article buffer."
160 :version "21.4"
159 :type 'boolean 161 :type 'boolean
160 :group 'mime-display) 162 :group 'mime-display)
161 163
@@ -378,6 +380,7 @@ If not set, `default-directory' will be used."
378 380
379(defcustom mm-attachment-file-modes 384 381(defcustom mm-attachment-file-modes 384
380 "Set the mode bits of saved attachments to this integer." 382 "Set the mode bits of saved attachments to this integer."
383 :version "21.4"
381 :type 'integer 384 :type 'integer
382 :group 'mime-display) 385 :group 'mime-display)
383 386
@@ -435,6 +438,7 @@ If not set, `default-directory' will be used."
435 "Option of decrypting encrypted parts. 438 "Option of decrypting encrypted parts.
436`never', not decrypt; `always', always decrypt; 439`never', not decrypt; `always', always decrypt;
437`known', only decrypt known protocols. Otherwise, ask user." 440`known', only decrypt known protocols. Otherwise, ask user."
441 :version "21.4"
438 :type '(choice (item always) 442 :type '(choice (item always)
439 (item never) 443 (item never)
440 (item :tag "only known protocols" known) 444 (item :tag "only known protocols" known)
diff --git a/lisp/gnus/mm-url.el b/lisp/gnus/mm-url.el
index 1652dbca245..1388371c981 100644
--- a/lisp/gnus/mm-url.el
+++ b/lisp/gnus/mm-url.el
@@ -49,6 +49,7 @@
49 (require 'url) 49 (require 'url)
50 (error nil))) 50 (error nil)))
51 "*If non-nil, use external grab program `mm-url-program'." 51 "*If non-nil, use external grab program `mm-url-program'."
52 :version "21.4"
52 :type 'boolean 53 :type 'boolean
53 :group 'mm-url) 54 :group 'mm-url)
54 55
@@ -67,6 +68,7 @@
67 (t "GET")) 68 (t "GET"))
68 "The url grab program. 69 "The url grab program.
69Likely values are `wget', `w3m', `lynx' and `curl'." 70Likely values are `wget', `w3m', `lynx' and `curl'."
71 :version "21.4"
70 :type '(choice 72 :type '(choice
71 (symbol :tag "wget" wget) 73 (symbol :tag "wget" wget)
72 (symbol :tag "w3m" w3m) 74 (symbol :tag "w3m" w3m)
@@ -77,6 +79,7 @@ Likely values are `wget', `w3m', `lynx' and `curl'."
77 79
78(defcustom mm-url-arguments nil 80(defcustom mm-url-arguments nil
79 "The arguments for `mm-url-program'." 81 "The arguments for `mm-url-program'."
82 :version "21.4"
80 :type '(repeat string) 83 :type '(repeat string)
81 :group 'mm-url) 84 :group 'mm-url)
82 85
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index b68b4ec584c..382133a027e 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -123,13 +123,16 @@
123 123
124(defun mm-coding-system-p (cs) 124(defun mm-coding-system-p (cs)
125 "Return non-nil if CS is a symbol naming a coding system. 125 "Return non-nil if CS is a symbol naming a coding system.
126In XEmacs, also return non-nil if CS is a coding system object." 126In XEmacs, also return non-nil if CS is a coding system object.
127If CS is available, return CS itself in Emacs, and return a coding
128system object in XEmacs."
127 (if (fboundp 'find-coding-system) 129 (if (fboundp 'find-coding-system)
128 (find-coding-system cs) 130 (find-coding-system cs)
129 (if (fboundp 'coding-system-p) 131 (if (fboundp 'coding-system-p)
130 (coding-system-p cs) 132 (when (coding-system-p cs)
133 cs)
131 ;; Is this branch ever actually useful? 134 ;; Is this branch ever actually useful?
132 (memq cs (mm-get-coding-system-list))))) 135 (car (memq cs (mm-get-coding-system-list))))))
133 136
134(defvar mm-charset-synonym-alist 137(defvar mm-charset-synonym-alist
135 `( 138 `(
@@ -219,12 +222,12 @@ In XEmacs, also return non-nil if CS is a coding system object."
219 (big5 chinese-big5-1 chinese-big5-2) 222 (big5 chinese-big5-1 chinese-big5-2)
220 (tibetan tibetan) 223 (tibetan tibetan)
221 (thai-tis620 thai-tis620) 224 (thai-tis620 thai-tis620)
225 (windows-1251 cyrillic-iso8859-5)
222 (iso-2022-7bit ethiopic arabic-1-column arabic-2-column) 226 (iso-2022-7bit ethiopic arabic-1-column arabic-2-column)
223 (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7 227 (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7
224 latin-jisx0201 japanese-jisx0208-1978 228 latin-jisx0201 japanese-jisx0208-1978
225 chinese-gb2312 japanese-jisx0208 229 chinese-gb2312 japanese-jisx0208
226 korean-ksc5601 japanese-jisx0212 230 korean-ksc5601 japanese-jisx0212)
227 katakana-jisx0201)
228 (iso-2022-int-1 latin-iso8859-1 greek-iso8859-7 231 (iso-2022-int-1 latin-iso8859-1 greek-iso8859-7
229 latin-jisx0201 japanese-jisx0208-1978 232 latin-jisx0201 japanese-jisx0208-1978
230 chinese-gb2312 japanese-jisx0208 233 chinese-gb2312 japanese-jisx0208
@@ -239,6 +242,9 @@ In XEmacs, also return non-nil if CS is a coding system object."
239 chinese-cns11643-3 chinese-cns11643-4 242 chinese-cns11643-3 chinese-cns11643-4
240 chinese-cns11643-5 chinese-cns11643-6 243 chinese-cns11643-5 chinese-cns11643-6
241 chinese-cns11643-7) 244 chinese-cns11643-7)
245 (iso-2022-jp-3 latin-jisx0201 japanese-jisx0208-1978 japanese-jisx0208
246 japanese-jisx0213-1 japanese-jisx0213-2)
247 (shift_jis latin-jisx0201 katakana-jisx0201 japanese-jisx0208)
242 ,(if (or (not (fboundp 'charsetp)) ;; non-Mule case 248 ,(if (or (not (fboundp 'charsetp)) ;; non-Mule case
243 (charsetp 'unicode-a) 249 (charsetp 'unicode-a)
244 (not (mm-coding-system-p 'mule-utf-8))) 250 (not (mm-coding-system-p 'mule-utf-8)))
@@ -249,24 +255,47 @@ In XEmacs, also return non-nil if CS is a coding system object."
249 (coding-system-get 'mule-utf-8 'safe-charsets))))) 255 (coding-system-get 'mule-utf-8 'safe-charsets)))))
250 "Alist of MIME-charset/MULE-charsets.") 256 "Alist of MIME-charset/MULE-charsets.")
251 257
252;; Correct by construction, but should be unnecessary: 258(defun mm-enrich-utf-8-by-mule-ucs ()
253;; XEmacs hates it. 259 "Make the `utf-8' MIME charset usable by the Mule-UCS package.
254(when (and (not (featurep 'xemacs)) 260This function will run when the `un-define' module is loaded under
255 (fboundp 'coding-system-list) 261XEmacs, and fill the `utf-8' entry in `mm-mime-mule-charset-alist'
256 (fboundp 'sort-coding-systems)) 262with Mule charsets. It is completely useless for Emacs."
257 (setq mm-mime-mule-charset-alist 263 (unless (cdr (delete '(mm-enrich-utf-8-by-mule-ucs)
258 (apply 264 (assoc "un-define" after-load-alist)))
259 'nconc 265 (setq after-load-alist
260 (mapcar 266 (delete '("un-define") after-load-alist)))
261 (lambda (cs) 267 (when (boundp 'unicode-basic-translation-charset-order-list)
262 (when (and (or (coding-system-get cs :mime-charset) ; Emacs 22 268 (condition-case nil
263 (coding-system-get cs 'mime-charset)) 269 (let ((val (delq
264 (not (eq t (coding-system-get cs 'safe-charsets)))) 270 'ascii
265 (list (cons (or (coding-system-get cs :mime-charset) 271 (copy-sequence
266 (coding-system-get cs 'mime-charset)) 272 (symbol-value
267 (delq 'ascii 273 'unicode-basic-translation-charset-order-list))))
268 (coding-system-get cs 'safe-charsets)))))) 274 (elem (assq 'utf-8 mm-mime-mule-charset-alist)))
269 (sort-coding-systems (coding-system-list 'base-only)))))) 275 (if elem
276 (setcdr elem val)
277 (setq mm-mime-mule-charset-alist
278 (nconc mm-mime-mule-charset-alist
279 (list (cons 'utf-8 val))))))
280 (error))))
281
282;; Correct by construction, but should be unnecessary for Emacs:
283(if (featurep 'xemacs)
284 (eval-after-load "un-define" '(mm-enrich-utf-8-by-mule-ucs))
285 (when (and (fboundp 'coding-system-list)
286 (fboundp 'sort-coding-systems))
287 (let ((css (sort-coding-systems (coding-system-list 'base-only)))
288 cs mime mule alist)
289 (while css
290 (setq cs (pop css)
291 mime (or (coding-system-get cs :mime-charset) ; Emacs 22
292 (coding-system-get cs 'mime-charset)))
293 (when (and mime
294 (not (eq t (setq mule
295 (coding-system-get cs 'safe-charsets))))
296 (not (assq mime alist)))
297 (push (cons mime (delq 'ascii mule)) alist)))
298 (setq mm-mime-mule-charset-alist (nreverse alist)))))
270 299
271(defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2) 300(defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2)
272 "A list of special charsets. 301 "A list of special charsets.
@@ -332,16 +361,20 @@ mail with multiple parts is preferred to sending a Unicode one.")
332 "Return the MIME charset corresponding to the given Mule CHARSET." 361 "Return the MIME charset corresponding to the given Mule CHARSET."
333 (if (and (fboundp 'find-coding-systems-for-charsets) 362 (if (and (fboundp 'find-coding-systems-for-charsets)
334 (fboundp 'sort-coding-systems)) 363 (fboundp 'sort-coding-systems))
335 (let (mime) 364 (let ((css (sort (sort-coding-systems
336 (dolist (cs (sort-coding-systems 365 (find-coding-systems-for-charsets (list charset)))
337 (copy-sequence 366 'mm-sort-coding-systems-predicate))
338 (find-coding-systems-for-charsets (list charset))))) 367 cs mime)
339 (unless mime 368 (while (and (not mime)
340 (when cs 369 css)
341 (setq mime (or (coding-system-get cs :mime-charset) 370 (when (setq cs (pop css))
342 (coding-system-get cs 'mime-charset)))))) 371 (setq mime (or (coding-system-get cs :mime-charset)
372 (coding-system-get cs 'mime-charset)))))
343 mime) 373 mime)
344 (let ((alist mm-mime-mule-charset-alist) 374 (let ((alist (mapcar (lambda (cs)
375 (assq cs mm-mime-mule-charset-alist))
376 (sort (mapcar 'car mm-mime-mule-charset-alist)
377 'mm-sort-coding-systems-predicate)))
345 out) 378 out)
346 (while alist 379 (while alist
347 (when (memq charset (cdar alist)) 380 (when (memq charset (cdar alist))
@@ -534,11 +567,14 @@ This affects whether coding conversion should be attempted generally."
534 (let ((priorities 567 (let ((priorities
535 (mapcar (lambda (cs) 568 (mapcar (lambda (cs)
536 ;; Note: invalid entries are dropped silently 569 ;; Note: invalid entries are dropped silently
537 (and (coding-system-p cs) 570 (and (setq cs (mm-coding-system-p cs))
538 (coding-system-base cs))) 571 (coding-system-base cs)))
539 mm-coding-system-priorities))) 572 mm-coding-system-priorities)))
540 (> (length (memq a priorities)) 573 (and (setq a (mm-coding-system-p a))
541 (length (memq b priorities))))) 574 (if (setq b (mm-coding-system-p b))
575 (> (length (memq (coding-system-base a) priorities))
576 (length (memq (coding-system-base b) priorities)))
577 t))))
542 578
543(defun mm-find-mime-charset-region (b e &optional hack-charsets) 579(defun mm-find-mime-charset-region (b e &optional hack-charsets)
544 "Return the MIME charsets needed to encode the region between B and E. 580 "Return the MIME charsets needed to encode the region between B and E.
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 17fa59311db..b140cb76df5 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -80,6 +80,7 @@ This can be either \"inline\" or \"attachment\".")
80 80
81(defcustom mm-uu-diff-groups-regexp "gnus\\.commits" 81(defcustom mm-uu-diff-groups-regexp "gnus\\.commits"
82 "*Regexp matching diff groups." 82 "*Regexp matching diff groups."
83 :version "21.4"
83 :type 'regexp 84 :type 'regexp
84 :group 'gnus-article-mime) 85 :group 'gnus-article-mime)
85 86
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index b8107364411..8bd2ed784ad 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -43,6 +43,7 @@
43(defcustom mml-default-sign-method "pgpmime" 43(defcustom mml-default-sign-method "pgpmime"
44 "Default sign method. 44 "Default sign method.
45The string must have an entry in `mml-sign-alist'." 45The string must have an entry in `mml-sign-alist'."
46 :version "21.4"
46 :type '(choice (const "smime") 47 :type '(choice (const "smime")
47 (const "pgp") 48 (const "pgp")
48 (const "pgpauto") 49 (const "pgpauto")
@@ -60,6 +61,7 @@ The string must have an entry in `mml-sign-alist'."
60(defcustom mml-default-encrypt-method "pgpmime" 61(defcustom mml-default-encrypt-method "pgpmime"
61 "Default encryption method. 62 "Default encryption method.
62The string must have an entry in `mml-encrypt-alist'." 63The string must have an entry in `mml-encrypt-alist'."
64 :version "21.4"
63 :type '(choice (const "smime") 65 :type '(choice (const "smime")
64 (const "pgp") 66 (const "pgp")
65 (const "pgpauto") 67 (const "pgpauto")
@@ -83,6 +85,7 @@ Note that the output generated by using a `combined' mode is NOT
83understood by all PGP implementations, in particular PGP version 85understood by all PGP implementations, in particular PGP version
842 does not support it! See Info node `(message)Security' for 862 does not support it! See Info node `(message)Security' for
85details." 87details."
88 :version "21.4"
86 :group 'message 89 :group 'message
87 :type '(repeat (list (choice (const :tag "S/MIME" "smime") 90 :type '(repeat (list (choice (const :tag "S/MIME" "smime")
88 (const :tag "PGP" "pgp") 91 (const :tag "PGP" "pgp")
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index 6c89cfbe798..e083c2c9d9c 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -83,6 +83,7 @@
83 ("TRUST_FULLY" . t) 83 ("TRUST_FULLY" . t)
84 ("TRUST_ULTIMATE" . t)) 84 ("TRUST_ULTIMATE" . t))
85 "Map GnuPG trust output values to a boolean saying if you trust the key." 85 "Map GnuPG trust output values to a boolean saying if you trust the key."
86 :version "21.4"
86 :group 'mime-security 87 :group 'mime-security
87 :type '(repeat (cons (regexp :tag "GnuPG output regexp") 88 :type '(repeat (cons (regexp :tag "GnuPG output regexp")
88 (boolean :tag "Trust key")))) 89 (boolean :tag "Trust key"))))
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 81d5443b640..13000a8ad19 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -223,6 +223,7 @@
223 223
224(defgroup nndiary nil 224(defgroup nndiary nil
225 "The Gnus Diary backend." 225 "The Gnus Diary backend."
226 :version "21.4"
226 :group 'gnus-diary) 227 :group 'gnus-diary)
227 228
228(defcustom nndiary-mail-sources 229(defcustom nndiary-mail-sources
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index c1a23d8ca9b..040be1e60e1 100644
--- a/lisp/gnus/nnmail.el
+++ b/lisp/gnus/nnmail.el
@@ -119,6 +119,7 @@ If nil, the first match found will be used."
119(defcustom nnmail-split-fancy-with-parent-ignore-groups nil 119(defcustom nnmail-split-fancy-with-parent-ignore-groups nil
120 "Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'. 120 "Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'.
121This can also be a list of regexps." 121This can also be a list of regexps."
122 :version "21.4"
122 :group 'nnmail-split 123 :group 'nnmail-split
123 :type '(choice (const :tag "none" nil) 124 :type '(choice (const :tag "none" nil)
124 (regexp :value ".*") 125 (regexp :value ".*")
@@ -127,6 +128,7 @@ This can also be a list of regexps."
127(defcustom nnmail-cache-ignore-groups nil 128(defcustom nnmail-cache-ignore-groups nil
128 "Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert'). 129 "Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert').
129This can also be a list of regexps." 130This can also be a list of regexps."
131 :version "21.4"
130 :group 'nnmail-split 132 :group 'nnmail-split
131 :type '(choice (const :tag "none" nil) 133 :type '(choice (const :tag "none" nil)
132 (regexp :value ".*") 134 (regexp :value ".*")
@@ -353,6 +355,7 @@ discarded after running the split process."
353 355
354(defcustom nnmail-spool-hook nil 356(defcustom nnmail-spool-hook nil
355 "*A hook called when a new article is spooled." 357 "*A hook called when a new article is spooled."
358 :version "21.4"
356 :group 'nnmail 359 :group 'nnmail
357 :type 'hook) 360 :type 'hook)
358 361
@@ -575,6 +578,7 @@ Normally, regexes given in `nnmail-split-fancy' are implicitly surrounded
575by \"\\=\\<...\\>\". If this variable is true, they are not implicitly\ 578by \"\\=\\<...\\>\". If this variable is true, they are not implicitly\
576 surrounded 579 surrounded
577by anything." 580by anything."
581 :version "21.4"
578 :group 'nnmail 582 :group 'nnmail
579 :type 'boolean) 583 :type 'boolean)
580 584
@@ -582,6 +586,7 @@ by anything."
582 "Whether to lowercase expanded entries (i.e. \\N) when splitting mails. 586 "Whether to lowercase expanded entries (i.e. \\N) when splitting mails.
583This avoids the creation of multiple groups when users send to an address 587This avoids the creation of multiple groups when users send to an address
584using different case (i.e. mailing-list@domain vs Mailing-List@Domain)." 588using different case (i.e. mailing-list@domain vs Mailing-List@Domain)."
589 :version "21.4"
585 :group 'nnmail 590 :group 'nnmail
586 :type 'boolean) 591 :type 'boolean)
587 592
diff --git a/lisp/gnus/pgg-def.el b/lisp/gnus/pgg-def.el
index b8d9cbec807..046f57dbbfe 100644
--- a/lisp/gnus/pgg-def.el
+++ b/lisp/gnus/pgg-def.el
@@ -29,7 +29,8 @@
29 29
30(defgroup pgg () 30(defgroup pgg ()
31 "Glue for the various PGP implementations." 31 "Glue for the various PGP implementations."
32 :group 'mime) 32 :group 'mime
33 :version "21.4")
33 34
34(defcustom pgg-default-scheme 'gpg 35(defcustom pgg-default-scheme 'gpg
35 "Default PGP scheme." 36 "Default PGP scheme."
diff --git a/lisp/gnus/sha1.el b/lisp/gnus/sha1.el
index a9b68805d3f..51a826fe5fc 100644
--- a/lisp/gnus/sha1.el
+++ b/lisp/gnus/sha1.el
@@ -60,6 +60,7 @@
60 60
61(defgroup sha1 nil 61(defgroup sha1 nil
62 "Elisp interface for SHA1 hash computation." 62 "Elisp interface for SHA1 hash computation."
63 :version "21.4"
63 :group 'extensions) 64 :group 'extensions)
64 65
65(defcustom sha1-maximum-internal-length 500 66(defcustom sha1-maximum-internal-length 500
@@ -82,7 +83,6 @@ It must be a string \(program name\) or list of strings \(name and its args\)."
82 (error)) 83 (error))
83 "*Use external SHA1 program. 84 "*Use external SHA1 program.
84If this variable is set to nil, use internal function only." 85If this variable is set to nil, use internal function only."
85 :version "21.4"
86 :type 'boolean 86 :type 'boolean
87 :group 'sha1) 87 :group 'sha1)
88 88
diff --git a/lisp/gnus/sieve.el b/lisp/gnus/sieve.el
index f4645168dec..c37ffb616db 100644
--- a/lisp/gnus/sieve.el
+++ b/lisp/gnus/sieve.el
@@ -65,6 +65,7 @@
65 65
66(defgroup sieve nil 66(defgroup sieve nil
67 "Manage sieve scripts." 67 "Manage sieve scripts."
68 :version "21.4"
68 :group 'tools) 69 :group 'tools)
69 70
70(defcustom sieve-new-script "<new script>" 71(defcustom sieve-new-script "<new script>"
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index f197d165cdd..eb33b7ad0b3 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -128,6 +128,7 @@
128Use the functions to build a dictionary of words and their statistical 128Use the functions to build a dictionary of words and their statistical
129distribution in spam and non-spam mails. Then use a function to determine 129distribution in spam and non-spam mails. Then use a function to determine
130whether a buffer contains spam or not." 130whether a buffer contains spam or not."
131 :version "21.4"
131 :group 'gnus) 132 :group 'gnus)
132 133
133(defcustom spam-stat-file "~/.spam-stat.el" 134(defcustom spam-stat-file "~/.spam-stat.el"
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index 1dc9058dd1f..075408b8fc7 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -76,7 +76,8 @@
76;;; Main parameters. 76;;; Main parameters.
77 77
78(defgroup spam nil 78(defgroup spam nil
79 "Spam configuration.") 79 "Spam configuration."
80 :version "21.4")
80 81
81(defcustom spam-directory (nnheader-concat gnus-directory "spam/") 82(defcustom spam-directory (nnheader-concat gnus-directory "spam/")
82 "Directory for spam whitelists and blacklists." 83 "Directory for spam whitelists and blacklists."
diff --git a/lisp/gnus/starttls.el b/lisp/gnus/starttls.el
index c172e88c515..7a2eef5e7d0 100644
--- a/lisp/gnus/starttls.el
+++ b/lisp/gnus/starttls.el
@@ -126,6 +126,7 @@
126 "Name of GNUTLS command line tool. 126 "Name of GNUTLS command line tool.
127This program is used when GNUTLS is used, i.e. when 127This program is used when GNUTLS is used, i.e. when
128`starttls-use-gnutls' is non-nil." 128`starttls-use-gnutls' is non-nil."
129 :version "21.4"
129 :type 'string 130 :type 'string
130 :group 'starttls) 131 :group 'starttls)
131 132
@@ -138,6 +139,7 @@ i.e. when `starttls-use-gnutls' is nil."
138 139
139(defcustom starttls-use-gnutls (not (executable-find starttls-program)) 140(defcustom starttls-use-gnutls (not (executable-find starttls-program))
140 "*Whether to use GNUTLS instead of the `starttls' command." 141 "*Whether to use GNUTLS instead of the `starttls' command."
142 :version "21.4"
141 :type 'boolean 143 :type 'boolean
142 :group 'starttls) 144 :group 'starttls)
143 145
@@ -156,11 +158,13 @@ This program is used when GNUTLS is used, i.e. when
156For example, non-TLS compliant servers may require 158For example, non-TLS compliant servers may require
157'(\"--protocols\" \"ssl3\"). Invoke \"gnutls-cli --help\" to 159'(\"--protocols\" \"ssl3\"). Invoke \"gnutls-cli --help\" to
158find out which parameters are available." 160find out which parameters are available."
161 :version "21.4"
159 :type '(repeat string) 162 :type '(repeat string)
160 :group 'starttls) 163 :group 'starttls)
161 164
162(defcustom starttls-process-connection-type nil 165(defcustom starttls-process-connection-type nil
163 "*Value for `process-connection-type' to use when starting STARTTLS process." 166 "*Value for `process-connection-type' to use when starting STARTTLS process."
167 :version "21.4"
164 :type 'boolean 168 :type 'boolean
165 :group 'starttls) 169 :group 'starttls)
166 170
@@ -170,6 +174,7 @@ The default is what GNUTLS's \"gnutls-cli\" outputs."
170 ;; GNUTLS cli.c:main() print this string when it is starting to run 174 ;; GNUTLS cli.c:main() print this string when it is starting to run
171 ;; in the application read/write phase. If the logic, or the string 175 ;; in the application read/write phase. If the logic, or the string
172 ;; itself, is modified, this must be updated. 176 ;; itself, is modified, this must be updated.
177 :version "21.4"
173 :type 'regexp 178 :type 'regexp
174 :group 'starttls) 179 :group 'starttls)
175 180
@@ -178,6 +183,7 @@ The default is what GNUTLS's \"gnutls-cli\" outputs."
178The default is what GNUTLS's \"gnutls-cli\" outputs." 183The default is what GNUTLS's \"gnutls-cli\" outputs."
179 ;; GNUTLS cli.c:do_handshake() print this string on failure. If the 184 ;; GNUTLS cli.c:do_handshake() print this string on failure. If the
180 ;; logic, or the string itself, is modified, this must be updated. 185 ;; logic, or the string itself, is modified, this must be updated.
186 :version "21.4"
181 :type 'regexp 187 :type 'regexp
182 :group 'starttls) 188 :group 'starttls)
183 189
@@ -188,6 +194,7 @@ The default is what GNUTLS's \"gnutls-cli\" outputs."
188 ;; common.c:print_info(), that unconditionally print this string 194 ;; common.c:print_info(), that unconditionally print this string
189 ;; last. If that logic, or the string itself, is modified, this 195 ;; last. If that logic, or the string itself, is modified, this
190 ;; must be updated. 196 ;; must be updated.
197 :version "21.4"
191 :type 'regexp 198 :type 'regexp
192 :group 'starttls) 199 :group 'starttls)
193 200