use strict; use vars qw($VERSION %IRSSI); use Irssi; $VERSION = '1.0'; %IRSSI = ( authors => "stryk", contact => '$IRSSI{authors} + + protonmail + + <2-char Country Code for Switzerland>', name => "ez_color", description => "Provides a single helper function to wrap mIRC-style color codes around strings", license => 'WTFPL/2 @ http://www.wtfpl.net/about/', changed => '2020-09-10', ); #################### #### You can call this helper function from other scripts, #### ***AS LONG AS ez_color.pl IS LOADED IN IRSSI*** #################### # USAGE: # Irssi::Script::ez_color::colorize(@args) # --------- # or, better yet, with a coderef: my $var = \&Irssi::Script::ez_color::colorize; # and then call with: $var->(@args); ################## # EXAMPLE: # Irssi::active_win->command( "say ".Irssi::Script::ez_color::colorize('COLOR THIS TEXT', 'white', 'red') ); # --------- # or, with the above coderef $var: # Irssi::active_win->command( "say ".$var->('COLOR THIS TEXT', 'white', 'red') ); ################## # ARGUMENTS: (all color names are case-INsensitive) # [string-to-colorize], [foreground-color], [background-color(OPTIONAL)] # >>> arg #2 may, instead of a color-name, be one of: [normal, bold, underline, reverse, italic] ################## # Be aware that most terminal emulators don't play well with ITALIC, results may not be what you expect. # Feel free to change the colormap names, add more aliases, or whatever -- be wary of altering 'C' however. sub colorize { my($str_in, $fgcol, $bgcol) = @_; my $ret_str; my %_C = ( C => "\x{03}", NORMAL => "\x{0f}", BOLD => "\x{02}", UNDERLINE => "\x{1f}", UL => "\x{1f}", REVERSE => "\x{16}", REV => "\x{16}", ITALIC => "\x{1d}", WHITE => "00", BLACK => "01", BLUE => "02", GREEN => "03", RED => "04", BROWN => "05", PURPLE => "06", ORANGE => "07", YELLOW => "08", TEAL => "10", PINK => "13", GREY => "14", GRAY => "14", LIGHT_BLUE => "12", CYAN => "11", LIGHT_GREEN => "09", LIGHT_GRAY => "15", LIGHT_GREY => "15", ); $fgcol = uc($fgcol || 'normal'); if ($fgcol =~ m/(?:bold|underline|ul|rev(?:erse)?|italic|normal)/i) { $ret_str = join('', $_C{$fgcol}, $str_in, $_C{NORMAL}); return $ret_str; }; my $_colcode = $_C{$fgcol}; unless (defined($_colcode)){ Irssi::print("BAD COLOR NAME PASSED TO colorize FUNCTION", MSGLEVEL_CLIENTCRAP); return $str_in; }; if (defined($bgcol)){ $bgcol = uc($bgcol); $_colcode .= ",".$_C{$bgcol} if exists $_C{$bgcol}; }; $ret_str = join('', $_C{C}, $_colcode, $str_in, $_C{NORMAL}); return $ret_str; };