eagle87
Anmeldungsdatum: 29. Dezember 2010
Beiträge: 85
|
Hallo zusammen, ich hab gerade ein Problem mit Umlauten und dem scharfen S bei NCurses. Durch die Umlaute wird die blaue Einfärbung des NCurses-Window am Zeilenende Eingerückt. Außerdem ist der Curser an der falschen Position. Das scharfe S wird nicht richtig angezeigt. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #include <ncurses.h>
#include <locale.h>
WINDOW *win;
int main(void)
{
initscr();
win = newwin(LINES-2, COLS-2, 1, 1);
setlocale(LC_ALL, "de_DE");
start_color();
init_pair(1, COLOR_RED, COLOR_BLUE);
wbkgd(win, COLOR_PAIR(1));
mvwaddstr(win, 1, 1, "#äöüß#");
refresh();
wrefresh(win);
while(getch()!='q');
delwin(win);
endwin();
return 0;
}
|
Was muss verändert werden, dass diese Fehler nicht mehr auftreten? Viele Grüße Michael
- Bilder
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6507
Wohnort: Hamburg
|
Ich hatte vor Jahren mal versucht, mich in NCurses einzuarbeiten. Ich meine mich dunkel zu erinnern, das es dort auch spezielle Funktionen für wide-strings und multibyte-strings gibt (erkennbar am 'w' bzw. 'mb' im namen). Schau doch mal, ob Du so etwas findest.
|
eagle87
(Themenstarter)
Anmeldungsdatum: 29. Dezember 2010
Beiträge: 85
|
Zu multibyte-strings unter NCurses habe ich nichts gefunden, aber die Funktionen zu den wide-strings sind im Packet libncursesw5-dev enthalten. Mit diesen Funktionen gehts. Danke für den Tipp. Um die wide-string Funktionen zu nutzen muss dem Linker die Option -lncursesw anstatt -lncurses übergeben werden. Außerdem ist das in der man-page zu den wide-string Funktionen angegebene Include falsch. Hier muss <ncursesw/curses.h> angegeben werden. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 | #include <stdlib.h>
#include <string.h>
#include <ncursesw/curses.h>
#include <locale.h>
WINDOW *win;
int main(void)
{
setlocale(LC_ALL, "");
char s[] = "#äöüß#";
size_t n = strlen(s)+1;
wchar_t *ws = new wchar_t[n];
mbstowcs(ws, s, n);
initscr();
win = newwin(LINES-2, COLS-2, 1, 1);
start_color();
init_pair(1, COLOR_RED, COLOR_BLUE);
wbkgd(win, COLOR_PAIR(1));
mvwaddwstr(win, 1, 1, ws);
refresh();
wrefresh(win);
while(getch()!='q');
delete ws;
delwin(win);
endwin();
return 0;
}
|
|