Изменение компоновки окон
Иногда бывает полезно изменить компоновку окон так, чтобы два или более окна заняли места друг друга. Команды, описанные в этом разделе, выполняют это упорядоченным образом. Концептуально эти команды воздействуют на прямоугольное подмножество окон в рамке. Как правило, они не затрагивают расположение окна минибуфера рамки или каких-либо её боковых окон (см. Боковые окна).
Общая особенность всех этих команд заключается в том, что они сохраняют идентичность окон, сначала удаляя их, а затем воссоздавая (см. Восстановление окон) на новых местах. Ни одно окно не теряется, и ни одно окно не добавляется и не дублируется. По возможности эти команды стараются сохранить относительный размер окон, а также все остальные негометрические свойства, включая параметры. Эти команды сообщают об ошибке, если окна, которые должны изменить расположение, являются атомарными или имеют фиксированный размер. Описываемый ниже параметр transpose-dedicated-windows определяет, могут ли выделенные окна менять расположение.
Аргумент window всех функций, описанных в этом разделе, должен задавать допустимое родительское окно (см. Окна и рамки). Если его значение — nil, он обозначает главное окно (см. Боковые окна) выбранной рамки. В интерактивном режиме префиксный аргумент означает, что операция выполняется над родительским окном выбранного окна. В приведённых ниже примерах мы всегда будем считать, что отображаемые окна составляют главное окно своей рамки, а аргумент window равен nil, если не указано иное.
Первые две команды поворачивают компоновку окон по часовой стрелке или против неё.
- Команда: window-layout-rotate-clockwise &optional window
-
Эта команда поворачивает компоновку окон на 90 градусов по часовой стрелке. Представьте компоновку с тремя действующими окнами A, B и C, показанную слева ниже. Эта команда создаст компоновку, показанную справа.
___________ ___________ | | | | | | A | | B | | |___________| --> |_____| A | | | | | | | | B | C | | C | | |_____|_____| |_____|_____|
- Команда: window-layout-rotate-anticlockwise &optional window
-
Эта команда похожа на
window-layout-rotate-clockwise, но поворачивает компоновку в противоположном направлении, как показано в примере ниже.___________ ___________ | | | | | | A | | | C | |___________| --> | A |_____| | | | | | | | B | C | | | B | |_____|_____| |_____|_____|
Следующие две команды отражают компоновку окон — поворачивают её вокруг воображаемой горизонтальной или вертикальной оси. Если число отражаемых окон нечётное, окно посередине остаётся на прежнем месте.
- Команда: window-layout-flip-topdown &optional window
-
Эта команда отражает окна так, что нижние окна становятся верхними, и наоборот, как показано в примере ниже.
___________ ___________ | | | | | | A | | B | C | |___________| --> |_____|_____| | | | | | | B | C | | A | |_____|_____| |___________|
- Команда: window-layout-flip-leftright &optional window
-
Эта команда переставляет окна так, что окна справа становятся окнами слева, и наоборот.
___________ ___________ | | | | | A | | A | |___________| --> |___________| | | | | | | | B | C | | C | B | |_____|_____| |_____|_____|
Следующую команду можно использовать для транспонирования окон — замены горизонтальных разделений вертикальными и наоборот.
- Команда: window-layout-transpose &optional window
-
Эта команда реорганизует окна так, что каждое горизонтальное разделение становится вертикальным, и наоборот.
___________ ___________ | | | | | | A | | | B | |___________| --> | A |_____| | | | | | | | B | C | | | C | |_____|_____| |_____|_____|
Последние две команды можно использовать для циклического перемещения окон в пределах существующей компоновки. Они похожи на команды поворота компоновки, но не меняют её базовую структуру. Меняются фактические позиции окон в существующей компоновке. Это происходит так, что место, которое прежде занимало любое окно, занимает предшествующее ему окно в циклическом порядке окон (следующее, если reverse не равно nil) (см. Циклический порядок окон) в рамке окна window.
- Команда: rotate-windows &optional window reverse
-
Эта команда циклически перемещает дочерние окна window. Необязательный аргумент reverse означает, что окна перемещаются в обратном направлении, против циклического порядка.
___________ ___________ | | | | | A | | C | |___________| --> |___________| | | | | | | | B | C | | A | B | |_____|_____| |_____|_____|
- Команда: rotate-windows-back &optional window
-
Эта команда перемещает дочерние окна window в обратном направлении циклического порядка.
___________ ___________ | | | | | A | | B | |___________| --> |___________| | | | | | | | B | C | | C | A | |_____|_____| |_____|_____|
На все описанные выше команды распространяется следующий параметр.
- Пользовательский параметр: transpose-dedicated-windows
Если значение этого параметра —
nil, функции, описанные в этом разделе, сообщают об ошибке при обнаружении выделенного окна (см. Выделенные окна). Если значение —t, они обрабатывают выделенные окна так же, как обычные.
На последние две команды распространяется следующий параметр.
- Пользовательский параметр: rotate-windows-change-selected
Если значение этого параметра —
nil, выбранное окно не будет затронуто командамиrotate-windowsиrotate-windows-back. Если значение —t(по умолчанию), выбранным станет окно, которое окажется на месте окна, выбранного до вызова любой из этих команд.
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/Changing-Window-Layouts.html