From 16c7ae7996a95f8091eb80a61dd85db817ca5d90 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 2 Jan 2018 14:12:20 +0100 Subject: [PATCH] Fix handling nested VISIBILITY properties * lisp/org.el (org-set-visibility-according-to-property): Fix handling nested VISIBILITY properties. * testing/lisp/test-org.el (test-org/set-visibility-according-to-property): New test. Reported-by: Michael Maurer --- lisp/org.el | 32 ++++++++------- testing/lisp/test-org.el | 89 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 15 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 8264422e6..5272061cc 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -1,7 +1,7 @@ ;;; org.el --- Outline-based notes management and organizer -*- lexical-binding: t; -*- ;; Carstens outline-mode for keeping track of everything. -;; Copyright (C) 2004-2017 Free Software Foundation, Inc. +;; Copyright (C) 2004-2018 Free Software Foundation, Inc. ;; ;; Author: Carsten Dominik ;; Maintainer: Carsten Dominik @@ -7023,20 +7023,22 @@ With a numeric prefix, show all headlines up to that level." (save-excursion (org-back-to-heading t) (outline-hide-subtree) - (org-reveal) - (cond - ((equal state "folded") - (outline-hide-subtree)) - ((equal state "children") - (org-show-hidden-entry) - (org-show-children)) - ((equal state "content") - (save-excursion - (save-restriction - (org-narrow-to-subtree) - (org-content)))) - ((member state '("all" "showall")) - (outline-show-subtree))))))) + (org-reveal)) + (cond + ((equal state "folded") + (outline-hide-subtree) + (org-end-of-subtree t t)) + ((equal state "children") + (org-show-hidden-entry) + (org-show-children)) + ((equal state "content") + (save-excursion + (save-restriction + (org-narrow-to-subtree) + (org-content))) + (org-end-of-subtree t t)) + ((member state '("all" "showall")) + (outline-show-subtree)))))) (unless no-cleanup (org-cycle-hide-archived-subtrees 'all) (org-cycle-hide-drawers 'all) diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index e1ef48227..a102d5eda 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -6704,6 +6704,95 @@ CLOCK: [2012-03-29 Thu 10:00]--[2012-03-29 Thu 16:40] => 6:40" (org-copy-visible (point-min) (point-max)) (current-kill 0 t)))))) +(ert-deftest test-org/set-visibility-according-to-property () + "Test `org-set-visibility-according-to-property' specifications." + ;; "folded" state. + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: folded +:END: +** b" + (org-set-visibility-according-to-property) + (invisible-p (point)))) + ;; "children" state. + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: children +:END: +** b +Contents +** c" + (org-set-visibility-according-to-property) + (invisible-p (point)))) + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: children +:END: +** b +Contents +*** c" + (org-set-visibility-according-to-property) + (invisible-p (point)))) + ;; "content" state. + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: content +:END: +** b +Contents +*** c" + (org-set-visibility-according-to-property) + (invisible-p (point)))) + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: content +:END: +** b +Contents +*** c" + (org-set-visibility-according-to-property) + (not (invisible-p (point))))) + ;; "showall" state. + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: showall +:END: +** b +Contents +*** c" + (org-set-visibility-according-to-property) + (not (invisible-p (point))))) + (should + (org-test-with-temp-text + " +* a +:PROPERTIES: +:VISIBILITY: showall +:END: +** b +Contents +*** c" + (org-set-visibility-according-to-property) + (not (invisible-p (point)))))) + (provide 'test-org)