On 23/10/2023 09:58, Juri Linkov wrote: >>> Wow, it works nicely for 'C-x p p C-x d'. >>> But strange it fails for 'C-x p p C-x v d' >>> with the same error: >>> (wrong-type-argument commandp 1) >> >> That's because (lookup-key ... "vd") also returns 1. >> >> I haven't been able to find a solution that works like we would expect. The >> most trivial would be to loop cutting off invalid prefixes, but then we end >> up with 'd', not 'v'. That's probably not what you want. >> >> Ideally, 'read-key-sequence' would stop at the user pressing 'v' and return >> "^Xv", then the rest would work out okay. But I haven't managed to have it >> do that, even when using overriding-terminal-local-map and temporarily >> altering the global map. My experimental patch is below, you can try >> tweaking it. > > Now can't type 'C-x p p C-x v d' completely because > 'C-x p p C-x v' opens vc-dir after typing 'v'. Huh. That actually works for me now, after I ran 'make' and restarted. But I thought you wanted this? 'C-x v d' ends with vc-dir, so if 'C-x p p C-x v' opens vc-dir, then isn't this what you expected? Anyway, the resulting UI is fairly counter-intuitive. >> And overall I'm not sure it's a constructive approach because you might >> have been going for 'C-x v d' (where the 'v' translation is correct), but >> you might have been going for 'C-x v D' or 'C-x v v' instead, very >> different commands. It might be better to report unknown key sequence and >> let the user make an explicit choice, like it works now. Depends on whether >> you notice the key sequence echoing while doing that input. > > Maybe adding a new option 'project-switch-use-global-map' would help? Try the attached, it's another iteration on the latest patch (prefix-command-echo-keystrokes-functions doesn't seem to work reliably in this context). Try it together with (setq project-switch-commands 'project-any-command) Also see the "Variation" in the comment (it allows for short bindings).