De la couleur dans un Xterm avec un printf

idk -  
 aNas10.fr -
Je voudrai afficher du texte en couleur dans un Xterm ! Et bien sur, j y arrive pas!
J'ai bien vu que y a Ncurses, mais ca me plait pas, d'ailleur ca a du mal sur ma red hat. Et apres au joie,bohneur inegalable, je vois qu'on peux faire ca en sortant avec printf des truc comme ca : [33/24m ....;, genial ca marche sous le SHELL, mais pas sous Xterm! Snif ! Bon, si qqun sait comment afficher en couleur dans un Xterm, Merci de me le dire! A++

4 réponses

_julien_ Messages postés 56 Statut Membre 17
 
man tgetent et tgetstr:
[...]
#include <termcap.h>

char PC;
char *BC;
char *UP;
short ospeed;
struct tinfo *info;

int
tgetent(char *bp, char *name);
[...]
char *
tgetstr(char *id, char **area);
[...]
The tgetent() function extracts the entry for terminal name into the
buffer at bp. The bp argument should be a character buffer of size 1024
and must be retained through all subsequent calls to tgetnum(),
tgetflag(), and tgetstr().
[...]

man 5 termcap
[...]
AB str Set background colour to #1 using ANSI
escape.
[...]
AF str Set foreground colour to #1 using ANSI
escape.

Ce qui nous donne (sans les gestions d'erreurs):

char *name;
char bp[1024];
char t[4096];
char *area;
char *AB, *AF;

name = getenv("TERM");
tgetent(bp, name);
area = t;
AF = tgetstr("AF", &area);
AB = tgetstr("AB", &area);

En fin de compte dans les chaine AB et AF il y a une chaine de
format qui attends un int:

ESC[4%dm
ESC[3%dm

Pour les numero des couleurs:

#define BLACK 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define PINK 5
#define L_BLUE 6
#define NORMAL 7

---------------------------------------------------------

#include <termcap.h>
#include <stdlib.h>

#define BLACK 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define PINK 5
#define L_BLUE 6
#define NORMAL 7

int main(void)
{
char *name;
char bp[1024];
char t[4096];
char *area;
char *AB, *AF;

name = getenv("TERM");
tgetent(bp, name);
area = t;
AF = tgetstr("AF", &area);
AB = tgetstr("AB", &area);
printf(AF, GREEN);
printf("bonjour(s)\n");
return (0);
}

------------------------------------------------------------

cc 0 ~>gcc main.c -ltermcap
cc 0 ~>./a.out

--> ecrit bonjour(s) en vert.

-- 
julien barbier
1
aNas10.fr
 
Pas la peine de se prendre la tête avec des termcaps, comme tu le dit avec un printf c'est possible :

exemple :
/* Affichera Hello en violet si ma mémoire et bonne */
printf("\033[34mHello\n"); 

/* Affichera Hello en rouge sur fond bleu */
printf("\033[45;31mHello");

/* Affichera Hello en rouge sur fond bleu en clignotant */
printf("\033[45;31;5mHello"); 

on peut en mettre 3 séparé par des ;
\033[COL;COL;COLm

les couleurs vont de 30 a 37
les couleurs de fond vont de 40 a 47
les diverses options vont de 0 a 7 (si ma mémoire est bonne)

PS: je sais que le sujet date mais comme c'est le premier sur lequel les gens tombent en général, c'est préférable que la réponse y figure ^^.
1
princesse
 
changer de couleur
-3
princesse
 
changer de couleur
-4