docs » hs.notify
This module allows you to create on screen notifications in the User Notification Center located at the right of the users screen.
Notifications can be sent immediately or scheduled for delivery at a later time, even if that scheduled time occurs when Hammerspoon is not currently running. Currently, if you take action on a notification while Hammerspoon is not running, the callback function is not honored for the first notification clicked upon -- This is expected to be fixed in a future release.
When setting up a callback function, you have the option of specifying it with the creation of the notification (hs.notify.new) or by pre-registering it with hs.notify.register and then referring it to by the tag name specified with hs.notify.register. If you use this registration method for defining your callback functions, and make sure to register all expected callback functions within your init.lua file or files it includes, then callback functions will remain available for existing notifications in the User Notification Center even if Hammerspoon's configuration is reloaded or if Hammerspoon is restarted. If the callback tag is not present when the user acts on the notification, the Hammerspoon console will be raised as a default action.
A shorthand, based upon the original inspiration for this module from Hydra and Mjolnir, hs.notify.show, is provided if you just require a quick and simple informative notification without the bells and whistles.
This module is based in part on code from the previous incarnation of Mjolnir by Steven Degutis.
- Constants - Useful values which cannot be changed
- activationTypes
- defaultNotificationSound
- Variables - Configurable values
- registry
- warnAboutMissingFunctionTag
- Functions - API calls offered directly by the extension
- deliveredNotifications
- register
- scheduledNotifications
- unregister
- unregisterall
- withdrawAll
- withdrawAllScheduled
- Constructors - API calls which return an object, typically one that offers API methods
- new
- show
- Methods - API calls which can only be made on an object returned by a constructor
- actionButtonTitle
- activationType
- actualDeliveryDate
- additionalActions
- additionalActivationAction
- alwaysPresent
- alwaysShowAdditionalActions
- autoWithdraw
- contentImage
- delivered
- getFunctionTag
- hasActionButton
- hasReplyButton
- informativeText
- otherButtonTitle
- presented
- response
- responsePlaceholder
- schedule
- send
- setIdImage
- soundName
- subTitle
- title
- withdraw
- withdrawAfter
Signature | hs.notify.activationTypes[] |
---|---|
Type | Constant |
Description | Convenience array of the possible activation types for a notification, and their reverse for reference. |
Notes |
|
Signature | hs.notify.defaultNotificationSound |
---|---|
Type | Constant |
Description | The string representation of the default notification sound. Use hs.notify:soundName() or set the soundName attribute in hs:notify.new() , to this constant, if you want to use the default sound |
Signature | hs.notify.registry[] |
---|---|
Type | Variable |
Description | A table containing the registered callback functions and their tags. |
Notes |
|
Signature | hs.notify.warnAboutMissingFunctionTag |
---|---|
Type | Variable |
Description | A value indicating whether or not a missing notification function tag should cause a warning. Defaults to true . |
Signature | hs.notify.deliveredNotifications() -> table |
---|---|
Type | Function |
Description | Returns a table containing notifications which have been delivered. |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify.register(tag, fn) -> id |
---|---|
Type | Function |
Description | Registers a function callback with the specified tag for a notification. The callback function will be invoked when the user clicks on or interacts with a notification. |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify.scheduledNotifications() -> table |
---|---|
Type | Function |
Description | Returns a table containing notifications which are scheduled but have not yet been delivered. |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify.unregister(id|tag)
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Function |
| Description | Unregisters a function callback so that it is no longer available as a callback when notifications corresponding to the specified entry are interacted with. |
| Parameters |
- id - the numerical id provided by hs.notify.register
- tag - a string tag representing the callback function to be removed
- None
Signature | hs.notify.unregisterall() |
---|---|
Type | Function |
Description | Unregisters all functions registered as callbacks. |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify.withdrawAll() |
---|---|
Type | Function |
Description | Withdraw all delivered notifications from Hammerspoon |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify.withdrawAllScheduled() |
---|---|
Type | Function |
Description | Withdraw all scheduled notifications from Hammerspoon |
Parameters |
|
Returns |
|
Signature | hs.notify.new([fn,][attributes]) -> notification |
---|---|
Type | Constructor |
Description | Creates a new notification object |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify.show(title, subTitle, information[, tag]) -> notfication |
---|---|
Type | Constructor |
Description | Shorthand constructor to create and show simple notifications |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify:actionButtonTitle([buttonTitle]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the label of a notification's action button |
| Parameters |
- buttonTitle - An optional string containing the title for the notification's action button. If no parameter is provided, then the current setting is returned.
- The notification object, if buttonTitle is present; otherwise the current setting.
- The affects of this method only apply if the user has set Hammerspoon notifications to
Alert
in the Notification Center pane of System Preferences - This value is ignored if hs.notify:hasReplyButton is true.
Signature | hs.notify:activationType() -> number |
---|---|
Type | Method |
Description | Returns how the notification was activated by the user. |
Parameters |
|
Returns |
|
Signature | hs.notify:actualDeliveryDate() -> number |
---|---|
Type | Method |
Description | Returns the date and time when a notification was delivered |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify:additionalActions([actionsTable]) -> notificationObject | table
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set additional actions which will be displayed for an alert type notification when the user clicks and holds down the action button of the alert. |
| Parameters |
- an optional table containing an array of strings specifying the additional options to list for the user to select from the notification.
- The notification object, if an argument is present; otherwise the current value
- The additional items will be listed in a pop-up menu when the user clicks and holds down the mouse button in the action button of the alert.
- If the user selects one of the additional actions, hs.notify:activationType will equal
hs.notify.activationTypes.additionalActionClicked
- See also hs.notify:additionalActivationAction
| Signature | hs.notify:additionalActivationAction() -> string | nil
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Return the additional action that the user selected from an alert type notification that has additional actions available. |
| Parameters |
- None
- If the notification has additional actions assigned with hs.notify:additionalActions and the user selects one, returns a string containing the selected action; otherwise returns nil.
- If the user selects one of the additional actions, hs.notify:activationType will equal
hs.notify.activationTypes.additionalActionClicked
- See also hs.notify:additionalActions
| Signature | hs.notify:alwaysPresent([alwaysPresent]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set whether a notification should be presented even if this overrides Notification Center's decision process. |
| Parameters |
- alwaysPresent - An optional boolean parameter indicating whether the notification should override Notification Center's decision about whether to present the notification or not. Defaults to true. If no parameter is provided, then the current setting is returned.
- The notification object, if alwaysPresent is provided; otherwise the current setting.
- This does not affect the return value of
hs.notify:presented()
-- that will still reflect the decision of the Notification Center - Examples of why the users Notification Center would choose not to display a notification would be if Hammerspoon is the currently focussed application, being attached to a projector, or the user having set Do Not Disturb.
| Signature | hs.notify:alwaysShowAdditionalActions([state]) -> notificationObject | boolean
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set whether an alert notification should always show an alternate action menu. |
| Parameters |
- state - An optional boolean, default false, indicating whether the notification should always show an alternate action menu.
- The notification object, if an argument is present; otherwise the current value.
| Signature | hs.notify:autoWithdraw([shouldWithdraw]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set whether a notification should automatically withdraw once activated |
| Parameters |
- shouldWithdraw - An optional boolean indicating whether the notification should automatically withdraw. Defaults to true. If no parameter is provided, then the current setting is returned.
- The notification object, if shouldWithdraw is present; otherwise the current setting.
| Signature | hs.notify:contentImage([image]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set a notification's content image. |
| Parameters |
- image - An optional hs.image parameter containing the image to display. Defaults to nil. If no parameter is provided, then the current setting is returned.
- The notification object, if image is provided; otherwise the current setting.
- See hs.image for details on how to specify or define an image
- This method is only supported in OS X 10.9 or greater. A warning will be displayed in the console and the method will be treated as a no-op if used on an unsupported system.
Signature | hs.notify:delivered() -> bool |
---|---|
Type | Method |
Description | Returns whether the notification has been delivered to the Notification Center |
Parameters |
|
Returns |
|
Signature | hs.notify:getFunctionTag() -> functiontag |
---|---|
Type | Method |
Description | Return the name of the function tag the notification will call when activated. |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify:hasActionButton([hasButton]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the presence of an action button in a notification |
| Parameters |
- hasButton - An optional boolean indicating whether an action button should be present. If no parameter is provided, then the current setting is returned.
- The notification object, if hasButton is present; otherwise the current setting.
- The affects of this method only apply if the user has set Hammerspoon notifications to
Alert
in the Notification Center pane of System Preferences
| Signature | hs.notify:hasReplyButton([state]) -> notificationObject | boolean
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set whether an alert notification has a "Reply" button for additional user input. |
| Parameters |
- state - An optional boolean, default false, indicating whether the notification should include a reply button for additional user input.
- The notification object, if an argument is present; otherwise the current value
| Signature | hs.notify:informativeText([informativeText]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the informative text of a notification |
| Parameters |
- informativeText - An optional string containing the informative text to be set on the notification object. This can be an empty string. If
nil
is passed, any existing informative text will be removed. If no parameter is provided, then the current setting is returned.
- The notification object, if informativeText is present; otherwise the current setting.
| Signature | hs.notify:otherButtonTitle([buttonTitle]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the label of a notification's other button |
| Parameters |
- buttonTitle - An optional string containing the title for the notification's other button. If no parameter is provided, then the current setting is returned.
- The notification object, if buttonTitle is present; otherwise the current setting.
- The affects of this method only apply if the user has set Hammerspoon notifications to
Alert
in the Notification Center pane of System Preferences - Due to OSX limitations, it is NOT possible to get a callback for this button.
Signature | hs.notify:presented() -> bool |
---|---|
Type | Method |
Description | Returns whether the users Notification Center decided to display the notification |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify:response() -> string | nil
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get the users input from an alert type notification with a reply button. |
| Parameters |
- None
- If the notification has a reply button and the user clicks on it, returns a string containing the user input (may be an empty string); otherwise returns nil.
- hs.notify:activationType will equal
hs.notify.activationTypes.replied
if the user clicked on the Reply button and then clicks on Send. - See also hs.notify:hasReplyButton
| Signature | hs.notify:responsePlaceholder([string]) -> notificationObject | string
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Set a placeholder string for alert type notifications with a reply button. |
| Parameters |
string
- an optional string specifying placeholder text to display in the reply box before the user has types anything in an alert type notification with a reply button.
- The notification object, if an argument is present; otherwise the current value
- In macOS 10.13, this text appears so light that it is almost unreadable; so far no workaround has been found.
- See also hs.notify:hasReplyButton
Signature | hs.notify:schedule(date) -> notificationObject |
---|---|
Type | Method |
Description | Schedules a notification for delivery in the future. |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify:send() -> notificationObject |
---|---|
Type | Method |
Description | Delivers the notification immediately to the users Notification Center. |
Parameters |
|
Returns |
|
Notes |
|
Signature | hs.notify:setIdImage(image[, withBorder]) -> notificationObject |
---|---|
Type | Method |
Description | Set a notification's identification image (replace the Hammerspoon icon with a custom image) |
Parameters |
|
Returns |
|
Notes |
|
| Signature | hs.notify:soundName([soundName]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the sound for a notification |
| Parameters |
- soundName - An optional string containing the name of a sound to play with the notification. If
nil
, no sound will be played. Defaults tonil
. If no parameter is provided, then the current setting is returned.
- The notification object, if soundName is present; otherwise the current setting.
- Sounds will first be matched against the names of system sounds. If no matches can be found, they will then be searched for in the following paths, in order:
~/Library/Sounds
/Library/Sounds
/Network/Sounds
/System/Library/Sounds
| Signature | hs.notify:subTitle([subtitleText]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the subtitle of a notification |
| Parameters |
- subtitleText - An optional string containing the subtitle to be set on the notification object. This can be an empty string. If
nil
is passed, any existing subtitle will be removed. If no parameter is provided, then the current setting is returned.
- The notification object, if subtitleText is present; otherwise the current setting.
| Signature | hs.notify:title([titleText]) -> notificationObject | current-setting
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the title of a notification |
| Parameters |
- titleText - An optional string containing the title to be set on the notification object. The default value is "Notification". If
nil
is passed, then the title is set to the empty string. If no parameter is provided, then the current setting is returned.
- The notification object, if titleText is present; otherwise the current setting.
Signature | hs.notify:withdraw() -> notificationObject |
---|---|
Type | Method |
Description | Withdraws a delivered notification from the Notification Center. |
Parameters |
|
Returns |
|
| Signature | hs.notify:withdrawAfter([seconds]) -> notificationObject | number
|
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| Type | Method |
| Description | Get or set the number of seconds after which to automatically withdraw a notification |
| Parameters |
- seconds - An optional number, default 5, of seconds after which to withdraw a notification. A value of 0 will not withdraw a notification automatically
- The notification object, if an argument is present; otherwise the current value.