IDLE -- Restrict shell prompt manipulaton to the shell. (#4143)
Editor and output windows only see an empty last prompt line. This simplifies the code and fixes a minor bug when newline is inserted. Sys.ps1, if present, is read on Shell start-up, but is not set or changed.
This commit is contained in:
parent
ed6554c487
commit
e86172d63a
|
@ -99,10 +99,6 @@ class EditorWindow(object):
|
||||||
self.flist = flist
|
self.flist = flist
|
||||||
root = root or flist.root
|
root = root or flist.root
|
||||||
self.root = root
|
self.root = root
|
||||||
try:
|
|
||||||
sys.ps1
|
|
||||||
except AttributeError:
|
|
||||||
sys.ps1 = '>>> '
|
|
||||||
self.menubar = Menu(root)
|
self.menubar = Menu(root)
|
||||||
self.top = top = windows.ListedToplevel(root, menu=self.menubar)
|
self.top = top = windows.ListedToplevel(root, menu=self.menubar)
|
||||||
if flist:
|
if flist:
|
||||||
|
@ -116,6 +112,8 @@ class EditorWindow(object):
|
||||||
self.top.instance_dict = {}
|
self.top.instance_dict = {}
|
||||||
self.recent_files_path = os.path.join(
|
self.recent_files_path = os.path.join(
|
||||||
idleConf.userdir, 'recent-files.lst')
|
idleConf.userdir, 'recent-files.lst')
|
||||||
|
|
||||||
|
self.prompt_last_line = '' # Override in PyShell
|
||||||
self.text_frame = text_frame = Frame(top)
|
self.text_frame = text_frame = Frame(top)
|
||||||
self.vbar = vbar = Scrollbar(text_frame, name='vbar')
|
self.vbar = vbar = Scrollbar(text_frame, name='vbar')
|
||||||
self.width = idleConf.GetOption('main', 'EditorWindow',
|
self.width = idleConf.GetOption('main', 'EditorWindow',
|
||||||
|
@ -1213,13 +1211,9 @@ class EditorWindow(object):
|
||||||
assert have > 0
|
assert have > 0
|
||||||
want = ((have - 1) // self.indentwidth) * self.indentwidth
|
want = ((have - 1) // self.indentwidth) * self.indentwidth
|
||||||
# Debug prompt is multilined....
|
# Debug prompt is multilined....
|
||||||
if self.context_use_ps1:
|
|
||||||
last_line_of_prompt = sys.ps1.split('\n')[-1]
|
|
||||||
else:
|
|
||||||
last_line_of_prompt = ''
|
|
||||||
ncharsdeleted = 0
|
ncharsdeleted = 0
|
||||||
while 1:
|
while 1:
|
||||||
if chars == last_line_of_prompt:
|
if chars == self.prompt_last_line: # '' unless PyShell
|
||||||
break
|
break
|
||||||
chars = chars[:-1]
|
chars = chars[:-1]
|
||||||
ncharsdeleted = ncharsdeleted + 1
|
ncharsdeleted = ncharsdeleted + 1
|
||||||
|
@ -1288,8 +1282,7 @@ class EditorWindow(object):
|
||||||
indent = line[:i]
|
indent = line[:i]
|
||||||
# strip whitespace before insert point unless it's in the prompt
|
# strip whitespace before insert point unless it's in the prompt
|
||||||
i = 0
|
i = 0
|
||||||
last_line_of_prompt = sys.ps1.split('\n')[-1]
|
while line and line[-1] in " \t" and line != self.prompt_last_line:
|
||||||
while line and line[-1] in " \t" and line != last_line_of_prompt:
|
|
||||||
line = line[:-1]
|
line = line[:-1]
|
||||||
i = i+1
|
i = i+1
|
||||||
if i:
|
if i:
|
||||||
|
|
|
@ -857,15 +857,17 @@ class PyShell(OutputWindow):
|
||||||
fixwordbreaks(root)
|
fixwordbreaks(root)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
flist = PyShellFileList(root)
|
flist = PyShellFileList(root)
|
||||||
#
|
|
||||||
OutputWindow.__init__(self, flist, None, None)
|
OutputWindow.__init__(self, flist, None, None)
|
||||||
#
|
|
||||||
## self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
|
|
||||||
self.usetabs = True
|
self.usetabs = True
|
||||||
# indentwidth must be 8 when using tabs. See note in EditorWindow:
|
# indentwidth must be 8 when using tabs. See note in EditorWindow:
|
||||||
self.indentwidth = 8
|
self.indentwidth = 8
|
||||||
self.context_use_ps1 = True
|
|
||||||
#
|
self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>> '
|
||||||
|
self.prompt_last_line = self.sys_ps1.split('\n')[-1]
|
||||||
|
self.prompt = self.sys_ps1 # Changes when debug active
|
||||||
|
|
||||||
text = self.text
|
text = self.text
|
||||||
text.configure(wrap="char")
|
text.configure(wrap="char")
|
||||||
text.bind("<<newline-and-indent>>", self.enter_callback)
|
text.bind("<<newline-and-indent>>", self.enter_callback)
|
||||||
|
@ -878,7 +880,7 @@ class PyShell(OutputWindow):
|
||||||
if use_subprocess:
|
if use_subprocess:
|
||||||
text.bind("<<view-restart>>", self.view_restart_mark)
|
text.bind("<<view-restart>>", self.view_restart_mark)
|
||||||
text.bind("<<restart-shell>>", self.restart_shell)
|
text.bind("<<restart-shell>>", self.restart_shell)
|
||||||
#
|
|
||||||
self.save_stdout = sys.stdout
|
self.save_stdout = sys.stdout
|
||||||
self.save_stderr = sys.stderr
|
self.save_stderr = sys.stderr
|
||||||
self.save_stdin = sys.stdin
|
self.save_stdin = sys.stdin
|
||||||
|
@ -951,7 +953,7 @@ class PyShell(OutputWindow):
|
||||||
debugger_r.close_remote_debugger(self.interp.rpcclt)
|
debugger_r.close_remote_debugger(self.interp.rpcclt)
|
||||||
self.resetoutput()
|
self.resetoutput()
|
||||||
self.console.write("[DEBUG OFF]\n")
|
self.console.write("[DEBUG OFF]\n")
|
||||||
sys.ps1 = ">>> "
|
self.prompt = self.sys_ps1
|
||||||
self.showprompt()
|
self.showprompt()
|
||||||
self.set_debugger_indicator()
|
self.set_debugger_indicator()
|
||||||
|
|
||||||
|
@ -963,7 +965,7 @@ class PyShell(OutputWindow):
|
||||||
dbg_gui = debugger.Debugger(self)
|
dbg_gui = debugger.Debugger(self)
|
||||||
self.interp.setdebugger(dbg_gui)
|
self.interp.setdebugger(dbg_gui)
|
||||||
dbg_gui.load_breakpoints()
|
dbg_gui.load_breakpoints()
|
||||||
sys.ps1 = "[DEBUG ON]\n>>> "
|
self.prompt = "[DEBUG ON]\n" + self.sys_ps1
|
||||||
self.showprompt()
|
self.showprompt()
|
||||||
self.set_debugger_indicator()
|
self.set_debugger_indicator()
|
||||||
|
|
||||||
|
@ -1248,11 +1250,7 @@ class PyShell(OutputWindow):
|
||||||
|
|
||||||
def showprompt(self):
|
def showprompt(self):
|
||||||
self.resetoutput()
|
self.resetoutput()
|
||||||
try:
|
self.console.write(self.prompt)
|
||||||
s = str(sys.ps1)
|
|
||||||
except:
|
|
||||||
s = ""
|
|
||||||
self.console.write(s)
|
|
||||||
self.text.mark_set("insert", "end-1c")
|
self.text.mark_set("insert", "end-1c")
|
||||||
self.set_line_and_column()
|
self.set_line_and_column()
|
||||||
self.io.reset_undo()
|
self.io.reset_undo()
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
IDLE -- Restrict shell prompt manipulaton to the shell. Editor and output
|
||||||
|
windows only see an empty last prompt line. This simplifies the code and
|
||||||
|
fixes a minor bug when newline is inserted. Sys.ps1, if present, is read on
|
||||||
|
Shell start-up, but is not set or changed.
|
Loading…
Reference in New Issue