Folder Actions
(* display a dialog whenever a certain folder is opened. The f variable contains an alias to the folder that was opened. *) on opening folder f tell application "Finder" activate display dialog ("You opened " & (name of f)) giving up after 10 end tell end opening folder
alias
This command is used as a subroutine or handler, in the form of:
on opening folder theFolder...end opening folder
The theFolder
variable contains an
alias
to the folder. The subroutine definition
on opening folder...
can then access elements of the folder by using Finder commands.
alias
Use this command as part of a subroutine definition for handlers that trigger when attached folder windows are closed:
on closing folder window for theFolder...end closing folder window for
The theFolder
variable contains an
alias
to the attached folder. This code example
backs up all files in a folder to a backup disk when the folder
window is closed:
on closing folder window for theFolder tell application "Finder" try activate (* make the backup folder if it doesn't exist *) if not (exists (folder "mybackup" of disk "backup")) then set backupFolder to (make new folder at disk "backup"¬ with properties {name:"mybackup"}) else set backupFolder to (folder "mybackup" of disk "backup") end if (* get a list of the files of the attached folder *) set f to (files of theFolder) (* only do this if the folder is not empty *) if (count of f) > 0 then repeat with fl from 1 to (length of f) (* duplicate each file to the backup folder *) duplicate (item fl of f) to backupFolder replacing yes end repeat end if on error errmesg display dialog "An error: " & errmesg return -- return empty-handed if there was an error end try display dialog "backup complete!" end tell end closing folder window for
alias
You can have a script execute when a folder is moved using this command. The syntax would be:
on moving folder window for theFolder from rec...end moving folder window for
The variable theFolder
(or whatever name you give
it) receives an alias
to the folder. The variable
rec
receives a list
of
coordinates that represent the top left and top right corners of the
screen space the window occupied before it was moved. The next code
example gets and displays the coordinates of the window (in the form
of “10 : 50 : 370 : 500”) stored in
rec
. The windows that have the attached scripts
have to be open in the Finder for the “moving folder
window for” and “adding folder
items to” folder actions to execute properly.
from bounding rectangle
The from
labeled parameter gives whatever variable
you supply with it a rectangle value, as in {10,50,370,500}
(basically a list
of integers
).
For example:
on moving folder window for tf from rec set old_delim to text item delimiters set text item delimiters to " : " display dialog (rec as text) (* set text item delimiters back to empty string default *) set text item delimiters to old_delim end moving folder window for
alias
This command is triggered when items are added to an open window that has one of these folder-action types attached to it (this folder action only works when the attached folder window is open). The following example displays a count of the number of folder items every time a new one is added to the directory. This is just a folder-action functionality example; you might want to log similar folder activity, but you normally would not want to display a dialog every time something happened with a folder, unless you want to antagonize users:
on adding folder items to f tell application "Finder" activate set fcount to (count files of f) display dialog ("there are now " & fcount &¬ " files in the folder " & (name of f)) giving up after 10 end tell end adding folder items to
alias
This subroutine is executed when items are removed from an attached folder. You use it in the form of:
on removing folder items from theFolder after losing alias_list...end removing folder items from
The theFolder
variable (or whatever name you give
it) contains an alias
of the folder. The
alias_list
variable contains a list of aliases
referring to the items that were removed from the folder. This next
example admonishes the user after an item is removed from the folder.
after losing list of aliases
This labeled parameter contains a list
of aliases
representing the items that were removed from the folder. This code
demonstrates this parameter:
on removing folder items from theFolder after losing alias_list tell application "Finder" display dialog "Removing " & ((item 1 of alias_list) as &¬ text) & " from " & (name of theFolder) &¬ " is strictly forbidden!" end tell end removing folder items from
alias
Attach a folder action to a folder using this command:
attach action to fol_alias using script alias
The fol_alias
variable contains an
alias
to a folder. The
script_alias
variable is an
alias
to the AppleScript that will be attached to
the folder. The Example section lets the user choose a folder to
attach actions to.
alias
You can script the removal of a folder action from a folder with this
command. You have to identify the folder with an
alias
variable or a literal
alias
.
action number integer
This labeled parameter specifies by index number which action to remove from the folder (if there is more than one attached action). For example, if you want to remove the second folder action, then use:
action number 2
action name string
As an alternative, you can specify the name of the script to remove,
as in: action name
"moveScript
“. The name of the attached
script also shows up in the contextual menu (attained by
Control-clicking the folder) under the menu item
“Remove a folder action.”
set f_alias to¬ (choose folder with prompt¬ "choose a folder, cleanse its action") tell application "Folder Actions" remove action from f_alias action number 2 end tell
alias
You can open up an attached script in Script Editor by using code such as:
edit action of theFolder action name "moveScript"
Chapter 2 is devoted to Script Editor.
alias
You can find out if a folder has any attached scripts by passing the
folder as an alias
to this command:
tell app "Folder Actions" to attached scripts folder_alias
The folder_alias
variable (or whatever you name
it) contains an alias
to the folder you are
examining for attached scripts. This command returns a
list
. Each member of the list
is a list
containing a file
alias
for the attached script. The return value
looks like:
{{alias "Macintosh HD:Desktop Folder:moverScript"}}
Yes, for some reason this command returns a list
inside of another list
.
set fol to choose folder with prompt¬ "Choose the folder to attach the action to" set theAction to alias "Macintosh HD:Desktop Folder:moverScript" (* this script will be attached to the folder the user chooses *) tell application "Folder Actions" (*start the Folder Actions server; it is not strictly necessary to use run or quit *) run attach action to fol using theAction quit end tell