Czy można utworzyć skrót do przełączania widoczności paska menu (który zachowałby się tak, jak robi to stacja dokująca)?

3

Mogę wybrać w Syst Prefs, aby zawsze wyświetlać pasek menu lub ukrywać się z auto-show (auto-show jest pokazywany po najechaniu myszą, lub pokazany za pomocą skrótu klawiaturowego).

Ale kiedy pracuję, pasek menu powinien być zawsze widoczny. A kiedy odtwarzam, zwykle chcę to ukryć.

Podoba mi się to ze stacją dokującą, którą mogę nacisnąć, commandoptiondaby pokazać lub ukryć stację dokującą, i pozostaje ona widoczna lub ukryta, dopóki nie naciśnie tego samego skrótu.

Chciałbym, aby pasek menu również działał w ten sposób. Czy można w jakiś sposób stworzyć taki skrót?


źródło
1
Tylko do twojej wiadomości, pobrałem i przetestowałem FastScripts pod macOS 10.12.3 z moim kodem jako .scpt i podałem mu skrót klawiaturowy ⌃⌘Mi działa świetnie! Znacznie lepiej niż jako powiązanie klucza usługi Automatora i Preferencji systemowych.
user3439894

Odpowiedzi:

1

Wprowadzamy drobne poprawki w oryginalnym kodzie z odpowiedzi użytkownika3439894. Uruchomienie tego poprawionego kodu nie spowoduje wyświetlenia aplikacji preferencji systemowych.

tell application "System Preferences"
    reveal pane id "com.apple.preference.general"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "General"
    click checkbox "Automatically hide and show the menu bar" 
end tell
delay 1
quit application "System Preferences"

W niektórych komentarzach do mojej odpowiedzi wskazano, gdzie mam w skrypcie polecenie opóźnienia, co powoduje, że skrypt nie działa. W moim systemie ten skrypt działa.

wprowadź opis zdjęcia tutaj

Jednak ten skrypt w moim systemie nie będzie działać, jeśli wstawię polecenie opóźnienia przed zdarzeniem systemowym.

wprowadź opis zdjęcia tutaj

wch1zpink
źródło
@jaepage, kod wch1zpink czasami zawiedzie z powodu miejsca, w którym umieścił delay! W takim przypadku należy zaznaczyć pole wyborudelay przed System Eventskliknięciem , aby umożliwić dostęp do elementu i nie musi on istnieć wcześniej, zwłaszcza gdy jest zagnieżdżony, jak napisane jest moje. quit
user3439894
@ user3439894 Uznałem za konieczne ustawienie opóźnienia przed komendą quit, ponieważ z mojego systemu, z jakiegoś powodu, Preferencje systemowe były zamykane, zanim pole wyboru zostało zaznaczone w poprzedniej komendzie
wch1zpink
Twój kod bez opóźnienia przed wywołaniem zdarzenia systemowego nie powiedzie się, jeśli pole wyboru nie jest jeszcze dostępne do kliknięcia i stale zawiesza się w moim systemie bez opóźnienia, tak jak w moim kodzie. Jest to część tego, dlaczego skrypty interfejsu użytkownika nie są preferowaną drogą! Używam skryptów interfejsu użytkownika tylko wtedy, gdy nie mam innego wyboru.
user3439894
@ user3439894 Proszę spojrzeć na zmiany, które wprowadziłem do mojej oryginalnej odpowiedzi. Czy masz wgląd w to, dlaczego moja wersja skryptu działa dla mnie, a nie dla ciebie? Używam systemu operacyjnego Sierra.
wch1zpink
Pozwól, że spróbuję wyjaśnić różne rzeczy ... Nie ma nic złego w tym, delayże masz to miejsce, ale gdy kod, jak napisano, zawodzi w moim systemie, a nie twój, to dlatego niektóre skrypty interfejsu użytkownika nie zawsze są wiarygodne dla każdej osoby system. Wyłącznie z programowego punktu widzenia, pole wyboru musi być dostępne, zanim będzie można na nie zareagować, z tego samego powodu, dla którego nie można zamknąć aplikacji przed działaniem i dlaczego opóźnienie jest właściwie odpowiednie w dowolnym miejscu (lub z jakichś powodów potrzebne) ) i może wymagać różnych wartości w zależności od konkretnego systemu i jego ogólnego wykorzystania.
user3439894
1

Zapytałeś: „ Czy można utworzyć skrót w celu przełączania widoczności paska menu (który zachowałby się tak, jak robi to stacja dokująca)? ”, A krótka odpowiedź brzmi: tak .

Jednak dłuższą odpowiedzią jest, chociaż technicznie i natywnie jest możliwe utworzenie przepływu pracy usługi Automatora, do którego przypisany jest skrót klawiaturowy do ukrywania / odkrywania paska menu w OS X 10.11 i nowszych, w tym w bieżącym systemie macOS, nie jest bez problemów.

  • Musisz przypisać usłudze Automator skrót klawiaturowy, który nie koliduje z istniejącym skrótem w każdej aplikacji, która może być aktywna po uruchomieniu skrótu klawiaturowego usługi.
  • Każda aplikacja, która skupia się po uruchomieniu skrótu klawiaturowego usługi, musiałaby zostać dodana do Preferencji systemowych> Bezpieczeństwo i prywatność> Prywatność> Dostępność, aby skrót klawiaturowy usługi działał.

Możliwe obejście drugiego punktu powyżej byłoby, gdyby istniała aplikacja innej firmy, którą można globalnie ustawić tak, aby uruchamiała przepływ pracy usługi Automator (lub kod AppleScript jako skrypt AppleScript lub aplikacja nie korzystająca z usługi Automator). Może to obejmować aplikacje takie jak Alfred, FastScripts, Karabiner, Karabiner-Elements, Keyboard Maestro itp., A ponieważ nie testowałem aplikacji innych firm w tym konkretnym scenariuszu, mogę tylko to zaoferować.

A co powiesz na aplikację AppleScript, którą możesz umieścić w Docku, więc można ją łatwo kliknąć, aby przełączyć stan paska menu? Musisz tylko dodać tę aplikację AppleScript do Preferencji systemowych> Bezpieczeństwo i prywatność> Prywatność> Dostępność, aby działała.

Zamiast aplikacji innej firmy lub jako usługi Automatora i tak jak zwykłej aplikacji AppleScript, masz wbudowany skrót klawiaturowy za pomocą Spotlight, w którym naciskasz spacei pierwszą lub dwie litery nazwy, którą nadałeś aplikację AppleScript, a następnie naciśnij enter. Na przykład nazwij go tmb.app, aby przełączyć pasek menu, po którym naciśnij, spacetmenteraby uruchomić aplikację AppleScript. W końcu podwójnie masz już zainstalowaną aplikację o nazwie tm .

Jednak powiedziawszy, nie jest również pozbawione możliwych problemów, ponieważ polega na skryptowaniu interfejsu użytkownika, co oznacza, że ​​musi otworzyć Preferencje systemowe w ustawieniach ogólnych i kliknąć pole wyboru „Automatycznie ukryj i pokaż pasek menu” i zamknąć Preferencje systemowe. Oznacza to, że po uruchomieniu aplikacji musisz ją uruchomić, a nie ręcznie wykraść fokus z Preferencji systemowych podczas zdarzeń skryptowych interfejsu użytkownika. Innymi słowy, musisz przerwać wielozadaniowość na kilka sekund.

Częściowo jednym z problemów związanych z używaniem AppleScript i / lub skryptów interfejsu użytkownika do ukrywania / odkrywania paska menu jest to, że nie jest tak wdzięczne, jak ukrywanie Docka za pomocą wbudowanego skrótu klawiaturowego, ale jest to przynajmniej wykonalne.

To powiedziawszy, oto kod AppleScript, którego można użyć w skrypcie / aplikacji AppleScript, usłudze Automator lub ewentualnie w aplikacji innej firmy, która przełącza stan paska menu w OS X 10.11 i nowszych za pomocą skryptów interfejsu użytkownika.


tell application "System Preferences"
    reveal pane id "com.apple.preference.general"
    delay 1
    tell application "System Events"
        click checkbox "Automatically hide and show the menu bar" of window "General" of process "System Preferences"
    end tell
    quit
end tell

Uwaga: nie ma sprawdzania błędów, aby upewnić się, że ten kod działa w systemie OS X 10.11 i nowszych, więc nie próbuj używać go w wersjach systemu OS X wcześniejszych niż 10.11. Należy również pamiętać, że wartość delay polecenia może wymagać dostosowania w zależności od warunków pracy systemu.

użytkownik3439894
źródło
@jaepage, a jeśli nie widzisz okna Preferencje systemowe? Innymi słowy, otwiera się poza ekranem, zaznacza / odznacza pole wyboru i zamyka? Następnie stan paska menu jest przełączany, ale nie trzeba oglądać zdarzeń interfejsu użytkownika. To znaczy, że jeśli Preferencje systemowe znajdują się w Docku, odbije się raz, a kropka będzie pod ikoną aż do zamknięcia.
user3439894
@ user3439894 zasługujesz na uznanie za zaakceptowaną odpowiedź. Czy jest jakiś sposób, aby opublikować moją wersję jako komentarz do twojej odpowiedzi?
wch1zpink
@jaepage, zaktualizowałem kod, aby ukryć okna Preferencji systemowych, zmieniając jednocześnie ukrywanie / wyświetlanie paska menu. Wymieniłem activatena set bounds of window 1 to {0, 0, 0, 0}i tak nie widać okno Preferencje systemowe, ale to sprawia, że zmiany. Możesz po prostu pominąć oba te elementy i nie powinieneś widzieć interfejsu użytkownika.
user3439894
@jaepage, nazwałem aplikację tmb.app do testowania i po jej wyszukaniu raz w Spotlight, tmba następnie kolejne wyszukiwania tylko tm show tmb przed Time Machine . To powiedziawszy, możesz nazwać to czymś innym, co prawie nie pasuje do niczego innego. Właśnie zaproponował TMB , jak to sprawia, że łatwe do zapamiętania dla Przełącz pasku menu , którego pełna nazwa tak nie przyniesie aż Time Machine ale aby mógł złapać się na innych rzeczach też. Musisz dowiedzieć się, która konwencja nazewnictwa działa najlepiej, gdy musisz wpisać tylko jeden lub dwa znaki po ⌘space.
użytkownik3439894
@jaepage, nie polecam używania Automatora i wiązania go z sekwencją klawiszy skrótu w Preferencjach systemowych z powodów, które wyjaśniłem w mojej odpowiedzi, a także dlatego, że nie jest wiarygodny. Właśnie dlatego zasugerowałem aplikacjom innych firm, aby wyzwoliły lub używały tylko metody aplikacji AppleScript w Docku i / lub Spotlight jako aplikacji AppleScript, to wszystko, co musi być autoryzowane, a ta metoda nigdy mnie nie zawiodła!
user3439894
0

Zamieszczam to jako drugą odpowiedź zamiast edycji mojej oryginalnej odpowiedzi, ponieważ ta nowa wersja przykładowego kodu AppleScript rozwiązuje problemy podniesione przy użyciu polecenia i gdzie została umieszczona w kodzie przedstawionym przez wch1zpink i mnie między naszymi wersjami kod .delay

Nowy kod owija znacznie mniejszą wartość dla delay komendy w repeat pętli , co powoduje, że w ciągu całego kodu działają szybciej przy jednoczesnym różnicę rozrządu na podstawie specyfikacji systemowych komputera to było uruchomić na. Dodatkowo, ze względu na użycie skryptów interfejsu użytkownika , dwie repeat pętle zapewniają, że elementy interfejsu użytkownika są dostępne i / lub zostały odpowiednio zmienione przed przejściem dalej w kodzie .

Ten kod został przetestowany w systemie macOS High Sierra i działał jako aplikacja AppleScript , usługa Automator , jak opisano w mojej oryginalnej odpowiedzi, oraz jako plik .scpt AppleScript uruchamiany przez FastScripts z przypisanym skrótem klawiaturowym, podobnie jak w przypadku usługi Automator .

Przykładowy kod AppleScript :

if running of application "System Preferences" then
    try
        tell application "System Preferences" to quit
    on error
        do shell script "killall 'System Preferences'"
    end try
end if

repeat while running of application "System Preferences" is true
    delay 0.01
end repeat

tell application "System Preferences" to ¬
    reveal pane id "com.apple.preference.general"

tell application "System Events"

    repeat until exists checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"
        delay 0.01
    end repeat

    set cbVal to value of checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"

    click checkbox "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences"

    repeat until cbVal is not (value of checkbox ¬
        "Automatically hide and show the menu bar" of ¬
        window "General" of process "System Preferences")
        delay 0.01
    end repeat

end tell

tell application "System Preferences" to quit

    Przewiń w razie potrzeby, aby wyświetlić pełny kod .

 


Uwaga: Przykładowy kod AppleScript jest właśnie taki i, oprócz uwzględnionej obsługi błędów, nie zawiera żadnej dodatkowej obsługi błędów, która może być odpowiednia. Obowiązek polega na dodaniu obsługi błędów, które mogą być odpowiednie, potrzebne lub pożądane. Zajrzyj do instrukcji try i instrukcji błędu w Przewodniku językowym AppleScript . Zobacz także Praca z błędami .

Pamiętaj też, że nie jestem związany z Red Sweater Software , twórcą FastScripts , tylko zadowolony użytkownik ich produktu.

użytkownik3439894
źródło
0
  1. Stworzyłem aplikację z Automatorem przy użyciu tego kodu AppleScript autorstwa „@ user3439894”. Możesz spróbować ustawić opóźnienie na 0,1, które działało dla mnie.
    powiedz aplikacji „Preferencje systemowe”
        odsłonić identyfikator okienka „com.apple.preference.general”
        opóźnienie 1
        powiedz aplikacji „Zdarzenia systemowe”
            kliknij pole wyboru „Automatycznie ukryj i pokaż pasek menu” okna „Ogólne” procesu „Preferencje systemowe”
        koniec powiedz
        porzucić
    koniec powiedz
  1. Utworzono skrót klawiaturowy dla aplikacji i zamapował go na cmd-ctrl-9 Działa świetnie.

Instrukcje tutaj: https://appleinsider.com/articles/18/03/14/how-to-create-keyboard-shortcuts-to-launch-apps-in-macos-using-automator

Gość
źródło
Odpowiedzi na Ask Different muszą być samodzielne, ponieważ jeśli link się zepsuje, twoja odpowiedź będzie bezużyteczna. Parafrazując źródło i umieszczając wszelkie istotne informacje w odpowiedzi,
upewnią się,