Spec-Zone.ru › Elisp

Запросы «Да/Нет»

В этом разделе описываются функции, используемые для задавания пользователю вопроса «Да/Нет». Функция 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API