2010-12-21 68 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