field ctext
field searchstring {}
-field casesensitive 1
+field regexpsearch
+field default_regexpsearch
+field casesensitive
+field default_casesensitive
field searchdirn -forwards
field smarktop
field smarkbot
constructor new {i_w i_text args} {
+ global use_ttk NS
set w $i_w
set ctext $i_text
- frame $w
- label $w.l -text [mc Find:]
- button $w.bn -text [mc Next] -command [cb find_next]
- button $w.bp -text [mc Prev] -command [cb find_prev]
- checkbutton $w.cs -text [mc Case-Sensitive] \
- -variable ${__this}::casesensitive -command [cb _incrsearch]
+ set default_regexpsearch [is_config_true gui.search.regexp]
+ if {[is_config_true gui.search.smartcase]} {
+ set default_casesensitive 0
+ } else {
+ set default_casesensitive 1
+ }
+
+ ${NS}::frame $w
+ ${NS}::label $w.l -text [mc Find:]
entry $w.ent -textvariable ${__this}::searchstring -background lightgreen
+ ${NS}::button $w.bn -text [mc Next] -command [cb find_next]
+ ${NS}::button $w.bp -text [mc Prev] -command [cb find_prev]
+ ${NS}::checkbutton $w.re -text [mc RegExp] \
+ -variable ${__this}::regexpsearch -command [cb _incrsearch]
+ ${NS}::checkbutton $w.cs -text [mc Case] \
+ -variable ${__this}::casesensitive -command [cb _incrsearch]
pack $w.l -side left
pack $w.cs -side right
+ pack $w.re -side right
pack $w.bp -side right
pack $w.bn -side right
pack $w.ent -side left -expand 1 -fill x
grid remove $w
trace add variable searchstring write [cb _incrsearch_cb]
+ bind $w.ent <Return> [cb find_next]
+ bind $w.ent <Shift-Return> [cb find_prev]
- bind $w <Destroy> [cb delete_this]
+ bind $w <Destroy> [list delete_this $this]
return $this
}
method show {} {
- if {![winfo ismapped $w]} {
+ if {![visible $this]} {
grid $w
+ set regexpsearch $default_regexpsearch
+ set casesensitive $default_casesensitive
}
focus -force $w.ent
}
method hide {} {
- if {[winfo ismapped $w]} {
+ if {[visible $this]} {
focus $ctext
grid remove $w
}
}
+method visible {} {
+ return [winfo ismapped $w]
+}
+
+method editor {} {
+ return $w.ent
+}
+
method _get_new_anchor {} {
# use start of selection if it is visible,
# or the bounds of the visible area
upvar $mlenvar mlen
lappend cmd -count mlen
}
+ if {$regexpsearch} {
+ lappend cmd -regexp
+ }
if {!$casesensitive} {
lappend cmd -nocase
}
if {[catch {$ctext index anchor}]} {
$ctext mark set anchor [_get_new_anchor $this]
}
+ if {[regexp {[[:upper:]]} $searchstring]} {
+ set casesensitive 1
+ }
if {$searchstring ne {}} {
set here [_do_search $this anchor mlen]
if {$here ne {}} {
}
}
-}
\ No newline at end of file
+}