O Bash não calcula o tamanho do prompt corretamente

3

Eu pesquisei bastante sobre esse problema e encontrei alguns problemas relacionados, como este: Terminal não empacotando corretamente .

Meu problema é que o bash não calcula o comprimento do prompt corretamente, o que estraga quando faço coisas como ctrl - r ou para percorrer o histórico. É basicamente assim que deve ficar (sem cores).

✔ name@machine ~

01:09 $

Quando, por exemplo, rola os comandos anteriores com a seta para cima, algum caractere fica preso no prompt:

✔ name@machine ~

01:09 $m

Às vezes, também tenho outro comportamento estranho, como se algum prompt fosse sobrescrito (tudo desaparece quando eu o recarrego). Meu prompt é assim:

GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"

GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "

Eu uso algo chamado git-bash-prompt : > link >.

Acho que o que está atrapalhando é a variável de tempo, que é definida em outro arquivo:

Time12a="\$(date +%H:%M)"

Eu tentei os dois \[$Time12a\] e $Time12a em GIT_PROMPT_END_USER , mas nenhum deles parece funcionar. Meu palpite é que o bash calcula errado porque $Time12a representa 5 caracteres (hh: mm).

Como o bash calcula a duração disso? É possível definir explicitamente o comprimento do bash? Respostas muito apreciadas!

    
por Mattias 22.07.2015 / 01:27

1 resposta

4

Então eu descobri o que estragou tudo, e não era o que eu esperava:)

Na verdade, foi o \ [$ ResetColor \] que bash por algum motivo usado para contar o comprimento um passo à frente (bash pensei que meu prompt foi um passo mais).

A variável foi definida por "bash-git-prompt" junto com todas as outras cores (veja o link para o git-repo na pergunta se você quiser ver). De qualquer forma, a correção foi fácil. Acabei de ultrapassar a definição deles com os meus:

ResetColor=$(tput sgr0)

Fixo!

(Apenas se alguém também está tendo este problema, eu já anulei todas as outras cores que usei com minhas próprias definições usando $ COLOR = $ (tput setaf X) onde COLOR é a cor que você quer e X é aquele número xterm-256 da cor.)

    
por 22.07.2015 / 02:12

Tags