Mettre de la couleur dans vos shell en perl

En balayant mes archives je tombe sur une librairie que j’avais écrite il y a quelques années.

Elle permet de changer « simplement » les attributs d’un texte écrit par un script shell Unix (ou Linux).
La librairie propose 4 fonctions :

  • color_fg_set_str , modifie la couleur d’écriture du texte
  • color_bg_set_str , modifié la couleur de fond d’écran du texte
  • curs_pos_str , déplace le curseur
  • decoration_set_str , bascule en gras, souligné, clignotant, …

use constant ESC_FMT		=> "\033[%sm";
use constant ESC_FMT1	=> "\033[%dm";
use constant ESC_FMT2	=> "\033[%d;%dm";
use constant ESC_FMT3	=> "\033[%d;%d;%dm";
#use constant CLR_SCR		=> "\f";
use constant CLR_SCR		=> "\033[2J";
use constant CLR_EOL		=> "\033[K";
use constant POS_CUR		=> "\033[%d;%dH";
use constant CUR_SAV		=> "\033[s";
use constant CUR_RES		=> "\033[u";
use constant FLUSH		=> CUR_SAV . "\n" . CUR_RES;
use constant ESC_FMTC1	=> "\033[%d%s";
use constant ESC_FMTC2	=> "\033[%d;%d%s";
use constant ESC_DEFAULT	=> "\033[0m\033[37;40m";

#	DECORATIONS
use constant OFF	  	=>  0;
use constant BOLD		  =>  1;
use constant UNDER	  =>  4;
use constant BLINK	  =>  5;
use constant REVERSE	=>  7;
use constant CONCEAL  =>  8;

#	COULEURS
use constant BLACK		=>  30;
use constant RED			=>  31;
use constant GREEN		=>  32;
use constant YELLOW		=>  33;
use constant BLUE			=>  34;
use constant MAGENTA	=>  35;
use constant CYAN			=>  36;
use constant WHITE		=>  37;

sub color_fg_set_str
{
	my $color = shift;	#couleur désiré
	$color = $default_fg_color if (! $color);
	if ($color >= BLACK && $color <= WHITE)	# couleur connue
	{
		return sprintf ESC_FMT1, $color;				# changement de couleur
	}
	return "";
}

sub curs_pos_str
{
	my ($lig, $col)= ( @_ );

	if ( $lig > 0 and $col > 0 )
	{ return sprintf(POS_CUR, $lig, $col); }
	else
	{	return ""; }
}

sub color_bg_set_str
{
	my $color = shift;	#couleur désiré
	$color = $default_bg_color if (! $color);
	if ( ( $color>=BLACK && $color<=WHITE ) )	# couleur connue
	{
		return sprintf ESC_FMT1, ($color + 10);			# changement de couleur
	}
	return "";
}

sub decoration_set_str
{
	my $decoration = shift;	#decoration désiré
	$decoration = $default_decoration if (! $decoration );
	if ( ( $decoration>=OFF && $decoration<=CONCEAL ) )	# decoration connue
	{
		return sprintf ESC_FMT1, ($decoration);			# changement de decoration
	}
	return "";
}


En espérant que cela serve à quelqu’un un jour

PS : Une mine d’info https://wiki.archlinux.org/index.php/Color_Bash_Prompt

Publicités

Publié le 27 mai 2013, dans Linux, Tips en vrac. Bookmarquez ce permalien. Poster un commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :