VYRESENO: gvim a mrtve klavesy (delsi)

Radim Halir halir na utia.cas.cz
Středa Červenec 14 18:45:36 CEST 1999


Nedavno zde nekdo prosil o pomoc s gvimem, ktery (alespon ten
v distribuci RedHat) neumi pracovat s mrtvymi klavesami. Jelikoz
me osobne toto chovani take rozcilovalo, udelal jsem si cas
a trochu se na ten gvim kouknul...

Problem:
gvim neumi pracovat s mrtvymi klavesami (napr. pri pokusu o napsani
dlouheho e pomoci mrtve klavesy dostaneme 'e a podobne)

Jednoduche reseni:
pouzit vyvojovou verzi vim-5.4m (ci novejsi) a prelozit GTK-port gvimu
s volbou "--enable-xim". Mrtve klavesy funguji, akorat (diky GTK)
ztratime s kazdou instanci gvimu _dost_ pameti (viz dale).

Slozitejsi reseni: 
opet pouzit vyvojovou verzi (zkousel jsem vim-5.4o) a po drobnych
zasazich do zdrojaku prelozit Athena-port. Tim dostanete neco velmi
podobneho gvimu z distribuce, navic s podporou mrtvych klaves (coz
je pro cestinu docela vhodne :-) a kdyz si s tim trochu pohrajete,
tak i vyrazne mensi...

Popis problemu:
autori vimu (byt je Bram Moolenaar tez Evropan :-) povazuji veskere
jazyky, ktere vyzaduji XIM (coz je mj. prave potrebne pro mrtve klavesy
a kompozicni znaky v cestine) za tak obskurdni, ze jim automaticky nuti
volbu +xfontsel (souvisi s "alternativnimi" fonty napr. pro korejstinu
ci japonstinu). Cestina (se svym kodovanim ISO-8859-2) samozrejme nic
takoveho nepotrebuje. Takze je potreba vim taktne presvedcit, aby na
volbu fontsel zapomnel...

Kompletni postup je nasledujici:
1. v src/Makefile odkomentovat nasledujici volby:
   CONF_OPT_GUI = --enable-gui=athena (jinak se nejprve zkousi GTK)
   CONF_OPT_INPUT = --enable-xim (chceme pouzivat XIM)
   
2. v src/feature.h zakomentovat radek
   #define USE_FONTSET
   umisteny v nasledujicim bloku:
/*
 * +xfontset            X fontset support.  For outputting special languages.
 *                      Required for XIM.
 */
#ifndef USE_FONTSET
# ifdef USE_XIM
#  define USE_FONTSET         <--- toto je ten radek, ktery dela problemy
# else
/* #  define USE_FONTSET */
# endif
#endif

3. v src/multbyte.c ve funkci xim_real_init zakomentovat #else vetev
od "#ifdef USE_FONTSET", tj. dosahnout nasledujiciho stavu:
#ifdef USE_FONTSET
    if (!gui.fontset)
    {
        EMSG("XIM requires guifontset setting");
        return FALSE;
    }
#else
/*********        <--- nasledujici dva radky se nam nelibi, pryc s nimi :-)
   EMSG("XIM requires VIM compiled with +fontset feature.");
   return FALSE;
*********/                              ^^^^^^^^ ale nepotrebuje ;-)
#endif

4. make, make test, make install atd.

5. vyzkouset, jak to krasne funguje :-)


Otazkou zustava, proc nepouzivat primo GTK port, kde krome "--enable-xim"
neni pred prekladem potreba delat nic jineho? Odpovedi je pamet, resp.
pametove naroky jednotlivych portu vimu, ktere jsou nasledujici
(preklad s egcs -Os + strip na RH6.0/glibc-2.1):
noX    493911+22892+11660=528463 1132/ 892=2032 (terminalova verze bez GUI)
Athena 577213+27272+21032=625517 2500/1852=3824
GTK    650315+29456+15144=694915 3760/2824=5444

Prvni ctyri cisla jsou ziskana pomoci 'size' (text+data+bss=total),
dalsi tri znamenaji pametove naroky aplikace (v kB) ihned po jejim spusteni
(resident/share=total). Jak je videt, je jednak vhodne si prelozit i
terminalovou variantu vimu (bez X/GUI), jednak rozdil Athena/GTK je
az zarazejici. Nevim jak ostatnim, ale me tech vice nez 1600kB pameti
za to GTK nestoji. Beztak je rozdil pouze v "o neco lepsim" vzhledu
menu a filebrowseru...

Zdravim a pekne si to uzijte,
Radim

PS: Byl bych rad, kdyby se k teto uprave vyjadril nekdo povolanejsi
    (Stano Meduna?). Uz jsem si jednou nabehnul s rxvt, kde podobne
    upravy mely za nasledek funkcnost s cestinou, ale nefunkcnost
    s japonstinou a korejstinou ;-)
PPS: Neco jako bugreport jsem zatim neposilal. Osobne totiz nevim,
    jak se to s tim +xfontsel ma ve skutecnosti a tohle je spis 
    takovy "maly hnusny patch"...
    
-- 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#         Mgr. Radim Halir  (Hal\'{\i}\v{r} in TeX)           #
#       Institute of Information Theory and Automation        #
#      Czech Academy of Sciences, Prague, Czech Republic      #
# e-mail: halir na utia.cas.cz  http://sunsite.mff.cuni.cz/halir #
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Další informace o konferenci Linux