# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: daniel.dehennin@baby-gnu.org-20090413181709-\ # 6t1hgpg4585mapmw # target_branch: ../../gnus.head # testament_sha1: bd879ebf33dd7fbc8a6723fb4101951495e85b4a # timestamp: 2009-04-13 20:59:19 +0200 # source_branch: . # base_revision_id: daniel.dehennin@baby-gnu.org-20090412231027-\ # rhtvglq3r87nljez # # Begin patch === modified file 'lisp/mml2015.el' --- lisp/mml2015.el 2009-01-22 07:02:15 +0000 +++ lisp/mml2015.el 2009-04-13 18:17:09 +0000 @@ -1025,6 +1025,43 @@ (setq pointer (cdr pointer)))) (setq keys (cdr keys))))) +(defun mml2015-epg-split-addresses (config addresses) + "Split a string of addresses delimited by [ \f\t\n\r\v,]+." + (apply #'nconc + (mapcar + (lambda (recipient) + (or (epg-expand-group config recipient) + (list (concat "<" recipient ">")))) + (split-string + (or addresses + (read-string "Addresses: ")) + "[ \f\t\n\r\v,]+")))) + +(defun mml2015-epg-prompt-select-keys (context &optional names usage) + "Return a key matching NAME. +USAGE is nil or encrypt to search private keyring. +USAGE is t or sign to search secret keyring. +Mostly a wrapper around epa-select-keys." + (let ((action (cond + ((memq usage '(t sign)) "signing") + ((memq usage '(nil encrypt)) "encryption") + (t "encryption"))) + (key-type (cond + ((memq usage '(t sign)) 'secret) + ((memq usage '(nil encrypt)) 'public) + (t 'public))) + (no-selection (cond + ((memq usage '(t sign)) "default secret key is used") + ((memq usage '(nil encrypt)) "symmetric encryption will be performed") + (t "symmetric encryption will be performed")))) + (epa-select-keys context + (format "\ +Select a key for %s. +If no one is selected, %s +If more than one is select, first one is used. " + action no-selection) + names key-type))) + (defun mml2015-epg-decrypt (handle ctl) (catch 'error (let ((inhibit-redisplay t) @@ -1182,17 +1219,15 @@ (let* ((inhibit-redisplay t) (context (epg-make-context)) (boundary (mml-compute-boundary cont)) + (sender (message-options-get 'message-sender)) signer-key (signers (or (message-options-get 'mml2015-epg-signers) (message-options-set 'mml2015-epg-signers (if mml2015-verbose - (epa-select-keys context "\ -Select keys for signing. -If no one is selected, default secret key is used. " - mml2015-signers t) - (if mml2015-signers + (mml2015-epg-prompt-select-keys context (cons sender mml2015-signers) 'sign) + (if (or sender mml2015-signers) (delq nil (mapcar (lambda (signer) @@ -1206,7 +1241,7 @@ signer))) (error "No secret key for %s" signer)) signer-key) - mml2015-signers))))))) + (cons sender mml2015-signers)))))))) signature micalg) (epg-context-set-armor context t) (epg-context-set-textmode context t) @@ -1249,32 +1284,23 @@ (let ((inhibit-redisplay t) (context (epg-make-context)) (config (epg-configuration)) + (sender (message-options-get 'message-sender)) (recipients (message-options-get 'mml2015-epg-recipients)) cipher signers (boundary (mml-compute-boundary cont)) recipient-key signer-key) (unless recipients (setq recipients - (apply #'nconc - (mapcar - (lambda (recipient) - (or (epg-expand-group config recipient) - (list (concat "<" recipient ">")))) - (split-string - (or (message-options-get 'message-recipients) - (message-options-set 'message-recipients - (read-string "Recipients: "))) - "[ \f\t\n\r\v,]+")))) + (mml2015-epg-split-addresses + config + (message-options-get 'message-recipients))) (when mml2015-encrypt-to-self - (unless mml2015-signers - (error "mml2015-signers not set")) - (setq recipients (nconc recipients mml2015-signers))) + (unless (or sender mml2015-signers) + (error "Message sender and mml2015-signers not set")) + (setq recipients (nconc recipients (cons sender mml2015-signers)))) (if mml2015-verbose (setq recipients - (epa-select-keys context "\ -Select recipients for encryption. -If no one is selected, symmetric encryption will be performed. " - recipients)) + (mml2015-epg-prompt-select-keys context recipients 'encrypt)) (setq recipients (delq nil (mapcar @@ -1298,11 +1324,8 @@ (message-options-set 'mml2015-epg-signers (if mml2015-verbose - (epa-select-keys context "\ -Select keys for signing. -If no one is selected, default secret key is used. " - mml2015-signers t) - (if mml2015-signers + (mml2015-epg-prompt-select-keys context (cons sender mml2015-signers) 'sign) + (if (or sender mml2015-signers) (delq nil (mapcar (lambda (signer) @@ -1316,7 +1339,7 @@ signer))) (error "No secret key for %s" signer)) signer-key) - mml2015-signers))))))) + (cons sender mml2015-signers)))))))) (epg-context-set-signers context signers)) (epg-context-set-armor context t) (epg-context-set-textmode context t)