21.11 Окна минибуфера

Эти функции получают доступ к окнам минибуфера и выбирают их, проверяют, активны ли они, и контролируют, как они изменяют размер.

Функция: minibuffer-window &optional frame

Эта функция возвращает окно минибуфера, используемое для фрейма frame. Если frame равно nil, это означает выбранный фрейм.

Обратите внимание, что окно минибуфера, используемое фреймом, не обязательно является частью этого фрейма — фрейм, не имеющий собственного минибуфера, обязательно использует окно минибуфера другого фрейма. Окно минибуфера фрейма без минибуфера может быть изменено путем установки параметра фрейма minibuffer этого фрейма (см. Параметры буфера).

Функция: set-minibuffer-window window

Эта функция указывает window как окно минибуфера для использования. Это влияет на то, где отображается минибуфер, если вы вводите текст в него без вызова обычных команд минибуфера. Это не влияет на обычные функции ввода минибуфера, поскольку они все начинаются с выбора окна минибуфера в соответствии с выбранным фреймом.

Функция: window-minibuffer-p &optional window

Эта функция возвращает t, если window является окном минибуфера. window по умолчанию — это выбранное окно.

Следующая функция возвращает окно, отображающее в данный момент активный минибуфер.

Функция: active-minibuffer-window

Эта функция возвращает окно текущего активного минибуфера или nil, если активного минибуфера нет.

Недостаточно определить, отображает ли заданное окно текущий активный минибуфер, сравнивая его с результатом (minibuffer-window), потому что может быть более одного окна минибуфера, если существует более одного фрейма.

Функция: minibuffer-window-active-p window

Эта функция возвращает не-nil, если window отображает текущий активный минибуфер.

Следующие две опции контролируют, будут ли окна минибуфера автоматически изменять размер и насколько большими они могут стать в процессе.

Пользовательская опция: resize-mini-windows

Эта опция указывает, будут ли окна минибуфера изменять размер автоматически. Значение по умолчанию — grow-only, что означает, что окно минибуфера по умолчанию автоматически расширяется для размещения отображаемого текста и сжимается обратно до одной строки, как только минибуфер становится пустым. Если значение равно t, Emacs всегда будет пытаться подгонять высоту окна минибуфера под отображаемый текст (с минимумом в одну строку). Если значение равно nil, окно минибуфера никогда не меняет размер автоматически. В этом случае для регулировки его высоты можно использовать команды изменения размера окна (см. Изменение размера окон).

Пользовательская опция: max-mini-window-height

Эта опция устанавливает максимальную высоту для автоматического изменения размера окон минибуфера. Число с плавающей запятой указывает максимальную высоту как долю от высоты фрейма; целое число указывает максимальную высоту в единицах канонической высоты символа фрейма (см. Шрифт фрейма). Значение по умолчанию — 0.25.

Обратите внимание, что значения вышеуказанных двух переменных вступают в силу во время отображения, поэтому привязка их с помощью let-binding вокруг кода, который генерирует сообщения в области эха, не сработает. Если вы хотите предотвратить изменение размера окон минибуфера при отображении длинных сообщений, привяжите вместо этого переменную message-truncate-lines (см. Настройка области эха).

Опция resize-mini-windows не влияет на поведение фреймов, состоящих только из минибуфера (см. Макет фрейма). Следующая опция позволяет автоматически изменять размер таких фреймов.

Пользовательская опция: resize-mini-frames

Если это nil, фреймы, состоящие только из минибуфера, никогда не изменят размер автоматически.

Если это функция, то эта функция вызывается с фреймом, состоящим только из минибуфера, в качестве единственного аргумента. В момент вызова этой функции буфер окна минибуфера этого фрейма — это буфер, содержимое которого будет показано в следующий раз, когда это окно будет повторно отображено. Ожидается, что функция подогнет фрейм к буферу каким-либо подходящим образом.

Любое другое не-nil значение означает изменение размера фреймов, состоящих только из минибуфера, путем вызова fit-mini-frame-to-buffer, функции, которая ведет себя как fit-frame-to-buffer (см. Изменение размера окон), но не удаляет пустые строки в начале или в конце текста буфера.