unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Manuel Uberti <manuel.uberti@inventati.org>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: project-find-file: switch to include non-tracked files
Date: Wed, 6 Oct 2021 09:05:29 +0300	[thread overview]
Message-ID: <9995e361-34f1-9aa6-f854-eb197723a8fd@yandex.ru> (raw)
In-Reply-To: <bb6764f4-032e-934d-330e-2c08c761d504@inventati.org>

[-- Attachment #1: Type: text/plain, Size: 1543 bytes --]

On 06.10.2021 08:18, Manuel Uberti wrote:
> On 05/10/21 21:47, Dmitry Gutov wrote:
>> It kind of got lost among other issues, sorry. That's doubly easy to 
>> do with emacs-devel threads, so if you could use Debbugs for feature 
>> requests in the future, that would be great.
> 
> Do you want me to move the discussion on Debbugs?

No, it's fine here now.

> I think ignoring directories such as .git would be good to speed up the 
> command and make the candidate list cleaner.

OK, see the updated patch.

find's performance is really sensitive to the number of ignore entries 
it has to process, so if the difference in performance between two 
invocation types gets too noticeable, while they return approximately 
the same number of entries, customizing vc-directory-exclusion-list to 
have fewer entries can help.

>> But in the previous iteration of this thread you also referred to 
>> Helm's 'C-c i' behavior. Does it only list the ignored files?
> 
> 'C-c i' in helm-ls-git toggles the '-o' switch for git ls-files, so it 
> does not include the listing of the .git directory in its result.

All right, this does seem to include all files, not just the ignored ones.

>> In any case, we could make 'C-u project-find-file' have this behavior: 
>> listing only ignored files instead. And maybe not all of them: 
>> skipping the contents of .git/, .bzr/, etc, still sounds useful. The 
>> upside is possibly having a lot fewer files to choose from.
> 
> I agree with you.

Which of the two behaviors would you like it to have, though?

[-- Attachment #2: project-find-file-no-ignores.diff --]
[-- Type: text/x-patch, Size: 2844 bytes --]

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 3eaa789b3e..65ae43ff4c 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -835,28 +835,28 @@ project--read-regexp
                  project-regexp-history-variable)))
 
 ;;;###autoload
-(defun project-find-file ()
+(defun project-find-file (&optional no-ignores)
   "Visit a file (with completion) in the current project.
 
 The filename at point (determined by `thing-at-point'), if any,
 is available as part of \"future history\"."
-  (interactive)
+  (interactive "P")
   (let* ((pr (project-current t))
          (dirs (list (project-root pr))))
-    (project-find-file-in (thing-at-point 'filename) dirs pr)))
+    (project-find-file-in (thing-at-point 'filename) dirs pr no-ignores)))
 
 ;;;###autoload
-(defun project-or-external-find-file ()
+(defun project-or-external-find-file (&optional no-ignores)
   "Visit a file (with completion) in the current project or external roots.
 
 The filename at point (determined by `thing-at-point'), if any,
 is available as part of \"future history\"."
-  (interactive)
+  (interactive "P")
   (let* ((pr (project-current t))
          (dirs (cons
                 (project-root pr)
                 (project-external-roots pr))))
-    (project-find-file-in (thing-at-point 'filename) dirs pr)))
+    (project-find-file-in (thing-at-point 'filename) dirs pr no-ignores)))
 
 (defcustom project-read-file-name-function #'project--read-file-cpd-relative
   "Function to call to read a file name from a list.
@@ -909,12 +909,24 @@ project--read-file-absolute
                                    predicate
                                    hist mb-default))
 
-(defun project-find-file-in (suggested-filename dirs project)
+(defun project-find-file-in (suggested-filename dirs project &optional no-ignores)
   "Complete a file name in DIRS in PROJECT and visit the result.
 
 SUGGESTED-FILENAME is a relative file name, or part of it, which
-is used as part of \"future history\"."
-  (let* ((all-files (project-files project dirs))
+is used as part of \"future history\".
+
+If NO-IGNORES is specified, include all files from DIRS, except
+for VCS metadata directories enumerated in `vc-directory-exclusion-list'."
+  (let* ((vc-dirs-ignores (mapcar
+                           (lambda (dir)
+                             (concat dir "/"))
+                           vc-directory-exclusion-list))
+         (all-files
+          (if no-ignores
+              (mapcan
+               (lambda (dir) (project--files-in-directory dir vc-dirs-ignores))
+               dirs)
+            (project-files project dirs)))
          (completion-ignore-case read-file-name-completion-ignore-case)
          (file (funcall project-read-file-name-function
                         "Find file" all-files nil nil

  reply	other threads:[~2021-10-06  6:05 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-04  8:33 project-find-file: switch to include non-tracked files Manuel Uberti
2021-10-04 11:24 ` Philip Kaludercic
2021-10-04 13:44   ` Stefan Kangas
2021-10-04 13:50     ` Manuel Uberti
2021-10-04 14:06       ` Stefan Kangas
2021-10-05 19:28         ` Dmitry Gutov
2021-10-05 19:47 ` Dmitry Gutov
2021-10-06  5:18   ` Manuel Uberti
2021-10-06  6:05     ` Dmitry Gutov [this message]
2021-10-06  6:12       ` Manuel Uberti
2021-10-14  0:47         ` Dmitry Gutov
2021-10-14  6:37           ` Manuel Uberti
2021-10-14 12:01             ` Dmitry Gutov
2021-10-14 12:06               ` Manuel Uberti
2021-10-14 21:55                 ` Dmitry Gutov
2021-10-15  5:24                   ` Manuel Uberti
2021-10-15 12:12                     ` Dmitry Gutov
2021-10-15 13:05                       ` Manuel Uberti
2021-10-15 13:25                         ` Dmitry Gutov
  -- strict thread matches above, loose matches on Subject: below --
2021-05-04 13:39 Manuel Uberti
2021-05-04 14:04 ` Stefan Kangas
2021-05-04 14:16 ` Dmitry Gutov
2021-05-04 14:55   ` Manuel Uberti
2021-05-04 16:43     ` Dmitry Gutov
2021-05-04 16:57       ` Manuel Uberti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9995e361-34f1-9aa6-f854-eb197723a8fd@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=manuel.uberti@inventati.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).