]> git.ipfire.org Git - thirdparty/git.git/commitdiff
gitk: use config variables to define and load a theme
authorMark Levedahl <mlevedahl@gmail.com>
Mon, 22 Sep 2025 14:36:41 +0000 (10:36 -0400)
committerMark Levedahl <mlevedahl@gmail.com>
Tue, 30 Sep 2025 00:53:21 +0000 (20:53 -0400)
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>
gitk

diff --git a/gitk b/gitk
index 796933670a95e344f13bc21244a4d40e5f82edfa..1f601153cb127d1c98d6ccb858d23d1ef5bad7a2 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -2215,6 +2215,7 @@ proc setoptions {} {
 }
 
 proc setttkstyle {} {
+    global theme
     eval font configure TkDefaultFont [fontflags mainfont]
     eval font configure TkTextFont [fontflags textfont]
     eval font configure TkHeadingFont [fontflags mainfont]
@@ -2224,6 +2225,10 @@ proc setttkstyle {} {
     eval font configure TkIconFont    [fontflags uifont]
     eval font configure TkMenuFont    [fontflags uifont]
     eval font configure TkSmallCaptionFont [fontflags uifont]
+
+    if {[catch {ttk::style theme use $theme} err]} {
+        set theme [ttk::style theme use]
+    }
 }
 
 # Make a menu and submenus.
@@ -12618,6 +12623,9 @@ set circleoutlinecolor $fgcolor
 set foundbgcolor yellow
 set currentsearchhitbgcolor orange
 
+set theme [ttk::style theme use]
+set themeloader {}
+
 # button for popping up context menus
 if {[tk windowingsystem] eq "aqua" && [package vcompare $::tcl_version 8.7] < 0} {
     set ctxbut <Button-2>
@@ -12701,6 +12709,8 @@ set config_variables {
     tagfgcolor
     tagoutlinecolor
     textfont
+    theme
+    themeloader
     uicolor
     uifgcolor
     uifgdisabledcolor
@@ -12800,7 +12810,10 @@ set nullid "0000000000000000000000000000000000000000"
 set nullid2 "0000000000000000000000000000000000000001"
 set nullfile "/dev/null"
 
-setttkstyle
+if {[file exists $themeloader]} {
+    source $themeloader
+}
+
 set appname "gitk"
 
 set runq {}
@@ -12916,6 +12929,7 @@ if {[tk windowingsystem] eq "win32"} {
     focus -force .
 }
 
+setttkstyle
 set_gui_colors
 
 getcommits {}