diff --git a/lisp/org.el b/lisp/org.el index 9426422af..f97967c4b 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 @@ -6953,20 +6953,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 aa0c5fc42..86828d7c5 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -6723,6 +6723,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)