annotate Lib/idlelib/ScriptBinding.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents b53604fad54b
children eab361617f6a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 """Extension to execute code outside the Python shell window.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
3 This adds the following commands:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
5 - Check module does a full syntax check of the current module.
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
6 It also runs the tabnanny to catch any inconsistent tabs.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
8 - Run module executes the module's code in the __main__ namespace. The window
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
9 must have been saved previously. The module is added to sys.modules, and is
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
10 also added to the __main__ namespace.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
11
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
12 XXX GvR Redesign this interface (yet again) as follows:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
13
27390
882e3eeac3dd M ScriptBinding.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27194
diff changeset
14 - Present a dialog box for ``Run Module''
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
15
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
16 - Allow specify command line arguments in the dialog box
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
17
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
20 import os
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
21 import re
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
22 import string
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
23 import tabnanny
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
24 import tokenize
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
25 import tkMessageBox
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
26 import PyShell
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
28 from configHandler import idleConf
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
29
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
30 IDENTCHARS = string.ascii_letters + string.digits + "_"
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
31
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 indent_message = """Error: Inconsistent indentation detected!
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33
35065
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
34 1) Your indentation is outright incorrect (easy to fix), OR
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35
35065
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
36 2) Your indentation mixes tabs and spaces.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
37
35065
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
38 To fix case 2, change all tabs to spaces by using Edit->Select All followed \
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
39 by Format->Untabify Region and specify the number of columns used by each tab.
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
40 """
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
41
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42 class ScriptBinding:
18497
42741e677338 py-cvs merge, better error dialog
Steven M. Gava <elguavas@python.net>
parents: 13975
diff changeset
43
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 menudefs = [
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
45 ('run', [None,
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
46 ('Check Module', '<<check-module>>'),
27390
882e3eeac3dd M ScriptBinding.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27194
diff changeset
47 ('Run Module', '<<run-module>>'), ]), ]
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 def __init__(self, editwin):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 self.editwin = editwin
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 # Provide instance variables referenced by Debugger
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52 # XXX This should be done differently
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 self.flist = self.editwin.flist
39165
0c00e2f509e0 - EditorWindow.test() was failing. Bug 1417598
Kurt B. Kaiser <kbk@shore.net>
parents: 35384
diff changeset
54 self.root = self.editwin.root
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
56 def check_module_event(self, event):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 filename = self.getfilename()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 if not filename:
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
59 return 'break'
39945
257daf39b08c Some syntax errors were being caught by tokenize during the tabnanny
Kurt B. Kaiser <kbk@shore.net>
parents: 39424
diff changeset
60 if not self.checksyntax(filename):
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
61 return 'break'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 if not self.tabnanny(filename):
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
63 return 'break'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 def tabnanny(self, filename):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 f = open(filename, 'r')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 try:
25312
8eda166b104e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25123
diff changeset
68 tabnanny.process_tokens(tokenize.generate_tokens(f.readline))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 except tokenize.TokenError, msg:
29363
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
70 msgtxt, (lineno, start) = msg
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
71 self.editwin.gotoline(lineno)
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
72 self.errorbox("Tabnanny Tokenizing Error",
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
73 "Token Error: %s" % msgtxt)
26475
6c45985a8fdb Cleanup:
Neal Norwitz <nnorwitz@gmail.com>
parents: 25312
diff changeset
74 return False
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 except tabnanny.NannyNag, nag:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 # The error messages from tabnanny are too confusing...
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 self.editwin.gotoline(nag.get_lineno())
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 self.errorbox("Tab/space error", indent_message)
26475
6c45985a8fdb Cleanup:
Neal Norwitz <nnorwitz@gmail.com>
parents: 25312
diff changeset
79 return False
6c45985a8fdb Cleanup:
Neal Norwitz <nnorwitz@gmail.com>
parents: 25312
diff changeset
80 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 def checksyntax(self, filename):
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
83 self.shell = shell = self.flist.open_shell()
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
84 saved_stream = shell.get_warning_stream()
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
85 shell.set_warning_stream(shell.stderr)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 f = open(filename, 'r')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 source = f.read()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 f.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 if '\r' in source:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 source = re.sub(r"\r\n", "\n", source)
35383
04dd5b06d3c8 1. Mac line endings were incorrect when pasting code from some browsers
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
91 source = re.sub(r"\r", "\n", source)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 if source and source[-1] != '\n':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 source = source + '\n'
29363
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
94 text = self.editwin.text
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
95 text.tag_remove("ERROR", "1.0", "end")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
96 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
97 try:
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
98 # If successful, return the compiled code
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
99 return compile(source, filename, "exec")
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
100 except (SyntaxError, OverflowError), err:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
101 try:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
102 msg, (errorfilename, lineno, offset, line) = err
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
103 if not errorfilename:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
104 err.args = msg, (filename, lineno, offset, line)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
105 err.filename = filename
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
106 self.colorize_syntax_error(msg, lineno, offset)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
107 except:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
108 msg = "*** " + str(err)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
109 self.errorbox("Syntax error",
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
110 "There's an error in your program:\n" + msg)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
111 return False
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
112 finally:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
113 shell.set_warning_stream(saved_stream)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26713
diff changeset
114
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
115 def colorize_syntax_error(self, msg, lineno, offset):
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
116 text = self.editwin.text
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
117 pos = "0.0 + %d lines + %d chars" % (lineno-1, offset-1)
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
118 text.tag_add("ERROR", pos)
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
119 char = text.get(pos)
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
120 if char and char in IDENTCHARS:
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
121 text.tag_add("ERROR", pos + " wordstart", pos)
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
122 if '\n' == text.get(pos): # error at line end
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
123 text.mark_set("insert", pos)
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
124 else:
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
125 text.mark_set("insert", pos + "+1c")
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
126 text.see(pos)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26713
diff changeset
127
27390
882e3eeac3dd M ScriptBinding.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27194
diff changeset
128 def run_module_event(self, event):
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
129 """Run the module after setting up the environment.
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
130
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
131 First check the syntax. If OK, make sure the shell is active and
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
132 then transfer the arguments, set the run environment's working
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
133 directory to the directory of the module being executed and also
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
134 add that directory to its sys.path if not already included.
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
135
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
136 """
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
137 filename = self.getfilename()
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
138 if not filename:
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
139 return 'break'
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
140 code = self.checksyntax(filename)
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
141 if not code:
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
142 return 'break'
39945
257daf39b08c Some syntax errors were being caught by tokenize during the tabnanny
Kurt B. Kaiser <kbk@shore.net>
parents: 39424
diff changeset
143 if not self.tabnanny(filename):
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
144 return 'break'
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
145 shell = self.shell
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
146 interp = shell.interp
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
147 if PyShell.use_subprocess:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
148 shell.restart_shell()
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
149 dirname = os.path.dirname(filename)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
150 # XXX Too often this discards arguments the user just set...
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
151 interp.runcommand("""if 1:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31412
diff changeset
152 _filename = %r
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
153 import sys as _sys
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
154 from os.path import basename as _basename
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
155 if (not _sys.argv or
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
156 _basename(_sys.argv[0]) != _basename(_filename)):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 21765
diff changeset
157 _sys.argv = [_filename]
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
158 import os as _os
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31412
diff changeset
159 _os.chdir(%r)
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
160 del _filename, _sys, _basename, _os
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31412
diff changeset
161 \n""" % (filename, dirname))
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29119
diff changeset
162 interp.prepend_syspath(filename)
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
163 # XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
164 # go to __stderr__. With subprocess, they go to the shell.
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
165 # Need to change streams in PyShell.ModifiedInterpreter.
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
166 interp.runcode(code)
45366
d8f12bae378a ScriptBinding event handlers weren't returning 'break'. Patch 2050, Tal Einat.
Kurt B. Kaiser <kbk@shore.net>
parents: 39945
diff changeset
167 return 'break'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
168
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
169 def getfilename(self):
26713
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
170 """Get source filename. If not saved, offer to save (or create) file
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
171
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
172 The debugger requires a source file. Make sure there is one, and that
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
173 the current version of the source buffer has been saved. If the user
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
174 declines to save or cancels the Save As dialog, return None.
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
175
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
176 If the user has configured IDLE for Autosave, the file will be
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
177 silently saved if it already exists and is dirty.
29271
8f73df099967 Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 29266
diff changeset
178
26713
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
179 """
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
180 filename = self.editwin.io.filename
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
181 if not self.editwin.get_saved():
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
182 autosave = idleConf.GetOption('main', 'General',
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
183 'autosave', type='bool')
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
184 if autosave and filename:
26713
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
185 self.editwin.io.save(None)
eab6d7c80341 If Edit window has not been saved, offer to save if user tries to Run or
Kurt B. Kaiser <kbk@shore.net>
parents: 26693
diff changeset
186 else:
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
187 reply = self.ask_save_dialog()
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
188 self.editwin.text.focus_set()
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
189 if reply == "ok":
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
190 self.editwin.io.save(None)
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
191 filename = self.editwin.io.filename
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
192 else:
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
193 filename = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
194 return filename
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
195
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
196 def ask_save_dialog(self):
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
197 msg = "Source Must Be Saved\n" + 5*' ' + "OK to Save?"
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
198 mb = tkMessageBox.Message(title="Save Before Run or Check",
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
199 message=msg,
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
200 icon=tkMessageBox.QUESTION,
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
201 type=tkMessageBox.OKCANCEL,
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
202 default=tkMessageBox.OK,
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
203 master=self.editwin.text)
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
204 return mb.show()
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
205
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
206 def errorbox(self, title, message):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
207 # XXX This should really be a function of EditorWindow...
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
208 tkMessageBox.showerror(title, message, master=self.editwin.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
209 self.editwin.text.focus_set()