branch: externals/osm
commit 95e0abc750ed7a4e1c5b0a48aed2d0cac2a6a7de
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>

    Add support for osm.org urls
---
 osm.el | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/osm.el b/osm.el
index 3097325ecd..eca08147e0 100644
--- a/osm.el
+++ b/osm.el
@@ -1421,10 +1421,11 @@ Print NAME if not QUIET."
 
 ;;;###autoload
 (defun osm-url (url &rest _)
-  "Go to Geo or Google Maps URL.
+  "Go to standard Geo, OpenStreetMap or Google Maps URL.
 See also `osm-save-url'."
   (interactive "sGeo URL: ")
   (cond
+   ;; Standard Geo URL
    ((string-match
      
"\\`geo:\\([0-9.-]+\\),\\([0-9.-]+\\)\\(?:,[0-9.-]+\\)?\\(;.+\\'\\|\\'\\)" url)
     (let* ((lat (string-to-number (match-string 1 url)))
@@ -1436,12 +1437,20 @@ See also `osm-save-url'."
                  (and zoom (string-to-number zoom))
                  (and server (intern-soft server))
                  'osm-selected "Geo Link")))
+   ;; Google Maps
    ((string-match "goo.*@\\([0-9.-]+\\),\\([0-9.-]+\\),\\([0-9]+\\)" url)
     (let ((lat (string-to-number (match-string 1 url)))
           (lon (string-to-number (match-string 2 url)))
           (zoom (string-to-number (match-string 3 url))))
       (osm--goto lat lon zoom nil 'osm-selected "Geo Link")))
-   ((string-match-p "\\`https?://.*\\(goo.*maps\\|maps.*goo\\)" url)
+   ;; OpenStreetMap.org
+   ((string-match "map=\\([0-9]+\\)/\\([0-9.-]+\\)/\\([0-9.-]+\\)" url)
+    (let ((lat (string-to-number (match-string 2 url)))
+          (lon (string-to-number (match-string 3 url)))
+          (zoom (string-to-number (match-string 1 url))))
+      (osm--goto lat lon zoom nil 'osm-selected "Geo Link")))
+   ;; Short URLs
+   ((string-match-p 
"\\`https?://.*\\(openstreetmap\\|osm\\|goo.*maps\\|maps.*goo\\)" url)
     (osm-url (string-remove-prefix "http" (osm--get-redirect url))))
    (t
     (user-error "Invalid URL"))))
@@ -1650,11 +1659,11 @@ When called interactively, call the function 
`osm-home'."
     (let* ((default-process-coding-system '(utf-8-unix . utf-8-unix))
            (status (apply #'call-process "curl" nil (current-buffer) nil
                           `(,@(split-string-and-unquote osm-curl-options)
-                            "-I" "--no-location" ,url))))
+                            "-I" ,url))))
       (unless (eq status 0)
         (error "Fetching %s exited with status %s" url status)))
-    (goto-char (point-min))
-    (if (re-search-forward "location: \\([^\n]+\\)" nil t)
+    (goto-char (point-max))
+    (if (re-search-backward "^location: \\([^\n]+\\)" nil t)
         (match-string 1)
       (error "Invalid redirect %s" url))))
 
@@ -1874,6 +1883,7 @@ The properties are checked as keyword arguments.  See
 ;;;###autoload
 (progn
   (add-to-list 'browse-url-default-handlers '("\\`geo:" . osm-url))
+  (add-to-list 'browse-url-default-handlers 
'("\\`https?://\\(osm\\.org\\|\\(www\\.\\)?openstreetmap\\.org\\)/\\(go/\\|/\\?#map)"
 . osm-url))
   (add-to-list 'browse-url-default-handlers 
'("\\`https?://.*\\(goo.*maps\\|maps.*goo\\)" . osm-url)))
 
 ;;;###autoload

Reply via email to