Erro de prompt do Bash ao pressionar a seta para cima

2

Eu escrevi este aviso legal e colorido para o meu terminal OS X:

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ []/'
}

export PS1="\e]2;\w\a\e[1;30;1m\][\u@\[3[0;36m\]\h\e[1;30;1m\]:\[3[0;35m\]\w\e[1;30;1m\]] \[3[0;31m\](\t) \[3[0;33m\]\$(parse_git_branch)\n\[3[0m\]\e[1;30;1m\]\$\[\e[0m\]"

Eu source ~/.bash_profile e isso funciona bem. exceto quando eu uso a seta para cima para navegar na história eu tenho uma coisa estranha acontecendo.

basicamente o começo do comando source ~/.bash_profile no histórico, torna-se parte do prompt. quando eu ctrl+c ou enter ele retorna ao normal, mas assim que eu ver o histórico do comando source , o prompt muda novamente.

Veja um exemplo em que vi o histórico e, em seguida, ctrl+u e digite ls :

[user@host:~/Documents] (14:01:40)  [branch]
$source ~/.ls

Alguma pista sobre isso?

    
por user72464 31.12.2013 / 15:05

1 resposta

5

Você tem a idéia completamente banyanxed do que foi impresso e o que ele tem que apagar / reescrever, pois exibe o histórico de comandos e permite que você edite a linha de comando. Isso é porque você fez um hash real desse prompt.

  • Use \e ou 3 de forma consistente para sua própria sanidade.
  • Faça com que seus pares de não aninhamento coincidam com \[ e \] .
  • Certifique-se de que todas sequências não impressas estejam em \[ e \] (e que, inversamente, todas as sequências de impressão não sejam).

(É por isso que eu pessoalmente prefiro o Z Shell e seu mecanismo alternativo de expansão de prompt para quando eu quiser prompts coloridos malucos. sabe que coisas como %F{green} não são sequências de impressão, sem para ser informado, e também funciona as seqüências de escape corretas de terminfo , sem tê-los conectados.

    
por 31.12.2013 / 15:48

Tags