Subject: [PATCH] diff.tcl: fixed alignment of tabs in git-gui diff by using spaces

From: "Chris Idema via GitGitGadget" <[email-masked]>
Date: Mon, 26 Jan 2026 10:45:01 +0000

From: Chris Idema <[email-masked]>

Tabs were not properly rendered in TK regardless of tab width settings.
Converting tab alignment to spaces before rendering in TK fixes this.
Does not fix alignment issues in gitk.

Signed-off-by: Chris Idema <[email-masked]>
---
    diff.tcl: Fixed alignment of tabs in git-gui diff by using spaces.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2179%2FChrisIdema%2Ffix-gitgui-diff-tab-alignment-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2179/ChrisIdema/fix-gitgui-diff-tab-alignment-v1
Pull-Request: https://github.com/git/git/pull/2179

 git-gui/lib/diff.tcl | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl
index 442737ba4f..2e13f8c776 100644
--- a/git-gui/lib/diff.tcl
+++ b/git-gui/lib/diff.tcl
@@ -12,6 +12,27 @@ proc apply_tab_size {{firsttab {}}} {
 	}
 }
 
+proc expand_tabs {line {startcol -1}} {
+	# startcol set to -1, because in preview the lines start with a '+', '-', or ' '
+	global repo_config
+
+	set col $startcol
+	set out ""
+
+	foreach char [split $line ""] {
+		if {$char eq "\t"} {
+			set spaces [expr {$repo_config(gui.tabsize) - ($col % $repo_config(gui.tabsize))}]
+			append out [string repeat " " $spaces]
+			incr col $spaces
+		} else {
+			append out $char
+			incr col
+		}
+	}
+
+	return $out
+}
+
 proc clear_diff {} {
 	global ui_diff current_diff_path current_diff_header
 	global ui_index ui_workdir
@@ -495,7 +516,9 @@ proc read_diff {fd conflict_size cont_info} {
 			}
 		}
 		set mark [$ui_diff index "end - 1 line linestart"]
-		$ui_diff insert end $line $tags
+		set line [expand_tabs $line]
+		$ui_diff insert end "$line" $tags
+
 		if {[string index $line end] eq "\r"} {
 			$ui_diff tag add d_cr {end - 2c}
 		}

base-commit: 1faf5b085a171f9ba9a6d7a446e0de16acccb1dc
-- 
gitgitgadget