Сочетание клавиш для отклонения уведомлений

21

Я хотел бы иметь возможность отклонять и открывать уведомления с помощью клавиатуры

(Не говорю об открытии / закрытии центра уведомлений)

Это возможно? И если да, то как?

Drewdavid
источник
Вы видели обновление, которое вы просили?
markhunte

Ответы:

22

Вы можете создать службу Automator для запуска этого Applescript и назначить ему сочетание клавиш в «Системных настройках».

Это закроет оповещения и баннеры


В Automator выберите новый сервис

enter image description here


Добавить действие «Запустить Applescript»

enter image description here


и замените его код на:

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

Установите «Сервис получает [нет ввода] в [любое приложение]»

Сохраните сервис.


Откройте Сочетания клавиш в Системных настройках и настройте свой сервис в разделе «Сервисы». enter image description here

Теперь любое новое приложение выберет ярлык.

(Примечание: я структурировал скрипт так, чтобы он выдавал ошибку, которая возникнет, когда уведомления / окна начнут закрываться.

уведомления / окна пронумерованы от 1 до общего количества. Но когда они закроют сценарий, все равно будет работать старый счет. Но система будет переназначать индекс окон.

Поэтому, когда мы говорим, что начиная с 1 -6, скрипт попытается закрыть окно 1, окно 2, окно 3 и так далее. Но система переназначила номера окон 1,2,3 последним оставшимся окнам. Но скрипт попытается закрыть окно 4 и выдаст ошибку, потому что она не существует. Сценарий поймает это и справится с этим. )


Если вы хотите нажать кнопку «Показать» в уведомлении о предупреждении. Вы меняете кнопку, которую нажимаете, с 1 на 2.

click button 2 of this_item

Баннерные уведомления не имеют кнопки 2.

Но вы можете просто нажать на окно.

Так что этот код должен заботиться о показе.

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
источник
Спасибо, это действительно круто. Единственное, чего не хватает, - это как открыть, а не закрыть уведомление ... это то, что вы можете добавить, и я с радостью приму ваш ответ!
Drewdavid
@Drewdavid обновил ответ :-)
markhunte
1
Drewdavid: у меня та же проблема, и я перестал ее исправлять в Security & amp; Конфиденциальность и просто установить глобальную горячую клавишу через BetterTouchTool.
Bez Hermoso
1
Примечание: процесс «Центр уведомлений» может называться «Центр уведомлений» в «Центре уведомлений». Система поймет оба в пределах Applescript. Нормально использовать имя приложения в AppleScript. В этом случае «Центр уведомлений». Если вы используете сценарий do shell или unix, используйте фактическое имя процесса «NotificationCenter».
markhunte
1
@ Крис, сохраните рабочий процесс как приложение в Automator. Назовите что-то вроде «Закрыть все Noifications.app», затем добавьте его в Accessibility вручную. Затем создайте службу, как описано выше, но при запуске Applescript используйте: «сказать приложению« Закрыть все уведомления »для активации»
markhunte
5

Не совсем то, что вы просите:

Вы можете ограничить время, отображаемое для типа баннеров, с помощью

Терминал и вставьте в следующее

defaults write com.apple.notificationcenterui bannerTime #

с заменой знака # на количество секунд, в течение которых вы хотите, чтобы уведомления о баннере появлялись, затем выходили из системы и снова включались.

Для восстановления оригинальной функции (5 секунд) используйте defaults delete com.apple.notificationcenterui bannerTime

Я знаю, что ты сказал нет, но ты мог цикл Уведомление вкл / выкл со скриптом и назначение ему сочетания клавиш. Временно отключить Центр уведомлений в Mountain Lion из командной строки?

Buscar웃
источник
Спасибо за публикацию; здесь также стоит отметить ограничение по времени :)
Drewdavid
Это работает в Высокой Сьерре? Я не мог заставить это иметь никакого эффекта.
luckman212
0

Оригинальный скрипт от markhunte работает, но останавливается через несколько окон. Может случиться так, что список окон включает только те, которые в настоящее время видны. Когда у вас слишком много, это не закроет все. Я добавил цикл вне основного цикла для запроса окон, пока мы не получим нулевое количество окон. Вот код:

мой closeNotif () на 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

конец closeNotif

Sandhitsu Das
источник