В этом разделе описаны функции для создания нового окна путём разделения существующего. Обратите внимание, что некоторые окна являются особыми в том смысле, что эти функции могут не суметь разделить их так, как описано здесь. Примерами таких окон являются боковые окна (см. Боковые окна) и атомарные окна (см. Атомарные окна).
Эта функция создаёт новое живое окно рядом с окном
window. Если window опущен или равен nil, по умолчанию
используется выбранное окно. Это окно разделяется и уменьшается в
размере. Освободившееся пространство занимает новое окно, которое и возвращается.
Необязательный второй аргумент size определяет размеры
window и/или нового окна. Если он опущен или равен nil,
обоим окнам назначаются равные размеры; если остаётся нечётная строка,
она отдаётся новому окну. Если size — положительное число,
window получает size строк (или столбцов, в зависимости от
значения side). Если size — отрицательное число, новое
окно получает −size строк (или столбцов).
Если size равен nil, эта функция подчиняется переменным
window-min-height и window-min-width (см. Размеры окон). Таким образом, она вызывает ошибку, если разделение привело бы к
уменьшению окна меньше, чем задано этими переменными. Однако
ненулевое значение 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’s фрейма.
Поведение этой функции может быть изменено параметрами окна
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.
Эта функция разделяет окно window-to-split на два рядом стоящих окна, помещая window-to-split слева. window-to-split по умолчанию равен выбранному окну. Если size положителен, левое окно получает size столбцов; если size отрицателен, правое окно получает −size столбцов.
Эта функция разделяет окно window-to-split на два окна, одно над другим, оставляя выбранным верхнее окно. window-to-split по умолчанию равен выбранному окну. Если size положителен, верхнее окно получает size строк; если size отрицателен, нижнее окно получает −size строк.
Эта функция разделяет весь фрейм на две части. Текущая конфигурация
окон сохраняется сверху, а новое окно создаётся
внизу, занимая всю ширину фрейма. size обрабатывается
так же, как и в split-window-below.
Эта функция разделяет весь фрейм на две части. Текущая конфигурация
окон сохраняется слева, а новое окно создаётся
справа, занимая всю высоту фрейма. size обрабатывается
так же, как и в split-window-right.
Если значение этой переменной не равно nil (значение по умолчанию),
split-window-below ведёт себя так, как описано выше.
Если оно равно nil, split-window-below корректирует точку в каждом
из двух окон, чтобы минимизировать перерисовку. (Это полезно на медленных
терминалах.) Он выбирает то окно, которое содержит строку экрана, на которой
ранее находилась точка. Обратите внимание, что это влияет только на
split-window-below, а не на низкоуровневую функцию split-window.