git-gui: use a tristate to control the case mode in the searchbar

The config is now called gui.search.case and can have the three values:
no/yes/smart. yes is the default.

It also resets the case detection in smart mode, when the entry field was
cleared by the use.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
maint
Bert Wesarg 2011-10-20 21:27:27 +02:00 committed by Pat Thoyts
parent 508dee31f3
commit f9ace9e63d
1 changed files with 17 additions and 7 deletions

View File

@ -26,11 +26,20 @@ constructor new {i_w i_text args} {
set ctext $i_text

set default_regexpsearch [is_config_true gui.search.regexp]
set smartcase [is_config_true gui.search.smartcase]
if {$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]
@ -157,12 +166,10 @@ method _incrsearch {} {
if {[catch {$ctext index anchor}]} {
$ctext mark set anchor [_get_new_anchor $this]
}
if {$smartcase} {
if {[regexp {[[:upper:]]} $searchstring]} {
if {$searchstring ne {}} {
if {$smartcase && [regexp {[[:upper:]]} $searchstring]} {
set casesensitive 1
}
}
if {$searchstring ne {}} {
set here [_do_search $this anchor mlen]
if {$here ne {}} {
$ctext see $here
@ -175,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
}
}