From: Dmitry Gutov <dgutov@yandex.ru>
To: Stephen Leake <stephen_leake@stephe-leake.org>, emacs-devel@gnu.org
Subject: Re: find-file-project
Date: Wed, 16 Sep 2015 07:41:30 +0300 [thread overview]
Message-ID: <55F8F2FA.6060902@yandex.ru> (raw)
In-Reply-To: <86lhc73wog.fsf@stephe-leake.org>
On 09/16/2015 05:49 AM, Stephen Leake wrote:
> Only code that needs flat paths uses them. As we discussed earlier, we
> can either compute the flat path, and do completion on it, or compute
> the flat path while doing completion.
If you absolutely need flat paths for completion here, just having the
function that do one-way conversion should suffice. There's no need for
project-flat-to-recursive-ignores, for instance.
> And as we also discussed earlier, for _some_ projects, flat paths _are_
> optimal.
That just means that the respective backends will store user settings in
a certain fashion. There's no need to add functional duplication to the
project API.
> What is the downside of a few dozen lines of code to support a few
> projects?
Implementation uncertainty and API complexity.
>> Why not just implement completion on file paths relative to the
>> project root?
>
> For Emacs elisp, there is no single root, except perhaps "/".
That's a decent argument. But then, when there are several roots, you
could uniquify just their names, and prepend them to file names.
Your way may be better, but I'm not too sure yet.
>> The user could input a base file name, if they like, and TAB would
>> expand it to one of the relative paths if it's unique, or allow them
>> to input a directory. You won't need any other uniquification then.
>
> That requires the user to know what directory the file is in, as
> find-file completion does now.
It doesn't - you complete using the files list you've collected during
the initial walk, and you match the typed file name against it. There's
no reason to require that the input matches the beginning of the string.
> Using a flat path avoids that. I find it quite useful to just type
> "locate", and immediately see that there are two choices, one of which I
> was unaware of.
On the other hand, if I understand it right, I can't type "test unit
foo", to see the unit test for foo.
> On the other hand, what you are describing is pretty much what
> find-file-project does. Have you tried it?
Not yet. I will, when you push it to the feature branch.
>> Maybe call it find-file-in-project?
>
> That does sound better.
Or just call the command project-find-file. It's inside project.el,
after all.
>>> The patch also adds small projects for elisp and global, to show that
>>> this approach works for multiple backends.
>>
>> I don't see the elisp backend.
>
> Oops; that got left out of the patch. This code is supposed to be in
> project.el:
I see, thanks.
> (defvar project-emacs
> (let ((cedet-root (file-name-directory (locate-file "cedet.el" load-path))))
> (project-elisp-make
> (project-recursive-ignores-to-flat
> (list
> (concat cedet-root "ede")
> (concat cedet-root "semantic")
> (concat cedet-root "srecode"))
> nil)
> )))
And this is ridiculous. Emacs obviously isn't a "flat" project. Just use
the current format.
> I've also implemented ede-find-file, which dispatches to the
> semantic-symref global backend. Next patch.
Is there a reason to keep the gtags backend, then?
> I've already tested it. I guess if you mean if I want others to test it.
Yes.
> I was hoping this patch would be enough.
It isn't. Sorry.
>> I don't think each implementation should do its own completing-read.
>> Rather, they should just return the completion table from a generic
>> method. E.g. (cl-defmethod project-file-completion-table ...).
>
> For the default find-file-in-project, that would require computing the
> flat path and the predicate on each use of the completion table.
Why? The generic function could just as well return
(completion-table-with-cache #'find-file-complete-global-table).
> Other
> instances might want to bind completion-ignore-case or
> completion-regexp-list.
completion-ignore-case is no business of theirs. Instead of
completion-regexp-list, they can use a completion table with predicate.
> More importantly, the result of the completion is treated differently; the
> default instance calls locate-file after rearranging the uniquification,
> while the global instance calls ceded-gnu-global-call.
Why? If we've identified the requested file, let's just open it.
> I don't follow; the completion does not need to be sorted. This code is
> dealing with the result of completion.
I see.
> A better way to accomplish this would be to somehow encode the full
> directory path in the completion result, but I didn't find a way to do
> that. In particular, text properties are not returned from completion.
This seems to be a good argument against using base file names, and in
favor of using full relative paths against project roots, combined with
abbreviated roots.
> It's on a par with the existing EDE "generic" projects for vc tools. And
> with the existing project-vc.
project-vc is an minimum-viable-product for those who don't bother
configuring anything else. There's no reason to have many of them.
> I don't follow; what file names are being shortened? On the contrary,
> they are being lengthened, with enough directory names to make them unique.
Either way, you're trying to same on typing during completion.
completion-at-point helps with that as well.
> I guess you are asking for some rationale. This code allows converting
> between the two equivalent representations of search paths;
> recursive/ignores and flat. As we have discussed before, there are cases
> where both of these conversions are useful.
Not really. You don't need the ability to convert from flat paths to
recursive if the project API consistently uses the "recursive" format.
All data is already in it.
next prev parent reply other threads:[~2015-09-16 4:41 UTC|newest]
Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-15 20:23 find-file-project Stephen Leake
2015-09-15 22:21 ` find-file-project Dmitry Gutov
2015-09-16 2:49 ` find-file-project Stephen Leake
2015-09-16 3:26 ` find-file-project Stephen Leake
2015-09-16 3:34 ` find-file-project Stephen Leake
2015-09-16 3:38 ` find-file-project Dmitry Gutov
2015-09-16 12:56 ` find-file-project Stephen Leake
2015-09-16 14:37 ` find-file-project Dmitry Gutov
2015-09-16 16:41 ` find-file-project Stephen Leake
2015-09-16 16:59 ` find-file-project Stephen Leake
2015-09-16 17:13 ` find-file-project Dmitry Gutov
2015-09-16 17:25 ` find-file-project Dmitry Gutov
2015-09-16 21:01 ` find-file-project Stephen Leake
2015-09-17 17:45 ` find-file-project Dmitry Gutov
2015-09-18 16:08 ` project.el semantics Stephen Leake
2015-09-19 0:17 ` Dmitry Gutov
2015-11-08 1:47 ` Dmitry Gutov
2015-11-08 7:11 ` Stephen Leake
2015-11-08 13:07 ` Dmitry Gutov
2015-11-08 20:11 ` Dmitry Gutov
2015-11-09 9:10 ` Stephen Leake
2015-11-09 13:27 ` Dmitry Gutov
2015-11-09 18:15 ` Stephen Leake
2015-11-10 1:32 ` Dmitry Gutov
2015-11-10 2:40 ` Dmitry Gutov
2015-11-10 17:36 ` Stephen Leake
2015-11-11 0:47 ` Dmitry Gutov
2015-11-11 10:27 ` Stephen Leake
2015-11-11 13:21 ` Dmitry Gutov
2015-11-11 16:48 ` John Wiegley
2015-11-11 17:03 ` Dmitry Gutov
2015-11-11 17:22 ` John Wiegley
2015-11-11 21:46 ` Dmitry Gutov
2015-11-11 22:30 ` John Wiegley
2015-11-12 2:21 ` Dmitry Gutov
2015-11-12 17:26 ` John Wiegley
2015-11-12 17:53 ` Dmitry Gutov
2015-11-12 18:04 ` Dmitry Gutov
2015-11-12 18:17 ` John Wiegley
2015-11-12 18:26 ` John Mastro
2015-11-12 23:37 ` Dmitry Gutov
2015-11-12 18:50 ` Dmitry Gutov
2015-11-11 22:41 ` Stephen Leake
2015-11-11 22:14 ` Stephen Leake
2015-11-11 23:26 ` Dmitry Gutov
2015-11-12 6:44 ` Stephen Leake
2015-11-12 11:32 ` Dmitry Gutov
2015-11-12 19:28 ` Stephen Leake
2015-11-12 22:04 ` Dmitry Gutov
2015-11-19 2:21 ` Dmitry Gutov
2015-11-20 18:40 ` John Wiegley
2015-11-21 10:03 ` Stephen Leake
2015-11-21 10:10 ` Stephen Leake
2015-11-22 5:18 ` John Wiegley
2015-11-22 5:36 ` Dmitry Gutov
2015-11-22 5:43 ` John Wiegley
2015-11-22 5:58 ` Dmitry Gutov
2015-11-22 16:55 ` John Wiegley
2015-11-22 17:13 ` Dmitry Gutov
2015-11-22 19:54 ` John Wiegley
2015-11-22 21:27 ` John Wiegley
2015-11-23 1:14 ` Dmitry Gutov
2015-11-23 22:04 ` Steinar Bang
2015-11-23 23:17 ` Dmitry Gutov
2015-11-23 7:43 ` Stephen Leake
2015-11-23 12:59 ` Dmitry Gutov
2015-12-16 4:06 ` Dmitry Gutov
2015-12-16 6:52 ` John Wiegley
2015-12-28 4:20 ` Dmitry Gutov
2015-11-22 22:04 ` Stephen Leake
2015-11-22 23:21 ` Dmitry Gutov
2015-11-23 2:06 ` Richard Stallman
2015-11-22 5:32 ` Dmitry Gutov
2015-11-09 22:16 ` John Wiegley
2015-11-10 0:58 ` Dmitry Gutov
2015-11-10 1:07 ` John Wiegley
2015-11-10 1:18 ` Dmitry Gutov
2015-11-10 1:40 ` John Wiegley
2015-11-10 3:23 ` Dmitry Gutov
2015-11-10 6:00 ` John Wiegley
2015-11-10 10:54 ` Dmitry Gutov
2015-11-10 14:21 ` John Wiegley
2015-11-10 23:41 ` Stephen Leake
2015-11-11 0:56 ` Dmitry Gutov
2015-11-11 1:17 ` John Wiegley
2015-11-11 1:31 ` Dmitry Gutov
2015-11-11 9:55 ` Stephen Leake
2015-11-11 13:30 ` Dmitry Gutov
2015-11-12 8:46 ` Steinar Bang
2015-11-12 19:35 ` Stephen Leake
2015-11-11 9:44 ` Stephen Leake
2015-11-11 13:39 ` Dmitry Gutov
2015-11-10 17:38 ` Stephen Leake
2015-11-10 19:47 ` Dmitry Gutov
2015-09-16 4:41 ` Dmitry Gutov [this message]
2015-09-16 13:04 ` find-file-project Stefan Monnier
2015-09-16 17:01 ` find-file-project Stephen Leake
2015-09-16 13:31 ` find-file-project Stephen Leake
2015-09-16 14:13 ` find-file-project Stephen Leake
2015-09-16 15:05 ` find-file-project Dmitry Gutov
2015-09-16 16:58 ` find-file-project Stephen Leake
2015-09-17 17:15 ` find-file-project Dmitry Gutov
2015-09-18 17:14 ` project.el semantics Stephen Leake
2015-09-19 0:08 ` Dmitry Gutov
2015-09-19 12:07 ` Stephen Leake
2015-09-19 12:40 ` Dmitry Gutov
2015-09-16 17:04 ` find-file-project Dmitry Gutov
2015-09-16 21:11 ` find-file-project Stephen Leake
2015-09-17 17:52 ` find-file-project Dmitry Gutov
2015-09-17 1:26 ` find-file-project Stefan Monnier
2015-09-17 18:09 ` find-file-project Dmitry Gutov
2015-09-18 17:07 ` find-file-project Stefan Monnier
2015-09-18 23:41 ` find-file-project Dmitry Gutov
2015-09-19 4:13 ` find-file-project Stefan Monnier
2016-01-06 1:29 ` find-file-project Dmitry Gutov
2016-01-07 4:52 ` find-file-project Stefan Monnier
2016-01-07 17:09 ` find-file-project Dmitry Gutov
2016-01-07 7:12 ` find-file-project Stephen Leake
2016-01-07 17:55 ` find-file-project Dmitry Gutov
2016-01-07 18:26 ` find-file-project Dmitry Gutov
2016-01-07 19:58 ` find-file-project Stephen Leake
2016-01-07 21:12 ` find-file-project Dmitry Gutov
2016-01-08 19:11 ` find-file-project Stephen Leake
2016-01-08 23:49 ` find-file-project Dmitry Gutov
2016-01-09 12:18 ` find-file-project Stephen Leake
2016-01-09 17:11 ` find-file-project Dmitry Gutov
2016-01-08 1:26 ` find-file-project John Wiegley
2016-01-08 1:38 ` find-file-project Dmitry Gutov
2016-01-08 2:19 ` find-file-project Richard Copley
2016-01-08 11:34 ` find-file-project Dmitry Gutov
2016-01-08 7:39 ` find-file-project Stefan Monnier
2016-01-19 6:15 ` find-file-project Dmitry Gutov
2016-01-19 14:20 ` find-file-project Stefan Monnier
2016-01-20 0:51 ` find-file-project Dmitry Gutov
2016-01-20 1:32 ` find-file-project Stefan Monnier
2016-01-20 1:47 ` find-file-project Dmitry Gutov
2016-01-20 2:25 ` find-file-project Stefan Monnier
2016-01-20 15:40 ` find-file-project Dmitry Gutov
2016-01-20 21:58 ` find-file-project Stefan Monnier
2016-01-20 22:12 ` find-file-project Dmitry Gutov
2016-01-20 22:17 ` find-file-project Drew Adams
2016-01-20 22:26 ` find-file-project Dmitry Gutov
2016-01-20 22:48 ` find-file-project Drew Adams
2016-01-20 22:50 ` find-file-project Dmitry Gutov
2016-01-20 23:09 ` find-file-project Drew Adams
2016-01-20 23:23 ` find-file-project Dmitry Gutov
2016-01-20 23:46 ` find-file-project Drew Adams
2016-01-20 23:51 ` find-file-project Dmitry Gutov
2016-01-21 0:08 ` find-file-project Drew Adams
2016-01-21 0:21 ` find-file-project Dmitry Gutov
2016-01-21 3:03 ` find-file-project Dmitry Gutov
2016-01-21 13:46 ` find-file-project Stefan Monnier
2016-01-17 21:23 ` find-file-project John Wiegley
2016-01-17 21:25 ` find-file-project Dmitry Gutov
2016-01-17 23:07 ` find-file-project John Wiegley
2016-01-18 1:42 ` find-file-project Dmitry Gutov
2015-09-16 7:16 ` find-file-project Eli Zaretskii
2015-09-16 13:06 ` find-file-project Stefan Monnier
2015-09-16 13:40 ` find-file-project Stephen Leake
2015-09-16 14:32 ` find-file-project Eli Zaretskii
2015-09-16 14:57 ` find-file-project Dmitry Gutov
2015-09-16 17:03 ` find-file-project Stephen Leake
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55F8F2FA.6060902@yandex.ru \
--to=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=stephen_leake@stephe-leake.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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.