cipher-algorithm digest-algorithm compress-algorithm
#'epg-passphrase-callback-function
nil
- nil nil nil nil nil nil)))
+ nil nil nil nil nil nil nil)))
(defun epg-context-protocol (context)
"Return the protocol used within CONTEXT."
(signal 'wrong-type-argument (list 'epg-context-p context)))
(aref (cdr context) 14))
+(defun epg-context-operation-data (context)
+ "Return the obarray of the current cryptographic operation."
+ (unless (eq (car-safe context) 'epg-context)
+ (signal 'wrong-type-argument (list 'epg-context-p context)))
+ (aref (cdr context) 15))
+
(defun epg-context-set-protocol (context protocol)
"Set the protocol used within CONTEXT."
(unless (eq (car-safe context) 'epg-context)
(signal 'wrong-type-argument (list 'epg-context-p context)))
(aset (cdr context) 14 operation))
+(defun epg-context-set-operation-data (context operation-data)
+ "Set the name of the current cryptographic operation."
+ (unless (eq (car-safe context) 'epg-context)
+ (signal 'wrong-type-argument (list 'epg-context-p context)))
+ (aset (cdr context) 15 operation-data))
+
(defun epg-make-signature (status &optional key-id)
"Return a signature object."
(cons 'epg-signature (vector status key-id nil nil nil nil nil nil nil nil
(if (looking-at "\\[GNUPG:] \\([A-Z_]+\\) ?\\(.*\\)")
(let* ((status (match-string 1))
(string (match-string 2))
- (symbol (intern-soft (concat "epg--status-"
- status))))
+ (handler-name (concat "epg--status-" status))
+ (symbol (or (if (epg-context-operation-data
+ epg-context)
+ (intern-soft
+ handler-name
+ (epg-context-operation-data
+ epg-context)))
+ (intern-soft handler-name))))
(if (member status epg-pending-status-list)
(setq epg-pending-status-list nil))
(if (and symbol
(epg-reset context)))
;;;###autoload
+(defun epg-start-edit-key (context key)
+ "Initiate an edit key operation.
+
+If you use this function, you will need to wait for the completion of
+`epg-gpg-program' by using `epg-wait-for-completion' and call
+`epg-reset' to clear a temporaly output file.
+If you are unsure, use synchronous version of this function
+`epg-edit-key' instead."
+ (epg-context-set-operation context 'edit-key)
+ (epg-context-set-result context nil)
+ (epg--start context (list "--with-colons" "--edit-key" "--"
+ (epg-sub-key-id (car (epg-key-sub-key-list key))))))
+
+;;;###autoload
+(defun epg-edit-key (context key)
+ "Edit KEY in the key ring."
+ (unwind-protect
+ (progn
+ (epg-start-edit-key context key)
+ (epg-wait-for-completion context)
+ (if (epg-context-result-for context 'error)
+ (error "Edit key failed: %S"
+ (epg-context-result-for context 'error))))
+ (epg-reset context)))
+
+;;;###autoload
(defun epg-start-sign-keys (context keys &optional local)
"Initiate a sign keys operation.