2011-09-26 4 views
12

Il existe plusieurs bibliothèques telles que ncurses qui aident à créer des interfaces graphiques en ligne de commande.Comment ncurses et. Al. Travail?

En termes simples, comment fonctionnent-ils? J'ai d'abord pensé que ncurses intercepte toutes les entrées au clavier et dessine chaque "image" en les sortant ligne par ligne normalement. Cependant, une inspection plus approfondie révèle que chaque nouvelle trame écrase la précédente. Comment modifie-t-il les lignes déjà sorties? De plus, comment gère-t-il la couleur?

EDIT: La même question s'applique à tout ce qui a une interface «de fantaisie», comme vim et emacs.

Répondre

14

terminaux texte ont des séquences de commandes qui font des choses comme déplacer le curseur sur une position particulière sur l'écran, insérer des caractères, supprimer des lignes, etc.

Chaque type de terminal est différent et a son propre ensemble de séquences de commandes. ncurses possède une base de données (voir terminfo pour plus de détails)

En interne, ncurses gère 2 vues de l'écran: le contenu actuel et l'apparence de l'écran après l'application des modifications en cours. Une fois que le programme demande un rafraîchissement d'écran, ncurses calcule un moyen efficace de mettre à jour l'écran pour qu'il ressemble à la vue souhaitée. La sortie exacte des caractères/séquences de commandes dépend du type de terminal utilisé.

3

curses (et ncurses, aussi, je pense) fonctionne en déplaçant le curseur sur l'écran. Il y a des séquences de contrôle pour faire de telles choses. Jetez un coup d'œil sur le code et vous les verrez. Ces séquences ne sont pas des caractères de contrôle ASCII, ce sont des chaînes commençant par (umm ...) ESC, peut-être. Jetez un oeil here pour une explication de plus haut niveau.

+0

La plupart des terminaux prennent en charge (certaines de) les [séquences d'échappement ANSI] (https://en.wikipedia.org/wiki/ANSI_escape_code). Ils commencent par '\ 033 [' où '\ 033' est en effet ESC. Vous pouvez jouer à votre propre terminal en utilisant 'echo -e' pour en imprimer quelques-unes et voir ce qui se passe. ('reset' (tapez aveuglément et appuyez sur Entrée) sera votre ami si vous avez réussi à rendre le terminal invisible ...) – 5gon12eder