# [PATCH 0/2] gitk: fix mix of tabs and spaces in indentation

9 messages from 2020-09-10 to 2020-10-03. Participants: Denton Liu, Paul Mackerras.
Thread: https://gitlist.dev/t/54220

## Denton Liu, 2020-09-10 08:27

Subject: [PATCH 0/2] gitk: fix mix of tabs and spaces in indentation
Message-ID: <cover.1599726439.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/cover.1599726439.git.liu.denton%40gmail.com

```
The source code of gitk has some funny indentation. It uses four spaces
per level indent but uses tabs every other level (eight spaces).
Reindent gitk to just use tabs instead.

This series should be empty with `--ignore-all-space`.

Denton Liu (2):
  gitk: replace spaces with tabs
  gitk: manually fix whitespace errors

 gitk | 20404 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 10202 insertions(+), 10202 deletions(-)

-- 
2.28.0.618.gf4bc123cb7


```

## Denton Liu, 2020-09-10 08:27

Subject: [PATCH 2/2] gitk: manually fix whitespace errors
Message-ID: <1b577821168c824f81bb0229efeea2e28536254c.1599726439.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/1b577821168c824f81bb0229efeea2e28536254c.1599726439.git.liu.denton%40gmail.com
In-Reply-To: <cover.1599726439.git.liu.denton@gmail.com>

```
The previous commit mechanically converted four-space indents into tabs,
introducing many whitespace errors. Manually fix these whitespace
errors. This was done by finding offending lines using a Python
script[0] and manually correcting them by comparing to the original
version.

If the lines were originally aligned with the line above, keep the
alignment. Otherwise, if it's a line continuation, default to two
tabs.

This patch should be empty with `--ignore-all-space`.

[0]:
	import sys

	tab_level = 0
	for lineno, line in enumerate(sys.stdin, 1):
	    line = line.rstrip()
	    if not line:
		continue
	    tab_stripped = line.lstrip('\t')
	    new_tab_level = len(line) - len(tab_stripped)
	    if new_tab_level - tab_level > 1:
		print('more than one tab:', lineno)
		continue
	    tab_level = new_tab_level
	    space_stripped = tab_stripped.lstrip(' ')
	    if len(tab_stripped) > len(space_stripped):
		print('tabs and spaces mixed:', lineno)
		continue

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 gitk | 274 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 137 insertions(+), 137 deletions(-)

diff --git a/gitk b/gitk
index 7efb106e52..60c1e45325 100755
--- a/gitk
+++ b/gitk
@@ -11,7 +11,7 @@ package require Tk
 
 proc hasworktree {} {
 	return [expr {[exec git rev-parse --is-bare-repository] == "false" &&
-				  [exec git rev-parse --is-inside-git-dir] == "false"}]
+		      [exec git rev-parse --is-inside-git-dir] == "false"}]
 }
 
 proc reponame {} {
@@ -391,10 +391,10 @@ proc start_rev_list {view} {
 			global nr_unmerged
 			if {$nr_unmerged == 0} {
 				error_popup [mc "No files selected: --merge specified but\
-							 no files are unmerged."]
+					     no files are unmerged."]
 			} else {
 				error_popup [mc "No files selected: --merge specified but\
-							 no unmerged files are within file limit."]
+					     no unmerged files are within file limit."]
 			}
 			return 0
 		}
@@ -413,7 +413,7 @@ proc start_rev_list {view} {
 
 	if {[catch {
 		set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-						--parents --boundary $args "--" $files] r]
+				--parents --boundary $args "--" $files] r]
 	} err]} {
 		error_popup "[mc "Error executing git log:"] $err"
 		return 0
@@ -561,7 +561,7 @@ proc updatecommits {} {
 	}
 	if {[catch {
 		set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-						--parents --boundary $args "--" $vfilelimit($view)] r]
+				--parents --boundary $args "--" $vfilelimit($view)] r]
 	} err]} {
 		error_popup "[mc "Error executing git log:"] $err"
 		return
@@ -834,7 +834,7 @@ proc renumbervarc {a v} {
 		set id [lindex $varcstart($v) $a]
 		if {[llength $children($v,$id)] > 1} {
 			set children($v,$id) [lsort -command [list vtokcmp $v] \
-									  $children($v,$id)]
+					$children($v,$id)]
 		}
 		set oldtok [lindex $varctok($v) $a]
 		if {!$vdatemode($v)} {
@@ -900,7 +900,7 @@ proc renumbervarc {a v} {
 				set b [lindex $vleftptr($v) $c]
 			}
 			while {$b != 0 && \
-					  [string compare $tok [lindex $varctok($v) $b]] >= 0} {
+					[string compare $tok [lindex $varctok($v) $b]] >= 0} {
 				set c $b
 				set b [lindex $vleftptr($v) $c]
 			}
@@ -921,7 +921,7 @@ proc renumbervarc {a v} {
 	foreach id [array names sortkids] {
 		if {[llength $children($v,$id)] > 1} {
 			set children($v,$id) [lsort -command [list vtokcmp $v] \
-									  $children($v,$id)]
+					$children($v,$id)]
 		}
 	}
 	set t2 [clock clicks -milliseconds]
@@ -941,8 +941,8 @@ proc fix_reversal {p a v} {
 	}
 	# seeds always need to be renumbered
 	if {[lindex $vupptr($v) $pa] == 0 ||
-		[string compare [lindex $varctok($v) $a] \
-			 [lindex $varctok($v) $pa]] > 0} {
+			[string compare [lindex $varctok($v) $a] \
+			[lindex $varctok($v) $pa]] > 0} {
 		renumbervarc $pa $v
 	}
 }
@@ -1090,7 +1090,7 @@ proc vtokcmp {v a b} {
 	global varctok varcid
 
 	return [string compare [lindex $varctok($v) $varcid($v,$a)] \
-				[lindex $varctok($v) $varcid($v,$b)]]
+			[lindex $varctok($v) $varcid($v,$b)]]
 }
 
 # This assumes that if lim is not given, the caller has checked that
@@ -1237,7 +1237,7 @@ proc comes_before {a b} {
 	}
 	if {$varcid($v,$a) != $varcid($v,$b)} {
 		return [expr {[string compare [lindex $varctok($v) $varcid($v,$a)] \
-						   [lindex $varctok($v) $varcid($v,$b)]] < 0}]
+				[lindex $varctok($v) $varcid($v,$b)]] < 0}]
 	}
 	return [expr {[rowofcommit $a] < [rowofcommit $b]}]
 }
@@ -1369,7 +1369,7 @@ proc rewrite_commit {v id rwid} {
 		# add $ch to $rwid's children and sort the list if necessary
 		if {[llength [lappend children($v,$rwid) $ch]] > 1} {
 			set children($v,$rwid) [lsort -command [list vtokcmp $v] \
-										$children($v,$rwid)]
+					$children($v,$rwid)]
 		}
 		# fix the graph after joining $id to $rwid
 		set a $varcid($v,$ch)
@@ -1445,7 +1445,7 @@ proc getcommitlines {fd inst view updating}  {
 			}
 			if {[string range $err 0 4] == "usage"} {
 				set err "Gitk: error reading commits$fv:\
-						bad arguments to git log."
+					bad arguments to git log."
 				if {$viewname($view) eq [mc "Command line"]} {
 					append err \
 						"  (Note: arguments to gitk are passed to git log\
@@ -1529,7 +1529,7 @@ proc getcommitlines {fd inst view updating}  {
 			# parent as a substitute parent for $id's children.
 			if {![catch {
 				set rwid [exec git rev-list --first-parent --max-count=1 \
-							  $id -- $vfilelimit($view)]
+						$id -- $vfilelimit($view)]
 			}]} {
 				if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
 					# use $rwid in place of $id
@@ -1582,7 +1582,7 @@ proc getcommitlines {fd inst view updating}  {
 				if {[llength [lappend children($vp) $id]] > 1 &&
 					[vtokcmp $view [lindex $children($vp) end-1] $id] > 0} {
 					set children($vp) [lsort -command [list vtokcmp $view] \
-										   $children($vp)]
+							$children($vp)]
 					unset -nocomplain ordertok
 				}
 				if {[info exists varcid($view,$p)]} {
@@ -1730,7 +1730,7 @@ proc parsecommit {id contents listed} {
 		set comment [string range $comment 0 $i-1]
 	}
 	set commitinfo($id) [list $headline $auname $audate \
-							 $comname $comdate $comment $hasnote $diff]
+			$comname $comdate $comment $hasnote $diff]
 }
 
 proc getcommit {id} {
@@ -2053,8 +2053,8 @@ proc makedroplist {w varname args} {
 			if {$cx > $width} {set width $cx}
 		}
 		set gm [ttk::combobox $w -width $width -state readonly\
-					-textvariable $varname -values $args \
-					-exportselection false]
+				-textvariable $varname -values $args \
+				-exportselection false]
 		bind $gm <<ComboboxSelected>> [list $gm selection clear]
 	} else {
 		set gm [eval [linsert $args 0 tk_optionMenu $w $varname]]
@@ -2320,10 +2320,10 @@ proc makewindow {} {
 		-side left -fill y
 	set gdttype [mc "containing:"]
 	set gm [makedroplist .tf.lbar.gdttype gdttype \
-				[mc "containing:"] \
-				[mc "touching paths:"] \
-				[mc "adding/removing string:"] \
-				[mc "changing lines matching:"]]
+			[mc "containing:"] \
+			[mc "touching paths:"] \
+			[mc "adding/removing string:"] \
+			[mc "changing lines matching:"]]
 	trace add variable gdttype write gdttype_change
 	pack .tf.lbar.gdttype -side left -fill y
 
@@ -2334,7 +2334,7 @@ proc makewindow {} {
 	trace add variable findstring write find_change
 	set findtype [mc "Exact"]
 	set findtypemenu [makedroplist .tf.lbar.findtype \
-						  findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
+			findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
 	trace add variable findtype write findcom_change
 	set findloc [mc "All fields"]
 	makedroplist .tf.lbar.findloc findloc [mc "All fields"] [mc "Headline"] \
@@ -3112,7 +3112,7 @@ proc keys {} {
 [mc "<%s-minus> Decrease font size" $M1T]
 [mc "<F5>				Update"]
 " \
-			-justify left -bg $bgcolor -border 2 -relief groove
+		-justify left -bg $bgcolor -border 2 -relief groove
 	pack $w.m -side top -fill both -padx 2 -pady 2
 	${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
 	bind $w <Key-Escape> [list destroy $w]
@@ -3352,59 +3352,59 @@ image create bitmap tri-rt -background black -foreground blue -data {
 	#define tri-rt_width 13
 	#define tri-rt_height 13
 	static unsigned char tri-rt_bits[] = {
-	   0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00,
-	   0xf0, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00,
-	   0x00, 0x00};
+		0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00,
+		0xf0, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00,
+		0x00, 0x00};
 } -maskdata {
 	#define tri-rt-mask_width 13
 	#define tri-rt-mask_height 13
 	static unsigned char tri-rt-mask_bits[] = {
-	   0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01,
-	   0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00,
-	   0x08, 0x00};
+		0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01,
+		0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00,
+		0x08, 0x00};
 }
 image create bitmap tri-dn -background black -foreground blue -data {
 	#define tri-dn_width 13
 	#define tri-dn_height 13
 	static unsigned char tri-dn_bits[] = {
-	   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf8, 0x03,
-	   0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	   0x00, 0x00};
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf8, 0x03,
+		0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00};
 } -maskdata {
 	#define tri-dn-mask_width 13
 	#define tri-dn-mask_height 13
 	static unsigned char tri-dn-mask_bits[] = {
-	   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xfe, 0x0f, 0xfc, 0x07,
-	   0xf8, 0x03, 0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
-	   0x00, 0x00};
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xfe, 0x0f, 0xfc, 0x07,
+		0xf8, 0x03, 0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+		0x00, 0x00};
 }
 
 image create bitmap reficon-T -background black -foreground yellow -data {
 	#define tagicon_width 13
 	#define tagicon_height 9
 	static unsigned char tagicon_bits[] = {
-	   0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x07,
-	   0xfc, 0x07, 0xf8, 0x07, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00};
+		0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x07,
+		0xfc, 0x07, 0xf8, 0x07, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00};
 } -maskdata {
 	#define tagicon-mask_width 13
 	#define tagicon-mask_height 9
 	static unsigned char tagicon-mask_bits[] = {
-	   0x00, 0x00, 0xf0, 0x0f, 0xf8, 0x0f, 0xfc, 0x0f,
-	   0xfe, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf0, 0x0f, 0x00, 0x00};
+		0x00, 0x00, 0xf0, 0x0f, 0xf8, 0x0f, 0xfc, 0x0f,
+		0xfe, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf0, 0x0f, 0x00, 0x00};
 }
 set rectdata {
 	#define headicon_width 13
 	#define headicon_height 9
 	static unsigned char headicon_bits[] = {
-	   0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xf8, 0x07,
-	   0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00};
+		0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xf8, 0x07,
+		0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00};
 }
 set rectmask {
 	#define headicon-mask_width 13
 	#define headicon-mask_height 9
 	static unsigned char headicon-mask_bits[] = {
-	   0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
-	   0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
+		0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
+		0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
 }
 image create bitmap reficon-H -background black -foreground "#00ff00" \
 	-data $rectdata -maskdata $rectmask
@@ -3622,7 +3622,7 @@ proc external_diff_get_one_file {diffid filename diffdir} {
 	}
 	set difffile [file join $diffdir "\[$diffid\] [file tail $filename]"]
 	return [save_file_from_commit $diffid:$filename $difffile \
-			   "revision $diffid"]
+			"revision $diffid"]
 }
 
 proc external_diff {} {
@@ -3953,7 +3953,7 @@ proc read_line_source {fd inst} {
 			selectline [rowofcommit $id] 1 [list $fname $lnum] 1
 		} else {
 			error_popup [mc "That line comes from commit %s, \
-							 which is not in this view" [shortids $id]]
+					 which is not in this view" [shortids $id]]
 		}
 	} else {
 		puts "oops couldn't parse git blame output"
@@ -4590,8 +4590,8 @@ proc bolden {id font} {
 	if {[info exists currentid] && $id eq $currentid} {
 		$canv delete secsel
 		set t [eval $canv create rect [$canv bbox $linehtag($id)] \
-				   -outline {{}} -tags secsel \
-				   -fill [$canv cget -selectbackground]]
+				-outline {{}} -tags secsel \
+				-fill [$canv cget -selectbackground]]
 		$canv lower $t
 	}
 	if {[info exists markedid] && $id eq $markedid} {
@@ -4608,8 +4608,8 @@ proc bolden_name {id font} {
 	if {[info exists currentid] && $id eq $currentid} {
 		$canv2 delete secsel
 		set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] \
-				   -outline {{}} -tags secsel \
-				   -fill [$canv2 cget -selectbackground]]
+				-outline {{}} -tags secsel \
+				-fill [$canv2 cget -selectbackground]]
 		$canv2 lower $t
 	}
 }
@@ -4767,7 +4767,7 @@ proc findcom_change args {
 		set findpattern $findstring
 	} else {
 		set e [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} \
-				   $findstring]
+				$findstring]
 		set findpattern "*$e*"
 	}
 }
@@ -5057,7 +5057,7 @@ proc askrelhighlight {row id} {
 			set isbold 1
 		}
 	} elseif {$highlight_related eq [mc "Ancestor"] ||
-			  $highlight_related eq [mc "Not ancestor"]} {
+		  $highlight_related eq [mc "Not ancestor"]} {
 		if {![info exists ancestor($id)]} {
 			is_ancestor $id
 		}
@@ -5162,7 +5162,7 @@ proc idcol {idlist id {i 0}} {
 	} else {
 		if {$t > [ordertoken [lindex $idlist $i]]} {
 			while {[incr i] < [llength $idlist] &&
-				   $t >= [ordertoken [lindex $idlist $i]]} {}
+			       $t >= [ordertoken [lindex $idlist $i]]} {}
 		}
 	}
 	return $i
@@ -5243,7 +5243,7 @@ proc get_viewmainhead {view} {
 
 	catch {
 		set rfd [open [concat | git rev-list -1 $mainheadid \
-						   -- $vfilelimit($view)] r]
+				-- $vfilelimit($view)] r]
 		set j [reg_instance $rfd]
 		lappend viewinstances($view) $j
 		fconfigure $rfd -blocking 0
@@ -5838,15 +5838,15 @@ proc rowranges {id} {
 			# see if the line extends the whole way from prevrow to row
 			if {$row > $prevrow + $uparrowlen + $downarrowlen &&
 				[lsearch -exact [lindex $rowidlist \
-							[expr {int(($row + $prevrow) / 2)}]] $id] < 0} {
+						[expr {int(($row + $prevrow) / 2)}]] $id] < 0} {
 				# it doesn't, see where it ends
 				set r [expr {$prevrow + $downarrowlen}]
 				if {[lsearch -exact [lindex $rowidlist $r] $id] < 0} {
 					while {[incr r -1] > $prevrow &&
-						   [lsearch -exact [lindex $rowidlist $r] $id] < 0} {}
+					       [lsearch -exact [lindex $rowidlist $r] $id] < 0} {}
 				} else {
 					while {[incr r] <= $row &&
-						   [lsearch -exact [lindex $rowidlist $r] $id] >= 0} {}
+					       [lsearch -exact [lindex $rowidlist $r] $id] >= 0} {}
 					incr r -1
 				}
 				lappend ret $r
@@ -5854,10 +5854,10 @@ proc rowranges {id} {
 				set r [expr {$row - $uparrowlen}]
 				if {[lsearch -exact [lindex $rowidlist $r] $id] < 0} {
 					while {[incr r] < $row &&
-						   [lsearch -exact [lindex $rowidlist $r] $id] < 0} {}
+					       [lsearch -exact [lindex $rowidlist $r] $id] < 0} {}
 				} else {
 					while {[incr r -1] >= $prevrow &&
-						   [lsearch -exact [lindex $rowidlist $r] $id] >= 0} {}
+					       [lsearch -exact [lindex $rowidlist $r] $id] >= 0} {}
 					incr r
 				}
 				lappend ret $r
@@ -6000,7 +6000,7 @@ proc drawlineseg {id row endrow arrowlow} {
 		if {!$joinhigh} {
 			assigncolor $id
 			set t [$canv create line $coords -width [linewidth $id] \
-					   -fill $colormap($id) -tags lines.$id -arrow $arrow]
+					-fill $colormap($id) -tags lines.$id -arrow $arrow]
 			$canv lower $t
 			bindline $t $id
 			set lines [linsert $lines $i [list $row $le $t]]
@@ -6097,7 +6097,7 @@ proc drawparentlinks {id row} {
 			lappend coords $x2 $y2
 		}
 		set t [$canv create line $coords -width [linewidth $p] \
-				   -fill $colormap($p) -tags lines.$p]
+				-fill $colormap($p) -tags lines.$p]
 		$canv lower $t
 		bindline $t $p
 	}
@@ -6139,22 +6139,22 @@ proc drawcmittext {id row col} {
 	set orad [expr {$linespc / 3}]
 	if {$listed <= 2} {
 		set t [$canv create oval [expr {$x - $orad}] [expr {$y - $orad}] \
-				   [expr {$x + $orad - 1}] [expr {$y + $orad - 1}] \
-				   -fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
+				[expr {$x + $orad - 1}] [expr {$y + $orad - 1}] \
+				-fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
 	} elseif {$listed == 3} {
 		# triangle pointing left for left-side commits
 		set t [$canv create polygon \
-				   [expr {$x - $orad}] $y \
-				   [expr {$x + $orad - 1}] [expr {$y - $orad}] \
-				   [expr {$x + $orad - 1}] [expr {$y + $orad - 1}] \
-				   -fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
+				[expr {$x - $orad}] $y \
+				[expr {$x + $orad - 1}] [expr {$y - $orad}] \
+				[expr {$x + $orad - 1}] [expr {$y + $orad - 1}] \
+				-fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
 	} else {
 		# triangle pointing right for right-side commits
 		set t [$canv create polygon \
-				   [expr {$x + $orad - 1}] $y \
-				   [expr {$x - $orad}] [expr {$y - $orad}] \
-				   [expr {$x - $orad}] [expr {$y + $orad - 1}] \
-				   -fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
+				[expr {$x + $orad - 1}] $y \
+				[expr {$x - $orad}] [expr {$y - $orad}] \
+				[expr {$x - $orad}] [expr {$y + $orad - 1}] \
+				-fill $ofill -outline $circleoutlinecolor -width 1 -tags circle]
 	}
 	set circleitem($row) $t
 	$canv raise $t
@@ -6196,12 +6196,12 @@ proc drawcmittext {id row col} {
 		}
 	}
 	set linehtag($id) [$canv create text $xt $y -anchor w -fill $fgcolor \
-						   -text $headline -font $font -tags text]
+			-text $headline -font $font -tags text]
 	$canv bind $linehtag($id) $ctxbut "rowmenu %X %Y $id"
 	set linentag($id) [$canv2 create text 3 $y -anchor w -fill $fgcolor \
-						   -text $name -font $nfont -tags text]
+			-text $name -font $nfont -tags text]
 	set linedtag($id) [$canv3 create text 3 $y -anchor w -fill $fgcolor \
-						   -text $date -font mainfont -tags text]
+			-text $date -font mainfont -tags text]
 	if {$selectedline == $row} {
 		make_secsel $id
 	}
@@ -6618,7 +6618,7 @@ proc drawtags {id x xt y1} {
 		set xt [expr {$xt + $wid + $extra}]
 	}
 	set t [$canv create line $x $y1 [lindex $xvals end] $y1 \
-			   -width $lthickness -fill $reflinecolor -tags tag.$id]
+			-width $lthickness -fill $reflinecolor -tags tag.$id]
 	$canv lower $t
 	foreach tag $marks x $xvals wid $wvals {
 		set tag_quoted [string map {% %%} $tag]
@@ -6628,9 +6628,9 @@ proc drawtags {id x xt y1} {
 		if {[incr ntags -1] >= 0} {
 			# draw a tag
 			set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \
-					   $xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \
-					   -width 1 -outline $tagoutlinecolor -fill $tagbgcolor \
-					   -tags tag.$id]
+					$xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \
+					-width 1 -outline $tagoutlinecolor -fill $tagbgcolor \
+					-tags tag.$id]
 			if {$singletag} {
 				set tagclick [list showtags $id 1]
 			} else {
@@ -6661,7 +6661,7 @@ proc drawtags {id x xt y1} {
 			}
 		}
 		set t [$canv create text $xl $y1 -anchor w -text $tag -fill $headfgcolor \
-				   -font $font -tags [list tag.$id text]]
+				-font $font -tags [list tag.$id text]]
 		if {$ntags >= 0} {
 			$canv bind $t <1> $tagclick
 		} elseif {$nheads >= 0} {
@@ -6676,8 +6676,8 @@ proc drawnotesign {xt y} {
 
 	set orad [expr {$linespc / 3}]
 	set t [$canv create rectangle [expr {$xt - $orad}] [expr {$y - $orad}] \
-			   [expr {$xt + $orad - 1}] [expr {$y + $orad - 1}] \
-			   -fill yellow -outline $fgcolor -width 1 -tags circle]
+			[expr {$xt + $orad - 1}] [expr {$y + $orad - 1}] \
+			-fill yellow -outline $fgcolor -width 1 -tags circle]
 	set xt [expr {$xt + $orad * 3}]
 	return $xt
 }
@@ -6971,8 +6971,8 @@ proc markmatches {canv l str tag matches font row} {
 		set xoff [font measure $font [string range $str 0 [expr {$start-1}]]]
 		set xlen [font measure $font [string range $str 0 [expr {$end}]]]
 		set t [$canv create rect [expr {$x0+$xoff}] $y0 \
-				   [expr {$x0+$xlen+2}] $y1 \
-				   -outline {} -tags [list match$l matches] -fill yellow]
+				[expr {$x0+$xlen+2}] $y1 \
+				-outline {} -tags [list match$l matches] -fill yellow]
 		$canv lower $t
 		if {$row == $selectedline} {
 			$canv raise $t secsel
@@ -7040,7 +7040,7 @@ proc appendwithlinks {text tags} {
 		incr linknum
 	}
 	set wlinks [regexp -indices -all -inline -line \
-					{https?://[^[:space:]]+} $text]
+			{https?://[^[:space:]]+} $text]
 	foreach l $wlinks {
 		set s2 [lindex $l 0]
 		set e2 [lindex $l 1]
@@ -7058,7 +7058,7 @@ proc setlink {id lk} {
 	global linkfgcolor
 
 	if {[string range $id 0 1] eq "-g"} {
-	  set id [string range $id 2 end]
+		set id [string range $id 2 end]
 	}
 
 	set known 0
@@ -7277,15 +7277,15 @@ proc make_secsel {id} {
 	if {![info exists linehtag($id)]} return
 	$canv delete secsel
 	set t [eval $canv create rect [$canv bbox $linehtag($id)] -outline {{}} \
-			   -tags secsel -fill [$canv cget -selectbackground]]
+			-tags secsel -fill [$canv cget -selectbackground]]
 	$canv lower $t
 	$canv2 delete secsel
 	set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] -outline {{}} \
-			   -tags secsel -fill [$canv2 cget -selectbackground]]
+			-tags secsel -fill [$canv2 cget -selectbackground]]
 	$canv2 lower $t
 	$canv3 delete secsel
 	set t [eval $canv3 create rect [$canv3 bbox $linedtag($id)] -outline {{}} \
-			   -tags secsel -fill [$canv3 cget -selectbackground]]
+			-tags secsel -fill [$canv3 cget -selectbackground]]
 	$canv3 lower $t
 }
 
@@ -7295,7 +7295,7 @@ proc make_idmark {id} {
 	if {![info exists linehtag($id)]} return
 	$canv delete markid
 	set t [eval $canv create rect [$canv bbox $linehtag($id)] \
-			   -tags markid -outline $fgcolor]
+			-tags markid -outline $fgcolor]
 	$canv raise $t
 }
 
@@ -7751,7 +7751,7 @@ proc getblobline {bf id} {
 		if {$jump_to_here ne {} &&
 			[lindex $jump_to_here 0] eq [lindex $ctext_file_names 0]} {
 			set lnum [expr {[lindex $jump_to_here 1] +
-							[lindex [split $commentend .] 0]}]
+					[lindex [split $commentend .] 0]}]
 			mark_ctext_line $lnum
 		}
 		$ctext config -state disabled
@@ -7905,7 +7905,7 @@ proc gettreediffs {ids} {
 
 	set cmd [diffcmd $ids {--no-commit-id}]
 	if {$limitdiffs && $vfilelimit($curview) ne {}} {
-			set cmd [concat $cmd -- $vfilelimit($curview)]
+		set cmd [concat $cmd -- $vfilelimit($curview)]
 	}
 	if {[catch {set gdtf [open $cmd r]}]} return
 
@@ -8058,7 +8058,7 @@ proc maybe_scroll_ctext {ateof} {
 	if {![info exists target_scrollpos]} return
 	if {!$ateof} {
 		set nlines [expr {[winfo height $ctext]
-						  / [font metrics textfont -linespace]}]
+				/ [font metrics textfont -linespace]}]
 		if {[$ctext compare "$target_scrollpos + $nlines lines" <= end]} return
 	}
 	$ctext yview $target_scrollpos
@@ -8179,8 +8179,8 @@ proc parseblobdiffline {ids line} {
 			set l [string length $line]
 			set i [expr {$l / 2}]
 			if {!(($l & 1) && [string index $line $i] eq " " &&
-				  [string range $line 2 [expr {$i - 1}]] eq \
-					  [string range $line [expr {$i + 3}] end])} {
+					[string range $line 2 [expr {$i - 1}]] eq \
+					[string range $line [expr {$i + 3}] end])} {
 				return
 			}
 			# unescape if quoted and chop off the a/ from the front
@@ -8252,7 +8252,7 @@ proc parseblobdiffline {ids line} {
 				setinlist difffilestart $i $curdiffstart
 			}
 		} elseif {![string compare -length 10 $line "rename to "] ||
-				  ![string compare -length 8 $line "copy to "]} {
+			  ![string compare -length 8 $line "copy to "]} {
 			set fname [string range $line [expr 4 + [string first " to " $line] ] end]
 			if {[string index $fname 0] eq "\""} {
 				set fname [lindex $fname 0]
@@ -8269,7 +8269,7 @@ proc parseblobdiffline {ids line} {
 
 	} else {
 		set line [string map {\x1A ^Z} \
-					  [encoding convertfrom $diffencoding $line]]
+				[encoding convertfrom $diffencoding $line]]
 		# parse the prefix - one ' ', '-' or '+' for each parent
 		set prefix [string range $line 0 [expr {$diffnparents - 1}]]
 		set tag [expr {$diffnparents > 1? "m": "d"}]
@@ -8429,7 +8429,7 @@ proc settabs {{firstab {}}} {
 	set w [font measure textfont "0"]
 	if {$firsttabstop != 0} {
 		$ctext conf -tabs [list [expr {($firsttabstop + $tabstop) * $w}] \
-							   [expr {($firsttabstop + 2 * $tabstop) * $w}]]
+				[expr {($firsttabstop + 2 * $tabstop) * $w}]]
 	} elseif {$have_tk85 || $tabstop != 8} {
 		$ctext conf -tabs [expr {$tabstop * $w}]
 	} else {
@@ -8655,8 +8655,8 @@ proc fontflags {f {isbold 0}} {
 	global fontattr
 
 	return [list -family $fontattr($f,family) -size $fontattr($f,size) \
-				-weight [expr {$isbold? "bold": $fontattr($f,weight)}] \
-				-slant $fontattr($f,slant)]
+			-weight [expr {$isbold? "bold": $fontattr($f,weight)}] \
+			-slant $fontattr($f,slant)]
 }
 
 proc fontname {f} {
@@ -8821,11 +8821,11 @@ proc linehover {} {
 	set x1 [expr {$x + [font measure mainfont $text] + 2 * $lthickness}]
 	set y1 [expr {$y + $linespc + 2 * $lthickness}]
 	set t [$canv create rectangle $x0 $y0 $x1 $y1 \
-			   -fill $linehoverbgcolor -outline $linehoveroutlinecolor \
-			   -width 1 -tags hover]
+			-fill $linehoverbgcolor -outline $linehoveroutlinecolor \
+			-width 1 -tags hover]
 	$canv raise $t
 	set t [$canv create text $x $y -anchor nw -text $text -tags hover \
-			   -font mainfont -fill $linehoverfgcolor]
+			-font mainfont -fill $linehoverfgcolor]
 	$canv raise $t
 }
 
@@ -9281,7 +9281,7 @@ proc mkpatchrev {} {
 	set newid [$patchtop.tosha1 get]
 	set newhead [$patchtop.tohead get]
 	foreach e [list fromsha1 fromhead tosha1 tohead] \
-			v [list $newid $newhead $oldid $oldhead] {
+		v [list $newid $newhead $oldid $oldhead] {
 		$patchtop.$e conf -state normal
 		$patchtop.$e delete 0 end
 		$patchtop.$e insert 0 $v
@@ -9666,7 +9666,7 @@ proc exec_citool {tool_args {baseid {}}} {
 		set author [lindex $commitinfo($baseid) 1]
 		set date [lindex $commitinfo($baseid) 2]
 		if {[regexp {^\s*(\S.*\S|\S)\s*<(.*)>\s*$} \
-					$author author name email]
+				$author author name email]
 			&& $date ne {}} {
 			set env(GIT_AUTHOR_NAME) $name
 			set env(GIT_AUTHOR_EMAIL) $email
@@ -9689,8 +9689,8 @@ proc cherrypick {} {
 	set dheads [descheads $rowmenuid]
 	if {$dheads ne {} && [lsearch -exact $dheads $oldhead] >= 0} {
 		set ok [confirm_popup [mc "Commit %s is already\
-				included in branch %s -- really re-apply it?" \
-								   [string range $rowmenuid 0 7] $mainhead]]
+			included in branch %s -- really re-apply it?" \
+				[string range $rowmenuid 0 7] $mainhead]]
 		if {!$ok} return
 	}
 	nowbusy cherrypick [mc "Cherry-picking"]
@@ -9700,14 +9700,14 @@ proc cherrypick {} {
 	if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} {
 		notbusy cherrypick
 		if {[regexp -line \
-				 {Entry '(.*)' (would be overwritten by merge|not uptodate)} \
-				 $err msg fname]} {
+				{Entry '(.*)' (would be overwritten by merge|not uptodate)} \
+				$err msg fname]} {
 			error_popup [mc "Cherry-pick failed because of local changes\
-						to file '%s'.\nPlease commit, reset or stash\
-						your changes and try again." $fname]
+					to file '%s'.\nPlease commit, reset or stash\
+					your changes and try again." $fname]
 		} elseif {[regexp -line \
-					   {^(CONFLICT \(.*\):|Automatic cherry-pick failed|error: could not apply)} \
-					   $err]} {
+				{^(CONFLICT \(.*\):|Automatic cherry-pick failed|error: could not apply)} \
+				$err]} {
 			if {[confirm_popup [mc "Cherry-pick failed because of merge\
 						conflict.\nDo you wish to run git citool to\
 						resolve it?"]]} {
@@ -9752,9 +9752,9 @@ proc revert {} {
 	set dheads [descheads $rowmenuid]
 	if { $dheads eq {} || [lsearch -exact $dheads $oldhead] == -1 } {
 	   set ok [confirm_popup [mc "Commit %s is not\
-		   included in branch %s -- really revert it?" \
-					  [string range $rowmenuid 0 7] $mainhead]]
-	   if {!$ok} return
+		included in branch %s -- really revert it?" \
+			[string range $rowmenuid 0 7] $mainhead]]
+		if {!$ok} return
 	}
 	nowbusy revert [mc "Reverting"]
 	update
@@ -9988,7 +9988,7 @@ proc rmbranch {} {
 	if {[llength $dheads] == 1 && $idheads($dheads) eq $head} {
 		# the stuff on this branch isn't on any other branch
 		if {![confirm_popup [mc "The commits on branch %s aren't on any other\
-						branch.\nReally delete branch %s?" $head $head]]} return
+				branch.\nReally delete branch %s?" $head $head]]} return
 	}
 	nowbusy rmbranch
 	update
@@ -10134,10 +10134,10 @@ proc refill_reflist {} {
 		if {$i < [llength $reflist]} {
 			if {$j < [llength $refs]} {
 				set cmp [string compare [lindex $reflist $i 0] \
-							 [lindex $refs $j 0]]
+						[lindex $refs $j 0]]
 				if {$cmp == 0} {
 					set cmp [string compare [lindex $reflist $i 1] \
-								 [lindex $refs $j 1]]
+							[lindex $refs $j 1]]
 				}
 			} else {
 				set cmp -1
@@ -10198,7 +10198,7 @@ proc getallcommits {} {
 		set ids "--all"
 	} else {
 		set refs [concat [array names idheads] [array names idtags] \
-					  [array names idotherrefs]]
+				[array names idotherrefs]]
 		set ids {}
 		set tagobjs {}
 		foreach name [array names tagobjid] {
@@ -10557,7 +10557,7 @@ proc dropcache {err} {
 
 	#puts "dropping cache ($err)"
 	foreach v {arcnos arcout arcids arcstart arcend growing \
-				   arctags archeads allparents allchildren} {
+				arctags archeads allparents allchildren} {
 		global $v
 		unset -nocomplain $v
 	}
@@ -11263,7 +11263,7 @@ proc rereadrefs {} {
 	global idtags idheads idotherrefs mainheadid
 
 	set refids [concat [array names idtags] \
-					[array names idheads] [array names idotherrefs]]
+			[array names idheads] [array names idotherrefs]]
 	foreach id $refids {
 		if {![info exists ref($id)]} {
 			set ref($id) [listrefs $id]
@@ -11273,7 +11273,7 @@ proc rereadrefs {} {
 	readrefs
 	changedrefs
 	set refids [lsort -unique [concat $refids [array names idtags] \
-						[array names idheads] [array names idotherrefs]]]
+			[array names idheads] [array names idotherrefs]]]
 	foreach id $refids {
 		set v [listrefs $id]
 		if {![info exists ref($id)] || $ref($id) != $v} {
@@ -11544,7 +11544,7 @@ proc prefspage_general {notebook} {
 	${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
-										 #xgettext:no-tcl-format
+			#xgettext:no-tcl-format
 	${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
@@ -11614,7 +11614,7 @@ proc prefspage_colors {notebook} {
 	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]
+		-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"] \
@@ -11627,24 +11627,24 @@ proc prefspage_colors {notebook} {
 	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]]
+				[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]]
+				[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]]
+				[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]]
+				[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"] \
@@ -11678,7 +11678,7 @@ proc doprefs {} {
 		return
 	}
 	foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-				   limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
+			limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
 		set oldprefs($v) [set $v]
 	}
 	ttk_toplevel $top
@@ -11700,7 +11700,7 @@ proc doprefs {} {
 			$notebook add $page -text $title
 		} else {
 			set btn [${NS}::button $notebook.b_[string map {. X} $page] \
-						 -text $title -command [list raise $page]]
+					-text $title -command [list raise $page]]
 			$page configure -text $title
 			grid $btn -row 0 -column [incr col] -sticky w
 			grid $page -row 1 -column 0 -sticky news -columnspan 100
@@ -11743,7 +11743,7 @@ proc choosecolor {v vi w x cmd} {
 	global $v
 
 	set c [tk_chooseColor -initialcolor [lindex [set $v] $vi] \
-			   -title [mc "Gitk: choose color for %s" $x]]
+			-title [mc "Gitk: choose color for %s" $x]]
 	if {$c eq {}} return
 	$w conf -background $c
 	lset $v $vi $c
@@ -11804,7 +11804,7 @@ proc prefscan {} {
 	global oldprefs prefstop
 
 	foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-				   limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
+			limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
 		global $v
 		set $v $oldprefs($v)
 	}
@@ -12257,7 +12257,7 @@ namespace import ::msgcat::mc
 # First check that Tcl/Tk is recent enough
 if {[catch {package require Tk 8.4} err]} {
 	show_error {} . [mc "Sorry, gitk cannot run with this version of Tcl/Tk.\n\
-						 Gitk requires at least Tcl/Tk 8.4."]
+			    Gitk requires at least Tcl/Tk 8.4."]
 	exit 1
 }
 
@@ -12521,7 +12521,7 @@ if {$i >= [llength $argv] && $revtreeargs ne {}} {
 		foreach arg $revtreeargs {
 			if {[file exists $arg]} {
 				show_error {} . [mc "Ambiguous argument '%s': both revision\
-								 and filename" $arg]
+						 and filename" $arg]
 				exit 1
 			}
 		}
-- 
2.28.0.618.gf4bc123cb7


```

## Denton Liu, 2020-09-10 08:27

Subject: [PATCH 1/2] gitk: replace spaces with tabs
Message-ID: <c59cec1c669b26fc2271067f4970d0ecbf816a89.1599726439.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/c59cec1c669b26fc2271067f4970d0ecbf816a89.1599726439.git.liu.denton%40gmail.com
In-Reply-To: <cover.1599726439.git.liu.denton@gmail.com>

```
The source code is a mix of tabs and spaces. The indentation style
currently is four spaces per indent level but uses tabs every other
level (at eight spaces). Fix this inconsistent spacing and tabbing by
just using a tab-indent for everything.

This was done mechanically using the following vim commands:

	:set tabstop=8
	:set expandtab
	:retab
	:set tabstop=4
	:set noexpandtab
	:retab!
	:set tabstop=8

A future commit will manually clean up the code style errors introduced
by this patch.

This patch should be empty with `--ignore-all-space`.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 gitk | 20408 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 10204 insertions(+), 10204 deletions(-)

diff --git a/gitk b/gitk
index da84e22dd4..7efb106e52 100755
--- a/gitk
+++ b/gitk
@@ -10,37 +10,37 @@ exec wish "$0" -- "$@"
 package require Tk
 
 proc hasworktree {} {
-    return [expr {[exec git rev-parse --is-bare-repository] == "false" &&
-		  [exec git rev-parse --is-inside-git-dir] == "false"}]
+	return [expr {[exec git rev-parse --is-bare-repository] == "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]
+	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]} {
+	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
-    }
-    # 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.
@@ -49,1942 +49,1942 @@ proc gitworktree {} {
 # run before X event handlers, so reading from a fast source can
 # make the GUI completely unresponsive.
 proc run args {
-    global isonrunq runq currunq
+	global isonrunq runq currunq
 
-    set script $args
-    if {[info exists isonrunq($script)]} return
-    if {$runq eq {} && ![info exists currunq]} {
-	after idle dorunq
-    }
-    lappend runq [list {} $script]
-    set isonrunq($script) 1
+	set script $args
+	if {[info exists isonrunq($script)]} return
+	if {$runq eq {} && ![info exists currunq]} {
+		after idle dorunq
+	}
+	lappend runq [list {} $script]
+	set isonrunq($script) 1
 }
 
 proc filerun {fd script} {
-    fileevent $fd readable [list filereadable $fd $script]
+	fileevent $fd readable [list filereadable $fd $script]
 }
 
 proc filereadable {fd script} {
-    global runq currunq
+	global runq currunq
 
-    fileevent $fd readable {}
-    if {$runq eq {} && ![info exists currunq]} {
-	after idle dorunq
-    }
-    lappend runq [list $fd $script]
+	fileevent $fd readable {}
+	if {$runq eq {} && ![info exists currunq]} {
+		after idle dorunq
+	}
+	lappend runq [list $fd $script]
 }
 
 proc nukefile {fd} {
-    global runq
+	global runq
 
-    for {set i 0} {$i < [llength $runq]} {} {
-	if {[lindex $runq $i 0] eq $fd} {
-	    set runq [lreplace $runq $i $i]
-	} else {
-	    incr i
+	for {set i 0} {$i < [llength $runq]} {} {
+		if {[lindex $runq $i 0] eq $fd} {
+			set runq [lreplace $runq $i $i]
+		} else {
+			incr i
+		}
 	}
-    }
 }
 
 proc dorunq {} {
-    global isonrunq runq currunq
+	global isonrunq runq currunq
 
-    set tstart [clock clicks -milliseconds]
-    set t0 $tstart
-    while {[llength $runq] > 0} {
-	set fd [lindex $runq 0 0]
-	set script [lindex $runq 0 1]
-	set currunq [lindex $runq 0]
-	set runq [lrange $runq 1 end]
-	set repeat [eval $script]
-	unset currunq
-	set t1 [clock clicks -milliseconds]
-	set t [expr {$t1 - $t0}]
-	if {$repeat ne {} && $repeat} {
-	    if {$fd eq {} || $repeat == 2} {
-		# script returns 1 if it wants to be readded
-		# file readers return 2 if they could do more straight away
-		lappend runq [list $fd $script]
-	    } else {
-		fileevent $fd readable [list filereadable $fd $script]
-	    }
-	} elseif {$fd eq {}} {
-	    unset isonrunq($script)
+	set tstart [clock clicks -milliseconds]
+	set t0 $tstart
+	while {[llength $runq] > 0} {
+		set fd [lindex $runq 0 0]
+		set script [lindex $runq 0 1]
+		set currunq [lindex $runq 0]
+		set runq [lrange $runq 1 end]
+		set repeat [eval $script]
+		unset currunq
+		set t1 [clock clicks -milliseconds]
+		set t [expr {$t1 - $t0}]
+		if {$repeat ne {} && $repeat} {
+			if {$fd eq {} || $repeat == 2} {
+				# script returns 1 if it wants to be readded
+				# file readers return 2 if they could do more straight away
+				lappend runq [list $fd $script]
+			} else {
+				fileevent $fd readable [list filereadable $fd $script]
+			}
+		} elseif {$fd eq {}} {
+			unset isonrunq($script)
+		}
+		set t0 $t1
+		if {$t1 - $tstart >= 80} break
+	}
+	if {$runq ne {}} {
+		after idle dorunq
 	}
-	set t0 $t1
-	if {$t1 - $tstart >= 80} break
-    }
-    if {$runq ne {}} {
-	after idle dorunq
-    }
 }
 
 proc reg_instance {fd} {
-    global commfd leftover loginstance
+	global commfd leftover loginstance
 
-    set i [incr loginstance]
-    set commfd($i) $fd
-    set leftover($i) {}
-    return $i
+	set i [incr loginstance]
+	set commfd($i) $fd
+	set leftover($i) {}
+	return $i
 }
 
 proc unmerged_files {files} {
-    global nr_unmerged
+	global nr_unmerged
 
-    # find the list of unmerged files
-    set mlist {}
-    set nr_unmerged 0
-    if {[catch {
-	set fd [open "| git ls-files -u" r]
-    } err]} {
-	show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
-	exit 1
-    }
-    while {[gets $fd line] >= 0} {
-	set i [string first "\t" $line]
-	if {$i < 0} continue
-	set fname [string range $line [expr {$i+1}] end]
-	if {[lsearch -exact $mlist $fname] >= 0} continue
-	incr nr_unmerged
-	if {$files eq {} || [path_filter $files $fname]} {
-	    lappend mlist $fname
+	# find the list of unmerged files
+	set mlist {}
+	set nr_unmerged 0
+	if {[catch {
+		set fd [open "| git ls-files -u" r]
+	} err]} {
+		show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
+		exit 1
 	}
-    }
-    catch {close $fd}
-    return $mlist
+	while {[gets $fd line] >= 0} {
+		set i [string first "\t" $line]
+		if {$i < 0} continue
+		set fname [string range $line [expr {$i+1}] end]
+		if {[lsearch -exact $mlist $fname] >= 0} continue
+		incr nr_unmerged
+		if {$files eq {} || [path_filter $files $fname]} {
+			lappend mlist $fname
+		}
+	}
+	catch {close $fd}
+	return $mlist
 }
 
 proc parseviewargs {n arglist} {
-    global vdatemode vmergeonly vflags vdflags vrevs vfiltered vorigargs env
-    global vinlinediff
-    global worddiff git_version
+	global vdatemode vmergeonly vflags vdflags vrevs vfiltered vorigargs env
+	global vinlinediff
+	global worddiff git_version
 
-    set vdatemode($n) 0
-    set vmergeonly($n) 0
-    set vinlinediff($n) 0
-    set glflags {}
-    set diffargs {}
-    set nextisval 0
-    set revargs {}
-    set origargs $arglist
-    set allknown 1
-    set filtered 0
-    set i -1
-    foreach arg $arglist {
-	incr i
-	if {$nextisval} {
-	    lappend glflags $arg
-	    set nextisval 0
-	    continue
+	set vdatemode($n) 0
+	set vmergeonly($n) 0
+	set vinlinediff($n) 0
+	set glflags {}
+	set diffargs {}
+	set nextisval 0
+	set revargs {}
+	set origargs $arglist
+	set allknown 1
+	set filtered 0
+	set i -1
+	foreach arg $arglist {
+		incr i
+		if {$nextisval} {
+			lappend glflags $arg
+			set nextisval 0
+			continue
+		}
+		switch -glob -- $arg {
+			"-d" -
+			"--date-order" {
+				set vdatemode($n) 1
+				# remove from origargs in case we hit an unknown option
+				set origargs [lreplace $origargs $i $i]
+				incr i -1
+			}
+			"-[puabwcrRBMC]" -
+			"--no-renames" - "--full-index" - "--binary" - "--abbrev=*" -
+			"--find-copies-harder" - "-l*" - "--ext-diff" - "--no-ext-diff" -
+			"--src-prefix=*" - "--dst-prefix=*" - "--no-prefix" -
+			"-O*" - "--text" - "--full-diff" - "--ignore-space-at-eol" -
+			"--ignore-space-change" - "-U*" - "--unified=*" {
+				# These request or affect diff output, which we don't want.
+				# Some could be used to set our defaults for diff display.
+				lappend diffargs $arg
+			}
+			"--raw" - "--patch-with-raw" - "--patch-with-stat" -
+			"--name-only" - "--name-status" - "--color" -
+			"--log-size" - "--pretty=*" - "--decorate" - "--abbrev-commit" -
+			"--cc" - "-z" - "--header" - "--parents" - "--boundary" -
+			"--no-color" - "-g" - "--walk-reflogs" - "--no-walk" -
+			"--timestamp" - "relative-date" - "--date=*" - "--stdin" -
+			"--objects" - "--objects-edge" - "--reverse" {
+				# These cause our parsing of git log's output to fail, or else
+				# they're options we want to set ourselves, so ignore them.
+			}
+			"--color-words*" - "--word-diff=color" {
+				# These trigger a word diff in the console interface,
+				# so help the user by enabling our own support
+				if {[package vcompare $git_version "1.7.2"] >= 0} {
+					set worddiff [mc "Color words"]
+				}
+			}
+			"--word-diff*" {
+				if {[package vcompare $git_version "1.7.2"] >= 0} {
+					set worddiff [mc "Markup words"]
+				}
+			}
+			"--stat=*" - "--numstat" - "--shortstat" - "--summary" -
+			"--check" - "--exit-code" - "--quiet" - "--topo-order" -
+			"--full-history" - "--dense" - "--sparse" -
+			"--follow" - "--left-right" - "--encoding=*" {
+				# These are harmless, and some are even useful
+				lappend glflags $arg
+			}
+			"--diff-filter=*" - "--no-merges" - "--unpacked" -
+			"--max-count=*" - "--skip=*" - "--since=*" - "--after=*" -
+			"--until=*" - "--before=*" - "--max-age=*" - "--min-age=*" -
+			"--author=*" - "--committer=*" - "--grep=*" - "-[iE]" -
+			"--remove-empty" - "--first-parent" - "--cherry-pick" -
+			"-S*" - "-G*" - "--pickaxe-all" - "--pickaxe-regex" -
+			"--simplify-by-decoration" {
+				# These mean that we get a subset of the commits
+				set filtered 1
+				lappend glflags $arg
+			}
+			"-L*" {
+				# Line-log with 'stuck' argument (unstuck form is
+				# not supported)
+				set filtered 1
+				set vinlinediff($n) 1
+				set allknown 0
+				lappend glflags $arg
+			}
+			"-n" {
+				# This appears to be the only one that has a value as a
+				# separate word following it
+				set filtered 1
+				set nextisval 1
+				lappend glflags $arg
+			}
+			"--not" - "--all" {
+				lappend revargs $arg
+			}
+			"--merge" {
+				set vmergeonly($n) 1
+				# git rev-parse doesn't understand --merge
+				lappend revargs --gitk-symmetric-diff-marker MERGE_HEAD...HEAD
+			}
+			"--no-replace-objects" {
+				set env(GIT_NO_REPLACE_OBJECTS) "1"
+			}
+			"-*" {
+				# Other flag arguments including -<n>
+				if {[string is digit -strict [string range $arg 1 end]]} {
+					set filtered 1
+				} else {
+					# a flag argument that we don't recognize;
+					# that means we can't optimize
+					set allknown 0
+				}
+				lappend glflags $arg
+			}
+			default {
+				# Non-flag arguments specify commits or ranges of commits
+				if {[string match "*...*" $arg]} {
+					lappend revargs --gitk-symmetric-diff-marker
+				}
+				lappend revargs $arg
+			}
+		}
 	}
-	switch -glob -- $arg {
-	    "-d" -
-	    "--date-order" {
-		set vdatemode($n) 1
-		# remove from origargs in case we hit an unknown option
-		set origargs [lreplace $origargs $i $i]
-		incr i -1
-	    }
-	    "-[puabwcrRBMC]" -
-	    "--no-renames" - "--full-index" - "--binary" - "--abbrev=*" -
-	    "--find-copies-harder" - "-l*" - "--ext-diff" - "--no-ext-diff" -
-	    "--src-prefix=*" - "--dst-prefix=*" - "--no-prefix" -
-	    "-O*" - "--text" - "--full-diff" - "--ignore-space-at-eol" -
-	    "--ignore-space-change" - "-U*" - "--unified=*" {
-		# These request or affect diff output, which we don't want.
-		# Some could be used to set our defaults for diff display.
-		lappend diffargs $arg
-	    }
-	    "--raw" - "--patch-with-raw" - "--patch-with-stat" -
-	    "--name-only" - "--name-status" - "--color" -
-	    "--log-size" - "--pretty=*" - "--decorate" - "--abbrev-commit" -
-	    "--cc" - "-z" - "--header" - "--parents" - "--boundary" -
-	    "--no-color" - "-g" - "--walk-reflogs" - "--no-walk" -
-	    "--timestamp" - "relative-date" - "--date=*" - "--stdin" -
-	    "--objects" - "--objects-edge" - "--reverse" {
-		# These cause our parsing of git log's output to fail, or else
-		# they're options we want to set ourselves, so ignore them.
-	    }
-	    "--color-words*" - "--word-diff=color" {
-		# These trigger a word diff in the console interface,
-		# so help the user by enabling our own support
-		if {[package vcompare $git_version "1.7.2"] >= 0} {
-		    set worddiff [mc "Color words"]
-		}
-	    }
-	    "--word-diff*" {
-		if {[package vcompare $git_version "1.7.2"] >= 0} {
-		    set worddiff [mc "Markup words"]
-		}
-	    }
-	    "--stat=*" - "--numstat" - "--shortstat" - "--summary" -
-	    "--check" - "--exit-code" - "--quiet" - "--topo-order" -
-	    "--full-history" - "--dense" - "--sparse" -
-	    "--follow" - "--left-right" - "--encoding=*" {
-		# These are harmless, and some are even useful
-		lappend glflags $arg
-	    }
-	    "--diff-filter=*" - "--no-merges" - "--unpacked" -
-	    "--max-count=*" - "--skip=*" - "--since=*" - "--after=*" -
-	    "--until=*" - "--before=*" - "--max-age=*" - "--min-age=*" -
-	    "--author=*" - "--committer=*" - "--grep=*" - "-[iE]" -
-	    "--remove-empty" - "--first-parent" - "--cherry-pick" -
-	    "-S*" - "-G*" - "--pickaxe-all" - "--pickaxe-regex" -
-	    "--simplify-by-decoration" {
-		# These mean that we get a subset of the commits
-		set filtered 1
-		lappend glflags $arg
-	    }
-	    "-L*" {
-		# Line-log with 'stuck' argument (unstuck form is
-		# not supported)
-		set filtered 1
-		set vinlinediff($n) 1
-		set allknown 0
-		lappend glflags $arg
-	    }
-	    "-n" {
-		# This appears to be the only one that has a value as a
-		# separate word following it
-		set filtered 1
-		set nextisval 1
-		lappend glflags $arg
-	    }
-	    "--not" - "--all" {
-		lappend revargs $arg
-	    }
-	    "--merge" {
-		set vmergeonly($n) 1
-		# git rev-parse doesn't understand --merge
-		lappend revargs --gitk-symmetric-diff-marker MERGE_HEAD...HEAD
-	    }
-	    "--no-replace-objects" {
-		set env(GIT_NO_REPLACE_OBJECTS) "1"
-	    }
-	    "-*" {
-		# Other flag arguments including -<n>
-		if {[string is digit -strict [string range $arg 1 end]]} {
-		    set filtered 1
-		} else {
-		    # a flag argument that we don't recognize;
-		    # that means we can't optimize
-		    set allknown 0
-		}
-		lappend glflags $arg
-	    }
-	    default {
-		# Non-flag arguments specify commits or ranges of commits
-		if {[string match "*...*" $arg]} {
-		    lappend revargs --gitk-symmetric-diff-marker
-		}
-		lappend revargs $arg
-	    }
-	}
-    }
-    set vdflags($n) $diffargs
-    set vflags($n) $glflags
-    set vrevs($n) $revargs
-    set vfiltered($n) $filtered
-    set vorigargs($n) $origargs
-    return $allknown
+	set vdflags($n) $diffargs
+	set vflags($n) $glflags
+	set vrevs($n) $revargs
+	set vfiltered($n) $filtered
+	set vorigargs($n) $origargs
+	return $allknown
 }
 
 proc parseviewrevs {view revs} {
-    global vposids vnegids
+	global vposids vnegids
 
-    if {$revs eq {}} {
-	set revs HEAD
-    } elseif {[lsearch -exact $revs --all] >= 0} {
-	lappend revs HEAD
-    }
-    if {[catch {set ids [eval exec git rev-parse $revs]} err]} {
-	# we get stdout followed by stderr in $err
-	# for an unknown rev, git rev-parse echoes it and then errors out
-	set errlines [split $err "\n"]
-	set badrev {}
-	for {set l 0} {$l < [llength $errlines]} {incr l} {
-	    set line [lindex $errlines $l]
-	    if {!([string length $line] == 40 && [string is xdigit $line])} {
-		if {[string match "fatal:*" $line]} {
-		    if {[string match "fatal: ambiguous argument*" $line]
-			&& $badrev ne {}} {
-			if {[llength $badrev] == 1} {
-			    set err "unknown revision $badrev"
-			} else {
-			    set err "unknown revisions: [join $badrev ", "]"
+	if {$revs eq {}} {
+		set revs HEAD
+	} elseif {[lsearch -exact $revs --all] >= 0} {
+		lappend revs HEAD
+	}
+	if {[catch {set ids [eval exec git rev-parse $revs]} err]} {
+		# we get stdout followed by stderr in $err
+		# for an unknown rev, git rev-parse echoes it and then errors out
+		set errlines [split $err "\n"]
+		set badrev {}
+		for {set l 0} {$l < [llength $errlines]} {incr l} {
+			set line [lindex $errlines $l]
+			if {!([string length $line] == 40 && [string is xdigit $line])} {
+				if {[string match "fatal:*" $line]} {
+					if {[string match "fatal: ambiguous argument*" $line]
+						&& $badrev ne {}} {
+						if {[llength $badrev] == 1} {
+							set err "unknown revision $badrev"
+						} else {
+							set err "unknown revisions: [join $badrev ", "]"
+						}
+					} else {
+						set err [join [lrange $errlines $l end] "\n"]
+					}
+					break
+				}
+				lappend badrev $line
 			}
-		    } else {
-			set err [join [lrange $errlines $l end] "\n"]
-		    }
-		    break
 		}
-		lappend badrev $line
-	    }
+		error_popup "[mc "Error parsing revisions:"] $err"
+		return {}
 	}
-	error_popup "[mc "Error parsing revisions:"] $err"
-	return {}
-    }
-    set ret {}
-    set pos {}
-    set neg {}
-    set sdm 0
-    foreach id [split $ids "\n"] {
-	if {$id eq "--gitk-symmetric-diff-marker"} {
-	    set sdm 4
-	} elseif {[string match "^*" $id]} {
-	    if {$sdm != 1} {
-		lappend ret $id
-		if {$sdm == 3} {
-		    set sdm 0
+	set ret {}
+	set pos {}
+	set neg {}
+	set sdm 0
+	foreach id [split $ids "\n"] {
+		if {$id eq "--gitk-symmetric-diff-marker"} {
+			set sdm 4
+		} elseif {[string match "^*" $id]} {
+			if {$sdm != 1} {
+				lappend ret $id
+				if {$sdm == 3} {
+					set sdm 0
+				}
+			}
+			lappend neg [string range $id 1 end]
+		} else {
+			if {$sdm != 2} {
+				lappend ret $id
+			} else {
+				lset ret end $id...[lindex $ret end]
+			}
+			lappend pos $id
 		}
-	    }
-	    lappend neg [string range $id 1 end]
-	} else {
-	    if {$sdm != 2} {
-		lappend ret $id
-	    } else {
-		lset ret end $id...[lindex $ret end]
-	    }
-	    lappend pos $id
+		incr sdm -1
 	}
-	incr sdm -1
-    }
-    set vposids($view) $pos
-    set vnegids($view) $neg
-    return $ret
+	set vposids($view) $pos
+	set vnegids($view) $neg
+	return $ret
 }
 
 # Start off a git log process and arrange to read its output
 proc start_rev_list {view} {
-    global startmsecs commitidx viewcomplete curview
-    global tclencoding
-    global viewargs viewargscmd viewfiles vfilelimit
-    global showlocalchanges
-    global viewactive viewinstances vmergeonly
-    global mainheadid viewmainheadid viewmainheadid_orig
-    global vcanopt vflags vrevs vorigargs
-    global show_notes
+	global startmsecs commitidx viewcomplete curview
+	global tclencoding
+	global viewargs viewargscmd viewfiles vfilelimit
+	global showlocalchanges
+	global viewactive viewinstances vmergeonly
+	global mainheadid viewmainheadid viewmainheadid_orig
+	global vcanopt vflags vrevs vorigargs
+	global show_notes
 
-    set startmsecs [clock clicks -milliseconds]
-    set commitidx($view) 0
-    # these are set this way for the error exits
-    set viewcomplete($view) 1
-    set viewactive($view) 0
-    varcinit $view
+	set startmsecs [clock clicks -milliseconds]
+	set commitidx($view) 0
+	# these are set this way for the error exits
+	set viewcomplete($view) 1
+	set viewactive($view) 0
+	varcinit $view
+
+	set args $viewargs($view)
+	if {$viewargscmd($view) ne {}} {
+		if {[catch {
+			set str [exec sh -c $viewargscmd($view)]
+		} err]} {
+			error_popup "[mc "Error executing --argscmd command:"] $err"
+			return 0
+		}
+		set args [concat $args [split $str "\n"]]
+	}
+	set vcanopt($view) [parseviewargs $view $args]
+
+	set files $viewfiles($view)
+	if {$vmergeonly($view)} {
+		set files [unmerged_files $files]
+		if {$files eq {}} {
+			global nr_unmerged
+			if {$nr_unmerged == 0} {
+				error_popup [mc "No files selected: --merge specified but\
+							 no files are unmerged."]
+			} else {
+				error_popup [mc "No files selected: --merge specified but\
+							 no unmerged files are within file limit."]
+			}
+			return 0
+		}
+	}
+	set vfilelimit($view) $files
+
+	if {$vcanopt($view)} {
+		set revs [parseviewrevs $view $vrevs($view)]
+		if {$revs eq {}} {
+			return 0
+		}
+		set args [concat $vflags($view) $revs]
+	} else {
+		set args $vorigargs($view)
+	}
 
-    set args $viewargs($view)
-    if {$viewargscmd($view) ne {}} {
 	if {[catch {
-	    set str [exec sh -c $viewargscmd($view)]
+		set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
+						--parents --boundary $args "--" $files] r]
 	} err]} {
-	    error_popup "[mc "Error executing --argscmd command:"] $err"
-	    return 0
+		error_popup "[mc "Error executing git log:"] $err"
+		return 0
 	}
-	set args [concat $args [split $str "\n"]]
-    }
-    set vcanopt($view) [parseviewargs $view $args]
-
-    set files $viewfiles($view)
-    if {$vmergeonly($view)} {
-	set files [unmerged_files $files]
-	if {$files eq {}} {
-	    global nr_unmerged
-	    if {$nr_unmerged == 0} {
-		error_popup [mc "No files selected: --merge specified but\
-			     no files are unmerged."]
-	    } else {
-		error_popup [mc "No files selected: --merge specified but\
-			     no unmerged files are within file limit."]
-	    }
-	    return 0
+	set i [reg_instance $fd]
+	set viewinstances($view) [list $i]
+	set viewmainheadid($view) $mainheadid
+	set viewmainheadid_orig($view) $mainheadid
+	if {$files ne {} && $mainheadid ne {}} {
+		get_viewmainhead $view
 	}
-    }
-    set vfilelimit($view) $files
-
-    if {$vcanopt($view)} {
-	set revs [parseviewrevs $view $vrevs($view)]
-	if {$revs eq {}} {
-	    return 0
+	if {$showlocalchanges && $viewmainheadid($view) ne {}} {
+		interestedin $viewmainheadid($view) dodiffindex
 	}
-	set args [concat $vflags($view) $revs]
-    } else {
-	set args $vorigargs($view)
-    }
-
-    if {[catch {
-	set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-			--parents --boundary $args "--" $files] r]
-    } err]} {
-	error_popup "[mc "Error executing git log:"] $err"
-	return 0
-    }
-    set i [reg_instance $fd]
-    set viewinstances($view) [list $i]
-    set viewmainheadid($view) $mainheadid
-    set viewmainheadid_orig($view) $mainheadid
-    if {$files ne {} && $mainheadid ne {}} {
-	get_viewmainhead $view
-    }
-    if {$showlocalchanges && $viewmainheadid($view) ne {}} {
-	interestedin $viewmainheadid($view) dodiffindex
-    }
-    fconfigure $fd -blocking 0 -translation lf -eofchar {}
-    if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
-    }
-    filerun $fd [list getcommitlines $fd $i $view 0]
-    nowbusy $view [mc "Reading"]
-    set viewcomplete($view) 0
-    set viewactive($view) 1
-    return 1
+	fconfigure $fd -blocking 0 -translation lf -eofchar {}
+	if {$tclencoding != {}} {
+		fconfigure $fd -encoding $tclencoding
+	}
+	filerun $fd [list getcommitlines $fd $i $view 0]
+	nowbusy $view [mc "Reading"]
+	set viewcomplete($view) 0
+	set viewactive($view) 1
+	return 1
 }
 
 proc stop_instance {inst} {
-    global commfd leftover
+	global commfd leftover
 
-    set fd $commfd($inst)
-    catch {
-	set pid [pid $fd]
+	set fd $commfd($inst)
+	catch {
+		set pid [pid $fd]
 
-	if {$::tcl_platform(platform) eq {windows}} {
-	    exec taskkill /pid $pid
-	} else {
-	    exec kill $pid
+		if {$::tcl_platform(platform) eq {windows}} {
+			exec taskkill /pid $pid
+		} else {
+			exec kill $pid
+		}
 	}
-    }
-    catch {close $fd}
-    nukefile $fd
-    unset commfd($inst)
-    unset leftover($inst)
+	catch {close $fd}
+	nukefile $fd
+	unset commfd($inst)
+	unset leftover($inst)
 }
 
 proc stop_backends {} {
-    global commfd
+	global commfd
 
-    foreach inst [array names commfd] {
-	stop_instance $inst
-    }
+	foreach inst [array names commfd] {
+		stop_instance $inst
+	}
 }
 
 proc stop_rev_list {view} {
-    global viewinstances
+	global viewinstances
 
-    foreach inst $viewinstances($view) {
-	stop_instance $inst
-    }
-    set viewinstances($view) {}
+	foreach inst $viewinstances($view) {
+		stop_instance $inst
+	}
+	set viewinstances($view) {}
 }
 
 proc reset_pending_select {selid} {
-    global pending_select mainheadid selectheadid
+	global pending_select mainheadid selectheadid
 
-    if {$selid ne {}} {
-	set pending_select $selid
-    } elseif {$selectheadid ne {}} {
-	set pending_select $selectheadid
-    } else {
-	set pending_select $mainheadid
-    }
+	if {$selid ne {}} {
+		set pending_select $selid
+	} elseif {$selectheadid ne {}} {
+		set pending_select $selectheadid
+	} else {
+		set pending_select $mainheadid
+	}
 }
 
 proc getcommits {selid} {
-    global canv curview need_redisplay viewactive
+	global canv curview need_redisplay viewactive
 
-    initlayout
-    if {[start_rev_list $curview]} {
-	reset_pending_select $selid
-	show_status [mc "Reading commits..."]
-	set need_redisplay 1
-    } else {
-	show_status [mc "No commits selected"]
-    }
+	initlayout
+	if {[start_rev_list $curview]} {
+		reset_pending_select $selid
+		show_status [mc "Reading commits..."]
+		set need_redisplay 1
+	} else {
+		show_status [mc "No commits selected"]
+	}
 }
 
 proc updatecommits {} {
-    global curview vcanopt vorigargs vfilelimit viewinstances
-    global viewactive viewcomplete tclencoding
-    global startmsecs showneartags showlocalchanges
-    global mainheadid viewmainheadid viewmainheadid_orig pending_select
-    global hasworktree
-    global varcid vposids vnegids vflags vrevs
-    global show_notes
+	global curview vcanopt vorigargs vfilelimit viewinstances
+	global viewactive viewcomplete tclencoding
+	global startmsecs showneartags showlocalchanges
+	global mainheadid viewmainheadid viewmainheadid_orig pending_select
+	global hasworktree
+	global varcid vposids vnegids vflags vrevs
+	global show_notes
 
-    set hasworktree [hasworktree]
-    rereadrefs
-    set view $curview
-    if {$mainheadid ne $viewmainheadid_orig($view)} {
-	if {$showlocalchanges} {
-	    dohidelocalchanges
-	}
-	set viewmainheadid($view) $mainheadid
-	set viewmainheadid_orig($view) $mainheadid
-	if {$vfilelimit($view) ne {}} {
-	    get_viewmainhead $view
-	}
-    }
-    if {$showlocalchanges} {
-	doshowlocalchanges
-    }
-    if {$vcanopt($view)} {
-	set oldpos $vposids($view)
-	set oldneg $vnegids($view)
-	set revs [parseviewrevs $view $vrevs($view)]
-	if {$revs eq {}} {
-	    return
-	}
-	# note: getting the delta when negative refs change is hard,
-	# and could require multiple git log invocations, so in that
-	# case we ask git log for all the commits (not just the delta)
-	if {$oldneg eq $vnegids($view)} {
-	    set newrevs {}
-	    set npos 0
-	    # take out positive refs that we asked for before or
-	    # that we have already seen
-	    foreach rev $revs {
-		if {[string length $rev] == 40} {
-		    if {[lsearch -exact $oldpos $rev] < 0
-			&& ![info exists varcid($view,$rev)]} {
-			lappend newrevs $rev
-			incr npos
-		    }
-		} else {
-		    lappend $newrevs $rev
+	set hasworktree [hasworktree]
+	rereadrefs
+	set view $curview
+	if {$mainheadid ne $viewmainheadid_orig($view)} {
+		if {$showlocalchanges} {
+			dohidelocalchanges
+		}
+		set viewmainheadid($view) $mainheadid
+		set viewmainheadid_orig($view) $mainheadid
+		if {$vfilelimit($view) ne {}} {
+			get_viewmainhead $view
 		}
-	    }
-	    if {$npos == 0} return
-	    set revs $newrevs
-	    set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]]
 	}
-	set args [concat $vflags($view) $revs --not $oldpos]
-    } else {
-	set args $vorigargs($view)
-    }
-    if {[catch {
-	set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-			--parents --boundary $args "--" $vfilelimit($view)] r]
-    } err]} {
-	error_popup "[mc "Error executing git log:"] $err"
-	return
-    }
-    if {$viewactive($view) == 0} {
-	set startmsecs [clock clicks -milliseconds]
-    }
-    set i [reg_instance $fd]
-    lappend viewinstances($view) $i
-    fconfigure $fd -blocking 0 -translation lf -eofchar {}
-    if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
-    }
-    filerun $fd [list getcommitlines $fd $i $view 1]
-    incr viewactive($view)
-    set viewcomplete($view) 0
-    reset_pending_select {}
-    nowbusy $view [mc "Reading"]
-    if {$showneartags} {
-	getallcommits
-    }
+	if {$showlocalchanges} {
+		doshowlocalchanges
+	}
+	if {$vcanopt($view)} {
+		set oldpos $vposids($view)
+		set oldneg $vnegids($view)
+		set revs [parseviewrevs $view $vrevs($view)]
+		if {$revs eq {}} {
+			return
+		}
+		# note: getting the delta when negative refs change is hard,
+		# and could require multiple git log invocations, so in that
+		# case we ask git log for all the commits (not just the delta)
+		if {$oldneg eq $vnegids($view)} {
+			set newrevs {}
+			set npos 0
+			# take out positive refs that we asked for before or
+			# that we have already seen
+			foreach rev $revs {
+				if {[string length $rev] == 40} {
+					if {[lsearch -exact $oldpos $rev] < 0
+						&& ![info exists varcid($view,$rev)]} {
+						lappend newrevs $rev
+						incr npos
+					}
+				} else {
+					lappend $newrevs $rev
+				}
+			}
+			if {$npos == 0} return
+			set revs $newrevs
+			set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]]
+		}
+		set args [concat $vflags($view) $revs --not $oldpos]
+	} else {
+		set args $vorigargs($view)
+	}
+	if {[catch {
+		set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
+						--parents --boundary $args "--" $vfilelimit($view)] r]
+	} err]} {
+		error_popup "[mc "Error executing git log:"] $err"
+		return
+	}
+	if {$viewactive($view) == 0} {
+		set startmsecs [clock clicks -milliseconds]
+	}
+	set i [reg_instance $fd]
+	lappend viewinstances($view) $i
+	fconfigure $fd -blocking 0 -translation lf -eofchar {}
+	if {$tclencoding != {}} {
+		fconfigure $fd -encoding $tclencoding
+	}
+	filerun $fd [list getcommitlines $fd $i $view 1]
+	incr viewactive($view)
+	set viewcomplete($view) 0
+	reset_pending_select {}
+	nowbusy $view [mc "Reading"]
+	if {$showneartags} {
+		getallcommits
+	}
 }
 
 proc reloadcommits {} {
-    global curview viewcomplete selectedline currentid thickerline
-    global showneartags treediffs commitinterest cached_commitrow
-    global targetid commitinfo
+	global curview viewcomplete selectedline currentid thickerline
+	global showneartags treediffs commitinterest cached_commitrow
+	global targetid commitinfo
 
-    set selid {}
-    if {$selectedline ne {}} {
-	set selid $currentid
-    }
+	set selid {}
+	if {$selectedline ne {}} {
+		set selid $currentid
+	}
 
-    if {!$viewcomplete($curview)} {
-	stop_rev_list $curview
-    }
-    resetvarcs $curview
-    set selectedline {}
-    unset -nocomplain currentid
-    unset -nocomplain thickerline
-    unset -nocomplain treediffs
-    readrefs
-    changedrefs
-    if {$showneartags} {
-	getallcommits
-    }
-    clear_display
-    unset -nocomplain commitinfo
-    unset -nocomplain commitinterest
-    unset -nocomplain cached_commitrow
-    unset -nocomplain targetid
-    setcanvscroll
-    getcommits $selid
-    return 0
+	if {!$viewcomplete($curview)} {
+		stop_rev_list $curview
+	}
+	resetvarcs $curview
+	set selectedline {}
+	unset -nocomplain currentid
+	unset -nocomplain thickerline
+	unset -nocomplain treediffs
+	readrefs
+	changedrefs
+	if {$showneartags} {
+		getallcommits
+	}
+	clear_display
+	unset -nocomplain commitinfo
+	unset -nocomplain commitinterest
+	unset -nocomplain cached_commitrow
+	unset -nocomplain targetid
+	setcanvscroll
+	getcommits $selid
+	return 0
 }
 
 # This makes a string representation of a positive integer which
 # sorts as a string in numerical order
 proc strrep {n} {
-    if {$n < 16} {
-	return [format "%x" $n]
-    } elseif {$n < 256} {
-	return [format "x%.2x" $n]
-    } elseif {$n < 65536} {
-	return [format "y%.4x" $n]
-    }
-    return [format "z%.8x" $n]
+	if {$n < 16} {
+		return [format "%x" $n]
+	} elseif {$n < 256} {
+		return [format "x%.2x" $n]
+	} elseif {$n < 65536} {
+		return [format "y%.4x" $n]
+	}
+	return [format "z%.8x" $n]
 }
 
 # Procedures used in reordering commits from git log (without
 # --topo-order) into the order for display.
 
 proc varcinit {view} {
-    global varcstart vupptr vdownptr vleftptr vbackptr varctok varcrow
-    global vtokmod varcmod vrowmod varcix vlastins
+	global varcstart vupptr vdownptr vleftptr vbackptr varctok varcrow
+	global vtokmod varcmod vrowmod varcix vlastins
 
-    set varcstart($view) {{}}
-    set vupptr($view) {0}
-    set vdownptr($view) {0}
-    set vleftptr($view) {0}
-    set vbackptr($view) {0}
-    set varctok($view) {{}}
-    set varcrow($view) {{}}
-    set vtokmod($view) {}
-    set varcmod($view) 0
-    set vrowmod($view) 0
-    set varcix($view) {{}}
-    set vlastins($view) {0}
+	set varcstart($view) {{}}
+	set vupptr($view) {0}
+	set vdownptr($view) {0}
+	set vleftptr($view) {0}
+	set vbackptr($view) {0}
+	set varctok($view) {{}}
+	set varcrow($view) {{}}
+	set vtokmod($view) {}
+	set varcmod($view) 0
+	set vrowmod($view) 0
+	set varcix($view) {{}}
+	set vlastins($view) {0}
 }
 
 proc resetvarcs {view} {
-    global varcid varccommits parents children vseedcount ordertok
-    global vshortids
+	global varcid varccommits parents children vseedcount ordertok
+	global vshortids
 
-    foreach vid [array names varcid $view,*] {
-	unset varcid($vid)
-	unset children($vid)
-	unset parents($vid)
-    }
-    foreach vid [array names vshortids $view,*] {
-	unset vshortids($vid)
-    }
-    # some commits might have children but haven't been seen yet
-    foreach vid [array names children $view,*] {
-	unset children($vid)
-    }
-    foreach va [array names varccommits $view,*] {
-	unset varccommits($va)
-    }
-    foreach vd [array names vseedcount $view,*] {
-	unset vseedcount($vd)
-    }
-    unset -nocomplain ordertok
+	foreach vid [array names varcid $view,*] {
+		unset varcid($vid)
+		unset children($vid)
+		unset parents($vid)
+	}
+	foreach vid [array names vshortids $view,*] {
+		unset vshortids($vid)
+	}
+	# some commits might have children but haven't been seen yet
+	foreach vid [array names children $view,*] {
+		unset children($vid)
+	}
+	foreach va [array names varccommits $view,*] {
+		unset varccommits($va)
+	}
+	foreach vd [array names vseedcount $view,*] {
+		unset vseedcount($vd)
+	}
+	unset -nocomplain ordertok
 }
 
 # returns a list of the commits with no children
 proc seeds {v} {
-    global vdownptr vleftptr varcstart
+	global vdownptr vleftptr varcstart
 
-    set ret {}
-    set a [lindex $vdownptr($v) 0]
-    while {$a != 0} {
-	lappend ret [lindex $varcstart($v) $a]
-	set a [lindex $vleftptr($v) $a]
-    }
-    return $ret
+	set ret {}
+	set a [lindex $vdownptr($v) 0]
+	while {$a != 0} {
+		lappend ret [lindex $varcstart($v) $a]
+		set a [lindex $vleftptr($v) $a]
+	}
+	return $ret
 }
 
 proc newvarc {view id} {
-    global varcid varctok parents children vdatemode
-    global vupptr vdownptr vleftptr vbackptr varcrow varcix varcstart
-    global commitdata commitinfo vseedcount varccommits vlastins
+	global varcid varctok parents children vdatemode
+	global vupptr vdownptr vleftptr vbackptr varcrow varcix varcstart
+	global commitdata commitinfo vseedcount varccommits vlastins
 
-    set a [llength $varctok($view)]
-    set vid $view,$id
-    if {[llength $children($vid)] == 0 || $vdatemode($view)} {
-	if {![info exists commitinfo($id)]} {
-	    parsecommit $id $commitdata($id) 1
+	set a [llength $varctok($view)]
+	set vid $view,$id
+	if {[llength $children($vid)] == 0 || $vdatemode($view)} {
+		if {![info exists commitinfo($id)]} {
+			parsecommit $id $commitdata($id) 1
+		}
+		set cdate [lindex [lindex $commitinfo($id) 4] 0]
+		if {![string is integer -strict $cdate]} {
+			set cdate 0
+		}
+		if {![info exists vseedcount($view,$cdate)]} {
+			set vseedcount($view,$cdate) -1
+		}
+		set c [incr vseedcount($view,$cdate)]
+		set cdate [expr {$cdate ^ 0xffffffff}]
+		set tok "s[strrep $cdate][strrep $c]"
+	} else {
+		set tok {}
 	}
-	set cdate [lindex [lindex $commitinfo($id) 4] 0]
-	if {![string is integer -strict $cdate]} {
-	    set cdate 0
+	set ka 0
+	if {[llength $children($vid)] > 0} {
+		set kid [lindex $children($vid) end]
+		set k $varcid($view,$kid)
+		if {[string compare [lindex $varctok($view) $k] $tok] > 0} {
+			set ki $kid
+			set ka $k
+			set tok [lindex $varctok($view) $k]
+		}
 	}
-	if {![info exists vseedcount($view,$cdate)]} {
-	    set vseedcount($view,$cdate) -1
+	if {$ka != 0} {
+		set i [lsearch -exact $parents($view,$ki) $id]
+		set j [expr {[llength $parents($view,$ki)] - 1 - $i}]
+		append tok [strrep $j]
 	}
-	set c [incr vseedcount($view,$cdate)]
-	set cdate [expr {$cdate ^ 0xffffffff}]
-	set tok "s[strrep $cdate][strrep $c]"
-    } else {
-	set tok {}
-    }
-    set ka 0
-    if {[llength $children($vid)] > 0} {
-	set kid [lindex $children($vid) end]
-	set k $varcid($view,$kid)
-	if {[string compare [lindex $varctok($view) $k] $tok] > 0} {
-	    set ki $kid
-	    set ka $k
-	    set tok [lindex $varctok($view) $k]
+	set c [lindex $vlastins($view) $ka]
+	if {$c == 0 || [string compare $tok [lindex $varctok($view) $c]] < 0} {
+		set c $ka
+		set b [lindex $vdownptr($view) $ka]
+	} else {
+		set b [lindex $vleftptr($view) $c]
 	}
-    }
-    if {$ka != 0} {
-	set i [lsearch -exact $parents($view,$ki) $id]
-	set j [expr {[llength $parents($view,$ki)] - 1 - $i}]
-	append tok [strrep $j]
-    }
-    set c [lindex $vlastins($view) $ka]
-    if {$c == 0 || [string compare $tok [lindex $varctok($view) $c]] < 0} {
-	set c $ka
-	set b [lindex $vdownptr($view) $ka]
-    } else {
-	set b [lindex $vleftptr($view) $c]
-    }
-    while {$b != 0 && [string compare $tok [lindex $varctok($view) $b]] >= 0} {
-	set c $b
-	set b [lindex $vleftptr($view) $c]
-    }
-    if {$c == $ka} {
-	lset vdownptr($view) $ka $a
-	lappend vbackptr($view) 0
-    } else {
-	lset vleftptr($view) $c $a
-	lappend vbackptr($view) $c
-    }
-    lset vlastins($view) $ka $a
-    lappend vupptr($view) $ka
-    lappend vleftptr($view) $b
-    if {$b != 0} {
-	lset vbackptr($view) $b $a
-    }
-    lappend varctok($view) $tok
-    lappend varcstart($view) $id
-    lappend vdownptr($view) 0
-    lappend varcrow($view) {}
-    lappend varcix($view) {}
-    set varccommits($view,$a) {}
-    lappend vlastins($view) 0
-    return $a
+	while {$b != 0 && [string compare $tok [lindex $varctok($view) $b]] >= 0} {
+		set c $b
+		set b [lindex $vleftptr($view) $c]
+	}
+	if {$c == $ka} {
+		lset vdownptr($view) $ka $a
+		lappend vbackptr($view) 0
+	} else {
+		lset vleftptr($view) $c $a
+		lappend vbackptr($view) $c
+	}
+	lset vlastins($view) $ka $a
+	lappend vupptr($view) $ka
+	lappend vleftptr($view) $b
+	if {$b != 0} {
+		lset vbackptr($view) $b $a
+	}
+	lappend varctok($view) $tok
+	lappend varcstart($view) $id
+	lappend vdownptr($view) 0
+	lappend varcrow($view) {}
+	lappend varcix($view) {}
+	set varccommits($view,$a) {}
+	lappend vlastins($view) 0
+	return $a
 }
 
 proc splitvarc {p v} {
-    global varcid varcstart varccommits varctok vtokmod
-    global vupptr vdownptr vleftptr vbackptr varcix varcrow vlastins
+	global varcid varcstart varccommits varctok vtokmod
+	global vupptr vdownptr vleftptr vbackptr varcix varcrow vlastins
 
-    set oa $varcid($v,$p)
-    set otok [lindex $varctok($v) $oa]
-    set ac $varccommits($v,$oa)
-    set i [lsearch -exact $varccommits($v,$oa) $p]
-    if {$i <= 0} return
-    set na [llength $varctok($v)]
-    # "%" sorts before "0"...
-    set tok "$otok%[strrep $i]"
-    lappend varctok($v) $tok
-    lappend varcrow($v) {}
-    lappend varcix($v) {}
-    set varccommits($v,$oa) [lrange $ac 0 [expr {$i - 1}]]
-    set varccommits($v,$na) [lrange $ac $i end]
-    lappend varcstart($v) $p
-    foreach id $varccommits($v,$na) {
-	set varcid($v,$id) $na
-    }
-    lappend vdownptr($v) [lindex $vdownptr($v) $oa]
-    lappend vlastins($v) [lindex $vlastins($v) $oa]
-    lset vdownptr($v) $oa $na
-    lset vlastins($v) $oa 0
-    lappend vupptr($v) $oa
-    lappend vleftptr($v) 0
-    lappend vbackptr($v) 0
-    for {set b [lindex $vdownptr($v) $na]} {$b != 0} {set b [lindex $vleftptr($v) $b]} {
-	lset vupptr($v) $b $na
-    }
-    if {[string compare $otok $vtokmod($v)] <= 0} {
-	modify_arc $v $oa
-    }
+	set oa $varcid($v,$p)
+	set otok [lindex $varctok($v) $oa]
+	set ac $varccommits($v,$oa)
+	set i [lsearch -exact $varccommits($v,$oa) $p]
+	if {$i <= 0} return
+	set na [llength $varctok($v)]
+	# "%" sorts before "0"...
+	set tok "$otok%[strrep $i]"
+	lappend varctok($v) $tok
+	lappend varcrow($v) {}
+	lappend varcix($v) {}
+	set varccommits($v,$oa) [lrange $ac 0 [expr {$i - 1}]]
+	set varccommits($v,$na) [lrange $ac $i end]
+	lappend varcstart($v) $p
+	foreach id $varccommits($v,$na) {
+		set varcid($v,$id) $na
+	}
+	lappend vdownptr($v) [lindex $vdownptr($v) $oa]
+	lappend vlastins($v) [lindex $vlastins($v) $oa]
+	lset vdownptr($v) $oa $na
+	lset vlastins($v) $oa 0
+	lappend vupptr($v) $oa
+	lappend vleftptr($v) 0
+	lappend vbackptr($v) 0
+	for {set b [lindex $vdownptr($v) $na]} {$b != 0} {set b [lindex $vleftptr($v) $b]} {
+		lset vupptr($v) $b $na
+	}
+	if {[string compare $otok $vtokmod($v)] <= 0} {
+		modify_arc $v $oa
+	}
 }
 
 proc renumbervarc {a v} {
-    global parents children varctok varcstart varccommits
-    global vupptr vdownptr vleftptr vbackptr vlastins varcid vtokmod vdatemode
+	global parents children varctok varcstart varccommits
+	global vupptr vdownptr vleftptr vbackptr vlastins varcid vtokmod vdatemode
 
-    set t1 [clock clicks -milliseconds]
-    set todo {}
-    set isrelated($a) 1
-    set kidchanged($a) 1
-    set ntot 0
-    while {$a != 0} {
-	if {[info exists isrelated($a)]} {
-	    lappend todo $a
-	    set id [lindex $varccommits($v,$a) end]
-	    foreach p $parents($v,$id) {
-		if {[info exists varcid($v,$p)]} {
-		    set isrelated($varcid($v,$p)) 1
+	set t1 [clock clicks -milliseconds]
+	set todo {}
+	set isrelated($a) 1
+	set kidchanged($a) 1
+	set ntot 0
+	while {$a != 0} {
+		if {[info exists isrelated($a)]} {
+			lappend todo $a
+			set id [lindex $varccommits($v,$a) end]
+			foreach p $parents($v,$id) {
+				if {[info exists varcid($v,$p)]} {
+					set isrelated($varcid($v,$p)) 1
+				}
+			}
 		}
-	    }
+		incr ntot
+		set b [lindex $vdownptr($v) $a]
+		if {$b == 0} {
+			while {$a != 0} {
+				set b [lindex $vleftptr($v) $a]
+				if {$b != 0} break
+				set a [lindex $vupptr($v) $a]
+			}
+		}
+		set a $b
 	}
-	incr ntot
-	set b [lindex $vdownptr($v) $a]
-	if {$b == 0} {
-	    while {$a != 0} {
-		set b [lindex $vleftptr($v) $a]
-		if {$b != 0} break
-		set a [lindex $vupptr($v) $a]
-	    }
+	foreach a $todo {
+		if {![info exists kidchanged($a)]} continue
+		set id [lindex $varcstart($v) $a]
+		if {[llength $children($v,$id)] > 1} {
+			set children($v,$id) [lsort -command [list vtokcmp $v] \
+									  $children($v,$id)]
+		}
+		set oldtok [lindex $varctok($v) $a]
+		if {!$vdatemode($v)} {
+			set tok {}
+		} else {
+			set tok $oldtok
+		}
+		set ka 0
+		set kid [last_real_child $v,$id]
+		if {$kid ne {}} {
+			set k $varcid($v,$kid)
+			if {[string compare [lindex $varctok($v) $k] $tok] > 0} {
+				set ki $kid
+				set ka $k
+				set tok [lindex $varctok($v) $k]
+			}
+		}
+		if {$ka != 0} {
+			set i [lsearch -exact $parents($v,$ki) $id]
+			set j [expr {[llength $parents($v,$ki)] - 1 - $i}]
+			append tok [strrep $j]
+		}
+		if {$tok eq $oldtok} {
+			continue
+		}
+		set id [lindex $varccommits($v,$a) end]
+		foreach p $parents($v,$id) {
+			if {[info exists varcid($v,$p)]} {
+				set kidchanged($varcid($v,$p)) 1
+			} else {
+				set sortkids($p) 1
+			}
+		}
+		lset varctok($v) $a $tok
+		set b [lindex $vupptr($v) $a]
+		if {$b != $ka} {
+			if {[string compare [lindex $varctok($v) $ka] $vtokmod($v)] < 0} {
+				modify_arc $v $ka
+			}
+			if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
+				modify_arc $v $b
+			}
+			set c [lindex $vbackptr($v) $a]
+			set d [lindex $vleftptr($v) $a]
+			if {$c == 0} {
+				lset vdownptr($v) $b $d
+			} else {
+				lset vleftptr($v) $c $d
+			}
+			if {$d != 0} {
+				lset vbackptr($v) $d $c
+			}
+			if {[lindex $vlastins($v) $b] == $a} {
+				lset vlastins($v) $b $c
+			}
+			lset vupptr($v) $a $ka
+			set c [lindex $vlastins($v) $ka]
+			if {$c == 0 || \
+					[string compare $tok [lindex $varctok($v) $c]] < 0} {
+				set c $ka
+				set b [lindex $vdownptr($v) $ka]
+			} else {
+				set b [lindex $vleftptr($v) $c]
+			}
+			while {$b != 0 && \
+					  [string compare $tok [lindex $varctok($v) $b]] >= 0} {
+				set c $b
+				set b [lindex $vleftptr($v) $c]
+			}
+			if {$c == $ka} {
+				lset vdownptr($v) $ka $a
+				lset vbackptr($v) $a 0
+			} else {
+				lset vleftptr($v) $c $a
+				lset vbackptr($v) $a $c
+			}
+			lset vleftptr($v) $a $b
+			if {$b != 0} {
+				lset vbackptr($v) $b $a
+			}
+			lset vlastins($v) $ka $a
+		}
 	}
-	set a $b
-    }
-    foreach a $todo {
-	if {![info exists kidchanged($a)]} continue
-	set id [lindex $varcstart($v) $a]
-	if {[llength $children($v,$id)] > 1} {
-	    set children($v,$id) [lsort -command [list vtokcmp $v] \
-				      $children($v,$id)]
+	foreach id [array names sortkids] {
+		if {[llength $children($v,$id)] > 1} {
+			set children($v,$id) [lsort -command [list vtokcmp $v] \
+									  $children($v,$id)]
+		}
 	}
-	set oldtok [lindex $varctok($v) $a]
-	if {!$vdatemode($v)} {
-	    set tok {}
-	} else {
-	    set tok $oldtok
-	}
-	set ka 0
-	set kid [last_real_child $v,$id]
-	if {$kid ne {}} {
-	    set k $varcid($v,$kid)
-	    if {[string compare [lindex $varctok($v) $k] $tok] > 0} {
-		set ki $kid
-		set ka $k
-		set tok [lindex $varctok($v) $k]
-	    }
-	}
-	if {$ka != 0} {
-	    set i [lsearch -exact $parents($v,$ki) $id]
-	    set j [expr {[llength $parents($v,$ki)] - 1 - $i}]
-	    append tok [strrep $j]
-	}
-	if {$tok eq $oldtok} {
-	    continue
-	}
-	set id [lindex $varccommits($v,$a) end]
-	foreach p $parents($v,$id) {
-	    if {[info exists varcid($v,$p)]} {
-		set kidchanged($varcid($v,$p)) 1
-	    } else {
-		set sortkids($p) 1
-	    }
-	}
-	lset varctok($v) $a $tok
-	set b [lindex $vupptr($v) $a]
-	if {$b != $ka} {
-	    if {[string compare [lindex $varctok($v) $ka] $vtokmod($v)] < 0} {
-		modify_arc $v $ka
-	    }
-	    if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
-		modify_arc $v $b
-	    }
-	    set c [lindex $vbackptr($v) $a]
-	    set d [lindex $vleftptr($v) $a]
-	    if {$c == 0} {
-		lset vdownptr($v) $b $d
-	    } else {
-		lset vleftptr($v) $c $d
-	    }
-	    if {$d != 0} {
-		lset vbackptr($v) $d $c
-	    }
-	    if {[lindex $vlastins($v) $b] == $a} {
-		lset vlastins($v) $b $c
-	    }
-	    lset vupptr($v) $a $ka
-	    set c [lindex $vlastins($v) $ka]
-	    if {$c == 0 || \
-		    [string compare $tok [lindex $varctok($v) $c]] < 0} {
-		set c $ka
-		set b [lindex $vdownptr($v) $ka]
-	    } else {
-		set b [lindex $vleftptr($v) $c]
-	    }
-	    while {$b != 0 && \
-		      [string compare $tok [lindex $varctok($v) $b]] >= 0} {
-		set c $b
-		set b [lindex $vleftptr($v) $c]
-	    }
-	    if {$c == $ka} {
- 		lset vdownptr($v) $ka $a
-		lset vbackptr($v) $a 0
-	    } else {
-		lset vleftptr($v) $c $a
-		lset vbackptr($v) $a $c
-	    }
-	    lset vleftptr($v) $a $b
-	    if {$b != 0} {
-		lset vbackptr($v) $b $a
-	    }
-	    lset vlastins($v) $ka $a
-	}
-    }
-    foreach id [array names sortkids] {
-	if {[llength $children($v,$id)] > 1} {
-	    set children($v,$id) [lsort -command [list vtokcmp $v] \
-				      $children($v,$id)]
-	}
-    }
-    set t2 [clock clicks -milliseconds]
-    #puts "renumbervarc did [llength $todo] of $ntot arcs in [expr {$t2-$t1}]ms"
+	set t2 [clock clicks -milliseconds]
+	#puts "renumbervarc did [llength $todo] of $ntot arcs in [expr {$t2-$t1}]ms"
 }
 
 # Fix up the graph after we have found out that in view $v,
 # $p (a commit that we have already seen) is actually the parent
 # of the last commit in arc $a.
 proc fix_reversal {p a v} {
-    global varcid varcstart varctok vupptr
+	global varcid varcstart varctok vupptr
 
-    set pa $varcid($v,$p)
-    if {$p ne [lindex $varcstart($v) $pa]} {
-	splitvarc $p $v
 	set pa $varcid($v,$p)
-    }
-    # seeds always need to be renumbered
-    if {[lindex $vupptr($v) $pa] == 0 ||
-	[string compare [lindex $varctok($v) $a] \
-	     [lindex $varctok($v) $pa]] > 0} {
-	renumbervarc $pa $v
-    }
+	if {$p ne [lindex $varcstart($v) $pa]} {
+		splitvarc $p $v
+		set pa $varcid($v,$p)
+	}
+	# seeds always need to be renumbered
+	if {[lindex $vupptr($v) $pa] == 0 ||
+		[string compare [lindex $varctok($v) $a] \
+			 [lindex $varctok($v) $pa]] > 0} {
+		renumbervarc $pa $v
+	}
 }
 
 proc insertrow {id p v} {
-    global cmitlisted children parents varcid varctok vtokmod
-    global varccommits ordertok commitidx numcommits curview
-    global targetid targetrow vshortids
+	global cmitlisted children parents varcid varctok vtokmod
+	global varccommits ordertok commitidx numcommits curview
+	global targetid targetrow vshortids
 
-    readcommit $id
-    set vid $v,$id
-    set cmitlisted($vid) 1
-    set children($vid) {}
-    set parents($vid) [list $p]
-    set a [newvarc $v $id]
-    set varcid($vid) $a
-    lappend vshortids($v,[string range $id 0 3]) $id
-    if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} {
-	modify_arc $v $a
-    }
-    lappend varccommits($v,$a) $id
-    set vp $v,$p
-    if {[llength [lappend children($vp) $id]] > 1} {
-	set children($vp) [lsort -command [list vtokcmp $v] $children($vp)]
-	unset -nocomplain ordertok
-    }
-    fix_reversal $p $a $v
-    incr commitidx($v)
-    if {$v == $curview} {
-	set numcommits $commitidx($v)
-	setcanvscroll
-	if {[info exists targetid]} {
-	    if {![comes_before $targetid $p]} {
-		incr targetrow
-	    }
+	readcommit $id
+	set vid $v,$id
+	set cmitlisted($vid) 1
+	set children($vid) {}
+	set parents($vid) [list $p]
+	set a [newvarc $v $id]
+	set varcid($vid) $a
+	lappend vshortids($v,[string range $id 0 3]) $id
+	if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} {
+		modify_arc $v $a
+	}
+	lappend varccommits($v,$a) $id
+	set vp $v,$p
+	if {[llength [lappend children($vp) $id]] > 1} {
+		set children($vp) [lsort -command [list vtokcmp $v] $children($vp)]
+		unset -nocomplain ordertok
+	}
+	fix_reversal $p $a $v
+	incr commitidx($v)
+	if {$v == $curview} {
+		set numcommits $commitidx($v)
+		setcanvscroll
+		if {[info exists targetid]} {
+			if {![comes_before $targetid $p]} {
+				incr targetrow
+			}
+		}
 	}
-    }
 }
 
 proc insertfakerow {id p} {
-    global varcid varccommits parents children cmitlisted
-    global commitidx varctok vtokmod targetid targetrow curview numcommits
+	global varcid varccommits parents children cmitlisted
+	global commitidx varctok vtokmod targetid targetrow curview numcommits
 
-    set v $curview
-    set a $varcid($v,$p)
-    set i [lsearch -exact $varccommits($v,$a) $p]
-    if {$i < 0} {
-	puts "oops: insertfakerow can't find [shortids $p] on arc $a"
-	return
-    }
-    set children($v,$id) {}
-    set parents($v,$id) [list $p]
-    set varcid($v,$id) $a
-    lappend children($v,$p) $id
-    set cmitlisted($v,$id) 1
-    set numcommits [incr commitidx($v)]
-    # note we deliberately don't update varcstart($v) even if $i == 0
-    set varccommits($v,$a) [linsert $varccommits($v,$a) $i $id]
-    modify_arc $v $a $i
-    if {[info exists targetid]} {
-	if {![comes_before $targetid $p]} {
-	    incr targetrow
+	set v $curview
+	set a $varcid($v,$p)
+	set i [lsearch -exact $varccommits($v,$a) $p]
+	if {$i < 0} {
+		puts "oops: insertfakerow can't find [shortids $p] on arc $a"
+		return
 	}
-    }
-    setcanvscroll
-    drawvisible
+	set children($v,$id) {}
+	set parents($v,$id) [list $p]
+	set varcid($v,$id) $a
+	lappend children($v,$p) $id
+	set cmitlisted($v,$id) 1
+	set numcommits [incr commitidx($v)]
+	# note we deliberately don't update varcstart($v) even if $i == 0
+	set varccommits($v,$a) [linsert $varccommits($v,$a) $i $id]
+	modify_arc $v $a $i
+	if {[info exists targetid]} {
+		if {![comes_before $targetid $p]} {
+			incr targetrow
+		}
+	}
+	setcanvscroll
+	drawvisible
 }
 
 proc removefakerow {id} {
-    global varcid varccommits parents children commitidx
-    global varctok vtokmod cmitlisted currentid selectedline
-    global targetid curview numcommits
+	global varcid varccommits parents children commitidx
+	global varctok vtokmod cmitlisted currentid selectedline
+	global targetid curview numcommits
 
-    set v $curview
-    if {[llength $parents($v,$id)] != 1} {
-	puts "oops: removefakerow [shortids $id] has [llength $parents($v,$id)] parents"
-	return
-    }
-    set p [lindex $parents($v,$id) 0]
-    set a $varcid($v,$id)
-    set i [lsearch -exact $varccommits($v,$a) $id]
-    if {$i < 0} {
-	puts "oops: removefakerow can't find [shortids $id] on arc $a"
-	return
-    }
-    unset varcid($v,$id)
-    set varccommits($v,$a) [lreplace $varccommits($v,$a) $i $i]
-    unset parents($v,$id)
-    unset children($v,$id)
-    unset cmitlisted($v,$id)
-    set numcommits [incr commitidx($v) -1]
-    set j [lsearch -exact $children($v,$p) $id]
-    if {$j >= 0} {
-	set children($v,$p) [lreplace $children($v,$p) $j $j]
-    }
-    modify_arc $v $a $i
-    if {[info exist currentid] && $id eq $currentid} {
-	unset currentid
-	set selectedline {}
-    }
-    if {[info exists targetid] && $targetid eq $id} {
-	set targetid $p
-    }
-    setcanvscroll
-    drawvisible
+	set v $curview
+	if {[llength $parents($v,$id)] != 1} {
+		puts "oops: removefakerow [shortids $id] has [llength $parents($v,$id)] parents"
+		return
+	}
+	set p [lindex $parents($v,$id) 0]
+	set a $varcid($v,$id)
+	set i [lsearch -exact $varccommits($v,$a) $id]
+	if {$i < 0} {
+		puts "oops: removefakerow can't find [shortids $id] on arc $a"
+		return
+	}
+	unset varcid($v,$id)
+	set varccommits($v,$a) [lreplace $varccommits($v,$a) $i $i]
+	unset parents($v,$id)
+	unset children($v,$id)
+	unset cmitlisted($v,$id)
+	set numcommits [incr commitidx($v) -1]
+	set j [lsearch -exact $children($v,$p) $id]
+	if {$j >= 0} {
+		set children($v,$p) [lreplace $children($v,$p) $j $j]
+	}
+	modify_arc $v $a $i
+	if {[info exist currentid] && $id eq $currentid} {
+		unset currentid
+		set selectedline {}
+	}
+	if {[info exists targetid] && $targetid eq $id} {
+		set targetid $p
+	}
+	setcanvscroll
+	drawvisible
 }
 
 proc real_children {vp} {
-    global children nullid nullid2
+	global children nullid nullid2
 
-    set kids {}
-    foreach id $children($vp) {
-	if {$id ne $nullid && $id ne $nullid2} {
-	    lappend kids $id
+	set kids {}
+	foreach id $children($vp) {
+		if {$id ne $nullid && $id ne $nullid2} {
+			lappend kids $id
+		}
 	}
-    }
-    return $kids
+	return $kids
 }
 
 proc first_real_child {vp} {
-    global children nullid nullid2
+	global children nullid nullid2
 
-    foreach id $children($vp) {
-	if {$id ne $nullid && $id ne $nullid2} {
-	    return $id
+	foreach id $children($vp) {
+		if {$id ne $nullid && $id ne $nullid2} {
+			return $id
+		}
 	}
-    }
-    return {}
+	return {}
 }
 
 proc last_real_child {vp} {
-    global children nullid nullid2
+	global children nullid nullid2
 
-    set kids $children($vp)
-    for {set i [llength $kids]} {[incr i -1] >= 0} {} {
-	set id [lindex $kids $i]
-	if {$id ne $nullid && $id ne $nullid2} {
-	    return $id
+	set kids $children($vp)
+	for {set i [llength $kids]} {[incr i -1] >= 0} {} {
+		set id [lindex $kids $i]
+		if {$id ne $nullid && $id ne $nullid2} {
+			return $id
+		}
 	}
-    }
-    return {}
+	return {}
 }
 
 proc vtokcmp {v a b} {
-    global varctok varcid
+	global varctok varcid
 
-    return [string compare [lindex $varctok($v) $varcid($v,$a)] \
-		[lindex $varctok($v) $varcid($v,$b)]]
+	return [string compare [lindex $varctok($v) $varcid($v,$a)] \
+				[lindex $varctok($v) $varcid($v,$b)]]
 }
 
 # This assumes that if lim is not given, the caller has checked that
 # arc a's token is less than $vtokmod($v)
 proc modify_arc {v a {lim {}}} {
-    global varctok vtokmod varcmod varcrow vupptr curview vrowmod varccommits
+	global varctok vtokmod varcmod varcrow vupptr curview vrowmod varccommits
 
-    if {$lim ne {}} {
-	set c [string compare [lindex $varctok($v) $a] $vtokmod($v)]
-	if {$c > 0} return
-	if {$c == 0} {
-	    set r [lindex $varcrow($v) $a]
-	    if {$r ne {} && $vrowmod($v) <= $r + $lim} return
+	if {$lim ne {}} {
+		set c [string compare [lindex $varctok($v) $a] $vtokmod($v)]
+		if {$c > 0} return
+		if {$c == 0} {
+			set r [lindex $varcrow($v) $a]
+			if {$r ne {} && $vrowmod($v) <= $r + $lim} return
+		}
 	}
-    }
-    set vtokmod($v) [lindex $varctok($v) $a]
-    set varcmod($v) $a
-    if {$v == $curview} {
-	while {$a != 0 && [lindex $varcrow($v) $a] eq {}} {
-	    set a [lindex $vupptr($v) $a]
-	    set lim {}
+	set vtokmod($v) [lindex $varctok($v) $a]
+	set varcmod($v) $a
+	if {$v == $curview} {
+		while {$a != 0 && [lindex $varcrow($v) $a] eq {}} {
+			set a [lindex $vupptr($v) $a]
+			set lim {}
+		}
+		set r 0
+		if {$a != 0} {
+			if {$lim eq {}} {
+				set lim [llength $varccommits($v,$a)]
+			}
+			set r [expr {[lindex $varcrow($v) $a] + $lim}]
+		}
+		set vrowmod($v) $r
+		undolayout $r
 	}
-	set r 0
-	if {$a != 0} {
-	    if {$lim eq {}} {
-		set lim [llength $varccommits($v,$a)]
-	    }
-	    set r [expr {[lindex $varcrow($v) $a] + $lim}]
-	}
-	set vrowmod($v) $r
-	undolayout $r
-    }
 }
 
 proc update_arcrows {v} {
-    global vtokmod varcmod vrowmod varcrow commitidx currentid selectedline
-    global varcid vrownum varcorder varcix varccommits
-    global vupptr vdownptr vleftptr varctok
-    global displayorder parentlist curview cached_commitrow
+	global vtokmod varcmod vrowmod varcrow commitidx currentid selectedline
+	global varcid vrownum varcorder varcix varccommits
+	global vupptr vdownptr vleftptr varctok
+	global displayorder parentlist curview cached_commitrow
 
-    if {$vrowmod($v) == $commitidx($v)} return
-    if {$v == $curview} {
-	if {[llength $displayorder] > $vrowmod($v)} {
-	    set displayorder [lrange $displayorder 0 [expr {$vrowmod($v) - 1}]]
-	    set parentlist [lrange $parentlist 0 [expr {$vrowmod($v) - 1}]]
+	if {$vrowmod($v) == $commitidx($v)} return
+	if {$v == $curview} {
+		if {[llength $displayorder] > $vrowmod($v)} {
+			set displayorder [lrange $displayorder 0 [expr {$vrowmod($v) - 1}]]
+			set parentlist [lrange $parentlist 0 [expr {$vrowmod($v) - 1}]]
+		}
+		unset -nocomplain cached_commitrow
 	}
-	unset -nocomplain cached_commitrow
-    }
-    set narctot [expr {[llength $varctok($v)] - 1}]
-    set a $varcmod($v)
-    while {$a != 0 && [lindex $varcix($v) $a] eq {}} {
-	# go up the tree until we find something that has a row number,
-	# or we get to a seed
-	set a [lindex $vupptr($v) $a]
-    }
-    if {$a == 0} {
-	set a [lindex $vdownptr($v) 0]
-	if {$a == 0} return
-	set vrownum($v) {0}
-	set varcorder($v) [list $a]
-	lset varcix($v) $a 0
-	lset varcrow($v) $a 0
-	set arcn 0
-	set row 0
-    } else {
-	set arcn [lindex $varcix($v) $a]
-	if {[llength $vrownum($v)] > $arcn + 1} {
-	    set vrownum($v) [lrange $vrownum($v) 0 $arcn]
-	    set varcorder($v) [lrange $varcorder($v) 0 $arcn]
-	}
-	set row [lindex $varcrow($v) $a]
-    }
-    while {1} {
-	set p $a
-	incr row [llength $varccommits($v,$a)]
-	# go down if possible
-	set b [lindex $vdownptr($v) $a]
-	if {$b == 0} {
-	    # if not, go left, or go up until we can go left
-	    while {$a != 0} {
-		set b [lindex $vleftptr($v) $a]
-		if {$b != 0} break
+	set narctot [expr {[llength $varctok($v)] - 1}]
+	set a $varcmod($v)
+	while {$a != 0 && [lindex $varcix($v) $a] eq {}} {
+		# go up the tree until we find something that has a row number,
+		# or we get to a seed
 		set a [lindex $vupptr($v) $a]
-	    }
-	    if {$a == 0} break
 	}
-	set a $b
-	incr arcn
-	lappend vrownum($v) $row
-	lappend varcorder($v) $a
-	lset varcix($v) $a $arcn
-	lset varcrow($v) $a $row
-    }
-    set vtokmod($v) [lindex $varctok($v) $p]
-    set varcmod($v) $p
-    set vrowmod($v) $row
-    if {[info exists currentid]} {
-	set selectedline [rowofcommit $currentid]
-    }
+	if {$a == 0} {
+		set a [lindex $vdownptr($v) 0]
+		if {$a == 0} return
+		set vrownum($v) {0}
+		set varcorder($v) [list $a]
+		lset varcix($v) $a 0
+		lset varcrow($v) $a 0
+		set arcn 0
+		set row 0
+	} else {
+		set arcn [lindex $varcix($v) $a]
+		if {[llength $vrownum($v)] > $arcn + 1} {
+			set vrownum($v) [lrange $vrownum($v) 0 $arcn]
+			set varcorder($v) [lrange $varcorder($v) 0 $arcn]
+		}
+		set row [lindex $varcrow($v) $a]
+	}
+	while {1} {
+		set p $a
+		incr row [llength $varccommits($v,$a)]
+		# go down if possible
+		set b [lindex $vdownptr($v) $a]
+		if {$b == 0} {
+			# if not, go left, or go up until we can go left
+			while {$a != 0} {
+				set b [lindex $vleftptr($v) $a]
+				if {$b != 0} break
+				set a [lindex $vupptr($v) $a]
+			}
+			if {$a == 0} break
+		}
+		set a $b
+		incr arcn
+		lappend vrownum($v) $row
+		lappend varcorder($v) $a
+		lset varcix($v) $a $arcn
+		lset varcrow($v) $a $row
+	}
+	set vtokmod($v) [lindex $varctok($v) $p]
+	set varcmod($v) $p
+	set vrowmod($v) $row
+	if {[info exists currentid]} {
+		set selectedline [rowofcommit $currentid]
+	}
 }
 
 # Test whether view $v contains commit $id
 proc commitinview {id v} {
-    global varcid
+	global varcid
 
-    return [info exists varcid($v,$id)]
+	return [info exists varcid($v,$id)]
 }
 
 # Return the row number for commit $id in the current view
 proc rowofcommit {id} {
-    global varcid varccommits varcrow curview cached_commitrow
-    global varctok vtokmod
+	global varcid varccommits varcrow curview cached_commitrow
+	global varctok vtokmod
 
-    set v $curview
-    if {![info exists varcid($v,$id)]} {
-	puts "oops rowofcommit no arc for [shortids $id]"
-	return {}
-    }
-    set a $varcid($v,$id)
-    if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] >= 0} {
-	update_arcrows $v
-    }
-    if {[info exists cached_commitrow($id)]} {
-	return $cached_commitrow($id)
-    }
-    set i [lsearch -exact $varccommits($v,$a) $id]
-    if {$i < 0} {
-	puts "oops didn't find commit [shortids $id] in arc $a"
-	return {}
-    }
-    incr i [lindex $varcrow($v) $a]
-    set cached_commitrow($id) $i
-    return $i
+	set v $curview
+	if {![info exists varcid($v,$id)]} {
+		puts "oops rowofcommit no arc for [shortids $id]"
+		return {}
+	}
+	set a $varcid($v,$id)
+	if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] >= 0} {
+		update_arcrows $v
+	}
+	if {[info exists cached_commitrow($id)]} {
+		return $cached_commitrow($id)
+	}
+	set i [lsearch -exact $varccommits($v,$a) $id]
+	if {$i < 0} {
+		puts "oops didn't find commit [shortids $id] in arc $a"
+		return {}
+	}
+	incr i [lindex $varcrow($v) $a]
+	set cached_commitrow($id) $i
+	return $i
 }
 
 # Returns 1 if a is on an earlier row than b, otherwise 0
 proc comes_before {a b} {
-    global varcid varctok curview
+	global varcid varctok curview
 
-    set v $curview
-    if {$a eq $b || ![info exists varcid($v,$a)] || \
-	    ![info exists varcid($v,$b)]} {
-	return 0
-    }
-    if {$varcid($v,$a) != $varcid($v,$b)} {
-	return [expr {[string compare [lindex $varctok($v) $varcid($v,$a)] \
-			   [lindex $varctok($v) $varcid($v,$b)]] < 0}]
-    }
-    return [expr {[rowofcommit $a] < [rowofcommit $b]}]
+	set v $curview
+	if {$a eq $b || ![info exists varcid($v,$a)] || \
+			![info exists varcid($v,$b)]} {
+		return 0
+	}
+	if {$varcid($v,$a) != $varcid($v,$b)} {
+		return [expr {[string compare [lindex $varctok($v) $varcid($v,$a)] \
+						   [lindex $varctok($v) $varcid($v,$b)]] < 0}]
+	}
+	return [expr {[rowofcommit $a] < [rowofcommit $b]}]
 }
 
 proc bsearch {l elt} {
-    if {[llength $l] == 0 || $elt <= [lindex $l 0]} {
-	return 0
-    }
-    set lo 0
-    set hi [llength $l]
-    while {$hi - $lo > 1} {
-	set mid [expr {int(($lo + $hi) / 2)}]
-	set t [lindex $l $mid]
-	if {$elt < $t} {
-	    set hi $mid
-	} elseif {$elt > $t} {
-	    set lo $mid
-	} else {
-	    return $mid
+	if {[llength $l] == 0 || $elt <= [lindex $l 0]} {
+		return 0
 	}
-    }
-    return $lo
+	set lo 0
+	set hi [llength $l]
+	while {$hi - $lo > 1} {
+		set mid [expr {int(($lo + $hi) / 2)}]
+		set t [lindex $l $mid]
+		if {$elt < $t} {
+			set hi $mid
+		} elseif {$elt > $t} {
+			set lo $mid
+		} else {
+			return $mid
+		}
+	}
+	return $lo
 }
 
 # Make sure rows $start..$end-1 are valid in displayorder and parentlist
 proc make_disporder {start end} {
-    global vrownum curview commitidx displayorder parentlist
-    global varccommits varcorder parents vrowmod varcrow
-    global d_valid_start d_valid_end
+	global vrownum curview commitidx displayorder parentlist
+	global varccommits varcorder parents vrowmod varcrow
+	global d_valid_start d_valid_end
 
-    if {$end > $vrowmod($curview)} {
-	update_arcrows $curview
-    }
-    set ai [bsearch $vrownum($curview) $start]
-    set start [lindex $vrownum($curview) $ai]
-    set narc [llength $vrownum($curview)]
-    for {set r $start} {$ai < $narc && $r < $end} {incr ai} {
-	set a [lindex $varcorder($curview) $ai]
-	set l [llength $displayorder]
-	set al [llength $varccommits($curview,$a)]
-	if {$l < $r + $al} {
-	    if {$l < $r} {
-		set pad [ntimes [expr {$r - $l}] {}]
-		set displayorder [concat $displayorder $pad]
-		set parentlist [concat $parentlist $pad]
-	    } elseif {$l > $r} {
-		set displayorder [lrange $displayorder 0 [expr {$r - 1}]]
-		set parentlist [lrange $parentlist 0 [expr {$r - 1}]]
-	    }
-	    foreach id $varccommits($curview,$a) {
-		lappend displayorder $id
-		lappend parentlist $parents($curview,$id)
-	    }
-	} elseif {[lindex $displayorder [expr {$r + $al - 1}]] eq {}} {
-	    set i $r
-	    foreach id $varccommits($curview,$a) {
-		lset displayorder $i $id
-		lset parentlist $i $parents($curview,$id)
-		incr i
-	    }
+	if {$end > $vrowmod($curview)} {
+		update_arcrows $curview
+	}
+	set ai [bsearch $vrownum($curview) $start]
+	set start [lindex $vrownum($curview) $ai]
+	set narc [llength $vrownum($curview)]
+	for {set r $start} {$ai < $narc && $r < $end} {incr ai} {
+		set a [lindex $varcorder($curview) $ai]
+		set l [llength $displayorder]
+		set al [llength $varccommits($curview,$a)]
+		if {$l < $r + $al} {
+			if {$l < $r} {
+				set pad [ntimes [expr {$r - $l}] {}]
+				set displayorder [concat $displayorder $pad]
+				set parentlist [concat $parentlist $pad]
+			} elseif {$l > $r} {
+				set displayorder [lrange $displayorder 0 [expr {$r - 1}]]
+				set parentlist [lrange $parentlist 0 [expr {$r - 1}]]
+			}
+			foreach id $varccommits($curview,$a) {
+				lappend displayorder $id
+				lappend parentlist $parents($curview,$id)
+			}
+		} elseif {[lindex $displayorder [expr {$r + $al - 1}]] eq {}} {
+			set i $r
+			foreach id $varccommits($curview,$a) {
+				lset displayorder $i $id
+				lset parentlist $i $parents($curview,$id)
+				incr i
+			}
+		}
+		incr r $al
 	}
-	incr r $al
-    }
 }
 
 proc commitonrow {row} {
-    global displayorder
+	global displayorder
 
-    set id [lindex $displayorder $row]
-    if {$id eq {}} {
-	make_disporder $row [expr {$row + 1}]
 	set id [lindex $displayorder $row]
-    }
-    return $id
+	if {$id eq {}} {
+		make_disporder $row [expr {$row + 1}]
+		set id [lindex $displayorder $row]
+	}
+	return $id
 }
 
 proc closevarcs {v} {
-    global varctok varccommits varcid parents children
-    global cmitlisted commitidx vtokmod curview numcommits
+	global varctok varccommits varcid parents children
+	global cmitlisted commitidx vtokmod curview numcommits
 
-    set missing_parents 0
-    set scripts {}
-    set narcs [llength $varctok($v)]
-    for {set a 1} {$a < $narcs} {incr a} {
-	set id [lindex $varccommits($v,$a) end]
-	foreach p $parents($v,$id) {
-	    if {[info exists varcid($v,$p)]} continue
-	    # add p as a new commit
-	    incr missing_parents
-	    set cmitlisted($v,$p) 0
-	    set parents($v,$p) {}
-	    if {[llength $children($v,$p)] == 1 &&
-		[llength $parents($v,$id)] == 1} {
-		set b $a
-	    } else {
-		set b [newvarc $v $p]
-	    }
-	    set varcid($v,$p) $b
-	    if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
-		modify_arc $v $b
-	    }
-	    lappend varccommits($v,$b) $p
-	    incr commitidx($v)
-	    if {$v == $curview} {
-		set numcommits $commitidx($v)
-	    }
-	    set scripts [check_interest $p $scripts]
+	set missing_parents 0
+	set scripts {}
+	set narcs [llength $varctok($v)]
+	for {set a 1} {$a < $narcs} {incr a} {
+		set id [lindex $varccommits($v,$a) end]
+		foreach p $parents($v,$id) {
+			if {[info exists varcid($v,$p)]} continue
+			# add p as a new commit
+			incr missing_parents
+			set cmitlisted($v,$p) 0
+			set parents($v,$p) {}
+			if {[llength $children($v,$p)] == 1 &&
+				[llength $parents($v,$id)] == 1} {
+				set b $a
+			} else {
+				set b [newvarc $v $p]
+			}
+			set varcid($v,$p) $b
+			if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
+				modify_arc $v $b
+			}
+			lappend varccommits($v,$b) $p
+			incr commitidx($v)
+			if {$v == $curview} {
+				set numcommits $commitidx($v)
+			}
+			set scripts [check_interest $p $scripts]
+		}
 	}
-    }
-    if {$missing_parents > 0} {
-	foreach s $scripts {
-	    eval $s
+	if {$missing_parents > 0} {
+		foreach s $scripts {
+			eval $s
+		}
 	}
-    }
 }
 
 # Use $rwid as a substitute for $id, i.e. reparent $id's children to $rwid
 # Assumes we already have an arc for $rwid.
 proc rewrite_commit {v id rwid} {
-    global children parents varcid varctok vtokmod varccommits
+	global children parents varcid varctok vtokmod varccommits
 
-    foreach ch $children($v,$id) {
-	# make $rwid be $ch's parent in place of $id
-	set i [lsearch -exact $parents($v,$ch) $id]
-	if {$i < 0} {
-	    puts "oops rewrite_commit didn't find $id in parent list for $ch"
+	foreach ch $children($v,$id) {
+		# make $rwid be $ch's parent in place of $id
+		set i [lsearch -exact $parents($v,$ch) $id]
+		if {$i < 0} {
+			puts "oops rewrite_commit didn't find $id in parent list for $ch"
+		}
+		set parents($v,$ch) [lreplace $parents($v,$ch) $i $i $rwid]
+		# add $ch to $rwid's children and sort the list if necessary
+		if {[llength [lappend children($v,$rwid) $ch]] > 1} {
+			set children($v,$rwid) [lsort -command [list vtokcmp $v] \
+										$children($v,$rwid)]
+		}
+		# fix the graph after joining $id to $rwid
+		set a $varcid($v,$ch)
+		fix_reversal $rwid $a $v
+		# parentlist is wrong for the last element of arc $a
+		# even if displayorder is right, hence the 3rd arg here
+		modify_arc $v $a [expr {[llength $varccommits($v,$a)] - 1}]
 	}
-	set parents($v,$ch) [lreplace $parents($v,$ch) $i $i $rwid]
-	# add $ch to $rwid's children and sort the list if necessary
-	if {[llength [lappend children($v,$rwid) $ch]] > 1} {
-	    set children($v,$rwid) [lsort -command [list vtokcmp $v] \
-					$children($v,$rwid)]
-	}
-	# fix the graph after joining $id to $rwid
-	set a $varcid($v,$ch)
-	fix_reversal $rwid $a $v
-	# parentlist is wrong for the last element of arc $a
-	# even if displayorder is right, hence the 3rd arg here
-	modify_arc $v $a [expr {[llength $varccommits($v,$a)] - 1}]
-    }
 }
 
 # Mechanism for registering a command to be executed when we come
 # across a particular commit.  To handle the case when only the
 # prefix of the commit is known, the commitinterest array is now
-# indexed by the first 4 characters of the ID.  Each element is a
+# indexed by the first 4 characters of the ID.	Each element is a
 # list of id, cmd pairs.
 proc interestedin {id cmd} {
-    global commitinterest
+	global commitinterest
 
-    lappend commitinterest([string range $id 0 3]) $id $cmd
+	lappend commitinterest([string range $id 0 3]) $id $cmd
 }
 
 proc check_interest {id scripts} {
-    global commitinterest
+	global commitinterest
 
-    set prefix [string range $id 0 3]
-    if {[info exists commitinterest($prefix)]} {
-	set newlist {}
-	foreach {i script} $commitinterest($prefix) {
-	    if {[string match "$i*" $id]} {
-		lappend scripts [string map [list "%I" $id "%P" $i] $script]
-	    } else {
-		lappend newlist $i $script
-	    }
+	set prefix [string range $id 0 3]
+	if {[info exists commitinterest($prefix)]} {
+		set newlist {}
+		foreach {i script} $commitinterest($prefix) {
+			if {[string match "$i*" $id]} {
+				lappend scripts [string map [list "%I" $id "%P" $i] $script]
+			} else {
+				lappend newlist $i $script
+			}
+		}
+		if {$newlist ne {}} {
+			set commitinterest($prefix) $newlist
+		} else {
+			unset commitinterest($prefix)
+		}
 	}
-	if {$newlist ne {}} {
-	    set commitinterest($prefix) $newlist
-	} else {
-	    unset commitinterest($prefix)
-	}
-    }
-    return $scripts
+	return $scripts
 }
 
 proc getcommitlines {fd inst view updating}  {
-    global cmitlisted leftover
-    global commitidx commitdata vdatemode
-    global parents children curview hlview
-    global idpending ordertok
-    global varccommits varcid varctok vtokmod vfilelimit vshortids
+	global cmitlisted leftover
+	global commitidx commitdata vdatemode
+	global parents children curview hlview
+	global idpending ordertok
+	global varccommits varcid varctok vtokmod vfilelimit vshortids
 
-    set stuff [read $fd 500000]
-    # git log doesn't terminate the last commit with a null...
-    if {$stuff == {} && $leftover($inst) ne {} && [eof $fd]} {
-	set stuff "\0"
-    }
-    if {$stuff == {}} {
-	if {![eof $fd]} {
-	    return 1
+	set stuff [read $fd 500000]
+	# git log doesn't terminate the last commit with a null...
+	if {$stuff == {} && $leftover($inst) ne {} && [eof $fd]} {
+		set stuff "\0"
 	}
-	global commfd viewcomplete viewactive viewname
-	global viewinstances
-	unset commfd($inst)
-	set i [lsearch -exact $viewinstances($view) $inst]
-	if {$i >= 0} {
-	    set viewinstances($view) [lreplace $viewinstances($view) $i $i]
-	}
-	# set it blocking so we wait for the process to terminate
-	fconfigure $fd -blocking 1
-	if {[catch {close $fd} err]} {
-	    set fv {}
-	    if {$view != $curview} {
-		set fv " for the \"$viewname($view)\" view"
-	    }
-	    if {[string range $err 0 4] == "usage"} {
-		set err "Gitk: error reading commits$fv:\
-			bad arguments to git log."
-		if {$viewname($view) eq [mc "Command line"]} {
-		    append err \
-			"  (Note: arguments to gitk are passed to git log\
-			 to allow selection of commits to be displayed.)"
+	if {$stuff == {}} {
+		if {![eof $fd]} {
+			return 1
 		}
-	    } else {
-		set err "Error reading commits$fv: $err"
-	    }
-	    error_popup $err
-	}
-	if {[incr viewactive($view) -1] <= 0} {
-	    set viewcomplete($view) 1
-	    # Check if we have seen any ids listed as parents that haven't
-	    # appeared in the list
-	    closevarcs $view
-	    notbusy $view
-	}
-	if {$view == $curview} {
-	    run chewcommits
-	}
-	return 0
-    }
-    set start 0
-    set gotsome 0
-    set scripts {}
-    while 1 {
-	set i [string first "\0" $stuff $start]
-	if {$i < 0} {
-	    append leftover($inst) [string range $stuff $start end]
-	    break
-	}
-	if {$start == 0} {
-	    set cmit $leftover($inst)
-	    append cmit [string range $stuff 0 [expr {$i - 1}]]
-	    set leftover($inst) {}
-	} else {
-	    set cmit [string range $stuff $start [expr {$i - 1}]]
-	}
-	set start [expr {$i + 1}]
-	set j [string first "\n" $cmit]
-	set ok 0
-	set listed 1
-	if {$j >= 0 && [string match "commit *" $cmit]} {
-	    set ids [string range $cmit 7 [expr {$j - 1}]]
-	    if {[string match {[-^<>]*} $ids]} {
-		switch -- [string index $ids 0] {
-		    "-" {set listed 0}
-		    "^" {set listed 2}
-		    "<" {set listed 3}
-		    ">" {set listed 4}
+		global commfd viewcomplete viewactive viewname
+		global viewinstances
+		unset commfd($inst)
+		set i [lsearch -exact $viewinstances($view) $inst]
+		if {$i >= 0} {
+			set viewinstances($view) [lreplace $viewinstances($view) $i $i]
 		}
-		set ids [string range $ids 1 end]
-	    }
-	    set ok 1
-	    foreach id $ids {
-		if {[string length $id] != 40} {
-		    set ok 0
-		    break
+		# set it blocking so we wait for the process to terminate
+		fconfigure $fd -blocking 1
+		if {[catch {close $fd} err]} {
+			set fv {}
+			if {$view != $curview} {
+				set fv " for the \"$viewname($view)\" view"
+			}
+			if {[string range $err 0 4] == "usage"} {
+				set err "Gitk: error reading commits$fv:\
+						bad arguments to git log."
+				if {$viewname($view) eq [mc "Command line"]} {
+					append err \
+						"  (Note: arguments to gitk are passed to git log\
+						 to allow selection of commits to be displayed.)"
+				}
+			} else {
+				set err "Error reading commits$fv: $err"
+			}
+			error_popup $err
 		}
-	    }
-	}
-	if {!$ok} {
-	    set shortcmit $cmit
-	    if {[string length $shortcmit] > 80} {
-		set shortcmit "[string range $shortcmit 0 80]..."
-	    }
-	    error_popup "[mc "Can't parse git log output:"] {$shortcmit}"
-	    exit 1
-	}
-	set id [lindex $ids 0]
-	set vid $view,$id
-
-	lappend vshortids($view,[string range $id 0 3]) $id
-
-	if {!$listed && $updating && ![info exists varcid($vid)] &&
-	    $vfilelimit($view) ne {}} {
-	    # git log doesn't rewrite parents for unlisted commits
-	    # when doing path limiting, so work around that here
-	    # by working out the rewritten parent with git rev-list
-	    # and if we already know about it, using the rewritten
-	    # parent as a substitute parent for $id's children.
-	    if {![catch {
-		set rwid [exec git rev-list --first-parent --max-count=1 \
-			      $id -- $vfilelimit($view)]
-	    }]} {
-		if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
-		    # use $rwid in place of $id
-		    rewrite_commit $view $id $rwid
-		    continue
+		if {[incr viewactive($view) -1] <= 0} {
+			set viewcomplete($view) 1
+			# Check if we have seen any ids listed as parents that haven't
+			# appeared in the list
+			closevarcs $view
+			notbusy $view
 		}
-	    }
-	}
-
-	set a 0
-	if {[info exists varcid($vid)]} {
-	    if {$cmitlisted($vid) || !$listed} continue
-	    set a $varcid($vid)
-	}
-	if {$listed} {
-	    set olds [lrange $ids 1 end]
-	} else {
-	    set olds {}
-	}
-	set commitdata($id) [string range $cmit [expr {$j + 1}] end]
-	set cmitlisted($vid) $listed
-	set parents($vid) $olds
-	if {![info exists children($vid)]} {
-	    set children($vid) {}
-	} elseif {$a == 0 && [llength $children($vid)] == 1} {
-	    set k [lindex $children($vid) 0]
-	    if {[llength $parents($view,$k)] == 1 &&
-		(!$vdatemode($view) ||
-		 $varcid($view,$k) == [llength $varctok($view)] - 1)} {
-		set a $varcid($view,$k)
-	    }
-	}
-	if {$a == 0} {
-	    # new arc
-	    set a [newvarc $view $id]
-	}
-	if {[string compare [lindex $varctok($view) $a] $vtokmod($view)] < 0} {
-	    modify_arc $view $a
-	}
-	if {![info exists varcid($vid)]} {
-	    set varcid($vid) $a
-	    lappend varccommits($view,$a) $id
-	    incr commitidx($view)
-	}
-
-	set i 0
-	foreach p $olds {
-	    if {$i == 0 || [lsearch -exact $olds $p] >= $i} {
-		set vp $view,$p
-		if {[llength [lappend children($vp) $id]] > 1 &&
-		    [vtokcmp $view [lindex $children($vp) end-1] $id] > 0} {
-		    set children($vp) [lsort -command [list vtokcmp $view] \
-					   $children($vp)]
-		    unset -nocomplain ordertok
+		if {$view == $curview} {
+			run chewcommits
 		}
-		if {[info exists varcid($view,$p)]} {
-		    fix_reversal $p $a $view
+		return 0
+	}
+	set start 0
+	set gotsome 0
+	set scripts {}
+	while 1 {
+		set i [string first "\0" $stuff $start]
+		if {$i < 0} {
+			append leftover($inst) [string range $stuff $start end]
+			break
 		}
-	    }
-	    incr i
-	}
+		if {$start == 0} {
+			set cmit $leftover($inst)
+			append cmit [string range $stuff 0 [expr {$i - 1}]]
+			set leftover($inst) {}
+		} else {
+			set cmit [string range $stuff $start [expr {$i - 1}]]
+		}
+		set start [expr {$i + 1}]
+		set j [string first "\n" $cmit]
+		set ok 0
+		set listed 1
+		if {$j >= 0 && [string match "commit *" $cmit]} {
+			set ids [string range $cmit 7 [expr {$j - 1}]]
+			if {[string match {[-^<>]*} $ids]} {
+				switch -- [string index $ids 0] {
+					"-" {set listed 0}
+					"^" {set listed 2}
+					"<" {set listed 3}
+					">" {set listed 4}
+				}
+				set ids [string range $ids 1 end]
+			}
+			set ok 1
+			foreach id $ids {
+				if {[string length $id] != 40} {
+					set ok 0
+					break
+				}
+			}
+		}
+		if {!$ok} {
+			set shortcmit $cmit
+			if {[string length $shortcmit] > 80} {
+				set shortcmit "[string range $shortcmit 0 80]..."
+			}
+			error_popup "[mc "Can't parse git log output:"] {$shortcmit}"
+			exit 1
+		}
+		set id [lindex $ids 0]
+		set vid $view,$id
 
-	set scripts [check_interest $id $scripts]
-	set gotsome 1
-    }
-    if {$gotsome} {
-	global numcommits hlview
+		lappend vshortids($view,[string range $id 0 3]) $id
 
-	if {$view == $curview} {
-	    set numcommits $commitidx($view)
-	    run chewcommits
+		if {!$listed && $updating && ![info exists varcid($vid)] &&
+			$vfilelimit($view) ne {}} {
+			# git log doesn't rewrite parents for unlisted commits
+			# when doing path limiting, so work around that here
+			# by working out the rewritten parent with git rev-list
+			# and if we already know about it, using the rewritten
+			# parent as a substitute parent for $id's children.
+			if {![catch {
+				set rwid [exec git rev-list --first-parent --max-count=1 \
+							  $id -- $vfilelimit($view)]
+			}]} {
+				if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
+					# use $rwid in place of $id
+					rewrite_commit $view $id $rwid
+					continue
+				}
+			}
+		}
+
+		set a 0
+		if {[info exists varcid($vid)]} {
+			if {$cmitlisted($vid) || !$listed} continue
+			set a $varcid($vid)
+		}
+		if {$listed} {
+			set olds [lrange $ids 1 end]
+		} else {
+			set olds {}
+		}
+		set commitdata($id) [string range $cmit [expr {$j + 1}] end]
+		set cmitlisted($vid) $listed
+		set parents($vid) $olds
+		if {![info exists children($vid)]} {
+			set children($vid) {}
+		} elseif {$a == 0 && [llength $children($vid)] == 1} {
+			set k [lindex $children($vid) 0]
+			if {[llength $parents($view,$k)] == 1 &&
+				(!$vdatemode($view) ||
+				 $varcid($view,$k) == [llength $varctok($view)] - 1)} {
+				set a $varcid($view,$k)
+			}
+		}
+		if {$a == 0} {
+			# new arc
+			set a [newvarc $view $id]
+		}
+		if {[string compare [lindex $varctok($view) $a] $vtokmod($view)] < 0} {
+			modify_arc $view $a
+		}
+		if {![info exists varcid($vid)]} {
+			set varcid($vid) $a
+			lappend varccommits($view,$a) $id
+			incr commitidx($view)
+		}
+
+		set i 0
+		foreach p $olds {
+			if {$i == 0 || [lsearch -exact $olds $p] >= $i} {
+				set vp $view,$p
+				if {[llength [lappend children($vp) $id]] > 1 &&
+					[vtokcmp $view [lindex $children($vp) end-1] $id] > 0} {
+					set children($vp) [lsort -command [list vtokcmp $view] \
+										   $children($vp)]
+					unset -nocomplain ordertok
+				}
+				if {[info exists varcid($view,$p)]} {
+					fix_reversal $p $a $view
+				}
+			}
+			incr i
+		}
+
+		set scripts [check_interest $id $scripts]
+		set gotsome 1
 	}
-	if {[info exists hlview] && $view == $hlview} {
-	    # we never actually get here...
-	    run vhighlightmore
+	if {$gotsome} {
+		global numcommits hlview
+
+		if {$view == $curview} {
+			set numcommits $commitidx($view)
+			run chewcommits
+		}
+		if {[info exists hlview] && $view == $hlview} {
+			# we never actually get here...
+			run vhighlightmore
+		}
+		foreach s $scripts {
+			eval $s
+		}
 	}
-	foreach s $scripts {
-	    eval $s
-	}
-    }
-    return 2
+	return 2
 }
 
 proc chewcommits {} {
-    global curview hlview viewcomplete
-    global pending_select
+	global curview hlview viewcomplete
+	global pending_select
 
-    layoutmore
-    if {$viewcomplete($curview)} {
-	global commitidx varctok
-	global numcommits startmsecs
+	layoutmore
+	if {$viewcomplete($curview)} {
+		global commitidx varctok
+		global numcommits startmsecs
 
-	if {[info exists pending_select]} {
-	    update
-	    reset_pending_select {}
+		if {[info exists pending_select]} {
+			update
+			reset_pending_select {}
 
-	    if {[commitinview $pending_select $curview]} {
-		selectline [rowofcommit $pending_select] 1
-	    } else {
-		set row [first_real_row]
-		selectline $row 1
-	    }
+			if {[commitinview $pending_select $curview]} {
+				selectline [rowofcommit $pending_select] 1
+			} else {
+				set row [first_real_row]
+				selectline $row 1
+			}
+		}
+		if {$commitidx($curview) > 0} {
+			#set ms [expr {[clock clicks -milliseconds] - $startmsecs}]
+			#puts "overall $ms ms for $numcommits commits"
+			#puts "[llength $varctok($view)] arcs, $commitidx($view) commits"
+		} else {
+			show_status [mc "No commits selected"]
+		}
+		notbusy layout
 	}
-	if {$commitidx($curview) > 0} {
-	    #set ms [expr {[clock clicks -milliseconds] - $startmsecs}]
-	    #puts "overall $ms ms for $numcommits commits"
-	    #puts "[llength $varctok($view)] arcs, $commitidx($view) commits"
-	} else {
-	    show_status [mc "No commits selected"]
-	}
-	notbusy layout
-    }
-    return 0
+	return 0
 }
 
 proc do_readcommit {id} {
-    global tclencoding
+	global tclencoding
 
-    # Invoke git-log to handle automatic encoding conversion
-    set fd [open [concat | git log --no-color --pretty=raw -1 $id] r]
-    # Read the results using i18n.logoutputencoding
-    fconfigure $fd -translation lf -eofchar {}
-    if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
-    }
-    set contents [read $fd]
-    close $fd
-    # Remove the heading line
-    regsub {^commit [0-9a-f]+\n} $contents {} contents
+	# Invoke git-log to handle automatic encoding conversion
+	set fd [open [concat | git log --no-color --pretty=raw -1 $id] r]
+	# Read the results using i18n.logoutputencoding
+	fconfigure $fd -translation lf -eofchar {}
+	if {$tclencoding != {}} {
+		fconfigure $fd -encoding $tclencoding
+	}
+	set contents [read $fd]
+	close $fd
+	# Remove the heading line
+	regsub {^commit [0-9a-f]+\n} $contents {} contents
 
-    return $contents
+	return $contents
 }
 
 proc readcommit {id} {
-    if {[catch {set contents [do_readcommit $id]}]} return
-    parsecommit $id $contents 1
+	if {[catch {set contents [do_readcommit $id]}]} return
+	parsecommit $id $contents 1
 }
 
 proc parsecommit {id contents listed} {
-    global commitinfo
+	global commitinfo
 
-    set inhdr 1
-    set comment {}
-    set headline {}
-    set auname {}
-    set audate {}
-    set comname {}
-    set comdate {}
-    set hdrend [string first "\n\n" $contents]
-    if {$hdrend < 0} {
-	# should never happen...
-	set hdrend [string length $contents]
-    }
-    set header [string range $contents 0 [expr {$hdrend - 1}]]
-    set comment [string range $contents [expr {$hdrend + 2}] end]
-    foreach line [split $header "\n"] {
-	set line [split $line " "]
-	set tag [lindex $line 0]
-	if {$tag == "author"} {
-	    set audate [lrange $line end-1 end]
-	    set auname [join [lrange $line 1 end-2] " "]
-	} elseif {$tag == "committer"} {
-	    set comdate [lrange $line end-1 end]
-	    set comname [join [lrange $line 1 end-2] " "]
+	set inhdr 1
+	set comment {}
+	set headline {}
+	set auname {}
+	set audate {}
+	set comname {}
+	set comdate {}
+	set hdrend [string first "\n\n" $contents]
+	if {$hdrend < 0} {
+		# should never happen...
+		set hdrend [string length $contents]
 	}
-    }
-    set headline {}
-    # take the first non-blank line of the comment as the headline
-    set headline [string trimleft $comment]
-    set i [string first "\n" $headline]
-    if {$i >= 0} {
-	set headline [string range $headline 0 $i]
-    }
-    set headline [string trimright $headline]
-    set i [string first "\r" $headline]
-    if {$i >= 0} {
-	set headline [string trimright [string range $headline 0 $i]]
-    }
-    if {!$listed} {
-	# git log indents the comment by 4 spaces;
-	# if we got this via git cat-file, add the indentation
-	set newcomment {}
-	foreach line [split $comment "\n"] {
-	    append newcomment "    "
-	    append newcomment $line
-	    append newcomment "\n"
+	set header [string range $contents 0 [expr {$hdrend - 1}]]
+	set comment [string range $contents [expr {$hdrend + 2}] end]
+	foreach line [split $header "\n"] {
+		set line [split $line " "]
+		set tag [lindex $line 0]
+		if {$tag == "author"} {
+			set audate [lrange $line end-1 end]
+			set auname [join [lrange $line 1 end-2] " "]
+		} elseif {$tag == "committer"} {
+			set comdate [lrange $line end-1 end]
+			set comname [join [lrange $line 1 end-2] " "]
+		}
 	}
-	set comment $newcomment
-    }
-    set hasnote [string first "\nNotes:\n" $contents]
-    set diff ""
-    # If there is diff output shown in the git-log stream, split it
-    # out.  But get rid of the empty line that always precedes the
-    # diff.
-    set i [string first "\n\ndiff" $comment]
-    if {$i >= 0} {
-	set diff [string range $comment $i+1 end]
-	set comment [string range $comment 0 $i-1]
-    }
-    set commitinfo($id) [list $headline $auname $audate \
-			     $comname $comdate $comment $hasnote $diff]
+	set headline {}
+	# take the first non-blank line of the comment as the headline
+	set headline [string trimleft $comment]
+	set i [string first "\n" $headline]
+	if {$i >= 0} {
+		set headline [string range $headline 0 $i]
+	}
+	set headline [string trimright $headline]
+	set i [string first "\r" $headline]
+	if {$i >= 0} {
+		set headline [string trimright [string range $headline 0 $i]]
+	}
+	if {!$listed} {
+		# git log indents the comment by 4 spaces;
+		# if we got this via git cat-file, add the indentation
+		set newcomment {}
+		foreach line [split $comment "\n"] {
+			append newcomment "    "
+			append newcomment $line
+			append newcomment "\n"
+		}
+		set comment $newcomment
+	}
+	set hasnote [string first "\nNotes:\n" $contents]
+	set diff ""
+	# If there is diff output shown in the git-log stream, split it
+	# out.	But get rid of the empty line that always precedes the
+	# diff.
+	set i [string first "\n\ndiff" $comment]
+	if {$i >= 0} {
+		set diff [string range $comment $i+1 end]
+		set comment [string range $comment 0 $i-1]
+	}
+	set commitinfo($id) [list $headline $auname $audate \
+							 $comname $comdate $comment $hasnote $diff]
 }
 
 proc getcommit {id} {
-    global commitdata commitinfo
+	global commitdata commitinfo
 
-    if {[info exists commitdata($id)]} {
-	parsecommit $id $commitdata($id) 1
-    } else {
-	readcommit $id
-	if {![info exists commitinfo($id)]} {
-	    set commitinfo($id) [list [mc "No commit information available"]]
+	if {[info exists commitdata($id)]} {
+		parsecommit $id $commitdata($id) 1
+	} else {
+		readcommit $id
+		if {![info exists commitinfo($id)]} {
+			set commitinfo($id) [list [mc "No commit information available"]]
+		}
 	}
-    }
-    return 1
+	return 1
 }
 
 # Expand an abbreviated commit ID to a list of full 40-char IDs that match
 # and are present in the current view.
 # This is fairly slow...
 proc longid {prefix} {
-    global varcid curview vshortids
+	global varcid curview vshortids
 
-    set ids {}
-    if {[string length $prefix] >= 4} {
-	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
-		    }
+	set ids {}
+	if {[string length $prefix] >= 4} {
+		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
 		}
-	    }
 	}
-    } else {
-	foreach match [array names varcid "$curview,$prefix*"] {
-	    lappend ids [lindex [split $match ","] 1]
-	    if {[llength $ids] >= 2} break
-	}
-    }
-    return $ids
+	return $ids
 }
 
 proc readrefs {} {
-    global tagids idtags headids idheads tagobjid
-    global otherrefids idotherrefs mainhead mainheadid
-    global selecthead selectheadid
-    global hideremotes
-    global tclencoding
+	global tagids idtags headids idheads tagobjid
+	global otherrefids idotherrefs mainhead mainheadid
+	global selecthead selectheadid
+	global hideremotes
+	global tclencoding
 
-    foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
-	unset -nocomplain $v
-    }
-    set refd [open [list | git show-ref -d] r]
-    if {$tclencoding != {}} {
-	fconfigure $refd -encoding $tclencoding
-    }
-    while {[gets $refd line] >= 0} {
-	if {[string index $line 40] ne " "} continue
-	set id [string range $line 0 39]
-	set ref [string range $line 41 end]
-	if {![string match "refs/*" $ref]} continue
-	set name [string range $ref 5 end]
-	if {[string match "remotes/*" $name]} {
-	    if {![string match "*/HEAD" $name] && !$hideremotes} {
-		set headids($name) $id
-		lappend idheads($id) $name
-	    }
-	} elseif {[string match "heads/*" $name]} {
-	    set name [string range $name 6 end]
-	    set headids($name) $id
-	    lappend idheads($id) $name
-	} elseif {[string match "tags/*" $name]} {
-	    # this lets refs/tags/foo^{} overwrite refs/tags/foo,
-	    # which is what we want since the former is the commit ID
-	    set name [string range $name 5 end]
-	    if {[string match "*^{}" $name]} {
-		set name [string range $name 0 end-3]
-	    } else {
-		set tagobjid($name) $id
-	    }
-	    set tagids($name) $id
-	    lappend idtags($id) $name
-	} else {
-	    set otherrefids($name) $id
-	    lappend idotherrefs($id) $name
+	foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
+		unset -nocomplain $v
 	}
-    }
-    catch {close $refd}
-    set mainhead {}
-    set mainheadid {}
-    catch {
-	set mainheadid [exec git rev-parse HEAD]
-	set thehead [exec git symbolic-ref HEAD]
-	if {[string match "refs/heads/*" $thehead]} {
-	    set mainhead [string range $thehead 11 end]
+	set refd [open [list | git show-ref -d] r]
+	if {$tclencoding != {}} {
+		fconfigure $refd -encoding $tclencoding
 	}
-    }
-    set selectheadid {}
-    if {$selecthead ne {}} {
+	while {[gets $refd line] >= 0} {
+		if {[string index $line 40] ne " "} continue
+		set id [string range $line 0 39]
+		set ref [string range $line 41 end]
+		if {![string match "refs/*" $ref]} continue
+		set name [string range $ref 5 end]
+		if {[string match "remotes/*" $name]} {
+			if {![string match "*/HEAD" $name] && !$hideremotes} {
+				set headids($name) $id
+				lappend idheads($id) $name
+			}
+		} elseif {[string match "heads/*" $name]} {
+			set name [string range $name 6 end]
+			set headids($name) $id
+			lappend idheads($id) $name
+		} elseif {[string match "tags/*" $name]} {
+			# this lets refs/tags/foo^{} overwrite refs/tags/foo,
+			# which is what we want since the former is the commit ID
+			set name [string range $name 5 end]
+			if {[string match "*^{}" $name]} {
+				set name [string range $name 0 end-3]
+			} else {
+				set tagobjid($name) $id
+			}
+			set tagids($name) $id
+			lappend idtags($id) $name
+		} else {
+			set otherrefids($name) $id
+			lappend idotherrefs($id) $name
+		}
+	}
+	catch {close $refd}
+	set mainhead {}
+	set mainheadid {}
 	catch {
-	    set selectheadid [exec git rev-parse --verify $selecthead]
+		set mainheadid [exec git rev-parse HEAD]
+		set thehead [exec git symbolic-ref HEAD]
+		if {[string match "refs/heads/*" $thehead]} {
+			set mainhead [string range $thehead 11 end]
+		}
+	}
+	set selectheadid {}
+	if {$selecthead ne {}} {
+		catch {
+			set selectheadid [exec git rev-parse --verify $selecthead]
+		}
 	}
-    }
 }
 
 # skip over fake commits
 proc first_real_row {} {
-    global nullid nullid2 numcommits
+	global nullid nullid2 numcommits
 
-    for {set row 0} {$row < $numcommits} {incr row} {
-	set id [commitonrow $row]
-	if {$id ne $nullid && $id ne $nullid2} {
-	    break
+	for {set row 0} {$row < $numcommits} {incr row} {
+		set id [commitonrow $row]
+		if {$id ne $nullid && $id ne $nullid2} {
+			break
+		}
 	}
-    }
-    return $row
+	return $row
 }
 
 # update things for a head moved to a child of its previous location
 proc movehead {id name} {
-    global headids idheads
+	global headids idheads
 
-    removehead $headids($name) $name
-    set headids($name) $id
-    lappend idheads($id) $name
+	removehead $headids($name) $name
+	set headids($name) $id
+	lappend idheads($id) $name
 }
 
 # update things when a head has been removed
 proc removehead {id name} {
-    global headids idheads
+	global headids idheads
 
-    if {$idheads($id) eq $name} {
-	unset idheads($id)
-    } else {
-	set i [lsearch -exact $idheads($id) $name]
-	if {$i >= 0} {
-	    set idheads($id) [lreplace $idheads($id) $i $i]
+	if {$idheads($id) eq $name} {
+		unset idheads($id)
+	} else {
+		set i [lsearch -exact $idheads($id) $name]
+		if {$i >= 0} {
+			set idheads($id) [lreplace $idheads($id) $i $i]
+		}
 	}
-    }
-    unset headids($name)
+	unset headids($name)
 }
 
 proc ttk_toplevel {w args} {
-    global use_ttk
-    eval [linsert $args 0 ::toplevel $w]
-    if {$use_ttk} {
-        place [ttk::frame $w._toplevel_background] -x 0 -y 0 -relwidth 1 -relheight 1
-    }
-    return $w
+	global use_ttk
+	eval [linsert $args 0 ::toplevel $w]
+	if {$use_ttk} {
+		place [ttk::frame $w._toplevel_background] -x 0 -y 0 -relwidth 1 -relheight 1
+	}
+	return $w
 }
 
 proc make_transient {window origin} {
-    global have_tk85
+	global have_tk85
 
-    # In MacOS Tk 8.4 transient appears to work by setting
-    # overrideredirect, which is utterly useless, since the
-    # windows get no border, and are not even kept above
-    # the parent.
-    if {!$have_tk85 && [tk windowingsystem] eq {aqua}} return
+	# In MacOS Tk 8.4 transient appears to work by setting
+	# overrideredirect, which is utterly useless, since the
+	# windows get no border, and are not even kept above
+	# the parent.
+	if {!$have_tk85 && [tk windowingsystem] eq {aqua}} return
 
-    wm transient $window $origin
+	wm transient $window $origin
 
-    # Windows fails to place transient windows normally, so
-    # schedule a callback to center them on the parent.
-    if {[tk windowingsystem] eq {win32}} {
-	after idle [list tk::PlaceWindow $window widget $origin]
-    }
+	# Windows fails to place transient windows normally, so
+	# schedule a callback to center them on the parent.
+	if {[tk windowingsystem] eq {win32}} {
+		after idle [list tk::PlaceWindow $window widget $origin]
+	}
 }
 
 proc show_error {w top msg} {
-    global NS
-    if {![info exists NS]} {set NS ""}
-    if {[wm state $top] eq "withdrawn"} { wm deiconify $top }
-    message $w.m -text $msg -justify center -aspect 400
-    pack $w.m -side top -fill x -padx 20 -pady 20
-    ${NS}::button $w.ok -default active -text [mc OK] -command "destroy $top"
-    pack $w.ok -side bottom -fill x
-    bind $top <Visibility> "grab $top; focus $top"
-    bind $top <Key-Return> "destroy $top"
-    bind $top <Key-space>  "destroy $top"
-    bind $top <Key-Escape> "destroy $top"
-    tkwait window $top
+	global NS
+	if {![info exists NS]} {set NS ""}
+	if {[wm state $top] eq "withdrawn"} { wm deiconify $top }
+	message $w.m -text $msg -justify center -aspect 400
+	pack $w.m -side top -fill x -padx 20 -pady 20
+	${NS}::button $w.ok -default active -text [mc OK] -command "destroy $top"
+	pack $w.ok -side bottom -fill x
+	bind $top <Visibility> "grab $top; focus $top"
+	bind $top <Key-Return> "destroy $top"
+	bind $top <Key-space>  "destroy $top"
+	bind $top <Key-Escape> "destroy $top"
+	tkwait window $top
 }
 
 proc error_popup {msg {owner .}} {
-    if {[tk windowingsystem] eq "win32"} {
-        tk_messageBox -icon error -type ok -title [wm title .] \
-            -parent $owner -message $msg
-    } else {
-        set w .error
-        ttk_toplevel $w
-        make_transient $w $owner
-        show_error $w $w $msg
-    }
+	if {[tk windowingsystem] eq "win32"} {
+		tk_messageBox -icon error -type ok -title [wm title .] \
+			-parent $owner -message $msg
+	} else {
+		set w .error
+		ttk_toplevel $w
+		make_transient $w $owner
+		show_error $w $w $msg
+	}
 }
 
 proc confirm_popup {msg {owner .}} {
-    global confirm_ok NS
-    set confirm_ok 0
-    set w .confirm
-    ttk_toplevel $w
-    make_transient $w $owner
-    message $w.m -text $msg -justify center -aspect 400
-    pack $w.m -side top -fill x -padx 20 -pady 20
-    ${NS}::button $w.ok -text [mc OK] -command "set confirm_ok 1; destroy $w"
-    pack $w.ok -side left -fill x
-    ${NS}::button $w.cancel -text [mc Cancel] -command "destroy $w"
-    pack $w.cancel -side right -fill x
-    bind $w <Visibility> "grab $w; focus $w"
-    bind $w <Key-Return> "set confirm_ok 1; destroy $w"
-    bind $w <Key-space>  "set confirm_ok 1; destroy $w"
-    bind $w <Key-Escape> "destroy $w"
-    tk::PlaceWindow $w widget $owner
-    tkwait window $w
-    return $confirm_ok
+	global confirm_ok NS
+	set confirm_ok 0
+	set w .confirm
+	ttk_toplevel $w
+	make_transient $w $owner
+	message $w.m -text $msg -justify center -aspect 400
+	pack $w.m -side top -fill x -padx 20 -pady 20
+	${NS}::button $w.ok -text [mc OK] -command "set confirm_ok 1; destroy $w"
+	pack $w.ok -side left -fill x
+	${NS}::button $w.cancel -text [mc Cancel] -command "destroy $w"
+	pack $w.cancel -side right -fill x
+	bind $w <Visibility> "grab $w; focus $w"
+	bind $w <Key-Return> "set confirm_ok 1; destroy $w"
+	bind $w <Key-space>  "set confirm_ok 1; destroy $w"
+	bind $w <Key-Escape> "destroy $w"
+	tk::PlaceWindow $w widget $owner
+	tkwait window $w
+	return $confirm_ok
 }
 
 proc setoptions {} {
-    global use_ttk
+	global use_ttk
 
-    if {[tk windowingsystem] ne "win32"} {
-        option add *Panedwindow.showHandle 1 startupFile
-        option add *Panedwindow.sashRelief raised startupFile
-        if {[tk windowingsystem] ne "aqua"} {
-            option add *Menu.font uifont startupFile
-        }
-    } else {
-        option add *Menu.TearOff 0 startupFile
-    }
-    option add *Button.font uifont startupFile
-    option add *Checkbutton.font uifont startupFile
-    option add *Radiobutton.font uifont startupFile
-    option add *Menubutton.font uifont startupFile
-    option add *Label.font uifont startupFile
-    option add *Message.font uifont startupFile
-    option add *Entry.font textfont startupFile
-    option add *Text.font textfont startupFile
-    option add *Labelframe.font uifont startupFile
-    option add *Spinbox.font textfont startupFile
-    option add *Listbox.font mainfont startupFile
+	if {[tk windowingsystem] ne "win32"} {
+		option add *Panedwindow.showHandle 1 startupFile
+		option add *Panedwindow.sashRelief raised startupFile
+		if {[tk windowingsystem] ne "aqua"} {
+			option add *Menu.font uifont startupFile
+		}
+	} else {
+		option add *Menu.TearOff 0 startupFile
+	}
+	option add *Button.font uifont startupFile
+	option add *Checkbutton.font uifont startupFile
+	option add *Radiobutton.font uifont startupFile
+	option add *Menubutton.font uifont startupFile
+	option add *Label.font uifont startupFile
+	option add *Message.font uifont startupFile
+	option add *Entry.font textfont startupFile
+	option add *Text.font textfont startupFile
+	option add *Labelframe.font uifont startupFile
+	option add *Spinbox.font textfont startupFile
+	option add *Listbox.font mainfont startupFile
 }
 
 proc setttkstyle {} {
-    eval font configure TkDefaultFont [fontflags mainfont]
-    eval font configure TkTextFont [fontflags textfont]
-    eval font configure TkHeadingFont [fontflags mainfont]
-    eval font configure TkCaptionFont [fontflags mainfont] -weight bold
-    eval font configure TkTooltipFont [fontflags uifont]
-    eval font configure TkFixedFont   [fontflags textfont]
-    eval font configure TkIconFont    [fontflags uifont]
-    eval font configure TkMenuFont    [fontflags uifont]
-    eval font configure TkSmallCaptionFont [fontflags uifont]
+	eval font configure TkDefaultFont [fontflags mainfont]
+	eval font configure TkTextFont [fontflags textfont]
+	eval font configure TkHeadingFont [fontflags mainfont]
+	eval font configure TkCaptionFont [fontflags mainfont] -weight bold
+	eval font configure TkTooltipFont [fontflags uifont]
+	eval font configure TkFixedFont   [fontflags textfont]
+	eval font configure TkIconFont	  [fontflags uifont]
+	eval font configure TkMenuFont	  [fontflags uifont]
+	eval font configure TkSmallCaptionFont [fontflags uifont]
 }
 
 # Make a menu and submenus.
@@ -1996,8235 +1996,8235 @@ proc setttkstyle {} {
 # description depends on type; it's the sublist for cascade, the
 # command to invoke for command, or {variable value} for radiobutton
 proc makemenu {m items} {
-    menu $m
-    if {[tk windowingsystem] eq {aqua}} {
-	set Meta1 Cmd
-    } else {
-	set Meta1 Ctrl
-    }
-    foreach i $items {
-	set name [mc [lindex $i 1]]
-	set type [lindex $i 2]
-	set thing [lindex $i 3]
-	set params [list $type]
-	if {$name ne {}} {
-	    set u [string first "&" [string map {&& x} $name]]
-	    lappend params -label [string map {&& & & {}} $name]
-	    if {$u >= 0} {
-		lappend params -underline $u
-	    }
+	menu $m
+	if {[tk windowingsystem] eq {aqua}} {
+		set Meta1 Cmd
+	} else {
+		set Meta1 Ctrl
 	}
-	switch -- $type {
-	    "cascade" {
-		set submenu [string tolower [string map {& ""} [lindex $i 1]]]
-		lappend params -menu $m.$submenu
-	    }
-	    "command" {
-		lappend params -command $thing
-	    }
-	    "radiobutton" {
-		lappend params -variable [lindex $thing 0] \
-		    -value [lindex $thing 1]
-	    }
+	foreach i $items {
+		set name [mc [lindex $i 1]]
+		set type [lindex $i 2]
+		set thing [lindex $i 3]
+		set params [list $type]
+		if {$name ne {}} {
+			set u [string first "&" [string map {&& x} $name]]
+			lappend params -label [string map {&& & & {}} $name]
+			if {$u >= 0} {
+				lappend params -underline $u
+			}
+		}
+		switch -- $type {
+			"cascade" {
+				set submenu [string tolower [string map {& ""} [lindex $i 1]]]
+				lappend params -menu $m.$submenu
+			}
+			"command" {
+				lappend params -command $thing
+			}
+			"radiobutton" {
+				lappend params -variable [lindex $thing 0] \
+					-value [lindex $thing 1]
+			}
+		}
+		set tail [lrange $i 4 end]
+		regsub -all {\yMeta1\y} $tail $Meta1 tail
+		eval $m add $params $tail
+		if {$type eq "cascade"} {
+			makemenu $m.$submenu $thing
+		}
 	}
-	set tail [lrange $i 4 end]
-	regsub -all {\yMeta1\y} $tail $Meta1 tail
-	eval $m add $params $tail
-	if {$type eq "cascade"} {
-	    makemenu $m.$submenu $thing
-	}
-    }
 }
 
 # translate string and remove ampersands
 proc mca {str} {
-    return [string map {&& & & {}} [mc $str]]
+	return [string map {&& & & {}} [mc $str]]
 }
 
 proc cleardropsel {w} {
-    $w selection clear
+	$w selection clear
 }
 proc makedroplist {w varname args} {
-    global use_ttk
-    if {$use_ttk} {
-        set width 0
-        foreach label $args {
-            set cx [string length $label]
-            if {$cx > $width} {set width $cx}
-        }
-	set gm [ttk::combobox $w -width $width -state readonly\
-		    -textvariable $varname -values $args \
-		    -exportselection false]
-	bind $gm <<ComboboxSelected>> [list $gm selection clear]
-    } else {
-	set gm [eval [linsert $args 0 tk_optionMenu $w $varname]]
-    }
-    return $gm
+	global use_ttk
+	if {$use_ttk} {
+		set width 0
+		foreach label $args {
+			set cx [string length $label]
+			if {$cx > $width} {set width $cx}
+		}
+		set gm [ttk::combobox $w -width $width -state readonly\
+					-textvariable $varname -values $args \
+					-exportselection false]
+		bind $gm <<ComboboxSelected>> [list $gm selection clear]
+	} else {
+		set gm [eval [linsert $args 0 tk_optionMenu $w $varname]]
+	}
+	return $gm
 }
 
 proc makewindow {} {
-    global canv canv2 canv3 linespc charspc ctext cflist cscroll
-    global tabstop
-    global findtype findtypemenu findloc findstring fstring geometry
-    global entries sha1entry sha1string sha1but
-    global diffcontextstring diffcontext
-    global ignorespace
-    global maincursor textcursor curtextcursor
-    global rowctxmenu fakerowmenu mergemax wrapcomment
-    global highlight_files gdttype
-    global searchstring sstring
-    global bgcolor fgcolor bglist fglist diffcolors selectbgcolor
-    global uifgcolor uifgdisabledcolor
-    global filesepbgcolor filesepfgcolor
-    global mergecolors foundbgcolor currentsearchhitbgcolor
-    global headctxmenu progresscanv progressitem progresscoords statusw
-    global fprogitem fprogcoord lastprogupdate progupdatepending
-    global rprogitem rprogcoord rownumsel numcommits
-    global have_tk85 use_ttk NS
-    global git_version
-    global worddiff
+	global canv canv2 canv3 linespc charspc ctext cflist cscroll
+	global tabstop
+	global findtype findtypemenu findloc findstring fstring geometry
+	global entries sha1entry sha1string sha1but
+	global diffcontextstring diffcontext
+	global ignorespace
+	global maincursor textcursor curtextcursor
+	global rowctxmenu fakerowmenu mergemax wrapcomment
+	global highlight_files gdttype
+	global searchstring sstring
+	global bgcolor fgcolor bglist fglist diffcolors selectbgcolor
+	global uifgcolor uifgdisabledcolor
+	global filesepbgcolor filesepfgcolor
+	global mergecolors foundbgcolor currentsearchhitbgcolor
+	global headctxmenu progresscanv progressitem progresscoords statusw
+	global fprogitem fprogcoord lastprogupdate progupdatepending
+	global rprogitem rprogcoord rownumsel numcommits
+	global have_tk85 use_ttk NS
+	global git_version
+	global worddiff
 
-    # The "mc" arguments here are purely so that xgettext
-    # sees the following string as needing to be translated
-    set file {
-	mc "&File" cascade {
-	    {mc "&Update" command updatecommits -accelerator F5}
-	    {mc "&Reload" command reloadcommits -accelerator Shift-F5}
-	    {mc "Reread re&ferences" command rereadrefs}
-	    {mc "&List references" command showrefs -accelerator F2}
-	    {xx "" separator}
-	    {mc "Start git &gui" command {exec git gui &}}
-	    {xx "" separator}
-	    {mc "&Quit" command doquit -accelerator Meta1-Q}
-	}}
-    set edit {
-	mc "&Edit" cascade {
-	    {mc "&Preferences" command doprefs}
-	}}
-    set view {
-	mc "&View" cascade {
-	    {mc "&New view..." command {newview 0} -accelerator Shift-F4}
-	    {mc "&Edit view..." command editview -state disabled -accelerator F4}
-	    {mc "&Delete view" command delview -state disabled}
-	    {xx "" separator}
-	    {mc "&All files" radiobutton {selectedview 0} -command {showview 0}}
-	}}
-    if {[tk windowingsystem] ne "aqua"} {
-	set help {
-	mc "&Help" cascade {
-	    {mc "&About gitk" command about}
-	    {mc "&Key bindings" command keys}
-	}}
-	set bar [list $file $edit $view $help]
-    } else {
-	proc ::tk::mac::ShowPreferences {} {doprefs}
-	proc ::tk::mac::Quit {} {doquit}
-	lset file end [lreplace [lindex $file end] end-1 end]
-	set apple {
-	xx "&Apple" cascade {
-	    {mc "&About gitk" command about}
-	    {xx "" separator}
-	}}
-	set help {
-	mc "&Help" cascade {
-	    {mc "&Key bindings" command keys}
-	}}
-	set bar [list $apple $file $view $help]
-    }
-    makemenu .bar $bar
-    . configure -menu .bar
-
-    if {$use_ttk} {
-        # cover the non-themed toplevel with a themed frame.
-        place [ttk::frame ._main_background] -x 0 -y 0 -relwidth 1 -relheight 1
-    }
-
-    # the gui has upper and lower half, parts of a paned window.
-    ${NS}::panedwindow .ctop -orient vertical
-
-    # possibly use assumed geometry
-    if {![info exists geometry(pwsash0)]} {
-        set geometry(topheight) [expr {15 * $linespc}]
-        set geometry(topwidth) [expr {80 * $charspc}]
-        set geometry(botheight) [expr {15 * $linespc}]
-        set geometry(botwidth) [expr {50 * $charspc}]
-        set geometry(pwsash0) [list [expr {40 * $charspc}] 2]
-        set geometry(pwsash1) [list [expr {60 * $charspc}] 2]
-    }
-
-    # the upper half will have a paned window, a scroll bar to the right, and some stuff below
-    ${NS}::frame .tf -height $geometry(topheight) -width $geometry(topwidth)
-    ${NS}::frame .tf.histframe
-    ${NS}::panedwindow .tf.histframe.pwclist -orient horizontal
-    if {!$use_ttk} {
-	.tf.histframe.pwclist configure -sashpad 0 -handlesize 4
-    }
-
-    # create three canvases
-    set cscroll .tf.histframe.csb
-    set canv .tf.histframe.pwclist.canv
-    canvas $canv \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 \
-	-yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll"
-    .tf.histframe.pwclist add $canv
-    set canv2 .tf.histframe.pwclist.canv2
-    canvas $canv2 \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 -yscrollincr $linespc
-    .tf.histframe.pwclist add $canv2
-    set canv3 .tf.histframe.pwclist.canv3
-    canvas $canv3 \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 -yscrollincr $linespc
-    .tf.histframe.pwclist add $canv3
-    if {$use_ttk} {
-	bind .tf.histframe.pwclist <Map> {
-	    bind %W <Map> {}
-	    .tf.histframe.pwclist sashpos 1 [lindex $::geometry(pwsash1) 0]
-	    .tf.histframe.pwclist sashpos 0 [lindex $::geometry(pwsash0) 0]
+	# The "mc" arguments here are purely so that xgettext
+	# sees the following string as needing to be translated
+	set file {
+		mc "&File" cascade {
+			{mc "&Update" command updatecommits -accelerator F5}
+			{mc "&Reload" command reloadcommits -accelerator Shift-F5}
+			{mc "Reread re&ferences" command rereadrefs}
+			{mc "&List references" command showrefs -accelerator F2}
+			{xx "" separator}
+			{mc "Start git &gui" command {exec git gui &}}
+			{xx "" separator}
+			{mc "&Quit" command doquit -accelerator Meta1-Q}
+		}}
+	set edit {
+		mc "&Edit" cascade {
+			{mc "&Preferences" command doprefs}
+		}}
+	set view {
+		mc "&View" cascade {
+			{mc "&New view..." command {newview 0} -accelerator Shift-F4}
+			{mc "&Edit view..." command editview -state disabled -accelerator F4}
+			{mc "&Delete view" command delview -state disabled}
+			{xx "" separator}
+			{mc "&All files" radiobutton {selectedview 0} -command {showview 0}}
+		}}
+	if {[tk windowingsystem] ne "aqua"} {
+		set help {
+		mc "&Help" cascade {
+			{mc "&About gitk" command about}
+			{mc "&Key bindings" command keys}
+		}}
+		set bar [list $file $edit $view $help]
+	} else {
+		proc ::tk::mac::ShowPreferences {} {doprefs}
+		proc ::tk::mac::Quit {} {doquit}
+		lset file end [lreplace [lindex $file end] end-1 end]
+		set apple {
+		xx "&Apple" cascade {
+			{mc "&About gitk" command about}
+			{xx "" separator}
+		}}
+		set help {
+		mc "&Help" cascade {
+			{mc "&Key bindings" command keys}
+		}}
+		set bar [list $apple $file $view $help]
 	}
-    } else {
-	eval .tf.histframe.pwclist sash place 0 $geometry(pwsash0)
-	eval .tf.histframe.pwclist sash place 1 $geometry(pwsash1)
-    }
+	makemenu .bar $bar
+	. configure -menu .bar
 
-    # a scroll bar to rule them
-    ${NS}::scrollbar $cscroll -command {allcanvs yview}
-    if {!$use_ttk} {$cscroll configure -highlightthickness 0}
-    pack $cscroll -side right -fill y
-    bind .tf.histframe.pwclist <Configure> {resizeclistpanes %W %w}
-    lappend bglist $canv $canv2 $canv3
-    pack .tf.histframe.pwclist -fill both -expand 1 -side left
-
-    # we have two button bars at bottom of top frame. Bar 1
-    ${NS}::frame .tf.bar
-    ${NS}::frame .tf.lbar -height 15
-
-    set sha1entry .tf.bar.sha1
-    set entries $sha1entry
-    set sha1but .tf.bar.sha1label
-    button $sha1but -text "[mc "SHA1 ID:"] " -state disabled -relief flat \
-	-command gotocommit -width 8
-    $sha1but conf -disabledforeground [$sha1but cget -foreground]
-    pack .tf.bar.sha1label -side left
-    ${NS}::entry $sha1entry -width 40 -font textfont -textvariable sha1string
-    trace add variable sha1string write sha1change
-    pack $sha1entry -side left -pady 2
-
-    set bm_left_data {
-	#define left_width 16
-	#define left_height 16
-	static unsigned char left_bits[] = {
-	0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00,
-	0x0e, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x0e, 0x00, 0x1c, 0x00,
-	0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01};
-    }
-    set bm_right_data {
-	#define right_width 16
-	#define right_height 16
-	static unsigned char right_bits[] = {
-	0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1c,
-	0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c,
-	0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01};
-    }
-    image create bitmap bm-left -data $bm_left_data -foreground $uifgcolor
-    image create bitmap bm-left-gray -data $bm_left_data -foreground $uifgdisabledcolor
-    image create bitmap bm-right -data $bm_right_data -foreground $uifgcolor
-    image create bitmap bm-right-gray -data $bm_right_data -foreground $uifgdisabledcolor
-
-    ${NS}::button .tf.bar.leftbut -command goback -state disabled -width 26
-    if {$use_ttk} {
-	.tf.bar.leftbut configure -image [list bm-left disabled bm-left-gray]
-    } else {
-	.tf.bar.leftbut configure -image bm-left
-    }
-    pack .tf.bar.leftbut -side left -fill y
-    ${NS}::button .tf.bar.rightbut -command goforw -state disabled -width 26
-    if {$use_ttk} {
-	.tf.bar.rightbut configure -image [list bm-right disabled bm-right-gray]
-    } else {
-	.tf.bar.rightbut configure -image bm-right
-    }
-    pack .tf.bar.rightbut -side left -fill y
-
-    ${NS}::label .tf.bar.rowlabel -text [mc "Row"]
-    set rownumsel {}
-    ${NS}::label .tf.bar.rownum -width 7 -textvariable rownumsel \
-	-relief sunken -anchor e
-    ${NS}::label .tf.bar.rowlabel2 -text "/"
-    ${NS}::label .tf.bar.numcommits -width 7 -textvariable numcommits \
-	-relief sunken -anchor e
-    pack .tf.bar.rowlabel .tf.bar.rownum .tf.bar.rowlabel2 .tf.bar.numcommits \
-	-side left
-    if {!$use_ttk} {
-        foreach w {rownum numcommits} {.tf.bar.$w configure -font textfont}
-    }
-    global selectedline
-    trace add variable selectedline write selectedline_change
-
-    # Status label and progress bar
-    set statusw .tf.bar.status
-    ${NS}::label $statusw -width 15 -relief sunken
-    pack $statusw -side left -padx 5
-    if {$use_ttk} {
-	set progresscanv [ttk::progressbar .tf.bar.progress]
-    } else {
-	set h [expr {[font metrics uifont -linespace] + 2}]
-	set progresscanv .tf.bar.progress
-	canvas $progresscanv -relief sunken -height $h -borderwidth 2
-	set progressitem [$progresscanv create rect -1 0 0 $h -fill "#00ff00"]
-	set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
-	set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
-    }
-    pack $progresscanv -side right -expand 1 -fill x -padx {0 2}
-    set progresscoords {0 0}
-    set fprogcoord 0
-    set rprogcoord 0
-    bind $progresscanv <Configure> adjustprogress
-    set lastprogupdate [clock clicks -milliseconds]
-    set progupdatepending 0
-
-    # build up the bottom bar of upper window
-    ${NS}::label .tf.lbar.flabel -text "[mc "Find"] "
-
-    set bm_down_data {
-	#define down_width 16
-	#define down_height 16
-	static unsigned char down_bits[] = {
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x87, 0xe1, 0x8e, 0x71, 0x9c, 0x39, 0xb8, 0x1d,
-	0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
-    }
-    image create bitmap bm-down -data $bm_down_data -foreground $uifgcolor
-    ${NS}::button .tf.lbar.fnext -width 26 -command {dofind 1 1}
-    .tf.lbar.fnext configure -image bm-down
-
-    set bm_up_data {
-	#define up_width 16
-	#define up_height 16
-	static unsigned char up_bits[] = {
-	0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
-	0xb8, 0x1d, 0x9c, 0x39, 0x8e, 0x71, 0x87, 0xe1,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01};
-    }
-    image create bitmap bm-up -data $bm_up_data -foreground $uifgcolor
-    ${NS}::button .tf.lbar.fprev -width 26 -command {dofind -1 1}
-    .tf.lbar.fprev configure -image bm-up
-
-    ${NS}::label .tf.lbar.flab2 -text " [mc "commit"] "
-
-    pack .tf.lbar.flabel .tf.lbar.fnext .tf.lbar.fprev .tf.lbar.flab2 \
-	-side left -fill y
-    set gdttype [mc "containing:"]
-    set gm [makedroplist .tf.lbar.gdttype gdttype \
-		[mc "containing:"] \
-		[mc "touching paths:"] \
-		[mc "adding/removing string:"] \
-		[mc "changing lines matching:"]]
-    trace add variable gdttype write gdttype_change
-    pack .tf.lbar.gdttype -side left -fill y
-
-    set findstring {}
-    set fstring .tf.lbar.findstring
-    lappend entries $fstring
-    ${NS}::entry $fstring -width 30 -textvariable findstring
-    trace add variable findstring write find_change
-    set findtype [mc "Exact"]
-    set findtypemenu [makedroplist .tf.lbar.findtype \
-			  findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
-    trace add variable findtype write findcom_change
-    set findloc [mc "All fields"]
-    makedroplist .tf.lbar.findloc findloc [mc "All fields"] [mc "Headline"] \
-	[mc "Comments"] [mc "Author"] [mc "Committer"]
-    trace add variable findloc write find_change
-    pack .tf.lbar.findloc -side right
-    pack .tf.lbar.findtype -side right
-    pack $fstring -side left -expand 1 -fill x
-
-    # Finish putting the upper half of the viewer together
-    pack .tf.lbar -in .tf -side bottom -fill x
-    pack .tf.bar -in .tf -side bottom -fill x
-    pack .tf.histframe -fill both -side top -expand 1
-    .ctop add .tf
-    if {!$use_ttk} {
-	.ctop paneconfigure .tf -height $geometry(topheight)
-	.ctop paneconfigure .tf -width $geometry(topwidth)
-    }
-
-    # now build up the bottom
-    ${NS}::panedwindow .pwbottom -orient horizontal
-
-    # lower left, a text box over search bar, scroll bar to the right
-    # if we know window height, then that will set the lower text height, otherwise
-    # we set lower text height which will drive window height
-    if {[info exists geometry(main)]} {
-	${NS}::frame .bleft -width $geometry(botwidth)
-    } else {
-	${NS}::frame .bleft -width $geometry(botwidth) -height $geometry(botheight)
-    }
-    ${NS}::frame .bleft.top
-    ${NS}::frame .bleft.mid
-    ${NS}::frame .bleft.bottom
-
-    # gap between sub-widgets
-    set wgap [font measure uifont "i"]
-
-    ${NS}::button .bleft.top.search -text [mc "Search"] -command dosearch
-    pack .bleft.top.search -side left -padx 5
-    set sstring .bleft.top.sstring
-    set searchstring ""
-    ${NS}::entry $sstring -width 20 -textvariable searchstring
-    lappend entries $sstring
-    trace add variable searchstring write incrsearch
-    pack $sstring -side left -expand 1 -fill x
-    ${NS}::radiobutton .bleft.mid.diff -text [mc "Diff"] \
-	-command changediffdisp -variable diffelide -value {0 0}
-    ${NS}::radiobutton .bleft.mid.old -text [mc "Old version"] \
-	-command changediffdisp -variable diffelide -value {0 1}
-    ${NS}::radiobutton .bleft.mid.new -text [mc "New version"] \
-	-command changediffdisp -variable diffelide -value {1 0}
-
-    ${NS}::label .bleft.mid.labeldiffcontext -text "      [mc "Lines of context"]: "
-    pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap
-    spinbox .bleft.mid.diffcontext -width 5 \
-	-from 0 -increment 1 -to 10000000 \
-	-validate all -validatecommand "diffcontextvalidate %P" \
-	-textvariable diffcontextstring
-    .bleft.mid.diffcontext set $diffcontext
-    trace add variable diffcontextstring write diffcontextchange
-    lappend entries .bleft.mid.diffcontext
-    pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left -ipadx $wgap
-    ${NS}::checkbutton .bleft.mid.ignspace -text [mc "Ignore space change"] \
-	-command changeignorespace -variable ignorespace
-    pack .bleft.mid.ignspace -side left -padx 5
-
-    set worddiff [mc "Line diff"]
-    if {[package vcompare $git_version "1.7.2"] >= 0} {
-	makedroplist .bleft.mid.worddiff worddiff [mc "Line diff"] \
-	    [mc "Markup words"] [mc "Color words"]
-	trace add variable worddiff write changeworddiff
-	pack .bleft.mid.worddiff -side left -padx 5
-    }
-
-    set ctext .bleft.bottom.ctext
-    text $ctext -background $bgcolor -foreground $fgcolor \
-	-state disabled -undo 0 -font textfont \
-	-yscrollcommand scrolltext -wrap none \
-	-xscrollcommand ".bleft.bottom.sbhorizontal set"
-    if {$have_tk85} {
-	$ctext conf -tabstyle wordprocessor
-    }
-    ${NS}::scrollbar .bleft.bottom.sb -command "$ctext yview"
-    ${NS}::scrollbar .bleft.bottom.sbhorizontal -command "$ctext xview" -orient h
-    pack .bleft.top -side top -fill x
-    pack .bleft.mid -side top -fill x
-    grid $ctext .bleft.bottom.sb -sticky nsew
-    grid .bleft.bottom.sbhorizontal -sticky ew
-    grid columnconfigure .bleft.bottom 0 -weight 1
-    grid rowconfigure .bleft.bottom 0 -weight 1
-    grid rowconfigure .bleft.bottom 1 -weight 0
-    pack .bleft.bottom -side top -fill both -expand 1
-    lappend bglist $ctext
-    lappend fglist $ctext
-
-    $ctext tag conf comment -wrap $wrapcomment
-    $ctext tag conf filesep -font textfontbold -fore $filesepfgcolor -back $filesepbgcolor
-    $ctext tag conf hunksep -fore [lindex $diffcolors 2]
-    $ctext tag conf d0 -fore [lindex $diffcolors 0]
-    $ctext tag conf dresult -fore [lindex $diffcolors 1]
-    $ctext tag conf m0 -fore [lindex $mergecolors 0]
-    $ctext tag conf m1 -fore [lindex $mergecolors 1]
-    $ctext tag conf m2 -fore [lindex $mergecolors 2]
-    $ctext tag conf m3 -fore [lindex $mergecolors 3]
-    $ctext tag conf m4 -fore [lindex $mergecolors 4]
-    $ctext tag conf m5 -fore [lindex $mergecolors 5]
-    $ctext tag conf m6 -fore [lindex $mergecolors 6]
-    $ctext tag conf m7 -fore [lindex $mergecolors 7]
-    $ctext tag conf m8 -fore [lindex $mergecolors 8]
-    $ctext tag conf m9 -fore [lindex $mergecolors 9]
-    $ctext tag conf m10 -fore [lindex $mergecolors 10]
-    $ctext tag conf m11 -fore [lindex $mergecolors 11]
-    $ctext tag conf m12 -fore [lindex $mergecolors 12]
-    $ctext tag conf m13 -fore [lindex $mergecolors 13]
-    $ctext tag conf m14 -fore [lindex $mergecolors 14]
-    $ctext tag conf m15 -fore [lindex $mergecolors 15]
-    $ctext tag conf mmax -fore darkgrey
-    set mergemax 16
-    $ctext tag conf mresult -font textfontbold
-    $ctext tag conf msep -font textfontbold
-    $ctext tag conf found -back $foundbgcolor
-    $ctext tag conf currentsearchhit -back $currentsearchhitbgcolor
-    $ctext tag conf wwrap -wrap word -lmargin2 1c
-    $ctext tag conf bold -font textfontbold
-
-    .pwbottom add .bleft
-    if {!$use_ttk} {
-	.pwbottom paneconfigure .bleft -width $geometry(botwidth)
-    }
-
-    # lower right
-    ${NS}::frame .bright
-    ${NS}::frame .bright.mode
-    ${NS}::radiobutton .bright.mode.patch -text [mc "Patch"] \
-	-command reselectline -variable cmitmode -value "patch"
-    ${NS}::radiobutton .bright.mode.tree -text [mc "Tree"] \
-	-command reselectline -variable cmitmode -value "tree"
-    grid .bright.mode.patch .bright.mode.tree -sticky ew
-    pack .bright.mode -side top -fill x
-    set cflist .bright.cfiles
-    set indent [font measure mainfont "nn"]
-    text $cflist \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -foreground $fgcolor \
-	-font mainfont \
-	-tabs [list $indent [expr {2 * $indent}]] \
-	-yscrollcommand ".bright.sb set" \
-	-cursor [. cget -cursor] \
-	-spacing1 1 -spacing3 1
-    lappend bglist $cflist
-    lappend fglist $cflist
-    ${NS}::scrollbar .bright.sb -command "$cflist yview"
-    pack .bright.sb -side right -fill y
-    pack $cflist -side left -fill both -expand 1
-    $cflist tag configure highlight \
-	-background [$cflist cget -selectbackground]
-    $cflist tag configure bold -font mainfontbold
-
-    .pwbottom add .bright
-    .ctop add .pwbottom
-
-    # restore window width & height if known
-    if {[info exists geometry(main)]} {
-	if {[scan $geometry(main) "%dx%d" w h] >= 2} {
-	    if {$w > [winfo screenwidth .]} {
-		set w [winfo screenwidth .]
-	    }
-	    if {$h > [winfo screenheight .]} {
-		set h [winfo screenheight .]
-	    }
-	    wm geometry . "${w}x$h"
+	if {$use_ttk} {
+		# cover the non-themed toplevel with a themed frame.
+		place [ttk::frame ._main_background] -x 0 -y 0 -relwidth 1 -relheight 1
 	}
-    }
 
-    if {[info exists geometry(state)] && $geometry(state) eq "zoomed"} {
-        wm state . $geometry(state)
-    }
+	# the gui has upper and lower half, parts of a paned window.
+	${NS}::panedwindow .ctop -orient vertical
 
-    if {[tk windowingsystem] eq {aqua}} {
-        set M1B M1
-        set ::BM "3"
-    } else {
-        set M1B Control
-        set ::BM "2"
-    }
-
-    if {$use_ttk} {
-        bind .ctop <Map> {
-            bind %W <Map> {}
-            %W sashpos 0 $::geometry(topheight)
-        }
-        bind .pwbottom <Map> {
-            bind %W <Map> {}
-            %W sashpos 0 $::geometry(botwidth)
-        }
-	bind .pwbottom <Configure> {resizecdetpanes %W %w}
-    }
-
-    pack .ctop -fill both -expand 1
-    bindall <1> {selcanvline %W %x %y}
-    #bindall <B1-Motion> {selcanvline %W %x %y}
-    if {[tk windowingsystem] == "win32"} {
-	bind . <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D }
-	bind $ctext <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D ; break }
-    } else {
-	bindall <ButtonRelease-4> "allcanvs yview scroll -5 units"
-	bindall <ButtonRelease-5> "allcanvs yview scroll 5 units"
-	bind $ctext <Button> {
-	    if {"%b" eq 6} {
-		$ctext xview scroll -5 units
-	    } elseif {"%b" eq 7} {
-		$ctext xview scroll 5 units
-	    }
+	# possibly use assumed geometry
+	if {![info exists geometry(pwsash0)]} {
+		set geometry(topheight) [expr {15 * $linespc}]
+		set geometry(topwidth) [expr {80 * $charspc}]
+		set geometry(botheight) [expr {15 * $linespc}]
+		set geometry(botwidth) [expr {50 * $charspc}]
+		set geometry(pwsash0) [list [expr {40 * $charspc}] 2]
+		set geometry(pwsash1) [list [expr {60 * $charspc}] 2]
 	}
-        if {[tk windowingsystem] eq "aqua"} {
-            bindall <MouseWheel> {
-                set delta [expr {- (%D)}]
-                allcanvs yview scroll $delta units
-            }
-            bindall <Shift-MouseWheel> {
-                set delta [expr {- (%D)}]
-                $canv xview scroll $delta units
-            }
-        }
-    }
-    bindall <$::BM> "canvscan mark %W %x %y"
-    bindall <B$::BM-Motion> "canvscan dragto %W %x %y"
-    bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
-    bind . <$M1B-Key-w> doquit
-    bindkey <Home> selfirstline
-    bindkey <End> sellastline
-    bind . <Key-Up> "selnextline -1"
-    bind . <Key-Down> "selnextline 1"
-    bind . <Shift-Key-Up> "dofind -1 0"
-    bind . <Shift-Key-Down> "dofind 1 0"
-    bindkey <Key-Right> "goforw"
-    bindkey <Key-Left> "goback"
-    bind . <Key-Prior> "selnextpage -1"
-    bind . <Key-Next> "selnextpage 1"
-    bind . <$M1B-Home> "allcanvs yview moveto 0.0"
-    bind . <$M1B-End> "allcanvs yview moveto 1.0"
-    bind . <$M1B-Key-Up> "allcanvs yview scroll -1 units"
-    bind . <$M1B-Key-Down> "allcanvs yview scroll 1 units"
-    bind . <$M1B-Key-Prior> "allcanvs yview scroll -1 pages"
-    bind . <$M1B-Key-Next> "allcanvs yview scroll 1 pages"
-    bindkey <Key-Delete> "$ctext yview scroll -1 pages"
-    bindkey <Key-BackSpace> "$ctext yview scroll -1 pages"
-    bindkey <Key-space> "$ctext yview scroll 1 pages"
-    bindkey p "selnextline -1"
-    bindkey n "selnextline 1"
-    bindkey z "goback"
-    bindkey x "goforw"
-    bindkey k "selnextline -1"
-    bindkey j "selnextline 1"
-    bindkey h "goback"
-    bindkey l "goforw"
-    bindkey b prevfile
-    bindkey d "$ctext yview scroll 18 units"
-    bindkey u "$ctext yview scroll -18 units"
-    bindkey g {$sha1entry delete 0 end; focus $sha1entry}
-    bindkey / {focus $fstring}
-    bindkey <Key-KP_Divide> {focus $fstring}
-    bindkey <Key-Return> {dofind 1 1}
-    bindkey ? {dofind -1 1}
-    bindkey f nextfile
-    bind . <F5> updatecommits
-    bindmodfunctionkey Shift 5 reloadcommits
-    bind . <F2> showrefs
-    bindmodfunctionkey Shift 4 {newview 0}
-    bind . <F4> edit_or_newview
-    bind . <$M1B-q> doquit
-    bind . <$M1B-f> {dofind 1 1}
-    bind . <$M1B-g> {dofind 1 0}
-    bind . <$M1B-r> dosearchback
-    bind . <$M1B-s> dosearch
-    bind . <$M1B-equal> {incrfont 1}
-    bind . <$M1B-plus> {incrfont 1}
-    bind . <$M1B-KP_Add> {incrfont 1}
-    bind . <$M1B-minus> {incrfont -1}
-    bind . <$M1B-KP_Subtract> {incrfont -1}
-    wm protocol . WM_DELETE_WINDOW doquit
-    bind . <Destroy> {stop_backends}
-    bind . <Button-1> "click %W"
-    bind $fstring <Key-Return> {dofind 1 1}
-    bind $sha1entry <Key-Return> {gotocommit; break}
-    bind $sha1entry <<PasteSelection>> clearsha1
-    bind $sha1entry <<Paste>> clearsha1
-    bind $cflist <1> {sel_flist %W %x %y; break}
-    bind $cflist <B1-Motion> {sel_flist %W %x %y; break}
-    bind $cflist <ButtonRelease-1> {treeclick %W %x %y}
-    global ctxbut
-    bind $cflist $ctxbut {pop_flist_menu %W %X %Y %x %y}
-    bind $ctext $ctxbut {pop_diff_menu %W %X %Y %x %y}
-    bind $ctext <Button-1> {focus %W}
-    bind $ctext <<Selection>> rehighlight_search_results
-    for {set i 1} {$i < 10} {incr i} {
-	bind . <$M1B-Key-$i> [list go_to_parent $i]
-    }
 
-    set maincursor [. cget -cursor]
-    set textcursor [$ctext cget -cursor]
-    set curtextcursor $textcursor
+	# the upper half will have a paned window, a scroll bar to the right, and some stuff below
+	${NS}::frame .tf -height $geometry(topheight) -width $geometry(topwidth)
+	${NS}::frame .tf.histframe
+	${NS}::panedwindow .tf.histframe.pwclist -orient horizontal
+	if {!$use_ttk} {
+		.tf.histframe.pwclist configure -sashpad 0 -handlesize 4
+	}
 
-    set rowctxmenu .rowctxmenu
-    makemenu $rowctxmenu {
-	{mc "Diff this -> selected" command {diffvssel 0}}
-	{mc "Diff selected -> this" command {diffvssel 1}}
-	{mc "Make patch" command mkpatch}
-	{mc "Create tag" command mktag}
-	{mc "Copy commit reference" command copyreference}
-	{mc "Write commit to file" command writecommit}
-	{mc "Create new branch" command mkbranch}
-	{mc "Cherry-pick this commit" command cherrypick}
-	{mc "Reset HEAD branch to here" command resethead}
-	{mc "Mark this commit" command markhere}
-	{mc "Return to mark" command gotomark}
-	{mc "Find descendant of this and mark" command find_common_desc}
-	{mc "Compare with marked commit" command compare_commits}
-	{mc "Diff this -> marked commit" command {diffvsmark 0}}
-	{mc "Diff marked commit -> this" command {diffvsmark 1}}
-	{mc "Revert this commit" command revert}
-    }
-    $rowctxmenu configure -tearoff 0
+	# create three canvases
+	set cscroll .tf.histframe.csb
+	set canv .tf.histframe.pwclist.canv
+	canvas $canv \
+		-selectbackground $selectbgcolor \
+		-background $bgcolor -bd 0 \
+		-yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll"
+	.tf.histframe.pwclist add $canv
+	set canv2 .tf.histframe.pwclist.canv2
+	canvas $canv2 \
+		-selectbackground $selectbgcolor \
+		-background $bgcolor -bd 0 -yscrollincr $linespc
+	.tf.histframe.pwclist add $canv2
+	set canv3 .tf.histframe.pwclist.canv3
+	canvas $canv3 \
+		-selectbackground $selectbgcolor \
+		-background $bgcolor -bd 0 -yscrollincr $linespc
+	.tf.histframe.pwclist add $canv3
+	if {$use_ttk} {
+		bind .tf.histframe.pwclist <Map> {
+			bind %W <Map> {}
+			.tf.histframe.pwclist sashpos 1 [lindex $::geometry(pwsash1) 0]
+			.tf.histframe.pwclist sashpos 0 [lindex $::geometry(pwsash0) 0]
+		}
+	} else {
+		eval .tf.histframe.pwclist sash place 0 $geometry(pwsash0)
+		eval .tf.histframe.pwclist sash place 1 $geometry(pwsash1)
+	}
 
-    set fakerowmenu .fakerowmenu
-    makemenu $fakerowmenu {
-	{mc "Diff this -> selected" command {diffvssel 0}}
-	{mc "Diff selected -> this" command {diffvssel 1}}
-	{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
+	# a scroll bar to rule them
+	${NS}::scrollbar $cscroll -command {allcanvs yview}
+	if {!$use_ttk} {$cscroll configure -highlightthickness 0}
+	pack $cscroll -side right -fill y
+	bind .tf.histframe.pwclist <Configure> {resizeclistpanes %W %w}
+	lappend bglist $canv $canv2 $canv3
+	pack .tf.histframe.pwclist -fill both -expand 1 -side left
 
-    set headctxmenu .headctxmenu
-    makemenu $headctxmenu {
-	{mc "Check out this branch" command cobranch}
-	{mc "Rename this branch" command mvbranch}
-	{mc "Remove this branch" command rmbranch}
-	{mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
-    }
-    $headctxmenu configure -tearoff 0
+	# we have two button bars at bottom of top frame. Bar 1
+	${NS}::frame .tf.bar
+	${NS}::frame .tf.lbar -height 15
 
-    global flist_menu
-    set flist_menu .flistctxmenu
-    makemenu $flist_menu {
-	{mc "Highlight this too" command {flist_hl 0}}
-	{mc "Highlight this only" command {flist_hl 1}}
-	{mc "External diff" command {external_diff}}
-	{mc "Blame parent commit" command {external_blame 1}}
-	{mc "Copy path" command {clipboard clear; clipboard append $flist_menu_file}}
-    }
-    $flist_menu configure -tearoff 0
+	set sha1entry .tf.bar.sha1
+	set entries $sha1entry
+	set sha1but .tf.bar.sha1label
+	button $sha1but -text "[mc "SHA1 ID:"] " -state disabled -relief flat \
+		-command gotocommit -width 8
+	$sha1but conf -disabledforeground [$sha1but cget -foreground]
+	pack .tf.bar.sha1label -side left
+	${NS}::entry $sha1entry -width 40 -font textfont -textvariable sha1string
+	trace add variable sha1string write sha1change
+	pack $sha1entry -side left -pady 2
 
-    global diff_menu
-    set diff_menu .diffctxmenu
-    makemenu $diff_menu {
-	{mc "Show origin of this line" command show_line_source}
-	{mc "Run git gui blame on this line" command {external_blame_diff}}
-    }
-    $diff_menu configure -tearoff 0
+	set bm_left_data {
+		#define left_width 16
+		#define left_height 16
+		static unsigned char left_bits[] = {
+		0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00,
+		0x0e, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x0e, 0x00, 0x1c, 0x00,
+		0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01};
+	}
+	set bm_right_data {
+		#define right_width 16
+		#define right_height 16
+		static unsigned char right_bits[] = {
+		0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1c,
+		0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c,
+		0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01};
+	}
+	image create bitmap bm-left -data $bm_left_data -foreground $uifgcolor
+	image create bitmap bm-left-gray -data $bm_left_data -foreground $uifgdisabledcolor
+	image create bitmap bm-right -data $bm_right_data -foreground $uifgcolor
+	image create bitmap bm-right-gray -data $bm_right_data -foreground $uifgdisabledcolor
+
+	${NS}::button .tf.bar.leftbut -command goback -state disabled -width 26
+	if {$use_ttk} {
+		.tf.bar.leftbut configure -image [list bm-left disabled bm-left-gray]
+	} else {
+		.tf.bar.leftbut configure -image bm-left
+	}
+	pack .tf.bar.leftbut -side left -fill y
+	${NS}::button .tf.bar.rightbut -command goforw -state disabled -width 26
+	if {$use_ttk} {
+		.tf.bar.rightbut configure -image [list bm-right disabled bm-right-gray]
+	} else {
+		.tf.bar.rightbut configure -image bm-right
+	}
+	pack .tf.bar.rightbut -side left -fill y
+
+	${NS}::label .tf.bar.rowlabel -text [mc "Row"]
+	set rownumsel {}
+	${NS}::label .tf.bar.rownum -width 7 -textvariable rownumsel \
+		-relief sunken -anchor e
+	${NS}::label .tf.bar.rowlabel2 -text "/"
+	${NS}::label .tf.bar.numcommits -width 7 -textvariable numcommits \
+		-relief sunken -anchor e
+	pack .tf.bar.rowlabel .tf.bar.rownum .tf.bar.rowlabel2 .tf.bar.numcommits \
+		-side left
+	if {!$use_ttk} {
+		foreach w {rownum numcommits} {.tf.bar.$w configure -font textfont}
+	}
+	global selectedline
+	trace add variable selectedline write selectedline_change
+
+	# Status label and progress bar
+	set statusw .tf.bar.status
+	${NS}::label $statusw -width 15 -relief sunken
+	pack $statusw -side left -padx 5
+	if {$use_ttk} {
+		set progresscanv [ttk::progressbar .tf.bar.progress]
+	} else {
+		set h [expr {[font metrics uifont -linespace] + 2}]
+		set progresscanv .tf.bar.progress
+		canvas $progresscanv -relief sunken -height $h -borderwidth 2
+		set progressitem [$progresscanv create rect -1 0 0 $h -fill "#00ff00"]
+		set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
+		set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
+	}
+	pack $progresscanv -side right -expand 1 -fill x -padx {0 2}
+	set progresscoords {0 0}
+	set fprogcoord 0
+	set rprogcoord 0
+	bind $progresscanv <Configure> adjustprogress
+	set lastprogupdate [clock clicks -milliseconds]
+	set progupdatepending 0
+
+	# build up the bottom bar of upper window
+	${NS}::label .tf.lbar.flabel -text "[mc "Find"] "
+
+	set bm_down_data {
+		#define down_width 16
+		#define down_height 16
+		static unsigned char down_bits[] = {
+		0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+		0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+		0x87, 0xe1, 0x8e, 0x71, 0x9c, 0x39, 0xb8, 0x1d,
+		0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
+	}
+	image create bitmap bm-down -data $bm_down_data -foreground $uifgcolor
+	${NS}::button .tf.lbar.fnext -width 26 -command {dofind 1 1}
+	.tf.lbar.fnext configure -image bm-down
+
+	set bm_up_data {
+		#define up_width 16
+		#define up_height 16
+		static unsigned char up_bits[] = {
+		0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
+		0xb8, 0x1d, 0x9c, 0x39, 0x8e, 0x71, 0x87, 0xe1,
+		0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+		0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01};
+	}
+	image create bitmap bm-up -data $bm_up_data -foreground $uifgcolor
+	${NS}::button .tf.lbar.fprev -width 26 -command {dofind -1 1}
+	.tf.lbar.fprev configure -image bm-up
+
+	${NS}::label .tf.lbar.flab2 -text " [mc "commit"] "
+
+	pack .tf.lbar.flabel .tf.lbar.fnext .tf.lbar.fprev .tf.lbar.flab2 \
+		-side left -fill y
+	set gdttype [mc "containing:"]
+	set gm [makedroplist .tf.lbar.gdttype gdttype \
+				[mc "containing:"] \
+				[mc "touching paths:"] \
+				[mc "adding/removing string:"] \
+				[mc "changing lines matching:"]]
+	trace add variable gdttype write gdttype_change
+	pack .tf.lbar.gdttype -side left -fill y
+
+	set findstring {}
+	set fstring .tf.lbar.findstring
+	lappend entries $fstring
+	${NS}::entry $fstring -width 30 -textvariable findstring
+	trace add variable findstring write find_change
+	set findtype [mc "Exact"]
+	set findtypemenu [makedroplist .tf.lbar.findtype \
+						  findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
+	trace add variable findtype write findcom_change
+	set findloc [mc "All fields"]
+	makedroplist .tf.lbar.findloc findloc [mc "All fields"] [mc "Headline"] \
+		[mc "Comments"] [mc "Author"] [mc "Committer"]
+	trace add variable findloc write find_change
+	pack .tf.lbar.findloc -side right
+	pack .tf.lbar.findtype -side right
+	pack $fstring -side left -expand 1 -fill x
+
+	# Finish putting the upper half of the viewer together
+	pack .tf.lbar -in .tf -side bottom -fill x
+	pack .tf.bar -in .tf -side bottom -fill x
+	pack .tf.histframe -fill both -side top -expand 1
+	.ctop add .tf
+	if {!$use_ttk} {
+		.ctop paneconfigure .tf -height $geometry(topheight)
+		.ctop paneconfigure .tf -width $geometry(topwidth)
+	}
+
+	# now build up the bottom
+	${NS}::panedwindow .pwbottom -orient horizontal
+
+	# lower left, a text box over search bar, scroll bar to the right
+	# if we know window height, then that will set the lower text height, otherwise
+	# we set lower text height which will drive window height
+	if {[info exists geometry(main)]} {
+		${NS}::frame .bleft -width $geometry(botwidth)
+	} else {
+		${NS}::frame .bleft -width $geometry(botwidth) -height $geometry(botheight)
+	}
+	${NS}::frame .bleft.top
+	${NS}::frame .bleft.mid
+	${NS}::frame .bleft.bottom
+
+	# gap between sub-widgets
+	set wgap [font measure uifont "i"]
+
+	${NS}::button .bleft.top.search -text [mc "Search"] -command dosearch
+	pack .bleft.top.search -side left -padx 5
+	set sstring .bleft.top.sstring
+	set searchstring ""
+	${NS}::entry $sstring -width 20 -textvariable searchstring
+	lappend entries $sstring
+	trace add variable searchstring write incrsearch
+	pack $sstring -side left -expand 1 -fill x
+	${NS}::radiobutton .bleft.mid.diff -text [mc "Diff"] \
+		-command changediffdisp -variable diffelide -value {0 0}
+	${NS}::radiobutton .bleft.mid.old -text [mc "Old version"] \
+		-command changediffdisp -variable diffelide -value {0 1}
+	${NS}::radiobutton .bleft.mid.new -text [mc "New version"] \
+		-command changediffdisp -variable diffelide -value {1 0}
+
+	${NS}::label .bleft.mid.labeldiffcontext -text "	  [mc "Lines of context"]: "
+	pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap
+	spinbox .bleft.mid.diffcontext -width 5 \
+		-from 0 -increment 1 -to 10000000 \
+		-validate all -validatecommand "diffcontextvalidate %P" \
+		-textvariable diffcontextstring
+	.bleft.mid.diffcontext set $diffcontext
+	trace add variable diffcontextstring write diffcontextchange
+	lappend entries .bleft.mid.diffcontext
+	pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left -ipadx $wgap
+	${NS}::checkbutton .bleft.mid.ignspace -text [mc "Ignore space change"] \
+		-command changeignorespace -variable ignorespace
+	pack .bleft.mid.ignspace -side left -padx 5
+
+	set worddiff [mc "Line diff"]
+	if {[package vcompare $git_version "1.7.2"] >= 0} {
+		makedroplist .bleft.mid.worddiff worddiff [mc "Line diff"] \
+			[mc "Markup words"] [mc "Color words"]
+		trace add variable worddiff write changeworddiff
+		pack .bleft.mid.worddiff -side left -padx 5
+	}
+
+	set ctext .bleft.bottom.ctext
+	text $ctext -background $bgcolor -foreground $fgcolor \
+		-state disabled -undo 0 -font textfont \
+		-yscrollcommand scrolltext -wrap none \
+		-xscrollcommand ".bleft.bottom.sbhorizontal set"
+	if {$have_tk85} {
+		$ctext conf -tabstyle wordprocessor
+	}
+	${NS}::scrollbar .bleft.bottom.sb -command "$ctext yview"
+	${NS}::scrollbar .bleft.bottom.sbhorizontal -command "$ctext xview" -orient h
+	pack .bleft.top -side top -fill x
+	pack .bleft.mid -side top -fill x
+	grid $ctext .bleft.bottom.sb -sticky nsew
+	grid .bleft.bottom.sbhorizontal -sticky ew
+	grid columnconfigure .bleft.bottom 0 -weight 1
+	grid rowconfigure .bleft.bottom 0 -weight 1
+	grid rowconfigure .bleft.bottom 1 -weight 0
+	pack .bleft.bottom -side top -fill both -expand 1
+	lappend bglist $ctext
+	lappend fglist $ctext
+
+	$ctext tag conf comment -wrap $wrapcomment
+	$ctext tag conf filesep -font textfontbold -fore $filesepfgcolor -back $filesepbgcolor
+	$ctext tag conf hunksep -fore [lindex $diffcolors 2]
+	$ctext tag conf d0 -fore [lindex $diffcolors 0]
+	$ctext tag conf dresult -fore [lindex $diffcolors 1]
+	$ctext tag conf m0 -fore [lindex $mergecolors 0]
+	$ctext tag conf m1 -fore [lindex $mergecolors 1]
+	$ctext tag conf m2 -fore [lindex $mergecolors 2]
+	$ctext tag conf m3 -fore [lindex $mergecolors 3]
+	$ctext tag conf m4 -fore [lindex $mergecolors 4]
+	$ctext tag conf m5 -fore [lindex $mergecolors 5]
+	$ctext tag conf m6 -fore [lindex $mergecolors 6]
+	$ctext tag conf m7 -fore [lindex $mergecolors 7]
+	$ctext tag conf m8 -fore [lindex $mergecolors 8]
+	$ctext tag conf m9 -fore [lindex $mergecolors 9]
+	$ctext tag conf m10 -fore [lindex $mergecolors 10]
+	$ctext tag conf m11 -fore [lindex $mergecolors 11]
+	$ctext tag conf m12 -fore [lindex $mergecolors 12]
+	$ctext tag conf m13 -fore [lindex $mergecolors 13]
+	$ctext tag conf m14 -fore [lindex $mergecolors 14]
+	$ctext tag conf m15 -fore [lindex $mergecolors 15]
+	$ctext tag conf mmax -fore darkgrey
+	set mergemax 16
+	$ctext tag conf mresult -font textfontbold
+	$ctext tag conf msep -font textfontbold
+	$ctext tag conf found -back $foundbgcolor
+	$ctext tag conf currentsearchhit -back $currentsearchhitbgcolor
+	$ctext tag conf wwrap -wrap word -lmargin2 1c
+	$ctext tag conf bold -font textfontbold
+
+	.pwbottom add .bleft
+	if {!$use_ttk} {
+		.pwbottom paneconfigure .bleft -width $geometry(botwidth)
+	}
+
+	# lower right
+	${NS}::frame .bright
+	${NS}::frame .bright.mode
+	${NS}::radiobutton .bright.mode.patch -text [mc "Patch"] \
+		-command reselectline -variable cmitmode -value "patch"
+	${NS}::radiobutton .bright.mode.tree -text [mc "Tree"] \
+		-command reselectline -variable cmitmode -value "tree"
+	grid .bright.mode.patch .bright.mode.tree -sticky ew
+	pack .bright.mode -side top -fill x
+	set cflist .bright.cfiles
+	set indent [font measure mainfont "nn"]
+	text $cflist \
+		-selectbackground $selectbgcolor \
+		-background $bgcolor -foreground $fgcolor \
+		-font mainfont \
+		-tabs [list $indent [expr {2 * $indent}]] \
+		-yscrollcommand ".bright.sb set" \
+		-cursor [. cget -cursor] \
+		-spacing1 1 -spacing3 1
+	lappend bglist $cflist
+	lappend fglist $cflist
+	${NS}::scrollbar .bright.sb -command "$cflist yview"
+	pack .bright.sb -side right -fill y
+	pack $cflist -side left -fill both -expand 1
+	$cflist tag configure highlight \
+		-background [$cflist cget -selectbackground]
+	$cflist tag configure bold -font mainfontbold
+
+	.pwbottom add .bright
+	.ctop add .pwbottom
+
+	# restore window width & height if known
+	if {[info exists geometry(main)]} {
+		if {[scan $geometry(main) "%dx%d" w h] >= 2} {
+			if {$w > [winfo screenwidth .]} {
+				set w [winfo screenwidth .]
+			}
+			if {$h > [winfo screenheight .]} {
+				set h [winfo screenheight .]
+			}
+			wm geometry . "${w}x$h"
+		}
+	}
+
+	if {[info exists geometry(state)] && $geometry(state) eq "zoomed"} {
+		wm state . $geometry(state)
+	}
+
+	if {[tk windowingsystem] eq {aqua}} {
+		set M1B M1
+		set ::BM "3"
+	} else {
+		set M1B Control
+		set ::BM "2"
+	}
+
+	if {$use_ttk} {
+		bind .ctop <Map> {
+			bind %W <Map> {}
+			%W sashpos 0 $::geometry(topheight)
+		}
+		bind .pwbottom <Map> {
+			bind %W <Map> {}
+			%W sashpos 0 $::geometry(botwidth)
+		}
+		bind .pwbottom <Configure> {resizecdetpanes %W %w}
+	}
+
+	pack .ctop -fill both -expand 1
+	bindall <1> {selcanvline %W %x %y}
+	#bindall <B1-Motion> {selcanvline %W %x %y}
+	if {[tk windowingsystem] == "win32"} {
+		bind . <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D }
+		bind $ctext <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D ; break }
+	} else {
+		bindall <ButtonRelease-4> "allcanvs yview scroll -5 units"
+		bindall <ButtonRelease-5> "allcanvs yview scroll 5 units"
+		bind $ctext <Button> {
+			if {"%b" eq 6} {
+				$ctext xview scroll -5 units
+			} elseif {"%b" eq 7} {
+				$ctext xview scroll 5 units
+			}
+		}
+		if {[tk windowingsystem] eq "aqua"} {
+			bindall <MouseWheel> {
+				set delta [expr {- (%D)}]
+				allcanvs yview scroll $delta units
+			}
+			bindall <Shift-MouseWheel> {
+				set delta [expr {- (%D)}]
+				$canv xview scroll $delta units
+			}
+		}
+	}
+	bindall <$::BM> "canvscan mark %W %x %y"
+	bindall <B$::BM-Motion> "canvscan dragto %W %x %y"
+	bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
+	bind . <$M1B-Key-w> doquit
+	bindkey <Home> selfirstline
+	bindkey <End> sellastline
+	bind . <Key-Up> "selnextline -1"
+	bind . <Key-Down> "selnextline 1"
+	bind . <Shift-Key-Up> "dofind -1 0"
+	bind . <Shift-Key-Down> "dofind 1 0"
+	bindkey <Key-Right> "goforw"
+	bindkey <Key-Left> "goback"
+	bind . <Key-Prior> "selnextpage -1"
+	bind . <Key-Next> "selnextpage 1"
+	bind . <$M1B-Home> "allcanvs yview moveto 0.0"
+	bind . <$M1B-End> "allcanvs yview moveto 1.0"
+	bind . <$M1B-Key-Up> "allcanvs yview scroll -1 units"
+	bind . <$M1B-Key-Down> "allcanvs yview scroll 1 units"
+	bind . <$M1B-Key-Prior> "allcanvs yview scroll -1 pages"
+	bind . <$M1B-Key-Next> "allcanvs yview scroll 1 pages"
+	bindkey <Key-Delete> "$ctext yview scroll -1 pages"
+	bindkey <Key-BackSpace> "$ctext yview scroll -1 pages"
+	bindkey <Key-space> "$ctext yview scroll 1 pages"
+	bindkey p "selnextline -1"
+	bindkey n "selnextline 1"
+	bindkey z "goback"
+	bindkey x "goforw"
+	bindkey k "selnextline -1"
+	bindkey j "selnextline 1"
+	bindkey h "goback"
+	bindkey l "goforw"
+	bindkey b prevfile
+	bindkey d "$ctext yview scroll 18 units"
+	bindkey u "$ctext yview scroll -18 units"
+	bindkey g {$sha1entry delete 0 end; focus $sha1entry}
+	bindkey / {focus $fstring}
+	bindkey <Key-KP_Divide> {focus $fstring}
+	bindkey <Key-Return> {dofind 1 1}
+	bindkey ? {dofind -1 1}
+	bindkey f nextfile
+	bind . <F5> updatecommits
+	bindmodfunctionkey Shift 5 reloadcommits
+	bind . <F2> showrefs
+	bindmodfunctionkey Shift 4 {newview 0}
+	bind . <F4> edit_or_newview
+	bind . <$M1B-q> doquit
+	bind . <$M1B-f> {dofind 1 1}
+	bind . <$M1B-g> {dofind 1 0}
+	bind . <$M1B-r> dosearchback
+	bind . <$M1B-s> dosearch
+	bind . <$M1B-equal> {incrfont 1}
+	bind . <$M1B-plus> {incrfont 1}
+	bind . <$M1B-KP_Add> {incrfont 1}
+	bind . <$M1B-minus> {incrfont -1}
+	bind . <$M1B-KP_Subtract> {incrfont -1}
+	wm protocol . WM_DELETE_WINDOW doquit
+	bind . <Destroy> {stop_backends}
+	bind . <Button-1> "click %W"
+	bind $fstring <Key-Return> {dofind 1 1}
+	bind $sha1entry <Key-Return> {gotocommit; break}
+	bind $sha1entry <<PasteSelection>> clearsha1
+	bind $sha1entry <<Paste>> clearsha1
+	bind $cflist <1> {sel_flist %W %x %y; break}
+	bind $cflist <B1-Motion> {sel_flist %W %x %y; break}
+	bind $cflist <ButtonRelease-1> {treeclick %W %x %y}
+	global ctxbut
+	bind $cflist $ctxbut {pop_flist_menu %W %X %Y %x %y}
+	bind $ctext $ctxbut {pop_diff_menu %W %X %Y %x %y}
+	bind $ctext <Button-1> {focus %W}
+	bind $ctext <<Selection>> rehighlight_search_results
+	for {set i 1} {$i < 10} {incr i} {
+		bind . <$M1B-Key-$i> [list go_to_parent $i]
+	}
+
+	set maincursor [. cget -cursor]
+	set textcursor [$ctext cget -cursor]
+	set curtextcursor $textcursor
+
+	set rowctxmenu .rowctxmenu
+	makemenu $rowctxmenu {
+		{mc "Diff this -> selected" command {diffvssel 0}}
+		{mc "Diff selected -> this" command {diffvssel 1}}
+		{mc "Make patch" command mkpatch}
+		{mc "Create tag" command mktag}
+		{mc "Copy commit reference" command copyreference}
+		{mc "Write commit to file" command writecommit}
+		{mc "Create new branch" command mkbranch}
+		{mc "Cherry-pick this commit" command cherrypick}
+		{mc "Reset HEAD branch to here" command resethead}
+		{mc "Mark this commit" command markhere}
+		{mc "Return to mark" command gotomark}
+		{mc "Find descendant of this and mark" command find_common_desc}
+		{mc "Compare with marked commit" command compare_commits}
+		{mc "Diff this -> marked commit" command {diffvsmark 0}}
+		{mc "Diff marked commit -> this" command {diffvsmark 1}}
+		{mc "Revert this commit" command revert}
+	}
+	$rowctxmenu configure -tearoff 0
+
+	set fakerowmenu .fakerowmenu
+	makemenu $fakerowmenu {
+		{mc "Diff this -> selected" command {diffvssel 0}}
+		{mc "Diff selected -> this" command {diffvssel 1}}
+		{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
+
+	set headctxmenu .headctxmenu
+	makemenu $headctxmenu {
+		{mc "Check out this branch" command cobranch}
+		{mc "Rename this branch" command mvbranch}
+		{mc "Remove this branch" command rmbranch}
+		{mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
+	}
+	$headctxmenu configure -tearoff 0
+
+	global flist_menu
+	set flist_menu .flistctxmenu
+	makemenu $flist_menu {
+		{mc "Highlight this too" command {flist_hl 0}}
+		{mc "Highlight this only" command {flist_hl 1}}
+		{mc "External diff" command {external_diff}}
+		{mc "Blame parent commit" command {external_blame 1}}
+		{mc "Copy path" command {clipboard clear; clipboard append $flist_menu_file}}
+	}
+	$flist_menu configure -tearoff 0
+
+	global diff_menu
+	set diff_menu .diffctxmenu
+	makemenu $diff_menu {
+		{mc "Show origin of this line" command show_line_source}
+		{mc "Run git gui blame on this line" command {external_blame_diff}}
+	}
+	$diff_menu configure -tearoff 0
 }
 
 # Windows sends all mouse wheel events to the current focused window, not
 # the one where the mouse hovers, so bind those events here and redirect
 # to the correct window
 proc windows_mousewheel_redirector {W X Y D} {
-    global canv canv2 canv3
-    set w [winfo containing -displayof $W $X $Y]
-    if {$w ne ""} {
-	set u [expr {$D < 0 ? 5 : -5}]
-	if {$w == $canv || $w == $canv2 || $w == $canv3} {
-	    allcanvs yview scroll $u units
-	} else {
-	    catch {
-		$w yview scroll $u units
-	    }
+	global canv canv2 canv3
+	set w [winfo containing -displayof $W $X $Y]
+	if {$w ne ""} {
+		set u [expr {$D < 0 ? 5 : -5}]
+		if {$w == $canv || $w == $canv2 || $w == $canv3} {
+			allcanvs yview scroll $u units
+		} else {
+			catch {
+				$w yview scroll $u units
+			}
+		}
 	}
-    }
 }
 
 # Update row number label when selectedline changes
 proc selectedline_change {n1 n2 op} {
-    global selectedline rownumsel
+	global selectedline rownumsel
 
-    if {$selectedline eq {}} {
-	set rownumsel {}
-    } else {
-	set rownumsel [expr {$selectedline + 1}]
-    }
+	if {$selectedline eq {}} {
+		set rownumsel {}
+	} else {
+		set rownumsel [expr {$selectedline + 1}]
+	}
 }
 
 # mouse-2 makes all windows scan vertically, but only the one
 # the cursor is in scans horizontally
 proc canvscan {op w x y} {
-    global canv canv2 canv3
-    foreach c [list $canv $canv2 $canv3] {
-	if {$c == $w} {
-	    $c scan $op $x $y
-	} else {
-	    $c scan $op 0 $y
+	global canv canv2 canv3
+	foreach c [list $canv $canv2 $canv3] {
+		if {$c == $w} {
+			$c scan $op $x $y
+		} else {
+			$c scan $op 0 $y
+		}
 	}
-    }
 }
 
 proc scrollcanv {cscroll f0 f1} {
-    $cscroll set $f0 $f1
-    drawvisible
-    flushhighlights
+	$cscroll set $f0 $f1
+	drawvisible
+	flushhighlights
 }
 
 # when we make a key binding for the toplevel, make sure
 # it doesn't get triggered when that key is pressed in the
 # find string entry widget.
 proc bindkey {ev script} {
-    global entries
-    bind . $ev $script
-    set escript [bind Entry $ev]
-    if {$escript == {}} {
-	set escript [bind Entry <Key>]
-    }
-    foreach e $entries {
-	bind $e $ev "$escript; break"
-    }
+	global entries
+	bind . $ev $script
+	set escript [bind Entry $ev]
+	if {$escript == {}} {
+		set escript [bind Entry <Key>]
+	}
+	foreach e $entries {
+		bind $e $ev "$escript; break"
+	}
 }
 
 proc bindmodfunctionkey {mod n script} {
-    bind . <$mod-F$n> $script
-    catch { bind . <$mod-XF86_Switch_VT_$n> $script }
+	bind . <$mod-F$n> $script
+	catch { bind . <$mod-XF86_Switch_VT_$n> $script }
 }
 
 # set the focus back to the toplevel for any click outside
 # the entry widgets
 proc click {w} {
-    global ctext entries
-    foreach e [concat $entries $ctext] {
-	if {$w == $e} return
-    }
-    focus .
+	global ctext entries
+	foreach e [concat $entries $ctext] {
+		if {$w == $e} return
+	}
+	focus .
 }
 
 # Adjust the progress bar for a change in requested extent or canvas size
 proc adjustprogress {} {
-    global progresscanv progressitem progresscoords
-    global fprogitem fprogcoord lastprogupdate progupdatepending
-    global rprogitem rprogcoord use_ttk
+	global progresscanv progressitem progresscoords
+	global fprogitem fprogcoord lastprogupdate progupdatepending
+	global rprogitem rprogcoord use_ttk
 
-    if {$use_ttk} {
-	$progresscanv configure -value [expr {int($fprogcoord * 100)}]
-	return
-    }
+	if {$use_ttk} {
+		$progresscanv configure -value [expr {int($fprogcoord * 100)}]
+		return
+	}
 
-    set w [expr {[winfo width $progresscanv] - 4}]
-    set x0 [expr {$w * [lindex $progresscoords 0]}]
-    set x1 [expr {$w * [lindex $progresscoords 1]}]
-    set h [winfo height $progresscanv]
-    $progresscanv coords $progressitem $x0 0 $x1 $h
-    $progresscanv coords $fprogitem 0 0 [expr {$w * $fprogcoord}] $h
-    $progresscanv coords $rprogitem 0 0 [expr {$w * $rprogcoord}] $h
-    set now [clock clicks -milliseconds]
-    if {$now >= $lastprogupdate + 100} {
-	set progupdatepending 0
-	update
-    } elseif {!$progupdatepending} {
-	set progupdatepending 1
-	after [expr {$lastprogupdate + 100 - $now}] doprogupdate
-    }
+	set w [expr {[winfo width $progresscanv] - 4}]
+	set x0 [expr {$w * [lindex $progresscoords 0]}]
+	set x1 [expr {$w * [lindex $progresscoords 1]}]
+	set h [winfo height $progresscanv]
+	$progresscanv coords $progressitem $x0 0 $x1 $h
+	$progresscanv coords $fprogitem 0 0 [expr {$w * $fprogcoord}] $h
+	$progresscanv coords $rprogitem 0 0 [expr {$w * $rprogcoord}] $h
+	set now [clock clicks -milliseconds]
+	if {$now >= $lastprogupdate + 100} {
+		set progupdatepending 0
+		update
+	} elseif {!$progupdatepending} {
+		set progupdatepending 1
+		after [expr {$lastprogupdate + 100 - $now}] doprogupdate
+	}
 }
 
 proc doprogupdate {} {
-    global lastprogupdate progupdatepending
+	global lastprogupdate progupdatepending
 
-    if {$progupdatepending} {
-	set progupdatepending 0
-	set lastprogupdate [clock clicks -milliseconds]
-	update
-    }
+	if {$progupdatepending} {
+		set progupdatepending 0
+		set lastprogupdate [clock clicks -milliseconds]
+		update
+	}
 }
 
 proc config_check_tmp_exists {tries_left} {
-    global config_file_tmp
+	global config_file_tmp
 
-    if {[file exists $config_file_tmp]} {
-	incr tries_left -1
-	if {$tries_left > 0} {
-	    after 100 [list config_check_tmp_exists $tries_left]
-	} else {
-	    error_popup "There appears to be a stale $config_file_tmp\
+	if {[file exists $config_file_tmp]} {
+		incr tries_left -1
+		if {$tries_left > 0} {
+			after 100 [list config_check_tmp_exists $tries_left]
+		} else {
+			error_popup "There appears to be a stale $config_file_tmp\
  file, which will prevent gitk from saving its configuration on exit.\
  Please remove it if it is not being used by any existing gitk process."
+		}
 	}
-    }
 }
 
 proc config_init_trace {name} {
-    global config_variable_changed config_variable_original
+	global config_variable_changed config_variable_original
 
-    upvar #0 $name var
-    set config_variable_changed($name) 0
-    set config_variable_original($name) $var
+	upvar #0 $name var
+	set config_variable_changed($name) 0
+	set config_variable_original($name) $var
 }
 
 proc config_variable_change_cb {name name2 op} {
-    global config_variable_changed config_variable_original
+	global config_variable_changed config_variable_original
 
-    upvar #0 $name var
-    if {$op eq "write" &&
-	(![info exists config_variable_original($name)] ||
-	 $config_variable_original($name) ne $var)} {
-	set config_variable_changed($name) 1
-    }
+	upvar #0 $name var
+	if {$op eq "write" &&
+		(![info exists config_variable_original($name)] ||
+		 $config_variable_original($name) ne $var)} {
+		set config_variable_changed($name) 1
+	}
 }
 
 proc savestuff {w} {
-    global stuffsaved
-    global config_file config_file_tmp
-    global config_variables config_variable_changed
-    global viewchanged
+	global stuffsaved
+	global config_file config_file_tmp
+	global config_variables config_variable_changed
+	global viewchanged
 
-    upvar #0 viewname current_viewname
-    upvar #0 viewfiles current_viewfiles
-    upvar #0 viewargs current_viewargs
-    upvar #0 viewargscmd current_viewargscmd
-    upvar #0 viewperm current_viewperm
-    upvar #0 nextviewnum current_nextviewnum
-    upvar #0 use_ttk current_use_ttk
+	upvar #0 viewname current_viewname
+	upvar #0 viewfiles current_viewfiles
+	upvar #0 viewargs current_viewargs
+	upvar #0 viewargscmd current_viewargscmd
+	upvar #0 viewperm current_viewperm
+	upvar #0 nextviewnum current_nextviewnum
+	upvar #0 use_ttk current_use_ttk
 
-    if {$stuffsaved} return
-    if {![winfo viewable .]} return
-    set remove_tmp 0
-    if {[catch {
-	set try_count 0
-	while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
-	    if {[incr try_count] > 50} {
-		error "Unable to write config file: $config_file_tmp exists"
-	    }
-	    after 100
-	}
-	set remove_tmp 1
-	if {$::tcl_platform(platform) eq {windows}} {
-	    file attributes $config_file_tmp -hidden true
-	}
-	if {[file exists $config_file]} {
-	    source $config_file
-	}
-	foreach var_name $config_variables {
-	    upvar #0 $var_name var
-	    upvar 0 $var_name old_var
-	    if {!$config_variable_changed($var_name) && [info exists old_var]} {
-		puts $f [list set $var_name $old_var]
-	    } else {
-		puts $f [list set $var_name $var]
-	    }
-	}
-
-	puts $f "set geometry(main) [wm geometry .]"
-	puts $f "set geometry(state) [wm state .]"
-	puts $f "set geometry(topwidth) [winfo width .tf]"
-	puts $f "set geometry(topheight) [winfo height .tf]"
-	if {$current_use_ttk} {
-	    puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sashpos 0] 1\""
-	    puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
-	} else {
-	    puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sash coord 0]\""
-	    puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sash coord 1]\""
-	}
-	puts $f "set geometry(botwidth) [winfo width .bleft]"
-	puts $f "set geometry(botheight) [winfo height .bleft]"
-
-	array set view_save {}
-	array set views {}
-	if {![info exists permviews]} { set permviews {} }
-	foreach view $permviews {
-	    set view_save([lindex $view 0]) 1
-	    set views([lindex $view 0]) $view
-	}
-	puts -nonewline $f "set permviews {"
-	for {set v 1} {$v < $current_nextviewnum} {incr v} {
-	    if {$viewchanged($v)} {
-		if {$current_viewperm($v)} {
-		    set views($current_viewname($v)) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v)]
-		} else {
-		    set view_save($current_viewname($v)) 0
-		}
-	    }
-	}
-	# write old and updated view to their places and append remaining to the end
-	foreach view $permviews {
-	    set view_name [lindex $view 0]
-	    if {$view_save($view_name)} {
-		puts $f "{$views($view_name)}"
-	    }
-	    unset views($view_name)
-	}
-	foreach view_name [array names views] {
-	    puts $f "{$views($view_name)}"
-	}
-	puts $f "}"
-	close $f
-	file rename -force $config_file_tmp $config_file
+	if {$stuffsaved} return
+	if {![winfo viewable .]} return
 	set remove_tmp 0
-    } err]} {
-        puts "Error saving config: $err"
-    }
-    if {$remove_tmp} {
-	file delete -force $config_file_tmp
-    }
-    set stuffsaved 1
+	if {[catch {
+		set try_count 0
+		while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
+			if {[incr try_count] > 50} {
+				error "Unable to write config file: $config_file_tmp exists"
+			}
+			after 100
+		}
+		set remove_tmp 1
+		if {$::tcl_platform(platform) eq {windows}} {
+			file attributes $config_file_tmp -hidden true
+		}
+		if {[file exists $config_file]} {
+			source $config_file
+		}
+		foreach var_name $config_variables {
+			upvar #0 $var_name var
+			upvar 0 $var_name old_var
+			if {!$config_variable_changed($var_name) && [info exists old_var]} {
+				puts $f [list set $var_name $old_var]
+			} else {
+				puts $f [list set $var_name $var]
+			}
+		}
+
+		puts $f "set geometry(main) [wm geometry .]"
+		puts $f "set geometry(state) [wm state .]"
+		puts $f "set geometry(topwidth) [winfo width .tf]"
+		puts $f "set geometry(topheight) [winfo height .tf]"
+		if {$current_use_ttk} {
+			puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sashpos 0] 1\""
+			puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
+		} else {
+			puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sash coord 0]\""
+			puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sash coord 1]\""
+		}
+		puts $f "set geometry(botwidth) [winfo width .bleft]"
+		puts $f "set geometry(botheight) [winfo height .bleft]"
+
+		array set view_save {}
+		array set views {}
+		if {![info exists permviews]} { set permviews {} }
+		foreach view $permviews {
+			set view_save([lindex $view 0]) 1
+			set views([lindex $view 0]) $view
+		}
+		puts -nonewline $f "set permviews {"
+		for {set v 1} {$v < $current_nextviewnum} {incr v} {
+			if {$viewchanged($v)} {
+				if {$current_viewperm($v)} {
+					set views($current_viewname($v)) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v)]
+				} else {
+					set view_save($current_viewname($v)) 0
+				}
+			}
+		}
+		# write old and updated view to their places and append remaining to the end
+		foreach view $permviews {
+			set view_name [lindex $view 0]
+			if {$view_save($view_name)} {
+				puts $f "{$views($view_name)}"
+			}
+			unset views($view_name)
+		}
+		foreach view_name [array names views] {
+			puts $f "{$views($view_name)}"
+		}
+		puts $f "}"
+		close $f
+		file rename -force $config_file_tmp $config_file
+		set remove_tmp 0
+	} err]} {
+		puts "Error saving config: $err"
+	}
+	if {$remove_tmp} {
+		file delete -force $config_file_tmp
+	}
+	set stuffsaved 1
 }
 
 proc resizeclistpanes {win w} {
-    global oldwidth use_ttk
-    if {[info exists oldwidth($win)]} {
-	if {$use_ttk} {
-	    set s0 [$win sashpos 0]
-	    set s1 [$win sashpos 1]
-	} else {
-	    set s0 [$win sash coord 0]
-	    set s1 [$win sash coord 1]
-	}
-	if {$w < 60} {
-	    set sash0 [expr {int($w/2 - 2)}]
-	    set sash1 [expr {int($w*5/6 - 2)}]
-	} else {
-	    set factor [expr {1.0 * $w / $oldwidth($win)}]
-	    set sash0 [expr {int($factor * [lindex $s0 0])}]
-	    set sash1 [expr {int($factor * [lindex $s1 0])}]
-	    if {$sash0 < 30} {
-		set sash0 30
-	    }
-	    if {$sash1 < $sash0 + 20} {
-		set sash1 [expr {$sash0 + 20}]
-	    }
-	    if {$sash1 > $w - 10} {
-		set sash1 [expr {$w - 10}]
-		if {$sash0 > $sash1 - 20} {
-		    set sash0 [expr {$sash1 - 20}]
+	global oldwidth use_ttk
+	if {[info exists oldwidth($win)]} {
+		if {$use_ttk} {
+			set s0 [$win sashpos 0]
+			set s1 [$win sashpos 1]
+		} else {
+			set s0 [$win sash coord 0]
+			set s1 [$win sash coord 1]
+		}
+		if {$w < 60} {
+			set sash0 [expr {int($w/2 - 2)}]
+			set sash1 [expr {int($w*5/6 - 2)}]
+		} else {
+			set factor [expr {1.0 * $w / $oldwidth($win)}]
+			set sash0 [expr {int($factor * [lindex $s0 0])}]
+			set sash1 [expr {int($factor * [lindex $s1 0])}]
+			if {$sash0 < 30} {
+				set sash0 30
+			}
+			if {$sash1 < $sash0 + 20} {
+				set sash1 [expr {$sash0 + 20}]
+			}
+			if {$sash1 > $w - 10} {
+				set sash1 [expr {$w - 10}]
+				if {$sash0 > $sash1 - 20} {
+					set sash0 [expr {$sash1 - 20}]
+				}
+			}
+		}
+		if {$use_ttk} {
+			$win sashpos 0 $sash0
+			$win sashpos 1 $sash1
+		} else {
+			$win sash place 0 $sash0 [lindex $s0 1]
+			$win sash place 1 $sash1 [lindex $s1 1]
 		}
-	    }
 	}
-	if {$use_ttk} {
-	    $win sashpos 0 $sash0
-	    $win sashpos 1 $sash1
-	} else {
-	    $win sash place 0 $sash0 [lindex $s0 1]
-	    $win sash place 1 $sash1 [lindex $s1 1]
-	}
-    }
-    set oldwidth($win) $w
+	set oldwidth($win) $w
 }
 
 proc resizecdetpanes {win w} {
-    global oldwidth use_ttk
-    if {[info exists oldwidth($win)]} {
-	if {$use_ttk} {
-	    set s0 [$win sashpos 0]
-	} else {
-	    set s0 [$win sash coord 0]
+	global oldwidth use_ttk
+	if {[info exists oldwidth($win)]} {
+		if {$use_ttk} {
+			set s0 [$win sashpos 0]
+		} else {
+			set s0 [$win sash coord 0]
+		}
+		if {$w < 60} {
+			set sash0 [expr {int($w*3/4 - 2)}]
+		} else {
+			set factor [expr {1.0 * $w / $oldwidth($win)}]
+			set sash0 [expr {int($factor * [lindex $s0 0])}]
+			if {$sash0 < 45} {
+				set sash0 45
+			}
+			if {$sash0 > $w - 15} {
+				set sash0 [expr {$w - 15}]
+			}
+		}
+		if {$use_ttk} {
+			$win sashpos 0 $sash0
+		} else {
+			$win sash place 0 $sash0 [lindex $s0 1]
+		}
 	}
-	if {$w < 60} {
-	    set sash0 [expr {int($w*3/4 - 2)}]
-	} else {
-	    set factor [expr {1.0 * $w / $oldwidth($win)}]
-	    set sash0 [expr {int($factor * [lindex $s0 0])}]
-	    if {$sash0 < 45} {
-		set sash0 45
-	    }
-	    if {$sash0 > $w - 15} {
-		set sash0 [expr {$w - 15}]
-	    }
-	}
-	if {$use_ttk} {
-	    $win sashpos 0 $sash0
-	} else {
-	    $win sash place 0 $sash0 [lindex $s0 1]
-	}
-    }
-    set oldwidth($win) $w
+	set oldwidth($win) $w
 }
 
 proc allcanvs args {
-    global canv canv2 canv3
-    eval $canv $args
-    eval $canv2 $args
-    eval $canv3 $args
+	global canv canv2 canv3
+	eval $canv $args
+	eval $canv2 $args
+	eval $canv3 $args
 }
 
 proc bindall {event action} {
-    global canv canv2 canv3
-    bind $canv $event $action
-    bind $canv2 $event $action
-    bind $canv3 $event $action
+	global canv canv2 canv3
+	bind $canv $event $action
+	bind $canv2 $event $action
+	bind $canv3 $event $action
 }
 
 proc about {} {
-    global bgcolor NS
-    set w .about
-    if {[winfo exists $w]} {
-	raise $w
-	return
-    }
-    ttk_toplevel $w
-    wm title $w [mc "About gitk"]
-    make_transient $w .
-    message $w.m -text [mc "
+	global bgcolor NS
+	set w .about
+	if {[winfo exists $w]} {
+		raise $w
+		return
+	}
+	ttk_toplevel $w
+	wm title $w [mc "About gitk"]
+	make_transient $w .
+	message $w.m -text [mc "
 Gitk - a commit viewer for git
 
 Copyright \u00a9 2005-2016 Paul Mackerras
 
 Use and redistribute under the terms of the GNU General Public License"] \
-	    -justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
-    pack $w.m -side top -fill x -padx 2 -pady 2
-    ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
-    pack $w.ok -side bottom
-    bind $w <Visibility> "focus $w.ok"
-    bind $w <Key-Escape> "destroy $w"
-    bind $w <Key-Return> "destroy $w"
-    tk::PlaceWindow $w widget .
+			-justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
+	pack $w.m -side top -fill x -padx 2 -pady 2
+	${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
+	pack $w.ok -side bottom
+	bind $w <Visibility> "focus $w.ok"
+	bind $w <Key-Escape> "destroy $w"
+	bind $w <Key-Return> "destroy $w"
+	tk::PlaceWindow $w widget .
 }
 
 proc keys {} {
-    global bgcolor NS
-    set w .keys
-    if {[winfo exists $w]} {
-	raise $w
-	return
-    }
-    if {[tk windowingsystem] eq {aqua}} {
-	set M1T Cmd
-    } else {
-	set M1T Ctrl
-    }
-    ttk_toplevel $w
-    wm title $w [mc "Gitk key bindings"]
-    make_transient $w .
-    message $w.m -text "
+	global bgcolor NS
+	set w .keys
+	if {[winfo exists $w]} {
+		raise $w
+		return
+	}
+	if {[tk windowingsystem] eq {aqua}} {
+		set M1T Cmd
+	} else {
+		set M1T Ctrl
+	}
+	ttk_toplevel $w
+	wm title $w [mc "Gitk key bindings"]
+	make_transient $w .
+	message $w.m -text "
 [mc "Gitk key bindings:"]
 
-[mc "<%s-Q>		Quit" $M1T]
-[mc "<%s-W>		Close window" $M1T]
-[mc "<Home>		Move to first commit"]
-[mc "<End>		Move to last commit"]
-[mc "<Up>, p, k	Move up one commit"]
-[mc "<Down>, n, j	Move down one commit"]
-[mc "<Left>, z, h	Go back in history list"]
-[mc "<Right>, x, l	Go forward in history list"]
-[mc "<%s-n>	Go to n-th parent of current commit in history list" $M1T]
+[mc "<%s-Q>				Quit" $M1T]
+[mc "<%s-W>				Close window" $M1T]
+[mc "<Home>				Move to first commit"]
+[mc "<End>				Move to last commit"]
+[mc "<Up>, p, k Move up one commit"]
+[mc "<Down>, n, j		Move down one commit"]
+[mc "<Left>, z, h		Go back in history list"]
+[mc "<Right>, x, l		Go forward in history list"]
+[mc "<%s-n>		Go to n-th parent of current commit in history list" $M1T]
 [mc "<PageUp>	Move up one page in commit list"]
-[mc "<PageDown>	Move down one page in commit list"]
+[mc "<PageDown> Move down one page in commit list"]
 [mc "<%s-Home>	Scroll to top of commit list" $M1T]
 [mc "<%s-End>	Scroll to bottom of commit list" $M1T]
 [mc "<%s-Up>	Scroll commit list up one line" $M1T]
 [mc "<%s-Down>	Scroll commit list down one line" $M1T]
-[mc "<%s-PageUp>	Scroll commit list up one page" $M1T]
-[mc "<%s-PageDown>	Scroll commit list down one page" $M1T]
-[mc "<Shift-Up>	Find backwards (upwards, later commits)"]
-[mc "<Shift-Down>	Find forwards (downwards, earlier commits)"]
-[mc "<Delete>, b	Scroll diff view up one page"]
-[mc "<Backspace>	Scroll diff view up one page"]
-[mc "<Space>		Scroll diff view down one page"]
-[mc "u		Scroll diff view up 18 lines"]
-[mc "d		Scroll diff view down 18 lines"]
-[mc "<%s-F>		Find" $M1T]
-[mc "<%s-G>		Move to next find hit" $M1T]
+[mc "<%s-PageUp>		Scroll commit list up one page" $M1T]
+[mc "<%s-PageDown>		Scroll commit list down one page" $M1T]
+[mc "<Shift-Up> Find backwards (upwards, later commits)"]
+[mc "<Shift-Down>		Find forwards (downwards, earlier commits)"]
+[mc "<Delete>, b		Scroll diff view up one page"]
+[mc "<Backspace>		Scroll diff view up one page"]
+[mc "<Space>			Scroll diff view down one page"]
+[mc "u			Scroll diff view up 18 lines"]
+[mc "d			Scroll diff view down 18 lines"]
+[mc "<%s-F>				Find" $M1T]
+[mc "<%s-G>				Move to next find hit" $M1T]
 [mc "<Return>	Move to next find hit"]
-[mc "g		Go to commit"]
-[mc "/		Focus the search box"]
-[mc "?		Move to previous find hit"]
-[mc "f		Scroll diff view to next file"]
-[mc "<%s-S>		Search for next hit in diff view" $M1T]
-[mc "<%s-R>		Search for previous hit in diff view" $M1T]
+[mc "g			Go to commit"]
+[mc "/			Focus the search box"]
+[mc "?			Move to previous find hit"]
+[mc "f			Scroll diff view to next file"]
+[mc "<%s-S>				Search for next hit in diff view" $M1T]
+[mc "<%s-R>				Search for previous hit in diff view" $M1T]
 [mc "<%s-KP+>	Increase font size" $M1T]
 [mc "<%s-plus>	Increase font size" $M1T]
 [mc "<%s-KP->	Decrease font size" $M1T]
-[mc "<%s-minus>	Decrease font size" $M1T]
-[mc "<F5>		Update"]
+[mc "<%s-minus> Decrease font size" $M1T]
+[mc "<F5>				Update"]
 " \
-	    -justify left -bg $bgcolor -border 2 -relief groove
-    pack $w.m -side top -fill both -padx 2 -pady 2
-    ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
-    bind $w <Key-Escape> [list destroy $w]
-    pack $w.ok -side bottom
-    bind $w <Visibility> "focus $w.ok"
-    bind $w <Key-Escape> "destroy $w"
-    bind $w <Key-Return> "destroy $w"
+			-justify left -bg $bgcolor -border 2 -relief groove
+	pack $w.m -side top -fill both -padx 2 -pady 2
+	${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
+	bind $w <Key-Escape> [list destroy $w]
+	pack $w.ok -side bottom
+	bind $w <Visibility> "focus $w.ok"
+	bind $w <Key-Escape> "destroy $w"
+	bind $w <Key-Return> "destroy $w"
 }
 
 # Procedures for manipulating the file list window at the
 # bottom right of the overall window.
 
 proc treeview {w l openlevs} {
-    global treecontents treediropen treeheight treeparent treeindex
+	global treecontents treediropen treeheight treeparent treeindex
 
-    set ix 0
-    set treeindex() 0
-    set lev 0
-    set prefix {}
-    set prefixend -1
-    set prefendstack {}
-    set htstack {}
-    set ht 0
-    set treecontents() {}
-    $w conf -state normal
-    foreach f $l {
-	while {[string range $f 0 $prefixend] ne $prefix} {
-	    if {$lev <= $openlevs} {
-		$w mark set e:$treeindex($prefix) "end -1c"
-		$w mark gravity e:$treeindex($prefix) left
-	    }
-	    set treeheight($prefix) $ht
-	    incr ht [lindex $htstack end]
-	    set htstack [lreplace $htstack end end]
-	    set prefixend [lindex $prefendstack end]
-	    set prefendstack [lreplace $prefendstack end end]
-	    set prefix [string range $prefix 0 $prefixend]
-	    incr lev -1
+	set ix 0
+	set treeindex() 0
+	set lev 0
+	set prefix {}
+	set prefixend -1
+	set prefendstack {}
+	set htstack {}
+	set ht 0
+	set treecontents() {}
+	$w conf -state normal
+	foreach f $l {
+		while {[string range $f 0 $prefixend] ne $prefix} {
+			if {$lev <= $openlevs} {
+				$w mark set e:$treeindex($prefix) "end -1c"
+				$w mark gravity e:$treeindex($prefix) left
+			}
+			set treeheight($prefix) $ht
+			incr ht [lindex $htstack end]
+			set htstack [lreplace $htstack end end]
+			set prefixend [lindex $prefendstack end]
+			set prefendstack [lreplace $prefendstack end end]
+			set prefix [string range $prefix 0 $prefixend]
+			incr lev -1
+		}
+		set tail [string range $f [expr {$prefixend+1}] end]
+		while {[set slash [string first "/" $tail]] >= 0} {
+			lappend htstack $ht
+			set ht 0
+			lappend prefendstack $prefixend
+			incr prefixend [expr {$slash + 1}]
+			set d [string range $tail 0 $slash]
+			lappend treecontents($prefix) $d
+			set oldprefix $prefix
+			append prefix $d
+			set treecontents($prefix) {}
+			set treeindex($prefix) [incr ix]
+			set treeparent($prefix) $oldprefix
+			set tail [string range $tail [expr {$slash+1}] end]
+			if {$lev <= $openlevs} {
+				set ht 1
+				set treediropen($prefix) [expr {$lev < $openlevs}]
+				set bm [expr {$lev == $openlevs? "tri-rt": "tri-dn"}]
+				$w mark set d:$ix "end -1c"
+				$w mark gravity d:$ix left
+				set str "\n"
+				for {set i 0} {$i < $lev} {incr i} {append str "\t"}
+				$w insert end $str
+				$w image create end -align center -image $bm -padx 1 \
+					-name a:$ix
+				$w insert end $d [highlight_tag $prefix]
+				$w mark set s:$ix "end -1c"
+				$w mark gravity s:$ix left
+			}
+			incr lev
+		}
+		if {$tail ne {}} {
+			if {$lev <= $openlevs} {
+				incr ht
+				set str "\n"
+				for {set i 0} {$i < $lev} {incr i} {append str "\t"}
+				$w insert end $str
+				$w insert end $tail [highlight_tag $f]
+			}
+			lappend treecontents($prefix) $tail
+		}
 	}
-	set tail [string range $f [expr {$prefixend+1}] end]
-	while {[set slash [string first "/" $tail]] >= 0} {
-	    lappend htstack $ht
-	    set ht 0
-	    lappend prefendstack $prefixend
-	    incr prefixend [expr {$slash + 1}]
-	    set d [string range $tail 0 $slash]
-	    lappend treecontents($prefix) $d
-	    set oldprefix $prefix
-	    append prefix $d
-	    set treecontents($prefix) {}
-	    set treeindex($prefix) [incr ix]
-	    set treeparent($prefix) $oldprefix
-	    set tail [string range $tail [expr {$slash+1}] end]
-	    if {$lev <= $openlevs} {
-		set ht 1
-		set treediropen($prefix) [expr {$lev < $openlevs}]
-		set bm [expr {$lev == $openlevs? "tri-rt": "tri-dn"}]
-		$w mark set d:$ix "end -1c"
-		$w mark gravity d:$ix left
-		set str "\n"
-		for {set i 0} {$i < $lev} {incr i} {append str "\t"}
-		$w insert end $str
-		$w image create end -align center -image $bm -padx 1 \
-		    -name a:$ix
-		$w insert end $d [highlight_tag $prefix]
-		$w mark set s:$ix "end -1c"
-		$w mark gravity s:$ix left
-	    }
-	    incr lev
+	while {$htstack ne {}} {
+		set treeheight($prefix) $ht
+		incr ht [lindex $htstack end]
+		set htstack [lreplace $htstack end end]
+		set prefixend [lindex $prefendstack end]
+		set prefendstack [lreplace $prefendstack end end]
+		set prefix [string range $prefix 0 $prefixend]
 	}
-	if {$tail ne {}} {
-	    if {$lev <= $openlevs} {
-		incr ht
-		set str "\n"
-		for {set i 0} {$i < $lev} {incr i} {append str "\t"}
-		$w insert end $str
-		$w insert end $tail [highlight_tag $f]
-	    }
-	    lappend treecontents($prefix) $tail
-	}
-    }
-    while {$htstack ne {}} {
-	set treeheight($prefix) $ht
-	incr ht [lindex $htstack end]
-	set htstack [lreplace $htstack end end]
-	set prefixend [lindex $prefendstack end]
-	set prefendstack [lreplace $prefendstack end end]
-	set prefix [string range $prefix 0 $prefixend]
-    }
-    $w conf -state disabled
+	$w conf -state disabled
 }
 
 proc linetoelt {l} {
-    global treeheight treecontents
+	global treeheight treecontents
 
-    set y 2
-    set prefix {}
-    while {1} {
-	foreach e $treecontents($prefix) {
-	    if {$y == $l} {
-		return "$prefix$e"
-	    }
-	    set n 1
-	    if {[string index $e end] eq "/"} {
-		set n $treeheight($prefix$e)
-		if {$y + $n > $l} {
-		    append prefix $e
-		    incr y
-		    break
+	set y 2
+	set prefix {}
+	while {1} {
+		foreach e $treecontents($prefix) {
+			if {$y == $l} {
+				return "$prefix$e"
+			}
+			set n 1
+			if {[string index $e end] eq "/"} {
+				set n $treeheight($prefix$e)
+				if {$y + $n > $l} {
+					append prefix $e
+					incr y
+					break
+				}
+			}
+			incr y $n
 		}
-	    }
-	    incr y $n
 	}
-    }
 }
 
 proc highlight_tree {y prefix} {
-    global treeheight treecontents cflist
+	global treeheight treecontents cflist
 
-    foreach e $treecontents($prefix) {
-	set path $prefix$e
-	if {[highlight_tag $path] ne {}} {
-	    $cflist tag add bold $y.0 "$y.0 lineend"
+	foreach e $treecontents($prefix) {
+		set path $prefix$e
+		if {[highlight_tag $path] ne {}} {
+			$cflist tag add bold $y.0 "$y.0 lineend"
+		}
+		incr y
+		if {[string index $e end] eq "/" && $treeheight($path) > 1} {
+			set y [highlight_tree $y $path]
+		}
 	}
-	incr y
-	if {[string index $e end] eq "/" && $treeheight($path) > 1} {
-	    set y [highlight_tree $y $path]
-	}
-    }
-    return $y
+	return $y
 }
 
 proc treeclosedir {w dir} {
-    global treediropen treeheight treeparent treeindex
+	global treediropen treeheight treeparent treeindex
 
-    set ix $treeindex($dir)
-    $w conf -state normal
-    $w delete s:$ix e:$ix
-    set treediropen($dir) 0
-    $w image configure a:$ix -image tri-rt
-    $w conf -state disabled
-    set n [expr {1 - $treeheight($dir)}]
-    while {$dir ne {}} {
-	incr treeheight($dir) $n
-	set dir $treeparent($dir)
-    }
+	set ix $treeindex($dir)
+	$w conf -state normal
+	$w delete s:$ix e:$ix
+	set treediropen($dir) 0
+	$w image configure a:$ix -image tri-rt
+	$w conf -state disabled
+	set n [expr {1 - $treeheight($dir)}]
+	while {$dir ne {}} {
+		incr treeheight($dir) $n
+		set dir $treeparent($dir)
+	}
 }
 
 proc treeopendir {w dir} {
-    global treediropen treeheight treeparent treecontents treeindex
+	global treediropen treeheight treeparent treecontents treeindex
 
-    set ix $treeindex($dir)
-    $w conf -state normal
-    $w image configure a:$ix -image tri-dn
-    $w mark set e:$ix s:$ix
-    $w mark gravity e:$ix right
-    set lev 0
-    set str "\n"
-    set n [llength $treecontents($dir)]
-    for {set x $dir} {$x ne {}} {set x $treeparent($x)} {
-	incr lev
-	append str "\t"
-	incr treeheight($x) $n
-    }
-    foreach e $treecontents($dir) {
-	set de $dir$e
-	if {[string index $e end] eq "/"} {
-	    set iy $treeindex($de)
-	    $w mark set d:$iy e:$ix
-	    $w mark gravity d:$iy left
-	    $w insert e:$ix $str
-	    set treediropen($de) 0
-	    $w image create e:$ix -align center -image tri-rt -padx 1 \
-		-name a:$iy
-	    $w insert e:$ix $e [highlight_tag $de]
-	    $w mark set s:$iy e:$ix
-	    $w mark gravity s:$iy left
-	    set treeheight($de) 1
-	} else {
-	    $w insert e:$ix $str
-	    $w insert e:$ix $e [highlight_tag $de]
+	set ix $treeindex($dir)
+	$w conf -state normal
+	$w image configure a:$ix -image tri-dn
+	$w mark set e:$ix s:$ix
+	$w mark gravity e:$ix right
+	set lev 0
+	set str "\n"
+	set n [llength $treecontents($dir)]
+	for {set x $dir} {$x ne {}} {set x $treeparent($x)} {
+		incr lev
+		append str "\t"
+		incr treeheight($x) $n
 	}
-    }
-    $w mark gravity e:$ix right
-    $w conf -state disabled
-    set treediropen($dir) 1
-    set top [lindex [split [$w index @0,0] .] 0]
-    set ht [$w cget -height]
-    set l [lindex [split [$w index s:$ix] .] 0]
-    if {$l < $top} {
-	$w yview $l.0
-    } elseif {$l + $n + 1 > $top + $ht} {
-	set top [expr {$l + $n + 2 - $ht}]
+	foreach e $treecontents($dir) {
+		set de $dir$e
+		if {[string index $e end] eq "/"} {
+			set iy $treeindex($de)
+			$w mark set d:$iy e:$ix
+			$w mark gravity d:$iy left
+			$w insert e:$ix $str
+			set treediropen($de) 0
+			$w image create e:$ix -align center -image tri-rt -padx 1 \
+				-name a:$iy
+			$w insert e:$ix $e [highlight_tag $de]
+			$w mark set s:$iy e:$ix
+			$w mark gravity s:$iy left
+			set treeheight($de) 1
+		} else {
+			$w insert e:$ix $str
+			$w insert e:$ix $e [highlight_tag $de]
+		}
+	}
+	$w mark gravity e:$ix right
+	$w conf -state disabled
+	set treediropen($dir) 1
+	set top [lindex [split [$w index @0,0] .] 0]
+	set ht [$w cget -height]
+	set l [lindex [split [$w index s:$ix] .] 0]
 	if {$l < $top} {
-	    set top $l
+		$w yview $l.0
+	} elseif {$l + $n + 1 > $top + $ht} {
+		set top [expr {$l + $n + 2 - $ht}]
+		if {$l < $top} {
+			set top $l
+		}
+		$w yview $top.0
 	}
-	$w yview $top.0
-    }
 }
 
 proc treeclick {w x y} {
-    global treediropen cmitmode ctext cflist cflist_top
+	global treediropen cmitmode ctext cflist cflist_top
 
-    if {$cmitmode ne "tree"} return
-    if {![info exists cflist_top]} return
-    set l [lindex [split [$w index "@$x,$y"] "."] 0]
-    $cflist tag remove highlight $cflist_top.0 "$cflist_top.0 lineend"
-    $cflist tag add highlight $l.0 "$l.0 lineend"
-    set cflist_top $l
-    if {$l == 1} {
-	$ctext yview 1.0
-	return
-    }
-    set e [linetoelt $l]
-    if {[string index $e end] ne "/"} {
-	showfile $e
-    } elseif {$treediropen($e)} {
-	treeclosedir $w $e
-    } else {
-	treeopendir $w $e
-    }
+	if {$cmitmode ne "tree"} return
+	if {![info exists cflist_top]} return
+	set l [lindex [split [$w index "@$x,$y"] "."] 0]
+	$cflist tag remove highlight $cflist_top.0 "$cflist_top.0 lineend"
+	$cflist tag add highlight $l.0 "$l.0 lineend"
+	set cflist_top $l
+	if {$l == 1} {
+		$ctext yview 1.0
+		return
+	}
+	set e [linetoelt $l]
+	if {[string index $e end] ne "/"} {
+		showfile $e
+	} elseif {$treediropen($e)} {
+		treeclosedir $w $e
+	} else {
+		treeopendir $w $e
+	}
 }
 
 proc setfilelist {id} {
-    global treefilelist cflist jump_to_here
+	global treefilelist cflist jump_to_here
 
-    treeview $cflist $treefilelist($id) 0
-    if {$jump_to_here ne {}} {
-	set f [lindex $jump_to_here 0]
-	if {[lsearch -exact $treefilelist($id) $f] >= 0} {
-	    showfile $f
+	treeview $cflist $treefilelist($id) 0
+	if {$jump_to_here ne {}} {
+		set f [lindex $jump_to_here 0]
+		if {[lsearch -exact $treefilelist($id) $f] >= 0} {
+			showfile $f
+		}
 	}
-    }
 }
 
 image create bitmap tri-rt -background black -foreground blue -data {
-    #define tri-rt_width 13
-    #define tri-rt_height 13
-    static unsigned char tri-rt_bits[] = {
-       0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00,
-       0xf0, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00,
-       0x00, 0x00};
+	#define tri-rt_width 13
+	#define tri-rt_height 13
+	static unsigned char tri-rt_bits[] = {
+	   0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00,
+	   0xf0, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00,
+	   0x00, 0x00};
 } -maskdata {
-    #define tri-rt-mask_width 13
-    #define tri-rt-mask_height 13
-    static unsigned char tri-rt-mask_bits[] = {
-       0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01,
-       0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00,
-       0x08, 0x00};
+	#define tri-rt-mask_width 13
+	#define tri-rt-mask_height 13
+	static unsigned char tri-rt-mask_bits[] = {
+	   0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01,
+	   0xf8, 0x03, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18, 0x00,
+	   0x08, 0x00};
 }
 image create bitmap tri-dn -background black -foreground blue -data {
-    #define tri-dn_width 13
-    #define tri-dn_height 13
-    static unsigned char tri-dn_bits[] = {
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf8, 0x03,
-       0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00};
+	#define tri-dn_width 13
+	#define tri-dn_height 13
+	static unsigned char tri-dn_bits[] = {
+	   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf8, 0x03,
+	   0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	   0x00, 0x00};
 } -maskdata {
-    #define tri-dn-mask_width 13
-    #define tri-dn-mask_height 13
-    static unsigned char tri-dn-mask_bits[] = {
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xfe, 0x0f, 0xfc, 0x07,
-       0xf8, 0x03, 0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00};
+	#define tri-dn-mask_width 13
+	#define tri-dn-mask_height 13
+	static unsigned char tri-dn-mask_bits[] = {
+	   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xfe, 0x0f, 0xfc, 0x07,
+	   0xf8, 0x03, 0xf0, 0x01, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+	   0x00, 0x00};
 }
 
 image create bitmap reficon-T -background black -foreground yellow -data {
-    #define tagicon_width 13
-    #define tagicon_height 9
-    static unsigned char tagicon_bits[] = {
-       0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x07,
-       0xfc, 0x07, 0xf8, 0x07, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00};
+	#define tagicon_width 13
+	#define tagicon_height 9
+	static unsigned char tagicon_bits[] = {
+	   0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x07,
+	   0xfc, 0x07, 0xf8, 0x07, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00};
 } -maskdata {
-    #define tagicon-mask_width 13
-    #define tagicon-mask_height 9
-    static unsigned char tagicon-mask_bits[] = {
-       0x00, 0x00, 0xf0, 0x0f, 0xf8, 0x0f, 0xfc, 0x0f,
-       0xfe, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf0, 0x0f, 0x00, 0x00};
+	#define tagicon-mask_width 13
+	#define tagicon-mask_height 9
+	static unsigned char tagicon-mask_bits[] = {
+	   0x00, 0x00, 0xf0, 0x0f, 0xf8, 0x0f, 0xfc, 0x0f,
+	   0xfe, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf0, 0x0f, 0x00, 0x00};
 }
 set rectdata {
-    #define headicon_width 13
-    #define headicon_height 9
-    static unsigned char headicon_bits[] = {
-       0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xf8, 0x07,
-       0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00};
+	#define headicon_width 13
+	#define headicon_height 9
+	static unsigned char headicon_bits[] = {
+	   0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xf8, 0x07,
+	   0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00};
 }
 set rectmask {
-    #define headicon-mask_width 13
-    #define headicon-mask_height 9
-    static unsigned char headicon-mask_bits[] = {
-       0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
-       0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
+	#define headicon-mask_width 13
+	#define headicon-mask_height 9
+	static unsigned char headicon-mask_bits[] = {
+	   0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
+	   0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
 }
 image create bitmap reficon-H -background black -foreground "#00ff00" \
-    -data $rectdata -maskdata $rectmask
+	-data $rectdata -maskdata $rectmask
 image create bitmap reficon-R -background black -foreground "#ffddaa" \
-    -data $rectdata -maskdata $rectmask
+	-data $rectdata -maskdata $rectmask
 image create bitmap reficon-o -background black -foreground "#ddddff" \
-    -data $rectdata -maskdata $rectmask
+	-data $rectdata -maskdata $rectmask
 
 proc init_flist {first} {
-    global cflist cflist_top difffilestart
+	global cflist cflist_top difffilestart
 
-    $cflist conf -state normal
-    $cflist delete 0.0 end
-    if {$first ne {}} {
-	$cflist insert end $first
-	set cflist_top 1
-	$cflist tag add highlight 1.0 "1.0 lineend"
-    } else {
-	unset -nocomplain cflist_top
-    }
-    $cflist conf -state disabled
-    set difffilestart {}
+	$cflist conf -state normal
+	$cflist delete 0.0 end
+	if {$first ne {}} {
+		$cflist insert end $first
+		set cflist_top 1
+		$cflist tag add highlight 1.0 "1.0 lineend"
+	} else {
+		unset -nocomplain cflist_top
+	}
+	$cflist conf -state disabled
+	set difffilestart {}
 }
 
 proc highlight_tag {f} {
-    global highlight_paths
+	global highlight_paths
 
-    foreach p $highlight_paths {
-	if {[string match $p $f]} {
-	    return "bold"
+	foreach p $highlight_paths {
+		if {[string match $p $f]} {
+			return "bold"
+		}
 	}
-    }
-    return {}
+	return {}
 }
 
 proc highlight_filelist {} {
-    global cmitmode cflist
+	global cmitmode cflist
 
-    $cflist conf -state normal
-    if {$cmitmode ne "tree"} {
-	set end [lindex [split [$cflist index end] .] 0]
-	for {set l 2} {$l < $end} {incr l} {
-	    set line [$cflist get $l.0 "$l.0 lineend"]
-	    if {[highlight_tag $line] ne {}} {
-		$cflist tag add bold $l.0 "$l.0 lineend"
-	    }
+	$cflist conf -state normal
+	if {$cmitmode ne "tree"} {
+		set end [lindex [split [$cflist index end] .] 0]
+		for {set l 2} {$l < $end} {incr l} {
+			set line [$cflist get $l.0 "$l.0 lineend"]
+			if {[highlight_tag $line] ne {}} {
+				$cflist tag add bold $l.0 "$l.0 lineend"
+			}
+		}
+	} else {
+		highlight_tree 2 {}
 	}
-    } else {
-	highlight_tree 2 {}
-    }
-    $cflist conf -state disabled
+	$cflist conf -state disabled
 }
 
 proc unhighlight_filelist {} {
-    global cflist
+	global cflist
 
-    $cflist conf -state normal
-    $cflist tag remove bold 1.0 end
-    $cflist conf -state disabled
+	$cflist conf -state normal
+	$cflist tag remove bold 1.0 end
+	$cflist conf -state disabled
 }
 
 proc add_flist {fl} {
-    global cflist
+	global cflist
 
-    $cflist conf -state normal
-    foreach f $fl {
-	$cflist insert end "\n"
-	$cflist insert end $f [highlight_tag $f]
-    }
-    $cflist conf -state disabled
+	$cflist conf -state normal
+	foreach f $fl {
+		$cflist insert end "\n"
+		$cflist insert end $f [highlight_tag $f]
+	}
+	$cflist conf -state disabled
 }
 
 proc sel_flist {w x y} {
-    global ctext difffilestart cflist cflist_top cmitmode
+	global ctext difffilestart cflist cflist_top cmitmode
 
-    if {$cmitmode eq "tree"} return
-    if {![info exists cflist_top]} return
-    set l [lindex [split [$w index "@$x,$y"] "."] 0]
-    $cflist tag remove highlight $cflist_top.0 "$cflist_top.0 lineend"
-    $cflist tag add highlight $l.0 "$l.0 lineend"
-    set cflist_top $l
-    if {$l == 1} {
-	$ctext yview 1.0
-    } else {
-	catch {$ctext yview [lindex $difffilestart [expr {$l - 2}]]}
-    }
-    suppress_highlighting_file_for_current_scrollpos
+	if {$cmitmode eq "tree"} return
+	if {![info exists cflist_top]} return
+	set l [lindex [split [$w index "@$x,$y"] "."] 0]
+	$cflist tag remove highlight $cflist_top.0 "$cflist_top.0 lineend"
+	$cflist tag add highlight $l.0 "$l.0 lineend"
+	set cflist_top $l
+	if {$l == 1} {
+		$ctext yview 1.0
+	} else {
+		catch {$ctext yview [lindex $difffilestart [expr {$l - 2}]]}
+	}
+	suppress_highlighting_file_for_current_scrollpos
 }
 
 proc pop_flist_menu {w X Y x y} {
-    global ctext cflist cmitmode flist_menu flist_menu_file
-    global treediffs diffids
+	glo
```

## Denton Liu, 2020-09-10 08:36

Subject: Re: [PATCH 0/2] gitk: fix mix of tabs and spaces in indentation
Message-ID: <20200910083615.GA1407716@generichostname>
URL: https://gitlist.dev/e/20200910083615.GA1407716%40generichostname
In-Reply-To: <cover.1599726439.git.liu.denton@gmail.com>

```
On Thu, Sep 10, 2020 at 01:27:40AM -0700, Denton Liu wrote:
> Denton Liu (2):
>   gitk: replace spaces with tabs

Unfortunately, the patch is too big to be sent by email. It can be
retrieved from https://github.com/Denton-L/git.git
submitted/gitk-whitespace~.

If you don't want to pull it, the commit without the body is included
below. It can be fully reproduced by running the vim commands listed on
the gitk file.

-- >8 --

From: Denton Liu <liu.denton@gmail.com>
Date: Wed, 9 Sep 2020 12:10:51 -0700
Subject: [PATCH 1/2] gitk: replace spaces with tabs
To: Git Mailing List <git@vger.kernel.org>,
    Paul Mackerras <paulus@ozlabs.org>

The source code is a mix of tabs and spaces. The indentation style
currently is four spaces per indent level but uses tabs every other
level (at eight spaces). Fix this inconsistent spacing and tabbing by
just using a tab-indent for everything.

This was done mechanically using the following vim commands:

	:set tabstop=8
	:set expandtab
	:retab
	:set tabstop=4
	:set noexpandtab
	:retab!
	:set tabstop=8

A future commit will manually clean up the code style errors introduced
by this patch.

This patch should be empty with `--ignore-all-space`.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 gitk | 20408 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 10204 insertions(+), 10204 deletions(-)

```

## Paul Mackerras, 2020-09-10 09:17

Subject: Re: [PATCH 0/2] gitk: fix mix of tabs and spaces in indentation
Message-ID: <20200910091719.GB2537966@thinks.paulus.ozlabs.org>
URL: https://gitlist.dev/e/20200910091719.GB2537966%40thinks.paulus.ozlabs.org
In-Reply-To: <cover.1599726439.git.liu.denton@gmail.com>

```
On Thu, Sep 10, 2020 at 01:27:40AM -0700, Denton Liu wrote:
> The source code of gitk has some funny indentation. It uses four spaces
> per level indent but uses tabs every other level (eight spaces).
> Reindent gitk to just use tabs instead.

I don't think I want to do this.  I would accept changing all the
indentation to use just spaces - at least that's going to look OK
regardless of the tab width setting.

Paul.

```

## Denton Liu, 2020-09-11 04:36

Subject: [PATCH v2 0/2] gitk: fix mix of tabs and spaces in indentation
Message-ID: <cover.1599798976.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/cover.1599798976.git.liu.denton%40gmail.com
In-Reply-To: <cover.1599726439.git.liu.denton@gmail.com>

```
The source code of gitk has some funny indentation. It uses four spaces
per level indent but uses tabs every other level (eight spaces).
Reindent gitk to just use spaces instead.

This series should be empty with `--ignore-all-space`.

Changes since v1:

* Instead of using tabs, just use spaces

Denton Liu (2):
  gitk: replace tabs with spaces
  gitk: replace commented tab with space

 gitk | 10570 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 5285 insertions(+), 5285 deletions(-)

-- 
2.28.0.618.gf4bc123cb7


```

## Denton Liu, 2020-09-11 04:36

Subject: [PATCH v2 2/2] gitk: replace commented tab with space
Message-ID: <85d669828bf9455ac101f8177a7f46a94d30a114.1599798976.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/85d669828bf9455ac101f8177a7f46a94d30a114.1599798976.git.liu.denton%40gmail.com
In-Reply-To: <cover.1599798976.git.liu.denton@gmail.com>

```
In the previous commit, the tab indents were mechanically replaced with
spaces. However, one tab, in particular, was missed. This tab was not
considered an indentation because it's hidden behind a comment. Manually
replace this tab with spaces too.

The only tabs that remain in this file are in the "Gitk key bindings"
table where they are used for visual alignment in a user-facing table so
leave those alone.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 gitk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gitk b/gitk
index 1dae9861ac..0380cd8976 100755
--- a/gitk
+++ b/gitk
@@ -4451,7 +4451,7 @@ proc addviewmenu {n} {
     .bar.view add radiobutton -label $viewname($n) \
         -command [list showview $n] -variable selectedview -value $n
     #$viewhlmenu add radiobutton -label $viewname($n) \
-    #	-command [list addvhighlight $n] -variable selectedhlview
+    #    -command [list addvhighlight $n] -variable selectedhlview
 }
 
 proc showview {n} {
-- 
2.28.0.618.gf4bc123cb7


```

## Denton Liu, 2020-09-11 04:36

Subject: [PATCH v2 1/2] gitk: replace tabs with spaces
Message-ID: <ecdede5cf50bdb966f53bcf5171c80b5f8959d4b.1599798976.git.liu.denton@gmail.com>
URL: https://gitlist.dev/e/ecdede5cf50bdb966f53bcf5171c80b5f8959d4b.1599798976.git.liu.denton%40gmail.com
In-Reply-To: <cover.1599798976.git.liu.denton@gmail.com>

```
The source code is a mix of tabs and spaces. The indentation style
currently is four spaces per indent level but uses tabs every other
level (at eight spaces). Fix this inconsistent spacing and tabbing by
just using a space-indent for everything.

This was done mechanically by running:

	$ expand -i gitk >gitk.new
	$ mv gitk.new gitk

This patch should be empty with `--ignore-all-space`.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 gitk | 10568 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 5284 insertions(+), 5284 deletions(-)

diff --git a/gitk b/gitk
index da84e22dd4..1dae9861ac 100755
--- a/gitk
+++ b/gitk
@@ -11,14 +11,14 @@ package require Tk
 
 proc hasworktree {} {
     return [expr {[exec git rev-parse --is-bare-repository] == "false" &&
-		  [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]
+        set n [string range $n 0 end-5]
     }
     return [file tail $n]
 }
@@ -26,7 +26,7 @@ proc reponame {} {
 proc gitworktree {} {
     variable _gitworktree
     if {[info exists _gitworktree]} {
-	return $_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]}]} {
@@ -34,10 +34,10 @@ proc gitworktree {} {
         # 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]]
-	    }
+            catch {set _gitworktree [exec git config --get core.worktree]}
+            if {$_gitworktree eq ""} {
+                set _gitworktree [file normalize ./[exec git rev-parse --show-cdup]]
+            }
         }
     }
     return $_gitworktree
@@ -54,7 +54,7 @@ proc run args {
     set script $args
     if {[info exists isonrunq($script)]} return
     if {$runq eq {} && ![info exists currunq]} {
-	after idle dorunq
+        after idle dorunq
     }
     lappend runq [list {} $script]
     set isonrunq($script) 1
@@ -69,7 +69,7 @@ proc filereadable {fd script} {
 
     fileevent $fd readable {}
     if {$runq eq {} && ![info exists currunq]} {
-	after idle dorunq
+        after idle dorunq
     }
     lappend runq [list $fd $script]
 }
@@ -78,11 +78,11 @@ proc nukefile {fd} {
     global runq
 
     for {set i 0} {$i < [llength $runq]} {} {
-	if {[lindex $runq $i 0] eq $fd} {
-	    set runq [lreplace $runq $i $i]
-	} else {
-	    incr i
-	}
+        if {[lindex $runq $i 0] eq $fd} {
+            set runq [lreplace $runq $i $i]
+        } else {
+            incr i
+        }
     }
 }
 
@@ -92,30 +92,30 @@ proc dorunq {} {
     set tstart [clock clicks -milliseconds]
     set t0 $tstart
     while {[llength $runq] > 0} {
-	set fd [lindex $runq 0 0]
-	set script [lindex $runq 0 1]
-	set currunq [lindex $runq 0]
-	set runq [lrange $runq 1 end]
-	set repeat [eval $script]
-	unset currunq
-	set t1 [clock clicks -milliseconds]
-	set t [expr {$t1 - $t0}]
-	if {$repeat ne {} && $repeat} {
-	    if {$fd eq {} || $repeat == 2} {
-		# script returns 1 if it wants to be readded
-		# file readers return 2 if they could do more straight away
-		lappend runq [list $fd $script]
-	    } else {
-		fileevent $fd readable [list filereadable $fd $script]
-	    }
-	} elseif {$fd eq {}} {
-	    unset isonrunq($script)
-	}
-	set t0 $t1
-	if {$t1 - $tstart >= 80} break
+        set fd [lindex $runq 0 0]
+        set script [lindex $runq 0 1]
+        set currunq [lindex $runq 0]
+        set runq [lrange $runq 1 end]
+        set repeat [eval $script]
+        unset currunq
+        set t1 [clock clicks -milliseconds]
+        set t [expr {$t1 - $t0}]
+        if {$repeat ne {} && $repeat} {
+            if {$fd eq {} || $repeat == 2} {
+                # script returns 1 if it wants to be readded
+                # file readers return 2 if they could do more straight away
+                lappend runq [list $fd $script]
+            } else {
+                fileevent $fd readable [list filereadable $fd $script]
+            }
+        } elseif {$fd eq {}} {
+            unset isonrunq($script)
+        }
+        set t0 $t1
+        if {$t1 - $tstart >= 80} break
     }
     if {$runq ne {}} {
-	after idle dorunq
+        after idle dorunq
     }
 }
 
@@ -135,20 +135,20 @@ proc unmerged_files {files} {
     set mlist {}
     set nr_unmerged 0
     if {[catch {
-	set fd [open "| git ls-files -u" r]
+        set fd [open "| git ls-files -u" r]
     } err]} {
-	show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
-	exit 1
+        show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
+        exit 1
     }
     while {[gets $fd line] >= 0} {
-	set i [string first "\t" $line]
-	if {$i < 0} continue
-	set fname [string range $line [expr {$i+1}] end]
-	if {[lsearch -exact $mlist $fname] >= 0} continue
-	incr nr_unmerged
-	if {$files eq {} || [path_filter $files $fname]} {
-	    lappend mlist $fname
-	}
+        set i [string first "\t" $line]
+        if {$i < 0} continue
+        set fname [string range $line [expr {$i+1}] end]
+        if {[lsearch -exact $mlist $fname] >= 0} continue
+        incr nr_unmerged
+        if {$files eq {} || [path_filter $files $fname]} {
+            lappend mlist $fname
+        }
     }
     catch {close $fd}
     return $mlist
@@ -171,115 +171,115 @@ proc parseviewargs {n arglist} {
     set filtered 0
     set i -1
     foreach arg $arglist {
-	incr i
-	if {$nextisval} {
-	    lappend glflags $arg
-	    set nextisval 0
-	    continue
-	}
-	switch -glob -- $arg {
-	    "-d" -
-	    "--date-order" {
-		set vdatemode($n) 1
-		# remove from origargs in case we hit an unknown option
-		set origargs [lreplace $origargs $i $i]
-		incr i -1
-	    }
-	    "-[puabwcrRBMC]" -
-	    "--no-renames" - "--full-index" - "--binary" - "--abbrev=*" -
-	    "--find-copies-harder" - "-l*" - "--ext-diff" - "--no-ext-diff" -
-	    "--src-prefix=*" - "--dst-prefix=*" - "--no-prefix" -
-	    "-O*" - "--text" - "--full-diff" - "--ignore-space-at-eol" -
-	    "--ignore-space-change" - "-U*" - "--unified=*" {
-		# These request or affect diff output, which we don't want.
-		# Some could be used to set our defaults for diff display.
-		lappend diffargs $arg
-	    }
-	    "--raw" - "--patch-with-raw" - "--patch-with-stat" -
-	    "--name-only" - "--name-status" - "--color" -
-	    "--log-size" - "--pretty=*" - "--decorate" - "--abbrev-commit" -
-	    "--cc" - "-z" - "--header" - "--parents" - "--boundary" -
-	    "--no-color" - "-g" - "--walk-reflogs" - "--no-walk" -
-	    "--timestamp" - "relative-date" - "--date=*" - "--stdin" -
-	    "--objects" - "--objects-edge" - "--reverse" {
-		# These cause our parsing of git log's output to fail, or else
-		# they're options we want to set ourselves, so ignore them.
-	    }
-	    "--color-words*" - "--word-diff=color" {
-		# These trigger a word diff in the console interface,
-		# so help the user by enabling our own support
-		if {[package vcompare $git_version "1.7.2"] >= 0} {
-		    set worddiff [mc "Color words"]
-		}
-	    }
-	    "--word-diff*" {
-		if {[package vcompare $git_version "1.7.2"] >= 0} {
-		    set worddiff [mc "Markup words"]
-		}
-	    }
-	    "--stat=*" - "--numstat" - "--shortstat" - "--summary" -
-	    "--check" - "--exit-code" - "--quiet" - "--topo-order" -
-	    "--full-history" - "--dense" - "--sparse" -
-	    "--follow" - "--left-right" - "--encoding=*" {
-		# These are harmless, and some are even useful
-		lappend glflags $arg
-	    }
-	    "--diff-filter=*" - "--no-merges" - "--unpacked" -
-	    "--max-count=*" - "--skip=*" - "--since=*" - "--after=*" -
-	    "--until=*" - "--before=*" - "--max-age=*" - "--min-age=*" -
-	    "--author=*" - "--committer=*" - "--grep=*" - "-[iE]" -
-	    "--remove-empty" - "--first-parent" - "--cherry-pick" -
-	    "-S*" - "-G*" - "--pickaxe-all" - "--pickaxe-regex" -
-	    "--simplify-by-decoration" {
-		# These mean that we get a subset of the commits
-		set filtered 1
-		lappend glflags $arg
-	    }
-	    "-L*" {
-		# Line-log with 'stuck' argument (unstuck form is
-		# not supported)
-		set filtered 1
-		set vinlinediff($n) 1
-		set allknown 0
-		lappend glflags $arg
-	    }
-	    "-n" {
-		# This appears to be the only one that has a value as a
-		# separate word following it
-		set filtered 1
-		set nextisval 1
-		lappend glflags $arg
-	    }
-	    "--not" - "--all" {
-		lappend revargs $arg
-	    }
-	    "--merge" {
-		set vmergeonly($n) 1
-		# git rev-parse doesn't understand --merge
-		lappend revargs --gitk-symmetric-diff-marker MERGE_HEAD...HEAD
-	    }
-	    "--no-replace-objects" {
-		set env(GIT_NO_REPLACE_OBJECTS) "1"
-	    }
-	    "-*" {
-		# Other flag arguments including -<n>
-		if {[string is digit -strict [string range $arg 1 end]]} {
-		    set filtered 1
-		} else {
-		    # a flag argument that we don't recognize;
-		    # that means we can't optimize
-		    set allknown 0
-		}
-		lappend glflags $arg
-	    }
-	    default {
-		# Non-flag arguments specify commits or ranges of commits
-		if {[string match "*...*" $arg]} {
-		    lappend revargs --gitk-symmetric-diff-marker
-		}
-		lappend revargs $arg
-	    }
-	}
+        incr i
+        if {$nextisval} {
+            lappend glflags $arg
+            set nextisval 0
+            continue
+        }
+        switch -glob -- $arg {
+            "-d" -
+            "--date-order" {
+                set vdatemode($n) 1
+                # remove from origargs in case we hit an unknown option
+                set origargs [lreplace $origargs $i $i]
+                incr i -1
+            }
+            "-[puabwcrRBMC]" -
+            "--no-renames" - "--full-index" - "--binary" - "--abbrev=*" -
+            "--find-copies-harder" - "-l*" - "--ext-diff" - "--no-ext-diff" -
+            "--src-prefix=*" - "--dst-prefix=*" - "--no-prefix" -
+            "-O*" - "--text" - "--full-diff" - "--ignore-space-at-eol" -
+            "--ignore-space-change" - "-U*" - "--unified=*" {
+                # These request or affect diff output, which we don't want.
+                # Some could be used to set our defaults for diff display.
+                lappend diffargs $arg
+            }
+            "--raw" - "--patch-with-raw" - "--patch-with-stat" -
+            "--name-only" - "--name-status" - "--color" -
+            "--log-size" - "--pretty=*" - "--decorate" - "--abbrev-commit" -
+            "--cc" - "-z" - "--header" - "--parents" - "--boundary" -
+            "--no-color" - "-g" - "--walk-reflogs" - "--no-walk" -
+            "--timestamp" - "relative-date" - "--date=*" - "--stdin" -
+            "--objects" - "--objects-edge" - "--reverse" {
+                # These cause our parsing of git log's output to fail, or else
+                # they're options we want to set ourselves, so ignore them.
+            }
+            "--color-words*" - "--word-diff=color" {
+                # These trigger a word diff in the console interface,
+                # so help the user by enabling our own support
+                if {[package vcompare $git_version "1.7.2"] >= 0} {
+                    set worddiff [mc "Color words"]
+                }
+            }
+            "--word-diff*" {
+                if {[package vcompare $git_version "1.7.2"] >= 0} {
+                    set worddiff [mc "Markup words"]
+                }
+            }
+            "--stat=*" - "--numstat" - "--shortstat" - "--summary" -
+            "--check" - "--exit-code" - "--quiet" - "--topo-order" -
+            "--full-history" - "--dense" - "--sparse" -
+            "--follow" - "--left-right" - "--encoding=*" {
+                # These are harmless, and some are even useful
+                lappend glflags $arg
+            }
+            "--diff-filter=*" - "--no-merges" - "--unpacked" -
+            "--max-count=*" - "--skip=*" - "--since=*" - "--after=*" -
+            "--until=*" - "--before=*" - "--max-age=*" - "--min-age=*" -
+            "--author=*" - "--committer=*" - "--grep=*" - "-[iE]" -
+            "--remove-empty" - "--first-parent" - "--cherry-pick" -
+            "-S*" - "-G*" - "--pickaxe-all" - "--pickaxe-regex" -
+            "--simplify-by-decoration" {
+                # These mean that we get a subset of the commits
+                set filtered 1
+                lappend glflags $arg
+            }
+            "-L*" {
+                # Line-log with 'stuck' argument (unstuck form is
+                # not supported)
+                set filtered 1
+                set vinlinediff($n) 1
+                set allknown 0
+                lappend glflags $arg
+            }
+            "-n" {
+                # This appears to be the only one that has a value as a
+                # separate word following it
+                set filtered 1
+                set nextisval 1
+                lappend glflags $arg
+            }
+            "--not" - "--all" {
+                lappend revargs $arg
+            }
+            "--merge" {
+                set vmergeonly($n) 1
+                # git rev-parse doesn't understand --merge
+                lappend revargs --gitk-symmetric-diff-marker MERGE_HEAD...HEAD
+            }
+            "--no-replace-objects" {
+                set env(GIT_NO_REPLACE_OBJECTS) "1"
+            }
+            "-*" {
+                # Other flag arguments including -<n>
+                if {[string is digit -strict [string range $arg 1 end]]} {
+                    set filtered 1
+                } else {
+                    # a flag argument that we don't recognize;
+                    # that means we can't optimize
+                    set allknown 0
+                }
+                lappend glflags $arg
+            }
+            default {
+                # Non-flag arguments specify commits or ranges of commits
+                if {[string match "*...*" $arg]} {
+                    lappend revargs --gitk-symmetric-diff-marker
+                }
+                lappend revargs $arg
+            }
+        }
     }
     set vdflags($n) $diffargs
     set vflags($n) $glflags
@@ -293,61 +293,61 @@ proc parseviewrevs {view revs} {
     global vposids vnegids
 
     if {$revs eq {}} {
-	set revs HEAD
+        set revs HEAD
     } elseif {[lsearch -exact $revs --all] >= 0} {
-	lappend revs HEAD
+        lappend revs HEAD
     }
     if {[catch {set ids [eval exec git rev-parse $revs]} err]} {
-	# we get stdout followed by stderr in $err
-	# for an unknown rev, git rev-parse echoes it and then errors out
-	set errlines [split $err "\n"]
-	set badrev {}
-	for {set l 0} {$l < [llength $errlines]} {incr l} {
-	    set line [lindex $errlines $l]
-	    if {!([string length $line] == 40 && [string is xdigit $line])} {
-		if {[string match "fatal:*" $line]} {
-		    if {[string match "fatal: ambiguous argument*" $line]
-			&& $badrev ne {}} {
-			if {[llength $badrev] == 1} {
-			    set err "unknown revision $badrev"
-			} else {
-			    set err "unknown revisions: [join $badrev ", "]"
-			}
-		    } else {
-			set err [join [lrange $errlines $l end] "\n"]
-		    }
-		    break
-		}
-		lappend badrev $line
-	    }
-	}
-	error_popup "[mc "Error parsing revisions:"] $err"
-	return {}
+        # we get stdout followed by stderr in $err
+        # for an unknown rev, git rev-parse echoes it and then errors out
+        set errlines [split $err "\n"]
+        set badrev {}
+        for {set l 0} {$l < [llength $errlines]} {incr l} {
+            set line [lindex $errlines $l]
+            if {!([string length $line] == 40 && [string is xdigit $line])} {
+                if {[string match "fatal:*" $line]} {
+                    if {[string match "fatal: ambiguous argument*" $line]
+                        && $badrev ne {}} {
+                        if {[llength $badrev] == 1} {
+                            set err "unknown revision $badrev"
+                        } else {
+                            set err "unknown revisions: [join $badrev ", "]"
+                        }
+                    } else {
+                        set err [join [lrange $errlines $l end] "\n"]
+                    }
+                    break
+                }
+                lappend badrev $line
+            }
+        }
+        error_popup "[mc "Error parsing revisions:"] $err"
+        return {}
     }
     set ret {}
     set pos {}
     set neg {}
     set sdm 0
     foreach id [split $ids "\n"] {
-	if {$id eq "--gitk-symmetric-diff-marker"} {
-	    set sdm 4
-	} elseif {[string match "^*" $id]} {
-	    if {$sdm != 1} {
-		lappend ret $id
-		if {$sdm == 3} {
-		    set sdm 0
-		}
-	    }
-	    lappend neg [string range $id 1 end]
-	} else {
-	    if {$sdm != 2} {
-		lappend ret $id
-	    } else {
-		lset ret end $id...[lindex $ret end]
-	    }
-	    lappend pos $id
-	}
-	incr sdm -1
+        if {$id eq "--gitk-symmetric-diff-marker"} {
+            set sdm 4
+        } elseif {[string match "^*" $id]} {
+            if {$sdm != 1} {
+                lappend ret $id
+                if {$sdm == 3} {
+                    set sdm 0
+                }
+            }
+            lappend neg [string range $id 1 end]
+        } else {
+            if {$sdm != 2} {
+                lappend ret $id
+            } else {
+                lset ret end $id...[lindex $ret end]
+            }
+            lappend pos $id
+        }
+        incr sdm -1
     }
     set vposids($view) $pos
     set vnegids($view) $neg
@@ -374,63 +374,63 @@ proc start_rev_list {view} {
 
     set args $viewargs($view)
     if {$viewargscmd($view) ne {}} {
-	if {[catch {
-	    set str [exec sh -c $viewargscmd($view)]
-	} err]} {
-	    error_popup "[mc "Error executing --argscmd command:"] $err"
-	    return 0
-	}
-	set args [concat $args [split $str "\n"]]
+        if {[catch {
+            set str [exec sh -c $viewargscmd($view)]
+        } err]} {
+            error_popup "[mc "Error executing --argscmd command:"] $err"
+            return 0
+        }
+        set args [concat $args [split $str "\n"]]
     }
     set vcanopt($view) [parseviewargs $view $args]
 
     set files $viewfiles($view)
     if {$vmergeonly($view)} {
-	set files [unmerged_files $files]
-	if {$files eq {}} {
-	    global nr_unmerged
-	    if {$nr_unmerged == 0} {
-		error_popup [mc "No files selected: --merge specified but\
-			     no files are unmerged."]
-	    } else {
-		error_popup [mc "No files selected: --merge specified but\
-			     no unmerged files are within file limit."]
-	    }
-	    return 0
-	}
+        set files [unmerged_files $files]
+        if {$files eq {}} {
+            global nr_unmerged
+            if {$nr_unmerged == 0} {
+                error_popup [mc "No files selected: --merge specified but\
+                             no files are unmerged."]
+            } else {
+                error_popup [mc "No files selected: --merge specified but\
+                             no unmerged files are within file limit."]
+            }
+            return 0
+        }
     }
     set vfilelimit($view) $files
 
     if {$vcanopt($view)} {
-	set revs [parseviewrevs $view $vrevs($view)]
-	if {$revs eq {}} {
-	    return 0
-	}
-	set args [concat $vflags($view) $revs]
+        set revs [parseviewrevs $view $vrevs($view)]
+        if {$revs eq {}} {
+            return 0
+        }
+        set args [concat $vflags($view) $revs]
     } else {
-	set args $vorigargs($view)
+        set args $vorigargs($view)
     }
 
     if {[catch {
-	set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-			--parents --boundary $args "--" $files] r]
+        set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
+                        --parents --boundary $args "--" $files] r]
     } err]} {
-	error_popup "[mc "Error executing git log:"] $err"
-	return 0
+        error_popup "[mc "Error executing git log:"] $err"
+        return 0
     }
     set i [reg_instance $fd]
     set viewinstances($view) [list $i]
     set viewmainheadid($view) $mainheadid
     set viewmainheadid_orig($view) $mainheadid
     if {$files ne {} && $mainheadid ne {}} {
-	get_viewmainhead $view
+        get_viewmainhead $view
     }
     if {$showlocalchanges && $viewmainheadid($view) ne {}} {
-	interestedin $viewmainheadid($view) dodiffindex
+        interestedin $viewmainheadid($view) dodiffindex
     }
     fconfigure $fd -blocking 0 -translation lf -eofchar {}
     if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
+        fconfigure $fd -encoding $tclencoding
     }
     filerun $fd [list getcommitlines $fd $i $view 0]
     nowbusy $view [mc "Reading"]
@@ -444,13 +444,13 @@ proc stop_instance {inst} {
 
     set fd $commfd($inst)
     catch {
-	set pid [pid $fd]
+        set pid [pid $fd]
 
-	if {$::tcl_platform(platform) eq {windows}} {
-	    exec taskkill /pid $pid
-	} else {
-	    exec kill $pid
-	}
+        if {$::tcl_platform(platform) eq {windows}} {
+            exec taskkill /pid $pid
+        } else {
+            exec kill $pid
+        }
     }
     catch {close $fd}
     nukefile $fd
@@ -462,7 +462,7 @@ proc stop_backends {} {
     global commfd
 
     foreach inst [array names commfd] {
-	stop_instance $inst
+        stop_instance $inst
     }
 }
 
@@ -470,7 +470,7 @@ proc stop_rev_list {view} {
     global viewinstances
 
     foreach inst $viewinstances($view) {
-	stop_instance $inst
+        stop_instance $inst
     }
     set viewinstances($view) {}
 }
@@ -479,11 +479,11 @@ proc reset_pending_select {selid} {
     global pending_select mainheadid selectheadid
 
     if {$selid ne {}} {
-	set pending_select $selid
+        set pending_select $selid
     } elseif {$selectheadid ne {}} {
-	set pending_select $selectheadid
+        set pending_select $selectheadid
     } else {
-	set pending_select $mainheadid
+        set pending_select $mainheadid
     }
 }
 
@@ -492,11 +492,11 @@ proc getcommits {selid} {
 
     initlayout
     if {[start_rev_list $curview]} {
-	reset_pending_select $selid
-	show_status [mc "Reading commits..."]
-	set need_redisplay 1
+        reset_pending_select $selid
+        show_status [mc "Reading commits..."]
+        set need_redisplay 1
     } else {
-	show_status [mc "No commits selected"]
+        show_status [mc "No commits selected"]
     }
 }
 
@@ -513,67 +513,67 @@ proc updatecommits {} {
     rereadrefs
     set view $curview
     if {$mainheadid ne $viewmainheadid_orig($view)} {
-	if {$showlocalchanges} {
-	    dohidelocalchanges
-	}
-	set viewmainheadid($view) $mainheadid
-	set viewmainheadid_orig($view) $mainheadid
-	if {$vfilelimit($view) ne {}} {
-	    get_viewmainhead $view
-	}
+        if {$showlocalchanges} {
+            dohidelocalchanges
+        }
+        set viewmainheadid($view) $mainheadid
+        set viewmainheadid_orig($view) $mainheadid
+        if {$vfilelimit($view) ne {}} {
+            get_viewmainhead $view
+        }
     }
     if {$showlocalchanges} {
-	doshowlocalchanges
+        doshowlocalchanges
     }
     if {$vcanopt($view)} {
-	set oldpos $vposids($view)
-	set oldneg $vnegids($view)
-	set revs [parseviewrevs $view $vrevs($view)]
-	if {$revs eq {}} {
-	    return
-	}
-	# note: getting the delta when negative refs change is hard,
-	# and could require multiple git log invocations, so in that
-	# case we ask git log for all the commits (not just the delta)
-	if {$oldneg eq $vnegids($view)} {
-	    set newrevs {}
-	    set npos 0
-	    # take out positive refs that we asked for before or
-	    # that we have already seen
-	    foreach rev $revs {
-		if {[string length $rev] == 40} {
-		    if {[lsearch -exact $oldpos $rev] < 0
-			&& ![info exists varcid($view,$rev)]} {
-			lappend newrevs $rev
-			incr npos
-		    }
-		} else {
-		    lappend $newrevs $rev
-		}
-	    }
-	    if {$npos == 0} return
-	    set revs $newrevs
-	    set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]]
-	}
-	set args [concat $vflags($view) $revs --not $oldpos]
+        set oldpos $vposids($view)
+        set oldneg $vnegids($view)
+        set revs [parseviewrevs $view $vrevs($view)]
+        if {$revs eq {}} {
+            return
+        }
+        # note: getting the delta when negative refs change is hard,
+        # and could require multiple git log invocations, so in that
+        # case we ask git log for all the commits (not just the delta)
+        if {$oldneg eq $vnegids($view)} {
+            set newrevs {}
+            set npos 0
+            # take out positive refs that we asked for before or
+            # that we have already seen
+            foreach rev $revs {
+                if {[string length $rev] == 40} {
+                    if {[lsearch -exact $oldpos $rev] < 0
+                        && ![info exists varcid($view,$rev)]} {
+                        lappend newrevs $rev
+                        incr npos
+                    }
+                } else {
+                    lappend $newrevs $rev
+                }
+            }
+            if {$npos == 0} return
+            set revs $newrevs
+            set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]]
+        }
+        set args [concat $vflags($view) $revs --not $oldpos]
     } else {
-	set args $vorigargs($view)
+        set args $vorigargs($view)
     }
     if {[catch {
-	set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
-			--parents --boundary $args "--" $vfilelimit($view)] r]
+        set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
+                        --parents --boundary $args "--" $vfilelimit($view)] r]
     } err]} {
-	error_popup "[mc "Error executing git log:"] $err"
-	return
+        error_popup "[mc "Error executing git log:"] $err"
+        return
     }
     if {$viewactive($view) == 0} {
-	set startmsecs [clock clicks -milliseconds]
+        set startmsecs [clock clicks -milliseconds]
     }
     set i [reg_instance $fd]
     lappend viewinstances($view) $i
     fconfigure $fd -blocking 0 -translation lf -eofchar {}
     if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
+        fconfigure $fd -encoding $tclencoding
     }
     filerun $fd [list getcommitlines $fd $i $view 1]
     incr viewactive($view)
@@ -581,7 +581,7 @@ proc updatecommits {} {
     reset_pending_select {}
     nowbusy $view [mc "Reading"]
     if {$showneartags} {
-	getallcommits
+        getallcommits
     }
 }
 
@@ -592,11 +592,11 @@ proc reloadcommits {} {
 
     set selid {}
     if {$selectedline ne {}} {
-	set selid $currentid
+        set selid $currentid
     }
 
     if {!$viewcomplete($curview)} {
-	stop_rev_list $curview
+        stop_rev_list $curview
     }
     resetvarcs $curview
     set selectedline {}
@@ -606,7 +606,7 @@ proc reloadcommits {} {
     readrefs
     changedrefs
     if {$showneartags} {
-	getallcommits
+        getallcommits
     }
     clear_display
     unset -nocomplain commitinfo
@@ -622,11 +622,11 @@ proc reloadcommits {} {
 # sorts as a string in numerical order
 proc strrep {n} {
     if {$n < 16} {
-	return [format "%x" $n]
+        return [format "%x" $n]
     } elseif {$n < 256} {
-	return [format "x%.2x" $n]
+        return [format "x%.2x" $n]
     } elseif {$n < 65536} {
-	return [format "y%.4x" $n]
+        return [format "y%.4x" $n]
     }
     return [format "z%.8x" $n]
 }
@@ -657,22 +657,22 @@ proc resetvarcs {view} {
     global vshortids
 
     foreach vid [array names varcid $view,*] {
-	unset varcid($vid)
-	unset children($vid)
-	unset parents($vid)
+        unset varcid($vid)
+        unset children($vid)
+        unset parents($vid)
     }
     foreach vid [array names vshortids $view,*] {
-	unset vshortids($vid)
+        unset vshortids($vid)
     }
     # some commits might have children but haven't been seen yet
     foreach vid [array names children $view,*] {
-	unset children($vid)
+        unset children($vid)
     }
     foreach va [array names varccommits $view,*] {
-	unset varccommits($va)
+        unset varccommits($va)
     }
     foreach vd [array names vseedcount $view,*] {
-	unset vseedcount($vd)
+        unset vseedcount($vd)
     }
     unset -nocomplain ordertok
 }
@@ -684,8 +684,8 @@ proc seeds {v} {
     set ret {}
     set a [lindex $vdownptr($v) 0]
     while {$a != 0} {
-	lappend ret [lindex $varcstart($v) $a]
-	set a [lindex $vleftptr($v) $a]
+        lappend ret [lindex $varcstart($v) $a]
+        set a [lindex $vleftptr($v) $a]
     }
     return $ret
 }
@@ -698,60 +698,60 @@ proc newvarc {view id} {
     set a [llength $varctok($view)]
     set vid $view,$id
     if {[llength $children($vid)] == 0 || $vdatemode($view)} {
-	if {![info exists commitinfo($id)]} {
-	    parsecommit $id $commitdata($id) 1
-	}
-	set cdate [lindex [lindex $commitinfo($id) 4] 0]
-	if {![string is integer -strict $cdate]} {
-	    set cdate 0
-	}
-	if {![info exists vseedcount($view,$cdate)]} {
-	    set vseedcount($view,$cdate) -1
-	}
-	set c [incr vseedcount($view,$cdate)]
-	set cdate [expr {$cdate ^ 0xffffffff}]
-	set tok "s[strrep $cdate][strrep $c]"
+        if {![info exists commitinfo($id)]} {
+            parsecommit $id $commitdata($id) 1
+        }
+        set cdate [lindex [lindex $commitinfo($id) 4] 0]
+        if {![string is integer -strict $cdate]} {
+            set cdate 0
+        }
+        if {![info exists vseedcount($view,$cdate)]} {
+            set vseedcount($view,$cdate) -1
+        }
+        set c [incr vseedcount($view,$cdate)]
+        set cdate [expr {$cdate ^ 0xffffffff}]
+        set tok "s[strrep $cdate][strrep $c]"
     } else {
-	set tok {}
+        set tok {}
     }
     set ka 0
     if {[llength $children($vid)] > 0} {
-	set kid [lindex $children($vid) end]
-	set k $varcid($view,$kid)
-	if {[string compare [lindex $varctok($view) $k] $tok] > 0} {
-	    set ki $kid
-	    set ka $k
-	    set tok [lindex $varctok($view) $k]
-	}
+        set kid [lindex $children($vid) end]
+        set k $varcid($view,$kid)
+        if {[string compare [lindex $varctok($view) $k] $tok] > 0} {
+            set ki $kid
+            set ka $k
+            set tok [lindex $varctok($view) $k]
+        }
     }
     if {$ka != 0} {
-	set i [lsearch -exact $parents($view,$ki) $id]
-	set j [expr {[llength $parents($view,$ki)] - 1 - $i}]
-	append tok [strrep $j]
+        set i [lsearch -exact $parents($view,$ki) $id]
+        set j [expr {[llength $parents($view,$ki)] - 1 - $i}]
+        append tok [strrep $j]
     }
     set c [lindex $vlastins($view) $ka]
     if {$c == 0 || [string compare $tok [lindex $varctok($view) $c]] < 0} {
-	set c $ka
-	set b [lindex $vdownptr($view) $ka]
+        set c $ka
+        set b [lindex $vdownptr($view) $ka]
     } else {
-	set b [lindex $vleftptr($view) $c]
+        set b [lindex $vleftptr($view) $c]
     }
     while {$b != 0 && [string compare $tok [lindex $varctok($view) $b]] >= 0} {
-	set c $b
-	set b [lindex $vleftptr($view) $c]
+        set c $b
+        set b [lindex $vleftptr($view) $c]
     }
     if {$c == $ka} {
-	lset vdownptr($view) $ka $a
-	lappend vbackptr($view) 0
+        lset vdownptr($view) $ka $a
+        lappend vbackptr($view) 0
     } else {
-	lset vleftptr($view) $c $a
-	lappend vbackptr($view) $c
+        lset vleftptr($view) $c $a
+        lappend vbackptr($view) $c
     }
     lset vlastins($view) $ka $a
     lappend vupptr($view) $ka
     lappend vleftptr($view) $b
     if {$b != 0} {
-	lset vbackptr($view) $b $a
+        lset vbackptr($view) $b $a
     }
     lappend varctok($view) $tok
     lappend varcstart($view) $id
@@ -782,7 +782,7 @@ proc splitvarc {p v} {
     set varccommits($v,$na) [lrange $ac $i end]
     lappend varcstart($v) $p
     foreach id $varccommits($v,$na) {
-	set varcid($v,$id) $na
+        set varcid($v,$id) $na
     }
     lappend vdownptr($v) [lindex $vdownptr($v) $oa]
     lappend vlastins($v) [lindex $vlastins($v) $oa]
@@ -792,10 +792,10 @@ proc splitvarc {p v} {
     lappend vleftptr($v) 0
     lappend vbackptr($v) 0
     for {set b [lindex $vdownptr($v) $na]} {$b != 0} {set b [lindex $vleftptr($v) $b]} {
-	lset vupptr($v) $b $na
+        lset vupptr($v) $b $na
     }
     if {[string compare $otok $vtokmod($v)] <= 0} {
-	modify_arc $v $oa
+        modify_arc $v $oa
     }
 }
 
@@ -809,120 +809,120 @@ proc renumbervarc {a v} {
     set kidchanged($a) 1
     set ntot 0
     while {$a != 0} {
-	if {[info exists isrelated($a)]} {
-	    lappend todo $a
-	    set id [lindex $varccommits($v,$a) end]
-	    foreach p $parents($v,$id) {
-		if {[info exists varcid($v,$p)]} {
-		    set isrelated($varcid($v,$p)) 1
-		}
-	    }
-	}
-	incr ntot
-	set b [lindex $vdownptr($v) $a]
-	if {$b == 0} {
-	    while {$a != 0} {
-		set b [lindex $vleftptr($v) $a]
-		if {$b != 0} break
-		set a [lindex $vupptr($v) $a]
-	    }
-	}
-	set a $b
+        if {[info exists isrelated($a)]} {
+            lappend todo $a
+            set id [lindex $varccommits($v,$a) end]
+            foreach p $parents($v,$id) {
+                if {[info exists varcid($v,$p)]} {
+                    set isrelated($varcid($v,$p)) 1
+                }
+            }
+        }
+        incr ntot
+        set b [lindex $vdownptr($v) $a]
+        if {$b == 0} {
+            while {$a != 0} {
+                set b [lindex $vleftptr($v) $a]
+                if {$b != 0} break
+                set a [lindex $vupptr($v) $a]
+            }
+        }
+        set a $b
     }
     foreach a $todo {
-	if {![info exists kidchanged($a)]} continue
-	set id [lindex $varcstart($v) $a]
-	if {[llength $children($v,$id)] > 1} {
-	    set children($v,$id) [lsort -command [list vtokcmp $v] \
-				      $children($v,$id)]
-	}
-	set oldtok [lindex $varctok($v) $a]
-	if {!$vdatemode($v)} {
-	    set tok {}
-	} else {
-	    set tok $oldtok
-	}
-	set ka 0
-	set kid [last_real_child $v,$id]
-	if {$kid ne {}} {
-	    set k $varcid($v,$kid)
-	    if {[string compare [lindex $varctok($v) $k] $tok] > 0} {
-		set ki $kid
-		set ka $k
-		set tok [lindex $varctok($v) $k]
-	    }
-	}
-	if {$ka != 0} {
-	    set i [lsearch -exact $parents($v,$ki) $id]
-	    set j [expr {[llength $parents($v,$ki)] - 1 - $i}]
-	    append tok [strrep $j]
-	}
-	if {$tok eq $oldtok} {
-	    continue
-	}
-	set id [lindex $varccommits($v,$a) end]
-	foreach p $parents($v,$id) {
-	    if {[info exists varcid($v,$p)]} {
-		set kidchanged($varcid($v,$p)) 1
-	    } else {
-		set sortkids($p) 1
-	    }
-	}
-	lset varctok($v) $a $tok
-	set b [lindex $vupptr($v) $a]
-	if {$b != $ka} {
-	    if {[string compare [lindex $varctok($v) $ka] $vtokmod($v)] < 0} {
-		modify_arc $v $ka
-	    }
-	    if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
-		modify_arc $v $b
-	    }
-	    set c [lindex $vbackptr($v) $a]
-	    set d [lindex $vleftptr($v) $a]
-	    if {$c == 0} {
-		lset vdownptr($v) $b $d
-	    } else {
-		lset vleftptr($v) $c $d
-	    }
-	    if {$d != 0} {
-		lset vbackptr($v) $d $c
-	    }
-	    if {[lindex $vlastins($v) $b] == $a} {
-		lset vlastins($v) $b $c
-	    }
-	    lset vupptr($v) $a $ka
-	    set c [lindex $vlastins($v) $ka]
-	    if {$c == 0 || \
-		    [string compare $tok [lindex $varctok($v) $c]] < 0} {
-		set c $ka
-		set b [lindex $vdownptr($v) $ka]
-	    } else {
-		set b [lindex $vleftptr($v) $c]
-	    }
-	    while {$b != 0 && \
-		      [string compare $tok [lindex $varctok($v) $b]] >= 0} {
-		set c $b
-		set b [lindex $vleftptr($v) $c]
-	    }
-	    if {$c == $ka} {
- 		lset vdownptr($v) $ka $a
-		lset vbackptr($v) $a 0
-	    } else {
-		lset vleftptr($v) $c $a
-		lset vbackptr($v) $a $c
-	    }
-	    lset vleftptr($v) $a $b
-	    if {$b != 0} {
-		lset vbackptr($v) $b $a
-	    }
-	    lset vlastins($v) $ka $a
-	}
+        if {![info exists kidchanged($a)]} continue
+        set id [lindex $varcstart($v) $a]
+        if {[llength $children($v,$id)] > 1} {
+            set children($v,$id) [lsort -command [list vtokcmp $v] \
+                                      $children($v,$id)]
+        }
+        set oldtok [lindex $varctok($v) $a]
+        if {!$vdatemode($v)} {
+            set tok {}
+        } else {
+            set tok $oldtok
+        }
+        set ka 0
+        set kid [last_real_child $v,$id]
+        if {$kid ne {}} {
+            set k $varcid($v,$kid)
+            if {[string compare [lindex $varctok($v) $k] $tok] > 0} {
+                set ki $kid
+                set ka $k
+                set tok [lindex $varctok($v) $k]
+            }
+        }
+        if {$ka != 0} {
+            set i [lsearch -exact $parents($v,$ki) $id]
+            set j [expr {[llength $parents($v,$ki)] - 1 - $i}]
+            append tok [strrep $j]
+        }
+        if {$tok eq $oldtok} {
+            continue
+        }
+        set id [lindex $varccommits($v,$a) end]
+        foreach p $parents($v,$id) {
+            if {[info exists varcid($v,$p)]} {
+                set kidchanged($varcid($v,$p)) 1
+            } else {
+                set sortkids($p) 1
+            }
+        }
+        lset varctok($v) $a $tok
+        set b [lindex $vupptr($v) $a]
+        if {$b != $ka} {
+            if {[string compare [lindex $varctok($v) $ka] $vtokmod($v)] < 0} {
+                modify_arc $v $ka
+            }
+            if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
+                modify_arc $v $b
+            }
+            set c [lindex $vbackptr($v) $a]
+            set d [lindex $vleftptr($v) $a]
+            if {$c == 0} {
+                lset vdownptr($v) $b $d
+            } else {
+                lset vleftptr($v) $c $d
+            }
+            if {$d != 0} {
+                lset vbackptr($v) $d $c
+            }
+            if {[lindex $vlastins($v) $b] == $a} {
+                lset vlastins($v) $b $c
+            }
+            lset vupptr($v) $a $ka
+            set c [lindex $vlastins($v) $ka]
+            if {$c == 0 || \
+                    [string compare $tok [lindex $varctok($v) $c]] < 0} {
+                set c $ka
+                set b [lindex $vdownptr($v) $ka]
+            } else {
+                set b [lindex $vleftptr($v) $c]
+            }
+            while {$b != 0 && \
+                      [string compare $tok [lindex $varctok($v) $b]] >= 0} {
+                set c $b
+                set b [lindex $vleftptr($v) $c]
+            }
+            if {$c == $ka} {
+                lset vdownptr($v) $ka $a
+                lset vbackptr($v) $a 0
+            } else {
+                lset vleftptr($v) $c $a
+                lset vbackptr($v) $a $c
+            }
+            lset vleftptr($v) $a $b
+            if {$b != 0} {
+                lset vbackptr($v) $b $a
+            }
+            lset vlastins($v) $ka $a
+        }
     }
     foreach id [array names sortkids] {
-	if {[llength $children($v,$id)] > 1} {
-	    set children($v,$id) [lsort -command [list vtokcmp $v] \
-				      $children($v,$id)]
-	}
+        if {[llength $children($v,$id)] > 1} {
+            set children($v,$id) [lsort -command [list vtokcmp $v] \
+                                      $children($v,$id)]
+        }
     }
     set t2 [clock clicks -milliseconds]
     #puts "renumbervarc did [llength $todo] of $ntot arcs in [expr {$t2-$t1}]ms"
@@ -936,14 +936,14 @@ proc fix_reversal {p a v} {
 
     set pa $varcid($v,$p)
     if {$p ne [lindex $varcstart($v) $pa]} {
-	splitvarc $p $v
-	set pa $varcid($v,$p)
+        splitvarc $p $v
+        set pa $varcid($v,$p)
     }
     # seeds always need to be renumbered
     if {[lindex $vupptr($v) $pa] == 0 ||
-	[string compare [lindex $varctok($v) $a] \
-	     [lindex $varctok($v) $pa]] > 0} {
-	renumbervarc $pa $v
+        [string compare [lindex $varctok($v) $a] \
+             [lindex $varctok($v) $pa]] > 0} {
+        renumbervarc $pa $v
     }
 }
 
@@ -961,24 +961,24 @@ proc insertrow {id p v} {
     set varcid($vid) $a
     lappend vshortids($v,[string range $id 0 3]) $id
     if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} {
-	modify_arc $v $a
+        modify_arc $v $a
     }
     lappend varccommits($v,$a) $id
     set vp $v,$p
     if {[llength [lappend children($vp) $id]] > 1} {
-	set children($vp) [lsort -command [list vtokcmp $v] $children($vp)]
-	unset -nocomplain ordertok
+        set children($vp) [lsort -command [list vtokcmp $v] $children($vp)]
+        unset -nocomplain ordertok
     }
     fix_reversal $p $a $v
     incr commitidx($v)
     if {$v == $curview} {
-	set numcommits $commitidx($v)
-	setcanvscroll
-	if {[info exists targetid]} {
-	    if {![comes_before $targetid $p]} {
-		incr targetrow
-	    }
-	}
+        set numcommits $commitidx($v)
+        setcanvscroll
+        if {[info exists targetid]} {
+            if {![comes_before $targetid $p]} {
+                incr targetrow
+            }
+        }
     }
 }
 
@@ -990,8 +990,8 @@ proc insertfakerow {id p} {
     set a $varcid($v,$p)
     set i [lsearch -exact $varccommits($v,$a) $p]
     if {$i < 0} {
-	puts "oops: insertfakerow can't find [shortids $p] on arc $a"
-	return
+        puts "oops: insertfakerow can't find [shortids $p] on arc $a"
+        return
     }
     set children($v,$id) {}
     set parents($v,$id) [list $p]
@@ -1003,9 +1003,9 @@ proc insertfakerow {id p} {
     set varccommits($v,$a) [linsert $varccommits($v,$a) $i $id]
     modify_arc $v $a $i
     if {[info exists targetid]} {
-	if {![comes_before $targetid $p]} {
-	    incr targetrow
-	}
+        if {![comes_before $targetid $p]} {
+            incr targetrow
+        }
     }
     setcanvscroll
     drawvisible
@@ -1018,15 +1018,15 @@ proc removefakerow {id} {
 
     set v $curview
     if {[llength $parents($v,$id)] != 1} {
-	puts "oops: removefakerow [shortids $id] has [llength $parents($v,$id)] parents"
-	return
+        puts "oops: removefakerow [shortids $id] has [llength $parents($v,$id)] parents"
+        return
     }
     set p [lindex $parents($v,$id) 0]
     set a $varcid($v,$id)
     set i [lsearch -exact $varccommits($v,$a) $id]
     if {$i < 0} {
-	puts "oops: removefakerow can't find [shortids $id] on arc $a"
-	return
+        puts "oops: removefakerow can't find [shortids $id] on arc $a"
+        return
     }
     unset varcid($v,$id)
     set varccommits($v,$a) [lreplace $varccommits($v,$a) $i $i]
@@ -1036,15 +1036,15 @@ proc removefakerow {id} {
     set numcommits [incr commitidx($v) -1]
     set j [lsearch -exact $children($v,$p) $id]
     if {$j >= 0} {
-	set children($v,$p) [lreplace $children($v,$p) $j $j]
+        set children($v,$p) [lreplace $children($v,$p) $j $j]
     }
     modify_arc $v $a $i
     if {[info exist currentid] && $id eq $currentid} {
-	unset currentid
-	set selectedline {}
+        unset currentid
+        set selectedline {}
     }
     if {[info exists targetid] && $targetid eq $id} {
-	set targetid $p
+        set targetid $p
     }
     setcanvscroll
     drawvisible
@@ -1055,9 +1055,9 @@ proc real_children {vp} {
 
     set kids {}
     foreach id $children($vp) {
-	if {$id ne $nullid && $id ne $nullid2} {
-	    lappend kids $id
-	}
+        if {$id ne $nullid && $id ne $nullid2} {
+            lappend kids $id
+        }
     }
     return $kids
 }
@@ -1066,9 +1066,9 @@ proc first_real_child {vp} {
     global children nullid nullid2
 
     foreach id $children($vp) {
-	if {$id ne $nullid && $id ne $nullid2} {
-	    return $id
-	}
+        if {$id ne $nullid && $id ne $nullid2} {
+            return $id
+        }
     }
     return {}
 }
@@ -1078,10 +1078,10 @@ proc last_real_child {vp} {
 
     set kids $children($vp)
     for {set i [llength $kids]} {[incr i -1] >= 0} {} {
-	set id [lindex $kids $i]
-	if {$id ne $nullid && $id ne $nullid2} {
-	    return $id
-	}
+        set id [lindex $kids $i]
+        if {$id ne $nullid && $id ne $nullid2} {
+            return $id
+        }
     }
     return {}
 }
@@ -1090,7 +1090,7 @@ proc vtokcmp {v a b} {
     global varctok varcid
 
     return [string compare [lindex $varctok($v) $varcid($v,$a)] \
-		[lindex $varctok($v) $varcid($v,$b)]]
+                [lindex $varctok($v) $varcid($v,$b)]]
 }
 
 # This assumes that if lim is not given, the caller has checked that
@@ -1099,29 +1099,29 @@ proc modify_arc {v a {lim {}}} {
     global varctok vtokmod varcmod varcrow vupptr curview vrowmod varccommits
 
     if {$lim ne {}} {
-	set c [string compare [lindex $varctok($v) $a] $vtokmod($v)]
-	if {$c > 0} return
-	if {$c == 0} {
-	    set r [lindex $varcrow($v) $a]
-	    if {$r ne {} && $vrowmod($v) <= $r + $lim} return
-	}
+        set c [string compare [lindex $varctok($v) $a] $vtokmod($v)]
+        if {$c > 0} return
+        if {$c == 0} {
+            set r [lindex $varcrow($v) $a]
+            if {$r ne {} && $vrowmod($v) <= $r + $lim} return
+        }
     }
     set vtokmod($v) [lindex $varctok($v) $a]
     set varcmod($v) $a
     if {$v == $curview} {
-	while {$a != 0 && [lindex $varcrow($v) $a] eq {}} {
-	    set a [lindex $vupptr($v) $a]
-	    set lim {}
-	}
-	set r 0
-	if {$a != 0} {
-	    if {$lim eq {}} {
-		set lim [llength $varccommits($v,$a)]
-	    }
-	    set r [expr {[lindex $varcrow($v) $a] + $lim}]
-	}
-	set vrowmod($v) $r
-	undolayout $r
+        while {$a != 0 && [lindex $varcrow($v) $a] eq {}} {
+            set a [lindex $vupptr($v) $a]
+            set lim {}
+        }
+        set r 0
+        if {$a != 0} {
+            if {$lim eq {}} {
+                set lim [llength $varccommits($v,$a)]
+            }
+            set r [expr {[lindex $varcrow($v) $a] + $lim}]
+        }
+        set vrowmod($v) $r
+        undolayout $r
     }
 }
 
@@ -1133,62 +1133,62 @@ proc update_arcrows {v} {
 
     if {$vrowmod($v) == $commitidx($v)} return
     if {$v == $curview} {
-	if {[llength $displayorder] > $vrowmod($v)} {
-	    set displayorder [lrange $displayorder 0 [expr {$vrowmod($v) - 1}]]
-	    set parentlist [lrange $parentlist 0 [expr {$vrowmod($v) - 1}]]
-	}
-	unset -nocomplain cached_commitrow
+        if {[llength $displayorder] > $vrowmod($v)} {
+            set displayorder [lrange $displayorder 0 [expr {$vrowmod($v) - 1}]]
+            set parentlist [lrange $parentlist 0 [expr {$vrowmod($v) - 1}]]
+        }
+        unset -nocomplain cached_commitrow
     }
     set narctot [expr {[llength $varctok($v)] - 1}]
     set a $varcmod($v)
     while {$a != 0 && [lindex $varcix($v) $a] eq {}} {
-	# go up the tree until we find something that has a row number,
-	# or we get to a seed
-	set a [lindex $vupptr($v) $a]
+        # go up the tree until we find something that has a row number,
+        # or we get to a seed
+        set a [lindex $vupptr($v) $a]
     }
     if {$a == 0} {
-	set a [lindex $vdownptr($v) 0]
-	if {$a == 0} return
-	set vrownum($v) {0}
-	set varcorder($v) [list $a]
-	lset varcix($v) $a 0
-	lset varcrow($v) $a 0
-	set arcn 0
-	set row 0
+        set a [lindex $vdownptr($v) 0]
+        if {$a == 0} return
+        set vrownum($v) {0}
+        set varcorder($v) [list $a]
+        lset varcix($v) $a 0
+        lset varcrow($v) $a 0
+        set arcn 0
+        set row 0
     } else {
-	set arcn [lindex $varcix($v) $a]
-	if {[llength $vrownum($v)] > $arcn + 1} {
-	    set vrownum($v) [lrange $vrownum($v) 0 $arcn]
-	    set varcorder($v) [lrange $varcorder($v) 0 $arcn]
-	}
-	set row [lindex $varcrow($v) $a]
+        set arcn [lindex $varcix($v) $a]
+        if {[llength $vrownum($v)] > $arcn + 1} {
+            set vrownum($v) [lrange $vrownum($v) 0 $arcn]
+            set varcorder($v) [lrange $varcorder($v) 0 $arcn]
+        }
+        set row [lindex $varcrow($v) $a]
     }
     while {1} {
-	set p $a
-	incr row [llength $varccommits($v,$a)]
-	# go down if possible
-	set b [lindex $vdownptr($v) $a]
-	if {$b == 0} {
-	    # if not, go left, or go up until we can go left
-	    while {$a != 0} {
-		set b [lindex $vleftptr($v) $a]
-		if {$b != 0} break
-		set a [lindex $vupptr($v) $a]
-	    }
-	    if {$a == 0} break
-	}
-	set a $b
-	incr arcn
-	lappend vrownum($v) $row
-	lappend varcorder($v) $a
-	lset varcix($v) $a $arcn
-	lset varcrow($v) $a $row
+        set p $a
+        incr row [llength $varccommits($v,$a)]
+        # go down if possible
+        set b [lindex $vdownptr($v) $a]
+        if {$b == 0} {
+            # if not, go left, or go up until we can go left
+            while {$a != 0} {
+                set b [lindex $vleftptr($v) $a]
+                if {$b != 0} break
+                set a [lindex $vupptr($v) $a]
+            }
+            if {$a == 0} break
+        }
+        set a $b
+        incr arcn
+        lappend vrownum($v) $row
+        lappend varcorder($v) $a
+        lset varcix($v) $a $arcn
+        lset varcrow($v) $a $row
     }
     set vtokmod($v) [lindex $varctok($v) $p]
     set varcmod($v) $p
     set vrowmod($v) $row
     if {[info exists currentid]} {
-	set selectedline [rowofcommit $currentid]
+        set selectedline [rowofcommit $currentid]
     }
 }
 
@@ -1206,20 +1206,20 @@ proc rowofcommit {id} {
 
     set v $curview
     if {![info exists varcid($v,$id)]} {
-	puts "oops rowofcommit no arc for [shortids $id]"
-	return {}
+        puts "oops rowofcommit no arc for [shortids $id]"
+        return {}
     }
     set a $varcid($v,$id)
     if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] >= 0} {
-	update_arcrows $v
+        update_arcrows $v
     }
     if {[info exists cached_commitrow($id)]} {
-	return $cached_commitrow($id)
+        return $cached_commitrow($id)
     }
     set i [lsearch -exact $varccommits($v,$a) $id]
     if {$i < 0} {
-	puts "oops didn't find commit [shortids $id] in arc $a"
-	return {}
+        puts "oops didn't find commit [shortids $id] in arc $a"
+        return {}
     }
     incr i [lindex $varcrow($v) $a]
     set cached_commitrow($id) $i
@@ -1232,32 +1232,32 @@ proc comes_before {a b} {
 
     set v $curview
     if {$a eq $b || ![info exists varcid($v,$a)] || \
-	    ![info exists varcid($v,$b)]} {
-	return 0
+            ![info exists varcid($v,$b)]} {
+        return 0
     }
     if {$varcid($v,$a) != $varcid($v,$b)} {
-	return [expr {[string compare [lindex $varctok($v) $varcid($v,$a)] \
-			   [lindex $varctok($v) $varcid($v,$b)]] < 0}]
+        return [expr {[string compare [lindex $varctok($v) $varcid($v,$a)] \
+                           [lindex $varctok($v) $varcid($v,$b)]] < 0}]
     }
     return [expr {[rowofcommit $a] < [rowofcommit $b]}]
 }
 
 proc bsearch {l elt} {
     if {[llength $l] == 0 || $elt <= [lindex $l 0]} {
-	return 0
+        return 0
     }
     set lo 0
     set hi [llength $l]
     while {$hi - $lo > 1} {
-	set mid [expr {int(($lo + $hi) / 2)}]
-	set t [lindex $l $mid]
-	if {$elt < $t} {
-	    set hi $mid
-	} elseif {$elt > $t} {
-	    set lo $mid
-	} else {
-	    return $mid
-	}
+        set mid [expr {int(($lo + $hi) / 2)}]
+        set t [lindex $l $mid]
+        if {$elt < $t} {
+            set hi $mid
+        } elseif {$elt > $t} {
+            set lo $mid
+        } else {
+            return $mid
+        }
     }
     return $lo
 }
@@ -1269,37 +1269,37 @@ proc make_disporder {start end} {
     global d_valid_start d_valid_end
 
     if {$end > $vrowmod($curview)} {
-	update_arcrows $curview
+        update_arcrows $curview
     }
     set ai [bsearch $vrownum($curview) $start]
     set start [lindex $vrownum($curview) $ai]
     set narc [llength $vrownum($curview)]
     for {set r $start} {$ai < $narc && $r < $end} {incr ai} {
-	set a [lindex $varcorder($curview) $ai]
-	set l [llength $displayorder]
-	set al [llength $varccommits($curview,$a)]
-	if {$l < $r + $al} {
-	    if {$l < $r} {
-		set pad [ntimes [expr {$r - $l}] {}]
-		set displayorder [concat $displayorder $pad]
-		set parentlist [concat $parentlist $pad]
-	    } elseif {$l > $r} {
-		set displayorder [lrange $displayorder 0 [expr {$r - 1}]]
-		set parentlist [lrange $parentlist 0 [expr {$r - 1}]]
-	    }
-	    foreach id $varccommits($curview,$a) {
-		lappend displayorder $id
-		lappend parentlist $parents($curview,$id)
-	    }
-	} elseif {[lindex $displayorder [expr {$r + $al - 1}]] eq {}} {
-	    set i $r
-	    foreach id $varccommits($curview,$a) {
-		lset displayorder $i $id
-		lset parentlist $i $parents($curview,$id)
-		incr i
-	    }
-	}
-	incr r $al
+        set a [lindex $varcorder($curview) $ai]
+        set l [llength $displayorder]
+        set al [llength $varccommits($curview,$a)]
+        if {$l < $r + $al} {
+            if {$l < $r} {
+                set pad [ntimes [expr {$r - $l}] {}]
+                set displayorder [concat $displayorder $pad]
+                set parentlist [concat $parentlist $pad]
+            } elseif {$l > $r} {
+                set displayorder [lrange $displayorder 0 [expr {$r - 1}]]
+                set parentlist [lrange $parentlist 0 [expr {$r - 1}]]
+            }
+            foreach id $varccommits($curview,$a) {
+                lappend displayorder $id
+                lappend parentlist $parents($curview,$id)
+            }
+        } elseif {[lindex $displayorder [expr {$r + $al - 1}]] eq {}} {
+            set i $r
+            foreach id $varccommits($curview,$a) {
+                lset displayorder $i $id
+                lset parentlist $i $parents($curview,$id)
+                incr i
+            }
+        }
+        incr r $al
     }
 }
 
@@ -1308,8 +1308,8 @@ proc commitonrow {row} {
 
     set id [lindex $displayorder $row]
     if {$id eq {}} {
-	make_disporder $row [expr {$row + 1}]
-	set id [lindex $displayorder $row]
+        make_disporder $row [expr {$row + 1}]
+        set id [lindex $displayorder $row]
     }
     return $id
 }
@@ -1322,35 +1322,35 @@ proc closevarcs {v} {
     set scripts {}
     set narcs [llength $varctok($v)]
     for {set a 1} {$a < $narcs} {incr a} {
-	set id [lindex $varccommits($v,$a) end]
-	foreach p $parents($v,$id) {
-	    if {[info exists varcid($v,$p)]} continue
-	    # add p as a new commit
-	    incr missing_parents
-	    set cmitlisted($v,$p) 0
-	    set parents($v,$p) {}
-	    if {[llength $children($v,$p)] == 1 &&
-		[llength $parents($v,$id)] == 1} {
-		set b $a
-	    } else {
-		set b [newvarc $v $p]
-	    }
-	    set varcid($v,$p) $b
-	    if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
-		modify_arc $v $b
-	    }
-	    lappend varccommits($v,$b) $p
-	    incr commitidx($v)
-	    if {$v == $curview} {
-		set numcommits $commitidx($v)
-	    }
-	    set scripts [check_interest $p $scripts]
-	}
+        set id [lindex $varccommits($v,$a) end]
+        foreach p $parents($v,$id) {
+            if {[info exists varcid($v,$p)]} continue
+            # add p as a new commit
+            incr missing_parents
+            set cmitlisted($v,$p) 0
+            set parents($v,$p) {}
+            if {[llength $children($v,$p)] == 1 &&
+                [llength $parents($v,$id)] == 1} {
+                set b $a
+            } else {
+                set b [newvarc $v $p]
+            }
+            set varcid($v,$p) $b
+            if {[string compare [lindex $varctok($v) $b] $vtokmod($v)] < 0} {
+                modify_arc $v $b
+            }
+            lappend varccommits($v,$b) $p
+            incr commitidx($v)
+            if {$v == $curview} {
+                set numcommits $commitidx($v)
+            }
+            set scripts [check_interest $p $scripts]
+        }
     }
     if {$missing_parents > 0} {
-	foreach s $scripts {
-	    eval $s
-	}
+        foreach s $scripts {
+            eval $s
+        }
     }
 }
 
@@ -1360,23 +1360,23 @@ proc rewrite_commit {v id rwid} {
     global children parents varcid varctok vtokmod varccommits
 
     foreach ch $children($v,$id) {
-	# make $rwid be $ch's parent in place of $id
-	set i [lsearch -exact $parents($v,$ch) $id]
-	if {$i < 0} {
-	    puts "oops rewrite_commit didn't find $id in parent list for $ch"
-	}
-	set parents($v,$ch) [lreplace $parents($v,$ch) $i $i $rwid]
-	# add $ch to $rwid's children and sort the list if necessary
-	if {[llength [lappend children($v,$rwid) $ch]] > 1} {
-	    set children($v,$rwid) [lsort -command [list vtokcmp $v] \
-					$children($v,$rwid)]
-	}
-	# fix the graph after joining $id to $rwid
-	set a $varcid($v,$ch)
-	fix_reversal $rwid $a $v
-	# parentlist is wrong for the last element of arc $a
-	# even if displayorder is right, hence the 3rd arg here
-	modify_arc $v $a [expr {[llength $varccommits($v,$a)] - 1}]
+        # make $rwid be $ch's parent in place of $id
+        set i [lsearch -exact $parents($v,$ch) $id]
+        if {$i < 0} {
+            puts "oops rewrite_commit didn't find $id in parent list for $ch"
+        }
+        set parents($v,$ch) [lreplace $parents($v,$ch) $i $i $rwid]
+        # add $ch to $rwid's children and sort the list if necessary
+        if {[llength [lappend children($v,$rwid) $ch]] > 1} {
+            set children($v,$rwid) [lsort -command [list vtokcmp $v] \
+                                        $children($v,$rwid)]
+        }
+        # fix the graph after joining $id to $rwid
+        set a $varcid($v,$ch)
+        fix_reversal $rwid $a $v
+        # parentlist is wrong for the last element of arc $a
+        # even if displayorder is right, hence the 3rd arg here
+        modify_arc $v $a [expr {[llength $varccommits($v,$a)] - 1}]
     }
 }
 
@@ -1396,19 +1396,19 @@ proc check_interest {id scripts} {
 
     set prefix [string range $id 0 3]
     if {[info exists commitinterest($prefix)]} {
-	set newlist {}
-	foreach {i script} $commitinterest($prefix) {
-	    if {[string match "$i*" $id]} {
-		lappend scripts [string map [list "%I" $id "%P" $i] $script]
-	    } else {
-		lappend newlist $i $script
-	    }
-	}
-	if {$newlist ne {}} {
-	    set commitinterest($prefix) $newlist
-	} else {
-	    unset commitinterest($prefix)
-	}
+        set newlist {}
+        foreach {i script} $commitinterest($prefix) {
+            if {[string match "$i*" $id]} {
+                lappend scripts [string map [list "%I" $id "%P" $i] $script]
+            } else {
+                lappend newlist $i $script
+            }
+        }
+        if {$newlist ne {}} {
+            set commitinterest($prefix) $newlist
+        } else {
+            unset commitinterest($prefix)
+        }
     }
     return $scripts
 }
@@ -1423,192 +1423,192 @@ proc getcommitlines {fd inst view updating}  {
     set stuff [read $fd 500000]
     # git log doesn't terminate the last commit with a null...
     if {$stuff == {} && $leftover($inst) ne {} && [eof $fd]} {
-	set stuff "\0"
+        set stuff "\0"
     }
     if {$stuff == {}} {
-	if {![eof $fd]} {
-	    return 1
-	}
-	global commfd viewcomplete viewactive viewname
-	global viewinstances
-	unset commfd($inst)
-	set i [lsearch -exact $viewinstances($view) $inst]
-	if {$i >= 0} {
-	    set viewinstances($view) [lreplace $viewinstances($view) $i $i]
-	}
-	# set it blocking so we wait for the process to terminate
-	fconfigure $fd -blocking 1
-	if {[catch {close $fd} err]} {
-	    set fv {}
-	    if {$view != $curview} {
-		set fv " for the \"$viewname($view)\" view"
-	    }
-	    if {[string range $err 0 4] == "usage"} {
-		set err "Gitk: error reading commits$fv:\
-			bad arguments to git log."
-		if {$viewname($view) eq [mc "Command line"]} {
-		    append err \
-			"  (Note: arguments to gitk are passed to git log\
-			 to allow selection of commits to be displayed.)"
-		}
-	    } else {
-		set err "Error reading commits$fv: $err"
-	    }
-	    error_popup $err
-	}
-	if {[incr viewactive($view) -1] <= 0} {
-	    set viewcomplete($view) 1
-	    # Check if we have seen any ids listed as parents that haven't
-	    # appeared in the list
-	    closevarcs $view
-	    notbusy $view
-	}
-	if {$view == $curview} {
-	    run chewcommits
-	}
-	return 0
+        if {![eof $fd]} {
+            return 1
+        }
+        global commfd viewcomplete viewactive viewname
+        global viewinstances
+        unset commfd($inst)
+        set i [lsearch -exact $viewinstances($view) $inst]
+        if {$i >= 0} {
+            set viewinstances($view) [lreplace $viewinstances($view) $i $i]
+        }
+        # set it blocking so we wait for the process to terminate
+        fconfigure $fd -blocking 1
+        if {[catch {close $fd} err]} {
+            set fv {}
+            if {$view != $curview} {
+                set fv " for the \"$viewname($view)\" view"
+            }
+            if {[string range $err 0 4] == "usage"} {
+                set err "Gitk: error reading commits$fv:\
+                        bad arguments to git log."
+                if {$viewname($view) eq [mc "Command line"]} {
+                    append err \
+                        "  (Note: arguments to gitk are passed to git log\
+                         to allow selection of commits to be displayed.)"
+                }
+            } else {
+                set err "Error reading commits$fv: $err"
+            }
+            error_popup $err
+        }
+        if {[incr viewactive($view) -1] <= 0} {
+            set viewcomplete($view) 1
+            # Check if we have seen any ids listed as parents that haven't
+            # appeared in the list
+            closevarcs $view
+            notbusy $view
+        }
+        if {$view == $curview} {
+            run chewcommits
+        }
+        return 0
     }
     set start 0
     set gotsome 0
     set scripts {}
     while 1 {
-	set i [string first "\0" $stuff $start]
-	if {$i < 0} {
-	    append leftover($inst) [string range $stuff $start end]
-	    break
-	}
-	if {$start == 0} {
-	    set cmit $leftover($inst)
-	    append cmit [string range $stuff 0 [expr {$i - 1}]]
-	    set leftover($inst) {}
-	} else {
-	    set cmit [string range $stuff $start [expr {$i - 1}]]
-	}
-	set start [expr {$i + 1}]
-	set j [string first "\n" $cmit]
-	set ok 0
-	set listed 1
-	if {$j >= 0 && [string match "commit *" $cmit]} {
-	    set ids [string range $cmit 7 [expr {$j - 1}]]
-	    if {[string match {[-^<>]*} $ids]} {
-		switch -- [string index $ids 0] {
-		    "-" {set listed 0}
-		    "^" {set listed 2}
-		    "<" {set listed 3}
-		    ">" {set listed 4}
-		}
-		set ids [string range $ids 1 end]
-	    }
-	    set ok 1
-	    foreach id $ids {
-		if {[string length $id] != 40} {
-		    set ok 0
-		    break
-		}
-	    }
-	}
-	if {!$ok} {
-	    set shortcmit $cmit
-	    if {[string length $shortcmit] > 80} {
-		set shortcmit "[string range $shortcmit 0 80]..."
-	    }
-	    error_popup "[mc "Can't parse git log output:"] {$shortcmit}"
-	    exit 1
-	}
-	set id [lindex $ids 0]
-	set vid $view,$id
+        set i [string first "\0" $stuff $start]
+        if {$i < 0} {
+            append leftover($inst) [string range $stuff $start end]
+            break
+        }
+        if {$start == 0} {
+            set cmit $leftover($inst)
+            append cmit [string range $stuff 0 [expr {$i - 1}]]
+            set leftover($inst) {}
+        } else {
+            set cmit [string range $stuff $start [expr {$i - 1}]]
+        }
+        set start [expr {$i + 1}]
+        set j [string first "\n" $cmit]
+        set ok 0
+        set listed 1
+        if {$j >= 0 && [string match "commit *" $cmit]} {
+            set ids [string range $cmit 7 [expr {$j - 1}]]
+            if {[string match {[-^<>]*} $ids]} {
+                switch -- [string index $ids 0] {
+                    "-" {set listed 0}
+                    "^" {set listed 2}
+                    "<" {set listed 3}
+                    ">" {set listed 4}
+                }
+                set ids [string range $ids 1 end]
+            }
+            set ok 1
+            foreach id $ids {
+                if {[string length $id] != 40} {
+                    set ok 0
+                    break
+                }
+            }
+        }
+        if {!$ok} {
+            set shortcmit $cmit
+            if {[string length $shortcmit] > 80} {
+                set shortcmit "[string range $shortcmit 0 80]..."
+            }
+            error_popup "[mc "Can't parse git log output:"] {$shortcmit}"
+            exit 1
+        }
+        set id [lindex $ids 0]
+        set vid $view,$id
 
-	lappend vshortids($view,[string range $id 0 3]) $id
+        lappend vshortids($view,[string range $id 0 3]) $id
 
-	if {!$listed && $updating && ![info exists varcid($vid)] &&
-	    $vfilelimit($view) ne {}} {
-	    # git log doesn't rewrite parents for unlisted commits
-	    # when doing path limiting, so work around that here
-	    # by working out the rewritten parent with git rev-list
-	    # and if we already know about it, using the rewritten
-	    # parent as a substitute parent for $id's children.
-	    if {![catch {
-		set rwid [exec git rev-list --first-parent --max-count=1 \
-			      $id -- $vfilelimit($view)]
-	    }]} {
-		if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
-		    # use $rwid in place of $id
-		    rewrite_commit $view $id $rwid
-		    continue
-		}
-	    }
-	}
+        if {!$listed && $updating && ![info exists varcid($vid)] &&
+            $vfilelimit($view) ne {}} {
+            # git log doesn't rewrite parents for unlisted commits
+            # when doing path limiting, so work around that here
+            # by working out the rewritten parent with git rev-list
+            # and if we already know about it, using the rewritten
+            # parent as a substitute parent for $id's children.
+            if {![catch {
+                set rwid [exec git rev-list --first-parent --max-count=1 \
+                              $id -- $vfilelimit($view)]
+            }]} {
+                if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
+                    # use $rwid in place of $id
+                    rewrite_commit $view $id $rwid
+                    continue
+                }
+            }
+        }
 
-	set a 0
-	if {[info exists varcid($vid)]} {
-	    if {$cmitlisted($vid) || !$listed} continue
-	    set a $varcid($vid)
-	}
-	if {$listed} {
-	    set olds [lrange $ids 1 end]
-	} else {
-	    set olds {}
-	}
-	set commitdata($id) [string range $cmit [expr {$j + 1}] end]
-	set cmitlisted($vid) $listed
-	set parents($vid) $olds
-	if {![info exists children($vid)]} {
-	    set children($vid) {}
-	} elseif {$a == 0 && [llength $children($vid)] == 1} {
-	    set k [lindex $children($vid) 0]
-	    if {[llength $parents($view,$k)] == 1 &&
-		(!$vdatemode($view) ||
-		 $varcid($view,$k) == [llength $varctok($view)] - 1)} {
-		set a $varcid($view,$k)
-	    }
-	}
-	if {$a == 0} {
-	    # new arc
-	    set a [newvarc $view $id]
-	}
-	if {[string compare [lindex $varctok($view) $a] $vtokmod($view)] < 0} {
-	    modify_arc $view $a
-	}
-	if {![info exists varcid($vid)]} {
-	    set varcid($vid) $a
-	    lappend varccommits($view,$a) $id
-	    incr commitidx($view)
-	}
+        set a 0
+        if {[info exists varcid($vid)]} {
+            if {$cmitlisted($vid) || !$listed} continue
+            set a $varcid($vid)
+        }
+        if {$listed} {
+            set olds [lrange $ids 1 end]
+        } else {
+            set olds {}
+        }
+        set commitdata($id) [string range $cmit [expr {$j + 1}] end]
+        set cmitlisted($vid) $listed
+        set parents($vid) $olds
+        if {![info exists children($vid)]} {
+            set children($vid) {}
+        } elseif {$a == 0 && [llength $children($vid)] == 1} {
+            set k [lindex $children($vid) 0]
+            if {[llength $parents($view,$k)] == 1 &&
+                (!$vdatemode($view) ||
+                 $varcid($view,$k) == [llength $varctok($view)] - 1)} {
+                set a $varcid($view,$k)
+            }
+        }
+        if {$a == 0} {
+            # new arc
+            set a [newvarc $view $id]
+        }
+        if {[string compare [lindex $varctok($view) $a] $vtokmod($view)] < 0} {
+            modify_arc $view $a
+        }
+        if {![info exists varcid($vid)]} {
+            set varcid($vid) $a
+            lappend varccommits($view,$a) $id
+            incr commitidx($view)
+        }
 
-	set i 0
-	foreach p $olds {
-	    if {$i == 0 || [lsearch -exact $olds $p] >= $i} {
-		set vp $view,$p
-		if {[llength [lappend children($vp) $id]] > 1 &&
-		    [vtokcmp $view [lindex $children($vp) end-1] $id] > 0} {
-		    set children($vp) [lsort -command [list vtokcmp $view] \
-					   $children($vp)]
-		    unset -nocomplain ordertok
-		}
-		if {[info exists varcid($view,$p)]} {
-		    fix_reversal $p $a $view
-		}
-	    }
-	    incr i
-	}
+        set i 0
+        foreach p $olds {
+            if {$i == 0 || [lsearch -exact $olds $p] >= $i} {
+                set vp $view,$p
+                if {[llength [lappend children($vp) $id]] > 1 &&
+                    [vtokcmp $view [lindex $children($vp) end-1] $id] > 0} {
+                    set children($vp) [lsort -command [list vtokcmp $view] \
+                                           $children($vp)]
+                    unset -nocomplain ordertok
+                }
+                if {[info exists varcid($view,$p)]} {
+                    fix_reversal $p $a $view
+                }
+            }
+            incr i
+        }
 
-	set scripts [check_interest $id $scripts]
-	set gotsome 1
+        set scripts [check_interest $id $scripts]
+        set gotsome 1
     }
     if {$gotsome} {
-	global numcommits hlview
+        global numcommits hlview
 
-	if {$view == $curview} {
-	    set numcommits $commitidx($view)
-	    run chewcommits
-	}
-	if {[info exists hlview] && $view == $hlview} {
-	    # we never actually get here...
-	    run vhighlightmore
-	}
-	foreach s $scripts {
-	    eval $s
-	}
+        if {$view == $curview} {
+            set numcommits $commitidx($view)
+            run chewcommits
+        }
+        if {[info exists hlview] && $view == $hlview} {
+            # we never actually get here...
+            run vhighlightmore
+        }
+        foreach s $scripts {
+            eval $s
+        }
     }
     return 2
 }
@@ -1619,28 +1619,28 @@ proc chewcommits {} {
 
     layoutmore
     if {$viewcomplete($curview)} {
-	global commitidx varctok
-	global numcommits startmsecs
+        global commitidx varctok
+        global numcommits startmsecs
 
-	if {[info exists pending_select]} {
-	    update
-	    reset_pending_select {}
+        if {[info exists pending_select]} {
+            update
+            reset_pending_select {}
 
-	    if {[commitinview $pending_select $curview]} {
-		selectline [rowofcommit $pending_select] 1
-	    } else {
-		set row [first_real_row]
-		selectline $row 1
-	    }
-	}
-	if {$commitidx($curview) > 0} {
-	    #set ms [expr {[clock clicks -milliseconds] - $startmsecs}]
-	    #puts "overall $ms ms for $numcommits commits"
-	    #puts "[llength $varctok($view)] arcs, $commitidx($view) commits"
-	} else {
-	    show_status [mc "No commits selected"]
-	}
-	notbusy layout
+            if {[commitinview $pending_select $curview]} {
+                selectline [rowofcommit $pending_select] 1
+            } else {
+                set row [first_real_row]
+                selectline $row 1
+            }
+        }
+        if {$commitidx($curview) > 0} {
+            #set ms [expr {[clock clicks -milliseconds] - $startmsecs}]
+            #puts "overall $ms ms for $numcommits commits"
+            #puts "[llength $varctok($view)] arcs, $commitidx($view) commits"
+        } else {
+            show_status [mc "No commits selected"]
+        }
+        notbusy layout
     }
     return 0
 }
@@ -1653,7 +1653,7 @@ proc do_readcommit {id} {
     # Read the results using i18n.logoutputencoding
     fconfigure $fd -translation lf -eofchar {}
     if {$tclencoding != {}} {
-	fconfigure $fd -encoding $tclencoding
+        fconfigure $fd -encoding $tclencoding
     }
     set contents [read $fd]
     close $fd
@@ -1680,44 +1680,44 @@ proc parsecommit {id contents listed} {
     set comdate {}
     set hdrend [string first "\n\n" $contents]
     if {$hdrend < 0} {
-	# should never happen...
-	set hdrend [string length $contents]
+        # should never happen...
+        set hdrend [string length $contents]
     }
     set header [string range $contents 0 [expr {$hdrend - 1}]]
     set comment [string range $contents [expr {$hdrend + 2}] end]
     foreach line [split $header "\n"] {
-	set line [split $line " "]
-	set tag [lindex $line 0]
-	if {$tag == "author"} {
-	    set audate [lrange $line end-1 end]
-	    set auname [join [lrange $line 1 end-2] " "]
-	} elseif {$tag == "committer"} {
-	    set comdate [lrange $line end-1 end]
-	    set comname [join [lrange $line 1 end-2] " "]
-	}
+        set line [split $line " "]
+        set tag [lindex $line 0]
+        if {$tag == "author"} {
+            set audate [lrange $line end-1 end]
+            set auname [join [lrange $line 1 end-2] " "]
+        } elseif {$tag == "committer"} {
+            set comdate [lrange $line end-1 end]
+            set comname [join [lrange $line 1 end-2] " "]
+        }
     }
     set headline {}
     # take the first non-blank line of the comment as the headline
     set headline [string trimleft $comment]
     set i [string first "\n" $headline]
     if {$i >= 0} {
-	set headline [string range $headline 0 $i]
+        set headline [string range $headline 0 $i]
     }
     set headline [string trimright $headline]
     set i [string first "\r" $headline]
     if {$i >= 0} {
-	set headline [string trimright [string range $headline 0 $i]]
+        set headline [string trimright [string range $headline 0 $i]]
     }
     if {!$listed} {
-	# git log indents the comment by 4 spaces;
-	# if we got this via git cat-file, add the indentation
-	set newcomment {}
-	foreach line [split $comment "\n"] {
-	    append newcomment "    "
-	    append newcomment $line
-	    append newcomment "\n"
-	}
-	set comment $newcomment
+        # git log indents the comment by 4 spaces;
+        # if we got this via git cat-file, add the indentation
+        set newcomment {}
+        foreach line [split $comment "\n"] {
+            append newcomment "    "
+            append newcomment $line
+            append newcomment "\n"
+        }
+        set comment $newcomment
     }
     set hasnote [string first "\nNotes:\n" $contents]
     set diff ""
@@ -1726,23 +1726,23 @@ proc parsecommit {id contents listed} {
     # diff.
     set i [string first "\n\ndiff" $comment]
     if {$i >= 0} {
-	set diff [string range $comment $i+1 end]
-	set comment [string range $comment 0 $i-1]
+        set diff [string range $comment $i+1 end]
+        set comment [string range $comment 0 $i-1]
     }
     set commitinfo($id) [list $headline $auname $audate \
-			     $comname $comdate $comment $hasnote $diff]
+                             $comname $comdate $comment $hasnote $diff]
 }
 
 proc getcommit {id} {
     global commitdata commitinfo
 
     if {[info exists commitdata($id)]} {
-	parsecommit $id $commitdata($id) 1
+        parsecommit $id $commitdata($id) 1
     } else {
-	readcommit $id
-	if {![info exists commitinfo($id)]} {
-	    set commitinfo($id) [list [mc "No commit information available"]]
-	}
+        readcommit $id
+        if {![info exists commitinfo($id)]} {
+            set commitinfo($id) [list [mc "No commit information available"]]
+        }
     }
     return 1
 }
@@ -1755,22 +1755,22 @@ proc longid {prefix} {
 
     set ids {}
     if {[string length $prefix] >= 4} {
-	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
-		    }
-		}
-	    }
-	}
+        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
-	}
+        foreach match [array names varcid "$curview,$prefix*"] {
+            lappend ids [lindex [split $match ","] 1]
+            if {[llength $ids] >= 2} break
+        }
     }
     return $ids
 }
@@ -1783,58 +1783,58 @@ proc readrefs {} {
     global tclencoding
 
     foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
-	unset -nocomplain $v
+        unset -nocomplain $v
     }
     set refd [open [list | git show-ref -d] r]
     if {$tclencoding != {}} {
-	fconfigure $refd -encoding $tclencoding
+        fconfigure $refd -encoding $tclencoding
     }
     while {[gets $refd line] >= 0} {
-	if {[string index $line 40] ne " "} continue
-	set id [string range $line 0 39]
-	set ref [string range $line 41 end]
-	if {![string match "refs/*" $ref]} continue
-	set name [string range $ref 5 end]
-	if {[string match "remotes/*" $name]} {
-	    if {![string match "*/HEAD" $name] && !$hideremotes} {
-		set headids($name) $id
-		lappend idheads($id) $name
-	    }
-	} elseif {[string match "heads/*" $name]} {
-	    set name [string range $name 6 end]
-	    set headids($name) $id
-	    lappend idheads($id) $name
-	} elseif {[string match "tags/*" $name]} {
-	    # this lets refs/tags/foo^{} overwrite refs/tags/foo,
-	    # which is what we want since the former is the commit ID
-	    set name [string range $name 5 end]
-	    if {[string match "*^{}" $name]} {
-		set name [string range $name 0 end-3]
-	    } else {
-		set tagobjid($name) $id
-	    }
-	    set tagids($name) $id
-	    lappend idtags($id) $name
-	} else {
-	    set otherrefids($name) $id
-	    lappend idotherrefs($id) $name
-	}
+        if {[string index $line 40] ne " "} continue
+        set id [string range $line 0 39]
+        set ref [string range $line 41 end]
+        if {![string match "refs/*" $ref]} continue
+        set name [string range $ref 5 end]
+        if {[string match "remotes/*" $name]} {
+            if {![string match "*/HEAD" $name] && !$hideremotes} {
+                set headids($name) $id
+                lappend idheads($id) $name
+            }
+        } elseif {[string match "heads/*" $name]} {
+            set name [string range $name 6 end]
+            set headids($name) $id
+            lappend idheads($id) $name
+        } elseif {[string match "tags/*" $name]} {
+            # this lets refs/tags/foo^{} overwrite refs/tags/foo,
+            # which is what we want since the former is the commit ID
+            set name [string range $name 5 end]
+            if {[string match "*^{}" $name]} {
+                set name [string range $name 0 end-3]
+            } else {
+                set tagobjid($name) $id
+            }
+            set tagids($name) $id
+            lappend idtags($id) $name
+        } else {
+            set otherrefids($name) $id
+            lappend idotherrefs($id) $name
+        }
     }
     catch {close $refd}
     set mainhead {}
     set mainheadid {}
     catch {
-	set mainheadid [exec git rev-parse HEAD]
-	set thehead [exec git symbolic-ref HEAD]
-	if {[string match "refs/heads/*" $thehead]} {
-	    set mainhead [string range $thehead 11 end]
-	}
+        set mainheadid [exec git rev-parse HEAD]
+        set thehead [exec git symbolic-ref HEAD]
+        if {[string match "refs/heads/*" $thehead]} {
+            set mainhead [string range $thehead 11 end]
+        }
     }
     set selectheadid {}
     if {$selecthead ne {}} {
-	catch {
-	    set selectheadid [exec git rev-parse --verify $selecthead]
-	}
+        catch {
+            set selectheadid [exec git rev-parse --verify $selecthead]
+        }
     }
 }
 
@@ -1843,10 +1843,10 @@ proc first_real_row {} {
     global nullid nullid2 numcommits
 
     for {set row 0} {$row < $numcommits} {incr row} {
-	set id [commitonrow $row]
-	if {$id ne $nullid && $id ne $nullid2} {
-	    break
-	}
+        set id [commitonrow $row]
+        if {$id ne $nullid && $id ne $nullid2} {
+            break
+        }
     }
     return $row
 }
@@ -1865,12 +1865,12 @@ proc removehead {id name} {
     global headids idheads
 
     if {$idheads($id) eq $name} {
-	unset idheads($id)
+        unset idheads($id)
     } else {
-	set i [lsearch -exact $idheads($id) $name]
-	if {$i >= 0} {
-	    set idheads($id) [lreplace $idheads($id) $i $i]
-	}
+        set i [lsearch -exact $idheads($id) $name]
+        if {$i >= 0} {
+            set idheads($id) [lreplace $idheads($id) $i $i]
+        }
     }
     unset headids($name)
 }
@@ -1898,7 +1898,7 @@ proc make_transient {window origin} {
     # Windows fails to place transient windows normally, so
     # schedule a callback to center them on the parent.
     if {[tk windowingsystem] eq {win32}} {
-	after idle [list tk::PlaceWindow $window widget $origin]
+        after idle [list tk::PlaceWindow $window widget $origin]
     }
 }
 
@@ -1998,41 +1998,41 @@ proc setttkstyle {} {
 proc makemenu {m items} {
     menu $m
     if {[tk windowingsystem] eq {aqua}} {
-	set Meta1 Cmd
+        set Meta1 Cmd
     } else {
-	set Meta1 Ctrl
+        set Meta1 Ctrl
     }
     foreach i $items {
-	set name [mc [lindex $i 1]]
-	set type [lindex $i 2]
-	set thing [lindex $i 3]
-	set params [list $type]
-	if {$name ne {}} {
-	    set u [string first "&" [string map {&& x} $name]]
-	    lappend params -label [string map {&& & & {}} $name]
-	    if {$u >= 0} {
-		lappend params -underline $u
-	    }
-	}
-	switch -- $type {
-	    "cascade" {
-		set submenu [string tolower [string map {& ""} [lindex $i 1]]]
-		lappend params -menu $m.$submenu
-	    }
-	    "command" {
-		lappend params -command $thing
-	    }
-	    "radiobutton" {
-		lappend params -variable [lindex $thing 0] \
-		    -value [lindex $thing 1]
-	    }
-	}
-	set tail [lrange $i 4 end]
-	regsub -all {\yMeta1\y} $tail $Meta1 tail
-	eval $m add $params $tail
-	if {$type eq "cascade"} {
-	    makemenu $m.$submenu $thing
-	}
+        set name [mc [lindex $i 1]]
+        set type [lindex $i 2]
+        set thing [lindex $i 3]
+        set params [list $type]
+        if {$name ne {}} {
+            set u [string first "&" [string map {&& x} $name]]
+            lappend params -label [string map {&& & & {}} $name]
+            if {$u >= 0} {
+                lappend params -underline $u
+            }
+        }
+        switch -- $type {
+            "cascade" {
+                set submenu [string tolower [string map {& ""} [lindex $i 1]]]
+                lappend params -menu $m.$submenu
+            }
+            "command" {
+                lappend params -command $thing
+            }
+            "radiobutton" {
+                lappend params -variable [lindex $thing 0] \
+                    -value [lindex $thing 1]
+            }
+        }
+        set tail [lrange $i 4 end]
+        regsub -all {\yMeta1\y} $tail $Meta1 tail
+        eval $m add $params $tail
+        if {$type eq "cascade"} {
+            makemenu $m.$submenu $thing
+        }
     }
 }
 
@@ -2052,12 +2052,12 @@ proc makedroplist {w varname args} {
             set cx [string length $label]
             if {$cx > $width} {set width $cx}
         }
-	set gm [ttk::combobox $w -width $width -state readonly\
-		    -textvariable $varname -values $args \
-		    -exportselection false]
-	bind $gm <<ComboboxSelected>> [list $gm selection clear]
+        set gm [ttk::combobox $w -width $width -state readonly\
+                    -textvariable $varname -values $args \
+                    -exportselection false]
+        bind $gm <<ComboboxSelected>> [list $gm selection clear]
     } else {
-	set gm [eval [linsert $args 0 tk_optionMenu $w $varname]]
+        set gm [eval [linsert $args 0 tk_optionMenu $w $varname]]
     }
     return $gm
 }
@@ -2087,49 +2087,49 @@ proc makewindow {} {
     # The "mc" arguments here are purely so that xgettext
     # sees the following string as needing to be translated
     set file {
-	mc "&File" cascade {
-	    {mc "&Update" command updatecommits -accelerator F5}
-	    {mc "&Reload" command reloadcommits -accelerator Shift-F5}
-	    {mc "Reread re&ferences" command rereadrefs}
-	    {mc "&List references" command showrefs -accelerator F2}
-	    {xx "" separator}
-	    {mc "Start git &gui" command {exec git gui &}}
-	    {xx "" separator}
-	    {mc "&Quit" command doquit -accelerator Meta1-Q}
-	}}
+        mc "&File" cascade {
+            {mc "&Update" command updatecommits -accelerator F5}
+            {mc "&Reload" command reloadcommits -accelerator Shift-F5}
+            {mc "Reread re&ferences" command rereadrefs}
+            {mc "&List references" command showrefs -accelerator F2}
+            {xx "" separator}
+            {mc "Start git &gui" command {exec git gui &}}
+            {xx "" separator}
+            {mc "&Quit" command doquit -accelerator Meta1-Q}
+        }}
     set edit {
-	mc "&Edit" cascade {
-	    {mc "&Preferences" command doprefs}
-	}}
+        mc "&Edit" cascade {
+            {mc "&Preferences" command doprefs}
+        }}
     set view {
-	mc "&View" cascade {
-	    {mc "&New view..." command {newview 0} -accelerator Shift-F4}
-	    {mc "&Edit view..." command editview -state disabled -accelerator F4}
-	    {mc "&Delete view" command delview -state disabled}
-	    {xx "" separator}
-	    {mc "&All files" radiobutton {selectedview 0} -command {showview 0}}
-	}}
+        mc "&View" cascade {
+            {mc "&New view..." command {newview 0} -accelerator Shift-F4}
+            {mc "&Edit view..." command editview -state disabled -accelerator F4}
+            {mc "&Delete view" command delview -state disabled}
+            {xx "" separator}
+            {mc "&All files" radiobutton {selectedview 0} -command {showview 0}}
+        }}
     if {[tk windowingsystem] ne "aqua"} {
-	set help {
-	mc "&Help" cascade {
-	    {mc "&About gitk" command about}
-	    {mc "&Key bindings" command keys}
-	}}
-	set bar [list $file $edit $view $help]
+        set help {
+        mc "&Help" cascade {
+            {mc "&About gitk" command about}
+            {mc "&Key bindings" command keys}
+        }}
+        set bar [list $file $edit $view $help]
     } else {
-	proc ::tk::mac::ShowPreferences {} {doprefs}
-	proc ::tk::mac::Quit {} {doquit}
-	lset file end [lreplace [lindex $file end] end-1 end]
-	set apple {
-	xx "&Apple" cascade {
-	    {mc "&About gitk" command about}
-	    {xx "" separator}
-	}}
-	set help {
-	mc "&Help" cascade {
-	    {mc "&Key bindings" command keys}
-	}}
-	set bar [list $apple $file $view $help]
+        proc ::tk::mac::ShowPreferences {} {doprefs}
+        proc ::tk::mac::Quit {} {doquit}
+        lset file end [lreplace [lindex $file end] end-1 end]
+        set apple {
+        xx "&Apple" cascade {
+            {mc "&About gitk" command about}
+            {xx "" separator}
+        }}
+        set help {
+        mc "&Help" cascade {
+            {mc "&Key bindings" command keys}
+        }}
+        set bar [list $apple $file $view $help]
     }
     makemenu .bar $bar
     . configure -menu .bar
@@ -2157,36 +2157,36 @@ proc makewindow {} {
     ${NS}::frame .tf.histframe
     ${NS}::panedwindow .tf.histframe.pwclist -orient horizontal
     if {!$use_ttk} {
-	.tf.histframe.pwclist configure -sashpad 0 -handlesize 4
+        .tf.histframe.pwclist configure -sashpad 0 -handlesize 4
     }
 
     # create three canvases
     set cscroll .tf.histframe.csb
     set canv .tf.histframe.pwclist.canv
     canvas $canv \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 \
-	-yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll"
+        -selectbackground $selectbgcolor \
+        -background $bgcolor -bd 0 \
+        -yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll"
     .tf.histframe.pwclist add $canv
     set canv2 .tf.histframe.pwclist.canv2
     canvas $canv2 \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 -yscrollincr $linespc
+        -selectbackground $selectbgcolor \
+        -background $bgcolor -bd 0 -yscrollincr $linespc
     .tf.histframe.pwclist add $canv2
     set canv3 .tf.histframe.pwclist.canv3
     canvas $canv3 \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -bd 0 -yscrollincr $linespc
+        -selectbackground $selectbgcolor \
+        -background $bgcolor -bd 0 -yscrollincr $linespc
     .tf.histframe.pwclist add $canv3
     if {$use_ttk} {
-	bind .tf.histframe.pwclist <Map> {
-	    bind %W <Map> {}
-	    .tf.histframe.pwclist sashpos 1 [lindex $::geometry(pwsash1) 0]
-	    .tf.histframe.pwclist sashpos 0 [lindex $::geometry(pwsash0) 0]
-	}
+        bind .tf.histframe.pwclist <Map> {
+            bind %W <Map> {}
+            .tf.histframe.pwclist sashpos 1 [lindex $::geometry(pwsash1) 0]
+            .tf.histframe.pwclist sashpos 0 [lindex $::geometry(pwsash0) 0]
+        }
     } else {
-	eval .tf.histframe.pwclist sash place 0 $geometry(pwsash0)
-	eval .tf.histframe.pwclist sash place 1 $geometry(pwsash1)
+        eval .tf.histframe.pwclist sash place 0 $geometry(pwsash0)
+        eval .tf.histframe.pwclist sash place 1 $geometry(pwsash1)
     }
 
     # a scroll bar to rule them
@@ -2205,7 +2205,7 @@ proc makewindow {} {
     set entries $sha1entry
     set sha1but .tf.bar.sha1label
     button $sha1but -text "[mc "SHA1 ID:"] " -state disabled -relief flat \
-	-command gotocommit -width 8
+        -command gotocommit -width 8
     $sha1but conf -disabledforeground [$sha1but cget -foreground]
     pack .tf.bar.sha1label -side left
     ${NS}::entry $sha1entry -width 40 -font textfont -textvariable sha1string
@@ -2213,20 +2213,20 @@ proc makewindow {} {
     pack $sha1entry -side left -pady 2
 
     set bm_left_data {
-	#define left_width 16
-	#define left_height 16
-	static unsigned char left_bits[] = {
-	0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00,
-	0x0e, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x0e, 0x00, 0x1c, 0x00,
-	0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01};
+        #define left_width 16
+        #define left_height 16
+        static unsigned char left_bits[] = {
+        0x00, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00,
+        0x0e, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x0e, 0x00, 0x1c, 0x00,
+        0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01};
     }
     set bm_right_data {
-	#define right_width 16
-	#define right_height 16
-	static unsigned char right_bits[] = {
-	0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1c,
-	0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c,
-	0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01};
+        #define right_width 16
+        #define right_height 16
+        static unsigned char right_bits[] = {
+        0x00, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1c,
+        0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c,
+        0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01};
     }
     image create bitmap bm-left -data $bm_left_data -foreground $uifgcolor
     image create bitmap bm-left-gray -data $bm_left_data -foreground $uifgdisabledcolor
@@ -2235,28 +2235,28 @@ proc makewindow {} {
 
     ${NS}::button .tf.bar.leftbut -command goback -state disabled -width 26
     if {$use_ttk} {
-	.tf.bar.leftbut configure -image [list bm-left disabled bm-left-gray]
+        .tf.bar.leftbut configure -image [list bm-left disabled bm-left-gray]
     } else {
-	.tf.bar.leftbut configure -image bm-left
+        .tf.bar.leftbut configure -image bm-left
     }
     pack .tf.bar.leftbut -side left -fill y
     ${NS}::button .tf.bar.rightbut -command goforw -state disabled -width 26
     if {$use_ttk} {
-	.tf.bar.rightbut configure -image [list bm-right disabled bm-right-gray]
+        .tf.bar.rightbut configure -image [list bm-right disabled bm-right-gray]
     } else {
-	.tf.bar.rightbut configure -image bm-right
+        .tf.bar.rightbut configure -image bm-right
     }
     pack .tf.bar.rightbut -side left -fill y
 
     ${NS}::label .tf.bar.rowlabel -text [mc "Row"]
     set rownumsel {}
     ${NS}::label .tf.bar.rownum -width 7 -textvariable rownumsel \
-	-relief sunken -anchor e
+        -relief sunken -anchor e
     ${NS}::label .tf.bar.rowlabel2 -text "/"
     ${NS}::label .tf.bar.numcommits -width 7 -textvariable numcommits \
-	-relief sunken -anchor e
+        -relief sunken -anchor e
     pack .tf.bar.rowlabel .tf.bar.rownum .tf.bar.rowlabel2 .tf.bar.numcommits \
-	-side left
+        -side left
     if {!$use_ttk} {
         foreach w {rownum numcommits} {.tf.bar.$w configure -font textfont}
     }
@@ -2268,14 +2268,14 @@ proc makewindow {} {
     ${NS}::label $statusw -width 15 -relief sunken
     pack $statusw -side left -padx 5
     if {$use_ttk} {
-	set progresscanv [ttk::progressbar .tf.bar.progress]
+        set progresscanv [ttk::progressbar .tf.bar.progress]
     } else {
-	set h [expr {[font metrics uifont -linespace] + 2}]
-	set progresscanv .tf.bar.progress
-	canvas $progresscanv -relief sunken -height $h -borderwidth 2
-	set progressitem [$progresscanv create rect -1 0 0 $h -fill "#00ff00"]
-	set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
-	set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
+        set h [expr {[font metrics uifont -linespace] + 2}]
+        set progresscanv .tf.bar.progress
+        canvas $progresscanv -relief sunken -height $h -borderwidth 2
+        set progressitem [$progresscanv create rect -1 0 0 $h -fill "#00ff00"]
+        set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
+        set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
     }
     pack $progresscanv -side right -expand 1 -fill x -padx {0 2}
     set progresscoords {0 0}
@@ -2289,26 +2289,26 @@ proc makewindow {} {
     ${NS}::label .tf.lbar.flabel -text "[mc "Find"] "
 
     set bm_down_data {
-	#define down_width 16
-	#define down_height 16
-	static unsigned char down_bits[] = {
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x87, 0xe1, 0x8e, 0x71, 0x9c, 0x39, 0xb8, 0x1d,
-	0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
+        #define down_width 16
+        #define down_height 16
+        static unsigned char down_bits[] = {
+        0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+        0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+        0x87, 0xe1, 0x8e, 0x71, 0x9c, 0x39, 0xb8, 0x1d,
+        0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
     }
     image create bitmap bm-down -data $bm_down_data -foreground $uifgcolor
     ${NS}::button .tf.lbar.fnext -width 26 -command {dofind 1 1}
     .tf.lbar.fnext configure -image bm-down
 
     set bm_up_data {
-	#define up_width 16
-	#define up_height 16
-	static unsigned char up_bits[] = {
-	0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
-	0xb8, 0x1d, 0x9c, 0x39, 0x8e, 0x71, 0x87, 0xe1,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-	0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01};
+        #define up_width 16
+        #define up_height 16
+        static unsigned char up_bits[] = {
+        0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
+        0xb8, 0x1d, 0x9c, 0x39, 0x8e, 0x71, 0x87, 0xe1,
+        0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+        0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01};
     }
     image create bitmap bm-up -data $bm_up_data -foreground $uifgcolor
     ${NS}::button .tf.lbar.fprev -width 26 -command {dofind -1 1}
@@ -2317,13 +2317,13 @@ proc makewindow {} {
     ${NS}::label .tf.lbar.flab2 -text " [mc "commit"] "
 
     pack .tf.lbar.flabel .tf.lbar.fnext .tf.lbar.fprev .tf.lbar.flab2 \
-	-side left -fill y
+        -side left -fill y
     set gdttype [mc "containing:"]
     set gm [makedroplist .tf.lbar.gdttype gdttype \
-		[mc "containing:"] \
-		[mc "touching paths:"] \
-		[mc "adding/removing string:"] \
-		[mc "changing lines matching:"]]
+                [mc "containing:"] \
+                [mc "touching paths:"] \
+                [mc "adding/removing string:"] \
+                [mc "changing lines matching:"]]
     trace add variable gdttype write gdttype_change
     pack .tf.lbar.gdttype -side left -fill y
 
@@ -2334,11 +2334,11 @@ proc makewindow {} {
     trace add variable findstring write find_change
     set findtype [mc "Exact"]
     set findtypemenu [makedroplist .tf.lbar.findtype \
-			  findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
+                          findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
     trace add variable findtype write findcom_change
     set findloc [mc "All fields"]
     makedroplist .tf.lbar.findloc findloc [mc "All fields"] [mc "Headline"] \
-	[mc "Comments"] [mc "Author"] [mc "Committer"]
+        [mc "Comments"] [mc "Author"] [mc "Committer"]
     trace add variable findloc write find_change
     pack .tf.lbar.findloc -side right
     pack .tf.lbar.findtype -side right
@@ -2350,8 +2350,8 @@ proc makewindow {} {
     pack .tf.histframe -fill both -side top -expand 1
     .ctop add .tf
     if {!$use_ttk} {
-	.ctop paneconfigure .tf -height $geometry(topheight)
-	.ctop paneconfigure .tf -width $geometry(topwidth)
+        .ctop paneconfigure .tf -height $geometry(topheight)
+        .ctop paneconfigure .tf -width $geometry(topwidth)
     }
 
     # now build up the bottom
@@ -2361,9 +2361,9 @@ proc makewindow {} {
     # if we know window height, then that will set the lower text height, otherwise
     # we set lower text height which will drive window height
     if {[info exists geometry(main)]} {
-	${NS}::frame .bleft -width $geometry(botwidth)
+        ${NS}::frame .bleft -width $geometry(botwidth)
     } else {
-	${NS}::frame .bleft -width $geometry(botwidth) -height $geometry(botheight)
+        ${NS}::frame .bleft -width $geometry(botwidth) -height $geometry(botheight)
     }
     ${NS}::frame .bleft.top
     ${NS}::frame .bleft.mid
@@ -2381,41 +2381,41 @@ proc makewindow {} {
     trace add variable searchstring write incrsearch
     pack $sstring -side left -expand 1 -fill x
     ${NS}::radiobutton .bleft.mid.diff -text [mc "Diff"] \
-	-command changediffdisp -variable diffelide -value {0 0}
+        -command changediffdisp -variable diffelide -value {0 0}
     ${NS}::radiobutton .bleft.mid.old -text [mc "Old version"] \
-	-command changediffdisp -variable diffelide -value {0 1}
+        -command changediffdisp -variable diffelide -value {0 1}
     ${NS}::radiobutton .bleft.mid.new -text [mc "New version"] \
-	-command changediffdisp -variable diffelide -value {1 0}
+        -command changediffdisp -variable diffelide -value {1 0}
 
     ${NS}::label .bleft.mid.labeldiffcontext -text "      [mc "Lines of context"]: "
     pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left -ipadx $wgap
     spinbox .bleft.mid.diffcontext -width 5 \
-	-from 0 -increment 1 -to 10000000 \
-	-validate all -validatecommand "diffcontextvalidate %P" \
-	-textvariable diffcontextstring
+        -from 0 -increment 1 -to 10000000 \
+        -validate all -validatecommand "diffcontextvalidate %P" \
+        -textvariable diffcontextstring
     .bleft.mid.diffcontext set $diffcontext
     trace add variable diffcontextstring write diffcontextchange
     lappend entries .bleft.mid.diffcontext
     pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left -ipadx $wgap
     ${NS}::checkbutton .bleft.mid.ignspace -text [mc "Ignore space change"] \
-	-command changeignorespace -variable ignorespace
+        -command changeignorespace -variable ignorespace
     pack .bleft.mid.ignspace -side left -padx 5
 
     set worddiff [mc "Line diff"]
     if {[package vcompare $git_version "1.7.2"] >= 0} {
-	makedroplist .bleft.mid.worddiff worddiff [mc "Line diff"] \
-	    [mc "Markup words"] [mc "Color words"]
-	trace add variable worddiff write changeworddiff
-	pack .bleft.mid.worddiff -side left -padx 5
+        makedroplist .bleft.mid.worddiff worddiff [mc "Line diff"] \
+            [mc "Markup words"] [mc "Color words"]
+        trace add variable worddiff write changeworddiff
+        pack .bleft.mid.worddiff -side left -padx 5
     }
 
     set ctext .bleft.bottom.ctext
     text $ctext -background $bgcolor -foreground $fgcolor \
-	-state disabled -undo 0 -font textfont \
-	-yscrollcommand scrolltext -wrap none \
-	-xscrollcommand ".bleft.bottom.sbhorizontal set"
+        -state disabled -undo 0 -font textfont \
+        -yscrollcommand scrolltext -wrap none \
+        -xscrollcommand ".bleft.bottom.sbhorizontal set"
     if {$have_tk85} {
-	$ctext conf -tabstyle wordprocessor
+        $ctext conf -tabstyle wordprocessor
     }
     ${NS}::scrollbar .bleft.bottom.sb -command "$ctext yview"
     ${NS}::scrollbar .bleft.bottom.sbhorizontal -command "$ctext xview" -orient h
@@ -2462,35 +2462,35 @@ proc makewindow {} {
 
     .pwbottom add .bleft
     if {!$use_ttk} {
-	.pwbottom paneconfigure .bleft -width $geometry(botwidth)
+        .pwbottom paneconfigure .bleft -width $geometry(botwidth)
     }
 
     # lower right
     ${NS}::frame .bright
     ${NS}::frame .bright.mode
     ${NS}::radiobutton .bright.mode.patch -text [mc "Patch"] \
-	-command reselectline -variable cmitmode -value "patch"
+        -command reselectline -variable cmitmode -value "patch"
     ${NS}::radiobutton .bright.mode.tree -text [mc "Tree"] \
-	-command reselectline -variable cmitmode -value "tree"
+        -command reselectline -variable cmitmode -value "tree"
     grid .bright.mode.patch .bright.mode.tree -sticky ew
     pack .bright.mode -side top -fill x
     set cflist .bright.cfiles
     set indent [font measure mainfont "nn"]
     text $cflist \
-	-selectbackground $selectbgcolor \
-	-background $bgcolor -foreground $fgcolor \
-	-font mainfont \
-	-tabs [list $indent [expr {2 * $indent}]] \
-	-yscrollcommand ".bright.sb set" \
-	-cursor [. cget -cursor] \
-	-spacing1 1 -spacing3 1
+        -selectbackground $selectbgcolor \
+        -background $bgcolor -foreground $fgcolor \
+        -font mainfont \
+        -tabs [list $indent [expr {2 * $indent}]] \
+        -yscrollcommand ".bright.sb set" \
+        -cursor [. cget -cursor] \
+        -spacing1 1 -spacing3 1
     lappend bglist $cflist
     lappend fglist $cflist
     ${NS}::scrollbar .bright.sb -command "$cflist yview"
     pack .bright.sb -side right -fill y
     pack $cflist -side left -fill both -expand 1
     $cflist tag configure highlight \
-	-background [$cflist cget -selectbackground]
+        -background [$cflist cget -selectbackground]
     $cflist tag configure bold -font mainfontbold
 
     .pwbottom add .bright
@@ -2498,15 +2498,15 @@ proc makewindow {} {
 
     # restore window width & height if known
     if {[info exists geometry(main)]} {
-	if {[scan $geometry(main) "%dx%d" w h] >= 2} {
-	    if {$w > [winfo screenwidth .]} {
-		set w [winfo screenwidth .]
-	    }
-	    if {$h > [winfo screenheight .]} {
-		set h [winfo screenheight .]
-	    }
-	    wm geometry . "${w}x$h"
-	}
+        if {[scan $geometry(main) "%dx%d" w h] >= 2} {
+            if {$w > [winfo screenwidth .]} {
+                set w [winfo screenwidth .]
+            }
+            if {$h > [winfo screenheight .]} {
+                set h [winfo screenheight .]
+            }
+            wm geometry . "${w}x$h"
+        }
     }
 
     if {[info exists geometry(state)] && $geometry(state) eq "zoomed"} {
@@ -2530,25 +2530,25 @@ proc makewindow {} {
             bind %W <Map> {}
             %W sashpos 0 $::geometry(botwidth)
         }
-	bind .pwbottom <Configure> {resizecdetpanes %W %w}
+        bind .pwbottom <Configure> {resizecdetpanes %W %w}
     }
 
     pack .ctop -fill both -expand 1
     bindall <1> {selcanvline %W %x %y}
     #bindall <B1-Motion> {selcanvline %W %x %y}
     if {[tk windowingsystem] == "win32"} {
-	bind . <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D }
-	bind $ctext <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D ; break }
+        bind . <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D }
+        bind $ctext <MouseWheel> { windows_mousewheel_redirector %W %X %Y %D ; break }
     } else {
-	bindall <ButtonRelease-4> "allcanvs yview scroll -5 units"
-	bindall <ButtonRelease-5> "allcanvs yview scroll 5 units"
-	bind $ctext <Button> {
-	    if {"%b" eq 6} {
-		$ctext xview scroll -5 units
-	    } elseif {"%b" eq 7} {
-		$ctext xview scroll 5 units
-	    }
-	}
+        bindall <ButtonRelease-4> "allcanvs yview scroll -5 units"
+        bindall <ButtonRelease-5> "allcanvs yview scroll 5 units"
+        bind $ctext <Button> {
+            if {"%b" eq 6} {
+                $ctext xview scroll -5 units
+            } elseif {"%b" eq 7} {
+                $ctext xview scroll 5 units
+            }
+        }
         if {[tk windowingsystem] eq "aqua"} {
             bindall <MouseWheel> {
                 set delta [expr {- (%D)}]
@@ -2631,7 +2631,7 @@ proc makewindow {} {
     bind $ctext <Button-1> {focus %W}
     bind $ctext <<Selection>> rehighlight_search_results
     for {set i 1} {$i < 10} {incr i} {
-	bind . <$M1B-Key-$i> [list go_to_parent $i]
+        bind . <$M1B-Key-$i> [list go_to_parent $i]
     }
 
     set maincursor [. cget -cursor]
@@ -2640,60 +2640,60 @@ proc makewindow {} {
 
     set rowctxmenu .rowctxmenu
     makemenu $rowctxmenu {
-	{mc "Diff this -> selected" command {diffvssel 0}}
-	{mc "Diff selected -> this" command {diffvssel 1}}
-	{mc "Make patch" command mkpatch}
-	{mc "Create tag" command mktag}
-	{mc "Copy commit reference" command copyreference}
-	{mc "Write commit to file" command writecommit}
-	{mc "Create new branch" command mkbranch}
-	{mc "Cherry-pick this commit" command cherrypick}
-	{mc "Reset HEAD branch to here" command resethead}
-	{mc "Mark this commit" command markhere}
-	{mc "Return to mark" command gotomark}
-	{mc "Find descendant of this and mark" command find_common_desc}
-	{mc "Compare with marked commit" command compare_commits}
-	{mc "Diff this -> marked commit" command {diffvsmark 0}}
-	{mc "Diff marked commit -> this" command {diffvsmark 1}}
-	{mc "Revert this commit" command revert}
+        {mc "Diff this -> selected" command {diffvssel 0}}
+        {mc "Diff selected -> this" command {diffvssel 1}}
+        {mc "Make patch" command mkpatch}
+        {mc "Create tag" command mktag}
+        {mc "Copy commit reference" command copyreference}
+        {mc "Write commit to file" command writecommit}
+        {mc "Create new branch" command mkbranch}
+        {mc "Cherry-pick this commit" command cherrypick}
+        {mc "Reset HEAD branch to here" command resethead}
+        {mc "Mark this commit" command markhere}
+        {mc "Return to mark" command gotomark}
+        {mc "Find descendant of this and mark" command find_common_desc}
+        {mc "Compare with marked commit" command compare_commits}
+        {mc "Diff this -> marked commit" command {diffvsmark 0}}
+        {mc "Diff marked commit -> this" command {diffvsmark 1}}
+        {mc "Revert this commit" command revert}
     }
     $rowctxmenu configure -tearoff 0
 
     set fakerowmenu .fakerowmenu
     makemenu $fakerowmenu {
-	{mc "Diff this -> selected" command {diffvssel 0}}
-	{mc "Diff selected -> this" command {diffvssel 1}}
-	{mc "Make patch" command mkpatch}
-	{mc "Diff this -> marked commit" command {diffvsmark 0}}
-	{mc "Diff marked commit -> this" command {diffvsmark 1}}
+        {mc "Diff this -> selected" command {diffvssel 0}}
+        {mc "Diff selected -> this" command {diffvssel 1}}
+        {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
 
     set headctxmenu .headctxmenu
     makemenu $headctxmenu {
-	{mc "Check out this branch" command cobranch}
-	{mc "Rename this branch" command mvbranch}
-	{mc "Remove this branch" command rmbranch}
-	{mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
+        {mc "Check out this branch" command cobranch}
+        {mc "Rename this branch" command mvbranch}
+        {mc "Remove this branch" command rmbranch}
+        {mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
     }
     $headctxmenu configure -tearoff 0
 
     global flist_menu
     set flist_menu .flistctxmenu
     makemenu $flist_menu {
-	{mc "Highlight this too" command {flist_hl 0}}
-	{mc "Highlight this only" command {flist_hl 1}}
-	{mc "External diff" command {external_diff}}
-	{mc "Blame parent commit" command {external_blame 1}}
-	{mc "Copy path" command {clipboard clear; clipboard append $flist_menu_file}}
+        {mc "Highlight this too" command {flist_hl 0}}
+        {mc "Highlight this only" command {flist_hl 1}}
+        {mc "External diff" command {external_diff}}
+        {mc "Blame parent commit" command {external_blame 1}}
+        {mc "Copy path" command {clipboard clear; clipboard append $flist_menu_file}}
     }
     $flist_menu configure -tearoff 0
 
     global diff_menu
     set diff_menu .diffctxmenu
     makemenu $diff_menu {
-	{mc "Show origin of this line" command show_line_source}
-	{mc "Run git gui blame on this line" command {external_blame_diff}}
+        {mc "Show origin of this line" command show_line_source}
+        {mc "Run git gui blame on this line" command {external_blame_diff}}
     }
     $diff_menu configure -tearoff 0
 }
@@ -2705,14 +2705,14 @@ proc windows_mousewheel_redirector {W X Y D} {
     global canv canv2 canv3
     set w [winfo containing -displayof $W $X $Y]
     if {$w ne ""} {
-	set u [expr {$D < 0 ? 5 : -5}]
-	if {$w == $canv || $w == $canv2 || $w == $canv3} {
-	    allcanvs yview scroll $u units
-	} else {
-	    catch {
-		$w yview scroll $u units
-	    }
-	}
+        set u [expr {$D < 0 ? 5 : -5}]
+        if {$w == $canv || $w == $canv2 || $w == $canv3} {
+            allcanvs yview scroll $u units
+        } else {
+            catch {
+                $w yview scroll $u units
+            }
+        }
     }
 }
 
@@ -2721,9 +2721,9 @@ proc selectedline_change {n1 n2 op} {
     global selectedline rownumsel
 
     if {$selectedline eq {}} {
-	set rownumsel {}
+        set rownumsel {}
     } else {
-	set rownumsel [expr {$selectedline + 1}]
+        set rownumsel [expr {$selectedline + 1}]
     }
 }
 
@@ -2732,11 +2732,11 @@ proc selectedline_change {n1 n2 op} {
 proc canvscan {op w x y} {
     global canv canv2 canv3
     foreach c [list $canv $canv2 $canv3] {
-	if {$c == $w} {
-	    $c scan $op $x $y
-	} else {
-	    $c scan $op 0 $y
-	}
+        if {$c == $w} {
+            $c scan $op $x $y
+        } else {
+            $c scan $op 0 $y
+        }
     }
 }
 
@@ -2754,10 +2754,10 @@ proc bindkey {ev script} {
     bind . $ev $script
     set escript [bind Entry $ev]
     if {$escript == {}} {
-	set escript [bind Entry <Key>]
+        set escript [bind Entry <Key>]
     }
     foreach e $entries {
-	bind $e $ev "$escript; break"
+        bind $e $ev "$escript; break"
     }
 }
 
@@ -2771,7 +2771,7 @@ proc bindmodfunctionkey {mod n script} {
 proc click {w} {
     global ctext entries
     foreach e [concat $entries $ctext] {
-	if {$w == $e} return
+        if {$w == $e} return
     }
     focus .
 }
@@ -2783,8 +2783,8 @@ proc adjustprogress {} {
     global rprogitem rprogcoord use_ttk
 
     if {$use_ttk} {
-	$progresscanv configure -value [expr {int($fprogcoord * 100)}]
-	return
+        $progresscanv configure -value [expr {int($fprogcoord * 100)}]
+        return
     }
 
     set w [expr {[winfo width $progresscanv] - 4}]
@@ -2796,11 +2796,11 @@ proc adjustprogress {} {
     $progresscanv coords $rprogitem 0 0 [expr {$w * $rprogcoord}] $h
     set now [clock clicks -milliseconds]
     if {$now >= $lastprogupdate + 100} {
-	set progupdatepending 0
-	update
+        set progupdatepending 0
+        update
     } elseif {!$progupdatepending} {
-	set progupdatepending 1
-	after [expr {$lastprogupdate + 100 - $now}] doprogupdate
+        set progupdatepending 1
+        after [expr {$lastprogupdate + 100 - $now}] doprogupdate
     }
 }
 
@@ -2808,9 +2808,9 @@ proc doprogupdate {} {
     global lastprogupdate progupdatepending
 
     if {$progupdatepending} {
-	set progupdatepending 0
-	set lastprogupdate [clock clicks -milliseconds]
-	update
+        set progupdatepending 0
+        set lastprogupdate [clock clicks -milliseconds]
+        update
     }
 }
 
@@ -2818,14 +2818,14 @@ proc config_check_tmp_exists {tries_left} {
     global config_file_tmp
 
     if {[file exists $config_file_tmp]} {
-	incr tries_left -1
-	if {$tries_left > 0} {
-	    after 100 [list config_check_tmp_exists $tries_left]
-	} else {
-	    error_popup "There appears to be a stale $config_file_tmp\
+        incr tries_left -1
+        if {$tries_left > 0} {
+            after 100 [list config_check_tmp_exists $tries_left]
+        } else {
+            error_popup "There appears to be a stale $config_file_tmp\
  file, which will prevent gitk from saving its configuration on exit.\
  Please remove it if it is not being used by any existing gitk process."
-	}
+        }
     }
 }
 
@@ -2842,9 +2842,9 @@ proc config_variable_change_cb {name name2 op} {
 
     upvar #0 $name var
     if {$op eq "write" &&
-	(![info exists config_variable_original($name)] ||
-	 $config_variable_original($name) ne $var)} {
-	set config_variable_changed($name) 1
+        (![info exists config_variable_original($name)] ||
+         $config_variable_original($name) ne $var)} {
+        set config_variable_changed($name) 1
     }
 }
 
@@ -2866,81 +2866,81 @@ proc savestuff {w} {
     if {![winfo viewable .]} return
     set remove_tmp 0
     if {[catch {
-	set try_count 0
-	while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
-	    if {[incr try_count] > 50} {
-		error "Unable to write config file: $config_file_tmp exists"
-	    }
-	    after 100
-	}
-	set remove_tmp 1
-	if {$::tcl_platform(platform) eq {windows}} {
-	    file attributes $config_file_tmp -hidden true
-	}
-	if {[file exists $config_file]} {
-	    source $config_file
-	}
-	foreach var_name $config_variables {
-	    upvar #0 $var_name var
-	    upvar 0 $var_name old_var
-	    if {!$config_variable_changed($var_name) && [info exists old_var]} {
-		puts $f [list set $var_name $old_var]
-	    } else {
-		puts $f [list set $var_name $var]
-	    }
-	}
+        set try_count 0
+        while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
+            if {[incr try_count] > 50} {
+                error "Unable to write config file: $config_file_tmp exists"
+            }
+            after 100
+        }
+        set remove_tmp 1
+        if {$::tcl_platform(platform) eq {windows}} {
+            file attributes $config_file_tmp -hidden true
+        }
+        if {[file exists $config_file]} {
+            source $config_file
+        }
+        foreach var_name $config_variables {
+            upvar #0 $var_name var
+            upvar 0 $var_name old_var
+            if {!$config_variable_changed($var_name) && [info exists old_var]} {
+                puts $f [list set $var_name $old_var]
+            } else {
+                puts $f [list set $var_name $var]
+            }
+        }
 
-	puts $f "set geometry(main) [wm geometry .]"
-	puts $f "set geometry(state) [wm state .]"
-	puts $f "set geometry(topwidth) [winfo width .tf]"
-	puts $f "set geometry(topheight) [winfo height .tf]"
-	if {$current_use_ttk} {
-	    puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sashpos 0] 1\""
-	    puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
-	} else {
-	    puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sash coord 0]\""
-	    puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sash coord 1]\""
-	}
-	puts $f "set geometry(botwidth) [winfo width .bleft]"
-	puts $f "set geometry(botheight) [winfo height .bleft]"
+        puts $f "set geometry(main) [wm geometry .]"
+        puts $f "set geometry(state) [wm state .]"
+        puts $f "set geometry(topwidth) [winfo width .tf]"
+        puts $f "set geometry(topheight) [winfo height .tf]"
+        if {$current_use_ttk} {
+            puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sashpos 0] 1\""
+            puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\""
+        } else {
+            puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sash coord 0]\""
+            puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sash coord 1]\""
+        }
+        puts $f "set geometry(botwidth) [winfo width .bleft]"
+        puts $f "set geometry(botheight) [winfo height .bleft]"
 
-	array set view_save {}
-	array set views {}
-	if {![info exists permviews]} { set permviews {} }
-	foreach view $permviews {
-	    set view_save([lindex $view 0]) 1
-	    set views([lindex $view 0]) $view
-	}
-	puts -nonewline $f "set permviews {"
-	for {set v 1} {$v < $current_nextviewnum} {incr v} {
-	    if {$viewchanged($v)} {
-		if {$current_viewperm($v)} {
-		    set views($current_viewname($v)) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v)]
-		} else {
-		    set view_save($current_viewname($v)) 0
-		}
-	    }
-	}
-	# write old and updated view to their places and append remaining to the end
-	foreach view $permviews {
-	    set view_name [lindex $view 0]
-	    if {$view_save($view_name)} {
-		puts $f "{$views($view_name)}"
-	    }
-	    unset views($view_name)
-	}
-	foreach view_name [array names views] {
-	    puts $f "{$views($view_name)}"
-	}
-	puts $f "}"
-	close $f
-	file rename -force $config_file_tmp $config_file
-	set remove_tmp 0
+        array set view_save {}
+        array set views {}
+        if {![info exists permviews]} { set permviews {} }
+        foreach view $permviews {
+            set view_save([lindex $view 0]) 1
+            set views([lindex $view 0]) $view
+        }
+        puts -nonewline $f "set permviews {"
+        for {set v 1} {$v < $current_nextviewnum} {incr v} {
+            if {$viewchanged($v)} {
+                if {$current_viewperm($v)} {
+                    set views($current_viewname($v)) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v)]
+                } else {
+                    set view_save($current_viewname($v)) 0
+                }
+            }
+        }
+        # write old and updated view to their places and append remaining to the end
+        foreach view $permviews {
+            set view_name [lindex $view 0]
+            if {$view_save($view_name)} {
+                puts $f "{$views($view_name)}"
+            }
+            unset views($view_name)
+        }
+        foreach view_name [array names views] {
+            puts $f "{$views($view_name)}"
+        }
+        puts $f "}"
+        close $f
+        file rename -force $config_file_tmp $config_file
+        set remove_tmp 0
     } err]} {
         puts "Error saving config: $err"
     }
     if {$remove_tmp} {
-	file delete -force $config_file_tmp
+        file delete -force $config_file_tmp
     }
     set stuffsaved 1
 }
@@ -2948,40 +2948,40 @@ proc savestuff {w} {
 proc resizeclistpanes {win w} {
     global oldwidth use_ttk
     if {[info exists oldwidth($win)]} {
-	if {$use_ttk} {
-	    set s0 [$win sashpos 0]
-	    set s1 [$win sashpos 1]
-	} else {
-	    set s0 [$win sash coord 0]
-	    set s1 [$win sash coord 1]
-	}
-	if {$w < 60} {
-	    set sash0 [expr {int($w/2 - 2)}]
-	    set sash1 [expr {int($w*5/6 - 2)}]
-	} else {
-	    set factor [expr {1.0 * $w / $oldwidth($win)}]
-	    set sash0 [expr {int($factor * [lindex $s0 0])}]
-	    set sash1 [expr {int($factor * [lindex $s1 0])}]
-	    if {$sash0 < 30} {
-		set sash0 30
-	    }
-	    if {$sash1 < $sash0 + 20} {
-		set sash1 [expr {$sash0 + 20}]
-	    }
-	    if {$sash1 > $w - 10} {
-		set sash1 [expr {$w - 10}]
-		if {$sash0 > $sash1 - 20} {
-		    set sash0 [expr {$sash1 - 20}]
-		}
-	    }
-	}
-	if {$use_ttk} {
-	    $win sashpos 0 $sash0
-	    $win sashpos 1 $sash1
-	} else {
-	    $win sash place 0 $sash0 [lindex $s0 1]
-	    $win sash place 1 $sash1 [lindex $s1 1]
-	}
+        if {$use_ttk} {
+            set s0 [$win sashpos 0]
+            set s1 [$win sashpos 1]
+        } else {
+            set s0 [$win sash coord 0]
+            set s1 [$win sash coord 1]
+        }
+        if {$w < 60} {
+            set sash0 [expr {int($w/2 - 2)}]
+            set sash1 [expr {int($w*5/6 - 2)}]
+        } else {
+            set factor [expr {1.0 * $w / $oldwidth($win)}]
+            set sash0 [expr {int($factor * [lindex $s0 0])}]
+            set sash1 [expr {int($factor * [lindex $s1 0])}]
+            if {$sash0 < 30} {
+                set sash0 30
+            }
+            if {$sash1 < $sash0 + 20} {
+                set sash1 [expr {$sash0 + 20}]
+            }
+            if {$sash1 > $w - 10} {
+                set sash1 [expr {$w - 10}]
+                if {$sash0 > $sash1 - 20} {
+                    set sash0 [expr {$sash1 - 20}]
+                }
+            }
+        }
+        if {$use_ttk} {
+            $win sashpos 0 $sash0
+            $win sashpos 1 $sash1
+        } else {
+            $win sash place 0 $sash0 [lindex $s0 1]
+            $win sash place 1 $sash1 [lindex $s1 1]
+        }
     }
     set oldwidth($win) $w
 }
@@ -2989,28 +2989,28 @@ proc resizeclistpanes {win w} {
 proc resizecdetpanes {win w} {
     global oldwidth use_ttk
     if {[info exists oldwidth($win)]} {
-	if {$use_ttk} {
-	    set s0 [$win sashpos 0]
-	} else {
-	    set s0 [$win sash coord 0]
-	}
-	if {$w < 60} {
-	    set sash0 [expr {int($w*3/4 - 2)}]
-	} else {
-	    set factor [expr {1.0 * $w / $oldwidth($win)}]
-	    set sash0 [expr {int($factor * [lindex $s0 0])}]
-	    if {$sash0 < 45} {
-		set sash0 45
-	    }
-	    if {$sash0 > $w - 15} {
-		set sash0 [expr {$w - 15}]
-	    }
-	}
-	if {$use_ttk} {
-	    $win sashpos 0 $sash0
-	} else {
-	    $win sash place 0 $sash0 [lindex $s0 1]
-	}
+        if {$use_ttk} {
+            set s0 [$win sashpos 0]
+        } else {
+            set s0 [$win sash coord 0]
+        }
+        if {$w < 60} {
+            set sash0 [expr {int($w*3/4 - 2)}]
+        } else {
+            set factor [expr {1.0 * $w / $oldwidth($win)}]
+            set sash0 [expr {int($factor * [lindex $s0 0])}]
+            if {$sash0 < 45} {
+                set sash0 45
+            }
+            if {$sash0 > $w - 15} {
+                set sash0 [expr {$w - 15}]
+            }
+        }
+        if {$use_ttk} {
+            $win sashpos 0 $sash0
+        } else {
+            $win sash place 0 $sash0 [lindex $s0 1]
+        }
     }
     set oldwidth($win) $w
 }
@@ -3033,8 +3033,8 @@ proc about {} {
     global bgcolor NS
     set w .about
     if {[winfo exists $w]} {
-	raise $w
-	return
+        raise $w
+        return
     }
     ttk_toplevel $w
     wm title $w [mc "About gitk"]
@@ -3045,7 +3045,7 @@ Gitk - a commit viewer for git
 Copyright \u00a9 2005-2016 Paul Mackerras
 
 Use and redistribute under the terms of the GNU General Public License"] \
-	    -justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
+            -justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
     pack $w.m -side top -fill x -padx 2 -pady 2
     ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
     pack $w.ok -side bottom
@@ -3059,13 +3059,13 @@ proc keys {} {
     global bgcolor NS
     set w .keys
     if {[winfo exists $w]} {
-	raise $w
-	return
+        raise $w
+        return
     }
     if {[tk windowingsystem] eq {aqua}} {
-	set M1T Cmd
+        set M1T Cmd
     } else {
-	set M1T Ctrl
+        set M1T Ctrl
     }
     ttk_toplevel $w
     wm title $w [mc "Gitk key bindings"]
@@ -3112,7 +3112,7 @@ proc keys {} {
 [mc "<%s-minus>	Decrease font size" $M1T]
 [mc "<F5>		Update"]
 " \
-	    -justify left -bg $bgcolor -border 2 -relief groove
+            -justify left -bg $bgcolor -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2
     ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
     bind $w <Key-Escape> [list destroy $w]
@@ -3139,68 +3139,68 @@ proc treeview {w l openlevs} {
     set treecontents() {}
     $w conf -state normal
     foreach f $l {
-	while {[string range $f 0 $prefixend] ne $prefix} {
-	    if {$lev <= $openlevs} {
-		$w mark set e:$treeindex($prefix) "end -1c"
-		$w mark gravity e:$treeindex($prefix) left
-	    }
-	    set treeheight($prefix) $ht
-	    incr ht [lindex $htstack end]
-	    set htstack [lreplace $htstack end end]
-	    set prefixend [lindex $prefendstack end]
-	    set prefendstack [lreplace $prefendstack end end]
-	    set prefix [string range $prefix 0 $prefixend]
-	    incr lev -1
-	}
-	set tail [string range $f [expr {$prefixend+1}] end]
-	while {[set slash [string first "/" $tail]] >= 0} {
-	    lappend htstack $ht
-	    set ht 0
-	    lappend prefendstack $prefixend
-	    incr prefixend [expr {$slash + 1}]
-	    set d [string range $tail 0 $slash]
-	    lappend treecontents($prefix) $d
-	    set oldprefix $prefix
-	    append prefix $d
-	    set treecontents($prefix) {}
-	    set treeindex($prefix) [incr ix]
-	    set treeparent($prefix) $oldprefix
-	    set tail [string range $tail [expr {$slash+1}] end]
-	    if {$lev <= $openlevs} {
-		set ht 1
-		set treediropen($prefix) [expr {$lev < $openlevs}]
-		set bm [expr {$lev == $openlevs? "tri-rt": "tri-dn"}]
-		$w mark set d:$ix "end -1c"
-		$w mark gravity d:$ix left
-		set str "\n"
-		for {set i 0} {$i < $lev} {incr i} {append str "\t"}
-		$w insert end $str
-		$w image create end -align center -image $bm -padx 1 \
-		    -name a:$ix
-		$w insert end $d [highlight_tag $prefix]
-		$w mark set s:$ix "end -1c"
-		$w mark gravity s:$ix left
-	    }
-	    incr lev
-	}
-	if {$tail ne {}} {
-	    if {$lev <= $openlevs} {
-		incr ht
-		set str "\n"
-		for {set i 0} {$i < $lev} {incr i} {append str "\t"}
-		$w insert end $str
-		$w insert end $tail [highlight_tag $f]
-	    }
-	    lappend treecontents($prefix) $tail
-	}
+        while {[string range $f 0 $prefixend] ne $prefix} {
+            if {$lev <= $openlevs} {
+                $w mark set e:$treeindex($prefix) "end -1c"
+                $w mark gravity e:$treeindex($prefix) left
+            }
+            set treeheight($prefix) $ht
+            incr ht [lindex $htstack end]
+            set htstack [lreplace $htstack end end]
+            set prefixend [lindex $prefendstack end]
+            set prefendstack [lreplace $prefendstack end end]
+            set prefix [string range $prefix 0 $prefixend]
+            incr lev -1
+        }
+        set tail [string range $f [expr {$prefixend+1}] end]
+        while {[set slash [string first "/" $tail]] >= 0} {
+            lappend htstack $ht
+            set ht 0
+            lappend prefendstack $prefixend
+            incr prefixend [expr {$slash + 1}]
+            set d [string range $tail 0 $slash]
+            lappend treecontents($prefix) $d
+            set oldprefix $prefix
+            append prefix $d
+            set treecontents($prefix) {}
+            set treeindex($prefix) [incr ix]
+            set treeparent($prefix) $oldprefix
+            set tail [string range $tail [expr {$slash+1}] end]
+            if {$lev <= $openlevs} {
+                set ht 1
+                set treediropen($prefix) [expr {$lev < $openlevs}]
+                set bm [expr {$lev == $openlevs? "tri-rt": "tri-dn"}]
+                $w mark set d:$ix "end -1c"
+                $w mark gravity d:$ix left
+                set str "\n"
+                for {set i 0} {$i < $lev} {incr i} {append str "\t"}
+                $w insert end $str
+                $w image create end -align center -image $bm -padx 1 \
+                    -name a:$ix
+                $w insert end $d [highlight_tag $prefix]
+                $w mark set s:$ix "end -1c"
+                $w mark gravity s:$ix left
+            }
+            incr lev
+        }
+        if {$tail ne {}} {
+            if {$lev <= $openlevs} {
+                incr ht
+                set str "\n"
+                for {set i 0} {$i < $lev} {incr i} {append str "\t"}
+                $w insert end $str
+                $w insert end $tail [highlight_tag $f]
+            }
+            lappend treecontents($prefix) $tail
+        }
     }
     while {$htstack ne {}} {
-	set treeheight($prefix) $ht
-	incr ht [lindex $htstack end]
-	set htstack [lreplace $htstack end end]
-	set prefixend [lindex $prefendstack end]
-	set prefendstack [lreplace $prefendstack end end]
-	set prefix [string range $prefix 0 $prefixend]
+        set treeheight($prefix) $ht
+        incr ht [lindex $htstack end]
+        set htstack [lreplace $htstack end end]
+        set prefixend [lindex $prefendstack end]
+        set prefendstack [lreplace $prefendstack end end]
+        set prefix [string range $prefix 0 $prefixend]
     }
     $w conf -state disabled
 }
@@ -3211,21 +3211,21 @@ proc linetoelt {l} {
     set y 2
     set prefix {}
     while {1} {
-	foreach e $treecontents($prefix) {
-	    if {$y == $l} {
-		return "$prefix$e"
-	    }
-	    set n 1
-	    if {[string index $e end] eq "/"} {
-		set n $treeheight($prefix$e)
-		if {$y + $n > $l} {
-		    append prefix $e
-		    incr y
-		    break
-		}
-	    }
-	    incr y $n
-	}
+        foreach e $treecontents($prefix) {
+            if {$y == $l} {
+                return "$prefix$e"
+            }
+            set n 1
+            if {[string index $e end] eq "/"} {
+                set n $treeheight($prefix$e)
+                if {$y + $n > $l} {
+                    append prefix $e
+                    incr y
+                    break
+                }
+            }
+            incr y $n
+        }
     }
 }
 
@@ -3233,14 +3233,14 @@ proc highlight_tree {y prefix} {
     global treeheight treecontents cflist
 
     foreach e $treecontents($prefix) {
-	set path $prefix$e
-	if {[highlight_tag $path] ne {}} {
-	    $cflist tag add bold $y.0 "$y.0 lineend"
-	}
-	incr y
-	if {[string index $e end] eq "/" && $treeheight($path) > 1} {
-	    set y [highlight_tree $y $path]
-	}
+        set path $prefix$e
+        if {[highlight_tag $path] ne {}} {
+            $cflist tag add bold $y.0 "$y.0 lineend"
+        }
+        incr y
+        if {[string index $e end] eq "/" && $treeheight($path) > 1} {
+            set y [highlight_tree $y $path]
+        }
     }
     return $y
 }
@@ -3256,8 +3256,8 @@ proc treeclosedir {w dir} {
     $w conf -state disabled
     set n [expr {1 - $treeheight($dir)}]
     while {$dir ne {}} {
-	incr treeheight($dir) $n
-	set dir $treeparent($dir)
+        incr treeheight($dir) $n
+        set dir $treeparent($dir)
     }
 }
 
@@ -3273,28 +3273,28 @@ proc treeopendir {w dir} {
     set str "\n"
     set n [llength $treecontents($dir)]
     for {set x $dir} {$x ne {}} {set x $treeparent($x)} {
-	incr lev
-	append str "\t"
-	incr treeheight($x) $n
+        incr lev
+        append str "\t"
+        incr treeheight($x) $n
     }
     foreach e $treecontents($dir) {
-	set de $dir$e
-	if {[string index $e end] eq "/"} {
-	    set iy $treeindex($de)
-	    $w mark set d:$iy e:$ix
-	    $w mark gravity d:$iy left
-	    $w insert e:$ix $str
-	    set treediropen($de) 0
-	    $w image create e:$ix -align center -image tri-rt -padx 1 \
-		-name a:$iy
-	    $w insert e:$ix $e [highlight_tag $de]
-	    $w mark set s:$iy e:$ix
-	    $w mark gravity s:$iy left
-	    set treeheight($de) 1
-	} else {
-	    $w insert e:$ix $str
-	    $w insert e:$ix $e [highlight_tag $de]
-	}
+        set de $dir$e
+        if {[string index $e end] eq "/"} {
+            set iy $treeindex($de)
+            $w mark set d:$iy e:$ix
+            $w mark gravity d:$iy left
+            $w insert e:$ix $str
+            set treediropen($de) 0
+            $w image create e:$ix -align center -image tri-rt -padx 1 \
+                -name a:$iy
+            $w insert e:$ix $e [highlight_tag $de]
+            $w mark set s:$iy e:$ix
+            $w mark gravity s:$iy left
+            set treeheight($de) 1
+        } else {
+            $w insert e:$ix $str
+            $w insert e:$ix $e [highlight_tag $de]
+        }
     }
     $w mark gravity e:$ix right
     $w conf -state disabled
@@ -3303,13 +3303,13 @@ proc treeopendir {w dir} {
     set ht [$w cget -height]
     set l [lindex [split [$w index s:$ix] .] 0]
     if {$l < $top} {
-	$w yview $l.0
+        $w yview $l.0
     } elseif {$l + $n + 1 > $top + $ht} {
-	set top [expr {$l + $n + 2 - $ht}]
-	if {$l < $top} {
-	    set top $l
-	}
-	$w yview $top.0
+        set top [expr {$l + $n + 2 - $ht}]
+        if {$l < $top} {
+            set top $l
+        }
+        $w yview $top.0
     }
 }
 
@@ -3323,16 +3323,16 @@ proc treeclick {w x y} {
     $cflist tag add highlight $l.0 "$l.0 lineend"
     set cflist_top $l
     if {$l == 1} {
-	$ctext yview 1.0
-	return
+        $ctext yview 1.0
+        return
     }
     set e [linetoelt $l]
     if {[string index $e end] ne "/"} {
-	showfile $e
+        showfile $e
     } elseif {$treediropen($e)} {
-	treeclosedir $w $e
+        treeclosedir $w $e
     } else {
-	treeopendir $w $e
+        treeopendir $w $e
     }
 }
 
@@ -3341,10 +3341,10 @@ proc setfilelist {id} {
 
     treeview $cflist $treefilelist($id) 0
     if {$jump_to_here ne {}} {
-	set f [lindex $jump_to_here 0]
-	if {[lsearch -exact $treefilelist($id) $f] >= 0} {
-	    showfile $f
-	}
+        set f [lindex $jump_to_here 0]
+        if {[lsearch -exact $treefilelist($id) $f] >= 0} {
+            showfile $f
+        }
     }
 }
 
@@ -3419,11 +3419,11 @@ proc init_flist {first} {
     $cflist conf -state normal
     $cflist delete 0.0 end
     if {$first ne {}} {
-	$cflist insert end $first
-	set cflist_top 1
-	$cflist tag add highlight 1.0 "1.0 lineend"
+        $cflist insert end $first
+        set cflist_top 1
+        $cflist tag add highlight 1.0 "1.0 lineend"
     } else {
-	unset -nocomplain cflist_top
+        unset -nocomplain cflist_top
     }
     $cflist conf -state disabled
     set difffilestart {}
@@ -3433,9 +3433,9 @@ proc highlight_tag {f} {
     global highlight_paths
 
     foreach p $highlight_paths {
-	if {[string match $p $f]} {
-	    return "bold"
-	}
+        if {[string match $p $f]} {
+            return "bold"
+        }
     }
     return {}
 }
@@ -3445,15 +3445,15 @@ proc highlight_filelist {} {
 
     $cflist conf -state normal
     if {$cmitmode ne "tree"} {
-	set end [lindex [split [$cflist index end] .] 0]
-	for {set l 2} {$l < $end} {incr l} {
-	    set line [$cflist get $l.0 "$l.0 lineend"]
-	    if {[highlight_tag $line] ne {}} {
-		$cflist tag add bold $l.0 "$l.0 lineend"
-	    }
-	}
+        set end [lindex [split [$cflist index end] .] 0]
+        for {set l 2} {$l < $end} {incr l} {
+            set line [$cflist get $l.0 "$l.0 lineend"]
+            if {[highlight_tag $line] ne {}} {
+                $cflist tag add bold $l.0 "$l.0 lineend"
+            }
+        }
     } else {
-	highlight_tree 2 {}
+        highlight_tree 2 {}
     }
     $cflist conf -state disabled
 }
@@ -3471,8 +3471,8 @@ proc add_flist {fl} {
 
     $cflist conf -state normal
     foreach f $fl {
-	$cflist insert end "\n"
-	$cflist insert end $f [highlight_tag $f]
+        $cflist insert end "\n"
+        $cflist insert end $f [highlight_tag $f]
     }
     $cflist conf -state disabled
 }
@@ -3487,9 +3487,9 @@ proc sel_flist {w x y} {
     $cflist tag add highlight $l.0 "$l.0 lineend"
     set cflist_top $l
     if {$l == 1} {
-	$ctext yview 1.0
+        $ctext yview 1.0
     } else {
-	catch {$ctext yview [lindex $difffilestart [expr {$l - 2}]]}
+        catch {$ctext yview [lindex $difffilestart [expr {$l - 2}]]}
     }
     suppress_highlighting_file_for_current_scrollpos
 }
@@ -3502,15 +3502,15 @@ proc pop_flist_menu {w X Y x y} {
     set l [lindex [split [$w index "@$x,$y"] "."] 0]
     if {$l <= 1} return
     if {$cmitmode eq "tree"} {
-	set e [linetoelt $l]
-	if {[string index $e end] eq "/"} return
+        set e [linetoelt $l]
+        if {[string index $e end] eq "/"} return
     } else {
-	set e [lindex $treediffs($diffids) [expr {$l-2}]]
+        set e [lindex $treediffs($diffids) [expr {$l-2}]]
     }
     set flist_menu_file $e
     set xdiffstate "normal"
     if {$cmitmode eq "tree"} {
-	set xdiffstate "disabled"
+        set xdiffstate "disabled"
     }
     # Disable "External diff" item in tree mode
     $flist_menu entryconf 2 -state $xdiffstate
@@ -3539,7 +3539,7 @@ proc pop_diff_menu {w X Y x y} {
     set diff_menu_line [lindex $diff_menu_txtpos 0]
     # don't pop up the menu on hunk-separator or file-separator lines
     if {[lsearch -glob [$ctext tag names $diff_menu_line.0] "*sep"] >= 0} {
-	return
+        return
     }
     stopfinding
     set f [find_ctext_fileinfo $diff_menu_line]
@@ -3554,9 +3554,9 @@ proc flist_hl {only} {
 
     set x [shellquote $flist_menu_file]
     if {$only || $findstring eq {} || $gdttype ne [mc "touching paths:"]} {
-	set findstring $x
+        set findstring $x
     } else {
-	append findstring " " $x
+        append findstring " " $x
     }
     set gdttype [mc "touching paths:"]
 }
@@ -3565,29 +3565,29 @@ proc gitknewtmpdir {} {
     global diffnum gitktmpdir gitdir env
 
     if {![info exists gitktmpdir]} {
-	if {[info exists env(GITK_TMPDIR)]} {
-	    set tmpdir $env(GITK_TMPDIR)
-	} elseif {[info exists env(TMPDIR)]} {
-	    set tmpdir $env(TMPDIR)
-	} else {
-	    set tmpdir $gitdir
-	}
-	set gitktmpformat [file join $tmpdir ".gitk-tmp.XXXXXX"]
-	if {[catch {set gitktmpdir [exec mktemp -d $gitktmpformat]}]} {
-	    set gitktmpdir [file join $gitdir [format ".gitk-tmp.%s" [pid]]]
-	}
-	if {[catch {file mkdir $gitktmpdir} err]} {
-	    error_popup "[mc "Error creating temporary directory %s:" $gitktmpdir] $err"
-	    unset gitktmpdir
-	    return {}
-	}
-	set diffnum 0
+        if {[info exists env(GITK_TMPDIR)]} {
+            set tmpdir $env(GITK_TMPDIR)
+        } elseif {[info exists env(TMPDIR)]} {
+            set tmpdir $env(TMPDIR)
+        } else {
+            set tmpdir $gitdir
+        }
+        set gitktmpformat [file join $tmpdir ".gitk-tmp.XXXXXX"]
+        if {[catch {set gitktmpdir [exec mktemp -d $gitktmpformat]}]} {
+            set gitktmpdir [file join $gitdir [format ".gitk-tmp.%s" [pid]]]
+        }
+        if {[catch {file mkdir $gitktmpdir} err]} {
+            error_popup "[mc "Error creating temporary directory %s:" $gitktmpdir] $err"
+            unset gitktmpdir
+            return {}
+        }
+        set diffnum 0
     }
     incr diffnum
     set diffdir [file join $gitktmpdir $diffnum]
     if {[catch {file mkdir $diffdir} err]} {
-	error_popup "[mc "Error creating temporary directory %s:" $diffdir] $err"
-	return {}
+        error_popup "[mc "Error creating temporary directory %s:" $diffdir] $err"
+        return {}
     }
     return $diffdir
 }
@@ -3596,11 +3596,11 @@ proc save_file_from_commit {filename output what} {
     global nullfile
 
     if {[catch {exec git show $filename -- > $output} err]} {
-	if {[string match "fatal: bad revision *" $err]} {
-	    return $nullfile
-	}
-	error_popup "[mc "Error getting \"%s\" from %s:" $filename $what] $err"
-	return {}
+        if {[string match "fatal: bad revision *" $err]} {
+            return $nullfile
+        }
+        error_popup "[mc "Error getting \"%s\" from %s:" $filename $what] $err"
+        return {}
     }
     return $output
 }
@@ -3611,10 +3611,10 @@ proc external_diff_get_one_file {diffid filename diffdir} {
 
     if {$diffid == $nullid} {
         set difffile [file join $worktree $filename]
-	if {[file exists $difffile]} {
-	    return $difffile
-	}
-	return $nullfile
+        if {[file exists $difffile]} {
+            return $difffile
+        }
+        return $nullfile
     }
     if {$diffid == $nullid2} {
         set difffile [file join $diffdir "\[index\] [file tail $filename]"]
@@ -3622,7 +3622,7 @@ proc external_diff_get_one_file {diffid filename diffdir} {
     }
     set difffile [file join $diffdir "\[$diffid\] [file tail $filename]"]
     return [save_file_from_commit $diffid:$filename $difffile \
-	       "revision $diffid"]
+               "revision $diffid"]
 }
 
 proc external_diff {} {
@@ -3679,18 +3679,18 @@ proc find_hunk_blamespec {base line} {
 
     set s_line [$ctext get $s_lix "$s_lix + 1 lines"]
     if {![regexp {^@@@*(( -\d+(,\d+)?)+) \+(\d+)(,\d+)? @@} $s_line \
-	    s_line old_specs osz osz1 new_line nsz]} {
-	return
+            s_line old_specs osz osz1 new_line nsz]} {
+        return
     }
 
     # base lines for the parents
     set base_lines [list $new_line]
     foreach old_spec [lrange [split $old_specs " "] 1 end] {
-	if {![regexp -- {-(\d+)(,\d+)?} $old_spec \
-	        old_spec old_line osz]} {
-	    return
-	}
-	lappend base_lines $old_line
+        if {![regexp -- {-(\d+)(,\d+)?} $old_spec \
+                old_spec old_line osz]} {
+            return
+        }
+        lappend base_lines $old_line
     }
 
     # Now scan the lines to determine offset within the hunk
@@ -3701,38 +3701,38 @@ proc find_hunk_blamespec {base line} {
     # Determine if the line is removed
     set chunk [$ctext get $line.0 "$line.1 + $max_parent chars"]
     if {[string match {[-+ ]*} $chunk]} {
-	set removed_idx [string first "-" $chunk]
-	# Choose a parent index
-	if {$removed_idx >= 0} {
-	    set parent $removed_idx
-	} else {
-	    set unchanged_idx [string first " " $chunk]
-	    if {$unchanged_idx >= 0} {
-		set parent $unchanged_idx
-	    } else {
-		# blame the current commit
-		set parent -1
-	    }
-	}
-	# then count other lines that belong to it
-	for {set i $line} {[incr i -1] > $s_lno} {} {
-	    set chunk [$ctext get $i.0 "$i.1 + $max_parent chars"]
-	    # Determine if the line is removed
-	    set removed_idx [string first "-" $chunk]
-	    if {$parent >= 0} {
-		set code [string index $chunk $parent]
-		if {$code eq "-" || ($removed_idx < 0 && $code ne "+")} {
-		    incr dline
-		}
-	    } else {
-		if {$removed_idx < 0} {
-		    incr dline
-		}
-	    }
-	}
-	incr parent
+        set removed_idx [string first "-" $chunk]
+        # Choose a parent index
+        if {$removed_idx >= 0} {
+            set parent $removed_idx
+        } else {
+            set unchanged_idx [string first " " $chunk]
+            if {$unchanged_idx >= 0} {
+                set parent $unchanged_idx
+            } else {
+                # blame the current commit
+                set parent -1
+            }
+        }
+        # then count other lines that belong to it
+        for {set i $line} {[incr i -1] > $s_lno} {} {
+            set chunk [$ctext get $i.0 "$i.1 + $max_parent chars"]
+            # Determine if the line is removed
+            set removed_idx [string first "-" $chunk]
+            if {$parent >= 0} {
+                set code [string index $chunk $parent]
+                if {$code eq "-" || ($removed_idx < 0 && $code ne "+")} {
+                    incr dline
+                }
+            } else {
+                if {$removed_idx < 0} {
+                    incr dline
+                }
+            }
+        }
+        incr parent
     } else {
-	set parent 0
+        set parent 0
     }
 
     incr dline [lindex $base_lines $parent]
@@ -3745,17 +3745,17 @@ proc external_blame_diff {} {
     global diff_menu_filebase flist_menu_file
 
     if {$cmitmode eq "tree"} {
-	set parent_idx 0
-	set line [expr {$diff_menu_line - $diff_menu_filebase}]
+        set parent_idx 0
+        set line [expr {$diff_menu_line - $diff_menu_filebase}]
     } else {
-	set hinfo [find_hunk_blamespec $diff_menu_filebase $diff_menu_line]
-	if {$hinfo ne {}} {
-	    set parent_idx [lindex $hinfo 0]
-	    set line [lindex $hinfo 1]
-	} else {
-	    set parent_idx 0
-	    set line 0
-	}
+        set hinfo [find_hunk_blamespec $diff_menu_filebase $diff_menu_line]
+        if {$hinfo ne {}} {
+            set parent_idx [lindex $hinfo 0]
+            set line [lindex $hinfo 1]
+        } else {
+            set parent_idx 0
+            set line 0
+        }
     }
 
     external_blame $parent_idx $line
@@ -3766,12 +3766,12 @@ proc external_blame_diff {} {
 proc index_sha1 {fname} {
     set f [open [list | git ls-files -s $fname] r]
     while {[gets $f line] >= 0} {
-	set info [lindex [split $line "\t"] 0]
-	set stage [lindex $info 2]
-	if {$stage eq "0" || $stage eq "2"} {
-	    close $f
-	    return [lindex $info 1]
-	}
+        set info [lindex [split $line "\t"] 0]
+        set stage [lindex $info 2]
+        if {$stage eq "0" || $stage eq "2"} {
+            close $f
+            return [lindex $info 1]
+        }
     }
     close $f
     return {}
@@ -3780,7 +3780,7 @@ proc index_sha1 {fname} {
 # Turn an absolute path into one relative to the current directory
 proc make_relative {f} {
     if {[file pathtype $f] eq "relative"} {
-	return $f
+        return $f
     }
     set elts [file split $f]
     set here [file split [pwd]]
@@ -3788,12 +3788,12 @@ proc make_relative {f} {
     set hi 0
     set res {}
     foreach d $here {
-	if {$ei < $hi || $ei >= [llength $elts] || [lindex $elts $ei] ne $d} {
-	    lappend res ".."
-	} else {
-	    incr ei
-	}
-	incr hi
+        if {$ei < $hi || $ei >= [llength $elts] || [lindex $elts $ei] ne $d} {
+            lappend res ".."
+        } else {
+            incr ei
+        }
+        incr hi
     }
     set elts [concat $res [lrange $elts $ei end]]
     return [eval file join $elts]
@@ -3805,19 +3805,19 @@ proc external_blame {parent_idx {line {}}} {
     global parentlist selectedline currentid
 
     if {$parent_idx > 0} {
-	set base_commit [lindex $parentlist $selectedline [expr {$parent_idx-1}]]
+        set base_commit [lindex $parentlist $selectedline [expr {$parent_idx-1}]]
     } else {
-	set base_commit $currentid
+        set base_commit $currentid
     }
 
     if {$base_commit eq {} || $base_commit eq $nullid || $base_commit eq $nullid2} {
-	error_popup [mc "No such commit"]
-	return
+        error_popup [mc "No such commit"]
+        return
     }
 
     set cmdline [list git gui blame]
     if {$line ne {} && $line > 1} {
-	lappend cmdline "--line=$line"
+        lappend cmdline "--line=$line"
     }
     set f [file join $cdup $flist_menu_file]
     # Unfortunately it seems git gui blame doesn't like
@@ -3825,7 +3825,7 @@ proc external_blame {parent_idx {line {}}} {
     set f [make_relative $f]
     lappend cmdline $base_commit $f
     if {[catch {eval exec $cmdline &} err]} {
-	error_popup "[mc "git gui blame: command failed:"] $err"
+        error_popup "[mc "git gui blame: command failed:"] $err"
     }
 }
 
@@ -3836,61 +3836,61 @@ proc show_line_source {} {
 
     set from_index {}
     if {$cmitmode eq "tree"} {
-	set id $currentid
-	set line [expr {$diff_menu_line - $diff_menu_filebase}]
+        set id $currentid
+        set line [expr {$diff_menu_line - $diff_menu_filebase}]
     } else {
-	set h [find_hunk_blamespec $diff_menu_filebase $diff_menu_line]
-	if {$h eq {}} return
-	set pi [lindex $h 0]
-	if {$pi == 0} {
-	    mark_ctext_line $diff_menu_line
-	    return
-	}
-	incr pi -1
-	if {$currentid eq $nullid} {
-	    if {$pi > 0} {
-		# must be a merge in progress...
-		if {[catch {
-		    # get the last line from .git/MERGE_HEAD
-		    set f [open [file join $gitdir MERGE_HEAD] r]
-		    set id [lindex [split [read $f] "\n"] end-1]
-		    close $f
-		} err]} {
-		    error_popup [mc "Couldn't read merge head: %s" $err]
-		    return
-		}
-	    } elseif {$parents($curview,$currentid) eq $nullid2} {
-		# need to do the blame from the index
-		if {[catch {
-		    set from_index [index_sha1 $flist_menu_file]
-		} err]} {
-		    error_popup [mc "Error reading index: %s" $err]
-		    return
-		}
-	    } else {
-		set id $parents($curview,$currentid)
-	    }
-	} else {
-	    set id [lindex $parents($curview,$currentid) $pi]
-	}
-	set line [lindex $h 1]
+        set h [find_hunk_blamespec $diff_menu_filebase $diff_menu_line]
+        if {$h eq {}} return
+        set pi [lindex $h 0]
+        if {$pi == 0} {
+            mark_ctext_line $diff_menu_line
+            return
+        }
+        incr pi -1
+        if {$currentid eq $nullid} {
+            if {$pi > 0} {
+                # must be a merge in progress...
+                if {[catch {
+                    # get the last line from .git/MERGE_HEAD
+                    set f [open [file join $gitdir MERGE_HEAD] r]
+                    set id [lindex [split [read $f] "\n"] end-1]
+                    close $f
+                } err]} {
+                    error_popup [mc "Couldn't read merge head: %s" $err]
+                    return
+                }
+            } elseif {$parents($curview,$currentid) eq $nullid2} {
+                # need to do the blame from the index
+                if {[catch {
+                    set from_index [index_sha1 $flist_menu_file]
+                } err]} {
+                    error_popup [mc "Error reading index: %s" $err]
+                    return
+                }
+            } else {
+                set id $parents($curview,$currentid)
+            }
+        } else {
+            set id [lindex $parents($curview,$currentid) $pi]
+        }
+        set line [lindex $h 1]
     }
     set blameargs {}
     if {$from_index ne {}} {
-	lappend blameargs | git cat-file blob $from_index
+        lappend blameargs | git cat-file blob $from_index
     }
     lappend blameargs | git blame -p -L$line,+1
     if {$from_index ne {}} {
-	lappend blameargs --contents -
+        lappend blameargs --contents -
     } else {
-	lappend blameargs $id
+        lappend blameargs $id
     }
     lappend blameargs -- [file join $cdup $flist_menu_file]
     if {[catch {
-	set f [open $blameargs r]
+        set f [open $blameargs r]
     } err]} {
-	error_popup [mc "Couldn't start git blame: %s" $err]
-	return
+        error_popup [mc "Couldn't start git blame: %s" $err]
+        return
     }
     nowbusy blaming [mc "Searching"]
     fconfigure $f -blocking 0
@@ -3904,9 +3904,9 @@ proc stopblaming {} {
     global blameinst
 
     if {[info exists blameinst]} {
-	stop_instance $blameinst
-	unset blameinst
-	notbusy blaming
+        stop_instance $blameinst
+        unset blameinst
+        notbusy blaming
     }
 }
 
@@ -3914,18 +3914,18 @@ proc read_line_source {fd inst} {
     global blamestuff curview commfd blameinst nullid nullid2
 
     while {[gets $fd line] >= 0} {
-	lappend blamestuff($inst) $line
+        lappend blamestuff($inst) $line
     }
     if {![eof $fd]} {
-	return 1
+        return 1
     }
     unset commfd($inst)
     unset blameinst
     notbusy blaming
     fconfigure $fd -blocking 1
     if {[catch {close $fd} err]} {
-	error_popup [mc "Error running git blame: %s" $err]
-	return 0
+        error_popup [mc "Error running git blame: %s" $err]
+        return 0
     }
 
     set fname {}
@@ -3933,30 +3933,30 @@ proc read_line_source {fd inst} {
     set id [lindex $line 0]
     set lnum [lindex $line 1]
     if {[string length $id] == 40 && [string is xdigit $id] &&
-	[string is digit -strict $lnum]} {
-	# look for "filename" line
-	foreach l $blamestuff($inst) {
-	    if {[string match "filename *" $l]} {
-		set fname [string range $l 9 end]
-		break
-	    }
-	}
+        [string is digit -strict $lnum]} {
+        # look for "filename" line
+        foreach l $blamestuff($inst) {
+            if {[string match "filename *" $l]} {
+                set fname [string range $l 9 end]
+                break
+            }
+        }
     }
     if {$fname ne {}} {
-	# all looks good, select it
-	if {$id eq $nullid} {
-	    # blame uses all-zeroes to mean not committed,
-	    # which would mean a change in the index
-	    set id $nullid2
-	}
-	if {[commitinview $id $curview]} {
-	    selectline [rowofcommit $id] 1 [list $fname $lnum] 1
-	} else {
-	    error_popup [mc "That line comes from commit %s, \
-			     which is not in this view" [shortids $id]]
-	}
+        # all looks good, select it
+        if {$id eq $nullid} {
+            # blame uses all-zeroes to mean not committed,
+            # which would mean a change in the index
+            set id $nullid2
+        }
+        if {[commitinview $id $curview]} {
+            selectline [rowofcommit $id] 1 [list $fname $lnum] 1
+        } else {
+            error_popup [mc "That line comes from commit %s, \
+                             which is not in this view" [shortids $id]]
+        }
     } else {
-	puts "oops couldn't parse git blame output"
+        puts "oops couldn't parse git blame output"
     }
     return 0
 }
@@ -3965,11 +3965,11 @@ proc read_line_source {fd inst} {
 proc delete_at_eof {f dir} {
     while {[gets $f line] >= 0} {}
     if {[eof $f]} {
-	if {[catch {close $f} err]} {
-	    error_popup "[mc "External diff viewer failed:"] $err"
-	}
-	file delete -force $dir
-	return 0
+        if {[catch {close $f} err]} {
+            error_popup "[mc "External diff viewer failed:"] $err"
+        }
+        file delete -force $dir
+        return 0
     }
     return 1
 }
@@ -3978,13 +3978,13 @@ proc delete_at_eof {f dir} {
 
 proc shellquote {str} {
     if {![string match "*\['\"\\ \t]*" $str]} {
-	return $str
+        return $str
     }
     if {![string match "*\['\"\\]*" $str]} {
-	return "\"$str\""
+        return "\"$str\""
     }
     if {![string match "*'*" $str]} {
-	return "'$str'"
+        return "'$str'"
     }
     return "\"[string map {\" \\\" \\ \\\\} $str]\""
 }
@@ -3992,10 +3992,10 @@ proc shellquote {str} {
 proc shellarglist {l} {
     set str {}
     foreach a $l {
-	if {$str ne {}} {
-	    append str " "
-	}
-	append str [shellquote $a]
+        if {$str ne {}} {
+            append str " "
+        }
+        append str [shellquote $a]
     }
     return $str
 }
@@ -4004,52 +4004,52 @@ proc shelldequote {str} {
     set ret {}
     set used -1
     while {1} {
-	incr used
-	if {![regexp -start $used -indices "\['\"\\\\ \t]" $str first]} {
-	    append ret [string range $str $used end]
-	    set used [string length $str]
-	    break
-	}
-	set first [lindex $first 0]
-	set ch [string index $str $first]
-	if {$first > $used} {
-	    append ret [string range $str $used [expr {$first - 1}]]
-	    set used $first
-	}
-	if {$ch eq " " || $ch eq "\t"} break
-	incr used
-	if {$ch eq "'"} {
-	    set first [string first "'" $str $used]
-	    if {$first < 0} {
-		error "unmatched single-quote"
-	    }
-	    append ret [string range $str $used [expr {$first - 1}]]
-	    set used $first
-	    continue
-	}
-	if {$ch eq "\\"} {
-	    if {$used >= [string length $str]} {
-		error "trailing backslash"
-	    }
-	    append ret [string index $str $used]
-	    continue
-	}
-	# here ch == "\""
-	while {1} {
-	    if {![regexp -start $used -indices "\[\"\\\\]" $str first]} {
-		error "unmatched double-quote"
-	    }
-	    set first [lindex $first 0]
-	    set ch [string index $str $first]
-	    if {$first > $used} {
-		append ret [string range $str $used [expr {$first - 1}]]
-		set used $first
-	    }
-	    if {$ch eq "\""} break
-	    incr used
-	    append ret [string index $str $used]
-	    incr used
-	}
+        incr used
+        if {![regexp -start $used -indices "\['\"\\\\ \t]" $str first]} {
+            append ret [string range $str $used end]
+            set used [string length $str]
+            break
+        }
+        set first [lindex $first 0]
+        set ch [string index $str $first]
+        if {$first > $used} {
+            append ret [string range $str $used [expr {$first - 1}]]
+            set used $first
+        }
+        if {$ch eq " " || $ch eq "\t"} break
+        incr used
+        if {$ch eq "'"} {
+            set first [string first "'" $str $used]
+            if {$first < 0} {
+                error "unmatched single-quote"
+            }
+            append ret [string range $str $used [expr {$first - 1}]]
+            set used $first
+            continue
+        }
+        if {$ch eq "\\"} {
+            if {$used >= [string length $str]} {
+                error "trailing backslash"
+            }
+            append ret [string index $str $used]
+            continue
+        }
+        # here ch == "\""
+        while {1} {
+            if {![regexp -start $used -indices "\[\"\\\\]" $str first]} {
+                error "unmatched double-quote"
+            }
+            set first [lindex $first 0]
+            set ch [string index $str $first]
+            if {$first > $used} {
+                append ret [string range $str $used [expr {$first - 1}]]
+                set used $first
+            }
+            if {$ch eq "\""} break
+            incr used
+            append ret [string index $str $used]
+            incr used
+        }
     }
     return [list $used $ret]
 }
@@ -4057,13 +4057,13 @@ proc shelldequote {str} {
 proc shellsplit {str} {
     set l {}
     while {1} {
-	set str [string trimleft $str]
-	if {$str eq {}} break
-	set dq [shelldequote $str]
-	set n [lindex $dq 0]
-	set word [lindex $dq 1]
-	set str [string range $str $n end]
-	lappend l $word
+        set str [string trimleft $str]
+        if {$str eq {}} break
+        set dq [shelldequote $str]
+        set n [lindex $dq 0]
+        set word [lindex $dq 1]
+        set str [string range $str $n end]
+        lappend l $word
     }
     return $l
 }
@@ -4072,11 +4072,11 @@ proc set_window_title {} {
     global appname curview viewname vrevs
     set rev [mc "All files"]
     if {$curview ne 0} {
-	if {$viewname($curview) eq [mc "Command line"]} {
-	    set rev [string map {"--gitk-symmetric-diff-marker" "--merge"} $vrevs($curview)]
-	} else {
-	    set rev $viewname($curview)
-	}
+        if {$viewname($curview) eq [mc "Command line"]} {
+            set rev [string map {"--gitk-symmetric-diff-marker" "--merge"} $vrevs($curview)]
+        } else {
+            set rev $viewname($curview)
+        }
     }
     wm title . "[reponame]: $rev - $appname"
 }
@@ -4090,8 +4090,8 @@ proc newview {ishighlight} {
     set newishighlight $ishighlight
     set top .gitkview
     if {[winfo exists $top]} {
-	raise $top
-	return
+        raise $top
+        return
     }
     decode_view_opts $nextviewnum $revtreeargs
     set newviewname($nextviewnum) "[mc "View"] $nextviewnum"
@@ -4140,29 +4140,29 @@ proc encode_view_opts {n} {
 
     set rargs [list]
     foreach opt $known_view_options {
-	set patterns [lindex $opt 3]
-	if {$patterns eq {}} continue
-	set pattern [lindex $patterns 0]
+        set patterns [lindex $opt 3]
+        if {$patterns eq {}} continue
+        set pattern [lindex $patterns 0]
 
-	if {[lindex $opt 1] eq "b"} {
-	    set val $newviewopts($n,[lindex $opt 0])
-	    if {$val} {
-		lappend rargs $pattern
-	    }
-	} elseif {[regexp {^r(\d+)$} [lindex $opt 1] type value]} {
-	    regexp {^(.*_)} [lindex $opt 0] uselessvar button_id
-	    set val $newviewopts($n,$button_id)
-	    if {$val eq $value} {
-		lappend rargs $pattern
-	    }
-	} else {
-	    set val $newviewopts($n,[lindex $opt 0])
-	    set val [string trim $val]
-	    if {$val ne {}} {
-		set pfix [string range $pattern 0 end-1]
-		lappend rargs $pfix$val
-	    }
-	}
+        if {[lindex $opt 1] eq "b"} {
+            set val $newviewopts($n,[lindex $opt 0])
+            if {$val} {
+                lappend rargs $pattern
+            }
+        } elseif {[regexp {^r(\d+)$} [lindex $opt 1] type value]} {
+            regexp {^(.*_)} [lindex $opt 0] uselessvar button_id
+            set val $newviewopts($n,$button_id)
+            if {$val eq $value} {
+                lappend rargs $pattern
+            }
+        } else {
+            set val $newviewopts($n,[lindex $opt 0])
+            set val [string trim $val]
+            if {$val ne {}} {
+                set pfix [string range $pattern 0 end-1]
+                lappend rargs $pfix$val
+            }
+        }
     }
     set rargs [concat $rargs [shellsplit $newviewopts($n,refs)]]
     return [concat $rargs [shellsplit $newviewopts($n,args)]]
@@ -4173,59 +4173,59 @@ proc decode_view_opts {n view_args} {
     global known_view_options newviewopts
 
     foreach opt $known_view_options {
-	set id [lindex $opt 0]
-	if {[lindex $opt 1] eq "b"} {
-	    # Checkboxes
-	    set val 0
+        set id [lindex $opt 0]
+        if {[lindex $opt 1] eq "b"} {
+            # Checkboxes
+            set val 0
         } elseif {[regexp {^r(\d+)$} [lindex $opt 1]]} {
-	    # Radiobuttons
-	    regexp {^(.*_)} $id uselessvar id
-	    set val 0
-	} else {
-	    # Text fields
-	    set val {}
-	}
-	set newviewopts($n,$id) $val
+            # Radiobuttons
+            regexp {^(.*_)} $id uselessvar id
+            set val 0
+        } else {
+            # Text fields
+            set val {}
+        }
+        set newviewopts($n,$id) $val
     }
     set oargs [list]
     set refargs [list]
     foreach arg $view_args {
-	if {[regexp -- {^-([0-9]+)$} $arg arg cnt]
-	    && ![info exists found(limit)]} {
-	    set newviewopts($n,limit) $cnt
-	    set found(limit) 1
-	    continue
-	}
-	catch { unset val }
-	foreach opt $known_view_options {
-	    set id [lindex $opt 0]
-	    if {[info exists found($id)]} continue
-	    foreach pattern [lindex $opt 3] {
-		if {![string match $pattern $arg]} continue
-		if {[lindex $opt 1] eq "b"} {
-		    # Check buttons
-		    set val 1
-		} elseif {[regexp {^r(\d+)$} [lindex $opt 1] match num]} {
-		    # Radio buttons
-		    regexp {^(.*_)} $id uselessvar id
-		    set val $num
-		} else {
-		    # Text input fields
-		    set size [string length $pattern]
-		    set val [string range $arg [expr {$size-1}] end]
-		}
-		set newviewopts($n,$id) $val
-		set found($id) 1
-		break
-	    }
-	    if {[info exists val]} break
-	}
-	if {[info exists val]} continue
-	if {[regexp {^-} $arg]} {
-	    lappend oargs $arg
-	} else {
-	    lappend refargs $arg
-	}
+        if {[regexp -- {^-([0-9]+)$} $arg arg cnt]
+            && ![info exists found(limit)]} {
+            set newviewopts($n,limit) $cnt
+            set found(limit) 1
+            continue
+        }
+        catch { unset val }
+        foreach opt $known_view_options {
+            set id [lindex $opt 0]
+            if {[info exists found($id)]} continue
+            foreach pattern [lindex $opt 3] {
+                if {![string match $pattern $arg]} continue
+                if {[lindex $opt 1] eq "b"} {
+                    # Check buttons
+                    set val 1
+                } elseif {[regexp {^r(\d+)$} [lindex $opt 1] match num]} {
+                    # Radio buttons
+                    regexp {^(.*_)} $id uselessvar id
+                    set val $num
+                } else {
+                    # Text input fields
+                    set size [string length $pattern]
+                    set val [string range $arg [expr {$size-1}] end]
+                }
+                set newviewopts($n,$id) $val
+                set found($id) 1
+                break
+            }
+            if {[info exists val]} break
+        }
+        if {[info exists val]} continue
+        if {[regexp {^-} $arg]} {
+            lappend oargs $arg
+        } else {
+            lappend refargs $arg
+        }
     }
     set newviewopts($n,refs) [shellarglist $refargs]
     set newviewopts($n,args) [shellarglist $oargs]
@@ -4235,9 +4235,9 @@ proc edit_or_newview {} {
     global curview
 
     if {$curview > 0} {
-	editview
+        editview
     } else {
-	newview 0
+        newview 0
     }
 }
 
@@ -4248,8 +4248,8 @@ proc editview {} {
 
     set top .gitkvedit-$curview
     if {[winfo exists $top]} {
-	raise $top
-	return
+        raise $top
+        return
     }
     decode_view_opts $curview $viewargs($curview)
     set newviewname($curview)      $viewname($curview)
@@ -4279,66 +4279,66 @@ proc vieweditor {top n title} {
     set cexpand 0
     set cnt 0
     foreach opt $known_view_options {
-	set id [lindex $opt 0]
-	set type [lindex $opt 1]
-	set flags [lindex $opt 2]
-	set title [eval [lindex $opt 4]]
-	set lxpad 0
+        set id [lindex $opt 0]
+        set type [lindex $opt 1]
+        set flags [lindex $opt 2]
+        set title [eval [lindex $opt 4]]
+        set lxpad 0
 
-	if {$flags eq "+" || $flags eq "*"} {
-	    set cframe $top.fr$cnt
-	    incr cnt
-	    ${NS}::frame $cframe
-	    pack $cframe -in $top -fill x -pady 3 -padx 3
-	    set cexpand [expr {$flags eq "*"}]
+        if {$flags eq "+" || $flags eq "*"} {
+            set cframe $top.fr$cnt
+            incr cnt
+            ${NS}::frame $cframe
+            pack $cframe -in $top -fill x -pady 3 -padx 3
+            set cexpand [expr {$flags eq "*"}]
         } elseif {$flags eq ".." || $flags eq "*."} {
-	    set cframe $top.fr$cnt
-	    incr cnt
-	    ${NS}::frame $cframe
-	    pack $cframe -in $top -fill x -pady 3 -padx [list 15 3]
-	    set cexpand [expr {$flags eq "*."}]
-	} else {
-	    set lxpad 5
-	}
+            set cframe $top.fr$cnt
+            incr cnt
+            ${NS}::frame $cframe
+            pack $cframe -in $top -fill x -pady 3 -padx [list 15 3]
+            set cexpand [expr {$flags eq "*."}]
+        } else {
+            set lxpad 5
+        }
 
-	if {$type eq "l"} {
+        if {$type eq "l"} {
             ${NS}::label $cframe.l_$id -text $title
             pack $cframe.l_$id -in $cframe -side left -pady [list 3 0] -anchor w
-	} elseif {$type eq "b"} {
-	    ${NS}::checkbutton $cframe.c_$id -text $title -variable newviewopts($n,$id)
-	    pack $cframe.c_$id -in $cframe -side left \
-		-padx [list $lxpad 0] -expand $cexpand -anchor w
-	} elseif {[regexp {^r(\d+)$} $type type sz]} {
-	    regexp {^(.*_)} $id uselessvar button_id
-	    ${NS}::radiobutton $cframe.c_$id -text $title -variable newviewopts($n,$button_id) -value $sz
-	    pack $cframe.c_$id -in $cframe -side left \
-		-padx [list $lxpad 0] -expand $cexpand -anchor w
-	} elseif {[regexp {^t(\d+)$} $type type sz]} {
-	    ${NS}::label $cframe.l_$id -text $title
-	    ${NS}::entry $cframe.e_$id -width $sz -background $bgcolor \
-		-textvariable newviewopts($n,$id)
-	    pack $cframe.l_$id -in $cframe -side left -padx [list $lxpad 0]
-	    pack $cframe.e_$id -in $cframe -side left -expand 1 -fill x
-	} elseif {[regexp {^t(\d+)=$} $type type sz]} {
-	    ${NS}::label $cframe.l_$id -text $title
-	    ${NS}::entry $cframe.e_$id -width $sz -background $bgcolor \
-		-textvariable newviewopts($n,$id)
-	    pack $cframe.l_$id -in $cframe -side top -pady [list 3 0] -anchor w
-	    pack $cframe.e_$id -in $cframe -side top -fill x
-	} elseif {$type eq "path"} {
-	    ${NS}::label $top.l -text $title
-	    pack $top.l -in $top -side top -pady [list 3 0] -anchor w -padx 3
-	    text $top.t -width 40 -height 5 -background $bgcolor
-	    if {[info exists viewfiles($n)]} {
-		foreach f $viewfiles($n) {
-		    $top.t insert end $f
-		    $top.t insert end "\n"
-		}
-		$top.t delete {end - 1c} end
-		$top.t mark set insert 0.0
-	    }
-	    pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3
-	}
+        } elseif {$type eq "b"} {
+            ${NS}::checkbutton $cframe.c_$id -text $title -variable newviewopts($n,$id)
+            pack $cframe.c_$id -in $cframe -side left \
+                -padx [list $lxpad 0] -expand $cexpand -anchor w
+        } elseif {[regexp {^r(\d+)$} $type type sz]} {
+            regexp {^(.*_)} $id uselessvar button_id
+            ${NS}::radiobutton $cframe.c_$id -text $title -variable newviewopts($n,$button_id) -value $sz
+            pack $cframe.c_$id -in $cframe -side left \
+                -padx [list $lxpad 0] -expand $cexpand -anchor w
+        } elseif {[regexp {^t(\d+)$} $type type sz]} {
+            ${NS}::label $cframe.l_$id -text $title
+            ${NS}::entry $cframe.e_$id -width $sz -background $bgcolor \
+                -textvariable newviewopts($n,$id)
+            pack $cframe.l_$id -in $cframe -side left -padx [list $lxpad 0]
+            pack $cframe.e_$id -in $cframe -side left -expand 1 -fill x
+        } elseif {[regexp {^t(\d+)=$} $type type sz]} {
+            ${NS}::label $cframe.l_$id -text $title
+            ${NS}::entry $cframe.e_$id -width $sz -background $bgcolor \
+                -textvariable newviewopts($n,$id)
+            pack $cframe.l_$id -in $cframe -side top -pady [list 3 0] -anchor w
+            pack $cframe.e_$id -in $cframe -side top -fill x
+        } elseif {$type eq "path"} {
+            ${NS}::label $top.l -text $title
+            pack $top.l -in $top -side top -pady [list 3 0] -anchor w -padx 3
+            text $top.t -width 40 -height 5 -background $bgcolor
+            if {[info exists viewfiles($n)]} {
+                foreach f $viewfiles($n) {
+                    $top.t insert end $f
+                    $top.t insert end "\n"
+                }
+                $top.t delete {end - 1c} end
+                $top.t mark set insert 0.0
+            }
+            pack $top.t -in $top -side top -pady [list 0 5] -fill both -expand 1 -padx 3
+        }
     }
 
     ${NS}::frame $top.buts
@@ -4359,10 +4359,10 @@ proc vieweditor {top n title} {
 proc doviewmenu {m first cmd op argv} {
     set nmenu [$m index end]
     for {set i $first} {$i <= $nmenu} {incr i} {
-	if {[$m entrycget $i -command] eq $cmd} {
-	    eval $m $op $i $argv
-	    break
-	}
+        if {[$m entrycget $i -command] eq $cmd} {
+            eval $m $op $i $argv
+            break
+        }
     }
 }
 
@@ -4379,53 +4379,53 @@ proc newviewok {top n {apply 0}} {
     global viewargs viewargscmd newviewopts viewhlmenu
 
     if {[catch {
-	set newargs [encode_view_opts $n]
+        set newargs [encode_view_opts $n]
     } err]} {
-	error_popup "[mc "Error in commit selection arguments:"] $err" $top
-	return
+        error_popup "[mc "Error in commit selection arguments:"] $err" $top
+        return
     }
     set files {}
     foreach f [split [$top.t get 0.0 end] "\n"] {
-	set ft [string trim $f]
-	if {$ft ne {}} {
-	    lappend files $ft
-	}
+        set ft [string trim $f]
+        if {$ft ne {}} {
+            lappend files $ft
+        }
     }
     if {![info exists viewfiles($n)]} {
-	# creating a new view
-	incr nextviewnum
-	set viewname($n) $newviewname($n)
-	set viewperm($n) $newviewopts($n,perm)
-	set viewchanged($n) 1
-	set viewfiles($n) $files
-	set viewargs($n) $newargs
-	set viewargscmd($n) $newviewopts($n,cmd)
-	addviewmenu $n
-	if {!$newishighlight} {
-	    run showview $n
-	} else {
-	    run addvhighlight $n
-	}
+        # creating a new view
+        incr nextviewnum
+        set viewname($n) $newviewname($n)
+        set viewperm($n) $newviewopts($n,perm)
+        set viewchanged($n) 1
+        set viewfiles($n) $files
+        set viewargs($n) $newargs
+        set viewargscmd($n) $newviewopts($n,cmd)
+        addviewmenu $n
+        if {!$newishighlight} {
+            run showview $n
+        } else {
+            run addvhighlight $n
+        }
     } else {
-	# editing an existing view
-	set viewperm($n) $newviewopts($n,perm)
-	set viewchanged($n) 1
-	if {$newviewname($n) ne $viewname($n)} {
-	    set viewname($n) $newviewname($n)
-	    doviewmenu .bar.view 5 [list showview $n] \
-		entryconf [list -label $viewname($n)]
-	    # doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
-		# entryconf [list -label $viewname($n) -value $viewname($n)]
-	}
-	if {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \
-		$newviewopts($n,cmd) ne $viewargscmd($n)} {
-	    set viewfiles($n) $files
-	    set viewargs($n) $newargs
-	    set viewargscmd($n) $newviewopts($n,cmd)
-	    if {$curview == $n} {
-		run reloadcommits
-	    }
-	}
+        # editing an existing view
+        set viewperm($n) $newviewopts($n,perm)
+        set viewchanged($n) 1
+        if {$newviewname($n) ne $viewname($n)} {
+            set viewname($n) $newviewname($n)
+            doviewmenu .bar.view 5 [list showview $n] \
+                entryconf [list -label $viewname($n)]
+            # doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
+                # entryconf [list -label $viewname($n) -value $viewname($n)]
+        }
+        if {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \
+                $newviewopts($n,cmd) ne $viewargscmd($n)} {
+            set viewfiles($n) $files
+            set viewargs($n) $newargs
+            set viewargscmd($n) $newviewopts($n,cmd)
+            if {$curview == $n} {
+                run reloadcommits
+            }
+        }
     }
     if {$apply} return
     catch {destroy $top}
@@ -4436,8 +4436,8 @@ proc delview {} {
 
     if {$curview == 0} return
     if {[info exists hlview] && $hlview == $curview} {
-	set selectedhlview [mc "None"]
-	unset hlview
+        set selectedhlview [mc "None"]
+        unset hlview
     }
     allviewmenus $curview delete
     set viewperm($curview) 0
@@ -4449,7 +4449,7 @@ proc addviewmenu {n} {
     global viewname viewhlmenu
 
     .bar.view add radiobutton -label $viewname($n) \
-	-command [list showview $n] -variable selectedview -value $n
+        -command [list showview $n] -variable selectedview -value $n
     #$viewhlmenu add radiobutton -label $viewname($n) \
     #	-command [list addvhighlight $n] -variable selectedhlview
 }
@@ -4474,22 +4474,22 @@ proc showview {n} {
     set ybot [expr {[lindex $span 1] * $ymax}]
     set yscreen [expr {($ybot - $ytop) / 2}]
     if {$selectedline ne {}} {
-	set selid $currentid
-	set y [yc $selectedline]
-	if {$ytop < $y && $y < $ybot} {
-	    set yscreen [expr {$y - $ytop}]
-	}
+        set selid $currentid
+        set y [yc $selectedline]
+        if {$ytop < $y && $y < $ybot} {
+            set yscreen [expr {$y - $ytop}]
+        }
     } elseif {[info exists pending_select]} {
-	set selid $pending_select
-	unset pending_select
+        set selid $pending_select
+        unset pending_select
     }
     unselectline
     normalline
     unset -nocomplain treediffs
     clear_display
     if {[info exists hlview] && $hlview == $n} {
-	unset hlview
-	set selectedhlview [mc "None"]
+        unset hlview
+        set selectedhlview [mc "None"]
     }
     unset -nocomplain commitinterest
     unset -nocomplain cached_commitrow
@@ -4502,8 +4502,8 @@ proc showview {n} {
 
     run refill_reflist
     if {![info exists viewcomplete($n)]} {
-	getcommits $selid
-	return
+        getcommits $selid
+        return
     }
 
     set displayorder {}
@@ -4523,39 +4523,39 @@ proc showview {n} {
     set yf 0
     set row {}
     if {$selid ne {} && [commitinview $selid $n]} {
-	set row [rowofcommit $selid]
-	# try to get the selected row in the same position on the screen
-	set ymax [lindex [$canv cget -scrollregion] 3]
-	set ytop [expr {[yc $row] - $yscreen}]
-	if {$ytop < 0} {
-	    set ytop 0
-	}
-	set yf [expr {$ytop * 1.0 / $ymax}]
+        set row [rowofcommit $selid]
+        # try to get the selected row in the same position on the screen
+        set ymax [lindex [$canv cget -scrollregion] 3]
+        set ytop [expr {[yc $row] - $yscreen}]
+        if {$ytop < 0} {
+            set ytop 0
+        }
+        set yf [expr {$ytop * 1.0 / $ymax}]
     }
     allcanvs yview moveto $yf
     drawvisible
     if {$row ne {}} {
-	selectline $row 0
+        selectline $row 0
     } elseif {!$viewcomplete($n)} {
-	reset_pending_select $selid
+        reset_pending_select $selid
     } else {
-	reset_pending_select {}
+        reset_pending_select {}
 
-	if {[commitinview $pending_select $curview]} {
-	    selectline [rowofcommit $pending_select] 1
-	} else {
-	    set row [first_real_row]
-	    if {$row < $numcommits} {
-		selectline $row 0
-	    }
-	}
+        if {[commitinview $pending_select $curview]} {
+            selectline [rowofcommit $pending_select] 1
+        } else {
+            set row [first_real_row]
+            if {$row < $numcommits} {
+                selectline $row 0
+            }
+        }
     }
     if {!$viewcomplete($n)} {
-	if {$numcommits == 0} {
-	    show_status [mc "Reading commits..."]
-	}
+        if {$numcommits == 0} {
+            show_status [mc "Reading commits..."]
+        }
     } elseif {$numcommits == 0} {
-	show_status [mc "No commits selected"]
+        show_status [mc "No commits selected"]
     }
     set_window_title
 }
@@ -4566,16 +4566,16 @@ proc ishighlighted {id} {
     global vhighlights fhighlights nhighlights rhighlights
 
     if {[info exists nhighlights($id)] && $nhighlights($id) > 0} {
-	return $nhighlights($id)
+        return $nhighlights($id)
     }
     if {[info exists vhighlights($id)] && $vhighlights($id) > 0} {
-	return $vhighlights($id)
+        return $vhighlights($id)
     }
     if {[info exists fhighlights($id)] && $fhighlights($id) > 0} {
-	return $fhighlights($id)
+        return $fhighlights($id)
     }
     if {[info exists rhighlights($id)] && $rhighlights($id) > 0} {
-	return $rhighlights($id)
+        return $rhighlights($id)
     }
     return 0
 }
@@ -4588,14 +4588,14 @@ proc bolden {id font} {
     lappend boldids $id
     $canv itemconf $linehtag($id) -font $font
     if {[info exists currentid] && $id eq $currentid} {
-	$canv delete secsel
-	set t [eval $canv create rect [$canv bbox $linehtag($id)] \
-		   -outline {{}} -tags secsel \
-		   -fill [$canv cget -selectbackground]]
-	$canv lower $t
+        $canv delete secsel
+        set t [eval $canv create rect [$canv bbox $linehtag($id)] \
+                   -outline {{}} -tags secsel \
+                   -fill [$canv cget -selectbackground]]
+        $canv lower $t
     }
     if {[info exists markedid] && $id eq $markedid} {
-	make_idmark $id
+        make_idmark $id
     }
 }
 
@@ -4606,11 +4606,11 @@ proc bolden_name {id font} {
     lappend boldnameids $id
     $canv2 itemconf $linentag($id) -font $font
     if {[info exists currentid] && $id eq $currentid} {
-	$canv2 delete secsel
-	set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] \
-		   -outline {{}} -tags secsel \
-		   -fill [$canv2 cget -selectbackground]]
-	$canv2 lower $t
+        $canv2 delete secsel
+        set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] \
+                   -outline {{}} -tags secsel \
+                   -fill [$canv2 cget -selectbackground]]
+        $canv2 lower $t
     }
 }
 
@@ -4619,11 +4619,11 @@ proc unbolden {} {
 
     set stillbold {}
     foreach id $boldids {
-	if {![ishighlighted $id]} {
-	    bolden $id mainfont
-	} else {
-	    lappend stillbold $id
-	}
+        if {![ishighlighted $id]} {
+            bolden $id mainfont
+        } else {
+            lappend stillbold $id
+        }
     }
     set boldids $stillbold
 }
@@ -4632,15 +4632,15 @@ proc addvhighlight {n} {
     global hlview viewcomplete curview vhl_done commitidx
 
     if {[info exists hlview]} {
-	delvhighlight
+        delvhighlight
     }
     set hlview $n
     if {$n != $curview && ![info exists viewcomplete($n)]} {
-	start_rev_list $n
+        start_rev_list $n
     }
     set vhl_done $commitidx($hlview)
     if {$vhl_done > 0} {
-	drawvisible
+        drawvisible
     }
 }
 
@@ -4661,16 +4661,16 @@ proc vhighlightmore {} {
     set r0 [lindex $vr 0]
     set r1 [lindex $vr 1]
     for {set i $vhl_done} {$i < $max} {incr i} {
-	set id [commitonrow $i $hlview]
-	if {[commitinview $id $curview]} {
-	    set row [rowofcommit $id]
-	    if {$r0 <= $row && $row <= $r1} {
-		if {![highlighted $row]} {
-		    bolden $id mainfontbold
-		}
-		set vhighlights($id) 1
-	    }
-	}
+        set id [commitonrow $i $hlview]
+        if {[commitinview $id $curview]} {
+            set row [rowofcommit $id]
+            if {$r0 <= $row && $row <= $r1} {
+                if {![highlighted $row]} {
+                    bolden $id mainfontbold
+                }
+                set vhighlights($id) 1
+            }
+        }
     }
     set vhl_done $max
     return 0
@@ -4680,12 +4680,12 @@ proc askvhighlight {row id} {
     global hlview vhighlights iddrawn
 
     if {[commitinview $id $hlview]} {
-	if {[info exists iddrawn($id)] && ![ishighlighted $id]} {
-	    bolden $id mainfontbold
-	}
-	set vhighlights($id) 1
+        if {[info exists iddrawn($id)] && ![ishighlighted $id]} {
+            bolden $id mainfontbold
+        }
+        set vhighlights($id) 1
     } else {
-	set vhighlights($id) 0
+        set vhighlights($id) 0
     }
 }
 
@@ -4694,18 +4694,18 @@ proc hfiles_change {} {
     global highlight_paths
 
     if {[info exists filehighlight]} {
-	# delete previous highlights
-	catch {close $filehighlight}
-	unset filehighlight
-	unset -nocomplain fhighlights
-	unbolden
-	unhighlight_filelist
+        # delete previous highlights
+        catch {close $filehighlight}
+        unset filehighlight
+        unset -nocomplain fhighlights
+        unbolden
+        unhighlight_filelist
     }
     set highlight_paths {}
     after cancel do_file_hl $fh_serial
     incr fh_serial
     if {$highlight_files ne {}} {
-	after 300 do_file_hl $fh_serial
+        after 300 do_file_hl $fh_serial
     }
 }
 
@@ -4714,21 +4714,21 @@ proc gdttype_change {name ix op} {
 
     stopfinding
     if {$findstring ne {}} {
-	if {$gdttype eq [mc "containing:"]} {
-	    if {$highlight_files ne {}} {
-		set highlight_files {}
-		hfiles_change
-	    }
-	    findcom_change
-	} else {
-	    if {$findpattern ne {}} {
-		set findpattern {}
-		findcom_change
-	    }
-	    set highlight_files $findstring
-	    hfiles_change
-	}
-	drawvisible
+        if {$gdttype eq [mc "containing:"]} {
+            if {$highlight_files ne {}} {
+                set highlight_files {}
+                hfiles_change
+            }
+            findcom_change
+        } else {
+            if {$findpattern ne {}} {
+                set findpattern {}
+                findcom_change
+            }
+            set highlight_files $findstring
+            hfiles_change
+        }
+        drawvisible
     }
     # enable/disable findtype/findloc menus too
 }
@@ -4738,12 +4738,12 @@ proc find_change {name ix op} {
 
     stopfinding
     if {$gdttype eq [mc "containing:"]} {
-	findcom_change
+        findcom_change
     } else {
-	if {$highlight_files ne $findstring} {
-	    set highlight_files $findstring
-	    hfiles_change
-	}
+        if {$highlight_files ne $findstring} {
+            set highlight_files $findstring
+            hfiles_change
+        }
     }
     drawvisible
 }
@@ -4755,33 +4755,33 @@ proc findcom_change args {
     stopfinding
     # delete previous highlights, if any
     foreach id $boldnameids {
-	bolden_name $id mainfont
+        bolden_name $id mainfont
     }
     set boldnameids {}
     unset -nocomplain nhighlights
     unbolden
     unmarkmatches
     if {$gdttype ne [mc "containing:"] || $findstring eq {}} {
-	set findpattern {}
+        set findpattern {}
     } elseif {$findtype eq [mc "Regexp"]} {
-	set findpattern $findstring
+        set findpattern $findstring
     } else {
-	set e [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} \
-		   $findstring]
-	set findpattern "*$e*"
+        set e [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} \
+                   $findstring]
+        set findpattern "*$e*"
     }
 }
 
 proc makepatterns {l} {
     set ret {}
     foreach e $l {
-	set ee [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} $e]
-	if {[string index $ee end] eq "/"} {
-	    lappend ret "$ee*"
-	} else {
-	    lappend ret $ee
-	    lappend ret "$ee/*"
-	}
+        set ee [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} $e]
+        if {[string index $ee end] eq "/"} {
+            lappend ret "$ee*"
+        } else {
+            lappend ret $ee
+            lappend ret "$ee/*"
+        }
     }
     return $ret
 }
@@ -4791,26 +4791,26 @@ proc do_file_hl {serial} {
     global cdup findtype
 
     if {$gdttype eq [mc "touching paths:"]} {
-	# If "exact" match then convert backslashes to forward slashes.
-	# Most useful to support Windows-flavoured file paths.
-	if {$findtype eq [mc "Exact"]} {
-	    set highlight_files [string map {"\\" "/"} $highlight_files]
-	}
-	if {[catch {set paths [shellsplit $highlight_files]}]} return
-	set highlight_paths [makepatterns $paths]
-	highlight_filelist
-	set relative_paths {}
-	foreach path $paths {
-	    lappend relative_paths [file join $cdup $path]
-	}
-	set gdtargs [concat -- $relative_paths]
+        # If "exact" match then convert backslashes to forward slashes.
+        # Most useful to support Windows-flavoured file paths.
+        if {$findtype eq [mc "Exact"]} {
+            set highlight_files [string map {"\\" "/"} $highlight_files]
+        }
+        if {[catch {set paths [shellsplit $highlight_files]}]} return
+        set highlight_paths [makepatterns $paths]
+        highlight_filelist
+        set relative_paths {}
+        foreach path $paths {
+            lappend relative_paths [file join $cdup $path]
+        }
+        set gdtargs [concat -- $relative_paths]
     } elseif {$gdttype eq [mc "adding/removing string:"]} {
-	set gdtargs [list "-S$highlight_files"]
+        set gdtargs [list "-S$highlight_files"]
     } elseif {$gdttype eq [mc "changing lines matching:"]} {
-	set gdtargs [list "-G$highlight_files"]
+        set gdtargs [list "-G$highlight_files"]
     } else {
-	# must be "containing:", i.e. we're searching commit info
-	return
+        # must be "containing:", i.e. we're searching commit info
+        return
     }
     set cmd [concat | git diff-tree -r -s --stdin $gdtargs]
     set filehighlight [open $cmd r+]
@@ -4825,9 +4825,9 @@ proc flushhighlights {} {
     global filehighlight fhl_list
 
     if {[info exists filehighlight]} {
-	lappend fhl_list {}
-	puts $filehighlight ""
-	flush $filehighlight
+        lappend fhl_list {}
+        puts $filehighlight ""
+        flush $filehighlight
     }
 }
 
@@ -4844,34 +4844,34 @@ proc readfhighlight {} {
     global fhl_list find_dirn
 
     if {![info exists filehighlight]} {
-	return 0
+        return 0
     }
     set nr 0
     while {[incr nr] <= 100 && [gets $filehighlight line] >= 0} {
-	set line [string trim $line]
-	set i [lsearch -exact $fhl_list $line]
-	if {$i < 0} continue
-	for {set j 0} {$j < $i} {incr j} {
-	    set id [lindex $fhl_list $j]
-	    set fhighlights($id) 0
-	}
-	set fhl_list [lrange $fhl_list [expr {$i+1}] end]
-	if {$line eq {}} continue
-	if {![commitinview $line $curview]} continue
-	if {[info exists iddrawn($line)] && ![ishighlighted $line]} {
-	    bolden $line mainfontbold
-	}
-	set fhighlights($line) 1
+        set line [string trim $line]
+        set i [lsearch -exact $fhl_list $line]
+        if {$i < 0} continue
+        for {set j 0} {$j < $i} {incr j} {
+            set id [lindex $fhl_list $j]
+            set fhighlights($id) 0
+        }
+        set fhl_list [lrange $fhl_list [expr {$i+1}] end]
+        if {$line eq {}} continue
+        if {![commitinview $line $curview]} continue
+        if {[info exists iddrawn($line)] && ![ishighlighted $line]} {
+            bolden $line mainfontbold
+        }
+        set fhighlights($line) 1
     }
     if {[eof $filehighlight]} {
-	# strange...
-	puts "oops, git diff-tree died"
-	catch {close $filehighlight}
-	unset filehighlight
-	return 0
+        # strange...
+        puts "oops, git diff-tree died"
+        catch {close $filehighlight}
+        unset filehighlight
+        return 0
     }
     if {[info exists find_dirn]} {
-	run findmore
+        run findmore
     }
     return 1
 }
@@ -4880,11 +4880,11 @@ proc doesmatch {f} {
     global findtype findpattern
 
     if {$findtype eq [mc "Regexp"]} {
-	return [regexp $findpattern $f]
+        return [regexp $findpattern $f]
     } elseif {$findtype eq [mc "IgnCase"]} {
-	return [string match -nocase $findpattern $f]
+        return [string match -nocase $findpattern $f]
     } else {
-	return [string match $findpattern $f]
+        return [string match $findpattern $f]
     }
 }
 
@@ -4894,32 +4894,32 @@ proc askfindhighlight {row id} {
     global markingmatches
 
     if {![info exists commitinfo($id)]} {
-	getcommit $id
+        getcommit $id
     }
     set info $commitinfo($id)
     set isbold 0
     set fldtypes [list [mc Headline] [mc Author] "" [mc Committer] "" [mc Comments]]
     foreach f $info ty $fldtypes {
-	if {$ty eq ""} continue
-	if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
-	    [doesmatch $f]} {
-	    if {$ty eq [mc "Author"]} {
-		set isbold 2
-		break
-	    }
-	    set isbold 1
-	}
+        if {$ty eq ""} continue
+        if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
+            [doesmatch $f]} {
+            if {$ty eq [mc "Author"]} {
+                set isbold 2
+                break
+            }
+            set isbold 1
+        }
     }
     if {$isbold && [info exists iddrawn($id)]} {
-	if {![ishighlighted $id]} {
-	    bolden $id mainfontbold
-	    if {$isbold > 1} {
-		bolden_name $id mainfontbold
-	    }
-	}
-	if {$markingmatches} {
-	    markrowmatches $row $id
-	}
+        if {![ishighlighted $id]} {
+            bolden $id mainfontbold
+            if {$isbold > 1} {
+                bolden_name $id mainfontbold
+            }
+        }
+        if {$markingmatches} {
+            markrowmatches $row $id
+        }
     }
     set nhighlights($id) $isbold
 }
@@ -4932,18 +4932,18 @@ proc markrowmatches {row id} {
     $canv delete match$row
     $canv2 delete match$row
     if {$findloc eq [mc "All fields"] || $findloc eq [mc "Headline"]} {
-	set m [findmatches $headline]
-	if {$m ne {}} {
-	    markmatches $canv $row $headline $linehtag($id) $m \
-		[$canv itemcget $linehtag($id) -font] $row
-	}
+        set m [findmatches $headline]
+        if {$m ne {}} {
+            markmatches $canv $row $headline $linehtag($id) $m \
+                [$canv itemcget $linehtag($id) -font] $row
+        }
     }
     if {$findloc eq [mc "All fields"] || $findloc eq [mc "Author"]} {
-	set m [findmatches $author]
-	if {$m ne {}} {
-	    markmatches $canv2 $row $author $linentag($id) $m \
-		[$canv2 itemcget $linentag($id) -font] $row
-	}
+        set m [findmatches $author]
+        if {$m ne {}} {
+            markmatches $canv2 $row $author $linentag($id) $m \
+                [$canv2 itemcget $linentag($id) -font] $row
+        }
     }
 }
 
@@ -4952,7 +4952,7 @@ proc vrel_change {name ix op} {
 
     rhighlight_none
     if {$highlight_related ne [mc "None"]} {
-	run drawvisible
+        run drawvisible
     }
 }
 
@@ -4966,8 +4966,8 @@ proc rhighlight_sel {a} {
     unset -nocomplain ancestor
     set anc_todo [list $a]
     if {$highlight_related ne [mc "None"]} {
-	rhighlight_none
-	run drawvisible
+        rhighlight_none
+        run drawvisible
     }
 }
 
@@ -4987,24 +4987,24 @@ proc is_descendent {a} {
     set leftover {}
     set done 0
     for {set i 0} {$i < [llength $todo]} {incr i} {
-	set do [lindex $todo $i]
-	if {[rowofcommit $do] < $la} {
-	    lappend leftover $do
-	    continue
-	}
-	foreach nk $children($v,$do) {
-	    if {![info exists descendent($nk)]} {
-		set descendent($nk) 1
-		lappend todo $nk
-		if {$nk eq $a} {
-		    set done 1
-		}
-	    }
-	}
-	if {$done} {
-	    set desc_todo [concat $leftover [lrange $todo [expr {$i+1}] end]]
-	    return
-	}
+        set do [lindex $todo $i]
+        if {[rowofcommit $do] < $la} {
+            lappend leftover $do
+            continue
+        }
+        foreach nk $children($v,$do) {
+            if {![info exists descendent($nk)]} {
+                set descendent($nk) 1
+                lappend todo $nk
+                if {$nk eq $a} {
+                    set done 1
+                }
+            }
+        }
+        if {$done} {
+            set desc_todo [concat $leftover [lrange $todo [expr {$i+1}] end]]
+            return
+        }
     }
     set descendent($a) 0
     set desc_todo $leftover
@@ -5019,24 +5019,24 @@ proc is_ancestor {a} {
     set leftover {}
     set done 0
     for {set i 0} {$i < [llength $todo]} {incr i} {
-	set do [lindex $todo $i]
-	if {![commitinview $do $v] || [rowofcommit $do] > $la} {
-	    lappend leftover $do
-	    continue
-	}
-	foreach np $parents($v,$do) {
-	    if {![info exists ancestor($np)]} {
-		set ancestor($np) 1
-		lappend todo $np
-		if {$np eq $a} {
-		    set done 1
-		}
-	    }
-	}
-	if {$done} {
-	    set anc_todo [concat $leftover [lrange $todo [expr {$i+1}] end]]
-	    return
-	}
+        set do [lindex $todo $i]
+        if {![commitinview $do $v] || [rowofcommit $do] > $la} {
+            lappend leftover $do
+            continue
+        }
+        foreach np $parents($v,$do) {
+            if {![info exists ancestor($np)]} {
+                set ancestor($np) 1
+                lappend todo $np
+                if {$np eq $a} {
+                    set done 1
+                }
+            }
+        }
+        if {$done} {
+            set anc_todo [concat $leftover [lrange $todo [expr {$i+1}] end]]
+            return
+        }
     }
     set ancestor($a) 0
     set anc_todo $leftover
@@ -5049,26 +5049,26 @@ proc askrelhighlight {row id} {
     if {$selectedline eq {}} return
     set isbold 0
     if {$highlight_related eq [mc "Descendant"] ||
-	$highlight_related eq [mc "Not descendant"]} {
-	if {![info exists descendent($id)]} {
-	    is_descendent $id
-	}
-	if {$descendent($id) == ($highlight_related eq [mc "Descendant"])} {
-	    set isbold 1
-	}
+        $highlight_related eq [mc "Not descendant"]} {
+        if {![info exists descendent($id)]} {
+            is_descendent $id
+        }
+        if {$descendent($id) == ($highlight_related eq [mc "Descendant"])} {
+            set isbold 1
+        }
     } elseif {$highlight_related eq [mc "Ancestor"] ||
-	      $highlight_related eq [mc "Not ancestor"]} {
-	if {![info exists ancestor($id)]} {
-	    is_ancestor $id
-	}
-	if {$ancestor($id) == ($highlight_related eq [mc "Ancestor"])} {
-	    set isbold 1
-	}
+              $highlight_related eq [mc "Not ancestor"]} {
+        if {![info exists ancestor($id)]} {
+            is_ancestor $id
+        }
+        if {$ancestor($id) == ($highlight_related eq [mc "Ancestor"])} {
+            set isbold 1
+        }
     }
     if {[info exists iddrawn($id)]} {
-	if {$isbold && ![ishighlighted $id]} {
-	    bolden $id mainfontbold
-	}
+        if {$isbold && ![ishighlighted $id]} {
+            bolden $id mainfontbold
+        }
     }
     set rhighlights($id) $isbold
 }
@@ -5078,13 +5078,13 @@ proc askrelhighlight {row id} {
 proc shortids {ids} {
     set res {}
     foreach id $ids {
-	if {[llength $id] > 1} {
-	    lappend res [shortids $id]
-	} elseif {[regexp {^[0-9a-f]{40}$} $id]} {
-	    lappend res [string range $id 0 7]
-	} else {
-	    lappend res $id
-	}
+        if {[llength $id] > 1} {
+            lappend res [shortids $id]
+        } elseif {[regexp {^[0-9a-f]{40}$} $id]} {
+            lappend res [string range $id 0 7]
+        } else {
+            lappend res $id
+        }
     }
     return $res
 }
@@ -5093,10 +5093,10 @@ proc ntimes {n o} {
     set ret {}
     set o [list $o]
     for {set mask 1} {$mask <= $n} {incr mask $mask} {
-	if {($n & $mask) != 0} {
-	    set ret [concat $ret $o]
-	}
-	set o [concat $o $o]
+        if {($n & $mask) != 0} {
+            set ret [concat $ret $o]
+        }
+        set o [concat $o $o]
     }
     return $ret
 }
@@ -5106,41 +5106,41 @@ proc ordertoken {id} {
     global nullid nullid2
 
     if {[info exists ordertok($id)]} {
-	return $ordertok($id)
+        return $ordertok($id)
     }
     set origid $id
     set todo {}
     while {1} {
-	if {[info exists varcid($curview,$id)]} {
-	    set a $varcid($curview,$id)
-	    set p [lindex $varcstart($curview) $a]
-	} else {
-	    set p [lindex $children($curview,$id) 0]
-	}
-	if {[info exists ordertok($p)]} {
-	    set tok $ordertok($p)
-	    break
-	}
-	set id [first_real_child $curview,$p]
-	if {$id eq {}} {
-	    # it's a root
-	    set tok [lindex $varctok($curview) $varcid($curview,$p)]
-	    break
-	}
-	if {[llength $parents($curview,$id)] == 1} {
-	    lappend todo [list $p {}]
-	} else {
-	    set j [lsearch -exact $parents($curview,$id) $p]
-	    if {$j < 0} {
-		puts "oops didn't find [shortids $p] in parents of [shortids $id]"
-	    }
-	    lappend todo [list $p [strrep $j]]
-	}
+        if {[info exists varcid($curview,$id)]} {
+            set a $varcid($curview,$id)
+            set p [lindex $varcstart($curview) $a]
+        } else {
+            set p [lindex $children($curview,$id) 0]
+        }
+        if {[info exists ordertok($p)]} {
+            set tok $ordertok($p)
+            break
+        }
+        set id [first_real_child $curview,$p]
+        if {$id eq {}} {
+            # it's a root
+            set tok [lindex $varctok($curview) $varcid($curview,$p)]
+            break
+        }
+        if {[llength $parents($curview,$id)] == 1} {
+            lappend todo [list $p {}]
+        } else {
+            set j [lsearch -exact $parents($curview,$id) $p]
+            if {$j < 0} {
+                puts "oops didn't find [shortids $p] in parents of [shortids $id]"
+            }
+            lappend todo [list $p [strrep $j]]
+        }
     }
     for {set i [llength $todo]} {[incr i -1] >= 0} {} {
-	set p [lindex $todo $i 0]
-	append tok [lindex $todo $i 1]
-	set ordertok($p) $tok
+        set p [lindex $todo $i 0]
+        append tok [lindex $todo $i 1]
+        set ordertok($p) $tok
     }
     set ordertok($origid) $tok
     return $tok
@@ -5151,19 +5151,19 @@ proc ordertoken {id} {
 proc idcol {idlist id {i 0}} {
     set t [ordertoken $id]
     if {$i < 0} {
-	set i 0
+        set i 0
     }
     if {$i >= [llength $idlist] || $t < [ordertoken [lindex $idlist $i]]} {
-	if {$i > [llength $idlist]} {
-	    set i [llength $idlist]
-	}
-	while {[incr i -1] >= 0 && $t < [ordertoken [lindex $idlist $i]]} {}
-	incr i
+        if {$i > [llength $idlist]} {
+            set i [llength $idlist]
+        }
+        while {[incr i -1] >= 0 && $t < [ordertoken [lindex $idlist $i]]} {}
+        incr i
     } else {
-	if {$t > [ordertoken [lindex $idlist $i]]} {
-	    while {[incr i] < [llength $idlist] &&
-		   $t >= [ordertoken [lindex $idlist $i]]} {}
-	}
+        if {$t > [ordertoken [lindex $idlist $i]]} {
+            while {[incr i] < [llength $idlist] &&
+                   $t >= [ordertoken [lindex $idlist $i]]} {}
+        }
     }
     return $i
 }
@@ -5208,12 +5208,12 @@ proc visiblerows {} {
     set y0 [expr {int([lindex $f 0] * $ymax)}]
     set r0 [expr {int(($y0 - 3) / $linespc) - 1}]
     if {$r0 < 0} {
-	set r0 0
+        set r0 0
     }
     set y1 [expr {int([lindex $f 1] * $ymax)}]
     set r1 [expr {int(($y1 - 3) / $linespc) + 1}]
     if {$r1 >= $numcommits} {
-	set r1 [expr {$numcommits - 1}]
+        set r1 [expr {$numcommits - 1}]
     }
     return [list $r0 $r1]
 }
@@ -5224,13 +
```

## Paul Mackerras, 2020-10-03 09:14

Subject: Re: [PATCH v2 1/2] gitk: replace tabs with spaces
Message-ID: <20201003091419.GB3089868@thinks.paulus.ozlabs.org>
URL: https://gitlist.dev/e/20201003091419.GB3089868%40thinks.paulus.ozlabs.org
In-Reply-To: <ecdede5cf50bdb966f53bcf5171c80b5f8959d4b.1599798976.git.liu.denton@gmail.com>

```
On Thu, Sep 10, 2020 at 09:36:33PM -0700, Denton Liu wrote:
> The source code is a mix of tabs and spaces. The indentation style
> currently is four spaces per indent level but uses tabs every other
> level (at eight spaces). Fix this inconsistent spacing and tabbing by
> just using a space-indent for everything.
> 
> This was done mechanically by running:
> 
> 	$ expand -i gitk >gitk.new
> 	$ mv gitk.new gitk
> 
> This patch should be empty with `--ignore-all-space`.
> 
> Signed-off-by: Denton Liu <liu.denton@gmail.com>

Thanks, applied, though in fact I regenerated the patch since I had
some local commits that I had not yet pushed out.

Paul.

```
