Function: org-forward-heading-same-level
org-forward-heading-same-level is an interactive and byte-compiled
function defined in org.el.gz.
Signature
(org-forward-heading-same-level ARG &optional INVISIBLE-OK)
Documentation
Move forward to the ARG'th subheading at same level as this one.
Stop at the first and last subheadings of a superior heading. Normally this only looks at visible headings, but when INVISIBLE-OK is non-nil it will also look at invisible ones.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-forward-heading-same-level (arg &optional invisible-ok)
"Move forward to the ARG'th subheading at same level as this one.
Stop at the first and last subheadings of a superior heading.
Normally this only looks at visible headings, but when INVISIBLE-OK is
non-nil it will also look at invisible ones."
(interactive "p")
(let ((backward? (and arg (< arg 0))))
(if (org-before-first-heading-p)
(if backward? (goto-char (point-min)) (outline-next-heading))
(org-back-to-heading invisible-ok)
(unless backward? (end-of-line)) ;do not match current headline
(let ((level (org-current-level))
(f (if backward? #'re-search-backward #'re-search-forward))
(count (if arg (abs arg) 1))
(result (point)))
(while (and (> count 0)
(funcall f org-outline-regexp-bol nil 'move))
(let ((l (- (match-end 0) (match-beginning 0) 1)))
(cond ((< l level) (setq count 0))
((and (= l level)
(or invisible-ok
;; FIXME: See commit a700fadd72 and the
;; related discussion on why using
;; `org--line-fully-invisible-p' is needed
;; here, which is to serve the needs of an
;; external package. If the change is
;; wrong regarding Org itself, it should
;; be removed.
(not (org--line-fully-invisible-p))))
(cl-decf count)
(when (= l level) (setq result (point)))))))
(goto-char result))
(beginning-of-line))))