I would like to have a function call-keymap which takes one argument km (a keymap) and such that the result of (call-keymap km) is the same as binding km to a key and then pressing that key.
It should look something like this
(defun call-keymap (km)
(while (keymapp km)
(setq km (lookup-key km (read-key-sequence ""))))
(call-interactively km))
except that this doesn't work (specifically the last line is wrong, since a non-keymap entry of a keymap needn't be a function).
Intuitively, it would seem that the main command loop in emacs should be something like
(while t
(call-keymap (current-global-map))
(or rather, it should do something with current-active-maps instead of current-global-map).
I was surprised to not be able to find a built-in function with the desired functionality of call-keymap, since this seems to me to be such a basic function.
Could someone please point me to such a built-in, or indicate how to fix the above definition?
Edit 2019-01-23
Stefan very rightly asked that I explain what my use-case is for such a function.
I use evil-mode and have SPC as a prefix-key for various useful commands when in normal-state. In insert-state, I would like some other binding (say, M-SPC) to produce the same behaviour as SPC in normal mode (I think emacs-DOOM has such a feature). My idea was then to bind M-SPC to a function which fetches the current normal-state binding of SPC (which is a keymap) and calls it.
Presumably, there are other good solutions to this, so that my original question may be moot, though I would be still be interested to know the answer. For example, here is one quite-hacky-but-maybe-not-entirely-unsatisfactory solution to my problem:
(defun set-alt-space ()
(evil-local-set-key 'insert (kbd "M-SPC") (key-binding (kbd "SPC"))))
(add-hook 'evil-normal-state-exit-hook 'set-alt-space)