# search.tcl --
#
# This demonstration script creates a collection of widgets that
# allow you to load a file into a text widget, then perform searches
# on that file.
#
# SCCS: @(#) search.tcl 1.4 96/02/16 10:49:12
# textLoadFile --
# This procedure below loads a file into a text widget, discarding
# the previous contents of the widget. Tags for the old widget are
# not affected, however.
#
# Arguments:
# w - The window into which to load the file. Must be a
# text widget.
# file - The name of the file to load. Must be readable.
set f [open $file]
while {![eof $f]} {
}
close $f
}
# textSearch --
# Search for all instances of a given string in a text widget and
# apply a given tag to each instance found.
#
# Arguments:
# w - The window in which to search. Must be a text widget.
# string - The string to search for. The search is done using
# exact matching only; no special characters.
# tag - Tag to apply to each instance of a matching string.
if {$string == ""} {
return
}
set cur 1.0
while 1 {
break
}
}
}
# textToggle --
# This procedure is invoked repeatedly to invoke two commands at
# periodic intervals. It normally reschedules itself after each
# execution but if an error occurs (e.g. because the window was
# deleted) then it doesn't reschedule itself.
#
# Arguments:
# cmd1 - Command to execute when procedure is called.
# sleep1 - Ms to sleep after executing cmd1 before executing cmd2.
# cmd2 - Command to execute in the *next* invocation of this
# procedure.
# sleep2 - Ms to sleep after executing cmd2 before executing cmd1 again.
catch {
eval $cmd1
}
}
catch {destroy $w}
toplevel $w
frame $w.file
button $w.file.button -text "Load File" \
-command "textLoadFile $w.text \$fileName"
textLoadFile $w.text \$fileName
focus $w.string.entry
"
focus $w.file.entry
frame $w.string
button $w.string.button -text "Highlight" \
-command "textSearch $w.text \$searchString search"
# Set up display styles for text highlighting.
textToggle "$w.text tag configure search -background \
search -background {} -foreground {}" 200
} else {
textToggle "$w.text tag configure search -background \
search -background {} -foreground {}" 200
}
set fileName ""
set searchString ""