git-gui: Improve the coloring in blame viewer

The git-gui blame viewer has always been ugly as s**t.  Linus Torvalds
suggested the coloring scheme I'm using here, which is two different
shades of grey for the background colors, and black text on a pale green
background for the currently selected/focused commit.

The difference is a massive improvement.  The interface no longer will
cause seizures in people who are prone to that sort of thing.  It no
longer uses a very offensive hot pink.  The green being current actually
makes sense.  And not having the background of the other non-current
lines change when you change the current commit is really a big deal.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce
2007-06-01 00:38:31 -04:00
parent bea39c2ddb
commit f96cd7b6c9

View File

@ -31,6 +31,12 @@ field r_orig_line ; # original line number
field r_final_line ; # final line number field r_final_line ; # final line number
field r_line_count ; # lines in this region field r_line_count ; # lines in this region
variable active_color #98e1a0
variable group_colors {
#cbcbcb
#e1e1e1
}
constructor new {i_commit i_path} { constructor new {i_commit i_path} {
set commit $i_commit set commit $i_commit
set path $i_path set path $i_path
@ -143,9 +149,6 @@ constructor new {i_commit i_path} {
$w_load \ $w_load \
$w_line \ $w_line \
$w_file] { $w_file] {
$i tag conf in_sel \
-background [$i cget -foreground] \
-foreground [$i cget -background]
$i conf -yscrollcommand \ $i conf -yscrollcommand \
[list many2scrollbar [list \ [list many2scrollbar [list \
$w_cgrp \ $w_cgrp \
@ -235,6 +238,8 @@ method _read_file {fd} {
} ifdeleted { catch {close $fd} } } ifdeleted { catch {close $fd} }
method _read_blame {fd} { method _read_blame {fd} {
variable group_colors
$w_cgrp conf -state normal $w_cgrp conf -state normal
while {[gets $fd line] >= 0} { while {[gets $fd line] >= 0} {
if {[regexp {^([a-z0-9]{40}) (\d+) (\d+) (\d+)$} $line line \ if {[regexp {^([a-z0-9]{40}) (\d+) (\d+) (\d+)$} $line line \
@ -245,15 +250,14 @@ method _read_blame {fd} {
set r_line_count $line_count set r_line_count $line_count
if {[catch {set g $order($cmit)}]} { if {[catch {set g $order($cmit)}]} {
$w_cgrp tag conf g$cmit set bg [lindex $group_colors 0]
$w_line tag conf g$cmit set group_colors [lrange $group_colors 1 end]
$w_file tag conf g$cmit lappend group_colors $bg
$w_cgrp tag raise in_sel $w_cgrp tag conf g$cmit -background $bg
$w_line tag raise in_sel $w_line tag conf g$cmit -background $bg
$w_file tag raise in_sel $w_file tag conf g$cmit -background $bg
$w_file tag raise sel
set order($cmit) $commit_count set order($cmit) $commit_count
incr commit_count incr commit_count
lappend commit_list $cmit lappend commit_list $cmit
@ -273,6 +277,10 @@ method _read_blame {fd} {
$w_cgrp tag remove g$g $lno.0 $lno_e $w_cgrp tag remove g$g $lno.0 $lno_e
$w_line tag remove g$g $lno.0 $lno_e $w_line tag remove g$g $lno.0 $lno_e
$w_file tag remove g$g $lno.0 $lno_e $w_file tag remove g$g $lno.0 $lno_e
$w_cgrp tag remove a$g $lno.0 $lno_e
$w_line tag remove a$g $lno.0 $lno_e
$w_file tag remove a$g $lno.0 $lno_e
} }
set line_commit($lno) $cmit set line_commit($lno) $cmit
@ -285,6 +293,10 @@ method _read_blame {fd} {
$w_line tag add g$cmit $lno.0 $lno_e $w_line tag add g$cmit $lno.0 $lno_e
$w_file tag add g$cmit $lno.0 $lno_e $w_file tag add g$cmit $lno.0 $lno_e
$w_cgrp tag add a$cmit $lno.0 $lno_e
$w_line tag add a$cmit $lno.0 $lno_e
$w_file tag add a$cmit $lno.0 $lno_e
if {$highlight_line == -1} { if {$highlight_line == -1} {
if {[lindex [$w_file yview] 0] == 0} { if {[lindex [$w_file yview] 0] == 0} {
$w_file see $lno.0 $w_file see $lno.0
@ -332,40 +344,18 @@ method _status {} {
method _click {cur_w pos} { method _click {cur_w pos} {
set lno [lindex [split [$cur_w index $pos] .] 0] set lno [lindex [split [$cur_w index $pos] .] 0]
if {$lno eq {}} return if {$lno eq {}} return
set lno_e "$lno.0 + 1 line"
$w_cgrp tag remove in_sel 0.0 end
$w_line tag remove in_sel 0.0 end
$w_file tag remove in_sel 0.0 end
$w_cgrp tag add in_sel $lno.0 $lno_e
$w_line tag add in_sel $lno.0 $lno_e
$w_file tag add in_sel $lno.0 $lno_e
_showcommit $this $lno _showcommit $this $lno
} }
variable blame_colors {
#ff4040
#ff40ff
#4040ff
}
method _showcommit {lno} { method _showcommit {lno} {
global repo_config global repo_config
variable blame_colors variable active_color
if {$highlight_commit ne {}} { if {$highlight_commit ne {}} {
set idx $order($highlight_commit) set cmit $highlight_commit
set i 0 $w_cgrp tag conf a$cmit -background {}
foreach c $blame_colors { $w_line tag conf a$cmit -background {}
set h [lindex $commit_list [expr {$idx - 1 + $i}]] $w_file tag conf a$cmit -background {}
$w_cgrp tag conf g$h -background white
$w_line tag conf g$h -background white
$w_file tag conf g$h -background white
incr i
}
} }
$w_cmit conf -state normal $w_cmit conf -state normal
@ -374,15 +364,9 @@ method _showcommit {lno} {
set cmit {} set cmit {}
$w_cmit insert end "Loading annotation..." $w_cmit insert end "Loading annotation..."
} else { } else {
set idx $order($cmit) $w_cgrp tag conf a$cmit -background $active_color
set i 0 $w_line tag conf a$cmit -background $active_color
foreach c $blame_colors { $w_file tag conf a$cmit -background $active_color
set h [lindex $commit_list [expr {$idx - 1 + $i}]]
$w_cgrp tag conf g$h -background $c
$w_line tag conf g$h -background $c
$w_file tag conf g$h -background $c
incr i
}
set author_name {} set author_name {}
set author_email {} set author_email {}