Cores super fáceis em QUALQUER linha de comando

Eu adoro ter cores em minha linha de comando , elas apenas tornam muito mais fácil ler e entender as informações. Então, montei esse script para tornar a vida mais fácil. Não tenho mac para testar isso, mas deve funcionar da mesma forma que no Linux.

Pré-requisitos

  • PHP instalado e adicionado ao seu $ PATH
  • Baixe o ANSICON e instale-o (somente Windows)
     

  • Aviso 1: o Linux adicionará automaticamente php ao seu caminho se instalado via apt-getouyum

  • Aviso 2: Atualmente, a fonte ANSICON no github está incompleta e não contém as pastas x86e x64. O link de download fornecido é para um de meus próprios repositórios que contém a versão completa do ANSICON. Eu não possuo nem contribuo com a ANSICON.

O roteiro

O script logo se tornará parte de um projeto meu maior , mas é claro que você pode brincar com a versão de trabalho atual. Copie e cole abaixo ou obtenha no Github .

<?php 
/**
* @copyright Nicholas Jordon

*/

class sh_color {
private $txt_colors = array();
private $txt_styles = array();
private $bg_colors = array();

public function __construct(){
// Set up colors
$this
->txt_colors = array(
// regular
'gray' => '30',
'red' => '31',
'green' => '32',
'yellow' => '33',
'blue' => '34',
'purple' => '35',
'cyan' => '36',
'white' => '37',
// light
'light_gray' => '90',
'light_red' => '91',
'light_green' => '92',
'light_yellow' => '93',
'light_blue' => '94',
'light_purple' => '95',
'light_cyan' => '96',
'light_white' => '97'
);
$this
->txt_styles = array(
'regular' => '0',
'bold' => '1',
'dark' => '2', // this + gray = black
'underline' => '4',
'invert' => '7',
'strike' => '9'
);
$this
->bg_colors = array(
// regular
'gray' => '40',
'red' => '41',
'green' => '42',
'yellow' => '43',
'blue' => '44',
'purple' => '45',
'cyan' => '46',
'white' => '47',
// light
'light_gray' => '100',
'light_red' => '101',
'light_green' => '102',
'light_yellow' => '103',
'light_blue' => '104',
'light_purple' => '105',
'light_cyan' => '106',
'light_white' => '107'
);
}

// Returns colored string
public function color_string($string, $txt_color=NULL, $bg_color=NULL, $txt_style=NULL){
$return
= "";
$style
= '0;';
if(isset($this->txt_styles[strtolower((string) $txt_style)])){
$style
= $this->txt_styles[strtolower((string) $txt_style)];
}
if(isset($this->txt_colors[strtolower((string) $txt_color)])){
$return
.= "33[".$style.';'.$this->txt_colors[strtolower((string) $txt_color)] . "m";
}
else{
$return
.= "33[".$style.';97'. "m";
}
if(isset($this->bg_colors[strtolower((string) $bg_color)])){
$return
.= "33[".$this->bg_colors[strtolower((string) $bg_color)] . "m";
}
$return
.= $string . "33[0m";

return $return;
}

public function get_txtstyles() {
return array_keys($this->txt_styles);
}

public function get_txtcolors() {
return array_keys($this->txt_colors);
}

public function get_bgcolors() {
return array_keys($this->bg_colors);
}
}

$color
= new sh_color;

// get arguments
$longopts
= array(
'no-stdin',
'print-all'
);
$args
= getopt('s:S:c:C:',$longopts);

// stdin
$stdin
= '';
if(!isset($args['no-stdin'])){
if(!posix_isatty(STDIN)){$stdin = substr(file_get_contents('php://stdin'),0,-1);}
}

// test if arguments exist
if(empty($args['c'])){
$args
['c'] = NULL; // prevents error
}
if(empty($args['C'])){
$args
['C'] = NULL; // prevents error
}
if(empty($args['S'])){
$args
['S'] = NULL; // prevents error
}

if(empty($args['s'])){
if(empty($stdin)){
// error out if no string
$args
['s'] = 'ERROR: String is empty, please use STDIN or argument -s';
$args
['S'] = 'dark';
$args
['c'] = 'gray';
$args
['C'] = 'light_red';
}
else{
$args
['s'] = (string) $stdin;
$str_switch
= TRUE;
}
}

if(isset($args['print-all'])){
// print all the possiblities
$output
= '';
foreach ($color->get_txtstyles() as $value) {
$output
.= $color->color_string('This is the txt style: '.$value, 'green', NULL, $value).PHP_EOL;
}
foreach ($color->get_txtcolors() as $value) {
$output
.= $color->color_string('This is the txt color: '.$value, $value).PHP_EOL;
}
foreach ($color->get_bgcolors() as $value) {
$output
.= $color->color_string('This is the bg color: '.$value, 'gray', $value, 'dark').PHP_EOL;
}
}
else{
// or print the inputs
$output
= $color->color_string($args['s'], $args['c'], $args['C'], $args['S']);
}

if(isset($str_switch) || isset($args['print-all'])){echo $output;}
else{echo $stdin.$output;}

Uso

NOTA: Todos os exemplos pressupõem que o script está localizado em um arquivo chamado color.phpe está localizado no diretório atual.

A única variável necessária é uma string fornecida por meio do argumento ou . Isso significa que os dois procedimentos a seguir funcionarão sem erros:-sSTDIN

php color.php -s "my name is frank"

echo
my name is frank | php color.php

NOTA: No momento, a cor do texto padrão é branco e está codificado. Uma construção futura provavelmente permitirá que isso seja alterado rapidamente.

No entanto, se STDINe forem fornecidos, não serão modificados e serão adicionados como prefixo .-sSTDIN-s

php color.php -s "hello, " -c yellow | php color.php -s Frank -c red

O exemplo acima imprimiria “hello, Frank”, onde ‘hello’ é amarelo e ‘Frank’ é vermelho.

Observação: as aspas só são necessárias em torno de uma string se ela contiver um spacecaractere.

Outras Variáveis

Ao contrário da variável string, as variáveis ​​restantes não são necessárias, mas cada uma deve usar seu respectivo argumento.

O primeiro argumento opcional é o que dá cor ao texto da string (ver Ex 2 ). O próximo argumento é o que dá cor ao fundo do barbante (ver Ex 3 ). E depois há o argumento, que permite mudar o estilo do texto (ver Ex 4 ).-c-C-S

Há também o argumento que descartará a string. Isso é mais para compatibilidade futura, o que pode permitir fornecer configurações ou outras informações.--no-stdinSTDINSTDIN

Finalmente, você pode ver facilmente um exemplo de todas as cores e estilos disponíveis usando o argumento (ver Ex 1 ). Lembre-se de que isso descartará todas as outras variáveis.--print-all

Exemplos

Ex 1:

Isso imprimirá todas as cores e estilos possíveis, mas ignorará todas as outras variáveis ​​fornecidas, incluindo STDIN.

php color.php --print-all

Ex 2:

Isso mostrará o git diff short-stat onde apenas o texto é amarelo.

git diff --shortstat | php color.php -c light_yellow

Ex 3:

( Linux ) Isso mostrará o diretório atual com texto azul em um fundo branco.

pwd | php color.php -c blue -C white

Ex 4:

Isso mostrará a string “tarefa concluída: Make example # 4”, onde “Make example # 4” está riscado.

echo "task complete: " | php color.php -s "Make example #4" -S strike

Ex 5:

( Linux ) Assumindo que você colocou a função em seu arquivo, o seguinte imprimiria “Não enviado: 2” em um texto verde em negrito, visto que você tem 2 commits prontos para serem enviados ao Github neste diretório.git-unpushed~/.bashrc

function git-unpushed {
brinfo
=$(git branch -v)
if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
then
echo
"Not Pushed: ${BASH_REMATCH[2]}"
fi
}

git
-unpushed | php color.php -c green -S bold

 
 
 

Obrigado pela leitura

Se você gostou do que escrevi, considere aprovar este protocolo ou me endossar .
Se você quiser ver mais coisas minhas, pode ver outros protocolos que escrevi ou visitar meu perfil .