Po części defun
,
(interactive "c(C)hoose (A)n (O)ption")
poprosi użytkownika o pojedynczy znak; RET
Nie jest wymagane. Jak mogę powtórzyć to zachowanie podczas czytania bez potrzeby interactive
?
minibuffer
interactive
Sean Allred
źródło
źródło
read-char-choice
Oprócz wbudowanych sposobów odczytywania pojedynczych zdarzeń, takich jak
read-char
iread-char-exclusive
, tutaj jest możliwość odczytania pojedynczego znaku, ale także określ, które znaki są dopuszczalne:Tak więc wszystkie poniższe elementy zaakceptują „C”, „A” lub „O”:
A oto przykładowy sposób zapętlenia poprawnego wejścia do
response
zmiennej:źródło
read-char-choice
który czyta jeden z danego zestawu znaków.call-interactively
interpretuje(interactive "cPROMPT")
specyfikację, do którejc
wysyłana jest opcjaread-char
. Dlatego poniższe elementy powinny działać w kontekście nieinteraktywnym:źródło
Odpowiedzi na pytanie udzielono dawno temu, ale ta dodatkowa odpowiedź może stanowić pomoc dla innych osób poszukujących.
read-char-choice
pozwala określić listę opcji. Fn nie powróci, dopóki użytkownik nie wybierze jednej z tych prawidłowych opcji.W zdegenerowanym przypadku, w którym opcjami są po prostu Y lub N (przypadek insenstive), jest
y-or-n-p
.Zarówno
read-char-choice
iy-or-n-p
są sztywne i nalegają na ważnej odpowiedzi. W pierwszym przypadku musi to być jedna z opcji, które określisz (np. A, B lub C w moim przykładzie), a w drugim przypadku musi to być Y lub N. Jeśli użytkownik naciśnie klawisz Enter lub jakikolwiek inny klawisz,y-or-n-p
zapyta ponownie.read-char-choice
Będzie po prostu siedzieć, cisza. Żadna z tych metod nie pozwala na przywrócenie wartości domyślnej. Aby uzyskać takie zachowanie, myślę, że musisz zbudować własną interakcję zread-char
lubread-key
.Z mojego doświadczenia wynika, problem z
read-char
iread-key
spokoju, jest to, że podczas gdy wyświetli monit w minibuforze, kursor pozostaje w głównym buforze edycji. Jest to dezorientujące dla użytkownika, a także różni się od zachowaniaread-string
.Aby tego uniknąć, możesz pozwolić zmiennej
cursor-in-echo-area
przed wywołaniem,read-key
aby wyświetlić kursor w minibuforze.źródło