Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Inserting a little life to my output

by hotshot (Prior)
on Dec 17, 2002 at 13:11 UTC ( [id://220504]=perlquestion: print w/replies, xml ) Need Help??

hotshot has asked for the wisdom of the Perl Monks concerning the following question:

hello guys!

I working on Linux and my scripts outputs to console. Can someone direct me to documents or give me a starting point for adding simple graphics to the output. I mean underline/bolding text, change it's colors, and other similar stuff.

Thanks

Hotshot

Replies are listed 'Best First'.
Re: Inserting a little life to my output
by gjb (Vicar) on Dec 17, 2002 at 13:18 UTC

    Have a look at ANSIColor.

    Hope this helps, -gjb-

Re: Inserting a little life to my output
by thinker (Parson) on Dec 17, 2002 at 13:19 UTC
Re: Inserting a little life to my output
by dempa (Friar) on Dec 17, 2002 at 14:01 UTC

    The above answers ('bout ANSIColor) are all you need really. Just for the record I would like to submit a short subroutine that I threw together a long time ago. I use it from time to time in my projects.

    (Of course Term::ANSIColor isn't that hard to use in it self, but I like to be able to write short colorcodes). Here goes:

    Note: The second parameter to colorparse() should be set to a true value if the output is to be used with Term::ReadLine.

    use strict; use Term::ANSIColor qw/:constants/; use Carp; print colorparse("%CThis is bright/bold cyan%n and this is normal text +.\n"); print colorparse("%RC%Yo%Bl%Mo%Cr%n rocks!\n"); sub colorparse { my $txt = shift; my $is_prompt = shift || 0; if (not defined $txt) { croak("error: missing parameter\nusage: colorparse(\$txt,\$is_prom +pt)"); } my %transtbl = ( k => RESET . BLACK , K => RESET . BLACK . BOLD , r => RESET . RED , R => RESET . RED . BOLD , g => RESET . GREEN , G => RESET . GREEN . BOLD , y => RESET . YELLOW , Y => RESET . YELLOW . BOLD , b => RESET . BLUE , B => RESET . BLUE . BOLD , m => RESET . MAGENTA , M => RESET . MAGENTA . BOLD , c => RESET . CYAN , C => RESET . CYAN . BOLD , w => RESET . WHITE , W => RESET . WHITE . BOLD , n => RESET ); if ($is_prompt) { $txt =~ s/%([kKrRgGyYbBmMcCwWn])/\001\001$transtbl{$1}\001\002/g; } else { $txt =~ s/%([kKrRgGyYbBmMcCwWn])/$transtbl{$1}/g; } $txt =~ s/%%/%/g; return($txt); }

    -- 
    dempa

      thanks a lot it will sure help. just one thing, can you explain what you did in case $is_prompt is true, and the last line before the return statement?

      Hotshot

        Sure hotshot (if I remember what I did, that is :) ).

        When I made this subroutine and used the output for a colorful prompt (with Term::ReadLine), the color codes (the real ones, from Term::ANSIColor) confused the readline-prompt. In short, it counted the "invisible" color codes as characters and inserted the newline (which should come at the end of the terminal window) too early. To avoid this I inserted some extra control characters around the color codes to avoid it being counted by ReadLine.

        The last line before the return statement is for converting %% to %. That means: Use %% in colorparse() to output a literal %.

        -- 
        dempa

      ...thanks! (++) That was a useful demonstration.

      ...All the world looks like -well- all the world, when your hammer is Perl.
      ---v

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://220504]
Approved by vek
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (9)
As of 2024-04-18 13:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found