Impresionantes símbolos y personajes en un indicador de bash

81

Acabo de encontrar una captura de pantalla del terminal de alguien:

Captura de pantalla de una sesión que muestra un mensaje con un asterisco y una flecha

¿Hay una lista de todos los personajes que se pueden usar en un indicador de Bash, o alguien puede obtener el personaje de la estrella y la flecha derecha?

Naftuli Kay
fuente

Respuestas:

104

Puedes usar cualquier personaje imprimible, a bash no le importa. Probablemente desee configurar su terminal para admitir Unicode (en forma de UTF-8 ).

Hay muchos caracteres en Unicode, así que aquí hay algunos consejos para ayudarlo a buscar en los cuadros de Unicode:

  • Puedes intentar dibujar el personaje en Shapecatcher . Intenta reconocer un personaje Unicode en lo que dibujas.
  • Puedes intentar averiguar en qué bloque está el personaje. Por ejemplo, ese símbolo de aspecto extraño y esa estrella estarían en un bloque de símbolos misceláneos; los caracteres les gustan Ǫy ıson letras latinas con modificadores; es un símbolo matemático, y así sucesivamente.
  • Puede intentar pensar en una palabra en la descripción del personaje y buscarla en una lista de nombres y descripciones de símbolos Unicode. Gucharmap o Kcharselect pueden ayudar.

PD: En Shapecatcher, obtuve U + 2234 POR TANTO para , U + 2192 FLECHA DERECHA para , U + 263F MERCURIO para y U + 2605 ESTRELLA NEGRA para .

En un script bash, hasta bash 4.1, puede escribir un byte por su punto de código, pero no un carácter. Si desea evitar los caracteres que no son ASCII para que sea .bashrcresistente a los cambios de codificación de archivos, deberá ingresar los bytes correspondientes a estos caracteres en la codificación UTF-8. Puede ver los valores hexadecimales ejecutándose echo ∴ → ☿ ★ | hexdump -Cen un terminal UTF-8, por ejemplo, está codificado \xe2\x88\xb4en 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 bash 4.2, puede usar \useguido de 4 dígitos hexadecimales en una $'…'cadena.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
Gilles
fuente
Hmm Cuando corro echo ★ | hexdump -C1, me sale: hexdump: invalid option -- '1'. ¿Seguirá funcionando sin el 1 en la invocación?
Naftuli Kay
2
@TKKocheran Eso 1fue un error tipográfico, es solo hexdump -C(o hdpara abreviar en algunos sistemas).
Gilles
Además, podría hacer: se PS1=$'\u2234\u2192\u263f\u2605'siente más fácil de mantener :-)
mat
1
¡Shapecatcher es increíble! gracias por señalarlo
Siamore
1
@FaithReaper La \uNNNNsintaxis es una característica de las $'…'citas, no de una pronta expansión. El valor de PS1debe contener el carácter Unicode. $'\u1234'es una forma de poner el carácter Unicode en una cadena.
Gilles
12

Puede encontrar los símbolos Unicode en muchos sitios, como este: http://panmental.de/symbols/info.htm

Solo tiene que asegurarse de que su término sea compatible con UTF-8 .

jasonwryan
fuente
¿Cómo podría escapar de uno de estos personajes? Es decir\u27A4
Naftuli Kay
2
Vea la respuesta de @Gilles, o esto: stackoverflow.com/questions/602912/…
jasonwryan
Se puede ver todos los puntos de Unicode en 65000+ utf8-chartable.de (En el contexto de los valores de punto de código "UTF-8" es sinónimo de "Unicode".)
goldilocks