O prompt de terminal personalizado sobrescreve em si mesmo e geralmente se comporta incorretamente no OS X Terminal.app

1

Eu tenho o seguinte conjunto de solicitações no meu bash_profile:

export PS1='\[\e[1;94m\h:\W \u\e[1;93m\$\e[0m \]'
# default = '\h:\W \u\$ '

Infelizmente, sob certas condições, encontro problemas:

  • Em um prompt em branco, eu digito um caractere e pressiono o backspace - o prompt é apagado inteiramente e o cursor vai para a borda esquerda do terminal, em vez de simplesmente excluir o caractere

  • Se eu usar as teclas de seta para cima e para baixo para preenchimento automático de comandos que abrangem várias linhas, apenas a linha atual é alterada, mas a linha acima (após o prompt) é deixada em paz

Como posso corrigir o meu aviso para se comportar corretamente em todas as circunstâncias, como acontece com o padrão?

    
por Jake Petroules 02.12.2012 / 00:34

1 resposta

3

Você deseja o \[ ... \] em torno das partes não imprimíveis dos prompts (ou seja, as seqüências de escape), não a coisa toda. Desde que você os tenha em torno de toda a coisa, o bash não consegue descobrir quanto espaço na tela o prompt ocupa e irá redesenhar o comando no lugar errado. Aqui está o que deveria ser:

export PS1='\[\e[1;94m\]\h:\W \u\[\e[1;93m\]\$\[\e[0m\] '
    
por 02.12.2012 / 04:33