Spec-Zone.ru › Elisp

Свойства дочерних фреймов

Большинство оконных систем обрезают дочерние фреймы по собственным границам родительского фрейма (см. Геометрия фреймов) — всё, что находится за этими границами, обычно невидимо. Параметры left и top дочернего фрейма задают положение относительно левого верхнего угла собственного фрейма родителя. При изменении размера родительского фрейма это положение концептуально остаётся неизменным.

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

Обратите также внимание на функцию window-largest-empty-rectangle (см. Координаты и окна), с помощью которой дочерний фрейм можно вписать в наибольшую свободную область существующего окна. Это может быть полезно, чтобы дочерний фрейм не заслонял текст, отображаемый в этом окне.

Обычно перемещение родительского фрейма перемещает вместе с ним все его дочерние фреймы и их потомков, сохраняя их взаимное положение. Обратите внимание, что хук move-frame-functions (см. Положение фрейма) выполняется для дочернего фрейма только при изменении его положения относительно родительского фрейма.

При изменении размера родительского фрейма дочерние фреймы концептуально сохраняют прежние размеры и положение относительно левого верхнего угла родителя. Это означает, что дочерний фрейм может стать (частично) невидимым, если размер родительского фрейма уменьшится. Параметр keep-ratio (см. Параметры взаимодействия с фреймами) можно использовать, чтобы пропорционально изменять размер и положение дочернего фрейма при каждом изменении размера родительского фрейма. Это может помочь избежать заслонения частей фрейма при уменьшении размера родительского фрейма.

Видимый дочерний фрейм всегда отображается поверх родительского, заслоняя его части, за исключением сборок для NS, в которых его можно расположить под родительским фреймом. Это похоже на оконную систему, где окно фрейма верхнего уровня также всегда отображается поверх родительского окна — корневого окна рабочего стола. Когда родительский фрейм сворачивается в значок или становится невидимым (см. Видимость фреймов), его дочерние фреймы также не отображаются, даже если функция frame-visible-p возвращает для них t. Когда родительский фрейм восстанавливается из значка или становится видимым, его дочерние фреймы снова отображаются (при условии, что они и все их фреймы-предки также видимы). Если дочерний фрейм используется как замещающий фрейм минибуфера (см. Минибуферы и фреймы), приложение должно обеспечить видимость фрейма при каждом активировании минибуфера.

Возможность использовать в дочернем фрейме меню или панель инструментов зависит от оконной системы или оконного менеджера. Большинство оконных систем явно запрещают меню в дочерних фреймах. Рекомендуется отключить и меню, и панели инструментов с помощью начальных параметров фрейма. На текстовом терминале дочерние фреймы используют строку меню своего корневого фрейма (если она есть).

Обычно у дочерних фреймов нет таких украшений оконного менеджера, как строка заголовка или внешние границы (см. Геометрия фреймов). Если в дочернем фрейме не отображаются меню или панель инструментов, вместо внешних границ можно использовать другие границы фрейма (см. Параметры компоновки).

В частности, в X (но не при сборке с GTK+) можно использовать внешнюю границу фрейма. В MS-Windows указание ненулевой ширины внешней границы приводит к отображению внешней границы шириной в один пиксель. Во всех оконных системах можно использовать внутреннюю границу. В обоих случаях рекомендуется отключить украшения оконного менеджера дочернего фрейма с помощью параметра фрейма undecorated (см. Параметры управления окнами). С другой стороны, на текстовом терминале этот параметр лучше не менять, чтобы дочерний фрейм отображался с внешней границей.

Чтобы изменять размер дочернего фрейма без границ или перемещать его с помощью мыши, необходимо использовать специальные параметры фрейма (см. Параметры перетаскивания мышью). Внутреннюю границу дочернего фрейма, если она есть, можно использовать для изменения размера фрейма мышью, если у этого фрейма задан параметр drag-internal-border, отличный от nil. Если параметр snap-width задан, он указывает число пикселей, на которое фрейм привязывается к соответствующему краю или углу родительского фрейма. На текстовом терминале для изменения размера можно использовать внешнюю границу.

Перетащить дочерний фрейм целиком с помощью мыши можно тремя способами. Параметр drag-with-mode-line, если он отличается от nil, позволяет перетаскивать фрейм без окна минибуфера (см. Окна минибуфера) за область строки режима его нижнего окна. Параметры drag-with-header-line и drag-with-tab-line, если они отличаются от nil, позволяют перетаскивать фрейм за область строки заголовка или строки вкладок его верхнего окна (перетаскивание за строку вкладок возможно только при отсутствии над ней строки заголовка).

Чтобы сделать строку заголовка или строку режима дочернего фрейма перетаскиваемой, удобно использовать параметры окна mode-line-format и header-line-format (см. Параметры окон). Они позволяют удалить ненужную строку режима (если выбран параметр drag-with-header-line) и убрать чувствительные к мыши области, которые могут мешать перетаскиванию фрейма.

Если пользователь промахивается при перетаскивании фрейма мышью, фрейм легко можно переместить за пределы экранной области родителя. После отпускания кнопки мыши вернуть такой фрейм на место может быть непросто. Чтобы не допустить подобной ситуации, рекомендуется задать параметр фрейма top-visible или bottom-visible (см. Параметры перетаскивания мышью).

Задайте параметру top-visible дочернего фрейма числовое значение, если хотите разрешить перетаскивать этот фрейм за строку заголовка или строку вкладок. Если задать top-visible числовое значение, верхний край дочернего фрейма нельзя будет перетащить выше верхнего края родителя. Задайте параметру bottom-visible числовое значение, если хотите перетаскивать этот фрейм за строку режима; это не позволит перетащить нижний край дочернего фрейма ниже нижнего края родителя. В обоих случаях это число также задаёт ширину и высоту (в пикселях) области дочернего фрейма, остающейся видимой во время перетаскивания.

Если дочерний фрейм используется для отображения буфера с помощью display-buffer-in-child-frame (см. Функции действий для отображения буферов), параметру auto-hide-function фрейма (см. Параметры взаимодействия с фреймами) можно присвоить функцию, чтобы корректно обработать фрейм при закрытии окна, отображающего буфер.

Если дочерний фрейм используется во время взаимодействия с минибуфером, например для отображения вариантов дополнения в отдельном окне, параметр minibuffer-exit (см. Параметры взаимодействия с фреймами) полезен для обработки фрейма при выходе из минибуфера.

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/Child-Frame-Properties.html

Spec-Zone.ru

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