--- I hacked somehow around this. It seems that just usilg the anchor mark should be enough to implement almost the same behavior. The hard part is that I don't know which feature is intentional and which is just random consequence of using sel for search highlight. One thing which seems to me important and not possible to implement without using another mask or tag is to return currentsearchhit back when user removes characters from the end of search string, and it starts to match previous places. This is not intended as patch for merging, just proof of concept. gitk-git/gitk | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/gitk-git/gitk b/gitk-git/gitk index cf25472..c8b223f 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -8320,24 +8320,29 @@ proc settabs {{firstab {}}} { proc incrsearch {name ix op} { global ctext searchstring searchdirn - if {[catch {$ctext index anchor}]} { + if {[catch {set prev_anchor [$ctext index anchor]}]} { # no anchor set, use start of selection, or of visible area set sel [$ctext tag ranges sel] if {$sel ne {}} { - $ctext mark set anchor [lindex $sel 0] + set start [lindex $sel 0] } elseif {$searchdirn eq "-forwards"} { - $ctext mark set anchor @0,0 + set start @0,0 + } else { + set start @0,[winfo height $ctext] + } + } else { + if {$searchdirn eq "-forwards"} { + set start $prev_anchor } else { - $ctext mark set anchor @0,[winfo height $ctext] + set start "$prev_anchor + [string length $searchstring] c" } } if {$searchstring ne {}} { - set here [$ctext search -count mlen $searchdirn -- $searchstring anchor] + set here [$ctext search -count mlen $searchdirn -- $searchstring $start] if {$here ne {}} { $ctext see $here set mend "$here + $mlen c" - $ctext tag remove sel 1.0 end - $ctext tag add sel $here $mend + $ctext mark set anchor $here suppress_highlighting_file_for_current_scrollpos highlightfile_for_scrollpos $here } @@ -8355,7 +8360,7 @@ proc dosearch {} { set sel [$ctext tag ranges sel] if {$sel ne {}} { set start "[lindex $sel 0] + 1c" - } elseif {[catch {set start [$ctext index anchor]}]} { + } elseif {[catch {set start "[$ctext index anchor] + 1c"}]} { set start "@0,0" } set match [$ctext search -count mlen -- $searchstring $start] @@ -8368,8 +8373,7 @@ proc dosearch {} { suppress_highlighting_file_for_current_scrollpos highlightfile_for_scrollpos $match set mend "$match + $mlen c" - $ctext tag add sel $match $mend - $ctext mark unset anchor + $ctext mark set anchor $match rehighlight_search_results } } @@ -8397,8 +8401,7 @@ proc dosearchback {} { suppress_highlighting_file_for_current_scrollpos highlightfile_for_scrollpos $match set mend "$match + $ml c" - $ctext tag add sel $match $mend - $ctext mark unset anchor + $ctext mark set anchor $match rehighlight_search_results } } @@ -8418,14 +8421,15 @@ proc searchmark {first last} { global ctext searchstring puts [list $first $last] - set sel [$ctext tag ranges sel] + #TODO: catch no anchor + set anchor [$ctext index anchor] set mend $first.0 while {1} { set match [$ctext search -count mlen -- $searchstring $mend $last.end] if {$match eq {}} break set mend "$match + $mlen c" - if {$sel ne {} && [$ctext compare $match == [lindex $sel 0]]} { + if {$anchor eq $match} { $ctext tag add currentsearchhit $match $mend } else { $ctext tag add found $match $mend -- 1.8.4.2.1566.g3c1a064 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html