Lorsqu'elle fait partie d'un defun
,
(interactive "c(C)hoose (A)n (O)ption")
demandera à l'utilisateur un seul caractère; RET
n'est pas requis. Comment puis-je reproduire ce comportement de lecture sans avoir besoin de interactive
?
minibuffer
interactive
Sean Allred
la source
la source
read-char-choice
En plus des moyens intégrés de lire des événements uniques tels que
read-char
etread-char-exclusive
, voici une option pour lire un seul caractère, mais spécifiez également quels caractères sont des entrées acceptables:Ainsi, tous les éléments suivants accepteront "C", "A" ou "O":
Et voici un exemple de boucle pour l'entrée correcte dans une
response
variable:la source
read-char-choice
qui lit l'un d'un ensemble de caractères donné.call-interactively
est ce qui interprète la(interactive "cPROMPT")
spécification, l'c
option est envoyée àread-char
. Par conséquent, les éléments suivants devraient fonctionner dans un contexte non interactif:la source
La question a été répondue il y a longtemps, mais cette réponse supplémentaire peut fournir une aide aux autres chercheurs.
read-char-choice
vous permet de spécifier une liste de choix. Le fn ne reviendra que lorsque l'utilisateur aura sélectionné l'une de ces options valides.Dans le cas dégénéré où les options sont simplement Y ou N (insensible à la casse), il y en a
y-or-n-p
.Les deux
read-char-choice
ety-or-n-p
sont rigides, et d' insister sur une réponse valable. Dans le premier cas, il doit être l'une des options que vous spécifiez (comme A, B ou C dans mon exemple), et dans ce dernier cas, il doit être Y ou N. Si l'utilisateur appuie sur Entrée ou sur toute autre touche, ley-or-n-p
demande à nouveau. Laread-char-choice
volonté restera assise là, silencieuse. Aucun des deux ne permet de renvoyer simplement une valeur par défaut. Pour obtenir ce comportement, je pense que vous devez créer votre propre interaction avecread-char
ouread-key
.D'après mon expérience, le problème avec
read-char
etread-key
seul, c'est que pendant qu'ils affichent l'invite dans le mini-tampon, le curseur reste dans le tampon d'édition principal. Cela désoriente l'utilisateur et est également différent du comportement deread-string
.Pour éviter cela, vous pouvez laisser la variable
cursor-in-echo-area
avant d'appelerread-key
pour afficher le curseur dans le mini-tampon.la source