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