Como fazer: sublinhado, negrito, itálico, tachado, cor, plano de fundo e tamanho no Terminal Gnome?

58

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

Cor

background

font <(é mono se você não pode dizer)

Tamanho

Akiva
fonte
11
E o que exatamente quer mudar? O prompt, o texto digitado, a saída dos seus comandos?
Radu Rădeanu 26/09
exportar PS1, na verdade. Embora eu também goste de eco básico.
Akiva
11
Se suportasse "Desmaiar", eu trocaria. :(
Jürgen A. Erhard

Respostas:

75

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

insira a descrição da imagem aqui

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

Sylvain Pineau
fonte
Adicionei mais três para tamanho, fonte e plano de fundo. Isso é possível?
Akiva
11
@ Akiva Você pode alterar facilmente a cor de fundo (consulte a seção dedicada ). Quanto ao tamanho, acho que não é possível. Para fonte, a única configuração é um valor gconf global ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau
11
@dashesy: ​​de acordo com en.wikipedia.org/wiki/ANSI_escape_code , 53 deve fazer o overline. Mas no meu terminal é não faz nada.
Sylvain Pineau
11
@egmont Lembro que queria usá-lo 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).
dashesy
11
@dashesy Obrigado, é realmente um caso de uso bem legal :) O progresso do terminal do Gnome é rastreado aqui .
egmont
26

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

insira a descrição da imagem aqui

glenn jackman
fonte
20

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

erro de sintaxe
fonte
16

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[mou \e[0mque 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\\'

Aqui está uma captura de tela demonstrando o resultado: Renderização no terminal gnome 3.28

Egmont
fonte
2
Uma captura de tela do resultado seria adorável para aqueles que não possuem essas versões do gnome-terminal / vte.
Marius Gedminas
@MariusGedminas Concluído.
precisa
Resposta incrível! Obrigado por reservar um tempo para coletar tudo isso! Gostaria de saber se eles também funcionam no iTerm2 (tentará verificar isso por mim em breve ...)
filbranden
2

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

FCA
fonte