annotate Lib/idlelib/PyShell.py @ 77267:86f62adb09cf

Issue #14962: merge
author Ned Deily <nad@acm.org>
date Thu, 31 May 2012 09:58:08 -0700
parents 21862628a013 9d0c3a835bfe
children 4915cd0cb7af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 55642
diff changeset
1 #! /usr/bin/env python3
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
72173
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
3 import getopt
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4 import os
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
5 import os.path
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6 import re
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
7 import socket
72173
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
8 import subprocess
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
9 import sys
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
10 import threading
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
11 import time
72173
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
12 import tokenize
25322
7de88cf0783e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25310
diff changeset
13 import traceback
7de88cf0783e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25310
diff changeset
14 import types
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16 import linecache
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17 from code import InteractiveInterpreter
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18
31013
270d59e346e6 Keybindings with the Shift modifier now work correctly. So do bindings
Kurt B. Kaiser <kbk@shore.net>
parents: 30142
diff changeset
19 try:
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46978
diff changeset
20 from tkinter import *
31013
270d59e346e6 Keybindings with the Shift modifier now work correctly. So do bindings
Kurt B. Kaiser <kbk@shore.net>
parents: 30142
diff changeset
21 except ImportError:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
22 print("** IDLE can't import Tkinter. " \
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
23 "Your Python may not be configured for Tk. **", file=sys.__stderr__)
31013
270d59e346e6 Keybindings with the Shift modifier now work correctly. So do bindings
Kurt B. Kaiser <kbk@shore.net>
parents: 30142
diff changeset
24 sys.exit(1)
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46978
diff changeset
25 import tkinter.messagebox as tkMessageBox
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
27 from idlelib.EditorWindow import EditorWindow, fixwordbreaks
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
28 from idlelib.FileList import FileList
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
29 from idlelib.ColorDelegator import ColorDelegator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
30 from idlelib.UndoDelegator import UndoDelegator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
31 from idlelib.OutputWindow import OutputWindow
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
32 from idlelib.configHandler import idleConf
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
33 from idlelib import idlever
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
34 from idlelib import rpc
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
35 from idlelib import Debugger
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
36 from idlelib import RemoteDebugger
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
37 from idlelib import macosxSupport
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
38
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
39 HOST = '127.0.0.1' # python execution server on localhost loopback
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
40 PORT = 0 # someday pass in host, port for remote debug capability
25346
6dec74f44242 Fix bug I created during merge from Python-idle.
Kurt B. Kaiser <kbk@shore.net>
parents: 25322
diff changeset
41
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
42 # Override warnings module to write to warning_stream. Initialize to send IDLE
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
43 # internal warnings to the console. ScriptBinding.check_syntax() will
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
44 # temporarily redirect the stream to the shell window to display warnings when
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
45 # checking user's code.
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
46 global warning_stream
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
47 warning_stream = sys.__stderr__
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
48 try:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
49 import warnings
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
50 except ImportError:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
51 pass
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
52 else:
49553
3ff7bb830519 Merged revisions 66887,66891,66902-66903,66905-66906,66911-66913,66922,66927-66928,66936,66939-66940,66962,66964,66973 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47130
diff changeset
53 def idle_showwarning(message, category, filename, lineno,
3ff7bb830519 Merged revisions 66887,66891,66902-66903,66905-66906,66911-66913,66922,66927-66928,66936,66939-66940,66962,66964,66973 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47130
diff changeset
54 file=None, line=None):
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
55 if file is None:
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
56 file = warning_stream
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
57 try:
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
58 file.write(warnings.formatwarning(message, category, filename,
71171
e9c406a53972 Fix closes issue12438 - idlelib.PyShell's showformatwarning method was passing an incorrect arg.
Senthil Kumaran <senthil@uthcode.com>
parents: 68257
diff changeset
59 lineno, line=line))
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
60 except IOError:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
61 pass ## file (probably __stderr__) is invalid, warning dropped.
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
62 warnings.showwarning = idle_showwarning
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
63 def idle_formatwarning(message, category, filename, lineno, line=None):
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
64 """Format warnings the IDLE way"""
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
65 s = "\nWarning (from warnings module):\n"
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
66 s += ' File \"%s\", line %s\n' % (filename, lineno)
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
67 if line is None:
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
68 line = linecache.getline(filename, lineno)
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
69 line = line.strip()
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
70 if line:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
71 s += " %s\n" % line
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
72 s += "%s: %s\n>>> " % (category.__name__, message)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
73 return s
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
74 warnings.formatwarning = idle_formatwarning
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
75
33989
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
76 def extended_linecache_checkcache(filename=None,
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
77 orig_checkcache=linecache.checkcache):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
78 """Extend linecache.checkcache to preserve the <pyshell#...> entries
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
79
33989
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
80 Rather than repeating the linecache code, patch it to save the
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
81 <pyshell#...> entries, call the original linecache.checkcache()
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
82 (skipping them), and then restore the saved entries.
33989
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
83
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
84 orig_checkcache is bound at definition time to the original
4f2bbd471a21 The change in the linecache.checkcache() signature at rev 1.13 caused IDLE to exit
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
85 method, allowing it to be patched.
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
86 """
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 cache = linecache.cache
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 save = {}
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
89 for key in list(cache):
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
90 if key[:1] + key[-1:] == '<>':
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
91 save[key] = cache.pop(key)
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 52849
diff changeset
92 orig_checkcache(filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 cache.update(save)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
94
26463
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
95 # Patch linecache.checkcache():
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
96 linecache.checkcache = extended_linecache_checkcache
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
97
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
98
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
99 class PyShellEditorWindow(EditorWindow):
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32512
diff changeset
100 "Regular text edit window in IDLE, supports breakpoints"
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
101
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
102 def __init__(self, *args):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
103 self.breakpoints = []
29794
94e5d1b8f696 SF patch #768187: replace apply(f, args, kwds) with f(*args, **kwds)
Raymond Hettinger <python@rcn.com>
parents: 29788
diff changeset
104 EditorWindow.__init__(self, *args)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
105 self.text.bind("<<set-breakpoint-here>>", self.set_breakpoint_here)
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
106 self.text.bind("<<clear-breakpoint-here>>", self.clear_breakpoint_here)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
107 self.text.bind("<<open-python-shell>>", self.flist.open_shell)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
108
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
109 self.breakpointPath = os.path.join(idleConf.GetUserCfgDir(),
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
110 'breakpoints.lst')
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
111 # whenever a file is changed, restore breakpoints
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
112 if self.io.filename: self.restore_file_breaks()
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
113 def filename_changed_hook(old_hook=self.io.filename_change_hook,
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
114 self=self):
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
115 self.restore_file_breaks()
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
116 old_hook()
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
117 self.io.set_filename_change_hook(filename_changed_hook)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
118
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
119 rmenu_specs = [("Set Breakpoint", "<<set-breakpoint-here>>"),
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
120 ("Clear Breakpoint", "<<clear-breakpoint-here>>")]
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
122 def set_breakpoint(self, lineno):
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
123 text = self.text
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
124 filename = self.io.filename
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
125 text.tag_add("BREAK", "%d.0" % lineno, "%d.0" % (lineno+1))
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
126 try:
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
127 i = self.breakpoints.index(lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
128 except ValueError: # only add if missing, i.e. do once
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
129 self.breakpoints.append(lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
130 try: # update the subprocess debugger
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
131 debug = self.flist.pyshell.interp.debugger
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
132 debug.set_breakpoint_here(filename, lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
133 except: # but debugger may not be active right now....
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
134 pass
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
135
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
136 def set_breakpoint_here(self, event=None):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
137 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
138 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
139 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
140 text.bell()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
141 return
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
142 lineno = int(float(text.index("insert")))
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
143 self.set_breakpoint(lineno)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
144
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
145 def clear_breakpoint_here(self, event=None):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
146 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
147 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
148 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
149 text.bell()
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
150 return
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
151 lineno = int(float(text.index("insert")))
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
152 try:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
153 self.breakpoints.remove(lineno)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
154 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
155 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
156 text.tag_remove("BREAK", "insert linestart",\
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
157 "insert lineend +1char")
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
158 try:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
159 debug = self.flist.pyshell.interp.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
160 debug.clear_breakpoint_here(filename, lineno)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
161 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
162 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
163
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
164 def clear_file_breaks(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
165 if self.breakpoints:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
166 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
167 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
168 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
169 text.bell()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
170 return
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
171 self.breakpoints = []
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
172 text.tag_remove("BREAK", "1.0", END)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
173 try:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
174 debug = self.flist.pyshell.interp.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
175 debug.clear_file_breaks(filename)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
176 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
177 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
178
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
179 def store_file_breaks(self):
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
180 "Save breakpoints when file is saved"
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
181 # XXX 13 Dec 2002 KBK Currently the file must be saved before it can
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
182 # be run. The breaks are saved at that time. If we introduce
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
183 # a temporary file save feature the save breaks functionality
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
184 # needs to be re-verified, since the breaks at the time the
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
185 # temp file is created may differ from the breaks at the last
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
186 # permanent save of the file. Currently, a break introduced
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
187 # after a save will be effective, but not persistent.
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
188 # This is necessary to keep the saved breaks synched with the
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
189 # saved file.
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
190 #
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
191 # Breakpoints are set as tagged ranges in the text. Certain
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
192 # kinds of edits cause these ranges to be deleted: Inserting
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
193 # or deleting a line just before a breakpoint, and certain
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
194 # deletions prior to a breakpoint. These issues need to be
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
195 # investigated and understood. It's not clear if they are
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
196 # Tk issues or IDLE issues, or whether they can actually
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
197 # be fixed. Since a modified file has to be saved before it is
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
198 # run, and since self.breakpoints (from which the subprocess
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
199 # debugger is loaded) is updated during the save, the visible
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
200 # breaks stay synched with the subprocess even if one of these
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
201 # unexpected breakpoint deletions occurs.
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
202 breaks = self.breakpoints
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
203 filename = self.io.filename
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
204 try:
72172
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71746
diff changeset
205 with open(self.breakpointPath, "r") as fp:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71746
diff changeset
206 lines = fp.readlines()
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
207 except IOError:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
208 lines = []
73968
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
209 try:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
210 with open(self.breakpointPath, "w") as new_file:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
211 for line in lines:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
212 if not line.startswith(filename + '='):
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
213 new_file.write(line)
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
214 self.update_breakpoints()
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
215 breaks = self.breakpoints
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
216 if breaks:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
217 new_file.write(filename + '=' + str(breaks) + '\n')
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
218 except IOError as err:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
219 if not getattr(self.root, "breakpoint_error_displayed", False):
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
220 self.root.breakpoint_error_displayed = True
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
221 tkMessageBox.showerror(title='IDLE Error',
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
222 message='Unable to update breakpoint list:\n%s'
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
223 % str(err),
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
224 parent=self.text)
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
225
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
226 def restore_file_breaks(self):
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
227 self.text.update() # this enables setting "BREAK" tags to be visible
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
228 filename = self.io.filename
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
229 if filename is None:
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
230 return
26028
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
231 if os.path.isfile(self.breakpointPath):
72172
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71746
diff changeset
232 with open(self.breakpointPath, "r") as fp:
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71746
diff changeset
233 lines = fp.readlines()
26028
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
234 for line in lines:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
235 if line.startswith(filename + '='):
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
236 breakpoint_linenumbers = eval(line[len(filename)+1:])
26028
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
237 for breakpoint_linenumber in breakpoint_linenumbers:
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
238 self.set_breakpoint(breakpoint_linenumber)
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
239
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
240 def update_breakpoints(self):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
241 "Retrieves all the breakpoints in the current window"
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
242 text = self.text
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
243 ranges = text.tag_ranges("BREAK")
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
244 linenumber_list = self.ranges_to_linenumbers(ranges)
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
245 self.breakpoints = linenumber_list
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
246
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
247 def ranges_to_linenumbers(self, ranges):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
248 lines = []
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
249 for index in range(0, len(ranges), 2):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
250 lineno = int(float(ranges[index]))
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
251 end = int(float(ranges[index+1]))
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
252 while lineno < end:
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
253 lines.append(lineno)
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
254 lineno += 1
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
255 return lines
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
256
26771
fc7fdec3fb86 1. RPC stack levels were not pruned from traceback unless IDLE was started
Kurt B. Kaiser <kbk@shore.net>
parents: 26758
diff changeset
257 # XXX 13 Dec 2002 KBK Not used currently
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
258 # def saved_change_hook(self):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
259 # "Extend base method - clear breaks if module is modified"
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
260 # if not self.get_saved():
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
261 # self.clear_file_breaks()
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
262 # EditorWindow.saved_change_hook(self)
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
263
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
264 def _close(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
265 "Extend base method - clear breaks when module is closed"
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
266 self.clear_file_breaks()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
267 EditorWindow._close(self)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
268
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
269
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
270 class PyShellFileList(FileList):
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32512
diff changeset
271 "Extend base class: IDLE supports a shell and breakpoints"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
272
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32512
diff changeset
273 # override FileList's class variable, instances return PyShellEditorWindow
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32512
diff changeset
274 # instead of EditorWindow when new edit windows are created.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
275 EditorWindow = PyShellEditorWindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
276
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
277 pyshell = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
278
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
279 def open_shell(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
280 if self.pyshell:
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32512
diff changeset
281 self.pyshell.top.wakeup()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
282 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
283 self.pyshell = PyShell(self)
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
284 if self.pyshell:
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
285 if not self.pyshell.begin():
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
286 return None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
287 return self.pyshell
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
288
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
289
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
290 class ModifiedColorDelegator(ColorDelegator):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
291 "Extend base class: colorizer for the shell window itself"
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
292
22111
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
293 def __init__(self):
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
294 ColorDelegator.__init__(self)
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
295 self.LoadTagDefs()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
296
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
297 def recolorize_main(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
298 self.tag_remove("TODO", "1.0", "iomark")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
299 self.tag_add("SYNC", "1.0", "iomark")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
300 ColorDelegator.recolorize_main(self)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
301
22111
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
302 def LoadTagDefs(self):
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
303 ColorDelegator.LoadTagDefs(self)
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
304 theme = idleConf.GetOption('main','Theme','name')
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
305 self.tagdefs.update({
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
306 "stdin": {'background':None,'foreground':None},
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
307 "stdout": idleConf.GetHighlight(theme, "stdout"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
308 "stderr": idleConf.GetHighlight(theme, "stderr"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
309 "console": idleConf.GetHighlight(theme, "console"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
310 })
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
311
77266
9d0c3a835bfe Issue #14962: Update text coloring in IDLE shell window after changing
Ned Deily <nad@acm.org>
parents: 77173
diff changeset
312 def removecolors(self):
9d0c3a835bfe Issue #14962: Update text coloring in IDLE shell window after changing
Ned Deily <nad@acm.org>
parents: 77173
diff changeset
313 # Don't remove shell color tags before "iomark"
9d0c3a835bfe Issue #14962: Update text coloring in IDLE shell window after changing
Ned Deily <nad@acm.org>
parents: 77173
diff changeset
314 for tag in self.tagdefs:
9d0c3a835bfe Issue #14962: Update text coloring in IDLE shell window after changing
Ned Deily <nad@acm.org>
parents: 77173
diff changeset
315 self.tag_remove(tag, "iomark", "end")
9d0c3a835bfe Issue #14962: Update text coloring in IDLE shell window after changing
Ned Deily <nad@acm.org>
parents: 77173
diff changeset
316
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
317 class ModifiedUndoDelegator(UndoDelegator):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
318 "Extend base class: forbid insert/delete before the I/O mark"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
319
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
320 def insert(self, index, chars, tags=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
321 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
322 if self.delegate.compare(index, "<", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
323 self.delegate.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
324 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
325 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
326 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
327 UndoDelegator.insert(self, index, chars, tags)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
328
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
329 def delete(self, index1, index2=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
330 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
331 if self.delegate.compare(index1, "<", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
332 self.delegate.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
333 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
334 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
335 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
336 UndoDelegator.delete(self, index1, index2)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
337
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
338
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
339 class MyRPCClient(rpc.RPCClient):
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
340
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
341 def handle_EOF(self):
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
342 "Override the base class - just re-raise EOFError"
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
343 raise EOFError
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
344
29271
8f73df099967 Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 29256
diff changeset
345
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
346 class ModifiedInterpreter(InteractiveInterpreter):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
347
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
348 def __init__(self, tkconsole):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
349 self.tkconsole = tkconsole
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
350 locals = sys.modules['__main__'].__dict__
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
351 InteractiveInterpreter.__init__(self, locals=locals)
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
352 self.save_warnings_filters = None
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
353 self.restarting = False
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
354 self.subprocess_arglist = None
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
355 self.port = PORT
73233
9fbf79d6be56 Issue 13296: Fix IDLE to clear compile __future__ flags on shell restart.
Ned Deily <nad@acm.org>
parents: 72382
diff changeset
356 self.original_compiler_flags = self.compile.compiler.flags
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
357
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
358 rpcclt = None
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
359 rpcsubproc = None
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
360
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
361 def spawn_subprocess(self):
60063
e63d4678fca7 Note: only the relevant parts of r79474 are merged.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 52849
diff changeset
362 if self.subprocess_arglist is None:
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
363 self.subprocess_arglist = self.build_subprocess_arglist()
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
364 self.rpcsubproc = subprocess.Popen(self.subprocess_arglist)
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
365
26730
9b4c014b3a21 Update way a subprocess is launched for Mac OS X.
Tony Lownds <tony@lownds.com>
parents: 26693
diff changeset
366 def build_subprocess_arglist(self):
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
367 assert (self.port!=0), (
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
368 "Socket should have been assigned a port number.")
29101
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
369 w = ['-W' + s for s in sys.warnoptions]
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
370 # Maybe IDLE is installed and is being accessed via sys.path,
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
371 # or maybe it's not installed and the idle.py script is being
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
372 # run from the IDLE source directory.
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
373 del_exitf = idleConf.GetOption('main', 'General', 'delete-exitfunc',
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
374 default=False, type='bool')
29101
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
375 if __name__ == 'idlelib.PyShell':
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
376 command = "__import__('idlelib.run').run.main(%r)" % (del_exitf,)
25480
9d50bc831bca Finding a suitable interpreter to spawn needed tweaking on the Mac
Tony Lownds <tony@lownds.com>
parents: 25346
diff changeset
377 else:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
378 command = "__import__('run').main(%r)" % (del_exitf,)
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
379 return [sys.executable] + w + ["-c", command, str(self.port)]
25480
9d50bc831bca Finding a suitable interpreter to spawn needed tweaking on the Mac
Tony Lownds <tony@lownds.com>
parents: 25346
diff changeset
380
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
381 def start_subprocess(self):
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
382 addr = (HOST, self.port)
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
383 # GUI makes several attempts to acquire socket, listens for connection
29120
addd437be749 1. Make the startup more robust by not spawning the subprocess if IDLE
Kurt B. Kaiser <kbk@shore.net>
parents: 29119
diff changeset
384 for i in range(3):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
385 time.sleep(i)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
386 try:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
387 self.rpcclt = MyRPCClient(addr)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
388 break
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
389 except socket.error as err:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
390 pass
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
391 else:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
392 self.display_port_binding_error()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
393 return None
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
394 # if PORT was 0, system will assign an 'ephemeral' port. Find it out:
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
395 self.port = self.rpcclt.listening_sock.getsockname()[1]
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
396 # if PORT was not 0, probably working with a remote execution server
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
397 if PORT != 0:
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
398 # To allow reconnection within the 2MSL wait (cf. Stevens TCP
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
399 # V1, 18.6), set SO_REUSEADDR. Note that this can be problematic
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
400 # on Windows since the implementation allows two active sockets on
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
401 # the same address!
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
402 self.rpcclt.listening_sock.setsockopt(socket.SOL_SOCKET,
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
403 socket.SO_REUSEADDR, 1)
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
404 self.spawn_subprocess()
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
405 #time.sleep(20) # test to simulate GUI not accepting connection
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
406 # Accept the connection from the Python execution server
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
407 self.rpcclt.listening_sock.settimeout(10)
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
408 try:
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
409 self.rpcclt.accept()
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
410 except socket.timeout as err:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
411 self.display_no_subprocess_error()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
412 return None
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
413 self.rpcclt.register("stdin", self.tkconsole)
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
414 self.rpcclt.register("stdout", self.tkconsole.stdout)
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
415 self.rpcclt.register("stderr", self.tkconsole.stderr)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
416 self.rpcclt.register("flist", self.tkconsole.flist)
27545
f9822b18cf91 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27379
diff changeset
417 self.rpcclt.register("linecache", linecache)
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
418 self.rpcclt.register("interp", self)
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
419 self.transfer_path(with_cwd=True)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
420 self.poll_subprocess()
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
421 return self.rpcclt
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
422
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
423 def restart_subprocess(self, with_cwd=False):
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
424 if self.restarting:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
425 return self.rpcclt
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
426 self.restarting = True
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
427 # close only the subprocess debugger
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
428 debug = self.getdebugger()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
429 if debug:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
430 try:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29059
diff changeset
431 # Only close subprocess debugger, don't unregister gui_adap!
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
432 RemoteDebugger.close_subprocess_debugger(self.rpcclt)
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
433 except:
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
434 pass
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
435 # Kill subprocess, spawn a new one, accept connection.
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
436 self.rpcclt.close()
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
437 self.terminate_subprocess()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
438 console = self.tkconsole
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
439 was_executing = console.executing
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
440 console.executing = False
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
441 self.spawn_subprocess()
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
442 try:
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
443 self.rpcclt.accept()
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
444 except socket.timeout as err:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
445 self.display_no_subprocess_error()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
446 return None
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
447 self.transfer_path(with_cwd=with_cwd)
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
448 # annotate restart in shell window and mark it
27336
cbca0bcf1c31 M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
449 console.text.delete("iomark", "end-1c")
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
450 if was_executing:
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
451 console.write('\n')
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
452 console.showprompt()
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
453 halfbar = ((int(console.width) - 16) // 2) * '='
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
454 console.write(halfbar + ' RESTART ' + halfbar)
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
455 console.text.mark_set("restart", "end-1c")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
456 console.text.mark_gravity("restart", "left")
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
457 console.showprompt()
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
458 # restart subprocess debugger
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
459 if debug:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29059
diff changeset
460 # Restarted debugger connects to current instance of debug GUI
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
461 gui = RemoteDebugger.restart_subprocess_debugger(self.rpcclt)
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
462 # reload remote debugger breakpoints for all PyShellEditWindows
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
463 debug.load_breakpoints()
73233
9fbf79d6be56 Issue 13296: Fix IDLE to clear compile __future__ flags on shell restart.
Ned Deily <nad@acm.org>
parents: 72382
diff changeset
464 self.compile.compiler.flags = self.original_compiler_flags
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
465 self.restarting = False
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
466 return self.rpcclt
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
467
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
468 def __request_interrupt(self):
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
469 self.rpcclt.remotecall("exec", "interrupt_the_server", (), {})
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
470
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
471 def interrupt_subprocess(self):
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
472 threading.Thread(target=self.__request_interrupt).start()
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
473
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
474 def kill_subprocess(self):
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
475 try:
73399
ce483d696c06 Issue #13300: Fix IDLE Restart Shell command failure introduced by
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
476 self.rpcclt.listening_sock.close()
ce483d696c06 Issue #13300: Fix IDLE Restart Shell command failure introduced by
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
477 except AttributeError: # no socket
ce483d696c06 Issue #13300: Fix IDLE Restart Shell command failure introduced by
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
478 pass
ce483d696c06 Issue #13300: Fix IDLE Restart Shell command failure introduced by
Ned Deily <nad@acm.org>
parents: 73233
diff changeset
479 try:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
480 self.rpcclt.close()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
481 except AttributeError: # no socket
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
482 pass
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
483 self.terminate_subprocess()
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
484 self.tkconsole.executing = False
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
485 self.rpcclt = None
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
486
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
487 def terminate_subprocess(self):
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
488 "Make sure subprocess is terminated"
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
489 try:
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
490 self.rpcsubproc.kill()
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
491 except OSError:
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
492 # process already terminated
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
493 return
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
494 else:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
495 try:
71746
cc86f4ca5020 Issue #12540: Prevent zombie IDLE processes on Windows due to changes
Ned Deily <nad@acm.org>
parents: 71171
diff changeset
496 self.rpcsubproc.wait()
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
497 except OSError:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
498 return
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28266
diff changeset
499
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
500 def transfer_path(self, with_cwd=False):
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
501 if with_cwd: # Issue 13506
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
502 path = [''] # include Current Working Directory
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
503 path.extend(sys.path)
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
504 else:
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
505 path = sys.path
74696
89b699e68fa2 whitespace
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74693
diff changeset
506
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
507 self.runcommand("""if 1:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
508 import sys as _sys
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
509 _sys.path = %r
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
510 del _sys
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
511 \n""" % (path,))
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
512
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
513 active_seq = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
514
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
515 def poll_subprocess(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
516 clt = self.rpcclt
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
517 if clt is None:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
518 return
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
519 try:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
520 response = clt.pollresponse(self.active_seq, wait=0.05)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
521 except (EOFError, IOError, KeyboardInterrupt):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
522 # lost connection or subprocess terminated itself, restart
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
523 # [the KBI is from rpc.SocketIO.handle_EOF()]
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
524 if self.tkconsole.closing:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
525 return
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
526 response = None
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
527 self.restart_subprocess()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
528 if response:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
529 self.tkconsole.resetoutput()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
530 self.active_seq = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
531 how, what = response
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
532 console = self.tkconsole.console
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
533 if how == "OK":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
534 if what is not None:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
535 print(repr(what), file=console)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
536 elif how == "EXCEPTION":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
537 if self.tkconsole.getvar("<<toggle-jit-stack-viewer>>"):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
538 self.remote_stack_viewer()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
539 elif how == "ERROR":
26557
4be62dc9a3e7 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26471
diff changeset
540 errmsg = "PyShell.ModifiedInterpreter: Subprocess ERROR:\n"
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
541 print(errmsg, what, file=sys.__stderr__)
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
542 print(errmsg, what, file=console)
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
543 # we received a response to the currently active seq number:
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
544 try:
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
545 self.tkconsole.endexecuting()
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
546 except AttributeError: # shell may have closed
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
547 pass
29171
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
548 # Reschedule myself
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
549 if not self.tkconsole.closing:
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
550 self.tkconsole.text.after(self.tkconsole.pollinterval,
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
551 self.poll_subprocess)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
552
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
553 debugger = None
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
554
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
555 def setdebugger(self, debugger):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
556 self.debugger = debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
557
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
558 def getdebugger(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
559 return self.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
560
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
561 def open_remote_stack_viewer(self):
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
562 """Initiate the remote stack viewer from a separate thread.
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
563
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
564 This method is called from the subprocess, and by returning from this
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
565 method we allow the subprocess to unblock. After a bit the shell
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
566 requests the subprocess to open the remote stack viewer which returns a
63176
227dee278638 Merged revisions 83103 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 60063
diff changeset
567 static object looking at the last exception. It is queried through
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
568 the RPC mechanism.
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
569
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
570 """
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
571 self.tkconsole.text.after(300, self.remote_stack_viewer)
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
572 return
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
573
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
574 def remote_stack_viewer(self):
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
575 from idlelib import RemoteObjectBrowser
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
576 oid = self.rpcclt.remotequeue("exec", "stackviewer", ("flist",), {})
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
577 if oid is None:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
578 self.tkconsole.root.bell()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
579 return
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
580 item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid)
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
581 from idlelib.TreeWidget import ScrolledCanvas, TreeNode
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
582 top = Toplevel(self.tkconsole.root)
31625
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
583 theme = idleConf.GetOption('main','Theme','name')
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
584 background = idleConf.GetHighlight(theme, 'normal')['background']
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
585 sc = ScrolledCanvas(top, bg=background, highlightthickness=0)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
586 sc.frame.pack(expand=1, fill="both")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
587 node = TreeNode(sc.canvas, None, item)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
588 node.expand()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
589 # XXX Should GC the remote tree when closing the window
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
590
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
591 gid = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
592
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
593 def execsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
594 "Like runsource() but assumes complete exec source"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
595 filename = self.stuffsource(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
596 self.execfile(filename, source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
597
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
598 def execfile(self, filename, source=None):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
599 "Execute an existing file"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
600 if source is None:
72173
fe7777f1ed14 Issue #12636: IDLE reads the coding cookie when executing a Python script.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72172
diff changeset
601 with tokenize.open(filename) as fp:
72172
d1d2dfbca812 IDLE: fix some RessourceWarning, reuse tokenize.open()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71746
diff changeset
602 source = fp.read()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
603 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
604 code = compile(source, filename, "exec")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
605 except (OverflowError, SyntaxError):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
606 self.tkconsole.resetoutput()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
607 tkerr = self.tkconsole.stderr
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
608 print('*** Error in script or command!\n', file=tkerr)
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
609 print('Traceback (most recent call last):', file=tkerr)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
610 InteractiveInterpreter.showsyntaxerror(self, filename)
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
611 self.tkconsole.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
612 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
613 self.runcode(code)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
614
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
615 def runsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
616 "Extend base class method: Stuff the source in the line cache first"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
617 filename = self.stuffsource(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
618 self.more = 0
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
619 self.save_warnings_filters = warnings.filters[:]
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
620 warnings.filterwarnings(action="error", category=SyntaxWarning)
42571
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
621 # at the moment, InteractiveInterpreter expects str
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
622 assert isinstance(source, str)
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
623 #if isinstance(source, str):
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
624 # from idlelib import IOBinding
42571
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
625 # try:
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
626 # source = source.encode(IOBinding.encoding)
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
627 # except UnicodeError:
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
628 # self.tkconsole.resetoutput()
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
629 # self.write("Unsupported characters in input\n")
7a45e8b78d63 Expect that source strings are Unicode.
Martin v. Löwis <martin@v.loewis.de>
parents: 42555
diff changeset
630 # return
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
631 try:
34948
e4e0cff16bc7 Improve subprocess link error notification
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
632 # InteractiveInterpreter.runsource() calls its runcode() method,
e4e0cff16bc7 Improve subprocess link error notification
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
633 # which is overridden (see below)
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
634 return InteractiveInterpreter.runsource(self, source, filename)
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
635 finally:
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
636 if self.save_warnings_filters is not None:
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
637 warnings.filters[:] = self.save_warnings_filters
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
638 self.save_warnings_filters = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
639
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
640 def stuffsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
641 "Stuff source in the filename cache"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
642 filename = "<pyshell#%d>" % self.gid
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
643 self.gid = self.gid + 1
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
644 lines = source.split("\n")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
645 linecache.cache[filename] = len(source)+1, 0, lines, filename
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
646 return filename
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
647
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
648 def prepend_syspath(self, filename):
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
649 "Prepend sys.path with file's directory if not already included"
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
650 self.runcommand("""if 1:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
651 _filename = %r
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
652 import sys as _sys
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
653 from os.path import dirname as _dirname
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
654 _dir = _dirname(_filename)
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
655 if not _dir in _sys.path:
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
656 _sys.path.insert(0, _dir)
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
657 del _filename, _sys, _dirname, _dir
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
658 \n""" % (filename,))
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
659
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
660 def showsyntaxerror(self, filename=None):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
661 """Override Interactive Interpreter method: Use Colorizing
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
662
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
663 Color the offending position instead of printing it and pointing at it
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
664 with a caret.
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
665
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
666 """
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
667 tkconsole = self.tkconsole
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
668 text = tkconsole.text
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
669 text.tag_remove("ERROR", "1.0", "end")
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
670 type, value, tb = sys.exc_info()
72382
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72173
diff changeset
671 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: 72173
diff changeset
672 lineno = getattr(value, 'lineno', '') or 1
e74860883a9c Issue #9871: Prevent IDLE 3 crash when given byte stings
Ned Deily <nad@acm.org>
parents: 72173
diff changeset
673 offset = getattr(value, 'offset', '') or 0
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
674 if offset == 0:
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
675 lineno += 1 #mark end of offending line
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
676 if lineno == 1:
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
677 pos = "iomark + %d chars" % (offset-1)
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
678 else:
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
679 pos = "iomark linestart + %d lines + %d chars" % \
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
680 (lineno-1, offset-1)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
681 tkconsole.colorize_syntax_error(text, pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
682 tkconsole.resetoutput()
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
683 self.write("SyntaxError: %s\n" % msg)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
684 tkconsole.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
685
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
686 def showtraceback(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
687 "Extend base class method to reset output properly"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
688 self.tkconsole.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
689 self.checklinecache()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
690 InteractiveInterpreter.showtraceback(self)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
691 if self.tkconsole.getvar("<<toggle-jit-stack-viewer>>"):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
692 self.tkconsole.open_stack_viewer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
693
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
694 def checklinecache(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
695 c = linecache.cache
42324
4bbbe0c55fa2 Merged revisions 56443-56466 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42309
diff changeset
696 for key in list(c.keys()):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
697 if key[:1] + key[-1:] != "<>":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
698 del c[key]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
699
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
700 def runcommand(self, code):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
701 "Run the code without invoking the debugger"
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
702 # The code better not raise an exception!
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
703 if self.tkconsole.executing:
26471
99c78cf95610 Add missing self for method call
Neal Norwitz <nnorwitz@gmail.com>
parents: 26468
diff changeset
704 self.display_executing_dialog()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
705 return 0
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
706 if self.rpcclt:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
707 self.rpcclt.remotequeue("exec", "runcode", (code,), {})
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
708 else:
39782
c94f37054f19 Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents: 39610
diff changeset
709 exec(code, self.locals)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
710 return 1
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
711
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
712 def runcode(self, code):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
713 "Override base class method"
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
714 if self.tkconsole.executing:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
715 self.interp.restart_subprocess()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
716 self.checklinecache()
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
717 if self.save_warnings_filters is not None:
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
718 warnings.filters[:] = self.save_warnings_filters
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
719 self.save_warnings_filters = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
720 debugger = self.debugger
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
721 try:
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
722 self.tkconsole.beginexecuting()
40893
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
723 if not debugger and self.rpcclt is not None:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
724 self.active_seq = self.rpcclt.asyncqueue("exec", "runcode",
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
725 (code,), {})
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
726 elif debugger:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
727 debugger.run(code, self.locals)
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
728 else:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
729 exec(code, self.locals)
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
730 except SystemExit:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
731 if not self.tkconsole.closing:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
732 if tkMessageBox.askyesno(
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
733 "Exit?",
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
734 "Do you want to exit altogether?",
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
735 default="yes",
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
736 master=self.tkconsole.text):
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
737 raise
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
738 else:
40916
f5790f96acf3 Fix merge bug (lost line causing syntax error).
Guido van Rossum <guido@python.org>
parents: 40893
diff changeset
739 self.showtraceback()
40893
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
740 else:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
741 raise
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
742 except:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
743 if use_subprocess:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
744 print("IDLE internal error in runcode()",
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
745 file=self.tkconsole.stderr)
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
746 self.showtraceback()
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
747 self.tkconsole.endexecuting()
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
748 else:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
749 if self.tkconsole.canceled:
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
750 self.tkconsole.canceled = False
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
751 print("KeyboardInterrupt", file=self.tkconsole.stderr)
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
752 else:
40893
32c4897b5d46 Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40799
diff changeset
753 self.showtraceback()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
754 finally:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
755 if not use_subprocess:
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
756 try:
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
757 self.tkconsole.endexecuting()
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
758 except AttributeError: # shell may have closed
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
759 pass
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
760
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
761 def write(self, s):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
762 "Override base class method"
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
763 self.tkconsole.stderr.write(s)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
764
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
765 def display_port_binding_error(self):
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
766 tkMessageBox.showerror(
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
767 "Port Binding Error",
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
768 "IDLE can't bind to a TCP/IP port, which is necessary to "
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
769 "communicate with its Python execution server. This might be "
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
770 "because no networking is installed on this computer. "
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
771 "Run IDLE with the -n command line switch to start without a "
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
772 "subprocess and refer to Help/IDLE Help 'Running without a "
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
773 "subprocess' for further details.",
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
774 master=self.tkconsole.text)
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
775
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
776 def display_no_subprocess_error(self):
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
777 tkMessageBox.showerror(
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
778 "Subprocess Startup Error",
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
779 "IDLE's subprocess didn't make connection. Either IDLE can't "
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
780 "start a subprocess or personal firewall software is blocking "
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
781 "the connection.",
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
782 master=self.tkconsole.text)
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
783
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
784 def display_executing_dialog(self):
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
785 tkMessageBox.showerror(
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
786 "Already executing",
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
787 "The Python Shell window is already executing a command; "
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
788 "please wait until it is finished.",
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
789 master=self.tkconsole.text)
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
790
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
791
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
792 class PyShell(OutputWindow):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
793
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
794 shell_title = "Python Shell"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
795
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
796 # Override classes
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
797 ColorDelegator = ModifiedColorDelegator
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
798 UndoDelegator = ModifiedUndoDelegator
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
799
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
800 # Override menus
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
801 menu_specs = [
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
802 ("file", "_File"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
803 ("edit", "_Edit"),
27336
cbca0bcf1c31 M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
804 ("debug", "_Debug"),
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
805 ("options", "_Options"),
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
806 ("windows", "_Windows"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
807 ("help", "_Help"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
808 ]
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
809
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
810 if macosxSupport.runningAsOSXApp():
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
811 del menu_specs[-3]
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
812 menu_specs[-2] = ("windows", "_Window")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
813
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
814
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
815 # New classes
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
816 from idlelib.IdleHistory import History
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
817
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
818 def __init__(self, flist=None):
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
819 if use_subprocess:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
820 ms = self.menu_specs
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
821 if ms[2][0] != "shell":
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
822 ms.insert(2, ("shell", "She_ll"))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
823 self.interp = ModifiedInterpreter(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
824 if flist is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
825 root = Tk()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
826 fixwordbreaks(root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
827 root.withdraw()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
828 flist = PyShellFileList(root)
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
829 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
830 OutputWindow.__init__(self, flist, None, None)
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
831 #
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34240
diff changeset
832 ## self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34240
diff changeset
833 self.usetabs = True
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34240
diff changeset
834 # indentwidth must be 8 when using tabs. See note in EditorWindow:
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34240
diff changeset
835 self.indentwidth = 8
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34240
diff changeset
836 self.context_use_ps1 = True
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
837 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
838 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
839 text.configure(wrap="char")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
840 text.bind("<<newline-and-indent>>", self.enter_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
841 text.bind("<<plain-newline-and-indent>>", self.linefeed_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
842 text.bind("<<interrupt-execution>>", self.cancel_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
843 text.bind("<<end-of-file>>", self.eof_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
844 text.bind("<<open-stack-viewer>>", self.open_stack_viewer)
29059
92ebd3daf507 1. Update debugger to not trace RPC code even when calling Queue and
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
845 text.bind("<<toggle-debugger>>", self.toggle_debugger)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
846 text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)
44282
541052b044f0 Shell was not colorizing due to bug introduced at r57998, Bug 1586.
Kurt B. Kaiser <kbk@shore.net>
parents: 43734
diff changeset
847 self.color = color = self.ColorDelegator()
541052b044f0 Shell was not colorizing due to bug introduced at r57998, Bug 1586.
Kurt B. Kaiser <kbk@shore.net>
parents: 43734
diff changeset
848 self.per.insertfilter(color)
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
849 if use_subprocess:
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
850 text.bind("<<view-restart>>", self.view_restart_mark)
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
851 text.bind("<<restart-shell>>", self.restart_shell)
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
852 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
853 self.save_stdout = sys.stdout
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
854 self.save_stderr = sys.stderr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
855 self.save_stdin = sys.stdin
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
856 from idlelib import IOBinding
29582
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29476
diff changeset
857 self.stdout = PseudoFile(self, "stdout", IOBinding.encoding)
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29476
diff changeset
858 self.stderr = PseudoFile(self, "stderr", IOBinding.encoding)
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29476
diff changeset
859 self.console = PseudoFile(self, "console", IOBinding.encoding)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
860 if not use_subprocess:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
861 sys.stdout = self.stdout
43120
fec2c0299a8c 1. Don't encode input strings to bytes.
Kurt B. Kaiser <kbk@shore.net>
parents: 42881
diff changeset
862 sys.stderr = self.stderr
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
863 sys.stdin = self
44380
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
864 try:
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
865 # page help() text to shell.
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
866 import pydoc # import must be done here to capture i/o rebinding.
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
867 # XXX KBK 27Dec07 use a textView someday, but must work w/o subproc
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
868 pydoc.pager = pydoc.plainpager
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
869 except:
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
870 sys.stderr = sys.__stderr__
08468a263a95 help() was not paging to the shell. Issue1650.
Kurt B. Kaiser <kbk@shore.net>
parents: 44282
diff changeset
871 raise
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
872 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
873 self.history = self.History(self.text)
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
874 #
29171
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
875 self.pollinterval = 50 # millisec
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
876
32272
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
877 def get_standard_extension_names(self):
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
878 return idleConf.GetExtensions(shell_only=True)
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
879
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
880 reading = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
881 executing = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
882 canceled = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
883 endoffile = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
884 closing = False
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
885
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
886 def set_warning_stream(self, stream):
32512
c4ed14fab12a whitespace normalization
Skip Montanaro <skip@pobox.com>
parents: 32484
diff changeset
887 global warning_stream
c4ed14fab12a whitespace normalization
Skip Montanaro <skip@pobox.com>
parents: 32484
diff changeset
888 warning_stream = stream
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
889
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
890 def get_warning_stream(self):
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
891 return warning_stream
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
892
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
893 def toggle_debugger(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
894 if self.executing:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
895 tkMessageBox.showerror("Don't debug now",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
896 "You can only toggle the debugger when idle",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
897 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
898 self.set_debugger_indicator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
899 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
900 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
901 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
902 if db:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
903 self.close_debugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
904 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
905 self.open_debugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
906
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
907 def set_debugger_indicator(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
908 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
909 self.setvar("<<toggle-debugger>>", not not db)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
910
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
911 def toggle_jit_stack_viewer(self, event=None):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
912 pass # All we need is the variable
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
913
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
914 def close_debugger(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
915 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
916 if db:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
917 self.interp.setdebugger(None)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
918 db.close()
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
919 if self.interp.rpcclt:
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
920 RemoteDebugger.close_remote_debugger(self.interp.rpcclt)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
921 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
922 self.console.write("[DEBUG OFF]\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
923 sys.ps1 = ">>> "
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
924 self.showprompt()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
925 self.set_debugger_indicator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
926
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
927 def open_debugger(self):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
928 if self.interp.rpcclt:
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
929 dbg_gui = RemoteDebugger.start_remote_debugger(self.interp.rpcclt,
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
930 self)
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
931 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
932 dbg_gui = Debugger.Debugger(self)
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
933 self.interp.setdebugger(dbg_gui)
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
934 dbg_gui.load_breakpoints()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
935 sys.ps1 = "[DEBUG ON]\n>>> "
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
936 self.showprompt()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
937 self.set_debugger_indicator()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
938
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
939 def beginexecuting(self):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
940 "Helper for ModifiedInterpreter"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
941 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
942 self.executing = 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
943
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
944 def endexecuting(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
945 "Helper for ModifiedInterpreter"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
946 self.executing = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
947 self.canceled = 0
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
948 self.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
949
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
950 def close(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
951 "Extend EditorWindow.close()"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
952 if self.executing:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
953 response = tkMessageBox.askokcancel(
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
954 "Kill?",
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
955 "The program is still running!\n Do you want to kill it?",
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
956 default="ok",
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
957 parent=self.text)
46222
aed698c8647b Merged revisions 62021,62029,62035-62038,62043-62044,62052-62053 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 44380
diff changeset
958 if response is False:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
959 return "cancel"
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
960 if self.reading:
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
961 self.top.quit()
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
962 self.canceled = True
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
963 self.closing = True
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
964 # Wait for poll_subprocess() rescheduling to stop
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
965 self.text.after(2 * self.pollinterval, self.close2)
29171
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
966
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
967 def close2(self):
9cf09f92b198 Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
Kurt B. Kaiser <kbk@shore.net>
parents: 29122
diff changeset
968 return EditorWindow.close(self)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
969
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
970 def _close(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
971 "Extend EditorWindow._close(), shut down debugger and execution server"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
972 self.close_debugger()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
973 if use_subprocess:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
974 self.interp.kill_subprocess()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
975 # Restore std streams
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
976 sys.stdout = self.save_stdout
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
977 sys.stderr = self.save_stderr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
978 sys.stdin = self.save_stdin
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
979 # Break cycles
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
980 self.interp = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
981 self.console = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
982 self.flist.pyshell = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
983 self.history = None
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
984 EditorWindow._close(self)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
985
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
986 def ispythonsource(self, filename):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
987 "Override EditorWindow method: never remove the colorizer"
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
988 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
989
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
990 def short_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
991 return self.shell_title
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
992
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
993 COPYRIGHT = \
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
994 'Type "copyright", "credits" or "license()" for more information.'
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
995
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
996 def begin(self):
42533
6a09423164fe Fix what appears to be a very old bug. Tkinter in struni is more intolerant
Kurt B. Kaiser <kbk@shore.net>
parents: 42531
diff changeset
997 self.text.mark_set("iomark", "insert")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
998 self.resetoutput()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
999 if use_subprocess:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1000 nosub = ''
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1001 client = self.interp.start_subprocess()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1002 if not client:
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1003 self.close()
31414
14dea6f8b0c3 There was an error in the Tk error dialog fix at Rev 1.84 which caused starting
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
1004 return False
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1005 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1006 nosub = "==== No Subprocess ===="
75921
89878808f4ce Issue #14200 — now displayhook for IDLE works in non-subprocess mode as well as subprecess.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 75847
diff changeset
1007 sys.displayhook = rpc.displayhook
89878808f4ce Issue #14200 — now displayhook for IDLE works in non-subprocess mode as well as subprecess.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 75847
diff changeset
1008
51087
f138fbe2945e Forward port r68985: Idle startup message.
Raymond Hettinger <python@rcn.com>
parents: 49553
diff changeset
1009 self.write("Python %s on %s\n%s\n%s" %
f138fbe2945e Forward port r68985: Idle startup message.
Raymond Hettinger <python@rcn.com>
parents: 49553
diff changeset
1010 (sys.version, sys.platform, self.COPYRIGHT, nosub))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1011 self.showprompt()
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46978
diff changeset
1012 import tkinter
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46978
diff changeset
1013 tkinter._default_root = None # 03Jan04 KBK What's this?
31414
14dea6f8b0c3 There was an error in the Tk error dialog fix at Rev 1.84 which caused starting
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
1014 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1015
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1016 def readline(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1017 save = self.reading
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1018 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1019 self.reading = 1
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1020 self.top.mainloop() # nested mainloop()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1021 finally:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1022 self.reading = save
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1023 line = self.text.get("iomark", "end-1c")
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1024 if len(line) == 0: # may be EOF if we quit our mainloop with Ctrl-C
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1025 line = "\n"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1026 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1027 if self.canceled:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1028 self.canceled = 0
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1029 if not use_subprocess:
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1030 raise KeyboardInterrupt
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1031 if self.endoffile:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1032 self.endoffile = 0
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1033 line = ""
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1034 return line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1035
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1036 def isatty(self):
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
1037 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1038
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1039 def cancel_callback(self, event=None):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1040 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1041 if self.text.compare("sel.first", "!=", "sel.last"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1042 return # Active selection -- always use default binding
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1043 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1044 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1045 if not (self.executing or self.reading):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1046 self.resetoutput()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1047 self.interp.write("KeyboardInterrupt\n")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1048 self.showprompt()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1049 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1050 self.endoffile = 0
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1051 self.canceled = 1
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1052 if (self.executing and self.interp.rpcclt):
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
1053 if self.interp.getdebugger():
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
1054 self.interp.restart_subprocess()
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
1055 else:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
1056 self.interp.interrupt_subprocess()
34240
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1057 if self.reading:
914534f6ef61 The GUI was hanging if the shell window was closed while a raw_input()
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1058 self.top.quit() # exit the nested mainloop() in readline()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1059 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1060
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1061 def eof_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1062 if self.executing and not self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1063 return # Let the default binding (delete next char) take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1064 if not (self.text.compare("iomark", "==", "insert") and
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1065 self.text.compare("insert", "==", "end-1c")):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1066 return # Let the default binding (delete next char) take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1067 if not self.executing:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1068 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1069 self.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1070 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1071 self.canceled = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1072 self.endoffile = 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1073 self.top.quit()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1074 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1075
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1076 def linefeed_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1077 # Insert a linefeed without entering anything (still autoindented)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1078 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1079 self.text.insert("insert", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1080 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1081 else:
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1082 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1083 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1084
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1085 def enter_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1086 if self.executing and not self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1087 return # Let the default binding (insert '\n') take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1088 # If some text is selected, recall the selection
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1089 # (but only if this before the I/O mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1090 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1091 sel = self.text.get("sel.first", "sel.last")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1092 if sel:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1093 if self.text.compare("sel.last", "<=", "iomark"):
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1094 self.recall(sel, event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1095 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1096 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1097 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1098 # If we're strictly before the line containing iomark, recall
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1099 # the current line, less a leading prompt, less leading or
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1100 # trailing whitespace
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1101 if self.text.compare("insert", "<", "iomark linestart"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1102 # Check if there's a relevant stdin range -- if so, use it
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1103 prev = self.text.tag_prevrange("stdin", "insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1104 if prev and self.text.compare("insert", "<", prev[1]):
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1105 self.recall(self.text.get(prev[0], prev[1]), event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1106 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1107 next = self.text.tag_nextrange("stdin", "insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1108 if next and self.text.compare("insert lineend", ">=", next[0]):
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1109 self.recall(self.text.get(next[0], next[1]), event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1110 return "break"
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1111 # No stdin mark -- just get the current line, less any prompt
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1112 indices = self.text.tag_nextrange("console", "insert linestart")
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1113 if indices and \
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1114 self.text.compare(indices[0], "<=", "insert linestart"):
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1115 self.recall(self.text.get(indices[1], "insert lineend"), event)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1116 else:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35504
diff changeset
1117 self.recall(self.text.get("insert linestart", "insert lineend"), event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1118 return "break"
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1119 # If we're between the beginning of the line and the iomark, i.e.
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1120 # in the prompt area, move to the end of the prompt
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1121 if self.text.compare("insert", "<", "iomark"):
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1122 self.text.mark_set("insert", "iomark")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1123 # If we're in the current input and there's only whitespace
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1124 # beyond the cursor, erase that whitespace first
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1125 s = self.text.get("insert", "end-1c")
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
1126 if s and not s.strip():
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1127 self.text.delete("insert", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1128 # If we're in the current input before its last line,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1129 # insert a newline right at the insert point
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1130 if self.text.compare("insert", "<", "end-1c linestart"):
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1131 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1132 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1133 # We're in the last line; append a newline and submit it
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1134 self.text.mark_set("insert", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1135 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1136 self.text.insert("insert", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1137 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1138 else:
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1139 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1140 self.text.tag_add("stdin", "iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1141 self.text.update_idletasks()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1142 if self.reading:
37045
081b4f0e81b7 Get rid of a bunch more raw_input references
Neal Norwitz <nnorwitz@gmail.com>
parents: 35891
diff changeset
1143 self.top.quit() # Break out of recursive mainloop()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1144 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1145 self.runit()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1146 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1147
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1148 def recall(self, s, event):
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1149 # remove leading and trailing empty or whitespace lines
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1150 s = re.sub(r'^\s*\n', '' , s)
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1151 s = re.sub(r'\n\s*$', '', s)
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1152 lines = s.split('\n')
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1153 self.text.undo_block_start()
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1154 try:
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1155 self.text.tag_remove("sel", "1.0", "end")
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1156 self.text.mark_set("insert", "end-1c")
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1157 prefix = self.text.get("insert linestart", "insert")
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1158 if prefix.rstrip().endswith(':'):
35118
2d833123b119 Remove dead code
Kurt B. Kaiser <kbk@shore.net>
parents: 35112
diff changeset
1159 self.newline_and_indent_event(event)
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1160 prefix = self.text.get("insert linestart", "insert")
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1161 self.text.insert("insert", lines[0].strip())
35118
2d833123b119 Remove dead code
Kurt B. Kaiser <kbk@shore.net>
parents: 35112
diff changeset
1162 if len(lines) > 1:
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1163 orig_base_indent = re.search(r'^([ \t]*)', lines[0]).group(0)
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1164 new_base_indent = re.search(r'^([ \t]*)', prefix).group(0)
35118
2d833123b119 Remove dead code
Kurt B. Kaiser <kbk@shore.net>
parents: 35112
diff changeset
1165 for line in lines[1:]:
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1166 if line.startswith(orig_base_indent):
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1167 # replace orig base indentation with new indentation
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1168 line = new_base_indent + line[len(orig_base_indent):]
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1169 self.text.insert('insert', '\n'+line.rstrip())
35112
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1170 finally:
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1171 self.text.see("insert")
58632092e023 <Enter> when cursor is on a previous command retrieves that command. Instead
Kurt B. Kaiser <kbk@shore.net>
parents: 34948
diff changeset
1172 self.text.undo_block_stop()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1173
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1174 def runit(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1175 line = self.text.get("iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1176 # Strip off last newline and surrounding whitespace.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1177 # (To allow you to hit return twice to end a statement.)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1178 i = len(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1179 while i > 0 and line[i-1] in " \t":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1180 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1181 if i > 0 and line[i-1] == "\n":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1182 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1183 while i > 0 and line[i-1] in " \t":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1184 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1185 line = line[:i]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1186 more = self.interp.runsource(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1187
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1188 def open_stack_viewer(self, event=None):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1189 if self.interp.rpcclt:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1190 return self.interp.remote_stack_viewer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1191 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1192 sys.last_traceback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1193 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1194 tkMessageBox.showerror("No stack trace",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1195 "There is no stack trace yet.\n"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1196 "(sys.last_traceback is not defined)",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1197 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1198 return
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42571
diff changeset
1199 from idlelib.StackViewer import StackBrowser
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1200 sv = StackBrowser(self.root, self.flist)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1201
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1202 def view_restart_mark(self, event=None):
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1203 self.text.see("iomark")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1204 self.text.see("restart")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1205
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1206 def restart_shell(self, event=None):
74693
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1207 "Callback for Run/Restart Shell Cntl-F6"
1993aa091d89 #13506 Add '' to path for interactive interpreter by adding with_cwd parameter
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1208 self.interp.restart_subprocess(with_cwd=True)
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1209
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1210 def showprompt(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1211 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1212 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1213 s = str(sys.ps1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1214 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1215 s = ""
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1216 self.console.write(s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1217 self.text.mark_set("insert", "end-1c")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1218 self.set_line_and_column()
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
1219 self.io.reset_undo()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1220
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1221 def resetoutput(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1222 source = self.text.get("iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1223 if self.history:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1224 self.history.history_store(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1225 if self.text.get("end-2c") != "\n":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1226 self.text.insert("end-1c", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1227 self.text.mark_set("iomark", "end-1c")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1228 self.set_line_and_column()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1229
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1230 def write(self, s, tags=()):
75641
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1231 if isinstance(s, str) and len(s) and max(s) > '\uffff':
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1232 # Tk doesn't support outputting non-BMP characters
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1233 # Let's assume what printed string is not very long,
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1234 # find first non-BMP character and construct informative
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1235 # UnicodeEncodeError exception.
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1236 for start, char in enumerate(s):
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1237 if char > '\uffff':
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1238 break
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1239 raise UnicodeEncodeError("UCS-2", char, start, start+1,
c06b94c5c609 Issue #14200: Idle shell crash on printing non-BMP unicode character.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74697
diff changeset
1240 'Non-BMP character not supported in Tk')
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1241 try:
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1242 self.text.mark_gravity("iomark", "right")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1243 OutputWindow.write(self, s, tags, "iomark")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1244 self.text.mark_gravity("iomark", "left")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1245 except:
42555
3e682ae9d298 1. Catch TypeError exception when writing to OutputWindow
Kurt B. Kaiser <kbk@shore.net>
parents: 42533
diff changeset
1246 raise ###pass # ### 11Aug07 KBK if we are expecting exceptions
3e682ae9d298 1. Catch TypeError exception when writing to OutputWindow
Kurt B. Kaiser <kbk@shore.net>
parents: 42533
diff changeset
1247 # let's find out what they are and be specific.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1248 if self.canceled:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1249 self.canceled = 0
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1250 if not use_subprocess:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
1251 raise KeyboardInterrupt
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1252
34212
1e8b033f91dc The remote procedure call module rpc.py can now access data attributes of
Kurt B. Kaiser <kbk@shore.net>
parents: 33989
diff changeset
1253 class PseudoFile(object):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1254
29582
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29476
diff changeset
1255 def __init__(self, shell, tags, encoding=None):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1256 self.shell = shell
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1257 self.tags = tags
29582
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29476
diff changeset
1258 self.encoding = encoding
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1259
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1260 def write(self, s):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1261 self.shell.write(s, self.tags)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1262
42507
df4cd9297098 Fix remaining map() issues.
Kurt B. Kaiser <kbk@shore.net>
parents: 42455
diff changeset
1263 def writelines(self, lines):
df4cd9297098 Fix remaining map() issues.
Kurt B. Kaiser <kbk@shore.net>
parents: 42455
diff changeset
1264 for line in lines:
df4cd9297098 Fix remaining map() issues.
Kurt B. Kaiser <kbk@shore.net>
parents: 42455
diff changeset
1265 self.write(line)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1266
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1267 def flush(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1268 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1269
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1270 def isatty(self):
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
1271 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1272
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
1273
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1274 usage_msg = """\
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1275
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
1276 USAGE: idle [-deins] [-t title] [file]*
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
1277 idle [-dns] [-t title] (-c cmd | -r file) [arg]*
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
1278 idle [-dns] [-t title] - [arg]*
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
1279
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1280 -h print this help message and exit
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1281 -n run IDLE without a subprocess (see Help/IDLE Help for details)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1282
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1283 The following options will override the IDLE 'settings' configuration:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1284
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1285 -e open an edit window
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1286 -i open a shell window
18649
8aa63aea7269 Implement idle command interface as suggested by GvR [idle-dev] 16 July
Kurt B. Kaiser <kbk@shore.net>
parents: 18614
diff changeset
1287
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1288 The following options imply -i and will open a shell:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1289
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1290 -c cmd run the command in a shell, or
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1291 -r file run script from file
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1292
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1293 -d enable the debugger
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1294 -s run $IDLESTARTUP or $PYTHONSTARTUP before anything else
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1295 -t title set title of shell window
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1296
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1297 A default edit window will be bypassed when -c, -r, or - are used.
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1298
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1299 [arg]* are passed to the command (-c) or script (-r) in sys.argv[1:].
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1300
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1301 Examples:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1302
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1303 idle
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1304 Open an edit window or shell depending on IDLE's configuration.
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1305
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1306 idle foo.py foobar.py
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1307 Edit the files, also open a shell if configured to start with shell.
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1308
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1309 idle -est "Baz" foo.py
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1310 Run $IDLESTARTUP or $PYTHONSTARTUP, edit foo.py, and open a shell
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1311 window with the title "Baz".
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1312
46978
55d8c35322a7 Convert a lot of print statements to print functions in docstrings,
Neal Norwitz <nnorwitz@gmail.com>
parents: 46664
diff changeset
1313 idle -c "import sys; print(sys.argv)" "foo"
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1314 Open a shell window and run the command, passing "-c" in sys.argv[0]
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1315 and "foo" in sys.argv[1].
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1316
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1317 idle -d -s -r foo.py "Hello World"
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1318 Open a shell window, run a startup script, enable the debugger, and
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1319 run foo.py, passing "foo.py" in sys.argv[0] and "Hello World" in
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1320 sys.argv[1].
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1321
46978
55d8c35322a7 Convert a lot of print statements to print functions in docstrings,
Neal Norwitz <nnorwitz@gmail.com>
parents: 46664
diff changeset
1322 echo "import sys; print(sys.argv)" | idle - "foobar"
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1323 Open a shell window, run the script piped in, passing '' in sys.argv[0]
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1324 and "foobar" in sys.argv[1].
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1325 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1326
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
1327 def main():
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1328 global flist, root, use_subprocess
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1329
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1330 use_subprocess = True
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
1331 enable_shell = True
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1332 enable_edit = False
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1333 debug = False
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
1334 cmd = None
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
1335 script = None
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1336 startup = False
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
1337 try:
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1338 opts, args = getopt.getopt(sys.argv[1:], "c:deihnr:st:")
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
1339 except getopt.error as msg:
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
1340 sys.stderr.write("Error: %s\n" % str(msg))
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
1341 sys.stderr.write(usage_msg)
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
1342 sys.exit(2)
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
1343 for o, a in opts:
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
1344 if o == '-c':
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
1345 cmd = a
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1346 enable_shell = True
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
1347 if o == '-d':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1348 debug = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1349 enable_shell = True
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
1350 if o == '-e':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1351 enable_edit = True
52849
a014dc47b552 Merged revisions 71126 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51087
diff changeset
1352 enable_shell = False
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1353 if o == '-h':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1354 sys.stdout.write(usage_msg)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1355 sys.exit()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1356 if o == '-i':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1357 enable_shell = True
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1358 if o == '-n':
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1359 use_subprocess = False
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
1360 if o == '-r':
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
1361 script = a
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1362 if os.path.isfile(script):
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1363 pass
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1364 else:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
1365 print("No script file: ", script)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1366 sys.exit()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1367 enable_shell = True
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
1368 if o == '-s':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1369 startup = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1370 enable_shell = True
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
1371 if o == '-t':
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
1372 PyShell.shell_title = a
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1373 enable_shell = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1374 if args and args[0] == '-':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1375 cmd = sys.stdin.read()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1376 enable_shell = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1377 # process sys.argv and sys.path:
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
1378 for i in range(len(sys.path)):
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
1379 sys.path[i] = os.path.abspath(sys.path[i])
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1380 if args and args[0] == '-':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1381 sys.argv = [''] + args[1:]
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1382 elif cmd:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1383 sys.argv = ['-c'] + args
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1384 elif script:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1385 sys.argv = [script] + args
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1386 elif args:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1387 enable_edit = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1388 pathx = []
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
1389 for filename in args:
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
1390 pathx.append(os.path.dirname(filename))
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1391 for dir in pathx:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1392 dir = os.path.abspath(dir)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1393 if not dir in sys.path:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1394 sys.path.insert(0, dir)
26741
cadfce66d861 When IDLE is installed and run from a startup script, the script's
Kurt B. Kaiser <kbk@shore.net>
parents: 26740
diff changeset
1395 else:
42881
4c78c048c3ba os.getcwd() now returns a normal string (ie, unicode)
Neal Norwitz <nnorwitz@gmail.com>
parents: 42726
diff changeset
1396 dir = os.getcwd()
4c78c048c3ba os.getcwd() now returns a normal string (ie, unicode)
Neal Norwitz <nnorwitz@gmail.com>
parents: 42726
diff changeset
1397 if dir not in sys.path:
26741
cadfce66d861 When IDLE is installed and run from a startup script, the script's
Kurt B. Kaiser <kbk@shore.net>
parents: 26740
diff changeset
1398 sys.path.insert(0, dir)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1399 # check the IDLE settings configuration (but command line overrides)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1400 edit_start = idleConf.GetOption('main', 'General',
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
1401 'editor-on-startup', type='bool')
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1402 enable_edit = enable_edit or edit_start
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1403 # start editor and/or shell windows:
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
1404 root = Tk(className="Idle")
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1405
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
1406 fixwordbreaks(root)
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
1407 root.withdraw()
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
1408 flist = PyShellFileList(root)
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1409 macosxSupport.setupApp(root, flist)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1410
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1411 if enable_edit:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1412 if not (cmd or script):
75846
a95b19b3b4cd #3573: idle now doesn't hungs if launched as: idle -e <directory>
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74696
diff changeset
1413 for filename in args[:]:
a95b19b3b4cd #3573: idle now doesn't hungs if launched as: idle -e <directory>
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74696
diff changeset
1414 if flist.open(filename) is None:
a95b19b3b4cd #3573: idle now doesn't hungs if launched as: idle -e <directory>
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74696
diff changeset
1415 # filename is a directory actually, disconsider it
a95b19b3b4cd #3573: idle now doesn't hungs if launched as: idle -e <directory>
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 74696
diff changeset
1416 args.remove(filename)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1417 if not args:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1418 flist.new()
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1419 if enable_shell:
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1420 shell = flist.open_shell()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1421 if not shell:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1422 return # couldn't open shell
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1423
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1424 if macosxSupport.runningAsOSXApp() and flist.dict:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1425 # On OSX: when the user has double-clicked on a file that causes
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1426 # IDLE to be launched the shell window will open just in front of
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1427 # the file she wants to see. Lower the interpreter window when
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1428 # there are open files.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1429 shell.top.lower()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1430
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1431 shell = flist.pyshell
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1432 # handle remaining options:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1433 if debug:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1434 shell.open_debugger()
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
1435 if startup:
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
1436 filename = os.environ.get("IDLESTARTUP") or \
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
1437 os.environ.get("PYTHONSTARTUP")
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
1438 if filename and os.path.isfile(filename):
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1439 shell.interp.execfile(filename)
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31013
diff changeset
1440 if shell and cmd or script:
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1441 shell.interp.runcommand("""if 1:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1442 import sys as _sys
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
1443 _sys.argv = %r
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1444 del _sys
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 31414
diff changeset
1445 \n""" % (sys.argv,))
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1446 if cmd:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1447 shell.interp.execsource(cmd)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1448 elif script:
29122
c7dfda993b2f 1. When a module is run from an EditorWindow, if its directory is not in
Kurt B. Kaiser <kbk@shore.net>
parents: 29121
diff changeset
1449 shell.interp.prepend_syspath(script)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1450 shell.interp.execfile(script)
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
1451
67595
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1452 # Check for problematic OS X Tk versions and print a warning message
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1453 # in the IDLE shell window; this is less intrusive than always opening
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1454 # a separate window.
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1455 tkversionwarning = macosxSupport.tkVersionWarning(root)
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1456 if tkversionwarning:
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1457 shell.interp.runcommand(''.join(("print('", tkversionwarning, "')")))
18ab8e0e6702 #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5,
Ned Deily <nad@acm.org>
parents: 63175
diff changeset
1458
77173
a2877fbabf95 Issue #10365: File open dialog now works instead of crashing
Terry Jan Reedy <tjreedy@udel.edu>
parents: 75846
diff changeset
1459 while flist.inversedict: # keep IDLE running while files are open.
a2877fbabf95 Issue #10365: File open dialog now works instead of crashing
Terry Jan Reedy <tjreedy@udel.edu>
parents: 75846
diff changeset
1460 root.mainloop()
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
1461 root.destroy()
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
1462
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1463 if __name__ == "__main__":
29476
51060b169b32 Support testing in .../Lib/idlelib when calling <python PyShell.py>
Kurt B. Kaiser <kbk@shore.net>
parents: 29452
diff changeset
1464 sys.modules['PyShell'] = sys.modules['__main__']
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1465 main()