Prechádzať zdrojové kódy

Fix `org-cycle' within `orgstruct-mode'

* lisp/org.el (org-show-children): Fallback to `outline-show-children'
  when `orgstruct-mode' is active.

Reported-by: Jonas Bernoulli <jonas@bernoul.li>
<http://permalink.gmane.org/gmane.emacs.orgmode/102709>
Nicolas Goaziou 10 rokov pred
rodič
commit
b8f100c14a
1 zmenil súbory, kde vykonal 33 pridanie a 29 odobranie
  1. 33 29
      lisp/org.el

+ 33 - 29
lisp/org.el

@@ -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
 should be shown.  Default is enough to cause the following
 heading to appear."
 heading to appear."
   (interactive "p")
   (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 ()
 (defun org-show-subtree ()
   "Show everything after this heading at deeper levels."
   "Show everything after this heading at deeper levels."