Bug nalezen: isprint() + X11 programovani
Zdenek Kabelac
kabi na fi.muni.cz
Pondělí Září 7 16:41:51 CEST 1998
Michal Hucik wrote:
>
> Cejka Rudolf (cejkar na dcse.fee.vutbr.cz) wrote:
> > Michal Hucik (chaky na goliash.inext.cz) wrote:
>
> > : setlocale (LC_ALL, "C");
> > : status = real_source_write (project_name, directory);
> > : setlocale (LC_ALL, saved_locale)
Aniz bych chtel nejak vyrazne rusit vase kruhy, dovoluji si vas
upozornit, ze pokud se programuje aplikace, ktera ma bezet v prostredi
XWindows - pak existuje neco jako funkce XSetLocale
V podstate my ten kod mel vypadat asi nejak takto:
#include <X11/Xlocale.h>
....
/* Locale setting taken from XtSetLanguageProc */
if (!(s = setlocale(LC_ALL, "")))
fprintf(stderr, "I18N: Locale not supported by C library, "
"locale unchanged\n");
if (!XSupportsLocale()) {
fprintf(stderr, "I18N: Locale not supported by Xlib, "
"locale set to C\n");
s = setlocale(LC_ALL, "C");
}
if (!XSetLocaleModifiers(""))
fprintf(stderr, "I18N: X locale modifiers not supported, "
"using default\n");
if ((xim = XOpenIM(display, NULL, NULL, NULL)) == NULL) {
fprintf(stderr, "I18N: Failed to open input method\n");
return xic;
}
if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL)
|| (xim_styles == NULL)) {
fprintf(stderr, "I18N: Input method doesn't support any style\n");
XCloseIM(xim);
return xic;
}
if (strcmp(s, XLocaleOfIM(xim)))
fprintf(stderr, "I18N: System locale: %s differs from "
"IM locale: %s !!! System inconsistent\n",
s, XLocaleOfIM(xim));
je to kratky vysek z meho patche na editor XFTE
Ten kod ma samozrejme dalsi pokracovani s nastavovanim InputStyle apod.
Dovoluji si upozornit, ze pokud se nekdo naivne domniva, ze pouhym
setlocale
neco korektne nastavi v X-sech, pak se velice myli.
Zvlaste pak, chce-li pouzivat multibyte kodovani - je mozne ze v
distribucich
X-su kompilovanych bez flagu X_LOCALE muzu pro vstup iso-latin znaku
fungovat
i pouhe setlocale, ale vzadnem pripade nepojede japonstina aj.
Zatim jsem nezkoumal zdrojaky GTK aspol. ale pokud se tam nevyskutuje
nejaka alespon tato funkce:XtSetLanguageProc pak ta cestina tam
muze fungovat dosti divoce neumluve o mtvych klacesach atd. - mozna snad s
tou XLIB-force -
jenze to je podly hack a na nej neni vhodne se spolehat.
--
Zdenek Kabelac http://www.fi.muni.cz/~kabi/ kabi na fi.muni.cz
Další informace o konferenci Linux