aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>2011-08-15 21:40:26 -0400
committerRichard M. Stallman <[email protected]>2011-08-15 21:40:26 -0400
commit3a99bf64df4071fc6910876070215a948c18aa01 (patch)
tree059d0c2dcc975240889a66c6fd0d7ee380ded17b /lisp
parent3ebec5517ea32d0c9d1954f0ea806b4fb256f12e (diff)
Bug fix for finding coding system. New COPY-FUNCTION feature
for epa-decrypt-region.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/epa.el30
2 files changed, 26 insertions, 10 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 7116a15260..053f9d3bab 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-16 Richard Stallman <[email protected]>
+
+ * epa.el (epa-decrypt-region): New arg COPY-FUNCTION.
+ (epa--find-coding-system-for-mime-charset): Fix the non-xemacs case.
+ (epa-decrypt-armor-in-region): Make error message clearer.
+
2011-08-15 Stefan Monnier <[email protected]>
* minibuffer.el (completion-pcm--merge-completions): Don't merge "a1b"
diff --git a/lisp/epa.el b/lisp/epa.el
index e2fafc753d..5611379ea5 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