Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 13975 | 1 """Extension to execute code outside the Python shell window. |
| 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 | 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 | 6 It also runs the tabnanny to catch any inconsistent tabs. |
| 13975 | 7 |
| 25123 | 8 - Run module executes the module's code in the __main__ namespace. The window |
| 26693 | 9 must have been saved previously. The module is added to sys.modules, and is |
| 10 also added to the __main__ namespace. | |
| 13975 | 11 |
| 26693 | 12 XXX GvR Redesign this interface (yet again) as follows: |
| 23547 | 13 |
| 27390 | 14 - Present a dialog box for ``Run Module'' |
| 23547 | 15 |
| 16 - Allow specify command line arguments in the dialog box | |
| 17 | |
| 13975 | 18 """ |
| 19 | |
| 29346 | 20 import os |
| 26693 | 21 import re |
| 22 import string | |
| 23 import tabnanny | |
| 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 | 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 | 31 |
| 13975 | 32 indent_message = """Error: Inconsistent indentation detected! |
| 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 | 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 | 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 | 42 class ScriptBinding: |
|
18497
42741e677338
py-cvs merge, better error dialog
Steven M. Gava <elguavas@python.net>
parents:
13975
diff
changeset
|
43 |
| 13975 | 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 | 46 ('Check Module', '<<check-module>>'), |
| 27390 | 47 ('Run Module', '<<run-module>>'), ]), ] |
| 13975 | 48 |
| 49 def __init__(self, editwin): | |
| 50 self.editwin = editwin | |
| 51 # Provide instance variables referenced by Debugger | |
| 52 # XXX This should be done differently | |
| 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 | 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 | 60 filename = self.getfilename() |
| 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 | 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 | 67 |
| 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 | 84 return True |
| 13975 | 85 |
| 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 | 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 | 115 |
| 27390 | 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 | 130 """Run the module after setting up the environment. |
| 131 | |
| 132 First check the syntax. If OK, make sure the shell is active and | |
| 133 then transfer the arguments, set the run environment's working | |
| 134 directory to the directory of the module being executed and also | |
| 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 | 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 | 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 | 149 dirname = os.path.dirname(filename) |
| 23547 | 150 # XXX Too often this discards arguments the user just set... |
| 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 | 153 import sys as _sys |
| 154 from os.path import basename as _basename | |
| 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 | 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 | 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 | 168 |
| 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 | 175 |
| 176 If the user has configured IDLE for Autosave, the file will be | |
| 177 silently saved if it already exists and is dirty. | |
| 29271 | 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 | 180 filename = self.editwin.io.filename |
| 13975 | 181 if not self.editwin.get_saved(): |
| 29266 | 182 autosave = idleConf.GetOption('main', 'General', |
| 183 'autosave', type='bool') | |
| 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 | 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 | 190 self.editwin.io.save(None) |
| 191 filename = self.editwin.io.filename | |
| 192 else: | |
| 193 filename = None | |
| 13975 | 194 return filename |
| 195 | |
| 29266 | 196 def ask_save_dialog(self): |
| 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 | 203 |
| 13975 | 204 def errorbox(self, title, message): |
| 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 | 207 self.editwin.text.focus_set() |
