aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2008-03-29 19:54:11 +0000
committerMiles Bader2008-03-29 19:54:11 +0000
commit9b3ebcb696524f3711c46a4386e54e9ab5388b74 (patch)
treeb5ff6dd7cf06b6dc284026824b0f052fb2644b01
parent9c06a1f304c51d595df7f9225f70f3d35af010fb (diff)
downloademacs-9b3ebcb696524f3711c46a4386e54e9ab5388b74.tar.gz
emacs-9b3ebcb696524f3711c46a4386e54e9ab5388b74.zip
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1104
-rw-r--r--doc/misc/ChangeLog46
-rw-r--r--doc/misc/gnus-faq.texi21
-rw-r--r--doc/misc/gnus-news.texi22
-rw-r--r--doc/misc/gnus.texi134
-rw-r--r--lisp/gnus/ChangeLog143
-rw-r--r--lisp/gnus/auth-source.el150
-rw-r--r--lisp/gnus/gnus-art.el72
-rw-r--r--lisp/gnus/gnus-group.el61
-rw-r--r--lisp/gnus/gnus-registry.el8
-rw-r--r--lisp/gnus/gnus-score.el12
-rw-r--r--lisp/gnus/gnus-sum.el23
-rw-r--r--lisp/gnus/mail-source.el3
-rw-r--r--lisp/gnus/message.el142
-rw-r--r--lisp/gnus/mml.el51
-rw-r--r--lisp/gnus/mml2015.el14
-rw-r--r--lisp/gnus/nnimap.el2
-rw-r--r--lisp/gnus/nnmh.el7
-rw-r--r--lisp/gnus/nntp.el20
18 files changed, 771 insertions, 160 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 5d13dbf0c11..26a5b116c21 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,45 @@
12008-03-22 Reiner Steib <Reiner.Steib@gmx.de>
2
3 * gnus.texi (Foreign Groups): Add gnus-read-ephemeral-gmane-group,
4 gnus-read-ephemeral-gmane-group-url,
5 gnus-read-ephemeral-emacs-bug-group,
6 gnus-read-ephemeral-debian-bug-group.
7
82008-03-21 Reiner Steib <Reiner.Steib@gmx.de>
9
10 * gnus.texi (MIME Commands): Add gnus-article-browse-html-article.
11
12 * gnus-news.texi: Add EasyPG. Add gnus-article-browse-html-article.
13 Add FIXMEs for Bookmarks and gnus-registry-marks.
14
152008-03-16 Reiner Steib <Reiner.Steib@gmx.de>
16
17 * gnus.texi (Smileys): Document `smiley-style'.
18
192008-03-21 Reiner Steib <Reiner.Steib@gmx.de>
20
21 * gnus.texi (Gnus Development): Clarify difference between ding and
22 gnu.emacs.gnus.
23 (MIME Commands, Using MIME, RSS): Fix markup.
24
25 * gnus-faq.texi ([8.4]): Ditto.
26
272008-03-20 Reiner Steib <Reiner.Steib@gmx.de>
28
29 * gnus.texi (Emacsen): Remove obsolete stuff.
30
312008-03-19 Reiner Steib <Reiner.Steib@gmx.de>
32
33 * gnus.texi (Oort Gnus): Add version info WRT
34 `mail-source-delete-incoming'.
35
362008-03-16 Reiner Steib <Reiner.Steib@gmx.de>
37
38 * gnus.texi (Top): Add "Other related manuals" and version info in
39 `iftex' output.
40 (Formatting Fonts): Add index entries for gnus-mouse-face, gnus-face-0,
41 gnus-balloon-face-0 and the corresponding format specifiers.
42
12008-03-26 Michael Albinus <michael.albinus@gmx.de> 432008-03-26 Michael Albinus <michael.albinus@gmx.de>
2 44
3 * tramp.texi (Filename completion): Remove footnote about let-bind 45 * tramp.texi (Filename completion): Remove footnote about let-bind
@@ -24,8 +66,8 @@
242008-03-14 Stefan Monnier <monnier@iro.umontreal.ca> 662008-03-14 Stefan Monnier <monnier@iro.umontreal.ca>
25 67
26 * gnus.texi (Example Methods, Direct Functions, Indirect Functions) 68 * gnus.texi (Example Methods, Direct Functions, Indirect Functions)
27 (Common Variables): Give precedence to the netcat methods over the telnet 69 (Common Variables): Give precedence to the netcat methods over the
28 methods, and mention that they are more reliable. 70 telnet methods, and mention that they are more reliable.
29 71
302008-03-13 Carsten Dominik <dominik@science.uva.nl> 722008-03-13 Carsten Dominik <dominik@science.uva.nl>
31 73
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index a626c20b541..8d482d5b487 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -2131,22 +2131,23 @@ Which mailing lists and newsgroups are there?
2131 2131
2132@subsubheading Answer 2132@subsubheading Answer
2133 2133
2134There's the newsgroup gnu.emacs.gnus 2134There's the newsgroup gnu.emacs.gnus (also available as
2135(also available as 2135@uref{http://dir.gmane.org/gmane.emacs.gnus.user,
2136@uref{http://dir.gmane.org/gmane.emacs.gnus.user, 2136gmane.emacs.gnus.user}) which deals with general Gnus questions. If you
2137gmane.emacs.gnus.user}) 2137have questions about development versions of Gnus, you should better ask
2138which deals with general Gnus questions. 2138on the ding mailing list, see below.
2139The ding mailing list (ding@@gnus.org) deals with development of
2140Gnus. You can read the ding list via NNTP, too under the name
2141@uref{http://dir.gmane.org/gmane.emacs.gnus.general,
2142gmane.emacs.gnus.general} from news.gmane.org.
2143 2139
2144If you want to stay in the big8, 2140If you want to stay in the big8,
2145news.software.newssreaders is also read by some Gnus 2141news.software.newssreaders is also read by some Gnus
2146users (but chances for qualified help are much better in 2142users (but chances for qualified help are much better in
2147the above groups) and if you speak German, there's 2143the above groups). If you speak German, there's
2148de.comm.software.gnus. 2144de.comm.software.gnus.
2149 2145
2146The ding mailing list (ding@@gnus.org) deals with development of
2147Gnus. You can read the ding list via NNTP, too under the name
2148@uref{http://dir.gmane.org/gmane.emacs.gnus.general,
2149gmane.emacs.gnus.general} from news.gmane.org.
2150
2150@node [8.5] 2151@node [8.5]
2151@subsubheading Question 8.5 2152@subsubheading Question 8.5
2152 2153
diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi
index 3e0a47dd7d8..f611bee067e 100644
--- a/doc/misc/gnus-news.texi
+++ b/doc/misc/gnus-news.texi
@@ -75,6 +75,12 @@ timeout of 16 seconds (see @code{password-cache-expiry}). If
75passphrase is managed by this mechanism. Passwords for ManageSieve 75passphrase is managed by this mechanism. Passwords for ManageSieve
76connections are managed by this mechanism, after querying the user 76connections are managed by this mechanism, after querying the user
77about whether to do so. 77about whether to do so.
78
79@item Using EasyPG with Gnus
80When EasyPG, is available, Gnus will use it instead of @acronym{PGG}.
81EasyPG is an Emacs user interface to GNU Privacy Guard. @xref{Top,
82,EasyPG Assistant user's manual, epa, EasyPG Assistant user's manual}.
83EasyPG is included in Emacs 23 and available separately as well.
78@end itemize 84@end itemize
79 85
80@item Changes in group mode 86@item Changes in group mode
@@ -98,6 +104,15 @@ Customization}.
98that are not reused when you select another article. @xref{Sticky 104that are not reused when you select another article. @xref{Sticky
99Articles}. 105Articles}.
100 106
107@c @item Bookmarks
108@c FIXME: To be added
109
110@item Gnus can selectively display @samp{text/html} articles
111with a WWW browser with @kbd{K H}. @xref{MIME Commands}.
112
113@c gnus-registry-marks
114@c FIXME: To be added
115
101@item International host names (@acronym{IDNA}) can now be decoded 116@item International host names (@acronym{IDNA}) can now be decoded
102inside article bodies using @kbd{W i} 117inside article bodies using @kbd{W i}
103(@code{gnus-summary-idna-message}). This requires that GNU Libidn 118(@code{gnus-summary-idna-message}). This requires that GNU Libidn
@@ -254,6 +269,13 @@ This feature, accessible via the functions
254renumbers all articles in a group, starting from 1 and removing gaps. 269renumbers all articles in a group, starting from 1 and removing gaps.
255As a consequence, you get a correct total article count (until 270As a consequence, you get a correct total article count (until
256messages are deleted again). 271messages are deleted again).
272
273@c @item nnmairix.el
274@c FIXME
275
276@c @item nnir.el
277@c FIXME
278
257@end itemize 279@end itemize
258 280
259@item Appearance 281@item Appearance
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 3a9945c10b6..e1dda4eadf4 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -391,6 +391,17 @@ like they want it to behave. A program should not control people;
391people should be empowered to do what they want by using (or abusing) 391people should be empowered to do what they want by using (or abusing)
392the program. 392the program.
393 393
394@c Adjust ../Makefile.in if you change the following line:
395This manual corresponds to Gnus v5.10.9.
396
397@heading Other related manuals
398@itemize
399@item Message manual: Composing messages
400@item Emacs-MIME: Composing messages; @acronym{MIME}-specific parts.
401@item Sieve: Managing Sieve scripts in Emacs.
402@item PGG: @acronym{PGP/MIME} with Gnus.
403@end itemize
404
394@end iftex 405@end iftex
395 406
396@menu 407@menu
@@ -2736,6 +2747,55 @@ groups from different @acronym{NNTP} servers. Also @pxref{Group Levels};
2736newsgroups. 2747newsgroups.
2737 2748
2738 2749
2750The following commands create ephemeral groups. They can be called not
2751only from the Group buffer, but in any Gnus buffer.
2752
2753@table @code
2754@item gnus-read-ephemeral-gmane-group
2755@findex gnus-read-ephemeral-gmane-group
2756@vindex gnus-gmane-group-download-format
2757Read an ephemeral group on Gmane.org. The articles are downloaded via
2758HTTP using the URL specified by @code{gnus-gmane-group-download-format}.
2759Gnus will prompt you for a group name, the start article number and an
2760the article range.
2761
2762@item gnus-read-ephemeral-gmane-group-url
2763@findex gnus-read-ephemeral-gmane-group-url
2764This command is similar to @code{gnus-read-ephemeral-gmane-group}, but
2765the group name and the article number and range are constructed from a
2766given @acronym{URL}. Supported @acronym{URL} formats include e.g.
2767@url{http://thread.gmane.org/gmane.foo.bar/12300/focus=12399},
2768@url{http://thread.gmane.org/gmane.foo.bar/12345/},
2769@url{http://article.gmane.org/gmane.foo.bar/12345/},
2770@url{http://permalink.gmane.org/gmane.foo.bar/12345/}, and
2771@url{http://news.gmane.org/group/gmane.foo.bar/thread=12345}.
2772
2773@item gnus-read-ephemeral-emacs-bug-group
2774@findex gnus-read-ephemeral-emacs-bug-group
2775Read an Emacs bug report in an ephemeral group. Gnus will prompt for a
2776bug number. The default is the number at point. The @acronym{URL} is
2777specified in @code{gnus-bug-group-download-format-alist}.
2778
2779@item gnus-read-ephemeral-debian-bug-group
2780@findex gnus-read-ephemeral-debian-bug-group
2781Read a Debian bug report in an ephemeral group. Analog to
2782@code{gnus-read-ephemeral-emacs-bug-group}.
2783@end table
2784
2785Some of these command are also useful for article buttons, @xref{Article
2786Buttons}.
2787
2788Here is an example:
2789@lisp
2790(require 'gnus-art)
2791(add-to-list
2792 'gnus-button-alist
2793 '("#\\([0-9]+\\)\\>" 1
2794 (string-match "\\<emacs\\>" (or gnus-newsgroup-name ""))
2795 gnus-read-ephemeral-emacs-bug-group 1))
2796@end lisp
2797
2798
2739@node Group Parameters 2799@node Group Parameters
2740@section Group Parameters 2800@section Group Parameters
2741@cindex group parameters 2801@cindex group parameters
@@ -9679,6 +9739,21 @@ The rest of these @acronym{MIME} commands do not use the numerical prefix in
9679the same manner: 9739the same manner:
9680 9740
9681@table @kbd 9741@table @kbd
9742@item K H
9743@kindex K H (Summary)
9744@findex gnus-article-browse-html-article
9745View @samp{text/html} parts of the current article with a WWW browser.
9746The message header is added to the beginning of every html part unless
9747the prefix argument is given.
9748
9749Warning: Spammers use links to images in HTML articles to verify whether
9750you have read the message. As this command passes the @acronym{HTML}
9751content to the browser without eliminating these ``web bugs'' you should
9752only use it for mails from trusted senders.
9753
9754If you always want to display @acronym{HTML} parts in the browser, set
9755@code{mm-text-html-renderer} to @code{nil}.
9756
9682@item K b 9757@item K b
9683@kindex K b (Summary) 9758@kindex K b (Summary)
9684Make all the @acronym{MIME} parts have buttons in front of them. This is 9759Make all the @acronym{MIME} parts have buttons in front of them. This is
@@ -9834,7 +9909,7 @@ Display "multipart/alternative" parts as "multipart/mixed".
9834@item gnus-mime-display-multipart-related-as-mixed 9909@item gnus-mime-display-multipart-related-as-mixed
9835Display "multipart/related" parts as "multipart/mixed". 9910Display "multipart/related" parts as "multipart/mixed".
9836 9911
9837If displaying "text/html" is discouraged, see 9912If displaying @samp{text/html} is discouraged, see
9838@code{mm-discouraged-alternatives}, images or other material inside a 9913@code{mm-discouraged-alternatives}, images or other material inside a
9839"multipart/related" part might be overlooked when this variable is 9914"multipart/related" part might be overlooked when this variable is
9840@code{nil}. @ref{Display Customization, Display Customization, , 9915@code{nil}. @ref{Display Customization, Display Customization, ,
@@ -11539,7 +11614,7 @@ command respects the @samp{print=} specifications in the
11539@item i (Article) 11614@item i (Article)
11540@kindex i (Article) 11615@kindex i (Article)
11541Insert the contents of the @acronym{MIME} object into the buffer 11616Insert the contents of the @acronym{MIME} object into the buffer
11542(@code{gnus-mime-inline-part}) as text/plain. If given a prefix, insert 11617(@code{gnus-mime-inline-part}) as @samp{text/plain}. If given a prefix, insert
11543the raw contents without decoding. If given a numerical prefix, you can 11618the raw contents without decoding. If given a numerical prefix, you can
11544do semi-manual charset stuff (see 11619do semi-manual charset stuff (see
11545@code{gnus-summary-show-article-charset-alist} in @ref{Paging the 11620@code{gnus-summary-show-article-charset-alist} in @ref{Paging the
@@ -16883,7 +16958,7 @@ summary buffer.
16883(add-to-list 'nnmail-extra-headers nnrss-url-field) 16958(add-to-list 'nnmail-extra-headers nnrss-url-field)
16884@end lisp 16959@end lisp
16885 16960
16886Even if you have added @code{"text/html"} to the 16961Even if you have added @samp{text/html} to the
16887@code{mm-discouraged-alternatives} variable (@pxref{Display 16962@code{mm-discouraged-alternatives} variable (@pxref{Display
16888Customization, ,Display Customization, emacs-mime, The Emacs MIME 16963Customization, ,Display Customization, emacs-mime, The Emacs MIME
16889Manual}) since you don't want to see @acronym{HTML} parts, it might be 16964Manual}) since you don't want to see @acronym{HTML} parts, it might be
@@ -22243,12 +22318,16 @@ inserted.
22243@node Formatting Fonts 22318@node Formatting Fonts
22244@subsection Formatting Fonts 22319@subsection Formatting Fonts
22245 22320
22321@cindex %(, %)
22322@vindex gnus-mouse-face
22246There are specs for highlighting, and these are shared by all the format 22323There are specs for highlighting, and these are shared by all the format
22247variables. Text inside the @samp{%(} and @samp{%)} specifiers will get 22324variables. Text inside the @samp{%(} and @samp{%)} specifiers will get
22248the special @code{mouse-face} property set, which means that it will be 22325the special @code{mouse-face} property set, which means that it will be
22249highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer 22326highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer
22250over it. 22327over it.
22251 22328
22329@cindex %@{, %@}
22330@vindex gnus-face-0
22252Text inside the @samp{%@{} and @samp{%@}} specifiers will have their 22331Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
22253normal faces set using @code{gnus-face-0}, which is @code{bold} by 22332normal faces set using @code{gnus-face-0}, which is @code{bold} by
22254default. If you say @samp{%1@{}, you'll get @code{gnus-face-1} instead, 22333default. If you say @samp{%1@{}, you'll get @code{gnus-face-1} instead,
@@ -22256,6 +22335,9 @@ and so on. Create as many faces as you wish. The same goes for the
22256@code{mouse-face} specs---you can say @samp{%3(hello%)} to have 22335@code{mouse-face} specs---you can say @samp{%3(hello%)} to have
22257@samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}. 22336@samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
22258 22337
22338@cindex %<<, %>>, guillemets
22339@c @cindex %<<, %>>, %«, %», guillemets
22340@vindex gnus-balloon-face-0
22259Text inside the @samp{%<<} and @samp{%>>} specifiers will get the 22341Text inside the @samp{%<<} and @samp{%>>} specifiers will get the
22260special @code{balloon-help} property set to 22342special @code{balloon-help} property set to
22261@code{gnus-balloon-face-0}. If you say @samp{%1<<}, you'll get 22343@code{gnus-balloon-face-0}. If you say @samp{%1<<}, you'll get
@@ -23445,14 +23527,22 @@ the second element is the regexp match group that is to be replaced by
23445the picture; and the third element is the name of the file to be 23527the picture; and the third element is the name of the file to be
23446displayed. 23528displayed.
23447 23529
23448The following variables customize where Smiley will look for these 23530The following variables customize the appearance of the smileys:
23449files:
23450 23531
23451@table @code 23532@table @code
23452 23533
23534@item smiley-style
23535@vindex smiley-style
23536Specifies the smiley style. Predefined smiley styles include
23537@code{low-color} (small 13x14 pixel, three-color images), @code{medium}
23538(more colorful images, 16x16 pixel), and @code{grayscale} (grayscale
23539images, 14x14 pixel). The default depends on the height of the default
23540face.
23541
23453@item smiley-data-directory 23542@item smiley-data-directory
23454@vindex smiley-data-directory 23543@vindex smiley-data-directory
23455Where Smiley will look for smiley faces files. 23544Where Smiley will look for smiley faces files. You shouldn't set this
23545variable anymore. Customize @code{smiley-style} instead.
23456 23546
23457@item gnus-smiley-file-types 23547@item gnus-smiley-file-types
23458@vindex gnus-smiley-file-types 23548@vindex gnus-smiley-file-types
@@ -26190,29 +26280,27 @@ that. Not reliably, at least. Older versions of Gnus may work on older
26190Emacs versions. Particularly, Gnus 5.10.8 should also work on Emacs 26280Emacs versions. Particularly, Gnus 5.10.8 should also work on Emacs
2619120.7 and XEmacs 21.1. 2628120.7 and XEmacs 21.1.
26192 26282
26193There are some vague differences between Gnus on the various
26194platforms---XEmacs features more graphics (a logo and a toolbar)---but
26195other than that, things should look pretty much the same under all
26196Emacsen.
26197
26198 26283
26199@node Gnus Development 26284@node Gnus Development
26200@subsection Gnus Development 26285@subsection Gnus Development
26201 26286
26202Gnus is developed in a two-phased cycle. The first phase involves much 26287Gnus is developed in a two-phased cycle. The first phase involves much
26203discussion on the @samp{ding@@gnus.org} mailing list, where people 26288discussion on the development mailing list @samp{ding@@gnus.org}, where people
26204propose changes and new features, post patches and new back ends. This 26289propose changes and new features, post patches and new back ends. This
26205phase is called the @dfn{alpha} phase, since the Gnusae released in this 26290phase is called the @dfn{alpha} phase, since the Gnusae released in this
26206phase are @dfn{alpha releases}, or (perhaps more commonly in other 26291phase are @dfn{alpha releases}, or (perhaps more commonly in other
26207circles) @dfn{snapshots}. During this phase, Gnus is assumed to be 26292circles) @dfn{snapshots}. During this phase, Gnus is assumed to be
26208unstable and should not be used by casual users. Gnus alpha releases 26293unstable and should not be used by casual users. Gnus alpha releases
26209have names like ``Red Gnus'' and ``Quassia Gnus''. 26294have names like ``Oort Gnus'' and ``No Gnus''. @xref{Gnus Versions}.
26210 26295
26211After futzing around for 50-100 alpha releases, Gnus is declared 26296After futzing around for 10-100 alpha releases, Gnus is declared
26212@dfn{frozen}, and only bug fixes are applied. Gnus loses the prefix, 26297@dfn{frozen}, and only bug fixes are applied. Gnus loses the prefix,
26213and is called things like ``Gnus 5.6.32'' instead. Normal people are 26298and is called things like ``Gnus 5.10.1'' instead. Normal people are
26214supposed to be able to use these, and these are mostly discussed on the 26299supposed to be able to use these, and these are mostly discussed on the
26215@samp{gnu.emacs.gnus} newsgroup. 26300@samp{gnu.emacs.gnus} newsgroup. This newgroup is mirrored to the
26301mailing list @samp{info-gnus-english@@gnu.org} which is carried on Gmane
26302as @samp{gmane.emacs.gnus.user}. These releases are finally integrated
26303in Emacs.
26216 26304
26217@cindex Incoming* 26305@cindex Incoming*
26218@vindex mail-source-delete-incoming 26306@vindex mail-source-delete-incoming
@@ -26232,10 +26320,16 @@ either discarded or totally rewritten. People reading the mailing list
26232usually keep up with these rapid changes, while people on the newsgroup 26320usually keep up with these rapid changes, while people on the newsgroup
26233can't be assumed to do so. 26321can't be assumed to do so.
26234 26322
26235@c FIXME: 26323So if you have problems with or questions about the alpha versions,
26236@c ding = gmane.emacs.gnus.general 26324direct those to the ding mailing list @samp{ding@@gnus.org}. This list
26237@c newsgroup = gnu.emacs.gnus = gmane.emacs.gnus.user = info-gnus-english 26325is also available on Gmane as @samp{gmane.emacs.gnus.general}.
26238 26326
26327@cindex Incoming*
26328@vindex mail-source-delete-incoming
26329Some variable defaults differ between alpha Gnusae and released Gnusae,
26330in particular, @code{mail-source-delete-incoming}. This is to prevent
26331lossage of mail if an alpha release hiccups while handling the mail.
26332@xref{Mail Source Customization}.
26239 26333
26240@node Contributors 26334@node Contributors
26241@subsection Contributors 26335@subsection Contributors
@@ -27469,7 +27563,7 @@ variables should change those regexps accordingly. For example:
27469@item 27563@item
27470Old intermediate incoming mail files (@file{Incoming*}) are deleted 27564Old intermediate incoming mail files (@file{Incoming*}) are deleted
27471after a couple of days, not immediately. @xref{Mail Source 27565after a couple of days, not immediately. @xref{Mail Source
27472Customization}. (New in Gnus 5.10.10) 27566Customization}. (New in Gnus 5.10.10 / Emacs 22.2)
27473 27567
27474@end itemize 27568@end itemize
27475 27569
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 7514147711d..82cde814cb2 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,56 @@
12008-03-28 Michael Harnois <mdharnois@gmail.com> (tiny change)
2
3 * nnimap.el (nnimap-find-minmax-uid): Fix Exchange 2007 IMAP problem.
4
52008-03-24 Reiner Steib <Reiner.Steib@gmx.de>
6
7 * message.el (message-signature-separator): Change default. Improve
8 custom type.
9 (message-cite-function): Change default to
10 message-cite-original-without-signature.
11
12 * gnus-sum.el (gnus-summary-make-menu-bar): Add message-cite-function
13 toggle.
14
15 * message.el (message-check-news-body-syntax): Fix signature check.
16 (message-setup-1): Mark buffer as unmodified _after_ running
17 message-setup-hook and handling message-alternative-emails.
18 (message-shorten-references): Be more strict when building list of
19 valid references to comply with GNKSA.
20
21 * gnus-group.el (gnus-read-ephemeral-bug-group)
22 (gnus-read-ephemeral-debian-bug-group)
23 (gnus-read-ephemeral-emacs-bug-group): Use the correct variable.
24
25 * message.el (message-info): Don't use booleanp which isn't supported
26 in Emacs 21 and XEmacs.
27
282008-03-22 Reiner Steib <Reiner.Steib@gmx.de>
29
30 * gnus-group.el (gnus-gmane-group-download-format): Rename from
31 gnus-group-gmane-group-download-format.
32 (gnus-group-read-ephemeral-gmane-group): Rename from
33 gnus-group-read-ephemeral-gmane-group.
34 (gnus-read-ephemeral-gmane-group-url): Rename from
35 gnus-group-read-ephemeral-gmane-group-url.
36 (gnus-bug-group-download-format-alist): New variable.
37 (gnus-read-ephemeral-bug-group, gnus-read-ephemeral-debian-bug-group)
38 (gnus-read-ephemeral-emacs-bug-group): New commands.
39
402008-03-21 Reiner Steib <Reiner.Steib@gmx.de>
41
42 * gnus-art.el (gnus-article-browse-html-article): Fix documentation.
43 (gnus-visible-headers): Improve custom type.
44
452008-03-20 Reiner Steib <Reiner.Steib@gmx.de>
46
47 * mml.el (mml-menu): Add workarounds for XEmacs.
48
49 * gnus-art.el (gnus-article-browse-html-article): Inhibit display of
50 X-Boundary header.
51
52 * message.el (message-simplify-recipients): Fix previous commit.
53
12008-03-20 Stefan Monnier <monnier@iro.umontreal.ca> 542008-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
2 55
3 * mm-util.el (mm-set-buffer-multibyte): New function. 56 * mm-util.el (mm-set-buffer-multibyte): New function.
@@ -6,6 +59,85 @@
6 * gnus-win.el (gnus-configure-frame, gnus-all-windows-visible-p): 59 * gnus-win.el (gnus-configure-frame, gnus-all-windows-visible-p):
7 Prefer fboundp to functionp so it works with macros as well. 60 Prefer fboundp to functionp so it works with macros as well.
8 61
622008-03-19 Glenn Morris <rgm@gnu.org>
63
64 * tls.el (open-tls-stream): Restore use of `tls-end-of-info'.
65 Accidentally removed in the sync process with Emacs.
66
672008-03-19 Reiner Steib <Reiner.Steib@gmx.de>
68
69 * message.el (message-alter-recipients-discard-bogus-full-name): New
70 function.
71 (message-alter-recipients-function): New variable.
72 (message-get-reply-headers): Use it.
73 (message-replace-header): New helper function.
74 (message-recipients-without-full-name): New variable.
75 (message-simplify-recipients): New command.
76
77 * mml.el (mml-menu): Add toggle for gnus-gcc-externalize-attachments.
78
79 * message.el (message-info): Handle EasyPG manual.
80
81 * mml.el (mml-menu): Add entry for EasyPG.
82
832008-03-18 Nils Ackermann <nils@ackermath.info> (tiny change)
84
85 * nnmh.el (nnmh-request-expire-articles): Prefer expiry-target group
86 parameter.
87
88 * message.el (message-disassociate-draft): Specify drafts group name
89 fully.
90
912008-03-17 Teodor Zlatanov <tzz@lifelogs.com>
92
93 * gnus-registry.el (gnus-registry-split-fancy-with-parent): Eliminate
94 unnecessary duplicates from the match list.
95
962008-03-17 Katsumi Yamaoka <yamaoka@jpl.org>
97
98 * gnus-art.el (gnus-button-handle-info-keystrokes): Don't use optional
99 args of `how-many' of which the XEmacs version doesn't take; declare
100 Info-index-next as function.
101
1022008-03-16 Reiner Steib <Reiner.Steib@gmx.de>
103
104 * gnus-score.el (gnus-score-headers): Fix handling of
105 gnus-inhibit-slow-scoring.
106
107 * gnus-art.el (gnus-article-browse-html-article): Fix type in doc
108 string.
109 (gnus-button-url-regexp): Improve handling of parenthesis.
110 (gnus-button-alist): Extend gnus-button-handle-info-keystrokes entry.
111 (gnus-button-handle-info-keystrokes): Handle index entries.
112
1132008-03-14 Katsumi Yamaoka <yamaoka@jpl.org>
114
115 * mail-source.el (mail-source-delete-old-incoming) Fix regexp to find
116 Incoming* files.
117
1182008-03-13 Teodor Zlatanov <tzz@lifelogs.com>
119
120 * auth-source.el (auth-sources): Renamed from auth-source-choices.
121 (auth-source-pick): Use it.
122
1232008-03-12 Teodor Zlatanov <tzz@lifelogs.com>
124
125 * auth-source.el (auth-source-protocols)
126 (auth-source-protocols-customize, auth-source-choices): Added and
127 modified variable customizations and defaults.
128 (auth-source-pick, auth-source-user-or-password)
129 (auth-source-protocol-defaults, auth-source-user-or-password-imap)
130 (auth-source-user-or-password-pop3, auth-source-user-or-password-ssh)
131 (auth-source-user-or-password-sftp)
132 (auth-source-user-or-password-smtp): Use new variables and provide an
133 interface to netrc.el.
134
1352008-03-12 Katsumi Yamaoka <yamaoka@jpl.org>
136
137 * nntp.el (nntp-open-telnet-stream, nntp-open-via-rlogin-and-telnet)
138 (nntp-open-via-rlogin-and-netcat, nntp-open-via-telnet-and-telnet):
139 Make sure the nntp port to specify is a string.
140
92008-03-12 Stefan Monnier <monnier@iro.umontreal.ca> 1412008-03-12 Stefan Monnier <monnier@iro.umontreal.ca>
10 142
11 * nntp.el: Use with-current-buffer. 143 * nntp.el: Use with-current-buffer.
@@ -15,8 +147,8 @@
15 nntp-with-open-group macro. 147 nntp-with-open-group macro.
16 (nntp-with-open-group): Use the function, so it's easier to debug. 148 (nntp-with-open-group): Use the function, so it's easier to debug.
17 Add indentation and debugging info. 149 Add indentation and debugging info.
18 (nntp-open-telnet-stream, nntp-open-via-rlogin-and-telnet): Recommend the 150 (nntp-open-telnet-stream, nntp-open-via-rlogin-and-telnet): Recommend
19 use of the netcat alternatives. 151 the use of the netcat alternatives.
20 152
21 * rfc2047.el (rfc2047-decode-string): Don't use `m'. 153 * rfc2047.el (rfc2047-decode-string): Don't use `m'.
22 Avoid mm-string-as-multibyte as well. 154 Avoid mm-string-as-multibyte as well.
@@ -53,6 +185,11 @@
53 185
54 * message.el (message-ignored-resent-headers): Add "Delivered-To". 186 * message.el (message-ignored-resent-headers): Add "Delivered-To".
55 187
1882008-03-10 Daiki Ueno <ueno@unixuser.org>
189
190 * mml2015.el (mml2015-epg-passphrase-callback): Type cast KEY-ID to a
191 string for caching if it is 'PIN.
192
562008-03-08 Reiner Steib <Reiner.Steib@gmx.de> 1932008-03-08 Reiner Steib <Reiner.Steib@gmx.de>
57 194
58 * mail-source.el (mail-source-delete-old-incoming-confirm): 195 * mail-source.el (mail-source-delete-old-incoming-confirm):
@@ -2095,7 +2232,7 @@
2095 2232
2096 * gnus.el (gnus-version-number): Bump version. 2233 * gnus.el (gnus-version-number): Bump version.
2097 2234
20982007-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no> 22352007-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
2099 2236
2100 * gnus.el: No Gnus v0.6 is released. 2237 * gnus.el: No Gnus v0.6 is released.
2101 2238
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
index 116d8b4a6a1..f37e0368845 100644
--- a/lisp/gnus/auth-source.el
+++ b/lisp/gnus/auth-source.el
@@ -1,7 +1,6 @@
1;;; auth-source.el --- authentication sources for Gnus and Emacs 1;;; auth-source.el --- authentication sources for Gnus and Emacs
2 2
3;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3;; Copyright (C) 2008 Free Software Foundation, Inc.
4;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
5 4
6;; Author: Ted Zlatanov <tzz@lifelogs.com> 5;; Author: Ted Zlatanov <tzz@lifelogs.com>
7;; Keywords: news 6;; Keywords: news
@@ -32,53 +31,128 @@
32;;; Code: 31;;; Code:
33 32
34(eval-when-compile (require 'cl)) 33(eval-when-compile (require 'cl))
34(eval-when-compile (require 'netrc))
35 35
36(defgroup auth-source nil 36(defgroup auth-source nil
37 "Authentication sources." 37 "Authentication sources."
38 :version "22.1" 38 :version "23.1" ;; No Gnus
39 :group 'gnus) 39 :group 'gnus)
40 40
41(defcustom auth-source-choices nil 41(defcustom auth-source-protocols '((imap "imap" "imaps" "143" "993")
42 (pop3 "pop3" "pop" "pop3s" "110" "995")
43 (ssh "ssh" "22")
44 (sftp "sftp" "115")
45 (smtp "smtp" "25"))
46 "List of authentication protocols and their names"
47
48 :group 'auth-source
49 :version "23.1" ;; No Gnus
50 :type '(repeat :tag "Authentication Protocols"
51 (cons :tag "Protocol Entry"
52 (symbol :tag "Protocol")
53 (repeat :tag "Names"
54 (string :tag "Name")))))
55
56;;; generate all the protocols in a format Customize can use
57(defconst auth-source-protocols-customize
58 (mapcar (lambda (a)
59 (let ((p (car-safe a)))
60 (list 'const
61 :tag (upcase (symbol-name p))
62 p)))
63 auth-source-protocols))
64
65;;; this default will be changed to ~/.authinfo.gpg
66(defcustom auth-sources '((:source "~/.authinfo.enc" :host t :protocol t))
42 "List of authentication sources. 67 "List of authentication sources.
43 68
44Each entry is the authentication type with optional properties." 69Each entry is the authentication type with optional properties."
45 :group 'auth-source 70 :group 'auth-source
46 :type '(repeat :tag "Authentication Sources" 71 :version "23.1" ;; No Gnus
47 (cons :tag "Source definition" 72 :type `(repeat :tag "Authentication Sources"
48 (group :tag "Select a source" :inline t 73 (list :tag "Source definition"
49 (const :format "" :value :source) 74 (const :format "" :value :source)
50 (choice :tag "Authentication information" 75 (string :tag "Authentication Source")
51 (const :tag "None" nil) 76 (const :format "" :value :host)
52 (file :tag "File"))) 77 (choice :tag "Host choice"
53 (checklist :tag "Options" :greedy t 78 (const :tag "Any" t)
54 (group :inline t 79 (regexp :tag "Host regular expression (TODO)")
55 (choice :tag "Choose the hosts" 80 (const :tag "Fallback" nil))
56 (group :tag "Select host by name" :inline t 81 (const :format "" :value :protocol)
57 (const :format "" :value :host) 82 (choice :tag "Protocol"
58 (string :tag "Host name")) 83 (const :tag "Any" t)
59 (group :tag "Select host by regular expression" :inline t 84 (const :tag "Fallback" nil)
60 (const :format "" :value :host-regex) 85 ,@auth-source-protocols-customize))))
61 (regexp :tag "Host regular expression"))
62 (group :tag "Use any host" :inline t
63 (const :format "" :value :host-any)
64 (const :tag "Any" t))
65 (group :tag "Use if no other host matches" :inline t
66 (const :tag "Fallback" nil))))
67 (group :tag "Choose the protocol" :inline t
68 (const :format "" :value :protocol)
69 (choice :tag "Protocol"
70 (const :tag "Any" t)
71 (const :tag "Fallback (used if no others match)" nil)
72 (const :tag "IMAP" imap)
73 (const :tag "POP3" pop3)
74 (const :tag "SSH" ssh)
75 (const :tag "SFTP" sftp)
76 (const :tag "SMTP" smtp)))))))
77 86
78;; temp for debugging 87;; temp for debugging
79;; (customize-variable 'auth-source-choices) 88;; (unintern 'auth-source-protocols)
80;; (setq auth-source-choices nil) 89;; (unintern 'auth-sources)
81;; (format "%S" auth-source-choices) 90;; (customize-variable 'auth-sources)
91;; (setq auth-sources nil)
92;; (format "%S" auth-sources)
93;; (customize-variable 'auth-source-protocols)
94;; (setq auth-source-protocols nil)
95;; (format "%S" auth-source-protocols)
96;; (auth-source-pick "a" 'imap)
97;; (auth-source-user-or-password "login" "imap.myhost.com" 'imap)
98;; (auth-source-user-or-password "password" "imap.myhost.com" 'imap)
99;; (auth-source-user-or-password-imap "login" "imap.myhost.com")
100;; (auth-source-user-or-password-imap "password" "imap.myhost.com")
101;; (auth-source-protocol-defaults 'imap)
102
103(defun auth-source-pick (host protocol &optional fallback)
104 "Parse `auth-sources' for HOST and PROTOCOL matches.
105
106Returns fallback choices (where PROTOCOL or HOST are nil) with FALLBACK t."
107 (interactive "sHost: \nsProtocol: \n") ;for testing
108 (let (choices)
109 (dolist (choice auth-sources)
110 (let ((h (plist-get choice :host))
111 (p (plist-get choice :protocol)))
112 (when (and
113 (or (equal t h)
114 (and (stringp h) (string-match h host))
115 (and fallback (equal h nil)))
116 (or (equal t p)
117 (and (symbolp p) (equal p protocol))
118 (and fallback (equal p nil))))
119 (push choice choices))))
120 (if choices
121 choices
122 (unless fallback
123 (auth-source-pick host protocol t)))))
124
125(defun auth-source-user-or-password (mode host protocol)
126 "Find user or password (from the string MODE) matching HOST and PROTOCOL."
127 (let (found)
128 (dolist (choice (auth-source-pick host protocol))
129 (setq found (netrc-machine-user-or-password
130 mode
131 (plist-get choice :source)
132 (list host)
133 (list (format "%s" protocol))
134 (auth-source-protocol-defaults protocol)))
135 (when found
136 (return found)))))
137
138(defun auth-source-protocol-defaults (protocol)
139 "Return a list of default ports and names for PROTOCOL."
140 (cdr-safe (assoc protocol auth-source-protocols)))
141
142(defun auth-source-user-or-password-imap (mode host)
143 (auth-source-user-or-password mode host 'imap))
144
145(defun auth-source-user-or-password-pop3 (mode host)
146 (auth-source-user-or-password mode host 'pop3))
147
148(defun auth-source-user-or-password-ssh (mode host)
149 (auth-source-user-or-password mode host 'ssh))
150
151(defun auth-source-user-or-password-sftp (mode host)
152 (auth-source-user-or-password mode host 'sftp))
153
154(defun auth-source-user-or-password-smtp (mode host)
155 (auth-source-user-or-password mode host 'smtp))
82 156
83(provide 'auth-source) 157(provide 'auth-source)
84 158
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 9033ef1ff35..55b59488e8e 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -178,12 +178,15 @@ If `gnus-visible-headers' is non-nil, this variable will be ignored."
178 "*All headers that do not match this regexp will be hidden. 178 "*All headers that do not match this regexp will be hidden.
179This variable can also be a list of regexp of headers to remain visible. 179This variable can also be a list of regexp of headers to remain visible.
180If this variable is non-nil, `gnus-ignored-headers' will be ignored." 180If this variable is non-nil, `gnus-ignored-headers' will be ignored."
181 :type '(repeat :value-to-internal (lambda (widget value) 181 :type '(choice
182 (custom-split-regexp-maybe value)) 182 (repeat :value-to-internal (lambda (widget value)
183 :match (lambda (widget value) 183 (custom-split-regexp-maybe value))
184 (or (stringp value) 184 :match (lambda (widget value)
185 (widget-editable-list-match widget value))) 185 (or (stringp value)
186 regexp) 186 (widget-editable-list-match widget value)))
187 regexp)
188 (const :tag "Use gnus-ignored-headers" nil)
189 regexp)
187 :group 'gnus-article-hiding) 190 :group 'gnus-article-hiding)
188 191
189(defcustom gnus-sorted-header-list 192(defcustom gnus-sorted-header-list
@@ -2962,7 +2965,6 @@ message header will be added to the bodies of the \"text/html\" parts."
2962 (setq showed t))))) 2965 (setq showed t)))))
2963 showed)) 2966 showed))
2964 2967
2965;; FIXME: Documentation in texi/gnus.texi missing.
2966(defun gnus-article-browse-html-article (&optional arg) 2968(defun gnus-article-browse-html-article (&optional arg)
2967 "View \"text/html\" parts of the current article with a WWW browser. 2969 "View \"text/html\" parts of the current article with a WWW browser.
2968The message header is added to the beginning of every html part unless 2970The message header is added to the beginning of every html part unless
@@ -2970,18 +2972,20 @@ the prefix argument ARG is given.
2970 2972
2971Warning: Spammers use links to images in HTML articles to verify 2973Warning: Spammers use links to images in HTML articles to verify
2972whether you have read the message. As 2974whether you have read the message. As
2973`gnus-article-browse-html-article' passes the unmodified HTML 2975`gnus-article-browse-html-article' passes the HTML content to the
2974content to the browser without eliminating these \"web bugs\" you 2976browser without eliminating these \"web bugs\" you should only
2975should only use it for mails from trusted senders. 2977use it for mails from trusted senders.
2976 2978
2977If you alwasy want to display HTML part in the browser, set 2979If you always want to display HTML parts in the browser, set
2978`mm-text-html-renderer' to nil." 2980`mm-text-html-renderer' to nil."
2979 ;; Cf. `mm-w3m-safe-url-regexp' 2981 ;; Cf. `mm-w3m-safe-url-regexp'
2980 (interactive "P") 2982 (interactive "P")
2981 (if arg 2983 (if arg
2982 (gnus-summary-show-article) 2984 (gnus-summary-show-article)
2983 (let ((gnus-visible-headers (or (get 'gnus-visible-headers 'standard-value) 2985 (let ((gnus-visible-headers (or (get 'gnus-visible-headers 'standard-value)
2984 gnus-visible-headers))) 2986 gnus-visible-headers))
2987 ;; As we insert a <hr>, there's no need for the body boundary.
2988 (gnus-treat-body-boundary nil))
2985 (gnus-summary-show-article))) 2989 (gnus-summary-show-article)))
2986 (with-current-buffer gnus-article-buffer 2990 (with-current-buffer gnus-article-buffer
2987 (let ((header (unless arg 2991 (let ((header (unless arg
@@ -6894,7 +6898,8 @@ groups."
6894 (concat 6898 (concat
6895 "\\(?:" 6899 "\\(?:"
6896 ;; Match paired parentheses, e.g. in Wikipedia URLs: 6900 ;; Match paired parentheses, e.g. in Wikipedia URLs:
6897 "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)" "[" chars "]" 6901 ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
6902 "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)" "[" chars "]*"
6898 "\\|" 6903 "\\|"
6899 "[" chars punct "]+" "[" chars "]" 6904 "[" chars punct "]+" "[" chars "]"
6900 "\\)")) 6905 "\\)"))
@@ -7339,9 +7344,9 @@ positives are possible."
7339 1 (>= gnus-button-emacs-level 1) gnus-button-handle-info-url-kde 2) 7344 1 (>= gnus-button-emacs-level 1) gnus-button-handle-info-url-kde 2)
7340 ("\\((Info-goto-node\\|(info\\)[ \t\n]*\\(\"[^\"]*\"\\))" 0 7345 ("\\((Info-goto-node\\|(info\\)[ \t\n]*\\(\"[^\"]*\"\\))" 0
7341 (>= gnus-button-emacs-level 1) gnus-button-handle-info-url 2) 7346 (>= gnus-button-emacs-level 1) gnus-button-handle-info-url 2)
7342 ("\\b\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+i[ \t\n]+d?[ \t\n]?m[ \t\n]+\\([^ ]+ ?[^ ]+\\)[ \t\n]+RET" 7347 ("\\b\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+i[ \t\n]+d?[ \t\n]?m[ \t\n]+[^ ]+ ?[^ ]+[ \t\n]+RET\\([ \t\n]+i[ \t\n]+[^ ]+ ?[^ ]+[ \t\n]+RET\\([ \t\n,]*\\)\\)?"
7343 ;; Info links like `C-h i d m CC Mode RET' 7348 ;; Info links like `C-h i d m Gnus RET' or `C-h i d m Gnus RET i partial RET'
7344 0 (>= gnus-button-emacs-level 1) gnus-button-handle-info-keystrokes 2) 7349 0 (>= gnus-button-emacs-level 1) gnus-button-handle-info-keystrokes 0)
7345 ;; This is custom 7350 ;; This is custom
7346 ("M-x[ \t\n]\\(customize-[^ ]+\\)[ \t\n]RET[ \t\n]\\([^ ]+\\)[ \t\n]RET" 0 7351 ("M-x[ \t\n]\\(customize-[^ ]+\\)[ \t\n]RET[ \t\n]\\([^ ]+\\)[ \t\n]RET" 0
7347 (>= gnus-button-emacs-level 1) gnus-button-handle-custom 1 2) 7352 (>= gnus-button-emacs-level 1) gnus-button-handle-custom 1 2)
@@ -7887,13 +7892,40 @@ url is put as the `gnus-button-url' overlay property on the button."
7887 7892
7888;; (info) will autoload info.el 7893;; (info) will autoload info.el
7889(declare-function Info-menu "info" (menu-item &optional fork)) 7894(declare-function Info-menu "info" (menu-item &optional fork))
7895(declare-function Info-index-next "info" (num))
7890 7896
7891(defun gnus-button-handle-info-keystrokes (url) 7897(defun gnus-button-handle-info-keystrokes (url)
7892 "Call `info' when pushing the corresponding URL button." 7898 "Call `info' when pushing the corresponding URL button."
7893 ;; For links like `C-h i d m gnus RET', `C-h i d m CC Mode RET'. 7899 ;; For links like `C-h i d m gnus RET part RET , ,', `C-h i d m CC Mode RET'.
7894 (info) 7900 (let (node indx comma)
7895 (Info-directory) 7901 (if (string-match
7896 (Info-menu url)) 7902 (concat "\\b\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+i[ \t\n]+d?[ \t\n]?m[ \t\n]+"
7903 "\\([^ ]+ ?[^ ]+\\)[ \t\n]+RET"
7904 "\\([ \t\n]+i[ \t\n]+[^ ]+ ?[^ ]+[ \t\n]+RET"
7905 "\\(?:[ \t\n,]*\\)\\)?")
7906 url)
7907 (setq node (match-string 2 url)
7908 indx (match-string 3 url))
7909 (error "Can't parse %s" url))
7910 (info)
7911 (Info-directory)
7912 (Info-menu node)
7913 (when (> (length indx) 0)
7914 (string-match (concat "[ \t\n]+i[ \t\n]+\\([^ ]+ ?[^ ]+\\)[ \t\n]+RET"
7915 "\\([ \t\n,]*\\)")
7916 indx)
7917 (setq comma (match-string 2 indx))
7918 (setq indx (match-string 1 indx))
7919 (Info-index indx)
7920 (when comma
7921 (dotimes (i (with-temp-buffer
7922 (insert comma)
7923 ;; Note: the XEmacs version of `how-many' takes
7924 ;; no optional argument.
7925 (goto-char (point-min))
7926 (how-many ",")))
7927 (Info-index-next 1)))
7928 nil)))
7897 7929
7898;; Called after pgg-snarf-keys-region, which autoloads pgg.el. 7930;; Called after pgg-snarf-keys-region, which autoloads pgg.el.
7899(declare-function pgg-display-output-buffer "pgg" (start end status)) 7931(declare-function pgg-display-output-buffer "pgg" (start end status))
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 8e2f82b5402..c40948c440e 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -2325,7 +2325,7 @@ Return the name of the group if selection was successful."
2325 (message "Quit reading the ephemeral group") 2325 (message "Quit reading the ephemeral group")
2326 nil))))) 2326 nil)))))
2327 2327
2328(defcustom gnus-group-gmane-group-download-format 2328(defcustom gnus-gmane-group-download-format
2329 "http://download.gmane.org/%s/%s/%s" 2329 "http://download.gmane.org/%s/%s/%s"
2330 "URL for downloading mbox files. 2330 "URL for downloading mbox files.
2331It must contain three \"%s\". They correspond to the group, the 2331It must contain three \"%s\". They correspond to the group, the
@@ -2338,11 +2338,11 @@ minimal and maximal article numbers, respectively."
2338;; FIXME: 2338;; FIXME:
2339;; - Add documentation, menu, key bindings, ... 2339;; - Add documentation, menu, key bindings, ...
2340 2340
2341(defun gnus-group-read-ephemeral-gmane-group (group start &optional range) 2341(defun gnus-read-ephemeral-gmane-group (group start &optional range)
2342 "Read articles from Gmane group GROUP as an ephemeral group. 2342 "Read articles from Gmane group GROUP as an ephemeral group.
2343START is the first article. RANGE specifies how many articles 2343START is the first article. RANGE specifies how many articles
2344are fetched. The articles are downloaded via HTTP using the URL 2344are fetched. The articles are downloaded via HTTP using the URL
2345specified by `gnus-group-gmane-group-download-format'." 2345specified by `gnus-gmane-group-download-format'."
2346 ;; See <http://gmane.org/export.php> for more information. 2346 ;; See <http://gmane.org/export.php> for more information.
2347 (interactive 2347 (interactive
2348 (list 2348 (list
@@ -2357,7 +2357,7 @@ specified by `gnus-group-gmane-group-download-format'."
2357 (gnus-thread-sort-functions '(gnus-thread-sort-by-number))) 2357 (gnus-thread-sort-functions '(gnus-thread-sort-by-number)))
2358 (with-temp-file tmpfile 2358 (with-temp-file tmpfile
2359 (url-insert-file-contents 2359 (url-insert-file-contents
2360 (format gnus-group-gmane-group-download-format 2360 (format gnus-gmane-group-download-format
2361 group start (+ start range))) 2361 group start (+ start range)))
2362 (write-region (point-min) (point-max) tmpfile) 2362 (write-region (point-min) (point-max) tmpfile)
2363 (gnus-group-read-ephemeral-group 2363 (gnus-group-read-ephemeral-group
@@ -2366,7 +2366,7 @@ specified by `gnus-group-gmane-group-download-format'."
2366 (nndoc-article-type mbox)))) 2366 (nndoc-article-type mbox))))
2367 (delete-file tmpfile))) 2367 (delete-file tmpfile)))
2368 2368
2369(defun gnus-group-read-ephemeral-gmane-group-url (url) 2369(defun gnus-read-ephemeral-gmane-group-url (url)
2370 "Create an ephemeral Gmane group from URL. 2370 "Create an ephemeral Gmane group from URL.
2371 2371
2372Valid input formats include: 2372Valid input formats include:
@@ -2378,7 +2378,7 @@ Valid input formats include:
2378 ;; be customizable? 2378 ;; be customizable?
2379 ;; - The URLs should be added to `gnus-button-alist'. Probably we should 2379 ;; - The URLs should be added to `gnus-button-alist'. Probably we should
2380 ;; prompt the user to decide: "View via `browse-url' or in Gnus? " 2380 ;; prompt the user to decide: "View via `browse-url' or in Gnus? "
2381 ;; (`gnus-group-read-ephemeral-gmane-group-url') 2381 ;; (`gnus-read-ephemeral-gmane-group-url')
2382 (interactive 2382 (interactive
2383 (list (gnus-group-completing-read "Gmane URL: "))) 2383 (list (gnus-group-completing-read "Gmane URL: ")))
2384 (let (group start range) 2384 (let (group start range)
@@ -2411,7 +2411,54 @@ Valid input formats include:
2411 start (string-to-number (match-string 2 url)))) 2411 start (string-to-number (match-string 2 url))))
2412 (t 2412 (t
2413 (error "Can't parse URL %s" url))) 2413 (error "Can't parse URL %s" url)))
2414 (gnus-group-read-ephemeral-gmane-group group start range))) 2414 (gnus-read-ephemeral-gmane-group group start range)))
2415
2416(defcustom gnus-bug-group-download-format-alist
2417 '((emacs ;; Only a test bed yet:
2418 . "http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?mbox=yes;bug=%s")
2419 (debian
2420 . "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%s&mbox=yes"))
2421 "Alist of symbols for bug trackers and the corresponding URL format string.
2422The URL format string must contain a single \"%s\", specifying
2423the bug number, and browsing the URL must return mbox output."
2424 :group 'gnus-group-foreign
2425 :version "23.1" ;; No Gnus
2426 :type '(repeat (cons (symbol) (string :tag "URL format string"))))
2427
2428(defun gnus-read-ephemeral-bug-group (number mbox-url)
2429 "Browse bug NUMBER as ephemeral group."
2430 (interactive (list (read-string "Enter bug number: "
2431 (thing-at-point 'word) nil)
2432 ;; FIXME: Add completing-read from
2433 ;; `gnus-emacs-bug-group-download-format' ...
2434 (cdr (assoc 'emacs gnus-bug-group-download-format-alist))))
2435 (when (stringp number)
2436 (setq number (string-to-number number)))
2437 (let ((tmpfile (make-temp-file "gnus-temp-group-")))
2438 (with-temp-file tmpfile
2439 (url-insert-file-contents (format mbox-url number))
2440 (write-region (point-min) (point-max) tmpfile)
2441 (gnus-group-read-ephemeral-group
2442 "gnus-read-ephemeral-bug"
2443 `(nndoc ,tmpfile
2444 (nndoc-article-type mbox))))
2445 (delete-file tmpfile)))
2446
2447(defun gnus-read-ephemeral-debian-bug-group (number)
2448 "Browse Debian bug NUMBER as ephemeral group."
2449 (interactive (list (read-string "Enter bug number: "
2450 (thing-at-point 'word) nil)))
2451 (gnus-read-ephemeral-bug-group
2452 number
2453 (cdr (assoc 'debian gnus-bug-group-download-format-alist))))
2454
2455(defun gnus-read-ephemeral-emacs-bug-group (number)
2456 "Browse Emacs bug NUMBER as ephemeral group."
2457 (interactive (list (read-string "Enter bug number: "
2458 (thing-at-point 'word) nil)))
2459 (gnus-read-ephemeral-bug-group
2460 number
2461 (cdr (assoc 'emacs gnus-bug-group-download-format-alist))))
2415 2462
2416(defun gnus-group-jump-to-group (group &optional prompt) 2463(defun gnus-group-jump-to-group (group &optional prompt)
2417 "Jump to newsgroup GROUP. 2464 "Jump to newsgroup GROUP.
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 5141a5e2d32..7cdb075b836 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -520,7 +520,9 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
520 matches) 520 matches)
521 (when (and this-sender 521 (when (and this-sender
522 (equal sender this-sender)) 522 (equal sender this-sender))
523 (setq found (append (gnus-registry-fetch-groups key) found)) 523 (let ((groups (gnus-registry-fetch-groups key)))
524 (dolist (group groups)
525 (setq found (append (list group) (delete group found)))))
524 (push key matches) 526 (push key matches)
525 (gnus-message 527 (gnus-message
526 ;; raise level of messaging if gnus-registry-track-extra 528 ;; raise level of messaging if gnus-registry-track-extra
@@ -542,7 +544,9 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
542 matches) 544 matches)
543 (when (and this-subject 545 (when (and this-subject
544 (equal subject this-subject)) 546 (equal subject this-subject))
545 (setq found (append (gnus-registry-fetch-groups key) found)) 547 (let ((groups (gnus-registry-fetch-groups key)))
548 (dolist (group groups)
549 (setq found (append (list group) (delete group found)))))
546 (push key matches) 550 (push key matches)
547 (gnus-message 551 (gnus-message
548 ;; raise level of messaging if gnus-registry-track-extra 552 ;; raise level of messaging if gnus-registry-track-extra
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index d79007b92e6..7a4fb257504 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -1552,20 +1552,20 @@ If FORMAT, also format the current score file."
1552 (lambda (score) 1552 (lambda (score)
1553 (length (gnus-score-get header score))) 1553 (length (gnus-score-get header score)))
1554 scores))) 1554 scores)))
1555 ;; Call the scoring function for this type of "header".
1556 (when (if (and gnus-inhibit-slow-scoring 1555 (when (if (and gnus-inhibit-slow-scoring
1557 (if (and (stringp gnus-inhibit-slow-scoring) 1556 (or (eq gnus-inhibit-slow-scoring t)
1557 (and (stringp gnus-inhibit-slow-scoring)
1558 ;; Always true here? 1558 ;; Always true here?
1559 ;; (stringp gnus-newsgroup-name) 1559 ;; (stringp gnus-newsgroup-name)
1560 (string-match gnus-inhibit-slow-scoring 1560 (string-match
1561 gnus-newsgroup-name)) 1561 gnus-inhibit-slow-scoring
1562 t 1562 gnus-newsgroup-name)))
1563 nil)
1564 (> 0 (nth 1 (assoc header gnus-header-index)))) 1563 (> 0 (nth 1 (assoc header gnus-header-index))))
1565 (progn 1564 (progn
1566 (gnus-message 1565 (gnus-message
1567 7 "Scoring on headers or body skipped.") 1566 7 "Scoring on headers or body skipped.")
1568 nil) 1567 nil)
1568 ;; Call the scoring function for this type of "header".
1569 (setq new (funcall (nth 2 entry) scores header 1569 (setq new (funcall (nth 2 entry) scores header
1570 now expire trace))) 1570 now expire trace)))
1571 (push new news)))) 1571 (push new news))))
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index d6abbd6c131..2e3b55a0c42 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -2543,6 +2543,29 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
2543 ["Followup via news" gnus-summary-followup-to-mail t] 2543 ["Followup via news" gnus-summary-followup-to-mail t]
2544 ["Followup via news and yank" 2544 ["Followup via news and yank"
2545 gnus-summary-followup-to-mail-with-original t] 2545 gnus-summary-followup-to-mail-with-original t]
2546 ["Strip signature on reply"
2547 (lambda ()
2548 (interactive)
2549 (if (not (memq message-cite-function
2550 '(message-cite-original-without-signature
2551 message-cite-original)))
2552 ;; Stupid workaround for XEmacs not honoring :visible.
2553 (message "Can't toggle this value of `message-cite-function'")
2554 (setq message-cite-function
2555 (if (eq message-cite-function
2556 'message-cite-original-without-signature)
2557 'message-cite-original
2558 'message-cite-original-without-signature))))
2559 ;; XEmacs barfs on :visible.
2560 ,@(if (featurep 'xemacs) nil
2561 '(:visible (memq message-cite-function
2562 '(message-cite-original-without-signature
2563 message-cite-original))))
2564 :style toggle
2565 :selected (eq message-cite-function
2566 'message-cite-original-without-signature)
2567 ,@(if (featurep 'xemacs) nil
2568 '(:help "Strip signature from cited article when replying."))]
2546 ;;("Draft" 2569 ;;("Draft"
2547 ;;["Send" gnus-summary-send-draft t] 2570 ;;["Send" gnus-summary-send-draft t]
2548 ;;["Send bounced" gnus-resend-bounced-mail t]) 2571 ;;["Send bounced" gnus-resend-bounced-mail t])
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 3a90990d5d8..088b91d8d58 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -555,7 +555,8 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
555 currday files) 555 currday files)
556 (setq files (directory-files 556 (setq files (directory-files
557 mail-source-directory t 557 mail-source-directory t
558 (concat mail-source-incoming-file-prefix "*")) 558 (concat "\\`"
559 (regexp-quote mail-source-incoming-file-prefix)))
559 currday (* (car (current-time)) high2days) 560 currday (* (car (current-time)) high2days)
560 currday (+ currday (* low2days (nth 1 (current-time))))) 561 currday (+ currday (* low2days (nth 1 (current-time)))))
561 (while files 562 (while files
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index a46cb500ee5..a35d7b1bf98 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -415,9 +415,17 @@ for `message-cross-post-insert-note'."
415 415
416;;; End of variables adopted from `message-utils.el'. 416;;; End of variables adopted from `message-utils.el'.
417 417
418(defcustom message-signature-separator "^-- *$" 418(defcustom message-signature-separator "^-- $"
419 "Regexp matching the signature separator." 419 "Regexp matching the signature separator.
420 :type 'regexp 420This variable is used to strip off the signature from quoted text
421when `message-cite-function' is
422`message-cite-original-without-signature'. Most useful values
423are \"^-- $\" (strict) and \"^-- *$\" (loose; allow missing
424whitespace)."
425 :type '(choice (const :tag "strict" "^-- $")
426 (const :tag "loose" "^-- *$")
427 regexp)
428 :version "23.1" ;; No Gnus (changed default)
421 :link '(custom-manual "(message)Various Message Variables") 429 :link '(custom-manual "(message)Various Message Variables")
422 :group 'message-various) 430 :group 'message-various)
423 431
@@ -1010,7 +1018,7 @@ Used by `message-yank-original' via `message-yank-cite'."
1010 :link '(custom-manual "(message)Insertion Variables") 1018 :link '(custom-manual "(message)Insertion Variables")
1011 :type 'integer) 1019 :type 'integer)
1012 1020
1013(defcustom message-cite-function 'message-cite-original 1021(defcustom message-cite-function 'message-cite-original-without-signature
1014 "*Function for citing an original message. 1022 "*Function for citing an original message.
1015Predefined functions include `message-cite-original' and 1023Predefined functions include `message-cite-original' and
1016`message-cite-original-without-signature'. 1024`message-cite-original-without-signature'.
@@ -1020,6 +1028,7 @@ Note that these functions use `mail-citation-hook' if that is non-nil."
1020 (function-item sc-cite-original) 1028 (function-item sc-cite-original)
1021 (function :tag "Other")) 1029 (function :tag "Other"))
1022 :link '(custom-manual "(message)Insertion Variables") 1030 :link '(custom-manual "(message)Insertion Variables")
1031 :version "23.1" ;; No Gnus (changed default)
1023 :group 'message-insertion) 1032 :group 'message-insertion)
1024 1033
1025(defcustom message-indent-citation-function 'message-indent-citation 1034(defcustom message-indent-citation-function 'message-indent-citation
@@ -2484,12 +2493,19 @@ Point is left at the beginning of the narrowed-to region."
2484(defun message-info (&optional arg) 2493(defun message-info (&optional arg)
2485 "Display the Message manual. 2494 "Display the Message manual.
2486 2495
2487Prefixed with one \\[universal-argument], display the Emacs MIME manual. 2496Prefixed with one \\[universal-argument], display the Emacs MIME
2488Prefixed with two \\[universal-argument]'s, display the PGG manual." 2497manual. With two \\[universal-argument]'s, display the EasyPG or
2498PGG manual, depending on the value of `mml2015-use'."
2489 (interactive "p") 2499 (interactive "p")
2490 (cond ((eq arg 16) (Info-goto-node "(pgg)Top")) 2500 (Info-goto-node (format "(%s)Top"
2491 ((eq arg 4) (Info-goto-node "(emacs-mime)Top")) 2501 (cond ((eq arg 16) mml2015-use)
2492 (t (Info-goto-node "(message)Top")))) 2502 ((eq arg 4) 'emacs-mime)
2503 ;; `booleanp' only available in Emacs 22+
2504 ((and (not (memq arg '(nil t)))
2505 (symbolp arg))
2506 arg)
2507 (t
2508 'message)))))
2493 2509
2494 2510
2495 2511
@@ -5058,12 +5074,16 @@ Otherwise, generate and save a value for `canlock-password' first."
5058 ;; Check the length of the signature. 5074 ;; Check the length of the signature.
5059 (message-check 'signature 5075 (message-check 'signature
5060 (goto-char (point-max)) 5076 (goto-char (point-max))
5061 (if (> (count-lines (point) (point-max)) 5) 5077 (if (not (re-search-backward message-signature-separator nil t))
5062 (y-or-n-p 5078 t
5063 (format 5079 (if (>= (count-lines (1+ (point-at-eol)) (point-max)) 5)
5064 "Your .sig is %d lines; it should be max 4. Really post? " 5080 (if (message-gnksa-enable-p 'signature)
5065 (1- (count-lines (point) (point-max))))) 5081 (y-or-n-p
5066 t)) 5082 (format "Signature is excessively long (%d lines). Really post? "
5083 (count-lines (1+ (point-at-eol)) (point-max))))
5084 (message "Denied posting -- Excessive signature.")
5085 nil)
5086 t)))
5067 ;; Ensure that text follows last quoted portion. 5087 ;; Ensure that text follows last quoted portion.
5068 (message-check 'quoting-style 5088 (message-check 'quoting-style
5069 (goto-char (point-max)) 5089 (goto-char (point-max))
@@ -5882,8 +5902,10 @@ they are."
5882 (with-temp-buffer 5902 (with-temp-buffer
5883 (insert references) 5903 (insert references)
5884 (goto-char (point-min)) 5904 (goto-char (point-min))
5885 ;; Cons a list of valid references. 5905 ;; Cons a list of valid references. GNKSA says we must not include MIDs
5886 (while (re-search-forward "<[^>]+>" nil t) 5906 ;; with whitespace or missing brackets (7.a "Does not propagate broken
5907 ;; Message-IDs in original References").
5908 (while (re-search-forward "<[^ <]+@[^ <]+>" nil t)
5887 (push (match-string 0) refs)) 5909 (push (match-string 0) refs))
5888 (setq refs (nreverse refs) 5910 (setq refs (nreverse refs)
5889 count (length refs))) 5911 count (length refs)))
@@ -6207,11 +6229,12 @@ are not included."
6207 (save-restriction 6229 (save-restriction
6208 (message-narrow-to-headers) 6230 (message-narrow-to-headers)
6209 (run-hooks 'message-header-setup-hook)) 6231 (run-hooks 'message-header-setup-hook))
6210 (set-buffer-modified-p nil)
6211 (setq buffer-undo-list nil) 6232 (setq buffer-undo-list nil)
6212 (when message-generate-hashcash 6233 (when message-generate-hashcash
6213 ;; Generate hashcash headers for recipients already known 6234 ;; Generate hashcash headers for recipients already known
6214 (mail-add-payment-async)) 6235 (mail-add-payment-async))
6236 ;; Gnus posting styles are applied via buffer-local `message-setup-hook'
6237 ;; values.
6215 (run-hooks 'message-setup-hook) 6238 (run-hooks 'message-setup-hook)
6216 ;; Do this last to give it precedence over posting styles, etc. 6239 ;; Do this last to give it precedence over posting styles, etc.
6217 (when (message-mail-p) 6240 (when (message-mail-p)
@@ -6220,6 +6243,8 @@ are not included."
6220 (if message-alternative-emails 6243 (if message-alternative-emails
6221 (message-use-alternative-email-as-from)))) 6244 (message-use-alternative-email-as-from))))
6222 (message-position-point) 6245 (message-position-point)
6246 ;; Allow correct handling of `message-checksum' in `message-yank-original':
6247 (set-buffer-modified-p nil)
6223 (undo-boundary)) 6248 (undo-boundary))
6224 6249
6225(defun message-set-auto-save-file-name () 6250(defun message-set-auto-save-file-name ()
@@ -6247,7 +6272,7 @@ are not included."
6247 "Disassociate the message buffer from the drafts directory." 6272 "Disassociate the message buffer from the drafts directory."
6248 (when message-draft-article 6273 (when message-draft-article
6249 (nndraft-request-expire-articles 6274 (nndraft-request-expire-articles
6250 (list message-draft-article) "drafts" nil t))) 6275 (list message-draft-article) "nndraft:drafts" nil t)))
6251 6276
6252(defun message-insert-headers () 6277(defun message-insert-headers ()
6253 "Generate the headers for the article." 6278 "Generate the headers for the article."
@@ -6313,6 +6338,29 @@ is a function used to switch to and display the mail buffer."
6313 (message-setup `((Newsgroups . ,(or newsgroups "")) 6338 (message-setup `((Newsgroups . ,(or newsgroups ""))
6314 (Subject . ,(or subject "")))))) 6339 (Subject . ,(or subject ""))))))
6315 6340
6341(defun message-alter-recipients-discard-bogus-full-name (addrcell)
6342 "Discard mail address in full names.
6343When the full name in reply headers contains the mail
6344address (e.g. \"foo@bar <foo@bar>\"), discard full name.
6345ADDRCELL is a cons cell where the car is the mail address and the
6346cdr is the complete address (full name and mail address)."
6347 (if (string-match (concat (regexp-quote (car addrcell)) ".*"
6348 (regexp-quote (car addrcell)))
6349 (cdr addrcell))
6350 (cons (car addrcell) (car addrcell))
6351 addrcell))
6352
6353(defcustom message-alter-recipients-function nil
6354 "Function called to allow alteration of reply header structures.
6355It is called in `message-get-reply-headers' for each recipient.
6356The function is called with one parameter, a cons cell ..."
6357 :type '(choice (const :tag "None" nil)
6358 (const :tag "Discard bogus full name"
6359 message-alter-recipients-discard-bogus-full-name)
6360 function)
6361 :version "23.1" ;; No Gnus
6362 :group 'message-headers)
6363
6316(defun message-get-reply-headers (wide &optional to-address address-headers) 6364(defun message-get-reply-headers (wide &optional to-address address-headers)
6317 (let (follow-to mct never-mct to cc author mft recipients extra) 6365 (let (follow-to mct never-mct to cc author mft recipients extra)
6318 ;; Find all relevant headers we need. 6366 ;; Find all relevant headers we need.
@@ -6413,7 +6461,11 @@ want to get rid of this query permanently.")))
6413 (setq recipients 6461 (setq recipients
6414 (mapcar 6462 (mapcar
6415 (lambda (addr) 6463 (lambda (addr)
6416 (cons (downcase (mail-strip-quoted-names addr)) addr)) 6464 (if message-alter-recipients-function
6465 (funcall message-alter-recipients-function
6466 (cons (downcase (mail-strip-quoted-names addr))
6467 addr))
6468 (cons (downcase (mail-strip-quoted-names addr)) addr)))
6417 (message-tokenize-header recipients))) 6469 (message-tokenize-header recipients)))
6418 ;; Remove first duplicates. (Why not all duplicates? Is this a bug?) 6470 ;; Remove first duplicates. (Why not all duplicates? Is this a bug?)
6419 (let ((s recipients)) 6471 (let ((s recipients))
@@ -7905,6 +7957,56 @@ Header and body are separated by `mail-header-separator'."
7905 (kill-buffer buff)))) 7957 (kill-buffer buff))))
7906 (message "%s message(s) sent, %s skipped." sent skipped))) 7958 (message "%s message(s) sent, %s skipped." sent skipped)))
7907 7959
7960(defun message-replace-header (header new-value &optional after force)
7961 "Remove HEADER and insert the NEW-VALUE.
7962If AFTER, insert after this header. If FORCE, insert new field
7963even if NEW-VALUE is empty."
7964 ;; Similar to `nnheader-replace-header' but for message buffers.
7965 (save-excursion
7966 (save-restriction
7967 (message-narrow-to-headers)
7968 (message-remove-header header))
7969 (when (or force (> (length new-value) 0))
7970 (if after
7971 (message-position-on-field header after)
7972 (message-position-on-field header))
7973 (insert new-value))))
7974
7975(defcustom message-recipients-without-full-name
7976 (list "ding@gnus.org"
7977 "bugs@gnus.org"
7978 "emacs-devel@gnu.org"
7979 "emacs-pretest-bug@gnu.org"
7980 "bug-gnu-emacs@gnu.org")
7981 "Mail addresses that have no full name.
7982Used in `message-simplify-recipients'."
7983 ;; Maybe the addresses could be extracted from
7984 ;; `gnus-parameter-to-list-alist'?
7985 :type '(choice (const :tag "None" nil)
7986 (repeat string))
7987 :version "23.1" ;; No Gnus
7988 :group 'message-headers)
7989
7990(defun message-simplify-recipients ()
7991 (interactive)
7992 (dolist (hdr '("Cc" "To"))
7993 (message-replace-header
7994 hdr
7995 (mapconcat
7996 (lambda (addrcomp)
7997 (if (and message-recipients-without-full-name
7998 (string-match
7999 (regexp-opt message-recipients-without-full-name)
8000 (cadr addrcomp)))
8001 (cadr addrcomp)
8002 (if (car addrcomp)
8003 (message-make-from (car addrcomp) (cadr addrcomp))
8004 (cadr addrcomp))))
8005 (when (message-fetch-field hdr)
8006 (mail-extract-address-components
8007 (message-fetch-field hdr) t))
8008 ", "))))
8009
7908(when (featurep 'xemacs) 8010(when (featurep 'xemacs)
7909 (require 'messagexmas) 8011 (require 'messagexmas)
7910 (message-xmas-redefine)) 8012 (message-xmas-redefine))
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index 0a7aac29ed9..79a1de772ce 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1017,14 +1017,6 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1017 (define-key main "\C-c\C-m" map) 1017 (define-key main "\C-c\C-m" map)
1018 main)) 1018 main))
1019 1019
1020;; (defun mml-toggle-gcc-externalize-attachments ()
1021;; (interactive)
1022;; (prog1
1023;; (setq gnus-gcc-externalize-attachments
1024;; (not gnus-gcc-externalize-attachments))
1025;; (message "gnus-gcc-externalize-attachments is `%s'."
1026;; gnus-gcc-externalize-attachments)))
1027
1028(easy-menu-define 1020(easy-menu-define
1029 mml-menu mml-mode-map "" 1021 mml-menu mml-mode-map ""
1030 `("Attachments" 1022 `("Attachments"
@@ -1037,13 +1029,29 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1037 ["Attach External..." mml-attach-external 1029 ["Attach External..." mml-attach-external
1038 ,@(if (featurep 'xemacs) '(t) 1030 ,@(if (featurep 'xemacs) '(t)
1039 '(:help "Attach reference to an external file"))] 1031 '(:help "Attach reference to an external file"))]
1040 ;; ["Externalize Attachments" 1032 ;; FIXME: Is it possible to do this without using
1041 ;; (lambda () (interactive) (mml-toggle-gcc-externalize-attachments)) 1033 ;; `gnus-gcc-externalize-attachments'?
1042 ;; ,@(if (featurep 'xemacs) nil 1034 ["Externalize Attachments"
1043 ;; '(:help "Save attachments as external parts in Gcc copies")) 1035 (lambda ()
1044 ;; :visible (booleanp gnus-gcc-externalize-attachments) 1036 (interactive)
1045 ;; :style radio 1037 (if (not (and (boundp 'gnus-gcc-externalize-attachments)
1046 ;; :selected (equal gnus-gcc-externalize-attachments t) ] 1038 (memq gnus-gcc-externalize-attachments
1039 '(all t nil))))
1040 ;; Stupid workaround for XEmacs not honoring :visible.
1041 (message "Can't handle this value of `gnus-gcc-externalize-attachments'")
1042 (setq gnus-gcc-externalize-attachments
1043 (not gnus-gcc-externalize-attachments))
1044 (message "gnus-gcc-externalize-attachments is `%s'."
1045 gnus-gcc-externalize-attachments)))
1046 ;; XEmacs barfs on :visible.
1047 ,@(if (featurep 'xemacs) nil
1048 '(:visible (and (boundp 'gnus-gcc-externalize-attachments)
1049 (memq gnus-gcc-externalize-attachments
1050 '(all t nil)))))
1051 :style toggle
1052 :selected gnus-gcc-externalize-attachments
1053 ,@(if (featurep 'xemacs) nil
1054 '(:help "Save attachments as external parts in Gcc copies"))]
1047 "----" 1055 "----"
1048 ;; 1056 ;;
1049 ("Change Security Method" 1057 ("Change Security Method"
@@ -1094,9 +1102,18 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1094 ["Emacs MIME manual" (lambda () (interactive) (message-info 4)) 1102 ["Emacs MIME manual" (lambda () (interactive) (message-info 4))
1095 ,@(if (featurep 'xemacs) '(t) 1103 ,@(if (featurep 'xemacs) '(t)
1096 '(:help "Display the Emacs MIME manual"))] 1104 '(:help "Display the Emacs MIME manual"))]
1097 ["PGG manual" (lambda () (interactive) (message-info 16)) 1105 ["PGG manual" (lambda () (interactive) (message-info mml2015-use))
1106 ;; XEmacs barfs on :visible.
1107 ,@(if (featurep 'xemacs) nil
1108 '(:visible (equal mml2015-use 'pgg)))
1109 ,@(if (featurep 'xemacs) '(t)
1110 '(:help "Display the PGG manual"))]
1111 ["EasyPG manual" (lambda () (interactive) (message-info mml2015-use))
1112 ;; XEmacs barfs on :visible.
1113 ,@(if (featurep 'xemacs) nil
1114 '(:visible (equal mml2015-use 'epg)))
1098 ,@(if (featurep 'xemacs) '(t) 1115 ,@(if (featurep 'xemacs) '(t)
1099 '(:help "Display the PGG manual"))])) 1116 '(:help "Display the EasyPG manual"))]))
1100 1117
1101(defvar mml-mode nil 1118(defvar mml-mode nil
1102 "Minor mode for editing MML.") 1119 "Minor mode for editing MML.")
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index 8add5e5215f..eb09b71f79f 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -999,7 +999,11 @@ Whether the passphrase is cached at all is controlled by
999(defun mml2015-epg-passphrase-callback (context key-id ignore) 999(defun mml2015-epg-passphrase-callback (context key-id ignore)
1000 (if (eq key-id 'SYM) 1000 (if (eq key-id 'SYM)
1001 (epg-passphrase-callback-function context key-id nil) 1001 (epg-passphrase-callback-function context key-id nil)
1002 (let* (entry 1002 (let* ((password-cache-key-id
1003 (if (eq key-id 'PIN)
1004 "PIN"
1005 key-id))
1006 entry
1003 (passphrase 1007 (passphrase
1004 (password-read 1008 (password-read
1005 (if (eq key-id 'PIN) 1009 (if (eq key-id 'PIN)
@@ -1007,14 +1011,12 @@ Whether the passphrase is cached at all is controlled by
1007 (if (setq entry (assoc key-id epg-user-id-alist)) 1011 (if (setq entry (assoc key-id epg-user-id-alist))
1008 (format "Passphrase for %s %s: " key-id (cdr entry)) 1012 (format "Passphrase for %s %s: " key-id (cdr entry))
1009 (format "Passphrase for %s: " key-id))) 1013 (format "Passphrase for %s: " key-id)))
1010 (if (eq key-id 'PIN) 1014 password-cache-key-id)))
1011 "PIN"
1012 key-id))))
1013 (when passphrase 1015 (when passphrase
1014 (let ((password-cache-expiry mml2015-passphrase-cache-expiry)) 1016 (let ((password-cache-expiry mml2015-passphrase-cache-expiry))
1015 (password-cache-add key-id passphrase)) 1017 (password-cache-add password-cache-key-id passphrase))
1016 (setq mml2015-epg-secret-key-id-list 1018 (setq mml2015-epg-secret-key-id-list
1017 (cons key-id mml2015-epg-secret-key-id-list)) 1019 (cons password-cache-key-id mml2015-epg-secret-key-id-list))
1018 (copy-sequence passphrase))))) 1020 (copy-sequence passphrase)))))
1019 1021
1020(defun mml2015-epg-find-usable-key (keys usage) 1022(defun mml2015-epg-find-usable-key (keys usage)
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 18c0e23f709..b2d23d32a80 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -555,7 +555,7 @@ If EXAMINE is non-nil the group is selected read-only."
555 (imap-mailbox-select group examine)) 555 (imap-mailbox-select group examine))
556 (let (minuid maxuid) 556 (let (minuid maxuid)
557 (when (> (imap-mailbox-get 'exists) 0) 557 (when (> (imap-mailbox-get 'exists) 0)
558 (imap-fetch "1,*" "UID" nil 'nouidfetch) 558 (imap-fetch "1:*" "UID" nil 'nouidfetch)
559 (imap-message-map (lambda (uid Uid) 559 (imap-message-map (lambda (uid Uid)
560 (setq minuid (if minuid (min minuid uid) uid) 560 (setq minuid (if minuid (min minuid uid) uid)
561 maxuid (if maxuid (max maxuid uid) uid))) 561 maxuid (if maxuid (max maxuid uid) uid)))
diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el
index a2e9532db13..af79acaa313 100644
--- a/lisp/gnus/nnmh.el
+++ b/lisp/gnus/nnmh.el
@@ -251,8 +251,11 @@ as unread by Gnus.")
251(deffoo nnmh-request-expire-articles (articles newsgroup 251(deffoo nnmh-request-expire-articles (articles newsgroup
252 &optional server force) 252 &optional server force)
253 (nnmh-possibly-change-directory newsgroup server) 253 (nnmh-possibly-change-directory newsgroup server)
254 (let* ((is-old t) 254 (let ((is-old t)
255 article rest mod-time) 255 (nnmail-expiry-target
256 (or (gnus-group-find-parameter newsgroup 'expiry-target t)
257 nnmail-expiry-target))
258 article rest mod-time)
256 (nnheader-init-server-buffer) 259 (nnheader-init-server-buffer)
257 260
258 (while (and articles is-old) 261 (while (and articles is-old)
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index f318ee303f0..a1a7e38d240 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1885,7 +1885,10 @@ Please refer to the following variables to customize the connection:
1885- `nntp-end-of-line'." 1885- `nntp-end-of-line'."
1886 (let ((command `(,nntp-telnet-command 1886 (let ((command `(,nntp-telnet-command
1887 ,@nntp-telnet-switches 1887 ,@nntp-telnet-switches
1888 ,nntp-address ,nntp-port-number)) 1888 ,nntp-address
1889 ,(if (integerp nntp-port-number)
1890 (number-to-string nntp-port-number)
1891 nntp-port-number)))
1889 proc) 1892 proc)
1890 (and nntp-pre-command 1893 (and nntp-pre-command
1891 (push nntp-pre-command command)) 1894 (push nntp-pre-command command))
@@ -1928,8 +1931,11 @@ Please refer to the following variables to customize the connection:
1928 (setq proc (apply 'start-process "nntpd" buffer command)) 1931 (setq proc (apply 'start-process "nntpd" buffer command))
1929 (with-current-buffer buffer 1932 (with-current-buffer buffer
1930 (nntp-wait-for-string "^r?telnet") 1933 (nntp-wait-for-string "^r?telnet")
1931 (process-send-string proc (concat "open " nntp-address 1934 (process-send-string proc (concat "open " nntp-address " "
1932 " " nntp-port-number "\n")) 1935 (if (integerp nntp-port-number)
1936 (number-to-string nntp-port-number)
1937 nntp-port-number)
1938 "\n"))
1933 (nntp-wait-for-string "^\r*20[01]") 1939 (nntp-wait-for-string "^\r*20[01]")
1934 (beginning-of-line) 1940 (beginning-of-line)
1935 (delete-region (point-min) (point)) 1941 (delete-region (point-min) (point))
@@ -1970,7 +1976,9 @@ Please refer to the following variables to customize the connection:
1970 ,nntp-via-netcat-command 1976 ,nntp-via-netcat-command
1971 ,@nntp-via-netcat-switches 1977 ,@nntp-via-netcat-switches
1972 ,nntp-address 1978 ,nntp-address
1973 ,nntp-port-number))) 1979 ,(if (integerp nntp-port-number)
1980 (number-to-string nntp-port-number)
1981 nntp-port-number))))
1974 (apply 'start-process "nntpd" buffer command))) 1982 (apply 'start-process "nntpd" buffer command)))
1975 1983
1976(defun nntp-open-via-telnet-and-telnet (buffer) 1984(defun nntp-open-via-telnet-and-telnet (buffer)
@@ -2029,7 +2037,9 @@ Please refer to the following variables to customize the connection:
2029 ,nntp-telnet-command 2037 ,nntp-telnet-command
2030 ,@nntp-telnet-switches 2038 ,@nntp-telnet-switches
2031 ,nntp-address 2039 ,nntp-address
2032 ,nntp-port-number))) 2040 ,(if (integerp nntp-port-number)
2041 (number-to-string nntp-port-number)
2042 nntp-port-number))))
2033 (process-send-string proc 2043 (process-send-string proc
2034 (concat (mapconcat 'identity 2044 (concat (mapconcat 'identity
2035 real-telnet-command " ") 2045 real-telnet-command " ")