[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/osm 5815de2a73 29/77: Store server as part in bookmark
From: |
ELPA Syncer |
Subject: |
[elpa] externals/osm 5815de2a73 29/77: Store server as part in bookmark and Org link |
Date: |
Mon, 7 Mar 2022 08:58:05 -0500 (EST) |
branch: externals/osm
commit 5815de2a73eaa10e657bd2e03db0b0a697a30dd2
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Store server as part in bookmark and Org link
---
ol-osm.el | 22 +++++++----
osm.el | 125 ++++++++++++++++++++++++++++++++++----------------------------
2 files changed, 84 insertions(+), 63 deletions(-)
diff --git a/ol-osm.el b/ol-osm.el
index c7db90692f..17b1bdaba4 100644
--- a/ol-osm.el
+++ b/ol-osm.el
@@ -26,7 +26,7 @@
(require 'ol)
;; Only load osm on demand
-(declare-function osm-goto "osm")
+(autoload 'osm--setup "osm")
(declare-function osm--link-data "osm")
(org-link-set-parameters
@@ -36,19 +36,27 @@
(defun ol-osm-open (link _)
"Open osm LINK."
- (setq link (split-string link ","))
- (osm-goto (string-to-number (nth 0 link))
- (string-to-number (nth 1 link))
- (string-to-number (nth 2 link))))
+ (save-match-data
+ (unless (string-match
+ "\\`\\(?:\\([^:]+\\):\\)?\\([^,]+\\),\\([^,]+\\),\\([^,]+\\)\\'"
+ link)
+ (error "Invalid osm link"))
+ (osm--setup
+ :at (list (string-to-number (match-string 2 link))
+ (string-to-number (match-string 3 link))
+ (string-to-number (match-string 4 link)))
+ :server (and (match-end 1) (intern (match-string 1 link))))))
(defun ol-osm-store ()
"Store osm link."
(when (derived-mode-p 'osm-mode)
- (pcase-let ((`(,lat ,lon ,zoom ,desc) (osm--link-data)))
+ (pcase-let ((`(,lat ,lon ,zoom ,server ,desc) (osm--link-data)))
(org-link-store-props
:type "osm"
:description (and desc (format "%s %.2f° %.2f°" desc lat lon))
- :link (format "osm:%s,%s,%s" lat lon zoom)))))
+ :link (format "osm:%s%s,%s,%s"
+ (if server (format "%s:" server) "")
+ lat lon zoom)))))
(provide 'ol-osm)
;;; ol-osm.el ends here
diff --git a/osm.el b/osm.el
index 611c54c105..601267b82c 100644
--- a/osm.el
+++ b/osm.el
@@ -218,12 +218,6 @@ We need two distinct images which are not `eq' for the
display properties.")
(setq lat (* lat (/ float-pi 180.0)))
(- 0.5 (/ (log (+ (tan lat) (/ 1 (cos lat)))) float-pi 2)))
-(defun osm--set-lat-lon (lat lon)
- "Set longitude LON and latitude LAT."
- (let ((n (* 256 (expt 2.0 osm--zoom))))
- (setq osm--x (floor (* n (osm--lon-to-x lon)))
- osm--y (floor (* n (osm--lat-to-y lat))))))
-
(defun osm--lon ()
"Return longitude in degrees."
(- (/ (* osm--x 360.0) 256.0 (expt 2.0 osm--zoom)) 180.0))
@@ -233,6 +227,22 @@ We need two distinct images which are not `eq' for the
display properties.")
(let ((y (* float-pi (- 1 (* 2 (/ osm--y 256.0 (expt 2.0 osm--zoom)))))))
(/ (* 180 (atan (/ (- (exp y) (exp (- y))) 2))) float-pi)))
+(defun osm--set-coordinates (coord)
+ "Set coordinate triple COORD."
+ (let ((n (* 256 (expt 2.0 (nth 2 coord)))))
+ (setq osm--zoom (nth 2 coord)
+ osm--x (floor (* n (osm--lon-to-x (nth 1 coord))))
+ osm--y (floor (* n (osm--lat-to-y (nth 0 coord)))))))
+
+(defun osm--home-coordinates ()
+ "Return home coordinate triple."
+ (let ((lat (bound-and-true-p calendar-latitude))
+ (lon (bound-and-true-p calendar-longitude))
+ (zoom 11))
+ (unless (and lat lon)
+ (setq lat 0 lon 0 zoom 2))
+ (list lat lon zoom)))
+
(defun osm--server-property (prop)
"Return server property PROP."
(plist-get (alist-get osm-server osm-server-list) prop))
@@ -466,14 +476,9 @@ We need two distinct images which are not `eq' for the
display properties.")
;;;###autoload
(defun osm-home ()
- "New OSM buffer."
+ "Go to home coordinates."
(interactive)
- (let ((lat (bound-and-true-p calendar-latitude))
- (lon (bound-and-true-p calendar-longitude))
- (zoom 11))
- (unless (and lat lon)
- (setq lat 0 lon 0 zoom 2))
- (osm-goto lat lon zoom)))
+ (osm--setup :at (osm--home-coordinates)))
(defun osm--queue-info ()
"Return queue info string."
@@ -545,46 +550,65 @@ We need two distinct images which are not `eq' for the
display properties.")
"Make OSM bookmark."
`(,(osm--bookmark-name)
,@(bookmark-make-record-default t)
- (lon . ,(osm--lon))
- (lat . ,(osm--lat))
- (zoom . ,osm--zoom)
- (name . ,(buffer-name))
+ (coordinate ,(osm--lat) ,(osm--lon) ,osm--zoom)
+ (server . ,osm-server)
+ (buffer . ,(buffer-name))
(handler . ,#'osm-bookmark-jump)))
+(defun osm--buffer-name ()
+ "Return default buffer name."
+ (format "*osm: %s*" (osm--server-property :name)))
+
+(cl-defun osm--setup (&key at server buffer)
+ "Setup BUFFER with SERVER at coordinates AT."
+ ;; Server not found
+ (when (and server (not (assq server osm-server-list))) (setq server nil))
+ (with-current-buffer
+ (if (derived-mode-p #'osm-mode)
+ (current-buffer)
+ (generate-new-buffer
+ (or buffer
+ (let ((osm-server (or server osm-server)))
+ (osm--buffer-name)))))
+ (let ((auto-rename
+ (string-match-p
+ (format "\\`%s\\(?:<[0-9]+>\\)?\\'" (regexp-quote
(osm--buffer-name)))
+ (buffer-name))))
+ (unless (derived-mode-p #'osm-mode)
+ (osm-mode))
+ (when (and server (not (eq osm-server server)))
+ (setq osm-server server
+ osm--active nil
+ osm--queue nil))
+ (when auto-rename
+ (setq buffer (or buffer (osm--buffer-name)))
+ (unless (equal buffer (buffer-name))
+ (rename-buffer buffer 'unique)))
+ (when (or (not (and osm--x osm--y)) at)
+ (osm--set-coordinates (or at (osm--home-coordinates))))
+ (osm--update)
+ (pop-to-buffer (current-buffer)))))
+
;;;###autoload
-(defun osm-goto (lat lon zoom &optional name)
- "Goto LAT/LON/ZOOM in buffer NAME."
+(defun osm-goto (lat lon zoom)
+ "Go to LAT/LON/ZOOM."
(interactive
- (pcase-let ((`(,lat ,lon ,zoom) (mapcar #'string-to-number (split-string
(read-string "Lat Lon (Zoom): ") nil t))))
+ (pcase-let ((`(,lat ,lon ,zoom)
+ (mapcar #'string-to-number
+ (split-string (read-string "Lat Lon (Zoom): ") nil
t))))
(setq zoom (or zoom 11))
(unless (and (numberp lat) (numberp lon) (numberp zoom))
(error "Invalid coordindate"))
(list lat lon zoom)))
- (with-current-buffer
- (if (and (not name) (derived-mode-p #'osm-mode))
- (current-buffer)
- (generate-new-buffer (or name (osm--buffer-name))))
- (unless (derived-mode-p #'osm-mode)
- (osm-mode))
- (setq osm--zoom zoom)
- (osm--set-lat-lon lat lon)
- (if (get-buffer-window)
- (osm--update)
- (pop-to-buffer (current-buffer)))))
-
-(defun osm--buffer-name ()
- "Return buffer name."
- (format "*osm: %s*" (osm--server-property :name)))
+ (osm--setup :at (list lat lon zoom)))
;;;###autoload
(defun osm-bookmark-jump (bm)
"Jump to OSM bookmark BM."
- (osm-goto
- (alist-get 'lat bm)
- (alist-get 'lon bm)
- (alist-get 'zoom bm)
- (unless (derived-mode-p #'osm-mode)
- (alist-get 'name bm))))
+ (osm--setup
+ :at (alist-get 'coordinate bm)
+ :server (alist-get 'server bm)
+ :buffer (alist-get 'buffer bm)))
(defun osm--bookmark-name ()
"Return bookmark name for current map."
@@ -595,7 +619,9 @@ We need two distinct images which are not `eq' for the
display properties.")
(defun osm--link-data ()
"Return link data."
- (list (osm--lat) (osm--lon) osm--zoom (osm--description)))
+ (list (osm--lat) (osm--lon) osm--zoom
+ (and (not (eq osm-server (default-value 'osm-server))) osm-server)
+ (osm--description)))
(defun osm--description ()
"Return descriptive string for current map."
@@ -667,20 +693,7 @@ We need two distinct images which are not `eq' for the
display properties.")
(or (osm--server-property :description) "")))))
(list (or (cdr (assoc selected servers))
(error "No server selected")))))
- (with-current-buffer
- (if (derived-mode-p #'osm-mode)
- (current-buffer)
- (osm-home))
- (unless (eq osm-server server)
- (let ((rename (string-match-p
- (format "\\`\\*osm: %s\\*\\(?:<[0-9]+>\\)?\\'"
- (regexp-quote (osm--server-property :name)))
- (buffer-name))))
- (setq-local osm-server server
- osm--active nil
- osm--queue nil)
- (when rename (rename-buffer (osm--buffer-name) 'unique)))
- (osm--update))))
+ (osm--setup :server server))
(dolist (sym (list #'osm-up #'osm-down #'osm-left #'osm-right
#'osm-up-large #'osm-down-large #'osm-left-large
#'osm-right-large
- [elpa] externals/osm b30d48f7cb 12/77: Move code around, (continued)
- [elpa] externals/osm b30d48f7cb 12/77: Move code around, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 85aa864f25 14/77: Zoom with mouse click, ELPA Syncer, 2022/03/07
- [elpa] externals/osm b259afaed2 18/77: Add osm-server to switch the server, ELPA Syncer, 2022/03/07
- [elpa] externals/osm d490ac4013 08/77: Add French server, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 5d8959d9ad 64/77: Improve keybindings, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 640c885460 48/77: README: Add example configuration, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 548dc8c47c 25/77: Minor cleanup, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 0edc1c77db 13/77: Overwrite more settings, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 21e59942a9 15/77: Handle mouse drag event, ELPA Syncer, 2022/03/07
- [elpa] externals/osm e8ed76566a 11/77: Rename settings, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 5815de2a73 29/77: Store server as part in bookmark and Org link,
ELPA Syncer <=
- [elpa] externals/osm e7f38427ca 05/77: Document all variables, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 42b9222e93 06/77: Make download slightly more robust, ELPA Syncer, 2022/03/07
- [elpa] externals/osm ad12c93f57 01/77: Initial commit, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 7a1d920492 59/77: Display bookmarks in map, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 25d891088f 70/77: Emacs 27 base64 encoding fallback, ELPA Syncer, 2022/03/07
- [elpa] externals/osm ec97b1d1c0 23/77: Add separate hook function, ELPA Syncer, 2022/03/07
- [elpa] externals/osm ee64b96509 56/77: Add map variant, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 1bd4751bcf 34/77: Better link names, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 7a50000e1e 58/77: Add separate resize function, revert tile cache, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 4c9337bf79 69/77: Update README, ELPA Syncer, 2022/03/07