Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ncursesw: getn_wstr() ja ääkköset

lauximus [20.07.2008 22:56:50]

#

Osaako kukaan kertoa että tukeeko ncurses(w):n getn_wstr-funktio skandinaavisia merkkejä?

Alla pieni esimerkki:

#include <ncursesw/ncurses.h>
#include <wchar.h>

int main(int argc, char **argv)
{
    wchar_t str[20];

    initscr();
    getn_wstr(&str[0], 10);
    endwin();

    return 0;
}

Käännän tämän seuraavasti:

gcc test.c -o test -lncursesw

Funktio getn_wstr tuntuu toimivan erinomaisesti muille kuin skandinaavisille merkeille. Jos erehtyy painamaan vaikkapa ö-kirjainta, näytölle ei tulostu mitään. Kaiken kukkuraksi tämän jälkeen näytölle ei tulostu enää mitään muitakaan merkkejä.

Sama ongelma tuntuu esiintyvän sekä Gnomen Terminal-ikkunassa että normaalissa framebuffer-konsolissa. Ympäristö on 64-bittinen Ubuntu 8.04 (kieli on asetettu englanniksi ja näppäinasettelu suomalaiseksi).

Kray [22.07.2008 09:32:42]

#

Mikäs on terminaalin merkistökoodaus?

lauximus [22.07.2008 22:29:42]

#

Kiitoksia mielenkiinnosta, merkistö on UTF-8.

Tämä ongelma näytti ratkeavan sijoittamalla oheinen kutsu ennen initscr():ää:

setlocale(LC_ALL, "");

Siltikin aika mielenkiintoinen ominaisuus tuo jumiutuminen, joka siis tapahtuu ilman tuota setlocale()-kutsua. En myöskään päässyt täyteen varmuuteen siitä, miksi tuo setlocale()-kutsu on välttämätön.

Tuohon getn_wstr()-funktioon liittyy toinenkin mielenkiintoinen asia. Sillehän annetaan parametrina luettavien merkkien maksimimäärä. Esimerkiksi ctrl+d tuntuu olevan ihan sallittu yksittäinen merkki, joka kuitenkin esitetään näytöllä merkkiyhdistelmänä ^D. Nyt jos haluaa että luettavien merkkien maksimimäärä tarkoittaa myös näytöllä samaa määrää merkkejä, joutuu tuosta funktiosta todennäköisesti toteuttamaan oman versionsa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta