Mercurial > emacs
annotate lisp/epa-mail.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 280c8ae2476d |
children | 6585f38b9f1d |
rev | line source |
---|---|
91647 | 1 ;;; epa-mail.el --- the EasyPG Assistant, minor-mode for mail composer |
106815 | 2 ;; Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
91647 | 3 |
4 ;; Author: Daiki Ueno <ueno@unixuser.org> | |
5 ;; Keywords: PGP, GnuPG, mail, message | |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
109546
diff
changeset
|
6 ;; Package: epa |
91647 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91733
diff
changeset
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify |
91647 | 11 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91733
diff
changeset
|
12 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91733
diff
changeset
|
13 ;; (at your option) any later version. |
91647 | 14 |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91733
diff
changeset
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
91647 | 22 |
23 ;;; Code: | |
24 | |
25 (require 'epa) | |
26 (require 'mail-utils) | |
27 | |
28 (defvar epa-mail-mode-map | |
29 (let ((keymap (make-sparse-keymap))) | |
30 (define-key keymap "\C-c\C-ed" 'epa-mail-decrypt) | |
31 (define-key keymap "\C-c\C-ev" 'epa-mail-verify) | |
32 (define-key keymap "\C-c\C-es" 'epa-mail-sign) | |
33 (define-key keymap "\C-c\C-ee" 'epa-mail-encrypt) | |
34 (define-key keymap "\C-c\C-ei" 'epa-mail-import-keys) | |
35 (define-key keymap "\C-c\C-eo" 'epa-insert-keys) | |
109546
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
36 (define-key keymap "\C-c\C-e\C-d" 'epa-mail-decrypt) |
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
37 (define-key keymap "\C-c\C-e\C-v" 'epa-mail-verify) |
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
38 (define-key keymap "\C-c\C-e\C-s" 'epa-mail-sign) |
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
39 (define-key keymap "\C-c\C-e\C-e" 'epa-mail-encrypt) |
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
40 (define-key keymap "\C-c\C-e\C-i" 'epa-mail-import-keys) |
018487fd2873
Add alternative key bindings to epa-mail.el.
Daiki Ueno <ueno@unixuser.org>
parents:
106815
diff
changeset
|
41 (define-key keymap "\C-c\C-e\C-o" 'epa-insert-keys) |
91647 | 42 keymap)) |
43 | |
44 (defvar epa-mail-mode-hook nil) | |
45 (defvar epa-mail-mode-on-hook nil) | |
46 (defvar epa-mail-mode-off-hook nil) | |
47 | |
91731
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
48 ;;;###autoload |
91647 | 49 (define-minor-mode epa-mail-mode |
50 "A minor-mode for composing encrypted/clearsigned mails." | |
51 nil " epa-mail" epa-mail-mode-map) | |
52 | |
53 (defun epa-mail--find-usable-key (keys usage) | |
54 "Find a usable key from KEYS for USAGE." | |
55 (catch 'found | |
56 (while keys | |
57 (let ((pointer (epg-key-sub-key-list (car keys)))) | |
58 (while pointer | |
59 (if (and (memq usage (epg-sub-key-capability (car pointer))) | |
60 (not (memq (epg-sub-key-validity (car pointer)) | |
61 '(revoked expired)))) | |
62 (throw 'found (car keys))) | |
63 (setq pointer (cdr pointer)))) | |
64 (setq keys (cdr keys))))) | |
65 | |
66 ;;;###autoload | |
67 (defun epa-mail-decrypt () | |
68 "Decrypt OpenPGP armors in the current buffer. | |
69 The buffer is expected to contain a mail message. | |
70 | |
71 Don't use this command in Lisp programs!" | |
72 (interactive) | |
73 (epa-decrypt-armor-in-region (point-min) (point-max))) | |
74 | |
75 ;;;###autoload | |
76 (defun epa-mail-verify () | |
77 "Verify OpenPGP cleartext signed messages in the current buffer. | |
78 The buffer is expected to contain a mail message. | |
79 | |
80 Don't use this command in Lisp programs!" | |
81 (interactive) | |
82 (epa-verify-cleartext-in-region (point-min) (point-max))) | |
83 | |
84 ;;;###autoload | |
85 (defun epa-mail-sign (start end signers mode) | |
86 "Sign the current buffer. | |
87 The buffer is expected to contain a mail message. | |
88 | |
89 Don't use this command in Lisp programs!" | |
90 (interactive | |
91 (save-excursion | |
92 (goto-char (point-min)) | |
93 (if (search-forward mail-header-separator nil t) | |
94 (forward-line)) | |
95 (setq epa-last-coding-system-specified | |
96 (or coding-system-for-write | |
97 (epa--select-safe-coding-system (point) (point-max)))) | |
98 (let ((verbose current-prefix-arg)) | |
99 (list (point) (point-max) | |
100 (if verbose | |
101 (epa-select-keys (epg-make-context epa-protocol) | |
102 "Select keys for signing. | |
103 If no one is selected, default secret key is used. " | |
104 nil t)) | |
105 (if verbose | |
106 (epa--read-signature-type) | |
107 'clear))))) | |
108 (epa-sign-region start end signers mode)) | |
109 | |
110 ;;;###autoload | |
111 (defun epa-mail-encrypt (start end recipients sign signers) | |
112 "Encrypt the current buffer. | |
113 The buffer is expected to contain a mail message. | |
114 | |
115 Don't use this command in Lisp programs!" | |
116 (interactive | |
117 (save-excursion | |
118 (let ((verbose current-prefix-arg) | |
119 (context (epg-make-context epa-protocol)) | |
120 recipients recipient-key) | |
121 (goto-char (point-min)) | |
122 (save-restriction | |
123 (narrow-to-region (point) | |
124 (if (search-forward mail-header-separator nil 0) | |
125 (match-beginning 0) | |
126 (point))) | |
127 (setq recipients | |
128 (mail-strip-quoted-names | |
129 (mapconcat #'identity | |
130 (nconc (mail-fetch-field "to" nil nil t) | |
131 (mail-fetch-field "cc" nil nil t) | |
132 (mail-fetch-field "bcc" nil nil t)) | |
133 ",")))) | |
134 (if recipients | |
135 (setq recipients (delete "" | |
136 (split-string recipients "[ \t\n]+")))) | |
137 (goto-char (point-min)) | |
138 (if (search-forward mail-header-separator nil t) | |
139 (forward-line)) | |
140 (setq epa-last-coding-system-specified | |
141 (or coding-system-for-write | |
142 (epa--select-safe-coding-system (point) (point-max)))) | |
143 (list (point) (point-max) | |
144 (if verbose | |
145 (epa-select-keys | |
146 context | |
147 "Select recipients for encryption. | |
148 If no one is selected, symmetric encryption will be performed. " | |
149 recipients) | |
150 (if recipients | |
151 (mapcar | |
152 (lambda (recipient) | |
153 (setq recipient-key | |
154 (epa-mail--find-usable-key | |
155 (epg-list-keys | |
156 (epg-make-context epa-protocol) | |
157 (concat "<" recipient ">")) | |
158 'encrypt)) | |
159 (unless (or recipient-key | |
160 (y-or-n-p | |
161 (format | |
162 "No public key for %s; skip it? " | |
163 recipient))) | |
164 (error "No public key for %s" recipient)) | |
165 recipient-key) | |
166 recipients))) | |
167 (setq sign (if verbose (y-or-n-p "Sign? "))) | |
168 (if sign | |
169 (epa-select-keys context | |
170 "Select keys for signing. ")))))) | |
171 (epa-encrypt-region start end recipients sign signers)) | |
172 | |
173 ;;;###autoload | |
174 (defun epa-mail-import-keys () | |
175 "Import keys in the OpenPGP armor format in the current buffer. | |
176 The buffer is expected to contain a mail message. | |
177 | |
178 Don't use this command in Lisp programs!" | |
179 (interactive) | |
180 (epa-import-armor-in-region (point-min) (point-max))) | |
181 | |
91731
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
182 ;;;###autoload |
91733
e9326c8f35b0
EasyPG: Rename epa-mail-minor-mode to epa-global-mail-mode.
Michael Olson <mwolson@gnu.org>
parents:
91731
diff
changeset
|
183 (define-minor-mode epa-global-mail-mode |
91731
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
184 "Minor mode to hook EasyPG into Mail mode." |
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
185 :global t :init-value nil :group 'epa-mail :version "23.1" |
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
186 (remove-hook 'mail-mode-hook 'epa-mail-mode) |
91733
e9326c8f35b0
EasyPG: Rename epa-mail-minor-mode to epa-global-mail-mode.
Michael Olson <mwolson@gnu.org>
parents:
91731
diff
changeset
|
187 (if epa-global-mail-mode |
91731
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
188 (add-hook 'mail-mode-hook 'epa-mail-mode))) |
7efbdc83b944
EasyPG: Implement some suggestions from emacs-devel.
Michael Olson <mwolson@gnu.org>
parents:
91687
diff
changeset
|
189 |
91647 | 190 (provide 'epa-mail) |
191 | |
91687 | 192 ;; arch-tag: a6f82b3f-d177-4a11-af95-040da55927d2 |
91647 | 193 ;;; epa-mail.el ends here |