Skrót klawiaturowy, aby odrzucić powiadomienia

28

Chciałbym móc odrzucać i otwierać powiadomienia za pomocą klawiatury

(Nie mówiąc o otwarciu / zamknięciu centrum powiadomień)

czy to możliwe? A jeśli tak, to w jaki sposób?

Drewdavid
źródło
Czy widziałeś tę aktualizację, o którą prosiłeś?
markhunte

Odpowiedzi:

26

Możesz utworzyć usługę Automator, aby uruchomić ten skrypt Apple i dać mu skrót klawiaturowy w Preferencjach systemowych Skróty klawiaturowe

Spowoduje to zamknięcie Powiadomienia i banery


W Automatorze wybierz nową usługę

wprowadź opis zdjęcia tutaj


Dodaj akcję Uruchom Applescript

wprowadź opis zdjęcia tutaj


i zamień jego kod na:

my closeNotif()
on closeNotif()

    tell application "System Events"
        tell process "Notification Center"
            set theWindows to every window
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                try
                    click button 1 of this_item
                on error

                    my closeNotif()
                end try
            end repeat
        end tell
    end tell

end closeNotif

Ustaw „Usługa odbiera [brak danych] w [dowolnej aplikacji]”

Zapisz usługę.


Otwórz skróty klawiaturowe w Preferencjach systemowych i ustaw swoją usługę w sekcji „Usługi” wprowadź opis zdjęcia tutaj

Teraz każda nowo uruchomiona aplikacja wybierze skrót.

(Uwaga: Skonstruowałem skrypt tak, aby przeciwdziałał zgłaszaniu błędu, który pojawi się, gdy powiadomienia / okna zaczną się zamykać.

powiadomienia / okno są ponumerowane od 1 do całkowitej liczby. Ale kiedy się zamkną, skrypt nadal będzie działał według starej wersji. Ale system będzie ponownie przypisywać indeks okien.

Więc gdy mówimy, zacznij od 1 -6, skrypt spróbuje zamknąć okno 1, okno 2, okno 3 i tak dalej. Ale system przypisał numery okien 1,2,3 do ostatnich pozostałych okien. Ale skrypt spróbuje zamknąć okno 4 i zgłosić błąd, ponieważ nie istnieje. Skrypt złapie to i poradzi sobie z tym. )


Jeśli chcesz kliknąć przycisk „Pokaż” w powiadomieniu o alercie. zmieniasz kliknięty przycisk z 1 na 2.

click button 2 of this_item

Powiadomienia banerowe nie mają przycisku 2.

Ale możesz po prostu kliknąć okno.

Więc ten kod powinien zająć się Pokazywaniem.

my closeNotif()
on closeNotif()

    tell application "System Events"
        tell process "Notification Center"
            set theWindows to every window
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                set cnt to count buttons of this_item
                try
                    if cnt > 1 then

                        click button 2 of this_item
                    else
                        click this_item
                    end if
                on error

                    closeNotif()
                end try
            end repeat
        end tell
    end tell

end closeNotif
markhunte
źródło
Dzięki, to jest naprawdę fajne. Jedyną rzeczą, której brakuje, jest to, jak otworzyć powiadomienie zamiast go zamknąć ... jest to, że możesz dodać coś, a chętnie zaakceptuję twoją odpowiedź!
Drewdavid
@Drewdavid zaktualizował odpowiedź :-)
markhunte
1
Drewdavid: Mam ten sam problem, zrezygnowałem z jego naprawy w obszarze Bezpieczeństwo i prywatność i po prostu skonfigurowałem globalny skrót klawiszowy za pomocą BetterTouchTool.
Bez Hermoso,
1
Uwaga: proces „Centrum powiadomień” można nazwać „Centrum powiadomień” w „Centrum powiadomień”. System zrozumie oba w Applescript. Używanie nazwy aplikacji w AppleScript jest normalne. W tym przypadku powiadomienie Center”. Jeśli używasz zrobić skrypt powłoki lub UNIX użyj rzeczywistą nazwę procesu«NotificationCenter»
markhunte
1
@Chris, zapisz przepływ pracy jako aplikację w Automatorze. Nazwano coś takiego jak „Zamknij wszystkie powiadomienia.app”. Następnie dodaj go ręcznie do ułatwień dostępu. Następnie utwórz usługę, jak opisano powyżej, ale w biegu użyj Applescript: „powiedz aplikacji„ Zamknij wszystkie powiadomienia ”, aby aktywować”
markhunte
5

Niezupełnie o co prosisz:

Możesz ograniczyć czas wyświetlania banerów za pomocą

Zakończ i wklej poniżej

defaults write com.apple.notificationcenterui bannerTime #

ze znakiem # zamienionym na liczbę sekund, przez które powiadomienia mają pozostać, a następnie wyloguj się i zaloguj ponownie.

Aby przywrócić oryginalną funkcję (5 sekund), użyj defaults delete com.apple.notificationcenterui bannerTime

Wiem, że nie powiedział: ale można cykl Powiadomienie ON / OFF ze skryptu i przypisać skrót klawiaturowy do niego. Czy tymczasowo wyłączyć Centrum powiadomień w Mountain Lion z wiersza polecenia?

Ruskes
źródło
Dzięki za wysłanie; Warto również zwrócić uwagę na limit czasu :)
Drewdavid
Czy to działa w High Sierra? Nie mogłem uzyskać efektu.
luckman212,
1

Oryginalny skrypt markhunte działa, ale zatrzymuje się po kilku oknach. Może się zdarzyć, że lista okien obejmuje tylko te, które są obecnie widoczne. Jeśli masz ich zbyt wiele, to nie zamknie wszystkich. Dodałem pętlę poza główną pętlą, aby wysłać zapytanie do okien, dopóki nie otrzymamy liczby okien równej zero. Oto kod:

my closeNotif () on closeNotif ()

tell application "System Events"
    tell process "Notification Center"
        set theWindows to every window
        set nWindows to number of items in theWindows
        repeat until nWindows is 0
            repeat with i from 1 to number of items in theWindows
                set this_item to item i of theWindows
                try
                    click button 1 of this_item
                    delay 0.2
                on error

                    my closeNotif()
                end try
            end repeat
            set theWindows to every window
            set nWindows to number of items in theWindows
        end repeat
    end tell
end tell

koniec zamknij Uwaga

Sandhitsu Das
źródło