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. ...@@ -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): ...@@ -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()
......
...@@ -325,9 +325,13 @@ class CustomRun(Query): ...@@ -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,
......
...@@ -39,6 +39,8 @@ class ScriptBinding: ...@@ -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: ...@@ -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: ...@@ -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
......
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