From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Danjou Subject: [PATCH] org-crypt: fix decrypt outline display bug Date: Wed, 26 Jan 2011 13:46:29 +0100 Message-ID: <1296045989-11068-1-git-send-email-julien@danjou.info> Return-path: Received: from [140.186.70.92] (port=58172 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pi4mS-0004MX-3l for emacs-orgmode@gnu.org; Wed, 26 Jan 2011 07:47:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pi4mQ-0001iJ-CL for emacs-orgmode@gnu.org; Wed, 26 Jan 2011 07:47:23 -0500 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Cc: Julien Danjou , John Wiegley , Peter Jones * 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 Cc: Peter Jones Signed-off-by: Julien Danjou --- lisp/org-crypt.el | 43 ++++++++++++++++++++++++++----------------- 1 files changed, 26 insertions(+), 17 deletions(-) diff --git a/lisp/org-crypt.el b/lisp/org-crypt.el index 1758a81..7c28d70 100644 --- a/lisp/org-crypt.el +++ b/lisp/org-crypt.el @@ -140,23 +140,32 @@ This setting can also be overridden in the CRYPTKEY property." (unless (org-before-first-heading-p) (save-excursion (org-back-to-heading t) - (forward-line) - (when (looking-at "-----BEGIN PGP MESSAGE-----") - (let* ((beg (point)) - (end (save-excursion - (search-forward "-----END PGP MESSAGE-----") - (forward-line) - (point))) - (epg-context (epg-make-context nil t t)) - (decrypted-text - (decode-coding-string - (epg-decrypt-string - epg-context - (buffer-substring-no-properties beg end)) - 'utf-8))) - (delete-region beg end) - (insert decrypted-text) - nil))))) + (let ((heading-point (point)) + (heading-was-invisible-p + (save-excursion + (outline-end-of-heading) + (outline-invisible-p)))) + (forward-line) + (when (looking-at "-----BEGIN PGP MESSAGE-----") + (let* ((end (save-excursion + (search-forward "-----END PGP MESSAGE-----") + (forward-line) + (point))) + (epg-context (epg-make-context nil t t)) + (decrypted-text + (decode-coding-string + (epg-decrypt-string + epg-context + (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 () "Encrypt all top-level entries in the current buffer." -- 1.7.2.3