Spec-Zone.ru › Elisp

Деление окон

В этом разделе описываются функции для создания нового окна путем разделения существующего. Обратите внимание, что некоторые окна являются специальными в том смысле, что эти функции могут не удаться при разделении, как описано здесь. Примерами таких окон являются боковые окна (см. Боковые окна) и атомарные окна (см. Атомарные окна).

Функция: split-window &optional window size side pixelwise

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

Дополнительный второй аргумент size определяет размеры окна window и/или нового окна. Если он опущен или nil, обоим окнам присваиваются равные размеры; если строка нечетная, она выделяется новому окну. Если size — положительное число, окну window присваивается size строк (или столбцов, в зависимости от значения side). Если size — отрицательное число, новому окну присваивается -size строк (или столбцов).

Если size nil, эта функция подчиняется переменным window-min-height и window-min-width (см. Размеры окон). Таким образом, она сигнализирует об ошибке, если разделение приведет к уменьшению размера окна меньше, чем указано в этих переменных. Однако, не-nil значение size игнорирует эти переменные; в этом случае наименьшим допустимым окном считается окно, имеющее место для текста высотой в одну строку и/или шириной в два столбца.

Следовательно, если size указан, ответственность за проверку достаточности размеров генерируемых окон для размещения всех декораций, таких как строка режима или полоса прокрутки, возлагается на вызывающую функцию. Функция window-min-size (см. Размеры окон) может использоваться для определения минимальных требований к окну window в этом отношении. Поскольку новое окно обычно наследует области, такие как строка режима или полоса прокрутки, от окна window, эта функция также является хорошим приближением для минимального размера нового окна. Вызывающая функция должна указать меньший размер только в том случае, если она соответственно удаляет унаследованную область перед следующей перерисовкой.

Дополнительный третий аргумент side определяет положение нового окна относительно window. Если он nil или below, новое окно размещается ниже окна window. Если он above, новое окно размещается выше окна window. В обоих этих случаях size задает общую высоту окна в строках.

Если side t или right, новое окно размещается справа от окна window. Если side left, новое окно размещается слева от окна window. В обоих этих случаях size задает общую ширину окна в столбцах.

Дополнительный четвертый аргумент pixelwise, если не nil, означает интерпретацию size в единицах пикселей вместо строк и столбцов.

Если window — активное окно, новое окно наследует различные свойства от него, включая отступы и полосы прокрутки. Если window — внутреннее окно, новое окно наследует свойства окна, выбранного в рамках рамки window.

Поведение этой функции может изменяться параметрами окна window, при условии, что переменная ignore-window-parameters равна nil. Если значение параметра окна split-window равно t, эта функция игнорирует все остальные параметры окна. В противном случае, если значение параметра окна split-window является функцией, эта функция вызывается с аргументами window, size и side вместо обычных действий split-window. В противном случае эта функция подчиняется параметрам окна window-atom или window-side, если таковые имеются. См. Параметры окон.

В качестве примера приводится последовательность split-window вызовов, которая приводит к конфигурации окна, обсуждаемой в Окнах и рамках. Этот пример демонстрирует разделение активного окна, а также разделение внутреннего окна. Мы начинаем с рамки, содержащей одно окно (активное корневое окно), которое мы обозначаем как W4. Вызов (split-window W4) дает такую конфигурацию окна:

     ______________________________________
    | ____________________________________ |
    ||                                    ||
    ||                                    ||
    ||                                    ||
    ||_________________W4_________________||
    | ____________________________________ |
    ||                                    ||
    ||                                    ||
    ||                                    ||
    ||_________________W5_________________||
    |__________________W3__________________|

Вызов split-window создал новое активное окно, обозначенное как W5. Он также создал новое внутреннее окно, обозначенное как W3, которое становится корневым окном и родителем как W4, так и W5.

Далее, мы вызываем (split-window W3 nil 'left), передавая внутреннее окно W3 в качестве аргумента. Результат:

     ______________________________________
    | ______  ____________________________ |
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W4____________|||
    ||      || __________________________ ||
    ||      |||                          |||
    ||      |||                          |||
    ||      |||____________W5____________|||
    ||__W2__||_____________W3_____________ |
    |__________________W1__________________|

Создается новое активное окно W2, слева от внутреннего окна W3. Создается новое внутреннее окно W1, которое становится новым корневым окном.

Для интерактивного использования Emacs предоставляет две команды, которые всегда делят выбранное окно. Они вызывают split-window внутри.

Команда: split-window-right &optional size

Эта функция разделяет выбранное окно на два окна, расположенные бок о бок, размещая выбранное окно слева. Если size — положительное число, левому окну присваивается size столбцов; если size — отрицательное число, правому окну присваивается -size столбцов.

Команда: split-window-below &optional size

Эта функция разделяет выбранное окно на два окна, расположенные друг над другом, оставляя верхнее окно выбранным. Если size — положительное число, верхнему окну присваивается size строк; если size — отрицательное число, нижнему окну присваивается -size строк.

Пользовательский параметр: split-window-keep-point

Если значение этой переменной не nil (по умолчанию), split-window-below ведет себя как описано выше.

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

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Splitting-Windows.html

Spec-Zone.ru

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