Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7cc5735

Browse files
committed
Initial revision
1 parent 1d6a6ea commit 7cc5735

24 files changed

Lines changed: 5316 additions & 0 deletions

Mac/Contrib/BBPy/PythonSlave.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
"""PythonSlave.py
2+
An application that responds to three types of apple event:
3+
'pyth'/'EXEC': execute direct parameter as Python
4+
'aevt', 'quit': quit
5+
'aevt', 'odoc': perform python scripts
6+
7+
Copyright © 1996, Just van Rossum, Letterror
8+
"""
9+
10+
__version__ = "0.1.3"
11+
12+
import FrameWork
13+
import sys
14+
import traceback
15+
import aetools
16+
import string
17+
import AE
18+
import EasyDialogs
19+
import os
20+
import Qd
21+
from Types import *
22+
from Events import charCodeMask, cmdKey
23+
import MacOS
24+
import Evt
25+
26+
def dummyfunc(): pass
27+
28+
modulefilename = dummyfunc.func_code.co_filename
29+
30+
def Interact(timeout = 50000000): # timeout after 10 days...
31+
AE.AEInteractWithUser(timeout)
32+
33+
34+
class PythonSlave(FrameWork.Application):
35+
def __init__(self):
36+
FrameWork.Application.__init__(self)
37+
AE.AEInstallEventHandler('pyth', 'EXEC', ExecHandler)
38+
AE.AEInstallEventHandler('aevt', 'quit', QuitHandler)
39+
AE.AEInstallEventHandler('aevt', 'odoc', OpenDocumentHandler)
40+
41+
def makeusermenus(self):
42+
self.filemenu = m = FrameWork.Menu(self.menubar, "File")
43+
self._quititem = FrameWork.MenuItem(m, "Quit", "Q", self._quit)
44+
45+
def do_kHighLevelEvent(self, event):
46+
(what, message, when, where, modifiers) = event
47+
try:
48+
AE.AEProcessAppleEvent(event)
49+
except AE.Error, detail:
50+
print "Apple Event was not handled, error:", detail
51+
52+
def do_key(self, event):
53+
(what, message, when, where, modifiers) = event
54+
c = chr(message & charCodeMask)
55+
if modifiers & cmdKey and c == '.':
56+
return
57+
FrameWork.Application.do_key(self, event)
58+
59+
def idle(self, event):
60+
Qd.InitCursor()
61+
62+
def quit(self, *args):
63+
raise self
64+
65+
def getabouttext(self):
66+
return "About PythonSlaveŠ"
67+
68+
def do_about(self, id, item, window, event):
69+
EasyDialogs.Message("PythonSlave " + __version__ + "\rCopyright © 1996, Letterror, JvR")
70+
71+
72+
def ExecHandler(theAppleEvent, theReply):
73+
parameters, args = aetools.unpackevent(theAppleEvent)
74+
if parameters.has_key('----'):
75+
if parameters.has_key('NAME'):
76+
print '--- executing "' + parameters['NAME'] + '" ---'
77+
else:
78+
print '--- executing "<unknown>" ---'
79+
stuff = parameters['----']
80+
MyExec(stuff + "\n") # execute input
81+
print '--- done ---'
82+
return 0
83+
84+
def MyExec(stuff):
85+
stuff = string.splitfields(stuff, '\r') # convert return chars
86+
stuff = string.joinfields(stuff, '\n') # to newline chars
87+
Interact()
88+
saveyield = MacOS.EnableAppswitch(1)
89+
try:
90+
exec stuff in {}
91+
except:
92+
MacOS.EnableAppswitch(saveyield)
93+
traceback.print_exc()
94+
MacOS.EnableAppswitch(saveyield)
95+
96+
def OpenDocumentHandler(theAppleEvent, theReply):
97+
parameters, args = aetools.unpackevent(theAppleEvent)
98+
docs = parameters['----']
99+
if type(docs) <> ListType:
100+
docs = [docs]
101+
for doc in docs:
102+
fss, a = doc.Resolve()
103+
path = fss.as_pathname()
104+
if path <> modulefilename:
105+
MyExecFile(path)
106+
return 0
107+
108+
def MyExecFile(path):
109+
saveyield = MacOS.EnableAppswitch(1)
110+
savewd = os.getcwd()
111+
os.chdir(os.path.split(path)[0])
112+
print '--- Executing file "' + os.path.split(path)[1] + '"'
113+
try:
114+
execfile(path, {"__name__": "__main__"})
115+
except:
116+
traceback.print_exc()
117+
MacOS.EnableAppswitch(saveyield)
118+
MacOS.EnableAppswitch(saveyield)
119+
os.chdir(savewd)
120+
print "--- done ---"
121+
122+
def QuitHandler(theAppleEvent, theReply):
123+
slave.quit()
124+
return 0
125+
126+
127+
slave = PythonSlave()
128+
print "PythonSlave", __version__, "ready."
129+
slave.mainloop()

Mac/Contrib/BBPy/README

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"Run as Python" -- a BBEdit extension to make the Python interpreter execute the
2+
contents of the current window.
3+
4+
version 0.2.3, 18 september 1996
5+
6+
contents:
7+
- "Run as Python" -- the extension
8+
- PythonSlave.py -- the "slave" script that handles the AppleEvents
9+
10+
- source -- source code & CW9 project for the extension
11+
12+
quickstart:
13+
- drop "Run as Python" in BBEdit extensions folder
14+
- double-click PythonSlave.py
15+
- start BBEdit
16+
- type some code
17+
- go to Extensions menu: "Run as Python"
18+
- be happy
19+
20+
warning:
21+
since PythonSlave.py runs its own event loop and we have no interface
22+
to SIOUX you *cannot* copy from the console. Duh.
23+
24+
extra feature:
25+
while PythonSlave.py is running you can still double-click Python
26+
documents, they will get executed as if Python was not already running.
27+
28+
bugs:
29+
perhaps
30+
31+
acknowledgements:
32+
- Thanks to Joseph Strout for valuable input and beta testing.
33+
- Thanks to Mark Roseman for providing code that can launch
34+
PythonSlave.py from BBEdit.
35+
36+
37+
Have fun with it!
38+
Please report bugs, or fix 'em. Suggestions are always welcome.
39+
40+
Just van Rossum, Letterror
41+

0 commit comments

Comments
 (0)