]> git.eshelyaron.com Git - emacs.git/commitdiff
Make file-name-split returns driver name as well in Windows
authorKien Nguyen <kien.n.quang@gmail.com>
Wed, 6 Apr 2022 09:58:02 +0000 (11:58 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 6 Apr 2022 09:58:02 +0000 (11:58 +0200)
* lisp/files.el (file-name-split): Returns driver name as well in
Windows.
* lisp/net/browse-url.el (browse-url-file-url): Don't hexify colon
character in file path for Windows (bug#54721).

lisp/files.el
lisp/net/browse-url.el

index a0bc5bf26267caa323b06a8d49427ab46c11d300..2aa6c9dedc682a06e960c9e19a71e3e41564c510 100644 (file)
@@ -5091,7 +5091,11 @@ On most systems, this will be true:
         ;; If there's nothing left to peel off, we're at the root and
         ;; we can stop.
         (when (and dir (equal dir filename))
-          (push "" components)
+          (push (if (equal dir "") ""
+                  ;; On Windows, the first component might be "c:" or
+                  ;; the like.
+                  (substring dir 0 -1))
+                components)
           (setq filename nil))))
     components))
 
index 4c348781a8cb7f7fcef33bdd99d22f8a333ec131..66898d77073c8658cd5c570378efb52c6c719348 100644 (file)
@@ -728,9 +728,18 @@ Use variable `browse-url-filename-alist' to map filenames to URLs."
                      browse-url-filename-alist))
       (setq file (browse-url-url-encode-chars file "[*\"()',=;?% ]"))
     ;; Encode all other file names properly.
-    (setq file (mapconcat #'url-hexify-string
-                          (file-name-split file)
-                          "/")))
+    (let ((bits (file-name-split file)))
+      (setq file
+            (string-join
+             ;; On Windows, the first bit here might be "c:" or the
+             ;; like, so don't encode the ":" in the first bit.
+             (cons (let ((url-unreserved-chars
+                          (if (file-name-absolute-p file)
+                              (cons ?: url-unreserved-chars)
+                            url-unreserved-chars)))
+                     (url-hexify-string (car bits)))
+                   (mapcar #'url-hexify-string (cdr bits)))
+             "/"))))
   (dolist (map browse-url-filename-alist)
     (when (and map (string-match (car map) file))
       (setq file (replace-match (cdr map) t nil file))))