|
@@ -24868,35 +24868,39 @@ Prefix arg LEVEL is how many levels below the current level
|
|
|
should be shown. Default is enough to cause the following
|
|
|
heading to appear."
|
|
|
(interactive "p")
|
|
|
- (save-excursion
|
|
|
- (org-back-to-heading t)
|
|
|
- (let* ((current-level (funcall outline-level))
|
|
|
- (max-level (org-get-valid-level
|
|
|
- current-level (if level (prefix-numeric-value level) 1)))
|
|
|
- (end (save-excursion (org-end-of-subtree t t)))
|
|
|
- (regexp-fmt "^\\*\\{%d,%s\\}\\(?: \\|$\\)")
|
|
|
- (past-first-child nil)
|
|
|
- ;; Make sure to skip inlinetasks.
|
|
|
- (re (format regexp-fmt
|
|
|
- current-level
|
|
|
- (cond
|
|
|
- ((not (featurep 'org-inlinetask)) "")
|
|
|
- (org-odd-levels-only (- (* 2 org-inlinetask-min-level)
|
|
|
- 3))
|
|
|
- (t (1- org-inlinetask-min-level))))))
|
|
|
- ;; Display parent heading.
|
|
|
- (outline-flag-region (line-end-position 0) (line-end-position) nil)
|
|
|
- (forward-line)
|
|
|
- ;; Display children. First child may be deeper than expected
|
|
|
- ;; MAX-LEVEL. Since we want to display it anyway, adjust
|
|
|
- ;; MAX-LEVEL accordingly.
|
|
|
- (while (re-search-forward re end t)
|
|
|
- (unless past-first-child
|
|
|
- (setq re (format regexp-fmt
|
|
|
- current-level
|
|
|
- (max (funcall outline-level) max-level)))
|
|
|
- (setq past-first-child t))
|
|
|
- (outline-flag-region (line-end-position 0) (line-end-position) nil)))))
|
|
|
+ ;; If `orgstruct-mode' is active, use the slower version.
|
|
|
+ (if orgstruct-mode (call-interactively #'show-children)
|
|
|
+ (save-excursion
|
|
|
+ (org-back-to-heading t)
|
|
|
+ (let* ((current-level (funcall outline-level))
|
|
|
+ (max-level (org-get-valid-level
|
|
|
+ current-level
|
|
|
+ (if level (prefix-numeric-value level) 1)))
|
|
|
+ (end (save-excursion (org-end-of-subtree t t)))
|
|
|
+ (regexp-fmt "^\\*\\{%d,%s\\}\\(?: \\|$\\)")
|
|
|
+ (past-first-child nil)
|
|
|
+ ;; Make sure to skip inlinetasks.
|
|
|
+ (re (format regexp-fmt
|
|
|
+ current-level
|
|
|
+ (cond
|
|
|
+ ((not (featurep 'org-inlinetask)) "")
|
|
|
+ (org-odd-levels-only (- (* 2 org-inlinetask-min-level)
|
|
|
+ 3))
|
|
|
+ (t (1- org-inlinetask-min-level))))))
|
|
|
+ ;; Display parent heading.
|
|
|
+ (outline-flag-region (line-end-position 0) (line-end-position) nil)
|
|
|
+ (forward-line)
|
|
|
+ ;; Display children. First child may be deeper than expected
|
|
|
+ ;; MAX-LEVEL. Since we want to display it anyway, adjust
|
|
|
+ ;; MAX-LEVEL accordingly.
|
|
|
+ (while (re-search-forward re end t)
|
|
|
+ (unless past-first-child
|
|
|
+ (setq re (format regexp-fmt
|
|
|
+ current-level
|
|
|
+ (max (funcall outline-level) max-level)))
|
|
|
+ (setq past-first-child t))
|
|
|
+ (outline-flag-region
|
|
|
+ (line-end-position 0) (line-end-position) nil))))))
|
|
|
|
|
|
(defun org-show-subtree ()
|
|
|
"Show everything after this heading at deeper levels."
|