getch, mvgetch, mvwgetch o wgetch Subroutine
Finalidad
Obtiene un carácter de un solo byte del terminal.
Biblioteca
Biblioteca de curses (libcurses.a)
Sintaxis
#include <curses.h>
int getch(void)
int mvgetch(int y,
int x);
int mvwgetch(WINDOW *win,
int y,
int x);
int wgetch(WINDOW *win); Descripción
Las subrutinas getch, wgetch, mvgetchy mvwgetch leen un carácter de un solo byte del terminal asociado con la ventana actual o especificada. Los resultados no se especifican si la entrada no es un carácter de un solo byte. Si la subrutina teclado está habilitada, estas subrutinas responden al valor KEY_ correspondiente definido en <curses.h>.
El proceso de entrada de terminal está sujeto a las reglas generales descritas en la sección 3.5 de la página 34.
Si el eco está habilitado, el carácter se repite como si se hubiera proporcionado como argumento de entrada a la subrutina addch , excepto para los caracteres siguientes:
<backspace>, <left-arrow> and the current erase character:La entrada se interpreta como se especifica en la sección 3.4.3 en la página 31 y, a continuación, el carácter en la posición del cursor resultante se suprime como si se llamara a la subrutina delch , excepto que si el cursor estaba originalmente en la primera columna de la línea, se avisa al usuario como si se llamara a la subrutina beep .
Se alerta al usuario como si se llamara a la subrutina beep . La información relativa a las teclas de función no se devuelve al interlocutor.
Teclas de función
Si la ventana actual o especificada no es un relleno, y se ha movido o modificado desde la última operación de renovación, se renovará antes de que se lea otro carácter.
Importancia de las modalidades de terminal
La salida de las subrutinas getch está, en parte, determinada por la modalidad del terminal. A continuación se describe la acción de las subrutinas getch en cada tipo de modalidad de terminal:
| Modo | Acción de las subrutinas getch |
|---|---|
| NODELAY | Devuelve un valor de ERR si no hay ninguna entrada en espera. |
| DELAY | Detiene la ejecución hasta que el sistema pasa texto a través del programa. Si también se establece la modalidad CBREAK, el programa se detiene después de recibir un carácter. Si se establece la modalidad NOCBREAK , la subrutina getch deja de leer después del primer carácter de línea nuevo. |
| RETARDO MEDIO | Detiene la ejecución hasta que se escribe un carácter o se alcanza un tiempo de espera especificado. Si se establece echo , el carácter también se repite en la ventana. |
Cómo obtener teclas de función
Si el programa habilita el teclado con la subrutina teclado y el usuario pulsa una tecla de función, se devuelve la señal para dicha tecla de función en lugar de caracteres sin formato. Las claves de función posibles se definen en el archivo /usr/include/curses.h . Cada macro #define empieza con un prefijo KEY_ .
Si se recibe un carácter que podría ser el principio de una tecla de función (como un carácter de escape), las maldiciones establecen un temporizador. Si el resto de la secuencia no se recibe antes de que caduque el temporizador, se pasa el carácter. De lo contrario, se devuelve el valor de la tecla de función. Por esta razón, después de que un usuario pulse la tecla Esc, se produce un retardo antes de que se devuelva el escape al programa. Los programadores no deben utilizar la tecla Esc para una rutina de un solo carácter.
Dentro de la subrutina getch , una estructura de tipo timeval, definida en el archivo /usr/include/sys/time.h , indica el número máximo de microsegundos que se debe esperar a que se complete la respuesta de clave.
La variable de entorno ESCDELAY establece el periodo de tiempo que se debe esperar antes de exceder el tiempo de espera y tratar la pulsación ESC como el carácter ESC en lugar de combinarla con otros caracteres del almacenamiento intermedio para crear una secuencia de teclas. La variable de entorno ESCDELAY se mide en quintas partes de un milisegundo. Si ESCDELAY es 0, el sistema compone inmediatamente la respuesta ESCAPE sin esperar a obtener más información del almacenamiento intermedio. El usuario puede elegir cualquier valor entre 0 y 99.999, ambos inclusive. El valor predeterminado para la variable de entorno ESCDELAY es 500 (una décima parte de un segundo).
Los programas que no desean que las subrutinas getch establezcan un temporizador pueden llamar a la subrutina notimeout . Si notimeout se establece en TRUE, las curses no distinguen entre teclas de función y caracteres al recuperar datos.
Es posible que las subrutinas getch no puedan devolver todas las teclas de función porque no están definidas en la base de datos terminfo o porque el terminal no transmite un código exclusivo cuando se pulsa la tecla. Las subrutinas getch pueden devolver las siguientes teclas de función:
| Elemento | Descripción |
|---|---|
| KEY_MIN | Clave de maldiciones mínima. |
| KEY_BREAK | Clave de interrupción (no fiable). |
| ABAJO | Tecla de flecha abajo. |
| ARRIBA | Tecla de flecha arriba. |
| KEY_LEFT | Tecla de flecha izquierda. |
| CLAVE_DERECHA | Tecla de flecha derecha. |
| INICIO_CLAVE | Clave de inicio. |
| KEY_BACKSPACE | Retroceso. |
| KEY_F (n) | Tecla de función Fn, donde n es un entero de 0 a 64. |
| KEY_DL | Suprimir línea. |
| ID_CLAVE | Insertar línea. |
| KEY_DC | Suprimir carácter. |
| KEY_IC | Inserte el carácter o entre en la modalidad de inserción. |
| KEY_EIC | Salir de la modalidad de inserción de caracteres. |
| BORRA_CLAVE | Borrar pantalla. |
| KEY_EOS | Borrar al final de la pantalla. |
| KEY_EOL | Borrar al final de la línea. |
| KEY_SF | Desplácese 1 línea hacia adelante. |
| KEY_SR | Desplácese 1 línea hacia atrás (inverso). |
| PÁGINA CLAVE | Página siguiente. |
| PÁGINA CLAVE | Página anterior. |
| ESTADO_CLAVE | Establecer pestaña. |
| KEY_CTAB | Borrar pestaña. |
| KEY_CATAB | Borrar todas las pestañas. |
| ENTE_CLAVE | Especifique o envíe (no fiable). |
| KEY_SRESET | Restablecimiento suave (parcial) (no fiable). |
| RESTE_KEY | Restablecimiento o restablecimiento completo (no fiable). |
| IMPRIMIR CLAVE | Imprimir o copiar. |
| CLAVE_CLAVE | Inicio abajo o abajo (inferior izquierda). |
| KEY_A1 | Tecla superior izquierda del teclado. |
| KEY_A3 | Tecla superior derecha del teclado. |
| KEY_B2 | Tecla central del teclado. |
| KEY_C1 | Tecla inferior izquierda del teclado. |
| KEY_C3 | Tecla inferior derecha del teclado. |
| KEY_BTAB | Tecla de tabulador de retroceso. |
| KEY_BEG | clave beg (inning) |
| CANCELACIÓN_CLAVE | clave de cancelación |
| CLAVE_CLAVE | clave de cierre |
| MANDATO de clave | Tecla cmd (mandato) |
| COPIA_CLAVE | copiar clave |
| CREAR_KEY | Crear clave |
| KEY_END | clave de finalización |
| KEY_EXIT | clave de salida |
| FIN_CLAVE | clave de búsqueda |
| AYUDA_CLAVE | Tecla Ayuda |
| Elemento | Descripción |
|---|---|
| CAMPOS_CLAVE | marcar clave |
| MENSAJE_CLAVE | Clave de mensaje |
| MODALIDAD DE CLAVE | mover tecla |
| CLAVE_SIGUIENTE | siguiente clave de objeto |
| KEY_OPEN | abrir clave |
| OPCIONES CLAVE | clave de opciones |
| KEY_ANTERIOR | clave de objeto anterior |
| KEY_REDO | clave de rehacer |
| REFERENCIA_CLAVE | clave ref (erence) |
| KEY_REFRESH | clave de renovación |
| SUSTITUCIÓN_CLAVE | sustituir clave |
| REINICIO_CLAVE | clave de reinicio |
| CURRÍCULA_CLAVE | Clave de reanudación |
| GUARA_CLAVE | guardar clave |
| KEY_SBEG | clave de inicio desplazada |
| CLAVE_SCANCEL | clave de cancelación desplazada |
| KEY_SCOMMAND | tecla de mandato desplazada |
| KEY_SCOPY | clave de copia desplazada |
| KEY_SCREATE | clave de creación desplazada |
| KEY_SDC | clave de carácter de supresión desplazada |
| KEY_SDL | clave de línea de supresión desplazada |
| KEY_SELECT | seleccionar clave |
| ENVIAR | clave de finalización desplazada |
| SE_CLAVE | clave de línea de borrado desplazado |
| KEY_SEXIT | clave de salida desplazada |
| FINAL_CLAVE | clave de búsqueda desplazada |
| KEY_SHELP | clave de ayuda desplazada |
| KEY_SHOME | clave de inicio desplazada |
| KEY_SIC | clave de entrada desplazada |
| KEY_SLEFT | tecla de flecha izquierda desplazada |
| MENSAJE_CLAVE | clave de mensaje desplazado |
| KEY_SMOVE | tecla de movimiento desplazada |
| KEY_SNEXT | clave siguiente desplazada |
| CLAVE_ACCIONES | clave de opciones desplazadas |
| KEY_SPREVIOUS | clave anterior desplazada |
| KEY_SPRINT | tecla de impresión desplazada |
| KEY_SREDO | tecla de rehacer desplazada |
| KEY_SREPLACE | clave de sustitución desplazada |
| KEY_SRIGHT | flecha derecha desplazada |
| KEY_SRSUME | clave de reanudación desplazada |
| KEY_SSAVE | clave de guardado desplazada |
| KEY_SSUSPEND | clave de suspensión desplazada |
| KEY_SUNDO | tecla de deshacer desplazada |
| KEY_SUSPEND | clave de suspensión |
| ID_CLAVE | deshacer clave |
Parámetros
| Elemento | Descripción |
|---|---|
| Columna | Especifica la posición horizontal a la que mover el cursor lógico antes de obtener el carácter. |
| Línea | Especifica la posición vertical a la que mover el cursor lógico antes de obtener el carácter. |
| Ventana | Identifica la ventana de la que se obtiene el carácter y en la que se hace eco. |
Valores de retorno
Tras una finalización satisfactoria, las subrutinas getch, mvwgetch y wgetch , CURSES y Curses Interface devuelven el carácter de un solo byte, KEY_ value o ERR. Cuando está en modalidad de no retardo y no hay datos disponibles, se devuelve ERR.
Ejemplos
- Para obtener un carácter y hacerlo eco en el stdscr, utilice:
mvgetch(); - Para obtener un carácter y hacer eco de él en stdscr en las coordenadas y=20, x=30, utilice:
mvgetch(20, 30); - Para obtener un carácter y hacerlo eco en la ventana definida por el usuariomy_windowen las coordenadas y=20, x=30, utilice:
WINDOW *my_window; mvwgetch(my_window, 20, 30);