Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 互动式;r";elisp defun是否具有其他参数?_Function_Emacs_Elisp_Interactive - Fatal编程技术网

Function 互动式;r";elisp defun是否具有其他参数?

Function 互动式;r";elisp defun是否具有其他参数?,function,emacs,elisp,interactive,Function,Emacs,Elisp,Interactive,是否可以使用代码“r”编写一个具有附加可选参数的交互式defun(这样它可以在所选区域内执行操作,但使用另一个参数)?我想要如下内容: (defun my-function (start end &optional arg) "Do something with selected region" (interactive "r") (if arg (setq val arg) (setq val 2)) (do things...)) 看看上面写的

是否可以使用代码“r”编写一个具有附加可选参数的交互式defun(这样它可以在所选区域内执行操作,但使用另一个参数)?我想要如下内容:

(defun my-function (start end &optional arg)
  "Do something with selected region"
  (interactive "r")
  (if arg
      (setq val arg)
    (setq val 2))
  (do things...))
看看上面写的

“r”:点和标记,作为两个数字 争论,最小的优先。这是 仅指定两个字符的代码字母 连续的争论而不是一个。 没有I/O

我不确定“无I/O”和“两个连续参数”是否意味着它接受2个且仅接受2个参数(即,将区域的起点和终点限制为args)。虽然它允许我使用一个附加参数来计算和运行defun,但Emacs似乎忽略了它


谢谢。

函数可以通过两种方式调用:

  • 交互:这是用户调用命令时发生的情况,例如,当命令已绑定到某个键时
  • From lisp:从另一个lisp函数调用函数时。e、 g.
    (r 100 200 t)
在本例中,必须确保参数与交互式规范匹配,在本例中,它必须接受两个参数。当以交互方式调用第三个时,将不使用它(因此它将获得值
nil

没有I/O意味着它不会提示用户输入(就像它请求文件名时那样)


如果您希望函数在区域处于活动状态时的行为有所不同,可以要求函数
(use-region-p)

使
具有交互性
请求多个参数,用换行符分隔它们。例如,如果要将第三个参数绑定到prefix参数的值,请按如下方式定义函数:

(defun my-function (start end &optional arg)
  "Do something with selected region"
  (interactive "r\np")
  (if arg
      (setq val arg)
    (setq val 2))
  (do things...))
M-x description function interactive
为您提供了更多信息