Add imenu for eww
Add support for Imenu integration to EWW mode by defining a custom index function that uses HTML headings from the current buffer as menu items, and then add this hook to eww-mode-hook so that it can be triggered automatically when eww buffers are opened. This change includes code borrowed from 3b46f9c0e0
This commit is contained in:
parent
a00ecb3fc0
commit
71d26e5e05
@ -90,6 +90,28 @@ new EWW buffer."
|
|||||||
;; Don't try to render SVGs, for some reason they are not rendered correctly
|
;; Don't try to render SVGs, for some reason they are not rendered correctly
|
||||||
(add-to-list 'shr-external-rendering-functions
|
(add-to-list 'shr-external-rendering-functions
|
||||||
'(svg . ignore))
|
'(svg . ignore))
|
||||||
|
;; https://github.com/alphapapa/unpackaged.el/commit/3b46f9c0e0195d78df8c4ca6e1953b69539e2844
|
||||||
|
(defun imenu-eww-headings ()
|
||||||
|
"Return alist of HTML headings in current EWW buffer for Imenu.
|
||||||
|
Suitable for `imenu-create-index-function'."
|
||||||
|
(let ((faces '(shr-h1 shr-h2 shr-h3 shr-h4 shr-h5 shr-h6 shr-heading)))
|
||||||
|
(save-excursion
|
||||||
|
(save-restriction
|
||||||
|
(widen)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(cl-loop for next-pos = (next-single-property-change (point) 'face)
|
||||||
|
while next-pos
|
||||||
|
do (goto-char next-pos)
|
||||||
|
for face = (get-text-property (point) 'face)
|
||||||
|
when (cl-typecase face
|
||||||
|
(list (cl-intersection face faces))
|
||||||
|
(symbol (member face faces)))
|
||||||
|
collect (cons (buffer-substring (point-at-bol) (point-at-eol)) (point))
|
||||||
|
and do (forward-line 1))))))
|
||||||
|
|
||||||
|
(add-hook 'eww-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(setq-local imenu-create-index-function #'imenu-eww-headings)))
|
||||||
:general
|
:general
|
||||||
(leader-map "E" #'eww)
|
(leader-map "E" #'eww)
|
||||||
(normal eww-mode-map
|
(normal eww-mode-map
|
||||||
|
Loading…
Reference in New Issue
Block a user