hs.window.layout
ПРЕДУПРЕЖДЕНИЕ: ЭКСПЕРИМЕНТАЛЬНЫЙ МОДУЛЬ. НЕ ИСПОЛЬЗОВАТЬ В ПРОИЗВОДСТВЕ. Этот модуль предназначен только для тестирования. Он может подвергаться изменениям API, вызывающим ошибки, или полностью исчезнуть в любое время и без предварительного уведомления. (Если у вас возникнут какие-либо проблемы, пожалуйста, сообщите о них на https://github.com/Hammerspoon/hammerspoon/issues или #hammerspoon на irc.libera.chat)
Управление окнами
Окно-макеты работают, выбирая определённые окна через windowfilter и упорядочивая их на экране в соответствии с определёнными правилами.
Макет состоит из списка правил и, необязательно, определения расположения экранов. Правила в макете оцениваются в порядке следования; после того, как правило повлияло на окно, последующие правила на него не повлияют. Правило требует windowfilter, создавая динамический список окон («пул окон»), к которому применяется правило, и список команд, оцениваемых в порядке следования. Команда действует на одно или несколько окон и состоит из:
- действия, оно может быть
-
move: перемещает окно(а) в указанный прямоугольник на экране (если действие опущено, предполагаетсяmove) -
minimize,maximize,fullscreen -
tile,fit: размечает окна в указанном прямоугольнике, используяhs.window.tiling.tileWindows(); дляfit, параметрpreserveRelativeAreaбудет установлен в значение true -
hide,unhide: скрывает или отображает приложение окна (как при использовании cmd-h) -
noaction: пропускает действие по окну(ам)
-
- число maxn, указывающее, сколько окон из пула окон данного правила будут затронуты (максимум) этой командой; если опущено (или если явно указана строка
all) все оставшиеся окна будут обработаны этой командой; обработанные окна «потребляются» и исключаются из пула окон для последующих команд в этом правиле и последующих правил - селектор, описывающий порядок сортировки, используемый для выбора первых maxn окон из пула окон для этой команды; он может быть одним из
focused(выбрать maxn окон, которые были последними в фокусе),frontmost(выбрать последнее окно в фокусе, если его приложение является приложением, находящимся в фоновом режиме, в противном случае команда будет пропущена),newest(последние созданные),oldest(самые ранние созданные), илиclosest(выбрать maxn окон, которые ближе всего к целевому прямоугольнику); если опущено, по умолчаниюclosestдля перемещения, разметки и подгонки иnewestдля всего остального - размер
hs.geometry(действителен только для разметки и подгонки), указывающий желаемый оптимальный коэффициент соотношения сторон для разметки окон; если опущено, по умолчанию 1x1 (т.е. квадратные окна) - для перемещения, разметки и подгонки, прямоугольник
hs.geometry, или единичный прямоугольник плюс подсказка экрана (дляhs.screen.find()), указывающий целевой прямоугольник для команды - для полноэкранного и максимального режима, подсказка экрана, указывающая желаемый экран; если опущено, используется текущий экран окна
Вы должны помещать правила с более высоким приоритетом (с высокоспециализированными windowfilter) первыми, а «резервные» правила (с более общими windowfilter) — последними; аналогично, внутри правила вы должны иметь команды для более «важных» (т.е. соответствующих вашему текущему рабочему процессу) окон первыми (перемещение, максимизация...) и после этого обращаться с менее важными окнами, если таковые остаются, например, помещая их в стороне (минимизация). unhide и hide, если используются, обычно должны помещаться в свои собственные правила (с windowfilter, который разрешает невидимые окна для unhide) которые идут перед другими правилами, имеющими дело с фактическим расположением окна - в отличие от других действий, они не «потребляют» окна, делая их недоступными для последующих правил, так как действуют на приложения.
Для избежания работы с глубоко вложенными картами, вы можете определить макет в ваших скриптах через список, где каждый элемент (или строка) обозначает правило; в свою очередь каждое правило может быть упрощённым списком из двух элементов:
- windowfilter или таблицу аргументов конструктора для одного (см.
hs.window.filter.new()иhs.window.filter:setFilters()) - одну строку, содержащую все команды (действие и параметры) в порядке следования; действия и селекторы могут быть сокращены до 3 символов; все токены должны быть разделены пробелами (не используйте пробелы внутри
hs.geometryстрок конструктора); для большей ясности вы можете разделить команды с|(знак вертикальной черты)
Примеры строк команд:
-
"move 1 [0,0,50,50] -1,0"перемещает ближайшее окно в верхний левый квадрант левого экрана -
"max 0,0"максимизирует все окна на первичном экране, одно поверх другого -
"move 1 foc [0,0,30,100] 0,0 | tile all foc [30,0,100,100] 0,0"перемещает последнее окно в фокусе в левую треть,
и размечает оставшиеся окна на правой стороне, сохраняя последнее окно в фокусе сверху и слева
-
"1 new [0,0,50,100] 0,0 | 1 new [50,0,100,100] 0,0 | min"делит первичный экран между двумя самыми новыми окнами
и минимизирует все остальные окна
Каждый макет может работать в «пассивном» или «активном» режимах; пассивные макеты должны вызываться вручную (через hs.hotkey.bind(), hs.menubar, и т.д.), в то время как активные макеты постоянно применяют свои правила (см. hs.window.layout:start() для получения дополнительной информации); в общем случае следует избегать наличия нескольких активных макетов, нацеленных на те же окна, так как результаты будут непредсказуемыми (если такая ситуация обнаруживается, вы увидите ошибку в консоли Hammerspoon); вы можете иметь несколько активных макетов, но будьте осторожны, чтобы поддерживать ясное «разделение обязанностей» между их соответствующими windowfilter.
Каждый макет может иметь связанную конфигурацию экрана; в таком случае макет будет действителен только в то время, пока текущее расположение экрана соответствует ему; см. hs.window.layout:setScreenConfiguration() для получения дополнительной информации.
Обзор API
- Переменные - Настраиваемые значения
- Функции - API-вызовы, предлагаемые непосредственно расширением
- Конструкторы - API-вызовы, возвращающие объект, обычно тот, что предлагает методы API
- Методы - API-вызовы, которые можно выполнять только над объектом, возвращенным конструктором
Документация API
Переменные
applyDelay
| Подпись | hs.window.layout.applyDelay |
|---|---|
| Тип | Переменная |
| Описание |
При применении правила окно-макета в режиме «активного режима», они прервутся на это количество времени в секундах, чтобы позволить окнам |
| Источник | extensions/window/window_layout.lua строка 598 |
screensChangedDelay
| Подпись | hs.window.layout.screensChangedDelay |
|---|---|
| Тип | Переменная |
| Описание |
Количество секунд ожидания после обнаружения изменения конфигурации экрана, прежде чем |
| Источник | extensions/window/window_layout.lua строка 736 |
Функции
applyLayout
| Подпись | hs.window.layout.applyLayout(rules) |
|---|---|
| Тип | Функция |
| Описание |
Применяет макет |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/window/window_layout.lua строка 871 |
pauseAllInstances
| Подпись | hs.window.layout.pauseAllInstances() |
|---|---|
| Тип | Функция |
| Описание |
Приостанавливает все активные экземпляры windowlayout |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 849 |
resumeAllInstances
| Подпись | hs.window.layout.resumeAllInstances() |
|---|---|
| Тип | Функция |
| Описание |
Возобновляет все активные экземпляры windowlayout |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 860 |
Конструкторы
новый
| Подпись | hs.window.layout.new(rules[,logname[,loglevel]]) -> hs.window.layout object |
|---|---|
| Тип | Конструктор |
| Описание |
Создаёт новый объект hs.window.layout. |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 311 |
Методы
применить
| Подпись | hs.window.layout:apply() |
|---|---|
| Тип | Метод |
| Описание |
Применяет макет. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/window/window_layout.lua строка 576 |
получитьПравила
| Подпись | hs.window.layout:getRules() -> table |
|---|---|
| Тип | Метод |
| Описание |
Возвращает таблицу со всеми правилами (и конфигурацией экрана, если она присутствует), определёнными для этого объекта windowlayout. |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 342 |
приостановить
| Подпись | hs.window.layout:pause() -> hs.window.layout object |
|---|---|
| Тип | Метод |
| Описание |
Приостанавливает активный объект windowlayout; во время приостановки не будет происходить автоматическое управление окнами. |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 683 |
возобновить
| Подпись | hs.window.layout:resume() -> hs.window.layout object |
|---|---|
| Тип | Метод |
| Описание |
Возобновляет активный объект windowlayout после его приостановки. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/window/window_layout.lua строка 641 |
установитьКонфигурациюЭкрана
| Подпись | hs.window.layout:setScreenConfiguration(screens) -> hs.window.layout object |
|---|---|
| Тип | Метод |
| Описание |
Определяет конфигурацию экрана, которая позволяет применить этот макет окна. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Примеры | |
| Источник | extensions/window/window_layout.lua строка 792 |
запустить
| Подпись | hs.window.layout:start() -> hs.window.layout object |
|---|---|
| Тип | Метод |
| Описание |
Переводит объект windowlayout в "активный режим". |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/window/window_layout.lua строка 620 |
остановить
| Подпись | hs.window.layout:stop() -> hs.window.layout object |
|---|---|
| Тип | Метод |
| Описание |
Останавливает объект windowlayout (т. е. он больше не находится в "активном режиме"). |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/window/window_layout.lua строка 705 |
© 2014–2017 Hammerspoon contributors
Licensed under the MIT License.
https://www.hammerspoon.org/docs/hs.window.layout.html