diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2008-09-18 01:07:34 +0400 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2008-09-24 12:48:32 -0700 |
commit | 3fe0162362f80262ed1965f19c1f57f298931c94 (patch) | |
tree | dab7c45bb8241268d946bb281d30f4384cbf7b46 | |
parent | 50102c5687db83db48b9705e07de16d07cef7cd9 (diff) | |
download | git-3fe0162362f80262ed1965f19c1f57f298931c94.tar.gz git-3fe0162362f80262ed1965f19c1f57f298931c94.tar.xz |
git-gui: Allow forcing display encoding for diffs using a submenu.
Add a submenu to allow dynamically changing the encoding to use
for diffs. Encoding settings are remembered while git-gui runs.
The rules are:
1) Encoding set for a specific file overrides gitattributes.
2) Last explicitly set value of the encoding overrides gui.encoding
Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Tested-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rwxr-xr-x | git-gui.sh | 8 | ||||
-rw-r--r-- | lib/diff.tcl | 9 | ||||
-rw-r--r-- | lib/encoding.tcl | 29 |
3 files changed, 44 insertions, 2 deletions
diff --git a/git-gui.sh b/git-gui.sh index b37148b7b..03c450d73 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -3010,6 +3010,14 @@ proc create_common_diff_popup {ctxm} { -command {incr_font_size font_diff 1} lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state] $ctxm add separator + set emenu $ctxm.enc + menu $emenu + build_encoding_menu $emenu [list force_diff_encoding] + $ctxm add cascade \ + -label [mc "Encoding"] \ + -menu $emenu + lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state] + $ctxm add separator $ctxm add command -label [mc "Options..."] \ -command do_options } diff --git a/lib/diff.tcl b/lib/diff.tcl index 8fefc5d9a..b61629676 100644 --- a/lib/diff.tcl +++ b/lib/diff.tcl @@ -40,6 +40,15 @@ proc reshow_diff {} { } } +proc force_diff_encoding {enc} { + global current_diff_path + + if {$current_diff_path ne {}} { + force_path_encoding $current_diff_path $enc + reshow_diff + } +} + proc handle_empty_diff {} { global current_diff_path file_states file_lists diff --git a/lib/encoding.tcl b/lib/encoding.tcl index 2c1eda33e..b2ee38cc8 100644 --- a/lib/encoding.tcl +++ b/lib/encoding.tcl @@ -321,13 +321,38 @@ proc tcl_encoding {enc} { return {} } +proc force_path_encoding {path enc} { + global path_encoding_overrides last_encoding_override + + set enc [tcl_encoding $enc] + if {$enc eq {}} { + catch { unset last_encoding_override } + catch { unset path_encoding_overrides($path) } + } else { + set last_encoding_override $enc + if {$path ne {}} { + set path_encoding_overrides($path) $enc + } + } +} + proc get_path_encoding {path} { - set tcl_enc [tcl_encoding [get_config gui.encoding]] + global path_encoding_overrides last_encoding_override + + if {[info exists last_encoding_override]} { + set tcl_enc $last_encoding_override + } else { + set tcl_enc [tcl_encoding [get_config gui.encoding]] + } if {$tcl_enc eq {}} { set tcl_enc [encoding system] } if {$path ne {}} { - set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]] + if {[info exists path_encoding_overrides($path)]} { + set enc2 $path_encoding_overrides($path) + } else { + set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]] + } if {$enc2 ne {}} { set tcl_enc $enc2 } |