Como fazer: sublinhado, negrito, itálico, tachado e colorido no Gnome Terminal?
Negrito
itálico
sublinhado
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(é mono se você não pode dizer)
Como fazer: sublinhado, negrito, itálico, tachado e colorido no Gnome Terminal?
Negrito
itálico
sublinhado
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(é mono se você não pode dizer)
Respostas:
Os terminais e emuladores ANSI / VT100 não podem apenas exibir texto em preto e branco; eles podem exibir cores e textos formatados graças às seqüências de escape. Essas seqüências são compostas pelo caractere Escape (geralmente representado por "^ [" ou "Esc"), seguido por outros caracteres: "Esc [FormatCodem".
No Bash, o caractere pode ser obtido com as seguintes sintaxes:
\e
\033
\x1B
Os comandos (para copiar e colar facilmente):
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"
Origem (incluindo todos os tipos de códigos de cores de primeiro plano / plano de fundo): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(no terminal gnome, na verdade) porque o sublinhado meio que se misturou no texto abaixo, dificultando a leitura e, é claro, o strike-through parecia errado. Ter uma linha lá ajudaria a localizar os comandos anteriores ao rolar para cima (o mesmo acontece com a cor).
Para estender a resposta de Sylvain, algumas funções 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 "$@"; }
Então
Algo que ainda não foi abordado é a combinação de dois ou três parâmetros, por exemplo, negrito e sublinhado , em uma cor predefinida. Isso é alcançado por uma sintaxe de três vias, por exemplo:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
fará com que "este é um teste" seja impresso em amarelo ( 33m
), itálico ( 3m
) E sublinhado ( 4m
).
Note que é não necessário repetir o \e[
tempo todo.
Observe também que (da mesma forma que Sylvain) também adicionei um \e[0m
para redefinir as configurações todas as vezes, porque, caso contrário, a cor amarela e o estilo da fonte permanecerão ativos no terminal! Escusado será dizer que você absolutamente precisa tomar cuidado para que eles sejam redefinidos nos scripts, porque os usuários que usam seus scripts podem não gostar se seu script modificar permanentemente as configurações de cor + estilo no terminal!
O GNOME Terminal 3.28 (VTE 0.52), estreando no Ubuntu 18.04 LTS, adiciona suporte para mais alguns estilos, incluindo sublinhados encaracolados e coloridos como visto em Kitty, overline como visto no Konsole e, finalmente, também o atributo de todos os amados ou odiados pelo piscar de olhos.
Eles também funcionam automaticamente em qualquer outro emulador de terminal baseado em VTE (por exemplo, Tilix, Terminator, Xfce4-terminal, Guake etc.), considerando que o VTE está no mínimo na versão 0.52.
Aqui está uma lista demonstrando as seqüências de escape padrão, bem como as adições do GNOME Terminal (VTE). Observe que, para cada sequência de abertura, também estou mostrando apenas a sequência de fechamento dessa propriedade, em vez da genérica \e[m
ou \e[0m
que desativa todos os modos especiais.
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'
(*) Os valores de cores reais para sublinhados são ligeiramente aproximados.
E um pouco estranho que não se encaixa nessa imagem, já que é mais uma funcionalidade do que um estilo, mas provavelmente vale a pena mencionar aqui, é o suporte ao hiperlink co-projetado com o iTerm2, disponível desde o GNOME Terminal 3.26 (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Substitua essas seqüências 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" e "man tput" para obter descrições completas desses comandos.
Exemplo:
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"
}