[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/osm ff64d0a6e0 1/2: Simplify menu mechanism
From: |
ELPA Syncer |
Subject: |
[elpa] externals/osm ff64d0a6e0 1/2: Simplify menu mechanism |
Date: |
Sun, 20 Mar 2022 10:57:39 -0400 (EDT) |
branch: externals/osm
commit ff64d0a6e0bf4d86f66b63214b113d8035ce1a56
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Simplify menu mechanism
---
osm.el | 114 ++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 60 insertions(+), 54 deletions(-)
diff --git a/osm.el b/osm.el
index adbeefe055..9a28eb2705 100644
--- a/osm.el
+++ b/osm.el
@@ -200,8 +200,44 @@ Should be at least 7 days according to the server usage
policies."
"Size of tile memory cache."
:type '(choice (const nil) integer))
+(defun osm--menu-item (menu)
+ "Generate menu item from MENU."
+ `(menu-item
+ ""
+ nil :filter
+ ,(lambda (&optional _)
+ (select-window
+ (posn-window
+ (event-start last-input-event)))
+ (easy-menu-filter-return (if (functionp menu)
+ (funcall menu)
+ menu)))))
+
+(defvar osm--menu
+ '(["Home" osm-home t]
+ ["Go to" osm-goto t]
+ ["Search" osm-search t]
+ ["Server" osm-server t]
+ "--"
+ ["Org Link" org-store-link t]
+ ["Elisp Link" osm-elisp-link t]
+ ("Bookmark"
+ ["Set" osm-bookmark-set t]
+ ["Jump" osm-bookmark-jump t]
+ ["Rename" osm-bookmark-rename t]
+ ["Delete" osm-bookmark-delete t])
+ "--"
+ ["Show GPX" osm-gpx-show t]
+ ["Hide GPX" osm-gpx-hide t]
+ "--"
+ ["Clone" clone-buffer t]
+ ["Revert" revert-buffer t]
+ ["Customize" (customize-group 'osm) t])
+ "Menu for `osm-mode.")
+
(defvar osm-mode-map
(let ((map (make-sparse-keymap)))
+ (define-key map [menu-bar osm--menu] (osm--menu-item osm--menu))
(define-key map [osm-home] #'ignore)
(define-key map [osm-org-link] #'ignore)
(define-key map [osm-center] #'ignore)
@@ -256,50 +292,6 @@ Should be at least 7 days according to the server usage
policies."
map)
"Keymap used by `osm-mode'.")
-(defvar osm-server-menu
- `(menu-item
- "Server menu" nil
- :filter
- (lambda (&optional _)
- (let (menu last-group)
- (dolist (server osm-server-list)
- (let* ((plist (cdr server))
- (group (plist-get plist :group)))
- (unless (equal last-group group)
- (push (format "─── %s ───" group) menu)
- (setq last-group group))
- (push
- `[,(plist-get plist :name)
- (osm-server ',(car server))
- :style toggle
- :selected (eq osm-server ',(car server))]
- menu)))
- (easy-menu-filter-return (nreverse menu)))))
- "Server menu.")
-
-(easy-menu-define osm-menu osm-mode-map
- "Menu for `osm-mode."
- `("Osm mode"
- ["Home" osm-home t]
- ["Go to" osm-goto t]
- ["Search" osm-search t]
- ["Server" osm-server t]
- "--"
- ["Org Link" org-store-link t]
- ["Elisp Link" osm-elisp-link t]
- ("Bookmark"
- ["Set" osm-bookmark-set t]
- ["Jump" osm-bookmark-jump t]
- ["Rename" osm-bookmark-rename t]
- ["Delete" osm-bookmark-delete t])
- "--"
- ["Show GPX" osm-gpx-show t]
- ["Hide GPX" osm-gpx-hide t]
- "--"
- ["Clone" clone-buffer t]
- ["Revert" revert-buffer t]
- ["Customize" (customize-group 'osm) t]))
-
(defconst osm--placeholder
'(:type svg :width 256 :height 256
:data "<svg width='256' height='256' version='1.1'
xmlns='http://www.w3.org/2000/svg'>
@@ -363,6 +355,23 @@ Should be at least 7 days according to the server usage
policies."
(defvar-local osm--transient-pin nil
"Transient pin.")
+(defun osm--server-menu ()
+ "Generate server menu."
+ (let (menu last-group)
+ (dolist (server osm-server-list)
+ (let* ((plist (cdr server))
+ (group (plist-get plist :group)))
+ (unless (equal last-group group)
+ (push (format "─── %s ───" group) menu)
+ (setq last-group group))
+ (push
+ `[,(plist-get plist :name)
+ (osm-server ',(car server))
+ :style toggle
+ :selected (eq osm-server ',(car server))]
+ menu)))
+ (nreverse menu)))
+
(defun osm--boundingbox-to-zoom (lat1 lat2 lon1 lon2)
"Compute zoom level from boundingbox LAT1 to LAT2 and LON1 to LON2."
(let ((w (/ (frame-pixel-width) 256))
@@ -965,14 +974,11 @@ xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'>
(propertize text
'keymap (let ((map (make-sparse-keymap)))
(define-key map [header-line mouse-1]
- `(menu-item
- ""
- nil :filter
- ,(lambda (&optional _)
- (select-window
- (posn-window
- (event-start last-input-event)))
- action)))
+ (if (commandp action)
+ (lambda ()
+ (interactive "@")
+ (call-interactively action))
+ (osm--menu-item action)))
map)
'face '(:box (:line-width -2 :style released-button))
'mouse-face '(:box (:line-width -2 :style pressed-button))))
@@ -1007,9 +1013,9 @@ xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'>
(propertize " " 'display '(space :width (1)))
(osm--header-button " - " #'osm-zoom-out)
(propertize " " 'display '(space :width (1)))
- (osm--header-button (format " %s " server) osm-server-menu)
+ (osm--header-button (format " %s " server) #'osm--server-menu)
(propertize " " 'display '(space :width (1)))
- (osm--header-button " ☰ " osm-menu)))))
+ (osm--header-button " ☰ " osm--menu)))))
(defun osm--update ()
"Update map display."