如何使用 applescript 在 os x 中自定义通知
How to customise notification in os x using applescript
假设我有一个文件 sometext.txt
。我希望此 txt 文件的内容显示在我将使用 applescript
中的 displaynotification
触发的通知中。
换句话说,我希望能够:
display notification "File's content" with title "Title"
.
我该怎么做?假设 sometext.txt
和 applescript
文件在同一目录中。
假设文件的内容不超过 20 个字符。
Set theContents to read "/posix/path/to/your/file" as «class utf8»
display notification theContents with title "Title"
GOAL
To fire a notification with text from a file that resides in the
same folder as this script.
NOTE
Before execution, save the script because when the script is unsaved, the composed path points to the „~/Library/Autosave Information/„ folder (the place where unsaved scripts are) or even to "/Applications/Utilities/" (where Script-Editor is).
USAGE
The script beeps (when 'errBeep' is true) if something was not
100% ok and displays the status in a notification.
- when the text file isn't found the script asks for automatic creation.
- if the text file is empty you get notified and it opens the file.
- if the length of the text is greater as in
allowedCharactersCount
(default 65), some action can be performed before firing the notification.
(* *** please customize the appropriate parts *** *)
-- ---------------------------------
-- BEEP when error
-- ---------------------------------
set errBeep to true
--set errBeep to false
-- ---------------------------------
-- file name &
-- number of allowed characters:
-- ---------------------------------
set fileName to "messages.txt"
set allowedCharactersCount to 65
-- ---------------------------------
-- Notification title:
-- ---------------------------------
set notificationTitle to "From: " & fileName
-- ---------------------------------
-- END CUSTOMIZING
-- ---------------------------------
-- ---------------------------------
-- compose file path
-- ---------------------------------
set filePath to my composeFilePath(fileName)
if filePath is "" then
if errBeep then beep
return
end if
-- ---------------------------------
-- check file existence ?
-- ---------------------------------
set filePathExists to my fileExists(filePath)
if not filePathExists then
-- ------------------------------------
-- The file isn't there, ask the user if it should be created (and opened):
-- ------------------------------------
if errBeep then beep
set message to "File " & quoted form of fileName & " at " & return & return & quoted form of filePath & return & return & "is missing."
display dialog message buttons {"Create & Open", "Cancel"} cancel button 2 default button 2 giving up after 20 with title "Where is " & quoted form of fileName & "?" with icon 2
if button returned of the result starts with "Create" then
my readFromFile(filePath) -- this creates the file
tell application "Finder" to open item filePath -- open for edit
end if
return -- we did what we could
end if
-- ---------------------------------------
-- Found the file, now read it:
-- ---------------------------------------
set textFromFile to my readFromFile(filePath)
if textFromFile is not "" then
-- ---------------------------------------------------------
-- Found content, we are ready to fire our notification
-- ---------------------------------------------------------
-- -----------------------------------
-- • but first check length •
-- -----------------------------------
set countCharactersInTextFromFile to count characters in textFromFile -- count includes the "return" characters
if (countCharactersInTextFromFile) is greater than allowedCharactersCount then
-- -----------------------------------
-- • Length is NOT OK
-- More characters as allowed. What to do ? Here, we just beep & change the message and title
-- -----------------------------------
if errBeep then beep
set notificationTitle to "ERROR: " & ((countCharactersInTextFromFile - allowedCharactersCount) as text) & " characters overflow"
set notificationText to (countCharactersInTextFromFile as text) & " characters in textFromFile," & return & (allowedCharactersCount as text) & " characters are allowed."
else
-- -----------------------------------
-- • Length is OK •
-- -----------------------------------
set notificationText to textFromFile
end if
-- ---------------------------------------------------------
-- Fire the notification
-- ---------------------------------------------------------
display notification notificationText with title notificationTitle
-- ---------------------------------------------------------
else
-- ---------------------------------------------------------
-- File is empty! Replace following lines with appropriate action:
-- ---------------------------------------------------------
if errBeep then beep
display notification "*** NO TEXT IN THIS FILE ***" with title "ERROR: EMPTY FILE"
tell application "Finder" to open item filePath -- open for edit
end if
-- ---------------------------------------------------------
-- Sub Routines
-- ---------------------------------------------------------
-- ---------------------------------
-- file existence ?
-- ---------------------------------
on fileExists(filePath)
set filePathExists to false
tell application "Finder"
try
set filePathExists to item filePath exists
end try
end tell
return filePathExists
end fileExists
-- ---------------------------------
-- composeFilePath(fileName)
-- ---------------------------------
on composeFilePath(fileName)
if fileName is "" then return ""
set pathToMe to path to me -- this is the full path to this script
-- get the folder this script is in:
set thisScriptsFolder to ""
tell application "Finder"
try
set thisScriptsFolder to (get container of pathToMe) as text
end try
end tell
if thisScriptsFolder is "" then
return ""
end if
return thisScriptsFolder & fileName -- full path
end composeFilePath
-- ---------------------------------------------------------
-- readFromFile(sourceFile)
-- ---------------------------------------------------------
on readFromFile(sourceFile)
try
set the sourceFile to the sourceFile as string
set the open_sourceFile to open for access file sourceFile
set fileData to read the open_sourceFile
close access the open_sourceFile
return fileData
on error the error_message number the error_number
try
close access file sourceFile
end try
-- display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1
return ""
end try
end readFromFile
这里是简短的版本:
set fileName to "messages.txt"
set filePath to my composeFilePath(fileName)
display notification my readFromFile(filePath) with title "From: " & fileName
on readFromFile(sourceFile)
try
set the sourceFile to the sourceFile as string
set the open_sourceFile to open for access file sourceFile
set fileData to read the open_sourceFile
close access the open_sourceFile
return fileData
on error the error_message number the error_number
try
close access file sourceFile
end try
return ""
end try
end readFromFile
on composeFilePath(fileName)
if fileName is "" then return ""
set pathToMe to path to me -- this is the full path to this script
-- get the folder this script is in:
set thisScriptsFolder to ""
tell application "Finder"
try
set thisScriptsFolder to (get container of pathToMe) as text
end try
end tell
if thisScriptsFolder is "" then
return ""
end if
return thisScriptsFolder & fileName -- full path
end composeFilePath
假设我有一个文件 sometext.txt
。我希望此 txt 文件的内容显示在我将使用 applescript
中的 displaynotification
触发的通知中。
换句话说,我希望能够:
display notification "File's content" with title "Title"
.
我该怎么做?假设 sometext.txt
和 applescript
文件在同一目录中。
假设文件的内容不超过 20 个字符。
Set theContents to read "/posix/path/to/your/file" as «class utf8»
display notification theContents with title "Title"
GOAL
To fire a notification with text from a file that resides in the same folder as this script.NOTE
Before execution, save the script because when the script is unsaved, the composed path points to the „~/Library/Autosave Information/„ folder (the place where unsaved scripts are) or even to "/Applications/Utilities/" (where Script-Editor is).USAGE
The script beeps (when 'errBeep' is true) if something was not 100% ok and displays the status in a notification.
- when the text file isn't found the script asks for automatic creation.
- if the text file is empty you get notified and it opens the file.
- if the length of the text is greater as in
allowedCharactersCount
(default 65), some action can be performed before firing the notification.
(* *** please customize the appropriate parts *** *)
-- ---------------------------------
-- BEEP when error
-- ---------------------------------
set errBeep to true
--set errBeep to false
-- ---------------------------------
-- file name &
-- number of allowed characters:
-- ---------------------------------
set fileName to "messages.txt"
set allowedCharactersCount to 65
-- ---------------------------------
-- Notification title:
-- ---------------------------------
set notificationTitle to "From: " & fileName
-- ---------------------------------
-- END CUSTOMIZING
-- ---------------------------------
-- ---------------------------------
-- compose file path
-- ---------------------------------
set filePath to my composeFilePath(fileName)
if filePath is "" then
if errBeep then beep
return
end if
-- ---------------------------------
-- check file existence ?
-- ---------------------------------
set filePathExists to my fileExists(filePath)
if not filePathExists then
-- ------------------------------------
-- The file isn't there, ask the user if it should be created (and opened):
-- ------------------------------------
if errBeep then beep
set message to "File " & quoted form of fileName & " at " & return & return & quoted form of filePath & return & return & "is missing."
display dialog message buttons {"Create & Open", "Cancel"} cancel button 2 default button 2 giving up after 20 with title "Where is " & quoted form of fileName & "?" with icon 2
if button returned of the result starts with "Create" then
my readFromFile(filePath) -- this creates the file
tell application "Finder" to open item filePath -- open for edit
end if
return -- we did what we could
end if
-- ---------------------------------------
-- Found the file, now read it:
-- ---------------------------------------
set textFromFile to my readFromFile(filePath)
if textFromFile is not "" then
-- ---------------------------------------------------------
-- Found content, we are ready to fire our notification
-- ---------------------------------------------------------
-- -----------------------------------
-- • but first check length •
-- -----------------------------------
set countCharactersInTextFromFile to count characters in textFromFile -- count includes the "return" characters
if (countCharactersInTextFromFile) is greater than allowedCharactersCount then
-- -----------------------------------
-- • Length is NOT OK
-- More characters as allowed. What to do ? Here, we just beep & change the message and title
-- -----------------------------------
if errBeep then beep
set notificationTitle to "ERROR: " & ((countCharactersInTextFromFile - allowedCharactersCount) as text) & " characters overflow"
set notificationText to (countCharactersInTextFromFile as text) & " characters in textFromFile," & return & (allowedCharactersCount as text) & " characters are allowed."
else
-- -----------------------------------
-- • Length is OK •
-- -----------------------------------
set notificationText to textFromFile
end if
-- ---------------------------------------------------------
-- Fire the notification
-- ---------------------------------------------------------
display notification notificationText with title notificationTitle
-- ---------------------------------------------------------
else
-- ---------------------------------------------------------
-- File is empty! Replace following lines with appropriate action:
-- ---------------------------------------------------------
if errBeep then beep
display notification "*** NO TEXT IN THIS FILE ***" with title "ERROR: EMPTY FILE"
tell application "Finder" to open item filePath -- open for edit
end if
-- ---------------------------------------------------------
-- Sub Routines
-- ---------------------------------------------------------
-- ---------------------------------
-- file existence ?
-- ---------------------------------
on fileExists(filePath)
set filePathExists to false
tell application "Finder"
try
set filePathExists to item filePath exists
end try
end tell
return filePathExists
end fileExists
-- ---------------------------------
-- composeFilePath(fileName)
-- ---------------------------------
on composeFilePath(fileName)
if fileName is "" then return ""
set pathToMe to path to me -- this is the full path to this script
-- get the folder this script is in:
set thisScriptsFolder to ""
tell application "Finder"
try
set thisScriptsFolder to (get container of pathToMe) as text
end try
end tell
if thisScriptsFolder is "" then
return ""
end if
return thisScriptsFolder & fileName -- full path
end composeFilePath
-- ---------------------------------------------------------
-- readFromFile(sourceFile)
-- ---------------------------------------------------------
on readFromFile(sourceFile)
try
set the sourceFile to the sourceFile as string
set the open_sourceFile to open for access file sourceFile
set fileData to read the open_sourceFile
close access the open_sourceFile
return fileData
on error the error_message number the error_number
try
close access file sourceFile
end try
-- display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1
return ""
end try
end readFromFile
这里是简短的版本:
set fileName to "messages.txt"
set filePath to my composeFilePath(fileName)
display notification my readFromFile(filePath) with title "From: " & fileName
on readFromFile(sourceFile)
try
set the sourceFile to the sourceFile as string
set the open_sourceFile to open for access file sourceFile
set fileData to read the open_sourceFile
close access the open_sourceFile
return fileData
on error the error_message number the error_number
try
close access file sourceFile
end try
return ""
end try
end readFromFile
on composeFilePath(fileName)
if fileName is "" then return ""
set pathToMe to path to me -- this is the full path to this script
-- get the folder this script is in:
set thisScriptsFolder to ""
tell application "Finder"
try
set thisScriptsFolder to (get container of pathToMe) as text
end try
end tell
if thisScriptsFolder is "" then
return ""
end if
return thisScriptsFolder & fileName -- full path
end composeFilePath