Pergunta

consola hey caras i visto aplicativos cores impressão e aplicativos visto como texto de impressão ffmpeg sobre si mesmo, em vez de uma nova linha. Como faço para imprimir através de uma linha já existente? eu quero fps exibição no meu aplicativo de console, quer no topo ou muito inferior e têm printfs regulares ir lá e rolar normalmente

-edit- Eu preciso disso para as janelas, mas isso é para ser multiplataforma, então eu vai finalmente ter um linux e implementação mac

Foi útil?

Solução

Há duas possibilidades simples que funcionam no Linux, bem como janelas, mas apenas para uma linha:

  • printf("\b"); irá retornar para um personagem, de modo que você pode contar quantos caracteres você quer backspace e disparar isso em um loop, ou você sabe que você só escrever n números e fazê-lo como
    printf("\b\b\b\b\b\b\b\b\b\b");
  • printf("text to be overwritten by next printf\r"); isso irá retornar o cursor para o início da linha, portanto, qualquer próximo printf vai substituí-lo. Certifique-se de escrever uma série de mesmo comprimento ou mais para que você substituí-lo por completo.

Se você quer reescrever várias linhas, não há nada tão portátil como ncurses , há libs para ele em praticamente todos os sistemas operacionais, e você não tem que cuidar dos ansi-diferenças.

edit: adicionado link para ncurses wikipedia página, dá uma grande visão geral e introdução, bem como a lista de links e talvez uma tradução para o idioma preferido

Outras dicas

Confira ncurses. Ele tem ligações para a maioria das linguagens de script.

Você pode usar '\r' vez de '\n'.

O número de caracteres ASCII 8 (A.K.A. Ctrl-H, BS ou Backspace) permite fazer backup de um personagem. número de caracteres ASCII 13 (A.K.A Ctrl-M, CR ou Carriage Return) retorna o cursor no início da linha.

Se você estiver trabalhando em C putchar(8); tentativa e putchar(13);

A magia das cores, cursor localizar e bliking e assim por diante estão dentro ANSI códigos de escape . Qualquer console de texto capaz de lidar com códigos ANSI pode usá-los apenas imprimi-los para fora para console (ou seja, por meio de eco em um script ou função printf () em C).

terminais Unix suporta sequências de escape ANSI e mundo do Windows usados ??para apoiá-los de volta em velhos tempos do MS-DOS, mas o apoio consola multibyte colocar um fim a isso. Há mais informações aqui . No entanto, existem outras maneiras de sair de sequências apenas ANSI impressão disponível no Windows . Além disso, se tiver Cygwin instalado no seu Windows maching códigos ANSI funcionar tão grande como em qualquer terminal Unix.

Muitas pessoas mencionam biblioteca Ncurses que é o padrão de fato para qualquer gui-como aplicações baseadas em texto. O que esta biblioteca não é para esconder todas as diferenças terminais (sabores Windows / Unix) para representar a mesma informação o mais idêntico possível em todas as plataformas, embora a partir de minha própria experiência eu dizer-lhe isto nem sempre é verdade (ou seja, caixilhos das janelas de texto típico mudar porque os caracteres especiais não estão disponíveis em todas as codificações de caracteres). A contrapartida do uso ncurses é que é uma API completa e é muito mais difícil para começar a sair com ele do que simplesmente escrever algumas sequências de escape ANSI para coisas simples, como alterar a cor original, limpeza de tela ou em movimento de volta o cursor para um aleatório posição.

Por uma questão de exaustividade eu colar um exemplo de uso de seqüência ANSI sob Linux que muda o prompt para azul e mostra a data:

PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ "

Você pode usar Ncurses -

pacote ncurses é uma biblioteca de sub-rotina para o tratamento de pintura de tela e input-evento terminal-independente que apresenta um modelo de tela de alto nível para o programador, escondendo-se diferenças entre os tipos de terminais e fazer uma otimização automática de saída para mudar uma screenfull de texto outra

Dependendo da plataforma que você está desenvolvendo lá é provavelmente uma API mais poderosa que você pode usar, em vez de códigos de controle ASCII idade.

por exemplo. Se você está trabalhando em Win32 você pode realmente manipular o buffer diretamente a tela do console.

Um bom lugar para começar pode estar aqui http://msdn.microsoft.com/en-us /library/ms683171(VS.85).aspx

Eu tenho olhado para funções / API que permitiria me para acessar o console como algo diferente de um fluxo de texto para outras plataformas semelhantes. Não encontrei nada ainda, mas, novamente, eu não tenho olhado tão difícil.

Hope isso ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top