30.12 Поднятие, опускание и переупорядочивание фреймов

Большинство оконных систем используют метафору рабочего стола. Часть этой метафоры — это идея о том, что системные окна (например, фреймы Emacs) располагаются в воображаемом третьем измерении, перпендикулярном поверхности экрана. Порядок, задаваемый стекированием, является полным и обычно называется порядком стекирования (или Z-порядком). Там, где области двух окон перекрываются, окно, расположенное выше в этом порядке, (частично) перекрывает окно под ним.

Вы можете поднять фрейм на вершину этого порядка или опустить фрейм на его дно, используя функции raise-frame и lower-frame. Вы можете переупорядочить фрейм непосредственно над или под другим фреймом, используя функцию frame-restack.

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

Команда: raise-frame &optional frame

Эта функция поднимает фрейм frame (по умолчанию, выбранный фрейм) выше всех других фреймов, принадлежащих той же или более низкой z-группе, чем frame. Если frame не виден или находится в виде иконки, эта функция делает его видимым. Если frame является дочерним фреймом (см. Дочерние фреймы), эта функция поднимает frame выше всех других дочерних фреймов его родителя.

Команда: lower-frame &optional frame

Эта функция опускает фрейм frame (по умолчанию, выбранный фрейм) ниже всех других фреймов, принадлежащих той же или более высокой z-группе, чем frame. Если frame является дочерним фреймом (см. Дочерние фреймы), эта функция опускает frame ниже всех других дочерних фреймов его родителя.

Функция: frame-restack frame1 frame2 &optional above

Эта функция переупорядочивает frame1 под frame2. Это означает, что если оба фрейма видны и их области отображения перекрываются, frame2 (частично) закроет frame1. Если необязательный третий аргумент above не равен nil, эта функция переупорядочивает frame1 над frame2. Это означает, что если оба фрейма видны и их области отображения перекрываются, frame1 (частично) закроет frame2.

Технически, эту функцию можно рассматривать как атомарное действие, выполняемое в два этапа: Первый этап удаляет системное окно frame1 с дисплея. Второй этап повторно вставляет окно frame1 на дисплей под (над, если above истинно) окно frame2. Таким образом, положение frame2 в Z-порядке своего дисплея по отношению ко всем другим фреймам, кроме frame1, остается неизменным.

Некоторые оконные менеджеры могут отказаться от переупорядочивания окон.

Обратите внимание, что эффект переупорядочивания действует только до тех пор, пока ни один из задействованных фреймов не будет скрыт или сделан невидимым. Вы можете использовать параметр фрейма z-group (см. Параметры позиционирования), чтобы добавить фрейм в группу фреймов, которые постоянно отображаются выше или ниже других фреймов. Пока фрейм принадлежит одной из этих групп, переупорядочивание повлияет только на его относительное положение в этой группе. Эффект переупорядочивания фреймов, принадлежащих к разным z-группам, не определен. Вы можете перечислить фреймы в их текущем порядке стекирования с помощью функции frame-list-z-order (см. Поиск всех фреймов).

Пользовательский вариант: minibuffer-auto-raise

Если это не nil, активация minibuffer поднимает фрейм, в котором находится окно minibuffer.

В оконных системах вы также можете включить автоматическое поднятие (при выборе фрейма) или автоматическое опускание (при отборе фрейма) с помощью параметров фрейма. См. Параметры управления окнами.

Концепция поднятия и опускания фреймов также применима к фреймам текстовых терминалов. В каждом текстовом терминале в любой момент времени отображается только верхний фрейм.

Функция: tty-top-frame &optional terminal

Эта функция возвращает верхний фрейм на terminal. terminal должен быть объектом терминала, фреймом (то есть терминалом фрейма) или nil (что означает терминал выбранного фрейма). Если он не относится к текстовому терминалу, возвращаемое значение равно nil.