Function: org-imenu-get-tree
org-imenu-get-tree is a byte-compiled function defined in
org-compat.el.gz.
Signature
(org-imenu-get-tree)
Documentation
Produce the index for Imenu.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-compat.el.gz
(defun org-imenu-get-tree ()
"Produce the index for Imenu."
(dolist (x org-imenu-markers) (move-marker x nil))
(setq org-imenu-markers nil)
(org-with-wide-buffer
(goto-char (point-max))
(let* ((re (concat "^" (org-get-limited-outline-regexp)))
(subs (make-vector (1+ org-imenu-depth) nil))
(last-level 0))
(while (re-search-backward re nil t)
(let ((level (org-reduced-level (funcall outline-level)))
(headline (org-no-properties
(org-link-display-format (org-get-heading t t t t)))))
(when (and (<= level org-imenu-depth) (org-string-nw-p headline))
(let* ((m (point-marker))
(item (propertize headline 'org-imenu-marker m 'org-imenu t)))
(push m org-imenu-markers)
(if (>= level last-level)
(push (cons item m) (aref subs level))
(push (cons item
(cl-mapcan #'identity (cl-subseq subs (1+ level))))
(aref subs level))
(cl-loop for i from (1+ level) to org-imenu-depth
do (aset subs i nil)))
(setq last-level level)))))
(aref subs 1))))