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

  1. _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
  2. 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