求助万能的社区~
我定义了一个函数,但是M-x的时候找不到它
我想问问,怎么能定义一个M-x里面的命令,全局的怎么定义,单个mode的怎么定义?
谢谢大家.
求助万能的社区~
我定义了一个函数,但是M-x的时候找不到它
我想问问,怎么能定义一个M-x里面的命令,全局的怎么定义,单个mode的怎么定义?
谢谢大家.
(defun foo ()
(interactive)
...)
好像不能针对单个 mode 定义吧,感觉也没啥必要,一般就是全局定义,楼上说的
elisp 没有真正意义上的公有/私有方法,一般通过命名来区分:
(defun packagename-public-funciton () ...)
(defun packagename--private-funciton () ...)
两个连接符号表示私有成员,这好像已经是共识了,但具体用什么符号就各自发挥了,比如 spacemacs:
(defun layername/public-function() ...)
(defun layername//private-function() ...)
(defmacro layername|a-macro() ...)
(defvar layername-public-variable ...)
(defvar layername--private-variable ...)
跟 python 一样,这些只是君子协定,不具备约束力,全靠自觉。即使声明了 private,仍然可以从外部调用。
虽然 elisp 没有 namespace,但是却有人写了 names 这样的包:
(define-namespace packagename-
(defun -private-function() ...)
(defun public-function()
...
(-private-function)
...)
)
在外部看到的是 packagename--private-function
和 packagename-public-function
,详见:https://github.com/Malabarba/names/blob/master/UsageExample.org
defvar 生成的变量都是全局变量, 没有模块的概念
能从 M-x 执行的函数叫做命令,它比普通的函数多一个 interactive
语句,如
(defun foo ()
(interactive)
(message "Hello, World!"))
详细文档可参考:(elisp) Defining Commands