Embora seja correto que você sempre defina a variável de ambiente TERM
para corresponder ao seu tipo de terminal, e não suponha que seu tipo de terminal é xterm-*
, isso não tem nada a ver com o problema, como a variável de ambiente TERM
não tem relação com sequências de controle literais incorporadas no seu prompt.
O problema é que você está usando sub-parâmetros em sua sequência de controle, não em parâmetros. Os parâmetros são separados por ponto-e-vírgula ;
, conforme especificado em ECMA-48: 1991 § 5.4.2. Os sub-parâmetros são separados por dois pontos :
, conforme especificado no ITU-T T.416: 1993 § 13.1.8.
Seu emulador de terminal externo é aparentemente um dos que lidam com sub-parâmetros com um bodge que os trata como parâmetros. Assim, CSI
0
:
3
3
m
é tratado como SGR 0 e SGR 33. Outros emuladores de terminal são mais rigorosos sobre processar seqüências de controle corretamente ou ainda não implementam suporte a sub-parâmetros. Eles podem tratá-lo como SGR 0 com um sub-parâmetro de 33, simples SGR 0 (considerando o primeiro número) ou apenas SGR 33 (considerando o último número).
Os emuladores de terminal não suportavam sub-parâmetros em alguns anos atrás, então isso é algo que está mudando; e é de se esperar que eventualmente todos eles apóiem os sub-parâmetros corretamente. Nesse caso, o seu prompt será simplesmente universalmente errado. ☺
Pessoalmente, eu prefiro o shell Z, onde é possível usar seqüências como%F{yellow}
em um prompt sem ter que se preocupar com o que são as seqüências de controle, acertando-as e marcando-as como não-espaçadas.