Muito obrigado!
Legal você citar esses contextos de uso do CR sem o LF!
Só vale lembrar que "apagar a linha" não faz parte da função original do CR, que é apenas reposicionar o cabeçote (ou cursor) no início da linha. Em um editor de textos, seria algo como a funcionalidade da tecla "Home".
Nada impede que algum equipamento ou software implemente algo assim, que além de reposicionar, apaga a linha, mas seria uma adaptação. Não havendo nenhum problema nisso.
Aproveito para falar de mais um caractere de comando: o BS
Os exemplos de contexto que você trouxe me fizeram lembrar de um recurso que já utilizei.
Ao fazer uma rotina demorada executada no console, as vezes eu queria:
- acompanhar a execução, para saber se não travou; ou
- saber quanto tempo faltava para a rotina chegar ao fim.
No primeiro caso já utilizei a ideia de imprimir os caracteres "-|/", um de cada vez, em sequência e na mesma posição da tela, de modo a "parecer" (com boa vontade) uma "hélice" girando. Enquanto estiver girando, sei que o programa não "travou".
Para fazer isso eu não utilizava o comando CR, mas sim o BS.
- BS: Back-space, que significa "retornar um carectere"; é o caractere 8, 0x08, também representado por \b.
Obs.: Assim como o comando CR, o BS, a princípio, apenas reposiciona, não apaga nada. Quando, nos editores de texto, decidiram que o comando back-space deveria apagar o caractere anterior, além de voltar uma posição, foi uma adaptação da ideia original. Muito boa por sinal!
Se você tiver o Python 3 em sua máquina pode verificar a primeira ideia citada acima, utilizando o modo interativo.
Digite python3
e cole o seguinte código:
import time
def helice(contador):
print("Executando ", end="", flush=True)
posicoes = "-\|/"
bs = '\b'
for i in range(contador):
print(posicoes[i%4], end="", flush=True)
time.sleep(0.1) # aguarda 0,1 segundos, simulando demora de processamento
print(bs, end="", flush=True)
print(" ")
helice(30) # para ver a hélice rodando por 3 segundos
Quanto à segunda ideia citada acima, o avô das barras de progresso, a ideia é que, se sabemos quantas vezes uma tarefa será executada, então poderiamos imprimir um contador regressivo.
Segue código exemplo:
import time
def regressivo(contador):
print("Aguarde ", end="", flush=True)
tamanho = len(str(contador))
bs = '\b'*tamanho
for i in range(contador, 0, -1):
print(f"{i:{tamanho}}", end="", flush=True)
time.sleep(0.1) # aguarda 0,1 segundos, simulando demora de processamento
print(bs, end="", flush=True)
print(f"{0:{tamanho}}")
regressivo(30) # para ver o contador regressivo iniciando em 30
Perceba que, propositalmente, a informação de execução não aparece no início da linha, o que poderia remeter à ideia do CR.
Obs.: Os códigos python acima foram feitos apenas para esta demonstração de uso do BS.