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