git-gui i18n: mark "usage:" strings for translation
[gitweb.git] / lib / search.tcl
index 15f99d8e5f1d968b23eb2b01d43af21188f8ffe8..ef1e55521d7cea10e280f720ad700a4cd4b71d65 100644 (file)
@@ -11,6 +11,7 @@ field regexpsearch
 field default_regexpsearch
 field casesensitive
 field default_casesensitive
+field smartcase
 field searchdirn     -forwards
 
 field history
@@ -25,17 +26,27 @@ constructor new {i_w i_text args} {
        set ctext  $i_text
 
        set default_regexpsearch [is_config_true gui.search.regexp]
-       if {[is_config_true gui.search.smartcase]} {
+       switch -- [get_config gui.search.case] {
+       no {
                set default_casesensitive 0
-       } else {
+               set smartcase 0
+       }
+       smart {
+               set default_casesensitive 0
+               set smartcase 1
+       }
+       yes -
+       default {
                set default_casesensitive 1
+               set smartcase 0
+       }
        }
 
        set history [list]
 
        ${NS}::frame  $w
        ${NS}::label  $w.l       -text [mc Find:]
-       entry  $w.ent -textvariable ${__this}::searchstring -background lightgreen
+       tentry  $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] \
@@ -133,14 +144,16 @@ method _do_search {start {mlenvar {}} {dir {}} {endbound {}}} {
                set dir $searchdirn
        }
        lappend cmd $dir -- $searchstring
-       if {$endbound ne {}} {
-               set here [eval $cmd [list $start] [list $endbound]]
-       } else {
-               set here [eval $cmd [list $start]]
-               if {$here eq {}} {
-                       set here [eval $cmd [_get_wrap_anchor $this $dir]]
+       if {[catch {
+               if {$endbound ne {}} {
+                       set here [eval $cmd [list $start] [list $endbound]]
+               } else {
+                       set here [eval $cmd [list $start]]
+                       if {$here eq {}} {
+                               set here [eval $cmd [_get_wrap_anchor $this $dir]]
+                       }
                }
-       }
+       } err]} { set here {} }
        return $here
 }
 
@@ -153,20 +166,25 @@ method _incrsearch {} {
        if {[catch {$ctext index anchor}]} {
                $ctext mark set anchor [_get_new_anchor $this]
        }
-       if {[regexp {[[:upper:]]} $searchstring]} {
-               set casesensitive 1
-       }
        if {$searchstring ne {}} {
+               if {$smartcase && [regexp {[[:upper:]]} $searchstring]} {
+                       set casesensitive 1
+               }
                set here [_do_search $this anchor mlen]
                if {$here ne {}} {
                        $ctext see $here
                        $ctext tag remove sel 1.0 end
                        $ctext tag add sel $here "$here + $mlen c"
-                       $w.ent configure -background lightgreen
+                       #$w.ent configure -background lightgreen
+                       $w.ent state !pressed
                        _set_marks $this 1
                } else {
-                       $w.ent configure -background lightpink
+                       #$w.ent configure -background lightpink
+                       $w.ent state pressed
                }
+       } elseif {$smartcase} {
+               # clearing the field resets the smart case detection
+               set casesensitive 0
        }
 }