2010-05-11 1 views
3

Je suis actuellement en utilisant le code suivant au texte de sortie en vert à la borne:Comment puis-je afficher différentes nuances de vert dans le terminal?

printf("%c[1;32mHello, world!\n", 27);

Cependant, je veux plus de nuances de vert. Quelle est la manière la plus facile d'accomplir ceci?

+0

Je me demandais cela aussi. mrxvt est compilé avec le support de 256 couleurs sur mon système, et je ne l'ai jamais vu utilisé. – amphetamachine

Répondre

2

Vous pouvez utiliser le script 256colors2.pl sur le site Rob Meerman's pour vous assurer que votre terminal gère correctement 256 couleurs. Choisissez ensuite la bonne combinaison de valeurs RVB pour obtenir la bonne teinte de vert.

Sur la base de son scénario, il semble que les numéros de couleur sont essentiellement un décalage d'un schéma de couleurs base 6:

COLOR = r*6^2 + g*6 + b) + 16 

Et pour la couleur de premier plan, nous devons utiliser:

\x1b[38;5;${COLORNUM}m 

Et encore une fois basé sur son script, voici une boucle (perl) qui affiche la lettre O dans la couleur désirée:

# now the color values 
for ($green = 0; $green < 6; $green++) { 
    for ($red = 0; $red < 6; $red++) { 
     for ($blue = 0; $blue < 6; $blue++) { 
      $color = 16 + ($red * 36) + ($green * 6) + $blue; 
      print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m "; 
      print "\n" if ($blue == 2 || $blue == 5); 
     } 
    } 
    print "\n"; 
} 

Et voici un échantillon de sa production:

Screenshot showing color value samples

NOTE: Charles semble un peu plus sur la façon dont cela fonctionne réellement et ce que vous devez faire pour vérifier que le shell soutient la capacités requises. Mes informations sont basées strictement sur l'observation et les tests avec un shell connu pour supporter 256 couleurs (konsole).

+0

Konsole prend en charge non seulement 256 couleurs, mais prend même en charge la couleur 24 bits complète en utilisant \ x1b [38; 2; RR; GG; BBm, où RR GG BB sont dans 0..255. Alors maintenant, vous pouvez imprimer 256 nuances de vert :) – wump

0

Cela peut vous aider:

http://en.wikipedia.org/wiki/ANSI_escape_code

Vous ne pouvez vraiment obtenir 2 différentes nuances de chaque couleur. Essayez de remplacer le 1 par un 2 pour obtenir le vert foncé.

+0

Ce n'est pas toujours vrai. De nombreux terminaux vous permettent de définir n'importe quelle nuance de couleur pour chaque code de couleur en utilisant la fonction terminfo 'initc'. –

2

Comment cela dépend de votre terminal. Vous devriez pouvoir interroger une base de données termcap ou terminfo pour savoir comment. Ceci est plus facile à démontrer avec certaines commandes tput.

E.g. on my borne de courant:

tput initc 2 500 900 100 
tput setaf 2 

Définit la couleur 2 être une nuance de vert (les paramètres sont des valeurs RGB entre 0 et 1000) et les commutateurs du premier plan à cette couleur.

Pour voir la séquence de caractères nécessaire dans un programme C pour votre terminal donné, vous pouvez afficher les capacités avec infocmp.

E.g. (Pour mon terminal)

$ infocmp -1 | grep initc 
     initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x, 
$ infocmp -1 | grep setaf 
     setaf=\E[38;5;%p1%dm, 

La mise en forme % paramter est un peu (OK très) douloureux pour analyser mais elle est expliquée dans la page de manuel infocmp. Traduire ceci en printf chaîne de format n'est pas trop difficile.

Questions connexes