2011-09-26 7 views
12

Esistono diverse librerie come ncurses che aiutano a creare GUI da riga di comando.Come si fa ncurses et. al. Lavoro?

In poche parole, come funzionano?

Il mio primo pensiero è stato che ncurses intercetta tutti gli input da tastiera e disegna ogni "frame" emettendo riga per riga normalmente. Un'ispezione più ravvicinata, tuttavia, rivela che ogni nuovo frame sovrascrive quello precedente. Come modifica le linee che sono già state emesse? Inoltre, come gestisce il colore?

MODIFICA: La stessa domanda si applica a qualsiasi cosa con un'interfaccia "elegante", come vim e emacs.

risposta

14

terminali di testo hanno sequenze di comandi che fanno cose come spostare il cursore in una posizione particolare sullo schermo, inserire caratteri, eliminare linee ecc

Ogni tipo di terminale è diverso e ha la sua propria serie di sequenze di comandi. ncurses ha un database (vedi terminfo per dettagli)

Internamente ncurses mantiene 2 visualizzazioni dello schermo: il contenuto corrente e come dovrebbe apparire lo schermo dopo che sono state applicate le modifiche in sospeso correnti. Una volta che il programma richiede un nuovo schermo, ncurses calcola un modo efficace per aggiornare lo schermo in modo che assomigli alla vista desiderata. L'output esatto di caratteri/sequenze di comandi dipende dal tipo di terminale utilizzato.

3

curses (e anche ncurses, penso) funziona spostando il cursore sullo schermo. Ci sono sequenze di controllo per fare cose del genere. Dai un'occhiata al codice di nuovo e li vedrai. Queste sequenze non sono caratteri di controllo ASCII, sono stringhe che iniziano con (umm ...) ESC, forse. Dai un'occhiata a here per una spiegazione di livello superiore.

+0

La maggior parte dei terminali supporta (alcune) le [sequenze di escape ANSI] (https://en.wikipedia.org/wiki/ANSI_escape_code). Iniziano con '\ 033 [' dove '\ 033' è effettivamente ESC. Puoi giocare sul tuo terminale usando 'echo -e' per stamparne alcuni e vedere cosa succede. ('reset' (digita ciecamente e premi invio) sarà tuo amico se sei riuscito a impostare il terminale invisibile ...) – 5gon12eder