Je dois dessiner une boîte en C, en utilisant ncurses;
Premièrement, j’ai défini quelques valeurs pour la simplicité:
#define RB "\e(0\x6a\e(B" (ASCII 188,Right bottom, for example)
J’ai compilé avec gcc, sur Ubuntu, avec l’ -finput-charset=UTF-8
.
Mais si j’essaie d’imprimer avec addstr ou printw, j’obtiens le code hexa. Qu’est-ce que je fais mal?
ncurses
définit les valeurs ACS_HLINE
, ACS_VLINE
, ACS_ULCORNER
, ACS_URCORNER
, ACS_LLCORNER
et ACS_LRCORNER
. Vous pouvez utiliser ces constantes dans addch
et ses amis, ce qui devrait vous permettre de voir les caractères de boîte attendus. (Il y a beaucoup plus de caractères ACS; vous trouverez une liste complète dans man addch
.)
ncurses
besoin de savoir ce qu’il dessine car il a besoin de savoir exactement où se trouve le curseur tout le temps. Produire des séquences de contrôle de la console n’est pas une bonne idée; si ncurses sait comment gérer la séquence, il a sa propre abstraction pour la fonctionnalité et vous devez utiliser cette abstraction. L’ACS (“jeu de caractères alternatif”) définit l’une de ces abstractions.
Quelques problèmes:
"\e(0\x6a\e(B"
utilisant addstr , alors ncurses ( toute implémentation de curses) traduira les caractères individuels en forme imprimable comme décrit dans la page de manuel addch . ACS_HLINE
) qui sont des caractères prédéfinis avec l’atsortingbut A_ALTCHARSET
combiné. Vous pouvez en savoir plus sur ceux-ci dans la section Line Graphics de la page de manuel addch
. 0x6a
est ASCII j
, qui (étant donné un mappage de style VT100) serait le coin inférieur gauche. Le symbole des curses pour cela est ACS_LRCORNER
. addstr
; au lieu de cela addch
, addchstr
sont utiles. Il existe également des fonctions orientées dessin au trait (voir box
et amis). fonctionnant sous Ubuntu, votre codage de parameters régionaux est probablement UTF-8. Pour que votre programme fonctionne correctement, vous devez initialiser les parameters régionaux, comme indiqué dans la section Initialisation de la page de manuel ncurses. En particulier:
setlocale (LC_ALL, “”);
En outre, votre programme doit établir un lien avec la bibliothèque ncurses w ( -lncursesw
) pour utiliser UTF-8, plutôt que simplement ncurses ( -lncurses
).
_GNU_SOURCE
.