Created
June 25, 2025 14:56
-
-
Save nicksergeant/8c87d42df098f7bcfb6a2fd259857b6c to your computer and use it in GitHub Desktop.
AppleScript for clearing Notification Center notifications
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* | |
Close notifications Applescript Action for LaunchBar | |
by Christian Bender (@ptujec) | |
2024-10-15 | |
requires macOS 15.2 | |
Copyright see: https://github.com/Ptujec/LaunchBar/blob/master/LICENSE | |
Helpful: | |
- https://applehelpwriter.com/2016/08/09/applescript-get-item-number-of-list-item/ | |
- https://www.macscripter.net/t/coerce-gui-scripting-information-into-string/62842/3 | |
- https://forum.keyboardmaestro.com/t/understanding-applescript-ui-scripting-to-click-menus/29039/23?page=2 | |
*) | |
use AppleScript version "2.4" -- Yosemite (10.10) or later | |
use scripting additions | |
use framework "Foundation" | |
property NSArray : a reference to current application's NSArray | |
property alertAndBannerSet : {"AXNotificationCenterAlert", "AXNotificationCenterBanner"} | |
property closeActionSet : {"Close", "Clear All", "Schließen", "Alle entfernen", "Cerrar", "Borrar todo", "关闭", "清除全部", "Fermer", "Tout effacer", "Закрыть", "Очистить все", "إغلاق", "مسح الكل", "Fechar", "Limpar tudo", "閉じる", "すべてクリア", "बंद करें", "सभी हटाएं", "Zamknij", "Wyczyść wszystko"} | |
on run | |
tell application "System Events" | |
try | |
set _main_group to group 1 of scroll area 1 of group 1 of group 1 of window 1 of application process "NotificationCenter" | |
on error eStr number eNum | |
display notification eStr with title "Error " & eNum sound name "Frog" | |
return | |
end try | |
set _headings to UI elements of _main_group whose role is "AXHeading" | |
set _headingscount to count of _headings | |
end tell | |
repeat _headingscount times | |
tell application "System Events" to set _roles to role of UI elements of _main_group | |
set _headingIndex to its getIndexOfItem:"AXHeading" inList:_roles | |
set _closeButtonIndex to _headingIndex + 1 | |
tell application "System Events" to click item _closeButtonIndex of UI elements of _main_group | |
delay 0.4 | |
end repeat | |
tell application "System Events" | |
try | |
set _groups to groups of _main_group | |
if _groups is {} then | |
if subrole of _main_group is in alertAndBannerSet then | |
set _actions to actions of _main_group | |
repeat with _action in _actions | |
if description of _action is in closeActionSet then | |
perform _action | |
end if | |
end repeat | |
end if | |
return | |
end if | |
repeat with _group in _groups | |
set _actions to actions of first item of _groups # always picking the first to avoid index error | |
repeat with _action in _actions | |
if description of _action is in closeActionSet then | |
perform _action | |
end if | |
end repeat | |
end repeat | |
on error | |
if subrole of _main_group is in alertAndBannerSet then | |
set _actions to actions of _main_group | |
repeat with _action in _actions | |
if description of _action is in closeActionSet then | |
perform _action | |
end if | |
end repeat | |
end if | |
end try | |
end tell | |
end run | |
on getIndexOfItem:anItem inList:aList | |
set anArray to NSArray's arrayWithArray:aList | |
set ind to ((anArray's indexOfObject:anItem) as number) + 1 | |
if ind is greater than (count of aList) then | |
display dialog "Item '" & anItem & "' not found in list." buttons "OK" default button "OK" with icon 2 with title "Error" | |
return 0 | |
else | |
return ind | |
end if | |
end getIndexOfItem:inList: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment