2 votos

¿Cómo hacer más fácil la lectura de la ruta codificando por colores cada `/` (barra oblicua)?

Me gustaría conseguir otra configuración para el camino, más un detalle que una petición real:

A continuación un ejemplo de zsh PROMPT :

prompt zsh

Para facilitar la lectura de la ruta, me gustaría cambiar dinámicamente el color, excepto la primera barra (en ~/ ) de cada barra en el camino en azul (más precisamente %F{75} ) por el color rosa ( %F{13} ) Pero me gustaría poder usar con un camino más profundo, que me ayudara a ubicarme mejor en el árbol.

En la imagen de arriba, esto sería sólo una barra rosada cambiada ( Phd_2019_2020 / Travail_3_... ).

Aquí está mi actual PROMPT :

PROMPT='%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|%F{75}%~%F{13}|%F{7} '

¿Es posible realizar este cambio dinámico de color con zsh-5.8?

5voto

Douglas Puntos 10417

Si he entendido bien la pregunta, usted quiere que su indicador muestre el todo ruta de su directorio actual en azul pero con cada una de las barras inclinadas ("/") en rosa.

Desgraciadamente, no se puede hacer esto en su indicador.

Utilice el sistema incorporado precmd () función.

ZSH nos da una precmd que es similar a la función de Bash PROMPT_COMMAND . Permiten emitir un comando antes de que aparezca el prompt.

De todas formas tampoco recomendaría un prompt largo ya que dificulta mucho la usabilidad a la hora de introducir comandos. Poner el directorio completo por encima de su aviso es mucho mejor desde el punto de vista de la interfaz de usuario. El siguiente código lo consigue.

Simplemente ponga lo siguiente en su ~/.zprofile .

precmd ()  { printf "\n"; pwd | awk -F "/" ' {for (i=1; i<=NF; i++) printf "\033[01;34m"$i"\033[38;5;206m/"; printf"\n" }' }

Y aquí están los resultados:

iTerm Window with precmd results

La captura de pantalla de arriba es mi ventana de iTerm mostrando que he atravesado las profundidades de mi /Applications/Firefox.app con el directorio actual formateado en azul y separado por barras rosas.


Cómo funciona...

He ampliado la línea premcmd de arriba para que sea multilínea y añadimos algunas variables para que podamos ver mejor lo que está pasando.

precmd() {
printf "\n";
pwd | awk -F "/" '{ blue="\033[01;34m"; \
                    pink="\033[38;5;206m"; \
                    for (i=1; i<=NF; i++) \
                      printf blue $i pink "/"; \
                      printf "\n"
                   }'
} 

Esto es lo que significa:

  • printf "\n" imprime una nueva línea char. Esto es por estética.
  • pwd devuelve el nombre del directorio de trabajo ( man pwd ) que es entonces canalizado ("|") al siguiente comando, awk ( man awk ).
  • -F "/" define el separador de campos a la barra diagonal; awk es un espacio. Mantuve mi aviso a su configuración corta y sucinta.

Dentro del "programa" awk, delimitado por las llaves ("{" y "}") tenemos lo siguiente:

  • variables blue y pink se ajustan a su Códigos de escape ANSI \033[01;34m y \033[38;5;206m respectivamente.
  • Luego tenemos un bucle for/do que itera por cada uno de los campos que awk ha procesado. NF es el número total de campos.
  • printf blue $i y printf pink "/" imprime el nombre del directorio en azul y la barra diagonal en rosa

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X