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