1 """argvemulator - create sys.argv from OSA events. Used by applets that
2 want unix-style arguments.
5 from warnings
import warnpy3k
6 warnpy3k("In 3.x, the argvemulator module is removed.", stacklevel
=2)
11 from Carbon
.AppleEvents
import *
12 from Carbon
import Evt
13 from Carbon
import File
14 from Carbon
.Events
import *
19 """A minimal FrameWork.Application-like class"""
23 # Remove the funny -psn_xxx_xxx argument
24 if len(sys
.argv
) > 1 and sys
.argv
[1][:4] == '-psn':
27 AE
.AEInstallEventHandler(kCoreEventClass
, kAEOpenApplication
, self
.__runapp
)
28 AE
.AEInstallEventHandler(kCoreEventClass
, kAEOpenDocuments
, self
.__openfiles
)
31 AE
.AERemoveEventHandler(kCoreEventClass
, kAEOpenApplication
)
32 AE
.AERemoveEventHandler(kCoreEventClass
, kAEOpenDocuments
)
34 def mainloop(self
, mask
= highLevelEventMask
, timeout
= 1*60):
35 # Note: this is not the right way to run an event loop in OSX or even
36 # "recent" versions of MacOS9. This is however code that has proven
38 stoptime
= Evt
.TickCount() + timeout
39 while not self
.quitting
and Evt
.TickCount() < stoptime
:
40 self
._dooneevent
(mask
, timeout
)
43 print "argvemulator: timeout waiting for arguments"
47 def _dooneevent(self
, mask
= highLevelEventMask
, timeout
= 1*60):
48 got
, event
= Evt
.WaitNextEvent(mask
, timeout
)
50 self
._lowlevelhandler
(event
)
52 def _lowlevelhandler(self
, event
):
53 what
, message
, when
, where
, modifiers
= event
55 if what
== kHighLevelEvent
:
57 AE
.AEProcessAppleEvent(event
)
59 msg
= "High Level Event: %r %r" % (hex(message
), hex(h |
(v
<<16)))
60 print 'AE error: ', err
65 print "Unhandled event:", event
71 def __runapp(self
, requestevent
, replyevent
):
74 def __openfiles(self
, requestevent
, replyevent
):
76 listdesc
= requestevent
.AEGetParamDesc(keyDirectObject
, typeAEList
)
77 for i
in range(listdesc
.AECountItems()):
78 aliasdesc
= listdesc
.AEGetNthDesc(i
+1, typeAlias
)[1]
79 alias
= File
.Alias(rawdata
=aliasdesc
.data
)
80 fsref
= alias
.FSResolveAlias(None)[0]
81 pathname
= fsref
.as_pathname()
82 sys
.argv
.append(pathname
)
84 print "argvemulator.py warning: can't unpack an open document event"
90 if __name__
== '__main__':
91 ArgvCollector().mainloop()
92 print "sys.argv=", sys
.argv