Чтение текстовых строк с помощью минибуфера
Наиболее базовая функция для ввода в минибуфере — read-from-minibuffer, которая может быть использована для чтения либо строки, либо Lisp-объекта в текстовой форме. Функция read-regexp используется для чтения регулярных выражений (см. Регулярные выражения), которые представляют собой особый вид строк. Также существуют специализированные функции для чтения команд, переменных, имён файлов и т. д. (см. Заполнение).
В большинстве случаев вы не должны вызывать функции ввода минибуфера внутри Lisp-функции. Вместо этого весь ввод в минибуфер должен быть частью чтения аргументов команды, в спецификации interactive. См. Определение команд.
- Функция: read-from-minibuffer prompt &optional initial keymap read history default inherit-input-method
-
Эта функция — наиболее общий способ получения ввода из минибуфера. По умолчанию она принимает произвольный текст и возвращает его как строку; однако, если read не
nil, она используетreadдля преобразования текста в Lisp-объект (см. Функции ввода).Первое, что делает эта функция, — активирует минибуфер и отображает его с prompt (которое должно быть строкой) в качестве подсказки. Затем пользователь может редактировать текст в минибуфере.
Когда пользователь вводит команду для выхода из минибуфера,
read-from-minibufferстроит возвращаемое значение из текста в минибуфере. Обычно она возвращает строку, содержащую этот текст. Однако, если read неnil,read-from-minibufferсчитывает текст и возвращает полученный Lisp-объект, не вычисляя его. (См. Функции ввода для информации о чтении).Аргумент default указывает значения по умолчанию, доступные через команды истории. Он должен быть строкой, списком строк или
nil. Строка или строки становятся «будущей историей» минибуфера, доступной пользователю с помощью M-n.Если read не
nil, то default также используется как вход дляread, если пользователь вводит пустой ввод. Если default является списком строк, используется первая строка. Если default —nil, пустой ввод приводит к ошибкеend-of-file. Однако в обычном случае (где read —nil),read-from-minibufferигнорирует default при вводе пустого ввода и возвращает пустую строку,"". В этом отношении она отличается от всех других функций ввода минибуфера в этой главе.Если keymap не
nil, этот keymap используется в качестве локального keymap в минибуфере. Если keymap опущен илиnil, значениеminibuffer-local-mapиспользуется в качестве keymap. Указание keymap — наиболее важный способ настройки минибуфера для различных приложений, таких как автодополнение.Аргумент history указывает переменную списка истории для сохранения ввода и для команд истории, используемых в минибуфере. По умолчанию он равен
minibuffer-history. Если history — символt, история не записывается. Вы также можете указать начальную позицию в списке истории. См. История минибуфера.Если переменная
minibuffer-allow-text-propertiesнеnil, то возвращаемая строка включает в себя любые текстовые свойства, присутствующие в минибуфере. В противном случае все текстовые свойства удаляются при возвращении значения.Текстовые свойства в
minibuffer-prompt-propertiesприменяются к подсказке. По умолчанию этот список свойств определяет используемый стиль для подсказки. Этот стиль, если он есть, применяется к концу списка стилей и объединяется перед отображением.Если пользователь хочет полностью контролировать вид подсказки, наиболее удобный способ — указать стиль
defaultв конце всех списков стилей. Например:(read-from-minibuffer (concat (propertize "Bold" 'face '(bold default)) (propertize " and normal: " 'face '(default))))
Если аргумент inherit-input-method не
nil, то минибуфер наследует текущий метод ввода (см. Методы ввода) и установкуenable-multibyte-characters(см. Представления текста) из того буфера, который был активным до входа в минибуфер.Использование initial в основном устарело; мы рекомендуем использовать ненулевое значение только в сочетании с указанием ячейки cons для history. См. Начальный ввод.
- Функция: read-string prompt &optional initial history default inherit-input-method
-
Эта функция считывает строку из минибуфера и возвращает её. Аргументы prompt, initial, history и inherit-input-method используются так же, как в
read-from-minibuffer. Используемый keymap —minibuffer-local-map.Необязательный аргумент default используется так же, как в
read-from-minibuffer, за исключением того, что, если он неnil, он также задаёт значение по умолчанию для возврата, если пользователь вводит пустой ввод. Как и вread-from-minibuffer, он должен быть строкой, списком строк илиnil, что эквивалентно пустой строке. Если default — строка, эта строка является значением по умолчанию. Если это список строк, первой строкой является значение по умолчанию. (Все эти строки доступны пользователю в «будущей истории минибуфера».)Эта функция работает, вызывая функцию
read-from-minibuffer:(read-string prompt initial history default inherit) ≡ (let ((value (read-from-minibuffer prompt initial nil nil history default inherit))) (if (and (equal value "") default) (if (consp default) (car default) default) value))
- Функция: read-regexp prompt &optional defaults history
-
Эта функция считывает регулярное выражение как строку из минибуфера и возвращает его. Если строка подсказки минибуфера prompt не заканчивается на ‘:’ (за которым следует необязательное пробельное пространство), функция добавляет ‘: ’ в конец, перед значением по умолчанию (см. ниже), если оно не пустое.
Необязательный аргумент defaults управляет значением по умолчанию, которое возвращается при вводе пустого ввода, и должен быть одним из: строкой;
nil, что эквивалентно пустой строке; списком строк; или символом.Если defaults — символ,
read-regexpобращается к значению переменнойread-regexp-defaults-function(см. ниже), и если оно неnil, использует его вместо defaults. В этом случае значение должно быть либо:- -
regexp-history-last, что означает использование первого элемента соответствующего списка истории минибуфера (см. ниже). - - Функцией без аргументов, значение которой (которое должно быть
nil, строкой или списком строк) становится значением defaults.
read-regexpтеперь гарантирует, что результатом обработки defaults является список (т. е. если значение —nilили строка, оно преобразуется в список из одного элемента). К этому спискуread-regexpзатем добавляются несколько потенциально полезных кандидатов на ввод. Это:- - Слово или символ в позиции курсора.
- - Последнее регулярное выражение, используемое в инкрементальном поиске.
- - Последняя строка, используемая в инкрементальном поиске.
- - Последняя строка или шаблон, используемые в командах замены запросов.
Функция теперь имеет список регулярных выражений, которые она передаёт в
read-from-minibufferдля получения ввода пользователя. Первый элемент списка — результат по умолчанию в случае пустого ввода. Все элементы списка доступны пользователю как список «будущей истории минибуфера» (см. будущий список в Руководстве по GNU Emacs).Необязательный аргумент history, если он не
nil, — символ, указывающий на список истории минибуфера для использования (см. История минибуфера). Если он опущен илиnil, список истории по умолчанию —regexp-history. - -
- Пользовательский параметр: read-regexp-defaults-function
-
Функция
read-regexpможет использовать значение этой переменной для определения своего списка регулярных выражений по умолчанию. Если оно неnil, значение этой переменной должно быть либо:- - Символом
regexp-history-last. - - Функцией без аргументов, которая возвращает либо
nil, строку или список строк.
См.
read-regexpвыше для получения подробностей о том, как используются эти значения. - - Символом
- Переменная: minibuffer-allow-text-properties
-
Если эта переменная
nil, тоread-from-minibufferиread-stringудаляют все текстовые свойства из ввода минибуфера перед его возвратом. Однакоread-no-blanks-input(см. ниже), а такжеread-minibufferи связанные с ним функции (см. Чтение Lisp-объектов с помощью минибуфера), и все функции, которые выполняют ввод минибуфера с автодополнением, удаляют свойствоfaceбезусловно, независимо от значения этой переменной.Если эта переменная не
nil, большинство текстовых свойств строк из таблицы автодополнения сохраняются — но только на той части строк, которая была дополнена.(let ((minibuffer-allow-text-properties t)) (completing-read "String: " (list (propertize "foobar" 'data 'zot)))) => #("foobar" 3 6 (data zot))В этом примере пользователь ввёл ‘foo’ и нажал клавишу TAB, поэтому текстовые свойства сохраняются только на последних трёх символах.
- Переменная: minibuffer-local-map
-
Это локальный keymap по умолчанию для чтения из минибуфера. По умолчанию он создаёт следующие привязки:
- C-j
-
exit-minibuffer - RET
-
exit-minibuffer - M-<
-
minibuffer-beginning-of-buffer - C-g
-
abort-recursive-edit - M-n
- DOWN
-
next-history-element - M-p
- UP
-
previous-history-element - M-s
-
next-matching-history-element - M-r
-
previous-matching-history-element
- Функция: read-no-blanks-input prompt &optional initial inherit-input-method
-
Эта функция считывает строку из минибуфера, но не допускает пробельных символов в качестве части входных данных: вместо этого эти символы завершают ввод. Аргументы prompt, initial и inherit-input-method используются так же, как в
read-from-minibuffer.Это упрощённый интерфейс для функции
read-from-minibuffer, и она передаёт значение ключевой картыminibuffer-local-ns-mapв качестве аргумента keymap для этой функции. Поскольку ключевая картаminibuffer-local-ns-mapне переопределяет C-q, возможно вставить пробел в строку, поместив его в кавычки.Эта функция отбрасывает свойства текста, независимо от значения
minibuffer-allow-text-properties.(read-no-blanks-input prompt initial) ≡ (let (minibuffer-allow-text-properties) (read-from-minibuffer prompt initial minibuffer-local-ns-map))
- Переменная: minibuffer-local-ns-map
-
Эта встроенная переменная — это ключевая карта, используемая в качестве локальной ключевой карты минибуфера в функции
read-no-blanks-input. По умолчанию она устанавливает следующие привязки, помимо тех, что определены вminibuffer-local-map:- SPC
-
exit-minibuffer - TAB
-
exit-minibuffer - ?
-
self-insert-and-exit
- Функция: format-prompt prompt default &rest format-args
-
Форматирует prompt со значением по умолчанию default в соответствии с переменной
minibuffer-default-prompt-format.minibuffer-default-prompt-format— это строка форматирования (по умолчанию ‘" (default %s)"’), которая определяет, как форматируется часть «по умолчанию» в подсказках, таких как ‘"Локальное имя файла (по умолчанию somefile): "’.Для того, чтобы пользователи могли настроить отображение, код, который запрашивает у пользователя значение (и имеет значение по умолчанию), должен выглядеть примерно так:
(read-file-name (format-prompt "Local filename" file) nil file)
Если format-args равно
nil, prompt используется как строка. Если format-args неnil, prompt используется как строка управления форматированием, и prompt и format-args передаются вformat(см. Форматирование строк).minibuffer-default-prompt-formatможет быть ‘""’, в этом случае значения по умолчанию не отображаются.Если default равно
nil, значение по умолчанию отсутствует, и, следовательно, строка «значения по умолчанию» не включена в результирующее значение. Если default — это список, не являющийсяnil, используется первый элемент списка в подсказке.
- Переменная: read-minibuffer-restore-windows
-
Если этот параметр не
nil(по умолчанию), при выходе из ввода в минибуфере будут восстановлены конфигурации окон фрейма, из которого был вызван минибуфер, и, если он отличается, фрейма, которому принадлежит окно минибуфера. Это означает, что если, например, пользователь разделяет окно во время получения ввода из минибуфера в том же фрейме, это разделение будет отменено при выходе из минибуфера.Если этот параметр равен
nil, такие восстановления не выполняются. Следовательно, разделение окна, упомянутое выше, сохранится после выхода из минибуфера.
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/Text-from-Minibuffer.html