Las ncurses son unas librerías que ayudan a la programación en
modo texto para Linux. Es decir, movimientos de cursores, colores,
recoger teclas (sin tener que esperar el "Intro") y un largo etcétera.
Lo que hacia conio.h en otros sistemas. Introducción También hay gente que a veces tiene problemas con printf y scanf/fgets, debido a buffers intermedios de Linux. Con las ncurses ya no habrá este problema.
En el escrito en cuestión veremos como empezar a programar con ncurses de forma práctica. Muchos habíamos usado la librería En lugar de usar la librería uConio, podemos usar las ncurses. Estas pueden ser usadas desde una forma muy simple hasta para hacer auténticas maravillas. En este artículo veremos una introducción práctica para empezar a usarlas. Existe bastante documentación por Internet, pero suele ser demasiado profunda al acercarnos por primera vez a la programación usando esas librerías. Incluso, en muchas ocasiones no necesitamos muchas de las funcionalidades que nos ofrecen.
Para compilar programas que usen las ncurses en Ubuntu tendremos que instalar el paquete Programando con ncursesEl "Hola mundo" con ncursesProbaremos un programa así:#include <ncurses.h> 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.
Recordar una vez más de compilar con
(*)En ncurses podemos gestionar
ventanas, escribir en ellas de forma independiente, generar scrolls,
etc.. Para hacer una ventana usaríamos la función Entrada de tecladoPara pedir cosas a un usuario con ncurses haríamos:#include <ncurses.h>La sintaxis del scanw es la misma que la del scanf tradicional.
Si no quisiéramos que lo que escribe el usuario saliera por pantalla (sin echo): printw("Escribe la contraseña: ");
Fácil, ¿no?
"Limpiar" la pantallaPara "limpiar" la pantalla podemos hacer, sencillamente:erase(); Moviendonos por la pantallaSi nos queremos posicionar en un sitio de la pantalla usaremos la funciónmove:
move (10,2);¡Ojo! que es move(int y, int x); (fila, columna). Los que habíamos usado la conio.h era gotoxy(int x, int y) (va al revés).
Igualmente podríamos haber usado: mvprintw(10,2,"Escribe la contraseña: "); Poniendo colores en la pantallaSi quisiéramos hacer unprintw con colores:
if (has_colors()) {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 Enlaces
Queda mucho para hacer con esas librerías. Por ejemplo toda la gestión
de ventanas, crearlas, modificarlas, imprimir dentro; menús, submenús;
usar el mouse, etc.
Comentar que hay un port para Perl de las ncurses (paquete |