How would I go about getting the key binding for a function in elisp?

I'd like to know which key is used to quit. e.g. keyboard-quit.

I tried using the function used by help functionality but it's not working.

(require 'help-fns)
(message "%S" (help-fns--key-bindings (quote keyboard-quit)))

However I get the error Symbol’s value as variable is void: keyboard-quit


Try this:

(defun foo (function &optional descriptionp)
  (unless (commandp function) (error "Not a command: %s" function))
  (let* ((key   (car (where-is-internal
                      (or (command-remapping function) function)
                      overriding-local-map nil nil)))
         (desc  (and descriptionp  (key-description key))))
    (or desc  key)))

(foo 'keyboard-quit)   ; [7]
(foo 'keyboard-quit t) ; "C-g"

Function help-fns--key-bindings is intended to be used in a particular context, which is not available or relevant here.


You can use substitute-command-keys, e.g.,

(substitute-command-keys "\\[keyboard-quit]")
;; => "C-g"

though if there are multiple key bindings, it returns only one of them (the "first" one), for example,

(substitute-command-keys "\\[kmacro-start-macro]")
;; => "C-x ("

see also it's docstring and (elisp) Keys in Documentation.

  • Works well, ended up using this answer however the other answer more closely matches the question since it takes a function. – ideasman42 Dec 9 '19 at 20:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.