summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2025-01-07 05:38:56 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2025-01-07 05:39:24 +0100
commit25fe7dff4ab4c12971847116fe3b3edc914f620c (patch)
tree0e55702559b4d5efae306c245e83bab3578939cb
parentbb55a0b9d91a33c1a2feaf212aa708920b764a38 (diff)
Add imenu support
-rw-r--r--osm.el17
1 files changed, 16 insertions, 1 deletions
diff --git a/osm.el b/osm.el
index 765c347..d59d7d0 100644
--- a/osm.el
+++ b/osm.el
@@ -890,7 +890,8 @@ Local per buffer since the overlays depend on the zoom level.")
mwheel-scroll-down-function #'osm--zoom-in-wheel
mwheel-scroll-left-function #'osm--zoom-out-wheel
mwheel-scroll-right-function #'osm--zoom-in-wheel
- bookmark-make-record-function #'osm--bookmark-record-default)
+ bookmark-make-record-function #'osm--bookmark-record-default
+ imenu-create-index-function #'osm--imenu-index)
(when (boundp 'mwheel-coalesce-scroll-events)
(setq-local mwheel-coalesce-scroll-events t))
(when (boundp 'pixel-scroll-precision-mode)
@@ -1590,6 +1591,20 @@ When called interactively, call the function `osm-home'."
(`(,name ,_group ,id ,lat ,lon ,zoom) (osm--goto lat lon zoom nil id name))
(_ (user-error "No pin selected")))))
+(defun osm--imenu-index ()
+ "Create Imenu index."
+ (let (index)
+ (osm--each-pin
+ (lambda (id lat lon zoom name)
+ (push (list name (vector lat lon zoom) #'osm--imenu-goto)
+ (alist-get (capitalize (substring (symbol-name id) 4))
+ index nil nil #'equal))))
+ (sort index (lambda (x y) (string< (car x) (car y))))))
+
+(defun osm--imenu-goto (_name pos)
+ "Goto Imenu POS."
+ (osm--goto (aref pos 0) (aref pos 1) (aref pos 2) nil nil nil))
+
(defun osm--fetch-json (url)
"Get json from URL."
(osm--check-libraries)