This commit is contained in:
Junio C Hamano 2005-11-27 14:42:15 -08:00
commit 56fc631939

88
gitk
View File

@ -19,7 +19,7 @@ proc gitdir {} {
proc getcommits {rargs} { proc getcommits {rargs} {
global commits commfd phase canv mainfont env global commits commfd phase canv mainfont env
global startmsecs nextupdate ncmupdate global startmsecs nextupdate ncmupdate
global ctext maincursor textcursor leftover global ctext maincursor textcursor leftover gitencoding
# check that we can find a .git directory somewhere... # check that we can find a .git directory somewhere...
set gitdir [gitdir] set gitdir [gitdir]
@ -30,7 +30,7 @@ proc getcommits {rargs} {
set commits {} set commits {}
set phase getcommits set phase getcommits
set startmsecs [clock clicks -milliseconds] set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100] set nextupdate [expr {$startmsecs + 100}]
set ncmupdate 1 set ncmupdate 1
if [catch { if [catch {
set parse_args [concat --default HEAD $rargs] set parse_args [concat --default HEAD $rargs]
@ -49,7 +49,7 @@ proc getcommits {rargs} {
exit 1 exit 1
} }
set leftover {} set leftover {}
fconfigure $commfd -blocking 0 -translation lf fconfigure $commfd -blocking 0 -translation lf -encoding $gitencoding
fileevent $commfd readable [list getcommitlines $commfd] fileevent $commfd readable [list getcommitlines $commfd]
$canv delete all $canv delete all
$canv create text 3 3 -anchor nw -text "Reading commits..." \ $canv create text 3 3 -anchor nw -text "Reading commits..." \
@ -74,9 +74,9 @@ proc getcommitlines {commfd} {
} }
if {[string range $err 0 4] == "usage"} { if {[string range $err 0 4] == "usage"} {
set err \ set err \
{Gitk: error reading commits: bad arguments to git-rev-list. "Gitk: error reading commits: bad arguments to git-rev-list.\
(Note: arguments to gitk are passed to git-rev-list (Note: arguments to gitk are passed to git-rev-list\
to allow selection of commits to be displayed.)} to allow selection of commits to be displayed.)"
} else { } else {
set err "Error reading commits: $err" set err "Error reading commits: $err"
} }
@ -310,10 +310,10 @@ proc makewindow {} {
. configure -menu .bar . configure -menu .bar
if {![info exists geometry(canv1)]} { if {![info exists geometry(canv1)]} {
set geometry(canv1) [expr 45 * $charspc] set geometry(canv1) [expr {45 * $charspc}]
set geometry(canv2) [expr 30 * $charspc] set geometry(canv2) [expr {30 * $charspc}]
set geometry(canv3) [expr 15 * $charspc] set geometry(canv3) [expr {15 * $charspc}]
set geometry(canvh) [expr 25 * $linespc + 4] set geometry(canvh) [expr {25 * $linespc + 4}]
set geometry(ctextw) 80 set geometry(ctextw) 80
set geometry(ctexth) 30 set geometry(ctexth) 30
set geometry(cflistw) 30 set geometry(cflistw) 30
@ -548,10 +548,10 @@ proc savestuff {w} {
puts $f [list set maxwidth $maxwidth] puts $f [list set maxwidth $maxwidth]
puts $f "set geometry(width) [winfo width .ctop]" puts $f "set geometry(width) [winfo width .ctop]"
puts $f "set geometry(height) [winfo height .ctop]" puts $f "set geometry(height) [winfo height .ctop]"
puts $f "set geometry(canv1) [expr [winfo width $canv]-2]" puts $f "set geometry(canv1) [expr {[winfo width $canv]-2}]"
puts $f "set geometry(canv2) [expr [winfo width $canv2]-2]" puts $f "set geometry(canv2) [expr {[winfo width $canv2]-2}]"
puts $f "set geometry(canv3) [expr [winfo width $canv3]-2]" puts $f "set geometry(canv3) [expr {[winfo width $canv3]-2}]"
puts $f "set geometry(canvh) [expr [winfo height $canv]-2]" puts $f "set geometry(canvh) [expr {[winfo height $canv]-2}]"
set wid [expr {([winfo width $ctext] - 8) \ set wid [expr {([winfo width $ctext] - 8) \
/ [font measure $textfont "0"]}] / [font measure $textfont "0"]}]
puts $f "set geometry(ctextw) $wid" puts $f "set geometry(ctextw) $wid"
@ -580,12 +580,12 @@ proc resizeclistpanes {win w} {
set sash0 30 set sash0 30
} }
if {$sash1 < $sash0 + 20} { if {$sash1 < $sash0 + 20} {
set sash1 [expr $sash0 + 20] set sash1 [expr {$sash0 + 20}]
} }
if {$sash1 > $w - 10} { if {$sash1 > $w - 10} {
set sash1 [expr $w - 10] set sash1 [expr {$w - 10}]
if {$sash0 > $sash1 - 20} { if {$sash0 > $sash1 - 20} {
set sash0 [expr $sash1 - 20] set sash0 [expr {$sash1 - 20}]
} }
} }
} }
@ -608,7 +608,7 @@ proc resizecdetpanes {win w} {
set sash0 45 set sash0 45
} }
if {$sash0 > $w - 15} { if {$sash0 > $w - 15} {
set sash0 [expr $w - 15] set sash0 [expr {$w - 15}]
} }
} }
$win sash place 0 $sash0 [lindex $s0 1] $win sash place 0 $sash0 [lindex $s0 1]
@ -819,9 +819,9 @@ proc drawcommitline {level} {
} }
set x [xcoord $level $level $lineno] set x [xcoord $level $level $lineno]
set y1 $canvy set y1 $canvy
set canvy [expr $canvy + $linespc] set canvy [expr {$canvy + $linespc}]
allcanvs conf -scrollregion \ allcanvs conf -scrollregion \
[list 0 0 0 [expr $y1 + 0.5 * $linespc + 2]] [list 0 0 0 [expr {$y1 + 0.5 * $linespc + 2}]]
if {[info exists mainline($id)]} { if {[info exists mainline($id)]} {
lappend mainline($id) $x $y1 lappend mainline($id) $x $y1
if {$mainlinearrow($id) ne "none"} { if {$mainlinearrow($id) ne "none"} {
@ -830,8 +830,8 @@ proc drawcommitline {level} {
} }
drawlines $id 0 0 drawlines $id 0 0
set orad [expr {$linespc / 3}] set orad [expr {$linespc / 3}]
set t [$canv create oval [expr $x - $orad] [expr $y1 - $orad] \ set t [$canv create oval [expr {$x - $orad}] [expr {$y1 - $orad}] \
[expr $x + $orad - 1] [expr $y1 + $orad - 1] \ [expr {$x + $orad - 1}] [expr {$y1 + $orad - 1}] \
-fill $ofill -outline black -width 1] -fill $ofill -outline black -width 1]
$canv raise $t $canv raise $t
$canv bind $t <1> {selcanvline {} %x %y} $canv bind $t <1> {selcanvline {} %x %y}
@ -886,8 +886,8 @@ proc drawtags {id x xt y1} {
} }
set delta [expr {int(0.5 * ($linespc - $lthickness))}] set delta [expr {int(0.5 * ($linespc - $lthickness))}]
set yt [expr $y1 - 0.5 * $linespc] set yt [expr {$y1 - 0.5 * $linespc}]
set yb [expr $yt + $linespc - 1] set yb [expr {$yt + $linespc - 1}]
set xvals {} set xvals {}
set wvals {} set wvals {}
foreach tag $marks { foreach tag $marks {
@ -900,12 +900,12 @@ proc drawtags {id x xt y1} {
-width $lthickness -fill black -tags tag.$id] -width $lthickness -fill black -tags tag.$id]
$canv lower $t $canv lower $t
foreach tag $marks x $xvals wid $wvals { foreach tag $marks x $xvals wid $wvals {
set xl [expr $x + $delta] set xl [expr {$x + $delta}]
set xr [expr $x + $delta + $wid + $lthickness] set xr [expr {$x + $delta + $wid + $lthickness}]
if {[incr ntags -1] >= 0} { if {[incr ntags -1] >= 0} {
# draw a tag # draw a tag
set t [$canv create polygon $x [expr $yt + $delta] $xl $yt \ set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \
$xr $yt $xr $yb $xl $yb $x [expr $yb - $delta] \ $xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \
-width 1 -outline black -fill yellow -tags tag.$id] -width 1 -outline black -fill yellow -tags tag.$id]
$canv bind $t <1> [list showtag $tag 1] $canv bind $t <1> [list showtag $tag 1]
set rowtextx($idline($id)) [expr {$xr + $linespc}] set rowtextx($idline($id)) [expr {$xr + $linespc}]
@ -916,7 +916,7 @@ proc drawtags {id x xt y1} {
} else { } else {
set col "#ddddff" set col "#ddddff"
} }
set xl [expr $xl - $delta/2] set xl [expr {$xl - $delta/2}]
$canv create polygon $x $yt $xr $yt $xr $yb $x $yb \ $canv create polygon $x $yt $xr $yt $xr $yb $x $yb \
-width 1 -outline black -fill $col -tags tag.$id -width 1 -outline black -fill $col -tags tag.$id
} }
@ -1491,7 +1491,7 @@ proc drawgraph {} {
if {$displayorder == {}} return if {$displayorder == {}} return
set startmsecs [clock clicks -milliseconds] set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100] set nextupdate [expr {$startmsecs + 100}]
set ncmupdate 1 set ncmupdate 1
initgraph initgraph
foreach id $displayorder { foreach id $displayorder {
@ -1520,7 +1520,7 @@ proc drawrest {} {
} }
drawmore 0 drawmore 0
set phase {} set phase {}
set drawmsecs [expr [clock clicks -milliseconds] - $startmsecs] set drawmsecs [expr {[clock clicks -milliseconds] - $startmsecs}]
#puts "overall $drawmsecs ms for $numcommits commits" #puts "overall $drawmsecs ms for $numcommits commits"
if {$redisplaying} { if {$redisplaying} {
if {$stopped == 0 && [info exists selectedline]} { if {$stopped == 0 && [info exists selectedline]} {
@ -1548,8 +1548,8 @@ proc findmatches {f} {
set matches {} set matches {}
set i 0 set i 0
while {[set j [string first $foundstring $str $i]] >= 0} { while {[set j [string first $foundstring $str $i]] >= 0} {
lappend matches [list $j [expr $j+$foundstrlen-1]] lappend matches [list $j [expr {$j+$foundstrlen-1}]]
set i [expr $j + $foundstrlen] set i [expr {$j + $foundstrlen}]
} }
} }
return $matches return $matches
@ -1630,7 +1630,7 @@ proc findselectline {l} {
set matches [findmatches $f] set matches [findmatches $f]
foreach match $matches { foreach match $matches {
set start [lindex $match 0] set start [lindex $match 0]
set end [expr [lindex $match 1] + 1] set end [expr {[lindex $match 1] + 1}]
$ctext tag add found "1.0 + $start c" "1.0 + $end c" $ctext tag add found "1.0 + $start c" "1.0 + $end c"
} }
} }
@ -1984,9 +1984,10 @@ proc markmatches {canv l str tag matches font} {
set start [lindex $match 0] set start [lindex $match 0]
set end [lindex $match 1] set end [lindex $match 1]
if {$start > $end} continue if {$start > $end} continue
set xoff [font measure $font [string range $str 0 [expr $start-1]]] set xoff [font measure $font [string range $str 0 [expr {$start-1}]]]
set xlen [font measure $font [string range $str 0 [expr $end]]] set xlen [font measure $font [string range $str 0 [expr {$end}]]]
set t [$canv create rect [expr $x0+$xoff] $y0 [expr $x0+$xlen+2] $y1 \ set t [$canv create rect [expr {$x0+$xoff}] $y0 \
[expr {$x0+$xlen+2}] $y1 \
-outline {} -tags matches -fill yellow] -outline {} -tags matches -fill yellow]
$canv lower $t $canv lower $t
} }
@ -2078,8 +2079,8 @@ proc selectline {l isnew} {
set ytop [expr {$y - $linespc - 1}] set ytop [expr {$y - $linespc - 1}]
set ybot [expr {$y + $linespc + 1}] set ybot [expr {$y + $linespc + 1}]
set wnow [$canv yview] set wnow [$canv yview]
set wtop [expr [lindex $wnow 0] * $ymax] set wtop [expr {[lindex $wnow 0] * $ymax}]
set wbot [expr [lindex $wnow 1] * $ymax] set wbot [expr {[lindex $wnow 1] * $ymax}]
set wh [expr {$wbot - $wtop}] set wh [expr {$wbot - $wtop}]
set newtop $wtop set newtop $wtop
if {$ytop < $wtop} { if {$ytop < $wtop} {
@ -2105,7 +2106,7 @@ proc selectline {l isnew} {
if {$newtop < 0} { if {$newtop < 0} {
set newtop 0 set newtop 0
} }
allcanvs yview moveto [expr $newtop * 1.0 / $ymax] allcanvs yview moveto [expr {$newtop * 1.0 / $ymax}]
} }
if {$isnew} { if {$isnew} {
@ -2173,7 +2174,7 @@ proc selectline {l isnew} {
proc selnextline {dir} { proc selnextline {dir} {
global selectedline global selectedline
if {![info exists selectedline]} return if {![info exists selectedline]} return
set l [expr $selectedline + $dir] set l [expr {$selectedline + $dir}]
unmarkmatches unmarkmatches
selectline $l 1 selectline $l 1
} }
@ -2966,8 +2967,8 @@ proc setcoords {} {
set linespc [font metrics $mainfont -linespace] set linespc [font metrics $mainfont -linespace]
set charspc [font measure $mainfont "m"] set charspc [font measure $mainfont "m"]
set canvy0 [expr 3 + 0.5 * $linespc] set canvy0 [expr {3 + 0.5 * $linespc}]
set canvx0 [expr 3 + 0.5 * $linespc] set canvx0 [expr {3 + 0.5 * $linespc}]
set lthickness [expr {int($linespc / 9) + 1}] set lthickness [expr {int($linespc / 9) + 1}]
set xspc1(0) $linespc set xspc1(0) $linespc
set xspc2 $linespc set xspc2 $linespc
@ -3657,6 +3658,7 @@ set datemode 0
set boldnames 0 set boldnames 0
set diffopts "-U 5 -p" set diffopts "-U 5 -p"
set wrcomcmd "git-diff-tree --stdin -p --pretty" set wrcomcmd "git-diff-tree --stdin -p --pretty"
set gitencoding "utf-8"
set mainfont {Helvetica 9} set mainfont {Helvetica 9}
set textfont {Courier 9} set textfont {Courier 9}