On 02/05/2024 09:12, Juri Linkov wrote: >>> Something is wrong here. I bound 'other-project-prefix' to 'C-x p P'. >>> Then typing 'C-x p P C-x d' asked a directory name, then later >>> after selecting a project asked for the directory name again. >> >> Looks like that has to do with the interactive spec. See the attached next >> revision, it seems to behave better. > > Thanks, this works now (except that it can't be debugged because of the > Lisp error: (wrong-type-argument listp ignore)). > > Also 'C-h' is not a problem: 'help-form-show' does nothing > without 'help-form', but with 'help-form' works fine: > > (define-key map (vector help-char) > (lambda () > (interactive) > (let ((help-form "You can use any global keybinding.")) > (help-form-show)))) We would want 'C-h' to show the regular buffer with key bindings, won't we? With similar output to the one that we get after 'C-x p C-h' or 'C-x v C-h'. The output might be weirder because of the composed keymap, but it could still be useful. Also, with which-key-mode, C-h would do its thing. > However, a much bigger problem is that unfortunately many test cases from > https://debbugs.gnu.org/63648#203 are broken. For example, > 'C-x p p C-b' fails the same way as in bug#58784. > 'C-x p p f M-n' fails because it expects to read arguments > in a previous project with an old value of default-directory, etc. Thanks for noticing. Looks like the call to project-prompter can change the value of this-command, and that's why the subsequent check went down the wrong branch. See the attached v3 with the fix. > Maybe this could be fixed by running 'interactive' in a previous project > by using something like: > > (around-fun > (lambda (command &rest _args) > (interactive (lambda (spec) > (let ((default-directory prev-dir)) > (advice-eval-interactive-spec spec)))) I think the command might rather expect to be called in the "new" project. And also while some have interactive specs with significant logic inside, others don't; introducing a difference there could cause more problems.