xlib-forcedIM-0.01 na ftp.fi.muni.cz
Jan Kasprzak
kas na informatics.muni.cz
Pondělí Srpen 11 14:32:27 CEST 1997
Do ftp.fi.muni.cz v adresare /pub/localization/linux/cs-tools/testing
jsem zkopiroval soubor xlib-forcedIM-0.01.tar.gz, ktery mi za timto ucelem
poslal Stano Meduna. Pokusim se z tohoto baliku udelat nejake rozumne
RPMko.
Zde je README tak, jak je v puvodnim baliku (prevedeno do ASCII):
----------------------------------------------------------------------------
Lokalizacny patch pre XFree 3.3
===============================
Verzia 0.01
Problem
=======
Ceska a slovenska a slovenska klavesnica sa nezaobide bez mrtvych klaves.
Riesenie tejto problematiky bolo az do verzie X11R5 zalezitostou X serveru.
Vysledkom bolo, ze bud bol vstup znakov prostrednictvom mrtvych klaves
pre aplikaciu transparentny, alebo ho server neumoznoval vobec.
S prichodom X11R6 sa situacia zmenila. Prisiel standart v podobe XKB
extension a vstupnych metod, ale aplikacia musi lokalizaciu explicitne
podporovat. Nie je to zlozite, ale malokto to robi.
Pokial ide o XFree86, este do verzie 3.2 este ako-tak koexistovali
obe metody. Verzia 3.3 zial znamenala koniec podpory mrtvych klaves
nestandartnymi metodami (ci je to bug alebo feature, netusim).
Vstupne metody
==============
Aplikacia musi pre uspesne pouzitie vstupnych metod urobit zhruba
nasledovne:
- nainicializovat svoje locale (setlocale, XSetLocaleModifiers)
- otvorit vstupnu metodu (XOpenIM)
- spytat sa vstupnej metody, ake modely vstupu podporuje (XGetIMValues)
- overit si, ci je medzi nimi aj metoda podporujuca compose model
(XIMPreeditNothing | XIMStatusNoting)
- vytvorit vstupny kontext a oznamit mu, ktore okno obsluhuje a ktory
model ma pouzit (XCreateIC)
- zabezpecit, aby sa vstupny kontext dozvedel o udalostiach, ktore
potrebuje (XFilterEvent)
- a konecne namiesto povodneho XLookupString volat pre prevod keysym-u
na retazec v danom kodovani XmbLookupString
Patch
=====
Vacsina aplikacii zial tento postup s prehladom ignoruje. Kedze
zdrojovy kod nemusi byt vzdy dostupny a nie kazdy ma zaujem stravit
mladost nad upravami existujuceho software, spomenul som si na stare
"Ked nejde hora k Mohamedovi, musi ist Mohamed k hore" a upravil som
Xlib priblizne nasledovne:
- interna struktura popisujuca X Display obsahuje navyse informaciu
o pouzitej vstupnej metode a kontexte
- od startu aplikacie az po prvu spracovanu KeyPress udalost sa
caka, do akej miery sa klient o input metody a kontexty staral
- pokial aplikacia nevytvorila ziadny vstupny kontext, pripadne
ho vytvorila iny, ako pozadujeme, vytvori sa a ako identifikacia
okna sa pouzije "None"
- takemuto filtru sa poslu vsetky udalosti, ktore by sa inak poslali
filtru s korektne specifikovanym oknom
- na vsetky udalosti sa explicitne zavola aj XFilterEvent
- pokial aplikacia zavola XLookupString, zavola sa miesto neho
XmbLookupString a navratove hodnoty sa patricne upravia
Instalacia a pouzitie
=====================
- nainstalujte si XKB podporu klavesnice, dostupnu (aspon
ked som ju downloadoval ja) na:
ftp://ftp.fi.muni.cz/pub/localization/linux/cs-tools/
testing/XKB-cz-X11R6.3.tar.gz
- opustite X window
- nakopirujte libX11.so.6.99 do adresara /usr/X11R6/lib
- spustite ldconfig -v
- v .login,.cshrc a.p. nastavte environment premenne
setenv LC_CTYPE sk (resp. cz)
setenv XLIB_FORCE_I18N
- a mozete skusat
Kompatibilita
=============
Ide o znacne surovu zaplatu, ktora predpoklada urcite typicke
spravanie sa aplikacie a je velmi pravdepodobne, ze so vselicim
nebude fungovat.
Pokial ide o aplikaciu, o ktorej sa da predpokladat, ze sa
ohladne lokalizacie snazi nieco robit, skuste patch vyradit
z cinnosti (unsetenv XLIB_FORCE_I18N, resp. setenv XLIB_FORCE_I18N 0).
Existuje este moznost mierne zmensit "agresivitu" patchu nastavenim
XLIB_FORCE_I18N na 1 (pokial hodnota nie je zadana, default je 2).
Je mozne, ze pokial hned prvy napisany znak obsahuje diakritiku,
bude ignorovany - vyplyva to z principu prace patchu, ktory az
do prvej klavesovej udalosti caka, ci aplikacia nahodou nemieni
nieco s lokalizaciou robit vo vlastnej rezii.
Pri mojich testoch fungovali: rxvt, xterm, color-xterm, nxterm,
xvile, xfinans, gimp, staroffice, rozne standartne widgety v Xaw,
Xaw3d a Motif aplikaciach a.p.
Zaujimavo sa sprava netscape - diakritiku zacne akceptovat az
po prvom vybere z menu. Cim to je, je pre mna zahadou - pravdepodobne
existuje este nejaka moznost spracovania udalosti, ktora ma nenapadla.
Nefunguju: Wingz a tgif - XLookupString znak korektne vrati, ale
aplikacia ho z neznameho dovodu ignoruje. Dalej nefunguje lyx (ktory
ma ale vlastne mapovanie). Obavam sa ale, ze s XForms aplikaciami
budu problemy. Samozrejme nebudu fungovat ani aplikacie, ktore
maju Xlib linkovanu staticky.
Zaverecne poznamky
==================
Tento patch je (C) Stanislav Meduna 1997. Pouzite ho ako chcete
a na co chcete s jedinou vynimkou - nezarabajte jeho distribuciou
peniaze. Samozrejme je nutne dodrzat podmienky copyrightov tvorcov
X11 a XFree86.
Za nasledky pouzitia nepreberam ZIADNU zaruku.
Nemam cas na poskytovanie akejkolvek podpory; napriek tomu vsak
budem rad, ak mi uspechy (a hlavne neuspechy) oznamite na nizsie
uvedenu adresu. V bug-reporte prosim uvedte presnu verziu programu,
ako aj dynamicky linkovanych kniznic. Pokial sa vam chce, nadefinujte
premennu XLIB_FORCE_I18N_DEBUG na hodnotu 2 a poslite mi vystup
s popisom, po ktorej akcii nasledovali konkretne riadky vypisu.
Bratislava, 9. 8. 1997
Stanislav Meduna
stano na eunet.sk
-----------------------------------------------------------------
-Yenya
--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz> http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz 0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\ Czech Linux Homepage: http://www.fi.muni.cz/~kas/linux/ ///
/// die_if_kernel("Penguin instruction from Penguin mode??!?!", regs); \\\
// -- from linux/arch/sparc64/kernel/traps.c \\
Další informace o konferenci Linux