]> git.eshelyaron.com Git - emacs.git/commitdiff
Bug fix for finding coding system. New COPY-FUNCTION feature
authorRichard M. Stallman <rms@gnu.org>
Tue, 16 Aug 2011 01:40:26 +0000 (21:40 -0400)
committerRichard M. Stallman <rms@gnu.org>
Tue, 16 Aug 2011 01:40:26 +0000 (21:40 -0400)
for epa-decrypt-region.

lisp/ChangeLog
lisp/epa.el

index 7116a1526059fca715a14da0218818bb7c4bcd94..053f9d3bab63d19fd7a713a5ea1c86172fff6c0d 100644 (file)
@@ -1,3 +1,9 @@
+2011-08-16  Richard Stallman  <rms@gnu.org>
+
+       * 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  <monnier@iro.umontreal.ca>
 
        * minibuffer.el (completion-pcm--merge-completions): Don't merge "a1b"
index e2fafc753d7064b797d7236ac30f834c64eccd38..5611379ea5186e9f1e580e533a9156732ed584e6 100644 (file)
@@ -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