emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/osm b259afaed2 18/77: Add osm-server to switch the serv


From: ELPA Syncer
Subject: [elpa] externals/osm b259afaed2 18/77: Add osm-server to switch the server
Date: Mon, 7 Mar 2022 08:58:05 -0500 (EST)

branch: externals/osm
commit b259afaed2b5541e1b6195db223068e3e2e7d4c1
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Add osm-server to switch the server
---
 README.org |  3 +++
 osm.el     | 81 +++++++++++++++++++++++++++++++++++++++++++-------------------
 2 files changed, 59 insertions(+), 25 deletions(-)

diff --git a/README.org b/README.org
index 5d0d3de2c8..68bab80c9e 100644
--- a/README.org
+++ b/README.org
@@ -21,6 +21,7 @@
 - Search for location by name
 - Org link support (Example: [[osm:44,10,6][Toscana, Italia 44° 10°]])
 - Bookmarks
+- Multiple preconfigured servers
 
 * Commands and Key Bindings
 
@@ -28,6 +29,7 @@ Commands:
 - =osm-new=: Open new map at home coordinates
 - =osm-search=: Search and jump to location
 - =osm-goto=: Go to coordinates
+- =osm-server=: Select server
 
 Key bindings:
 - ~+~ and ~-~: Zooming
@@ -35,6 +37,7 @@ Key bindings:
 - ~C-<arrow>~, ~M-<arrow>~: Large step scrolling
 - ~g~: =osm-goto=
 - ~s~: =osm-search=
+- ~S~: =osm-server=
 - ~b~: =bookmark-set=
 - ~B~: =bookmark-jump=
 - ~q~: =quit-window=
diff --git a/osm.el b/osm.el
index f1149fe823..e5a6c14e8f 100644
--- a/osm.el
+++ b/osm.el
@@ -39,31 +39,31 @@
   :prefix "osm-")
 
 (defcustom osm-server-list
-  '((openstreetmap-org
+  '((default
      :name "OpenStreetMap"
      :min-zoom 2 :max-zoom 19 :max-connections 2
      :url ("https://a.tile.openstreetmap.org/%s/%s/%s.png";
            "https://b.tile.openstreetmap.org/%s/%s/%s.png";
            "https://c.tile.openstreetmap.org/%s/%s/%s.png";))
-    (openstreetmap-de
+    (de
      :name "OSM Deutschland"
      :min-zoom 2 :max-zoom 19 :max-connections 2
      :url ("https://a.tile.openstreetmap.de/%s/%s/%s.png";
            "https://b.tile.openstreetmap.de/%s/%s/%s.png";
            "https://c.tile.openstreetmap.de/%s/%s/%s.png";))
-    (openstreetmap-fr
+    (fr
      :name "OSM France"
      :min-zoom 2 :max-zoom 19 :max-connections 2
      :url ("https://a.tile.openstreetmap.fr/osmfr/%s/%s/%s.png";
            "https://b.tile.openstreetmap.fr/osmfr/%s/%s/%s.png";
            "https://c.tile.openstreetmap.fr/osmfr/%s/%s/%s.png";))
-    (openstreetmap-humanitarian
+    (humanitarian
      :name "OSM Humanitarian"
      :min-zoom 2 :max-zoom 19 :max-connections 2
      :url ("https://a.tile.openstreetmap.fr/hot/%s/%s/%s.png";
            "https://b.tile.openstreetmap.fr/hot/%s/%s/%s.png";
            "https://c.tile.openstreetmap.fr/hot/%s/%s/%s.png";))
-    (opentopomap-org
+    (opentopomap
      :name "OpenTopoMap"
      :min-zoom 2 :max-zoom 17 :max-connections 2
      :url ("https://a.tile.opentopomap.org/%s/%s/%s.png";
@@ -108,10 +108,6 @@
   "List of tile servers."
   :type '(alist :key-type symbol :value-type plist))
 
-(defcustom osm-buffer-name "*osm*"
-  "Default buffer name."
-  :type 'string)
-
 (defcustom osm-large-step 256
   "Movement step in pixel."
   :type 'integer)
@@ -120,7 +116,7 @@
   "Movement step in pixel."
   :type 'integer)
 
-(defcustom osm-server 'openstreetmap-org
+(defcustom osm-server 'default
   "Tile server name."
   :type 'symbol)
 
@@ -155,6 +151,7 @@ Should be at least 7 days according to the server usage 
policies."
     (define-key map "c" #'clone-buffer)
     (define-key map "g" #'osm-goto)
     (define-key map "s" #'osm-search)
+    (define-key map "S" #'osm-server)
     (define-key map "b" #'bookmark-set)
     (define-key map "B" #'bookmark-jump)
     (define-key map [remap scroll-down-command] #'osm-down)
@@ -266,10 +263,13 @@ We need two distinct images which are not `eq' for the 
display properties.")
 
 (defun osm--cache-directory ()
   "Return tile cache directory."
-  (expand-file-name
-   (file-name-concat osm-cache-directory
-                     (symbol-name osm-server)
-                     "/")))
+  (let ((dir (expand-file-name
+              (file-name-concat osm-cache-directory
+                                (symbol-name osm-server)
+                                "/"))))
+    (unless (file-exists-p dir)
+      (make-directory dir t))
+    dir))
 
 (defun osm--enqueue (x y)
   "Enqueue tile X/Y for download."
@@ -406,9 +406,11 @@ We need two distinct images which are not `eq' for the 
display properties.")
     (run-with-idle-timer
      30 nil
      (lambda ()
-       (dolist (file (directory-files-recursively
-                      osm-cache-directory
-                      "\\.\\(?:png\\|jpe?g\\)\\(?:\\.tmp\\)?\\'" nil))
+       (dolist (file
+                (ignore-errors
+                  (directory-files-recursively
+                   osm-cache-directory
+                   "\\.\\(?:png\\|jpe?g\\)\\(?:\\.tmp\\)?\\'" nil)))
          (when (> (float-time
                    (time-since
                     (file-attribute-modification-time
@@ -419,11 +421,9 @@ We need two distinct images which are not `eq' for the 
display properties.")
 (define-derived-mode osm-mode special-mode "Osm"
   "Open Street Map mode."
   :interactive nil
-  (let ((cache (osm--cache-directory)))
-    (unless (file-exists-p cache)
-      (make-directory cache t)))
   (osm--clean-cache)
-  (setq-local line-spacing nil
+  (setq-local osm-server osm-server
+              line-spacing nil
               cursor-type nil
               cursor-in-non-selected-windows nil
               left-fringe-width 1
@@ -562,8 +562,8 @@ The buffer is optionally assigned a UNIQUE name."
       (cond
        ((and (not name) (not unique) (derived-mode-p #'osm-mode))
         (current-buffer))
-       (unique (generate-new-buffer (or name osm-buffer-name)))
-       (t (get-buffer-create (or name osm-buffer-name))))
+       (unique (generate-new-buffer (or name (osm--buffer-name))))
+       (t (get-buffer-create (or name (osm--buffer-name)))))
     (unless (derived-mode-p #'osm-mode)
       (osm-mode))
     (setq osm--zoom zoom)
@@ -572,6 +572,10 @@ The buffer is optionally assigned a UNIQUE name."
         (osm--update)
       (pop-to-buffer (current-buffer)))))
 
+(defun osm--buffer-name ()
+  "Return buffer name."
+  (format "*osm: %s*" (osm--server-property :name)))
+
 ;;;###autoload
 (defun osm-bookmark-jump (bm)
   "Jump to OSM bookmark BM."
@@ -579,8 +583,7 @@ The buffer is optionally assigned a UNIQUE name."
    (alist-get 'lat bm)
    (alist-get 'lon bm)
    (alist-get 'zoom bm)
-   (and (not (derived-mode-p #'osm-mode))
-        (alist-get 'name bm))))
+   (alist-get 'name bm)))
 
 (defun osm--bookmark-name ()
   "Return bookmark name for current map."
@@ -642,6 +645,34 @@ The buffer is optionally assigned a UNIQUE name."
     (osm-goto (car selected) (cadr selected)
               (apply #'osm--boundingbox-to-zoom (cddr selected)))))
 
+;;;###autoload
+(defun osm-server (server)
+  "Select SERVER."
+  (interactive
+   (list
+    (let ((servers
+           (mapcar
+            (lambda (x)
+              (cons (plist-get (cdr x) :name) (car x)))
+            osm-server-list)))
+      (or (cdr (assoc (completing-read
+                       "Server: " servers nil t nil nil
+                       (osm--server-property :name))
+                      servers))
+          (error "No server selected")))))
+  (with-current-buffer
+      (if (derived-mode-p #'osm-mode)
+          (current-buffer)
+        (osm-new))
+    (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)
+        (when rename (rename-buffer (osm--buffer-name) 'unique)))
+      (osm--update))))
+
 (dolist (sym (list #'osm-up #'osm-down #'osm-left #'osm-right
                    #'osm-up-large #'osm-down-large #'osm-left-large 
#'osm-right-large
                    #'osm-smaller #'osm-larger))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]