The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

App::Adenosine::Plugin::Rainbow

VERSION

version 2.002000

DESCRIPTION

Color codes standard error (diagnostics) from curl. Highly customizable.

METHODS

colorize

$p->colorize('red1', 'Christmas') . ' ' . $p->colorize('green1', 'tree!');

colorize is the method used to highlight all the pieces that come from the curl output. It takes two arguments, first a color specification, and next the string to be colorized. The complete color specification is defined as:

{
   fg         => $color,
   bg         => $color,
   bold       => $is_bold,
   italic     => $is_italic,
   underline  => $is_underline,
}

All of the keys in the hash are optional. The values for $color can be found at "Standard color map" in Term::ExtendedColor. Additionally I've added a form of "legacy support" for named 16 color mode. Those colors are actually arbitrary and most consoles allow you to redefine them, so the names I gave are just the defaults. My named colors are:

red
green
yellow
blue
purple
cyan
white
gray
bright_red
bright_green
bright_yellow
bright_blue
magenta
bright_cyan
bright_white

As a shortcut, if you pass a simple string instead of a hashref it wil be explanded to { fg => $str }.

Note that unfortunately support for all the attributes are spotty. For example on my computer I use tmux 1.6 running within terminator 0.96. In this situation I can't use any of the non-color attributes. Outside of tmux underline works, but the others do not. Similarly, bold only seems to work with some colors. It's pretty frustrating, and experimentation seems necesary.

Overriding colors at runtime

To change a color when you run adenosine instantiate it as follows:

#!/usr/bin/env perl

use lib 'path/to/adenosine/lib';
use App::Adenosine;

use App::Adenosine::Plugin::Rainbow;
App::Adenosine->new({
   argv => \@ARGV,
   plugins => [
      App::Adenosine::Plugin::Rainbow->new(
         response_header_name_color => 'orange4',
         response_header_value_color => 'orange2',
         response_ellided_body_color => {
            fg => 'blue12',
            bg => 'blue16',
         },
      ),
   ],
});

Creating custom themes

To create a custom theme just subclass Rainbow as follows:

package App::Adennosine::Plugin::Rainbow::Valentine;

use Moo;
extends 'App::Adenosine::Plugin::Rainbow';

has '+response_header_name_color'  => ( default => sub { 'magenta1'  } );
has '+response_header_value_color' => ( default => sub { 'magenta19' } );
has '+request_header_name_color'   => ( default => sub { 'magenta7'  } );
has '+request_header_value_color'  => ( default => sub { 'magenta25' } );

1;

Then use it the same way you use Rainbow:

...
App::Adenosine->new({ argv => \@ARGV, plugins => ['::Rainbow::Valentine'] })

COLORABLE SECTIONS

Rainbow splits apart the stderr string from curl and hilights the various sections respectively. The values of the sections are what is passed as the first argument to "colorize". The names of the sections are:

  • response_header_colon_color

  • response_header_name_color

  • response_header_value_color

  • request_header_colon_color

  • request_header_name_color

  • request_header_value_color

  • info_star_color

  • response_bracket_color

  • request_bracket_color

  • request_method_color

  • request_uri_color

  • request_protocol_color

  • request_protocol_version_color

  • response_protocol_color

  • response_protocol_version_color

  • response_status_code_color

  • response_status_text_color

  • response_ellided_bracket_color

  • response_ellided_body_color

  • request_ellided_bracket_color

  • request_ellided_body_color

AUTHOR

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.