aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2008-09-18 01:07:34 +0400
committerShawn O. Pearce <spearce@spearce.org>2008-09-24 12:48:32 -0700
commit3fe0162362f80262ed1965f19c1f57f298931c94 (patch)
treedab7c45bb8241268d946bb281d30f4384cbf7b46
parent50102c5687db83db48b9705e07de16d07cef7cd9 (diff)
downloadgit-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-xgit-gui.sh8
-rw-r--r--lib/diff.tcl9
-rw-r--r--lib/encoding.tcl29
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
}