我不确定 emacs lisp 究竟是如何处理函数对象的,是否有我没有看到的隐藏参数,当我有这个时,当我点击C-c p它时会给出错误
Wrong type argument: commandp, load-cenet-files
我根本不懂 lisp。
(defun load-cenet-files ()
(load-file "~/.emacs.d/cedet/common/cedet.elc")
(require 'semantic-gcc)
)
(global-set-key (kbd "C-c p") '(load-cenet-files))
Run Code Online (Sandbox Code Playgroud)
Emacs 区分函数和命令——后者是一种特殊类型的函数,即那些可以由用户交互调用的函数。错误消息Wrong type argument: commandp, load-cenet-files告诉您代码中的某些点正在等待命令,但得到了其他东西。commandp是一个谓词函数,用于检查其参数是否为命令;在这里,它测试load-cenet-files并发现它不是一个命令,因此呕吐。
您可以通过将函数声明为交互式来将其转换为命令。您可以通过将(interactive)声明添加为(defun function-name (args). 请注意,这(interactive)是一个特殊的构造,它不是真正的函数调用,而是一个声明。
(defun load-cenet-files ()
(interactive)
(load-file "~/.emacs.d/cedet/common/cedet.elc")
(require 'semantic-gcc)
)
Run Code Online (Sandbox Code Playgroud)
一旦你把一个函数变成了一个命令,你就可以通过M-x function-name. 此外,如果要将函数绑定到键盘快捷键,则它必须是命令。后者正是您看到该错误消息的原因:您已将load-cenet-files函数绑定到,C-c p但它是一个函数,而不是命令。一旦你插入(interactive)你应该没问题。
最后,您尝试将此功能绑定到键盘快捷键似乎有些不寻常。你不能把load-fileandrequire放到你的“.emacs”文件中吗?或者,如果您不想全局加载文件,请将其附加到特定于模式的挂钩?