Введение в минибуферы
В большинстве случаев минибуфер — это обычный буфер Emacs. Большинство операций внутри буфера, такие как команды редактирования, работают нормально в минибуфере. Однако многие операции по управлению буферами не применяются к минибуферам. Имя минибуфера всегда имеет вид ‘ *Minibuf-номер*’, и его нельзя изменить. Минибуферы отображаются только в специальных окнах, используемых только для минибуферов; эти окна всегда появляются в нижней части фрейма. (Иногда фреймы не имеют окна минибуфера, а иногда особый вид фрейма содержит только окно минибуфера; см. Минибуферы и фреймы.)
Текст в минибуфере всегда начинается с строки приглашения, текста, который был указан программой, использующей минибуфер, чтобы сообщить пользователю, какой тип ввода нужно набрать. Этот текст помечен как только для чтения, поэтому вы случайно не удалите или не измените его. Он также помечен как поле (см. Поля), так что определенные функции перемещения, включая beginning-of-line, forward-word, forward-sentence, и forward-paragraph, останавливаются на границе между приглашением и фактическим текстом.
Окно минибуфера обычно представляет собой одну строку; оно автоматически увеличивается, если содержимое требует больше места. Пока минибуфер активен, вы можете временно изменять размер его окна с помощью команд изменения размера окна; окно возвращается к своему нормальному размеру при выходе из минибуфера. Когда минибуфер неактивен, вы можете постоянно изменить размер его окна, используя команды изменения размера окна в других окнах фрейма или перетаскивая строку состояния с помощью мыши. (Из-за особенностей текущей реализации для этого resize-mini-windows должен быть nil.) Если фрейм содержит только окно минибуфера, вы можете изменить его размер, изменив размер фрейма.
Использование минибуфера считывает события ввода, и это изменяет значения таких переменных, как this-command и last-command (см. Информация о цикле команд). Ваша программа должна связать их с кодом, использующим минибуфер, если вы не хотите, чтобы они менялись.
В некоторых случаях команда может использовать минибуфер, даже если активен другой минибуфер; такой минибуфер называется рекурсивным минибуфером. Первый минибуфер называется ‘ *Minibuf-1*’. Рекурсивные минибуферы называются путем увеличения числа в конце имени. (Имена начинаются с пробела, чтобы они не отображались в обычных списках буферов.) Из нескольких рекурсивных минибуферов самый внутренний (или введённый последним) — активный минибуфер; его можно завершить, набрав RET (exit-minibuffer) в него. Мы обычно называем его минибуфером. Вы можете разрешить или запретить рекурсивные минибуферы, установив переменную enable-recursive-minibuffers, или поместив свойства с таким именем на символы команд (см. Рекурсивный мини.)
Как и другие буферы, минибуфер использует локальную карту клавиш (см. Карты клавиш) для задания специальных назначений клавиш. Функция, вызывающая минибуфер, также настраивает свою локальную карту в соответствии с выполняемой задачей. См. Текст из минибуфера для локальных карт минибуфера без автодополнения. См. Команды автодополнения для локальных карт минибуфера для автодополнения.
Активный минибуфер обычно имеет основной режим minibuffer-mode. Это внутренний режим Emacs без каких-либо специальных функций. Для настройки параметров минибуферов рекомендуется использовать minibuffer-setup-hook (см. Разное по минибуферам), а не minibuffer-mode-hook, так как первый выполняется позже, после полного инициализации минибуфера.
Когда минибуфер неактивен, его основной режим — minibuffer-inactive-mode, а карта клавиш — minibuffer-inactive-mode-map. Это действительно полезно только если минибуфер находится в отдельном фрейме. См. Минибуферы и фреймы.
Когда Emacs работает в пакетном режиме, любой запрос на чтение из минибуфера фактически считывает строку из стандартного описателя ввода, который был предоставлен при запуске Emacs. Это поддерживает только базовый ввод: ни одна из специальных функций минибуфера (история, автодополнение и т.д.) недоступны в пакетном режиме.
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/Intro-to-Minibuffers.html