From 3a99bf64df4071fc6910876070215a948c18aa01 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 15 Aug 2011 21:40:26 -0400 Subject: [PATCH] Bug fix for finding coding system. New COPY-FUNCTION feature for epa-decrypt-region. --- lisp/ChangeLog | 6 ++++++ lisp/epa.el | 30 ++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7116a152605..053f9d3bab6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-08-16 Richard Stallman + + * 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 * minibuffer.el (completion-pcm--merge-completions): Don't merge "a1b" 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 -- 2.39.2