В этом разделе описываются более высокоуровневые удобные функции для чтения определенных типов имен с автодополнением.
В большинстве случаев вы не должны вызывать эти функции в середине
функции Lisp. По возможности, выполняйте весь ввод в minibuffer как часть
чтения аргументов для команды, в спецификации interactive.
См. Определение команд.
Эта функция считывает имя буфера и возвращает его в виде строки.
Она запрашивает ввод с помощью prompt. Аргумент default
является значением по умолчанию, которое будет использовано, если пользователь
выйдет с пустым minibuffer. Если он не nil, то это должна быть
строка, список строк или буфер. Если это список, значение по умолчанию — это
первый элемент этого списка. Он упоминается в запросе, но не вставляется в
minibuffer в качестве начального ввода.
Аргумент prompt должен быть строкой, оканчивающейся двоеточием и
пробелом. Если default не nil, функция вставляет
его в prompt перед двоеточием, чтобы следовать соглашению для
чтения из minibuffer со значением по умолчанию (см. Советы по программированию Emacs).
Необязательный аргумент require-match имеет то же значение, что и в
completing-read. См. Автодополнение и minibuffer.
Необязательный аргумент predicate, если он не nil,
указывает на функцию для фильтрации буферов, которые должны рассматриваться: функция
вызывается с каждым потенциальным кандидатом в качестве аргумента и должна вернуть
nil, чтобы отклонить кандидата, или не nil, чтобы
принять его.
В следующем примере пользователь вводит «minibuffer.t», а затем
нажимает RET. Аргумент require-match равен
t, и единственное имя буфера, начинающееся с заданного ввода, —
«minibuffer.texi», поэтому это имя является значением.
(read-buffer "Buffer name: " "foo" t)
;; После вычисления предыдущего выражения ;; появляется следующий запрос ;; с пустым minibuffer:
---------- Buffer: Minibuffer ---------- Buffer name (default foo): ∗ ---------- Buffer: Minibuffer ----------
;; Пользователь вводит minibuffer.t RET.
⇒ "minibuffer.texi"
Эта переменная, если она не nil, указывает функцию для
чтения имен буферов. read-buffer вызывает эту функцию вместо
выполнения своей обычной работы, передавая ей те же аргументы, которые передаются
в read-buffer.
Если эта переменная не nil, read-buffer
игнорирует регистр при выполнении автодополнения при чтении имени буфера.
Эта функция считывает имя команды и возвращает его в виде символа Lisp.
Аргумент prompt используется так же, как в
read-from-minibuffer. Напомним, что команда — это все, для чего
commandp возвращает t, а имя команды — это символ, для
которого commandp возвращает t. См. Интерактивный вызов.
Аргумент default указывает, что вернуть, если пользователь вводит
пустой ввод. Это может быть символ, строка или список строк. Если это строка,
read-command интернирует ее перед возвратом. Если это список,
read-command интернирует первый элемент этого списка. Если default
равен nil, это означает, что не было указано значение по
умолчанию; тогда, если пользователь вводит пустой ввод, возвращаемое значение
— это (intern ""), то есть символ, чье имя — пустая строка,
и чье печатное представление — ## (см. Тип символа).
(read-command "Command name? ")
;; После вычисления предыдущего выражения ;; появляется следующий запрос с пустым minibuffer:
---------- Buffer: Minibuffer ---------- Command name? ---------- Buffer: Minibuffer ----------
Если пользователь вводит forward-c RET, то эта функция
возвращает forward-char.
Функция read-command является упрощенным интерфейсом к
completing-read. Она использует переменную obarray,
чтобы дополнять в наборе существующих символов Lisp, и использует предикат
commandp, чтобы принимать только имена команд:
(read-command prompt)
≡
(intern (completing-read prompt obarray
'commandp t nil))
Эта функция считывает имя настраиваемой переменной и
возвращает его в виде символа. Ее аргументы имеют ту же форму, что и у
read-command. Она ведет себя точно так же, как read-command,
за исключением того, что она использует предикат custom-variable-p
вместо commandp.
Эта функция считывает строку, которая является спецификацией цвета, либо
именем цвета, либо шестнадцатеричным RGB-значением, таким как #RRRGGGBBB.
Она запрашивает ввод с помощью prompt (по умолчанию:
"Color (name or #RGB triplet):") и предоставляет автодополнение для имен
цветов, но не для шестнадцатеричных RGB-значений. В дополнение к именам стандартных
цветов, кандидаты автодополнения включают цвета переднего и заднего плана в текущей
позиции.
Допустимые значения RGB описаны в Имена цветов.
Возвращаемое значение функции — это строка, введенная пользователем в
minibuffer. Однако, при интерактивном вызове или если необязательный аргумент
convert не nil, она преобразует любое введенное
имя цвета в соответствующую строку RGB-значения и возвращает ее вместо этого.
Эта функция требует ввода допустимой спецификации цвета.
Пустые имена цветов разрешены, когда allow-empty не nil
и пользователь вводит пустой ввод.
При интерактивном вызове или когда display не nil,
возвращаемое значение также отображается в области эха.
Необязательные аргументы foreground и face
контролируют внешний вид кандидатов автодополнения в буфере *Completions*.
Кандидаты отображаются в указанном face, но с разными цветами: если
foreground не nil, цвет переднего плана меняется на
цвет кандидата, в противном случае меняется фон на цвет кандидата.
См. также функции read-coding-system и
read-non-nil-coding-system в Выбранные пользователем системы кодирования,
и read-input-method-name в Методы ввода.