"curses" --- Manejo de terminales para pantallas de celdas de caracteres
************************************************************************

======================================================================

El módulo "curses" provee una interfaz para la librería *curses*, el
estándar para el manejo avanzado de terminales portátiles.

Mientras que curses es más ampliamente usado en los ambientes Unix,
las versiones están disponibles para Windows, DOS, y posiblemente para
otros sistemas también. Esta extensión del módulo es diseñada para
coincidir con el API de ncurses, una librería de código abierto
almacenada en Linux y las variantes BSD de Unix.

Nota:

  Cuando la documentación menciona un *carácter*, esto puede ser
  especificado como un entero, una cadena Unicode de un carácter o una
  cadena de bytes de un byte.Cuando la documentación menciona una
  *cadena de caracteres*, esto puede ser especificado como una cadena
  Unicode o una cadena de bytes.

Nota:

  Desde la versión 5.4, la librería *ncurses* decide cómo interpretar
  los datos no ASCII usando la función "nl_langinfo".  Eso significa
  que tú tienes que llamar a "locate.setlocate()" en la aplicación y
  codificar las cadenas Unicode usando una de las codificaciones
  disponibles del sistema.  Este ejemplo usa la codificación del
  sistema por defecto:

     import locale
     locale.setlocale(locale.LC_ALL, '')
     code = locale.getpreferredencoding()

  Entonces usa *code* como la codificación para las llamadas
  "str.encode()".

Ver también:

  Módulo "curses.ascii"
     Utilidades para trabajar con caracteres ASCII, independientemente
     de tu configuración local.

  Módulo "curses.panel"
     Una extensión de la pila de paneles que añade profundidad a las
     ventanas de curses.

  Módulo "curses.textpad"
     Widget de texto editable para apoyar curses  **Emacs**- como
     enlaces.

  Programación de Curses con Python
     Material del tutorial usando curses con Python, por *Andrew
     Kuchling* y *Eric Raymond*.

  El directorio Tools/demo/ en el recurso de distribución de Python
  contiene algunos programas de ejemplo usando los enlaces de curses
  previstos en este módulo.


Funciones
=========

El módulo "curses" define la siguiente excepción:

exception curses.error

   Una excepción se lanza cuando una función de la librería curses
   retorna un error.

Nota:

  Cuando los argumentos *x* o *y* para una función o un método son
  opcionales, se predetermina la ubicación actual del cursor.  Cuando
  *attr* es opcional, por defecto es "A_NORMAL".

El módulo "curses" define las siguientes funciones:

curses.baudrate()

   Retorna la velocidad de salida de la terminal en bits por segundo.
   En emuladores de terminal de software esto tendrá un alto valor
   fijado. Incluido por razones históricas; en tiempos pasados, esto
   fue usado para escribir los ciclos de salida por retrasos de tiempo
   y ocasionalmente para cambiar interfaces dependiendo de la
   velocidad en la línea.

curses.beep()

   Emite un corto sonido de atención.

curses.can_change_color()

   Retorna "True" o "False", dependiendo ya sea que el programador
   puede cambiar los colores presentados por la terminal.

curses.cbreak()

   Entra al modo *cbreak*.  En el modo *cbreak* (a veces llamado modo
   "raro") del buffer de línea *tty* normal es apagado y los
   caracteres están disponibles para ser leídos uno por uno.  Sin
   embargo, a diferencia del modo raw, los caracteres especiales
   (interrumpir, salir, suspender y control de flujo) retiene sus
   efectos en el manejador *tty* y el programa de llamada.  Llamando
   primero "raw()" luego "cbreak()" dejando la terminal en modo
   *cbreak*.

curses.color_content(color_number)

   Retorna la intensidad de los componentes rojo, verde y azul (RGB)
   en el color *color_number*, que debe estar entre "0" y "COLORS-1".
   Retorna una tupla de 3, que contiene los valores R,G,B para el
   color dado, que estará entre "0" (sin componente) y "1000"
   (cantidad máxima de componente).

curses.color_pair(pair_number)

   Retorna el valor del atributo para mostrar texto en el par de
   colores especificado. Solo se admiten los primeros 256 pares de
   colores. Este valor de atributo se puede combinar con "A_STANDOUT",
   "A_REVERSE", y los otros atributos "A_*". "pair_number()" es la
   contraparte de esta función.

curses.curs_set(visibility)

   Configura el estado del cursor. *visibilidad* puede estar
   configurado para "0", "1" o "2", para invisible, normal o muy
   visible.  Si la terminal soporta la visibilidad requerida, retorna
   el estado del cursor previo; de otra manera ejecuta una excepción.
   En muchos terminales, el modo "visible" es un cursor subrayado y el
   modo "muy visible" es un cursor de bloque.

curses.def_prog_mode()

   Guardar el modo del terminal actual como el modo "program", el modo
   cuando el programa corriendo está usando curses. (Su contraparte es
   el modo "shell", para cuando el programa no está en curses.)
   Seguido de la llamada a "reset_prog_mode()" restaurará este modo.

curses.def_shell_mode()

   Guarde el modo de terminal actual como el modo "shell", el modo en
   el que el programa en ejecución no utiliza curses. (Su contraparte
   es el modo "program", cuando el programa está usando las
   capacidades de curses.)  Las llamadas subsecuentes a
   "reset_shell_mode()" restaurarán este modo.

curses.delay_output(ms)

   Inserte una pausa en milisegundo *ms* en la salida.

curses.doupdate()

   Actualiza la pantalla física. La librería curses mantiene dos
   estructuras de datos, uno representa el contenido de la pantalla
   física actual y una pantalla virtual representa el próximo estado
   deseado.  La base "doupdate()" actualiza la pantalla física para
   comparar la pantalla virtual.

   La pantalla virtual puede ser actualizada por una llamada
   "noutrefresh()" después de escribir las operaciones tales como
   "addstr()" ha sido ejecutada en una ventana. La llamada normal
   "refresh()" es simplemente "noutrefresh()" seguido por
   "doupdate()"; si tienes para actualizar múltiples ventanas, puedes
   aumentar el rendimiento y quizás reducir los parpadeos de la
   pantalla usando la llamada "noutrefresh()" en todas las ventanas,
   seguido por un simple "doupdate()".

curses.echo()

   Entrar en modo echo.  En modo echo, cada caracter de entrada es
   repercutido a la pantalla como este es introducido.

curses.endwin()

   Desinicializa la librería y retorne el terminal al estado normal.

curses.erasechar()

   Retorne el carácter borrado del usuario actual como un objeto de
   bytes de un byte. Bajo el sistema de operaciones Unix esta es una
   propiedad de el controlador tty de el programa curses, y no es
   configurado por la librería curses en sí misma.

curses.filter()

   La rutina "filter()", si es usada, debe ser llamada antes que
   "initscr()" sea llamada.  El efecto es que durante estas llamadas,
   "LINES" es configurada para "1"; las capacidades "clear", "cup",
   "cud", "cud1", "cuu1", "cuu", "vpa" son desactivadas; y la cadena
   "home" es configurada para el valor de "cr".  El efecto es que el
   cursor es confinado para la línea actual, y también las pantallas
   son actualizadas.  Este puede ser usado para habilitar la línea
   editando el carácter en un tiempo sin tocar el resto de las
   pantallas.

curses.flash()

   La pantalla Flash. Eso es, cambiar lo a video inverso y luego
   cambie lo de nuevo en un corto intervalo.  Algunas personas
   prefieren como 'campana visible' para la señal de atención audible
   producida por "beep()".

curses.flushinp()

   Vacíe todos los búferes de entrada.  Esto desecha cualquier
   mecanografiado que ha sido escrito por el usuario y no ha sido aún
   procesado por el programa.

curses.getmouse()

   Después de "getch()" retorna "KEY_MOUSE" para señalar un evento de
   mouse, se debe llamar a este método para recuperar el evento de
   mouse en cola, representado como una tupla de 5 "(id, x, y, z,
   bstate)". *id* es un valor de ID que se utiliza para distinguir
   varios dispositivos, y *x*, *y*, *z* son las coordenadas del
   evento. (*z* no se usa actualmente.) *bstate* es un valor entero
   cuyos bits se establecerán para indicar el tipo de evento, y será
   el OR bit a bit de una o más de las siguientes constantes, donde
   *n* es el botón número de 1 a 4: "BUTTONn_PRESSED",
   "BUTTONn_RELEASED", "BUTTONn_CLICKED", "BUTTONn_DOUBLE_CLICKED",
   "BUTTONn_TRIPLE_CLICKED", "BUTTON_SHIFT", "BUTTON_CTRL",
   "BUTTON_ALT".

curses.getsyx()

   Retorna las coordenadas actuales del cursor en la pantalla virtual
   como una tupla "(y, x)".  Si "leaveok" es actualmente "True"
   entonces retorna "(-1,-1)".

curses.getwin(file)

   Lee la ventana relacionada con los datos almacenados en el archivo
   por una llamada temprana a "putwin()".  La rutina entonces crea e
   inicializa una nueva ventana usando esos datos, retornando el nuevo
   objeto de ventana.

curses.has_colors()

   Retorna "True" si el terminal puede desplegar colores, en caso
   contrario, retorna "False".

curses.has_ic()

   Retorna "True" si el terminal tiene la capacidad de insertar y
   eliminar caracteres.  Esta función es incluida por razones
   históricas solamente, ya que todos los emuladores de la terminal de
   software modernos tienen tales capacidades.

curses.has_il()

   Retorna "True" si la terminal tiene la capacidad de insertar y
   eliminar caracteres o pueden simularlos usando las regiones de
   desplazamiento.  Esta función es incluida por razones históricas
   solamente, como todos los emuladores de terminales de software
   modernos tienen tales capacidades.

curses.has_key(ch)

   Toma una clave valor *ch*, y retorna "True" si el tipo de terminal
   actual reconoce una clave con ese valor.

curses.halfdelay(tenths)

   Usado por el modo de medio retardo, el cual es similar al modo
   *cbreak* en que los caracteres escritos por el usuario están
   disponibles inmediatamente para el programa.  Sin embargo, después
   de bloquearlos por *tenths* décimas de segundos, se levanta una
   excepción si nada ha sido escrito. El valor de *tenths* debe ser un
   número entre "1" y "255".  Use "nocbreak()" para salir del modo de
   medio retardo.

curses.init_color(color_number, r, g, b)

   Cambia la definición de un color, tomando el número del color a
   cambiar seguido de tres valores RGB (para las cantidades de
   componentes rojo, verde y azul). El valor de *color_number* debe
   estar entre "0" y *COLORS - 1*. Cada uno de *r*, *g*, *b*, debe
   tener un valor entre "0" y "1000". Cuando se usa "init_color()",
   todas las apariciones de ese color en la pantalla cambian
   inmediatamente a la nueva definición. Esta función no es operativa
   en la mayoría de terminales; solo está activo si
   "can_change_color()" retorna "True".

curses.init_pair(pair_number, fg, bg)

   Cambia la definición de un par de colores. Se necesitan tres
   argumentos: el número del par de colores que se va a cambiar, el
   número de color de primer plano y el número de color de fondo. El
   valor de *par_number* debe estar entre "1" y "COLOR_PAIRS-1" (el
   par de colores "0" está conectado a blanco sobre negro y no se
   puede cambiar). El valor de los argumentos *fg* y *bg* debe estar
   entre "0'' y ``COLORS-1" o, después de llamar a
   "use_default_colors()", "-1". Si el par de colores se inicializó
   previamente, la pantalla se actualiza y todas las apariciones de
   ese par de colores se cambian a la nueva definición.

curses.initscr()

   Inicializa la librería. Retorna un objeto window el cual representa
   a toda la pantalla.

   Nota:

     Si hay un error al abrir el terminal, la librería curses
     subyacente puede causar que el interprete salga.

curses.is_term_resized(nlines, ncols)

   Retorna "True" si "resize_term()" modificaría la estructura de la
   ventana, "False" en caso contrario.

curses.isendwin()

   Retorna "True" si "endwin()" ha sido llamado (eso es que la
   librería curses ha sido desinicializada).

curses.keyname(k)

   Retorna el nombre de la tecla enumerada *k* como un objeto de
   bytes.  El nombre de una tecla que genera un carácter ASCII
   imprimible es el carácter de la tecla.  El nombre de una
   combinación de teclas de control es un consistente objeto de bytes
   de dos bytes de un signo de intercalación ("b'^'") seguido por el
   correspondiente carácter ASCII imprimible. El nombre de una
   combinación de tecla *alt* (128-255) es un objeto de bytes
   consistente del prefijo "b'M-'" seguido por el nombre del
   correspondiente carácter ASCII.

curses.killchar()

   Retorna el carácter de eliminación de la línea actual del usuario
   como un objeto de bytes de un byte.  Bajo el sistema operativo Unix
   esta es una propiedad del controlador *tty* del programa *curses*,
   y no está configurado por la librería *curses* por sí mismo.

curses.longname()

   Retorna un objeto de bytes que contiene el campo de nombre largo
   *terminfo* que describe el terminal actual.  La longitud máxima de
   una descripción verbosa es 128 caracteres.  Esto es definido
   solamente después de la llamada a "initscr()".

curses.meta(flag)

   Si *flag* es "True", permite caracteres de 8 bits para ser
   introducidos.  Si *flag* es "False", permite solamente caracteres
   de 7 bits.

curses.mouseinterval(interval)

   Configura el tiempo máximo en milisegundos que pueden transcurrir
   entre los eventos de presionar y soltar para que se reconozcan como
   un click, y retornen el valor del intervalo anterior.  El valor por
   defecto es 200 msec, o una quinta parte de un segundo.

curses.mousemask(mousemask)

   Configure los eventos del mouse para ser reportados, y retorna una
   tupla "(availmask, oldmask)". *availmask* indica cual de los
   eventos del ratón especificados pueden ser reportados; en caso de
   falla completa retorna "0".  *oldmask* es el valor previo de la
   máscara de evento del mouse de la ventana dada.  Si esta función
   nunca es llamada, los eventos del mouse nunca son reportados.

curses.napms(ms)

   Duerme durante *ms* milisegundos.

curses.newpad(nlines, ncols)

   Crea y retorna un apuntador para una nueva estructura de datos de
   *pad* con el número dado de líneas y columnas.  Retorna un *pad*
   como un objeto de ventana.

   Una almohadilla es como una ventana, excepto que no es restringida
   por el tamaño de la pantalla, y no está necesariamente asociada con
   una parte particular de la pantalla.  Las almohadillas pueden ser
   usadas cuando un ventana grande es necesitada, y solamente una
   parte de la ventana estará en la pantalla de una sola vez.
   Actualizaciones automáticas de almohadillas (tales desde el
   desplazamiento o haciendo eco de la entrada) no ocurre.  Los
   métodos "refresh()" y "noutrefresh()" de una almohadilla requiere 6
   argumentos para especificar la parte de la almohadilla a ser
   mostrada y la locación en la ventana que se utilizará para la
   visualización.  Los argumentos son *pminrow*, *pmincol*, *sminrow*,
   *smincol*, *smaxrow*, *smaxcol*; el argumento *p* se refiere a la
   esquina superior izquierda de la región de la almohadilla a ser
   mostrada y el argumento *s* define una caja de recorte en la
   pantalla con la cual la región de la almohadilla será mostrada.

curses.newwin(nlines, ncols)
curses.newwin(nlines, ncols, begin_y, begin_x)

   Retorna una nueva window, cuya esquina superior izquierda esta en
   "(begin_y, begin_x)", y cuyo alto/ancho es *nlines*/*ncols*.

   Por defecto, la ventana extenderá desde la posición especificada
   para la esquina inferior derecha de la pantalla.

curses.nl()

   Ingrese al modo de línea nueva.  Este modo pone la tecla de retorno
   en una nueva línea en la entrada, y traduce la nueva línea en
   retorno y avance de línea en la salida. El modo de nueva línea está
   inicialmente encendida.

curses.nocbreak()

   Salir del modo *cbreak*.  Retorne al modo normal "cooked" con la
   línea del búfer.

curses.noecho()

   Salir del modo echo. El eco de los caracteres de entrada está
   desactivado.

curses.nonl()

   Dejar el modo de nueva línea. Desactiva la traducción de retorno en
   una nueva línea en la entrada, y desactiva la traducción a bajo
   nivel de una nueva línea en nueva línea/retorno en la salida (pero
   esto no cambia el comportamiento de "addch('\n')", el cual siempre
   es el equivalente de retornar y avanzar la línea en la pantalla
   virtual). Con las traducciones apagadas, *curses* puede aumentar
   algunas veces la velocidad del movimiento vertical un poco;
   también, estará disponible para detectar la tecla de retorno en la
   entrada.

curses.noqiflush()

   Cuando la rutina "noqiflush()" es usada, descarga normal de colas
   de entrada y salida asociadas con el "INTR", los caracteres "QUIT"
   and "SUSP" no serán hechos.  Puedes querer llamar "noqiflush()" en
   un manejador de señales si quieres que la salida continúe como si
   la interrupción no hubiera ocurrido después de que el manejador
   exista.

curses.noraw()

   Salir del modo raw. Retorna al modo normal "cooked" con la línea
   del búfer.

curses.pair_content(pair_number)

   Retorna una tupla "(fg, bg)" conteniendo los colores del par de
   color solicitado. El valor de *pair_number* debe ser entre "0" y
   "COLOR_PAIRS-1".

curses.pair_number(attr)

   Retorna el numero del conjunto de pares de colores para el valor
   del atributo *attr*. "color_pair()" es la contraparte de esta
   función.

curses.putp(str)

   Equivalente a "tputs(str, 1, putchar)"; emite el valor de una
   capacidad especificada *terminfo* para el terminal actual. Nota que
   la salida de "putp()" siempre va a la salida estándar.

curses.qiflush([flag])

   Si *flag* es "False", el efecto es el mismo como llamar
   "noqiflush()".  Si *flag* es "True",  o el argumento no es
   proveído, la cola será nivelada cuando estos caracteres de control
   son leídos.

curses.raw()

   Entrar al modo crudo.  En el modo crudo, el almacenamiento en búfer
   de la línea normal y procesamiento de las teclas de interrupción,
   salida, suspensión y control de flujo son apagadas; los caracteres
   son presentados a la función de entrada de *curses* una por una.

curses.reset_prog_mode()

   Restaura la terminal para el modo "program", anteriormente guardado
   por "def_prog_mode()".

curses.reset_shell_mode()

   Restablece el terminal al modo "shell" como lo guardó previamente
   "def_shell_mode()".

curses.resetty()

   Restablece el estado del modo del terminal para lo que esto fue en
   el último llamado a "savetty()".

curses.resize_term(nlines, ncols)

   La función *backend* usada por "resizeterm()", caracteriza más de
   el trabajo; cuando se redimensiona la ventana, "resize_term()" los
   rellenos blancos de las áreas que son extendidas.  La aplicación de
   llamada llenaría en estas áreas con datos apropiados.  La función
   "resize_term()" intenta redimensionar todas las ventanas.  Sin
   embargo, debido a la convención de llamadas del las almohadillas,
   esto no es posible para redimensionar estos sin interacciones
   adicionales con la aplicación.

curses.resizeterm(nlines, ncols)

   Ajusta el tamaño al estándar y la ventana actual para las
   dimensiones especificadas, y ajusta otros datos contables usados
   por la librería *curses* que registra las dimensiones de la ventana
   (en particular el manejador SIGWINCH ).

curses.savetty()

   Guarda el estado actual del modo del terminal en un búfer, usable
   por "resetty()".

curses.get_escdelay()

   Recupera el valor establecido por "set_escdelay()".

   Nuevo en la versión 3.9.

curses.set_escdelay(ms)

   Establece el número de milisegundos de espera después de leer un
   carácter de escape, para distinguir entre un carácter de escape
   individual ingresado en el teclado de las secuencias de escape
   enviadas por el cursor y las teclas de función.

   Nuevo en la versión 3.9.

curses.get_tabsize()

   Recupera el valor establecido por "set_tabsize()".

   Nuevo en la versión 3.9.

curses.set_tabsize(size)

   Establece el número de columnas utilizadas por la biblioteca de
   curses al convertir un carácter de tabulación en espacios, ya que
   agrega la tabulación a una ventana.

   Nuevo en la versión 3.9.

curses.setsyx(y, x)

   Fija el cursor de la pantalla virtual para *y*, *x*.  Si *y* y *x*
   son ambos "-1", entonces "leaveok" es configurado "True".

curses.setupterm(term=None, fd=-1)

   Inicializa la terminal.  *term* es una cadena de caracteres dando
   el nombre de la terminal, o "None"; si es omitido o "None", el
   valor de la variable de entorno "TERM" será usada.  *fd* es el
   archivo descriptor al cual alguna secuencia de inicialización será
   enviada; si no es suministrada o "-1", el archivo descriptor para
   "sys.stdout" será usado.

curses.start_color()

   Debe ser llamado si el programador quiere usar colores, y antes de
   que cualquier otra rutina de manipulación de colores sea llamada.
   Esta es una buena práctica para llamar esta rutina inmediatamente
   después de "initscr()".

   "start_color()" inicializa ocho colores básicos (negro, rojo,
   verde, amarillo, azul, magenta, cian, y blanco), y dos variables
   globales en el módulo "curses", "COLORS" y "COLOR_PAIRS", contiene
   el número máximo de colores y los pares de colores que la terminal
   puede soportar.  Esto también restaura los colores en la terminal
   para los valores que ellos tienen cuando la terminal fue solo
   activada.

curses.termattrs()

   Retorna un *OR* lógico de todos los atributos del video soportados
   por el terminal.  Esta información es útil cuando un programa
   *curses* necesita completar el control sobre la apariencia de la
   pantalla.

curses.termname()

   Retorna el valor de la variable de entorno "TERM", como un objeto
   de bytes, trucado para 14 caracteres.

curses.tigetflag(capname)

   Retorna el valor de la capacidad booleana correspondiente al nombre
   de la capacidad *terminfo* *capname* como un número entero.
   Retorna el valor "-1" si *capname* no es una capacidad booleana, o
   "0" si es cancelada o ausente desde la descripción de la terminal.

curses.tigetnum(capname)

   Retorna el valor de la capacidad numérica correspondiente al nombre
   de la capacidad *terminfo* *capname* como un entero.  Regresa el
   valor "-2" si *capname* no es una capacidad numérica, o "-1" si
   esta es cancelada o ausente desde la descripción del terminal.

curses.tigetstr(capname)

   Retorna el valor de la capacidad de la cadena de caracteres
   correspondiente al nombre de la capacidad *terminfo* *capname* como
   un objeto de bytes.  Retorna "None" si *capname* no es una
   "capacidad de cadena de caracteres" de *terminfo*, o es cancelada o
   ausente desde la descripción de la terminal.

curses.tparm(str[, ...])

   Instancia del objeto de bytes *str* con los parámetros
   suministrados, dónde *str* sería un cadena de caracteres
   parametrizada obtenida desde la base de datos de *terminfo*.  E.g.
   "tparm(tigetstr("cup"), 5, 3)" podría resultar en "b'\033[6;4H'",
   el resultado exacto depende del tipo de terminal.

curses.typeahead(fd)

   Especifica que el descriptor de archivo *fd* es usado para la
   verificación anticipada. Si *fd* es "-1", entonces no se realiza
   ninguna verificación anticipada.

   La librería *curses* hace "la optimización del rompimiento de
   línea" por la búsqueda para mecanografiar periódicamente mientras
   se actualiza la pantalla.  Si la entrada es encontrada, y viene
   desde un *tty*, la actualización actual es pospuesta hasta que se
   vuelva a llamar la actualización, permitiendo la respuesta más
   rápida para comandos escritos en avance.  Esta función permite
   especificar un archivo diferente al descriptor para la verificación
   anticipada.

curses.unctrl(ch)

   Regresa un objeto de bytes el cual es una representación imprimible
   del carácter *ch*.  Los caracteres de control son representados
   como un símbolo de intercalación seguido del carácter, por ejemplo
   como "b'^C'".  La impresión de caracteres son dejados como están.

curses.ungetch(ch)

   Presiona *ch* para que el siguiente "getch()" lo retorne.

   Nota:

     Solamente un *ch* puede ser colocado antes "getch()" es llamada.

curses.update_lines_cols()

   Actualiza "LINES" y "COLS".  Útil para detectar el cambio manual
   del tamaño de pantalla.

   Nuevo en la versión 3.5.

curses.unget_wch(ch)

   Presiona *ch* para que el siguiente "get_wch()" lo retorne.

   Nota:

     Solamente un *ch* puede ser presionado antes "get_wch()" es
     llamada.

   Nuevo en la versión 3.3.

curses.ungetmouse(id, x, y, z, bstate)

   Coloca un evento "KEY_MOUSE" en la cola de entrada, asociando el
   estado de los datos dados con esto.

curses.use_env(flag)

   Si es usado, esta función sería llamada antes de "initscr()" o
   *newterm* son llamados.  Cuando *flag* es "False", los valores de
   líneas y columnas especificadas en la base de datos *terminfo* será
   usado, incluso si las variables de entorno "LINES" y "COLUMNS"
   (usadas por defecto) son configuradas, o si *curses* está corriendo
   en una ventana (en cuyo caso el comportamiento por defecto sería
   usar el tamaño de ventana si "LINES" y "COLUMNS" no están
   configuradas).

curses.use_default_colors()

   Permite usar valores por defecto para los colores en terminales
   apoyando esta característica.  Use esto para apoyar la
   transparencia en tu aplicación.  El color por defecto es asignada
   para el número de color "-1".  Después de llamar esta función,
   inicializa "init_pair(x, curses.COLOR_RED, -1)", por ejemplo, los
   pares de color *x* a un primer plano de color rojo en el fondo por
   defecto.

curses.wrapper(func, /, *args, **kwargs)

   Inicializa *curses* y llama a otro objeto invocable, *func*, el
   cual debería ser el resto de tu aplicación que usa *curses*.  Si la
   aplicación lanza una excepción, esta función restaurará la terminal
   para un estado sano antes de re-lanzar la excepción y generar un
   una pista.  El objeto invocable *func* es entonces pasado a la
   ventana principal 'stdscr' como su primer argumento, seguido por
   algún otro argumento pasado a "wrapper()".  Antes de llamar a
   *func*, "wrapper()" habilita el modo *cbreak*, desactiva echo,
   permite el teclado del terminal, e inicializa los colores si la
   terminal tiene soporte de color.  En salida (ya sea normal o por
   excepción) esto restaura el modo *cooked*, habilita el echo, y
   desactiva el teclado del terminal.


Objetos de ventana
==================

Los objetos ventana, retornados por "initscr()" y "newwin()"
anteriores, tienen los siguientes métodos y atributos:

window.addch(ch[, attr])
window.addch(y, x, ch[, attr])

   Pinta el carácter *ch* en "(y, x)" con atributos *attr*,
   sobrescribiendo cualquier carácter pintado previamente en esa
   ubicación. De forma predeterminada, la posición y los atributos del
   carácter son la configuración actual del objeto ventana.

   Nota:

     Escribiendo afuera de la ventana, sub-ventana, o *pad* genera un
     "curses.error".  Intentando escribir en la esquina inferior
     derecha de una ventana, sub-ventana, o *pad* causará una
     excepción a ser generada después de que el carácter es pintado.

window.addnstr(str, n[, attr])
window.addnstr(y, x, str, n[, attr])

   Pintar como máximo *n* caracteres de la cadena de texto *str* en
   "(y,x)" con atributos *attr*, sobrescribiendo algo previamente en
   la pantalla.

window.addstr(str[, attr])
window.addstr(y, x, str[, attr])

   Dibuja la cadena de caracteres *str* en "(y,x)" con atributos
   *attr*, sobrescribiendo cualquier cosa previamente en la pantalla.

   Nota:

     * Escribiendo afuera de la ventana, sub-ventana, o *pad* genera
       un "curses.error".  Intentando escribir en la esquina inferior
       derecha de una ventana, sub-ventana, o *pad* causará una
       excepción a ser generada después de que la cadena de caracteres
       es pintada.

     * Un bug en *ncurses*, el *backend* para este módulo de Python,
       puede causar *SegFaults* cuando re-dimensionan las ventanas.
       Esto es reparado en ncurses-6.1-20190511.  Si tu estás atascado
       con un *ncurses* anterior, puedes evitar desencadenar este si
       no llamas "addstr()"  con un *str* que tiene embebido nuevas
       líneas.  En su lugar, llama "addstr()" separadamente por cada
       línea.

window.attroff(attr)

   Remueve el atributo *attr* desde el conjunto "background" aplicado
   a todos los escritos para la ventana actual.

window.attron(attr)

   Añade el atributo *attr* del conjunto del "background" aplicado
   para todas las escrituras de la ventana actual.

window.attrset(attr)

   Establezca el conjunto de atributos "background para *attr*.  Este
   conjunto es inicialmente "0" (sin atributos).

window.bkgd(ch[, attr])

   Configura la propiedad de fondo de la ventana para el carácter
   *ch*, con atributos *atte*.  El cambio es entonces aplicado para la
   posición de cada carácter en esa ventana:

   * El atributo de cada carácter en la ventana es cambiado por el
     nuevo atributo de fondo.

   * Dónde quiera que el carácter del fondo anterior aparezca, es
     cambiado al nuevo carácter de fondo.

window.bkgdset(ch[, attr])

   Configura el fondo de la ventana.  Un fondo de ventana consiste de
   un carácter y cualquier combinación de atributos.  La parte del
   atributo del fondo es combinado (OR' ed) con todos los caracteres
   que no son blancos escritos en la ventana.  Tanto las partes del
   carácter y del atributo del fondo son combinados con los caracteres
   en blanco.  El fondo se convierte en una propiedad del carácter y
   se mueve con el carácter a través de cualquier operación de
   desplazamiento e inserción/eliminación de línea/carácter.

window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])

   Dibuja un borde alrededor de las orillas de la ventana.  Cada
   parámetro especifica el carácter a usar para una parte específica
   del borde; ve la tabla abajo para más detalles.

   Nota:

     Un valor "0" para cualquier parámetro causará el carácter por
     defecto a ser usado para ese parámetro. parámetros de palabras
     clave pueden *no* ser usados. Los valores predeterminados son
     listados en esta tabla:

   +-------------+-----------------------+-------------------------+
   | Parámetro   | Descripción           | Valor por defecto       |
   |=============|=======================|=========================|
   | *ls*        | Lado izquierdo        | "ACS_VLINE"             |
   +-------------+-----------------------+-------------------------+
   | *rs*        | Lado derecho          | "ACS_VLINE"             |
   +-------------+-----------------------+-------------------------+
   | *ts*        | Arriba                | "ACS_HLINE"             |
   +-------------+-----------------------+-------------------------+
   | *bs*        | Abajo                 | "ACS_HLINE"             |
   +-------------+-----------------------+-------------------------+
   | *tl*        | Esquina superior      | "ACS_ULCORNER"          |
   |             | izquierda             |                         |
   +-------------+-----------------------+-------------------------+
   | *tr*        | Esquina superior      | "ACS_URCORNER"          |
   |             | derecha               |                         |
   +-------------+-----------------------+-------------------------+
   | *bl*        | Esquina inferior      | "ACS_LLCORNER"          |
   |             | izquierda             |                         |
   +-------------+-----------------------+-------------------------+
   | *br*        | Esquina inferior      | "ACS_LRCORNER"          |
   |             | derecha               |                         |
   +-------------+-----------------------+-------------------------+

window.box([vertch, horch])

   Similar a "border()", pero ambos *ls y *rs* son *vertch* y ambos
   *ts* y *bs* son *horch*.  Los caracteres de esquina predeterminados
   son siempre usados por esta función.

window.chgat(attr)
window.chgat(num, attr)
window.chgat(y, x, attr)
window.chgat(y, x, num, attr)

   Configura los atributos de *num* de caracteres en la posición del
   cursor, o una posición "(y, x)" si es suministrado.  Si *num* no es
   dado o es "-1", el atributo será configurado en todos los
   caracteres para el final de la línea.  Esta función mueve el cursor
   a la posición "(y, x)" si es suministrado.  La línea cambiada será
   tocada usando el método "touchline()" tal que el contenido será
   vuelto a mostrar por la actualización de la siguiente ventana.

window.clear()

   Semejante a "erase()", pero también causa que toda la ventana sea
   repintada sobre la siguiente llamada para "refresh()".

window.clearok(flag)

   Si *flag* es "True", la siguiente llamada para "refresh()" limpiará
   la ventana completamente.

window.clrtobot()

   Borrar desde el cursor hasta el final de la ventana: todas las
   líneas bajo el cursor son eliminadas, y entonces el equivalente de
   "clrtoeol()" es realizado.

window.clrtoeol()

   Borrar desde el cursor hasta el final de la línea.

window.cursyncup()

   Actualice la posición actual del cursor de todos los ancestros de
   la ventana para reflejar la posición actual del cursor de la
   ventana.

window.delch([y, x])

   Borrar cualquier carácter en "(y,x)".

window.deleteln()

   Borra la línea bajo el cursor.  Todas las líneas siguientes son
   movidas una línea hacía arriba.

window.derwin(begin_y, begin_x)
window.derwin(nlines, ncols, begin_y, begin_x)

   Una abreviación para "ventana derivada", "derwin()" es el mismo
   cómo llamar "subwin()", excepto que *begin_y* y *begin_x* son
   relativos al origen de la ventana, más bien relativo a la pantalla
   completa.  Retorna un objeto ventana para la ventana derivada.

window.echochar(ch[, attr])

   Añada el carácter *ch* con atributo *attr*, e inmediatamente llame
   a "refresh()" en la ventana.

window.enclose(y, x)

   Pruebe si el par dado de las coordenadas de celda del carácter
   relativas de la ventana son encerrados por la ventana dada,
   retornando "True" o "False". Esto es útil para determinar que
   subconjunto de las ventanas de pantalla encierran la locación de un
   evento del mouse.

window.encoding

   La codificación utilizada para codificar argumentos de método
   (*Unicode* de caracteres y cadena de caracteres).  El atributo
   codificado es heredado desde la ventana padre cuando una sub-
   ventana es creada, por ejemplo con "window.subwin()".  Por defecto,
   la codificación local es usada (ver
   "locale.getpreferredencoding()").

   Nuevo en la versión 3.3.

window.erase()

   Limpiar la ventana.

window.getbegyx()

   Retorna una tupla "(y,x)" de coordenadas de la esquina superior
   izquierda.

window.getbkgd()

   Retorna el par carácter/atributo dada la ventana actual.

window.getch([y, x])

   Obtener un carácter.  Nota que el entero retornado *no* tiene que
   estar en el rango ASCII: teclas de función, claves de teclado y los
   demás son representados por números mayores que 255.  En el modo
   sin demora, retorna "-1" si no hay entrada, en caso contrario
   espere hasta que una tecla es presionada.

window.get_wch([y, x])

   Obtener un carácter amplio.  Retorna un carácter para la mayoría de
   las teclas, o un entero para las teclas de función, teclas del
   teclado, y otras teclas especiales.  En modo de no retorna, genera
   una excepción si no hay entrada.

   Nuevo en la versión 3.3.

window.getkey([y, x])

   Obtener un carácter, retornando una cadena de caracteres en lugar
   de un entero, como "getch()" lo hace.  Las teclas de función,
   teclas del teclado y otras teclas especiales retornan una cadena
   *multibyte* conteniendo el nombre de la tecla.  En modo de no
   retardo, genera una excepción si no hay entrada.

window.getmaxyx()

   Retorna una tupla "(y,x)" de el alto y ancho de la ventana.

window.getparyx()

   Retorne las coordenadas iniciales de esta ventana relativa para su
   ventana padre como una tupla "(y, x)".  Retorna "(-1, -1)" si esta
   ventana no tiene padre.

window.getstr()
window.getstr(n)
window.getstr(y, x)
window.getstr(y, x, n)

   Lee un objeto de bytes desde el usuario, con capacidad de edición
   de línea primitiva.

window.getyx()

   Retorna una tupla "(y, x)" de la posición actual del cursor
   relativa para la esquina superior izquierda de la ventana.

window.hline(ch, n)
window.hline(y, x, ch, n)

   Muestra una línea horizontal iniciando en "(y, x)" con longitud *n*
   consistente de el carácter *ch*.

window.idcok(flag)

   Si *flag* es "False", *curses* ya no considera el uso de la función
   de insertar/eliminar caracteres de hardware del terminal; si *flag*
   "True", el uso de inserción y borrado  de caracteres está
   habilitado.  Cuando *curses* es inicializado primero, el uso de
   caracteres de inserción / borrado está habilitado por defecto.

window.idlok(flag)

   Si *flag* es "True", "curses" tratará y usará las funciones de la
   línea de edición de hardware.  En caso contrario, la línea
   inserción/borrado están deshabilitadas.

window.immedok(flag)

   Si *flag* es "True", cualquier cambio en la imagen de la ventana
   automáticamente causará que la ventana sea refrescada; ya no tienes
   que llamar a "refresh()" por ti mismo.  Sin embargo, esto puede
   degradar el rendimiento considerablemente, debido a las
   repeticiones de llamada a *wrefresh*.  Esta opción está
   deshabilitada por defecto.

window.inch([y, x])

   Retorna el carácter en la posición dada en la ventana.  Los 8bits
   inferiores son los caracteres propiamente dichos, y los bits
   superiores son los atributos.

window.insch(ch[, attr])
window.insch(y, x, ch[, attr])

   Pinta el carácter *ch* en "(y, x)" con atributos *attr*, moviendo
   la línea desde la posición *x* a la derecha un carácter.

window.insdelln(nlines)

   Inserta *nlines* líneas en la ventana especificada arriba de la
   línea actual.  Las *nlines* líneas de fondo se pierden.  Para
   *nlines* negativos, elimine *nlines* líneas comenzando con la que
   está debajo del cursor, y mueve las restantes hacia arriba. Se
   borran las *nlines* líneas inferiores.  La posición del cursor
   actual se mantiene igual.

window.insertln()

   Inserte una línea en blanco bajo el cursos.  Las líneas siguientes
   se moverán una línea hacía abajo.

window.insnstr(str, n[, attr])
window.insnstr(y, x, str, n[, attr])

   Inserte una cadena de caracteres (tantos caracteres quepan en la
   línea) antes los caracteres bajo el cursor, sobre los *n*
   caracteres.  Si *n* es cero o negativo, la cadena entera es
   insertada.  Todos los caracteres a la derecha de el cursor son
   desplazados a la derecha, perdiéndose los caracteres de la derecha
   en la línea.  La posición del cursor no cambia (después de mover a
   *y*, *x*, si es especificado).

window.insstr(str[, attr])
window.insstr(y, x, str[, attr])

   Inserte una cadena de caracteres ( tantos caracteres encajen en la
   línea) antes los caracteres bajo el cursor.  Todos los caracteres a
   la derecha de el cursor son desplazados a la derecha, perdiéndose
   los caracteres de la derecha en línea.

window.instr([n])
window.instr(y, x[, n])

   Regresa un objeto de bytes de caracteres, extraídos desde la
   ventana comenzando en la posición actual del cursor, o en *y*, *x*
   si es especificado.  Los atributos son despojados desde los
   caracteres.  Si *n* es especificado, "instr()" retorna una cadena
   de caracteres como máximo de *n* caracteres (exclusivo de la NULL
   final).

window.is_linetouched(line)

   Retorna "True" si la línea especificada fue modificada desde la
   última llamada a "refresh()"; de otra manera retorna "False".
   Genera una excepción "curses.error" si *line* no es válida para la
   ventana dada.

window.is_wintouched()

   Retorna "True" si la ventana especificada fue modificada desde la
   última llamada para "refresh()"; en caso contrario, retorna
   "False".

window.keypad(flag)

   Si *flag* es "True", evita las secuencias generadas por algunas
   teclas (teclado, teclas de función) será interpretadas por
   "curses".  Si *flag* es "False", evita las secuencias que serán
   dejadas como está en la corriente de entrada.

window.leaveok(flag)

   Si *flag* es "True", el cursor es dejado donde está en la
   actualización, por ejemplo estando en "cursor position." Esto
   reduce el movimiento del cursor siempre que sea posible.  Si es
   posible, el cursor se hará invisible.

   Si *flag* es "False", el cursor siempre estará en "cursor position"
   después de una actualización.

window.move(new_y, new_x)

   Mueve el cursor a "(new_y, new_x)".

window.mvderwin(y, x)

   Mueve la ventana adentro de su ventana padre.  Los parámetros
   relativos a la pantalla de la ventana no son cambiados.  Esta
   rutina es usada para mostrar diferentes partes de la ventana padre
   en la misma posición física en la pantalla.

window.mvwin(new_y, new_x)

   Mueve la ventana a su esquina superior izquierda que está en
   "(new_y,new_x)".

window.nodelay(flag)

   Si *flag* es "True", "getch()" no será bloqueada.

window.notimeout(flag)

   Si *flag* es "True", las secuencias de escape no serán agotadas.

   Si *flag* es "False", después de pocos milisegundos, una secuencia
   de escape no será interpretada, y será dejada en el flujo de
   entrada como está.

window.noutrefresh()

   Marque para actualizar pero espere.  Esta función actualiza la
   estructura de datos representando el estado deseado de la ventana,
   pero no fuerza una actualización en la pantalla física.  Para
   realizar eso, llame "doupdate()".

window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

   Cubre la ventana en la parte superior de *destwin*.  La ventana no
   necesita ser del mismo tamaño, solamente se solapa la región
   copiada.  Esta copia no es destructiva, lo que significa que el
   carácter de fondo actual no sobre-escribe el contenido viejo de
   *destwin*.

   Para obtener el control de grano fino sobre la región copiada, la
   segunda forma de "overlay()" puede ser usada.  *sminrow* y
   *smincol* son las coordenadas superior izquierda de la ventana de
   origen, y las otras variables marcan un rectángulo en la ventana
   destino.

window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

   Sobre-escribe la ventana en la parte superior de *destwin*.  La
   ventana no necesita ser del mismo tamaño, en cuyo caso solamente se
   sobrepone la región que es copiada.  Esta copia es destructiva, lo
   cual significa que el carácter de fondo actual sobre-escribe el
   contenido viejo de *destwin*.

   Para obtener el control de grano fino sobre la región copiada, la
   segunda forma de "overwrite()" puede ser usada.  *sminrow* y
   *smincol* son las coordenadas superior izquierda de la ventana
   origen, las otras variables marcan un rectángulo en la ventana de
   destino.

window.putwin(file)

   Escribe todos los datos asociados con la ventana en el objeto de
   archivo proveído.  Esta información puede estar después recuperada
   usando la función "getwin()".

window.redrawln(beg, num)

   Indica que el *num* de líneas de la pantalla, empiezan en la línea
   *beg*, son corruptos y deberían ser completamente redibujado en la
   siguiente llamada "refresh()".

window.redrawwin()

   Toca la ventana completa, causando que se vuelva a dibujar
   completamente en la siguiente llamada "refresh()" .

window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])

   Actualiza la pantalla inmediatamente (sincronice la pantalla actual
   con los métodos previos de dibujar/borrar).

   Los 6 argumentos opcionales pueden ser solamente especificados
   cuando la ventana es una almohadilla creada con "newpad()".  Los
   parámetros adicionales son necesarios para indicar que parte de la
   almohadilla y pantalla son envueltos.  *pminrow* y *pmincol*
   especifica la esquina superior de la mano izquierda del rectángulo
   a ser mostrado en el *pad*.  *sminrow*, *smincol*, *smaxrow*, y
   *smaxcol* especifica los bordes del rectángulo a ser mostrados en
   la pantalla.  La esquina inferior de la mano derecha del rectángulo
   a ser mostrado en el *pad* es calculado desde las coordenadas de la
   pantalla, desde que el rectángulo debe ser del mismo tamaño.  Ambos
   rectángulos deben ser completamente contenidos con su estructura
   respectiva.  Valores negativos de *pminrow*, *pmincol*, *sminrow*,
   o *smincol* son tratados como si fueran cero.

window.resize(nlines, ncols)

   Redistribuir el almacenamiento para una ventana *curses* para
   ajustar su dimensión para los valores especificados.  Si la
   dimensión también es mayor que los valores actuales, los datos de
   la ventana serán llenados con espacios en blanco que tiene la
   ejecución del fondo actual (como ajustado por "bkgdset()")
   uniéndolos.

window.scroll([lines=1])

   Desplace la pantalla o la región de desplazamiento hacia arriba por
   *lines* líneas.

window.scrollok(flag)

   Control que sucede cuando el cursor de una ventana es movida fuera
   del borde de la ventana o región de desplazamiento, también como un
   resultado de una acción de nueva línea en la línea inferior, o
   escribiendo el último carácter de la última línea.  Si *flag* es
   "False", el cursor está a la izquierda sobre la línea inferior.  Si
   *flag* es "True", la ventana será desplazada hacía arriba por una
   línea.  Note que en orden para obtener el efecto del desplazamiento
   físico en el terminal, también será necesario llamar "idlok()".

window.setscrreg(top, bottom)

   Configura la región de desplazamiento desde la línea *top* hasta la
   línea *bottom*. Todas las acciones de desplazamiento tomarán lugar
   en esta región.

window.standend()

   Desactive el atributo destacado.  En algunos terminales esto tiene
   el efecto secundario de desactivar todos los atributos.

window.standout()

   Active el atributo *A_STANDOUT*.

window.subpad(begin_y, begin_x)
window.subpad(nlines, ncols, begin_y, begin_x)

   Retorna la sub-ventana, cuya esquina superior izquierda esta en
   "(begin_y, begin_x)", y cuyo ancho/alto es *ncols*/*nlines*.

window.subwin(begin_y, begin_x)
window.subwin(nlines, ncols, begin_y, begin_x)

   Retorna la sub-ventana, cuya esquina superior izquierda esta en
   "(begin_y, begin_x)", y cuyo ancho/alto es *ncols*/*nlines*.

   Por defecto, la sub-ventana extenderá desde la posición
   especificada para la esquina inferior derecha de la ventana.

window.syncdown()

   Toca cada ubicación en la ventana que ha sido tocado por alguna de
   sus ventanas padres.  Esta rutina es llamada por "refresh()", esto
   casi nunca debería ser necesario para llamarlo manualmente.

window.syncok(flag)

   Si *flag* es "True", entonces "syncup()" es llamada automáticamente
   cuando hay un cambio en la ventana.

window.syncup()

   Toque todas las locaciones de los ancestros de la ventana que han
   sido cambiados en la ventana.

window.timeout(delay)

   Configura el bloqueo o no bloqueo del comportamiento para la
   ventana.  Si el *delay* es negativo, bloqueando la lectura usada
   (el cual esperará indefinidamente para la entrada).  Si *delay* es
   cero, entonces no se bloqueará la lectura usada, y "getch()"
   retornará "-1" si la entrada no está esperando.  Si *delay* es
   positivo, entonces "getch()" se bloqueará por *delay* milisegundos,
   y retorna "-1" si aún no entra en el final de ese tiempo.

window.touchline(start, count[, changed])

   Supone *count* líneas han sido cambiadas, iniciando con la línea
   *start*.  Si *changed* es suministrado, específica que las líneas
   afectadas son marcadas como hayan sido cambiadas (*changed*"=True")
   o no cambiadas (*changed*"=False").

window.touchwin()

   Suponga que toda la ventana ha sido cambiada, con el fin de
   optimizar el dibujo.

window.untouchwin()

   Marque todas las líneas en la ventana como no cambiadas desde la
   última llamada para "refresh()".

window.vline(ch, n)
window.vline(y, x, ch, n)

   Muestre una línea vertical iniciando en "(y, x)" con longitud *n*
   consistente de el carácter *ch*.


Constantes
==========

El módulo "curses" define los siguientes miembros de datos:

curses.ERR

   Algunas rutinas de *curses* que retornan un entero, tales como
   "getch()", retorna "ERR" sobre el fallo.

curses.OK

   Algunas rutinas de *curses* que retornan un entero, tales como
   "napms()", retorna "OK" tras el éxito.

curses.version

   Un objeto de bytes representando la versión actual de el módulo.
   También disponible como "__version__".

curses.ncurses_version

   Una tupla nombrada contiene los 3 componentes de la versión de la
   librería *ncurses* *major*, *minor*, y *patch*.  Todos los valores
   son enteros.  Los componentes pueden también ser accedidos por
   nombre, así "curses.ncurses_version[0]" es equivalente a
   "curses.ncurses_version.major" y así.

   Disponibilidad: si la librería ncurses es usada.

   Nuevo en la versión 3.8.

Algunas constantes están disponibles para especificar los atributos
del celdas de caracteres.  Las constantes exactas disponible dependen
del sistema.

+--------------------+---------------------------------+
| Atributo           | Significado                     |
|====================|=================================|
| "A_ALTCHARSET"     | Modo de conjunto de caracteres  |
|                    | alternativo                     |
+--------------------+---------------------------------+
| "A_BLINK"          | Modo parpadeo                   |
+--------------------+---------------------------------+
| "A_BOLD"           | Modo negrita                    |
+--------------------+---------------------------------+
| "A_DIM"            | Modo tenue                      |
+--------------------+---------------------------------+
| "A_INVIS"          | Modo invisible o en blanco      |
+--------------------+---------------------------------+
| "A_ITALIC"         | Modo cursiva                    |
+--------------------+---------------------------------+
| "A_NORMAL"         | Atributo normal                 |
+--------------------+---------------------------------+
| "A_PROTECT"        | Modo protegido                  |
+--------------------+---------------------------------+
| "A_REVERSE"        | Fondo inverso y colores de      |
|                    | primer plano                    |
+--------------------+---------------------------------+
| "A_STANDOUT"       | Modo destacado                  |
+--------------------+---------------------------------+
| "A_UNDERLINE"      | Modo subrayado                  |
+--------------------+---------------------------------+
| "A_HORIZONTAL"     | Resaltado horizontal            |
+--------------------+---------------------------------+
| "A_LEFT"           | Resaltado a la izquierda        |
+--------------------+---------------------------------+
| "A_LOW"            | Resaltado bajo                  |
+--------------------+---------------------------------+
| "A_RIGHT"          | Resaltado a la derecha          |
+--------------------+---------------------------------+
| "A_TOP"            | Resaltado arriba                |
+--------------------+---------------------------------+
| "A_VERTICAL"       | Resaltado vertical              |
+--------------------+---------------------------------+
| "A_CHARTEXT"       | Mascara de bits para extraer un |
|                    | caracter                        |
+--------------------+---------------------------------+

Nuevo en la versión 3.7: "A_ITALIC" fue añadido.

Varias constantes están disponibles para extraer los atributos
correspondientes retornados por algunos métodos.

+--------------------+---------------------------------+
| Mascara de bits    | Significado                     |
|====================|=================================|
| "A_ATTRIBUTES"     | Mascara de bits para extraer    |
|                    | atributos                       |
+--------------------+---------------------------------+
| "A_CHARTEXT"       | Mascara de bits para extraer un |
|                    | caracter                        |
+--------------------+---------------------------------+
| "A_COLOR"          | Mascara de bits para extraer    |
|                    | información de campo de pares   |
|                    | de colores                      |
+--------------------+---------------------------------+

Las teclas se denominan constantes enteras con nombres que comienzan
con "KEY_". Las teclas exactas disponibles son dependientes del
sistema.

+---------------------+----------------------------------------------+
| Clave constante     | Clave                                        |
|=====================|==============================================|
| "KEY_MIN"           | Valor mínimo de la clave                     |
+---------------------+----------------------------------------------+
| "KEY_BREAK"         | Clave rota (no confiable)                    |
+---------------------+----------------------------------------------+
| "KEY_DOWN"          | Flecha hacia abajo                           |
+---------------------+----------------------------------------------+
| "KEY_UP"            | Flecha hacia arriba                          |
+---------------------+----------------------------------------------+
| "KEY_LEFT"          | Flecha hacia la izquierda                    |
+---------------------+----------------------------------------------+
| "KEY_RIGHT"         | Flecha hacia la derecha                      |
+---------------------+----------------------------------------------+
| "KEY_HOME"          | Tecla de inicio (flecha hacia arriba +       |
|                     | flecha hacia la izquierda)                   |
+---------------------+----------------------------------------------+
| "KEY_BACKSPACE"     | Retroceso (no confiable)                     |
+---------------------+----------------------------------------------+
| "KEY_F0"            | Teclas de función. Más de 64 teclas de       |
|                     | función son soportadas.                      |
+---------------------+----------------------------------------------+
| "KEY_Fn"            | Valor de tecla de función *n*                |
+---------------------+----------------------------------------------+
| "KEY_DL"            | Borrar línea                                 |
+---------------------+----------------------------------------------+
| "KEY_IL"            | Inserte línea                                |
+---------------------+----------------------------------------------+
| "KEY_DC"            | Borrar caracter                              |
+---------------------+----------------------------------------------+
| "KEY_IC"            | Insertar carácter o ingresara al modo de     |
|                     | inserción                                    |
+---------------------+----------------------------------------------+
| "KEY_EIC"           | Salir del modo de inserción de caracteres    |
+---------------------+----------------------------------------------+
| "KEY_CLEAR"         | Limpiar pantalla                             |
+---------------------+----------------------------------------------+
| "KEY_EOS"           | Limpiar al final de pantalla                 |
+---------------------+----------------------------------------------+
| "KEY_EOL"           | Limpiar al final de la línea                 |
+---------------------+----------------------------------------------+
| "KEY_SF"            | Desplazar una línea hacia adelante           |
+---------------------+----------------------------------------------+
| "KEY_SR"            | Desplazar una línea hacia atrás (reversa)    |
+---------------------+----------------------------------------------+
| "KEY_NPAGE"         | Página siguiente                             |
+---------------------+----------------------------------------------+
| "KEY_PPAGE"         | Página anterior                              |
+---------------------+----------------------------------------------+
| "KEY_STAB"          | Establecer pestaña                           |
+---------------------+----------------------------------------------+
| "KEY_CTAB"          | Limpiar pestaña                              |
+---------------------+----------------------------------------------+
| "KEY_CATAB"         | Limpiar todas las pestañas                   |
+---------------------+----------------------------------------------+
| "KEY_ENTER"         | Ingresar o enviar (no confiable)             |
+---------------------+----------------------------------------------+
| "KEY_SRESET"        | Reinicio suave (parcial) (no confiable)      |
+---------------------+----------------------------------------------+
| "KEY_RESET"         | Reinicio o reinicio fuerte (no confiable)    |
+---------------------+----------------------------------------------+
| "KEY_PRINT"         | Imprimir                                     |
+---------------------+----------------------------------------------+
| "KEY_LL"            | Inicio abajo o abajo (abajo a la izquierda)  |
+---------------------+----------------------------------------------+
| "KEY_A1"            | Superior izquierda del teclado               |
+---------------------+----------------------------------------------+
| "KEY_A3"            | Superior derecha de el teclado               |
+---------------------+----------------------------------------------+
| "KEY_B2"            | Centro del teclado                           |
+---------------------+----------------------------------------------+
| "KEY_C1"            | Inferior izquierdo del teclado               |
+---------------------+----------------------------------------------+
| "KEY_C3"            | Inferior derecho del teclado                 |
+---------------------+----------------------------------------------+
| "KEY_BTAB"          | Pestaña trasera                              |
+---------------------+----------------------------------------------+
| "KEY_BEG"           | Mendigar (Comienzo)                          |
+---------------------+----------------------------------------------+
| "KEY_CANCEL"        | Cancelar                                     |
+---------------------+----------------------------------------------+
| "KEY_CLOSE"         | Cerrar                                       |
+---------------------+----------------------------------------------+
| "KEY_COMMAND"       | Cmd (Comando)                                |
+---------------------+----------------------------------------------+
| "KEY_COPY"          | Copiar                                       |
+---------------------+----------------------------------------------+
| "KEY_CREATE"        | Crear                                        |
+---------------------+----------------------------------------------+
| "KEY_END"           | Final                                        |
+---------------------+----------------------------------------------+
| "KEY_EXIT"          | Salir                                        |
+---------------------+----------------------------------------------+
| "KEY_FIND"          | Encontrar                                    |
+---------------------+----------------------------------------------+
| "KEY_HELP"          | Ayudar                                       |
+---------------------+----------------------------------------------+
| "KEY_MARK"          | Marca                                        |
+---------------------+----------------------------------------------+
| "KEY_MESSAGE"       | Mensaje                                      |
+---------------------+----------------------------------------------+
| "KEY_MOVE"          | Mover                                        |
+---------------------+----------------------------------------------+
| "KEY_NEXT"          | Siguiente                                    |
+---------------------+----------------------------------------------+
| "KEY_OPEN"          | Abrir                                        |
+---------------------+----------------------------------------------+
| "KEY_OPTIONS"       | Opciones                                     |
+---------------------+----------------------------------------------+
| "KEY_PREVIOUS"      | Anterior                                     |
+---------------------+----------------------------------------------+
| "KEY_REDO"          | Rehacer                                      |
+---------------------+----------------------------------------------+
| "KEY_REFERENCE"     | Referencia                                   |
+---------------------+----------------------------------------------+
| "KEY_REFRESH"       | Refrescar                                    |
+---------------------+----------------------------------------------+
| "KEY_REPLACE"       | Re-emplazar                                  |
+---------------------+----------------------------------------------+
| "KEY_RESTART"       | Re-iniciar                                   |
+---------------------+----------------------------------------------+
| "KEY_RESUME"        | Resumir                                      |
+---------------------+----------------------------------------------+
| "KEY_SAVE"          | Guardar                                      |
+---------------------+----------------------------------------------+
| "KEY_SBEG"          | Mendicidad desplazada (comienzo)             |
+---------------------+----------------------------------------------+
| "KEY_SCANCEL"       | Cancelar cambiado                            |
+---------------------+----------------------------------------------+
| "KEY_SCOMMAND"      | Comando cambiado                             |
+---------------------+----------------------------------------------+
| "KEY_SCOPY"         | Copiado cambiado                             |
+---------------------+----------------------------------------------+
| "KEY_SCREATE"       | Crear con desplazamiento                     |
+---------------------+----------------------------------------------+
| "KEY_SDC"           | Borrar carácter desplazado                   |
+---------------------+----------------------------------------------+
| "KEY_SDL"           | Borrar línea desplazada                      |
+---------------------+----------------------------------------------+
| "KEY_SELECT"        | Seleccionar                                  |
+---------------------+----------------------------------------------+
| "KEY_SEND"          | Final desplazado                             |
+---------------------+----------------------------------------------+
| "KEY_SEOL"          | Limpiar línea desplazada                     |
+---------------------+----------------------------------------------+
| "KEY_SEXIT"         | Salida desplazada                            |
+---------------------+----------------------------------------------+
| "KEY_SFIND"         | Búsqueda desplazada                          |
+---------------------+----------------------------------------------+
| "KEY_SHELP"         | Ayuda desplazada                             |
+---------------------+----------------------------------------------+
| "KEY_SHOME"         | Inicio cambiado                              |
+---------------------+----------------------------------------------+
| "KEY_SIC"           | Entrada cambiada                             |
+---------------------+----------------------------------------------+
| "KEY_SLEFT"         | Flecha hacia la izquierda desplazada         |
+---------------------+----------------------------------------------+
| "KEY_SMESSAGE"      | Mensaje cambiado                             |
+---------------------+----------------------------------------------+
| "KEY_SMOVE"         | Movimiento desplazado                        |
+---------------------+----------------------------------------------+
| "KEY_SNEXT"         | Siguiente desplazado                         |
+---------------------+----------------------------------------------+
| "KEY_SOPTIONS"      | Opciones cambiadas                           |
+---------------------+----------------------------------------------+
| "KEY_SPREVIOUS"     | Anterior cambiado                            |
+---------------------+----------------------------------------------+
| "KEY_SPRINT"        | Imprimir desplazado                          |
+---------------------+----------------------------------------------+
| "KEY_SREDO"         | Rehacer cambiado                             |
+---------------------+----------------------------------------------+
| "KEY_SREPLACE"      | Re-emplazo cambiado                          |
+---------------------+----------------------------------------------+
| "KEY_SRIGHT"        | Flecha hacia la derecha cambiada             |
+---------------------+----------------------------------------------+
| "KEY_SRSUME"        | Resumen cambiado                             |
+---------------------+----------------------------------------------+
| "KEY_SSAVE"         | Guardar desplazado                           |
+---------------------+----------------------------------------------+
| "KEY_SSUSPEND"      | Suspender cambiado                           |
+---------------------+----------------------------------------------+
| "KEY_SUNDO"         | Deshacer desplazado                          |
+---------------------+----------------------------------------------+
| "KEY_SUSPEND"       | Suspender                                    |
+---------------------+----------------------------------------------+
| "KEY_UNDO"          | Deshacer                                     |
+---------------------+----------------------------------------------+
| "KEY_MOUSE"         | Evento del ratón ha ocurrido                 |
+---------------------+----------------------------------------------+
| "KEY_RESIZE"        | Evento de cambio de tamaño del terminal      |
+---------------------+----------------------------------------------+
| "KEY_MAX"           | Valor máximo de clave                        |
+---------------------+----------------------------------------------+

En VT100s y su emulador de software, tal como X emulador de terminal,
normalmente hay al menos cuatro funciones de tecla ("KEY_F1",
"KEY_F2", "KEY_F3", "KEY_F4") disponibles, y la tecla flecha mapeada
para "KEY_UP", "KEY_DOWN", "KEY_LEFT" y "KEY_RIGHT" en la manera
obvia.  Si tu máquina tiene un teclado de PC, esto asegura la
expectativa de las teclas flecha y doce teclas de función (el más
viejo de los teclados de PC pueden tener solamente diez teclas de
función); también, la siguientes funciones de teclado son estándar:

+--------------------+-------------+
| Tecla              | Constante   |
|====================|=============|
| "Insert"           | KEY_IC      |
+--------------------+-------------+
| "Delete"           | KEY_DC      |
+--------------------+-------------+
| "Home"             | KEY_HOME    |
+--------------------+-------------+
| "End"              | KEY_END     |
+--------------------+-------------+
| "Page Up"          | KEY_PPAGE   |
+--------------------+-------------+
| "Page Down"        | KEY_NPAGE   |
+--------------------+-------------+

La siguiente tabla lista los caracteres desde el conjunto alterno de
caracteres.  Estos son heredados desde el terminal VT100, y
generalmente estará disponible en emuladores de software tales como
terminales X.  Cuando no hay gráficos disponibles, *curses* cae en una
aproximación cruda de ASCII imprimibles.

Nota:

  Estos están disponibles solamente después de que "initscr()" ha sido
  llamada.

+--------------------+--------------------------------------------+
| Código ACS         | Significado                                |
|====================|============================================|
| "ACS_BBSS"         | nombre alternativo para la esquina         |
|                    | superior derecha                           |
+--------------------+--------------------------------------------+
| "ACS_BLOCK"        | bloque cuadrado sólido                     |
+--------------------+--------------------------------------------+
| "ACS_BOARD"        | tablero de cuadrados                       |
+--------------------+--------------------------------------------+
| "ACS_BSBS"         | nombre alternativo para línea horizontal   |
+--------------------+--------------------------------------------+
| "ACS_BSSB"         | nombre alternativo para esquina superior   |
|                    | izquierda                                  |
+--------------------+--------------------------------------------+
| "ACS_BSSS"         | nombre alternativo para el soporte         |
|                    | superior                                   |
+--------------------+--------------------------------------------+
| "ACS_BTEE"         | soporte inferior                           |
+--------------------+--------------------------------------------+
| "ACS_BULLET"       | bala                                       |
+--------------------+--------------------------------------------+
| "ACS_CKBOARD"      | tablero inspector (punteado)               |
+--------------------+--------------------------------------------+
| "ACS_DARROW"       | flecha punteada hacia abajo                |
+--------------------+--------------------------------------------+
| "ACS_DEGREE"       | símbolo de grado                           |
+--------------------+--------------------------------------------+
| "ACS_DIAMOND"      | diamante                                   |
+--------------------+--------------------------------------------+
| "ACS_GEQUAL"       | mayor que o igual a                        |
+--------------------+--------------------------------------------+
| "ACS_HLINE"        | línea horizontal                           |
+--------------------+--------------------------------------------+
| "ACS_LANTERN"      | símbolo de la linterna                     |
+--------------------+--------------------------------------------+
| "ACS_LARROW"       | flecha izquierda                           |
+--------------------+--------------------------------------------+
| "ACS_LEQUAL"       | menor que o igual a                        |
+--------------------+--------------------------------------------+
| "ACS_LLCORNER"     | esquina inferior izquierda                 |
+--------------------+--------------------------------------------+
| "ACS_LRCORNER"     | esquina inferior derecha                   |
+--------------------+--------------------------------------------+
| "ACS_LTEE"         | soporte izquierdo                          |
+--------------------+--------------------------------------------+
| "ACS_NEQUAL"       | signo no igual                             |
+--------------------+--------------------------------------------+
| "ACS_PI"           | letra pi                                   |
+--------------------+--------------------------------------------+
| "ACS_PLMINUS"      | signo más o menos                          |
+--------------------+--------------------------------------------+
| "ACS_PLUS"         | gran signo más                             |
+--------------------+--------------------------------------------+
| "ACS_RARROW"       | flecha hacia la derecha                    |
+--------------------+--------------------------------------------+
| "ACS_RTEE"         | soporte derecho                            |
+--------------------+--------------------------------------------+
| "ACS_S1"           | escanear línea 1                           |
+--------------------+--------------------------------------------+
| "ACS_S3"           | escanear línea 3                           |
+--------------------+--------------------------------------------+
| "ACS_S7"           | escanear línea 7                           |
+--------------------+--------------------------------------------+
| "ACS_S9"           | escanear línea 9                           |
+--------------------+--------------------------------------------+
| "ACS_SBBS"         | nombre alterno para la esquina inferior    |
|                    | derecha                                    |
+--------------------+--------------------------------------------+
| "ACS_SBSB"         | nombre alterno para la línea vertical      |
+--------------------+--------------------------------------------+
| "ACS_SBSS"         | nombre alterno para el soporte derecho     |
+--------------------+--------------------------------------------+
| "ACS_SSBB"         | nombre alterno para la esquina inferior    |
|                    | izquierda                                  |
+--------------------+--------------------------------------------+
| "ACS_SSBS"         | nombre alterno para el soporte inferior    |
+--------------------+--------------------------------------------+
| "ACS_SSSB"         | nombre alterno para el soporte izquierdo   |
+--------------------+--------------------------------------------+
| "ACS_SSSS"         | nombre alterno para *crossover* o un gran  |
|                    | más                                        |
+--------------------+--------------------------------------------+
| "ACS_STERLING"     | libra esterlina                            |
+--------------------+--------------------------------------------+
| "ACS_TTEE"         | soporte superior                           |
+--------------------+--------------------------------------------+
| "ACS_UARROW"       | flecha hacia arriba                        |
+--------------------+--------------------------------------------+
| "ACS_ULCORNER"     | esquina superior izquierda                 |
+--------------------+--------------------------------------------+
| "ACS_URCORNER"     | esquina superior derecha                   |
+--------------------+--------------------------------------------+
| "ACS_VLINE"        | línea vertical                             |
+--------------------+--------------------------------------------+

La siguiente tabla lista los colores pre-definidos:

+---------------------+------------------------------+
| Constante           | Color                        |
|=====================|==============================|
| "COLOR_BLACK"       | Negro                        |
+---------------------+------------------------------+
| "COLOR_BLUE"        | Azul                         |
+---------------------+------------------------------+
| "COLOR_CYAN"        | Cian (azul verdoso claro)    |
+---------------------+------------------------------+
| "COLOR_GREEN"       | Verde                        |
+---------------------+------------------------------+
| "COLOR_MAGENTA"     | Magenta (rojo violáceo)      |
+---------------------+------------------------------+
| "COLOR_RED"         | Rojo                         |
+---------------------+------------------------------+
| "COLOR_WHITE"       | Blanco                       |
+---------------------+------------------------------+
| "COLOR_YELLOW"      | Amarillo                     |
+---------------------+------------------------------+


"curses.textpad"--- Widget de entrada de texto para programas de curses
***********************************************************************

El módulo "curses.textpad" provee una clase "Textbox" que maneja
edición de texto primario en una ventana *curses*, apoyando un
conjunto de atajos de teclado re-ensamblando estos de Emacs (esto,
también de *Netscape Navigator*, BBedit 6.x, FrameMaker, y muchos
otros programas).  Los módulos también proveen una función de dibujo
de rectángulo útil para enmarcar las cajas de texto o para otros
propósitos.

El módulo "curses.textpad" define la siguiente función:

curses.textpad.rectangle(win, uly, ulx, lry, lrx)

   Dibuja un rectángulo.  El primer argumento debe ser un objeto de
   ventana, los argumentos restantes son coordenadas relativas para
   esa ventana.  El segundo y tercer argumento son las coordenadas 'x'
   y 'y' de la esquina superior de la mano izquierda del rectángulo a
   ser dibujado, el cuarto y quinto argumento son las coordenadas 'x'
   y 'y' de la esquina inferior de la mano derecha.  El rectángulo
   será dibujado usando formularios de caracteres VT100/IBM PC en
   terminales que hace esto posible (incluyendo *xterm* y mas otro
   emulador de terminal de software).  Por otra parte será dibujado
   con guiones, barras verticales, y signos de más de ASCII.


Objeto de caja de texto
=======================

Tú puedes instanciar un objeto "Textbox" como sigue:

class curses.textpad.Textbox(win)

   Retorna un objeto *widget* de caja de texto.  El argumento *win*
   debería ser un objeto *curses* window en el cual la caja de texto
   es para ser contenido.  El cursor de la caja de texto está
   inicialmente localizado en la esquina superior de la mano izquierda
   de la ventana que lo contiene, con coordenadas "(0, 0)".  La
   bandera instanciada "stripspaces" está inicialmente encendida.

   Objeto "Textbox" tiene los siguientes métodos:

   edit([validator])

      Este es el punto de entrada que normalmente usarás.  Esto acepta
      la edición de las pulsaciones de tecla hasta que uno de las
      pulsaciones de finalización es introducida.  Si *validator* es
      suministrado, esto debe ser una función.  Será llamado para cada
      pulsación de tecla introducida con la pulsación de tecla como un
      parámetro; el comando ejecutado está hecho en el resultado.
      Este método retorna el contenido de la ventana como una cadena
      de caracteres; si se incluyen espacios en blanco en la ventana
      se ve afectado por el atributo "stripspaces".

   do_command(ch)

      Procesa un simple comando al pulsar una tecla.  Aquí está las
      funciones de tecla especiales admitidas:

      +--------------------+---------------------------------------------+
      | Pulsación de tecla | Acción                                      |
      |====================|=============================================|
      | "Control-A"        | Ve al borde izquierdo de la ventana.        |
      +--------------------+---------------------------------------------+
      | "Control-B"        | Cursor hacia la izquierda, pasando a la     |
      |                    | línea anterior si corresponde.              |
      +--------------------+---------------------------------------------+
      | "Control-D"        | Borra el carácter bajo el cursor.           |
      +--------------------+---------------------------------------------+
      | "Control-E"        | Ve al borde derecho (quita los espacios) o  |
      |                    | al final de línea (eliminar los espacios).  |
      +--------------------+---------------------------------------------+
      | "Control-F"        | Cursor hacia la derecha, pasando a la línea |
      |                    | siguiente cuando corresponda.               |
      +--------------------+---------------------------------------------+
      | "Control-G"        | Terminar, retornando el contenido de la     |
      |                    | ventana.                                    |
      +--------------------+---------------------------------------------+
      | "Control-H"        | Eliminar carácter al revés.                 |
      +--------------------+---------------------------------------------+
      | "Control-J"        | Terminar si la ventana es de 1 línea, en    |
      |                    | caso contrario, inserte una nueva línea.    |
      +--------------------+---------------------------------------------+
      | "Control-K"        | Si la línea es blanca bórrela, en caso      |
      |                    | contrario, limpie hasta el final de línea.  |
      +--------------------+---------------------------------------------+
      | "Control-L"        | Refrescar la pantalla.                      |
      +--------------------+---------------------------------------------+
      | "Control-N"        | Cursor hacia abajo; mueve hacia abajo una   |
      |                    | línea.                                      |
      +--------------------+---------------------------------------------+
      | "Control-O"        | Inserte una línea en blanco en la posición  |
      |                    | del cursor.                                 |
      +--------------------+---------------------------------------------+
      | "Control-P"        | Cursor hacia arriba; mueve hacia arriba una |
      |                    | línea.                                      |
      +--------------------+---------------------------------------------+

      Las operaciones de movimiento no hacen nada si el cursor está en
      un borde donde el movimiento no es posible. Los siguientes
      sinónimos están apoyados siempre que sea posible:

      +--------------------------+--------------------+
      | Constante                | Pulsación de tecla |
      |==========================|====================|
      | "KEY_LEFT"               | "Control-B"        |
      +--------------------------+--------------------+
      | "KEY_RIGHT"              | "Control-F"        |
      +--------------------------+--------------------+
      | "KEY_UP"                 | "Control-P"        |
      +--------------------------+--------------------+
      | "KEY_DOWN"               | "Control-N"        |
      +--------------------------+--------------------+
      | "KEY_BACKSPACE"          | "Control-h"        |
      +--------------------------+--------------------+

      Todas las otras pulsaciones de teclas están tratadas como un
      comando para insertar el carácter dado y muévase a la derecha
      (con ajuste en la línea).

   gather()

      Retorne el contenido de la ventana como una cadena de texto; si
      se incluyen espacios en blanco en la ventana se ve afectado por
      el miembro "stripspaces".

   stripspaces

      Este atributo es una bandera que controla la interpretación de
      los espacios en blanco en la ventana.  Cuando está encendido,
      los espacios en blanco al final en cada línea son ignorados;
      cualquier movimiento del cursor que lo coloque en un espacio en
      blanco final va hasta el final de esa línea, y los espacios en
      blanco finales son despejados cuando se recopila el contenido de
      la ventana.
