diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2026-01-24 10:44:47 +0100 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2026-01-24 10:44:47 +0100 |
| commit | aaa458da26e5bec86240e7d8c51dc5a819ee20b9 (patch) | |
| tree | 20959633e1ef221d102f7d9c339b4bd6454e3f3f | |
| parent | 52347efee84559112a254edfc032e9b23d8d0aa9 (diff) | |
Rename osm-server to osm-default-server
| -rw-r--r-- | CHANGELOG.org | 1 | ||||
| -rw-r--r-- | osm.el | 109 |
2 files changed, 57 insertions, 53 deletions
diff --git a/CHANGELOG.org b/CHANGELOG.org index 826e21e..d532cdc 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -6,6 +6,7 @@ - Improve Google Map link handling. - New customizable =osm-default-zoom=. +- Rename customizable =osm-server= to =osm-default-server=. * Version 2.1 (2026-01-09) @@ -197,6 +197,10 @@ apikey. The apikey will be retrieved via `auth-source-search' with the "Default zoom level." :type 'natnum) +(defcustom osm-default-server 'default + "Default tile server." + :type 'symbol) + (defcustom osm-home (let ((lat (bound-and-true-p calendar-latitude)) (lon (bound-and-true-p calendar-longitude))) @@ -217,10 +221,6 @@ apikey. The apikey will be retrieved via `auth-source-search' with the "Scroll step in pixel." :type 'natnum) -(defcustom osm-server 'default - "Tile server name." - :type 'symbol) - (defcustom osm-tile-border nil "Set to t to display thin tile borders. For debugging set the value to `debug', such that a border is @@ -424,6 +424,9 @@ Should be at least 7 days according to the server usage policies." (defvar-local osm--ny 0 "Number of tiles in y direction.") +(defvar-local osm--server nil + "Server of the map.") + (defvar-local osm--zoom nil "Zoom level of the map.") @@ -461,10 +464,15 @@ Local per buffer since the overlays depend on the zoom level.") `[,(plist-get plist :name) (osm-server ',(car server)) :style toggle - :selected (eq osm-server ',(car server))] + :selected (eq osm--server ',(car server))] menu))) (easy-menu-create-menu "Server" (nreverse menu)))) +(defsubst osm--server-get (prop &optional server) + "Return server property PROP for SERVER." + (or (plist-get (alist-get (or server osm--server) osm-server-list) prop) + (plist-get osm-server-defaults prop))) + (defsubst osm--lon-to-normalized-x (lon) "Convert LON to normalized x coordinate." (/ (+ lon 180.0) 360.0)) @@ -479,9 +487,9 @@ Local per buffer since the overlays depend on the zoom level.") (pcase-let ((`(,min-lat ,max-lat ,min-lon ,max-lon) bb) (w (/ (frame-pixel-width) 256)) (h (/ (frame-pixel-height) 256))) - (max (osm--server-property :min-zoom) + (max (osm--server-get :min-zoom) (min - (osm--server-property :max-zoom) + (osm--server-get :max-zoom) (min (logb (/ w (abs (- (osm--lon-to-normalized-x min-lon) (osm--lon-to-normalized-x max-lon))))) (logb (/ h (abs (- (osm--lat-to-normalized-y min-lat) @@ -541,15 +549,10 @@ Local per buffer since the overlays depend on the zoom level.") "Return latitude in pixel of top left corner." (- (osm--y) osm--wy)) -(defun osm--server-property (prop &optional server) - "Return server property PROP for SERVER." - (or (plist-get (alist-get (or server osm-server) osm-server-list) prop) - (plist-get osm-server-defaults prop))) - (defun osm--tile-url (x y zoom) "Return tile url for coordinate X, Y and ZOOM." - (let ((url (osm--server-property :url)) - (key (osm--server-property :key))) + (let ((url (osm--server-get :url)) + (key (osm--server-get :key))) (when (and (string-search "%k" url) (not key)) (require 'auth-source) (declare-function auth-source-search "auth-source") @@ -564,7 +567,7 @@ Local per buffer since the overlays depend on the zoom level.") (unless key (warn "No auth source secret found for apikey@%s" host) (setq key "")) - (setf (plist-get (alist-get osm-server osm-server-list) :key) key))) + (setf (plist-get (alist-get osm--server osm-server-list) :key) key))) (format-spec url `((?z . ,zoom) (?x . ,x) (?y . ,y) (?k . ,(if (functionp key) (funcall key) key)))))) @@ -573,18 +576,18 @@ Local per buffer since the overlays depend on the zoom level.") "Return tile file name for coordinate X, Y and ZOOM." (file-name-concat (expand-file-name osm-tile-directory) - (symbol-name osm-server) + (symbol-name osm--server) (format "%d-%d-%d.%s" zoom x y - (or (osm--server-property :ext) + (or (osm--server-get :ext) (file-name-extension (url-file-nondirectory - (osm--server-property :url))))))) + (osm--server-get :url))))))) (defun osm--enqueue-download (x y) "Enqueue tile X/Y for download." (when (let ((n (expt 2 osm--zoom))) (and (>= x 0) (>= y 0) (< x n) (< y n))) - (let ((job (list osm-server osm--zoom x y))) + (let ((job (list osm--server osm--zoom x y))) (unless (or (member job osm--download-queue) (member job osm--download-active)) (setq osm--download-queue (nconc osm--download-queue (list job))))))) @@ -603,7 +606,7 @@ Local per buffer since the overlays depend on the zoom level.") (when (equal status "200") (ignore-errors (rename-file file (string-remove-suffix ".tmp" file) t)) (osm--each - (when (and (= osm--zoom zoom) (eq osm-server server)) + (when (and (= osm--zoom zoom) (eq osm--server server)) (osm--display-tile x y (osm--get-tile x y))))) (cl-callf2 delete (list server zoom x y) osm--download-active) (delete-file file))) @@ -612,8 +615,8 @@ Local per buffer since the overlays depend on the zoom level.") (defun osm--download-command () "Build download command." (let* ((count 0) - (batch (osm--server-property :download-batch)) - (parallel (osm--server-property :max-connections)) + (batch (osm--server-get :download-batch)) + (parallel (osm--server-get :max-connections)) args jobs job) (while (and (< count batch) (setq job (nth (* count parallel) osm--download-queue))) @@ -634,13 +637,13 @@ Local per buffer since the overlays depend on the zoom level.") (defun osm--download () "Download next tiles from the queue." - (when (and (< (length (alist-get osm-server osm--download-processes)) - (osm--server-property :max-connections)) + (when (and (< (length (alist-get osm--server osm--download-processes)) + (osm--server-get :max-connections)) osm--download-queue) (pcase-let ((`(,command . ,jobs) (osm--download-command)) (dir (file-name-concat (expand-file-name osm-tile-directory) - (symbol-name osm-server))) - (server osm-server)) + (symbol-name osm--server))) + (server osm--server)) (make-directory dir t) (push (make-process @@ -689,14 +692,14 @@ Local per buffer since the overlays depend on the zoom level.") (defun osm--zoom-in-wheel (_n) "Zoom in with the mouse wheel." (pcase-let ((`(,x . ,y) (posn-x-y (event-start last-input-event)))) - (when (< osm--zoom (osm--server-property :max-zoom)) + (when (< osm--zoom (osm--server-get :max-zoom)) (osm--move (/ (- x osm--wx) 2) (/ (- y osm--wy) 2)) (osm-zoom-in)))) (defun osm--zoom-out-wheel (_n) "Zoom out with the mouse wheel." (pcase-let ((`(,x . ,y) (posn-x-y (event-start last-input-event)))) - (when (> osm--zoom (osm--server-property :min-zoom)) + (when (> osm--zoom (osm--server-get :min-zoom)) (osm--move (- osm--wx x) (- osm--wy y)) (osm-zoom-out)))) @@ -793,8 +796,8 @@ Local per buffer since the overlays depend on the zoom level.") "Zoom N times into the map." (interactive "p" osm-mode) (osm--barf-unless-osm) - (setq osm--zoom (max (osm--server-property :min-zoom) - (min (osm--server-property :max-zoom) + (setq osm--zoom (max (osm--server-get :min-zoom) + (min (osm--server-get :max-zoom) (+ osm--zoom (or n 1))))) (osm--update)) @@ -900,7 +903,7 @@ Local per buffer since the overlays depend on the zoom level.") "OpenStreetMap viewer mode." :interactive nil :abbrev-table nil :syntax-table nil (osm--check-libraries) - (setq-local osm-server osm-server + (setq-local osm--server osm-default-server line-spacing nil cursor-type nil cursor-in-non-selected-windows nil @@ -1141,7 +1144,7 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> (osm--lat-to-y lat osm--zoom) lat lon 'osm-selected name))) (_ - (let* ((key `(,osm-server ,osm--zoom ,x . ,y)) + (let* ((key `(,osm--server ,osm--zoom ,x . ,y)) (tile (and osm--tile-cache (gethash key osm--tile-cache)))) (if tile (progn (setcar tile osm--tile-age) (cdr tile)) @@ -1209,7 +1212,7 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> (defun osm--update-header () "Update header line." (let* ((meter-per-pixel (/ (* 156543.03 (cos (/ osm--lat (/ 180.0 float-pi)))) (expt 2 osm--zoom))) - (server (osm--server-property :name)) + (server (osm--server-get :name)) (meter 1) (idx 0) (factor '(2 2.5 2)) (sep #(" " 0 1 (display (space :width (1)))))) @@ -1272,7 +1275,7 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> (defun osm--update-copyright () "Update copyright info." - (let ((copyright (and osm-copyright (osm--server-property :copyright)))) + (let ((copyright (and osm-copyright (osm--server-get :copyright)))) (if (not copyright) (when (eq 'osm-copyright (car-safe tab-line-format)) (kill-local-variable 'tab-line-format)) @@ -1352,7 +1355,7 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> `(,name (location . ,(osm--location-name lat lon loc 6)) (coordinates ,lat ,lon ,osm--zoom) - (server . ,osm-server) + (server . ,osm--server) (handler . ,#'osm-bookmark-jump))) (defun osm--org-link-props () @@ -1361,15 +1364,15 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> (name (osm--location-name lat lon loc 2))) (list :type "geo" :description - (if (eq osm-server (default-value 'osm-server)) - (string-remove-suffix (concat " " (osm--server-property :name)) + (if (eq osm--server osm-default-server) + (string-remove-suffix (concat " " (osm--server-get :name)) name) name) :link (format "geo:%.6f,%.6f;z=%s%s" lat lon osm--zoom - (if (eq osm-server (default-value 'osm-server)) "" - (format ";s=%s" osm-server)))))) + (if (eq osm--server osm-default-server) "" + (format ";s=%s" osm--server)))))) (defun osm--rename-buffer () "Rename current buffer." @@ -1383,7 +1386,7 @@ xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> The coordinates are formatted with precision PREC." (format (format "%%s%%.%df° %%.%df° Z%%s %%s" prec prec) (if loc (concat loc ", ") "") - lat lon osm--zoom (osm--server-property :name))) + lat lon osm--zoom (osm--server-get :name))) (defun osm--bookmark-name (lat lon loc) "Return bookmark name for LAT/LON/LOC." @@ -1393,8 +1396,8 @@ The coordinates are formatted with precision PREC." "Go to LAT/LON/ZOOM, change SERVER. Optionally place pin with ID and NAME." ;; Server not found - (when (and server (not (assq server osm-server-list))) (setq server nil)) - (let ((def-server (or server osm-server)) + (unless (assq server osm-server-list) (setq server nil)) + (let ((def-server (or server osm-default-server)) (def-lat (or lat (car osm-home))) (def-lon (or lon (cadr osm-home))) (def-zoom (or zoom (if (and lat lon) osm-default-zoom (caddr osm-home))))) @@ -1405,7 +1408,7 @@ Optionally place pin with ID and NAME." (cl-loop for buf in (buffer-list) thereis (and (equal (buffer-local-value 'major-mode buf) #'osm-mode) - (equal (buffer-local-value 'osm-server buf) def-server) + (equal (buffer-local-value 'osm--server buf) def-server) (equal (buffer-local-value 'osm--zoom buf) def-zoom) (equal (buffer-local-value 'osm--lat buf) def-lat) (equal (buffer-local-value 'osm--lon buf) def-lon) @@ -1413,9 +1416,9 @@ Optionally place pin with ID and NAME." (generate-new-buffer "*osm*")) (unless (eq major-mode #'osm-mode) (osm-mode)) - (when (and server (not (eq osm-server server))) - (setq-local osm-server server - osm--download-queue nil)) + (when (and server (not (eq osm--server server))) + (setq osm--server server + osm--download-queue nil)) (when (or (not (and osm--lon osm--lat)) lat) (setq osm--lat def-lat osm--lon def-lon @@ -1906,7 +1909,7 @@ See `osm-search-server' and `osm-search-language' for customization." (defun osm--server-annotation (cand) "Annotation for server CAND." - (when-let* ((copyright (osm--server-property :copyright (get-text-property 0 'osm--server cand))) + (when-let* ((copyright (osm--server-get :copyright (get-text-property 0 'osm--server cand))) (str (replace-regexp-in-string "{\\(.*?\\)|.*?}" @@ -1920,7 +1923,7 @@ See `osm-search-server' and `osm-search-language' for customization." "Group function for server CAND with candidate TRANSFORM." (if transform cand - (osm--server-property :group (get-text-property 0 'osm--server cand)))) + (osm--server-get :group (get-text-property 0 'osm--server cand)))) ;;;###autoload (defun osm-server (server) @@ -1950,8 +1953,8 @@ See `osm-search-server' and `osm-search-language' for customization." (group-function . ,#'osm--server-group))) nil t nil 'osm--server-history (format fmt - (osm--server-property :name) - (or (osm--server-property :description) ""))))) + (osm--server-get :name) + (or (osm--server-get :description) ""))))) (list (get-text-property 0 'osm--server (or (car (member selected servers)) @@ -1964,15 +1967,15 @@ If prefix ARG is given, store URL as Elisp expression." (interactive "P" osm-mode) (osm--barf-unless-osm) (pcase-let* ((`(,lat ,lon ,loc) (osm--fetch-location-data "New Link")) - (server (and (not (eq osm-server (default-value 'osm-server))) osm-server)) + (server (and (not (eq osm--server osm-default-server)) osm--server)) (url (if arg (format "(osm %.6f %.6f %s%s%s)" lat lon osm--zoom - (if server (format " '%s" osm-server) "") + (if server (format " '%s" server) "") (if loc (format " %S" loc) "")) (format "geo:%.6f,%.6f;z=%s%s%s" lat lon osm--zoom - (if server (format ";s=%s" osm-server) "") + (if server (format ";s=%s" server) "") (if loc (format " (%s)" loc) ""))))) (kill-new url) (message "Saved in the kill ring: %s" url))) |
