Domanda

hey ragazzi ho visto le app della console stampare i colori e ho visto app come ffmpeg stampare il testo su se stesso anziché una nuova riga. Come si stampa su una linea esistente? voglio visualizzare i fps nella mia app della console in alto o in basso e avere stampe regolari andare lì e scorrere normalmente

operativa -Editazione- Ho bisogno di questo per Windows, ma questo è pensato per essere multipiattaforma, quindi alla fine avrò un'implementazione di Linux e Mac

È stato utile?

Soluzione

Esistono due semplici possibilità che funzionano su Linux e Windows, ma solo per una riga:

  • printf (" \ b "); tornerà per un carattere, quindi potresti contare quanti caratteri vuoi backspace e sparare in un ciclo, o sai che scrivi solo n numeri e fallo come
    printf("\b\b\b\b\b\b\b\b\b\b");
  • printf (" testo da sovrascrivere dal prossimo printf \ r "); questo restituirà il cursore all'inizio della riga, quindi qualsiasi stampa successiva lo sovrascriverà. Assicurati di scrivere una stringa della stessa lunghezza o più lunga in modo da sovrascriverla interamente.

Se vuoi riscrivere più righe, non c'è niente di portatile come ncurses , c'è lib su questo praticamente su ogni sistema operativo e non devi occuparti delle differenze ANSI.

modifica: aggiunto il collegamento alla pagina wikipedia di ncurses, offre una panoramica e un'introduzione eccezionali, nonché un elenco di collegamenti e forse una traduzione nella lingua preferita

Altri suggerimenti

Dai un'occhiata a ncurses. Ha collegamenti per la maggior parte dei linguaggi di scripting.

Puoi usare '\ r' invece di '\ n' .

Il carattere ASCII numero 8 (A.K.A. Ctrl-H, BS o Backspace) consente di eseguire il backup di un carattere. Il carattere ASCII numero 13 (A.K.A Ctrl-M, CR o ritorno a capo) restituisce il cursore all'inizio della riga.

Se lavori in C prova putchar (8); e putchar(13);

La magia dei colori, la localizzazione e il bliking del cursore e così via sono dentro Codici di escape ANSI . Qualsiasi console di testo in grado di gestire i codici ANSI può usarli semplicemente stampandoli su console (ovvero mediante echo in uno script bash o funzione printf () in C).

I terminali Unix supportano sequenze di escape ANSI e il mondo di Windows era utilizzato per supportarli ai vecchi tempi di MS-DOS, ma il supporto della console multibyte ha posto fine a questo. Ulteriori informazioni qui . Tuttavia ci sono altri modi per uscire solo dalle sequenze ANSI stampando disponibile su Windows . Inoltre, se hai Cygwin installato sul tuo computer Windows, i codici ANSI funzionano perfettamente come su qualsiasi terminale Unix.

Molte persone menzionano la libreria Ncurses che è di fatto lo standard per qualsiasi applicazione basata su testo simile a una gui. Ciò che questa libreria fa è nascondere tutte le differenze terminali (Windows / Unix) per rappresentare le stesse informazioni il più possibile identiche su tutte le piattaforme, anche se per esperienza personale ti dico che non è sempre vero (ovvero cornici di finestre di testo tipiche cambia perché i caratteri speciali non sono disponibili in tutte le codifiche dei caratteri). La controparte dell'uso di ncurses è che si tratta di un'API completa ed è molto più difficile iniziare con essa piuttosto che scrivere semplicemente alcune sequenze di escape ANSI per cose semplici come cambiare il colore del carattere, pulire lo schermo o spostare il cursore in modo casuale posizione.

Per completezza, incollo un esempio di utilizzo della sequenza ANSI su Linux che cambia il prompt in blu e mostra la data:

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

Puoi utilizzare Ncurses -

  Il pacchetto

ncurses è una libreria di subroutine per la schermatura e la gestione degli eventi di input indipendenti dal terminale che presenta un modello di schermo di alto livello al programmatore, nascondendo le differenze tra i tipi di terminali e facendo l'ottimizzazione automatica dell'output per cambiare uno schermo di testo in un altro

A seconda della piattaforma su cui stai sviluppando c'è probabilmente un'API più potente che potresti usare, piuttosto che vecchi codici di controllo ASCII.

es. Se stai lavorando su Win32 puoi effettivamente manipolare direttamente il buffer dello schermo della console.

Un buon punto di partenza potrebbe essere qui http://msdn.microsoft.com/en-us /library/ms683171(VS.85).aspx

Ho cercato funzioni / API simili che mi permettessero di accedere alla console come qualcosa di diverso da un flusso di testo per altre piattaforme. Non ho ancora trovato nulla, ma, di nuovo, non ho cercato così tanto.

Spero che sia d'aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top