problema com códigos de cores de 256 bits no prompt do bash

problema com códigos de cores de 256 bits no prompt do bash

Aqui está meu prompt do bash; estou a usarSequências de escape ANSI

reset="\033[0m";
blue="\033[38;5;20m";
cyan="\033[38;5;38m";
green="\033[38;5;35m";
yellow="\033[38;5;227m";
white="\033[38;5;250m";

# Set the terminal title to the current working directory.
PS1="\[\033]0;\w\007\]";
PS1+="\[${yellow}\]\u"; # username
PS1+="\[${white}\]@";
PS1+="\[${green}\]\h"; # host
PS1+="\[${white}\]:";
PS1+="\[${cyan}\]\W"; # working directory
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color)
export PS1;

Parece fantástico, mas às vezes o terminal parece ter problemas para calcular a duração do prompt. Isso acontece localmente no OSX e durante o SSH em um servidor Ubuntu (no OSX e no Windows por meio do PuTTY)

Por exemplo, isso acontece. Primeiro digitei "git add [nome do arquivo]" com conclusão da guia, depois apertei a tecla "Home" para voltar ao início da linha e substituí "git add" por "vi". Como você pode ver, está bastante confuso.

insira a descrição da imagem aqui

Além disso, se eu clicar em "Fim" para chegar ao final da linha, passarei do ".php" com vários espaços em branco.

insira a descrição da imagem aqui

Isso acontece tanto ao editar uma nova linha quanto ao editar uma linha no meu histórico (usando a seta para cima. Ele é exibido corretamente, mas assim que eu uso as teclas de seta ou Home/End ele bagunça)

Pressione Ctrl + L para limpar, não resolve, basicamente tenho que começar de novo e redigitar a linha inteira para evitar problemas.

Responder1

Está linha

PS1+="\$(prompt_git \"${blue}\")"; # Git repository details

não possui os marcadores \[e \]usados ​​pelo bash para instruí-lo a não contar colunas para cada caractere incluído. Se não for informado o contrário, assume que os caracteres imprimíveis devem ser contados.

Para discussão:

informação relacionada