Lars Ingebrigtsen writes: > Felician Nemeth writes: > >>> I'm not quite sure how to implement this, though -- we basically end up >>> in `completing-read', and `execute-extended-command-for-buffer' would >>> have to define an `M-x' binding there, I guess... and then somehow call >>> `read-extended-command' with the text already in the minibuffer. >>> >>> Anybody got an idea as to how to implement this without rewriting >>> `read-extended-command' completely? >> >> The execute-extended-commands have two undocumented optional arguments >> (command-name and typed). What are they used for? >> >> Anyway, following the fallback logic of `ido-find-file', I was able to >> rebind `M-x' and save the content of the minibuffer with a non-standard >> exit from `execute-extended-command'. Maybe the ugly code below can >> give ideas to someone more knowledgeable. > > Thanks -- I was wondering more about the situation where you've typed > > M-X foo|bar > > (| for point) > > and then hit `M-x' because you want to switch to the other mode. > Ideally, `M-x' should do that, and also preserve the text the user has > typed, and the cursor position. I don't see an obvious simple way to do > that... I've discovered that the initial-input argument of `completing-read` can be written as (STRING . POSITION). The attached patch makes use of it and shows a simple implementation of my original wish. However, the patch creates code duplication. Also, I don't know how it copes with recursive editing: maybe it's not a good idea to rebind M-x when `enable-recursive-minibuffers' is t. Finally, the docstring says initial-input is deprecated. I'm happy to work on the patch if you guide me to the right direction, but this time I'd rather receive a fish instead of being taught how to fish :)