When base64-decoding part of decrypted text, save the decoding

permanently if we save the decryption permanently.

(rmail-epa-decode): Take arguments BEG and BACK-FROM-END to designate region.
(rmail-epa-decrypt-1): Call rmail-epa-decode from here, when decrypting one
encrypted passage.
(rmail-epa-decrypt): Not from here.
This commit is contained in:
Richard Stallman 2023-01-25 16:35:37 -05:00
parent 8b87d095ac
commit 3365e413bd

View file

@ -4580,6 +4580,9 @@ Argument MIME is non-nil if this is a mime message."
(current-buffer))))
(error nil))
;; Decode any base64-encoded material in what we just decrypted.
(rmail-epa-decode armor-start after-end)
(list armor-start (- (point-max) after-end) mime
armor-end-regexp
(buffer-substring armor-start (- (point-max) after-end)))))
@ -4622,9 +4625,6 @@ Argument MIME is non-nil if this is a mime message."
"> ")
(push (rmail-epa-decrypt-1 mime) decrypts))))
;; Decode any base64-encoded mime sections.
(rmail-epa-decode)
(when (and decrypts (rmail-buffers-swapped-p))
(when (y-or-n-p "Replace the original message? ")
(when (eq major-mode 'rmail-mode)
@ -4689,12 +4689,14 @@ Argument MIME is non-nil if this is a mime message."
(unless decrypts
(error "Nothing to decrypt")))))
;; Decode all base64-encoded mime sections, so that this change
;; is made in the Rmail file, not just in the viewing buffer.
(defun rmail-epa-decode ()
;; Decode all base64-encoded mime sections from BEG to (Z - BACK-FROM-END),
;; so that we save the decoding permanently in the Rmail buffer
;; if we permanently save the decryption.
(defun rmail-epa-decode (beg back-from-end)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "--------------[0-9a-zA-Z]+\n" nil t)
(goto-char beg)
(while (re-search-forward "--------------[0-9a-zA-Z]+\n"
(- (point-max) back-from-end) t)
;; The ending delimiter is a start delimiter if another section follows.
;; Otherwise it is an end delimiter, with -- affixed.
(let ((delim (concat (substring (match-string 0) 0 -1) "\\(\\|--\\)\n")))