GNU bug report logs - #67171
30.0.50; (At least) some VC commands fail with project-prefix-or-any-command

Previous Next

Package: emacs;

Reported by: Sean Whitton <spwhitton <at> spwhitton.name>

Date: Tue, 14 Nov 2023 13:14:01 UTC

Severity: normal

Found in version 30.0.50

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

Bug is archived. No further changes may be made.

Full log


Message #50 received at 67171 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: 67171 <at> debbugs.gnu.org, sbaugh <at> catern.com, juri <at> linkov.net
Subject: Re: bug#67171: 30.0.50; (At least) some VC commands fail with
 project-prefix-or-any-command
Date: Wed, 6 Dec 2023 02:26:12 +0200
On 06/12/2023 00:40, Sean Whitton wrote:
> Alright, I've bisected it.  After step 3, additionally eval this form:
> 
>      (define-key project-prefix-map "L" #'vc-print-root-log)
> 
> I have this because I want to be able to type just L instead of C-x v L.
> That doesn't work -- possibly not a bug -- but surely adding that
> binding shouldn't affect C-x v L, at least?

All right, the full scenario is unexpected, but otherwise it's a 
documented behavior, see the docstring for 'project-any-command'.

We discussed the possibility of the override in the other way (in 
bug#63648, which resulted in this command), but not an opt-out for 
commands in project-prefix-map, yet.

So... something like this?

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index a81bb63fba4..feef7ba5248 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1861,9 +1861,10 @@ project-any-command
     (when command
       ;; We could also check the command name against "\\`project-",
       ;; and/or (get command 'project-command).
-      (map-keymap
-       (lambda (_evt cmd) (if (eq cmd command) (setq found t)))
-       project-prefix-map)
+      (unless (get command 'project-switch-with-default-directory)
+        (map-keymap
+         (lambda (_evt cmd) (if (eq cmd command) (setq found t)))
+         project-prefix-map))
       (if found
           (let ((project-current-directory-override root))
             (call-interactively command))


Combined with

  (put 'vc-print-root-log 'project-switch-with-default-directory t)

somewhere in your init script.

The alternative would be tagging all project-related commands. Even if 
we also check for the 'project-' prefix in command's name, the 
user-defined commands using the project API will be affected (I don't 
know for how many it would be a problem, but still).




This bug report was last modified 1 year and 222 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.