Question

hé les gars, j’ai vu des applications pour console imprimer des couleurs et des applications telles que ffmpeg imprimer du texte sur lui-même au lieu d’une nouvelle ligne. Comment imprimer sur une ligne existante? Je veux afficher des images par seconde dans mon application de console, soit tout en haut, soit tout en bas, et les printfs doivent y aller et faire défiler normalement

-edit- J'ai besoin de cela pour Windows, mais cela est destiné à être multi-plateforme, donc je vais éventuellement avoir une implémentation Linux et Mac

Était-ce utile?

La solution

Il existe deux possibilités simples qui fonctionnent sur Linux ainsi que sur Windows, mais uniquement pour une ligne:

  • printf ("\ b"); renvoie un caractère, vous pouvez donc compter le nombre de caractères que vous souhaitez revenir en arrière et déclencher en boucle, ou vous savez que vous écrivez uniquement n chiffres et faites-le comme suit: printf ("\ b \ b \ b \ b \ b \ b \ b \ b \ b");
  • printf ("texte à remplacer par la prochaine impression \ r"); cela ramènera le curseur au début de la ligne, donc toute impression suivante la remplacera. Assurez-vous d’écrire une chaîne de même longueur ou plus afin de l’écraser entièrement.

Si vous souhaitez réécrire plusieurs lignes, rien de plus portable que ncurses , il existe Libs for sur pratiquement tous les systèmes d’exploitation, et vous n’aurez pas à vous occuper des différences ANSI.

modifier: ajout d'un lien vers la page wcipedia de ncurses, donne un bon aperçu et une introduction, ainsi qu'une liste de liens et éventuellement une traduction dans votre langue préférée

Autres conseils

Découvrez les ncurses. Il possède des liaisons pour la plupart des langages de script.

Vous pouvez utiliser '\ r' au lieu de '\ n' .

Le numéro de caractère ASCII 8 (A.K.A. Ctrl-H, BS ou Retour arrière) vous permet de sauvegarder un caractère. Le caractère ASCII numéro 13 (A.K.A Ctrl-M, CR ou retour à la ligne) renvoie le curseur au début de la ligne.

Si vous travaillez en C, essayez putchar (8); et putchar (13);

.

La magie des couleurs, la localisation du curseur, l'affichage du curseur, etc. sont à l'intérieur de codes d'échappement ANSI . Toute console texte capable de gérer les codes ANSI peut les utiliser en les imprimant simplement sur la console (c’est-à-dire au moyen de echo dans un script bash ou de la fonction printf () en C).

Les terminaux Unix supportent les séquences d'échappement ANSI et le monde Windows les supportait jadis à l'époque de MS-DOS, mais le support de la console multi-octets a mis fin à cela. cliquez ici . Cependant, il existe d'autres moyens de sortir des séquences ANSI uniquement en imprimant disponible sous Windows . De plus, si Cygwin est installé sur votre machine Windows, les codes ANSI fonctionnent aussi bien que sur n’importe quel terminal Unix.

De nombreuses personnes ont mentionné la bibliothèque Ncurses, qui est la norme de facto pour toutes les applications textuelles de type interface graphique. Ce que cette bibliothèque fait est de cacher toutes les différences de terminal (versions Windows / Unix) pour représenter la même information aussi identique que possible sur toutes les plates-formes, bien que de ma propre expérience je vous dis que cela n’est pas toujours vrai (c’est-à-dire des cadres de fenêtres de texte typiques). changer car les caractères spéciaux ne sont pas disponibles sous tous les encodages de caractères). L’utilisation de ncurses a pour contrepartie qu’il s’agit d’une API complète et qu’il est beaucoup plus difficile de la commencer que d’écrire simplement des séquences d’échappement ANSI pour des opérations simples, telles que changer la couleur de la police, nettoyer l’écran ou ramener le curseur à une position aléatoire. position.

Par souci d’exhaustivité, je colle un exemple d’utilisation de la séquence ANSI sous Linux qui modifie l’invite en bleu et affiche la date:

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

Vous pouvez utiliser Ncurses -

.
  Le paquet

ncurses est une bibliothèque de sous-programmes pour la peinture d'écran indépendante du terminal et la gestion d'événements d'entrée qui présente au modèle un modèle d'écran de haut niveau, masquant les différences entre les types de terminaux et optimisant automatiquement la sortie. changer un écran de texte en un autre

En fonction de la plate-forme sur laquelle vous développez, il existe probablement une API plus puissante que vous pouvez utiliser plutôt que d'anciens codes de contrôle ASCII.

par exemple. Si vous travaillez sur Win32, vous pouvez réellement manipuler directement le tampon d’écran de la console.

Un bon endroit pour commencer pourrait être ici http://msdn.microsoft.com/en-us /library/ms683171(VS.85).aspx

Je recherchais des fonctions / API similaires qui me permettraient d'accéder à la console autrement que comme un flux de texte pour d'autres plates-formes. Je n'ai encore rien trouvé, mais encore une fois, je n'ai pas cherché aussi dur.

J'espère que ça aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top