Atalho do teclado para dispensar notificações

27

Gostaria de poder dispensar e abrir notificações com o teclado

(Sem falar em abrir / fechar o centro de notificação)

Isso é possível? E se sim, como?

Drewdavid
fonte
Você viu a atualização solicitada?
markhunte

Respostas:

25

Você pode criar o serviço Automator para executar este Applescript e atribuir um atalho de teclado nos atalhos de teclado de Preferências do sistema.

Isso fechará o alerta e os banners de notificação


No Automator, escolha um novo serviço

insira a descrição da imagem aqui


Adicionar uma ação Executar Applescript

insira a descrição da imagem aqui


e substitua seu código por:

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

Defina o 'Serviço recebe [sem entrada] em [qualquer aplicativo]'

Salve o serviço.


Abra os atalhos do teclado em Preferências do sistema e defina o seu serviço em 'Serviços' insira a descrição da imagem aqui

Agora, qualquer aplicativo recém-lançado selecionará o atalho.

(Observação: estruturei o script para combater o lançamento de um erro que ocorrerá quando as notificações / janelas começarem a fechar.

otificações / janela são numeradas de 1 a contagem total. Mas, ao fecharem, o script continuaria funcionando com o antigo conde. Mas o sistema estará atribuindo o índice das janelas.

Então, onde dizemos iniciar de 1 a 6, o script tentará fechar a janela 1, janela 2, janela 3 e assim por diante. Mas o sistema atribuiu os números de janela 1,2,3 às últimas janelas restantes. Mas o script tenta fechar a janela 4 e gera um erro porque não existe. O script vai pegar isso e lidar com isso. )


Se você deseja clicar no botão 'Mostrar' em uma notificação de alerta. você altera o botão em que você clica de 1 a 2.

click button 2 of this_item

As notificações de faixa não têm um botão 2.

Mas você pode simplesmente clicar na janela.

Portanto, esse código deve cuidar da exibição.

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
fonte
Obrigado, isso é muito legal. A única coisa que falta é como também abrir uma notificação em vez de fechá-la ... é algo que você pode adicionar e terei prazer em aceitar sua resposta!
Drewdavid
@Drewdavid atualizou a resposta :-)
markhunte 11/11
1
Drewdavid: Estou tendo o mesmo problema e desisti de corrigi-lo em Segurança e privacidade e apenas configurei uma tecla de atalho global por meio do BetterTouchTool.
Bez Hermoso 17/01
1
Nota: o processo "Centro de Notificação" pode ser chamado de "Centro de Notificação" de "Centro de Notificação". O sistema entenderá ambos no Applescript. É normal usar o nome do aplicativo no AppleScript. Neste caso, a Central de Notificações". Se você estiver usando um fazer script shell ou UNIX, em seguida, usar o nome real processo 'central de notificações'
markhunte
1
@ Chris, salve o fluxo de trabalho como um Aplicativo no Automator. Nomeado algo como "Close All Noifications.app". Em seguida, adicione-o manualmente à Acessibilidade. Em seguida, criar um serviço, como descrito acima, mas na corrida Applescript uso: "aplicativo tell 'Fechar todos os Noifications' para ativar"
markhunte
6

Não é exatamente o que você está pedindo:

Você pode limitar o tempo exibido para o tipo de banners com

Terminal e cole no seguinte

defaults write com.apple.notificationcenterui bannerTime #

com o sinal de número # substituído pela quantidade de segundos que você deseja que as notificações do banner permaneçam, depois faça logoff e logon novamente.

Para restaurar a função original (5 segundos), use defaults delete com.apple.notificationcenterui bannerTime

Eu sei que você não disse: mas você pode ciclo de notificação on / off com um script e atribuir um atalho de teclado para ele. Desativar temporariamente o Notification Center no Mountain Lion na linha de comando?

Ruskes
fonte
Obrigado por publicar; o limite de tempo Também é importante notar aqui :)
Drewdavid
Isso funciona em High Sierra? Não consegui que isso surtisse efeito.
luckman212
0

O script original de markhunte funciona, mas para após algumas janelas. Pode ser que a lista de janelas inclua apenas as que estão atualmente visíveis. Quando você tem muitos, isso não fecha tudo. Adicionei um loop fora do loop principal para consultar as janelas até obter uma contagem de zero. Aqui está o código:

meu closeNotif () em 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

fim closeNotif

Sandhitsu Das
fonte