¿Cómo hacer: subrayado, negrita, cursiva, tachado y color en Gnome Terminal?
Negrita
Itálico
subrayar
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(es mono si no se nota)
¿Cómo hacer: subrayado, negrita, cursiva, tachado y color en Gnome Terminal?
Negrita
Itálico
subrayar
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(es mono si no se nota)
Respuestas:
Los terminales ANSI / VT100 y los emuladores de terminal no solo pueden mostrar texto en blanco y negro; Pueden mostrar colores y textos formateados gracias a las secuencias de escape. Esas secuencias están compuestas por el carácter de Escape (a menudo representado por "^ [" o "Esc") seguido de algunos otros caracteres: "Esc [FormatCodem".
En Bash, el personaje se puede obtener con las siguientes sintaxis:
\e
\033
\x1B
Los comandos (para copiar y pegar fácilmente):
echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"
Fuente (incluidos todos los tipos de códigos de color de primer plano / fondo): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(en gnome-terminal en realidad) porque el subrayado se mezclaba en el texto debajo, lo que hacía que fuera más difícil de leer y, por supuesto, el tachado parecía incorrecto. Tener una línea allí ayudaría a detectar los comandos anteriores al desplazarse hacia arriba (también lo hace el color).
Para extender la respuesta de Sylvain, algunas funciones auxiliares:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Entonces
Algo que aún no se ha cubierto es la combinación de dos o tres parámetros, por ejemplo, negrita y subrayado , en un color predefinido. Esto se logra mediante una sintaxis de 3 vías, por ejemplo:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
hará que "esto es una prueba" se imprima en color amarillo ( 33m
), cursiva ( 3m
) Y subrayado ( 4m
).
Tenga en cuenta que es no necesario repetir el \e[
cada vez.
Tenga en cuenta también que (al igual que Sylvain) también agregué una \e[0m
para restablecer la configuración cada vez, porque de lo contrario el color amarillo y el estilo de fuente permanecerán activos en la terminal. ¡No hace falta decir que debe tener cuidado para que estos se restablezcan en los scripts, porque los usuarios que usan sus scripts pueden no gustarle si su script modifica permanentemente su configuración de color + estilo en la terminal!
El Terminal 3.28 de GNOME (VTE 0.52), que se estrenó en Ubuntu 18.04 LTS, agrega soporte para algunos estilos más, incluyendo subrayados rizados y de colores como se ve en Kitty, se sobrepasa como se ve en Konsole, y finalmente el atributo de parpadeo muy querido o odiado por todos.
Estos también funcionan automáticamente en cualquier otro emulador de terminal basado en VTE (por ejemplo, Tilix, Terminator, Xfce4-terminal, Guake, etc.), dado que VTE tiene al menos la versión 0.52.
Aquí hay una lista que muestra las secuencias de escape estándar, así como las adiciones del Terminal GNOME (VTE). Tenga en cuenta que para cada secuencia de apertura también estoy mostrando la secuencia de cierre de esa propiedad solamente, en lugar de la genérica \e[m
o \e[0m
que deshabilita todos los modos especiales.
echo -e '\e[1mbold\e[22m'
echo -e '\e[2mdim\e[22m'
echo -e '\e[3mitalic\e[23m'
echo -e '\e[4munderline\e[24m'
echo -e '\e[4:1mthis is also underline (new in 0.52)\e[4:0m'
echo -e '\e[21mdouble underline (new in 0.52)\e[24m'
echo -e '\e[4:2mthis is also double underline (new in 0.52)\e[4:0m'
echo -e '\e[4:3mcurly underline (new in 0.52)\e[4:0m'
echo -e '\e[5mblink (new in 0.52)\e[25m'
echo -e '\e[7mreverse\e[27m'
echo -e '\e[8minvisible\e[28m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[29m'
echo -e '\e[53moverline (new in 0.52)\e[55m'
echo -e '\e[31mred\e[39m'
echo -e '\e[91mbright red\e[39m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[39m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[39m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) (new in 0.52)\e[39m'
echo -e '\e[38:2:240:143:104mtruecolor, rarely used incorrect format (might be removed at some point)\e[39m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[39m'
echo -e '\e[46mcyan background\e[49m'
echo -e '\e[106mbright cyan background\e[49m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[49m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[49m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) (new in 0.52)\e[49m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[49m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[49m'
echo -e '\e[21m\e[58:5:42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[21m\e[58;5;42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[4:3m\e[58:2::240:143:104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58:2:240:143:104mtruecolor underline (new in 0.52) (might be removed at some point) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
(*) Los valores de Truecolor para subrayados son ligeramente aproximados.
Y un poco extraño que no encaja en esta imagen, ya que es más una funcionalidad que un estilo, pero probablemente valga la pena mencionar aquí, es el soporte de hipervínculo diseñado conjuntamente con iTerm2, disponible desde el Terminal 3.26 de GNOME (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Aquí hay una captura de pantalla que demuestra el resultado:
Reemplace estas secuencias codificadas por:
tput smul # set underline
tput rmul # remove underline
tput smso # set bold on
tput rmso # remove bold
tput setaf 1 #red
tput setaf 2 #green
...
tput cup 0 0 # move to pos 0,0
Consulte "man terminfo" y "man tput" para obtener descripciones completas de estos comandos.
Ejemplo:
function f_help
{
c_green=$(tput setaf 2 2>/dev/null)
c_reset=$(tput sgr0 2>/dev/null)
c_bold=$(tput smso 2>/dev/null)
echo "${c_bold}DESCRIPTION${c_reset} : .... ${c_green}My green text${c_reset}My plain text"
}