Spec-Zone.ru › Hammerspoon

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

  • Переменные - Настраиваемые значения
    • applyDelay
    • screensChangedDelay
  • Функции - API-вызовы, предлагаемые непосредственно расширением
    • applyLayout
    • pauseAllInstances
    • resumeAllInstances
  • Конструкторы - API-вызовы, возвращающие объект, обычно тот, что предлагает методы API
    • new
  • Методы - API-вызовы, которые можно выполнять только над объектом, возвращенным конструктором
    • apply
    • getRules
    • pause
    • resume
    • setScreenConfiguration
    • start
    • stop

Документация 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)
Тип Функция
Описание

Применяет макет

Параметры
  • rules - см. hs.window.layout.new()
Возвращаемое значение
  • Нет
Примечания
  • это обертка для удобства использования в «пассивном режиме», которая создает, применяет и удаляет объект windowlayout; не используйте общие windowfilter в 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.

Параметры
  • rules - таблица, содержащая правила для этого окна (см. описание модуля); дополнительно, если присутствует специальный ключ screens, его значение должно быть корректной конфигурацией экрана в соответствии с hs.window.layout:setScreenConfiguration()
  • logname - (необязательно) имя объекта hs.logger для нового объекта windowlayout; если опущено, используется логгер класса
  • loglevel - (необязательно) уровень логирования для объекта hs.logger для нового объекта windowlayout
Возвращаемое значение
  • новый объект windowlayout
Источник extensions/window/window_layout.lua строка 311

Методы

применить
Подпись hs.window.layout:apply()
Тип Метод
Описание

Применяет макет.

Параметры
  • Никаких
Возвращаемое значение
  • объект hs.window.layout
Примечания
  • если для этого windowfilter определена конфигурация экрана, и она в настоящее время не удовлетворяется, этот метод ничего не сделает
Источник extensions/window/window_layout.lua строка 576
получитьПравила
Подпись hs.window.layout:getRules() -> table
Тип Метод
Описание

Возвращает таблицу со всеми правилами (и конфигурацией экрана, если она присутствует), определёнными для этого объекта windowlayout.

Параметры
  • Никаких
Возвращаемое значение
  • таблица, содержащая правила этого объекта windowlayout; вы можете передать эту таблицу (при необходимости после выполнения корректных манипуляций) в hs.window.layout.new()
Источник extensions/window/window_layout.lua строка 342
приостановить
Подпись hs.window.layout:pause() -> hs.window.layout object
Тип Метод
Описание

Приостанавливает активный объект windowlayout; во время приостановки не будет происходить автоматическое управление окнами.

Параметры
  • Никаких
Возвращаемое значение
  • объект hs.window.layout
Источник extensions/window/window_layout.lua строка 683
возобновить
Подпись hs.window.layout:resume() -> hs.window.layout object
Тип Метод
Описание

Возобновляет активный объект windowlayout после его приостановки.

Параметры
  • Никаких
Возвращаемое значение
  • объект hs.window.layout
Примечания
  • если для этого windowfilter определена конфигурация экрана, и она в настоящее время не удовлетворяется, этот метод ничего не сделает
Источник extensions/window/window_layout.lua строка 641
установитьКонфигурациюЭкрана
Подпись hs.window.layout:setScreenConfiguration(screens) -> hs.window.layout object
Тип Метод
Описание

Определяет конфигурацию экрана, которая позволяет применить этот макет окна.

Параметры
  • screens - словарь, где каждый ключ должен быть корректным "подсказкой" для hs.screen.find(), а соответствующее значение может быть:
    • true - экран должен быть в настоящее время присутствующим (подключённым и активным)
    • false - экран должен быть в настоящее время отсутствующим
    • точка объекта hs.geometry (или аргумент конструктора) - экран должен быть присутствующим и находиться в этом конкретном положении в текущей компоновке (в соответствии с hs.screen:position())
Возвращаемое значение
  • объект hs.window.layout
Примечания
  • Если screens равен nil, любая предыдущая конфигурация экрана удаляется, и этот макет окна будет всегда разрешён
  • Для "активных" макетов окна вызов этого метода должен предшествовать вызову hs.window.layout:start()
  • Используя объекты размеров hs.geometry, можно определять отдельные макеты для одного физического экрана с различными разрешениями
  • С помощью этого метода можно определять различные макеты окон для различных конфигураций экранов (в соответствии с параметрами системы->Дисплей->Компоновка).
  • Например, предположим, что вы определяете два макета окна "графический дизайн", один для "рабочего стола с двумя мониторами", а другой для "только ноутбук":
    • "пассивный режим" использования: вы вызываете :apply() на обоих горячих клавишах (через hs.hotkey:bind()), но будет применён только соответствующий макет для текущей компоновки
    • "активный режим" использования: вы просто вызываете :start() на обоих макетах окна; при переключении между рабочими столами (путем подключения или отключения внешних мониторов) соответствующий макет "вступает в силу" автоматически - это, по сути, удобная обертка, которая вызывает :pause() для неактуального макета и :resume() для соответствующего макета при каждом изменении конфигурации экрана
Примеры
Источник extensions/window/window_layout.lua строка 792
запустить
Подпись hs.window.layout:start() -> hs.window.layout object
Тип Метод
Описание

Переводит объект windowlayout в "активный режим".

Параметры
  • Никаких
Возвращаемое значение
  • объект hs.window.layout
Примечания
  • Если для этого объекта windowfilter определена конфигурация экрана, и она в настоящее время не удовлетворяется, объект windowfilter будет переведён в "активный режим", но останется приостановленным, пока не будут удовлетворены требования к конфигурации экрана
  • В активном режиме объект windowlayout будет постоянно отслеживать объекты windowfilters для соблюдения его правил, подписавшись на все соответствующие события. Как только будет обнаружено какое-либо изменение (например, перетаскивание окна, смена фокуса, открытие или закрытие приложений/окон и т. д.), соответствующее правило будет автоматически повторно применено. Другими словами, определённые правила будут оставаться в силе всё время, а не ожидать ручного вмешательства с помощью hs.window.layout:apply().
Источник extensions/window/window_layout.lua строка 620
остановить
Подпись hs.window.layout:stop() -> hs.window.layout object
Тип Метод
Описание

Останавливает объект windowlayout (т. е. он больше не находится в "активном режиме").

Параметры
  • Никаких
Возвращаемое значение
  • объект hs.window.layout
Источник extensions/window/window_layout.lua строка 705

© 2014–2017 Hammerspoon contributors
Licensed under the MIT License.
https://www.hammerspoon.org/docs/hs.window.layout.html

Spec-Zone.ru

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