2010-12-21 51 views
6

我是Emacs的新手,正在尝试编写几个Emacs Lisp函数。Elisp:在交互式命令中询问是或否

我想写一个函数,需要两个参数,并可以处理交互。然而,其中一个参数是一个布尔值 - 如果我可以使用(y-or-no-p),它会是完美的,但(interactive)似乎没有用于此的字符代码。

任何想法?

更新:我使用GNU Emacs的23

而且,这里就是我的函数看起来像至今:

(defun foo (str bool) 
    (interactive "sSome text: \nsDo the thing?") 
    (some-func str) 
    (if bool (some-other-func str))) 
+3

当一个函数需要一个布尔参数,通常在Emacs使用前缀参数为('(互动“sSome文本:\ NP”)',没有多余的提示)。这提供了更好的用户体验(在最常见的情况下,少一个提示,与基本的Emacs命令更一致)。在传递't'的命令前按'C-u'或'M-1'任何其他前缀参数组合,不要通过'nil'。安排'无'是常见的情况。 – Gilles 2010-12-21 20:58:04

+0

有趣。谢谢,吉尔斯! (你应该回答这个问题和它的代码,所以我可以接受这个答案。) – 2010-12-23 18:30:57

回答

10

啊,找到它了。

(defun foo (str bool) 
    (interactive 
    (list (read-string "Some text: ") 
      (y-or-n-p "Do the thing? "))) 
    (some-func str) 
    (if bool (some-other-func str))) 
1

不太清楚你问什么,但我可以找不到一个名为y-or-no-p的函数。你的意思是肯定还是不肯定?

这似乎做我所期望的。

+0

'y-or-no-p'是'yes-or-no-p'的缩写版本,至少在Emacs中23. – 2010-12-21 07:35:55

+3

'y-or-np'('n',而不是'no')要求用户键入'y'或'n',而'yes-or-no-p'则需要完整的单词('yes '或'no'),然后按Enter键。 – Gilles 2010-12-21 20:54:19

+0

显然是一个错字。这个问题问到'y-or-no-p'。 – Mikel 2010-12-21 21:11:06