annotate Lib/idlelib/PyShell.py @ 34241:a15fa059f9f0 2.3

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