viernes, 29 de enero de 2016

Moviendo el cursor

Los códigos de escape pueden ser usados para posicionar el cursor. Se usa comúnmente para proporcionar un reloj o algún otro tipo de información en una localización diferente de la pantalla, como en la esquina superior cada vez que se dibuja el prompt. Aquí tenemos una lista de los códigos de escape que posicionan el cursor:

Tabla 13-4: Secuencias de escape de movimiento del cursor
Código de escape Acción
\033[l,cH Mueve el cursor a la línea l y columna c
\033[nA Mueve el cursor arriba n lineas
\033[nB Mueve el cursor abajo n lineas
\033[nC Mueve el cursor hacia delante n caracteres
\033[nD Mueve el cursor hacia atrás n caracteres
\033[2J Limpia la pantalla y mueve el cursor a la esquina superior izquierda (línea 0, columna 0)
\033[K Limpia desde la posición del cursor hasta el final de la línea actual
\033[s Almacena la posición actual del cursor
\033[u Recupera la posición del cursor almacenada

Usando los códigos anteriores, construiremos un prompt que dibuje una línea roja arriba de la pantalla conteniendo un reloj (dibujado en texto amarillo) cada vez que se muestre el prompt. El código para el prompt es esta cadena de aspecto formidable:

PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "

Echemos un vistazo a cada parte de la cadena para ver que hace:

Tabla 13-5: Desglose de cadenas de prompt complejas
Secuencia Acción
\[ Comienza una secuencia de caracteres no imprimibles. El propósito de esto es permitir que bash calcule apropiadamente el tamaño del prompt visible. Sin un calculo preciso, las funciones de edición de la línea de comandos no pueden posicionar el cursor apropiadamente.
\033[s Almacena la posición del cursor. Se necesita para volver a la ubicación del prompt después de que la barra y reloj hayan sido dibujados en la parte superior de la pantalla. Ten en cuenta que ciertos emuladores de terminal no soportan este código.
\033[0;0H Mueve el cursor a la esquina superior izquierda, que es la línea 0, columna 0.
\033[0;41m Establece el color de fondo a rojo.
\033[K Borra desde la posición actual del cursor (la esquina superior izquierda) al final de la línea. Como el color de fondo es ahora rojo, la línea se borra con ese color creando nuestra barra. Ten en cuenta que borrar hasta el final de la línea no cambia la posición del cursor, que permanece en la esquina superior izquierda.
\033[1;33m Establece el color de texto en amarillo
\t Muestra la hora actual. Como es un elemento “imprimible”, lo incluimos todavía dentro de la porción no imprimible del prompt, ya que no queremos que bash incluya el reloj cuando calcule el tamaño real del prompt mostrado.
\033[0m Apaga el color. Afecta tanto al texto como al fondo.
\033[u Recupera la posición del cursor salvado anteriormente.
\] Fin de la secuencia de caracteres no imprimibles.
<\u@\h \W>\$ Cadena de prompt.

No hay comentarios:

Publicar un comentario