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 {}