Запросы «Да/Нет»
В этом разделе описываются функции, используемые для задавания пользователю вопроса «Да/Нет». Функция y-or-n-p может быть отвечена одним символом; она полезна для вопросов, когда непреднамеренный неправильный ответ не повлечёт серьёзных последствий. Функция yes-or-no-p подходит для более важных вопросов, так как для ответа требуется три или четыре символа.
Если любая из этих функций вызывается в команде, запущенной с помощью мыши — точнее, если last-nonmenu-event (см. Информацию о цикле команд) равна nil или списку — то она использует диалоговое окно или всплывающее меню для задавания вопроса. В противном случае используется ввод с клавиатуры. Вы можете принудительно использовать ввод с мыши или клавиатуры, связав last-nonmenu-event с подходящим значением около вызова.
Обе функции yes-or-no-p и y-or-n-p используют минибуфер.
- Функция: y-or-n-p запрос
-
Эта функция задаёт пользователю вопрос, ожидая ввода в минибуфере. Она возвращает
tесли пользователь вводит y,nilесли пользователь вводит n. Эта функция также принимает ПРОБЕЛ для обозначения «да» и DEL для обозначения «нет». Она принимает C-] и C-g для выхода, поскольку вопрос использует минибуфер, и поэтому пользователь может попытаться использовать C-] для выхода. Ответ представляет собой один символ без необходимости нажатия ВВОД для завершения. Регистр символов не учитывается.«Задавание вопроса» означает вывод запрос в минибуфере, за которым следует строка '(y или n) '. Если ввод не соответствует ожидаемым ответам (y, n, ПРОБЕЛ, DEL или что-то, вызывающее выход), функция отвечает 'Пожалуйста, ответьте y или n.' и повторяет запрос.
Эта функция фактически использует минибуфер, но не позволяет редактировать ответ. Курсор перемещается в минибуфер во время задавания вопроса.
Значения ответов и их значения, даже ‘y’ и ‘n’, не жёстко заданы и определяются картой клавиш
query-replace-map(см. Поиск и замена). В частности, если пользователь вводит специальные ответыrecenter,scroll-up,scroll-down,scroll-other-window, илиscroll-other-window-down(соответственно, привязанные к C-l, C-v, M-v, C-M-v и C-M-S-v вquery-replace-map), эта функция выполняет указанную операцию центрирования или прокрутки окна и задаёт вопрос снова.Если вы привяжете
help-form(см. Функции справки) к значению, отличному отnilпри вызовеy-or-n-p, то нажатиеhelp-charвызовет оценкуhelp-formи отображение результата.help-charавтоматически добавляется к запрос.
- Функция: y-or-n-p-with-timeout запрос секунды значение_по_умолчанию
Как и
y-or-n-p, за исключением того, что если пользователь не даст ответа в течение секунды секунд, функция прекратит ожидание и вернёт значение_по_умолчанию. Она работает, устанавливая таймер; см. Таймеры. Аргумент секунды должен быть числом.
- Функция: yes-or-no-p запрос
-
Эта функция задаёт пользователю вопрос, ожидая ввода в минибуфере. Она возвращает
tесли пользователь введёт ‘да’,nilесли пользователь введёт ‘нет’. Пользователь должен нажать ВВОД для завершения ответа. Регистр символов не учитывается.yes-or-no-pначинается с отображения запрос в минибуфере, за которым следует ‘(да или нет) ’. Пользователь должен ввести один из ожидаемых ответов; в противном случае функция отвечает ‘Пожалуйста, ответьте «да» или «нет».’, ожидает около двух секунд и повторяет запрос.yes-or-no-pтребует от пользователя больше действий, чемy-or-n-p, и подходит для более важных решений.Вот пример:
(yes-or-no-p "Do you really want to remove everything?") ;; After evaluation of the preceding expression, ;; the following prompt appears, ;; with an empty minibuffer:
---------- Buffer: minibuffer ---------- Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------
Если пользователь сначала введёт y ВВОД, что является неверным, поскольку эта функция требует всего слова ‘да’, она ответит, отобразив эти подсказки с небольшой паузой между ними:
---------- Buffer: minibuffer ---------- Please answer yes or no. Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Yes_002dor_002dNo-Queries.html