Does prefix key support lambda?
WeissP opened this issue · 2 comments
So I want to add some lambda functions for the keys in the prefix key map, like:
(ryo-modal-key
"<escape>" '(("s" (lambda () (interactive) (insert "123")))
("b" ibuffer-list-buffers)))
But it shows that Error (use-package): ryo-modal/:config: Wrong type argument: listp, lambda
And then i want to add tag :then
to make lambdas work, like:
(ryo-modal-key
"<escape>" '(("s" left-char :then '(left-char))
("b" ibuffer-list-buffers)))
But it seems like prefix key doesn't support tag :then
?
Hi! Unfortunately lambdas can't be used as the target of bindings. The documentation is wrong here, since it says commands and interactive lambdas are commands. I'd like to support lambdas, but I'm not sure what name the generated function should have, so please leave a suggestion if you have any!
Regarding your second example it is a bit unintuitive when using prefix keys. Since the "target" here is already quoted, the :then
list doesn't need to be quoted itself. So this works:
(ryo-modal-key
"<escape>" '(("s" left-char :then (left-char))
("b" ibuffer-list-buffers)))
the :then list doesn't need to be quoted itself.
Oh you are right, thanks :)
About the lambdas i can define them like this:
(ryo-modal-key
"<escape>" '(
("p" ignore
:then ((lambda () (interactive) (insert "&&&[IMG]pictures/.png")))
:name "insert karat pic")
("j" xah-insert-paren))
It's ugly but it at least works.