gitk: use config variables to define and load a theme

gitk uses themed tk, but has no capability to alter the theme defined by Tk. While there are documented ways to install other themes, and to make one the default, these methods are obscure at best. Instead, let's offer two config variables: - theme this is the name of the theme to use, and must be available. - themeloader - this is the full pathname of a tcl script that will load one or more themes into the Tk namespace. By default, theme is set to the theme active when Tk is started, and themeloader = {}. These variables must be defined to something else to have any user visible effect. Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>

Mark Levedahl committed Sep 22, 2025 at 10:36 UTC 8ccb2d4a762a0ea39c7f1df0712efbab3b7a4883
1 file changed +15 -1
gitk
+15 -1
@@ -2215,6 +2215,7 @@ proc setoptions {} {
2215 }
2216
2217 proc setttkstyle {} {
2218 + global theme
2219 eval font configure TkDefaultFont [fontflags mainfont]
2220 eval font configure TkTextFont [fontflags textfont]
2221 eval font configure TkHeadingFont [fontflags mainfont]
@@ -2224,6 +2225,10 @@ proc setttkstyle {} {
2225 eval font configure TkIconFont [fontflags uifont]
2226 eval font configure TkMenuFont [fontflags uifont]
2227 eval font configure TkSmallCaptionFont [fontflags uifont]
2228 +
2229 + if {[catch {ttk::style theme use $theme} err]} {
2230 + set theme [ttk::style theme use]
2231 + }
2232 }
2233
2234 # Make a menu and submenus.
@@ -12618,6 +12623,9 @@ set circleoutlinecolor $fgcolor
12623 set foundbgcolor yellow
12624 set currentsearchhitbgcolor orange
12625
12626 +set theme [ttk::style theme use]
12627 +set themeloader {}
12628 +
12629 # button for popping up context menus
12630 if {[tk windowingsystem] eq "aqua" && [package vcompare $::tcl_version 8.7] < 0} {
12631 set ctxbut <Button-2>
@@ -12701,6 +12709,8 @@ set config_variables {
12709 tagfgcolor
12710 tagoutlinecolor
12711 textfont
12712 + theme
12713 + themeloader
12714 uicolor
12715 uifgcolor
12716 uifgdisabledcolor
@@ -12800,7 +12810,10 @@ set nullid "0000000000000000000000000000000000000000"
12810 set nullid2 "0000000000000000000000000000000000000001"
12811 set nullfile "/dev/null"
12812
12803 -setttkstyle
12813 +if {[file exists $themeloader]} {
12814 + source $themeloader
12815 +}
12816 +
12817 set appname "gitk"
12818
12819 set runq {}
@@ -12916,6 +12929,7 @@ if {[tk windowingsystem] eq "win32"} {
12929 focus -force .
12930 }
12931
12932 +setttkstyle
12933 set_gui_colors
12934
12935 getcommits {}