В этом разделе описывается базовый интерфейс для чтения из minibuffer с завершением.
Эта функция считывает строку в minibuffer, помогая пользователю, предоставляя завершение. Она активирует minibuffer с подсказкой prompt, которая должна быть строкой.
Фактическое завершение выполняется путем передачи таблицы завершения
collection и предиката завершения predicate
функции try-completion (см. Базовые функции завершения).
Это происходит в определенных командах, привязанных в локальных
картусах клавиш, используемых для завершения. Некоторые из этих
команд также вызывают test-completion. Таким образом,
если predicate не является nil, он
должен быть совместим с collection и
completion-ignore-case.
См. Определение test-completion.
См. Программируемое завершение, для подробных требований, когда collection является функцией.
Значение необязательного аргумента require-match определяет, как пользователь может выйти из minibuffer:
nil, обычные команды выхода из minibuffer
работают независимо от ввода в minibuffer.
t, обычные команды выхода из minibuffer
не выйдут, если ввод не завершается элементом collection.
confirm, пользователь может выйти с
любым вводом, но ему будет задан вопрос о подтверждении, если ввод
не является элементом collection.
confirm-after-completion, пользователь
может выйти с любым вводом, но ему будет задан вопрос о подтверждении,
если предыдущая команда была командой завершения (т.е. одной из
команд в minibuffer-confirm-exit-commands) и
результирующий ввод не является элементом collection.
См. Команды Minibuffer,
выполняющие завершение.
nil значение,
если ввод приемлем.
t, за исключением того, что команды выхода не
выйдут, если выполняется завершение.
Однако пустой ввод всегда разрешен, независимо от значения
require-match; в этом случае completing-read
возвращает первый элемент default, если это список;
"", если default равен nil;
или default. Строка или строки в default
также доступны пользователю через команды истории (см. Команды Minibuffer). Кроме того, кандидаты
завершения добавляются в «будущую историю», когда значения в
default исчерпаны с помощью M-n; см.
minibuffer-default-add-function.
Функция completing-read использует
minibuffer-local-completion-map в качестве карты
клавиш, если require-match равен nil,
и использует minibuffer-local-must-match-map, если
require-match не равен nil.
См. Команды Minibuffer,
выполняющие завершение.
Аргумент history указывает, какую переменную списка
истории использовать для сохранения ввода и для команд истории
minibuffer. По умолчанию это minibuffer-history. Если
history является символом t, история не
записывается. См. История
minibuffer.
Аргумент initial в основном устарел; мы рекомендуем
использовать не-nil значение только в сочетании с
указанием ячейки cons для history. См. Начальный ввод. Для начального ввода используйте
вместо этого default.
Если аргумент inherit-input-method не равен nil, то minibuffer наследует текущий метод ввода (см.
Методы ввода) и настройку
enable-multibyte-characters (см. Представления текста) из того буфера, который
был активен до входа в minibuffer.
Если переменная completion-ignore-case не равна
nil, завершение игнорирует регистр при сравнении ввода
с возможными совпадениями. См. Базовые
функции завершения. В этом режиме работы predicate
также должен игнорировать регистр, иначе вы получите неожиданные результаты.
Вот пример использования completing-read:
(completing-read
"Complete a foo: "
'(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
nil t "fo")
;; После вычисления предыдущего выражения, ;; в minibuffer появится следующее: ---------- Buffer: Minibuffer ---------- Complete a foo: fo∗ ---------- Buffer: Minibuffer ----------
Если пользователь затем вводит DEL DEL b RET,
completing-read возвращает barfoo.
Функция completing-read привязывает переменные для
передачи информации командам, которые фактически выполняют завершение.
Они описаны в следующем разделе.
Значение этой переменной должно быть функцией, которую
completing-read вызывает для выполнения своей работы. Она
должна принимать те же аргументы, что и completing-read.
Эту функцию можно привязать к другой функции, чтобы полностью переопределить
обычное поведение completing-read.
Если вам нужно запросить у пользователя несколько строк, например, несколько
элементов списка или несколько параметров (например, пользователь, хост и
порт) соединения, вы можете использовать completing-read-multiple.
Он позволяет вводить несколько строк, разделенных строкой-разделителем (по
умолчанию, табуляция и запятые; настройте crm-separator,
чтобы изменить это), и обеспечивает завершение для каждой отдельной строки,
которую вводит пользователь. Он возвращает введенные строки в виде списка.