2016-01-01 13 views
5

Stavo cercando di aggiungere colori ad alcune stringhe che devono essere visualizzate in un terminale usando il codice di escape ANSI. Finora non ho afferrato l'intero codice ASCII di escape, semplicemente provando copiando alcuni codici di escape. Quindi ha visto questo answer che ha chiesto di verificare che il programma verifichi che venga eseguito in un terminale o continua senza stringhe di polling con i codici di escape?assicurandosi che il programma sia in un terminale

risposta spiega di utilizzare una * nix funzione isatty() based che ho scoperto risiede in unistd.h che a sua volta non è stato promosso a cunistd dalla norma cpp in base alla mia comprensione che non era nello standard di c in un primo momento place.I ho provato a cercare di nuovo SO ma non sono riuscito a capire bene. Ora ho due domande a riguardo:

  • In quale ambiente (parola esatta?) Può un programma - utilizzando i codici di escape ASCII, essere eseguito che richiede un controllo iniziale? dato che sto costruendo solo per cli.
  • Quale sarebbe una soluzione adeguata in base agli standard ISO cpp per la gestione di questo problema? utilizzando unistd.h? questo si limiterebbe alle moderne pratiche di cpp?

Inoltre c'è qualcosa che dovrei leggere/capire prima di occuparmi di ansi/colori correlati?

+0

'unistd.h' è un'intestazione POSIX, che è interamente ortogonale standard C e C++. Non penso che nessuno di questi standard abbia alcuna nozione di terminale, quindi non hai altra scelta che dipendere dalle API di sistema per le funzionalità specifiche del sistema. – melak47

+0

Correlati: http://stackoverflow.com/questions/15331566/c-include-unistd-h-why-not-cunistd. –

risposta

4

Su un sistema POSIX (come Linux o OSX) la funzione isatty è effettivamente la funzione corretta per determinare se si sta eseguendo l'output su un terminale o meno.

usarlo come questa

if (isatty(STDOUT_FILENO)) 
{ 
    // Output using VT100 control codes 
} 
else 
{ 
    // Output is not a TTY, could be a pipe or redirected to a file 
    // Use normal output without control codes 
} 
+0

pipe e reindirizzamenti == bash's '|' e '>'? e cos'è VT100? le mie conoscenze sono limitate a tty, pty, shell e gui-terminali :( –

+2

Dovresti usare la libreria termcap per ottenere sequenze di escape, piuttosto che codificare le sequenze per un particolare terminale, ma tutti i moderni emulatori di terminale usano sequenze basate su VT100 terminale degli anni 70. – Barmar

+0

@AbhinavGauniyal [Wikipedia è tuo amico] (https://en.wikipedia.org/wiki/VT100) :) –

Problemi correlati