---

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to