#!/usr/bin/perl # nowadays dmesg is already colored so this is kinda obsolete, even # though I prefer my coloring myself. use strict; use Term::ExtendedColor qw(fg bg); use feature 'say'; #open(my $fh, '-|', 'dmesg --color=always') or die("Cant popen dmesg $!\n"); open(my $fh, '-|', 'dmesg') or die("Cant popen dmesg $!\n"); chomp(my @data = <$fh>); close($fh); # Disable autoreset #Term::ExtendedColor::autoreset(0); for(@data) { # $_ =~ s/^\[\s*([0-9]+\.[0-9]+)\]/fg('bold', '[') . fg('green14', $1) . fg('bold', ']')/egi; $_ =~ s/^\[\s*([0-9]+\.[0-9]+)\]/\b/gi; # $_ =~ s/^(.+): /sprintf("%.15s ", sprintf("%15s", $1))/egi; $_ =~ s/ ([\w\s.]+): /' ' . fg('orange1', $1) .': '/egi; $_ =~ s/(usb)/fg('blue12', bg('bold', $1))/egi; $_ =~ s/(disconnect)/bg('magenta16', fg('bold', $1))/egi; $_ =~ s/(high speed)/fg('green20', fg('bold', $1))/egi; $_ =~ s/(full speed)/fg('green12', fg('bold', $1))/egi; $_ =~ s/(low speed)/fg('green4', fg('bold', $1))/egi; # Disks detected if($_ =~ /(^sd.*)\[(.+)\](.+)/) { my $pre = fg('grey18', $1) . fg('bold', '['); my $disk = fg('yellow17', $2) . fg('bold', ']'); my $post = fg('grey18', $3); say "$pre$disk$post"; } # Out of memory elsif($_ =~ /^(Out of memory): (.+) process (\d+) \((.+)\)/) { my $pre = fg('reverse', $1) . ': '; my $kill = fg('bold', fg('green3', $2)); my $pid = fg('bold', fg('green4', $3)); my $app = fg('green1', $4); my $post = fg('reverse', $5); say "$pre$kill $pid ($app) $post"; } elsif($_ =~ /^(Killed) (process) (\d+) \((.+)\)/) { my $pre = fg('reverse', $1) . ': '; my $kill = fg('bold', fg('green3', $2)); my $pid = fg('bold', fg('green4', $3)); my $app = fg('green1', $4); my $post = fg('reverse', $5); say "$pre$kill $pid ($app) $post"; } # segfault app PID elsif($_ =~ /^(.+)\[(\d+)\]: (segfault) (.+)/) { my $app = fg('bold', fg('cyan24', $1)); my $pid = fg('bold', fg('reverse', fg('red4', $2))); my $seg = fg('bold', $3); my $post = fg('red2', $4); say "$pid: $app - $seg $post"; } elsif($_ =~ /(.+) (Direct-Access)\s+(.+)/) { my $pre = fg('grey18', $1); my $acc = fg('grey10', fg('bold', $2)); my $model = fg('purple14', fg('bold', $3));; say "$pre $acc $model"; } # EXT4-fs sdh1 warning: maximal mount count reached, running e2fsck is # recommended # # and others elsif($_ =~ /(.+) \((.+)\): (.+)/) { my $fs = fg('bold', $1); my $disk = fg('bold', fg('green20', $2));; my $post = fg('bold', $3); say "$fs $disk $post"; } elsif($_ =~ /^TCP: Peer/) { say fg('italic', fg('gray20', $_)); } elsif($_ =~ /^(ACPI): (.+)/) { say fg('bold', $1) . ": $2"; } elsif($_ =~ /(.+)(disabled?|danger|disabling|timeout)(.+)/i) { say fg('lightpink3', $1), fg('bold', fg('red1', $2)), fg('lightpink3', $3); } elsif($_ =~ /(.+)?(enabled|enabling|loaded|authenticated?)(.+)/) { say $1 . fg('green26', fg('bold', ($2))) . $3; } else { say fg('grey18', $_); } } __END__ =pod =head1 NAME colored-dmesg - colorize the dmesg output =head1 DESCRIPTION colored_dmesg demonstrates the color functions exported by L<Term::ExtendedColor>. =head1 AUTHOR Magnus Woldrich CPAN ID: WOLDRICH m@japh.se http://japh.se =head1 REPORTING BUGS Report bugs to m@japh.se =head1 COPYRIGHT Copyright (C) 2010, 2011 Magnus Woldrich =cut