=== added file Lib/idlelib/argumentsDialog.py
+++ Lib/idlelib/argumentsDialog.py 2009-04-03 17:12:26 +0000
+from configHandler import idleConf
+
+def log(message):
+ import time
+ f = open(r"C:\Documents and Settings\Administrator\Desktop\new re\test_idle.log", "a")
+ f.write("[%s] %s\n" % (time.strftime("%H:%M:%S"), message))
+ f.close()
+
+log("in module argumentsDialog")
+
+def show(root):
+ log("entered show")
+ ArgumentsDialog(root).open("")
+ log("exitting show")
+
+from Tkinter import *
+
+class ArgumentsDialog:
+
+ title = "Arguments Dialog"
+ icon = "Search"
+
+ def __init__(self, root):
+ log("entered __init__")
+ log("self is %s" % self.__class__)
+ self.root = root
+ self.top = None
+ log("calling create_widgets")
+ try:
+ self.create_widgets()
+ except Exception, e:
+ log(str(e))
+ raise
+ log("called create_widgets")
+ log("exitting __init__")
+
+ def open(self, text):
+ self.text = text
+ if not self.top:
+ self.create_widgets()
+ else:
+ self.top.deiconify()
+ self.top.tkraise()
+ arguments = idleConf.GetOption("extensions", "CommandLine",
+ "arguments", type="str", default="")
+ self.ent.delete(0,"end")
+ self.ent.insert("end", arguments)
+ self.ent.focus_set()
+ self.ent.selection_range(0, "end")
+ self.ent.icursor(0)
+ self.top.grab_set()
+
+ def close(self, event=None):
+ log("entering close")
+ if self.top:
+ value = self.ent.get()
+ log("setting arguments to %s" % repr(value))
+ idleConf.SetOption("extensions", "CommandLine", "arguments", value=self.ent.get())
+ log("saving")
+ idleConf.SaveUserCfgFiles()
+ self.top.grab_release()
+ self.top.withdraw()
+ log("exitting close")
+
+ def create_widgets(self):
+ top = Toplevel(self.root)
+ top.bind("", self.close)
+ top.bind("", self.close)
+ top.protocol("WM_DELETE_WINDOW", self.close)
+ top.wm_title(self.title)
+ top.wm_iconname(self.icon)
+ self.top = top
+
+ self.row = 0
+ self.top.grid_columnconfigure(0, pad=2, weight=0)
+ self.top.grid_columnconfigure(1, pad=2, minsize=100, weight=100)
+
+ log("StringVar")
+ self.argvar = StringVar(self.root)
+ log("calling create_entries")
+ self.create_entries()
+ log("called create_entries")
+ return self.create_command_buttons()
+
+ def make_entry(self, label, var):
+ l = Label(self.top, text=label)
+ l.grid(row=self.row, column=0, sticky="nw")
+ e = Entry(self.top, textvariable=var, exportselection=0)
+ e.grid(row=self.row, column=1, sticky="nwe")
+ self.row = self.row + 1
+ return e
+
+ def make_frame(self,labeltext=None):
+ if labeltext:
+ l = Label(self.top, text=labeltext)
+ l.grid(row=self.row, column=0, sticky="nw")
+ f = Frame(self.top)
+ f.grid(row=self.row, column=1, columnspan=1, sticky="nwe")
+ self.row = self.row + 1
+ return f
+
+ def make_button(self, label, command, isdef=0):
+ b = Button(self.buttonframe,
+ text=label, command=command,
+ default=isdef and "active" or "normal")
+ cols,rows=self.buttonframe.grid_size()
+ b.grid(pady=1,row=rows,column=0,sticky="ew")
+ self.buttonframe.grid(rowspan=rows+1)
+ return b
+
+ def create_entries(self):
+ try:
+ self.ent = self.make_entry("Arguments:", self.argvar)
+ except Exception, e:
+ log(str(e))
+ raise
+
+ def create_command_buttons(self):
+ log("entering create_command_buttons")
+ #
+ # place button frame on the right
+ f = self.buttonframe = Frame(self.top)
+ f.grid(row=0,column=2,padx=2,pady=2,ipadx=2,ipady=2)
+
+ b = self.make_button("close", self.close)
+ b.lower()
+ log("exitting create_command_buttons")
=== modified file Lib/idlelib/config-extensions.def
--- Lib/idlelib/config-extensions.def 2005-11-22 01:52:22 +0000
+++ Lib/idlelib/config-extensions.def 2009-04-03 20:16:40 +0000
@@ -49,6 +49,7 @@
[ScriptBinding_cfgBindings]
run-module=
check-module=
+set-arguments=
[CallTips]
enable=1
=== modified file Lib/idlelib/ScriptBinding.py
--- Lib/idlelib/ScriptBinding.py 2008-05-20 07:13:37 +0000
+++ Lib/idlelib/ScriptBinding.py 2009-04-03 20:16:53 +0000
@@ -24,6 +24,7 @@
import tokenize
import tkMessageBox
import PyShell
+import argumentsDialog
from configHandler import idleConf
@@ -44,7 +45,8 @@
menudefs = [
('run', [None,
('Check Module', '<>'),
- ('Run Module', '<>'), ]), ]
+ ('Run Module', '<>'),
+ ('Set Arguments...', '<>'), ]), ]
def __init__(self, editwin):
self.editwin = editwin
@@ -147,23 +149,29 @@
if PyShell.use_subprocess:
shell.restart_shell()
dirname = os.path.dirname(filename)
- # XXX Too often this discards arguments the user just set...
+
+ arguments = idleConf.GetOption("extensions", "CommandLine",
+ "arguments", type="str", default="")
+ arguments = [arg1 or arg2 for arg1, arg2 in
+ re.findall(r'"([^"]*)"|(\S+)', arguments)]
+
+ # XXX This uses the arguments set within IDLE.
interp.runcommand("""if 1:
- _filename = %r
import sys as _sys
- from os.path import basename as _basename
- if (not _sys.argv or
- _basename(_sys.argv[0]) != _basename(_filename)):
- _sys.argv = [_filename]
+ _sys.argv = %r
import os as _os
_os.chdir(%r)
- del _filename, _sys, _basename, _os
- \n""" % (filename, dirname))
+ del _sys, _os
+ \n""" % ([filename] + arguments, dirname))
interp.prepend_syspath(filename)
# XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
# go to __stderr__. With subprocess, they go to the shell.
# Need to change streams in PyShell.ModifiedInterpreter.
interp.runcode(code)
+ return 'break'
+
+ def set_arguments_event(self, event):
+ argumentsDialog.show(self.root)
return 'break'
def getfilename(self):