annotate Lib/idlelib/ScriptBinding.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents e450e85e2075
children
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
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 45371
diff changeset
25 import tkinter.messagebox as tkMessageBox
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42708
diff changeset
26 from idlelib.EditorWindow import EditorWindow
50874
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
27 from idlelib import PyShell, IOBinding
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42708
diff changeset
29 from idlelib.configHandler import idleConf
70174
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
30 from idlelib import macosxSupport
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
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
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35384
diff changeset
54 self.root = self.editwin.root
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55
70174
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
56 if macosxSupport.runningAsOSXApp():
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
57 self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
58
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
59 def check_module_event(self, event):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 filename = self.getfilename()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 if not filename:
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
62 return 'break'
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
63 if not self.checksyntax(filename):
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
64 return 'break'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 if not self.tabnanny(filename):
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
66 return 'break'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 def tabnanny(self, filename):
50874
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
69 # XXX: tabnanny should work on binary files as well
72172
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
70 with tokenize.open(filename) as f:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
71 try:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
72 tabnanny.process_tokens(tokenize.generate_tokens(f.readline))
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
73 except tokenize.TokenError as msg:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
74 msgtxt, (lineno, start) = msg
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
75 self.editwin.gotoline(lineno)
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
76 self.errorbox("Tabnanny Tokenizing Error",
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
77 "Token Error: %s" % msgtxt)
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
78 return False
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
79 except tabnanny.NannyNag as nag:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
80 # The error messages from tabnanny are too confusing...
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
81 self.editwin.gotoline(nag.get_lineno())
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
82 self.errorbox("Tab/space error", indent_message)
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70174
diff changeset
83 return False
26475
6c45985a8fdb Cleanup:
Neal Norwitz <nnorwitz@gmail.com>
parents: 25312
diff changeset
84 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 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
87 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
88 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
89 shell.set_warning_stream(shell.stderr)
85030
e450e85e2075 Issue #18151: Replace remaining Idle 'open...close' pairs with 'with open'.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 76126
diff changeset
90 with open(filename, 'rb') as f:
e450e85e2075 Issue #18151: Replace remaining Idle 'open...close' pairs with 'with open'.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 76126
diff changeset
91 source = f.read()
50874
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
92 if b'\r' in source:
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
93 source = source.replace(b'\r\n', b'\n')
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
94 source = source.replace(b'\r', b'\n')
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
95 if source and source[-1] != ord(b'\n'):
b92e695d561e Merged revisions 68730 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47130
diff changeset
96 source = source + b'\n'
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
97 editwin = self.editwin
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
98 text = editwin.text
29363
c66100c09ea1 SF 747667 Error Doesn't Decolorize
Kurt B. Kaiser <kbk@shore.net>
parents: 29346
diff changeset
99 text.tag_remove("ERROR", "1.0", "end")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100 try:
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
101 # If successful, return the compiled code
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
102 return compile(source, filename, "exec")
72382
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72172
diff changeset
103 except (SyntaxError, OverflowError, ValueError) as value:
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72172
diff changeset
104 msg = getattr(value, 'msg', '') or value or "<no detail available>"
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72172
diff changeset
105 lineno = getattr(value, 'lineno', '') or 1
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72172
diff changeset
106 offset = getattr(value, 'offset', '') or 0
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
107 if offset == 0:
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
108 lineno += 1 #mark end of offending line
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
109 pos = "0.0 + %d lines + %d chars" % (lineno-1, offset-1)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
110 editwin.colorize_syntax_error(text, pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
111 self.errorbox("SyntaxError", "%-20s" % msg)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
112 return False
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
113 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
114 shell.set_warning_stream(saved_stream)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26713
diff changeset
115
27390
882e3eeac3dd M ScriptBinding.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27194
diff changeset
116 def run_module_event(self, event):
70174
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
117 if macosxSupport.runningAsOSXApp():
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
118 # Tk-Cocoa in MacOSX is broken until at least
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
119 # Tk 8.5.9, and without this rather
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
120 # crude workaround IDLE would hang when a user
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
121 # tries to run a module using the keyboard shortcut
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
122 # (the menu item works fine).
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
123 self.editwin.text_frame.after(200,
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
124 lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
125 return 'break'
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
126 else:
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
127 return self._run_module_event(event)
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
128
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
129 def _run_module_event(self, event):
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
130 """Run the module after setting up the environment.
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
131
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
132 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
133 then transfer the arguments, set the run environment's working
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
134 directory to the directory of the module being executed and also
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
135 add that directory to its sys.path if not already included.
70174
1c6823317a06 Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 70054
diff changeset
136 """
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
137
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
138 filename = self.getfilename()
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
139 if not filename:
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
140 return 'break'
35384
34ff7ca4cef8 Revert previous code elimination, 'filename' is needed.
Kurt B. Kaiser <kbk@shore.net>
parents: 35383
diff changeset
141 code = self.checksyntax(filename)
26693
975333d40bf8 M ColorDelegator.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26522
diff changeset
142 if not code:
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
143 return 'break'
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
144 if not self.tabnanny(filename):
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
diff changeset
145 return 'break'
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 72382
diff changeset
146 interp = self.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:
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 72382
diff changeset
148 interp.restart_subprocess(with_cwd=False)
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:
76126
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
152 __file__ = {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
76126
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
156 _basename(_sys.argv[0]) != _basename(__file__)):
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
157 _sys.argv = [__file__]
29346
75494aea47ca SF 745525
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
158 import os as _os
76126
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
159 _os.chdir({dirname!r})
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
160 del _sys, _basename, _os
2c276d0553ff Issue #8515: Set __file__ when run file in IDLE.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74693
diff changeset
161 \n""".format(filename=filename, dirname=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)
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42714
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:
70054
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
187 confirm = self.ask_save_dialog()
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
188 self.editwin.text.focus_set()
70054
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
189 if confirm:
29266
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?"
70054
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
198 confirm = tkMessageBox.askokcancel(title="Save Before Run or Check",
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
199 message=msg,
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
200 default=tkMessageBox.OK,
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
201 master=self.editwin.text)
da7a120c0478 Issue #11896: Save on Close failed despite selecting "Yes" in dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 67798
diff changeset
202 return confirm
29266
d23e9320d350 Bruce Sherwood RFE/Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
203
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
204 def errorbox(self, title, message):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
205 # XXX This should really be a function of EditorWindow...
67798
64713e31683f Issue #11053: Fix IDLE "Syntax Error" windows to behave as in 2.x,
Ned Deily <nad@acm.org>
parents: 50874
diff changeset
206 tkMessageBox.showerror(title, message, master=self.editwin.text)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
207 self.editwin.text.focus_set()