Hi,
I am Tomohiro KUBOTA, a Debian user and developer.
Rxvt supports multibyte encodings such as EUC-JP, Shift_JIS, EUC-KR,
EUC-CN (aka GB), and Big5, besides simple 8bit encodings. However,
the current version of Rxvt has a problem that the preferable encoding
must be specified by the command line or the X resource explicitly,
which is a bit annoying. If a user has to remember how to specify
encoding/language for each software (Rxvt, Xterm, GhostScript, Emacs,
and so on so on), it is very annoying. Though it is true that the
"default" encoding can be specified in compilation time, the ideal
would be that "a single binary can be used for all supported encodings".
To solve this problem and achieve a "world version" Rxvt, it can
automatically set font/encoding according to the users' LC_CTYPE locale
environment.
According to ISO C standard, encoding to be used is determined
by LC_CTYPE locale. LC_CTYPE locale is determined by familiar
setlocale(LC_CTYPE,"") or setlocale(LC_ALL,"") according to
LANG/LC_CTYPE/LC_ALL environmental variables. Many "internationalized"
softwares are sensible to locale. Thus, once a user specify
LANG variable, all properly internationalized softwares will
work according to the variable.
I wrote a sample implementation now. It works as:
- Introduce a set_defaultfont(rxvt_t *r, char *rs[]) function.
- The function is called from rxvt_init_resource().
- In the function,
- to acquire the encoding which the user prefers,
- check nl_langinfo(CODESET) if available.
- otherwise check CODESET part of LC_CTYPE locale and look up
a table.
Note locale is expressed as language[_country][.codeset][@modifier]
- if it also fails (LC_CTYPE locale has no or invalid CODESET part),
check whole LC_CTYPE locale and look up a table.
(for example, de_DE -> ISO8859-1).
- Now, encoding is determined. Look up a table to determine
rs[Rs_font] and rs[Rs_mfont]. rxvt_vars.encoding_method and
rxvt_vars.h->multichar_decode are determined using
rxvt_set_multichar_encoding().
- Command line options and resources can override this setting.
The following is the patch against CVS 2001-03-17.
begin 644 rxvt-locale.diff.gz
M'XL(")0!M#H"`W)X=G0M;&]C86QE+F1I9F8`[5QY4^/(DO_;?(H:3\=K#)9M
M"1L,3/<V&#?M!FS"QRP3/1UZ0I:QL"PY='!,3^]GW\RJDE0Z?-#-;NR+MP38
M4F7E3UF965E7HK$YF1#)#;I$?_"J6N`[NF-/JIJ.7^9=94HL1]<L(X^T)4G2
M,K;"0//)E>82^8#4E*/&P5&M291:3=[:W=U=@5D8!#;C:Y+:X9&L',E[C._#
M!R+)2JV\3W;QZY!\^+!%JCODS)B8MD',"5E8FFD3QQH3S_#9(\C8,3S[K4\>
M'7=&=JI;Y-?`'AL3TNVI@_;PLM<ZN6QOD:W=!)!MJ99FWYGVQ,D`[,8`W4OU
M\J1[WNE^[&WMIF0)_/D"E#?5/.+Y;J#[M$24X-/)[VUU,.R/6D-U-+RZ!BG&
M^<8(=5.!UJ4U)]"RYA"(+[-'@C%A$$4^JNT+!MEO4(/`U[^=00+76&X11EQF
M$D9-V&3OJ"8?U0_7V23D3/<218Z-TMP_1*/@EURG5B'DI*6>M3]VNNUM4=&E
M+3(Q4=M`;IVT/K55^&M=;$\<5]1YF;A/#[ZJ/ZB3P-95D;*U^P5XA_T_U,M.
M]V+[RZ^FK5O!V""_A54JT_=?H1HA7\*2[5;OK`TRE(X981GXNV?#6_[H=[93
M^EK:V@7;^H;GDZ<WRVJ2=^3)=HZ)/S5L?%Y"%X+/`!AH`QPG1QMWAK_P4\*P
MLBV2TL"8^9QZWAVI@]ZHWP)__M6<""YV=MDY53^Q#E1KU,H'T(-JC29\H[$,
MRS/09&FC#?N=[OF`F4SJG7Z^[`R&[XJZ,Y]K]KCB$-,V??AZ`Z3S_LGUITYK
MP&\NVI>](;V^[)U#4\_)'#HFKWO5[HY.3_ID;GHZ%-F&/S:]!5QYNFL8-KMP
M+.M6<SG'H-7O75XB#[UC<I$G:*`66+[':]U<7Q6W=O\EY"2\:.+8(%F1.L!@
M=#H8;G/Q0>E@LK`M_S3T*>/%6_(W1+<Q>>M5_ZPXU8KE5._>_E.`B!E+J7CB
MN7KU2IN!NUAB)$D51S$D59Z-'HU:)GJD>3ZZ)N/9)\"P!VQ*'#<4&3T1/IO4
M#VF;!WVPSCL26D\G=ZZVF)JZ1R]GAN7X<$5-JL-#[Z##W<$5M1M\&7:`]M#)
MGUND0"VG1Y;30\OI@N6$:PD[&V65"G&A;3SYB5I/ON'.L<1WX=DH5VQAN%X`
M;6OW)P%`AMV"Z"0ZJH?KAG`YWVQS?8&W4'WN[9=A\K*[=X!?J-%"J"`08>$Z
M3$OA-5=5>(NZXM>APO@MJI)KCI?$ZDL7,!TF&44]9.HS983%7",1OU2(5<,+
M43_L$E2T@IKH8YP!=-CI#J_[/='%3)M6C_PLNF?.QF^IQ_'K/P7-\B*JV?":
M:S:\1<WRZU"S`A#7+"^)-9LN8)I-,HJ:S=1GF@V+N68C?E&SO!!UQRX3FLU0
M$YKE#*#9L_9U[)U3\N;;K09QRG2_1[,[,C$T'R<44^)ZYE^&A]6VVS?4(J$3
MRW4ZF9#I,(5.'(KN')'H)^XZ!!#PR:54$[?$N!MQBATMY$NWM$#(@P'R.3:L
M.&BSQ2=3%-I%V4^$(B@O$=TY;Z(S)SCSM1EZIR4\/`Z*,7?2BPOA[51L0^3:
M`[EMAIL PROTECTED]!<H\!EWLPQ!13ZHE>L)>XB2O<P>,>>/V4/@?X$E0JX762([@";9
MA6$O&:[%031!*0RG`?FLV83(.)6NU>"7R(<'M?0PFN1*3<#WCAKU>""ME6M@
MH;+2I&$?EC+2FI\=J26MK23MP.1UAWR$H?PH-1A!N?0J/^P1+6?Q[)IW4Y]L
MMTJT6<RD0V?N3$V(.!>CT][PA/PV"VX=7_LP-FY-#69@[MU[Y"_`CT0<0#!M
MS0J]!2D4?>ZX!O23\!$X0W?GF@]5R*-I6>36P(6C#G.JJ0'!Z=4:AVM%-`85
M8F#X/G2'T,<(*I+8VMSP"&Y&N&,D^@X)/,-]ZW$_(-N7L#(8_G'=+E&Q*&"T
MXBE6*E%H+18*L/KLMEOMP>"D_P=;IT8564A>74<T\+2XC,*Z11'EB)HVG)H>
M\;5;"[5L@_9]CTQ<9QXV@K42VF;`&L;2;@VK$ME&X(6+`">V4'%F.X_D$4+1
M%'D<JAM.IERPIH:U5:1+F,KBK1ZXK@%:114"WP,XC@UCL4]9(DURJ4IEXD$+
MX;$^0B._YT/DU-PQ>=2>*0^NPQ","N\M#-V</,<"W3X37,A50V"\.+F\I)P/
MFFMBHSRR;5:,2IFDGUXAX/2VA]*SDNV#TDJM/,):4EPB;^^5D&8[/M$>--/"
MRI079(8F3:#(BP&[CF]`&S5\FGT'ZDF89A[`<A9ZP:-K^CX\QM!<RS1<R@E,
M-O&FCNNGN:C60SG+P*]K("EE@M!OZ_,%EY'*C[KT#&-&+V*^V*WY)@EB*Y&.
M+<7X\A4F%=_0'^F*]FIT.>RT/IWT<5,!%]>$?"O>:^KGZXH1Z)^OB^5"N]M2
MVZ/6Y^_E)#VX-[T59"A;01U\[@PX&2\SY*DY\=65=8"2@SYSU(L^BG[1CY]^
MT4]72`B7(0O0(NVOJ=KJ"JSGIRE:R)<B#/^S<FK>-3C7:>>\D2*'?"'I5\.&
M@1+WOQ+FH99E;&,MY.D,>LUFXU"58\RQL8)HV"N($W,5T5U!I*ZPE.BO(%JK
MFF*MXK2M541G!7&Q"M9[6$'4,^U48N+4744,5A"S2E!6*4$@+JP51&\5T0W4
M_JART>LTI;"OX$T_70-85>25P(-%J$:J8OBH%$@P4T<G[#$CX3&C5`V1.Z9U
M1Y>7G'`VNKKZX_O6[O?CY&A)PSH,*'RL9$-E%/&6#);9(6$26%C-QKF,!8NI
M%`0;)^TQ\8+%`J(W'9*<P".N`4LP&VZMP&#/3HXJ:R*RO5E$AJ`C+0MY>+>$
M-&(1-(>R.L!2JK24*J`F*2CFTO!);Y?3I/SX"91\POFILB<K^92\4@RNZ4`;
M4:05I(^=W]NYL1ON."V?V/AT,6@-4JSK8WO4(_-Z4]2/\CH2[YF2S)^9$[_"
M*DJJBI*MLI>JLI>M4D]5J6>K-%)5&MDJ^ZDJ^]DJ!ZDJ!]DJS5259K;*8:K*
M88[J:FG=U7(J912<HV$YK6(Y1\=R6LERCI;EM)KE'#W+:47+24U+&WB&M(%K
M2!OXAK2!<T@;>(>T@7M(&_B'M(!MXB+21BT@;^8BTD9-(&WF)M)&;2!OY
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
H]95Z>M*Z.._W1MTS*(Z2KHKQ2^"*D4/L+GNC35CQOP$!8.8<F5@`````
`
end
---
Tomohiro KUBOTA <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
http://www.debian.or.jp/~kubota/
"Introduction to I18N"
http://www.debian.org/doc/manuals/intro-i18n/