Executando verificação de segurança...
1

Postagem excelente, principalmente por ir lá nos tempos das máquinas de escrever e das primeiras impressoras.

Isso me fez lembrar de um contexto específico onde o LF não faz sentido, mas o CR sim:

Em sistemas embarcados, é muito comum utilizarmos aqueles displays de 1 linha por X caracteres, para exibir informações básicas em texto (o rádio do meu automóvel mesmo possui um display desse tipo). Nessa situação, não existe o comando de avançar linha, mas o retorno do ponteiro de caracteres é essencial para limpar e escrever novos caracteres.

Outro caso em que o CR sozinho é muito utilizado é no terminal de comandos (Linux/Mac) ou cmd/PowerShell (Windows), para substituir textos já impressos na tela.

Carregando publicação patrocinada...
1

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:

  1. acompanhar a execução, para saber se não travou; ou
  2. 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.