2010-12-21 2 views
6

저는 Emacs를 처음 접했고 몇 가지 Emacs Lisp 기능을 작성하려고합니다.Elisp : 대화 형 명령에서 예 또는 아니오 묻기

두 개의 매개 변수를 사용하고 대화식으로 처리 할 수있는 함수를 작성하고 싶습니다. 그러나 하나의 매개 변수는 부울입니다. (y-or-no-p)을 사용할 수 있으면 완벽 할 것이지만 (interactive)에는 문자 코드가없는 것 같습니다.

아이디어가 있으십니까?

업데이트 : 나는 여기에 내 기능은 지금까지의 모습입니다, 23

또한 GNU 이맥스를 사용하고 있습니다 : 당신이 요구하는지

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

은, 그 접두사 인수를 사용하는 이맥스에서 일반적입니다. 이것은 더 나은 사용자 경험을 제공합니다 (가장 일반적인 경우에는 프롬프트가 적고, 기본 Emacs 명령과 더 일관성이 있습니다). 't'를 넘겨 줄 명령 앞에 다른 많은 접두사 인수 조합 중 하나 인'C-u' 또는'M-1'을 누르십시오.'nil '을 전달하지 마십시오. 'nil'을 일반적인 경우로 정하십시오. – Gilles

+0

흥미 롭습니다. 고마워, Gilles! (그걸 대답으로 받아 들일 수 있도록 코드와 그 코드로 대답해야합니다.) –

답변

10

아, 찾았습니다. (:)`가 별도의 프롬프트`(대화 형 "\ NP sSome 텍스트") 함수는 부울 매개 변수를 사용하면

(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'는 최소한 Emacs에서'예 또는 아니오 -p'의 짧은 버전입니다. 23. –

+3

'y-or-np' ('n'이 아니라'no')는 사용자에게'y' 또는'n'을 입력하도록 요청하는 반면'yes-or-no-p'는 완전한 단어를 요구합니다 '또는'no')를 입력 한 다음 Enter를 누르십시오. – Gilles

+0

분명히 오타입니다. 이 질문은'y-or-no-p'에 대해 물었다. – Mikel