]> git.eshelyaron.com Git - emacs.git/commitdiff
Convert colon to hex in uri
authorTheodor Thornhill <theo@thornhill.no>
Sat, 6 Mar 2021 20:18:48 +0000 (21:18 +0100)
committerJoão Távora <joaotavora@gmail.com>
Sat, 6 Mar 2021 20:33:52 +0000 (20:33 +0000)
On windows, in the path portion of the URI, ':' must be hexified to
'%3A'.  In the URL scheme, the ':' stays.

* eglot.el (eglot--uri-path-allowed-chars): define what characters are
allowed in path portion of URI.

* eglot.el (eglot--path-to-uri): ensure colon in 'file://' stays, but
and others are hexified.

Co-authored-by: João Távora
GitHub-reference: fix https://github.com/joaotavora/eglot/issues/638

lisp/progmodes/eglot.el

index e0896c8501789739c1a8f2fada276b8ed7747174..d4300e186be815cfb477228016f896f7e82f6e42 100644 (file)
@@ -1190,13 +1190,19 @@ If optional MARKER, return a marker instead"
           (funcall eglot-move-to-column-function col)))
       (if marker (copy-marker (point-marker)) (point)))))
 
+(defconst eglot--uri-path-allowed-chars
+  (let ((vec (copy-sequence url-path-allowed-chars)))
+    (aset vec ?: nil) ;; see github#639
+    vec)
+  "Like `url-path-allows-chars' but more restrictive.")
+
 (defun eglot--path-to-uri (path)
   "URIfy PATH."
-  (url-hexify-string
-   (concat "file://" (if (eq system-type 'windows-nt) "/")
+  (concat "file://" (if (eq system-type 'windows-nt) "/")
+          (url-hexify-string
            ;; Again watch out for trampy paths.
-           (directory-file-name (file-local-name (file-truename path))))
-   url-path-allowed-chars))
+           (directory-file-name (file-local-name (file-truename path))) 
+           eglot--uri-path-allowed-chars)))
 
 (defun eglot--uri-to-path (uri)
   "Convert URI to file path, helped by `eglot--current-server'."