Merge git://repo.or.cz/git-gui
* git://repo.or.cz/git-gui: git-gui: Reenable staging unmerged files by clicking the icon. git-gui: Support the encoding menu in gui blame. git-gui: Optimize encoding name resolution using a lookup table. git-gui: Allow forcing display encoding for diffs using a submenu. git-gui: Add a menu of available encodings. git-gui: Cleanup handling of the default encoding. git-gui: Assume `blame --incremental` output is in UTF-8 git-gui: Use gitattribute "encoding" for file content display git-gui: Add support for calling out to the prepare-commit-msg hook git-gui: Hide commit related UI during citool --nocommit git-gui: Add more integration options to citool. git-gui: Updated German translation. git-gui: I18n fix sentence parts into full sentences for translation again. git-gui: Restore ability to Stage Working Copy for conflicts. git-gui: Fix Blame Parent & Context for working copy lines.
This commit is contained in:
@ -206,7 +206,7 @@ set encoding_aliases {
|
||||
{ ISO-8859-16 iso-ir-226 ISO_8859-16:2001 ISO_8859-16 latin10 l10 }
|
||||
{ GBK CP936 MS936 windows-936 }
|
||||
{ JIS_Encoding csJISEncoding }
|
||||
{ Shift_JIS MS_Kanji csShiftJIS }
|
||||
{ Shift_JIS MS_Kanji csShiftJIS ShiftJIS Shift-JIS }
|
||||
{ Extended_UNIX_Code_Packed_Format_for_Japanese csEUCPkdFmtJapanese
|
||||
EUC-JP }
|
||||
{ Extended_UNIX_Code_Fixed_Width_for_Japanese csEUCFixWidJapanese }
|
||||
@ -240,37 +240,227 @@ set encoding_aliases {
|
||||
{ Big5 csBig5 }
|
||||
}
|
||||
|
||||
proc tcl_encoding {enc} {
|
||||
global encoding_aliases
|
||||
set names [encoding names]
|
||||
set lcnames [string tolower $names]
|
||||
set enc [string tolower $enc]
|
||||
set i [lsearch -exact $lcnames $enc]
|
||||
if {$i < 0} {
|
||||
# look for "isonnn" instead of "iso-nnn" or "iso_nnn"
|
||||
if {[regsub {^iso[-_]} $enc iso encx]} {
|
||||
set i [lsearch -exact $lcnames $encx]
|
||||
}
|
||||
}
|
||||
if {$i < 0} {
|
||||
foreach l $encoding_aliases {
|
||||
set ll [string tolower $l]
|
||||
if {[lsearch -exact $ll $enc] < 0} continue
|
||||
# look through the aliases for one that tcl knows about
|
||||
foreach e $ll {
|
||||
set i [lsearch -exact $lcnames $e]
|
||||
if {$i < 0} {
|
||||
if {[regsub {^iso[-_]} $e iso ex]} {
|
||||
set i [lsearch -exact $lcnames $ex]
|
||||
}
|
||||
}
|
||||
if {$i >= 0} break
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
if {$i >= 0} {
|
||||
return [lindex $names $i]
|
||||
}
|
||||
return {}
|
||||
set encoding_groups {
|
||||
{"" ""
|
||||
{"Unicode" UTF-8}
|
||||
{"Western" ISO-8859-1}}
|
||||
{we "West European"
|
||||
{"Western" ISO-8859-15 CP-437 CP-850 MacRoman CP-1252 Windows-1252}
|
||||
{"Celtic" ISO-8859-14}
|
||||
{"Greek" ISO-8859-14 ISO-8859-7 CP-737 CP-869 MacGreek CP-1253 Windows-1253}
|
||||
{"Icelandic" MacIceland MacIcelandic CP-861}
|
||||
{"Nordic" ISO-8859-10 CP-865}
|
||||
{"Portuguese" CP-860}
|
||||
{"South European" ISO-8859-3}}
|
||||
{ee "East European"
|
||||
{"Baltic" CP-775 ISO-8859-4 ISO-8859-13 CP-1257 Windows-1257}
|
||||
{"Central European" CP-852 ISO-8859-2 MacCE CP-1250 Windows-1250}
|
||||
{"Croatian" MacCroatian}
|
||||
{"Cyrillic" CP-855 ISO-8859-5 ISO-IR-111 KOI8-R MacCyrillic CP-1251 Windows-1251}
|
||||
{"Russian" CP-866}
|
||||
{"Ukrainian" KOI8-U MacUkraine MacUkrainian}
|
||||
{"Romanian" ISO-8859-16 MacRomania MacRomanian}}
|
||||
{ea "East Asian"
|
||||
{"Generic" ISO-2022}
|
||||
{"Chinese Simplified" GB2312 GB1988 GB12345 GB2312-RAW GBK EUC-CN GB18030 HZ ISO-2022-CN}
|
||||
{"Chinese Traditional" Big5 Big5-HKSCS EUC-TW CP-950}
|
||||
{"Japanese" EUC-JP ISO-2022-JP Shift-JIS JIS-0212 JIS-0208 JIS-0201 CP-932 MacJapan}
|
||||
{"Korean" EUC-KR UHC JOHAB ISO-2022-KR CP-949 KSC5601}}
|
||||
{sa "SE & SW Asian"
|
||||
{"Armenian" ARMSCII-8}
|
||||
{"Georgian" GEOSTD8}
|
||||
{"Thai" TIS-620 ISO-8859-11 CP-874 Windows-874 MacThai}
|
||||
{"Turkish" CP-857 CP857 ISO-8859-9 MacTurkish CP-1254 Windows-1254}
|
||||
{"Vietnamese" TCVN VISCII VPS CP-1258 Windows-1258}
|
||||
{"Hindi" MacDevanagari}
|
||||
{"Gujarati" MacGujarati}
|
||||
{"Gurmukhi" MacGurmukhi}}
|
||||
{me "Middle Eastern"
|
||||
{"Arabic" ISO-8859-6 Windows-1256 CP-1256 CP-864 MacArabic}
|
||||
{"Farsi" MacFarsi}
|
||||
{"Hebrew" ISO-8859-8-I Windows-1255 CP-1255 ISO-8859-8 CP-862 MacHebrew}}
|
||||
{mi "Misc"
|
||||
{"7-bit" ASCII}
|
||||
{"16-bit" Unicode}
|
||||
{"Legacy" CP-863 EBCDIC}
|
||||
{"Symbol" Symbol Dingbats MacDingbats MacCentEuro}}
|
||||
}
|
||||
|
||||
proc build_encoding_table {} {
|
||||
global encoding_aliases encoding_lookup_table
|
||||
|
||||
# Prepare the lookup list; cannot use lsort -nocase because
|
||||
# of compatibility issues with older Tcl (e.g. in msysgit)
|
||||
set names [list]
|
||||
foreach item [encoding names] {
|
||||
lappend names [list [string tolower $item] $item]
|
||||
}
|
||||
set names [lsort -ascii -index 0 $names]
|
||||
# neither can we use lsearch -index
|
||||
set lnames [list]
|
||||
foreach item $names {
|
||||
lappend lnames [lindex $item 0]
|
||||
}
|
||||
|
||||
foreach grp $encoding_aliases {
|
||||
set target {}
|
||||
foreach item $grp {
|
||||
set i [lsearch -sorted -ascii $lnames \
|
||||
[string tolower $item]]
|
||||
if {$i >= 0} {
|
||||
set target [lindex $names $i 1]
|
||||
break
|
||||
}
|
||||
}
|
||||
if {$target eq {}} continue
|
||||
foreach item $grp {
|
||||
set encoding_lookup_table([string tolower $item]) $target
|
||||
}
|
||||
}
|
||||
|
||||
foreach item $names {
|
||||
set encoding_lookup_table([lindex $item 0]) [lindex $item 1]
|
||||
}
|
||||
}
|
||||
|
||||
proc tcl_encoding {enc} {
|
||||
global encoding_lookup_table
|
||||
if {$enc eq {}} {
|
||||
return {}
|
||||
}
|
||||
if {![info exists encoding_lookup_table]} {
|
||||
build_encoding_table
|
||||
}
|
||||
set enc [string tolower $enc]
|
||||
if {![info exists encoding_lookup_table($enc)]} {
|
||||
# look for "isonnn" instead of "iso-nnn" or "iso_nnn"
|
||||
if {[regsub {^(iso|cp|ibm|jis)[-_]} $enc {\1} encx]} {
|
||||
set enc $encx
|
||||
}
|
||||
}
|
||||
if {[info exists encoding_lookup_table($enc)]} {
|
||||
return $encoding_lookup_table($enc)
|
||||
} else {
|
||||
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} {
|
||||
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 {}} {
|
||||
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
|
||||
}
|
||||
}
|
||||
return $tcl_enc
|
||||
}
|
||||
|
||||
proc build_encoding_submenu {parent grp cmd} {
|
||||
global used_encodings
|
||||
|
||||
set mid [lindex $grp 0]
|
||||
set gname [mc [lindex $grp 1]]
|
||||
|
||||
set smenu {}
|
||||
foreach subset [lrange $grp 2 end] {
|
||||
set name [mc [lindex $subset 0]]
|
||||
|
||||
foreach enc [lrange $subset 1 end] {
|
||||
set tcl_enc [tcl_encoding $enc]
|
||||
if {$tcl_enc eq {}} continue
|
||||
|
||||
if {$smenu eq {}} {
|
||||
if {$mid eq {}} {
|
||||
set smenu $parent
|
||||
} else {
|
||||
set smenu "$parent.$mid"
|
||||
menu $smenu
|
||||
$parent add cascade \
|
||||
-label $gname \
|
||||
-menu $smenu
|
||||
}
|
||||
}
|
||||
|
||||
if {$name ne {}} {
|
||||
set lbl "$name ($enc)"
|
||||
} else {
|
||||
set lbl $enc
|
||||
}
|
||||
$smenu add command \
|
||||
-label $lbl \
|
||||
-command [concat $cmd [list $tcl_enc]]
|
||||
|
||||
lappend used_encodings $tcl_enc
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc popup_btn_menu {m b} {
|
||||
tk_popup $m [winfo pointerx $b] [winfo pointery $b]
|
||||
}
|
||||
|
||||
proc build_encoding_menu {emenu cmd {nodef 0}} {
|
||||
$emenu configure -postcommand \
|
||||
[list do_build_encoding_menu $emenu $cmd $nodef]
|
||||
}
|
||||
|
||||
proc do_build_encoding_menu {emenu cmd {nodef 0}} {
|
||||
global used_encodings encoding_groups
|
||||
|
||||
$emenu configure -postcommand {}
|
||||
|
||||
if {!$nodef} {
|
||||
$emenu add command \
|
||||
-label [mc "Default"] \
|
||||
-command [concat $cmd [list {}]]
|
||||
}
|
||||
set sysenc [encoding system]
|
||||
$emenu add command \
|
||||
-label [mc "System (%s)" $sysenc] \
|
||||
-command [concat $cmd [list $sysenc]]
|
||||
|
||||
# Main encoding tree
|
||||
set used_encodings [list identity]
|
||||
$emenu add separator
|
||||
foreach grp $encoding_groups {
|
||||
build_encoding_submenu $emenu $grp $cmd
|
||||
}
|
||||
|
||||
# Add unclassified encodings
|
||||
set unused_grp [list [mc Other]]
|
||||
foreach enc [encoding names] {
|
||||
if {[lsearch -exact $used_encodings $enc] < 0} {
|
||||
lappend unused_grp $enc
|
||||
}
|
||||
}
|
||||
build_encoding_submenu $emenu [list other [mc Other] $unused_grp] $cmd
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user