#!/usr/bin/perl # omg-color -- by greenfly # application which colorizes input piped to it according to a specified pattern # # usage: cat file | omg-color # # current patterns are: # checkers -- red on black/black on red alternating in a checker pattern # chess -- white on black/black on white alternating in a checker pattern # random -- random on random # randomfg -- random on default # randomword -- randon on random, color changes after each word # randomwordfg -- random on default, color changes after each word # wave -- random on default, alternating in a wave pattern # rainbow -- alternating rainbow pattern $pattern = shift; # set some colors $escape = "\33["; $end = "m"; $fg{black} = "30"; $fg{red} = "31"; $fg{green} = "32"; $fg{yellow} = "33"; $fg{blue} = "34"; $fg{magenta} = "35"; $fg{lightblue} = "36"; $fg{white} = "37"; $bg{black} = "40"; $bg{red} = "41"; $bg{green} = "42"; $bg{yellow} = "43"; $bg{blue} = "44"; $bg{magenta} = "45"; $bg{lightblue} = "46"; $bg{white} = "47"; $color{brighten} = "01"; $color{normal} = "0"; $white_on_black = "$escape$fg{white};$bg{black}$end"; $black_on_white = "$escape$fg{black};$bg{white}$end"; $black_on_red = "$escape$fg{black};$bg{red}$end"; $red_on_black = "$escape$fg{red};$bg{black}$end"; if($pattern eq "checkers") { $color1 = $black_on_red; $color2 = $red_on_black; checkerboard(); } elsif($pattern eq "chess") { $color1 = $black_on_white; $color2 = $white_on_black; checkerboard(); } elsif($pattern eq "random") { random(); } elsif($pattern eq "randomfg") { randomfg(); } elsif($pattern eq "randomword") { randomword(); } elsif($pattern eq "randomwordfg") { randomwordfg(); } elsif($pattern eq "rainbow") { rainbow(); } elsif($pattern eq "wave") { wave(); } else { default(); } sub randomword { while(<>) { s/$/$escape$color{normal}$end/; while(/(\S+\s)/g) { my $fg = 0; my $bg = 0; while($fg == $bg) { $fg = int(rand 8); $bg = int(rand 8); } $fg += 30; $bg += 40; print "$escape$fg;$bg$end" . "$1"; } } print "$escape$color{normal}$end"; } sub randomwordfg { while(<>) { s/$/$escape$color{normal}$end/; while(/(\S+\s)/g) { $fg = int(rand 7) + 1; $fg += 30; $bg = 40; print "$escape$fg;$bg$end" . "$1"; } } print "$escape$color{normal}$end"; } #sub wave #{ # $count = 0; # while(<>) # { # s/$/$escape$color{normal}$end/; # $fg = $count; # while(/(\S+\s)/g) # { # $fg = ($fg % 8); # if($fg == 0) # { # $bg = 47; # } # else # { # $bg = 40; # } # $fg += 30; # print "$escape$fg;$bg$end" . "$1"; # $fg++; # } # # $count++; # } # print "$escape$color{normal}$end"; #} sub random { while(<>) { s/$/$escape$color{normal}$end/; while(/(.)/g) { my $fg = 0; my $bg = 0; while($fg == $bg) { $fg = int(rand 8); $bg = int(rand 8); } $fg += 30; $bg += 40; print "$escape$fg;$bg$end" . "$1"; } print "\n"; } print "$escape$color{normal}$end"; } sub randomfg { while(<>) { s/$/$escape$color{normal}$end/; while(/(.)/g) { $fg = int(rand 7) + 1; $fg += 30; $bg += 40; print "$escape$fg;$bg$end" . "$1"; } print "\n"; } print "$escape$color{normal}$end"; } sub rainbow { my @rainbow = qw(red yellow green blue magenta); my $count = 0; while(<>) { $wordcount = 0; while(/(.{1,10})/g) { if(($wordcount == 8) && ($count % 8 < 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; } elsif(($wordcount == 9) && ($count % 8 >= 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; } $fg = ($wordcount % 5); $bg = 40; print "$escape$fg{$rainbow[$fg]};$bg$end" . "$1"; $wordcount++; } $count++; print "$escape$color{normal}$end"; print "\n"; } print "$escape$color{normal}$end"; } sub wave { my $count = 0; while(<>) { if($count % 8 < 4) { $wordcount = 0; } else { $wordcount = 1; } while(/(.{1,10})/g) { if(($wordcount == 8) && ($count % 8 < 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; } elsif(($wordcount == 9) && ($count % 8 >= 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; } $fg = ($wordcount % 8); if($fg == 0) { $bg = 47; } else { $bg = 40; } $fg += 30; print "$escape$fg;$bg$end" . "$1"; $wordcount++; } $count++; print "$escape$color{normal}$end"; print "\n"; } print "$escape$color{normal}$end"; } sub checkerboard { my $count = 0; while(<>) { if($count % 8 < 4) { $wordcount = 0; } else { $wordcount = 1; } while(/(.{1,10})/g) { if(($wordcount == 8) && ($count % 8 < 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; if($count % 8 >= 4) { $wordcount = 1; } } elsif(($wordcount == 9) && ($count % 8 >= 4)) { print "$escape$color{normal}$end"; print "\n"; $count++; if($count % 8 < 4) { $wordcount = 0; } } if($wordcount % 2 == 0) { print "$color1" . "$1"; } else { print "$color2" . "$1"; } $wordcount++; } $count++; print "$escape$color{normal}$end"; print "\n"; } print "$escape$color{normal}$end"; } sub default { while(<>) { print; } }