Как я могу отправить текущее активное окно обратно?

15

Существует ли ярлык для отправки текущего активного окна на заднюю часть экрана, при этом он остается открытым (чтобы он оказался «под» всеми остальными открытыми окнами)?

Tetsujin
источник
2
H отправит текущее приложение (включая все его окна) на задний план и будет скрывать его до тех пор, пока вы не вернете его на передний план (из док-станции или с помощью -TAB для повторного выбора приложения). В большинстве приложений Shift-- ~ будет переключаться между окнами текущего приложения, что, вероятно, ближе всего к тому, что вы ищете.
Mic Channel
Я знаю об этом, это не то, что я хочу.
1
Если вы хотите отправить все это назад, какое окно должно быть сфокусировано? Предыдущее выбранное окно?
Сайзлим

Ответы:

10

Краткий ответ: нет , Apple не предоставляет API, который позволяет изменять индекс окна приложения, кроме как путем переноса окна вперед (индекс 1). Нет элегантных решений . Но:

Длинный ответ: Да , вы можете использовать AppleScript, чтобы эффективно переместить окно в конец стека окон с поддержкой AppleScript, собрав список окон, а затем быстро переместив каждое из них ( кроме самого переднего) вперед, оставляя выбранное окно сзади.

Вот пример AppleScript, который отправляет самое переднее окно Finder сзади.

tell application "Finder"
    set winList to every window whose visible is true
    if not winList = {} then
        repeat with oWin in (items 1 through -2 of reverse of winList)
            set index of oWin to 1
        end repeat
    end if
end tell

Этот скрипт основан на решении JMichaelTX, которое обсуждается на форуме KeyboardMaestro.

Перестановка происходит невероятно быстро, но в редакторе сценариев вы можете проверить, как он работает, оставив «506» внизу и вытолкнув «502-505» таким образом, чтобы сохранить их порядок:

get every window whose visible = true
    --> {Finder window id 506, Finder window id 505, Finder window id 504, Finder window id 503, Finder window id 502}
set index of Finder window id 502 to 1
    --> 1
set index of Finder window id 503 to 1
    --> 1
set index of Finder window id 504 to 1
    --> 1
set index of Finder window id 505 to 1
    --> 1

Вы можете сопоставить этот AppleScript со службой или сочетанием клавиш, либо а) вставив сценарий в действие «Выполнить AppleScript» внутри службы Automator, либо б) с помощью средства запуска (Alfred, Keyboard Maestro и т. Д.). Подробнее о назначении клавиатуры Applescript см .: Как назначить сочетание клавиш для написанного мной AppleScript?

Это может удовлетворить потребности ОП - это неясно из исходного поста. Это решение также может быть распространено на несколько приложений с поддержкой AppleScript. Однако я не знаю решения, позволяющего эффективно работать с сочетанием окон с возможностью сценариев и без сценариев, поскольку в AppleScript System Eventsадресуемые окна для приложений без сценариев не имеют set indexглагола / свойства. Существует действие «AXRaise» для некоторых окон, когда вспомогательные устройства / специальные возможности включены, но это также не относится ко всем окнам. Существуют хитроумные хаки, которые включают в себя обход каждого активного приложения и показ / скрытие или сворачивание / восстановление окон, но это беспорядок.

Связанные обсуждения:

JeremyDouglass
источник
Можно ли отправить окно любого приложения на заднее, а не окно конкретного приложения?
Ди Лю
К сожалению, с Мохаве, это, кажется, больше не работает.
Эдвард Фальк
Начиная с Mojave, я понимаю, что для управления Finder с помощью AppleScript теперь нужны разрешения для запуска (не проверено). Если вы получаете ошибки, такие как errAEEventNotPermitted, существуют решения для добавления этих разрешений - см. Соответствующие обсуждения: forums.developer.apple.com/thread/106949
JeremyDouglass
2

Ваш вопрос не очень понятен, но если вам нужен ярлык для циклического перебора всех окон текущего активного приложения, вы сможете сделать это с помощью Command~сочетания клавиш.

~Ключ обычно находится слева от 1клавиши.

Просто чтобы уточнить, что Command~делает комбинация клавиш, это циклически перебирает все окна текущего приложения, в котором вы находитесь. Например, если вы используете MS Word и у вас открыто три документа, он будет циклически перебирать эти три документа.

Однако Command~сочетание клавиш не циклически переключается между вкладками. Например, если у вас открыт Safari с тремя окнами, а в каждом окне открыто пять вкладок, использование этого ярлыка будет циклически проходить через три окна, а не через отдельные вкладки.

Другой вариант, который может достичь того, что вы хотите, это CommandMсочетание клавиш. Однако это сводит к минимуму текущее активное окно дока, поэтому я подозреваю, что это не то, что вам нужно.

Если я неправильно понял ваш вопрос, уточните, пожалуйста.

Мономет
источник
Я думаю, что это тот случай использования, которого хочет ОП: скажем, у меня приложение почты открыто перед моим почтовым приложением, и я хочу быстро вывести почтовое приложение на передний план и отправить сообщения на задний план, я могу сделать клавиатуру ярлык и приложение сообщений будет позади моего почтового приложения. Я попробовал комбинацию клавиш, но этого не произошло.
owlswipe
Я думаю, что вы имеете в виду ключ. ~ печатается только тогда, когда удерживается Shift и нажата `
Crowder