For user-defined commands the convention is to prefix them with a more or less unique string. For example i choose to prefix my commands with
jcl-. To call such a command with
M-x i always have to type
M-x jcl- first. Instead i type
M-z. That will behave just like
jcl- is already typed. The default binding for this keystroke
zap-to-char i find more annoying than useful.
I find this helpful especially for commands that are not used very often. If binding such a command to a keystroke it is hard to remember it. A command name is often easier to remember.
It can be used like this:
;; Define a subset with all commands that starts with "jcl-". (jcl-define-command-subset jcl-command-subset "M-z " "^jcl-" "jcl-") ;; Define a subset with all commands which have the string "toggle" ;; in their name. (jcl-define-command-subset jcl-toggle-command-subset "M-Z " "toggle") ;; Define a subset with all monkey related commands. (jcl-define-command-subset jcl-monkey-command-subset "Select monkey business: " "monkey\\|ape\\|chimp\\|gorilla") (define-key global-map [(meta ?z)] 'jcl-command-subset) (define-key global-map [(meta ?Z)] 'jcl-toggle-command-subset) (defalias 'monkey 'jcl-monkey-command-subset) (jcl-command-subset-setup)
Each subset have a list with all commands in it. One way to update the list is to repeat the command. In the example above this would be done by hitting