Atajo de teclado para descartar notificaciones

28

Me gustaría poder descartar y abrir notificaciones con el teclado

(No hablamos de abrir / cerrar el centro de notificaciones)

es posible? Y si es así, ¿cómo?

Drewdavid
fuente
¿Viste esa actualización que pediste?
markhunte

Respuestas:

26

Puede crear el servicio Automator para ejecutar este Applescript y asignarle un método abreviado de teclado en Preferencias del sistema Métodos abreviados de teclado

Esto cerrará la alerta y la notificación de pancartas


En Automator elige un nuevo servicio

ingrese la descripción de la imagen aquí


Agregar una acción Ejecutar Applescript

ingrese la descripción de la imagen aquí


y reemplace su código con:

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

Establezca 'El servicio recibe [sin entrada] en [cualquier aplicación]'

Guarda el servicio.


Abra los métodos abreviados de teclado en Preferencias del sistema y configure su servicio en 'Servicios' ingrese la descripción de la imagen aquí

Ahora cualquier aplicación recién lanzada seleccionará el acceso directo.

(Nota: Estructuré el script para contrarrestar el lanzamiento de un error que ocurrirá cuando las notificaciones / ventanas comiencen a cerrarse.

Las notificaciones / ventanas se numeran del 1 al recuento total. Pero a medida que cierran, el guión seguiría funcionando del antiguo conde. Pero el sistema reasignará el índice de las ventanas.

Entonces, cuando decimos que comience en 1 -6, el script intentará cerrar la ventana 1, la ventana 2, la ventana 3, etc. Pero el sistema ha reasignado los números de ventana 1,2,3 a las últimas ventanas restantes. Pero el script intentará cerrar la ventana 4 y arrojará un error porque no existe. El script captará esto y se encargará de ello. )


Si desea hacer clic en el botón 'Mostrar' en una Notificación de alerta. cambia el botón en el que hace clic de 1 a 2.

click button 2 of this_item

Las notificaciones de banner no tienen un botón 2.

Pero puedes hacer clic en la ventana.

Por lo tanto, este código debe ocuparse de mostrar.

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
fuente
Gracias, esto es realmente genial. Lo único que falta es cómo abrir una notificación en lugar de cerrarla ... ¡es algo que podría agregar, y con mucho gusto aceptaré su respuesta!
Drewdavid
@Drewdavid actualizó la respuesta :-)
markhunte
1
Drewdavid: Tengo el mismo problema y dejé de solucionarlo en Seguridad y privacidad y solo configuré una tecla de acceso rápido global a través de BetterTouchTool.
Bez Hermoso
1
Nota: el proceso "Centro de notificaciones" puede denominarse "Centro de notificaciones" o "Centro de notificaciones". El sistema comprenderá ambos dentro de Applescript. Es normal usar el nombre de la aplicación en AppleScript. En este caso, Centro de notificaciones ". Si está utilizando un script de shell o unix, utilice el nombre real del proceso" NotificationCenter "
markhunte
1
@ Chris, guarde el flujo de trabajo como una aplicación en Automator. Llamado algo así como "Cerrar todas las notificaciones.app" Luego agrégalo a la Accesibilidad manualmente. Luego cree un servicio como se describió anteriormente pero en el uso de Applescript: "diga a la aplicación" Cerrar todas las notificaciones "para activar"
markhunte
5

No es exactamente lo que estás pidiendo:

Puede limitar el tiempo que se muestra para los tipos de banners

Terminal y pegar en el siguiente

defaults write com.apple.notificationcenterui bannerTime #

con el signo de número # reemplazado por la cantidad de segundos que desea que permanezcan las notificaciones de pancarta, luego cierre la sesión y vuelva a encenderla.

Para restaurar la función original (5 segundos) use defaults delete com.apple.notificationcenterui bannerTime

Sé que no dijo: Pero podrías ciclo de la Notificación de encendido / apagado con un guión y asignar un atajo de teclado para él. ¿Deshabilitar temporalmente el Centro de notificaciones en Mountain Lion desde la línea de comandos?

Ruskes
fuente
Gracias por publicar; el límite de tiempo también vale la pena señalar aquí :)
Drewdavid
¿Funciona esto en High Sierra? No pude lograr que tuviera ningún efecto.
luckman212
1

El guión original de markhunte funciona pero se detiene después de algunas ventanas. Es posible que la lista de ventanas solo incluya las que están actualmente visibles. Cuando tienes demasiados, esto no cerrará todo. Agregué un bucle fuera del bucle principal para consultar las ventanas hasta que obtengamos un recuento de ventanas de cero. Aquí está el código:

my closeNotif () en 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

cierre final

Sandhitsu Das
fuente