如何以编程方式为用户提示输入答案?

时间:2016-03-12 18:20:10

标签: emacs

某些emacs函数将用户输入字符串作为参数。例如,M-x search-forward获取用户输入字符串并在缓冲区中搜索它。

我经常使用一些搜索字符串。因此,我想创建自己的函数并将此搜索字符串硬编码为搜索转发的参数。对于此函数搜索转发,这很容易,因为此函数的函数参数列表具有搜索字符串的参数,如其defun声明:(search-forward STRING &optional BOUND NOERROR COUNT)。我可以将字符串传递给STRING参数。

但对于执行类似字符串搜索的其他函数,它不会将搜索字符串指定为参数。例如,在Magnar的多光标库mc/mark-all-in-region-regexp中,是一个搜索用户提供的regexp字符串的函数。我想制作一个自己的快捷功能,它需要一个固定的字符串,比如说," abc"。但是,mc/mark-all-in-region-regexp的参数列表没有搜索字符串的参数。这是函数参数列表:(mc/mark-all-in-region-regexp BEG END)。它只有区域开始和结束位置的参数。但是,如果您将其作为M-x命令执行,即M-x mc/mark-all-in-region-regexp ENTER,则会提示您输入搜索字符串。

我的问题是,如何编写我的函数,将搜索字符串传递给mc/mark-all-in-region-regexp

我的初步审判是这样的。但没有达到我的预期。

(defun my-mc-mark-non-empty-lines ()
  (interactive)
  (mc/mark-all-in-region)
  (insert-string "abc")
  )

1 个答案:

答案 0 :(得分:2)

在制定处理最初设计用于请求来自用户输入的函数的编程解决方案时,通常建议设计一种方法来以参数的形式传递值或者从变量派生值。 / p>

例如,有争议的函数的作者之前在2015年4月3日的提交中创建了另一个参数 - 以下是diff - 即,-表示已删除,{ {1}}意味着已添加。

+

以下链接包含一个以编程方式输入用户请求的是/否响应的示例(这与您的问题半关联​​),但Drew的评论已经有7个赞成,其中他说过'这样做:https://emacs.stackexchange.com/questions/19077/how-to-programmatically-answer-yes-to-those-commands-that-prompt-for-a-decisio