]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't have ffap interpret ":/bin" as the current directory
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 14 Jan 2022 09:29:43 +0000 (10:29 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 14 Jan 2022 09:51:15 +0000 (10:51 +0100)
* lisp/ffap.el (ffap-file-at-point): Don't interpret :/bin as the
current directory (bug#52441).

lisp/ffap.el
test/lisp/ffap-tests.el

index f9220817a7182147c57eb8aecde1b48041bf8525..b5d2a02cd1d20a6672ca8a497822f53ee247bc10 100644 (file)
@@ -1449,10 +1449,13 @@ which may actually result in an URL rather than a filename."
               (ffap-file-exists-string (substring name 0 (match-beginning 0)))))
         ;; If it contains a colon, get rid of it (and return if exists)
         ((and (string-match path-separator name)
-              (setq name (ffap-string-at-point 'nocolon))
-              (> (length name) 0)
-              (ffap-file-exists-string name)))
-        ;; File does not exist, try the alist:
+              (let ((this-name (ffap-string-at-point 'nocolon)))
+                 ;; But don't interpret the first part if ":/bin" as
+                 ;; the empty string.
+                (when (> (length this-name) 0)
+                   (setq name this-name)
+                  (ffap-file-exists-string name)))))
+         ;; File does not exist, try the alist:
         ((let ((alist ffap-alist) tem try case-fold-search)
            (while (and alist (not try))
              (setq tem (car alist) alist (cdr alist))
index aebc9b6dbb93e65ac7a30e67aa3bf1e6901c4721..c5032a60a1a4dfa52753964c93d80f72f89e5b4a 100644 (file)
@@ -141,6 +141,21 @@ left alone when opening a URL in an external browser."
         (let (kill-buffer-query-functions)
           (kill-buffer (call-interactively #'find-file-at-point)))))))
 
+(ert-deftest ffap-test-path ()
+  (with-temp-buffer
+    (insert "/usr/bin:/bin")
+    (goto-char (point-min))
+    (should (equal (ffap-file-at-point) "/usr/bin")))
+  (with-temp-buffer
+    (insert "/usr/bin:/bin")
+    (goto-char (point-min))
+    (search-forward ":")
+    (should (equal (ffap-file-at-point) "/bin")))
+  (with-temp-buffer
+    (insert ":/bin")
+    (goto-char (point-min))
+    (should (equal (ffap-file-at-point) nil))))
+
 (provide 'ffap-tests)
 
 ;;; ffap-tests.el ends here