2010-12-21 7 views
6

Jestem nowy w Emacs i próbuję napisać kilka funkcji Emacs Lisp.Elisp: Pytanie o tak lub nie w poleceniach interaktywnych

Chciałbym napisać funkcję, która ma dwa parametry i może obsłużyć interaktywność. Jednak jednym z parametrów jest boolean - byłoby idealnie, gdybym mógł użyć (y-or-no-p), ale (interactive) wydaje się nie mieć kodu postaci do tego.

Wszelkie pomysły?

Aktualizacja: używam GNU Emacs 23.

Również tutaj jest to, co moja funkcja wygląda tak daleko:

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

Gdy funkcja przyjmuje logiczną parametru, to jest powszechne w Emacs używać prefiksu dla tego ('(interaktywny„sSome tekst: \ nP”)', nie ma dodatkowych wierszu). Zapewnia to lepsze wrażenia użytkownika (jeden mniej podpowiedzi w najczęstszym przypadku, bardziej zgodny z podstawowymi poleceniami Emacsa). Wciśnij 'C-u' lub' M-1' dowolną z wielu innych kombinacji argumentów przedrostkowych zanim polecenie przekaże 't', nie rób tego, aby przekazać' nil'. Rozmieść dla 'nil' na typowy przypadek. – Gilles

+0

Interesujące. Dzięki, Gilles! (Powinieneś odpowiedzieć tym słowem i kodem, aby móc to przyjąć jako odpowiedź.) –

Odpowiedz

10

Ah, znalazłem to.

(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

Nie pewny co pytasz, ale mogę nie znajduje funkcji zwanej y-or-no-p. Czy miałeś na myśli tak-lub-nie-p?

Wydaje się, że robię to, czego oczekiwałbym.

+0

'y-or-no-p' jest krótszą wersją' yes-or-no-p', przynajmniej w Emacs 23. –

+3

'y-or-np' (' n', nie 'nie') prosi użytkownika o wpisanie' y' lub 'n', natomiast' tak-or-no-p' wymaga kompletnego słowa ('yes 'lub' nie'), a następnie Enter. – Gilles

+0

Oczywiście literówka. Pytanie zadane na pytanie "y-or-no-p". – Mikel