From: Lars Ingebrigtsen Date: Fri, 14 Jan 2022 09:29:43 +0000 (+0100) Subject: Don't have ffap interpret ":/bin" as the current directory X-Git-Tag: emacs-29.0.90~3056 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f729c333c7ae6d159e4af510b21e0fd031786bd1;p=emacs.git 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). --- diff --git a/lisp/ffap.el b/lisp/ffap.el index f9220817a71..b5d2a02cd1d 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -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)) diff --git a/test/lisp/ffap-tests.el b/test/lisp/ffap-tests.el index aebc9b6dbb9..c5032a60a1a 100644 --- a/test/lisp/ffap-tests.el +++ b/test/lisp/ffap-tests.el @@ -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