Las ncurses son librerías que ayudan a la programación en modo texto para Linux. Es decir, movimientos de cursores, colores, entradas de teclado, sustituyen a conio.h de borland c en otros sistemas, en linux uconio intenta emularla. ncurses es un mayor estado del arte.
Se debe incluir en los programas asi : #include en los programas.
Se compila con: gcc -lncurses fichero.c
En debian debemos instalar el paquete libncurses5-dev con apt-get
#include
int main() {
initscr();
printw("Hola Mamon!!!");
refresh();
getch();
endwin();
return 0;
}
El popular “hola mundo”
initscr: es para entrar en modo ncursesprintw: es para imprimir en la “ventana”*. Es importante usar printw, scanfw, etc. y no usar printf, scanf, ya que tendríamos resultados no deseados.refresh: aquí es donde realmente se refresca la pantalla. Podemos hacer varios printw y al final un solo refresh para actualizar la pantalla. Si no hacemos el refresh quizás no saldrá impreso por pantalla.getch: espera una sola pulsación de una tecla. Nos devuelve el código ASCII de la tecla pulsada como un entero. Fijaros que no espera el “Enter” final de líneaendwin: terminamos el modo de ncurses. Si no lo hacemos, nos quedará el terminal medio desconfigurado. Para solucionarlo podríamos hacer reset desde la misma consola.
Para pedir cosas a un usuario con ncurses (entrada de teclado).
#include
int main () {
char cadena[128];
initscr();
printw("Dime tu nombre\n");
scanw("%s",cadena);
printw("Te llamas: %s\n",cadena);
refresh();
getch();
endwin();
return(0);
}
Limpiado de pantalla:
erase();
Posicion del cursor en lugar especifico de pantalla:
move (10,2);
printw("contraseña: ")
Igualmente podríamos haber usado:
mvprintw(10,2,"contraseña: ");
Un printw con colores:
if (has_colors()) {
start_color();
init_pair(1,COLOR_RED,COLOR_YELLOW);
attron(COLOR_PAIR(1));
printw("Escribe la contraseña: ");
attroff(COLOR_PAIR(1));
}
has_colors: devuelve 0 o 1 si el terminal tiene soporte para colores o no.start_color: inicia el modo de colores. Si no lo hacemos no veremos los colores.init_pair: asociamos el “par” 1 el color rojo para el texto y el amarillo para el fondo (los colores disponibles con BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE).attron: y ponemos los colores de forma activa. También podríamos hacer:
attron(COLOR_PAIR(1) | A_UNDERLINE);
Y así lo tendríamos subrallado. Tenemos disponibles A_NORMAL,A_BLINK, A_BOLD, etc. (man attron para ver más opciones)
Es más, si queremos se pueden personalizar los colores en sí mediante la función init_color (man init_color).
Mas informacion:
Escribir Programas con ncurses (en castellano)
En asterisk por ejemplo necesitamos de estas librerias para poder compilar, incluso las necesitamos si queremos compilar el kernel de linux.