@code{doc-view-resolution}.
@vindex doc-view-imenu-enabled
+@vindex doc-view-imenu-flatten
+@vindex doc-view-imenu-format
When the @command{mutool} program is available, DocView will use it
to generate entries for an outline menu, making it accessible via the
@code{imenu} facility (@pxref{Imenu}). To disable this functionality
-even when @command{mutool} can be found on your system, customize
-the variable @code{doc-view-imenu-enabled} to the @code{nil} value.
+even when @command{mutool} can be found on your system, customize the
+variable @code{doc-view-imenu-enabled} to the @code{nil} value. You
+can further customize how @code{imenu} items are formatted and
+displayed using the variables @code{doc-view-imenu-format} and
+@code{doc-view-flatten}.
@node DocView Searching
@subsection DocView Searching
:type 'boolean
:version "29.1")
+(defcustom doc-view-imenu-title-format "%t (%p)"
+ "Format string for document section titles in imenu.
+
+The special markers '%t' and '%p' are replaced by the section
+title and page number in this format string, which uses
+`format-spec'.
+
+For instance, setting this variable to \"%t\" will produce items
+showing only titles and no page number."
+ :type 'string
+ :version "29.1")
+
+(defcustom doc-view-imenu-flatten nil
+ "Whether to generate a flat list of sections instead of a nested tree."
+ :type 'boolean
+ :version "29.1")
+
(defcustom doc-view-svg-background "white"
"Background color for svg images.
See `doc-view-mupdf-use-svg'."
(goto-char (point-min))
(while (re-search-forward doc-view--outline-rx nil t)
(push `((level . ,(length (match-string 1)))
- (title . ,(match-string 2))
+ (title . ,(replace-regexp-in-string "\\\\[rt]" " "
+ (match-string 2)))
(page . ,(string-to-number (match-string 3))))
outline)))
(nreverse outline)))
level. Returns that imenu alist together with any other pending outline
entries at an upper level."
(let ((level (alist-get 'level (car outline)))
+ (nested (not doc-view-imenu-flatten))
(index nil))
- (while (and (car outline) (<= level (alist-get 'level (car outline))))
+ (while (and (car outline)
+ (or nested (<= level (alist-get 'level (car outline)))))
(let-alist (car outline)
- (let ((title (format "%s (%s)" .title .page)))
- (if (> .level level)
+ (let ((title (format-spec doc-view-imenu-title-format
+ `((?t . ,.title) (?p . ,.page)))))
+ (if (and nested (> .level level))
(let ((sub (doc-view--imenu-subtree outline act))
(fst (car index)))
(setq index (cdr index))