git-gui i18n: mark "usage:" strings for translation
[gitweb.git] / lib / search.tcl
index fe165724ed3ed8c5645dae327208013d0e2c340c..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,10 +26,20 @@ 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]
@@ -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,10 +166,10 @@ 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
@@ -169,6 +182,9 @@ method _incrsearch {} {
                        #$w.ent configure -background lightpink
                        $w.ent state pressed
                }
+       } elseif {$smartcase} {
+               # clearing the field resets the smart case detection
+               set casesensitive 0
        }
 }