muda a cor do texto da minha saída no prompt de comando?

5

Suponha que eu tenha um arquivo php e eu queira alterar a cor do texto da minha saída para um aplicativo baseado em console ...

<?php
$prompt = "What Is Your Name: ";
echo $prompt;
$answer =  "You Entered: " . rtrim( fgets( STDIN ));
echo $answer;
?>

Eu quero alterar a cor do texto de $answer .

É possível? Se sim, como posso fazer isso?

    
por Shreejay Pendse 21.07.2016 / 14:19

3 respostas

3

Agora você pode usar o terminal true color de 24 bits no Ubuntu 16.04

  • A seqüência de escape de primeiro plano é ^[38;2;<red>;<green>;<blue>m
  • A seqüência de escape de fundo é ^[48;2;<red>;<green>;<blue>m
  • <red> <green> <blue> varia de 0 a 255, inclusive.
  • A seqüência de escape ^[0m retorna a saída para o padrão.

Veja códigos de cores RGB Gráfico

Demonstração de cor verdadeira de 24 bits em um script :

Aqui está o script modificado para produzir saída colorida.

<?php
$prompt = "What Is Your Name: ";
echo $prompt;
$answer =  rtrim( fgets( STDIN ));
echo "3[38;2;0;102;0m You 3[38;2;255;0;255m Entered: 3[38;2;255;255;0m $answer 3[0m \n";
?>

Exemplo de saída do script acima:

    
por souravc 21.07.2016 / 15:57
6

Isso certamente é possível usando códigos de escape ANSI :

<?php
echo "3[31m some colored text 3[0m some white text \n";
?>

produzirá "algum texto colorido" em vermelho e "algum texto branco" em branco (a menos que você tenha escolhido cores padrão diferentes para o seu terminal).

Os caracteres 3 indicam o início de um código de escape. [31m é a cor vermelha. [0m significa o final do fragmento codificado. Para mais cores, consulte aqui .

Para outros efeitos, como negrito:

3[1m bold text 3[0m

veja o primeiro link. Você pode experimentar esses códigos em uma linha de comando fazendo algo como:

echo -e "3[1m bold text 3[0m"
    
por Jos 21.07.2016 / 14:35
3

Em vez de sequências codificadas, você deve usar uma biblioteca como o PHP Ncurses que será mais propensos a trabalhar em mais tipos de terminal

O exemplo de ncurses_color_set :

<?php
ncurses_init();

// If the terminal supports colors, initialize and set active color
if (ncurses_has_colors()) {
    ncurses_start_color();
    ncurses_init_pair(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
    ncurses_color_set(1);
}

// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");

// Flush output to screen
ncurses_refresh();

ncurses_end();
?>

Em ncurses_has_colors :

  

Verifica se o terminal possui recursos de cor. Esta função pode ser usada para escrever programas independentes de terminal .

[ênfase minha]

Use ncurses_attr(NCURSES_A_BOLD); para negrito. Note que esta função e as relacionadas são marcadas como experimentais.

Em ncurses_attron

  

Aviso Esta função é EXPERIMENTAL . O comportamento dessa função,   o seu nome ea documentação envolvente podem ser alterados sem aviso prévio   lançamento futuro do PHP. Esta função deve ser usada por sua conta e risco.

     

Aviso Esta função não está documentada no momento; apenas seu argumento   lista está disponível.

[ênfase deles]

Você pode encontrar outras bibliotecas. Você deve verificar se eles usam técnicas independentes de terminal. Eu encontrei vários que usam sequências codificadas em vez disso.

Observe que o equivalente da linha de comando (shell) usa tput para ser independente do terminal. Eu incluo esta informação como ponto de partida para referência. Eles devem ser evitados.

    
por Dennis Williamson 21.07.2016 / 23:25