The pattern of maintaining blame command and collecting output can be reused for searching of latest change to region. It still can use the blame's global variables, because the two search commands should not run concurrently as well as two instances of blame. Signed-off-by: Max Kirillov <max@xxxxxxxxxx> --- gitk | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/gitk b/gitk index 7699a66..eef88a1 100755 --- a/gitk +++ b/gitk @@ -3771,7 +3771,7 @@ proc external_blame {parent_idx {line {}}} { } proc show_line_source {} { - global cmitmode currentid parents curview blamestuff blameinst + global cmitmode currentid parents curview global diff_menu_line diff_menu_filebase flist_menu_file global nullid nullid2 gitdir cdup @@ -3827,6 +3827,12 @@ proc show_line_source {} { lappend blameargs $id } lappend blameargs -- [file join $cdup $flist_menu_file] + startblaming $blameargs read_line_source +} + +proc startblaming {blameargs blamecommand} { + global blamestuff blameinst + if {[catch { set f [open $blameargs r] } err]} { @@ -3838,7 +3844,7 @@ proc show_line_source {} { set i [reg_instance $f] set blamestuff {} set blameinst $i - filerun $f [list read_line_source $f $i] + filerun $f [list blameiocallback $f $i $blamecommand] } proc stopblaming {} { @@ -3852,8 +3858,8 @@ proc stopblaming {} { } } -proc read_line_source {fd inst} { - global blamestuff curview commfd blameinst nullid nullid2 +proc blameiocallback {fd inst blamecommand} { + global blamestuff blameinst commfd while {[gets $fd line] >= 0} { lappend blamestuff $line @@ -3871,6 +3877,14 @@ proc read_line_source {fd inst} { return 0 } + $blamecommand + unset blamestuff + return 0 +} + +proc read_line_source {} { + global blamestuff curview nullid nullid2 + set fname {} set line [split [lindex $blamestuff 0] " "] set id [lindex $line 0] @@ -3901,7 +3915,6 @@ proc read_line_source {fd inst} { } else { puts "oops couldn't parse git blame output" } - unset blamestuff return 0 } -- 1.8.5.2.421.g4cdf8d0 -- 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