Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^3: using colors with print()

by pbeckingham (Parson)
on Jun 19, 2004 at 19:56 UTC ( [id://368221]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Re^2: using colors with print()
in thread using colors with print()

I believe there is a need to print the newline character after the reset, not before, or in other words, do not let color attributes span unnecessary lines, and those last lines dealing with $command are redundant.

sub textcolor ($$$); print textcolor (RESET, RED, BLACK), 'In color', textcolor (RESET, WHITE, BLACK), "\n"; sub textcolor ($$$) { my ($attr, $fg, $bg) = @_; sprintf "\e[%d;%d;%dm", $attr, $fg + 30, $bg + 40; }

Replies are listed 'Best First'.
Re^4: using colors with print()
by tachyon (Chancellor) on Jun 20, 2004 at 05:30 UTC

    Actually the ANSI escapes span lines so newline position is really immaterial (except from a neatness point of view). In fact AFAIK they remain active until reset, and this status outlives the life of your program as you are effectively manipulating defaults on your term.

     
    $ cat col.pl
    #!/usr/bin/perl
    
    # default black background
    use constant BLUE => "\e[0;34;40m";
    use constant RED  => "\e[0;31;40m";
    use constant DEFAULT  => "\e[0;37;40m";
    
    print "The flag is:
    ", RED, "
    red
    ", DEFAULT, "
    white &
    ", BLUE,"
    blue.
    
    ANSI color escapes
    will span", DEFAULT, " at least with
    putty as the terminal emulation.
    ", BLUE;
    
    $ ./col.pl
    The flag is:
    
    red
    
    white &
    
    blue.
    
    ANSI color escapes
    will span at least with
    putty as the terminal emulation.
    $
    $ echo Oops forgot to reset blue mode
    Oops forgot to reset blue mode
    $ perl -e 'print "\e[0;37;40m"';
    $ echo Fixed....
    Fixed....
    
    

    cheers

    tachyon

      Oh, you're absolutely right, the sequences do span lines, and indeed should, but I had problems on Solaris 8/xterm when I relied on this. Perhaps I shouldn't have even mentioned this.

      I will mention though, that the longer those sequences remain active, the greater the chance of the userr hitting Crtl-C and having their terminal in need of an \e[0m.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://368221]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.