Function: texinfo-show-structure
texinfo-show-structure is an interactive and byte-compiled function
defined in texinfo.el.gz.
Signature
(texinfo-show-structure &optional NODES-TOO)
Documentation
Show the structure of a Texinfo file.
List the lines in the file that begin with the @-sign commands for
@chapter, @section, and the like.
With optional argument (prefix if interactive), list both the lines
with @-sign commands for @chapter, @section, and the like, and list
@node lines.
Lines with structuring commands beginning in them are displayed in
another buffer named *Occur*. In that buffer, you can move point to
one of those lines and then use
RET (occur-mode-goto-occurrence),
to jump to the corresponding spot in the Texinfo source file.
Probably introduced at or before Emacs version 18.52.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/texinfo.el.gz
;;; Texinfo file structure
(defun texinfo-show-structure (&optional nodes-too)
"Show the structure of a Texinfo file.
List the lines in the file that begin with the @-sign commands for
@chapter, @section, and the like.
With optional argument (prefix if interactive), list both the lines
with @-sign commands for @chapter, @section, and the like, and list
@node lines.
Lines with structuring commands beginning in them are displayed in
another buffer named `*Occur*'. In that buffer, you can move point to
one of those lines and then use
\\<occur-mode-map>\\[occur-mode-goto-occurrence],
to jump to the corresponding spot in the Texinfo source file."
(interactive "P")
;; First, remember current location
(let (current-location)
(save-excursion
(end-of-line) ; so as to find section on current line
(if (re-search-backward
;; do not require `texinfo-section-types-regexp' in texnfo-upd.el
"^@\\(chapter \\|sect\\|subs\\|subh\\|unnum\\|major\\|chapheading \\|heading \\|appendix\\)"
nil t)
(setq current-location
(progn
(beginning-of-line)
(buffer-substring (point) (progn (end-of-line) (point)))))
;; else point is located before any section command.
(setq current-location "tex")))
;; Second, create and format an *Occur* buffer
(save-excursion
(goto-char (point-min))
(occur (concat "^\\(?:" (if nodes-too "@node\\>\\|")
outline-regexp "\\)")))
(pop-to-buffer "*Occur*")
(goto-char (point-min))
(let ((inhibit-read-only t))
(flush-lines "-----")
;; Now format the "*Occur*" buffer to show the structure.
;; Thanks to ceder@signum.se (Per Cederqvist)
(goto-char (point-max))
(let (level)
(while (re-search-backward "^ *[0-9]*:@\\(\\sw+\\)" nil 0)
(goto-char (1- (match-beginning 1)))
(setq level
(or (cadr (assoc (match-string 1) texinfo-section-list)) 2))
(indent-to-column (+ (current-column) (* 4 (- level 2))))
(beginning-of-line))))
;; Third, go to line corresponding to location in source file
;; potential bug: two exactly similar `current-location' lines ...
(goto-char (point-min))
(re-search-forward current-location nil t)
(beginning-of-line)
))