Spec-Zone.ru › Elisp

Задавание вопросов с множественным выбором

В этом разделе описываются средства для задавания пользователю более сложных вопросов или нескольких похожих вопросов.

Когда вам нужно задать серию похожих вопросов, таких как «Вы хотите сохранить этот буфер?» для каждого буфера по очереди, вы должны использовать map-y-or-n-p для запроса набора вопросов, а не задавать каждый вопрос индивидуально. Это предоставляет пользователю определенные удобные возможности, такие как возможность ответить на всю серию сразу.

Функция: map-y-or-n-p список обработчиков &опционально список_помощи список_действий без_курсора_в_эхо_области

Эта функция задаёт пользователю серию вопросов, считывая ответ из области эхо в виде одиночного символа для каждого вопроса.

Значение список определяет объекты, о которых нужно задавать вопросы. Это должен быть либо список объектов, либо функция-генератор. Если это функция, она будет вызвана без аргументов и должна вернуть следующий объект для запроса или nil, что означает остановку задавания вопросов.

Аргумент обработчик определяет, как задавать каждый вопрос. Если обработчик является строкой, текст вопроса вычисляется следующим образом:

(format prompter object)

где объект — это следующий объект для запроса (полученный из список). См. Форматирование строк для получения дополнительной информации о format.

Если обработчик не является строкой, он должен быть функцией одного аргумента (объекта для запроса) и должен возвращать текст вопроса для этого объекта. Если значение обработчик возвращает строку, это текст вопроса, который нужно задать пользователю. Функция также может вернуть t, что означает действие с этим объектом без запроса у пользователя, или nil, что означает пропуск этого объекта.

Аргумент актор определяет, как действовать на объектах, на которые пользователь ответил «да». Это должна быть функция одного аргумента, которая будет вызываться с каждым объектом из список, на который пользователь ответил «да».

Если задан аргумент помощь, он должен быть списком такого вида:

(singular plural action)

где единственное_число — это строка, содержащая существительное в единственном числе, описывающее отдельный объект, над которым должно быть произведено действие, множественное_число — соответствующее существительное во множественном числе, а действие — переходный глагол, описывающий, что актор делает с объектами.

Если вы не укажете помощь, по умолчанию будет использоваться список ("object" "objects" "act on").

Каждый раз при задавании вопроса пользователь может ответить следующим образом:

y, Y или SPC

произвести действие над объектом

n, N или DEL

пропустить объект

!

произвести действие над всеми последующими объектами

ESC или q

выход (пропустить все последующие объекты)

. (точка)

выполнить действие над объектом и затем выйти

C-h

получить помощь

Это те же ответы, что и query-replace принимает. Карта клавиш query-replace-map определяет их значение для map-y-or-n-p, а также для query-replace; см. Поиск и замена.

Вы можете использовать список_действий для определения дополнительных возможных ответов и их значений. Если он предоставлен, список_действий должен быть списком пар, элементы которого имеют вид (char function help). Каждый элемент списка определяет дополнительный ответ. В каждом элементе символ — символ (ответ); функция — функция одного аргумента (объекта из список); и помощь — строка. Когда пользователь отвечает символом символ, map-y-or-n-p вызывает функция. Если она возвращает не-nil, объект считается обработанным, и map-y-or-n-p переходит к следующему объекту в список. Если она возвращает nil, запрос повторяется для того же объекта.

В обычном режиме map-y-or-n-p связывает cursor-in-echo-area при задавании вопросов. Но если без_курсора_в_эхо_области не является не-nil, это не делается.

Если map-y-or-n-p вызывается в команде, которая была вызвана с помощью мыши — то есть, если last-nonmenu-event (см. Информация о цикле команд) равно либо nil, либо списку — то она использует диалоговое окно или всплывающее меню для запроса. В этом случае не используются ввод с клавиатуры или область эхо. Вы можете принудительно использовать мышь или ввод с клавиатуры, связав last-nonmenu-event с подходящим значением около вызова.

Значение возвращаемое map-y-or-n-p — это количество обработанных объектов.

Если вам нужно задать пользователю вопрос, который может иметь более 2 ответов, используйте read-answer.

Функция: read-answer вопрос ответы

Эта функция предлагает пользователю текст в вопрос, который должен заканчиваться символом ‘SPC’. Функция включает в запрос возможные ответы в ответы, добавляя их в конец вопрос. Возможные ответы предоставляются в ответы в виде списка пар следующего вида:

(long-answer short-answer help-message)

где полный_ответ — это полный текст ответа пользователя, строка; краткий_ответ — краткая форма того же ответа, один символ или функциональная клавиша; и сообщение_помощи — текст, описывающий значение ответа. Если переменная read-answer-short не является не-nil, запрос будет показывать короткие варианты ответов, и ожидается, что пользователь введёт один символ/клавишу, показанную в запросе; в противном случае запрос будет показывать длинные варианты ответов, и ожидается, что пользователь введёт полный текст одного из ответов и закончит, нажав RET. Если use-dialog-box не равно не-nil, и эта функция была вызвана событиями мыши, то вопрос и ответы будут отображены в диалоговом окне графического интерфейса.

Функция возвращает текст полный_ответ, выбранный пользователем, независимо от того, были ли показаны длинные или короткие ответы в запросе и введены пользователем.

Вот пример использования этой функции:

(let ((read-answer-short t))
  (read-answer "Foo "
     '(("yes"  ?y "perform the action")
       ("no"   ?n "skip to the next")
       ("all"  ?! "perform for the rest without more questions")
       ("help" ?h "show help")
       ("quit" ?q "exit"))))
Функция: read-char-from-minibuffer запрос &опционально символы история

Эта функция использует мини-буфер для считывания и возвращения одного символа. Дополнительно, она игнорирует любой ввод, который не является членом символы, списка допустимых символов. Аргумент история определяет символ списка истории для использования; если он опущен или nil, эта функция не использует историю.

Если вы свяжете help-form (см. Функции помощи) с ненулевым значением при вызове read-char-from-minibuffer, нажатие help-char заставит её оценить help-form и отобразить результат.

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/Multiple-Queries.html

Spec-Zone.ru

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