Деление окон
В этом разделе описываются функции для создания нового окна путем разделения существующего. Обратите внимание, что некоторые окна являются специальными в том смысле, что эти функции могут не удаться при разделении, как описано здесь. Примерами таких окон являются боковые окна (см. Боковые окна) и атомарные окна (см. Атомарные окна).
- Функция: 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. Если sideleft, новое окно размещается слева от окна 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