unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: Philip Kaludercic <philipk@posteo.net>,
	Stefan Monnier <monnier@iro.umontreal.ca>,
	emacs-devel@gnu.org
Subject: Re: [PATCH] Speed up project-kill-buffers
Date: Sun, 30 May 2021 10:51:50 -0700	[thread overview]
Message-ID: <868s3whzyh.fsf@stephe-leake.org> (raw)
In-Reply-To: <44b0b57f-27fd-d0b6-f350-5745375ff2a4@yandex.ru> (Dmitry Gutov's message of "Tue, 25 May 2021 04:24:57 +0300")

Dmitry Gutov <dgutov@yandex.ru> writes:

>>> A generic like project-contains?
>> That's one option, with the current predicate in
>> project--buffer-list as
>> the default implementation; then I could override that to check
>> project-files, or all roots, or something. As long as it passes C-u to
>> the backend, my function could also use that to decide about dependent
>> libraries.
>
> I'm fairly sure you don't want to close the buffers visiting the
> dependencies. 

Sometimes I do; I'm done working on ada-mode, and I transition to
working on my music database, closing all ada-mode related files. Other
times I don't; I found a bug in ada-mode, so I move to the wisitoken
library to run tests there, closing only the higher-level ada-mode
files.

The point is that it is up to the user, to decide on a case by case
basis.

> Or if we do, that would be a globally acting modifier, and that piece
> of logic which we would add to project-kill-buffers would just see
> whether the buffer's default-directory is inside any of the "external
> roots", as defined by the backend. Would that work for you?

I don't follow. What is the UI? How does the information given by the
user get passed to the backend? Only the backend can interpret
"dependencies".

And no, not all project files can be distinguished by directory; I have
files in the same directory that are managed by different projects (Ada
and elisp).

>> It might be better to make the predicate more specific;
>> project-delete-this-buffer-p. That way eglot won't try to abuse
>> project-contains to pick a server :). Or maybe my delete buffer case
>> and eglot's "choose the right server" case really are the same?
>
> I'd rather we try to be more strict with semantics, if possible, and
> 'project-contains?' would only return t for buffers "inside" the 
> project, not stuff that's outside but related to it (like external
> libraries, system includes, etc, which is what I'd like "external
> roots" to be targeted at).

Then you need an "include-external-roots" arg to project-contains, since
sometimes that's what the user wants.

>> I think another generic project-name, or possbly project-prompt,
>> would
>> be good here. The default could be project-root.
>
> We can add that, but please file that as a separate bug report.

Done; 48747

>> There should also be a custom boolean to turn off the prompt; it's
>> helpful the first few times, then it's just annoying. Currently C-u is
>> 'no-confirm'; I hope that will change to 'no-dependencies'.
>
> It *might* change to "include dependencies", since currently it's not
> supposed to include them.
>
> If you want this change to happen, could you outline the cases when
> you would and would not use this capability? Personally, I'd probably
> never kill those buffers.

I gave examples above. In general, if I'm switching to a project that
shares some files with the current one, I don't want to delete those
buffers. So the correct semantics would be "switching from project A to
project B; close all non-shared buffers".

-- 
-- Stephe



  reply	other threads:[~2021-05-30 17:51 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03  9:43 [PATCH] Speed up project-kill-buffers Philip Kaludercic
2021-05-03 12:46 ` Stefan Monnier
2021-05-03 13:06   ` Philip Kaludercic
2021-05-03 13:24     ` Stefan Monnier
2021-05-03 17:25       ` Philip Kaludercic
2021-05-03 21:12         ` Dmitry Gutov
2021-05-08 12:03       ` Stephen Leake
2021-05-08 12:30         ` Philip Kaludercic
2021-05-08 13:05           ` Philip Kaludercic
2021-05-08 17:01           ` Dmitry Gutov
2021-05-08 17:10         ` Dmitry Gutov
2021-05-16 20:36           ` Stephen Leake
2021-05-16 21:58             ` Dmitry Gutov
2021-05-19 23:37               ` Stephen Leake
2021-05-20 12:16                 ` Stephen Leake
2021-05-25  1:30                   ` Dmitry Gutov
2021-05-30 17:19                     ` Stephen Leake
2021-05-25  1:24                 ` Dmitry Gutov
2021-05-30 17:51                   ` Stephen Leake [this message]
2021-08-09  3:01                     ` Dmitry Gutov
2021-05-03 21:43 ` Dmitry Gutov
2021-05-03 22:45   ` Stefan Monnier
2021-05-03 22:46     ` Dmitry Gutov
2021-05-04  6:25       ` tomas
2021-05-04 10:40         ` Dmitry Gutov
2021-05-04 11:26           ` tomas

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=868s3whzyh.fsf@stephe-leake.org \
    --to=stephen_leake@stephe-leake.org \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=philipk@posteo.net \
    /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).