I am trying to bind keys to a lambda function using bind-key.el. I have the following factor macro

;; taken from Emacs Doom
(defmacro cmd! (&rest body)
  (declare (doc-string 1) (pure t) (side-effect-free t))
  `(lambda (&rest _) (interactive) ,@body))

which creates a lambda interactive function. So at first, I tried using that to bind-keys with no success.

(use-package org
:bind (:map org-mode-map
("C-c C-f" . (cmd! (message "Test")))))

But then I get the error. use-package: org-super-agenda wants arguments acceptable to the 'bind-keys' macro.... I also tried

(bind-keys :map org-mode-map
     ("C-c C-f" . (cmd! (message "Test"))))

but then I get the error command-execute: Wrong type argument: commandp, (cmd! (message "Test")) when I press C-c C-f.

I then tried replacing (cmd! ... with (lambda () (interactive) ...)

(bind-keys :map org-mode-map
     ("C-c C-f" . (lambda () (interactive) (message "Test"))))

but then I get stuck in an infinite loop when executing the previous statement. When stopping with C-g, I find that I am stuck in a function called prin1-to-string with a seemingly infinite

(closure ((binding closure ((binding closure ((binding closure ... nil ... ...)

as an argument. I think the reason is that in my particular file with lexical binding, closing the lambda expression is expensive.

How am I supposed to do this efficiently?

1 Answer 1


Here's the format.

(bind-key "M-h" #'some-interactive-function my-mode-map)

(bind-key "C-c iv" (lambda()(interactive) (my-function-here my-func-parameter)) my-mode-map)

Documentation is your friend. C-h f bind-key.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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