From d277e89f87fda01daa1e1a35fc1f7118678faa1f Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Sun, 21 Sep 2008 18:11:37 -0500
Subject: [PATCH 01/11] gitk: Use <Button-2> for context menus on OSX

An OSX user has reported that gitk's context menus are not usable
under OSX because it doesn't provide a way to generate <Button-3>
events.  Users can generate <Button-2> events with command+click,
so use that for the context menus instead on OSX.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/gitk b/gitk
index 2eaa2ae7d6..e61e68b88a 100755
--- a/gitk
+++ b/gitk
@@ -2166,7 +2166,8 @@ proc makewindow {} {
     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}
-    bind $cflist <Button-3> {pop_flist_menu %W %X %Y %x %y}
+    global ctxbut
+    bind $cflist $ctxbut {pop_flist_menu %W %X %Y %x %y}
 
     set maincursor [. cget -cursor]
     set textcursor [$ctext cget -cursor]
@@ -4919,7 +4920,7 @@ proc drawcmittext {id row col} {
     global rowtextx idpos idtags idheads idotherrefs
     global linehtag linentag linedtag selectedline
     global canvxmax boldrows boldnamerows fgcolor
-    global mainheadid nullid nullid2 circleitem circlecolors
+    global mainheadid nullid nullid2 circleitem circlecolors ctxbut
 
     # listed is 0 for boundary, 1 for normal, 2 for negative, 3 for left, 4 for right
     set listed $cmitlisted($curview,$id)
@@ -4992,7 +4993,7 @@ proc drawcmittext {id row col} {
     }
     set linehtag($row) [$canv create text $xt $y -anchor w -fill $fgcolor \
 			    -text $headline -font $font -tags text]
-    $canv bind $linehtag($row) <Button-3> "rowmenu %X %Y $id"
+    $canv bind $linehtag($row) $ctxbut "rowmenu %X %Y $id"
     set linentag($row) [$canv2 create text 3 $y -anchor w -fill $fgcolor \
 			    -text $name -font $nfont -tags text]
     set linedtag($row) [$canv3 create text 3 $y -anchor w -fill $fgcolor \
@@ -5334,7 +5335,7 @@ proc bindline {t id} {
 proc drawtags {id x xt y1} {
     global idtags idheads idotherrefs mainhead
     global linespc lthickness
-    global canv rowtextx curview fgcolor bgcolor
+    global canv rowtextx curview fgcolor bgcolor ctxbut
 
     set marks {}
     set ntags 0
@@ -5412,7 +5413,7 @@ proc drawtags {id x xt y1} {
 	if {$ntags >= 0} {
 	    $canv bind $t <1> [list showtag $tag 1]
 	} elseif {$nheads >= 0} {
-	    $canv bind $t <Button-3> [list headmenu %X %Y $id $tag]
+	    $canv bind $t $ctxbut [list headmenu %X %Y $id $tag]
 	}
     }
     return $xt
@@ -9851,6 +9852,13 @@ set selectbgcolor gray85
 
 set circlecolors {white blue gray blue blue}
 
+# button for popping up context menus
+if {[tk windowingsystem] eq "aqua"} {
+    set ctxbut <Button-2>
+} else {
+    set ctxbut <Button-3>
+}
+
 ## For msgcat loading, first locate the installation location.
 if { [info exists ::env(GITK_MSGSDIR)] } {
     ## Msgsdir was manually set in the environment.

From b8a640ee1aa45e0f874664417db8a05d5a0d48b0 Mon Sep 17 00:00:00 2001
From: Alexander Gavrilov <angavrilov@gmail.com>
Date: Mon, 8 Sep 2008 11:28:16 +0400
Subject: [PATCH 02/11] gitk: Fix a bug in collapsing deeply nested trees

To reproduce: expand a tree like this, then collapse A:

+A
 +B
   C
   D

The result is:

-A
   C
   D

I.e. sub-nodes expanded from the last sub-node of the item
being collapsed are not removed.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gitk b/gitk
index e61e68b88a..b097230079 100755
--- a/gitk
+++ b/gitk
@@ -2706,7 +2706,7 @@ proc treeopendir {w dir} {
 	    $w insert e:$ix $e [highlight_tag $de]
 	}
     }
-    $w mark gravity e:$ix left
+    $w mark gravity e:$ix right
     $w conf -state disabled
     set treediropen($dir) 1
     set top [lindex [split [$w index @0,0] .] 0]

From 3945d2c05226d6c380a4f1b70f11941a6503a97e Mon Sep 17 00:00:00 2001
From: Christian Stimming <stimming@tuhh.de>
Date: Fri, 12 Sep 2008 11:39:43 +0200
Subject: [PATCH 03/11] gitk: Add untranslated error messages to translation

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/gitk b/gitk
index b097230079..dce17e9f17 100755
--- a/gitk
+++ b/gitk
@@ -269,7 +269,7 @@ proc parseviewrevs {view revs} {
 		lappend badrev $line
 	    }
 	}		    
-	error_popup "Error parsing revisions: $err"
+	error_popup "[mc "Error parsing revisions:"] $err"
 	return {}
     }
     set ret {}
@@ -324,7 +324,7 @@ proc start_rev_list {view} {
 	if {[catch {
 	    set str [exec sh -c $viewargscmd($view)]
 	} err]} {
-	    error_popup "Error executing --argscmd command: $err"
+	    error_popup "[mc "Error executing --argscmd command:"] $err"
 	    return 0
 	}
 	set args [concat $args [split $str "\n"]]
@@ -500,7 +500,7 @@ proc updatecommits {} {
 	set fd [open [concat | git log --no-color -z --pretty=raw --parents \
 			  --boundary $args "--" $vfilelimit($view)] r]
     } err]} {
-	error_popup "Error executing git log: $err"
+	error_popup "[mc "Error executing git log:"] $err"
 	return
     }
     if {$viewactive($view) == 0} {
@@ -2937,7 +2937,7 @@ proc save_file_from_commit {filename output what} {
 	if {[string match "fatal: bad revision *" $err]} {
 	    return $nullfile
 	}
-	error_popup "Error getting \"$filename\" from $what: $err"
+	error_popup "[mc "Error getting \"%s\" from %s:" $filename $what] $err"
 	return {}
     }
     return $output
@@ -2994,7 +2994,7 @@ proc external_diff {} {
 	set gitktmpdir [file join [file dirname $gitdir] \
 			    [format ".gitk-tmp.%s" [pid]]]
 	if {[catch {file mkdir $gitktmpdir} err]} {
-	    error_popup "Error creating temporary directory $gitktmpdir: $err"
+	    error_popup "[mc "Error creating temporary directory %s:" $gitktmpdir] $err"
 	    unset gitktmpdir
 	    return
 	}
@@ -3003,7 +3003,7 @@ proc external_diff {} {
     incr diffnum
     set diffdir [file join $gitktmpdir $diffnum]
     if {[catch {file mkdir $diffdir} err]} {
-	error_popup "Error creating temporary directory $diffdir: $err"
+	error_popup "[mc "Error creating temporary directory %s:" $diffdir] $err"
 	return
     }
 
@@ -3016,7 +3016,7 @@ proc external_diff {} {
 		     [list $difffromfile $difftofile]]
         if {[catch {set fl [open $cmd r]} err]} {
             file delete -force $diffdir
-            error_popup [mc "$extdifftool: command failed: $err"]
+            error_popup "$extdifftool: [mc "command failed:"] $err"
         } else {
             fconfigure $fl -blocking 0
             filerun $fl [list delete_at_eof $fl $diffdir]
@@ -3041,7 +3041,7 @@ proc external_blame {parent_idx} {
     }
 
     if {[catch {exec git gui blame $base_commit $flist_menu_file &} err]} {
-	error_popup [mc "git gui blame: command failed: $err"]
+	error_popup "[mc "git gui blame: command failed:"] $err"
     }
 }
 
@@ -3050,7 +3050,7 @@ proc delete_at_eof {f dir} {
     while {[gets $f line] >= 0} {}
     if {[eof $f]} {
 	if {[catch {close $f} err]} {
-	    error_popup "External diff viewer failed: $err"
+	    error_popup "[mc "External diff viewer failed:"] $err"
 	}
 	file delete -force $dir
 	return 0

From 09c7029dfa58748268a6306bfe764456a65a22bf Mon Sep 17 00:00:00 2001
From: Alexander Gavrilov <angavrilov@gmail.com>
Date: Mon, 13 Oct 2008 12:12:31 +0400
Subject: [PATCH 04/11] gitk: Enhance file encoding support

This allows the encoding to be specified for file contents and used
when displaying files and diffs in the bottom-left pane.  When
displaying diffs, the encoding for each diff hunk is that for the file
that the diff hunk is from, so it can change through the course of the
diff.

The encoding for file contents is determined as follows:

- File encoding defaults to the system encoding.
- It can be overridden by setting the gui.encoding option.
- Finally, the 'encoding' attribute is checked on
  per-file basis; it has the last word.

Note: Since git-check-attr does not provide support for reading
attributes from trees, attribute lookup is done using files from the
working directory.

This also extends the range of supported encoding names, adding
ShiftJIS and Shift-JIS as aliases for Shift_JIS, and allowing
cp-*, cp_*, ibm-*, ibm_*, jis-* and jis_* as aliases for cp*,
ibm* and jis* respectively.

This also fixes some bugs in handling of non-ASCII filenames.  Core
git apparently supports only locale-encoded filenames, so processing
is done using the system encoding.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Tested-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 63 insertions(+), 11 deletions(-)

diff --git a/gitk b/gitk
index dce17e9f17..5f35f612c7 100755
--- a/gitk
+++ b/gitk
@@ -6229,7 +6229,7 @@ proc gettree {id} {
 	    set treepending $id
 	    set treefilelist($id) {}
 	    set treeidlist($id) {}
-	    fconfigure $gtf -blocking 0
+	    fconfigure $gtf -blocking 0 -encoding binary
 	    filerun $gtf [list gettreeline $gtf $id]
 	}
     } else {
@@ -6251,11 +6251,12 @@ proc gettreeline {gtf id} {
 	    set line [string range $line 0 [expr {$i-1}]]
 	    if {$diffids ne $nullid2 && [lindex $line 1] ne "blob"} continue
 	    set sha1 [lindex $line 2]
-	    if {[string index $fname 0] eq "\""} {
-		set fname [lindex $fname 0]
-	    }
 	    lappend treeidlist($id) $sha1
 	}
+	if {[string index $fname 0] eq "\""} {
+	    set fname [lindex $fname 0]
+	}
+	set fname [encoding convertfrom $fname]
 	lappend treefilelist($id) $fname
     }
     if {![eof $gtf]} {
@@ -6296,7 +6297,7 @@ proc showfile {f} {
 	    return
 	}
     }
-    fconfigure $bf -blocking 0
+    fconfigure $bf -blocking 0 -encoding [get_path_encoding $f]
     filerun $bf [list getblobline $bf $diffids]
     $ctext config -state normal
     clear_ctext $commentend
@@ -6334,6 +6335,7 @@ proc mergediff {id} {
     global diffids
     global parents
     global diffcontext
+    global diffencoding
     global limitdiffs vfilelimit curview
 
     set diffmergeid $id
@@ -6347,9 +6349,10 @@ proc mergediff {id} {
 	error_popup "[mc "Error getting merge diffs:"] $err"
 	return
     }
-    fconfigure $mdf -blocking 0
+    fconfigure $mdf -blocking 0 -encoding binary
     set mdifffd($id) $mdf
     set np [llength $parents($curview,$id)]
+    set diffencoding [get_path_encoding {}]
     settabs $np
     filerun $mdf [list getmergediffline $mdf $id $np]
 }
@@ -6357,6 +6360,7 @@ proc mergediff {id} {
 proc getmergediffline {mdf id np} {
     global diffmergeid ctext cflist mergemax
     global difffilestart mdifffd
+    global diffencoding
 
     $ctext conf -state normal
     set nr 0
@@ -6368,18 +6372,22 @@ proc getmergediffline {mdf id np} {
 	}
 	if {[regexp {^diff --cc (.*)} $line match fname]} {
 	    # start of a new file
+	    set fname [encoding convertfrom $fname]
 	    $ctext insert end "\n"
 	    set here [$ctext index "end - 1c"]
 	    lappend difffilestart $here
 	    add_flist [list $fname]
+	    set diffencoding [get_path_encoding $fname]
 	    set l [expr {(78 - [string length $fname]) / 2}]
 	    set pad [string range "----------------------------------------" 1 $l]
 	    $ctext insert end "$pad $fname $pad\n" filesep
 	} elseif {[regexp {^@@} $line]} {
+	    set line [encoding convertfrom $diffencoding $line]
 	    $ctext insert end "$line\n" hunksep
 	} elseif {[regexp {^[0-9a-f]{40}$} $line] || [regexp {^index} $line]} {
 	    # do nothing
 	} else {
+	    set line [encoding convertfrom $diffencoding $line]
 	    # parse the prefix - one ' ', '-' or '+' for each parent
 	    set spaces {}
 	    set minuses {}
@@ -6514,7 +6522,7 @@ proc gettreediffs {ids} {
 
     set treepending $ids
     set treediff {}
-    fconfigure $gdtf -blocking 0
+    fconfigure $gdtf -blocking 0 -encoding binary
     filerun $gdtf [list gettreediffline $gdtf $ids]
 }
 
@@ -6530,6 +6538,7 @@ proc gettreediffline {gdtf ids} {
 	    if {[string index $file 0] eq "\""} {
 		set file [lindex $file 0]
 	    }
+	    set file [encoding convertfrom $file]
 	    lappend treediff $file
 	}
     }
@@ -6587,6 +6596,7 @@ proc getblobdiffs {ids} {
     global diffcontext
     global ignorespace
     global limitdiffs vfilelimit curview
+    global diffencoding
 
     set cmd [diffcmd $ids "-p -C --no-commit-id -U$diffcontext"]
     if {$ignorespace} {
@@ -6600,7 +6610,8 @@ proc getblobdiffs {ids} {
 	return
     }
     set diffinhdr 0
-    fconfigure $bdf -blocking 0
+    set diffencoding [get_path_encoding {}]
+    fconfigure $bdf -blocking 0 -encoding binary
     set blobdifffd($ids) $bdf
     filerun $bdf [list getblobdiffline $bdf $diffids]
 }
@@ -6634,6 +6645,7 @@ proc getblobdiffline {bdf ids} {
     global diffids blobdifffd ctext curdiffstart
     global diffnexthead diffnextnote difffilestart
     global diffinhdr treediffs
+    global diffencoding
 
     set nr 0
     $ctext conf -state normal
@@ -6671,10 +6683,13 @@ proc getblobdiffline {bdf ids} {
 	    } else {
 		set fname [string range $line 2 [expr {$i - 1}]]
 	    }
+	    set fname [encoding convertfrom $fname]
+	    set diffencoding [get_path_encoding $fname]
 	    makediffhdr $fname $ids
 
 	} elseif {[regexp {^@@ -([0-9]+)(,[0-9]+)? \+([0-9]+)(,[0-9]+)? @@(.*)} \
 		       $line match f1l f1c f2l f2c rest]} {
+	    set line [encoding convertfrom $diffencoding $line]
 	    $ctext insert end "$line\n" hunksep
 	    set diffinhdr 0
 
@@ -6684,6 +6699,7 @@ proc getblobdiffline {bdf ids} {
 		if {[string index $fname 0] eq "\""} {
 		    set fname [lindex $fname 0]
 		}
+		set fname [encoding convertfrom $fname]
 		set i [lsearch -exact $treediffs($ids) $fname]
 		if {$i >= 0} {
 		    setinlist difffilestart $i $curdiffstart
@@ -6694,6 +6710,8 @@ proc getblobdiffline {bdf ids} {
 		if {[string index $fname 0] eq "\""} {
 		    set fname [lindex $fname 0]
 		}
+		set fname [encoding convertfrom $fname]
+		set diffencoding [get_path_encoding $fname]
 		makediffhdr $fname $ids
 	    } elseif {[string compare -length 3 $line "---"] == 0} {
 		# do nothing
@@ -6705,6 +6723,7 @@ proc getblobdiffline {bdf ids} {
 	    $ctext insert end "$line\n" filesep
 
 	} else {
+	    set line [encoding convertfrom $diffencoding $line]
 	    set x [string range $line 0 0]
 	    if {$x == "-" || $x == "+"} {
 		set tag [expr {$x == "+"}]
@@ -9727,7 +9746,7 @@ set encoding_aliases {
     { ISO-8859-16 iso-ir-226 ISO_8859-16:2001 ISO_8859-16 latin10 l10 }
     { GBK CP936 MS936 windows-936 }
     { JIS_Encoding csJISEncoding }
-    { Shift_JIS MS_Kanji csShiftJIS }
+    { Shift_JIS MS_Kanji csShiftJIS ShiftJIS Shift-JIS }
     { Extended_UNIX_Code_Packed_Format_for_Japanese csEUCPkdFmtJapanese
       EUC-JP }
     { Extended_UNIX_Code_Fixed_Width_for_Japanese csEUCFixWidJapanese }
@@ -9769,7 +9788,7 @@ proc tcl_encoding {enc} {
     set i [lsearch -exact $lcnames $enc]
     if {$i < 0} {
 	# look for "isonnn" instead of "iso-nnn" or "iso_nnn"
-	if {[regsub {^iso[-_]} $enc iso encx]} {
+	if {[regsub {^(iso|cp|ibm|jis)[-_]} $enc {\1} encx]} {
 	    set i [lsearch -exact $lcnames $encx]
 	}
     }
@@ -9781,7 +9800,7 @@ proc tcl_encoding {enc} {
 	    foreach e $ll {
 		set i [lsearch -exact $lcnames $e]
 		if {$i < 0} {
-		    if {[regsub {^iso[-_]} $e iso ex]} {
+		    if {[regsub {^(iso|cp|ibm|jis)[-_]} $e {\1} ex]} {
 			set i [lsearch -exact $lcnames $ex]
 		    }
 		}
@@ -9796,6 +9815,34 @@ proc tcl_encoding {enc} {
     return {}
 }
 
+proc gitattr {path attr default} {
+	if {[catch {set r [exec git check-attr $attr -- $path]}]} {
+		set r unspecified
+	} else {
+		set r [join [lrange [split $r :] 2 end] :]
+		regsub {^ } $r {} r
+	}
+	if {$r eq {unspecified}} {
+		return $default
+	}
+	return $r
+}
+
+proc get_path_encoding {path} {
+	global gui_encoding
+	set tcl_enc [tcl_encoding $gui_encoding]
+	if {$tcl_enc eq {}} {
+		set tcl_enc [encoding system]
+	}
+	if {$path ne {}} {
+		set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]]
+		if {$enc2 ne {}} {
+			set tcl_enc $enc2
+		}
+	}
+	return $tcl_enc
+}
+
 # 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\
@@ -9818,6 +9865,11 @@ if {$tclencoding == {}} {
     puts stderr "Warning: encoding $gitencoding is not supported by Tcl/Tk"
 }
 
+set gui_encoding [encoding system]
+catch {
+	set gui_encoding [exec git config --get gui.encoding]
+}
+
 set mainfont {Helvetica 9}
 set textfont {Courier 9}
 set uifont {Helvetica 9 bold}

From 4db09304f97b12d7db5d199eebb1f24c74e12d17 Mon Sep 17 00:00:00 2001
From: Alexander Gavrilov <angavrilov@gmail.com>
Date: Mon, 13 Oct 2008 12:12:33 +0400
Subject: [PATCH 05/11] gitk: Implement batch lookup and caching of encoding
 attrs

When the diff contains thousands of files, calling git-check-attr once
per file is very slow.  With this patch gitk does attribute lookup in
batches of 30 files while reading the diff file list, which leads to a
very noticeable speedup.

It may be possible to reimplement this even more efficiently, if
git-check-attr is modified to support a --stdin-paths option.
Additionally, it should quote the ':' character in file paths, or
provide a more robust way of column separation.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Tested-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/gitk b/gitk
index 5f35f612c7..8cd3171c4c 100755
--- a/gitk
+++ b/gitk
@@ -6531,6 +6531,7 @@ proc gettreediffline {gdtf ids} {
     global cmitmode vfilelimit curview limitdiffs
 
     set nr 0
+    set sublist {}
     while {[incr nr] <= 1000 && [gets $gdtf line] >= 0} {
 	set i [string first "\t" $line]
 	if {$i >= 0} {
@@ -6540,8 +6541,10 @@ proc gettreediffline {gdtf ids} {
 	    }
 	    set file [encoding convertfrom $file]
 	    lappend treediff $file
+	    lappend sublist $file
 	}
     }
+    cache_gitattr encoding $sublist
     if {![eof $gdtf]} {
 	return [expr {$nr >= 1000? 2: 1}]
     }
@@ -9816,18 +9819,48 @@ proc tcl_encoding {enc} {
 }
 
 proc gitattr {path attr default} {
-	if {[catch {set r [exec git check-attr $attr -- $path]}]} {
+	global path_attr_cache
+	if {[info exists path_attr_cache($attr,$path)]} {
+		set r $path_attr_cache($attr,$path)
+	} elseif {[catch {set r [exec git check-attr $attr -- $path]}]} {
 		set r unspecified
 	} else {
 		set r [join [lrange [split $r :] 2 end] :]
 		regsub {^ } $r {} r
 	}
+	set path_attr_cache($attr,$path) $r
 	if {$r eq {unspecified}} {
 		return $default
 	}
 	return $r
 }
 
+proc cache_gitattr {attr pathlist} {
+	global path_attr_cache
+	set newlist {}
+	foreach path $pathlist {
+		if {[info exists path_attr_cache($attr,$path)]} continue
+		lappend newlist $path
+	}
+	while {$newlist ne {}} {
+		set head [lrange $newlist 0 29]
+		set newlist [lrange $newlist 30 end]
+		if {![catch {set rlist [eval exec git check-attr $attr -- $head]}]} {
+			foreach row [split $rlist "\n"] {
+				set cols [split $row :]
+				set path [lindex $cols 0]
+				set value [join [lrange $cols 2 end] :]
+				if {[string index $path 0] eq "\""} {
+					set path [encoding convertfrom [lindex $path 0]]
+				}
+				regsub {^ } $value {} value
+				set path_attr_cache($attr,$path) $value
+			}
+		}
+		update
+	}
+}
+
 proc get_path_encoding {path} {
 	global gui_encoding
 	set tcl_enc [tcl_encoding $gui_encoding]

From 39ee47ef0616fb67ffdffca98283272c36deecc9 Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Wed, 15 Oct 2008 22:23:03 +1100
Subject: [PATCH 06/11] gitk: Clean up file encoding code and add
 enable/disable option

This adds an option allowing the user to select whether gitk should
look up per-file encoding settings using git check-attr or not.  If
not, gitk uses the global encoding set in the git config (as reported
by git config --get gui.encoding) for all files, or if that is not
set, then the system encoding.

The option is controlled by a checkbox in the Edit->Preferences
window, and defaults to off for now because git check-attr is so
slow.  When the user turns it on we discard any cached diff file
lists in treediffs, because we may not have encodings cached for
the files listed in those lists, meaning that getblobdiffline will
do it for each file, which will be really really slow.

This adjusts the limit of how many paths cache_gitattr passes to each
instance of git check-attr depending on whether we're running under
windows or not.  Passing only 30 doesn't effectively amortize the
startup costs of git check-attr, but it's all we can do under windows
because of the 32k limit on arguments to a command.  Under other OSes
we pass up to 1000.

Similarly we adjust how many lines gettreediffline processes depending
on whether we are doing per-file encodings so that we don't run for
too long.  When we are, 500 seems to be a reasonable limit, leading
to gettreediffline taking about 60-70ms under Linux (almost all of
which is in cache_gitattr, unfortunately).  This means that we can
take out the update call in cache_gitattr.

This adds a simple cache on [tclencoding].  Now that we get repeated
calls to translate the same encoding, this is useful.

This reindents the new code added in the last couple of commits to
conform to the gitk 4-space indent and makes various other improvements:
use regexp in gitattr and cache_gitattr instead of split + join + regsub,
make gui_encoding be the value from [tclencoding] to avoid having to
do [tcl_encoding $gui_encoding] in each call to get_path_encoding,
and print a warning message at startup if $gui_encoding isn't
supported by Tcl.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 149 ++++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 91 insertions(+), 58 deletions(-)

diff --git a/gitk b/gitk
index 8cd3171c4c..ccfe1917cb 100755
--- a/gitk
+++ b/gitk
@@ -2332,7 +2332,7 @@ proc savestuff {w} {
     global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
     global cmitmode wrapcomment datetimeformat limitdiffs
     global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
-    global autoselect extdifftool
+    global autoselect extdifftool perfile_attrs
 
     if {$stuffsaved} return
     if {![winfo viewable .]} return
@@ -2359,6 +2359,7 @@ proc savestuff {w} {
 	puts $f [list set diffcontext $diffcontext]
 	puts $f [list set selectbgcolor $selectbgcolor]
 	puts $f [list set extdifftool $extdifftool]
+	puts $f [list set perfile_attrs $perfile_attrs]
 
 	puts $f "set geometry(main) [wm geometry .]"
 	puts $f "set geometry(topwidth) [winfo width .tf]"
@@ -6528,11 +6529,20 @@ proc gettreediffs {ids} {
 
 proc gettreediffline {gdtf ids} {
     global treediff treediffs treepending diffids diffmergeid
-    global cmitmode vfilelimit curview limitdiffs
+    global cmitmode vfilelimit curview limitdiffs perfile_attrs
 
     set nr 0
     set sublist {}
-    while {[incr nr] <= 1000 && [gets $gdtf line] >= 0} {
+    set max 1000
+    if {$perfile_attrs} {
+	# cache_gitattr is slow, and even slower on win32 where we
+	# have to invoke it for only about 30 paths at a time
+	set max 500
+	if {[tk windowingsystem] == "win32"} {
+	    set max 120
+	}
+    }
+    while {[incr nr] <= $max && [gets $gdtf line] >= 0} {
 	set i [string first "\t" $line]
 	if {$i >= 0} {
 	    set file [string range $line [expr {$i+1}] end]
@@ -6544,9 +6554,11 @@ proc gettreediffline {gdtf ids} {
 	    lappend sublist $file
 	}
     }
-    cache_gitattr encoding $sublist
+    if {$perfile_attrs} {
+	cache_gitattr encoding $sublist
+    }
     if {![eof $gdtf]} {
-	return [expr {$nr >= 1000? 2: 1}]
+	return [expr {$nr >= $max? 2: 1}]
     }
     close $gdtf
     if {$limitdiffs && $vfilelimit($curview) ne {}} {
@@ -9318,7 +9330,7 @@ proc doprefs {} {
     global maxwidth maxgraphpct
     global oldprefs prefstop showneartags showlocalchanges
     global bgcolor fgcolor ctext diffcolors selectbgcolor
-    global tabstop limitdiffs autoselect extdifftool
+    global tabstop limitdiffs autoselect extdifftool perfile_attrs
 
     set top .gitkprefs
     set prefstop $top
@@ -9327,7 +9339,7 @@ proc doprefs {} {
 	return
     }
     foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-		   limitdiffs tabstop} {
+		   limitdiffs tabstop perfile_attrs} {
 	set oldprefs($v) [set $v]
     }
     toplevel $top
@@ -9369,6 +9381,11 @@ proc doprefs {} {
     checkbutton $top.ldiff.b -variable limitdiffs
     pack $top.ldiff.b $top.ldiff.l -side left
     grid x $top.ldiff -sticky w
+    frame $top.lattr
+    label $top.lattr.l -text [mc "Support per-file encodings"] -font optionfont
+    checkbutton $top.lattr.b -variable perfile_attrs
+    pack $top.lattr.b $top.lattr.l -side left
+    grid x $top.lattr -sticky w
 
     entry $top.extdifft -textvariable extdifftool
     frame $top.extdifff
@@ -9478,7 +9495,7 @@ proc prefscan {} {
     global oldprefs prefstop
 
     foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-		   limitdiffs tabstop} {
+		   limitdiffs tabstop perfile_attrs} {
 	global $v
 	set $v $oldprefs($v)
     }
@@ -9491,7 +9508,7 @@ proc prefsok {} {
     global maxwidth maxgraphpct
     global oldprefs prefstop showneartags showlocalchanges
     global fontpref mainfont textfont uifont
-    global limitdiffs treediffs
+    global limitdiffs treediffs perfile_attrs
 
     catch {destroy $prefstop}
     unset prefstop
@@ -9524,8 +9541,10 @@ proc prefsok {} {
 	    dohidelocalchanges
 	}
     }
-    if {$limitdiffs != $oldprefs(limitdiffs)} {
-	# treediffs elements are limited by path
+    if {$limitdiffs != $oldprefs(limitdiffs) ||
+	($perfile_attrs && !$oldprefs(perfile_attrs))} {
+	# treediffs elements are limited by path;
+	# won't have encodings cached if perfile_attrs was just turned on
 	catch {unset treediffs}
     }
     if {$fontchanged || $maxwidth != $oldprefs(maxwidth)
@@ -9784,7 +9803,10 @@ set encoding_aliases {
 }
 
 proc tcl_encoding {enc} {
-    global encoding_aliases
+    global encoding_aliases tcl_encoding_cache
+    if {[info exists tcl_encoding_cache($enc)]} {
+	return $tcl_encoding_cache($enc)
+    }
     set names [encoding names]
     set lcnames [string tolower $names]
     set enc [string tolower $enc]
@@ -9812,68 +9834,70 @@ proc tcl_encoding {enc} {
 	    break
 	}
     }
+    set tclenc {}
     if {$i >= 0} {
-	return [lindex $names $i]
+	set tclenc [lindex $names $i]
     }
-    return {}
+    set tcl_encoding_cache($enc) $tclenc
+    return $tclenc
 }
 
 proc gitattr {path attr default} {
-	global path_attr_cache
-	if {[info exists path_attr_cache($attr,$path)]} {
-		set r $path_attr_cache($attr,$path)
-	} elseif {[catch {set r [exec git check-attr $attr -- $path]}]} {
-		set r unspecified
-	} else {
-		set r [join [lrange [split $r :] 2 end] :]
-		regsub {^ } $r {} r
+    global path_attr_cache
+    if {[info exists path_attr_cache($attr,$path)]} {
+	set r $path_attr_cache($attr,$path)
+    } else {
+	set r "unspecified"
+	if {![catch {set line [exec git check-attr $attr -- $path]}]} {
+	    regexp "(.*): encoding: (.*)" $line m f r
 	}
 	set path_attr_cache($attr,$path) $r
-	if {$r eq {unspecified}} {
-		return $default
-	}
-	return $r
+    }
+    if {$r eq "unspecified"} {
+	return $default
+    }
+    return $r
 }
 
 proc cache_gitattr {attr pathlist} {
-	global path_attr_cache
-	set newlist {}
-	foreach path $pathlist {
-		if {[info exists path_attr_cache($attr,$path)]} continue
-		lappend newlist $path
+    global path_attr_cache
+    set newlist {}
+    foreach path $pathlist {
+	if {![info exists path_attr_cache($attr,$path)]} {
+	    lappend newlist $path
 	}
-	while {$newlist ne {}} {
-		set head [lrange $newlist 0 29]
-		set newlist [lrange $newlist 30 end]
-		if {![catch {set rlist [eval exec git check-attr $attr -- $head]}]} {
-			foreach row [split $rlist "\n"] {
-				set cols [split $row :]
-				set path [lindex $cols 0]
-				set value [join [lrange $cols 2 end] :]
-				if {[string index $path 0] eq "\""} {
-					set path [encoding convertfrom [lindex $path 0]]
-				}
-				regsub {^ } $value {} value
-				set path_attr_cache($attr,$path) $value
-			}
+    }
+    set lim 1000
+    if {[tk windowingsystem] == "win32"} {
+	# windows has a 32k limit on the arguments to a command...
+	set lim 30
+    }
+    while {$newlist ne {}} {
+	set head [lrange $newlist 0 [expr {$lim - 1}]]
+	set newlist [lrange $newlist $lim end]
+	if {![catch {set rlist [eval exec git check-attr $attr -- $head]}]} {
+	    foreach row [split $rlist "\n"] {
+		if {[regexp "(.*): encoding: (.*)" $row m path value]} {
+		    if {[string index $path 0] eq "\""} {
+			set path [encoding convertfrom [lindex $path 0]]
+		    }
+		    set path_attr_cache($attr,$path) $value
 		}
-		update
+	    }
 	}
+    }
 }
 
 proc get_path_encoding {path} {
-	global gui_encoding
-	set tcl_enc [tcl_encoding $gui_encoding]
-	if {$tcl_enc eq {}} {
-		set tcl_enc [encoding system]
+    global gui_encoding perfile_attrs
+    set tcl_enc $gui_encoding
+    if {$path ne {} && $perfile_attrs} {
+	set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]]
+	if {$enc2 ne {}} {
+	    set tcl_enc $enc2
 	}
-	if {$path ne {}} {
-		set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]]
-		if {$enc2 ne {}} {
-			set tcl_enc $enc2
-		}
-	}
-	return $tcl_enc
+    }
+    return $tcl_enc
 }
 
 # First check that Tcl/Tk is recent enough
@@ -9900,7 +9924,15 @@ if {$tclencoding == {}} {
 
 set gui_encoding [encoding system]
 catch {
-	set gui_encoding [exec git config --get gui.encoding]
+    set enc [exec git config --get gui.encoding]
+    if {$enc ne {}} {
+	set tclenc [tcl_encoding $enc]
+	if {$tclenc ne {}} {
+	    set gui_encoding $tclenc
+	} else {
+	    puts stderr "Warning: encoding $enc is not supported by Tcl/Tk"
+	}
+    }
 }
 
 set mainfont {Helvetica 9}
@@ -9924,6 +9956,7 @@ set showlocalchanges 1
 set limitdiffs 1
 set datetimeformat "%Y-%m-%d %H:%M:%S"
 set autoselect 1
+set perfile_attrs 0
 
 set extdifftool "meld"
 

From 968ce45c9d2765b527d895b6933d20c0d104387c Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Thu, 16 Oct 2008 09:57:02 +1100
Subject: [PATCH 07/11] gitk: Fix binding for <Return> in sha1 entry field

This adds a break so that gitk doesn't go and execute the global
binding for <Return> (i.e. find next) when the user presses the
return key in the sha1 entry field to indicate that gitk should
jump to the commit identified by what they just put into the
sha1 field.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gitk b/gitk
index ccfe1917cb..00ea8da735 100755
--- a/gitk
+++ b/gitk
@@ -2161,7 +2161,7 @@ proc makewindow {} {
     bind . <Destroy> {stop_backends}
     bind . <Button-1> "click %W"
     bind $fstring <Key-Return> {dofind 1 1}
-    bind $sha1entry <Key-Return> gotocommit
+    bind $sha1entry <Key-Return> {gotocommit; break}
     bind $sha1entry <<PasteSelection>> clearsha1
     bind $cflist <1> {sel_flist %W %x %y; break}
     bind $cflist <B1-Motion> {sel_flist %W %x %y; break}

From 63767d5fb8fe236d8fdeba44297ac925701b27a0 Mon Sep 17 00:00:00 2001
From: Richard Quirk <richard.quirk@gmail.com>
Date: Tue, 14 Oct 2008 22:53:25 +0200
Subject: [PATCH 08/11] gitk: Bind Key-Return to create on new branch dialog

The Return key can now be used as well as pressing the Create button
from the dialog box that is shown when selecting "Create new branch".

Signed-off-by: Richard Quirk <richard.quirk@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gitk b/gitk
index 00ea8da735..0f9ff7f659 100755
--- a/gitk
+++ b/gitk
@@ -7625,6 +7625,7 @@ proc mkbranch {} {
     grid $top.id $top.sha1 -sticky w
     label $top.nlab -text [mc "Name:"]
     entry $top.name -width 40
+    bind $top.name <Key-Return> "[list mkbrgo $top]"
     grid $top.nlab $top.name -sticky w
     frame $top.buts
     button $top.buts.go -text [mc "Create"] -command [list mkbrgo $top]

From f2d0bbbd680b2a11cb42eff9a63d6ff03dd4d0e5 Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Fri, 17 Oct 2008 22:44:42 +1100
Subject: [PATCH 09/11] gitk: New way of constructing menus that allows for
 Alt+letter accelerators

This is inspired by patches from Robin Rosenberg but takes a different
approach.  This adds a "makemenu" procedure for constructing menus
that allows the menu layout to be specified in a clear fashion, and
provides one place where the alt+letter accelerators can be detected
and handled.

The alt+letter accelerator is specified by putting an ampersand (&)
before the letter for the accelerator in the menu item name.  (Two
ampersands in succession produce one ampersand in the menu item as
it appears on screen.)  This is handled in makemenu.

We also add an mca procedure which is like mc but also does the
ampersand translation, for use when we want to refer to a menu item
by name.  The mca name and the locations where we use it were
shamelessly stolen from Robin Rosenberg's patch.

This doesn't actually add any alt+letter accelerators yet.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 168 ++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 98 insertions(+), 70 deletions(-)

diff --git a/gitk b/gitk
index 0f9ff7f659..dedc95dcf9 100755
--- a/gitk
+++ b/gitk
@@ -1750,6 +1750,45 @@ proc setoptions {} {
     option add *Entry.font uifont startupFile
 }
 
+proc makemenu {m items} {
+    menu $m
+    foreach i $items {
+	set name [mc [lindex $i 0]]
+	set type [lindex $i 1]
+	set thing [lindex $i 2]
+	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 0]]]
+		lappend params -menu $m.$submenu
+	    }
+	    "command" {
+		lappend params -command $thing
+	    }
+	    "radiobutton" {
+		lappend params -variable [lindex $thing 0] \
+		    -value [lindex $thing 1]
+	    }
+	}
+	eval $m add $params [lrange $i 3 end]
+	if {$type eq "cascade"} {
+	    makemenu $m.$submenu $thing
+	}
+    }
+}
+
+# translate string and remove ampersands
+proc mca {str} {
+    return [string map {&& & & {}} [mc $str]]
+}
+
 proc makewindow {} {
     global canv canv2 canv3 linespc charspc ctext cflist cscroll
     global tabstop
@@ -1767,33 +1806,29 @@ proc makewindow {} {
     global rprogitem rprogcoord rownumsel numcommits
     global have_tk85
 
-    menu .bar
-    .bar add cascade -label [mc "File"] -menu .bar.file
-    menu .bar.file
-    .bar.file add command -label [mc "Update"] -command updatecommits
-    .bar.file add command -label [mc "Reload"] -command reloadcommits
-    .bar.file add command -label [mc "Reread references"] -command rereadrefs
-    .bar.file add command -label [mc "List references"] -command showrefs
-    .bar.file add command -label [mc "Quit"] -command doquit
-    menu .bar.edit
-    .bar add cascade -label [mc "Edit"] -menu .bar.edit
-    .bar.edit add command -label [mc "Preferences"] -command doprefs
-
-    menu .bar.view
-    .bar add cascade -label [mc "View"] -menu .bar.view
-    .bar.view add command -label [mc "New view..."] -command {newview 0}
-    .bar.view add command -label [mc "Edit view..."] -command editview \
-	-state disabled
-    .bar.view add command -label [mc "Delete view"] -command delview -state disabled
-    .bar.view add separator
-    .bar.view add radiobutton -label [mc "All files"] -command {showview 0} \
-	-variable selectedview -value 0
-
-    menu .bar.help
-    .bar add cascade -label [mc "Help"] -menu .bar.help
-    .bar.help add command -label [mc "About gitk"] -command about
-    .bar.help add command -label [mc "Key bindings"] -command keys
-    .bar.help configure
+    makemenu .bar {
+	{"File" cascade {
+	    {"Update" command updatecommits -accelerator F5}
+	    {"Reload" command reloadcommits}
+	    {"Reread references" command rereadrefs}
+	    {"List references" command showrefs}
+	    {"Quit" command doquit}
+	}}
+	{"Edit" cascade {
+	    {"Preferences" command doprefs}
+	}}
+	{"View" cascade {
+	    {"New view..." command {newview 0}}
+	    {"Edit view..." command editview -state disabled}
+	    {"Delete view" command delview -state disabled}
+	    {"" separator}
+	    {"All files" radiobutton {selectedview 0} -command {showview 0}}
+	}}
+	{"Help" cascade {
+	    {"About gitk" command about}
+	    {"Key bindings" command keys}
+	}}
+    }
     . configure -menu .bar
 
     # the gui has upper and lower half, parts of a paned window.
@@ -2174,49 +2209,42 @@ proc makewindow {} {
     set curtextcursor $textcursor
 
     set rowctxmenu .rowctxmenu
-    menu $rowctxmenu -tearoff 0
-    $rowctxmenu add command -label [mc "Diff this -> selected"] \
-	-command {diffvssel 0}
-    $rowctxmenu add command -label [mc "Diff selected -> this"] \
-	-command {diffvssel 1}
-    $rowctxmenu add command -label [mc "Make patch"] -command mkpatch
-    $rowctxmenu add command -label [mc "Create tag"] -command mktag
-    $rowctxmenu add command -label [mc "Write commit to file"] -command writecommit
-    $rowctxmenu add command -label [mc "Create new branch"] -command mkbranch
-    $rowctxmenu add command -label [mc "Cherry-pick this commit"] \
-	-command cherrypick
-    $rowctxmenu add command -label [mc "Reset HEAD branch to here"] \
-	-command resethead
+    makemenu $rowctxmenu {
+	{"Diff this -> selected" command {diffvssel 0}}
+	{"Diff selected -> this" command {diffvssel 1}}
+	{"Make patch" command mkpatch}
+	{"Create tag" command mktag}
+	{"Write commit to file" command writecommit}
+	{"Create new branch" command mkbranch}
+	{"Cherry-pick this commit" command cherrypick}
+	{"Reset HEAD branch to here" command resethead}
+    }
+    $rowctxmenu configure -tearoff 0
 
     set fakerowmenu .fakerowmenu
-    menu $fakerowmenu -tearoff 0
-    $fakerowmenu add command -label [mc "Diff this -> selected"] \
-	-command {diffvssel 0}
-    $fakerowmenu add command -label [mc "Diff selected -> this"] \
-	-command {diffvssel 1}
-    $fakerowmenu add command -label [mc "Make patch"] -command mkpatch
-#    $fakerowmenu add command -label [mc "Commit"] -command {mkcommit 0}
-#    $fakerowmenu add command -label [mc "Commit all"] -command {mkcommit 1}
-#    $fakerowmenu add command -label [mc "Revert local changes"] -command revertlocal
+    makemenu $fakerowmenu {
+	{"Diff this -> selected" command {diffvssel 0}}
+	{"Diff selected -> this" command {diffvssel 1}}
+	{"Make patch" command mkpatch}
+    }
+    $fakerowmenu configure -tearoff 0
 
     set headctxmenu .headctxmenu
-    menu $headctxmenu -tearoff 0
-    $headctxmenu add command -label [mc "Check out this branch"] \
-	-command cobranch
-    $headctxmenu add command -label [mc "Remove this branch"] \
-	-command rmbranch
+    makemenu $headctxmenu {
+	{"Check out this branch" command cobranch}
+	{"Remove this branch" command rmbranch}
+    }
+    $headctxmenu configure -tearoff 0
 
     global flist_menu
     set flist_menu .flistctxmenu
-    menu $flist_menu -tearoff 0
-    $flist_menu add command -label [mc "Highlight this too"] \
-	-command {flist_hl 0}
-    $flist_menu add command -label [mc "Highlight this only"] \
-	-command {flist_hl 1}
-    $flist_menu add command -label [mc "External diff"] \
-        -command {external_diff}
-    $flist_menu add command -label [mc "Blame parent commit"] \
-        -command {external_blame 1}
+    makemenu $flist_menu {
+	{"Highlight this too" command {flist_hl 0}}
+	{"Highlight this only" command {flist_hl 1}}
+	{"External diff" command {external_diff}}
+	{"Blame parent commit" command {external_blame 1}}
+    }
+    $flist_menu configure -tearoff 0
 }
 
 # Windows sends all mouse wheel events to the current focused window, not
@@ -3376,8 +3404,8 @@ proc showview {n} {
 
     set curview $n
     set selectedview $n
-    .bar.view entryconf [mc "Edit view..."] -state [expr {$n == 0? "disabled": "normal"}]
-    .bar.view entryconf [mc "Delete view"] -state [expr {$n == 0? "disabled": "normal"}]
+    .bar.view entryconf [mca "Edit view..."] -state [expr {$n == 0? "disabled": "normal"}]
+    .bar.view entryconf [mca "Delete view"] -state [expr {$n == 0? "disabled": "normal"}]
 
     run refill_reflist
     if {![info exists viewcomplete($n)]} {
@@ -7323,9 +7351,9 @@ proc rowmenu {x y id} {
     } else {
 	set menu $fakerowmenu
     }
-    $menu entryconfigure [mc "Diff this -> selected"] -state $state
-    $menu entryconfigure [mc "Diff selected -> this"] -state $state
-    $menu entryconfigure [mc "Make patch"] -state $state
+    $menu entryconfigure [mca "Diff this -> selected"] -state $state
+    $menu entryconfigure [mca "Diff selected -> this"] -state $state
+    $menu entryconfigure [mca "Make patch"] -state $state
     tk_popup $menu $x $y
 }
 
@@ -10146,8 +10174,8 @@ if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
     set viewperm(1) 0
     set vdatemode(1) 0
     addviewmenu 1
-    .bar.view entryconf [mc "Edit view..."] -state normal
-    .bar.view entryconf [mc "Delete view"] -state normal
+    .bar.view entryconf [mca "Edit view..."] -state normal
+    .bar.view entryconf [mca "Delete view"] -state normal
 }
 
 if {[info exists permviews]} {

From 79056034bece6bf39140554eb48f293053828d4d Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Sat, 18 Oct 2008 16:24:46 +1100
Subject: [PATCH 10/11] gitk: Regenerate .po files

This is the result of running make update-po and removing or fixing
the strings that were fuzzily matched.  The ones that were fixed were
the ones where the only change was "git rev-list" to "git log", and
the "about gitk" message where the copyright year got updated.

To get xgettext to see the menu labels as needing translation, it
was necessary for arrange for them to be preceded by "mc".  This
therefore changes makemenu to ignore the first element in each
menu item so that it can be "mc" in the makemenu call.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk     |  88 +++++-----
 po/de.po | 460 ++++++++++++++++++++++++-------------------------
 po/es.po | 507 +++++++++++++++++++++++++++++--------------------------
 po/it.po | 500 ++++++++++++++++++++++++++++--------------------------
 po/sv.po | 448 ++++++++++++++++++++++++------------------------
 5 files changed, 1037 insertions(+), 966 deletions(-)

diff --git a/gitk b/gitk
index dedc95dcf9..3678de1959 100755
--- a/gitk
+++ b/gitk
@@ -1750,12 +1750,20 @@ proc setoptions {} {
     option add *Entry.font uifont startupFile
 }
 
+# Make a menu and submenus.
+# m is the window name for the menu, items is the list of menu items to add.
+# Each item is a list {mc label type description options...}
+# mc is ignored; it's so we can put mc there to alert xgettext
+# label is the string that appears in the menu
+# type is cascade, command or radiobutton (should add checkbutton)
+# 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
     foreach i $items {
-	set name [mc [lindex $i 0]]
-	set type [lindex $i 1]
-	set thing [lindex $i 2]
+	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]]
@@ -1766,7 +1774,7 @@ proc makemenu {m items} {
 	}
 	switch -- $type {
 	    "cascade" {
-		set submenu [string tolower [string map {& ""} [lindex $i 0]]]
+		set submenu [string tolower [string map {& ""} [lindex $i 1]]]
 		lappend params -menu $m.$submenu
 	    }
 	    "command" {
@@ -1777,7 +1785,7 @@ proc makemenu {m items} {
 		    -value [lindex $thing 1]
 	    }
 	}
-	eval $m add $params [lrange $i 3 end]
+	eval $m add $params [lrange $i 4 end]
 	if {$type eq "cascade"} {
 	    makemenu $m.$submenu $thing
 	}
@@ -1806,27 +1814,29 @@ proc makewindow {} {
     global rprogitem rprogcoord rownumsel numcommits
     global have_tk85
 
+    # The "mc" arguments here are purely so that xgettext
+    # sees the following string as needing to be translated
     makemenu .bar {
-	{"File" cascade {
-	    {"Update" command updatecommits -accelerator F5}
-	    {"Reload" command reloadcommits}
-	    {"Reread references" command rereadrefs}
-	    {"List references" command showrefs}
-	    {"Quit" command doquit}
+	{mc "File" cascade {
+	    {mc "Update" command updatecommits -accelerator F5}
+	    {mc "Reload" command reloadcommits}
+	    {mc "Reread references" command rereadrefs}
+	    {mc "List references" command showrefs}
+	    {mc "Quit" command doquit}
 	}}
-	{"Edit" cascade {
-	    {"Preferences" command doprefs}
+	{mc "Edit" cascade {
+	    {mc "Preferences" command doprefs}
 	}}
-	{"View" cascade {
-	    {"New view..." command {newview 0}}
-	    {"Edit view..." command editview -state disabled}
-	    {"Delete view" command delview -state disabled}
-	    {"" separator}
-	    {"All files" radiobutton {selectedview 0} -command {showview 0}}
+	{mc "View" cascade {
+	    {mc "New view..." command {newview 0}}
+	    {mc "Edit view..." command editview -state disabled}
+	    {mc "Delete view" command delview -state disabled}
+	    {xx "" separator}
+	    {mc "All files" radiobutton {selectedview 0} -command {showview 0}}
 	}}
-	{"Help" cascade {
-	    {"About gitk" command about}
-	    {"Key bindings" command keys}
+	{mc "Help" cascade {
+	    {mc "About gitk" command about}
+	    {mc "Key bindings" command keys}
 	}}
     }
     . configure -menu .bar
@@ -2210,39 +2220,39 @@ proc makewindow {} {
 
     set rowctxmenu .rowctxmenu
     makemenu $rowctxmenu {
-	{"Diff this -> selected" command {diffvssel 0}}
-	{"Diff selected -> this" command {diffvssel 1}}
-	{"Make patch" command mkpatch}
-	{"Create tag" command mktag}
-	{"Write commit to file" command writecommit}
-	{"Create new branch" command mkbranch}
-	{"Cherry-pick this commit" command cherrypick}
-	{"Reset HEAD branch to here" command resethead}
+	{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 "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}
     }
     $rowctxmenu configure -tearoff 0
 
     set fakerowmenu .fakerowmenu
     makemenu $fakerowmenu {
-	{"Diff this -> selected" command {diffvssel 0}}
-	{"Diff selected -> this" command {diffvssel 1}}
-	{"Make patch" command mkpatch}
+	{mc "Diff this -> selected" command {diffvssel 0}}
+	{mc "Diff selected -> this" command {diffvssel 1}}
+	{mc "Make patch" command mkpatch}
     }
     $fakerowmenu configure -tearoff 0
 
     set headctxmenu .headctxmenu
     makemenu $headctxmenu {
-	{"Check out this branch" command cobranch}
-	{"Remove this branch" command rmbranch}
+	{mc "Check out this branch" command cobranch}
+	{mc "Remove this branch" command rmbranch}
     }
     $headctxmenu configure -tearoff 0
 
     global flist_menu
     set flist_menu .flistctxmenu
     makemenu $flist_menu {
-	{"Highlight this too" command {flist_hl 0}}
-	{"Highlight this only" command {flist_hl 1}}
-	{"External diff" command {external_diff}}
-	{"Blame parent commit" command {external_blame 1}}
+	{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}}
     }
     $flist_menu configure -tearoff 0
 }
diff --git a/po/de.po b/po/de.po
index 04ee570995..c86cc2df5e 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-24 22:32+0200\n"
+"POT-Creation-Date: 2008-10-18 22:03+1100\n"
 "PO-Revision-Date: 2008-05-24 22:40+0200\n"
 "Last-Translator: Christian Stimming <stimming@tuhh.de>\n"
 "Language-Team: German\n"
@@ -15,17 +15,17 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: gitk:102
+#: gitk:113
 msgid "Couldn't get list of unmerged files:"
 msgstr "Liste der nicht-zusammengeführten Dateien nicht gefunden:"
 
-#: gitk:329
+#: gitk:340
 msgid "No files selected: --merge specified but no files are unmerged."
 msgstr ""
 "Keine Dateien ausgewählt: --merge angegeben, es existieren aber keine nicht-"
 "zusammengeführten Dateien."
 
-#: gitk:332
+#: gitk:343
 msgid ""
 "No files selected: --merge specified but no unmerged files are within file "
 "limit."
@@ -33,257 +33,261 @@ msgstr ""
 "Keine Dateien ausgewähle: --merge angegeben, aber keine nicht-"
 "zusammengeführten Dateien sind in der Dateiauswahl."
 
-#: gitk:354
+#: gitk:365 gitk:503
 msgid "Error executing git log:"
 msgstr "Fehler beim Ausführen von git-log:"
 
-#: gitk:369
+#: gitk:378
 msgid "Reading"
 msgstr "Lesen"
 
-#: gitk:151 gitk:2191
+#: gitk:438 gitk:3462
 msgid "Reading commits..."
 msgstr "Versionen lesen..."
 
-#: gitk:275
-msgid "Can't parse git log output:"
-msgstr "Ausgabe von git-log kann nicht erkannt werden:"
-
-#: gitk:386 gitk:2195
+#: gitk:441 gitk:1528 gitk:3465
 msgid "No commits selected"
 msgstr "Keine Versionen ausgewählt."
 
-#: gitk:500
+#: gitk:1399
+msgid "Can't parse git log output:"
+msgstr "Ausgabe von git-log kann nicht erkannt werden:"
+
+#: gitk:1605
 msgid "No commit information available"
 msgstr "Keine Versionsinformation verfügbar"
 
-#: gitk:599 gitk:621 gitk:1955 gitk:6424 gitk:7924 gitk:8083
+#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
 msgid "OK"
 msgstr "Ok"
 
-#: gitk:623 gitk:1956 gitk:6108 gitk:6179 gitk:6276 gitk:6322 gitk:6426
-#: gitk:7925 gitk:8084
+#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
+#: gitk:9294 gitk:9467
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: gitk:661
-msgid "File"
-msgstr "Datei"
-
-#: gitk:663
+#: gitk:1811
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: gitk:1722
+#: gitk:1812
 msgid "Reload"
 msgstr "Neu laden"
 
-#: gitk:1723
+#: gitk:1813
 msgid "Reread references"
 msgstr "Zweige neu laden"
 
-#: gitk:665
+#: gitk:1814
 msgid "List references"
 msgstr "Zweige/Markierungen auflisten"
 
-#: gitk:666
+#: gitk:1815
 msgid "Quit"
 msgstr "Beenden"
 
-#: gitk:668
-msgid "Edit"
-msgstr "Bearbeiten"
+#: gitk:1810
+msgid "File"
+msgstr "Datei"
 
-#: gitk:669
+#: gitk:1818
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: gitk:672 gitk:1892
-msgid "View"
-msgstr "Ansicht"
+#: gitk:1817
+msgid "Edit"
+msgstr "Bearbeiten"
 
-#: gitk:673
+#: gitk:1821
 msgid "New view..."
 msgstr "Neue Ansicht..."
 
-#: gitk:674 gitk:2133 gitk:8723
+#: gitk:1822
 msgid "Edit view..."
 msgstr "Ansicht bearbeiten..."
 
-#: gitk:676 gitk:2134 gitk:8724
+#: gitk:1823
 msgid "Delete view"
 msgstr "Ansicht löschen"
 
-#: gitk:678
+#: gitk:1825
 msgid "All files"
 msgstr "Alle Dateien"
 
-#: gitk:682
-msgid "Help"
-msgstr "Hilfe"
+#: gitk:1820 gitk:3196
+msgid "View"
+msgstr "Ansicht"
 
-#: gitk:683 gitk:1317
+#: gitk:1828 gitk:2487
 msgid "About gitk"
 msgstr "Über gitk"
 
-#: gitk:684
+#: gitk:1829
 msgid "Key bindings"
 msgstr "Tastenkürzel"
 
-#: gitk:741
+#: gitk:1827
+msgid "Help"
+msgstr "Hilfe"
+
+#: gitk:1887
 msgid "SHA1 ID: "
 msgstr "SHA1:"
 
-#: gitk:1831
+#: gitk:1918
 msgid "Row"
 msgstr "Zeile"
 
-#: gitk:1862
+#: gitk:1949
 msgid "Find"
 msgstr "Suche"
 
-#: gitk:792
+#: gitk:1950
 msgid "next"
 msgstr "nächste"
 
-#: gitk:793
+#: gitk:1951
 msgid "prev"
 msgstr "vorige"
 
-#: gitk:794
+#: gitk:1952
 msgid "commit"
 msgstr "Version nach"
 
-#: gitk:797 gitk:799 gitk:2356 gitk:2379 gitk:2403 gitk:4306 gitk:4369
+#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
 msgid "containing:"
 msgstr "Beschreibung:"
 
-#: gitk:800 gitk:1778 gitk:1783 gitk:2431
+#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
 msgid "touching paths:"
 msgstr "Dateien:"
 
-#: gitk:801 gitk:2436
+#: gitk:1959 gitk:3697
 msgid "adding/removing string:"
 msgstr "Änderungen:"
 
-#: gitk:810 gitk:812
+#: gitk:1968 gitk:1970
 msgid "Exact"
 msgstr "Exakt"
 
-#: gitk:812 gitk:2514 gitk:4274
+#: gitk:1970 gitk:3773 gitk:5518
 msgid "IgnCase"
 msgstr "Kein Groß/Klein"
 
-#: gitk:812 gitk:2405 gitk:2512 gitk:4270
+#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
 msgid "Regexp"
 msgstr "Regexp"
 
-#: gitk:814 gitk:815 gitk:2533 gitk:2563 gitk:2570 gitk:4380 gitk:4436
+#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
 msgid "All fields"
 msgstr "Alle Felder"
 
-#: gitk:815 gitk:2531 gitk:2563 gitk:4336
+#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
 msgid "Headline"
 msgstr "Überschrift"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4436 gitk:4827
+#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
 msgid "Comments"
 msgstr "Beschreibung"
 
-#: gitk:816 gitk:2531 gitk:2535 gitk:2570 gitk:4336 gitk:4763 gitk:5957
-#: gitk:5972
+#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
+#: gitk:7300
 msgid "Author"
 msgstr "Autor"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4765
+#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
 msgid "Committer"
 msgstr "Eintragender"
 
-#: gitk:845
+#: gitk:2003
 msgid "Search"
 msgstr "Suche"
 
-#: gitk:852
+#: gitk:2010
 msgid "Diff"
 msgstr "Vergleich"
 
-#: gitk:854
+#: gitk:2012
 msgid "Old version"
 msgstr "Alte Version"
 
-#: gitk:856
+#: gitk:2014
 msgid "New version"
 msgstr "Neue Version"
 
-#: gitk:858
+#: gitk:2016
 msgid "Lines of context"
 msgstr "Kontextzeilen"
 
-#: gitk:868
+#: gitk:2026
 msgid "Ignore space change"
 msgstr "Leerzeichenänderungen ignorieren"
 
-#: gitk:926
+#: gitk:2084
 msgid "Patch"
 msgstr "Patch"
 
-#: gitk:928
+#: gitk:2086
 msgid "Tree"
 msgstr "Baum"
 
-#: gitk:1053 gitk:1068 gitk:6023
+#: gitk:2213 gitk:2226
 msgid "Diff this -> selected"
 msgstr "Vergleich diese -> gewählte"
 
-#: gitk:1055 gitk:1070 gitk:6024
+#: gitk:2214 gitk:2227
 msgid "Diff selected -> this"
 msgstr "Vergleich gewählte -> diese"
 
-#: gitk:1057 gitk:1072 gitk:6025
+#: gitk:2215 gitk:2228
 msgid "Make patch"
 msgstr "Patch erstellen"
 
-#: gitk:1058 gitk:6163
+#: gitk:2216 gitk:7494
 msgid "Create tag"
 msgstr "Markierung erstellen"
 
-#: gitk:1059 gitk:6256
+#: gitk:2217 gitk:7593
 msgid "Write commit to file"
 msgstr "Version in Datei schreiben"
 
-#: gitk:1060 gitk:6310
+#: gitk:2218 gitk:7647
 msgid "Create new branch"
 msgstr "Neuen Zweig erstellen"
 
-#: gitk:1061
+#: gitk:2219
 msgid "Cherry-pick this commit"
 msgstr "Diese Version pflücken"
 
-#: gitk:1063
+#: gitk:2220
 msgid "Reset HEAD branch to here"
 msgstr "HEAD-Zweig auf diese Version zurücksetzen"
 
-#: gitk:1079
+#: gitk:2234
 msgid "Check out this branch"
 msgstr "Auf diesen Zweig umstellen"
 
-#: gitk:1081
+#: gitk:2235
 msgid "Remove this branch"
 msgstr "Zweig löschen"
 
-#: gitk:1087
+#: gitk:2242
 msgid "Highlight this too"
 msgstr "Diesen auch hervorheben"
 
-#: gitk:1089
+#: gitk:2243
 msgid "Highlight this only"
 msgstr "Nur diesen hervorheben"
 
-#: gitk:2162
+#: gitk:2244
 msgid "External diff"
 msgstr "Externer Vergleich"
 
-#: gitk:2403
+#: gitk:2245
+msgid "Blame parent commit"
+msgstr ""
+
+#: gitk:2488
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
@@ -297,431 +301,431 @@ msgstr ""
 "\n"
 "Copyright © 2005-2008 Paul Mackerras\n"
 "\n"
-"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public License"
+"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public "
+"License"
 
-#: gitk:1326 gitk:1387 gitk:6582
+#: gitk:2496 gitk:2557 gitk:7943
 msgid "Close"
 msgstr "Schließen"
 
-#: gitk:1345
+#: gitk:2515
 msgid "Gitk key bindings"
 msgstr "Gitk Tastaturbelegung"
 
-#: gitk:1347
+#: gitk:2517
 msgid "Gitk key bindings:"
 msgstr "Gitk Tastaturbelegung:"
 
-#: gitk:1349
+#: gitk:2519
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\tBeenden"
 
-#: gitk:1350
+#: gitk:2520
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Pos1>\t\tZur neuesten Version springen"
 
-#: gitk:1351
+#: gitk:2521
 msgid "<End>\t\tMove to last commit"
 msgstr "<Ende>\t\tZur ältesten Version springen"
 
-#: gitk:1352
+#: gitk:2522
 msgid "<Up>, p, i\tMove up one commit"
 msgstr "<Hoch>, p, i\tNächste neuere Version"
 
-#: gitk:1353
+#: gitk:2523
 msgid "<Down>, n, k\tMove down one commit"
 msgstr "<Runter>, n, k\tNächste ältere Version"
 
-#: gitk:1354
+#: gitk:2524
 msgid "<Left>, z, j\tGo back in history list"
 msgstr "<Links>, z, j\tEine Version zurückgehen"
 
-#: gitk:1355
+#: gitk:2525
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Rechts>, x, l\tEine Version weitergehen"
 
-#: gitk:1356
+#: gitk:2526
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<BildHoch>\tEine Seite nach oben blättern"
 
-#: gitk:1357
+#: gitk:2527
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<BildRunter>\tEine Seite nach unten blättern"
 
-#: gitk:1358
+#: gitk:2528
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Pos1>\tZum oberen Ende der Versionsliste blättern"
 
-#: gitk:1359
+#: gitk:2529
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-Ende>\tZum unteren Ende der Versionsliste blättern"
 
-#: gitk:1360
+#: gitk:2530
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Hoch>\tVersionsliste eine Zeile nach oben blättern"
 
-#: gitk:1361
+#: gitk:2531
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Runter>\tVersionsliste eine Zeile nach unten blättern"
 
-#: gitk:1362
+#: gitk:2532
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-BildHoch>\tVersionsliste eine Seite hoch blättern"
 
-#: gitk:1363
+#: gitk:2533
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-BildRunter>\tVersionsliste eine Seite nach unten blättern"
 
-#: gitk:1364
+#: gitk:2534
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Umschalt-Hoch>\tRückwärts suchen (nach oben; neuere Versionen)"
 
-#: gitk:1365
+#: gitk:2535
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Umschalt-Runter> Suchen (nach unten; ältere Versionen)"
 
-#: gitk:1366
+#: gitk:2536
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Entf>, b\t\tVergleich eine Seite nach oben blättern"
 
-#: gitk:1367
+#: gitk:2537
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Löschtaste>\tVergleich eine Seite nach oben blättern"
 
-#: gitk:1368
+#: gitk:2538
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Leertaste>\tVergleich eine Seite nach unten blättern"
 
-#: gitk:1369
+#: gitk:2539
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tVergleich um 18 Zeilen nach oben (»up«) blättern"
 
-#: gitk:1370
+#: gitk:2540
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tVergleich um 18 Zeilen nach unten (»down«) blättern"
 
-#: gitk:1371
+#: gitk:2541
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\tSuchen"
 
-#: gitk:1372
+#: gitk:2542
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\tWeitersuchen"
 
-#: gitk:1373
+#: gitk:2543
 msgid "<Return>\tMove to next find hit"
 msgstr "<Eingabetaste>\tWeitersuchen"
 
-#: gitk:1374
+#: gitk:2544
 msgid "/\t\tMove to next find hit, or redo find"
 msgstr "/\t\tWeitersuchen oder neue Suche beginnen"
 
-#: gitk:1375
+#: gitk:2545
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\tRückwärts weitersuchen"
 
-#: gitk:1376
+#: gitk:2546
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\tVergleich zur nächsten Datei (»file«) blättern"
 
-#: gitk:1377
+#: gitk:2547
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tWeitersuchen im Vergleich"
 
-#: gitk:1378
+#: gitk:2548
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tRückwärts weitersuchen im Vergleich"
 
-#: gitk:1379
+#: gitk:2549
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-Nummerblock-Plus>\tSchriftgröße vergrößern"
 
-#: gitk:1380
+#: gitk:2550
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-Plus>\tSchriftgröße vergrößern"
 
-#: gitk:1381
+#: gitk:2551
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-Nummernblock-> Schriftgröße verkleinern"
 
-#: gitk:1382
+#: gitk:2552
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-Minus>\tSchriftgröße verkleinern"
 
-#: gitk:1383
+#: gitk:2553
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\tAktualisieren"
 
-#: gitk:1896
+#: gitk:3200
 msgid "Gitk view definition"
 msgstr "Gitk Ansichten"
 
-#: gitk:1921
+#: gitk:3225
 msgid "Name"
 msgstr "Name"
 
-#: gitk:1924
+#: gitk:3228
 msgid "Remember this view"
 msgstr "Diese Ansicht speichern"
 
-#: gitk:3126
+#: gitk:3232
 msgid "Commits to include (arguments to git log):"
 msgstr "Versionen anzeigen (Argumente von git-log):"
 
-#: gitk:3133
+#: gitk:3239
 msgid "Command to generate more commits to include:"
 msgstr "Versionsliste durch folgendes Kommando erzeugen lassen:"
 
-#: gitk:1942
+#: gitk:3246
 msgid "Enter files and directories to include, one per line:"
 msgstr "Folgende Dateien und Verzeichnisse anzeigen (eine pro Zeile):"
 
-#: gitk:1989
+#: gitk:3293
 msgid "Error in commit selection arguments:"
 msgstr "Fehler in den ausgewählten Versionen:"
 
-#: gitk:2043 gitk:2127 gitk:2583 gitk:2597 gitk:3781 gitk:8689 gitk:8690
+#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
 msgid "None"
 msgstr "Keine"
 
-#: gitk:2531 gitk:4336 gitk:5959 gitk:5974
+#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
 msgid "Date"
 msgstr "Datum"
 
-#: gitk:2531 gitk:4336
+#: gitk:3790 gitk:5580
 msgid "CDate"
 msgstr "Eintragedatum"
 
-#: gitk:2680 gitk:2685
+#: gitk:3939 gitk:3944
 msgid "Descendant"
 msgstr "Abkömmling"
 
-#: gitk:2681
+#: gitk:3940
 msgid "Not descendant"
 msgstr "Nicht Abkömmling"
 
-#: gitk:2688 gitk:2693
+#: gitk:3947 gitk:3952
 msgid "Ancestor"
 msgstr "Vorgänger"
 
-#: gitk:2689
+#: gitk:3948
 msgid "Not ancestor"
 msgstr "Nicht Vorgänger"
 
-#: gitk:2924
+#: gitk:4187
 msgid "Local changes checked in to index but not committed"
 msgstr "Lokale Änderungen bereitgestellt, aber nicht eingetragen"
 
-#: gitk:2954
+#: gitk:4220
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "Lokale Änderungen, nicht bereitgestellt"
 
-#: gitk:4305
+#: gitk:5549
 msgid "Searching"
 msgstr "Suchen"
 
-#: gitk:4767
+#: gitk:6049
 msgid "Tags:"
 msgstr "Markierungen:"
 
-#: gitk:4784 gitk:4790 gitk:5952
+#: gitk:6066 gitk:6072 gitk:7280
 msgid "Parent"
 msgstr "Eltern"
 
-#: gitk:4795
+#: gitk:6077
 msgid "Child"
 msgstr "Kind"
 
-#: gitk:4804
+#: gitk:6086
 msgid "Branch"
 msgstr "Zweig"
 
-#: gitk:4807
+#: gitk:6089
 msgid "Follows"
 msgstr "Folgt auf"
 
-#: gitk:4810
+#: gitk:6092
 msgid "Precedes"
 msgstr "Vorgänger von"
 
-#: gitk:5094
+#: gitk:6378
 msgid "Error getting merge diffs:"
 msgstr "Fehler beim Laden des Vergleichs:"
 
-#: gitk:5779
+#: gitk:7113
 msgid "Goto:"
 msgstr "Gehe zu:"
 
-#: gitk:5781
+#: gitk:7115
 msgid "SHA1 ID:"
 msgstr "SHA1-Hashwert:"
 
-#: gitk:5806
+#: gitk:7134
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "Kurzer SHA1-Hashwert »%s« ist mehrdeutig"
 
-#: gitk:5818
+#: gitk:7146
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "SHA1-Hashwert »%s« unbekannt"
 
-#: gitk:5820
+#: gitk:7148
 #, tcl-format
 msgid "Tag/Head %s is not known"
 msgstr "Markierung/Zweig »%s« ist unbekannt"
 
-#: gitk:5962
+#: gitk:7290
 msgid "Children"
 msgstr "Kinder"
 
-#: gitk:6019
+#: gitk:7347
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "Zweig »%s« hierher zurücksetzen"
 
-#: gitk:7204
+#: gitk:7349
 msgid "Detached head: can't reset"
 msgstr "Zweigspitze ist abgetrennt: Zurücksetzen nicht möglich"
 
-#: gitk:7236
+#: gitk:7381
 msgid "Top"
 msgstr "Oben"
 
-#: gitk:6051
+#: gitk:7382
 msgid "From"
 msgstr "Von"
 
-#: gitk:6056
+#: gitk:7387
 msgid "To"
 msgstr "bis"
 
-#: gitk:6079
+#: gitk:7410
 msgid "Generate patch"
 msgstr "Patch erstellen"
 
-#: gitk:6081
+#: gitk:7412
 msgid "From:"
 msgstr "Von:"
 
-#: gitk:6090
+#: gitk:7421
 msgid "To:"
 msgstr "bis:"
 
-#: gitk:6099
+#: gitk:7430
 msgid "Reverse"
 msgstr "Umgekehrt"
 
-#: gitk:6101 gitk:6270
+#: gitk:7432 gitk:7607
 msgid "Output file:"
 msgstr "Ausgabedatei:"
 
-#: gitk:6107
+#: gitk:7438
 msgid "Generate"
 msgstr "Erzeugen"
 
-#: gitk:6143
+#: gitk:7474
 msgid "Error creating patch:"
 msgstr "Fehler beim Patch erzeugen:"
 
-#: gitk:6165 gitk:6258 gitk:6312
+#: gitk:7496 gitk:7595 gitk:7649
 msgid "ID:"
 msgstr "ID:"
 
-#: gitk:6174
+#: gitk:7505
 msgid "Tag name:"
 msgstr "Markierungsname:"
 
-#: gitk:6178 gitk:6321
+#: gitk:7509 gitk:7659
 msgid "Create"
 msgstr "Erstellen"
 
-#: gitk:6193
+#: gitk:7524
 msgid "No tag name specified"
 msgstr "Kein Markierungsname angegeben"
 
-#: gitk:6197
+#: gitk:7528
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "Markierung »%s« existiert bereits."
 
-#: gitk:6203
+#: gitk:7534
 msgid "Error creating tag:"
 msgstr "Fehler bei Markierung erstellen:"
 
-#: gitk:6267
+#: gitk:7604
 msgid "Command:"
 msgstr "Kommando:"
 
-#: gitk:6275
+#: gitk:7612
 msgid "Write"
 msgstr "Schreiben"
 
-#: gitk:6291
+#: gitk:7628
 msgid "Error writing commit:"
 msgstr "Fehler beim Schreiben der Version:"
 
-#: gitk:6317
+#: gitk:7654
 msgid "Name:"
 msgstr "Name:"
 
-#: gitk:6336
+#: gitk:7674
 msgid "Please specify a name for the new branch"
 msgstr "Bitte geben Sie einen Namen für den neuen Zweig an."
 
-#: gitk:6365
+#: gitk:7703
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr ""
-"Version »%s« ist bereits im Zweig »%s« enthalten -- trotzdem erneut "
-"eintragen?"
+"Version »%s« ist bereits im Zweig »%s« enthalten -- trotzdem erneut eintragen?"
 
-#: gitk:6370
+#: gitk:7708
 msgid "Cherry-picking"
 msgstr "Version pflücken"
 
-#: gitk:6382
+#: gitk:7720
 msgid "No changes committed"
 msgstr "Keine Änderungen eingetragen"
 
-#: gitk:6405
+#: gitk:7745
 msgid "Confirm reset"
 msgstr "Zurücksetzen bestätigen"
 
-#: gitk:6407
+#: gitk:7747
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "Zweig »%s« auf »%s« zurücksetzen?"
 
-#: gitk:6411
+#: gitk:7751
 msgid "Reset type:"
 msgstr "Art des Zurücksetzens:"
 
-#: gitk:6415
+#: gitk:7755
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Harmlos: Arbeitskopie und Bereitstellung unverändert"
 
-#: gitk:6418
+#: gitk:7758
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr ""
 "Gemischt: Arbeitskopie unverändert,\n"
 "Bereitstellung zurückgesetzt"
 
-#: gitk:6421
+#: gitk:7761
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -729,21 +733,21 @@ msgstr ""
 "Hart: Arbeitskopie und Bereitstellung\n"
 "(Alle lokalen Änderungen werden gelöscht)"
 
-#: gitk:6437
+#: gitk:7777
 msgid "Resetting"
 msgstr "Zurücksetzen"
 
-#: gitk:6494
+#: gitk:7834
 msgid "Checking out"
 msgstr "Umstellen"
 
-#: gitk:6524
+#: gitk:7885
 msgid "Cannot delete the currently checked-out branch"
 msgstr ""
 "Der Zweig, auf den die Arbeitskopie momentan umgestellt ist, kann nicht "
 "gelöscht werden."
 
-#: gitk:6530
+#: gitk:7891
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -752,16 +756,16 @@ msgstr ""
 "Die Versionen auf Zweig »%s« existieren auf keinem anderen Zweig.\n"
 "Zweig »%s« trotzdem löschen?"
 
-#: gitk:6561
+#: gitk:7922
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "Markierungen und Zweige: %s"
 
-#: gitk:6575
+#: gitk:7936
 msgid "Filter"
 msgstr "Filtern"
 
-#: gitk:6869
+#: gitk:8230
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
@@ -769,125 +773,129 @@ msgstr ""
 "Fehler beim Lesen der Strukturinformationen; Zweige und Vorgänger/Nachfolger "
 "Informationen werden unvollständig sein."
 
-#: gitk:7853
+#: gitk:9216
 msgid "Tag"
 msgstr "Markierung"
 
-#: gitk:7853
+#: gitk:9216
 msgid "Id"
 msgstr "Id"
 
-#: gitk:7893
+#: gitk:9262
 msgid "Gitk font chooser"
 msgstr "Gitk Schriften wählen"
 
-#: gitk:7910
+#: gitk:9279
 msgid "B"
 msgstr "F"
 
-#: gitk:7913
+#: gitk:9282
 msgid "I"
 msgstr "K"
 
-#: gitk:8006
+#: gitk:9375
 msgid "Gitk preferences"
 msgstr "Gitk Einstellungen"
 
-#: gitk:8007
+#: gitk:9376
 msgid "Commit list display options"
 msgstr "Anzeige Versionsliste"
 
-#: gitk:8010
+#: gitk:9379
 msgid "Maximum graph width (lines)"
 msgstr "Maximale Graphenbreite (Zeilen)"
 
-#: gitk:8014
+#: gitk:9383
 #, tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "Maximale Graphenbreite (% des Fensters)"
 
-#: gitk:8019
+#: gitk:9388
 msgid "Show local changes"
 msgstr "Lokale Änderungen anzeigen"
 
-#: gitk:8024
+#: gitk:9393
 msgid "Auto-select SHA1"
 msgstr "SHA1-Hashwert automatisch markieren"
 
-#: gitk:8029
+#: gitk:9398
 msgid "Diff display options"
 msgstr "Anzeige Vergleich"
 
-#: gitk:8031
+#: gitk:9400
 msgid "Tab spacing"
 msgstr "Tabulatorbreite"
 
-#: gitk:8035
+#: gitk:9404
 msgid "Display nearby tags"
 msgstr "Naheliegende Überschriften anzeigen"
 
-#: gitk:8040
+#: gitk:9409
 msgid "Limit diffs to listed paths"
 msgstr "Vergleich nur für angezeigte Pfade"
 
-#: gitk:9264
+#: gitk:9414
+msgid "Support per-file encodings"
+msgstr ""
+
+#: gitk:9421
 msgid "External diff tool"
 msgstr "Externes Vergleich-(Diff-)Programm"
 
-#: gitk:9266
+#: gitk:9423
 msgid "Choose..."
 msgstr "Wählen..."
 
-#: gitk:9271
+#: gitk:9428
 msgid "Colors: press to choose"
 msgstr "Farben: Klicken zum Wählen"
 
-#: gitk:8048
+#: gitk:9431
 msgid "Background"
 msgstr "Hintergrund"
 
-#: gitk:8052
+#: gitk:9435
 msgid "Foreground"
 msgstr "Vordergrund"
 
-#: gitk:8056
+#: gitk:9439
 msgid "Diff: old lines"
 msgstr "Vergleich: Alte Zeilen"
 
-#: gitk:8061
+#: gitk:9444
 msgid "Diff: new lines"
 msgstr "Vergleich: Neue Zeilen"
 
-#: gitk:8066
+#: gitk:9449
 msgid "Diff: hunk header"
 msgstr "Vergleich: Änderungstitel"
 
-#: gitk:8072
+#: gitk:9455
 msgid "Select bg"
 msgstr "Hintergrundfarbe Auswählen"
 
-#: gitk:8076
+#: gitk:9459
 msgid "Fonts: press to choose"
 msgstr "Schriftart: Klicken zum Wählen"
 
-#: gitk:8078
+#: gitk:9461
 msgid "Main font"
 msgstr "Programmschriftart"
 
-#: gitk:8079
+#: gitk:9462
 msgid "Diff display font"
 msgstr "Vergleich"
 
-#: gitk:8080
+#: gitk:9463
 msgid "User interface font"
 msgstr "Beschriftungen"
 
-#: gitk:8096
+#: gitk:9488
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: Farbe wählen für %s"
 
-#: gitk:8477
+#: gitk:9934
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
@@ -895,24 +903,24 @@ msgstr ""
 "Gitk läuft nicht mit dieser Version von Tcl/Tk.\n"
 "Gitk benötigt mindestens Tcl/Tk 8.4."
 
-#: gitk:8566
+#: gitk:10047
 msgid "Cannot find a git repository here."
 msgstr "Kein Git-Projektarchiv gefunden."
 
-#: gitk:8570
+#: gitk:10051
 #, tcl-format
 msgid "Cannot find the git directory \"%s\"."
 msgstr "Git-Verzeichnis »%s« wurde nicht gefunden."
 
-#: gitk:8613
+#: gitk:10098
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
 msgstr "Mehrdeutige Angabe »%s«: Sowohl Version als auch Dateiname existiert."
 
-#: gitk:8625
+#: gitk:10110
 msgid "Bad arguments to gitk:"
 msgstr "Falsche Kommandozeilen-Parameter für gitk:"
 
-#: gitk:9915
+#: gitk:10170
 msgid "Command line"
 msgstr "Kommandozeile"
diff --git a/po/es.po b/po/es.po
index 2cb1486247..0e19b5eae2 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gitk\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-13 17:29+0100\n"
+"POT-Creation-Date: 2008-10-18 22:03+1100\n"
 "PO-Revision-Date: 2008-03-25 11:20+0100\n"
 "Last-Translator: Santiago Gala <santiago.gala@gmail.com>\n"
 "Language-Team: Spanish\n"
@@ -16,676 +16,702 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: gitk:111
-msgid "Error executing git rev-list:"
-msgstr "Error al ejecutar git rev-list:"
+#: gitk:113
+msgid "Couldn't get list of unmerged files:"
+msgstr "Imposible obtener la lista de archivos pendientes de fusión:"
 
-#: gitk:124
+#: gitk:340
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+"No hay archivos seleccionados: se seleccionó la opción --merge pero no hay "
+"archivos pendientes de fusión."
+
+#: gitk:343
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+"No hay archivos seleccionados: se seleccionó la opción --merge pero los "
+"archivos especificados no necesitan fusión."
+
+#: gitk:378
 msgid "Reading"
 msgstr "Leyendo"
 
-#: gitk:151 gitk:2191
+#: gitk:438 gitk:3462
 msgid "Reading commits..."
 msgstr "Leyendo revisiones..."
 
-#: gitk:275
-msgid "Can't parse git log output:"
-msgstr "Error analizando la salida de git log:"
-
-#: gitk:386 gitk:2195
+#: gitk:441 gitk:1528 gitk:3465
 msgid "No commits selected"
 msgstr "No se seleccionaron revisiones"
 
-#: gitk:500
+#: gitk:1399
+msgid "Can't parse git log output:"
+msgstr "Error analizando la salida de git log:"
+
+#: gitk:1605
 msgid "No commit information available"
 msgstr "Falta información sobre las revisiones"
 
-#: gitk:599 gitk:621 gitk:1955 gitk:6423 gitk:7923 gitk:8082
+#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
 msgid "OK"
 msgstr "Aceptar"
 
-#: gitk:623 gitk:1956 gitk:6107 gitk:6178 gitk:6275 gitk:6321 gitk:6425
-#: gitk:7924 gitk:8083
+#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
+#: gitk:9294 gitk:9467
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: gitk:661
-msgid "File"
-msgstr "Archivo"
-
-#: gitk:663
+#: gitk:1811
 msgid "Update"
 msgstr "Actualizar"
 
-#: gitk:664
+#: gitk:1813
 msgid "Reread references"
 msgstr "Releer referencias"
 
-#: gitk:665
+#: gitk:1814
 msgid "List references"
 msgstr "Lista de referencias"
 
-#: gitk:666
+#: gitk:1815
 msgid "Quit"
 msgstr "Salir"
 
-#: gitk:668
-msgid "Edit"
-msgstr "Editar"
+#: gitk:1810
+msgid "File"
+msgstr "Archivo"
 
-#: gitk:669
+#: gitk:1818
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: gitk:672 gitk:1892
-msgid "View"
-msgstr "Vista"
+#: gitk:1817
+msgid "Edit"
+msgstr "Editar"
 
-#: gitk:673
+#: gitk:1821
 msgid "New view..."
 msgstr "Nueva vista..."
 
-#: gitk:674 gitk:2133 gitk:8722
+#: gitk:1822
 msgid "Edit view..."
 msgstr "Modificar vista..."
 
-#: gitk:676 gitk:2134 gitk:8723
+#: gitk:1823
 msgid "Delete view"
 msgstr "Eliminar vista"
 
-#: gitk:678
+#: gitk:1825
 msgid "All files"
 msgstr "Todos los archivos"
 
-#: gitk:682
-msgid "Help"
-msgstr "Ayuda"
+#: gitk:1820 gitk:3196
+msgid "View"
+msgstr "Vista"
 
-#: gitk:683 gitk:1317
+#: gitk:1828 gitk:2487
 msgid "About gitk"
 msgstr "Acerca de gitk"
 
-#: gitk:684
+#: gitk:1829
 msgid "Key bindings"
 msgstr "Combinaciones de teclas"
 
-#: gitk:741
+#: gitk:1827
+msgid "Help"
+msgstr "Ayuda"
+
+#: gitk:1887
 msgid "SHA1 ID: "
 msgstr "SHA1 ID: "
 
-#: gitk:791
+#: gitk:1918
+msgid "Row"
+msgstr ""
+
+#: gitk:1949
 msgid "Find"
 msgstr "Buscar"
 
-#: gitk:792
+#: gitk:1950
 msgid "next"
 msgstr "<<"
 
-#: gitk:793
+#: gitk:1951
 msgid "prev"
 msgstr ">>"
 
-#: gitk:794
+#: gitk:1952
 msgid "commit"
 msgstr "revisión"
 
-#: gitk:797 gitk:799 gitk:2356 gitk:2379 gitk:2403 gitk:4306 gitk:4369
+#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
 msgid "containing:"
 msgstr "que contiene:"
 
-#: gitk:800 gitk:1778 gitk:1783 gitk:2431
+#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
 msgid "touching paths:"
 msgstr "que modifica la ruta:"
 
-#: gitk:801 gitk:2436
+#: gitk:1959 gitk:3697
 msgid "adding/removing string:"
 msgstr "que añade/elimina cadena:"
 
-#: gitk:810 gitk:812
+#: gitk:1968 gitk:1970
 msgid "Exact"
 msgstr "Exacto"
 
-#: gitk:812 gitk:2514 gitk:4274
+#: gitk:1970 gitk:3773 gitk:5518
 msgid "IgnCase"
 msgstr "NoMayús"
 
-#: gitk:812 gitk:2405 gitk:2512 gitk:4270
+#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
 msgid "Regexp"
 msgstr "Regex"
 
-#: gitk:814 gitk:815 gitk:2533 gitk:2563 gitk:2570 gitk:4380 gitk:4436
+#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
 msgid "All fields"
 msgstr "Todos los campos"
 
-#: gitk:815 gitk:2531 gitk:2563 gitk:4336
+#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
 msgid "Headline"
 msgstr "Título"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4436 gitk:4827
+#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
 msgid "Comments"
 msgstr "Comentarios"
 
-#: gitk:816 gitk:2531 gitk:2535 gitk:2570 gitk:4336 gitk:4763 gitk:5956
-#: gitk:5971
+#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
+#: gitk:7300
 msgid "Author"
 msgstr "Autor"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4765
+#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
 msgid "Committer"
 msgstr ""
 
-#: gitk:845
+#: gitk:2003
 msgid "Search"
 msgstr "Buscar"
 
-#: gitk:852
+#: gitk:2010
 msgid "Diff"
 msgstr "Diferencia"
 
-#: gitk:854
+#: gitk:2012
 msgid "Old version"
 msgstr "Versión antigua"
 
-#: gitk:856
+#: gitk:2014
 msgid "New version"
 msgstr "Versión nueva"
 
-#: gitk:858
+#: gitk:2016
 msgid "Lines of context"
 msgstr "Líneas de contexto"
 
-#: gitk:868
+#: gitk:2026
 msgid "Ignore space change"
 msgstr "Ignora cambios de espaciado"
 
-#: gitk:926
+#: gitk:2084
 msgid "Patch"
 msgstr "Parche"
 
-#: gitk:928
+#: gitk:2086
 msgid "Tree"
 msgstr "Árbol"
 
-#: gitk:1053 gitk:1068 gitk:6022
+#: gitk:2213 gitk:2226
 msgid "Diff this -> selected"
 msgstr "Diferencia de esta -> seleccionada"
 
-#: gitk:1055 gitk:1070 gitk:6023
+#: gitk:2214 gitk:2227
 msgid "Diff selected -> this"
 msgstr "Diferencia de seleccionada -> esta"
 
-#: gitk:1057 gitk:1072 gitk:6024
+#: gitk:2215 gitk:2228
 msgid "Make patch"
 msgstr "Crear patch"
 
-#: gitk:1058 gitk:6162
+#: gitk:2216 gitk:7494
 msgid "Create tag"
 msgstr "Crear etiqueta"
 
-#: gitk:1059 gitk:6255
+#: gitk:2217 gitk:7593
 msgid "Write commit to file"
 msgstr "Escribir revisiones a archivo"
 
-#: gitk:1060 gitk:6309
+#: gitk:2218 gitk:7647
 msgid "Create new branch"
 msgstr "Crear nueva rama"
 
-#: gitk:1061
+#: gitk:2219
 msgid "Cherry-pick this commit"
 msgstr "Añadir esta revisión a la rama actual (cherry-pick)"
 
-#: gitk:1063
+#: gitk:2220
 msgid "Reset HEAD branch to here"
 msgstr "Traer la rama HEAD aquí"
 
-#: gitk:1079
+#: gitk:2234
 msgid "Check out this branch"
 msgstr "Cambiar a esta rama"
 
-#: gitk:1081
+#: gitk:2235
 msgid "Remove this branch"
 msgstr "Eliminar esta rama"
 
-#: gitk:1087
+#: gitk:2242
 msgid "Highlight this too"
 msgstr "Seleccionar también"
 
-#: gitk:1089
+#: gitk:2243
 msgid "Highlight this only"
 msgstr "Seleccionar sólo"
 
-#: gitk:1318
+#: gitk:2245
+msgid "Blame parent commit"
+msgstr ""
+
+#: gitk:2488
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
 "\n"
-"Copyright © 2005-2006 Paul Mackerras\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
 "\n"
 "Use and redistribute under the terms of the GNU General Public License"
 msgstr ""
 "\n"
 "Gitk - un visualizador de revisiones para git\n"
 "\n"
-"Copyright © 2005-2006 Paul Mackerras\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
 "\n"
-"Uso y redistribución permitidos según los términos de la Licencia Pública General de "
-"GNU (GNU GPL)"
+"Uso y redistribución permitidos según los términos de la Licencia Pública "
+"General de GNU (GNU GPL)"
 
-#: gitk:1326 gitk:1387 gitk:6581
+#: gitk:2496 gitk:2557 gitk:7943
 msgid "Close"
 msgstr "Cerrar"
 
-#: gitk:1345
+#: gitk:2515
 msgid "Gitk key bindings"
 msgstr "Combinaciones de tecla de Gitk"
 
-#: gitk:1347
+#: gitk:2517
 msgid "Gitk key bindings:"
 msgstr "Combinaciones de tecla de Gitk:"
 
-#: gitk:1349
+#: gitk:2519
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\tSalir"
 
-#: gitk:1350
+#: gitk:2520
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Home>\t\tIr a la primera revisión"
 
-#: gitk:1351
+#: gitk:2521
 msgid "<End>\t\tMove to last commit"
 msgstr "<End>\t\tIr a la última revisión"
 
-#: gitk:1352
+#: gitk:2522
 msgid "<Up>, p, i\tMove up one commit"
 msgstr "<Up>, p, i\tSubir una revisión"
 
-#: gitk:1353
+#: gitk:2523
 msgid "<Down>, n, k\tMove down one commit"
 msgstr "<Down>, n, k\tBajar una revisión"
 
-#: gitk:1354
+#: gitk:2524
 msgid "<Left>, z, j\tGo back in history list"
 msgstr "<Left>, z, j\tRetroceder en la historia"
 
-#: gitk:1355
+#: gitk:2525
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Right>, x, l\tAvanzar en la historia"
 
-#: gitk:1356
+#: gitk:2526
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<PageUp>\tSubir una página en la lista de revisiones"
 
-#: gitk:1357
+#: gitk:2527
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<PageDown>\tBajar una página en la lista de revisiones"
 
-#: gitk:1358
+#: gitk:2528
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Home>\tDesplazarse al inicio de la lista de revisiones"
 
-#: gitk:1359
+#: gitk:2529
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-End>\tDesplazarse al final de la lista de revisiones"
 
-#: gitk:1360
+#: gitk:2530
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Up>\tDesplazar una línea hacia arriba la lista de revisiones"
 
-#: gitk:1361
+#: gitk:2531
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Down>\tDesplazar una línea hacia abajo la lista de revisiones"
 
-#: gitk:1362
+#: gitk:2532
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-PageUp>\tDesplazar una página hacia arriba la lista de revisiones"
 
-#: gitk:1363
+#: gitk:2533
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-PageDown>\tDesplazar una página hacia abajo la lista de revisiones"
 
-#: gitk:1364
+#: gitk:2534
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Shift-Up>\tBuscar hacia atrás (arriba, revisiones siguientes)"
 
-#: gitk:1365
+#: gitk:2535
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Shift-Down>\tBuscar hacia adelante (abajo, revisiones anteriores)"
 
-#: gitk:1366
+#: gitk:2536
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Delete>, b\tDesplaza hacia arriba una página la vista de diferencias"
 
-#: gitk:1367
+#: gitk:2537
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Backspace>\tDesplaza hacia arriba una página la vista de diferencias"
 
-#: gitk:1368
+#: gitk:2538
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Space>\t\tDesplaza hacia abajo una página la vista de diferencias"
 
-#: gitk:1369
+#: gitk:2539
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tDesplaza hacia arriba 18 líneas la vista de diferencias"
 
-#: gitk:1370
+#: gitk:2540
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tDesplaza hacia abajo 18 líneas la vista de diferencias"
 
-#: gitk:1371
+#: gitk:2541
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\tBuscar"
 
-#: gitk:1372
+#: gitk:2542
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\tBuscar el siguiente"
 
-#: gitk:1373
+#: gitk:2543
 msgid "<Return>\tMove to next find hit"
 msgstr "<Return>\tBuscar el siguiente"
 
-#: gitk:1374
+#: gitk:2544
 msgid "/\t\tMove to next find hit, or redo find"
 msgstr "/\t\tBuscar el siguiente, o reiniciar la búsqueda"
 
-#: gitk:1375
+#: gitk:2545
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\tBuscar el anterior"
 
-#: gitk:1376
+#: gitk:2546
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\tDesplazar la vista de diferencias al archivo siguiente"
 
-#: gitk:1377
+#: gitk:2547
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tBuscar siguiente en la vista de diferencias"
 
-#: gitk:1378
+#: gitk:2548
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tBuscar anterior en la vista de diferencias"
 
-#: gitk:1379
+#: gitk:2549
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-KP+>\tAumentar tamaño del texto"
 
-#: gitk:1380
+#: gitk:2550
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-plus>\tAumentar tamaño del texto"
 
-#: gitk:1381
+#: gitk:2551
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-KP->\tDisminuir tamaño del texto"
 
-#: gitk:1382
+#: gitk:2552
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-minus>\tDisminuir tamaño del texto"
 
-#: gitk:1383
+#: gitk:2553
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\tActualizar"
 
-#: gitk:1896
+#: gitk:3200
 msgid "Gitk view definition"
 msgstr "Definición de vistas de Gitk"
 
-#: gitk:1921
+#: gitk:3225
 msgid "Name"
 msgstr "Nombre"
 
-#: gitk:1924
+#: gitk:3228
 msgid "Remember this view"
 msgstr "Recordar esta vista"
 
-#: gitk:1928
-msgid "Commits to include (arguments to git rev-list):"
-msgstr "Revisiones a incluir (argumentos a git rev-list):"
+#: gitk:3232
+msgid "Commits to include (arguments to git log):"
+msgstr "Revisiones a incluir (argumentos a git log):"
 
-#: gitk:1935
+#: gitk:3239
 msgid "Command to generate more commits to include:"
 msgstr "Comando que genera más revisiones a incluir:"
 
-#: gitk:1942
+#: gitk:3246
 msgid "Enter files and directories to include, one per line:"
 msgstr "Introducir archivos y directorios a incluir, uno por línea:"
 
-#: gitk:1989
+#: gitk:3293
 msgid "Error in commit selection arguments:"
 msgstr "Error en los argumentos de selección de las revisiones:"
 
-#: gitk:2043 gitk:2127 gitk:2583 gitk:2597 gitk:3781 gitk:8688 gitk:8689
+#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
 msgid "None"
 msgstr "Ninguno"
 
-#: gitk:2531 gitk:4336 gitk:5958 gitk:5973
+#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
 msgid "Date"
 msgstr "Fecha"
 
-#: gitk:2531 gitk:4336
+#: gitk:3790 gitk:5580
 msgid "CDate"
 msgstr "Fecha de creación"
 
-#: gitk:2680 gitk:2685
+#: gitk:3939 gitk:3944
 msgid "Descendant"
 msgstr "Descendiente"
 
-#: gitk:2681
+#: gitk:3940
 msgid "Not descendant"
 msgstr "No descendiente"
 
-#: gitk:2688 gitk:2693
+#: gitk:3947 gitk:3952
 msgid "Ancestor"
 msgstr "Antepasado"
 
-#: gitk:2689
+#: gitk:3948
 msgid "Not ancestor"
 msgstr "No antepasado"
 
-#: gitk:2924
+#: gitk:4187
 msgid "Local changes checked in to index but not committed"
 msgstr "Cambios locales añadidos al índice pero sin completar revisión"
 
-#: gitk:2954
+#: gitk:4220
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "Cambios locales sin añadir al índice"
 
-#: gitk:4305
+#: gitk:5549
 msgid "Searching"
 msgstr "Buscando"
 
-#: gitk:4767
+#: gitk:6049
 msgid "Tags:"
 msgstr "Etiquetas:"
 
-#: gitk:4784 gitk:4790 gitk:5951
+#: gitk:6066 gitk:6072 gitk:7280
 msgid "Parent"
 msgstr "Padre"
 
-#: gitk:4795
+#: gitk:6077
 msgid "Child"
 msgstr "Hija"
 
-#: gitk:4804
+#: gitk:6086
 msgid "Branch"
 msgstr "Rama"
 
-#: gitk:4807
+#: gitk:6089
 msgid "Follows"
 msgstr "Sigue-a"
 
-#: gitk:4810
+#: gitk:6092
 msgid "Precedes"
 msgstr "Precede-a"
 
-#: gitk:5093
+#: gitk:6378
 msgid "Error getting merge diffs:"
 msgstr "Error al leer las diferencias de fusión:"
 
-#: gitk:5778
+#: gitk:7113
 msgid "Goto:"
 msgstr "Ir a:"
 
-#: gitk:5780
+#: gitk:7115
 msgid "SHA1 ID:"
 msgstr "SHA1 ID:"
 
-#: gitk:5805
+#: gitk:7134
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "La id SHA1 abreviada %s es ambigua"
 
-#: gitk:5817
+#: gitk:7146
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "La id SHA1 %s es desconocida"
 
-#: gitk:5819
+#: gitk:7148
 #, tcl-format
 msgid "Tag/Head %s is not known"
 msgstr "La etiqueta/rama %s es deconocida"
 
-#: gitk:5961
+#: gitk:7290
 msgid "Children"
 msgstr "Hijas"
 
-#: gitk:6018
+#: gitk:7347
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "Poner la rama %s en esta revisión"
 
-#: gitk:6049
+#: gitk:7349
+msgid "Detached head: can't reset"
+msgstr ""
+
+#: gitk:7381
 msgid "Top"
 msgstr "Origen"
 
-#: gitk:6050
+#: gitk:7382
 msgid "From"
 msgstr "De"
 
-#: gitk:6055
+#: gitk:7387
 msgid "To"
 msgstr "A"
 
-#: gitk:6078
+#: gitk:7410
 msgid "Generate patch"
 msgstr "Generar parche"
 
-#: gitk:6080
+#: gitk:7412
 msgid "From:"
 msgstr "De:"
 
-#: gitk:6089
+#: gitk:7421
 msgid "To:"
 msgstr "Para:"
 
-#: gitk:6098
+#: gitk:7430
 msgid "Reverse"
 msgstr "Invertir"
 
-#: gitk:6100 gitk:6269
+#: gitk:7432 gitk:7607
 msgid "Output file:"
 msgstr "Escribir a archivo:"
 
-#: gitk:6106
+#: gitk:7438
 msgid "Generate"
 msgstr "Generar"
 
-#: gitk:6142
+#: gitk:7474
 msgid "Error creating patch:"
 msgstr "Error en la creación del parche:"
 
-#: gitk:6164 gitk:6257 gitk:6311
+#: gitk:7496 gitk:7595 gitk:7649
 msgid "ID:"
 msgstr "ID:"
 
-#: gitk:6173
+#: gitk:7505
 msgid "Tag name:"
 msgstr "Nombre de etiqueta:"
 
-#: gitk:6177 gitk:6320
+#: gitk:7509 gitk:7659
 msgid "Create"
 msgstr "Crear"
 
-#: gitk:6192
+#: gitk:7524
 msgid "No tag name specified"
 msgstr "No se ha especificado etiqueta"
 
-#: gitk:6196
+#: gitk:7528
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "La etiqueta \"%s\" ya existe"
 
-#: gitk:6202
+#: gitk:7534
 msgid "Error creating tag:"
 msgstr "Error al crear la etiqueta:"
 
-#: gitk:6266
+#: gitk:7604
 msgid "Command:"
 msgstr "Comando:"
 
-#: gitk:6274
+#: gitk:7612
 msgid "Write"
 msgstr "Escribir"
 
-#: gitk:6290
+#: gitk:7628
 msgid "Error writing commit:"
 msgstr "Error al escribir revisión:"
 
-#: gitk:6316
+#: gitk:7654
 msgid "Name:"
 msgstr "Nombre:"
 
-#: gitk:6335
+#: gitk:7674
 msgid "Please specify a name for the new branch"
 msgstr "Especifique un nombre para la nueva rama"
 
-#: gitk:6364
+#: gitk:7703
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr "La revisión %s ya está incluida en la rama %s -- ¿Volver a aplicarla?"
 
-#: gitk:6369
+#: gitk:7708
 msgid "Cherry-picking"
 msgstr "Eligiendo revisiones (cherry-picking)"
 
-#: gitk:6381
+#: gitk:7720
 msgid "No changes committed"
 msgstr "No se han guardado cambios"
 
-#: gitk:6404
+#: gitk:7745
 msgid "Confirm reset"
 msgstr "Confirmar git reset"
 
-#: gitk:6406
+#: gitk:7747
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "¿Reponer la rama %s a %s?"
 
-#: gitk:6410
+#: gitk:7751
 msgid "Reset type:"
 msgstr "Tipo de reposición:"
 
-#: gitk:6414
+#: gitk:7755
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Suave: No altera la copia de trabajo ni el índice"
 
-#: gitk:6417
+#: gitk:7758
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr "Mixta: Actualiza el índice, no altera la copia de trabajo"
 
-#: gitk:6420
+#: gitk:7761
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -693,19 +719,19 @@ msgstr ""
 "Dura: Actualiza el índice y la copia de trabajo\n"
 "(abandona TODAS las modificaciones locales)"
 
-#: gitk:6436
+#: gitk:7777
 msgid "Resetting"
 msgstr "Reponiendo"
 
-#: gitk:6493
+#: gitk:7834
 msgid "Checking out"
 msgstr "Creando copia de trabajo"
 
-#: gitk:6523
+#: gitk:7885
 msgid "Cannot delete the currently checked-out branch"
 msgstr "No se puede borrar la rama actual"
 
-#: gitk:6529
+#: gitk:7891
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -714,134 +740,146 @@ msgstr ""
 "Las revisiones de la rama %s no están presentes en otras ramas.\n"
 "¿Borrar la rama %s?"
 
-#: gitk:6560
+#: gitk:7922
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "Etiquetas y ramas: %s"
 
-#: gitk:6574
+#: gitk:7936
 msgid "Filter"
 msgstr "Filtro"
 
-#: gitk:6868
+#: gitk:8230
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
 msgstr ""
-"Error al leer la topología de revisiones: la información sobre "
-"las ramas y etiquetas precedentes y siguientes será incompleta."
+"Error al leer la topología de revisiones: la información sobre las ramas y "
+"etiquetas precedentes y siguientes será incompleta."
 
-#: gitk:7852
+#: gitk:9216
 msgid "Tag"
 msgstr "Etiqueta"
 
-#: gitk:7852
+#: gitk:9216
 msgid "Id"
 msgstr "Id"
 
-#: gitk:7892
+#: gitk:9262
 msgid "Gitk font chooser"
 msgstr "Selector de tipografías gitk"
 
-#: gitk:7909
+#: gitk:9279
 msgid "B"
 msgstr "B"
 
-#: gitk:7912
+#: gitk:9282
 msgid "I"
 msgstr "I"
 
-#: gitk:8005
+#: gitk:9375
 msgid "Gitk preferences"
 msgstr "Preferencias de gitk"
 
-#: gitk:8006
+#: gitk:9376
 msgid "Commit list display options"
 msgstr "Opciones de visualización de la lista de revisiones"
 
-#: gitk:8009
+#: gitk:9379
 msgid "Maximum graph width (lines)"
 msgstr "Ancho máximo del gráfico (en líneas)"
 
-#: gitk:8013
+#: gitk:9383
 #, tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "Ancho máximo del gráfico (en % del panel)"
 
-#: gitk:8018
+#: gitk:9388
 msgid "Show local changes"
 msgstr "Mostrar cambios locales"
 
-#: gitk:8023
+#: gitk:9393
 msgid "Auto-select SHA1"
 msgstr "Seleccionar automáticamente SHA1 hash"
 
-#: gitk:8028
+#: gitk:9398
 msgid "Diff display options"
 msgstr "Opciones de visualización de diferencias"
 
-#: gitk:8030
+#: gitk:9400
 msgid "Tab spacing"
 msgstr "Espaciado de tabulador"
 
-#: gitk:8034
+#: gitk:9404
 msgid "Display nearby tags"
 msgstr "Mostrar etiquetas cercanas"
 
-#: gitk:8039
+#: gitk:9409
 msgid "Limit diffs to listed paths"
 msgstr "Limitar las diferencias a las rutas seleccionadas"
 
-#: gitk:8044
+#: gitk:9414
+msgid "Support per-file encodings"
+msgstr ""
+
+#: gitk:9421
+msgid "External diff tool"
+msgstr ""
+
+#: gitk:9423
+msgid "Choose..."
+msgstr ""
+
+#: gitk:9428
 msgid "Colors: press to choose"
 msgstr "Colores: pulse para seleccionar"
 
-#: gitk:8047
+#: gitk:9431
 msgid "Background"
 msgstr "Fondo"
 
-#: gitk:8051
+#: gitk:9435
 msgid "Foreground"
 msgstr "Primer plano"
 
-#: gitk:8055
+#: gitk:9439
 msgid "Diff: old lines"
 msgstr "Diff: líneas viejas"
 
-#: gitk:8060
+#: gitk:9444
 msgid "Diff: new lines"
 msgstr "Diff: líneas nuevas"
 
-#: gitk:8065
+#: gitk:9449
 msgid "Diff: hunk header"
 msgstr "Diff: cabecera de fragmento"
 
-#: gitk:8071
+#: gitk:9455
 msgid "Select bg"
 msgstr "Color de fondo de la selección"
 
-#: gitk:8075
+#: gitk:9459
 msgid "Fonts: press to choose"
 msgstr "Tipografías: pulse para elegir"
 
-#: gitk:8077
+#: gitk:9461
 msgid "Main font"
 msgstr "Tipografía principal"
 
-#: gitk:8078
+#: gitk:9462
 msgid "Diff display font"
 msgstr "Tipografía para diferencias"
 
-#: gitk:8079
+#: gitk:9463
 msgid "User interface font"
 msgstr "Tipografía para interfaz de usuario"
 
-#: gitk:8095
+#: gitk:9488
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: elegir color para %s"
 
-#: gitk:8476
+#: gitk:9934
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
@@ -849,42 +887,25 @@ msgstr ""
 "Esta versión de Tcl/Tk es demasiado antigua.\n"
 " Gitk requiere Tcl/Tk versión 8.4 o superior."
 
-#: gitk:8565
+#: gitk:10047
 msgid "Cannot find a git repository here."
 msgstr "No hay un repositorio git aquí."
 
-#: gitk:8569
+#: gitk:10051
 #, tcl-format
 msgid "Cannot find the git directory \"%s\"."
 msgstr "No hay directorio git \"%s\"."
 
-#: gitk:8612
+#: gitk:10098
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
-msgstr "Argumento ambiguo: '%s' es tanto una revisión como un nombre de archivo"
+msgstr ""
+"Argumento ambiguo: '%s' es tanto una revisión como un nombre de archivo"
 
-#: gitk:8624
+#: gitk:10110
 msgid "Bad arguments to gitk:"
 msgstr "Argumentos incorrectos a Gitk:"
 
-#: gitk:8636
-msgid "Couldn't get list of unmerged files:"
-msgstr "Imposible obtener la lista de archivos pendientes de fusión:"
-
-#: gitk:8652
-msgid "No files selected: --merge specified but no files are unmerged."
-msgstr ""
-"No hay archivos seleccionados: se seleccionó la opción --merge pero no hay "
-"archivos pendientes de fusión."
-
-#: gitk:8655
-msgid ""
-"No files selected: --merge specified but no unmerged files are within file "
-"limit."
-msgstr ""
-"No hay archivos seleccionados: se seleccionó la opción --merge pero los archivos "
-"especificados no necesitan fusión."
-
-#: gitk:8716
+#: gitk:10170
 msgid "Command line"
 msgstr "Línea de comandos"
diff --git a/po/it.po b/po/it.po
index d0f4c2e19a..e89c95702c 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gitk\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-13 17:29+0100\n"
+"POT-Creation-Date: 2008-10-18 22:03+1100\n"
 "PO-Revision-Date: 2008-03-13 17:34+0100\n"
 "Last-Translator: Michele Ballabio <barra_cuda@katamail.com>\n"
 "Language-Team: Italian\n"
@@ -16,676 +16,706 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: gitk:111
-msgid "Error executing git rev-list:"
-msgstr "Errore nell'esecuzione di git rev-list:"
+#: gitk:113
+msgid "Couldn't get list of unmerged files:"
+msgstr "Impossibile ottenere l'elenco dei file in attesa di fusione:"
 
-#: gitk:124
+#: gitk:340
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+"Nessun file selezionato: è stata specificata l'opzione --merge ma non ci "
+"sono file in attesa di fusione."
+
+#: gitk:343
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+"Nessun file selezionato: è stata specificata l'opzione --merge ma i file "
+"specificati non sono in attesa di fusione."
+
+#: gitk:365 gitk:503
+msgid "Error executing git log:"
+msgstr "Errore nell'esecuzione di git log:"
+
+#: gitk:378
 msgid "Reading"
 msgstr "Lettura in corso"
 
-#: gitk:151 gitk:2191
+#: gitk:438 gitk:3462
 msgid "Reading commits..."
 msgstr "Lettura delle revisioni in corso..."
 
-#: gitk:275
-msgid "Can't parse git log output:"
-msgstr "Impossibile elaborare i dati di git log:"
-
-#: gitk:386 gitk:2195
+#: gitk:441 gitk:1528 gitk:3465
 msgid "No commits selected"
 msgstr "Nessuna revisione selezionata"
 
-#: gitk:500
+#: gitk:1399
+msgid "Can't parse git log output:"
+msgstr "Impossibile elaborare i dati di git log:"
+
+#: gitk:1605
 msgid "No commit information available"
 msgstr "Nessuna informazione disponibile sulle revisioni"
 
-#: gitk:599 gitk:621 gitk:1955 gitk:6423 gitk:7923 gitk:8082
+#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
 msgid "OK"
 msgstr "OK"
 
-#: gitk:623 gitk:1956 gitk:6107 gitk:6178 gitk:6275 gitk:6321 gitk:6425
-#: gitk:7924 gitk:8083
+#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
+#: gitk:9294 gitk:9467
 msgid "Cancel"
 msgstr "Annulla"
 
-#: gitk:661
-msgid "File"
-msgstr "File"
-
-#: gitk:663
+#: gitk:1811
 msgid "Update"
 msgstr "Aggiorna"
 
-#: gitk:664
+#: gitk:1813
 msgid "Reread references"
 msgstr "Rileggi riferimenti"
 
-#: gitk:665
+#: gitk:1814
 msgid "List references"
 msgstr "Elenca riferimenti"
 
-#: gitk:666
+#: gitk:1815
 msgid "Quit"
 msgstr "Esci"
 
-#: gitk:668
-msgid "Edit"
-msgstr "Modifica"
+#: gitk:1810
+msgid "File"
+msgstr "File"
 
-#: gitk:669
+#: gitk:1818
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: gitk:672 gitk:1892
-msgid "View"
-msgstr "Vista"
+#: gitk:1817
+msgid "Edit"
+msgstr "Modifica"
 
-#: gitk:673
+#: gitk:1821
 msgid "New view..."
 msgstr "Nuova vista..."
 
-#: gitk:674 gitk:2133 gitk:8722
+#: gitk:1822
 msgid "Edit view..."
 msgstr "Modifica vista..."
 
-#: gitk:676 gitk:2134 gitk:8723
+#: gitk:1823
 msgid "Delete view"
 msgstr "Elimina vista"
 
-#: gitk:678
+#: gitk:1825
 msgid "All files"
 msgstr "Tutti i file"
 
-#: gitk:682
-msgid "Help"
-msgstr "Aiuto"
+#: gitk:1820 gitk:3196
+msgid "View"
+msgstr "Vista"
 
-#: gitk:683 gitk:1317
+#: gitk:1828 gitk:2487
 msgid "About gitk"
 msgstr "Informazioni su gitk"
 
-#: gitk:684
+#: gitk:1829
 msgid "Key bindings"
 msgstr "Scorciatoie da tastiera"
 
-#: gitk:741
+#: gitk:1827
+msgid "Help"
+msgstr "Aiuto"
+
+#: gitk:1887
 msgid "SHA1 ID: "
 msgstr "SHA1 ID: "
 
-#: gitk:791
+#: gitk:1918
+msgid "Row"
+msgstr ""
+
+#: gitk:1949
 msgid "Find"
 msgstr "Trova"
 
-#: gitk:792
+#: gitk:1950
 msgid "next"
 msgstr "succ"
 
-#: gitk:793
+#: gitk:1951
 msgid "prev"
 msgstr "prec"
 
-#: gitk:794
+#: gitk:1952
 msgid "commit"
 msgstr "revisione"
 
-#: gitk:797 gitk:799 gitk:2356 gitk:2379 gitk:2403 gitk:4306 gitk:4369
+#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
 msgid "containing:"
 msgstr "contenente:"
 
-#: gitk:800 gitk:1778 gitk:1783 gitk:2431
+#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
 msgid "touching paths:"
 msgstr "che riguarda i percorsi:"
 
-#: gitk:801 gitk:2436
+#: gitk:1959 gitk:3697
 msgid "adding/removing string:"
 msgstr "che aggiunge/rimuove la stringa:"
 
-#: gitk:810 gitk:812
+#: gitk:1968 gitk:1970
 msgid "Exact"
 msgstr "Esatto"
 
-#: gitk:812 gitk:2514 gitk:4274
+#: gitk:1970 gitk:3773 gitk:5518
 msgid "IgnCase"
 msgstr ""
 
-#: gitk:812 gitk:2405 gitk:2512 gitk:4270
+#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
 msgid "Regexp"
 msgstr ""
 
-#: gitk:814 gitk:815 gitk:2533 gitk:2563 gitk:2570 gitk:4380 gitk:4436
+#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
 msgid "All fields"
 msgstr "Tutti i campi"
 
-#: gitk:815 gitk:2531 gitk:2563 gitk:4336
+#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
 msgid "Headline"
 msgstr "Titolo"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4436 gitk:4827
+#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
 msgid "Comments"
 msgstr "Commenti"
 
-#: gitk:816 gitk:2531 gitk:2535 gitk:2570 gitk:4336 gitk:4763 gitk:5956
-#: gitk:5971
+#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
+#: gitk:7300
 msgid "Author"
 msgstr "Autore"
 
-#: gitk:816 gitk:2531 gitk:4336 gitk:4765
+#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
 msgid "Committer"
 msgstr "Revisione creata da"
 
-#: gitk:845
+#: gitk:2003
 msgid "Search"
 msgstr "Cerca"
 
-#: gitk:852
+#: gitk:2010
 msgid "Diff"
 msgstr ""
 
-#: gitk:854
+#: gitk:2012
 msgid "Old version"
 msgstr "Vecchia versione"
 
-#: gitk:856
+#: gitk:2014
 msgid "New version"
 msgstr "Nuova versione"
 
-#: gitk:858
+#: gitk:2016
 msgid "Lines of context"
 msgstr "Linee di contesto"
 
-#: gitk:868
+#: gitk:2026
 msgid "Ignore space change"
 msgstr "Ignora modifiche agli spazi"
 
-#: gitk:926
+#: gitk:2084
 msgid "Patch"
 msgstr "Modifiche"
 
-#: gitk:928
+#: gitk:2086
 msgid "Tree"
 msgstr "Directory"
 
-#: gitk:1053 gitk:1068 gitk:6022
+#: gitk:2213 gitk:2226
 msgid "Diff this -> selected"
 msgstr "Diff questo -> selezionato"
 
-#: gitk:1055 gitk:1070 gitk:6023
+#: gitk:2214 gitk:2227
 msgid "Diff selected -> this"
 msgstr "Diff selezionato -> questo"
 
-#: gitk:1057 gitk:1072 gitk:6024
+#: gitk:2215 gitk:2228
 msgid "Make patch"
 msgstr "Crea patch"
 
-#: gitk:1058 gitk:6162
+#: gitk:2216 gitk:7494
 msgid "Create tag"
 msgstr "Crea etichetta"
 
-#: gitk:1059 gitk:6255
+#: gitk:2217 gitk:7593
 msgid "Write commit to file"
 msgstr "Scrivi revisione in un file"
 
-#: gitk:1060 gitk:6309
+#: gitk:2218 gitk:7647
 msgid "Create new branch"
 msgstr "Crea un nuovo ramo"
 
-#: gitk:1061
+#: gitk:2219
 msgid "Cherry-pick this commit"
 msgstr "Porta questa revisione in cima al ramo attuale"
 
-#: gitk:1063
+#: gitk:2220
 msgid "Reset HEAD branch to here"
 msgstr "Aggiorna il ramo HEAD a questa revisione"
 
-#: gitk:1079
+#: gitk:2234
 msgid "Check out this branch"
 msgstr "Attiva questo ramo"
 
-#: gitk:1081
+#: gitk:2235
 msgid "Remove this branch"
 msgstr "Elimina questo ramo"
 
-#: gitk:1087
+#: gitk:2242
 msgid "Highlight this too"
 msgstr "Evidenzia anche questo"
 
-#: gitk:1089
+#: gitk:2243
 msgid "Highlight this only"
 msgstr "Evidenzia solo questo"
 
-#: gitk:1318
+#: gitk:2245
+msgid "Blame parent commit"
+msgstr ""
+
+#: gitk:2488
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
 "\n"
-"Copyright © 2005-2006 Paul Mackerras\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
 "\n"
 "Use and redistribute under the terms of the GNU General Public License"
 msgstr ""
 "\n"
 "Gitk - un visualizzatore di revisioni per git\n"
 "\n"
-"Copyright © 2005-2006 Paul Mackerras\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
 "\n"
 "Utilizzo e redistribuzione permessi sotto i termini della GNU General Public "
 "License"
 
-#: gitk:1326 gitk:1387 gitk:6581
+#: gitk:2496 gitk:2557 gitk:7943
 msgid "Close"
 msgstr "Chiudi"
 
-#: gitk:1345
+#: gitk:2515
 msgid "Gitk key bindings"
 msgstr "Scorciatoie da tastiera di Gitk"
 
-#: gitk:1347
+#: gitk:2517
 msgid "Gitk key bindings:"
 msgstr "Scorciatoie da tastiera di Gitk:"
 
-#: gitk:1349
+#: gitk:2519
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\tEsci"
 
-#: gitk:1350
+#: gitk:2520
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Home>\t\tVai alla prima revisione"
 
-#: gitk:1351
+#: gitk:2521
 msgid "<End>\t\tMove to last commit"
 msgstr "<End>\t\tVai all'ultima revisione"
 
-#: gitk:1352
+#: gitk:2522
 msgid "<Up>, p, i\tMove up one commit"
 msgstr "<Up>, p, i\tVai più in alto di una revisione"
 
-#: gitk:1353
+#: gitk:2523
 msgid "<Down>, n, k\tMove down one commit"
 msgstr "<Down>, n, k\tVai più in basso di una revisione"
 
-#: gitk:1354
+#: gitk:2524
 msgid "<Left>, z, j\tGo back in history list"
 msgstr "<Left>, z, j\tTorna indietro nella cronologia"
 
-#: gitk:1355
+#: gitk:2525
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Right>, x, l\tVai avanti nella cronologia"
 
-#: gitk:1356
+#: gitk:2526
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<PageUp>\tVai più in alto di una pagina nella lista delle revisioni"
 
-#: gitk:1357
+#: gitk:2527
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<PageDown>\tVai più in basso di una pagina nella lista delle revisioni"
 
-#: gitk:1358
+#: gitk:2528
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Home>\tScorri alla cima della lista delle revisioni"
 
-#: gitk:1359
+#: gitk:2529
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-End>\tScorri alla fine della lista delle revisioni"
 
-#: gitk:1360
+#: gitk:2530
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Up>\tScorri la lista delle revisioni in alto di una riga"
 
-#: gitk:1361
+#: gitk:2531
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Down>\tScorri la lista delle revisioni in basso di una riga"
 
-#: gitk:1362
+#: gitk:2532
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-PageUp>\tScorri la lista delle revisioni in alto di una pagina"
 
-#: gitk:1363
+#: gitk:2533
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-PageDown>\tScorri la lista delle revisioni in basso di una pagina"
 
-#: gitk:1364
+#: gitk:2534
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Shift-Up>\tTrova all'indietro (verso l'alto, revisioni successive)"
 
-#: gitk:1365
+#: gitk:2535
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Shift-Down>\tTrova in avanti (verso il basso, revisioni precedenti)"
 
-#: gitk:1366
+#: gitk:2536
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Delete>, b\tScorri la vista delle differenze in alto di una pagina"
 
-#: gitk:1367
+#: gitk:2537
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Backspace>\tScorri la vista delle differenze in alto di una pagina"
 
-#: gitk:1368
+#: gitk:2538
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Space>\t\tScorri la vista delle differenze in basso di una pagina"
 
-#: gitk:1369
+#: gitk:2539
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tScorri la vista delle differenze in alto di 18 linee"
 
-#: gitk:1370
+#: gitk:2540
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tScorri la vista delle differenze in basso di 18 linee"
 
-#: gitk:1371
+#: gitk:2541
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\tTrova"
 
-#: gitk:1372
+#: gitk:2542
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\tTrova in avanti"
 
-#: gitk:1373
+#: gitk:2543
 msgid "<Return>\tMove to next find hit"
 msgstr "<Return>\tTrova in avanti"
 
-#: gitk:1374
+#: gitk:2544
 msgid "/\t\tMove to next find hit, or redo find"
 msgstr "/\t\tTrova in avanti, o cerca di nuovo"
 
-#: gitk:1375
+#: gitk:2545
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\tTrova all'indietro"
 
-#: gitk:1376
+#: gitk:2546
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\tScorri la vista delle differenze al file successivo"
 
-#: gitk:1377
+#: gitk:2547
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tCerca in avanti nella vista delle differenze"
 
-#: gitk:1378
+#: gitk:2548
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tCerca all'indietro nella vista delle differenze"
 
-#: gitk:1379
+#: gitk:2549
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-KP+>\tAumenta grandezza carattere"
 
-#: gitk:1380
+#: gitk:2550
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-plus>\tAumenta grandezza carattere"
 
-#: gitk:1381
+#: gitk:2551
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-KP->\tDiminuisci grandezza carattere"
 
-#: gitk:1382
+#: gitk:2552
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-minus>\tDiminuisci grandezza carattere"
 
-#: gitk:1383
+#: gitk:2553
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\tAggiorna"
 
-#: gitk:1896
+#: gitk:3200
 msgid "Gitk view definition"
 msgstr "Scelta vista Gitk"
 
-#: gitk:1921
+#: gitk:3225
 msgid "Name"
 msgstr "Nome"
 
-#: gitk:1924
+#: gitk:3228
 msgid "Remember this view"
 msgstr "Ricorda questa vista"
 
-#: gitk:1928
-msgid "Commits to include (arguments to git rev-list):"
-msgstr "Revisioni da includere (argomenti di git rev-list):"
+#: gitk:3232
+msgid "Commits to include (arguments to git log):"
+msgstr "Revisioni da includere (argomenti di git log):"
 
-#: gitk:1935
+#: gitk:3239
 msgid "Command to generate more commits to include:"
 msgstr "Comando che genera altre revisioni da visualizzare:"
 
-#: gitk:1942
+#: gitk:3246
 msgid "Enter files and directories to include, one per line:"
 msgstr "Inserire file e directory da includere, uno per riga:"
 
-#: gitk:1989
+#: gitk:3293
 msgid "Error in commit selection arguments:"
 msgstr "Errore negli argomenti di selezione delle revisioni:"
 
-#: gitk:2043 gitk:2127 gitk:2583 gitk:2597 gitk:3781 gitk:8688 gitk:8689
+#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
 msgid "None"
 msgstr "Nessuno"
 
-#: gitk:2531 gitk:4336 gitk:5958 gitk:5973
+#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
 msgid "Date"
 msgstr "Data"
 
-#: gitk:2531 gitk:4336
+#: gitk:3790 gitk:5580
 msgid "CDate"
 msgstr ""
 
-#: gitk:2680 gitk:2685
+#: gitk:3939 gitk:3944
 msgid "Descendant"
 msgstr "Discendente"
 
-#: gitk:2681
+#: gitk:3940
 msgid "Not descendant"
 msgstr "Non discendente"
 
-#: gitk:2688 gitk:2693
+#: gitk:3947 gitk:3952
 msgid "Ancestor"
 msgstr "Ascendente"
 
-#: gitk:2689
+#: gitk:3948
 msgid "Not ancestor"
 msgstr "Non ascendente"
 
-#: gitk:2924
+#: gitk:4187
 msgid "Local changes checked in to index but not committed"
 msgstr "Modifiche locali presenti nell'indice ma non nell'archivio"
 
-#: gitk:2954
+#: gitk:4220
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "Modifiche locali non presenti né nell'archivio né nell'indice"
 
-#: gitk:4305
+#: gitk:5549
 msgid "Searching"
 msgstr "Ricerca in corso"
 
-#: gitk:4767
+#: gitk:6049
 msgid "Tags:"
 msgstr "Etichette:"
 
-#: gitk:4784 gitk:4790 gitk:5951
+#: gitk:6066 gitk:6072 gitk:7280
 msgid "Parent"
 msgstr "Genitore"
 
-#: gitk:4795
+#: gitk:6077
 msgid "Child"
 msgstr "Figlio"
 
-#: gitk:4804
+#: gitk:6086
 msgid "Branch"
 msgstr "Ramo"
 
-#: gitk:4807
+#: gitk:6089
 msgid "Follows"
 msgstr "Segue"
 
-#: gitk:4810
+#: gitk:6092
 msgid "Precedes"
 msgstr "Precede"
 
-#: gitk:5093
+#: gitk:6378
 msgid "Error getting merge diffs:"
 msgstr "Errore nella lettura delle differenze di fusione:"
 
-#: gitk:5778
+#: gitk:7113
 msgid "Goto:"
 msgstr "Vai a:"
 
-#: gitk:5780
+#: gitk:7115
 msgid "SHA1 ID:"
 msgstr "SHA1 ID:"
 
-#: gitk:5805
+#: gitk:7134
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "La SHA1 id abbreviata %s è ambigua"
 
-#: gitk:5817
+#: gitk:7146
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "La SHA1 id %s è sconosciuta"
 
-#: gitk:5819
+#: gitk:7148
 #, tcl-format
 msgid "Tag/Head %s is not known"
 msgstr "L'etichetta/ramo %s è sconosciuto"
 
-#: gitk:5961
+#: gitk:7290
 msgid "Children"
 msgstr "Figli"
 
-#: gitk:6018
+#: gitk:7347
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "Aggiorna il ramo %s a questa revisione"
 
-#: gitk:6049
+#: gitk:7349
+msgid "Detached head: can't reset"
+msgstr ""
+
+#: gitk:7381
 msgid "Top"
 msgstr "Inizio"
 
-#: gitk:6050
+#: gitk:7382
 msgid "From"
 msgstr "Da"
 
-#: gitk:6055
+#: gitk:7387
 msgid "To"
 msgstr "A"
 
-#: gitk:6078
+#: gitk:7410
 msgid "Generate patch"
 msgstr "Genera patch"
 
-#: gitk:6080
+#: gitk:7412
 msgid "From:"
 msgstr "Da:"
 
-#: gitk:6089
+#: gitk:7421
 msgid "To:"
 msgstr "A:"
 
-#: gitk:6098
+#: gitk:7430
 msgid "Reverse"
 msgstr "Inverti"
 
-#: gitk:6100 gitk:6269
+#: gitk:7432 gitk:7607
 msgid "Output file:"
 msgstr "Scrivi sul file:"
 
-#: gitk:6106
+#: gitk:7438
 msgid "Generate"
 msgstr "Genera"
 
-#: gitk:6142
+#: gitk:7474
 msgid "Error creating patch:"
 msgstr "Errore nella creazione della patch:"
 
-#: gitk:6164 gitk:6257 gitk:6311
+#: gitk:7496 gitk:7595 gitk:7649
 msgid "ID:"
 msgstr "ID:"
 
-#: gitk:6173
+#: gitk:7505
 msgid "Tag name:"
 msgstr "Nome etichetta:"
 
-#: gitk:6177 gitk:6320
+#: gitk:7509 gitk:7659
 msgid "Create"
 msgstr "Crea"
 
-#: gitk:6192
+#: gitk:7524
 msgid "No tag name specified"
 msgstr "Nessuna etichetta specificata"
 
-#: gitk:6196
+#: gitk:7528
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "L'etichetta \"%s\" esiste già"
 
-#: gitk:6202
+#: gitk:7534
 msgid "Error creating tag:"
 msgstr "Errore nella creazione dell'etichetta:"
 
-#: gitk:6266
+#: gitk:7604
 msgid "Command:"
 msgstr "Comando:"
 
-#: gitk:6274
+#: gitk:7612
 msgid "Write"
 msgstr "Scrivi"
 
-#: gitk:6290
+#: gitk:7628
 msgid "Error writing commit:"
 msgstr "Errore nella scrittura della revisione:"
 
-#: gitk:6316
+#: gitk:7654
 msgid "Name:"
 msgstr "Nome:"
 
-#: gitk:6335
+#: gitk:7674
 msgid "Please specify a name for the new branch"
 msgstr "Specificare un nome per il nuovo ramo"
 
-#: gitk:6364
+#: gitk:7703
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr "La revisione %s è già inclusa nel ramo %s -- applicarla di nuovo?"
 
-#: gitk:6369
+#: gitk:7708
 msgid "Cherry-picking"
 msgstr ""
 
-#: gitk:6381
+#: gitk:7720
 msgid "No changes committed"
 msgstr "Nessuna modifica archiviata"
 
-#: gitk:6404
+#: gitk:7745
 msgid "Confirm reset"
 msgstr "Conferma git reset"
 
-#: gitk:6406
+#: gitk:7747
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "Aggiornare il ramo %s a %s?"
 
-#: gitk:6410
+#: gitk:7751
 msgid "Reset type:"
 msgstr "Tipo di aggiornamento:"
 
-#: gitk:6414
+#: gitk:7755
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Soft: Lascia la direcory di lavoro e l'indice come sono"
 
-#: gitk:6417
+#: gitk:7758
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr "Mixed: Lascia la directory di lavoro come è, aggiorna l'indice"
 
-#: gitk:6420
+#: gitk:7761
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -693,19 +723,19 @@ msgstr ""
 "Hard: Aggiorna la directory di lavoro e l'indice\n"
 "(abbandona TUTTE le modifiche locali)"
 
-#: gitk:6436
+#: gitk:7777
 msgid "Resetting"
 msgstr "git reset in corso"
 
-#: gitk:6493
+#: gitk:7834
 msgid "Checking out"
 msgstr "Attivazione in corso"
 
-#: gitk:6523
+#: gitk:7885
 msgid "Cannot delete the currently checked-out branch"
 msgstr "Impossibile cancellare il ramo attualmente attivo"
 
-#: gitk:6529
+#: gitk:7891
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -714,16 +744,16 @@ msgstr ""
 "Le revisioni nel ramo %s non sono presenti su altri rami.\n"
 "Cancellare il ramo %s?"
 
-#: gitk:6560
+#: gitk:7922
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "Etichette e rami: %s"
 
-#: gitk:6574
+#: gitk:7936
 msgid "Filter"
 msgstr "Filtro"
 
-#: gitk:6868
+#: gitk:8230
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
@@ -731,117 +761,129 @@ msgstr ""
 "Errore nella lettura della topologia delle revisioni: le informazioni sul "
 "ramo e le etichette precedenti e seguenti saranno incomplete."
 
-#: gitk:7852
+#: gitk:9216
 msgid "Tag"
 msgstr "Etichetta"
 
-#: gitk:7852
+#: gitk:9216
 msgid "Id"
 msgstr "Id"
 
-#: gitk:7892
+#: gitk:9262
 msgid "Gitk font chooser"
 msgstr "Scelta caratteri gitk"
 
-#: gitk:7909
+#: gitk:9279
 msgid "B"
 msgstr "B"
 
-#: gitk:7912
+#: gitk:9282
 msgid "I"
 msgstr "I"
 
-#: gitk:8005
+#: gitk:9375
 msgid "Gitk preferences"
 msgstr "Preferenze gitk"
 
-#: gitk:8006
+#: gitk:9376
 msgid "Commit list display options"
 msgstr "Opzioni visualizzazione dell'elenco revisioni"
 
-#: gitk:8009
+#: gitk:9379
 msgid "Maximum graph width (lines)"
 msgstr "Larghezza massima del grafico (in linee)"
 
-#: gitk:8013
+#: gitk:9383
 #, tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "Larghezza massima del grafico (% del pannello)"
 
-#: gitk:8018
+#: gitk:9388
 msgid "Show local changes"
 msgstr "Mostra modifiche locali"
 
-#: gitk:8023
+#: gitk:9393
 msgid "Auto-select SHA1"
 msgstr "Seleziona automaticamente SHA1 hash"
 
-#: gitk:8028
+#: gitk:9398
 msgid "Diff display options"
 msgstr "Opzioni di visualizzazione delle differenze"
 
-#: gitk:8030
+#: gitk:9400
 msgid "Tab spacing"
 msgstr "Spaziatura tabulazioni"
 
-#: gitk:8034
+#: gitk:9404
 msgid "Display nearby tags"
 msgstr "Mostra etichette vicine"
 
-#: gitk:8039
+#: gitk:9409
 msgid "Limit diffs to listed paths"
 msgstr "Limita le differenze ai percorsi elencati"
 
-#: gitk:8044
+#: gitk:9414
+msgid "Support per-file encodings"
+msgstr ""
+
+#: gitk:9421
+msgid "External diff tool"
+msgstr ""
+
+#: gitk:9423
+msgid "Choose..."
+msgstr ""
+
+#: gitk:9428
 msgid "Colors: press to choose"
 msgstr "Colori: premere per scegliere"
 
-#: gitk:8047
+#: gitk:9431
 msgid "Background"
 msgstr "Sfondo"
 
-#: gitk:8051
+#: gitk:9435
 msgid "Foreground"
 msgstr "Primo piano"
 
-#: gitk:8055
+#: gitk:9439
 msgid "Diff: old lines"
 msgstr "Diff: vecchie linee"
 
-#: gitk:8060
+#: gitk:9444
 msgid "Diff: new lines"
 msgstr "Diff: nuove linee"
 
-#: gitk:8065
+#: gitk:9449
 msgid "Diff: hunk header"
 msgstr "Diff: intestazione della sezione"
 
-#: gitk:8071
+#: gitk:9455
 msgid "Select bg"
 msgstr "Sfondo selezione"
 
-#: gitk:8075
+#: gitk:9459
 msgid "Fonts: press to choose"
 msgstr "Carattere: premere per scegliere"
 
-#: gitk:8077
+#: gitk:9461
 msgid "Main font"
 msgstr "Carattere principale"
 
-#: gitk:8078
+#: gitk:9462
 msgid "Diff display font"
 msgstr "Carattere per differenze"
 
-#: gitk:8079
+#: gitk:9463
 msgid "User interface font"
 msgstr "Carattere per interfaccia utente"
 
-#: gitk:8095
+#: gitk:9488
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: scegliere un colore per %s"
 
-#: gitk:8476
+#: gitk:9934
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
@@ -849,42 +891,24 @@ msgstr ""
 "Questa versione di Tcl/Tk non può avviare gitk.\n"
 " Gitk richiede Tcl/Tk versione 8.4 o superiore."
 
-#: gitk:8565
+#: gitk:10047
 msgid "Cannot find a git repository here."
 msgstr "Archivio git non trovato."
 
-#: gitk:8569
+#: gitk:10051
 #, tcl-format
 msgid "Cannot find the git directory \"%s\"."
 msgstr "Directory git \"%s\" non trovata."
 
-#: gitk:8612
+#: gitk:10098
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
 msgstr "Argomento ambiguo: '%s' è sia revisione che nome di file"
 
-#: gitk:8624
+#: gitk:10110
 msgid "Bad arguments to gitk:"
 msgstr "Gitk: argomenti errati:"
 
-#: gitk:8636
-msgid "Couldn't get list of unmerged files:"
-msgstr "Impossibile ottenere l'elenco dei file in attesa di fusione:"
-
-#: gitk:8652
-msgid "No files selected: --merge specified but no files are unmerged."
-msgstr ""
-"Nessun file selezionato: è stata specificata l'opzione --merge ma non ci "
-"sono file in attesa di fusione."
-
-#: gitk:8655
-msgid ""
-"No files selected: --merge specified but no unmerged files are within file "
-"limit."
-msgstr ""
-"Nessun file selezionato: è stata specificata l'opzione --merge ma i file "
-"specificati non sono in attesa di fusione."
-
-#: gitk:8716
+#: gitk:10170
 msgid "Command line"
 msgstr "Linea di comando"
diff --git a/po/sv.po b/po/sv.po
index e1ecfb7586..947b53f6b0 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-03 18:58+0200\n"
+"POT-Creation-Date: 2008-10-18 22:03+1100\n"
 "PO-Revision-Date: 2008-08-03 19:03+0200\n"
 "Last-Translator: Mikael Magnusson <mikachu@gmail.com>\n"
 "Language-Team: Swedish <sv@li.org>\n"
@@ -16,17 +16,17 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: gitk:102
+#: gitk:113
 msgid "Couldn't get list of unmerged files:"
 msgstr "Kunde inta hämta lista över ej sammanslagna filer:"
 
-#: gitk:329
+#: gitk:340
 msgid "No files selected: --merge specified but no files are unmerged."
 msgstr ""
 "Inga filer valdes: --merge angavs men det finns inga filer som inte har "
 "slagits samman."
 
-#: gitk:332
+#: gitk:343
 msgid ""
 "No files selected: --merge specified but no unmerged files are within file "
 "limit."
@@ -34,257 +34,261 @@ msgstr ""
 "Inga filer valdes: --merge angavs men det finns inga filer inom "
 "filbegränsningen."
 
-#: gitk:354
+#: gitk:365 gitk:503
 msgid "Error executing git log:"
 msgstr "Fel vid körning av git log:"
 
-#: gitk:369
+#: gitk:378
 msgid "Reading"
 msgstr "Läser"
 
-#: gitk:400 gitk:3356
+#: gitk:438 gitk:3462
 msgid "Reading commits..."
 msgstr "Läser incheckningar..."
 
-#: gitk:403 gitk:1480 gitk:3359
+#: gitk:441 gitk:1528 gitk:3465
 msgid "No commits selected"
 msgstr "Inga incheckningar markerade"
 
-#: gitk:1358
+#: gitk:1399
 msgid "Can't parse git log output:"
 msgstr "Kan inte tolka utdata från git log:"
 
-#: gitk:1557
+#: gitk:1605
 msgid "No commit information available"
 msgstr "Ingen incheckningsinformation är tillgänglig"
 
-#: gitk:1654 gitk:1676 gitk:3150 gitk:7620 gitk:9149 gitk:9317
+#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
 msgid "OK"
 msgstr "OK"
 
-#: gitk:1678 gitk:3151 gitk:7296 gitk:7367 gitk:7470 gitk:7516 gitk:7622
-#: gitk:9150 gitk:9318
+#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
+#: gitk:9294 gitk:9467
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: gitk:1716
-msgid "File"
-msgstr "Arkiv"
-
-#: gitk:1718
+#: gitk:1811
 msgid "Update"
 msgstr "Uppdatera"
 
-#: gitk:1719
+#: gitk:1812
 msgid "Reload"
 msgstr "Ladda om"
 
-#: gitk:1720
+#: gitk:1813
 msgid "Reread references"
 msgstr "Läs om referenser"
 
-#: gitk:1721
+#: gitk:1814
 msgid "List references"
 msgstr "Visa referenser"
 
-#: gitk:1722
+#: gitk:1815
 msgid "Quit"
 msgstr "Avsluta"
 
-#: gitk:1724
-msgid "Edit"
-msgstr "Redigera"
+#: gitk:1810
+msgid "File"
+msgstr "Arkiv"
 
-#: gitk:1725
+#: gitk:1818
 msgid "Preferences"
 msgstr "Inställningar"
 
-#: gitk:1728 gitk:3087
-msgid "View"
-msgstr "Visa"
+#: gitk:1817
+msgid "Edit"
+msgstr "Redigera"
 
-#: gitk:1729
+#: gitk:1821
 msgid "New view..."
 msgstr "Ny vy..."
 
-#: gitk:1730 gitk:3298 gitk:9932
+#: gitk:1822
 msgid "Edit view..."
 msgstr "Ändra vy..."
 
-#: gitk:1732 gitk:3299 gitk:9933
+#: gitk:1823
 msgid "Delete view"
 msgstr "Ta bort vy"
 
-#: gitk:1734
+#: gitk:1825
 msgid "All files"
 msgstr "Alla filer"
 
-#: gitk:1738
-msgid "Help"
-msgstr "Hjälp"
+#: gitk:1820 gitk:3196
+msgid "View"
+msgstr "Visa"
 
-#: gitk:1739 gitk:2399
+#: gitk:1828 gitk:2487
 msgid "About gitk"
 msgstr "Om gitk"
 
-#: gitk:1740
+#: gitk:1829
 msgid "Key bindings"
 msgstr "Tangentbordsbindningar"
 
-#: gitk:1797
+#: gitk:1827
+msgid "Help"
+msgstr "Hjälp"
+
+#: gitk:1887
 msgid "SHA1 ID: "
 msgstr "SHA1-id: "
 
-#: gitk:1828
+#: gitk:1918
 msgid "Row"
 msgstr "Rad"
 
-#: gitk:1859
+#: gitk:1949
 msgid "Find"
 msgstr "Sök"
 
-#: gitk:1860
+#: gitk:1950
 msgid "next"
 msgstr "nästa"
 
-#: gitk:1861
+#: gitk:1951
 msgid "prev"
 msgstr "föreg"
 
-#: gitk:1862
+#: gitk:1952
 msgid "commit"
 msgstr "incheckning"
 
-#: gitk:1865 gitk:1867 gitk:3511 gitk:3534 gitk:3558 gitk:5441 gitk:5512
+#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
 msgid "containing:"
 msgstr "som innehåller:"
 
-#: gitk:1868 gitk:2866 gitk:2871 gitk:3586
+#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
 msgid "touching paths:"
 msgstr "som rör sökväg:"
 
-#: gitk:1869 gitk:3591
+#: gitk:1959 gitk:3697
 msgid "adding/removing string:"
 msgstr "som lägger/till tar bort sträng:"
 
-#: gitk:1878 gitk:1880
+#: gitk:1968 gitk:1970
 msgid "Exact"
 msgstr "Exakt"
 
-#: gitk:1880 gitk:3667 gitk:5409
+#: gitk:1970 gitk:3773 gitk:5518
 msgid "IgnCase"
 msgstr "IgnVersaler"
 
-#: gitk:1880 gitk:3560 gitk:3665 gitk:5405
+#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
 msgid "Regexp"
 msgstr "Reg.uttr."
 
-#: gitk:1882 gitk:1883 gitk:3686 gitk:3716 gitk:3723 gitk:5532 gitk:5599
+#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
 msgid "All fields"
 msgstr "Alla fält"
 
-#: gitk:1883 gitk:3684 gitk:3716 gitk:5471
+#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
 msgid "Headline"
 msgstr "Rubrik"
 
-#: gitk:1884 gitk:3684 gitk:5471 gitk:5599 gitk:6000
+#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
 msgid "Comments"
 msgstr "Kommentarer"
 
-#: gitk:1884 gitk:3684 gitk:3688 gitk:3723 gitk:5471 gitk:5936 gitk:7142
-#: gitk:7157
+#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
+#: gitk:7300
 msgid "Author"
 msgstr "Författare"
 
-#: gitk:1884 gitk:3684 gitk:5471 gitk:5938
+#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
 msgid "Committer"
 msgstr "Incheckare"
 
-#: gitk:1913
+#: gitk:2003
 msgid "Search"
 msgstr "Sök"
 
-#: gitk:1920
+#: gitk:2010
 msgid "Diff"
 msgstr "Diff"
 
-#: gitk:1922
+#: gitk:2012
 msgid "Old version"
 msgstr "Gammal version"
 
-#: gitk:1924
+#: gitk:2014
 msgid "New version"
 msgstr "Ny version"
 
-#: gitk:1926
+#: gitk:2016
 msgid "Lines of context"
 msgstr "Rader sammanhang"
 
-#: gitk:1936
+#: gitk:2026
 msgid "Ignore space change"
 msgstr "Ignorera ändringar i blanksteg"
 
-#: gitk:1994
+#: gitk:2084
 msgid "Patch"
 msgstr "Patch"
 
-#: gitk:1996
+#: gitk:2086
 msgid "Tree"
 msgstr "Träd"
 
-#: gitk:2121 gitk:2136 gitk:7211
+#: gitk:2213 gitk:2226
 msgid "Diff this -> selected"
 msgstr "Diff denna -> markerad"
 
-#: gitk:2123 gitk:2138 gitk:7212
+#: gitk:2214 gitk:2227
 msgid "Diff selected -> this"
 msgstr "Diff markerad -> denna"
 
-#: gitk:2125 gitk:2140 gitk:7213
+#: gitk:2215 gitk:2228
 msgid "Make patch"
 msgstr "Skapa patch"
 
-#: gitk:2126 gitk:7351
+#: gitk:2216 gitk:7494
 msgid "Create tag"
 msgstr "Skapa tagg"
 
-#: gitk:2127 gitk:7450
+#: gitk:2217 gitk:7593
 msgid "Write commit to file"
 msgstr "Skriv incheckning till fil"
 
-#: gitk:2128 gitk:7504
+#: gitk:2218 gitk:7647
 msgid "Create new branch"
 msgstr "Skapa ny gren"
 
-#: gitk:2129
+#: gitk:2219
 msgid "Cherry-pick this commit"
 msgstr "Plocka denna incheckning"
 
-#: gitk:2131
+#: gitk:2220
 msgid "Reset HEAD branch to here"
 msgstr "Återställ HEAD-grenen hit"
 
-#: gitk:2147
+#: gitk:2234
 msgid "Check out this branch"
 msgstr "Checka ut denna gren"
 
-#: gitk:2149
+#: gitk:2235
 msgid "Remove this branch"
 msgstr "Ta bort denna gren"
 
-#: gitk:2155
+#: gitk:2242
 msgid "Highlight this too"
 msgstr "Markera även detta"
 
-#: gitk:2157
+#: gitk:2243
 msgid "Highlight this only"
 msgstr "Markera bara detta"
 
-#: gitk:2159
+#: gitk:2244
 msgid "External diff"
 msgstr "Extern diff"
 
-#: gitk:2400
+#: gitk:2245
+msgid "Blame parent commit"
+msgstr ""
+
+#: gitk:2488
 msgid ""
 "\n"
 "Gitk - a commit viewer for git\n"
@@ -300,427 +304,427 @@ msgstr ""
 "\n"
 "Använd och vidareförmedla enligt villkoren i GNU General Public License"
 
-#: gitk:2408 gitk:2469 gitk:7799
+#: gitk:2496 gitk:2557 gitk:7943
 msgid "Close"
 msgstr "Stäng"
 
-#: gitk:2427
+#: gitk:2515
 msgid "Gitk key bindings"
 msgstr "Tangentbordsbindningar för Gitk"
 
-#: gitk:2429
+#: gitk:2517
 msgid "Gitk key bindings:"
 msgstr "Tangentbordsbindningar för Gitk:"
 
-#: gitk:2431
+#: gitk:2519
 #, tcl-format
 msgid "<%s-Q>\t\tQuit"
 msgstr "<%s-Q>\t\tAvsluta"
 
-#: gitk:2432
+#: gitk:2520
 msgid "<Home>\t\tMove to first commit"
 msgstr "<Home>\t\tGå till första incheckning"
 
-#: gitk:2433
+#: gitk:2521
 msgid "<End>\t\tMove to last commit"
 msgstr "<End>\t\tGå till sista incheckning"
 
-#: gitk:2434
+#: gitk:2522
 msgid "<Up>, p, i\tMove up one commit"
 msgstr "<Upp>, p, i\tGå en incheckning upp"
 
-#: gitk:2435
+#: gitk:2523
 msgid "<Down>, n, k\tMove down one commit"
 msgstr "<Ned>, n, k\tGå en incheckning ned"
 
-#: gitk:2436
+#: gitk:2524
 msgid "<Left>, z, j\tGo back in history list"
 msgstr "<Vänster>, z, j\tGå bakåt i historiken"
 
-#: gitk:2437
+#: gitk:2525
 msgid "<Right>, x, l\tGo forward in history list"
 msgstr "<Höger>, x, l\tGå framåt i historiken"
 
-#: gitk:2438
+#: gitk:2526
 msgid "<PageUp>\tMove up one page in commit list"
 msgstr "<PageUp>\tGå upp en sida i incheckningslistan"
 
-#: gitk:2439
+#: gitk:2527
 msgid "<PageDown>\tMove down one page in commit list"
 msgstr "<PageDown>\tGå ned en sida i incheckningslistan"
 
-#: gitk:2440
+#: gitk:2528
 #, tcl-format
 msgid "<%s-Home>\tScroll to top of commit list"
 msgstr "<%s-Home>\tRulla till början av incheckningslistan"
 
-#: gitk:2441
+#: gitk:2529
 #, tcl-format
 msgid "<%s-End>\tScroll to bottom of commit list"
 msgstr "<%s-End>\tRulla till slutet av incheckningslistan"
 
-#: gitk:2442
+#: gitk:2530
 #, tcl-format
 msgid "<%s-Up>\tScroll commit list up one line"
 msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg"
 
-#: gitk:2443
+#: gitk:2531
 #, tcl-format
 msgid "<%s-Down>\tScroll commit list down one line"
 msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg"
 
-#: gitk:2444
+#: gitk:2532
 #, tcl-format
 msgid "<%s-PageUp>\tScroll commit list up one page"
 msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida"
 
-#: gitk:2445
+#: gitk:2533
 #, tcl-format
 msgid "<%s-PageDown>\tScroll commit list down one page"
 msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida"
 
-#: gitk:2446
+#: gitk:2534
 msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
 msgstr "<Skift-Upp>\tSök bakåt (uppåt, senare incheckningar)"
 
-#: gitk:2447
+#: gitk:2535
 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
 msgstr "<Skift-Ned>\tSök framåt (nedåt, tidigare incheckningar)"
 
-#: gitk:2448
+#: gitk:2536
 msgid "<Delete>, b\tScroll diff view up one page"
 msgstr "<Delete>, b\tRulla diffvisningen upp en sida"
 
-#: gitk:2449
+#: gitk:2537
 msgid "<Backspace>\tScroll diff view up one page"
 msgstr "<Baksteg>\tRulla diffvisningen upp en sida"
 
-#: gitk:2450
+#: gitk:2538
 msgid "<Space>\t\tScroll diff view down one page"
 msgstr "<Blanksteg>\tRulla diffvisningen ned en sida"
 
-#: gitk:2451
+#: gitk:2539
 msgid "u\t\tScroll diff view up 18 lines"
 msgstr "u\t\tRulla diffvisningen upp 18 rader"
 
-#: gitk:2452
+#: gitk:2540
 msgid "d\t\tScroll diff view down 18 lines"
 msgstr "d\t\tRulla diffvisningen ned 18 rader"
 
-#: gitk:2453
+#: gitk:2541
 #, tcl-format
 msgid "<%s-F>\t\tFind"
 msgstr "<%s-F>\t\tSök"
 
-#: gitk:2454
+#: gitk:2542
 #, tcl-format
 msgid "<%s-G>\t\tMove to next find hit"
 msgstr "<%s-G>\t\tGå till nästa sökträff"
 
-#: gitk:2455
+#: gitk:2543
 msgid "<Return>\tMove to next find hit"
 msgstr "<Return>\t\tGå till nästa sökträff"
 
-#: gitk:2456
+#: gitk:2544
 msgid "/\t\tMove to next find hit, or redo find"
 msgstr "/\t\tGå till nästa sökträff, eller sök på nytt"
 
-#: gitk:2457
+#: gitk:2545
 msgid "?\t\tMove to previous find hit"
 msgstr "?\t\tGå till föregående sökträff"
 
-#: gitk:2458
+#: gitk:2546
 msgid "f\t\tScroll diff view to next file"
 msgstr "f\t\tRulla diffvisningen till nästa fil"
 
-#: gitk:2459
+#: gitk:2547
 #, tcl-format
 msgid "<%s-S>\t\tSearch for next hit in diff view"
 msgstr "<%s-S>\t\tGå till nästa sökträff i diffvisningen"
 
-#: gitk:2460
+#: gitk:2548
 #, tcl-format
 msgid "<%s-R>\t\tSearch for previous hit in diff view"
 msgstr "<%s-R>\t\tGå till föregående sökträff i diffvisningen"
 
-#: gitk:2461
+#: gitk:2549
 #, tcl-format
 msgid "<%s-KP+>\tIncrease font size"
 msgstr "<%s-Num+>\tÖka teckenstorlek"
 
-#: gitk:2462
+#: gitk:2550
 #, tcl-format
 msgid "<%s-plus>\tIncrease font size"
 msgstr "<%s-plus>\tÖka teckenstorlek"
 
-#: gitk:2463
+#: gitk:2551
 #, tcl-format
 msgid "<%s-KP->\tDecrease font size"
 msgstr "<%s-Num->\tMinska teckenstorlek"
 
-#: gitk:2464
+#: gitk:2552
 #, tcl-format
 msgid "<%s-minus>\tDecrease font size"
 msgstr "<%s-minus>\tMinska teckenstorlek"
 
-#: gitk:2465
+#: gitk:2553
 msgid "<F5>\t\tUpdate"
 msgstr "<F5>\t\tUppdatera"
 
-#: gitk:3091
+#: gitk:3200
 msgid "Gitk view definition"
 msgstr "Definition av Gitk-vy"
 
-#: gitk:3116
+#: gitk:3225
 msgid "Name"
 msgstr "Namn"
 
-#: gitk:3119
+#: gitk:3228
 msgid "Remember this view"
 msgstr "Spara denna vy"
 
-#: gitk:3123
+#: gitk:3232
 msgid "Commits to include (arguments to git log):"
 msgstr "Incheckningar att ta med (argument till git log):"
 
-#: gitk:3130
+#: gitk:3239
 msgid "Command to generate more commits to include:"
 msgstr "Kommando för att generera fler incheckningar att ta med:"
 
-#: gitk:3137
+#: gitk:3246
 msgid "Enter files and directories to include, one per line:"
 msgstr "Ange filer och kataloger att ta med, en per rad:"
 
-#: gitk:3184
+#: gitk:3293
 msgid "Error in commit selection arguments:"
 msgstr "Fel i argument för val av incheckningar:"
 
-#: gitk:3238 gitk:3290 gitk:3736 gitk:3750 gitk:4951 gitk:9896 gitk:9897
+#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
 msgid "None"
 msgstr "Inget"
 
-#: gitk:3684 gitk:5471 gitk:7144 gitk:7159
+#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
 msgid "Date"
 msgstr "Datum"
 
-#: gitk:3684 gitk:5471
+#: gitk:3790 gitk:5580
 msgid "CDate"
 msgstr "Skapat datum"
 
-#: gitk:3833 gitk:3838
+#: gitk:3939 gitk:3944
 msgid "Descendant"
 msgstr "Avkomling"
 
-#: gitk:3834
+#: gitk:3940
 msgid "Not descendant"
 msgstr "Inte avkomling"
 
-#: gitk:3841 gitk:3846
+#: gitk:3947 gitk:3952
 msgid "Ancestor"
 msgstr "Förfader"
 
-#: gitk:3842
+#: gitk:3948
 msgid "Not ancestor"
 msgstr "Inte förfader"
 
-#: gitk:4078
+#: gitk:4187
 msgid "Local changes checked in to index but not committed"
 msgstr "Lokala ändringar sparade i indexet men inte incheckade"
 
-#: gitk:4111
+#: gitk:4220
 msgid "Local uncommitted changes, not checked in to index"
 msgstr "Lokala ändringar, ej sparade i indexet"
 
-#: gitk:5440
+#: gitk:5549
 msgid "Searching"
 msgstr "Söker"
 
-#: gitk:5940
+#: gitk:6049
 msgid "Tags:"
 msgstr "Taggar:"
 
-#: gitk:5957 gitk:5963 gitk:7137
+#: gitk:6066 gitk:6072 gitk:7280
 msgid "Parent"
 msgstr "Förälder"
 
-#: gitk:5968
+#: gitk:6077
 msgid "Child"
 msgstr "Barn"
 
-#: gitk:5977
+#: gitk:6086
 msgid "Branch"
 msgstr "Gren"
 
-#: gitk:5980
+#: gitk:6089
 msgid "Follows"
 msgstr "Följer"
 
-#: gitk:5983
+#: gitk:6092
 msgid "Precedes"
 msgstr "Föregår"
 
-#: gitk:6267
+#: gitk:6378
 msgid "Error getting merge diffs:"
 msgstr "Fel vid hämtning av sammanslagningsdiff:"
 
-#: gitk:6970
+#: gitk:7113
 msgid "Goto:"
 msgstr "Gå till:"
 
-#: gitk:6972
+#: gitk:7115
 msgid "SHA1 ID:"
 msgstr "SHA1-id:"
 
-#: gitk:6991
+#: gitk:7134
 #, tcl-format
 msgid "Short SHA1 id %s is ambiguous"
 msgstr "Förkortat SHA1-id %s är tvetydigt"
 
-#: gitk:7003
+#: gitk:7146
 #, tcl-format
 msgid "SHA1 id %s is not known"
 msgstr "SHA-id:t %s är inte känt"
 
-#: gitk:7005
+#: gitk:7148
 #, tcl-format
 msgid "Tag/Head %s is not known"
 msgstr "Tagg/huvud %s är okänt"
 
-#: gitk:7147
+#: gitk:7290
 msgid "Children"
 msgstr "Barn"
 
-#: gitk:7204
+#: gitk:7347
 #, tcl-format
 msgid "Reset %s branch to here"
 msgstr "Återställ grenen %s hit"
 
-#: gitk:7206
+#: gitk:7349
 msgid "Detached head: can't reset"
 msgstr "Frånkopplad head: kan inte återställa"
 
-#: gitk:7238
+#: gitk:7381
 msgid "Top"
 msgstr "Topp"
 
-#: gitk:7239
+#: gitk:7382
 msgid "From"
 msgstr "Från"
 
-#: gitk:7244
+#: gitk:7387
 msgid "To"
 msgstr "Till"
 
-#: gitk:7267
+#: gitk:7410
 msgid "Generate patch"
 msgstr "Generera patch"
 
-#: gitk:7269
+#: gitk:7412
 msgid "From:"
 msgstr "Från:"
 
-#: gitk:7278
+#: gitk:7421
 msgid "To:"
 msgstr "Till:"
 
-#: gitk:7287
+#: gitk:7430
 msgid "Reverse"
 msgstr "Vänd"
 
-#: gitk:7289 gitk:7464
+#: gitk:7432 gitk:7607
 msgid "Output file:"
 msgstr "Utdatafil:"
 
-#: gitk:7295
+#: gitk:7438
 msgid "Generate"
 msgstr "Generera"
 
-#: gitk:7331
+#: gitk:7474
 msgid "Error creating patch:"
 msgstr "Fel vid generering av patch:"
 
-#: gitk:7353 gitk:7452 gitk:7506
+#: gitk:7496 gitk:7595 gitk:7649
 msgid "ID:"
 msgstr "Id:"
 
-#: gitk:7362
+#: gitk:7505
 msgid "Tag name:"
 msgstr "Taggnamn:"
 
-#: gitk:7366 gitk:7515
+#: gitk:7509 gitk:7659
 msgid "Create"
 msgstr "Skapa"
 
-#: gitk:7381
+#: gitk:7524
 msgid "No tag name specified"
 msgstr "Inget taggnamn angavs"
 
-#: gitk:7385
+#: gitk:7528
 #, tcl-format
 msgid "Tag \"%s\" already exists"
 msgstr "Taggen \"%s\" finns redan"
 
-#: gitk:7391
+#: gitk:7534
 msgid "Error creating tag:"
 msgstr "Fel vid skapande av tagg:"
 
-#: gitk:7461
+#: gitk:7604
 msgid "Command:"
 msgstr "Kommando:"
 
-#: gitk:7469
+#: gitk:7612
 msgid "Write"
 msgstr "Skriv"
 
-#: gitk:7485
+#: gitk:7628
 msgid "Error writing commit:"
 msgstr "Fel vid skrivning av incheckning:"
 
-#: gitk:7511
+#: gitk:7654
 msgid "Name:"
 msgstr "Namn:"
 
-#: gitk:7530
+#: gitk:7674
 msgid "Please specify a name for the new branch"
 msgstr "Ange ett namn för den nya grenen"
 
-#: gitk:7559
+#: gitk:7703
 #, tcl-format
 msgid "Commit %s is already included in branch %s -- really re-apply it?"
 msgstr ""
 "Incheckningen %s finns redan på grenen %s -- skall den verkligen appliceras "
 "på nytt?"
 
-#: gitk:7564
+#: gitk:7708
 msgid "Cherry-picking"
 msgstr "Plockar"
 
-#: gitk:7576
+#: gitk:7720
 msgid "No changes committed"
 msgstr "Inga ändringar incheckade"
 
-#: gitk:7601
+#: gitk:7745
 msgid "Confirm reset"
 msgstr "Bekräfta återställning"
 
-#: gitk:7603
+#: gitk:7747
 #, tcl-format
 msgid "Reset branch %s to %s?"
 msgstr "Återställa grenen %s till %s?"
 
-#: gitk:7607
+#: gitk:7751
 msgid "Reset type:"
 msgstr "Typ av återställning:"
 
-#: gitk:7611
+#: gitk:7755
 msgid "Soft: Leave working tree and index untouched"
 msgstr "Mjuk: Rör inte utcheckning och index"
 
-#: gitk:7614
+#: gitk:7758
 msgid "Mixed: Leave working tree untouched, reset index"
 msgstr "Blandad: Rör inte utcheckning, återställ index"
 
-#: gitk:7617
+#: gitk:7761
 msgid ""
 "Hard: Reset working tree and index\n"
 "(discard ALL local changes)"
@@ -728,19 +732,19 @@ msgstr ""
 "Hård: Återställ utcheckning och index\n"
 "(förkastar ALLA lokala ändringar)"
 
-#: gitk:7633
+#: gitk:7777
 msgid "Resetting"
 msgstr "Återställer"
 
-#: gitk:7690
+#: gitk:7834
 msgid "Checking out"
 msgstr "Checkar ut"
 
-#: gitk:7741
+#: gitk:7885
 msgid "Cannot delete the currently checked-out branch"
 msgstr "Kan inte ta bort den just nu utcheckade grenen"
 
-#: gitk:7747
+#: gitk:7891
 #, tcl-format
 msgid ""
 "The commits on branch %s aren't on any other branch.\n"
@@ -749,16 +753,16 @@ msgstr ""
 "Incheckningarna på grenen %s existerar inte på någon annan gren.\n"
 "Vill du verkligen ta bort grenen %s?"
 
-#: gitk:7778
+#: gitk:7922
 #, tcl-format
 msgid "Tags and heads: %s"
 msgstr "Taggar och huvuden: %s"
 
-#: gitk:7792
+#: gitk:7936
 msgid "Filter"
 msgstr "Filter"
 
-#: gitk:8086
+#: gitk:8230
 msgid ""
 "Error reading commit topology information; branch and preceding/following "
 "tag information will be incomplete."
@@ -766,125 +770,129 @@ msgstr ""
 "Fel vid läsning av information om incheckningstopologi; information om "
 "grenar och föregående/senare taggar kommer inte vara komplett."
 
-#: gitk:9072
+#: gitk:9216
 msgid "Tag"
 msgstr "Tagg"
 
-#: gitk:9072
+#: gitk:9216
 msgid "Id"
 msgstr "Id"
 
-#: gitk:9118
+#: gitk:9262
 msgid "Gitk font chooser"
 msgstr "Teckensnittsväljare för Gitk"
 
-#: gitk:9135
+#: gitk:9279
 msgid "B"
 msgstr "F"
 
-#: gitk:9138
+#: gitk:9282
 msgid "I"
 msgstr "K"
 
-#: gitk:9231
+#: gitk:9375
 msgid "Gitk preferences"
 msgstr "Inställningar för Gitk"
 
-#: gitk:9232
+#: gitk:9376
 msgid "Commit list display options"
 msgstr "Alternativ för incheckningslistvy"
 
-#: gitk:9235
+#: gitk:9379
 msgid "Maximum graph width (lines)"
 msgstr "Maximal grafbredd (rader)"
 
-#: gitk:9239
+#: gitk:9383
 #, tcl-format
 msgid "Maximum graph width (% of pane)"
 msgstr "Maximal grafbredd (% av ruta)"
 
-#: gitk:9244
+#: gitk:9388
 msgid "Show local changes"
 msgstr "Visa lokala ändringar"
 
-#: gitk:9249
+#: gitk:9393
 msgid "Auto-select SHA1"
 msgstr "Välj SHA1 automatiskt"
 
-#: gitk:9254
+#: gitk:9398
 msgid "Diff display options"
 msgstr "Alternativ för diffvy"
 
-#: gitk:9256
+#: gitk:9400
 msgid "Tab spacing"
 msgstr "Blanksteg för tabulatortecken"
 
-#: gitk:9260
+#: gitk:9404
 msgid "Display nearby tags"
 msgstr "Visa närliggande taggar"
 
-#: gitk:9265
+#: gitk:9409
 msgid "Limit diffs to listed paths"
 msgstr "Begränsa diff till listade sökvägar"
 
-#: gitk:9272
+#: gitk:9414
+msgid "Support per-file encodings"
+msgstr ""
+
+#: gitk:9421
 msgid "External diff tool"
 msgstr "Externt diff-verktyg"
 
-#: gitk:9274
+#: gitk:9423
 msgid "Choose..."
 msgstr "Välj..."
 
-#: gitk:9279
+#: gitk:9428
 msgid "Colors: press to choose"
 msgstr "Färger: tryck för att välja"
 
-#: gitk:9282
+#: gitk:9431
 msgid "Background"
 msgstr "Bakgrund"
 
-#: gitk:9286
+#: gitk:9435
 msgid "Foreground"
 msgstr "Förgrund"
 
-#: gitk:9290
+#: gitk:9439
 msgid "Diff: old lines"
 msgstr "Diff: gamla rader"
 
-#: gitk:9295
+#: gitk:9444
 msgid "Diff: new lines"
 msgstr "Diff: nya rader"
 
-#: gitk:9300
+#: gitk:9449
 msgid "Diff: hunk header"
 msgstr "Diff: delhuvud"
 
-#: gitk:9306
+#: gitk:9455
 msgid "Select bg"
 msgstr "Markerad bakgrund"
 
-#: gitk:9310
+#: gitk:9459
 msgid "Fonts: press to choose"
 msgstr "Teckensnitt: tryck för att välja"
 
-#: gitk:9312
+#: gitk:9461
 msgid "Main font"
 msgstr "Huvudteckensnitt"
 
-#: gitk:9313
+#: gitk:9462
 msgid "Diff display font"
 msgstr "Teckensnitt för diffvisning"
 
-#: gitk:9314
+#: gitk:9463
 msgid "User interface font"
 msgstr "Teckensnitt för användargränssnitt"
 
-#: gitk:9339
+#: gitk:9488
 #, tcl-format
 msgid "Gitk: choose color for %s"
 msgstr "Gitk: välj färg för %s"
 
-#: gitk:9720
+#: gitk:9934
 msgid ""
 "Sorry, gitk cannot run with this version of Tcl/Tk.\n"
 " Gitk requires at least Tcl/Tk 8.4."
@@ -892,24 +900,24 @@ msgstr ""
 "Gitk kan tyvärr inte köra med denna version av Tcl/Tk.\n"
 " Gitk kräver åtminstone Tcl/Tk 8.4."
 
-#: gitk:9812
+#: gitk:10047
 msgid "Cannot find a git repository here."
 msgstr "Hittar inget gitk-arkiv här."
 
-#: gitk:9816
+#: gitk:10051
 #, tcl-format
 msgid "Cannot find the git directory \"%s\"."
 msgstr "Hittar inte git-katalogen \"%s\"."
 
-#: gitk:9853
+#: gitk:10098
 #, tcl-format
 msgid "Ambiguous argument '%s': both revision and filename"
 msgstr "Tvetydigt argument \"%s\": både revision och filnamn"
 
-#: gitk:9865
+#: gitk:10110
 msgid "Bad arguments to gitk:"
 msgstr "Felaktiga argument till gitk:"
 
-#: gitk:9925
+#: gitk:10170
 msgid "Command line"
 msgstr "Kommandorad"

From d375ef9b1483c3c828d78ce08adae6aae8e19f75 Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Tue, 21 Oct 2008 10:18:12 +1100
Subject: [PATCH 11/11] gitk: Turn short SHA1 names into links too

This changes the link detection logic to accept strings of between 6
and 40 hex characters as a possible SHA1 ID of another commit, rather
than insisting on seeing the full 40 hex characters.

To make the logic that turns a possible link into an actual link work
with abbreviated IDs, this changes the way the commitinterest array is
used, and puts the code that deals with it in a pair of new functions.
The commitinterest array is now indexed by just the first 4 characters
of the interesting SHA1 ID, and each element is a list of id + command
pairs.  This also pulls out the logic for expanding an abbreviated
SHA1 to the list of matching full IDs into its own function (the way
it is done is still the same slow way it was done before, which should
be improved some day).

This also fixes the bug where clicking on a link would take you to the
wrong commit if the line number of the target had changed since the
link was made.

This is based on a patch by Linus Torvalds, but totally rewritten by me.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 107 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 77 insertions(+), 30 deletions(-)

diff --git a/gitk b/gitk
index 3678de1959..bcebc87f7d 100755
--- a/gitk
+++ b/gitk
@@ -307,7 +307,7 @@ proc start_rev_list {view} {
     global startmsecs commitidx viewcomplete curview
     global tclencoding
     global viewargs viewargscmd viewfiles vfilelimit
-    global showlocalchanges commitinterest
+    global showlocalchanges
     global viewactive viewinstances vmergeonly
     global mainheadid
     global vcanopt vflags vrevs vorigargs
@@ -368,7 +368,7 @@ proc start_rev_list {view} {
     set i [reg_instance $fd]
     set viewinstances($view) [list $i]
     if {$showlocalchanges && $mainheadid ne {}} {
-	lappend commitinterest($mainheadid) {dodiffindex}
+	interestedin $mainheadid dodiffindex
     }
     fconfigure $fd -blocking 0 -translation lf -eofchar {}
     if {$tclencoding != {}} {
@@ -1231,7 +1231,7 @@ proc commitonrow {row} {
 
 proc closevarcs {v} {
     global varctok varccommits varcid parents children
-    global cmitlisted commitidx commitinterest vtokmod
+    global cmitlisted commitidx vtokmod
 
     set missing_parents 0
     set scripts {}
@@ -1256,12 +1256,7 @@ proc closevarcs {v} {
 	    }
 	    lappend varccommits($v,$b) $p
 	    incr commitidx($v)
-	    if {[info exists commitinterest($p)]} {
-		foreach script $commitinterest($p) {
-		    lappend scripts [string map [list "%I" $p] $script]
-		}
-		unset commitinterest($id)
-	    }
+	    set scripts [check_interest $p $scripts]
 	}
     }
     if {$missing_parents > 0} {
@@ -1297,8 +1292,41 @@ proc rewrite_commit {v id rwid} {
     }
 }
 
+# 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
+# list of id, cmd pairs.
+proc interestedin {id cmd} {
+    global commitinterest
+
+    lappend commitinterest([string range $id 0 3]) $id $cmd
+}
+
+proc check_interest {id scripts} {
+    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
+	    }
+	}
+	if {$newlist ne {}} {
+	    set commitinterest($prefix) $newlist
+	} else {
+	    unset commitinterest($prefix)
+	}
+    }
+    return $scripts
+}
+
 proc getcommitlines {fd inst view updating}  {
-    global cmitlisted commitinterest leftover
+    global cmitlisted leftover
     global commitidx commitdata vdatemode
     global parents children curview hlview
     global idpending ordertok
@@ -1474,12 +1502,7 @@ proc getcommitlines {fd inst view updating}  {
 	    incr i
 	}
 
-	if {[info exists commitinterest($id)]} {
-	    foreach script $commitinterest($id) {
-		lappend scripts [string map [list "%I" $id] $script]
-	    }
-	    unset commitinterest($id)
-	}
+	set scripts [check_interest $id $scripts]
 	set gotsome 1
     }
     if {$gotsome} {
@@ -1608,6 +1631,19 @@ proc getcommit {id} {
     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
+
+    set ids {}
+    foreach match [array names varcid "$curview,$prefix*"] {
+	lappend ids [lindex [split $match ","] 1]
+    }
+    return $ids
+}
+
 proc readrefs {} {
     global tagids idtags headids idheads tagobjid
     global otherrefids idotherrefs mainhead mainheadid
@@ -4119,7 +4155,7 @@ proc visiblerows {} {
 proc layoutmore {} {
     global commitidx viewcomplete curview
     global numcommits pending_select curview
-    global lastscrollset lastscrollrows commitinterest
+    global lastscrollset lastscrollrows
 
     if {$lastscrollrows < 100 || $viewcomplete($curview) ||
 	[clock clicks -milliseconds] - $lastscrollset > 500} {
@@ -4140,7 +4176,7 @@ proc doshowlocalchanges {} {
     if {[commitinview $mainheadid $curview]} {
 	dodiffindex
     } else {
-	lappend commitinterest($mainheadid) {dodiffindex}
+	interestedin $mainheadid dodiffindex
     }
 }
 
@@ -5795,11 +5831,11 @@ proc commit_descriptor {p} {
 # append some text to the ctext widget, and make any SHA1 ID
 # that we know about be a clickable link.
 proc appendwithlinks {text tags} {
-    global ctext linknum curview pendinglinks
+    global ctext linknum curview
 
     set start [$ctext index "end - 1c"]
     $ctext insert end $text $tags
-    set links [regexp -indices -all -inline {[0-9a-f]{40}} $text]
+    set links [regexp -indices -all -inline {\m[0-9a-f]{6,40}\M} $text]
     foreach l $links {
 	set s [lindex $l 0]
 	set e [lindex $l 1]
@@ -5813,16 +5849,27 @@ proc appendwithlinks {text tags} {
 }
 
 proc setlink {id lk} {
-    global curview ctext pendinglinks commitinterest
+    global curview ctext pendinglinks
 
-    if {[commitinview $id $curview]} {
+    set known 0
+    if {[string length $id] < 40} {
+	set matches [longid $id]
+	if {[llength $matches] > 0} {
+	    if {[llength $matches] > 1} return
+	    set known 1
+	    set id [lindex $matches 0]
+	}
+    } else {
+	set known [commitinview $id $curview]
+    }
+    if {$known} {
 	$ctext tag conf $lk -foreground blue -underline 1
-	$ctext tag bind $lk <1> [list selectline [rowofcommit $id] 1]
+	$ctext tag bind $lk <1> [list selbyid $id]
 	$ctext tag bind $lk <Enter> {linkcursor %W 1}
 	$ctext tag bind $lk <Leave> {linkcursor %W -1}
     } else {
 	lappend pendinglinks($id) $lk
-	lappend commitinterest($id) {makelink %I}
+	interestedin $id {makelink %P}
     }
 }
 
@@ -7138,13 +7185,13 @@ proc gotocommit {} {
     } else {
 	set id [string tolower $sha1string]
 	if {[regexp {^[0-9a-f]{4,39}$} $id]} {
-	    set matches [array names varcid "$curview,$id*"]
+	    set matches [longid $id]
 	    if {$matches ne {}} {
 		if {[llength $matches] > 1} {
 		    error_popup [mc "Short SHA1 id %s is ambiguous" $id]
 		    return
 		}
-		set id [lindex [split [lindex $matches 0] ","] 1]
+		set id [lindex $matches 0]
 	    }
 	}
     }
@@ -7992,7 +8039,7 @@ proc reflistfilter_change {n1 n2 op} {
 
 proc refill_reflist {} {
     global reflist reflistfilter showrefstop headids tagids otherrefids
-    global curview commitinterest
+    global curview
 
     if {![info exists showrefstop] || ![winfo exists $showrefstop]} return
     set refs {}
@@ -8001,7 +8048,7 @@ proc refill_reflist {} {
 	    if {[commitinview $headids($n) $curview]} {
 		lappend refs [list $n H]
 	    } else {
-		set commitinterest($headids($n)) {run refill_reflist}
+		interestedin $headids($n) {run refill_reflist}
 	    }
 	}
     }
@@ -8010,7 +8057,7 @@ proc refill_reflist {} {
 	    if {[commitinview $tagids($n) $curview]} {
 		lappend refs [list $n T]
 	    } else {
-		set commitinterest($tagids($n)) {run refill_reflist}
+		interestedin $tagids($n) {run refill_reflist}
 	    }
 	}
     }
@@ -8019,7 +8066,7 @@ proc refill_reflist {} {
 	    if {[commitinview $otherrefids($n) $curview]} {
 		lappend refs [list $n o]
 	    } else {
-		set commitinterest($otherrefids($n)) {run refill_reflist}
+		interestedin $otherrefids($n) {run refill_reflist}
 	    }
 	}
     }