lunes, 3 de diciembre de 2018

Dando color al terminal #2

Como vimos en una entrada anterior, dando color al terminal, el terminal de Linux no siempre ha de ser negro sobre blanco. Hoy vamos a ver más formas de dar formato al texto del terminal.

Texto en negrita

Haciendo uso de los caracteres de escape, se puede activar el modo negrita. De esta forma, cualquier cosa que se escriba por el terminal saldrá con este formato sumado al color que se tuviera en el momento de la activación. Es decir, si antes de activar la negrita se escribía en rojo, se tendrá el modo rojo negrita.
El código de escape es el siguiente:
\033[1m
Veamos un ejemplo práctico:
#!/usr/bin/env bash

function colorFuente(){
        case $1 in
                negro) echo -en "\033[30m" ;;
                rojo) echo -en "\033[31m" ;;
                verde) echo -en "\033[32m" ;;
                amarillo) echo -en "\033[33m" ;;
                azul) echo -en "\033[34m" ;;
                lila) echo -en "\033[35m" ;;
                cian) echo -en "\033[36m" ;;
                blanco) echo -en "\033[37m" ;;
        esac
}

function negrita(){
        echo -en "\033[1m"
}

function normal(){
        echo -en "\033[0m"
}

echo "Este "`colorFuente negro`"es "`colorFuente rojo`"un "`colorFuente verde`"estupendo "`colorFuente amarillo`"ejemplo "`colorFuente azul`"de "`colorFuente lila`"colores "`colorFuente cian`"muy "`colorFuente blanco`"variados"

negrita
echo "Este $(colorFuente negro)es $(colorFuente rojo)un $(colorFuente verde)estupendo $(colorFuente amarillo)ejemplo $(normal)$(colorFuente azul)de $(colorFuente lila)colores $(colorFuente cian)en $(colorFuente blanco)negrita"
Como se observa en este script, se ha usado un segundo código de escape para volver al “modo normal”, esto es, texto en negro sin estilos. El código es el siguiente:

\033[0m
Y el resultado por pantalla el mostrado a continuación:




Texto en cursiva

El siguiente estilo a mostrar es la cursiva. El código de escape usado es el siguiente:
\033[3m
Ampliando el script, creamos una nueva función para activar este modo:
#!/usr/bin/env bash

function colorFuente(){
    case $1 in
        negro) echo -en "\033[30m" ;;
        rojo) echo -en "\033[31m" ;;
        verde) echo -en "\033[32m" ;;
        amarillo) echo -en "\033[33m" ;;
        azul) echo -en "\033[34m" ;;
        lila) echo -en "\033[35m" ;;
        cian) echo -en "\033[36m" ;;
        blanco) echo -en "\033[37m" ;;
    esac
}

function negrita(){
    echo -en "\033[1m"
}

function cursiva(){
    echo -en "\033[3m"
}

function normal(){
    echo -en "\033[0m"
}

echo "Este "`colorFuente negro`"es "`colorFuente rojo`"un "`colorFuente verde`"estupendo "`colorFuente amarillo`"ejemplo "`colorFuente azul`"de "`colorFuente lila`"colores "`colorFuente cian`"muy "`colorFuente blanco`"variados"

negrita
echo "Este $(colorFuente negro)es $(colorFuente rojo)un $(colorFuente verde)estupendo $(colorFuente amarillo)ejemplo $(normal)$(colorFuente azul)de $(colorFuente lila)colores $(colorFuente cian)en $(colorFuente blanco)negrita"

cursiva
echo "Y este otro $(colorFuente verde)en $(colorFuente rojo)rojo cursiva"
Dando la siguiente salida por pantalla:





Texto Subrayado

Para terminar, vamos a ver cómo activar el modo subrayado. Su código de escape es el siguiente:

\033[4m
Vamos a ampliar de nuevo el script con una función para activar este modo, y vamos a combinar varios modos al mismo tiempo para comprobar que no son excluyentes:
#!/usr/bin/env bash

function colorFuente(){
    case $1 in
        negro) echo -en "\033[30m" ;;
        rojo) echo -en "\033[31m" ;;
        verde) echo -en "\033[32m" ;;
        amarillo) echo -en "\033[33m" ;;
        azul) echo -en "\033[34m" ;;
        lila) echo -en "\033[35m" ;;
        cian) echo -en "\033[36m" ;;
        blanco) echo -en "\033[37m" ;;
    esac
}

function negrita(){
    echo -en "\033[1m"
}

function cursiva(){
    echo -en "\033[3m"
}

function subrayado(){
    echo -en "\033[4m"
}

function normal(){
    echo -en "\033[0m"
}

echo "Este "`colorFuente negro`"es "`colorFuente rojo`"un "`colorFuente verde`"estupendo "`colorFuente amarillo`"ejemplo "`colorFuente azul`"de "`colorFuente lila`"colores "`colorFuente cian`"muy "`colorFuente blanco`"variados"

negrita
echo "Este $(colorFuente negro)es $(colorFuente rojo)un $(colorFuente verde)estupendo $(colorFuente amarillo)ejemplo $(normal)$(colorFuente azul)de $(colorFuente lila)colores $(colorFuente cian)en $(colorFuente blanco)negrita"

cursiva
echo "Y este otro $(colorFuente verde)en $(colorFuente rojo)rojo cursiva"

subrayado
echo "Muestra de texto $(colorFuente azul)subrayado cursiva $(negrita)y subrayado, negrita con cursiva"
Quedando de la siguiente forma: