diff options
-rw-r--r-- | .gitattributes | 3 | ||||
-rwxr-xr-x | git-gui.sh | 13 | ||||
-rw-r--r-- | lib/blame.tcl | 5 | ||||
-rw-r--r-- | lib/diff.tcl | 9 |
4 files changed, 26 insertions, 4 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..f96112d47 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* encoding=US-ASCII +git-gui.sh encoding=UTF-8 +/po/*.po encoding=UTF-8 diff --git a/git-gui.sh b/git-gui.sh index cb0fcac99..4a762355d 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -521,6 +521,19 @@ proc kill_file_process {fd} { } } +proc gitattr {path attr default} { + if {[catch {set r [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 sq {value} { regsub -all ' $value "'\\''" value return "'$value'" diff --git a/lib/blame.tcl b/lib/blame.tcl index 0d635cd3a..9464a599d 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -399,7 +399,10 @@ method _load {jump} { } else { set fd [git_read cat-file blob "$commit:$path"] } - fconfigure $fd -blocking 0 -translation lf -encoding binary + fconfigure $fd \ + -blocking 0 \ + -translation lf \ + -encoding [tcl_encoding [gitattr $path encoding UTF-8]] fileevent $fd readable [cb _read_file $fd $jump] set current_fd $fd } diff --git a/lib/diff.tcl b/lib/diff.tcl index a30c80a93..b0ecfbcb5 100644 --- a/lib/diff.tcl +++ b/lib/diff.tcl @@ -164,8 +164,11 @@ proc show_other_diff {path w m scroll_pos} { set sz [string length $content] } file { + set enc [gitattr $path encoding UTF-8] set fd [open $path r] - fconfigure $fd -eofchar {} + fconfigure $fd \ + -eofchar {} \ + -encoding [tcl_encoding $enc] set content [read $fd $max_sz] close $fd set sz [file size $path] @@ -279,8 +282,8 @@ proc start_show_diff {scroll_pos {add_opts {}}} { set ::current_diff_inheader 1 fconfigure $fd \ -blocking 0 \ - -encoding binary \ - -translation binary + -encoding [tcl_encoding [gitattr $path encoding UTF-8]] \ + -translation lf fileevent $fd readable [list read_diff $fd $scroll_pos] } |