summaryrefslogtreecommitdiffstats
path: root/Tools/idle/ScriptBinding.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/idle/ScriptBinding.py')
-rw-r--r--Tools/idle/ScriptBinding.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/Tools/idle/ScriptBinding.py b/Tools/idle/ScriptBinding.py
new file mode 100644
index 0000000..a112fc5
--- /dev/null
+++ b/Tools/idle/ScriptBinding.py
@@ -0,0 +1,38 @@
+import tkMessageBox
+import os
+import imp
+import sys
+
+class ScriptBinding:
+
+ def __init__(self, editwin):
+ self.editwin = editwin
+ text = editwin.text
+ text.bind("<<run-module>>", self.run_module)
+ text.bind("<<run-script>>", self.run_script)
+ text.bind("<<new-shell>>", self.new_shell)
+
+ def run_module(self, event=None):
+ filename = self.editwin.io.filename
+ if not filename:
+ tkMessageBox.showerror("No file name",
+ "This window has no file name",
+ master=self.editwin.text)
+ return
+ modname, ext = os.path.splitext(os.path.basename(filename))
+ try:
+ mod = sys.modules[modname]
+ except KeyError:
+ mod = imp.new_module(modname)
+ sys.modules[modname] = mod
+ source = self.editwin.text.get("1.0", "end")
+ exec source in mod.__dict__
+
+ def run_script(self, event=None):
+ pass
+
+ def new_shell(self, event=None):
+ import PyShell
+ # XXX Not enough: each shell takes over stdin/stdout/stderr...
+ pyshell = PyShell.PyShell(self.editwin.flist)
+ pyshell.begin()