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

0

Aqui está o meu prompt do bash; Estou usando Sequências de escape ANSI

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

# Set the terminal title to the current working directory.
PS1="\[3]0;\wreset="3[0m";
blue="3[38;5;20m";
cyan="3[38;5;38m";
green="3[38;5;35m";
yellow="3[38;5;227m";
white="3[38;5;250m";

# Set the terminal title to the current working directory.
PS1="\[3]0;\w%pre%7\]";
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;
7\]"; 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 ao calcular o tamanho do prompt. Isso acontece tanto localmente no OSX, e quando SSHing em um servidor Ubuntu (no OSX e no Windows através do PuTTY)

Por exemplo, isso acontece. Eu digitei primeiro "git add [filename]" com a conclusão da tabulação, então eu pressionei a tecla "Home" para voltar para a frente da linha e substituir "git add" por "vi". Como você pode ver, está muito confuso.

Alémdisso,seeuclicarem"End" para chegar ao fim da linha, será preciso passar pelo ".php" com vários espaços em branco.

Isso acontece tanto ao editar uma nova linha quanto ao editar uma linha no meu histórico (usando a seta para cima. Ela é exibida corretamente, mas assim que eu usar as teclas de seta ou Início / Fim, ela estraga)

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

    
por andrewtweber 02.11.2015 / 22:40

1 resposta

2

Esta linha

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

não tem os marcadores \[ e \] usados pelo bash para dizer que não conta as colunas para cada caractere incluído. Se não for dito o contrário, assume que os caracteres imprimíveis devem ser contados.

Para discussão:

por 02.11.2015 / 23:14