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
Aviso 1: o Linux adicionará automaticamente php ao seu caminho se instalado via
apt-get
ouyum
Aviso 2: Atualmente, a fonte ANSICON no github está incompleta e não contém as pastas
x86
ex64
. 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.php
e 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:-s
STDIN
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 STDIN
e forem fornecidos, não serão modificados e serão adicionados como prefixo .-s
STDIN
-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 space
caractere.
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-stdin
STDIN
STDIN
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 .