Don't have ffap interpret ":/bin" as the current directory

* lisp/ffap.el (ffap-file-at-point): Don't interpret :/bin as the
current directory (bug#52441).
This commit is contained in:
Lars Ingebrigtsen 2022-01-14 10:29:43 +01:00
parent 19566fb51a
commit f729c333c7
2 changed files with 22 additions and 4 deletions

View 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))

View 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