Jak mogę wysłać aktualnie aktywne okno do tyłu?

15

Czy istnieje skrót lub coś takiego, aby wysłać aktualnie aktywne okno z tyłu ekranu, jednocześnie pozostawiając je otwarte (tak, aby znalazło się „pod” wszystkimi innymi otwartymi oknami)?

Tetsujin
źródło
2
H wyśle ​​bieżącą aplikację (w tym wszystkie jej okna) z tyłu i ukryje ją, dopóki nie przeniesiesz jej z powrotem do przodu (z doku lub przez -TAB, aby ponownie wybrać aplikację). W większości aplikacji Shift-- ~ będzie przełączać się między oknami bieżącej aplikacji, co prawdopodobnie jest najbliższe temu, czego szukasz.
Kanał Mic
Wiem o tym, nie tego chcę.
1
Jeśli chcesz wysłać go do tyłu, które okno powinno być dla ciebie skoncentrowane? Poprzednie wybrane okno?
sayzlim,

Odpowiedzi:

10

Krótka odpowiedź: Nie , Apple nie zapewnia interfejsu API, który pozwala na zmianę indeksu okna aplikacji, z wyjątkiem przeniesienia okna do przodu (indeks 1). Nie ma eleganckich rozwiązań . Ale:

Długa odpowiedź: tak , możesz użyć AppleScript, aby skutecznie przenieść okno na tył stosu okien obsługujących AppleScript, zbierając listę okien, a następnie szybko przesuwając każde ( z wyjątkiem skrajnego przodu) do przodu, pozostawiając wybrane okno z tyłu.

Oto przykład AppleScript, który wysyła okno Findera z przodu do tyłu.

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

Ten skrypt jest oparty na rozwiązaniu JMichaelTX omawianym na forum KeyboardMaestro.

Przetasowanie jest niezwykle szybkie, ale w Edytorze skryptów możesz sprawdzić, jak to działa, pozostawiając „506” na dole i wyskakując „502-505” w sposób, który zachowuje ich kolejność:

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

Możesz zamapować ten AppleScript na usługę lub skrót klawiaturowy, albo a) wprowadzając skrypt w akcję Uruchom AppleScript w usłudze Automator lub b) używając programu uruchamiającego (Alfred, Keyboard Maestro itp.). Aby uzyskać szczegółowe informacje na temat przypisywania klawiatury Applescript, zobacz: Jak przypisać skrót klawiaturowy do napisanego kodu AppleScript?

Może to zaspokoić potrzeby OP - nie jest jasne z oryginalnego postu. To rozwiązanie można również rozszerzyć na wiele aplikacji obsługujących AppleScript. Ja nie , jednak świadomość rozwiązania, aby efektywnie pracować z mieszanką skrypty i non-skrypty okien, ze względu na fakt, że w AppleScript, System Eventsadresowalnych szyby do zastosowań innych niż skrypty nie mają set indexczasownik / nieruchomość. Dla niektórych okien istnieje akcja „AXRaise”, gdy urządzenia pomocnicze / dostępność są włączone, ale nie dotyczy to również wszystkich okien. Istnieją skomplikowane włamania, które polegają na przejściu przez każdą aktywną aplikację i pokazaniu / ukryciu lub zminimalizowaniu / przywróceniu okien, ale są bałaganem.

Powiązane dyskusje:

JeremyDouglass
źródło
Czy możliwe jest przesłanie okna dowolnej aplikacji do tyłu, zamiast okna określonej aplikacji?
Di Liu
Niestety, jak w mojej Mojave, wydaje się, że to już nie działa.
Edward Falk,
Od czasu Mojave rozumiem, że kontrolowanie Findera za pomocą AppleScript wymaga teraz uprawnień do uruchamiania (nieprzetestowane). Jeśli występują błędy takie jak errAEEventNotPermitted, istnieją rozwiązania umożliwiające dodanie tych uprawnień - patrz pokrewne dyskusje: forums.developer.apple.com/thread/106949
JeremyDouglass
2

Twoje pytanie nie jest zbyt jasne, ale jeśli chcesz, aby skrót przechodził między wszystkimi oknami aktualnie aktywnej aplikacji, powinieneś być w stanie to zrobić za pomocą Command~skrótu klawiaturowego.

~Klucz zazwyczaj znajduje się na lewo od 1klucza.

Aby wyjaśnić, Command~skrót klawiszowy polega na przewijaniu przez wszystkie okna bieżącej aplikacji, w której się znajdujesz. Na przykład, jeśli używasz MS Word i masz otwarte trzy dokumenty, przejdzie przez te trzy dokumenty.

Jednak Command~skrót klawiaturowy nie przełącza się między kartami. Na przykład, jeśli masz Safari otwarte z trzema oknami, a każde okno ma pięć otwartych kart, użycie tego skrótu spowoduje przełączanie między trzema oknami, a nie poszczególnymi kartami.

Inną opcją, która może osiągnąć to, co chcesz, jest CommandMskrót klawiaturowy. Jednak minimalizuje to obecnie aktywne okno Docka, więc podejrzewam, że nie tego chcesz.

Jeśli całkowicie źle zrozumiałem twoje pytanie, proszę wyjaśnij.

Monomeeth
źródło
Myślę, że jest to przypadek użycia, którego chce OP: powiedz, że mam aplikację wiadomości przed moją aplikacją poczty i chcę szybko przenieść aplikację poczty na pierwszy plan i wysyłać wiadomości w tle, mogę zrobić klawiaturę skrót, a aplikacja wiadomości będzie za moją aplikacją poczty. Wypróbowałem skrót klawiaturowy i nie udało się tego.
owlswipe
Myślę, że masz na myśli klucz. ~ jest jedynym drukowanym, gdy Shift jest trzymany i jest wciśnięty
Crowder