org-crypt: fix decrypt outline display bug

* org-crypt.el (org-decrypt-entry): Delete \n on top level heading.
This avoids a display bug showing the heading outlined where the text
is not since it does not have the outline property.
Restore subtree visibility state after decryption.

Cc: John Wiegley <johnw@gnu.org>
Cc: Peter Jones <pjones@pmade.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2011-01-26 17:46:29 +00:00 committed by Bastien Guerry
parent bf46c32aad
commit 86bb47fcac
1 changed files with 26 additions and 17 deletions

View File

@ -140,23 +140,32 @@ This setting can also be overridden in the CRYPTKEY property."
(unless (org-before-first-heading-p) (unless (org-before-first-heading-p)
(save-excursion (save-excursion
(org-back-to-heading t) (org-back-to-heading t)
(forward-line) (let ((heading-point (point))
(when (looking-at "-----BEGIN PGP MESSAGE-----") (heading-was-invisible-p
(let* ((beg (point)) (save-excursion
(end (save-excursion (outline-end-of-heading)
(search-forward "-----END PGP MESSAGE-----") (outline-invisible-p))))
(forward-line) (forward-line)
(point))) (when (looking-at "-----BEGIN PGP MESSAGE-----")
(epg-context (epg-make-context nil t t)) (let* ((end (save-excursion
(decrypted-text (search-forward "-----END PGP MESSAGE-----")
(decode-coding-string (forward-line)
(epg-decrypt-string (point)))
epg-context (epg-context (epg-make-context nil t t))
(buffer-substring-no-properties beg end)) (decrypted-text
'utf-8))) (decode-coding-string
(delete-region beg end) (epg-decrypt-string
(insert decrypted-text) epg-context
nil))))) (buffer-substring-no-properties (point) end))
'utf-8)))
;; Delete region starting just before point, because the
;; outline property starts at the \n of the heading.
(delete-region (1- (point)) end)
(insert "\n" decrypted-text)
(when heading-was-invisible-p
(goto-char heading-point)
(org-flag-subtree t))
nil))))))
(defun org-encrypt-entries () (defun org-encrypt-entries ()
"Encrypt all top-level entries in the current buffer." "Encrypt all top-level entries in the current buffer."