bpo-37627: Initialize IDLE Custom Run dialog with previous entries (#14870)

Repeat the command line arguments most recently entered before so the user can edit them.
This commit is contained in:
Ngalim Siregar 2019-07-21 22:37:28 +07:00 committed by Terry Jan Reedy
parent 02c91f59b6
commit 35b87e6001
4 changed files with 22 additions and 10 deletions

View File

@ -12,7 +12,7 @@ HelpSource htests. These are run by running query.py.
from idlelib import query
import unittest
from test.support import requires
from tkinter import Tk
from tkinter import Tk, END
import sys
from unittest import mock
@ -392,10 +392,12 @@ class CustomRunGuiTest(unittest.TestCase):
def test_click_args(self):
root = Tk()
root.withdraw()
dialog = query.CustomRun(root, 'Title', _utest=True)
dialog.entry.insert(0, 'okay')
dialog = query.CustomRun(root, 'Title',
cli_args=['a', 'b=1'], _utest=True)
self.assertEqual(dialog.entry.get(), 'a b=1')
dialog.entry.insert(END, ' c')
dialog.button_ok.invoke()
self.assertEqual(dialog.result, (['okay'], True))
self.assertEqual(dialog.result, (['a', 'b=1', 'c'], True))
root.destroy()

View File

@ -325,9 +325,13 @@ class CustomRun(Query):
"""
# Used in runscript.run_custom_event
def __init__(self, parent, title, *, cli_args='',
def __init__(self, parent, title, *, cli_args=[],
_htest=False, _utest=False):
# TODO Use cli_args to pre-populate entry.
"""cli_args is a list of strings.
The list is assigned to the default Entry StringVar.
The strings are displayed joined by ' ' for display.
"""
message = 'Command Line Arguments for sys.argv:'
super().__init__(
parent, title, message, text0=cli_args,

View File

@ -39,6 +39,8 @@ class ScriptBinding:
# XXX This should be done differently
self.flist = self.editwin.flist
self.root = self.editwin.root
# cli_args is list of strings that extends sys.argv
self.cli_args = []
if macosx.isCocoaTk():
self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
@ -137,10 +139,11 @@ class ScriptBinding:
return 'break'
if customize:
title = f"Customize {self.editwin.short_title()} Run"
run_args = CustomRun(self.shell.text, title).result
run_args = CustomRun(self.shell.text, title,
cli_args=self.cli_args).result
if not run_args: # User cancelled.
return 'break'
cli_args, restart = run_args if customize else ([], True)
self.cli_args, restart = run_args if customize else ([], True)
interp = self.shell.interp
if pyshell.use_subprocess and restart:
interp.restart_subprocess(
@ -148,8 +151,8 @@ class ScriptBinding:
self.editwin._filename_to_unicode(filename))
dirname = os.path.dirname(filename)
argv = [filename]
if cli_args:
argv += cli_args
if self.cli_args:
argv += self.cli_args
interp.runcommand(f"""if 1:
__file__ = {filename!r}
import sys as _sys

View File

@ -0,0 +1,3 @@
Initialize the Customize Run dialog with the command line arguments
most recently entered before. The user can optionally edit before
submitting them.