GNU bug report logs -
#79126
vc-switch-working-tree does not work if there is no matching file
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Fri, 08 Aug 2025 11:18:45 +0100
with message-id <87cy963ym2.fsf <at> zephyr.silentflame.com>
and subject line Re: bug#79126: vc-switch-working-tree does not work if there is no matching file
has caused the debbugs.gnu.org bug report #79126,
regarding vc-switch-working-tree does not work if there is no matching file
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
79126: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79126
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
X-Debbugs-CC: spwhitton <at> spwhitton.name, sbaugh <at> janestreet.com
Hi!
If the current buffer does not visit a file (such as Dired, mentioned in
a FIXME comment), or if the current file has no corresponding on the
other worktree, we end up with an error.
Like
file-relative-name: Wrong type argument: stringp, nil
or
File ‘lisp/progmodes/abc.el’ not found in ‘~/vc/emacs-28/’
I guess some of these could be improved in project-find-matching-file
(support for more major modes?) but semantically it seems like
vc-switch-working-tree should try harder. Falling back to visiting the
worktree root in Dired, if it doesn't find a better choice.
[Message part 3 (message/rfc822, inline)]
Hello,
On Fri 08 Aug 2025 at 03:35am +03, Dmitry Gutov wrote:
> On 07/08/2025 15:38, Sean Whitton wrote:
>> Thanks again all. Here's the revised patch.
>
> Nice! Looking good.
>
>> +;; The default value works for file-visiting and Dired buffers.
>> +;; Non-file-visiting major modes (other than `dired-mode'), where there
>> +;; is a sensible notion of a matching buffer, can set this.
>> +;; File-visiting major modes shouldn't set it, except possibly some
>> +;; highly specialized ones.
>> +(defvar project-find-matching-buffer-function
>> + #'project-find-matching-file-or-directory
>> + "Function to switch to a matching buffer in another project.
>> +Usually set buffer-locally by non-file-visiting major modes.
>> +The function will be called with two arguments, the project instance for
>> +this buffer's project, and the project instance for the matching buffer.")
>
> I suggest to try to get more of the info from the comment into the docstring.
Thanks yeah, I think it's fine to just move it all in, as a second
paragraph.
>> + (dirp (derived-mode-p 'dired-mode))
>
> One more thing to try is not to specialize on Dired mode: and default to
> assuming that any buffer without buffer-file-name is "dirp".
This seems like a useful fallback -- it gets you into a buffer with the
default-directory you wanted, so you could conveniently run some other
command in the right place, even if the dired buffer isn't much use.
> The default implementation would either find/create a Dired buffer in
> the same dir, or even search through the buffer list for a buffer with
> matching values of major-mode and default-directory.
I believe that find-file/dired already handle reusing buffers if they
already exist, so we don't need to search.
Installed and closing the bug.
--
Sean Whitton
This bug report was last modified 5 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.