On 25/10/2023 19:53, Juri Linkov wrote: >> + ;; Variation: could be a separate command, or an option. >> + ;; (command (let ((overriding-local-map project-prefix-map)) >> + ;; (key-binding (read-key-sequence >> + ;; (format "[execute in %s]:" (project-root pr))) >> + ;; t))) > > Thanks, it works nicely. > Any reason not to use this by default? Nothing critical, but it might not fit the expectations without additional instructions in the prompt, or it can be unnecessary if the user had reached this command through 'C-x p o'. In the latter case there is also a small chance that the user had set up some advanced sub-maps inside project-prefix-map which would shadow some global bindings. So maybe a separate command is best. Please see how you like the attached new version together with (setq project-switch-commands #'project-prefix-or-any-command) I'm not sure about project-prefix-or-any-command's prompt, though (phrasing feels awkward). Improvements welcome. >> + (if found >> + (let ((project-current-directory-override root)) >> + (call-interactively command)) >> + (let ((default-directory root)) >> + (call-interactively command)))))) > > Not sure why need to let-bind project-current-directory-override here. > It seems to work with and without it. You mean with found=nil? Indeed, rebinding project-current-directory-override instead of just doing that with default-directory is critical for only a small subset of commands (such as project-switch-buffer or bug#58784). So this will be a 99% solution that, however, leads to more straightforward code. BTW, let me know if you prefer the "prefix command" style from your last patch for this command. My main sticking point with it was the change of logic used to indicate a different project root, but it can just as well be transplanted there. So if the prefix command approach is better for some scenarios, we can switch to it.