Skip to content

Commit

Permalink
bpo-37627: Initialize IDLE Custom Run dialog with previous entries (p…
Browse files Browse the repository at this point in the history
…ython#14870)

Repeat the command line arguments most recently entered before so the user can edit them.
  • Loading branch information
nsiregar authored and terryjreedy committed Jul 21, 2019
1 parent 02c91f5 commit 35b87e6
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 10 deletions.
10 changes: 6 additions & 4 deletions Lib/idlelib/idle_test/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
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
Expand Down Expand Up @@ -392,10 +392,12 @@ def setUpClass(cls):
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()


Expand Down
8 changes: 6 additions & 2 deletions Lib/idlelib/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
11 changes: 7 additions & 4 deletions Lib/idlelib/runscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ def __init__(self, editwin):
# 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)
Expand Down Expand Up @@ -137,19 +139,20 @@ def _run_module_event(self, event, *, customize=False):
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(
with_cwd=False, filename=
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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit 35b87e6

Please sign in to comment.