I'm finding Wilfred Hughes's helpful-mode, well… rather helpful. However, I'm missing imenu support. Here's a hacky way to get basic imenu.
(defun helpful--create-imenu-index ()
"Create an `imenu' index for helpful."
(beginning-of-buffer)
(let ((imenu-items '()))
(while (progn
(beginning-of-line)
;; Not great, but determine if looking at heading:
;; 1. if it has bold face.
;; 2. if it is capitalized.
(when (and (eq 'bold (face-at-point))
(string-match-p
"[A-Z]"
(buffer-substring (line-beginning-position)
(line-end-position))))
(add-to-list 'imenu-items
(cons (buffer-substring (line-beginning-position)
(line-end-position))
(line-beginning-position))))
(= 0 (forward-line 1))))
imenu-items))
(defun helpful-mode-hook-function ()
"A hook function for `helpful-mode'."
(setq imenu-create-index-function #'helpful--create-imenu-index))
(add-hook 'helpful-mode-hook
#'helpful-mode-hook-function)