¿Cómo hacer: subrayado, negrita, cursiva, tachado, color, fondo y tamaño en Gnome Terminal?

58

¿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

Color

background

font <(es mono si no se nota)

Talla

Akiva
fuente
1
¿Y qué es exactamente lo que quiere cambiar? ¿El aviso, el texto que ingresas, la salida de tus comandos?
Radu Rădeanu
exportar PS1 en realidad. Aunque también me gustaría para el eco básico.
Akiva
1
Si admitiera "Faint", cambiaría. :(
Jürgen A. Erhard

Respuestas:

75

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

ingrese la descripción de la imagen aquí

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

Sylvain Pineau
fuente
Agregué tres más para tamaño, fuente y fondo. ¿Son estos posibles?
Akiva
1
@ Akiva Puede cambiar fácilmente el color de fondo (consulte la sección dedicada ). En cuanto al tamaño, no creo que sea posible. Para la fuente, la única configuración es un valor global de gconf ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau
1
@dashesy: ​​De acuerdo con en.wikipedia.org/wiki/ANSI_escape_code , 53 deberían hacer el overline. Pero en mi terminal no hace nada.
Sylvain Pineau
1
@egmont Recuerdo que quería usarlo 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).
guiones el
1
@dashesy Gracias, en realidad es un caso de uso genial :) Aquí se realiza un seguimiento del progreso del terminal de Gnomo .
egmont
26

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

ingrese la descripción de la imagen aquí

Glenn Jackman
fuente
20

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[0mpara 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!

error de sintaxis
fuente
16

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[mo \e[0mque 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: Representación en gnome-terminal 3.28

egmont
fuente
2
Una captura de pantalla del resultado sería encantadora, para aquellos de nosotros que no tenemos estas versiones de gnome-terminal / vte.
Marius Gedminas
@MariusGedminas Hecho.
egmont
Respuesta impresionante! ¡Gracias por tomarse el tiempo de recoger todo esto! Me pregunto si también funcionan en iTerm2 (intentaré comprobarlo por mí mismo en breve ...)
filbranden
2

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" }

FCA
fuente