Завершение и минибуфер
В этом разделе описывается базовый интерфейс чтения из минибуфера с завершением.
- Функция: completing-read prompt collection &optional predicate require-match initial history default inherit-input-method
-
Эта функция считывает строку в минибуфере, помогая пользователю с помощью завершения. Она активирует минибуфер с запросом prompt, который должен быть строкой.
Фактическое завершение выполняется путем передачи таблицы завершения collection и предиката завершения predicate функции
try-completion(см. Базовое завершение). Это происходит в определенных командах, связанных в локальных картах клавиш, используемых для завершения. Некоторые из этих команд также вызываютtest-completion. Таким образом, если predicate неnil, он должен быть совместим с collection иcompletion-ignore-case. См. Определение test-completion.См. Программируемое завершение для подробных требований, когда collection является функцией.
Значение необязательного аргумента require-match определяет, как пользователь может выйти из минибуфера:
- Если
nil, обычные команды выхода из минибуфера работают независимо от ввода в минибуфере. - Если
t, обычные команды выхода из минибуфера не выйдут, пока ввод не завершится элементом из collection. - Если
confirm, пользователь может выйти с любым вводом, но его попросят подтвердить, если ввод не является элементом из collection. - Если
confirm-after-completion, пользователь может выйти с любым вводом, но его попросят подтвердить, если предыдущая команда была командой завершения (т. е., одной из команд вminibuffer-confirm-exit-commands) и результат ввода не является элементом из collection. См. Команды завершения. - Любое другое значение require-match ведет себя как
t, за исключением того, что команды выхода не выйдут, если будет выполнено завершение.
Однако пустой ввод всегда разрешен, независимо от значения require-match; в этом случае
completing-readвозвращает первый элемент из default, если это список;"", если default являетсяnil; или default. Строка или строки в default также доступны пользователю через команды истории.Функция
completing-readиспользуетminibuffer-local-completion-mapв качестве карты клавиш, если require-match равноnil, и используетminibuffer-local-must-match-map, если require-match не равноnil. См. Команды завершения.Аргумент history указывает, какую переменную списка истории использовать для сохранения ввода и для команд истории минибуфера. По умолчанию используется
minibuffer-history. Если history является символомt, история не записывается. См. История минибуфера.Аргумент initial в основном устарел; мы рекомендуем использовать значение, отличное от
nil, только в сочетании с указанием ячейки cons для history. См. Начальный ввод. Для ввода по умолчанию используйте default вместо этого.Если аргумент inherit-input-method не равен
nil, то минибуфер наследует текущий метод ввода (см. Методы ввода) и настройкуenable-multibyte-characters(см. Представления текста) из того буфера, который был активен до входа в минибуфер.Если переменная
completion-ignore-caseне равнаnil, завершение игнорирует регистр при сравнении ввода с возможными совпадениями. См. Базовое завершение. В этом режиме работы predicate также должен игнорировать регистр, иначе вы получите неожиданные результаты.Вот пример использования
completing-read:(completing-read "Complete a foo: " '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) nil t "fo");; After evaluation of the preceding expression, ;; the following appears in the minibuffer: ---------- Buffer: Minibuffer ---------- Complete a foo: fo∗ ---------- Buffer: Minibuffer ----------
Если пользователь затем набирает DEL DEL b RET,
completing-readвозвращаетbarfoo.Функция
completing-readсвязывает переменные, чтобы передавать информацию командам, которые фактически выполняют завершение. Они описаны в следующем разделе. - Если
- Переменная: completing-read-function
Значение этой переменной должно быть функцией, которая вызывается
completing-readдля выполнения своей работы. Она должна принимать те же аргументы, что иcompleting-read. Это можно привязать к другой функции, чтобы полностью переопределить обычное поведениеcompleting-read.
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/Minibuffer-Completion.html