Estou tentando criar meu próprio prompt do Powershell em $profile
.
Por enquanto, tenho o seguinte:
$ESC = [char]27
$RESET = "$ESC[0m"
$pwd = $executionContext.SessionState.Path.CurrentLocation
function prompt {
$fontColor = "2;192;192;192m"
$backColor = "2;64;96;128m"
$shdwColor = "2;32;48;64m"
$main = "$RESET$ESC[38;$fontColor$ESC[48;$backColor"
$shadow = "$RESET$ESC[38;$backColor$ESC[48;$shdwColor"
$end = "$RESET$ESC[38;$shdwColor"
# "$main $pwd $shadow $end ";
# "$main $pwd $shadow $end$RESET ";
# "$main $pwd $shadow $end$ESC[0m ";
# "$main $pwd $shadow $end$ESC[0 ";
# "$main $pwd $shadow $end $RESET";
# "$main $pwd $shadow $end $ESC[0m";
return "$main $pwd $shadow $end $ESC[0";
}
O que resulta da seguinte forma:
Quando eu digito ls
ou dir
(por exemplo), tudo funciona bem.
Entretanto, quando digito uma string, meu zero à direita (de $ESC[0
) aparece vermelho, e quando fecho a string, o zero muda para branco.
Isso também aparece quando coloco $RESET
ou $ESC[0m
em vez de $ESC[0
(mas com um "m" em vez de "0"), e quando os removo são os
que aparecem em vermelho...
Também podemos ver que no prompt padrão do Powershell, o ">" fica vermelho quando abrimos uma string:
Alguém já passou pelo mesmo problema ao fazer prompts e, se sim, como você removeu essa coloração ou como você se adaptou?
Obrigado !
É por causa do
PSReadLine
módulo. A solução é esvaziar o conjunto de caracteres que ficam vermelhos quando há um erro de análise no comando inserido antes que o usuário pressione Enter:Você pode ler mais no site Microsoft Learn Set-PSReadLineOption
Para complementar a resposta útil de Fabrice SANGA , que fornece uma solução alternativa eficaz:
O último caractere (sem espaço em branco) na sequência de caracteres do prompt que fica vermelho ocasionalmente é um recurso
PSReadLine
:Ele indica um erro do analisador devido a um erro de sintaxe no comando que está sendo digitado, fornecendo assim um feedback em tempo real ao usuário de que o comando não funcionaria se fosse enviado naquele momento.
Ao resolver o erro de sintaxe, o caractere deve retornar à sua aparência original (para indicar que o problema foi resolvido).
A solução alternativa na resposta de Fabrice evita o bug ao custo de desativar efetivamente o recurso (o que não é um problema se você não se importa com o recurso).