Diferença entre %F{color} e %{$fg[color]%} no prompt zsh

Diferença entre %F{color} e %{$fg[color]%} no prompt zsh

Percebi que existem duas maneiras de definir a cor de primeiro plano no seu zshprompt.

PROMPT='%F{blue}$'
PROMPT='%{$fg[blue]%}$'

Ambas as linhas produzirão um azul $como prompt. Existe alguma diferença entre esses dois e existe uma maneira preferida de definir seu prompt?

Se quiser especificar um código de cores, você pode fazer $F{160}ou algum outro número, mas não pode for %{$fg[160]%}. Esta é a única diferença entre essas duas opções?

Responder1

O escape direto %F{...}é tratado diretamente pelo código zsh C. Usar $fg[blue]é acessar um array associativo chamado fg. Para que isso funcione, você precisa invocar uma colorsfunção que vem com o zsh. Para prompts que também dependem da PROMPT_SUBSTopção.

Não há muita diferença em termos do que essas duas formas produzem. O primeiro é mais limpo e funciona melhor com o rastreamento do estado do terminal pelo zsh. Ele foi adicionado ao zsh em 2008, enquanto a função de cores foi adicionada em 1999. Hoje em dia, é muito improvável que você fique preso a um zsh com idade suficiente para não ter nenhum dos recursos, então não faz mais sentido continuar com o método antigo.

E como você notou, %Fpode lidar com números onde seu terminal suporta 88 ou 256 cores. Se você executar um zsh muito mais recente, também poderá especificar trigêmeos hexadecimais, como %F{#0000ff}se tivesse um terminal true-color (ou carregar o módulo zsh/nearcolor).

informação relacionada