from __future__ import print_function
from Tkinter import StringVar, BooleanVar, Checkbutton # for GrepDialog
from Tkinter import Tk, Text, Button, SEL, END # for htest
from idlelib import SearchEngine
from idlelib.SearchDialogBase import SearchDialogBase
# Importing OutputWindow fails due to import loop
# EditorWindow -> GrepDialop -> OutputWindow -> EditorWindow
def grep(text, io=None, flist=None):
engine = SearchEngine.get(root)
if not hasattr(engine, "_grepdialog"):
engine._grepdialog = GrepDialog(root, engine, flist)
dialog = engine._grepdialog
searchphrase = text.get("sel.first", "sel.last")
dialog.open(text, searchphrase, io)
class GrepDialog(SearchDialogBase):
title = "Find in Files Dialog"
def __init__(self, root, engine, flist):
SearchDialogBase.__init__(self, root, engine)
self.globvar = StringVar(root)
self.recvar = BooleanVar(root)
def open(self, text, searchphrase, io=None):
SearchDialogBase.open(self, text, searchphrase)
dir, base = os.path.split(path)
head, tail = os.path.splitext(base)
self.globvar.set(os.path.join(dir, "*" + tail))
def create_entries(self):
SearchDialogBase.create_entries(self)
self.globent = self.make_entry("In files:", self.globvar)[0]
def create_other_buttons(self):
btn = Checkbutton(f, anchor="w",
text="Recurse down subdirectories")
btn.pack(side="top", fill="both")
def create_command_buttons(self):
SearchDialogBase.create_command_buttons(self)
self.make_button("Search Files", self.default_command, 1)
def default_command(self, event=None):
prog = self.engine.getprog()
path = self.globvar.get()
from idlelib.OutputWindow import OutputWindow # leave here!
sys.stdout = OutputWindow(self.flist)
def grep_it(self, prog, path):
dir, base = os.path.split(path)
list = self.findfiles(dir, base, self.recvar.get())
pat = self.engine.getpat()
print("Searching %r in %s ..." % (pat, path))
for lineno, line in enumerate(f, 1):
sys.stdout.write("%s: %s: %s\n" %
print(("Hits found: %s\n"
"(Hint: right-click to open locations.)"
% hits) if hits else "No hits.")
# Tk window has been closed, OutputWindow.text = None,
# so in OW.write, OW.text.insert fails.
def findfiles(self, dir, base, rec):
names = os.listdir(dir or os.curdir)
fn = os.path.join(dir, name)
if fnmatch.fnmatch(name, base):
list.extend(self.findfiles(subdir, base, rec))
def close(self, event=None):
def _grep_dialog(parent): # htest #
from idlelib.PyShell import PyShellFileList
root.title("Test GrepDialog")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
root.geometry("+%d+%d"%(x, y + 150))
flist = PyShellFileList(root)
text = Text(root, height=5)
text.tag_add(SEL, "1.0", END)
text.tag_remove(SEL, "1.0", END)
button = Button(root, text="Show GrepDialog", command=show_grep_dialog)
if __name__ == "__main__":
unittest.main('idlelib.idle_test.test_grep', verbosity=2, exit=False)
from idlelib.idle_test.htest import run