[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/osm 162f883f80 35/77: Reuse existing buffer
From: |
ELPA Syncer |
Subject: |
[elpa] externals/osm 162f883f80 35/77: Reuse existing buffer |
Date: |
Mon, 7 Mar 2022 08:58:06 -0500 (EST) |
branch: externals/osm
commit 162f883f809c184c058de75eb50018ca06c8493f
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Reuse existing buffer
---
osm.el | 62 +++++++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 21 deletions(-)
diff --git a/osm.el b/osm.el
index 78447e6e88..965b2ebd23 100644
--- a/osm.el
+++ b/osm.el
@@ -207,15 +207,15 @@ We need two distinct images which are not `eq' for the
display properties.")
(max (osm--server-property :min-zoom)
(min
(osm--server-property :max-zoom)
- (min (logb (/ w (abs (- (osm--lon-to-x lon1) (osm--lon-to-x lon2)))))
- (logb (/ h (abs (- (osm--lat-to-y lat1) (osm--lat-to-y
lat2))))))))))
+ (min (logb (/ w (abs (- (osm--lon-to-normalized-x lon1)
(osm--lon-to-normalized-x lon2)))))
+ (logb (/ h (abs (- (osm--lat-to-normalized-y lat1)
(osm--lat-to-normalized-y lat2))))))))))
-(defun osm--lon-to-x (lon)
- "Convert LON to x coordinate (unscaled)."
+(defun osm--lon-to-normalized-x (lon)
+ "Convert LON to normalized x coordinate."
(/ (+ lon 180.0) 360.0))
-(defun osm--lat-to-y (lat)
- "Convert LAT to y coordiate (unscaled)."
+(defun osm--lat-to-normalized-y (lat)
+ "Convert LAT to normalized y coordinate."
(setq lat (* lat (/ float-pi 180.0)))
(- 0.5 (/ (log (+ (tan lat) (/ 1 (cos lat)))) float-pi 2)))
@@ -228,12 +228,13 @@ 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--lon-to-x (lon zoom)
+ "Convert LON/ZOOM to x coordinate in pixel."
+ (floor (* 256 (expt 2.0 zoom) (osm--lon-to-normalized-x lon))))
+
+(defun osm--lat-to-y (lat zoom)
+ "Convert LAT/ZOOM to y coordinate in pixel."
+ (floor (* 256 (expt 2.0 zoom) (osm--lat-to-normalized-y lat))))
(defun osm--home-coordinates ()
"Return home coordinate triple."
@@ -489,12 +490,12 @@ We need two distinct images which are not `eq' for the
display properties.")
(defun osm--revert (&rest _)
"Revert buffer."
- (when (derived-mode-p #'osm-mode)
+ (when (eq major-mode #'osm-mode)
(osm--update)))
(defun osm--update ()
"Update map display."
- (unless (derived-mode-p #'osm-mode)
+ (unless (eq major-mode #'osm-mode)
(error "Not an osm-mode buffer"))
(with-silent-modifications
(let* ((size (expt 2 osm--zoom))
@@ -593,14 +594,30 @@ We need two distinct images which are not `eq' for the
display properties.")
;; Server not found
(when (and server (not (assq server osm-server-list))) (setq server nil))
(with-current-buffer
- (if (derived-mode-p #'osm-mode)
+ (if (eq major-mode #'osm-mode)
(current-buffer)
- (generate-new-buffer
- (or name
- (let ((osm-server (or server osm-server)))
- (osm--default-buffer-name)))))
+ (pcase-let* ((def-name (or name
+ (let ((osm-server (or server osm-server)))
+ (osm--default-buffer-name))))
+ (`(,def-lat ,def-lon ,def-zoom) (or at
(osm--home-coordinates)))
+ (def-x (osm--lon-to-x def-lon def-zoom))
+ (def-y (osm--lat-to-y def-lat def-zoom))
+ (def-server (or server osm-server))
+ (def-name-regexp (format "\\`%s\\(?:<[0-9]+>\\)?\\'"
+ (regexp-quote def-name))))
+ (or (cl-loop
+ ;; Search for existing buffer
+ for buf in (buffer-list) thereis
+ (and (eq (buffer-local-value 'major-mode buf) #'osm-mode)
+ (eq (buffer-local-value 'osm-server buf) def-server)
+ (eq (buffer-local-value 'osm--zoom buf) def-zoom)
+ (eq (buffer-local-value 'osm--x buf) def-x)
+ (eq (buffer-local-value 'osm--y buf) def-y)
+ (string-match-p def-name-regexp (buffer-name buf))
+ buf))
+ (generate-new-buffer def-name))))
(let ((auto-rename (or name (osm--generated-name-p))))
- (unless (derived-mode-p #'osm-mode)
+ (unless (eq major-mode #'osm-mode)
(osm-mode))
(when (and server (not (eq osm-server server)))
(setq osm-server server
@@ -611,7 +628,10 @@ We need two distinct images which are not `eq' for the
display properties.")
(unless (equal name (buffer-name))
(rename-buffer name 'unique)))
(when (or (not (and osm--x osm--y)) at)
- (osm--set-coordinates (or at (osm--home-coordinates))))
+ (setq at (or at (osm--home-coordinates))
+ osm--zoom (nth 2 at)
+ osm--x (osm--lon-to-x (nth 1 at) osm--zoom)
+ osm--y (osm--lat-to-y (nth 0 at) osm--zoom)))
(prog1 (pop-to-buffer (current-buffer))
(osm--update)))))
- [elpa] externals/osm 699aae27b1 20/77: Rename osm-new to osm-home, (continued)
- [elpa] externals/osm 699aae27b1 20/77: Rename osm-new to osm-home, ELPA Syncer, 2022/03/07
- [elpa] externals/osm d830691585 61/77: README: Remove wishlist, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 25621bb80e 41/77: curl add --fail argument, ELPA Syncer, 2022/03/07
- [elpa] externals/osm b300e42d9f 68/77: Add transient pin, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 28d3305bef 32/77: Improve handling of generated names, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 833793ed6c 77/77: Use grid placeholder, ELPA Syncer, 2022/03/07
- [elpa] externals/osm adc8156a70 37/77: README: Add more examples, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 7ac6f60b90 39/77: README update, ELPA Syncer, 2022/03/07
- [elpa] externals/osm ff5c089087 52/77: Update completion predicates, ELPA Syncer, 2022/03/07
- [elpa] externals/osm d5c5dc6ffd 75/77: Mouse dragging: Check window, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 162f883f80 35/77: Reuse existing buffer,
ELPA Syncer <=
- [elpa] externals/osm 9053d8a930 16/77: Indentation, ELPA Syncer, 2022/03/07
- [elpa] externals/osm f2fba2ebdf 43/77: Auto rename the buffers, ELPA Syncer, 2022/03/07
- [elpa] externals/osm b991de6e89 54/77: Rename server, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 03d4ceb553 57/77: Add tile memory cache, ELPA Syncer, 2022/03/07
- [elpa] externals/osm f6c16a4cc4 63/77: Improve keybindings, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 2a0bd8c7eb 50/77: Improve header line, ELPA Syncer, 2022/03/07
- [elpa] externals/osm e546671a0e 38/77: Minor cleanup, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 7657cb1b3b 71/77: Add check for image format support, ELPA Syncer, 2022/03/07
- [elpa] externals/osm e78a337477 44/77: Rename commands, ELPA Syncer, 2022/03/07
- [elpa] externals/osm 1b7f4020b3 73/77: Fix caching, ELPA Syncer, 2022/03/07