Created
April 27, 2013 01:20
-
-
Save prehensilecode/5471484 to your computer and use it in GitHub Desktop.
Trouting script for Colloquy
This file contains 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
(*Actions.scpt | |
Intended for use as a template for context menu script actions | |
*) | |
--and here's how you save preferences | |
property prefs : missing value | |
property prefsPath : missing value | |
using terms from application "Colloquy" | |
on build contextual menu for item blah | |
try | |
my loadPrefs() | |
if class of blah is member then | |
return {"Slap!", {title:"Actions", alternate:1, submenu:{"Pounce!", {title:"Slap with...", submenu:slapitems of prefs & {"-", "Add...", {title:"Edit slap list...", submenu:slapitems of prefs}}}, "Poke"}}, "Add to slap list", {title:"Edit slap list...", submenu:slapitems of prefs, alternate:1}, "-"} | |
else if class of blah is Unicode text then | |
return {"Add to slap list"} | |
else | |
return {} | |
end if | |
on error err | |
return {{title:"Error", submenu:{err}}} | |
end try | |
end build contextual menu for item | |
on handle clicked contextual menu item theItem for theUser within submenus | |
try | |
my loadPrefs() | |
tell application "Colloquy" | |
if submenus is {} then | |
if theItem is "Slap!" then | |
tell chat room panel of theUser to send message "slaps " & name of theUser & " around a bit with " & some item of (slapitems of prefs) with action tense | |
else if theItem is "Add to slap list" then | |
try | |
set theUser to name of theUser | |
end try | |
set slapitems of prefs to slapitems of prefs & {theUser} | |
my savePrefs() | |
end if | |
else if submenus is {"Actions"} then | |
if theItem is "Pounce!" then | |
tell chat room panel of theUser to send message "pounces " & name of theUser & "!" with action tense | |
else if theItem is "Poke" then | |
tell chat room panel of theUser to send message "pokes " & name of theUser with action tense | |
end if | |
else if last item of submenus is "Slap with..." then | |
if theItem is "Add..." then | |
try | |
set ans to text returned of (display dialog "Add what item?" default answer "a large trout") | |
on error | |
return | |
end try | |
if (slapitems of prefs) does not contain ans then | |
set (slapitems of prefs) to (slapitems of prefs) & {ans} | |
my savePrefs() | |
end if | |
else | |
tell chat room panel of theUser to send message "slaps " & name of theUser & " around a bit with " & theItem with action tense | |
end if | |
else if last item of submenus is "Edit slap list..." then | |
repeat with n from 1 to number of items in (slapitems of prefs) | |
if item n of (slapitems of prefs) is theItem then | |
exit repeat | |
end if | |
end repeat | |
try | |
if number of items of slapitems of prefs > 1 then | |
set newItem to display dialog "Change to?" default answer (item n of (slapitems of prefs)) buttons {"Change", "Remove", "Cancel"} default button 1 | |
else | |
set newItem to display dialog "Change to?" default answer (item n of (slapitems of prefs)) buttons {"Change", "Cancel"} default button 1 | |
end if | |
on error | |
return | |
end try | |
if button returned of newItem is "Change" then | |
set item n of (slapitems of prefs) to text returned of newItem | |
my savePrefs() | |
else if button returned of newItem is "Remove" then | |
if number of items in (slapitems of prefs) > 1 then | |
set (slapitems of prefs) to my DeleteNthItem((slapitems of prefs), n) | |
else | |
error "Cannot delete the last item from the list" | |
end if | |
my savePrefs() | |
end if | |
end if | |
end tell | |
on error err | |
display dialog err | |
end try | |
end handle clicked contextual menu item | |
on process user command c with arguments for view | |
try | |
my loadPrefs() | |
if c is "slap" then | |
tell view to send message "slaps " & arguments & " around a bit with " & some item of (slapitems of prefs) with action tense | |
end if | |
on error err | |
return {{title:"Error", submenu:{err}}} | |
end try | |
end process user command | |
end using terms from | |
on DeleteNthItem(theList, theItemNumber) | |
set listCount to count of theList | |
if theItemNumber = 1 or theItemNumber = -listCount then | |
set theList to rest of theList | |
else if theItemNumber = -1 or theItemNumber = listCount then | |
set theList to items 1 thru -2 of theList | |
else | |
set theList to (items 1 thru (theItemNumber - 1) of theList) & (items (theItemNumber + 1) thru -1 of theList) | |
end if | |
return (theList) | |
end DeleteNthItem | |
script prefsTemplate | |
property slapitems : {"a large trout", "a large bass"} | |
end script | |
on loadPrefs() | |
if prefs is missing value then | |
set prefsPath to (path to preferences folder from user domain as Unicode text) & "Colloquy Prefs - Actions Menu" | |
try | |
set prefs to load script alias prefsPath | |
on error | |
set prefs to prefsTemplate | |
end try | |
end if | |
end loadPrefs | |
on savePrefs() | |
if prefs is not missing value then store script prefs in file prefsPath replacing yes | |
end savePrefs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment