property name : "hello" on run end on open x end on baz() end on fub() end ''' scriptDesc = codecs.pack(script) scriptID = osac.OSACompile(scriptDesc, kOSAModeCompileIntoContext, kOSANullScript) print `codecs.unpack(osac.OSAGetHandlerNames(kOSAModeNull, scriptID))` i = osac.OSAGetHandler(kOSAModeNull, scriptID, codecs.pack(AEEventName('aevtodoc'))) print i, `codecs.unpack(osac.OSADisplay(i, typeWildCard, kOSAModeNull))` print `codecs.unpack(osac.OSAGetPropertyNames(kOSAModeNull, scriptID))` o = osac.OSAGetProperty(kOSAModeNull, scriptID, codecs.pack('bar')) print `codecs.unpack(osac.OSACoerceToDesc(o, typeWildCard, 0))`
###################################################################### # PRIVATE ###################################################################### _codecs = Codecs() def _extract(fn, type): try: desc = fn() except MacOS.Error, err: if err.args[0] != -192: # re-raise unless aete resource not found raise return [] else: lst = _codecs.unpack(desc) if not isinstance(lst, list): lst = [lst] return [val for val in lst if isinstance(val, AEDesc) and val.type == type and val.data] ###################################################################### # PUBLIC ###################################################################### def getsdef(path): """Get an application's terminology as sdef XML data, if available. path : str | unicode | FSRef -- full path to app Result : str | None -- XML data, or None if OS version < 10.4 """ return OSATerminology.CopyScriptingDefinition(path)
osac.OSASetDefaultTarget(AECreateDesc(typeNull, '')) scriptID = osac.OSACompile(scriptDesc, kOSAModeCompileIntoContext, 0) def fn(ae): print print 'EVT', ` ae.type, ae.data[:64] + (ae.data[64:] and '...' or '') ` #raise 'fuk' r = Application().event('aevtansr', {'----': 10000}).AEM_event print 'RES', ` r.type, r.data[:64] + (r.data[64:] and '...' or '') ` print return r osac.OSASetResumeDispatchProc(fn) print osac.OSAGetResumeDispatchProc() i = osac.OSAExecute(scriptID, 0, 0) print ` codecs.unpack(osac.OSADisplay(i, typeWildCard, 0)) ` print osac.OSAGetResumeDispatchProc() print ` codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0)) ` osac.OSASetResumeDispatchProc((kOSANoDispatch, 0)) print osac.OSAGetResumeDispatchProc() print ` codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0)) ` osac.OSASetResumeDispatchProc((kOSAUseStandardDispatch, kOSADontUsePhac)) print osac.OSAGetResumeDispatchProc()
print f def c(ae, m, p, t): print print 'EVT', ` ae.type, ae.data[:64] + (ae.data[64:] and '...' or '') ` try: r = f(ae, m, p, t) except Exception, e: print 'ERROR', e r = Application().event('aevtansr', {'errn': e[0]}).AEM_event print 'RES', ` r.type, r.data[:64] + (r.data[64:] and '...' or '') ` print return r osac.OSASetSendProc(c) print ` codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0)) ` print osac.OSAGetSendProc() print osac.OSASetSendProc(f) print ` codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0)) ` print osac.OSAGetSendProc()
#!/usr/bin/env pythonw from Carbon.Cm import OpenDefaultComponent from CarbonX.OSA import OSAComponentInstance from CarbonX.kOSA import * from CarbonX.kAE import * from aem import Codecs codecs = Codecs() osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) script = '''tell app "Finder" to get folder 1 of home''' scriptDesc = codecs.pack(script) scriptID = osac.OSACompile(scriptDesc, kOSAModeNull, kOSANullScript) resultID = osac.OSAExecute(scriptID, kOSANullScript, kOSAModeNull) print ` codecs.unpack(osac.OSAGetSource(scriptID, typeWildCard)) ` print print ` codecs.unpack(osac.OSADisplay(resultID, typeWildCard, kOSAModeNull)) ` print print ` codecs.unpack(osac.OSACoerceToDesc(resultID, typeWildCard, 0)) ` osac.OSADispose(scriptID) osac.OSADispose(resultID)
# create an aem Codecs instance to pack and unpack AEDescs codecs = Codecs() # open an AppleScript component instance, and wrap it in an OSAComponentInstance to provide the OSA API (clumsy arrangement, but it does the job) osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) root = split(__file__)[0] src = join(root, 'test.scpt') dest = join(root, 'test_out.scpt') id, storable = osac.OSALoadFile(src, kOSAModeNull) print id, storable print osac.OSAExecute(id, kOSANullScript, kOSAModeNull) osac.OSAStoreFile(id, typeOSAGenericStorage, kOSAModeNull, dest) print osac.OSALoadExecuteFile(src, kOSANullScript, kOSAModeNull) print ` codecs.unpack( osac.OSADoScriptFile(src, kOSANullScript, typeWildCard, kOSAModeNull)) ` d = osac.OSAStore(id, typeOSAGenericStorage, kOSAModeNull) print d i = osac.OSALoadExecute(d, kOSANullScript, kOSAModeNull) print i print ` codecs.unpack(osac.OSADisplay(i, typeWildCard, kOSAModeNull)) `
#!/usr/bin/env pythonw from Carbon.Cm import OpenDefaultComponent from CarbonX.OSA import OSAComponentInstance from CarbonX.kOSA import * from CarbonX.kAE import * from aem import Codecs codecs = Codecs() osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) script = '''tell app "Finder" to get folder 1 of home''' scriptDesc = codecs.pack(script) scriptID = osac.OSACompile(scriptDesc, kOSAModeNull, kOSANullScript) resultID = osac.OSAExecute(scriptID, kOSANullScript, kOSAModeNull) print `codecs.unpack(osac.OSAGetSource(scriptID, typeWildCard))` print print `codecs.unpack(osac.OSADisplay(resultID, typeWildCard, kOSAModeNull))` print print `codecs.unpack(osac.OSACoerceToDesc(resultID, typeWildCard, 0))` osac.OSADispose(scriptID) osac.OSADispose(resultID)
on run beep 3 return {"hello", "world"} end on open x beep 2 return reverse of x end ''') scriptID = osac.OSACompile(scriptDesc, kOSAModeCompileIntoContext, 0) print 'SOURCE:', `codecs.unpack(osac.OSAGetSource(scriptID, typeUnicodeText))` print event1 = Application().event('aevtoapp', {}).AEM_event resultID = osac.OSAExecuteEvent(event1, scriptID, kOSAModeNull) print 'DISPLAY:', `codecs.unpack(osac.OSADisplay(resultID, typeWildCard, 0))` # u'{"hello", "world"}' print 'RESULT:', `codecs.unpack(osac.OSACoerceToDesc(resultID, typeWildCard, 0))` # ['hello', 'world'] print event2 = Application().event('aevtodoc', {'----': [1, 2, 3]}).AEM_event replyEvent = Application().event('aevtansr').AEM_event osac.OSADoEvent(event2, scriptID, kOSAModeNull, replyEvent)
property name : "hello" on run end on open x end on baz() end on fub() end ''' scriptDesc = codecs.pack(script) scriptID = osac.OSACompile(scriptDesc, kOSAModeCompileIntoContext, kOSANullScript) print ` codecs.unpack(osac.OSAGetHandlerNames(kOSAModeNull, scriptID)) ` i = osac.OSAGetHandler(kOSAModeNull, scriptID, codecs.pack(AEEventName('aevtodoc'))) print i, ` codecs.unpack(osac.OSADisplay(i, typeWildCard, kOSAModeNull)) ` print ` codecs.unpack(osac.OSAGetPropertyNames(kOSAModeNull, scriptID)) ` o = osac.OSAGetProperty(kOSAModeNull, scriptID, codecs.pack('bar')) print ` codecs.unpack(osac.OSACoerceToDesc(o, typeWildCard, 0)) `
return _osat.CopyScriptingDefinition(path) def getaete(path): """Get an application's terminology as zero or more aete(s). path : str | unicode | FSSpec -- full path to app Result : list of str -- zero or more strings of binary aete data """ try: desc = _osat.GetAppTerminology(path)[0] except MacOS.Error, err: if err.args[0] == -192: # aete resource not found aetes = [] else: raise else: aetes = _codecs.unpack(desc) if not isinstance(aetes, list): aetes = [aetes] aetes = [aete for aete in aetes if aete != None ] # AS applets don't raise error -192 for some reason return aetes def getaeut(code='ascr'): """Get a scripting component's built-in terminology (aeut) code : str -- 4-letter code indication component subtype (default: AppleScript) Result : str -- binary aeut data """ return _codecs.unpack(_osat.GetSysTerminology(code))
scriptDesc = codecs.pack(''' on run beep 3 return {"hello", "world"} end on open x beep 2 return reverse of x end ''') scriptID = osac.OSACompile(scriptDesc, kOSAModeCompileIntoContext, 0) print 'SOURCE:', ` codecs.unpack(osac.OSAGetSource(scriptID, typeUnicodeText)) ` print event1 = Application().event('aevtoapp', {}).AEM_event resultID = osac.OSAExecuteEvent(event1, scriptID, kOSAModeNull) print 'DISPLAY:', ` codecs.unpack(osac.OSADisplay( resultID, typeWildCard, 0)) ` # u'{"hello", "world"}' print 'RESULT:', ` codecs.unpack( osac.OSACoerceToDesc(resultID, typeWildCard, 0)) ` # ['hello', 'world'] print event2 = Application().event('aevtodoc', {'----': [1, 2, 3]}).AEM_event
#!/usr/bin/env pythonw from Carbon.Cm import OpenDefaultComponent from CarbonX.OSA import OSAComponentInstance from CarbonX.kAE import * from aem import Codecs # create an aem Codecs instance to pack and unpack AEDescs codecs = Codecs() # open an AppleScript component instance, and wrap it in an OSAComponentInstance to provide the OSA API (clumsy arrangement, but it does the job) osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) # define some AppleScript source code script = ''' set s to "hello" & space & "world" say s using "Zarvox" return s ''' # pack source code into an AEDesc scriptDesc = codecs.pack(script) # compile and run script, returning its result resultDesc = osac.OSADoScript(scriptDesc, 0, typeChar, 0) # unpack result print ` codecs.unpack(resultDesc) ` # '"hello world"'
#!/usr/bin/env pythonw from Carbon.Cm import OpenDefaultComponent from CarbonX.OSA import OSAComponentInstance from CarbonX.kAE import * from aem import Codecs # create an aem Codecs instance to pack and unpack AEDescs codecs = Codecs() # open an AppleScript component instance, and wrap it in an OSAComponentInstance to provide the OSA API (clumsy arrangement, but it does the job) osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) # define some AppleScript source code script = ''' set s to "hello" & space & "world" say s using "Zarvox" return s ''' # pack source code into an AEDesc scriptDesc = codecs.pack(script) # compile and run script, returning its result resultDesc = osac.OSADoScript(scriptDesc, 0, typeChar, 0) # unpack result print `codecs.unpack(resultDesc)` # '"hello world"'
def fn(ae): print print 'EVT', `ae.type, ae.data[:64] + (ae.data[64:] and '...' or '')` #raise 'fuk' r = Application().event('aevtansr', {'----':10000}).AEM_event print 'RES', `r.type, r.data[:64] + (r.data[64:] and '...' or '')` print return r osac.OSASetResumeDispatchProc(fn) print osac.OSAGetResumeDispatchProc() i = osac.OSAExecute(scriptID, 0, 0) print `codecs.unpack(osac.OSADisplay(i, typeWildCard, 0))` print osac.OSAGetResumeDispatchProc() print `codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0))` osac.OSASetResumeDispatchProc((kOSANoDispatch, 0)) print osac.OSAGetResumeDispatchProc() print `codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0))` osac.OSASetResumeDispatchProc((kOSAUseStandardDispatch, kOSADontUsePhac)) print osac.OSAGetResumeDispatchProc()
#!/usr/bin/env pythonw from CarbonX.OSA import OSAComponentInstance from Carbon.Cm import OpenDefaultComponent from CarbonX.kAE import * from CarbonX.kOSA import * from aem import Codecs, AEType from sys import exit from pprint import pprint codecs = Codecs() ascr = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) names = codecs.unpack(ascr.ASGetSourceStyleNames(kOSAModeNull)) values = codecs.unpack(ascr.ASGetSourceStyles()) #print `st.type, st.data` pprint(zip(names, values)) values[0][AEType('ptsz')] = 42 ascr.ASSetSourceStyles(codecs.pack(values)) values = codecs.unpack(ascr.ASGetSourceStyles()) pprint(zip(names, values))
from aem import Codecs # create an aem Codecs instance to pack and unpack AEDescs codecs = Codecs() # open an AppleScript component instance, and wrap it in an OSAComponentInstance to provide the OSA API (clumsy arrangement, but it does the job) osac = OSAComponentInstance(OpenDefaultComponent('osa ', 'ascr')) root = split(__file__)[0] src = join(root, 'test.scpt') dest = join(root, 'test_out.scpt') id, storable = osac.OSALoadFile(src, kOSAModeNull) print id, storable print osac.OSAExecute(id, kOSANullScript, kOSAModeNull) osac.OSAStoreFile(id, typeOSAGenericStorage, kOSAModeNull, dest) print osac.OSALoadExecuteFile(src, kOSANullScript, kOSAModeNull) print `codecs.unpack(osac.OSADoScriptFile(src, kOSANullScript, typeWildCard, kOSAModeNull))` d = osac.OSAStore(id, typeOSAGenericStorage, kOSAModeNull) print d i = osac.OSALoadExecute(d, kOSANullScript, kOSAModeNull) print i print `codecs.unpack(osac.OSADisplay(i, typeWildCard, kOSAModeNull))`
scpt = OSAComponentInstance(OpenDefaultComponent("osa ", "scpt")) ascr = OSAComponentInstance(OpenDefaultComponent("osa ", "ascr")) # print `codecs.unpack(osac.OSAScriptingComponentName())` # print `codecs.unpack(scpt.ASGetSourceStyleNames(kOSAModeNull))` # osac.OSASetDefaultScriptingComponent('McPy') # print `osac.OSAGetDefaultScriptingComponent()` # exit() # print dir(OpenDefaultComponent('osa ', 'scpt')) id = scpt.OSACompile(codecs.pack("2+2"), 0, 0) id = scpt.OSACompile(codecs.pack("2+2"), 0, 0) id2, ascr2 = scpt.OSAGenericToRealID(id) print id2, codecs.unpack(ascr2.OSAScriptingComponentName()) print ascr2.OSAExecute(id2, 0, 0) id3 = scpt.OSARealToGenericID(id2, ascr2) r = scpt.OSAExecute(id3, 0, 0) print ` codecs.unpack(scpt.OSADisplay(r, typeBest, 0)) ` print "Done."
f = osac.OSAGetCreateProc() print f def c(*args): # (AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, AEReturnID returnID, AETransactionID transactionID) -> (AppleEvent result) print args #raise 'test error' return f(*args) return AECreateAppleEvent(*args) osac.OSASetCreateProc(c) print `codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0))` print osac.OSAGetCreateProc() print osac.OSASetCreateProc(f) print `codecs.unpack(osac.OSADoScript(scriptDesc, 0, typeChar, 0))` print osac.OSAGetCreateProc()
Result : str | None -- XML data, or None if OS version < 10.4 """ return _osat.CopyScriptingDefinition(path) def getaete(path): """Get an application's terminology as zero or more aete(s). path : str | unicode | FSSpec -- full path to app Result : list of str -- zero or more strings of binary aete data """ try: desc = _osat.GetAppTerminology(path)[0] except MacOS.Error, err: if err.args[0] == -192: # aete resource not found aetes = [] else: raise else: aetes = _codecs.unpack(desc) if not isinstance(aetes, list): aetes = [aetes] aetes = [aete for aete in aetes if aete != None] # AS applets don't raise error -192 for some reason return aetes def getaeut(code='ascr'): """Get a scripting component's built-in terminology (aeut) code : str -- 4-letter code indication component subtype (default: AppleScript) Result : str -- binary aeut data """ return _codecs.unpack(_osat.GetSysTerminology(code))