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

View File

@ -325,9 +325,13 @@ class CustomRun(Query):
""" """
# Used in runscript.run_custom_event # Used in runscript.run_custom_event
def __init__(self, parent, title, *, cli_args='', def __init__(self, parent, title, *, cli_args=[],
_htest=False, _utest=False): _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:' message = 'Command Line Arguments for sys.argv:'
super().__init__( super().__init__(
parent, title, message, text0=cli_args, parent, title, message, text0=cli_args,

View File

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