diff options
author | Richard M. Stallman <rms@gnu.org> | 2011-08-15 21:40:26 -0400 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2011-08-15 21:40:26 -0400 |
commit | 3a99bf64df4071fc6910876070215a948c18aa01 (patch) | |
tree | 059d0c2dcc975240889a66c6fd0d7ee380ded17b /lisp/epa.el | |
parent | 3ebec5517ea32d0c9d1954f0ea806b4fb256f12e (diff) | |
download | emacs-3a99bf64df4071fc6910876070215a948c18aa01.tar.gz |
Bug fix for finding coding system. New COPY-FUNCTION feature
for epa-decrypt-region.
Diffstat (limited to 'lisp/epa.el')
-rw-r--r-- | lisp/epa.el | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/lisp/epa.el b/lisp/epa.el index e2fafc753d7..5611379ea51 100644 --- a/lisp/epa.el +++ b/lisp/epa.el @@ -803,10 +803,12 @@ If no one is selected, symmetric encryption will be performed. "))) (file-name-nondirectory cipher)))) ;;;###autoload -(defun epa-decrypt-region (start end) +(defun epa-decrypt-region (start end &optional copy-function) "Decrypt the current region between START and END. +If COPY-FUNCTION is non-nil, call it to copy the current buffer +into some other buffer for the output; it should return that buffer. -Don't use this command in Lisp programs! +Be careful about using this command in Lisp programs! Since this function operates on regions, it does some tricks such as coding-system detection and unibyte/multibyte conversion. If you are sure how the data in the region should be treated, you @@ -844,10 +846,17 @@ For example: (delete-region start end) (goto-char start) (insert plain)) - (with-output-to-temp-buffer "*Temp*" - (set-buffer standard-output) - (insert plain) - (epa-info-mode))) + (if copy-function + (with-current-buffer (funcall copy-function) + (let ((inhibit-read-only t) + buffer-read-only) + (delete-region start end) + (goto-char start) + (insert plain))) + (with-output-to-temp-buffer "*Temp*" + (set-buffer standard-output) + (insert plain) + (epa-info-mode)))) (if (epg-context-result-for context 'verify) (epa-display-info (epg-verify-result-to-string (epg-context-result-for context 'verify))))))) @@ -856,12 +865,13 @@ For example: (if (featurep 'xemacs) (if (fboundp 'find-coding-system) (find-coding-system mime-charset)) + ;; Find the first coding system which corresponds to MIME-CHARSET. (let ((pointer (coding-system-list))) (while (and pointer - (eq (coding-system-get (car pointer) 'mime-charset) - mime-charset)) + (not (eq (coding-system-get (car pointer) 'mime-charset) + mime-charset))) (setq pointer (cdr pointer))) - pointer))) + (car pointer)))) ;;;###autoload (defun epa-decrypt-armor-in-region (start end) @@ -880,7 +890,7 @@ See the reason described in the `epa-decrypt-region' documentation." armor-end (re-search-forward "^-----END PGP MESSAGE-----$" nil t)) (unless armor-end - (error "No armor tail")) + (error "Encryption armor beginning has no matching end")) (goto-char armor-start) (let ((coding-system-for-read (or coding-system-for-read |