annotate Lib/idlelib/PyShell.py @ 29451:05058d813441 legacy-trunk

Remove reference to IDLEfork
author Kurt B. Kaiser <kbk@shore.net>
date Sat, 14 Jun 2003 03:23:56 +0000
parents 72ce7cc03f27
children 3016a19e320e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 #! /usr/bin/env python
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 import os
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
4 import os.path
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5 import sys
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6 import string
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7 import getopt
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8 import re
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
9 import socket
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
10 import time
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
11 import threading
25322
7de88cf0783e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25310
diff changeset
12 import traceback
7de88cf0783e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25310
diff changeset
13 import types
26557
4be62dc9a3e7 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26471
diff changeset
14 import exceptions
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
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19 from Tkinter import *
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20 import tkMessageBox
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21
26788
143922a40fac Move boolcheck before import of other IDLE modules
Tony Lownds <tony@lownds.com>
parents: 26774
diff changeset
22 # Preserve 2.2 compatibility for Mac OS X:
143922a40fac Move boolcheck before import of other IDLE modules
Tony Lownds <tony@lownds.com>
parents: 26774
diff changeset
23 import boolcheck
143922a40fac Move boolcheck before import of other IDLE modules
Tony Lownds <tony@lownds.com>
parents: 26774
diff changeset
24
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 from EditorWindow import EditorWindow, fixwordbreaks
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 from FileList import FileList
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 from ColorDelegator import ColorDelegator
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 from UndoDelegator import UndoDelegator
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
29 from OutputWindow import OutputWindow
20864
8957341f98f8 further config system work
Steven M. Gava <elguavas@python.net>
parents: 20306
diff changeset
30 from configHandler import idleConf
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 import idlever
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
33 import rpc
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
34 import Debugger
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
35 import RemoteDebugger
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
36
25346
6dec74f44242 Fix bug I created during merge from Python-idle.
Kurt B. Kaiser <kbk@shore.net>
parents: 25322
diff changeset
37 IDENTCHARS = string.ascii_letters + string.digits + "_"
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
38 LOCALHOST = '127.0.0.1'
25346
6dec74f44242 Fix bug I created during merge from Python-idle.
Kurt B. Kaiser <kbk@shore.net>
parents: 25322
diff changeset
39
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
40 try:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
41 from signal import SIGTERM
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
42 except ImportError:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
43 SIGTERM = 15
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
44
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
45 # Change warnings module to write to sys.__stderr__
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
46 try:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
47 import warnings
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
48 except ImportError:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
49 pass
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
50 else:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
51 def idle_showwarning(message, category, filename, lineno):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
52 file = sys.__stderr__
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
53 file.write(warnings.formatwarning(message, category, filename, lineno))
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
54 warnings.showwarning = idle_showwarning
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
55
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
56 def extended_linecache_checkcache(orig_checkcache=linecache.checkcache):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
57 """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
58
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
59 Rather than repeating the linecache code, patch it to save the pyshell#
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
60 entries, call the original linecache.checkcache(), and then restore the
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
61 saved entries. Assigning the orig_checkcache keyword arg freezes its value
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
62 at definition time to the (original) method linecache.checkcache(), i.e.
c88f6fff1c3f Correct an error introduced at Rev 1.30. The keyword arg is necessary
Kurt B. Kaiser <kbk@shore.net>
parents: 26028
diff changeset
63 makes orig_checkcache lexical.
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
64
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
65 """
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 cache = linecache.cache
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 save = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 for filename in cache.keys():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 if filename[:1] + filename[-1:] == '<>':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 save[filename] = cache[filename]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71 orig_checkcache()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72 cache.update(save)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
73
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
74 # 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
75 linecache.checkcache = extended_linecache_checkcache
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
77
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 class PyShellEditorWindow(EditorWindow):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
79 "Regular text edit window when a shell is present"
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
80
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 def __init__(self, *args):
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
82 self.breakpoints = []
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 apply(EditorWindow.__init__, (self,) + args)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 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
85 self.text.bind("<<clear-breakpoint-here>>", self.clear_breakpoint_here)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 self.text.bind("<<open-python-shell>>", self.flist.open_shell)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
88 self.breakpointPath = os.path.join(idleConf.GetUserCfgDir(),
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
89 'breakpoints.lst')
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
90 # 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
91 if self.io.filename: self.restore_file_breaks()
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
92 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
93 self=self):
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
94 self.restore_file_breaks()
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
95 old_hook()
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
96 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
97
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
98 rmenu_specs = [("Set Breakpoint", "<<set-breakpoint-here>>"),
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
99 ("Clear Breakpoint", "<<clear-breakpoint-here>>")]
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
101 def set_breakpoint(self, lineno):
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
102 text = self.text
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
103 filename = self.io.filename
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
104 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
105 try:
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
106 i = self.breakpoints.index(lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
107 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
108 self.breakpoints.append(lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
109 try: # update the subprocess debugger
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
110 debug = self.flist.pyshell.interp.debugger
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
111 debug.set_breakpoint_here(filename, lineno)
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
112 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
113 pass
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
114
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
115 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
116 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
117 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
118 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
119 text.bell()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120 return
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
121 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
122 self.set_breakpoint(lineno)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
124 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
125 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
126 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
127 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
128 text.bell()
23932
eab8eca9ec51 1. Debugger Breakpoints, finish implementation
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
129 return
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
130 lineno = int(float(text.index("insert")))
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
131 try:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
132 self.breakpoints.remove(lineno)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
133 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
134 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
135 text.tag_remove("BREAK", "insert linestart",\
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
136 "insert lineend +1char")
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
137 try:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
138 debug = self.flist.pyshell.interp.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
139 debug.clear_breakpoint_here(filename, lineno)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
140 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
141 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
142
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
143 def clear_file_breaks(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
144 if self.breakpoints:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
145 text = self.text
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
146 filename = self.io.filename
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
147 if not filename:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
148 text.bell()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
149 return
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
150 self.breakpoints = []
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
151 text.tag_remove("BREAK", "1.0", END)
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 debug = self.flist.pyshell.interp.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
154 debug.clear_file_breaks(filename)
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
155 except:
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
156 pass
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
157
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
158 def store_file_breaks(self):
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
159 "Save breakpoints when file is saved"
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
160 # 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
161 # 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
162 # a temporary file save feature the save breaks functionality
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
163 # 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
164 # 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
165 # 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
166 # 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
167 # 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
168 # saved file.
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
169 #
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
170 # Breakpoints are set as tagged ranges in the text. Certain
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
171 # kinds of edits cause these ranges to be deleted: Inserting
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
172 # or deleting a line just before a breakpoint, and certain
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
173 # deletions prior to a breakpoint. These issues need to be
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
174 # investigated and understood. It's not clear if they are
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
175 # Tk issues or IDLE issues, or whether they can actually
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
176 # 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
177 # run, and since self.breakpoints (from which the subprocess
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
178 # debugger is loaded) is updated during the save, the visible
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
179 # 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
180 # unexpected breakpoint deletions occurs.
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
181 breaks = self.breakpoints
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
182 filename = self.io.filename
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
183 try:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
184 lines = open(self.breakpointPath,"r").readlines()
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
185 except IOError:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
186 lines = []
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
187 new_file = open(self.breakpointPath,"w")
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
188 for line in lines:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
189 if not line.startswith(filename + '='):
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
190 new_file.write(line)
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
191 self.update_breakpoints()
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
192 breaks = self.breakpoints
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
193 if breaks:
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
194 new_file.write(filename + '=' + str(breaks) + '\n')
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
195 new_file.close()
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
196
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
197 def restore_file_breaks(self):
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
198 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
199 filename = self.io.filename
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
200 if filename is None:
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
201 return
26028
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
202 if os.path.isfile(self.breakpointPath):
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
203 lines = open(self.breakpointPath,"r").readlines()
26028
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
204 for line in lines:
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
205 if line.startswith(filename + '='):
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
206 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
207 for breakpoint_linenumber in breakpoint_linenumbers:
64a96b97e1e9 Set breakpoints on remote debugger
Chui Tey <chui.tey@advdata.com.au>
parents: 26025
diff changeset
208 self.set_breakpoint(breakpoint_linenumber)
26025
18e09720738f Recalls breakpoints set in a file
Chui Tey <chui.tey@advdata.com.au>
parents: 25894
diff changeset
209
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
210 def update_breakpoints(self):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
211 "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
212 text = self.text
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
213 ranges = text.tag_ranges("BREAK")
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
214 linenumber_list = self.ranges_to_linenumbers(ranges)
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
215 self.breakpoints = linenumber_list
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
216
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
217 def ranges_to_linenumbers(self, ranges):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
218 lines = []
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
219 for index in range(0, len(ranges), 2):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
220 lineno = int(float(ranges[index]))
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
221 end = int(float(ranges[index+1]))
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
222 while lineno < end:
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
223 lines.append(lineno)
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
224 lineno += 1
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
225 return lines
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
226
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
227 # XXX 13 Dec 2002 KBK Not used currently
26659
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
228 # def saved_change_hook(self):
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
229 # "Extend base method - clear breaks if module is modified"
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
230 # if not self.get_saved():
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
231 # self.clear_file_breaks()
d99e38bb6dcd M Debugger.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26590
diff changeset
232 # EditorWindow.saved_change_hook(self)
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
233
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
234 def _close(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
235 "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
236 self.clear_file_breaks()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
237 EditorWindow._close(self)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
238
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
239
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
240 class PyShellFileList(FileList):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
241 "Extend base class: file list when a shell is present"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
242
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
243 EditorWindow = PyShellEditorWindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
244
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
245 pyshell = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
246
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
247 def open_shell(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
248 if self.pyshell:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
249 self.pyshell.wakeup()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
250 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
251 self.pyshell = PyShell(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
252 self.pyshell.begin()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
253 return self.pyshell
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
254
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
255
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
256 class ModifiedColorDelegator(ColorDelegator):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
257 "Extend base class: colorizer for the shell window itself"
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
258
22111
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
259 def __init__(self):
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
260 ColorDelegator.__init__(self)
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
261 self.LoadTagDefs()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
262
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
263 def recolorize_main(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
264 self.tag_remove("TODO", "1.0", "iomark")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
265 self.tag_add("SYNC", "1.0", "iomark")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
266 ColorDelegator.recolorize_main(self)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
267
22111
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
268 def LoadTagDefs(self):
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
269 ColorDelegator.LoadTagDefs(self)
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
270 theme = idleConf.GetOption('main','Theme','name')
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
271 self.tagdefs.update({
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
272 "stdin": {'background':None,'foreground':None},
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
273 "stdout": idleConf.GetHighlight(theme, "stdout"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
274 "stderr": idleConf.GetHighlight(theme, "stderr"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
275 "console": idleConf.GetHighlight(theme, "console"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
276 None: idleConf.GetHighlight(theme, "normal"),
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 21627
diff changeset
277 })
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
278
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
279 class ModifiedUndoDelegator(UndoDelegator):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
280 "Extend base class: forbid insert/delete before the I/O mark"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
281
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
282 def insert(self, index, chars, tags=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
283 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
284 if self.delegate.compare(index, "<", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
285 self.delegate.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
286 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
287 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
288 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
289 UndoDelegator.insert(self, index, chars, tags)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
290
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
291 def delete(self, index1, index2=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
292 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
293 if self.delegate.compare(index1, "<", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
294 self.delegate.bell()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
295 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
296 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
297 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
298 UndoDelegator.delete(self, index1, index2)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
299
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
300
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
301 class MyRPCClient(rpc.RPCClient):
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
302
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
303 def handle_EOF(self):
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
304 "Override the base class - just re-raise EOFError"
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
305 raise EOFError
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
306
29271
8f73df099967 Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 29256
diff changeset
307
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
308 class ModifiedInterpreter(InteractiveInterpreter):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
309
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
310 def __init__(self, tkconsole):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
311 self.tkconsole = tkconsole
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
312 locals = sys.modules['__main__'].__dict__
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
313 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
314 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
315 self.restarting = False
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
316 self.subprocess_arglist = self.build_subprocess_arglist()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
317
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
318 port = 8833
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
319 rpcclt = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
320 rpcpid = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
321
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
322 def spawn_subprocess(self):
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
323 args = self.subprocess_arglist
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
324 self.rpcpid = os.spawnv(os.P_NOWAIT, args[0], args)
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
325
26730
9b4c014b3a21 Update way a subprocess is launched for Mac OS X.
Tony Lownds <tony@lownds.com>
parents: 26693
diff changeset
326 def build_subprocess_arglist(self):
29101
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
327 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
328 # 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
329 # 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
330 # 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
331 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
332 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
333 if __name__ == 'idlelib.PyShell':
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
334 command = "__import__('idlelib.run').run.main(" + `del_exitf` +")"
25480
9d50bc831bca Finding a suitable interpreter to spawn needed tweaking on the Mac
Tony Lownds <tony@lownds.com>
parents: 25346
diff changeset
335 else:
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29271
diff changeset
336 command = "__import__('run').main(" + `del_exitf` + ")"
29101
32e70ad79f66 1. The command-line arguments for subprocesses no longer need to be
Tony Lownds <tony@lownds.com>
parents: 29076
diff changeset
337 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
338
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
339 def start_subprocess(self):
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
340 addr = (LOCALHOST, self.port)
24559
f059d5435d65 GvR provided solution to the socket rebinding timeout problem.
Kurt B. Kaiser <kbk@shore.net>
parents: 24386
diff changeset
341 # Idle starts listening for connection on localhost
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
342 for i in range(3):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
343 time.sleep(i)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
344 try:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
345 self.rpcclt = MyRPCClient(addr)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
346 break
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
347 except socket.error, err:
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
348 print>>sys.__stderr__,"IDLE socket error: " + err[1]\
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
349 + ", retrying..."
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
350 else:
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
351 display_port_binding_error()
26772
240fdbef8c60 IDLE should exit if it fails to connect with the execution server
Kurt B. Kaiser <kbk@shore.net>
parents: 26771
diff changeset
352 sys.exit()
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
353 self.spawn_subprocess()
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
354 # Accept the connection from the Python execution server
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
355 self.rpcclt.accept()
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
356 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
357 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
358 self.rpcclt.register("stderr", self.tkconsole.stderr)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
359 self.rpcclt.register("flist", self.tkconsole.flist)
27545
f9822b18cf91 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27379
diff changeset
360 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
361 self.rpcclt.register("interp", self)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
362 self.transfer_path()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
363 self.poll_subprocess()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
364
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
365 def restart_subprocess(self):
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
366 if self.restarting:
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
367 return
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
368 self.restarting = True
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
369 # close only the subprocess debugger
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
370 debug = self.getdebugger()
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
371 if debug:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
372 try:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29059
diff changeset
373 # Only close subprocess debugger, don't unregister gui_adap!
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
374 RemoteDebugger.close_subprocess_debugger(self.rpcclt)
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
375 except:
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
376 pass
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
377 # 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
378 self.rpcclt.close()
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
379 self.unix_terminate()
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
380 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
381 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
382 console.executing = False
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
383 self.spawn_subprocess()
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
384 self.rpcclt.accept()
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
385 self.transfer_path()
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
386 # annotate restart in shell window and mark it
27336
cbca0bcf1c31 M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
387 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
388 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
389 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
390 console.showprompt()
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
391 halfbar = ((int(console.width) - 16) // 2) * '='
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
392 console.write(halfbar + ' RESTART ' + halfbar)
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
393 console.text.mark_set("restart", "end-1c")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
394 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
395 console.showprompt()
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
396 # restart subprocess debugger
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
397 if debug:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29059
diff changeset
398 # Restarted debugger connects to current instance of debug GUI
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
399 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
400 # reload remote debugger breakpoints for all PyShellEditWindows
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
401 debug.load_breakpoints()
29256
b909fdf0edf8 Improved the RESTART annotation in the shell window when the user
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
402 self.restarting = False
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
403
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
404 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
405 self.rpcclt.remotecall("exec", "interrupt_the_server", (), {})
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
406
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
407 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
408 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
409
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
410 def kill_subprocess(self):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
411 self.rpcclt.close()
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
412 self.unix_terminate()
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
413 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
414 self.rpcclt = None
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
415
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
416 def unix_terminate(self):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
417 "UNIX: make sure subprocess is terminated and collect status"
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
418 if hasattr(os, 'kill'):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
419 try:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
420 os.kill(self.rpcpid, SIGTERM)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
421 except OSError:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
422 # process already terminated:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
423 return
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
424 else:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
425 try:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
426 os.waitpid(self.rpcpid, 0)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
427 except OSError:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
428 return
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28266
diff changeset
429
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
430 def transfer_path(self):
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
431 self.runcommand("""if 1:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
432 import sys as _sys
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
433 _sys.path = %s
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
434 del _sys
28159
e405929c223e SF 693333
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
435 _msg = 'Use File/Exit or your end-of-file key to quit IDLE'
e405929c223e SF 693333
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
436 __builtins__.quit = __builtins__.exit = _msg
e405929c223e SF 693333
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
437 del _msg
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
438 \n""" % `sys.path`)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
439
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
440 active_seq = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
441
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
442 def poll_subprocess(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
443 clt = self.rpcclt
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
444 if clt is None:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
445 return
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
446 try:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
447 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
448 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
449 # 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
450 # [the KBI is from rpc.SocketIO.handle_EOF()]
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
451 if self.tkconsole.closing:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
452 return
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
453 response = None
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
454 self.restart_subprocess()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
455 if response:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
456 self.tkconsole.resetoutput()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
457 self.active_seq = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
458 how, what = response
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
459 console = self.tkconsole.console
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
460 if how == "OK":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
461 if what is not None:
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
462 print >>console, `what`
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
463 elif how == "EXCEPTION":
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
464 if self.tkconsole.getvar("<<toggle-jit-stack-viewer>>"):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
465 self.remote_stack_viewer()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
466 elif how == "ERROR":
26557
4be62dc9a3e7 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26471
diff changeset
467 errmsg = "PyShell.ModifiedInterpreter: Subprocess ERROR:\n"
4be62dc9a3e7 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26471
diff changeset
468 print >>sys.__stderr__, errmsg, what
27379
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
469 print >>console, errmsg, what
a457531c0fd4 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27336
diff changeset
470 # we received a response to the currently active seq number:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
471 self.tkconsole.endexecuting()
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
472 # 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
473 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
474 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
475 self.poll_subprocess)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
476
25894
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
477 debugger = None
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
478
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
479 def setdebugger(self, debugger):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
480 self.debugger = debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
481
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
482 def getdebugger(self):
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
483 return self.debugger
19500c9b58c1 Implement Restoring Breakpoints in Subprocess Debugger
Kurt B. Kaiser <kbk@shore.net>
parents: 25691
diff changeset
484
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
485 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
486 """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
487
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
488 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
489 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
490 requests the subprocess to open the remote stack viewer which returns a
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
491 static object looking at the last exceptiopn. It is queried through
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
492 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
493
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
494 """
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
495 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
496 return
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
497
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
498 def remote_stack_viewer(self):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
499 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
500 oid = self.rpcclt.remotequeue("exec", "stackviewer", ("flist",), {})
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
501 if oid is None:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
502 self.tkconsole.root.bell()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
503 return
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
504 item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
505 from TreeWidget import ScrolledCanvas, TreeNode
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
506 top = Toplevel(self.tkconsole.root)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
507 sc = ScrolledCanvas(top, bg="white", highlightthickness=0)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
508 sc.frame.pack(expand=1, fill="both")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
509 node = TreeNode(sc.canvas, None, item)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
510 node.expand()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
511 # 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
512
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
513 gid = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
514
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
515 def execsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
516 "Like runsource() but assumes complete exec source"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
517 filename = self.stuffsource(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
518 self.execfile(filename, source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
519
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
520 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
521 "Execute an existing file"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
522 if source is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
523 source = open(filename, "r").read()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
524 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
525 code = compile(source, filename, "exec")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
526 except (OverflowError, SyntaxError):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
527 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
528 tkerr = self.tkconsole.stderr
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
529 print>>tkerr, '*** Error in script or command!\n'
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
530 print>>tkerr, 'Traceback (most recent call last):'
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
531 InteractiveInterpreter.showsyntaxerror(self, filename)
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
532 self.tkconsole.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
533 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
534 self.runcode(code)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
535
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
536 def runsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
537 "Extend base class method: Stuff the source in the line cache first"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
538 filename = self.stuffsource(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
539 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
540 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
541 warnings.filterwarnings(action="error", category=SyntaxWarning)
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
542 if isinstance(source, types.UnicodeType):
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
543 import IOBinding
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
544 try:
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
545 source = source.encode(IOBinding.encoding)
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
546 except UnicodeError:
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
547 self.tkconsole.resetoutput()
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
548 self.write("Unsupported characters in input")
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
549 return
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
550 try:
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
551 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
552 finally:
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
553 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
554 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
555 self.save_warnings_filters = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
556
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
557 def stuffsource(self, source):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
558 "Stuff source in the filename cache"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
559 filename = "<pyshell#%d>" % self.gid
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
560 self.gid = self.gid + 1
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
561 lines = source.split("\n")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
562 linecache.cache[filename] = len(source)+1, 0, lines, filename
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
563 return filename
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
564
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
565 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
566 "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
567 self.runcommand("""if 1:
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
568 _filename = %s
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
569 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
570 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
571 _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
572 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
573 _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
574 del _filename, _sys, _dirname, _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
575 \n""" % `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
576
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
577 def showsyntaxerror(self, filename=None):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
578 """Extend base class method: Add Colorizing
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
579
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
580 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
581 with a caret.
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
582
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
583 """
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
584 text = self.tkconsole.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
585 stuff = self.unpackerror()
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
586 if stuff:
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
587 msg, lineno, offset, line = stuff
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
588 if lineno == 1:
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
589 pos = "iomark + %d chars" % (offset-1)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
590 else:
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
591 pos = "iomark linestart + %d lines + %d chars" % \
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
592 (lineno-1, offset-1)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
593 text.tag_add("ERROR", pos)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
594 text.see(pos)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
595 char = text.get(pos)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
596 if char and char in IDENTCHARS:
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
597 text.tag_add("ERROR", pos + " wordstart", pos)
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
598 self.tkconsole.resetoutput()
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
599 self.write("SyntaxError: %s\n" % str(msg))
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
600 else:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
601 self.tkconsole.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
602 InteractiveInterpreter.showsyntaxerror(self, filename)
26468
fbb24cd54766 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26463
diff changeset
603 self.tkconsole.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
604
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
605 def unpackerror(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
606 type, value, tb = sys.exc_info()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
607 ok = type is SyntaxError
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
608 if ok:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
609 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
610 msg, (dummy_filename, lineno, offset, line) = value
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
611 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
612 ok = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
613 if ok:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
614 return msg, lineno, offset, line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
615 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
616 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
617
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
618 def showtraceback(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
619 "Extend base class method to reset output properly"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
620 self.tkconsole.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
621 self.checklinecache()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
622 InteractiveInterpreter.showtraceback(self)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
623 if self.tkconsole.getvar("<<toggle-jit-stack-viewer>>"):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
624 self.tkconsole.open_stack_viewer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
625
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
626 def checklinecache(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
627 c = linecache.cache
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
628 for key in c.keys():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
629 if key[:1] + key[-1:] != "<>":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
630 del c[key]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
631
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
632 def display_executing_dialog(self):
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
633 tkMessageBox.showerror(
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
634 "Already executing",
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
635 "The Python Shell window is already executing a command; "
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
636 "please wait until it is finished.",
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
637 master=self.tkconsole.text)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
638
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
639 def runcommand(self, code):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
640 "Run the code without invoking the debugger"
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
641 # The code better not raise an exception!
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
642 if self.tkconsole.executing:
26471
99c78cf95610 Add missing self for method call
Neal Norwitz <nnorwitz@gmail.com>
parents: 26468
diff changeset
643 self.display_executing_dialog()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
644 return 0
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
645 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
646 self.rpcclt.remotequeue("exec", "runcode", (code,), {})
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
647 else:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
648 exec code in self.locals
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
649 return 1
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
650
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
651 def runcode(self, code):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
652 "Override base class method"
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
653 if self.tkconsole.executing:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
654 self.interp.restart_subprocess()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
655 self.checklinecache()
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
656 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
657 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
658 self.save_warnings_filters = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
659 debugger = self.debugger
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
660 try:
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
661 self.tkconsole.beginexecuting()
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
662 try:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
663 if not debugger and self.rpcclt is not None:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
664 self.active_seq = self.rpcclt.asyncqueue("exec", "runcode",
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
665 (code,), {})
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
666 elif debugger:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
667 debugger.run(code, self.locals)
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
668 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
669 exec code in self.locals
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
670 except SystemExit:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
671 if tkMessageBox.askyesno(
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
672 "Exit?",
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
673 "Do you want to exit altogether?",
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
674 default="yes",
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
675 master=self.tkconsole.text):
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
676 raise
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
677 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
678 self.showtraceback()
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
679 except:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
680 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
681 finally:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
682 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
683 self.tkconsole.endexecuting()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
684
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
685 def write(self, s):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
686 "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
687 self.tkconsole.stderr.write(s)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
688
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
689 class PyShell(OutputWindow):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
690
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
691 shell_title = "Python Shell"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
692
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
693 # Override classes
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
694 ColorDelegator = ModifiedColorDelegator
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
695 UndoDelegator = ModifiedUndoDelegator
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
696
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
697 # Override menus
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
698 menu_specs = [
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
699 ("file", "_File"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
700 ("edit", "_Edit"),
27336
cbca0bcf1c31 M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
701 ("debug", "_Debug"),
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
702 ("options", "_Options"),
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
703 ("windows", "_Windows"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
704 ("help", "_Help"),
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
705 ]
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
706
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
707 # New classes
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
708 from IdleHistory import History
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
709
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
710 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
711 if use_subprocess:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
712 ms = self.menu_specs
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
713 if ms[2][0] != "shell":
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
714 ms.insert(2, ("shell", "_Shell"))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
715 self.interp = ModifiedInterpreter(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
716 if flist is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
717 root = Tk()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
718 fixwordbreaks(root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
719 root.withdraw()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
720 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
721 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
722 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
723 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
724 import __builtin__
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
725 __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D."
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
726 #
25261
4b6185128814 MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 25123
diff changeset
727 self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
728 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
729 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
730 text.configure(wrap="char")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
731 text.bind("<<newline-and-indent>>", self.enter_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
732 text.bind("<<plain-newline-and-indent>>", self.linefeed_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
733 text.bind("<<interrupt-execution>>", self.cancel_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
734 text.bind("<<beginning-of-line>>", self.home_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
735 text.bind("<<end-of-file>>", self.eof_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
736 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
737 text.bind("<<toggle-debugger>>", self.toggle_debugger)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
738 text.bind("<<open-python-shell>>", self.flist.open_shell)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
739 text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
740 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
741 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
742 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
743 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
744 self.save_stdout = sys.stdout
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
745 self.save_stderr = sys.stderr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
746 self.save_stdin = sys.stdin
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
747 self.stdout = PseudoFile(self, "stdout")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
748 self.stderr = PseudoFile(self, "stderr")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
749 self.console = PseudoFile(self, "console")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
750 if not use_subprocess:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
751 sys.stdout = self.stdout
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
752 sys.stderr = self.stderr
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
753 sys.stdin = self
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25480
diff changeset
754 #
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
755 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
756 #
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
757 self.pollinterval = 50 # millisec
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
758 if use_subprocess:
25123
6b67d26079f2 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
759 self.interp.start_subprocess()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
760
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
761 reading = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
762 executing = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
763 canceled = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
764 endoffile = False
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
765 closing = False
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
766
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
767 def toggle_debugger(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
768 if self.executing:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
769 tkMessageBox.showerror("Don't debug now",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
770 "You can only toggle the debugger when idle",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
771 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
772 self.set_debugger_indicator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
773 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
774 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
775 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
776 if db:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
777 self.close_debugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
778 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
779 self.open_debugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
780
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
781 def set_debugger_indicator(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
782 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
783 self.setvar("<<toggle-debugger>>", not not db)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
784
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
785 def toggle_jit_stack_viewer(self, event=None):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
786 pass # All we need is the variable
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
787
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
788 def close_debugger(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
789 db = self.interp.getdebugger()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
790 if db:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
791 self.interp.setdebugger(None)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
792 db.close()
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
793 if self.interp.rpcclt:
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
794 RemoteDebugger.close_remote_debugger(self.interp.rpcclt)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
795 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
796 self.console.write("[DEBUG OFF]\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
797 sys.ps1 = ">>> "
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
798 self.showprompt()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
799 self.set_debugger_indicator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
800
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
801 def open_debugger(self):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
802 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
803 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
804 self)
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
805 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
806 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
807 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
808 dbg_gui.load_breakpoints()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
809 sys.ps1 = "[DEBUG ON]\n>>> "
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
810 self.showprompt()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
811 self.set_debugger_indicator()
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
812
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
813 def beginexecuting(self):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23969
diff changeset
814 "Helper for ModifiedInterpreter"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
815 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
816 self.executing = 1
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 endexecuting(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
819 "Helper for ModifiedInterpreter"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
820 self.executing = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
821 self.canceled = 0
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
822 self.showprompt()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
823
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
824 def close(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
825 "Extend EditorWindow.close()"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
826 if self.executing:
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
827 response = tkMessageBox.askokcancel(
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
828 "Kill?",
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
829 "The program is still running!\n Do you want to kill it?",
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
830 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
831 parent=self.text)
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
832 if response == False:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
833 return "cancel"
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
834 self.closing = True
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
835 # Wait for poll_subprocess() rescheduling to stop
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
836 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
837
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
838 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
839 return EditorWindow.close(self)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
840
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
841 def _close(self):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
842 "Extend EditorWindow._close(), shut down debugger and execution server"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
843 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
844 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
845 self.interp.kill_subprocess()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
846 # Restore std streams
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
847 sys.stdout = self.save_stdout
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
848 sys.stderr = self.save_stderr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
849 sys.stdin = self.save_stdin
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
850 # Break cycles
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
851 self.interp = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
852 self.console = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
853 self.flist.pyshell = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
854 self.history = None
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
855 EditorWindow._close(self)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
856
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
857 def ispythonsource(self, filename):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23932
diff changeset
858 "Override EditorWindow method: never remove the colorizer"
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
859 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
860
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
861 def short_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
862 return self.shell_title
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
863
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
864 COPYRIGHT = \
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
865 '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
866
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
867 def begin(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
868 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
869 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
870 nosub = ''
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
871 else:
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
872 nosub = "==== No Subprocess ===="
29451
05058d813441 Remove reference to IDLEfork
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
873 self.write("Python %s on %s\n%s\nIDLE %s %s\n" %
18560
12e7ad108229 cvs-py-rel2_1 (Rev 1.29 - 1.33) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
874 (sys.version, sys.platform, self.COPYRIGHT,
29119
7875fcaae7a3 1. Restore the capability to run and debug without a subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29101
diff changeset
875 idlever.IDLE_VERSION, nosub))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
876 self.showprompt()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
877 import Tkinter
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
878 Tkinter._default_root = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
879
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
880 def interact(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
881 self.begin()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
882 self.top.mainloop()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
883
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
884 def readline(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
885 save = self.reading
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
886 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
887 self.reading = 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
888 self.top.mainloop()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
889 finally:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
890 self.reading = save
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
891 line = self.text.get("iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
892 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
893 if self.canceled:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
894 self.canceled = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
895 raise KeyboardInterrupt
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
896 if self.endoffile:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
897 self.endoffile = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
898 return ""
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
899 return line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
900
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
901 def isatty(self):
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
902 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
903
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
904 def cancel_callback(self, event=None):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
905 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
906 if self.text.compare("sel.first", "!=", "sel.last"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
907 return # Active selection -- always use default binding
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
908 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
909 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
910 if not (self.executing or self.reading):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
911 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
912 self.interp.write("KeyboardInterrupt\n")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
913 self.showprompt()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
914 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
915 self.endoffile = 0
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
916 self.canceled = 1
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
917 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
918 self.top.quit()
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
919 elif (self.executing and self.interp.rpcclt):
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
920 if self.interp.getdebugger():
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
921 self.interp.restart_subprocess()
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
922 else:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
923 self.interp.interrupt_subprocess()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
924 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
925
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
926 def eof_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
927 if self.executing and not self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
928 return # Let the default binding (delete next char) take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
929 if not (self.text.compare("iomark", "==", "insert") and
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
930 self.text.compare("insert", "==", "end-1c")):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
931 return # Let the default binding (delete next char) take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
932 if not self.executing:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
933 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
934 self.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
935 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
936 self.canceled = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
937 self.endoffile = 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
938 self.top.quit()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
939 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
940
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
941 def home_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
942 if event.state != 0 and event.keysym == "Home":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
943 return # <Modifier-Home>; fall back to class binding
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
944 if self.text.compare("iomark", "<=", "insert") and \
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
945 self.text.compare("insert linestart", "<=", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
946 self.text.mark_set("insert", "iomark")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
947 self.text.tag_remove("sel", "1.0", "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
948 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
949 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
950
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
951 def linefeed_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
952 # Insert a linefeed without entering anything (still autoindented)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
953 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
954 self.text.insert("insert", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
955 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
956 else:
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
957 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
958 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
959
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
960 def enter_callback(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
961 if self.executing and not self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
962 return # Let the default binding (insert '\n') take over
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
963 # If some text is selected, recall the selection
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
964 # (but only if this before the I/O mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
965 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
966 sel = self.text.get("sel.first", "sel.last")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
967 if sel:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
968 if self.text.compare("sel.last", "<=", "iomark"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
969 self.recall(sel)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
970 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
971 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
972 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
973 # If we're strictly before the line containing iomark, recall
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
974 # the current line, less a leading prompt, less leading or
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
975 # trailing whitespace
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
976 if self.text.compare("insert", "<", "iomark linestart"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
977 # Check if there's a relevant stdin range -- if so, use it
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
978 prev = self.text.tag_prevrange("stdin", "insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
979 if prev and self.text.compare("insert", "<", prev[1]):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
980 self.recall(self.text.get(prev[0], prev[1]))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
981 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
982 next = self.text.tag_nextrange("stdin", "insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
983 if next and self.text.compare("insert lineend", ">=", next[0]):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
984 self.recall(self.text.get(next[0], next[1]))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
985 return "break"
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
986 # No stdin mark -- just get the current line, less any prompt
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
987 line = self.text.get("insert linestart", "insert lineend")
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
988 last_line_of_prompt = sys.ps1.split('\n')[-1]
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
989 if line.startswith(last_line_of_prompt):
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
990 line = line[len(last_line_of_prompt):]
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
991 self.recall(line)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
992 return "break"
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
993 # 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
994 # 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
995 if self.text.compare("insert", "<", "iomark"):
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
996 self.text.mark_set("insert", "iomark")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
997 # If we're in the current input and there's only whitespace
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
998 # beyond the cursor, erase that whitespace first
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
999 s = self.text.get("insert", "end-1c")
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
1000 if s and not s.strip():
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1001 self.text.delete("insert", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1002 # If we're in the current input before its last line,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1003 # insert a newline right at the insert point
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1004 if self.text.compare("insert", "<", "end-1c linestart"):
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1005 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1006 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1007 # We're in the last line; append a newline and submit it
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1008 self.text.mark_set("insert", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1009 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1010 self.text.insert("insert", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1011 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1012 else:
26667
f76717707a6d M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26659
diff changeset
1013 self.newline_and_indent_event(event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1014 self.text.tag_add("stdin", "iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1015 self.text.update_idletasks()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1016 if self.reading:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1017 self.top.quit() # Break out of recursive mainloop() in raw_input()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1018 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1019 self.runit()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1020 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1021
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1022 def recall(self, s):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1023 if self.history:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1024 self.history.recall(s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1025
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1026 def runit(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1027 line = self.text.get("iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1028 # Strip off last newline and surrounding whitespace.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1029 # (To allow you to hit return twice to end a statement.)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1030 i = len(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1031 while i > 0 and line[i-1] in " \t":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1032 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1033 if i > 0 and line[i-1] == "\n":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1034 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1035 while i > 0 and line[i-1] in " \t":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1036 i = i-1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1037 line = line[:i]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1038 more = self.interp.runsource(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1039
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1040 def open_stack_viewer(self, event=None):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1041 if self.interp.rpcclt:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1042 return self.interp.remote_stack_viewer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1043 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1044 sys.last_traceback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1045 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1046 tkMessageBox.showerror("No stack trace",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1047 "There is no stack trace yet.\n"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1048 "(sys.last_traceback is not defined)",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1049 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1050 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1051 from StackViewer import StackBrowser
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1052 sv = StackBrowser(self.root, self.flist)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1053
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1054 def view_restart_mark(self, event=None):
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1055 self.text.see("iomark")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1056 self.text.see("restart")
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1057
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1058 def restart_shell(self, event=None):
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29171
diff changeset
1059 self.interp.restart_subprocess()
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
1060
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1061 def showprompt(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1062 self.resetoutput()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1063 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1064 s = str(sys.ps1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1065 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1066 s = ""
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1067 self.console.write(s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1068 self.text.mark_set("insert", "end-1c")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1069 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
1070 self.io.reset_undo()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1071
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1072 def resetoutput(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1073 source = self.text.get("iomark", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1074 if self.history:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1075 self.history.history_store(source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1076 if self.text.get("end-2c") != "\n":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1077 self.text.insert("end-1c", "\n")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1078 self.text.mark_set("iomark", "end-1c")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1079 self.set_line_and_column()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1080 sys.stdout.softspace = 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1081
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1082 def write(self, s, tags=()):
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1083 try:
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1084 self.text.mark_gravity("iomark", "right")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1085 OutputWindow.write(self, s, tags, "iomark")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1086 self.text.mark_gravity("iomark", "left")
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1087 except:
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 27545
diff changeset
1088 pass
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1089 if self.canceled:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1090 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
1091 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
1092 raise KeyboardInterrupt
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1093
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1094 class PseudoFile:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1095
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1096 def __init__(self, shell, tags):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1097 self.shell = shell
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1098 self.tags = tags
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents: 22599
diff changeset
1099 self.softspace = 0
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1100
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1101 def write(self, s):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1102 self.shell.write(s, self.tags)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1103
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1104 def writelines(self, l):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1105 map(self.write, l)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1106
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1107 def flush(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1108 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1109
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1110 def isatty(self):
25310
eb7b7b719ee5 Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25261
diff changeset
1111 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1112
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
1113
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1114 usage_msg = """\
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1115
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
1116 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
1117 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
1118 idle [-dns] [-t title] - [arg]*
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
1119
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1120 -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
1121 -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
1122
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1123 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
1124
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1125 -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
1126 -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
1127
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1128 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
1129
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1130 -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
1131 -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
1132
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1133 -d enable the debugger
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1134 -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
1135 -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
1136
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1137 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
1138
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1139 [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
1140
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1141 Examples:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1142
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1143 idle
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1144 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
1145
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1146 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
1147 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
1148
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1149 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
1150 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
1151 window with the title "Baz".
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1152
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1153 idle -c "import sys; print sys.argv" "foo"
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1154 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
1155 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
1156
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1157 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
1158 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
1159 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
1160 sys.argv[1].
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1161
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1162 echo "import sys; print sys.argv" | idle - "foobar"
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1163 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
1164 and "foobar" in sys.argv[1].
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1165 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1166
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
1167 def main():
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1168 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
1169
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1170 use_subprocess = True
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1171 enable_shell = False
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1172 enable_edit = False
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1173 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
1174 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
1175 script = None
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1176 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
1177 try:
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1178 sys.ps1
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1179 except AttributeError:
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1180 sys.ps1 = '>>> '
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26788
diff changeset
1181 try:
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1182 opts, args = getopt.getopt(sys.argv[1:], "c:deihnr:st:")
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
1183 except getopt.error, 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
1184 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
1185 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
1186 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
1187 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
1188 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
1189 cmd = a
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1190 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
1191 if o == '-d':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1192 debug = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1193 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
1194 if o == '-e':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1195 enable_edit = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1196 if o == '-h':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1197 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
1198 sys.exit()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1199 if o == '-i':
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1200 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
1201 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
1202 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
1203 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
1204 script = a
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1205 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
1206 pass
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1207 else:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1208 print "No script file: ", script
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1209 sys.exit()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1210 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
1211 if o == '-s':
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1212 startup = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1213 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
1214 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
1215 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
1216 enable_shell = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1217 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
1218 cmd = sys.stdin.read()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1219 enable_shell = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1220 # 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
1221 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
1222 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
1223 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
1224 sys.argv = [''] + args[1:]
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1225 elif cmd:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1226 sys.argv = ['-c'] + args
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1227 elif script:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1228 sys.argv = [script] + args
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1229 elif args:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1230 enable_edit = True
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1231 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
1232 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
1233 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
1234 for dir in pathx:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1235 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
1236 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
1237 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
1238 else:
cadfce66d861 When IDLE is installed and run from a startup script, the script's
Kurt B. Kaiser <kbk@shore.net>
parents: 26740
diff changeset
1239 dir = os.getcwd()
cadfce66d861 When IDLE is installed and run from a startup script, the script's
Kurt B. Kaiser <kbk@shore.net>
parents: 26740
diff changeset
1240 if not dir in sys.path:
cadfce66d861 When IDLE is installed and run from a startup script, the script's
Kurt B. Kaiser <kbk@shore.net>
parents: 26740
diff changeset
1241 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
1242 # 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
1243 edit_start = idleConf.GetOption('main', 'General',
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
1244 '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
1245 enable_edit = enable_edit or edit_start
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26827
diff changeset
1246 enable_shell = enable_shell or not edit_start
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1247 # 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
1248 root = Tk(className="Idle")
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
1249 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
1250 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
1251 flist = PyShellFileList(root)
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1252 if enable_edit:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1253 if not (cmd or script):
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1254 for filename in args:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1255 flist.open(filename)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1256 if not args:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1257 flist.new()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1258 if enable_shell:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1259 flist.open_shell()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1260 elif enable_shell:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1261 flist.pyshell = PyShell(flist)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1262 flist.pyshell.begin()
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1263 shell = flist.pyshell
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1264 # handle remaining options:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1265 if debug:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1266 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
1267 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
1268 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
1269 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
1270 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
1271 shell.interp.execfile(filename)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1272 if cmd or script:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1273 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
1274 import sys as _sys
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1275 _sys.argv = %s
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1276 del _sys
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1277 \n""" % `sys.argv`)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1278 if cmd:
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1279 shell.interp.execsource(cmd)
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1280 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
1281 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
1282 shell.interp.execfile(script)
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
1283 root.mainloop()
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
1284 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
1285
26590
615a25a6eb5b Rework the command line interface, incorporating the shell/edit
Kurt B. Kaiser <kbk@shore.net>
parents: 26557
diff changeset
1286
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
1287 def display_port_binding_error():
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
1288 print """\
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1289 \nIDLE cannot run.
20306
1ca228e21a98 merged port binding error message patch
Steven M. Gava <elguavas@python.net>
parents: 18649
diff changeset
1290
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1291 IDLE needs to use a specific TCP/IP port (8833) in order to communicate with
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1292 its Python execution server. IDLE is unable to bind to this port, and so
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1293 cannot start. Here are some possible causes of this problem:
20306
1ca228e21a98 merged port binding error message patch
Steven M. Gava <elguavas@python.net>
parents: 18649
diff changeset
1294
1ca228e21a98 merged port binding error message patch
Steven M. Gava <elguavas@python.net>
parents: 18649
diff changeset
1295 1. TCP/IP networking is not installed or not working on this computer
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1296 2. Another program (another IDLE?) is running that uses this port
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
1297 3. Personal firewall software is preventing IDLE from using this port
20306
1ca228e21a98 merged port binding error message patch
Steven M. Gava <elguavas@python.net>
parents: 18649
diff changeset
1298
29121
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1299 Run IDLE with the -n command line switch to start without a subprocess
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1300 and refer to Help/IDLE Help "Running without a subprocess" for further
29f19460f067 1. Add a command line switch to run without the subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 29120
diff changeset
1301 details.
20306
1ca228e21a98 merged port binding error message patch
Steven M. Gava <elguavas@python.net>
parents: 18649
diff changeset
1302 """
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1303
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1304 if __name__ == "__main__":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1305 main()