diff options
author | Daiki Ueno <ueno@gnu.org> | 2014-11-06 12:04:22 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2014-11-06 12:04:22 +0900 |
commit | 9e48a95cf29f39b30b03e946cdd05c7664053fd7 (patch) | |
tree | d326b72cab3c7aa3d17411bd017207e59d263bce /lisp/epa-file.el | |
parent | e1418d0e252b8f2b42eea18f16b25a78ca2ac721 (diff) | |
download | emacs-9e48a95cf29f39b30b03e946cdd05c7664053fd7.tar.gz emacs-9e48a95cf29f39b30b03e946cdd05c7664053fd7.tar.bz2 emacs-9e48a95cf29f39b30b03e946cdd05c7664053fd7.zip |
epg: Improve error handling
* epa.el (epa-error-buffer): New variable.
(epa-display-error): New function.
(epa-decrypt-file, epa-verify-file, epa-verify-region)
(epa-delete-keys, epa-import-keys): Display output sent to stderr.
(epa-sign-file, epa-sign-region, epa-encrypt-region)
(epa-export-keys, epa-insert-keys): Display output sent to stderr.
Use setf instead of epg-context-set-*.
* epa-file.el (epa-file-insert-file-contents): Use
epa-display-error instead of epa-display-info. Mimic the behavior
of jka-compr when decryption program is not found.
(epa-file-write-region): Use epa-display-error instead of
epa-display-info.
Diffstat (limited to 'lisp/epa-file.el')
-rw-r--r-- | lisp/epa-file.el | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lisp/epa-file.el b/lisp/epa-file.el index 6f3bb188190..759271bc4e8 100644 --- a/lisp/epa-file.el +++ b/lisp/epa-file.el @@ -105,9 +105,9 @@ encryption is used." (insert (if enable-multibyte-characters (string-to-multibyte string) string)) - (decode-coding-inserted-region - (point-min) (point-max) - (substring file 0 (string-match epa-file-name-regexp file)) + (decode-coding-inserted-region + (point-min) (point-max) + (substring file 0 (string-match epa-file-name-regexp file)) visit beg end replace)) (insert (epa-file--decode-coding-string string (or coding-system-for-read 'undecided))))) @@ -151,8 +151,17 @@ encryption is used." (condition-case error (setq string (epg-decrypt-file context local-file nil)) (error + (epa-display-error context) (if (setq entry (assoc file epa-file-passphrase-alist)) (setcdr entry nil)) + ;; If the decryption program can't be found, + ;; signal that as a non-file error + ;; so that find-file-noselect-1 won't handle it. + ;; Borrowed from jka-compr.el. + (if (and (eq (car error) 'file-error) + (equal (cadr error) "Searching for program")) + (error "Decryption program `%s' not found" + (nth 3 error))) ;; Hack to prevent find-file from opening empty buffer ;; when decryption failed (bug#6568). See the place ;; where `find-file-not-found-functions' are called in @@ -162,11 +171,6 @@ encryption is used." (add-hook 'find-file-not-found-functions 'epa-file--find-file-not-found-function nil t)) - (if (epg-context-error-output context) - (epa-display-info - (concat (format "Error while executing \"%s\":\n\n" - epg-gpg-program) - (epg-context-error-output context)))) (signal 'file-error (cons "Opening input file" (cdr error))))) (set-buffer buf) ;In case timer/filter changed/killed it (bug#16029)! @@ -226,7 +230,7 @@ encryption is used." context (cons #'epa-progress-callback-function (format "Encrypting %s" file))) - (epg-context-set-armor context epa-armor) + (setf (epg-context-armor context) epa-armor) (condition-case error (setq string (epg-encrypt-string @@ -260,13 +264,9 @@ If no one is selected, symmetric encryption will be performed. " (if epa-file-encrypt-to (epg-list-keys context recipients))))) (error + (epa-display-error context) (if (setq entry (assoc file epa-file-passphrase-alist)) (setcdr entry nil)) - (if (epg-context-error-output context) - (epa-display-info - (concat (format "Error while executing \"%s\":\n\n" - epg-gpg-program) - (epg-context-error-output context)))) (signal 'file-error (cons "Opening output file" (cdr error))))) (epa-file-run-real-handler #'write-region |