NAME
ansiecho - Echo command with ANSI terminal code
VERSION
Version 0.01
SYNOPSIS
ansiecho -c S d -c S i -c S g -c S i -c S t -c S a -c S l
ansiecho -c R Red -c K/Y 'Black on Yellow' -c FSDB BlinkReverseBoldBlue
ansiecho -f '[ %12s ]' -c SR -f '%+06d' 123
DESCRIPTION
ECHO
ansiecho print arguments with ANSI terminal escape sequence according to the given color specification.
In a simple case, ansiecho behave exactly same as echo command.
ansiecho a b c
Like echo command, option -n disables to print newline at the end. Option -j (or --join) removes white space between arguments.
COLOR
You can specify color of each argument by preceding with -c option:
ansiecho -c R a -c GI b -c BD c
This command print strings a
, b
and c
according to the color spec of R
(Red), GI
(Green Italic) and BD
(Blue Bold) respectively. This can be written as below too.
ansiecho -cR a -cGI b -cBD c
ansiecho -c:R:a -c:GI:b -c:BD:c
Foreground/Background color can be specified by 8+8 standard colors, 24 gray scales, 6x6x6 216 colors, RGB values or color names, with special effects such as I (Italic), D (Double-struck; Bold), S (Stand-out; Reverse Video) and such.
Color example:
RGB 6x6x6 12bit 24bit color name
=== ======= ========= ============= ==================
B 005 #00F (0,0,255) <blue>
/M /505 /#F0F /(255,0,255) /<magenta>
K/W 000/555 #000/#FFF 000000/FFFFFF <black>/<white>
R/G 500/050 #F00/#0F0 FF0000/00FF00 <red>/<green>
W/w L03/L20 #333/#ccc 303030/c6c6c6 <dimgrey>/<lightgrey>
More information is described in "COLOR SPEC" section.
12bit/24bit colors are converted to 216 colors because most terminal can not display them. If you are using full-color terminal, such as iTerm2 on Mac, use --rgb24 option or set GETOPTEX_RGB24
environment variable to produce full-color sequence.
FORMAT
Format string can be specified with -f option, and it behaves like a printf command.
ansiecho -f '[ %5s : %5s : %5s ]' -c R RED -c G GREEN -c B BLUE
You can use backslash escape characters in the format string. See "STRING LITERAL" section.
Formatted result becomes a single argument, and can be a subject of other operation. In next example, numbers are formatted, colored, and gave to other format.
ansiecho -f '\N{ALARM CLOCK} %s' -c KF/544 -f ' %02d:%02d:%02d ' 1 2 3
Formatting is done by Perl sprintf
function. See "sprintf" in perlfunc for detail.
ANSI SEQUENCE
With normal usage, ansiecho print given argument with introducer and reset sequences.
To get just a desired sequence, use -s option. Next example produce ANSI terminal sequence to indicate deeppink
color with lightyellow
background.
ansiecho -n -s '<deeppink>/<lightyellow>'
You will get the next result with 256-color terminal:
^[[38;5;198;48;5;230m
and the next with full-color terminal:
^[[38;2;255;20;147;48;2;255;255;224m
Option -z does almost same thing, but it append a sequence to the final argument. Next two commands are equivalent.
ansiecho -c R Red
ansiecho -s R Red -z ZE
Color spec ZE
produces RESET and ERASE LINE sequence.
Because -s and -z does not produce RESET sequence, you can use them to accumulate the effects.
ansiecho -s R R -s U RU -s I RUI -s S RUIS -s F RUISF -z Z
OPTIONS
- -n
-
Do not print newline at the end.
- -e
-
Enable interpretation of backslash escapes in the normal string argument. See "STRING LITERAL" section.
- -j, --join
-
Do not print space between arguments.
- -c spec string
- -c:spec:string
-
Print string in the color given by spec.
If the -c is followed by an punctuation character other than
/ ^ ~ ; #
, it is used as a delimiter character. - -s spec
- -z spec
-
Add raw ANSI sequence given by spec. Option -s add the sequence to the new argument, while -z add to the final argument. There are no difference when used with -j option or with single-or-less argument.
- -r string (raw)
-
Append next string to the final argument with backslash escape interpretation.
This option can be used to stringify the option argument. Next example does not work without -r.
ansiecho -c R -r -c ansiecho -f %s -r -c
In these cases, be aware that string -c is mixed up with next argument.
- -f format args ...
-
Print args in the given format.
In the format string, backslash escaped character can be used. For example,
\n
stands for new line character. This is done by Perlprintf
function. See "sprintf" in perlfunc and "Quote and Quote-like Operators" in perlop for detail.The result of -f sequence ends up to a single argument, and can be a subject of other -c or -f option.
Number of arguments are calculated from the number of
%
characters in the format string except%%
. Variable width and precision parameter*
can be used like%*s
or%*.*s
. - --separate string
-
Set separator string between each arguments. Option -j is a short-cut for --separate ''.
- --[no]rgb24
-
Produce 24bit full-color sequence for 12bit/24bit specified colors. They are converted to 216 colors by default.
STRING LITERAL
This is a backslash escape samples described in "Quote and Quote-like Operators" in perlop.
Sequence Description
\t tab (HT, TAB)
\n newline (NL)
\r return (CR)
\f form feed (FF)
\b backspace (BS)
\a alarm (bell) (BEL)
\e escape (ESC)
\x{263A} hex char (example: SMILEY)
\x1b restricted range hex char (example: ESC)
\N{name} named Unicode character or character sequence
\N{U+263D} Unicode character (example: FIRST QUARTER MOON)
\c[ control char (example: chr(27))
\o{23072} octal char (example: SMILEY)
\033 restricted range octal char (example: ESC)
COLOR SPEC
This is a brief summary. Read "COLOR SPEC" in Getopt::EX::Colormap for complete description.
Color specification is a combination of single uppercase character representing 8 colors, and alternative (usually brighter) colors in lowercase :
R r Red
G g Green
B b Blue
C c Cyan
M m Magenta
Y y Yellow
K k Black
W w White
or RGB values and 24 grey levels if using ANSI 256 or full color terminal :
(255,255,255) : 24bit decimal RGB colors
#000000 .. #FFFFFF : 24bit hex RGB colors
#000 .. #FFF : 12bit hex RGB 4096 colors
000 .. 555 : 6x6x6 RGB 216 colors
L00 .. L25 : Black (L00), 24 grey levels, White (L25)
or color names enclosed by angle bracket :
<red> <blue> <green> <cyan> <magenta> <yellow>
<aliceblue> <honeydue> <hotpink> <mooccasin>
<medium_aqua_marine>
with other special effects :
N None
Z 0 Zero (reset)
D 1 Double-struck (boldface)
P 2 Pale (dark)
I 3 Italic
U 4 Underline
F 5 Flash (blink: slow)
Q 6 Quick (blink: rapid)
S 7 Stand-out (reverse video)
V 8 Vanish (concealed)
X 9 Crossed out
E Erase Line
; No effect
/ Toggle foreground/background
^ Reset to foreground
~ Cancel following effect
Samples:
RGB 6x6x6 12bit 24bit color name
=== ======= ========= ============= ==================
B 005 #00F (0,0,255) <blue>
/M /505 /#F0F /(255,0,255) /<magenta>
K/W 000/555 #000/#FFF 000000/FFFFFF <black>/<white>
R/G 500/050 #F00/#0F0 FF0000/00FF00 <red>/<green>
W/w L03/L20 #333/#ccc 303030/c6c6c6 <dimgrey>/<lightgrey>
INSTALL
CPANMINUS
From CPAN archive:
$ cpanm App::ansiecho
or
$ curl -sL http://cpanmin.us | perl - App::ansiecho
From GIT repository:
cpanm https://github.com/kaz-utashiro/App-ansiecho.git
BUGS
Format string can not made by -f option. Next command does not work as you may expect.
ansiecho -f -f '%%%ds' 16 hello
Next one works, though.
ansiecho -f '%*s' 16 hello
SEE ALSO
"Quote and Quote-like Operators" in perlop
https://en.wikipedia.org/wiki/ANSI_escape_code
https://en.wikipedia.org/wiki/X11_color_names
App::ansifold, App::ansicolumn
AUTHOR
Kazumasa Utashiro
LICENSE
Copyright 2021 Kazumasa Utashiro.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.