diff options
| author | Miles Bader | 2008-03-29 19:54:11 +0000 |
|---|---|---|
| committer | Miles Bader | 2008-03-29 19:54:11 +0000 |
| commit | 9b3ebcb696524f3711c46a4386e54e9ab5388b74 (patch) | |
| tree | b5ff6dd7cf06b6dc284026824b0f052fb2644b01 | |
| parent | 9c06a1f304c51d595df7f9225f70f3d35af010fb (diff) | |
| download | emacs-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/ChangeLog | 46 | ||||
| -rw-r--r-- | doc/misc/gnus-faq.texi | 21 | ||||
| -rw-r--r-- | doc/misc/gnus-news.texi | 22 | ||||
| -rw-r--r-- | doc/misc/gnus.texi | 134 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 143 | ||||
| -rw-r--r-- | lisp/gnus/auth-source.el | 150 | ||||
| -rw-r--r-- | lisp/gnus/gnus-art.el | 72 | ||||
| -rw-r--r-- | lisp/gnus/gnus-group.el | 61 | ||||
| -rw-r--r-- | lisp/gnus/gnus-registry.el | 8 | ||||
| -rw-r--r-- | lisp/gnus/gnus-score.el | 12 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 23 | ||||
| -rw-r--r-- | lisp/gnus/mail-source.el | 3 | ||||
| -rw-r--r-- | lisp/gnus/message.el | 142 | ||||
| -rw-r--r-- | lisp/gnus/mml.el | 51 | ||||
| -rw-r--r-- | lisp/gnus/mml2015.el | 14 | ||||
| -rw-r--r-- | lisp/gnus/nnimap.el | 2 | ||||
| -rw-r--r-- | lisp/gnus/nnmh.el | 7 | ||||
| -rw-r--r-- | lisp/gnus/nntp.el | 20 |
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 @@ | |||
| 1 | 2008-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 | |||
| 8 | 2008-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 | |||
| 15 | 2008-03-16 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 16 | |||
| 17 | * gnus.texi (Smileys): Document `smiley-style'. | ||
| 18 | |||
| 19 | 2008-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 | |||
| 27 | 2008-03-20 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 28 | |||
| 29 | * gnus.texi (Emacsen): Remove obsolete stuff. | ||
| 30 | |||
| 31 | 2008-03-19 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 32 | |||
| 33 | * gnus.texi (Oort Gnus): Add version info WRT | ||
| 34 | `mail-source-delete-incoming'. | ||
| 35 | |||
| 36 | 2008-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 | |||
| 1 | 2008-03-26 Michael Albinus <michael.albinus@gmx.de> | 43 | 2008-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 @@ | |||
| 24 | 2008-03-14 Stefan Monnier <monnier@iro.umontreal.ca> | 66 | 2008-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 | ||
| 30 | 2008-03-13 Carsten Dominik <dominik@science.uva.nl> | 72 | 2008-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 | ||
| 2134 | There's the newsgroup gnu.emacs.gnus | 2134 | There'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, | 2136 | gmane.emacs.gnus.user}) which deals with general Gnus questions. If you |
| 2137 | gmane.emacs.gnus.user}) | 2137 | have questions about development versions of Gnus, you should better ask |
| 2138 | which deals with general Gnus questions. | 2138 | on the ding mailing list, see below. |
| 2139 | The ding mailing list (ding@@gnus.org) deals with development of | ||
| 2140 | Gnus. You can read the ding list via NNTP, too under the name | ||
| 2141 | @uref{http://dir.gmane.org/gmane.emacs.gnus.general, | ||
| 2142 | gmane.emacs.gnus.general} from news.gmane.org. | ||
| 2143 | 2139 | ||
| 2144 | If you want to stay in the big8, | 2140 | If you want to stay in the big8, |
| 2145 | news.software.newssreaders is also read by some Gnus | 2141 | news.software.newssreaders is also read by some Gnus |
| 2146 | users (but chances for qualified help are much better in | 2142 | users (but chances for qualified help are much better in |
| 2147 | the above groups) and if you speak German, there's | 2143 | the above groups). If you speak German, there's |
| 2148 | de.comm.software.gnus. | 2144 | de.comm.software.gnus. |
| 2149 | 2145 | ||
| 2146 | The ding mailing list (ding@@gnus.org) deals with development of | ||
| 2147 | Gnus. You can read the ding list via NNTP, too under the name | ||
| 2148 | @uref{http://dir.gmane.org/gmane.emacs.gnus.general, | ||
| 2149 | gmane.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 | |||
| 75 | passphrase is managed by this mechanism. Passwords for ManageSieve | 75 | passphrase is managed by this mechanism. Passwords for ManageSieve |
| 76 | connections are managed by this mechanism, after querying the user | 76 | connections are managed by this mechanism, after querying the user |
| 77 | about whether to do so. | 77 | about whether to do so. |
| 78 | |||
| 79 | @item Using EasyPG with Gnus | ||
| 80 | When EasyPG, is available, Gnus will use it instead of @acronym{PGG}. | ||
| 81 | EasyPG is an Emacs user interface to GNU Privacy Guard. @xref{Top, | ||
| 82 | ,EasyPG Assistant user's manual, epa, EasyPG Assistant user's manual}. | ||
| 83 | EasyPG 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}. | |||
| 98 | that are not reused when you select another article. @xref{Sticky | 104 | that are not reused when you select another article. @xref{Sticky |
| 99 | Articles}. | 105 | Articles}. |
| 100 | 106 | ||
| 107 | @c @item Bookmarks | ||
| 108 | @c FIXME: To be added | ||
| 109 | |||
| 110 | @item Gnus can selectively display @samp{text/html} articles | ||
| 111 | with 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 |
| 102 | inside article bodies using @kbd{W i} | 117 | inside 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 | |||
| 254 | renumbers all articles in a group, starting from 1 and removing gaps. | 269 | renumbers all articles in a group, starting from 1 and removing gaps. |
| 255 | As a consequence, you get a correct total article count (until | 270 | As a consequence, you get a correct total article count (until |
| 256 | messages are deleted again). | 271 | messages 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; | |||
| 391 | people should be empowered to do what they want by using (or abusing) | 391 | people should be empowered to do what they want by using (or abusing) |
| 392 | the program. | 392 | the program. |
| 393 | 393 | ||
| 394 | @c Adjust ../Makefile.in if you change the following line: | ||
| 395 | This 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}; | |||
| 2736 | newsgroups. | 2747 | newsgroups. |
| 2737 | 2748 | ||
| 2738 | 2749 | ||
| 2750 | The following commands create ephemeral groups. They can be called not | ||
| 2751 | only 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 | ||
| 2757 | Read an ephemeral group on Gmane.org. The articles are downloaded via | ||
| 2758 | HTTP using the URL specified by @code{gnus-gmane-group-download-format}. | ||
| 2759 | Gnus will prompt you for a group name, the start article number and an | ||
| 2760 | the article range. | ||
| 2761 | |||
| 2762 | @item gnus-read-ephemeral-gmane-group-url | ||
| 2763 | @findex gnus-read-ephemeral-gmane-group-url | ||
| 2764 | This command is similar to @code{gnus-read-ephemeral-gmane-group}, but | ||
| 2765 | the group name and the article number and range are constructed from a | ||
| 2766 | given @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 | ||
| 2775 | Read an Emacs bug report in an ephemeral group. Gnus will prompt for a | ||
| 2776 | bug number. The default is the number at point. The @acronym{URL} is | ||
| 2777 | specified 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 | ||
| 2781 | Read a Debian bug report in an ephemeral group. Analog to | ||
| 2782 | @code{gnus-read-ephemeral-emacs-bug-group}. | ||
| 2783 | @end table | ||
| 2784 | |||
| 2785 | Some of these command are also useful for article buttons, @xref{Article | ||
| 2786 | Buttons}. | ||
| 2787 | |||
| 2788 | Here 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 | |||
| 9679 | the same manner: | 9739 | the 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 | ||
| 9745 | View @samp{text/html} parts of the current article with a WWW browser. | ||
| 9746 | The message header is added to the beginning of every html part unless | ||
| 9747 | the prefix argument is given. | ||
| 9748 | |||
| 9749 | Warning: Spammers use links to images in HTML articles to verify whether | ||
| 9750 | you have read the message. As this command passes the @acronym{HTML} | ||
| 9751 | content to the browser without eliminating these ``web bugs'' you should | ||
| 9752 | only use it for mails from trusted senders. | ||
| 9753 | |||
| 9754 | If 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) |
| 9684 | Make all the @acronym{MIME} parts have buttons in front of them. This is | 9759 | Make 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 |
| 9835 | Display "multipart/related" parts as "multipart/mixed". | 9910 | Display "multipart/related" parts as "multipart/mixed". |
| 9836 | 9911 | ||
| 9837 | If displaying "text/html" is discouraged, see | 9912 | If 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) |
| 11541 | Insert the contents of the @acronym{MIME} object into the buffer | 11616 | Insert 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 |
| 11543 | the raw contents without decoding. If given a numerical prefix, you can | 11618 | the raw contents without decoding. If given a numerical prefix, you can |
| 11544 | do semi-manual charset stuff (see | 11619 | do 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 | ||
| 16886 | Even if you have added @code{"text/html"} to the | 16961 | Even 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 |
| 16888 | Customization, ,Display Customization, emacs-mime, The Emacs MIME | 16963 | Customization, ,Display Customization, emacs-mime, The Emacs MIME |
| 16889 | Manual}) since you don't want to see @acronym{HTML} parts, it might be | 16964 | Manual}) 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 | ||
| 22246 | There are specs for highlighting, and these are shared by all the format | 22323 | There are specs for highlighting, and these are shared by all the format |
| 22247 | variables. Text inside the @samp{%(} and @samp{%)} specifiers will get | 22324 | variables. Text inside the @samp{%(} and @samp{%)} specifiers will get |
| 22248 | the special @code{mouse-face} property set, which means that it will be | 22325 | the special @code{mouse-face} property set, which means that it will be |
| 22249 | highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer | 22326 | highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer |
| 22250 | over it. | 22327 | over it. |
| 22251 | 22328 | ||
| 22329 | @cindex %@{, %@} | ||
| 22330 | @vindex gnus-face-0 | ||
| 22252 | Text inside the @samp{%@{} and @samp{%@}} specifiers will have their | 22331 | Text inside the @samp{%@{} and @samp{%@}} specifiers will have their |
| 22253 | normal faces set using @code{gnus-face-0}, which is @code{bold} by | 22332 | normal faces set using @code{gnus-face-0}, which is @code{bold} by |
| 22254 | default. If you say @samp{%1@{}, you'll get @code{gnus-face-1} instead, | 22333 | default. 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 | ||
| 22259 | Text inside the @samp{%<<} and @samp{%>>} specifiers will get the | 22341 | Text inside the @samp{%<<} and @samp{%>>} specifiers will get the |
| 22260 | special @code{balloon-help} property set to | 22342 | special @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 | |||
| 23445 | the picture; and the third element is the name of the file to be | 23527 | the picture; and the third element is the name of the file to be |
| 23446 | displayed. | 23528 | displayed. |
| 23447 | 23529 | ||
| 23448 | The following variables customize where Smiley will look for these | 23530 | The following variables customize the appearance of the smileys: |
| 23449 | files: | ||
| 23450 | 23531 | ||
| 23451 | @table @code | 23532 | @table @code |
| 23452 | 23533 | ||
| 23534 | @item smiley-style | ||
| 23535 | @vindex smiley-style | ||
| 23536 | Specifies 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 | ||
| 23539 | images, 14x14 pixel). The default depends on the height of the default | ||
| 23540 | face. | ||
| 23541 | |||
| 23453 | @item smiley-data-directory | 23542 | @item smiley-data-directory |
| 23454 | @vindex smiley-data-directory | 23543 | @vindex smiley-data-directory |
| 23455 | Where Smiley will look for smiley faces files. | 23544 | Where Smiley will look for smiley faces files. You shouldn't set this |
| 23545 | variable 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 | |||
| 26190 | Emacs versions. Particularly, Gnus 5.10.8 should also work on Emacs | 26280 | Emacs versions. Particularly, Gnus 5.10.8 should also work on Emacs |
| 26191 | 20.7 and XEmacs 21.1. | 26281 | 20.7 and XEmacs 21.1. |
| 26192 | 26282 | ||
| 26193 | There are some vague differences between Gnus on the various | ||
| 26194 | platforms---XEmacs features more graphics (a logo and a toolbar)---but | ||
| 26195 | other than that, things should look pretty much the same under all | ||
| 26196 | Emacsen. | ||
| 26197 | |||
| 26198 | 26283 | ||
| 26199 | @node Gnus Development | 26284 | @node Gnus Development |
| 26200 | @subsection Gnus Development | 26285 | @subsection Gnus Development |
| 26201 | 26286 | ||
| 26202 | Gnus is developed in a two-phased cycle. The first phase involves much | 26287 | Gnus is developed in a two-phased cycle. The first phase involves much |
| 26203 | discussion on the @samp{ding@@gnus.org} mailing list, where people | 26288 | discussion on the development mailing list @samp{ding@@gnus.org}, where people |
| 26204 | propose changes and new features, post patches and new back ends. This | 26289 | propose changes and new features, post patches and new back ends. This |
| 26205 | phase is called the @dfn{alpha} phase, since the Gnusae released in this | 26290 | phase is called the @dfn{alpha} phase, since the Gnusae released in this |
| 26206 | phase are @dfn{alpha releases}, or (perhaps more commonly in other | 26291 | phase are @dfn{alpha releases}, or (perhaps more commonly in other |
| 26207 | circles) @dfn{snapshots}. During this phase, Gnus is assumed to be | 26292 | circles) @dfn{snapshots}. During this phase, Gnus is assumed to be |
| 26208 | unstable and should not be used by casual users. Gnus alpha releases | 26293 | unstable and should not be used by casual users. Gnus alpha releases |
| 26209 | have names like ``Red Gnus'' and ``Quassia Gnus''. | 26294 | have names like ``Oort Gnus'' and ``No Gnus''. @xref{Gnus Versions}. |
| 26210 | 26295 | ||
| 26211 | After futzing around for 50-100 alpha releases, Gnus is declared | 26296 | After 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, |
| 26213 | and is called things like ``Gnus 5.6.32'' instead. Normal people are | 26298 | and is called things like ``Gnus 5.10.1'' instead. Normal people are |
| 26214 | supposed to be able to use these, and these are mostly discussed on the | 26299 | supposed 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 |
| 26301 | mailing list @samp{info-gnus-english@@gnu.org} which is carried on Gmane | ||
| 26302 | as @samp{gmane.emacs.gnus.user}. These releases are finally integrated | ||
| 26303 | in 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 | |||
| 26232 | usually keep up with these rapid changes, while people on the newsgroup | 26320 | usually keep up with these rapid changes, while people on the newsgroup |
| 26233 | can't be assumed to do so. | 26321 | can't be assumed to do so. |
| 26234 | 26322 | ||
| 26235 | @c FIXME: | 26323 | So if you have problems with or questions about the alpha versions, |
| 26236 | @c ding = gmane.emacs.gnus.general | 26324 | direct 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 | 26325 | is also available on Gmane as @samp{gmane.emacs.gnus.general}. |
| 26238 | 26326 | ||
| 26327 | @cindex Incoming* | ||
| 26328 | @vindex mail-source-delete-incoming | ||
| 26329 | Some variable defaults differ between alpha Gnusae and released Gnusae, | ||
| 26330 | in particular, @code{mail-source-delete-incoming}. This is to prevent | ||
| 26331 | lossage 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 |
| 27470 | Old intermediate incoming mail files (@file{Incoming*}) are deleted | 27564 | Old intermediate incoming mail files (@file{Incoming*}) are deleted |
| 27471 | after a couple of days, not immediately. @xref{Mail Source | 27565 | after a couple of days, not immediately. @xref{Mail Source |
| 27472 | Customization}. (New in Gnus 5.10.10) | 27566 | Customization}. (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 @@ | |||
| 1 | 2008-03-28 Michael Harnois <mdharnois@gmail.com> (tiny change) | ||
| 2 | |||
| 3 | * nnimap.el (nnimap-find-minmax-uid): Fix Exchange 2007 IMAP problem. | ||
| 4 | |||
| 5 | 2008-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 | |||
| 28 | 2008-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 | |||
| 40 | 2008-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 | |||
| 45 | 2008-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 | |||
| 1 | 2008-03-20 Stefan Monnier <monnier@iro.umontreal.ca> | 54 | 2008-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 | ||
| 62 | 2008-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 | |||
| 67 | 2008-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 | |||
| 83 | 2008-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 | |||
| 91 | 2008-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 | |||
| 96 | 2008-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 | |||
| 102 | 2008-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 | |||
| 113 | 2008-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 | |||
| 118 | 2008-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 | |||
| 123 | 2008-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 | |||
| 135 | 2008-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 | |||
| 9 | 2008-03-12 Stefan Monnier <monnier@iro.umontreal.ca> | 141 | 2008-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 | ||
| 188 | 2008-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 | |||
| 56 | 2008-03-08 Reiner Steib <Reiner.Steib@gmx.de> | 193 | 2008-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 | ||
| 2098 | 2007-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no> | 2235 | 2007-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 | ||
| 44 | Each entry is the authentication type with optional properties." | 69 | Each 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 | |||
| 106 | Returns 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. |
| 179 | This variable can also be a list of regexp of headers to remain visible. | 179 | This variable can also be a list of regexp of headers to remain visible. |
| 180 | If this variable is non-nil, `gnus-ignored-headers' will be ignored." | 180 | If 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. |
| 2968 | The message header is added to the beginning of every html part unless | 2970 | The message header is added to the beginning of every html part unless |
| @@ -2970,18 +2972,20 @@ the prefix argument ARG is given. | |||
| 2970 | 2972 | ||
| 2971 | Warning: Spammers use links to images in HTML articles to verify | 2973 | Warning: Spammers use links to images in HTML articles to verify |
| 2972 | whether you have read the message. As | 2974 | whether 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 |
| 2974 | content to the browser without eliminating these \"web bugs\" you | 2976 | browser without eliminating these \"web bugs\" you should only |
| 2975 | should only use it for mails from trusted senders. | 2977 | use it for mails from trusted senders. |
| 2976 | 2978 | ||
| 2977 | If you alwasy want to display HTML part in the browser, set | 2979 | If 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. |
| 2331 | It must contain three \"%s\". They correspond to the group, the | 2331 | It 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. |
| 2343 | START is the first article. RANGE specifies how many articles | 2343 | START is the first article. RANGE specifies how many articles |
| 2344 | are fetched. The articles are downloaded via HTTP using the URL | 2344 | are fetched. The articles are downloaded via HTTP using the URL |
| 2345 | specified by `gnus-group-gmane-group-download-format'." | 2345 | specified 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 | ||
| 2372 | Valid input formats include: | 2372 | Valid 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. | ||
| 2422 | The URL format string must contain a single \"%s\", specifying | ||
| 2423 | the 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 | 420 | This variable is used to strip off the signature from quoted text |
| 421 | when `message-cite-function' is | ||
| 422 | `message-cite-original-without-signature'. Most useful values | ||
| 423 | are \"^-- $\" (strict) and \"^-- *$\" (loose; allow missing | ||
| 424 | whitespace)." | ||
| 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. |
| 1015 | Predefined functions include `message-cite-original' and | 1023 | Predefined 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 | ||
| 2487 | Prefixed with one \\[universal-argument], display the Emacs MIME manual. | 2496 | Prefixed with one \\[universal-argument], display the Emacs MIME |
| 2488 | Prefixed with two \\[universal-argument]'s, display the PGG manual." | 2497 | manual. With two \\[universal-argument]'s, display the EasyPG or |
| 2498 | PGG 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. | ||
| 6343 | When the full name in reply headers contains the mail | ||
| 6344 | address (e.g. \"foo@bar <foo@bar>\"), discard full name. | ||
| 6345 | ADDRCELL is a cons cell where the car is the mail address and the | ||
| 6346 | cdr 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. | ||
| 6355 | It is called in `message-get-reply-headers' for each recipient. | ||
| 6356 | The 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. | ||
| 7962 | If AFTER, insert after this header. If FORCE, insert new field | ||
| 7963 | even 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. | ||
| 7982 | Used 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 " ") |