Ketika bagian dari defun
,
(interactive "c(C)hoose (A)n (O)ption")
akan meminta pengguna untuk satu karakter; RET
tidak diperlukan. Bagaimana saya bisa meniru perilaku membaca ini tanpa perlu interactive
?
minibuffer
interactive
Sean Allred
sumber
sumber
read-char-choice
Selain cara bawaan untuk membaca peristiwa tunggal seperti
read-char
danread-char-exclusive
, berikut adalah opsi untuk membaca karakter tunggal, tetapi juga menentukan karakter mana yang dapat dimasukkan:Jadi semua yang berikut ini akan menerima "C", "A", atau "O":
Dan inilah contoh cara untuk mengulang masukan yang benar ke dalam
response
variabel:sumber
read-char-choice
yang membaca salah satu dari serangkaian karakter yang diberikan.call-interactively
adalah apa yang menginterpretasikan(interactive "cPROMPT")
spesifikasi,c
opsi dikirim keread-char
. Oleh karena itu, berikut ini harus berfungsi dalam konteks non-interaktif:sumber
Pertanyaan itu telah dijawab sejak lama, tetapi jawaban tambahan ini dapat memberikan bantuan kepada pencari lain.
read-char-choice
memungkinkan Anda menentukan daftar pilihan. Fn tidak akan kembali sampai pengguna memilih salah satu opsi yang valid.Dalam kasus degenerasi di mana opsi hanya Y atau N (case insenstive), ada
y-or-n-p
.Baik
read-char-choice
dany-or-n-p
kaku, dan menuntut jawaban yang valid. Dalam kasus sebelumnya, itu harus salah satu opsi yang Anda tentukan (seperti A, B atau C dalam contoh saya), dan dalam kasus terakhir, itu harus Y atau N. Jika pengguna menekan tombol enter atau lainnya,y-or-n-p
akan ditanyakan lagi. Theread-char-choice
hanya akan duduk di sana, diam. Tidak ada yang menyediakan cara untuk hanya mengembalikan default. Untuk mendapatkan perilaku itu, saya pikir Anda harus membangun interaksi Anda sendiri denganread-char
atauread-key
.Dalam pengalaman saya, masalah dengan
read-char
danread-key
sendirian, adalah bahwa sementara mereka menampilkan prompt di minibuffer, kursor tetap berada di buffer pengeditan utama. Ini membingungkan pengguna, dan juga tidak seperti perilakuread-string
.Untuk menghindari ITU, Anda dapat membiarkan variabel
cursor-in-echo-area
sebelum memanggilread-key
untuk menampilkan kursor di minibuffer.sumber