I'd like to be able to dismiss and open macOS Notification Center notifications with the keyboard.
(I'm not talking about opening/closing the Notification Center itself.)
Is this possible in some manner with a tool or setting or other software?
Ask Different is a question and answer site for power users of Apple hardware and software. It only takes a minute to sign up.
Sign up to join this communityI'd like to be able to dismiss and open macOS Notification Center notifications with the keyboard.
(I'm not talking about opening/closing the Notification Center itself.)
Is this possible in some manner with a tool or setting or other software?
You can create Automator service to run this Applescript and give it a keyboard shortcut in the System Preferences Keyboard shortcuts
This will close Alert and banners Notification
In Automator choose a new service
Add a Run Applescript Action
and replace it's code with:
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
Set the 'Service receives [no input] in [any application]'
Save the service.
Open the Keyboard shortcuts in System prefs and set your for your service under 'Services'
Now any newly launched app will pick the shortcut up.
(Note: I structured the script to counter throwing an error that will occur when the notifications/windows start to close.
otifications/window are numbered 1 through to the total count. But as they close the script would still be working of the old count. But the system will be re assigning the index of the windows.
So where we say start at 1 -6 the script will try and close window 1, window 2, window 3 and so on. But the system has re assigned the window numbers 1,2,3 to the last remaining windows. But the script will try and close window 4 and throw an error because it does not exist. The script will catch this and deal with it. )
If you want to click the 'Show' button on an Alert Notification. you change the button you click from 1 to 2.
click button 2 of this_item
Banner notifications do not have a button 2.
But you can just click the window.
So this code should take care of Showing.
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
Not quite what you asking for:
You could limit the time displayed for banners type with
Terminal and paste in the following
defaults write com.apple.notificationcenterui bannerTime #
with the # number sign replaced with the amount of seconds you want banner notifications to stick around, then log off and back on.
To restore original function (5 seconds) use defaults delete com.apple.notificationcenterui bannerTime
I know you said no: but you could cycle the Notification on/off with a script and assign a keyboard short cut to it. Temporarily disable Notification Center in Mountain Lion from command line?
The original script by markhunte works but stops after a few windows. It may be that the list of windows only includes the ones that are currently visible. When you have too many this won't close all. I added a loop outside the main loop to query the windows until we get a window count of zero. Here is the code:
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
end closeNotif
Similar to the answer by markhunte in that a bit of AppleScript is used, but the implementation is vastly improved.
Namely, unlike the script by markhunte, closes also banner notifications, doesn't crash when a notification doesn't have a close button, works even when notification center is open, works with notifications where the close button isn't the first button, detects stuck notifications, and so on...
If you use Alfred, you have this workflow available: Notification dismisser. It will close all the currently displayed notifications with a shortcut or Alfred keyword. Super simple to use and works as expected.
If you don't use Alfred, you can take the main script from the workflow and (same as the answer by markhunte) using Automator save it as a "Quick Action". Then set a keyboard shortcut for it in System Preferences. Does the same as the workflow, albeit requires a bit more effort than clicking "install" as with Alfred.
An indirect approach is in System Preferences > Notifications, to set the alert style to Banners. The alerts will show briefly and then dismiss themselves. To see the alerts again using the keyboard, press Fn-N to show the Notification Center.
(If using a keyboard without a Fn key, you can assign a shortcut from System Preferences > Keyboard > Shortcuts > Mission Control > Show Notification Center.)