29.5 Изменение размеров окон

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

Если не указано иное, эти функции также принимают внутренние окна в качестве аргументов. Изменение размера внутреннего окна приводит к изменению размеров его дочерних окон, чтобы они поместились в том же пространстве.

Функция: window-resizable window delta &optional horizontal ignore pixelwise

Эта функция возвращает delta, если размер window можно изменить по вертикали на delta строк. Если необязательный аргумент horizontal не равен nil, она вместо этого возвращает delta, если window можно изменить по горизонтали на delta столбцов. Она фактически не изменяет размер окна.

Если window равен nil, по умолчанию используется выбранное окно.

Положительное значение delta означает проверку возможности увеличения окна на указанное число строк или столбцов; отрицательное значение delta означает проверку возможности уменьшения окна на это число строк или столбцов. Если delta не равно нулю, возвращаемое значение 0 означает, что размер окна изменить нельзя.

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

Если необязательный аргумент pixelwise не равен nil, delta интерпретируется в пикселях.

Функция: window-resize window delta &optional horizontal ignore pixelwise

Эта функция изменяет размер window на величину delta. Если horizontal равен nil, она изменяет высоту на delta строк; в противном случае она изменяет ширину на delta столбцов. Положительное delta означает увеличение окна, а отрицательное delta — его уменьшение.

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

Необязательный аргумент ignore имеет тот же смысл, что и для функции window-resizable выше.

Если необязательный аргумент pixelwise не равен nil, delta будет интерпретироваться в пикселях.

Выбор того, какие границы окна изменяет эта функция, зависит от значений опции window-combination-resize и ограничений комбинации вовлечённых окон; в некоторых случаях она может изменять обе границы. См. Перекомбинация окон. Для изменения размера путём перемещения только нижней или правой границы окна используйте функцию adjust-window-trailing-edge.

Функция: adjust-window-trailing-edge window delta &optional horizontal pixelwise

Эта функция перемещает нижнюю границу window на delta строк. Если необязательный аргумент horizontal не равен nil, она вместо этого перемещает правую границу на delta столбцов. Если window равен nil, по умолчанию используется выбранное окно.

Если необязательный аргумент pixelwise не равен nil, delta интерпретируется в пикселях.

Положительное delta перемещает границу вниз или вправо; отрицательное delta перемещает её вверх или влево. Если границу нельзя переместить на указанную в delta величину, эта функция перемещает её насколько возможно, но не сигнализирует ошибку.

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

Пользовательская опция: window-resize-pixelwise

Если значение этой опции не равно nil, Emacs изменяет размеры окон в пикселях. В настоящее время это влияет на такие функции, как split-window (см. Разделение окон), maximize-window, minimize-window, fit-window-to-buffer, fit-frame-to-buffer и shrink-window-if-larger-than-buffer (все перечислены ниже).

Заметьте, что когда пиксельный размер фрейма не кратен его символьному размеру, по крайней мере одно окно может быть изменено попиксельно, даже если эта опция равна nil. Значение по умолчанию — nil.

Следующие команды изменяют размеры окон более специфическим образом. При интерактивном вызове они действуют на выбранное окно.

Команда: fit-window-to-buffer &optional window max-height min-height max-width min-width preserve-size

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

Если window является частью вертикальной комбинации, эта функция подгоняет высоту window. Новая высота вычисляется из фактической высоты доступной части его буфера. Необязательный аргумент max-height, если не равен nil, задаёт максимальную общую высоту, которую эта функция может дать window. Необязательный аргумент min-height, если не равен nil, задаёт минимальную общую высоту, которую она может дать, переопределяя переменную window-min-height. Оба max-height и min-height задаются в строках и включают любые верхние или нижние декоративные элементы window.

Если window является частью горизонтальной комбинации и значение опции fit-window-to-buffer-horizontally (см. ниже) не равно nil, эта функция подгоняет ширину window. Новая ширина window вычисляется из максимальной длины строк его буфера, следующих за текущей начальной позицией window. Необязательный аргумент max-width задаёт максимальную ширину и по умолчанию равен ширине фрейма window. Необязательный аргумент min-width задаёт минимальную ширину и по умолчанию равен window-min-width. Оба max-width и min-width задаются в столбцах и включают любые левые или правые декоративные элементы window.

Необязательный аргумент preserve-size, если не равен nil, установит параметр для сохранения размера window во время будущих операций изменения размера (см. Сохранение размеров окон).

Если опция fit-frame-to-buffer (см. ниже) не равна nil, эта функция попытается изменить размер фрейма window под его содержимое, вызвав fit-frame-to-buffer (см. ниже).

Пользовательская опция: fit-window-to-buffer-horizontally

Если это не равно nil, fit-window-to-buffer может изменять размеры окон по горизонтали. Если это nil (значение по умолчанию), fit-window-to-buffer никогда не изменяет размер окон по горизонтали. Если это only, она может изменять размер окон только по горизонтали. Любое другое значение означает, что fit-window-to-buffer может изменять размер окон в обоих измерениях.

Пользовательская опция: fit-frame-to-buffer

Если эта опция не равна nil, fit-window-to-buffer может подгонять фрейм под его буфер. Фрейм подгоняется тогда и только тогда, когда его корневое окно является живым окном и эта опция не равна nil. Если это horizontally, фреймы подгоняются только по горизонтали. Если это vertically, фреймы подгоняются только по вертикали. Любое другое значение, не равное nil, означает, что фреймы можно изменять в обоих измерениях.

Если у вас есть фрейм, отображающий только одно окно, вы можете подогнать этот фрейм под его буфер с помощью команды fit-frame-to-buffer.

Команда: fit-frame-to-buffer &optional frame max-height min-height max-width min-width only

Эта команда подгоняет размер frame для точного отображения содержимого его буфера. frame может быть любым живым фреймом и по умолчанию равен выбранному. Подгонка выполняется только если корневое окно frame является живым.

Аргументы max-height, min-height, max-width и min-width, если не равны nil, задают ограничения на новый размер тела корневого окна frame. Значение, не равное nil, указанное любым из этих аргументов, переопределяет соответствующее значение, заданное опцией fit-frame-to-buffer-sizes, описанной ниже.

Если необязательный аргумент only равен vertically, эта функция может изменять размер фрейма только по вертикали. Если only равен horizontally, она может изменять размер фрейма только по горизонтали.

Поведением fit-frame-to-buffer можно управлять с помощью двух опций, перечисленных ниже.

Пользовательская опция: fit-frame-to-buffer-margins

Эта опция может использоваться для задания полей вокруг фреймов, подгоняемых fit-frame-to-buffer. Такие поля могут быть полезны, чтобы избежать, например, перекрытия подогнанного фрейма с панелью задач или частями его родительского фрейма.

Она задаёт количество пикселей, которые должны оставаться свободными слева, сверху, справа и снизу фрейма, который должен быть подогнан. По умолчанию для каждого направления указано nil, что означает отсутствие полей. Значение, указанное здесь, может быть переопределено для конкретного фрейма параметром этого фрейма fit-frame-to-buffer-margins, если он присутствует.

Пользовательская опция: fit-frame-to-buffer-sizes

Эта опция задаёт границы размера для fit-frame-to-buffer. Она задаёт максимальное и минимальное количество строк и максимальное и минимальное количество столбцов тела корневого окна любого фрейма, который должен быть подогнан под свой буфер. Любое значение, указанное этой опцией, будет переопределено соответствующим аргументом fit-frame-to-buffer, если он не равен nil.

Команда: shrink-window-if-larger-than-buffer &optional window

Эта команда пытается уменьшить высоту window настолько, насколько это возможно, при этом всё ещё показывая весь его буфер, но не менее window-min-height строк. Возвращаемое значение не равно nil, если окно было изменено, и nil в противном случае. Если window опущен или равен nil, по умолчанию используется выбранное окно. В противном случае это должно быть живое окно.

Эта команда ничего не делает, если окно уже слишком мало для отображения всего своего буфера, или если какая-либо часть буфера прокручена за пределы экрана, или если окно является единственным живым окном в своём фрейме.

Эта команда вызывает fit-window-to-buffer (см. выше) для выполнения своей работы.

Команда: balance-windows &optional window-or-frame

Эта функция балансирует окна таким образом, чтобы предоставить больше места окнам во всю ширину и/или во всю высоту. Если window-or-frame указывает фрейм, она балансирует все окна на этом фрейме. Если window-or-frame указывает окно, она балансирует только это окно и его siblings (см. Окна и фреймы).

Команда: balance-windows-area

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

Команда: maximize-window &optional window

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

Команда: minimize-window &optional window

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