Spec-Zone.ru › Elisp

Изменение компоновки окон

Иногда бывает полезно изменить компоновку окон так, чтобы два или более окна заняли места друг друга. Команды, описанные в этом разделе, выполняют это упорядоченным образом. Концептуально эти команды воздействуют на прямоугольное подмножество окон в рамке. Как правило, они не затрагивают расположение окна минибуфера рамки или каких-либо её боковых окон (см. Боковые окна).

Общая особенность всех этих команд заключается в том, что они сохраняют идентичность окон, сначала удаляя их, а затем воссоздавая (см. Восстановление окон) на новых местах. Ни одно окно не теряется, и ни одно окно не добавляется и не дублируется. По возможности эти команды стараются сохранить относительный размер окон, а также все остальные негометрические свойства, включая параметры. Эти команды сообщают об ошибке, если окна, которые должны изменить расположение, являются атомарными или имеют фиксированный размер. Описываемый ниже параметр 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

Spec-Zone.ru

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