Spec-Zone.ru › Elisp

Введение в минибуферы

В большинстве случаев минибуфер — это обычный буфер Emacs. Большинство операций внутри буфера, таких как команды редактирования, в минибуфере работают обычным образом. Однако многие операции по управлению буферами к минибуферам неприменимы. Имя минибуфера всегда имеет вид ‘ *Minibuf-number*’ и не может быть изменено. Минибуферы отображаются только в специальных окнах, предназначенных исключительно для минибуферов; эти окна всегда располагаются в нижней части рамки. (Иногда у рамок нет окна минибуфера, а иногда специальная рамка содержит только окно минибуфера; см. Минибуферы и рамки.)

Текст в минибуфере всегда начинается со строки приглашения — текста, указанного программой, использующей минибуфер, чтобы сообщить пользователю, какие данные следует ввести. Этот текст помечен как доступный только для чтения, чтобы вы случайно не удалили и не изменили его. Он также помечен как поле (см. Определение и использование полей), поэтому некоторые функции перемещения, в том числе 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-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Intro-to-Minibuffers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API