Merge gitk changes from Paul Mackerras at git://ozlabs.org/~paulus/gitk

* git://ozlabs.org/~paulus/gitk:
  gitk: Teach gitk to respect log.showroot
  gitk: Add menu items for comparing a commit with the marked commit
  gitk: Speed up resolution of short SHA1 ids
  gitk: Use symbolic font names "sans" and "monospace" when available
  gitk: Skip over AUTHOR/COMMIT_DATE when searching all fields
  gitk: Make "git describe" output clickable, too
  gitk: Fix the display of files when filtered by path
  gitk: Use a tabbed dialog to edit preferences
  gitk: Use "gitk: repo-top-level-dir" as window title
This commit is contained in:
Junio C Hamano 2012-03-24 01:30:30 -07:00
Родитель c16df57c5a b2b76d1069
Коммит b476064544
1 изменённых файлов: 278 добавлений и 126 удалений

Просмотреть файл

@ -14,6 +14,35 @@ proc hasworktree {} {
[exec git rev-parse --is-inside-git-dir] == "false"}] [exec git rev-parse --is-inside-git-dir] == "false"}]
} }
proc reponame {} {
global gitdir
set n [file normalize $gitdir]
if {[string match "*/.git" $n]} {
set n [string range $n 0 end-5]
}
return [file tail $n]
}
proc gitworktree {} {
variable _gitworktree
if {[info exists _gitworktree]} {
return $_gitworktree
}
# v1.7.0 introduced --show-toplevel to return the canonical work-tree
if {[catch {set _gitworktree [exec git rev-parse --show-toplevel]}]} {
# try to set work tree from environment, core.worktree or use
# cdup to obtain a relative path to the top of the worktree. If
# run from the top, the ./ prefix ensures normalize expands pwd.
if {[catch { set _gitworktree $env(GIT_WORK_TREE) }]} {
catch {set _gitworktree [exec git config --get core.worktree]}
if {$_gitworktree eq ""} {
set _gitworktree [file normalize ./[exec git rev-parse --show-cdup]]
}
}
}
return $_gitworktree
}
# A simple scheduler for compute-intensive stuff. # A simple scheduler for compute-intensive stuff.
# The aim is to make sure that event handlers for GUI actions can # The aim is to make sure that event handlers for GUI actions can
# run at least every 50-100 ms. Unfortunately fileevent handlers are # run at least every 50-100 ms. Unfortunately fileevent handlers are
@ -612,12 +641,16 @@ proc varcinit {view} {
proc resetvarcs {view} { proc resetvarcs {view} {
global varcid varccommits parents children vseedcount ordertok global varcid varccommits parents children vseedcount ordertok
global vshortids
foreach vid [array names varcid $view,*] { foreach vid [array names varcid $view,*] {
unset varcid($vid) unset varcid($vid)
unset children($vid) unset children($vid)
unset parents($vid) unset parents($vid)
} }
foreach vid [array names vshortids $view,*] {
unset vshortids($vid)
}
# some commits might have children but haven't been seen yet # some commits might have children but haven't been seen yet
foreach vid [array names children $view,*] { foreach vid [array names children $view,*] {
unset children($vid) unset children($vid)
@ -904,7 +937,7 @@ proc fix_reversal {p a v} {
proc insertrow {id p v} { proc insertrow {id p v} {
global cmitlisted children parents varcid varctok vtokmod global cmitlisted children parents varcid varctok vtokmod
global varccommits ordertok commitidx numcommits curview global varccommits ordertok commitidx numcommits curview
global targetid targetrow global targetid targetrow vshortids
readcommit $id readcommit $id
set vid $v,$id set vid $v,$id
@ -913,6 +946,7 @@ proc insertrow {id p v} {
set parents($vid) [list $p] set parents($vid) [list $p]
set a [newvarc $v $id] set a [newvarc $v $id]
set varcid($vid) $a set varcid($vid) $a
lappend vshortids($v,[string range $id 0 3]) $id
if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} { if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} {
modify_arc $v $a modify_arc $v $a
} }
@ -1368,7 +1402,7 @@ proc getcommitlines {fd inst view updating} {
global commitidx commitdata vdatemode global commitidx commitdata vdatemode
global parents children curview hlview global parents children curview hlview
global idpending ordertok global idpending ordertok
global varccommits varcid varctok vtokmod vfilelimit global varccommits varcid varctok vtokmod vfilelimit vshortids
set stuff [read $fd 500000] set stuff [read $fd 500000]
# git log doesn't terminate the last commit with a null... # git log doesn't terminate the last commit with a null...
@ -1468,6 +1502,8 @@ proc getcommitlines {fd inst view updating} {
set id [lindex $ids 0] set id [lindex $ids 0]
set vid $view,$id set vid $view,$id
lappend vshortids($view,[string range $id 0 3]) $id
if {!$listed && $updating && ![info exists varcid($vid)] && if {!$listed && $updating && ![info exists varcid($vid)] &&
$vfilelimit($view) ne {}} { $vfilelimit($view) ne {}} {
# git log doesn't rewrite parents for unlisted commits # git log doesn't rewrite parents for unlisted commits
@ -1690,11 +1726,26 @@ proc getcommit {id} {
# and are present in the current view. # and are present in the current view.
# This is fairly slow... # This is fairly slow...
proc longid {prefix} { proc longid {prefix} {
global varcid curview global varcid curview vshortids
set ids {} set ids {}
foreach match [array names varcid "$curview,$prefix*"] { if {[string length $prefix] >= 4} {
lappend ids [lindex [split $match ","] 1] set vshortid $curview,[string range $prefix 0 3]
if {[info exists vshortids($vshortid)]} {
foreach id $vshortids($vshortid) {
if {[string match "$prefix*" $id]} {
if {[lsearch -exact $ids $id] < 0} {
lappend ids $id
if {[llength $ids] >= 2} break
}
}
}
}
} else {
foreach match [array names varcid "$curview,$prefix*"] {
lappend ids [lindex [split $match ","] 1]
if {[llength $ids] >= 2} break
}
} }
return $ids return $ids
} }
@ -2491,6 +2542,8 @@ proc makewindow {} {
{mc "Return to mark" command gotomark} {mc "Return to mark" command gotomark}
{mc "Find descendant of this and mark" command find_common_desc} {mc "Find descendant of this and mark" command find_common_desc}
{mc "Compare with marked commit" command compare_commits} {mc "Compare with marked commit" command compare_commits}
{mc "Diff this -> marked commit" command {diffvsmark 0}}
{mc "Diff marked commit -> this" command {diffvsmark 1}}
} }
$rowctxmenu configure -tearoff 0 $rowctxmenu configure -tearoff 0
@ -2499,6 +2552,8 @@ proc makewindow {} {
{mc "Diff this -> selected" command {diffvssel 0}} {mc "Diff this -> selected" command {diffvssel 0}}
{mc "Diff selected -> this" command {diffvssel 1}} {mc "Diff selected -> this" command {diffvssel 1}}
{mc "Make patch" command mkpatch} {mc "Make patch" command mkpatch}
{mc "Diff this -> marked commit" command {diffvsmark 0}}
{mc "Diff marked commit -> this" command {diffvsmark 1}}
} }
$fakerowmenu configure -tearoff 0 $fakerowmenu configure -tearoff 0
@ -4630,8 +4685,9 @@ proc askfindhighlight {row id} {
} }
set info $commitinfo($id) set info $commitinfo($id)
set isbold 0 set isbold 0
set fldtypes [list [mc Headline] [mc Author] [mc Date] [mc Committer] [mc CDate] [mc Comments]] set fldtypes [list [mc Headline] [mc Author] "" [mc Committer] "" [mc Comments]]
foreach f $info ty $fldtypes { foreach f $info ty $fldtypes {
if {$ty eq ""} continue
if {($findloc eq [mc "All fields"] || $findloc eq $ty) && if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
[doesmatch $f]} { [doesmatch $f]} {
if {$ty eq [mc "Author"]} { if {$ty eq [mc "Author"]} {
@ -6492,7 +6548,7 @@ proc findmore {} {
if {![info exists find_dirn]} { if {![info exists find_dirn]} {
return 0 return 0
} }
set fldtypes [list [mc "Headline"] [mc "Author"] [mc "Date"] [mc "Committer"] [mc "CDate"] [mc "Comments"]] set fldtypes [list [mc "Headline"] [mc "Author"] "" [mc "Committer"] "" [mc "Comments"]]
set l $findcurline set l $findcurline
set moretodo 0 set moretodo 0
if {$find_dirn > 0} { if {$find_dirn > 0} {
@ -6553,6 +6609,7 @@ proc findmore {} {
} }
set info $commitinfo($id) set info $commitinfo($id)
foreach f $info ty $fldtypes { foreach f $info ty $fldtypes {
if {$ty eq ""} continue
if {($findloc eq [mc "All fields"] || $findloc eq $ty) && if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
[doesmatch $f]} { [doesmatch $f]} {
set found 1 set found 1
@ -6705,7 +6762,7 @@ proc appendwithlinks {text tags} {
set start [$ctext index "end - 1c"] set start [$ctext index "end - 1c"]
$ctext insert end $text $tags $ctext insert end $text $tags
set links [regexp -indices -all -inline {\m[0-9a-f]{6,40}\M} $text] set links [regexp -indices -all -inline {(?:\m|-g)[0-9a-f]{6,40}\M} $text]
foreach l $links { foreach l $links {
set s [lindex $l 0] set s [lindex $l 0]
set e [lindex $l 1] set e [lindex $l 1]
@ -6721,6 +6778,10 @@ proc appendwithlinks {text tags} {
proc setlink {id lk} { proc setlink {id lk} {
global curview ctext pendinglinks global curview ctext pendinglinks
if {[string range $id 0 1] eq "-g"} {
set id [string range $id 2 end]
}
set known 0 set known 0
if {[string length $id] < 40} { if {[string length $id] < 40} {
set matches [longid $id] set matches [longid $id]
@ -7393,19 +7454,15 @@ proc startdiff {ids} {
} }
} }
# If the filename (name) is under any of the passed filter paths
# then return true to include the file in the listing.
proc path_filter {filter name} { proc path_filter {filter name} {
set worktree [gitworktree]
foreach p $filter { foreach p $filter {
set l [string length $p] set fq_p [file normalize $p]
if {[string index $p end] eq "/"} { set fq_n [file normalize [file join $worktree $name]]
if {[string compare -length $l $p $name] == 0} { if {[string match [file normalize $fq_p]* $fq_n]} {
return 1 return 1
}
} else {
if {[string compare -length $l $p $name] == 0 &&
([string length $name] == $l ||
[string index $name $l] eq "/")} {
return 1
}
} }
} }
return 0 return 0
@ -7419,7 +7476,7 @@ proc addtocflist {ids} {
} }
proc diffcmd {ids flags} { proc diffcmd {ids flags} {
global nullid nullid2 global log_showroot nullid nullid2
set i [lsearch -exact $ids $nullid] set i [lsearch -exact $ids $nullid]
set j [lsearch -exact $ids $nullid2] set j [lsearch -exact $ids $nullid2]
@ -7453,6 +7510,9 @@ proc diffcmd {ids flags} {
lappend cmd HEAD lappend cmd HEAD
} }
} else { } else {
if {$log_showroot} {
lappend flags --root
}
set cmd [concat | git diff-tree -r $flags $ids] set cmd [concat | git diff-tree -r $flags $ids]
} }
return $cmd return $cmd
@ -8442,6 +8502,11 @@ proc rowmenu {x y id} {
} else { } else {
set state normal set state normal
} }
if {[info exists markedid] && $markedid ne $id} {
set mstate normal
} else {
set mstate disabled
}
if {$id ne $nullid && $id ne $nullid2} { if {$id ne $nullid && $id ne $nullid2} {
set menu $rowctxmenu set menu $rowctxmenu
if {$mainhead ne {}} { if {$mainhead ne {}} {
@ -8449,21 +8514,17 @@ proc rowmenu {x y id} {
} else { } else {
$menu entryconfigure 7 -label [mc "Detached head: can't reset" $mainhead] -state disabled $menu entryconfigure 7 -label [mc "Detached head: can't reset" $mainhead] -state disabled
} }
if {[info exists markedid] && $markedid ne $id} { $menu entryconfigure 9 -state $mstate
$menu entryconfigure 9 -state normal $menu entryconfigure 10 -state $mstate
$menu entryconfigure 10 -state normal $menu entryconfigure 11 -state $mstate
$menu entryconfigure 11 -state normal
} else {
$menu entryconfigure 9 -state disabled
$menu entryconfigure 10 -state disabled
$menu entryconfigure 11 -state disabled
}
} else { } else {
set menu $fakerowmenu set menu $fakerowmenu
} }
$menu entryconfigure [mca "Diff this -> selected"] -state $state $menu entryconfigure [mca "Diff this -> selected"] -state $state
$menu entryconfigure [mca "Diff selected -> this"] -state $state $menu entryconfigure [mca "Diff selected -> this"] -state $state
$menu entryconfigure [mca "Make patch"] -state $state $menu entryconfigure [mca "Make patch"] -state $state
$menu entryconfigure [mca "Diff this -> marked commit"] -state $mstate
$menu entryconfigure [mca "Diff marked commit -> this"] -state $mstate
tk_popup $menu $x $y tk_popup $menu $x $y
} }
@ -8667,6 +8728,21 @@ proc diffvssel {dirn} {
doseldiff $oldid $newid doseldiff $oldid $newid
} }
proc diffvsmark {dirn} {
global rowmenuid markedid
if {![info exists markedid]} return
if {$dirn} {
set oldid $markedid
set newid $rowmenuid
} else {
set oldid $rowmenuid
set newid $markedid
}
addtohistory [list doseldiff $oldid $newid] savectextpos
doseldiff $oldid $newid
}
proc doseldiff {oldid newid} { proc doseldiff {oldid newid} {
global ctext global ctext
global commitinfo global commitinfo
@ -10773,6 +10849,139 @@ proc chg_fontparam {v sub op} {
font config sample -$sub $fontparam($sub) font config sample -$sub $fontparam($sub)
} }
# Create a property sheet tab page
proc create_prefs_page {w} {
global NS
set parent [join [lrange [split $w .] 0 end-1] .]
if {[winfo class $parent] eq "TNotebook"} {
${NS}::frame $w
} else {
${NS}::labelframe $w
}
}
proc prefspage_general {notebook} {
global NS maxwidth maxgraphpct showneartags showlocalchanges
global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
global hideremotes want_ttk have_ttk
set page [create_prefs_page $notebook.general]
${NS}::label $page.ldisp -text [mc "Commit list display options"]
grid $page.ldisp - -sticky w -pady 10
${NS}::label $page.spacer -text " "
${NS}::label $page.maxwidthl -text [mc "Maximum graph width (lines)"]
spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w
${NS}::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"]
spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
grid x $page.maxpctl $page.maxpct -sticky w
${NS}::checkbutton $page.showlocal -text [mc "Show local changes"] \
-variable showlocalchanges
grid x $page.showlocal -sticky w
${NS}::checkbutton $page.autoselect -text [mc "Auto-select SHA1 (length)"] \
-variable autoselect
spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen
grid x $page.autoselect $page.autosellen -sticky w
${NS}::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \
-variable hideremotes
grid x $page.hideremotes -sticky w
${NS}::label $page.ddisp -text [mc "Diff display options"]
grid $page.ddisp - -sticky w -pady 10
${NS}::label $page.tabstopl -text [mc "Tab spacing"]
spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
grid x $page.tabstopl $page.tabstop -sticky w
${NS}::checkbutton $page.ntag -text [mc "Display nearby tags"] \
-variable showneartags
grid x $page.ntag -sticky w
${NS}::checkbutton $page.ldiff -text [mc "Limit diffs to listed paths"] \
-variable limitdiffs
grid x $page.ldiff -sticky w
${NS}::checkbutton $page.lattr -text [mc "Support per-file encodings"] \
-variable perfile_attrs
grid x $page.lattr -sticky w
${NS}::entry $page.extdifft -textvariable extdifftool
${NS}::frame $page.extdifff
${NS}::label $page.extdifff.l -text [mc "External diff tool" ]
${NS}::button $page.extdifff.b -text [mc "Choose..."] -command choose_extdiff
pack $page.extdifff.l $page.extdifff.b -side left
pack configure $page.extdifff.l -padx 10
grid x $page.extdifff $page.extdifft -sticky ew
${NS}::label $page.lgen -text [mc "General options"]
grid $page.lgen - -sticky w -pady 10
${NS}::checkbutton $page.want_ttk -variable want_ttk \
-text [mc "Use themed widgets"]
if {$have_ttk} {
${NS}::label $page.ttk_note -text [mc "(change requires restart)"]
} else {
${NS}::label $page.ttk_note -text [mc "(currently unavailable)"]
}
grid x $page.want_ttk $page.ttk_note -sticky w
return $page
}
proc prefspage_colors {notebook} {
global NS uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
set page [create_prefs_page $notebook.colors]
${NS}::label $page.cdisp -text [mc "Colors: press to choose"]
grid $page.cdisp - -sticky w -pady 10
label $page.ui -padx 40 -relief sunk -background $uicolor
${NS}::button $page.uibut -text [mc "Interface"] \
-command [list choosecolor uicolor {} $page.ui [mc "interface"] setui]
grid x $page.uibut $page.ui -sticky w
label $page.bg -padx 40 -relief sunk -background $bgcolor
${NS}::button $page.bgbut -text [mc "Background"] \
-command [list choosecolor bgcolor {} $page.bg [mc "background"] setbg]
grid x $page.bgbut $page.bg -sticky w
label $page.fg -padx 40 -relief sunk -background $fgcolor
${NS}::button $page.fgbut -text [mc "Foreground"] \
-command [list choosecolor fgcolor {} $page.fg [mc "foreground"] setfg]
grid x $page.fgbut $page.fg -sticky w
label $page.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0]
${NS}::button $page.diffoldbut -text [mc "Diff: old lines"] \
-command [list choosecolor diffcolors 0 $page.diffold [mc "diff old lines"] \
[list $ctext tag conf d0 -foreground]]
grid x $page.diffoldbut $page.diffold -sticky w
label $page.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1]
${NS}::button $page.diffnewbut -text [mc "Diff: new lines"] \
-command [list choosecolor diffcolors 1 $page.diffnew [mc "diff new lines"] \
[list $ctext tag conf dresult -foreground]]
grid x $page.diffnewbut $page.diffnew -sticky w
label $page.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2]
${NS}::button $page.hunksepbut -text [mc "Diff: hunk header"] \
-command [list choosecolor diffcolors 2 $page.hunksep \
[mc "diff hunk header"] \
[list $ctext tag conf hunksep -foreground]]
grid x $page.hunksepbut $page.hunksep -sticky w
label $page.markbgsep -padx 40 -relief sunk -background $markbgcolor
${NS}::button $page.markbgbut -text [mc "Marked line bg"] \
-command [list choosecolor markbgcolor {} $page.markbgsep \
[mc "marked line background"] \
[list $ctext tag conf omark -background]]
grid x $page.markbgbut $page.markbgsep -sticky w
label $page.selbgsep -padx 40 -relief sunk -background $selectbgcolor
${NS}::button $page.selbgbut -text [mc "Select bg"] \
-command [list choosecolor selectbgcolor {} $page.selbgsep [mc "background"] setselbg]
grid x $page.selbgbut $page.selbgsep -sticky w
return $page
}
proc prefspage_fonts {notebook} {
global NS
set page [create_prefs_page $notebook.fonts]
${NS}::label $page.cfont -text [mc "Fonts: press to choose"]
grid $page.cfont - -sticky w -pady 10
mkfontdisp mainfont $page [mc "Main font"]
mkfontdisp textfont $page [mc "Diff display font"]
mkfontdisp uifont $page [mc "User interface font"]
return $page
}
proc doprefs {} { proc doprefs {} {
global maxwidth maxgraphpct use_ttk NS global maxwidth maxgraphpct use_ttk NS
global oldprefs prefstop showneartags showlocalchanges global oldprefs prefstop showneartags showlocalchanges
@ -10793,106 +11002,37 @@ proc doprefs {} {
ttk_toplevel $top ttk_toplevel $top
wm title $top [mc "Gitk preferences"] wm title $top [mc "Gitk preferences"]
make_transient $top . make_transient $top .
${NS}::label $top.ldisp -text [mc "Commit list display options"]
grid $top.ldisp - -sticky w -pady 10
${NS}::label $top.spacer -text " "
${NS}::label $top.maxwidthl -text [mc "Maximum graph width (lines)"]
spinbox $top.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
grid $top.spacer $top.maxwidthl $top.maxwidth -sticky w
${NS}::label $top.maxpctl -text [mc "Maximum graph width (% of pane)"]
spinbox $top.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
grid x $top.maxpctl $top.maxpct -sticky w
${NS}::checkbutton $top.showlocal -text [mc "Show local changes"] \
-variable showlocalchanges
grid x $top.showlocal -sticky w
${NS}::checkbutton $top.autoselect -text [mc "Auto-select SHA1 (length)"] \
-variable autoselect
spinbox $top.autosellen -from 1 -to 40 -width 4 -textvariable autosellen
grid x $top.autoselect $top.autosellen -sticky w
${NS}::checkbutton $top.hideremotes -text [mc "Hide remote refs"] \
-variable hideremotes
grid x $top.hideremotes -sticky w
${NS}::label $top.ddisp -text [mc "Diff display options"] if {[set use_notebook [expr {$use_ttk && [info command ::ttk::notebook] ne ""}]]} {
grid $top.ddisp - -sticky w -pady 10 set notebook [ttk::notebook $top.notebook]
${NS}::label $top.tabstopl -text [mc "Tab spacing"]
spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
grid x $top.tabstopl $top.tabstop -sticky w
${NS}::checkbutton $top.ntag -text [mc "Display nearby tags"] \
-variable showneartags
grid x $top.ntag -sticky w
${NS}::checkbutton $top.ldiff -text [mc "Limit diffs to listed paths"] \
-variable limitdiffs
grid x $top.ldiff -sticky w
${NS}::checkbutton $top.lattr -text [mc "Support per-file encodings"] \
-variable perfile_attrs
grid x $top.lattr -sticky w
${NS}::entry $top.extdifft -textvariable extdifftool
${NS}::frame $top.extdifff
${NS}::label $top.extdifff.l -text [mc "External diff tool" ]
${NS}::button $top.extdifff.b -text [mc "Choose..."] -command choose_extdiff
pack $top.extdifff.l $top.extdifff.b -side left
pack configure $top.extdifff.l -padx 10
grid x $top.extdifff $top.extdifft -sticky ew
${NS}::label $top.lgen -text [mc "General options"]
grid $top.lgen - -sticky w -pady 10
${NS}::checkbutton $top.want_ttk -variable want_ttk \
-text [mc "Use themed widgets"]
if {$have_ttk} {
${NS}::label $top.ttk_note -text [mc "(change requires restart)"]
} else { } else {
${NS}::label $top.ttk_note -text [mc "(currently unavailable)"] set notebook [${NS}::frame $top.notebook -borderwidth 0 -relief flat]
} }
grid x $top.want_ttk $top.ttk_note -sticky w
${NS}::label $top.cdisp -text [mc "Colors: press to choose"] lappend pages [prefspage_general $notebook] [mc "General"]
grid $top.cdisp - -sticky w -pady 10 lappend pages [prefspage_colors $notebook] [mc "Colors"]
label $top.ui -padx 40 -relief sunk -background $uicolor lappend pages [prefspage_fonts $notebook] [mc "Fonts"]
${NS}::button $top.uibut -text [mc "Interface"] \ foreach {page title} $pages {
-command [list choosecolor uicolor {} $top.ui [mc "interface"] setui] if {$use_notebook} {
grid x $top.uibut $top.ui -sticky w $notebook add $page -text $title
label $top.bg -padx 40 -relief sunk -background $bgcolor } else {
${NS}::button $top.bgbut -text [mc "Background"] \ set btn [${NS}::button $notebook.b_[string map {. X} $page] \
-command [list choosecolor bgcolor {} $top.bg [mc "background"] setbg] -text $title -command [list raise $page]]
grid x $top.bgbut $top.bg -sticky w $page configure -text $title
label $top.fg -padx 40 -relief sunk -background $fgcolor grid $btn -row 0 -column [incr col] -sticky w
${NS}::button $top.fgbut -text [mc "Foreground"] \ grid $page -row 1 -column 0 -sticky news -columnspan 100
-command [list choosecolor fgcolor {} $top.fg [mc "foreground"] setfg] }
grid x $top.fgbut $top.fg -sticky w }
label $top.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0]
${NS}::button $top.diffoldbut -text [mc "Diff: old lines"] \
-command [list choosecolor diffcolors 0 $top.diffold [mc "diff old lines"] \
[list $ctext tag conf d0 -foreground]]
grid x $top.diffoldbut $top.diffold -sticky w
label $top.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1]
${NS}::button $top.diffnewbut -text [mc "Diff: new lines"] \
-command [list choosecolor diffcolors 1 $top.diffnew [mc "diff new lines"] \
[list $ctext tag conf dresult -foreground]]
grid x $top.diffnewbut $top.diffnew -sticky w
label $top.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2]
${NS}::button $top.hunksepbut -text [mc "Diff: hunk header"] \
-command [list choosecolor diffcolors 2 $top.hunksep \
[mc "diff hunk header"] \
[list $ctext tag conf hunksep -foreground]]
grid x $top.hunksepbut $top.hunksep -sticky w
label $top.markbgsep -padx 40 -relief sunk -background $markbgcolor
${NS}::button $top.markbgbut -text [mc "Marked line bg"] \
-command [list choosecolor markbgcolor {} $top.markbgsep \
[mc "marked line background"] \
[list $ctext tag conf omark -background]]
grid x $top.markbgbut $top.markbgsep -sticky w
label $top.selbgsep -padx 40 -relief sunk -background $selectbgcolor
${NS}::button $top.selbgbut -text [mc "Select bg"] \
-command [list choosecolor selectbgcolor {} $top.selbgsep [mc "background"] setselbg]
grid x $top.selbgbut $top.selbgsep -sticky w
${NS}::label $top.cfont -text [mc "Fonts: press to choose"] if {!$use_notebook} {
grid $top.cfont - -sticky w -pady 10 grid columnconfigure $notebook 0 -weight 1
mkfontdisp mainfont $top [mc "Main font"] grid rowconfigure $notebook 1 -weight 1
mkfontdisp textfont $top [mc "Diff display font"] raise [lindex $pages 0]
mkfontdisp uifont $top [mc "User interface font"] }
grid $notebook -sticky news -padx 2 -pady 2
grid rowconfigure $top 0 -weight 1
grid columnconfigure $top 0 -weight 1
${NS}::frame $top.buts ${NS}::frame $top.buts
${NS}::button $top.buts.ok -text [mc "OK"] -command prefsok -default active ${NS}::button $top.buts.ok -text [mc "OK"] -command prefsok -default active
@ -10904,7 +11044,7 @@ proc doprefs {} {
grid columnconfigure $top.buts 1 -weight 1 -uniform a grid columnconfigure $top.buts 1 -weight 1 -uniform a
grid $top.buts - - -pady 10 -sticky ew grid $top.buts - - -pady 10 -sticky ew
grid columnconfigure $top 2 -weight 1 grid columnconfigure $top 2 -weight 1
bind $top <Visibility> "focus $top.buts.ok" bind $top <Visibility> [list focus $top.buts.ok]
} }
proc choose_extdiff {} { proc choose_extdiff {} {
@ -11422,10 +11562,20 @@ catch {
} }
} }
set log_showroot true
catch {
set log_showroot [exec git config --bool --get log.showroot]
}
if {[tk windowingsystem] eq "aqua"} { if {[tk windowingsystem] eq "aqua"} {
set mainfont {{Lucida Grande} 9} set mainfont {{Lucida Grande} 9}
set textfont {Monaco 9} set textfont {Monaco 9}
set uifont {{Lucida Grande} 9 bold} set uifont {{Lucida Grande} 9 bold}
} elseif {![catch {::tk::pkgconfig get fontsystem} xft] && $xft eq "xft"} {
# fontconfig!
set mainfont {sans 9}
set textfont {monospace 9}
set uifont {sans 9 bold}
} else { } else {
set mainfont {Helvetica 9} set mainfont {Helvetica 9}
set textfont {Courier 9} set textfont {Courier 9}
@ -11607,6 +11757,8 @@ if {[package vcompare $git_version "1.6.6.2"] >= 0} {
set show_notes "--show-notes" set show_notes "--show-notes"
} }
set appname "gitk"
set runq {} set runq {}
set history {} set history {}
set historyindex 0 set historyindex 0
@ -11676,7 +11828,7 @@ catch {
} }
# wait for the window to become visible # wait for the window to become visible
tkwait visibility . tkwait visibility .
wm title . "[file tail $argv0]: [file tail [pwd]]" wm title . "$appname: [reponame]"
update update
readrefs readrefs