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.
Nota: Cuando se utilizan las subrutinas getch no se establece la modalidad NOCBREAK y la modalidad ECHO al mismo tiempo. Esto puede provocar resultados no deseados en función del estado del controlador tty cuando se escribe cada carácter.

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

  1. Para obtener un carácter y hacerlo eco en el stdscr, utilice:
    mvgetch();
  2. Para obtener un carácter y hacer eco de él en stdscr en las coordenadas y=20, x=30, utilice:
    mvgetch(20, 30);
  3. 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);