我已经编写了一个宏,它可以生成一个别名并根据名称生成全局键绑定。 我想到,如果我添加到我的emacs配置下面的代码,例如:emacs宏没有定义命令
(defkey-alias cool-function make-directory)
我会命令我酷,功能,创建一个目录和一个键绑定C-C C F到它。但评估后,我有键绑定,但没有命令我酷功能。
而且,如果我做C-H K C的-C C F I看到:
C-c c f runs the command my-cool-function, which is an alias for `make-directory'.
在我无法评价(我的酷功能)划伤无论是。如果我尝试(macroexpand'(defkey-alias cool-function make-directory)),然后评估扩展的s-expr,它就起作用。
调用宏和调用宏扩展然后评估有什么区别?为什么别名不可调用? 谢谢。
Emacs的版本是GNU Emacs的24.2.1,Windows 7的
代码:
;;; defining keys
(defun name-to-key(funname)
" works like:
'my-cool-function -> \"\C-cmcl\" "
(apply 'concat
"\C-c"
(mapcar (lambda(str)(substring str 0 1))
(split-string (symbol-name funname)
"-"))))
(defmacro defkey-alias(alias function)
"works like defalias but you should not quote symbols and sets global key mapping
Usage: (defkey-alias mkdir make-directory)"
(let ((myalias (make-symbol (concat "my-" (symbol-name alias)))))
`(progn
(defalias ',myalias ',function)
(global-set-key ,(name-to-key alias) ',myalias))))
更新:使用(defun定义...(互动)(呼叫交互“功能))也做不工作
将生产符号更改为实习生帮助 – fallens4e 2013-02-13 04:19:22