Каждое окно — на нужном мониторе и в нужном размере.
Небольшое приложение для строки меню macOS. Подключите монитор, разбудите Mac или откройте новое окно — Perch поставит его туда, куда велят ваши правила, а окна, которые вы двигаете вручную, оставит в покое.
0,7 МБ · macOS 14 и новее · Apple silicon · Что нового
Зачем Perch
Утилиты, которые восстанавливают сохранённую раскладку окон, обычно узнают окна по точному заголовку. Но редакторы и терминалы меняют заголовки постоянно, а некоторые приложения — например, VSCode — сами двигают новое окно через мгновение после открытия. Снимок перестаёт совпадать или его перебивают.
Perch работает с правилами: «окна VSCode — на вертикальный монитор», «этот профиль Chrome — на весь экран ноутбука». Правила срабатывают, как бы ни менялись заголовки, а пока приложение пристраивает своё окно, Perch применяет их снова.
Что умеет
Всё живёт в строке меню, значка в Dock нет.
Правила, а не снимки
Приложение и, если нужно, шаблон заголовка → монитор и способ размещения: точное положение, та же доля другого монитора или весь экран.
Профили мониторов
Свой набор правил для каждой комбинации мониторов. Мониторы узнаются по производителю, модели и серийному номеру, а не по порядку подключения.
Справляется с непоседами
Новые окна ставятся на место сразу при появлении и ещё немного удерживаются там, поэтому приложения, которые сами двигают свои окна, всё равно оказываются там, где сказано в правиле.
Мониторы, сон, Spaces
Правила применяются заново, когда мониторы подключают и отключают, после выхода из сна и при переключении на Space с окнами, до которых Perch ещё не добрался.
Снимок в один клик
Превратите текущую раскладку в правила или закрепите только активное окно. Окна VSCode узнаются по проекту, окна Chrome — по профилю, поэтому правила переживают смену заголовков.
Окно настроек и горячие клавиши
Правила, профили и исключённые приложения редактируются в окне или прямо в JSON-файле. Глобальные сочетания клавиш для «Применить правила» и «Снимок окон».
Все правила на виду
Окно настроек показывает все правила профиля и позволяет прямо на месте сменить монитор, размещение или шаблон заголовка.
Профиль мониторов с правилами для VSCode, Chrome, Терминала, Slack и Telegram.
Когда Perch двигает окна
Perch вмешивается только в этих случаях. В остальное время окно, которое вы передвинули, остаётся там, где вы его оставили.
Событие
Какие окна
Появилось окно приложения, для которого есть правило
Это окно; 2 секунды оно удерживается на месте, пока приложение его пристраивает. Небольшие всплывающие окна, например окна входа, Perch не трогает
Изменились мониторы: подключили, отключили, Mac вышел из сна
Все окна
«Применить правила» из меню или по горячей клавише
Все окна
Изменилось правило
Только окна, к которым оно относится
Переключение на другой Space
Окна, до которых Perch раньше не мог добраться
Установка
Скачайте и распакуйте
Перед первым запуском перенесите Perch.app в папку «Программы».
Откройте в первый раз
Perch не нотаризован Apple, поэтому macOS заблокирует первый запуск. Откройте его один раз, затем зайдите в Системные настройки → Конфиденциальность и безопасность и нажмите Всё равно открыть. В macOS 14 можно вместо этого щёлкнуть по приложению с нажатой Control и выбрать «Открыть».
Разрешите универсальный доступ
Без него Perch не может двигать окна: Системные настройки → Конфиденциальность и безопасность → Универсальный доступ → включите Perch. Перезапускать не нужно — Perch сам заметит разрешение.
Создайте первые правила
Расставьте окна, затем в меню птички в строке меню выберите Снимок окон → правила. Донастройте правила в Открыть настройки… и включите Запускать при входе.
Обновление: скачайте новую версию и замените приложение. Правила хранятся в ~/Library/Application Support/Perch, а разрешение универсального доступа сохранится. Чтобы удалить Perch, завершите его и удалите приложение и эту папку.
Настройки в текстовом файле
Окно настроек редактирует понятный JSON-файл, а изменения, внесённые в него вручную, Perch подхватывает сам.
Rule for Active Window: saves where the focused window is now as a rule without touching other rules, from the menu or a global shortcut. The menu shows the app and title of that window below the item. An existing rule for that window is updated; a specific rule is placed before the app's broader ones so it takes effect.
Fixed
Popups such as browser sign-in windows are left alone instead of being stretched to the main window's frame: a new window that opens next to an existing window of the app and is less than half its area keeps the size and place the app gave it.
Rules per app with an optional window-title regex; the first matching rule wins.
Placement modes: exactFrame (relative to the display's visible area), displayOnly (scales position and size to the target display, so moving back and forth restores the frame) and fill.
Display profiles keyed by the set of connected displays, identified by vendor/model/serial; exact match first, then the most specific subset, with an empty profile as the catch-all.
New windows are placed when they appear and re-placed on every move/resize during a configurable enforcement window (default 2 s), so apps that reposition themselves (VSCode) end up where the rule says.
Rules are re-applied after display changes, including sleep and wake.
Windows on other Spaces are caught up when their Space becomes active.
Windows skipped because they were unreadable or minimized are re-checked after 2, 7 and 17 s.
Moves that leave the size off target (cross-display moves) are retried once.
Manual moves stick: config edits only touch windows whose rule changed.
Snapshot
Turns the current window layout into exactFrame rules for the current display set.
Apps with several windows get stable title patterns: the VSCode workspace, the Chrome profile suffix, or the exact title as a last resort.
Keeps existing rules that no visible window matches (e.g. windows on other Spaces).
Config
Human-readable JSON in ~/Library/Application Support/Perch/config.json, reloaded when it changes; parse errors are shown with the path of the offending value while the last valid config stays in effect.
Config window: view everything and edit rules (enable, title regex, display, mode, order, delete, pin to the current window position), profiles (create for current displays, rename, delete), timings, excluded apps and global shortcuts.
Excluded apps that Perch never moves and Snapshot skips.
Global shortcuts for Apply Rules Now and Snapshot, layout-independent.
App
Menu bar app with Apply Rules Now, Snapshot, Open Config, Displays, Launch at Login and About Perch (icon, version, description and a link to the website).
Accessibility permission check that picks up the grant without a restart.
App icon and a matching template menu bar icon.
Persisted log summary for every pass, e.g. applyAll (displays changed): 12 windows: 0 moved, 12 in place.
Build with make: app bundle, self-signed code signing (keeps the Accessibility grant across rebuilds), install to ~/Applications, encrypted backup and restore of the signing identity.
Website at https://realsweb.com/Perch with the download, install steps and this changelog (make site builds it).