gitk: Unicode file name support
Assumes file names in git tree objects are UTF-8 encoded. On most unix systems, the system encoding (and thus the TCL system encoding) will be UTF-8, so file names will be displayed correctly. On Windows, it is impossible to set the system encoding to UTF-8. Changing the TCL system encoding (via 'encoding system ...', e.g. in the startup code) is explicitly discouraged by the TCL docs. Change gitk functions dealing with file names to always convert from and to UTF-8. Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Karsten Blees committed
Feb 4, 2012 at 21:54 UTC
5eb02dd8f08fc3b7ff22320c3311cd1da6a5ab4d
1 file changed
+8
-7
gitk
+8
-7
@@ -7855,7 +7855,7 @@ proc gettreeline {gtf id} {
7855
if {[string index $fname 0] eq "\""} {
7856
set fname [lindex $fname 0]
7857
}
7858
- set fname [encoding convertfrom $fname]
7858
+ set fname [encoding convertfrom utf-8 $fname]
7859
lappend treefilelist($id) $fname
7860
}
7861
if {![eof $gtf]} {
@@ -8117,7 +8117,7 @@ proc gettreediffline {gdtf ids} {
8117
if {[string index $file 0] eq "\""} {
8118
set file [lindex $file 0]
8119
}
8120
- set file [encoding convertfrom $file]
8120
+ set file [encoding convertfrom utf-8 $file]
8121
if {$file ne [lindex $treediff end]} {
8122
lappend treediff $file
8123
lappend sublist $file
@@ -8262,7 +8262,7 @@ proc makediffhdr {fname ids} {
8262
global ctext curdiffstart treediffs diffencoding
8263
global ctext_file_names jump_to_here targetline diffline
8264
8265
- set fname [encoding convertfrom $fname]
8265
+ set fname [encoding convertfrom utf-8 $fname]
8266
set diffencoding [get_path_encoding $fname]
8267
set i [lsearch -exact $treediffs($ids) $fname]
8268
if {$i >= 0} {
@@ -8324,7 +8324,7 @@ proc parseblobdiffline {ids line} {
8324
8325
if {![string compare -length 5 "diff " $line]} {
8326
if {![regexp {^diff (--cc|--git) } $line m type]} {
8327
- set line [encoding convertfrom $line]
8327
+ set line [encoding convertfrom utf-8 $line]
8328
$ctext insert end "$line\n" hunksep
8329
continue
8330
}
@@ -8373,7 +8373,7 @@ proc parseblobdiffline {ids line} {
8373
makediffhdr $fname $ids
8374
8375
} elseif {![string compare -length 16 "* Unmerged path " $line]} {
8376
- set fname [encoding convertfrom [string range $line 16 end]]
8376
+ set fname [encoding convertfrom utf-8 [string range $line 16 end]]
8377
$ctext insert end "\n"
8378
set curdiffstart [$ctext index "end - 1c"]
8379
lappend ctext_file_names $fname
@@ -8426,7 +8426,7 @@ proc parseblobdiffline {ids line} {
8426
if {[string index $fname 0] eq "\""} {
8427
set fname [lindex $fname 0]
8428
}
8429
- set fname [encoding convertfrom $fname]
8429
+ set fname [encoding convertfrom utf-8 $fname]
8430
set i [lsearch -exact $treediffs($ids) $fname]
8431
if {$i >= 0} {
8432
setinlist difffilestart $i $curdiffstart
@@ -8445,6 +8445,7 @@ proc parseblobdiffline {ids line} {
8445
set diffinhdr 0
8446
return
8447
}
8448
+ set line [encoding convertfrom utf-8 $line]
8449
$ctext insert end "$line\n" filesep
8450
8451
} else {
@@ -12440,7 +12441,7 @@ proc cache_gitattr {attr pathlist} {
12441
foreach row [split $rlist "\n"] {
12442
if {[regexp "(.*): $attr: (.*)" $row m path value]} {
12443
if {[string index $path 0] eq "\""} {
12443
- set path [encoding convertfrom [lindex $path 0]]
12444
+ set path [encoding convertfrom utf-8 [lindex $path 0]]
12445
}
12446
set path_attr_cache($attr,$path) $value
12447
}