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>
This commit is contained in:
parent
50102c5687
commit
3fe0162362
@ -3010,6 +3010,14 @@ proc create_common_diff_popup {ctxm} {
|
|||||||
-command {incr_font_size font_diff 1}
|
-command {incr_font_size font_diff 1}
|
||||||
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
|
||||||
$ctxm add separator
|
$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..."] \
|
$ctxm add command -label [mc "Options..."] \
|
||||||
-command do_options
|
-command do_options
|
||||||
}
|
}
|
||||||
|
@ -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 {} {
|
proc handle_empty_diff {} {
|
||||||
global current_diff_path file_states file_lists
|
global current_diff_path file_states file_lists
|
||||||
|
|
||||||
|
@ -321,13 +321,38 @@ proc tcl_encoding {enc} {
|
|||||||
return {}
|
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} {
|
proc get_path_encoding {path} {
|
||||||
|
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]]
|
set tcl_enc [tcl_encoding [get_config gui.encoding]]
|
||||||
|
}
|
||||||
if {$tcl_enc eq {}} {
|
if {$tcl_enc eq {}} {
|
||||||
set tcl_enc [encoding system]
|
set tcl_enc [encoding system]
|
||||||
}
|
}
|
||||||
if {$path ne {}} {
|
if {$path ne {}} {
|
||||||
|
if {[info exists path_encoding_overrides($path)]} {
|
||||||
|
set enc2 $path_encoding_overrides($path)
|
||||||
|
} else {
|
||||||
set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]]
|
set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]]
|
||||||
|
}
|
||||||
if {$enc2 ne {}} {
|
if {$enc2 ne {}} {
|
||||||
set tcl_enc $enc2
|
set tcl_enc $enc2
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user