Commit 35b87e60 authored by Ngalim Siregar's avatar Ngalim Siregar Committed by Terry Jan Reedy

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.
parent 02c91f59
......@@ -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()
......
......@@ -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,
......
......@@ -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
......
Initialize the Customize Run dialog with the command line arguments
most recently entered before. The user can optionally edit before
submitting them.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment