Elisp: 在交互式命令中询问是或否

7
我刚开始使用Emacs,试图编写一些Emacs Lisp函数。
我希望写一个接收两个参数并且可以交互的函数。但是其中一个参数是布尔类型 - 如果我可以使用 (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中通常使用前缀参数((interactive "sSome text:\nP"),没有额外提示)。这样可以提供更好的用户体验(在最常见的情况下少一个提示,更符合基本的Emacs命令的一致性)。在命令之前按下 C-uM-1 中的任何其他前缀参数组合来传递 t,不要用它来传递 nil。安排 nil 作为常见情况。 - Gilles 'SO- stop being evil'
有意思,谢谢Gilles! (你应该回答这个并提供代码,这样我就可以接受它作为答案。) - a paid nerd
2个回答

12

啊,找到了。

(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的函数。你是指yes-or-no-p吗?

那个函数似乎做了我期望的事情。


y-or-no-pyes-or-no-p 的简化版本,至少在 Emacs 23 中是这样。 - a paid nerd
4
y-or-n-p 会要求用户输入 yn, 而 yes-or-no-p 则需要输入完整的单词 (yesno) 并按下回车键。注意:原文中的 n 意为否定回答,而非 "no" 的缩写。 - Gilles 'SO- stop being evil'
显然是个笔误。问题是关于 y-or-no-p 的。 - Mikel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接