GNU bug report logs - #79126
vc-switch-working-tree does not work if there is no matching file

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dmitry <at> gutov.dev>

Date: Wed, 30 Jul 2025 02:38:01 UTC

Severity: normal

Done: Sean Whitton <spwhitton <at> spwhitton.name>

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#79126: closed (vc-switch-working-tree does not work if there
 is no matching file)
Date: Fri, 08 Aug 2025 10:19:02 +0000
[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)]
From: Dmitry Gutov <dmitry <at> gutov.dev>
To: bug-gnu-emacs <at> gnu.org
Subject: vc-switch-working-tree does not work if there is no matching file
Date: Wed, 30 Jul 2025 05:36:54 +0300
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)]
From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: Spencer Baugh <sbaugh <at> janestreet.com>, Eshel Yaron <me <at> eshelyaron.com>,
 79126-done <at> debbugs.gnu.org
Subject: Re: bug#79126: vc-switch-working-tree does not work if there is no
 matching file
Date: Fri, 08 Aug 2025 11:18:45 +0100
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.