aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2008-03-10 00:50:22 +0000
committerMiles Bader2008-03-10 00:50:22 +0000
commit8f7abae3a9c0dcb827f50688e802d634c7461ece (patch)
treefb3d3a87b3fef4ddb3e308aa57c378f424a2dc18
parent390b81fa98fa581afe965a2943d81d7dd07f0dc5 (diff)
downloademacs-8f7abae3a9c0dcb827f50688e802d634c7461ece.tar.gz
emacs-8f7abae3a9c0dcb827f50688e802d634c7461ece.zip
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1097
-rw-r--r--doc/misc/ChangeLog5
-rw-r--r--doc/misc/gnus-coding.texi4
-rw-r--r--lisp/gnus/ChangeLog80
-rw-r--r--lisp/gnus/auth-source.el86
-rw-r--r--lisp/gnus/gnus-art.el87
-rw-r--r--lisp/gnus/gnus-bookmark.el8
-rw-r--r--lisp/gnus/gnus-group.el4
-rw-r--r--lisp/gnus/gnus-registry.el200
-rw-r--r--lisp/gnus/gnus-sum.el13
-rw-r--r--lisp/gnus/message.el96
-rw-r--r--lisp/gnus/mm-decode.el24
-rw-r--r--lisp/gnus/mm-view.el2
-rw-r--r--lisp/gnus/mml.el29
-rw-r--r--lisp/gnus/mml2015.el11
-rw-r--r--lisp/net/imap.el1
-rw-r--r--lisp/net/netrc.el2
16 files changed, 511 insertions, 141 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index e89a7e31ec0..65f8a57c4fd 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,8 @@
12008-03-10 Reiner Steib <Reiner.Steib@gmx.de>
2
3 * gnus-coding.texi (Gnus Maintainance Guide): Update conventions for
4 custom versions.
5
12008-03-07 Alan Mackenzie <acm@muc.de> 62008-03-07 Alan Mackenzie <acm@muc.de>
2 7
3 * cc-mode.texi (Limitations and Known Bugs): State that the number of 8 * cc-mode.texi (Limitations and Known Bugs): State that the number of
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index b6dc3148da2..3b0df9fb322 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -256,7 +256,7 @@ changes. Only after a new major release, e.g. 5.10.1, there's usually a
256feature period of several months. After the release of Gnus 5.10.6 the 256feature period of several months. After the release of Gnus 5.10.6 the
257development of new features started again on the trunk while the 5.10 257development of new features started again on the trunk while the 5.10
258series is continued on the stable branch (v5-10) from which more stable 258series is continued on the stable branch (v5-10) from which more stable
259releases will be done when needed (5.10.7, @dots{}). 259releases will be done when needed (5.10.8, @dots{}).
260@ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader} 260@ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader}
261 261
262Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8 262Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8
@@ -366,7 +366,7 @@ v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the
366comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature 366comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature
367was added for Emacs 22.2 and Gnus 5.10.10. 367was added for Emacs 22.2 and Gnus 5.10.10.
368@c 368@c
369If the variable is new in No Gnus use @code{:version "23.0" ;; No Gnus}. 369If the variable is new in No Gnus use @code{:version "23.1" ;; No Gnus}.
370 370
371The same applies for customizable variables when its default value was 371The same applies for customizable variables when its default value was
372changed. 372changed.
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 7cc373e435b..e86ac06e974 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,13 +1,40 @@
12008-03-07 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * gnus-art.el (gnus-narrow-to-page): Position point properly.
4 (gnus-article-goto-prev-page): Work for articles having ^L's.
5
6 * gnus-sum.el (gnus-summary-end-of-article): Remove needless narrowing.
7
8 * mm-view.el (mm-w3m-standalone-supports-m17n-p): Fix typo.
9
12008-03-07 Karl Fogel <kfogel@red-bean.com> 102008-03-07 Karl Fogel <kfogel@red-bean.com>
2 11
3 * gnus-bookmark.el: Adjust for renames in bookmark.el. 12 * gnus-bookmark.el: Adjust for renames in bookmark.el.
4 (gnus-bookmark-make-record): Was `gnus-bookmark-make-cell'. 13 (gnus-bookmark-make-record): Was `gnus-bookmark-make-cell'.
5 (gnus-bookmark-jump): Adjust some variable names. 14 (gnus-bookmark-jump): Adjust some variable names.
6 15
72008-03-05 Reiner Steib <Reiner.Steib@gmx.de> 162008-03-06 Teodor Zlatanov <tzz@lifelogs.com>
8 17
9 * gnus-sum.el (gnus-print-buffer): Honor ps-print-color-p. 18 * auth-source.el: New package.
10 Suggested by <chris.anderton@zetnet.co.uk>. 19 (auth-source-choices): Add customization entry point variable.
20
21 * gnus-registry.el (gnus-registry-user-format-function-M): Fix concat
22 bug.
23
242008-03-05 Teodor Zlatanov <tzz@lifelogs.com>
25
26 * gnus-registry.el (gnus-registry-install): Allow 'ask as an option.
27 (gnus-registry-initialize, gnus-registry-install-p): Use it.
28 (gnus-registry-install-shortcuts): Renamed from
29 gnus-registry-install-shortcuts-and-menus. Installs the shortcuts in
30 the `gnus-registry-mark-map' keymap dynamically from
31 `gnus-registry-marks'. The generated functions update the summary line
32 when a registry mark is added or deleted, and will call
33 `gnus-registry-install-p' (see the comments in the code).
34 (gnus-registry-user-format-function-M): Use concat intelligently.
35
36 * gnus-sum.el (gnus-summary-make-menu-bar): Add menu entries for all
37 the registry mark functions.
11 38
122008-03-05 Glenn Morris <rgm@gnu.org> 392008-03-05 Glenn Morris <rgm@gnu.org>
13 40
@@ -16,12 +43,34 @@
16 gnus-art. 43 gnus-art.
17 (top-level): No need to load own source when compiling. 44 (top-level): No need to load own source when compiling.
18 45
462008-03-04 Reiner Steib <Reiner.Steib@gmx.de>
47
48 * gnus-sum.el (gnus-print-buffer): Honor ps-print-color-p.
49 Suggested by <chris.anderton@zetnet.co.uk>.
50
192008-03-04 Glenn Morris <rgm@gnu.org> 512008-03-04 Glenn Morris <rgm@gnu.org>
20 52
21 * gnus-sum.el (top-level): No need to require gnus when compiling, 53 * gnus-sum.el (top-level): No need to require gnus when compiling,
22 since unconditionally required near start of file. 54 since unconditionally required near start of file.
23 (gnus-summary-display-while-building): Move definition before use. 55 (gnus-summary-display-while-building): Move definition before use.
24 56
572008-03-04 Teodor Zlatanov <tzz@lifelogs.com>
58
59 * gnus-registry.el (gnus-registry-user-format-function-M): Add
60 formatting function.
61
622008-03-03 Teodor Zlatanov <tzz@lifelogs.com>
63
64 * gnus-registry.el (gnus-registry-marks): Changed format to be nicer
65 with plists.
66 (gnus-registry-do-marks, gnus-registry-install-shortcuts-and-menus):
67 Use new format.
68
692008-03-03 Katsumi Yamaoka <yamaoka@jpl.org>
70
71 * gnus-art.el (gnus-article-describe-bindings): Work for the version of
72 `where-is-internal' that returns a range of key sequences.
73
252008-03-03 Stefan Monnier <monnier@iro.umontreal.ca> 742008-03-03 Stefan Monnier <monnier@iro.umontreal.ca>
26 75
27 * mm-bodies.el (mm-decode-content-transfer-encoding): Simplify. 76 * mm-bodies.el (mm-decode-content-transfer-encoding): Simplify.
@@ -36,6 +85,31 @@
36 * gnus-group.el (gnus-update-group-mark-positions): 85 * gnus-group.el (gnus-update-group-mark-positions):
37 Use mm-string-to-multibyte. 86 Use mm-string-to-multibyte.
38 87
882008-03-02 Reiner Steib <Reiner.Steib@gmx.de>
89
90 * mml2015.el (mml2015-extract-cleartext-signature): Explain that it
91 doesn't handle NotDashEscaped.
92
93 * mml.el (mml-menu): Improve help entries. Move Sign/Encrypt Part.
94 (mml-dnd-attach-options): Fix typo in custom choice.
95
96 * gnus-group.el (gnus-group-read-ephemeral-gmane-group): Change
97 nndoc-article-type to mbox.
98 (gnus-group-read-ephemeral-gmane-group-url): Support permalink.
99
100 * mm-decode.el (mm-text-html-renderer): Prefer w3m over w3. Fall back
101 to nil, instead of html2text.
102
103 * imap.el (imap-debug): Add `imap-ping-server'.
104
105 * gnus-bookmark.el: Add FIXMEs.
106
107 * message.el (message-form-letter-separator)
108 (message-send-form-letter-delay): New variables.
109 (message-send-form-letter): Use them. New command to send form
110 letters. Requested by Uwe Siart.
111 (message-send-mail-function): Doc fix. Add "Other" custom option.
112
392008-02-29 Andreas Seltenreich <andreas@gate450.dyndns.org> 1132008-02-29 Andreas Seltenreich <andreas@gate450.dyndns.org>
40 114
41 * nnweb.el (nnweb-google-parse-1): Fix date parsing on articles with 115 * nnweb.el (nnweb-google-parse-1): Fix date parsing on articles with
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el
new file mode 100644
index 00000000000..116d8b4a6a1
--- /dev/null
+++ b/lisp/gnus/auth-source.el
@@ -0,0 +1,86 @@
1;;; auth-source.el --- authentication sources for Gnus and Emacs
2
3;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
4;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
5
6;; Author: Ted Zlatanov <tzz@lifelogs.com>
7;; Keywords: news
8
9;; This file is part of GNU Emacs.
10
11;; GNU Emacs is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
13;; the Free Software Foundation; either version 3, or (at your option)
14;; any later version.
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs; see the file COPYING. If not, write to the
23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24;; Boston, MA 02110-1301, USA.
25
26;;; Commentary:
27
28;; This is the auth-source.el package. It lets users tell Gnus how to
29;; authenticate in a single place. Simplicity is the goal. Instead
30;; of providing 5000 options, we'll stick to simple, easy to
31;; understand options.
32;;; Code:
33
34(eval-when-compile (require 'cl))
35
36(defgroup auth-source nil
37 "Authentication sources."
38 :version "22.1"
39 :group 'gnus)
40
41(defcustom auth-source-choices nil
42 "List of authentication sources.
43
44Each entry is the authentication type with optional properties."
45 :group 'auth-source
46 :type '(repeat :tag "Authentication Sources"
47 (cons :tag "Source definition"
48 (group :tag "Select a source" :inline t
49 (const :format "" :value :source)
50 (choice :tag "Authentication information"
51 (const :tag "None" nil)
52 (file :tag "File")))
53 (checklist :tag "Options" :greedy t
54 (group :inline t
55 (choice :tag "Choose the hosts"
56 (group :tag "Select host by name" :inline t
57 (const :format "" :value :host)
58 (string :tag "Host name"))
59 (group :tag "Select host by regular expression" :inline t
60 (const :format "" :value :host-regex)
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
78;; temp for debugging
79;; (customize-variable 'auth-source-choices)
80;; (setq auth-source-choices nil)
81;; (format "%S" auth-source-choices)
82
83(provide 'auth-source)
84
85;; arch-tag: ff1afe78-06e9-42c2-b693-e9f922cbe4ab
86;;; auth-source.el ends here
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 0b3293f4bb9..9033ef1ff35 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -5988,39 +5988,51 @@ If given a numerical ARG, move forward ARG pages."
5988 (interactive "P") 5988 (interactive "P")
5989 (setq arg (if arg (prefix-numeric-value arg) 0)) 5989 (setq arg (if arg (prefix-numeric-value arg) 0))
5990 (with-current-buffer gnus-article-buffer 5990 (with-current-buffer gnus-article-buffer
5991 (goto-char (point-min))
5992 (widen) 5991 (widen)
5993 ;; Remove any old next/prev buttons. 5992 ;; Remove any old next/prev buttons.
5994 (when (gnus-visual-p 'page-marker) 5993 (when (gnus-visual-p 'page-marker)
5995 (let ((inhibit-read-only t)) 5994 (let ((inhibit-read-only t))
5996 (gnus-remove-text-with-property 'gnus-prev) 5995 (gnus-remove-text-with-property 'gnus-prev)
5997 (gnus-remove-text-with-property 'gnus-next))) 5996 (gnus-remove-text-with-property 'gnus-next)))
5998 (if 5997 (let (st nd pt)
5999 (cond ((< arg 0) 5998 (when (save-excursion
6000 (re-search-backward page-delimiter nil 'move (1+ (abs arg)))) 5999 (cond ((< arg 0)
6001 ((> arg 0) 6000 (if (re-search-backward page-delimiter nil 'move (abs arg))
6002 (re-search-forward page-delimiter nil 'move arg))) 6001 (prog1
6003 (goto-char (match-end 0)) 6002 (setq nd (match-beginning 0)
6004 (save-excursion 6003 pt nd)
6005 (goto-char (point-min)) 6004 (when (re-search-backward page-delimiter nil t)
6006 (setq gnus-page-broken 6005 (setq st (match-end 0))))
6007 (and (re-search-forward page-delimiter nil t) t)))) 6006 (when (re-search-forward page-delimiter nil t)
6008 (when gnus-page-broken 6007 (setq nd (match-beginning 0)
6009 (narrow-to-region 6008 pt (point-min)))))
6010 (point) 6009 ((> arg 0)
6011 (if (re-search-forward page-delimiter nil 'move) 6010 (if (re-search-forward page-delimiter nil 'move arg)
6012 (match-beginning 0) 6011 (prog1
6013 (point))) 6012 (setq st (match-end 0)
6014 (when (and (gnus-visual-p 'page-marker) 6013 pt st)
6015 (> (point-min) (save-restriction (widen) (point-min)))) 6014 (when (re-search-forward page-delimiter nil t)
6016 (save-excursion 6015 (setq nd (match-beginning 0))))
6017 (goto-char (point-min)) 6016 (when (re-search-backward page-delimiter nil t)
6018 (gnus-insert-prev-page-button))) 6017 (setq st (match-end 0)
6019 (when (and (gnus-visual-p 'page-marker) 6018 pt (point-max)))))
6020 (< (point-max) (save-restriction (widen) (point-max)))) 6019 (t
6021 (save-excursion 6020 (when (re-search-backward page-delimiter nil t)
6022 (goto-char (point-max)) 6021 (goto-char (setq st (match-end 0))))
6023 (gnus-insert-next-page-button)))))) 6022 (when (re-search-forward page-delimiter nil t)
6023 (setq nd (match-beginning 0)))
6024 (or st nd))))
6025 (setq gnus-page-broken t)
6026 (when pt (goto-char pt))
6027 (narrow-to-region (or st (point-min)) (or nd (point-max)))
6028 (when (gnus-visual-p 'page-marker)
6029 (save-excursion
6030 (when nd
6031 (goto-char nd)
6032 (gnus-insert-next-page-button))
6033 (when st
6034 (goto-char st)
6035 (gnus-insert-prev-page-button))))))))
6024 6036
6025;; Article mode commands 6037;; Article mode commands
6026 6038
@@ -6035,7 +6047,7 @@ If given a numerical ARG, move forward ARG pages."
6035(defun gnus-article-goto-prev-page () 6047(defun gnus-article-goto-prev-page ()
6036 "Show the previous page of the article." 6048 "Show the previous page of the article."
6037 (interactive) 6049 (interactive)
6038 (if (bobp) 6050 (if (save-restriction (widen) (bobp)) ;; Real beginning-of-buffer?
6039 (gnus-article-read-summary-keys nil (gnus-character-to-event ?p)) 6051 (gnus-article-read-summary-keys nil (gnus-character-to-event ?p))
6040 (gnus-article-prev-page nil))) 6052 (gnus-article-prev-page nil)))
6041 6053
@@ -6395,10 +6407,21 @@ then we display only bindings that start with that prefix."
6395 (define-key map [t] nil) 6407 (define-key map [t] nil)
6396 (with-current-buffer gnus-article-current-summary 6408 (with-current-buffer gnus-article-current-summary
6397 (set-keymap-parent map (key-binding "S")) 6409 (set-keymap-parent map (key-binding "S"))
6398 (let (def gnus-pick-mode) 6410 (let (key def gnus-pick-mode)
6399 (dolist (key sumkeys) 6411 (while sumkeys
6400 (when (setq def (key-binding key)) 6412 (setq key (pop sumkeys))
6401 (define-key keymap key def)))) 6413 (cond ((and (vectorp key) (= (length key) 1)
6414 (consp (setq def (aref key 0)))
6415 (numberp (car def)) (numberp (cdr def)))
6416 (when (< (max (car def) (cdr def)) 128)
6417 (setq sumkeys
6418 (append (mapcar
6419 #'vector
6420 (nreverse (gnus-uncompress-range def)))
6421 sumkeys))))
6422 ((setq def (key-binding key))
6423 (unless (eq def 'undefined)
6424 (define-key keymap key def))))))
6402 (when (boundp 'gnus-agent-summary-mode) 6425 (when (boundp 'gnus-agent-summary-mode)
6403 (setq agent gnus-agent-summary-mode)) 6426 (setq agent gnus-agent-summary-mode))
6404 (when (boundp 'gnus-draft-mode) 6427 (when (boundp 'gnus-draft-mode)
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
index 41b124e697a..076ac52406d 100644
--- a/lisp/gnus/gnus-bookmark.el
+++ b/lisp/gnus/gnus-bookmark.el
@@ -62,6 +62,14 @@
62;; (define-key global-map "\C-crj" 'gnus-bookmark-jump) 62;; (define-key global-map "\C-crj" 'gnus-bookmark-jump)
63;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list) 63;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list)
64 64
65;; FIXME: Add keybindings, see
66;; http://thread.gmane.org/gmane.emacs.gnus.general/63101/focus=63379
67;; http://thread.gmane.org/v9fxx9fkm4.fsf@marauder.physik.uni-ulm.de
68
69;; FIXME: Check if `gnus-bookmark.el' should use
70;; `bookmark-make-cell-function'.
71;; Cf. http://article.gmane.org/gmane.emacs.gnus.general/66076
72
65(defgroup gnus-bookmark nil 73(defgroup gnus-bookmark nil
66 "Setting, annotation and jumping to Gnus bookmarks." 74 "Setting, annotation and jumping to Gnus bookmarks."
67 :group 'gnus) 75 :group 'gnus)
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 466a846c675..8e2f82b5402 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -2363,7 +2363,7 @@ specified by `gnus-group-gmane-group-download-format'."
2363 (gnus-group-read-ephemeral-group 2363 (gnus-group-read-ephemeral-group
2364 (format "%s.start-%s.range-%s" group start range) 2364 (format "%s.start-%s.range-%s" group start range)
2365 `(nndoc ,tmpfile 2365 `(nndoc ,tmpfile
2366 (nndoc-article-type guess)))) 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-group-read-ephemeral-gmane-group-url (url)
@@ -2397,7 +2397,7 @@ Valid input formats include:
2397 ;; URLs providing `group' and `start': 2397 ;; URLs providing `group' and `start':
2398 ((or (string-match 2398 ((or (string-match
2399 ;; http://article.gmane.org/gmane.comp.gnu.make.bugs/3584 2399 ;; http://article.gmane.org/gmane.comp.gnu.make.bugs/3584
2400 "^http://\\(?:thread\\|article\\)\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)" 2400 "^http://\\(?:thread\\|article\\|permalink\\)\.gmane\.org/\\([^/]+\\)/\\([0-9]+\\)"
2401 url) 2401 url)
2402 (string-match 2402 (string-match
2403 ;; Don't advertize these in the doc string yet: 2403 ;; Don't advertize these in the doc string yet:
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 2803cd9db6d..5141a5e2d32 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -80,20 +80,20 @@
80 80
81(defcustom gnus-registry-marks 81(defcustom gnus-registry-marks
82 '((Important 82 '((Important
83 (char . ?i) 83 :char ?i
84 (image . "summary_important")) 84 :image "summary_important")
85 (Work 85 (Work
86 (char . ?w) 86 :char ?w
87 (image . "summary_work")) 87 :image "summary_work")
88 (Personal 88 (Personal
89 (char . ?p) 89 :char ?p
90 (image . "summary_personal")) 90 :image "summary_personal")
91 (To-Do 91 (To-Do
92 (char . ?t) 92 :char ?t
93 (image . "summary_todo")) 93 :image "summary_todo")
94 (Later 94 (Later
95 (char . ?l) 95 :char ?l
96 (image . "summary_later"))) 96 :image "summary_later"))
97 97
98 "List of registry marks and their options. 98 "List of registry marks and their options.
99 99
@@ -106,14 +106,16 @@ line display and for keyboard shortcuts.
106Each entry must have an image string to be useful for visual 106Each entry must have an image string to be useful for visual
107display." 107display."
108 :group 'gnus-registry 108 :group 'gnus-registry
109 :type '(alist :key-type symbol 109 :type '(repeat :tag "Registry Marks"
110 :value-type (set :tag "Mark details" 110 (cons :tag "Mark"
111 (cons :tag "Shortcut" 111 (symbol :tag "Name")
112 (const :tag "Character code" char) 112 (checklist :tag "Options" :greedy t
113 character) 113 (group :inline t
114 (cons :tag "Visual" 114 (const :format "" :value :char)
115 (const :tag "Image" image) 115 (character :tag "Character code"))
116 string)))) 116 (group :inline t
117 (const :format "" :value :image)
118 (string :tag "Image"))))))
117 119
118(defcustom gnus-registry-default-mark 'To-Do 120(defcustom gnus-registry-default-mark 'To-Do
119 "The default mark. Should be a valid key for `gnus-registry-marks'." 121 "The default mark. Should be a valid key for `gnus-registry-marks'."
@@ -130,10 +132,12 @@ references.'"
130 :group 'gnus-registry 132 :group 'gnus-registry
131 :type '(repeat regexp)) 133 :type '(repeat regexp))
132 134
133(defcustom gnus-registry-install nil 135(defcustom gnus-registry-install 'ask
134 "Whether the registry should be installed." 136 "Whether the registry should be installed."
135 :group 'gnus-registry 137 :group 'gnus-registry
136 :type 'boolean) 138 :type '(choice (const :tag "Never Install" nil)
139 (const :tag "Always Install" t)
140 (const :tag "Ask Me" ask)))
137 141
138(defcustom gnus-registry-clean-empty t 142(defcustom gnus-registry-clean-empty t
139 "Whether the empty registry entries should be deleted. 143 "Whether the empty registry entries should be deleted.
@@ -700,24 +704,22 @@ Consults `gnus-registry-unfollowed-groups' and
700 704
701FUNCTION should take two parameters, a mark symbol and the cell value." 705FUNCTION should take two parameters, a mark symbol and the cell value."
702 (dolist (mark-info gnus-registry-marks) 706 (dolist (mark-info gnus-registry-marks)
703 (let ((mark (car-safe mark-info)) 707 (let* ((mark (car-safe mark-info))
704 (data (cdr-safe mark-info))) 708 (data (cdr-safe mark-info))
705 (dolist (cell data) 709 (cell-data (plist-get data type)))
706 (let ((cell-type (car-safe cell)) 710 (when cell-data
707 (cell-data (cdr-safe cell))) 711 (funcall function mark cell-data)))))
708 (when (equal type cell-type)
709 (funcall function mark cell-data)))))))
710 712
711;;; this is ugly code, but I don't know how to do it better 713;;; this is ugly code, but I don't know how to do it better
712;;; TODO: clear the gnus-registry-mark-map before running 714(defun gnus-registry-install-shortcuts ()
713(defun gnus-registry-install-shortcuts-and-menus ()
714 "Install the keyboard shortcuts and menus for the registry. 715 "Install the keyboard shortcuts and menus for the registry.
715Uses `gnus-registry-marks' to find what shortcuts to install." 716Uses `gnus-registry-marks' to find what shortcuts to install."
716 (gnus-registry-do-marks 717 (let (keys-plist)
717 'char 718 (gnus-registry-do-marks
718 (lambda (mark data) 719 :char
719 (let ((function-format 720 (lambda (mark data)
720 (format "gnus-registry-%%s-article-%s-mark" mark))) 721 (let ((function-format
722 (format "gnus-registry-%%s-article-%s-mark" mark)))
721 723
722;;; The following generates these functions: 724;;; The following generates these functions:
723;;; (defun gnus-registry-set-article-Important-mark (&rest articles) 725;;; (defun gnus-registry-set-article-Important-mark (&rest articles)
@@ -729,44 +731,69 @@ Uses `gnus-registry-marks' to find what shortcuts to install."
729;;; (interactive (gnus-summary-work-articles current-prefix-arg)) 731;;; (interactive (gnus-summary-work-articles current-prefix-arg))
730;;; (gnus-registry-set-article-mark-internal 'Important articles t t)) 732;;; (gnus-registry-set-article-mark-internal 'Important articles t t))
731 733
732 (dolist (remove '(t nil)) 734 (dolist (remove '(t nil))
733 (let* ((variant-name (if remove "remove" "set")) 735 (let* ((variant-name (if remove "remove" "set"))
734 (function-name (format function-format variant-name)) 736 (function-name (format function-format variant-name))
735 (shortcut (format "%c" data)) 737 (shortcut (format "%c" data))
736 (shortcut (if remove (upcase shortcut) shortcut))) 738 (shortcut (if remove (upcase shortcut) shortcut)))
737 (unintern function-name) 739 (unintern function-name)
738 (eval 740 (eval
739 `(defun 741 `(defun
740 ;; function name 742 ;; function name
741 ,(intern function-name) 743 ,(intern function-name)
742 ;; parameter definition 744 ;; parameter definition
743 (&rest articles) 745 (&rest articles)
744 ;; documentation 746 ;; documentation
745 ,(format 747 ,(format
746 "%s the %s mark over process-marked ARTICLES." 748 "%s the %s mark over process-marked ARTICLES."
747 (upcase-initials variant-name) 749 (upcase-initials variant-name)
748 mark) 750 mark)
749 ;; interactive definition 751 ;; interactive definition
750 (interactive 752 (interactive
751 (gnus-summary-work-articles current-prefix-arg)) 753 (gnus-summary-work-articles current-prefix-arg))
752 ;; actual code 754 ;; actual code
753 (gnus-registry-set-article-mark-internal 755
754 ;; all this just to get the mark, I must be doing it wrong 756 ;; if this is called and the user doesn't want the
755 (intern ,(symbol-name mark)) 757 ;; registry enabled, we'll ask anyhow
756 articles ,remove t)))))))) 758 (when (eq gnus-registry-install nil)
757 ;; I don't know how to do this inside the loop above, because 759 (setq gnus-registry-install 'ask))
758 ;; gnus-define-keys is a macro 760
759 (gnus-define-keys (gnus-registry-mark-map "M" gnus-summary-mark-map) 761 ;; now the user is asked if gnus-registry-install is 'ask
760 "i" gnus-registry-set-article-Important-mark 762 (when (gnus-registry-install-p)
761 "I" gnus-registry-remove-article-Important-mark 763 (gnus-registry-set-article-mark-internal
762 "w" gnus-registry-set-article-Work-mark 764 ;; all this just to get the mark, I must be doing it wrong
763 "W" gnus-registry-remove-article-Work-mark 765 (intern ,(symbol-name mark))
764 "l" gnus-registry-set-article-Later-mark 766 articles ,remove t)
765 "L" gnus-registry-remove-article-Later-mark 767 (dolist (article articles)
766 "p" gnus-registry-set-article-Personal-mark 768 (gnus-summary-update-article
767 "P" gnus-registry-remove-article-Personal-mark 769 article
768 "t" gnus-registry-set-article-To-Do-mark 770 (assoc article (gnus-data-list nil)))))))
769 "T" gnus-registry-remove-article-To-Do-mark)) 771 (push (intern function-name) keys-plist)
772 (push shortcut keys-plist)
773 (gnus-message
774 9
775 "Defined mark handling function %s"
776 function-name))))))
777 (gnus-define-keys-1
778 '(gnus-registry-mark-map "M" gnus-summary-mark-map)
779 keys-plist)))
780
781;;; use like this:
782;;; (defalias 'gnus-user-format-function-M
783;;; 'gnus-registry-user-format-function-M)
784(defun gnus-registry-user-format-function-M (headers)
785 (let* ((id (mail-header-message-id headers))
786 (marks (when id (gnus-registry-fetch-extra-marks id))))
787 (apply 'concat (mapcar (lambda(mark)
788 (let ((c
789 (plist-get
790 (cdr-safe
791 (assoc mark gnus-registry-marks))
792 :char)))
793 (if c
794 (list c)
795 nil)))
796 marks))))
770 797
771(defun gnus-registry-read-mark () 798(defun gnus-registry-read-mark ()
772 "Read a mark name from the user with completion." 799 "Read a mark name from the user with completion."
@@ -1033,10 +1060,12 @@ Returns the first place where the trail finds a group name."
1033 1060
1034;;;###autoload 1061;;;###autoload
1035(defun gnus-registry-initialize () 1062(defun gnus-registry-initialize ()
1063"Initialize the Gnus registry."
1036 (interactive) 1064 (interactive)
1037 (setq gnus-registry-install t) 1065 (gnus-message 5 "Initializing the registry")
1066 (setq gnus-registry-install t) ; in case it was 'ask or nil
1038 (gnus-registry-install-hooks) 1067 (gnus-registry-install-hooks)
1039 (gnus-registry-install-shortcuts-and-menus) 1068 (gnus-registry-install-shortcuts)
1040 (gnus-registry-read)) 1069 (gnus-registry-read))
1041 1070
1042;;;###autoload 1071;;;###autoload
@@ -1068,11 +1097,24 @@ Returns the first place where the trail finds a group name."
1068 1097
1069(add-hook 'gnus-registry-unload-hook 'gnus-registry-unload-hook) 1098(add-hook 'gnus-registry-unload-hook 'gnus-registry-unload-hook)
1070 1099
1071(when gnus-registry-install 1100(defun gnus-registry-install-p ()
1072 (gnus-registry-install-hooks) 1101 (interactive)
1073 (gnus-registry-read)) 1102 (when (eq gnus-registry-install 'ask)
1074 1103 (setq gnus-registry-install
1075;; TODO: a lot of things 1104 (gnus-y-or-n-p
1105 (concat "Enable the Gnus registry? "
1106 "See the variable `gnus-registry-install' "
1107 "to get rid of this query permanently. ")))
1108 (when gnus-registry-install
1109 ;; we just set gnus-registry-install to t, so initialize the registry!
1110 (gnus-registry-initialize)))
1111;;; we could call it here: (customize-variable 'gnus-registry-install)
1112 gnus-registry-install)
1113
1114(when (gnus-registry-install-p)
1115 (gnus-registry-initialize))
1116
1117;; TODO: a few things
1076 1118
1077(provide 'gnus-registry) 1119(provide 'gnus-registry)
1078 1120
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 48232ae53f7..d6abbd6c131 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -2582,6 +2582,17 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
2582 ["Set expirable mark" gnus-summary-mark-as-expirable t] 2582 ["Set expirable mark" gnus-summary-mark-as-expirable t]
2583 ["Set bookmark" gnus-summary-set-bookmark t] 2583 ["Set bookmark" gnus-summary-set-bookmark t]
2584 ["Remove bookmark" gnus-summary-remove-bookmark t]) 2584 ["Remove bookmark" gnus-summary-remove-bookmark t])
2585 ("Registry Mark"
2586 ["Important" gnus-registry-set-article-Important-mark t]
2587 ["Not Important" gnus-registry-remove-article-Important-mark t]
2588 ["Work" gnus-registry-set-article-Work-mark t]
2589 ["Not Work" gnus-registry-remove-article-Work-mark t]
2590 ["Later" gnus-registry-set-article-Later-mark t]
2591 ["Not Later" gnus-registry-remove-article-Later-mark t]
2592 ["Personal" gnus-registry-set-article-Personal-mark t]
2593 ["Not Personal" gnus-registry-remove-article-Personal-mark t]
2594 ["To Do" gnus-registry-set-article-To-Do-mark t]
2595 ["Not To Do" gnus-registry-remove-article-To-Do-mark t])
2585 ("Limit to" 2596 ("Limit to"
2586 ["Marks..." gnus-summary-limit-to-marks t] 2597 ["Marks..." gnus-summary-limit-to-marks t]
2587 ["Subject..." gnus-summary-limit-to-subject t] 2598 ["Subject..." gnus-summary-limit-to-subject t]
@@ -9210,8 +9221,6 @@ article. If BACKWARD (the prefix) is non-nil, search backward instead."
9210 (goto-char (point-max)) 9221 (goto-char (point-max))
9211 (recenter -3) 9222 (recenter -3)
9212 (when gnus-break-pages 9223 (when gnus-break-pages
9213 (when (re-search-backward page-delimiter nil t)
9214 (narrow-to-region (match-end 0) (point-max)))
9215 (gnus-narrow-to-page)))) 9224 (gnus-narrow-to-page))))
9216 9225
9217(defun gnus-summary-print-truncate-and-quote (string &optional len) 9226(defun gnus-summary-print-truncate-and-quote (string &optional len)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 32f191d918b..44c282bbd36 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -652,7 +652,8 @@ Valid values include `message-send-mail-with-sendmail'
652`message-send-mail-with-mh', `message-send-mail-with-qmail', 652`message-send-mail-with-mh', `message-send-mail-with-qmail',
653`message-smtpmail-send-it', `smtpmail-send-it', 653`message-smtpmail-send-it', `smtpmail-send-it',
654`feedmail-send-it' and `message-send-mail-with-mailclient'. The 654`feedmail-send-it' and `message-send-mail-with-mailclient'. The
655default is system dependent. 655default is system dependent and determined by the function
656`message-send-mail-function'.
656 657
657See also `send-mail-function'." 658See also `send-mail-function'."
658 :type '(radio (function-item message-send-mail-with-sendmail) 659 :type '(radio (function-item message-send-mail-with-sendmail)
@@ -661,7 +662,6 @@ See also `send-mail-function'."
661 (function-item message-smtpmail-send-it) 662 (function-item message-smtpmail-send-it)
662 (function-item smtpmail-send-it) 663 (function-item smtpmail-send-it)
663 (function-item feedmail-send-it) 664 (function-item feedmail-send-it)
664 (function :tag "Other")
665 (function-item message-send-mail-with-mailclient 665 (function-item message-send-mail-with-mailclient
666 :tag "Use Mailclient package") 666 :tag "Use Mailclient package")
667 (function :tag "Other")) 667 (function :tag "Other"))
@@ -7807,6 +7807,98 @@ From headers in the original article."
7807 (delete-region start end) 7807 (delete-region start end)
7808 (insert match))))) 7808 (insert match)))))
7809 7809
7810;; To send pre-formatted letters like the example below, you can use
7811;; `message-send-form-letter':
7812;; --8<---------------cut here---------------start------------->8---
7813;; To: alice@invalid.invalid
7814;; Subject: Verification of your contact information
7815;; From: Contact verification <admin@foo.invalid>
7816;; --text follows this line--
7817;; Hi Alice,
7818;; please verify that your contact information is still valid:
7819;; Alice A, A avenue 11, 1111 A town, Austria
7820;; ----------next form letter message follows this line----------
7821;; To: bob@invalid.invalid
7822;; Subject: Verification of your contact information
7823;; From: Contact verification <admin@foo.invalid>
7824;; --text follows this line--
7825;; Hi Bob,
7826;; please verify that your contact information is still valid:
7827;; Bob, B street 22, 22222 Be town, Belgium
7828;; ----------next form letter message follows this line----------
7829;; To: charlie@invalid.invalid
7830;; Subject: Verification of your contact information
7831;; From: Contact verification <admin@foo.invalid>
7832;; --text follows this line--
7833;; Hi Charlie,
7834;; please verify that your contact information is still valid:
7835;; Charlie Chaplin, C plaza 33, 33333 C town, Chile
7836;; --8<---------------cut here---------------end--------------->8---
7837
7838;; FIXME: What is the most common term (circular letter, form letter, serial
7839;; letter, standard letter) for such kind of letter? See also
7840;; <http://en.wikipedia.org/wiki/Form_letter>
7841
7842;; FIXME: Maybe extent message-mode's font-lock support to recognize
7843;; `message-form-letter-separator', i.e. highlight each message like a single
7844;; message.
7845
7846(defcustom message-form-letter-separator
7847 "\n----------next form letter message follows this line----------\n"
7848 "Separator for `message-send-form-letter'."
7849 ;; :group 'message-form-letter
7850 :group 'message-various
7851 :version "23.1" ;; No Gnus
7852 :type 'string)
7853
7854(defcustom message-send-form-letter-delay 1
7855 "Delay in seconds when sending a message with `message-send-form-letter'.
7856Only used when `message-send-form-letter' is called with non-nil
7857argument `force'."
7858 ;; :group 'message-form-letter
7859 :group 'message-various
7860 :version "23.1" ;; No Gnus
7861 :type 'integer)
7862
7863(defun message-send-form-letter (&optional force)
7864 "Sent all form letter messages from current buffer.
7865Unless FORCE, prompt before sending.
7866
7867The messages are separated by `message-form-letter-separator'.
7868Header and body are separated by `mail-header-separator'."
7869 (interactive "P")
7870 (let ((sent 0) (skipped 0)
7871 start end text
7872 buff
7873 to done)
7874 (goto-char (point-min))
7875 (while (not done)
7876 (setq start (point)
7877 end (if (search-forward message-form-letter-separator nil t)
7878 (- (point) (length message-form-letter-separator) -1)
7879 (setq done t)
7880 (point-max)))
7881 (setq text
7882 (buffer-substring-no-properties start end))
7883 (setq buff (generate-new-buffer "*mail - form letter*"))
7884 (with-current-buffer buff
7885 (insert text)
7886 (message-mode)
7887 (setq to (message-fetch-field "To"))
7888 (switch-to-buffer buff)
7889 (when force
7890 (sit-for message-send-form-letter-delay))
7891 (if (or force
7892 (y-or-n-p (format "Send message to `%s'? " to)))
7893 (progn
7894 (setq sent (1+ sent))
7895 (message-send-and-exit))
7896 (message (format "Message to `%s' skipped." to))
7897 (setq skipped (1+ skipped)))
7898 (when (buffer-live-p buff)
7899 (kill-buffer buff))))
7900 (message "%s message(s) sent, %s skipped." sent skipped)))
7901
7810(when (featurep 'xemacs) 7902(when (featurep 'xemacs)
7811 (require 'messagexmas) 7903 (require 'messagexmas)
7812 (message-xmas-redefine)) 7904 (message-xmas-redefine))
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 98d444665b2..46bf4b8d8fe 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -106,31 +106,33 @@
106 ,disposition ,description ,cache ,id)) 106 ,disposition ,description ,cache ,id))
107 107
108(defcustom mm-text-html-renderer 108(defcustom mm-text-html-renderer
109 (cond ((locate-library "w3") 'w3) 109 (cond ((executable-find "w3m")
110 ((executable-find "w3m") (if (locate-library "w3m") 110 (if (locate-library "w3m")
111 'w3m 111 'w3m
112 'w3m-standalone)) 112 'w3m-standalone))
113 ((executable-find "links") 'links) 113 ((executable-find "links") 'links)
114 ((executable-find "lynx") 'lynx) 114 ((executable-find "lynx") 'lynx)
115 (t 'html2text)) 115 ((locate-library "w3") 'w3)
116 ((locate-library "html2text") 'html2text)
117 (t nil))
116 "Render of HTML contents. 118 "Render of HTML contents.
117It is one of defined renderer types, or a rendering function. 119It is one of defined renderer types, or a rendering function.
118The defined renderer types are: 120The defined renderer types are:
119`w3' : use Emacs/W3;
120`w3m' : use emacs-w3m; 121`w3m' : use emacs-w3m;
121`w3m-standalone': use w3m; 122`w3m-standalone': use w3m;
122`links': use links; 123`links': use links;
123`lynx' : use lynx; 124`lynx' : use lynx;
125`w3' : use Emacs/W3;
124`html2text' : use html2text; 126`html2text' : use html2text;
125nil : use external viewer." 127nil : use external viewer (default web browser)."
126 :version "22.1" 128 :version "23.0" ;; No Gnus
127 :type '(choice (const w3) 129 :type '(choice (const w3)
128 (const w3m) 130 (const w3m :tag "emacs-w3m")
129 (const w3m-standalone) 131 (const w3m-standalone :tag "standalone w3m" )
130 (const links) 132 (const links)
131 (const lynx) 133 (const lynx)
132 (const html2text) 134 (const html2text)
133 (const nil) 135 (const nil :tag "External viewer")
134 (function)) 136 (function))
135 :group 'mime-display) 137 :group 'mime-display)
136 138
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el
index 5abeea16812..9e9414f8fe2 100644
--- a/lisp/gnus/mm-view.el
+++ b/lisp/gnus/mm-view.el
@@ -289,7 +289,7 @@
289 (let ((coding-system-for-write 'iso-2022-jp) 289 (let ((coding-system-for-write 'iso-2022-jp)
290 (coding-system-for-read 'iso-2022-jp) 290 (coding-system-for-read 'iso-2022-jp)
291 (str (mm-decode-coding-string "\ 291 (str (mm-decode-coding-string "\
292\e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t#s!!#m#1#7#n!)\e(B" 'iso-2022-jp))) 292\e$B#D#o#e#s!!#w#3#m!!#s#u#p#p#o#r#t!!#m#1#7#n!)\e(B" 'iso-2022-jp)))
293 (mm-with-multibyte-buffer 293 (mm-with-multibyte-buffer
294 (insert str) 294 (insert str)
295 (call-process-region 295 (call-process-region
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index c703e1365f6..0a7aac29ed9 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1017,6 +1017,14 @@ 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
1020(easy-menu-define 1028(easy-menu-define
1021 mml-menu mml-mode-map "" 1029 mml-menu mml-mode-map ""
1022 `("Attachments" 1030 `("Attachments"
@@ -1025,10 +1033,18 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1025 '(:help "Attach a file at point"))] 1033 '(:help "Attach a file at point"))]
1026 ["Attach Buffer..." mml-attach-buffer 1034 ["Attach Buffer..." mml-attach-buffer
1027 ,@(if (featurep 'xemacs) '(t) 1035 ,@(if (featurep 'xemacs) '(t)
1028 '(:help "Attach a buffer to the outgoing MIME message"))] 1036 '(:help "Attach a buffer to the outgoing message"))]
1029 ["Attach External..." mml-attach-external 1037 ["Attach External..." mml-attach-external
1030 ,@(if (featurep 'xemacs) '(t) 1038 ,@(if (featurep 'xemacs) '(t)
1031 '(:help "Attach reference to file"))] 1039 '(:help "Attach reference to an external file"))]
1040 ;; ["Externalize Attachments"
1041 ;; (lambda () (interactive) (mml-toggle-gcc-externalize-attachments))
1042 ;; ,@(if (featurep 'xemacs) nil
1043 ;; '(:help "Save attachments as external parts in Gcc copies"))
1044 ;; :visible (booleanp gnus-gcc-externalize-attachments)
1045 ;; :style radio
1046 ;; :selected (equal gnus-gcc-externalize-attachments t) ]
1047 "----"
1032 ;; 1048 ;;
1033 ("Change Security Method" 1049 ("Change Security Method"
1034 ["PGP/MIME" 1050 ["PGP/MIME"
@@ -1056,6 +1072,10 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1056 ["Encrypt/Sign off" mml-unsecure-message 1072 ["Encrypt/Sign off" mml-unsecure-message
1057 ,@(if (featurep 'xemacs) '(t) 1073 ,@(if (featurep 'xemacs) '(t)
1058 '(:help "Don't Encrypt/Sign Message"))] 1074 '(:help "Don't Encrypt/Sign Message"))]
1075 ;; Do we have separate encrypt and encrypt/sign commands for parts?
1076 ["Sign Part" mml-secure-sign t]
1077 ["Encrypt Part" mml-secure-encrypt t]
1078 "----"
1059 ;; Maybe we could remove these, because people who write MML most probably 1079 ;; Maybe we could remove these, because people who write MML most probably
1060 ;; don't use the menu: 1080 ;; don't use the menu:
1061 ["Insert Part..." mml-insert-part 1081 ["Insert Part..." mml-insert-part
@@ -1063,9 +1083,6 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
1063 ["Insert Multipart..." mml-insert-multipart 1083 ["Insert Multipart..." mml-insert-multipart
1064 :active (message-in-body-p)] 1084 :active (message-in-body-p)]
1065 ;; 1085 ;;
1066 ;; Do we have separate encrypt and encrypt/sign commands for parts?
1067 ["Sign Part" mml-secure-sign t]
1068 ["Encrypt Part" mml-secure-encrypt t]
1069 ;;["Narrow" mml-narrow-to-part t] 1086 ;;["Narrow" mml-narrow-to-part t]
1070 ["Quote MML in region" mml-quote-region 1087 ["Quote MML in region" mml-quote-region
1071 :active (message-mark-active-p) 1088 :active (message-mark-active-p)
@@ -1222,7 +1239,7 @@ If it is a list, valid members are `type', `description' and
1222don't ask for options. If it is t, ask the user whether or not 1239don't ask for options. If it is t, ask the user whether or not
1223to specify options." 1240to specify options."
1224 :type '(choice 1241 :type '(choice
1225 (const :tag "Non" nil) 1242 (const :tag "None" nil)
1226 (const :tag "Query" t) 1243 (const :tag "Query" t)
1227 (list :value (type description disposition) 1244 (list :value (type description disposition)
1228 (set :inline t 1245 (set :inline t
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index b4d301190d0..8add5e5215f 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -153,6 +153,17 @@ Whether the passphrase is cached at all is controlled by
153;; should be done by GnuPG rather than Elisp, but older PGP backends 153;; should be done by GnuPG rather than Elisp, but older PGP backends
154;; (such as Mailcrypt, PGG, and gpg.el) discard the output from GnuPG. 154;; (such as Mailcrypt, PGG, and gpg.el) discard the output from GnuPG.
155(defun mml2015-extract-cleartext-signature () 155(defun mml2015-extract-cleartext-signature ()
156 ;; Daiki Ueno in
157 ;; <54a15d860801080142l70b95d7dkac4bf51a86196011@mail.gmail.com>: ``I still
158 ;; believe that the right way is to use the plaintext output from GnuPG as
159 ;; it is, and mml2015-extract-cleartext-signature is just a kludge for
160 ;; misdesigned libraries like PGG, which have no ability to do that. So, I
161 ;; think it should not have descriptive documentation.''
162 ;;
163 ;; This function doesn't handle NotDashEscaped correctly. EasyPG handles it
164 ;; correctly.
165 ;; http://thread.gmane.org/gmane.emacs.gnus.general/66062/focus=66082
166 ;; http://thread.gmane.org/gmane.emacs.gnus.general/65087/focus=65109
156 (goto-char (point-min)) 167 (goto-char (point-min))
157 (forward-line) 168 (forward-line)
158 ;; We need to be careful not to strip beyond the armor headers. 169 ;; We need to be careful not to strip beyond the armor headers.
diff --git a/lisp/net/imap.el b/lisp/net/imap.el
index 2ec29252d47..399d5ec8237 100644
--- a/lisp/net/imap.el
+++ b/lisp/net/imap.el
@@ -2923,6 +2923,7 @@ Return nil if no complete line has arrived."
2923 imap-open-1 2923 imap-open-1
2924 imap-open 2924 imap-open
2925 imap-opened 2925 imap-opened
2926 imap-ping-server
2926 imap-authenticate 2927 imap-authenticate
2927 imap-close 2928 imap-close
2928 imap-capability 2929 imap-capability
diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el
index 8c588a11451..de82ae7473d 100644
--- a/lisp/net/netrc.el
+++ b/lisp/net/netrc.el
@@ -61,7 +61,7 @@
61 61
62(defun netrc-parse (file) 62(defun netrc-parse (file)
63 (interactive "fFile to Parse: ") 63 (interactive "fFile to Parse: ")
64 "Parse FILE and return an list of all entries in the file." 64 "Parse FILE and return a list of all entries in the file."
65 (when (file-exists-p file) 65 (when (file-exists-p file)
66 (with-temp-buffer 66 (with-temp-buffer
67 (let ((tokens '("machine" "default" "login" 67 (let ((tokens '("machine" "default" "login"