Чтение одного события
Функции самого низкого уровня для ввода команд — это read-event, read-char, и read-char-exclusive.
Если вам нужна функция для чтения символа с помощью минибуфера, используйте read-char-from-minibuffer (см. Множественные запросы).
- Функция: read-event &optional prompt inherit-input-method seconds
-
Эта функция считывает и возвращает следующее событие ввода команд, ожидая, если необходимо, пока событие не станет доступным.
Возвращаемое событие может поступать непосредственно от пользователя или из макроса клавиатуры. Оно не декодируется системой кодирования ввода клавиатуры (см. Кодирование ввода-вывода терминала).
Если необязательный аргумент prompt не
nil, он должен быть строкой, отображаемой в области эха в качестве запроса. Если prompt равенnilили строке ‘""’,read-eventне отображает никакого сообщения, чтобы указать, что ожидается ввод; вместо этого он запрашивает, отображая описания событий, которые привели к текущей команде или которые были прочитаны текущей командой. См. Область эха.Если inherit-input-method не
nil, то текущий метод ввода (если есть) используется, чтобы сделать возможным ввод символа, не являющегося ASCII. В противном случае обработка методов ввода отключена для чтения этого события.Если
cursor-in-echo-areaнеnil, тоread-eventвременно перемещает курсор в область эха, в конец любого отображенного там сообщения. В противном случаеread-eventне перемещает курсор.Если seconds не
nil, он должен быть числом, определяющим максимальное время ожидания ввода в секундах. Если ввод не поступает в течение этого времени,read-eventпрекращает ожидание и возвращаетnil. Вещественное число seconds означает ожидание дробного количества секунд. Некоторые системы поддерживают только целое число секунд; в таких системах seconds округляется вниз. Если seconds равенnil,read-eventожидает столько, сколько необходимо, чтобы ввод прибыл.Если seconds равен
nil, Emacs считается неактивным во время ожидания пользовательского ввода. Таймеры бездействия — те, которые созданы с помощьюrun-with-idle-timer(см. Таймеры бездействия) — могут выполняться в течение этого периода. Однако, если seconds неnil, состояние бездействия остается неизменным. Если Emacs не бездействует при вызовеread-event, он остается не бездействующим на протяжении всей работыread-event; если Emacs бездействует (что может произойти, если вызов происходит внутри таймера бездействия), он остается бездействующим.Если
read-eventполучает событие, определенное как символ справки, то в некоторых случаяхread-eventобрабатывает событие непосредственно, не возвращая его. См. Функции справки. Некоторые другие события, называемые *специальными событиями*, также обрабатываются напрямую внутриread-event(см. Специальные события).Вот что происходит, если вы вызываете
read-eventи затем нажимаете функциональную клавишу «вправо»:(read-event) ⇒ right
- Функция: read-char &optional prompt inherit-input-method seconds
-
Эта функция считывает и возвращает событие ввода символа. Если пользователь генерирует событие, которое не является символом (например, щелчок мыши или событие функциональной клавиши),
read-charсообщает об ошибке. Аргументы работают так же, как и вread-event.Если событие имеет модификаторы, Emacs пытается их разрешить и вернуть код соответствующего символа. Например, если пользователь вводит C-a, функция возвращает 1, что является кодом ASCII символа ‘C-a’. Если некоторые модификаторы не могут быть отражены в коде символа,
read-charоставляет установленные в возвращаемом событии неразрешенные биты модификаторов. Например, если пользователь вводит C-M-a, функция возвращает 134217729, 8000001 в шестнадцатеричном формате, т.е. ‘C-a’ с установленным битом модификатора Meta. Это значение не является допустимым кодом символа: оно не проходит проверкуcharacterp(см. Коды символов). Используйтеevent-basic-type(см. Классификация событий) для восстановления кода символа с удаленными битами модификаторов; используйтеevent-modifiersдля проверки модификаторов в событии символа, возвращенномread-char.В первом примере ниже пользователь вводит символ 1 (ASCII код 49). Второй пример показывает определение макроса клавиатуры, который вызывает
read-charиз минибуфера с помощьюeval-expression.read-charсчитывает следующий символ макроса клавиатуры, который является 1. Затемeval-expressionотображает свое возвращаемое значение в области эха.(read-char) ⇒ 49;; We assume here you use M-: to evaluate this. (symbol-function 'foo) ⇒ "^[:(read-char)^M1"(execute-kbd-macro 'foo) -| 49 ⇒ nil
- Функция: read-char-exclusive &optional prompt inherit-input-method seconds
Эта функция считывает и возвращает событие ввода символа. Если пользователь генерирует событие, которое не является событием символа,
read-char-exclusiveигнорирует его и считывает другое событие, пока не получит символ. Аргументы работают так же, как и вread-event. Возвращаемое значение может включать биты модификаторов, как и вread-char.
Ни одна из вышеперечисленных функций не подавляет завершение работы.
- Переменная: num-nonmacro-input-events
Эта переменная содержит общее количество событий ввода, полученных до сих пор от терминала, не считая тех, которые генерируются макросами клавиатуры.
Мы подчеркиваем, что, в отличие от read-key-sequence, функции read-event, read-char, и read-char-exclusive не выполняют преобразования, описанные в Картах перевода. Если вы хотите прочитать одну клавишу, учитывая эти преобразования (например, для чтения Функциональных клавиш в терминале или Событий мыши от xterm-mouse-mode), используйте функцию read-key.
- Функция: read-key &optional prompt disable-fallbacks
-
Эта функция считывает одну клавишу. Она находится между
read-key-sequenceиread-event. В отличие от первой, она считывает одну клавишу, а не последовательность клавиш. В отличие от второй, она не возвращает исходное событие, а декодирует и преобразует пользовательский ввод в соответствии сinput-decode-map,local-function-key-map, иkey-translation-map(см. Карты перевода).Аргумент prompt является либо строкой, которая будет отображаться в области эха в качестве запроса, либо
nil, что означает, что запрос не отображать.Если аргумент disable-fallbacks не
nil, то обычная логика возврата для несвязанных клавиш вread-key-sequenceне применяется. Это означает, что события нажатия кнопки мыши и события множественного клика не будут отбрасываться, иlocal-function-key-mapиkey-translation-mapне будут применяться. Еслиnilили не указано, единственный возвращаемый вариант — понижение регистра последнего события.
- Функция: read-char-choice prompt chars &optional inhibit-quit
Эта функция использует
read-keyдля чтения и возврата одного символа. Она игнорирует любой ввод, который не является членом chars, списка разрешенных символов. Необязательно, она также будет игнорировать события завершения ввода с клавиатуры, пока ожидает действительный ввод. Если вы свяжетеhelp-form(см. Функции справки) с не-nilзначением при вызовеread-char-choice, то нажатиеhelp-charприведет к вычислениюhelp-formи отображению результата. Затем она продолжает ожидать действительный ввод символа или завершение ввода с клавиатуры.
- Функция: read-multiple-choice prompt choices &optional help-string
-
Задать пользователю вопрос с множественным выбором. prompt должна быть строкой, которая будет отображаться в качестве запроса.
choices — это список пар, где первый элемент каждой пары — символ, который нужно ввести, второй элемент — короткое имя записи, которое будет отображаться при запросе (если есть место, оно может быть сокращено), а третий, необязательный элемент — более подробное объяснение, которое будет отображено в буфере справки, если пользователь запросит больше помощи.
Если необязательный аргумент help-string не
nil, он должен быть строкой с более подробным описанием всех вариантов. Он будет отображен в буфере справки вместо стандартного автоматически генерируемого описания, когда пользователь набирает ?.Возвращаемое значение — соответствующее значение из choices.
(read-multiple-choice "Continue connecting?" '((?a "always" "Accept certificate for this and future sessions.") (?s "session only" "Accept certificate this session only.") (?n "no" "Refuse to use certificate, close connection.")))
Лицо
read-multiple-choice-faceиспользуется для выделения соответствующих символов в строке имени на графических терминалах.
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/Reading-One-Event.html