文本编辑 Emacs Elisp


原文链接: 文本编辑 Emacs Elisp

interactive 可以控制要接受的参数的位置

(defun send-message-to-function (a)
(interactive "p")
(message (format "%s" a)))
这么写的话就可以通过C-u 12 函数的快捷键将数字12传递给函数了。如果是用helm调用的话要输入 M-x 函数名 C-u 数字 RET来调用

详细介绍的话这里有中文版: https://github.com/emacs-china/hello-emacs/blob/master/elisp.org#L5453

摘录如下:

若一个函数带了交互模式声明,则它也就是一个命令了,即可以通过M-x(execute-command)来调用了.

交互模式声明的格式为(interactive code-string),其中:
   * 若interactive的参数以*开头,则意义是,如果当前buffer是只读的,则不执行该函数

   * interactive可以后接字符串,表示获得参数的方式
  * p 接收C-u的数字参数

       也可以不用P参数,直接在代码中判断current-prefix-arg的值
  * r region的开始/结束位置
  * n 提示用户输入数字参数,n后面可用接着提示符
  * s 提示用户输入字符串参数
  * 若函数接收多个input,需要用\n来分隔
`