from SearchDialogBase
import SearchDialogBase
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
)
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 OutputWindow
import OutputWindow
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
)
block
= f
.readlines(100000)
sys
.stdout
.write("%s: %s: %s\n" % (fn
, lineno
, line
))
print "Found", hits
, "hit%s." % s
print "(Hint: right-click to open locations.)"
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):