From 521116073821c5259130c415640265cb25c03ef3 Mon Sep 17 00:00:00 2001 From: Spencer Baugh Date: Sat, 21 Oct 2023 14:35:53 -0400 Subject: [PATCH] Teach ffap to look for paths under the root of project Now file-name-at-point-functions, which runs ffap-guess-file-name-at-point, will pick up on a file name at point if that file name is a path starting from the root of the project. For example, in test/lisp/progmodes/eglot-tests.el there is the string lisp/progmodes/eglot.el; if you put point on that and C-x C-f, lisp/progmodes/eglot.el under the root of the Emacs repo will now be part of future history. * lisp/ffap.el (ffap-alist): Add entry for ffap-in-project. (ffap-in-project): Add. --- lisp/ffap.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/ffap.el b/lisp/ffap.el index 2c99f88d505..fe0aa16c22f 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -734,6 +734,7 @@ ffap-locate-file (defvar ffap-alist '( ("" . ffap-completable) ; completion, slow on some systems + ("" . ffap-in-project) ; maybe in the root of the project ("\\.info\\'" . ffap-info) ; gzip.info ("\\`info/" . ffap-info-2) ; info/emacs ("\\`[-[:lower:]]+\\'" . ffap-info-3) ; (emacs)Top [only in the parentheses] @@ -797,6 +798,10 @@ ffap-completable (cmp (file-name-completion (file-name-nondirectory name) dir))) (and cmp (concat dir cmp)))) +(defun ffap-in-project (name) + (when-let (project (project-current)) + (file-name-concat (project-root project) name))) + (defun ffap-home (name) (ffap-locate-file name t '("~"))) (defun ffap-info (name) -- 2.39.3