Applescript Patch: A Beginning

Just.Jake's picture

AppleScript in Quartz Composer would be useful for one particular advantage over Javascript: It has its same dictionaries, etc, wherever it is implemented. That means calls to Address Book, Safari, and System Events. I want AppleScript right now so I can bring another application's window to the front, but I know of plenty of other uses.

This is only a decent start, as I can't figure out how to pass a variable number of arguments to the applescript the way I'm doing things

AppleScript Patch Goals

  • Implement AppleScript in a patch
  • Pass input nodes to our AppleScript code directly

Implementation: In Leopard's Official API, create a plugin with an interface. In your header file, specify two inputs. one a boolean, shouldRun, which will tell our patch when to run, and the other an Index (integer), numArgs, that tells us how many variable inputs we need. These are 'real' inputs, as in a patch that completes my goals, we'd have argument support.

Create one non-input Objective-C 2.0 properties, a NSString called script. Plunk a text box down in Interface Builder, and bind it to PlugIn.script. This is where the user enters his/her applescript. Scripts are entered into the text box, with arguments passed to any value called %@ or %d or whatever, in order.

Here's most of the code for your main block:

if (self.shouldRun) {
   //for errors, we have this!
   NSDictionary *errorContainer = [[NSDictionary alloc] init]; 

   //Creates our final script by taking user entry and substituting %@ or %d for our real argument.
   NSString *finalScript = [NSString stringWithFormat: self.script, arg1, arg2];  //note that as I have no idea what I'm doing, we're not gonna have these args.  thats for YOU to figure out how to do
   NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:finalScript];

   if(![appleScript executeAndReturnError:& errorContainer])
   NSLog([errorContainer description]); 

So, who can solve the dynamically creating argument inputs problem?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

tobyspark's picture
as an aside

use shellscript patch with "osascript -e 'your applescript goes here'" for one-liners.

perhaps look at the source of the shellscript patch as well to get a model for such things.

i'm in the middle of something fiddly myself, so can't get stuck into this right now.