Símbolos e caracteres impressionantes em um prompt do bash

81

Acabei de encontrar uma captura de tela do terminal de alguém:

Captura de tela de uma sessão mostrando um prompt com um asterisco e uma seta

Existe uma lista de todos os personagens que podem ser usados ​​em um prompt do Bash, ou alguém pode obter o personagem para a estrela e a seta para a direita?

Naftuli Kay
fonte

Respostas:

104

Você pode usar qualquer caractere imprimível, o bash não se importa. Você provavelmente desejará configurar seu terminal para suportar Unicode (na forma de UTF-8 ).

Existem muitos caracteres no Unicode, então, aqui estão algumas dicas para ajudá-lo a pesquisar nos gráficos Unicode:

  • Você pode tentar desenhar o personagem no Shapecatcher . Ele tenta reconhecer um caractere Unicode no que você desenha.
  • Você pode tentar descobrir em qual bloco o personagem está. Por exemplo, aquele símbolo de aparência estranha e aquela estrela estariam em um bloco de símbolos diversos; caracteres gostam Ǫe ısão letras latinas com modificadores; é um símbolo matemático e assim por diante.
  • Você pode tentar pensar em uma palavra na descrição do personagem e procurá-la em uma lista de nomes e descrições de símbolos unicode. Gucharmap ou Kcharselect podem ajudar.

PS No Shapecatcher, obtive U + 2234 POR ISSO por , U + 2192 SETA PARA A DIREITA por , U + 263F MERCURY por e U + 2605 BLACK STAR por .

Em um script bash, até o bash 4.1, você pode escrever um byte por seu ponto de código, mas não por um caractere. Se você deseja evitar caracteres não ASCII para tornar suas .bashrcalterações na codificação de arquivos resilientes, será necessário inserir os bytes correspondentes a esses caracteres na codificação UTF-8. Você pode ver os valores hexidecimais executando echo ∴ → ☿ ★ | hexdump -Cem um terminal UTF-8, por exemplo, é codificado \xe2\x88\xb4em UTF-8.

if [[ $LC_CTYPE =~ '\.[Uu][Tt][Ff]-?8' ]]; then
  PS1=$'\\[\e[31m\\]\xe2\x88\xb4\\[\e[0m\\]\n\xe2\x86\x92 \xe2\x98\xbf \\~ \\[\e[31m\\]\xe2\x98\x85 $? \\[\e[0m\\]'
fi

Desde o bash 4.2, você pode usar \useguido de 4 dígitos hexadecimais em uma $'…'sequência.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
Gilles
fonte
Hmm. Quando eu corro echo ★ | hexdump -C1, eu recebo: hexdump: invalid option -- '1'. Ainda funcionará sem o 1 na invocação?
Naftuli Kay 02/12
2
@TKKocheran Isso 1foi um erro de digitação, é apenas hexdump -C(ou hdabreviado em alguns sistemas).
Gilles
Além disso, você pode fazer: PS1=$'\u2234\u2192\u263f\u2605'sente - se mais fácil de manter :-) #
mat Mat
1
Shapecatcher é incrível! obrigado por apontar
Siamore
1
@FaithReaper A \uNNNNsintaxe é um recurso de $'…'citação, não de expansão imediata. O valor de PS1deve conter o caractere Unicode. $'\u1234'é uma maneira de colocar o caractere Unicode em uma string.
Gilles
12

Você pode encontrar os símbolos unicode em muitos sites, como este: http://panmental.de/symbols/info.htm

Você só precisa garantir que seu termo seja compatível com UTF-8 .

jasonwryan
fonte
Como eu escaparia de um desses personagens? Ou seja\u27A4
Naftuli Kay
2
Veja a resposta do @Gilles, ou isto: stackoverflow.com/questions/602912/…
jasonwryan
Você pode ver todos 65000+ pontos Unicode em utf8-chartable.de (No contexto de valores de ponto de código "utf8" é sinônimo de "Unicode".)
goldilocks