我想把这个函数设置成更短的keybind。
(defun defkey-arg2 ()
(exwm-input-set-key (kbd "s-g")
(lambda ()
(interactive)
(start-process-shell-command gkamus nil gkamus))))
然后我写了一个较短的函数,有2个参数(keybind和应用程序名称)。
(defun defkey-arg2 (key command) (...)
当我试着把键作为参数时,它可以工作了
(defun defkey-arg2 (key)
(exwm-input-set-key (kbd key)
(lambda ()
(interactive)
(start-process-shell-command gkamus nil gkamus))))
(defkey-arg2 "s-g")
但是,当我尝试写这样的函数时
(defun defkey-arg2 (key command)
或
(defun defkey-arg2 (command)
(exwm-input-set-key (kbd "s-g")
(lambda ()
(interactive)
(start-process-shell-command command nil command)))
(defkey-arg2 "gkamus")
它会引发错误。
Symbol's value as variable is void:' when using parameter on defun
的正文 lambda
不被评估。 使用反引号, command
可以代入所得到的表达式中。
(defun defkey-arg2 (command)
(define-key (current-local-map)
(kbd "s-g")
`(lambda ()
(interactive)
(start-process-shell-command ,command nil ,command))))