# HG changeset patch # User Steve Losh # Date 1387469869 18000 # Node ID d9ae20d5e8298966836ff0abe32b0d87106a3911 # Parent 17b2d28b8871b6a5b305e0561c335d4f59cf470c weechat shit diff -r 17b2d28b8871 -r d9ae20d5e829 weechat/perl/autoload/colorize_lines.pl --- a/weechat/perl/autoload/colorize_lines.pl Tue Dec 17 10:59:44 2013 -0500 +++ b/weechat/perl/autoload/colorize_lines.pl Thu Dec 19 11:17:49 2013 -0500 @@ -1,5 +1,6 @@ # -# Copyright (c) 2010-2012 by Nils Görs +# Copyright (c) 2010-2013 by Nils Görs +# Copyleft (ɔ) 2013 by oakkitten # # colors the channel text with nick color and also highlight the whole line # colorize_nicks.py script will be supported @@ -17,9 +18,37 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# for settings see help page -# +# with version 3.0 some options were renamed or have new possible values: +# old: new: +# avail_buffer buffer +# blacklist_channels blacklist_buffers +# highlight new values + +# obsolete options: +# buffer_autoset +# hotlist_max_level_nicks_add +# highlight_regex +# highlight_words +# shuffle +# chat see option highlight + # history: +# 3.0: large part of script rewritten +# fix: works nicely with irc colors +# improved: highlight_regex and highlight_words work in a natural way +# removed: command /colorize_lines +# removed: option shuffle +# 2.2: fix: regex with [tab] in message (patch by sqrrl) +# 2.1: fix: changing highlight color did not apply messages already displayed (reported by rafi_) +# 2.0: fix: debugging weechat::print() removed (thanks demure) +# 1.9: fix: display bug with nick_mode +# 1.8 add: option "use_irc_colors" (requested by Zertap) +# fix: empty char for nick_mode was used, even when "irc.look.nick_mode_empty" was OFF (reported by FlashCode) +# 1.7: fix: broken lines in dcc chat (reported by equatorping) +# 1.6: improved: wildcard "*" can be used for server and/or nick. (requested by ldvx) +# : add: new value, "only", for option "own_lines" (read help!) +# 1.5: sync: option weechat.look.nickmode changed in 0.3.9 to "irc.look.nick_mode" +# 1.4: fix: whole ctcp message was display in prefix (reported by : Mkaysi) # 1.3: fix: now using weechat::buffer_get_string() instead of regex to prevent problems with dots inside server-/channelnames (reported by surfhai) # 1.2: add: hook_modifier("colorize_lines") to use colorize_lines with another script. # : fix: regex was too greedy and also hit tag "prefix_nick_ccc" @@ -31,12 +60,12 @@ # : clean up code # 0.8.1: fix: regex() # 0.8: added: option "avail_buffer" and "nicks" (please read help-page) (suggested by ldvx) -# : fix: blacklist_channels wasn't load at start +# : fix: blacklist_buffers wasn't load at start # : fix: nick_modes wasn't displayed since v0.7 # : rewrote init() routine # : thanks to stfn for hint with unescaped variables in regex. # 0.7: fix: bug when irc.look.nick_suffix was set (reported and beta-testing by: hw2) (>= weechat 0.3.4) -# blacklist_channels option supports servername +# blacklist_buffers option supports servername # clean up code # 0.6: code optimazations. # rename of script (rainbow_text.pl -> colorize_lines.pl) (suggested by xt and flashcode) @@ -55,528 +84,168 @@ # # Development is currently hosted at # https://github.com/weechatter/weechat-scripts -# -# requirements: sunglasses ;-) + +# use Data::Dumper +# $Data::Dumper::Useqq=1; use strict; my $prgname = "colorize_lines"; -my $version = "1.3"; -my $description = "colors text in chat area with according nick color. Highlight messages will be fully highlighted in chat area"; +my $version = "3.0"; +my $description = "colors text in chat area with according nick color, including highlights"; -# default values -my %default_options = ( "var_highlight" => "on", # script options in weechat - "var_avail_buffer" => "all", # all, channel, query - "var_chat" => "on", - "var_shuffle" => "off", - "var_buffer_autoset" => "off", - "var_look_highlight" => "off", - "var_look_highlight_regex" => "off", - "var_hotlist_max_level_nicks_add" => "off", - "var_blacklist_channels" => "", - "var_nicks" => "", - "var_own_lines" => "off", +my %config = ("buffers" => "all", # all, channel, query + "blacklist_buffers" => "", # "a,b,c" + "lines" => "on", + "highlight" => "on", # on, off, nicks + "nicks" => "", # "d,e,f", "/file" + "own_lines" => "on", # on, off, only ); -my %help_desc = ( "avail_buffer" => "messages will be colored in buffer (all = all buffers, channel = channel buffers, query = query buffers (default: all ", - "blacklist_channels" => "comma separated list with channelname. Channels in this list will be ignored. (e.g.: freenode.#weechat,freenode.#weechat-fr)", - "shuffle" => "toggle shuffle color mode for chats area (default: off)", - "chat" => "colors text in chat area with according nick color (default: on)", - "highlight" => "highlight messages will be fully highlighted in chat area (on = whole line will be highlighted, off = only nick will be highlighted, always = a highlight will always color the whole message) (default: on)", - "hotlist_max_level_nicks_add" => "toggle highlight for hotlist (default: off)", - "buffer_autoset" => "toggle highlight color in chat area for buffer_autoset (default: off)", - "look_highlight" => "toggle highlight color in chat area for option weechat.look.highlight (default: off)", - "look_highlight_regex" => "toggle highlight color in chat area for option weechat.look.highlight_regex (default: off)", - "nicks" => "comma separated list with nicknames. Only messages from nicks in this list will be colorized. (e.g.: freenode.nils_2,freenode.flashcode,freenode.weebot). You can also give a filename with nicks. The filename has to start with \"/\" (e.g.: /buddylist.txt). The format has to be: one nick each line with .", - "own_lines" => "colors own written messages (default: off)", +my %help_desc = ("buffers" => "buffer type affected by the script (all/channel/query, default: all)", + "blacklist_buffers" => "comma-separated list of channels to be ignored (e.g. freenode.#weechat,*.#python)", + "lines" => "apply nickname color to the non-highlighted lines (off/on/nicks). the latter will limit highlighting to nicknames in option 'nicks'", + "highlight" => "apply highlight color to the highlighted lines (off/on/nicks). the latter will limit highlighting to nicknames in option 'nicks'", + "nicks" => "comma-separater list of nicks (e.g. freenode.cat,*.dog) OR file name starting with '/' (e.g. /file.txt). in the latter case, nicknames will get loaded from that file inside weechat folder (e.g. from ~/.weechat/file.txt). nicknames in file are newline-separated (e.g. freenode.dog\\n*.cat)", + "own_lines" => "apply nickname color to own lines (off/on/only). the latter turns off all other kinds of coloring altogether", ); -my $zahl = 0; -my $weechat_version = 0; -my $nick_mode = ""; -my $get_prefix_action = ""; -my @var_blacklist_channels = ""; -my @nick_list = ""; - -# standard colours. -my %colours = ( 0 => "darkgray", 1 => "red", 2 => "lightred", 3 => "green", - 4 => "lightgreen", 5 => "brown", 6 => "yellow", 7 => "blue", - 8 => "lightblue", 9 => "magenta", 10 => "lightmagenta", 11 => "cyan", - 12 => "lightcyan", 13 => "white"); +#################################################################################################### config # program starts here sub colorize_cb { -my ( $data, $modifier, $modifier_data, $string ) = @_; - -if (index($modifier_data,"irc_privmsg") == -1){ # its neither a channel nor a query buffer - return $string; -} - -if ($default_options{var_highlight} eq "off" and $default_options{var_chat} eq "off"){ # all options OFF - return $string; -} - -# get servername and channelname. Do not use regex to extract server- and channelname out of $modifier_data. You will FAIL! -# some possible names: freenode.#weechat, freenode.#weechat.de, freenode.query, chat.freenode.net.#weechat, chat.freenode.net.#weechat.de -$modifier_data =~ (m/(.*);(.*);/); -my $plugin = $1; -my $name = $2; -my $buf_pointer = weechat::buffer_search($plugin,$name); -return $string if ($buf_pointer eq ""); -my $servername = weechat::buffer_get_string($buf_pointer, "localvar_server"); -my $channel_name = weechat::buffer_get_string($buf_pointer, "localvar_channel"); - -my $my_nick = weechat::info_get( 'irc_nick', $servername ); # get nick with servername (;freenode.) - -if ( grep /^$servername.$channel_name$/, @var_blacklist_channels ) { # check for blacklist_channels - return $string; -} - -$string =~ m/^(.*)\t(.*)/; # get the nick name: nick[tab]string -my $nick = $1; # nick with nick_mode and color codes -my $line = $2; # get written text - -$line = weechat::string_remove_color($line,""); # remove color-codes from line, first -# get the nick name from modifier_data (without nick_mode and color codes! Take care of tag "prefix_nick_ccc") -$modifier_data =~ m/(^|,)nick_(.*),/; -my $nick_wo_suffix = $2; # nickname without nick_suffix - -if ( lc($nick_wo_suffix) eq lc($my_nick) ){ # this one checks for own messages - if ( $default_options{var_avail_buffer} ne "all" ){ # check for option avail_buffer - if ( substr($channel_name, 0, 1) eq "#" ){ # get first chat of buffer. - return $string if ( $default_options{var_avail_buffer} ne "channel" ); # channel? yes - }else{ # query buffer? - return $string if ( $default_options{var_avail_buffer} ne "query" ); # yes - } - } -} + my ( $data, $modifier, $modifier_data, $string ) = @_; -# recreate irc.look.nick_suffix and irc.color.nick_suffix -my $nick_suffix_with_color = ""; -my $nick_suffix = weechat::config_string( weechat::config_get("irc.look.nick_suffix")); -if ( $nick_suffix ne "" ){ - my $nick_suffix_color = weechat::color( weechat::config_color( weechat::config_get( "irc.color.nick_suffix" ))); - $nick_suffix_with_color = $nick_suffix_color . $nick_suffix; -} -# recreate irc.look.nick_prefix and irc.color.nick_prefix -my $nick_prefix_with_color = ""; -my $nick_prefix = weechat::config_string( weechat::config_get("irc.look.nick_prefix")); -if ( $nick_prefix ne "" ){ - my $nick_prefix_color = weechat::color( weechat::config_color( weechat::config_get( "irc.color.nick_prefix" ))); - $nick_prefix_with_color = $nick_prefix_color . $nick_prefix; -} - -# check for action (/me) -my $prefix_action_with_color = ""; -if (index($modifier_data,"irc_action") >= 0){ - my $prefix_action_color = weechat::color( weechat::config_color( weechat::config_get( "weechat.color.chat_prefix_action" ))); - my $prefix_action = weechat::config_string( weechat::config_get("weechat.look.prefix_action")); - $prefix_action_with_color = $prefix_action_color . $prefix_action; -} - -# check if look.nickmode is ON and no prefix and no query buffer -$nick_mode = ""; -if ( weechat::config_boolean(weechat::config_get("weechat.look.nickmode")) == 1 and ($nick ne $get_prefix_action) and (index($modifier_data,"notify_private")) == -1){ -# if ($nick =~ m/^\@|^\%|^\+|^\~|^\*|^\&|^\!|^\-/) { # check for nick modes (@%+~*&!-) without colour - my $nick_pointer = weechat::nicklist_search_nick($buf_pointer,"",$nick_wo_suffix); - $nick_mode = weechat::nicklist_nick_get_string($buf_pointer,$nick_pointer,"prefix"); - my $color_mode = weechat::color( weechat::nicklist_nick_get_string($buf_pointer, $nick_pointer, "prefix_color") ); - if ( $nick_mode eq "" or $color_mode eq ""){ # no nick_mode! - $nick_mode = ""; - }else{ # nick_mode exists - $nick_mode = $color_mode . $nick_mode; - } -} - -# i wrote the message -#weechat::print("","nick_wo: $nick_wo_suffix"); -#weechat::print("","my_nick: $my_nick"); - if ($nick_wo_suffix eq $my_nick ){ # i wrote the message - return $string if check_whitelist_nicks($servername, $my_nick, $nick_wo_suffix); # check for whitelist - if ($default_options{var_chat} eq "on"){ - my $nick_color = weechat::config_color(weechat::config_get("weechat.color.chat_nick_self")); # get my nick color - $nick_color = weechat::color($nick_color); - $line = colorize_nicks($nick_color,$modifier_data,$line); - - if (index($modifier_data,"irc_action") >= 0){ # /me message? - $nick = $prefix_action_with_color; - $nick_mode = ""; # clear nick_mode for /me - }else{ - $nick = $nick_prefix_with_color . $nick_color . $nick_wo_suffix . $nick_suffix_with_color; - } - $line = $nick_mode . $nick_color . $nick . "\t" . $nick_color . $line . weechat::color('reset'); - return $line; - }else{ - return $string; - } + # quit if it's not a privmsg or ctcp + # or we are not supposed to + if ((index($modifier_data,"irc_privmsg") == -1) || + (index($modifier_data,"irc_ctcp") >= 0)) { + return $string; } - -# get nick color -$nick = $nick_wo_suffix; -#$nick = weechat::string_remove_color($nick_wo_suffix,""); # remove colour-codes from nick -my $nick_color = weechat::info_get('irc_nick_color', $nick_wo_suffix); # get nick-colour - - my $var_hl_max_level_nicks_add = 0; -# highlight message received? - if ( $default_options{var_highlight} eq "on" or $default_options{var_highlight} eq "always" ){# highlight_mode on? -# this one check for other nick!! - - unless ( $default_options{var_highlight} eq "always" ){ # option is not "always" - return $string if check_whitelist_nicks($servername, $my_nick, $nick_wo_suffix); # check for whitelist - } - - if ( $default_options{var_buffer_autoset} eq "on" || $default_options{var_look_highlight} eq "on" ){# buffer_autoset or look_highlight "on"? - my $highlight_words = ""; + # find buffer pointer + $modifier_data =~ m/([^;]*);([^;]*);/; + my $buffer = weechat::buffer_search($1, $2); + return $string if ($buffer eq ""); - # get strings from buffer_autoset and/or weechat.look.highlight and weechat.look.highlight_regex - if ($default_options{var_buffer_autoset} eq "on"){ - my $highlight_words_add = weechat::config_string(weechat::config_get("buffer_autoset.buffer.irc.".$servername.".".$channel_name.".highlight_words_add")); - $highlight_words .= $highlight_words_add . ","; - } - - if ($default_options{var_look_highlight} eq "on"){ - my $look_highlight = weechat::config_string( weechat::config_get("weechat.look.highlight") ); - $highlight_words .= $look_highlight; - } - if ( $default_options{var_hotlist_max_level_nicks_add} eq "on" and weechat::config_string(weechat::config_get("buffer_autoset.buffer.irc.".$servername.".".$channel_name.".hotlist_max_level_nicks_add")) =~ /$nick\:[0-2]/ ){ - $var_hl_max_level_nicks_add = 1; - } - - $/ = ","; # kill "," at end of string - - chomp($highlight_words); - -# weechat::print("",$highlight_words); - foreach ( split( /,+/, $highlight_words ) ) { # check for highlight_words - if ($_ eq ""){next;} # ignore empty string - my $search_string = shell2regex($_); + # find buffer name, server name + # return if buffer is in a blacklist + my $buffername = weechat::buffer_get_string($buffer, "name"); + return $string if weechat::string_has_highlight($buffername, $config{blacklist_buffers}); + my $servername = weechat::buffer_get_string($buffer, "localvar_server"); - if ($string =~ m/\b$search_string\b/gi){ # i (ignorecase) - my $color_highlight = weechat::config_color(weechat::config_get("weechat.color.chat_highlight")); - my $color_highlight_bg = weechat::config_color(weechat::config_get("weechat.color.chat_highlight_bg")); - my $high_color = weechat::color("$color_highlight,$color_highlight_bg"); - if (index($modifier_data,"irc_action") >= 0){ - $line = colorize_nicks($high_color,$modifier_data,$line); - $nick = $prefix_action_with_color; - $line = $high_color . $nick . "\t" . $high_color . $line . weechat::color('reset'); - return $line; - } - $line = colorize_nicks($high_color,$modifier_data,$line); - $line = $nick_mode . $high_color . $nick_prefix_with_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset'); - return $line; - } - } - } - # buffer_autoset is off. - if ( weechat::string_has_highlight($line, $my_nick) >= 1){ -# if (lc($string) =~ m/(\w.*$my_nick.*)/){ # my name called in string (case insensitiv)? - my $color_highlight = weechat::config_color(weechat::config_get("weechat.color.chat_highlight")); - my $color_highlight_bg = weechat::config_color(weechat::config_get("weechat.color.chat_highlight_bg")); - - my $high_color = weechat::color("$color_highlight,$color_highlight_bg"); + # find stuff between \t + $string =~ m/^([^\t]*)\t(.*)/; + my $left = $1; + my $right = $2; - if (index($modifier_data,"irc_action") >= 0){ # action used (/me)? - $line = colorize_nicks($high_color,$modifier_data,$line); - $nick = $prefix_action_with_color; - $line = $high_color . $nick . "\t" . $high_color . $line . weechat::color('reset'); - return $line; - } + # find nick of the sender + # find out if we are doing an action + my $nick = ($modifier_data =~ m/(^|,)nick_([^,]*)/) ? $2 : weechat::string_remove_color($left, ""); + my $action = ($modifier_data =~ m/\birc_action\b/) ? 1 : 0; -# highlight whole line - if ( $var_hl_max_level_nicks_add eq 0 ){ - $line = colorize_nicks($high_color,$modifier_data,$line); - $line = $nick_prefix_with_color . $nick_mode . $high_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset'); - return $line; - } - } - } # highlight area finished - -return $string if check_whitelist_nicks($servername, $my_nick, $nick_wo_suffix); # check for whitelist -# this one check for other nick!! -if ( $default_options{var_avail_buffer} ne "all" ){ # check for option avail_buffer - if ( index($modifier_data,"notify_message") > -1){ # message is public - return $string if ( $default_options{var_avail_buffer} ne "channel" ); - }elsif ( index($modifier_data,"notify_private") > -1){ # message is privat - return $string if ( $default_options{var_avail_buffer} ne "query" ); - } -} + ######################################## get color -# simple channel message - if ($default_options{var_chat} eq "on"){ # chat_mode on? - if ($default_options{var_shuffle} eq "on"){ # color_shuffle on? - my $zahl2 = 0; - my $my_color = weechat::config_color(weechat::config_get("weechat.color.chat_nick_self"));# get my own nick colour - for (1){ # get a random colour but don't use - redo if ( $zahl == ($zahl2 = int(rand(14))) or ($colours{$zahl2} eq $my_color) );# latest color nor own nick color - $zahl = $zahl2; - } - $nick_color = weechat::color($colours{$zahl}); # get new random color - } - -# check for weechat version and use weechat.look.highlight_regex option - if ( $weechat_version eq 1 ){ # weechat is >= 0.3.4? - if ( $default_options{var_look_highlight_regex} eq "on" ){ - if ( weechat::string_has_highlight_regex($line,weechat::config_string(weechat::config_get("weechat.look.highlight_regex"))) eq 1 ){ - my $color_highlight = weechat::config_color(weechat::config_get("weechat.color.chat_highlight")); - my $color_highlight_bg = weechat::config_color(weechat::config_get("weechat.color.chat_highlight_bg")); - - my $high_color = weechat::color("$color_highlight,$color_highlight_bg"); - $line = colorize_nicks($high_color,$modifier_data,$line); - $line = $nick_prefix_with_color . $nick_mode . $high_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset'); - return $line; - } - } - } - if (index($modifier_data,"irc_action") >= 0){ -# if ($default_options{prefix_action} eq $nick){ - my $nick_color = weechat::info_get('irc_nick_color', $nick_wo_suffix); # get nick-color - $line = colorize_nicks($nick_color,$modifier_data,$line); - $nick = $prefix_action_with_color; - $line = $nick . "\t" . $nick_color . $line . weechat::color('reset'); - return $line; - } - - $line = colorize_nicks($nick_color,$modifier_data,$line); - $line = $nick_prefix_with_color . $nick_mode . $nick_color . $nick . $nick_suffix_with_color . "\t" . $nick_color . $line . weechat::color('reset'); # create new line nick_color+nick+separator+text - return $line; - }else{ - return $string; # return original string - } -} # end of sub colorize_cb{} - -# whitelist nicks -sub check_whitelist_nicks{ -my ( $servername, $my_nick, $nick_wo_suffix ) = @_; - if ( $default_options{var_nicks} ne "" and $default_options{var_own_lines} eq "off" ){ # nicks in option and own_lines = off - return 1 unless (grep /^\Q$servername.$nick_wo_suffix\E$/i, @nick_list) # check other nicks - }elsif ( $default_options{var_nicks} ne "" and $default_options{var_own_lines} eq "on" ){ # nicks in option and own_lines = on - if ( $nick_wo_suffix ne $my_nick){ # not my nick! - return 1 unless (grep /^\Q$servername.$nick_wo_suffix\E$/i, @nick_list) # check other nicks - } - }elsif( $default_options{var_nicks} eq "" and $default_options{var_own_lines} eq "off" ){ # no nicks and do not color my line? - if ( $nick_wo_suffix eq $my_nick){ # my nick? - return 1; # yes - } - } -return 0; -} - -# converts shell wildcard characters to regex -sub shell2regex { - my $globstr = shift; - my %patmap = ( - '*' => '.*', - '?' => '.', - '[' => '[', - ']' => ']', - ); - $globstr =~ s{(.)} { $patmap{$1} || "\Q$1" }ge; - return $globstr; -} - -# check for colorize_nicks script an set colour before and after nick name -sub colorize_nicks{ -my ( $nick_color, $mf_data, $line ) = @_; - -my $pyth_ptn = weechat::infolist_get("python_script","","colorize_nicks"); -weechat::infolist_next($pyth_ptn); - -if ( "colorize_nicks" eq weechat::infolist_string($pyth_ptn,"name") ){ # does colorize_nicks is installed? - $line = weechat::hook_modifier_exec( "colorize_nicks",$mf_data,$line); # call colorize_nicks function and color the nick(s) - my @array = ""; - my $color_code_reset = weechat::color('reset'); - @array=split(/$color_code_reset/,$line); - my $new_line = ""; - foreach (@array){ - $new_line .= $nick_color . $_ . weechat::color('reset'); - } - $new_line =~ s/\s+$//g; # remove space at end - $line = $new_line; -} -weechat::infolist_free($pyth_ptn); - -return $line; -} - -# -----------------------------[ config ]----------------------------------- -sub init_config{ - foreach my $option ( keys %default_options ){ - $option = substr($option,4,length($option)-4); - if (!weechat::config_is_set_plugin($option)){ - weechat::config_set_plugin($option, $default_options{"var_" . $option}); - }else{ - $default_options{"var_" . $option} = lc( weechat::config_get_plugin($option) ); + my $color = ""; + my $my_nick = weechat::buffer_get_string($buffer, "localvar_nick"); + if ($my_nick eq $nick) { + # it's our own line + # process only if own_lines is "on" or "only" (i.e. not "off") + return $string if ($config{own_lines} eq "off"); + $color = weechat::color("chat_nick_self"); + } else { + # it's someone else's line + # don't process is own_lines are "only" + # in order to get correct matching, remove colors from the string + return $string if ($config{own_lines} eq "only"); + my $right_nocolor = weechat::string_remove_color($right, ""); + if (weechat::string_has_highlight($right_nocolor, weechat::buffer_string_replace_local_var($buffer, weechat::buffer_get_string($buffer, "highlight_words"))) || + weechat::string_has_highlight($right_nocolor, weechat::config_string(weechat::config_get("weechat.look.highlight"))) || + weechat::string_has_highlight_regex($right_nocolor, weechat::config_string(weechat::config_get("weechat.look.highlight_regex"))) || + weechat::string_has_highlight_regex($right_nocolor, weechat::buffer_get_string($buffer, "highlight_regex")) + ) { + # we have a hilight! get a hilight color + # and replace the first occurance of coloring, that'd be nick color + # process only if highlight is "on" OR "nicks" & nick's in nicks + return $string if ($config{highlight} eq "off" || + ($config{highlight} eq "nicks" && !weechat::string_has_highlight("$servername.$nick", $config{nicks}))); + $color = weechat::color('chat_highlight'); + $right =~ s/\31[^\31 ]+?\Q$nick/$color$nick/ if ($action); + } else { + # that's not a highlight + # process only if lines is "on" OR "nicks" & nick's in nicks + return $string if ($config{lines} eq "off" || + ($config{lines} eq "nicks" && !weechat::string_has_highlight("$servername.$nick", $config{nicks}))); + $color = weechat::info_get('irc_nick_color', $nick); } } - if ( ($weechat_version ne "") && (weechat::info_get("version_number", "") >= 0x00030500) ) { # v0.3.5 - description_options(); - } + ######################################## inject colors and go! - if ( $default_options{"var_blacklist_channels"} ne "" ){ - @var_blacklist_channels = ""; - @var_blacklist_channels = split( /,/, $default_options{"var_blacklist_channels"} ); - } - if ( $default_options{var_nicks} ne "" ){ - undef (@nick_list); - if ( substr($default_options{var_nicks}, 0, 1) eq "/" ){ # get first chat of nicks "/" ? - nicklist_read(); # read nicks from file - }else{ - @nick_list = split( /,/, $default_options{var_nicks} ); # use nicks from option - } - } - -} - -sub toggle_config_by_set{ -my ( $pointer, $name, $value ) = @_; - $name = substr($name,length("plugins.var.perl.$prgname."),length($name)); - $default_options{"var_" . $name} = lc($value); - - if ( $name eq "blacklist_channels" ){ - @var_blacklist_channels = ""; - @var_blacklist_channels = split( /,/, $default_options{"var_" . $name} ); + my $out = ""; + if ($action) { + # remove the first color reset - after * nick + # make other resets reset to our color + $right =~ s/\34//; + $right =~ s/\34/\34$color/g; + $out = $left . "\t" . $right . "\34" + } else { + # make other resets reset to our color + $right =~ s/\34/\34$color/g; + $out = $left . "\t" . $color . $right . "\34" } - if ( $name eq "nicks" ){ - undef (@nick_list); - if ( $default_options{"var_".$name} eq "" ){ # no nicks given - undef (@nick_list); -# count_nicks(); - }elsif ( substr($default_options{var_nicks}, 0, 1) eq "/" ){ # get first chat of nicks "/" ? - nicklist_read(); # read nicks from file -# count_nicks(); - }else{ - @nick_list = split( /,/, $default_options{"var_" . $name} ); -# count_nicks(); - } - } - -$default_options{var_avail_buffer} = "all" if ( $default_options{var_avail_buffer} eq "" ); - -return weechat::WEECHAT_RC_OK ; -} - -# create description options for script... -sub description_options{ - foreach my $option ( keys %help_desc ){ - weechat::config_set_desc_plugin( $option,$help_desc{$option} ); - } -} - -# toggle functions on/off with command line -sub change_settings{ -my $getarg = lc($_[2]); # switch to lower-case - - foreach my $option ( keys %default_options ){ - $option = substr($option,4,length($option)-4); # remove "var_" from option - if ( $getarg eq $option ){ - if ( $default_options{"var_" . $option} eq "on" ){ - weechat::config_set_plugin( $option, "off" ); - }else{ - weechat::config_set_plugin( $option, "on" ); - } - } - } -return weechat::WEECHAT_RC_OK; + #weechat::print("", ""); weechat::print("", "\$str " . Dumper($string)); weechat::print("", "\$out " . Dumper($out)); + return $out; } +#################################################################################################### config + +# read nicknames if $conf{nisks} starts with / +# after this, $conf{nisks} is of form a,b,c,d +# if it doesnt start with /, assume it's already a,b,c,d sub nicklist_read { - undef (@nick_list); - my $weechat_dir = weechat::info_get( "weechat_dir", "" ); - my $nicklist = weechat::config_get_plugin("nicks"); - $nicklist = $weechat_dir.$nicklist; - $default_options{var_nicks} = "" unless -e $nicklist; - return unless -e $nicklist; - open (WL, "<", $nicklist) || DEBUG("$nicklist: $!"); - while () { - chomp; # kill LF - my ( $servername, $nickname ) = split /\./; # servername,nickname (seperator could be "," or ".") - if (not defined $nickname){ - close WL; - weechat::print("",weechat::prefix("error")."$prgname: $nicklist is not valid format (.)."); - return; - } - push @nick_list,($servername.".".$nickname."," ); # servername.nickname+"," - } - close WL; - chop @nick_list; # remove last "," + return if (substr($config{nicks}, 0, 1) ne "/"); + my $file = weechat::info_get("weechat_dir", "") . $config{nicks}; + return unless -e $file; + my $nili = ""; + open (WL, "<", $file) || DEBUG("$file: $!"); + while () { + chomp; # kill LF + $nili .= $_ . ","; + } + close WL; + chop $nili; # remove last "," + $config{nicks} = $nili; } -# debug.... -sub count_nicks{ - my $anzahl=@nick_list; - weechat::print("","anzahl: $anzahl"); - - foreach (@nick_list){ - weechat::print ("","$_"); - } +# called when a config option ha been changed +# $name = plugins.var.perl.$prgname.nicks etc +sub toggle_config_by_set { + my ($pointer, $name, $value) = @_; + $name = substr($name,length("plugins.var.perl.$prgname."),length($name)); + $config{$name} = lc($value); + nicklist_read() if ($name eq "nicks"); } -# -------------------------------[ init ]------------------------------------- -# first function called by a WeeChat-script. -weechat::register($prgname, "Nils Görs ", $version, - "GPL3", $description, "", ""); -# check weechat version - $weechat_version = weechat::info_get("version_number", ""); - if (( $weechat_version eq "" ) or ( $weechat_version < 0x00030400 )){ - weechat::print("",weechat::prefix("error")."$prgname: needs WeeChat >= 0.3.4. Please upgrade: http://www.weechat.org/"); - weechat::command("","/wait 1ms /perl unload $prgname"); - } - -init_config(); - - -$get_prefix_action = weechat::config_string(weechat::config_get("weechat.look.prefix_action")); -weechat::hook_modifier("weechat_print","colorize_cb", ""); -weechat::hook_modifier("colorize_lines","colorize_cb", ""); - - if (( $weechat_version ne "" ) && ( $weechat_version >= 0x00030400 )){ # v0.3.4? - $weechat_version = 1; # yes! - - # read nick colours if exists (>= weechat 0.3.4) in %colours - my $colours_buf = weechat::config_string(weechat::config_get("weechat.color.chat_nick_colors")); - if ( $colours_buf ne "" ) { - my @array = split(/,/,$colours_buf); - my $i = 0; - foreach (@array){ - $colours{$i++} = $_; +# read configuration from weechat OR +# set default options and +# set dectription if weechat >= 0.3.5 +# after done, read nicklist from file if needed +sub init_config { + my $weechat_version = weechat::info_get('version_number', '') || 0; + foreach my $option (keys %config){ + if (!weechat::config_is_set_plugin($option)) { + weechat::config_set_plugin($option, $config{$option}); + weechat::config_set_desc_plugin($option, $help_desc{$option}) if ($weechat_version >= 0x00030500); # v0.3.5 + } else { + $config{$option} = lc(weechat::config_get_plugin($option)); } - undef $colours_buf; - undef @array; } - } - -weechat::hook_command($prgname, $description, - - " || || || || || || || ", + nicklist_read(); +} - " toggle highlight color in chat area (on/off)\n". - " colors the text in chat area with according nick color (on/off)\n". - " toggle shuffle color mode on/off\n". - " toggle highlight color mode for buffer_autoset on/off\n". - " toggle highlight color mode for weechat.look.highlight on/off\n". - " toggle highlight color in chat area for option weechat.look.highlight_regex on/off\n". - " toggle hotlist_max_level_nicks_add on/off\n". - " toggle coloring of own lines on/off\n". - "\n". - "Options (script):\n". - " 'plugins.var.perl.$prgname.highlight' : $help_desc{highlight}\n". - " 'plugins.var.perl.$prgname.hotlist_max_level_nicks_add' : $help_desc{hotlist_max_level_nicks_add}\n". - " 'plugins.var.perl.$prgname.buffer_autoset' : $help_desc{buffer_autoset}\n". - " 'plugins.var.perl.$prgname.look_highlight' : $help_desc{look_highlight}\n". - " 'plugins.var.perl.$prgname.look_highlight_regex' : $help_desc{look_highlight_regex}\n". - " 'plugins.var.perl.$prgname.chat' : $help_desc{chat}\n". - " 'plugins.var.perl.$prgname.shuffle' : $help_desc{shuffle}\n". - " 'plugins.var.perl.$prgname.blacklist_channels' : $help_desc{blacklist_channels}\n". - " 'plugins.var.perl.$prgname.avail_buffer' : $help_desc{avail_buffer}\n". - " 'plugins.var.perl.$prgname.nicks' : $help_desc{nicks}\n". - " 'plugins.var.perl.$prgname.own_lines' : $help_desc{own_lines}\n". - "\n". - "Options (global):\n". - " 'weechat.color.chat_highlight' : highlight color\n". - " 'weechat.color.chat_highlight_bg' : highlight background color\n". - " 'weechat.color.chat_nick*' : colors for nicks\n\n". - "To use options \"buffer_autoset\" and/or \"hotlist_max_level_nicks_add\" install buffer_autoset script from: http://www.weechat.org/scripts/\n", - "highlight|chat|shuffle|autoset|look_highlight|look_highlight_regex|hotlist|own_lines %-", "change_settings", ""); +#################################################################################################### start -weechat::hook_config( "plugins.var.perl.$prgname.*", "toggle_config_by_set", "" ); +weechat::register($prgname, "Nils Görs ", $version, "GPL3", $description, "", ""); +weechat::hook_modifier("500|weechat_print","colorize_cb", ""); +init_config(); +weechat::hook_config("plugins.var.perl.$prgname.*", "toggle_config_by_set", ""); diff -r 17b2d28b8871 -r d9ae20d5e829 weechat/plugins.conf --- a/weechat/plugins.conf Tue Dec 17 10:59:44 2013 -0500 +++ b/weechat/plugins.conf Thu Dec 19 11:17:49 2013 -0500 @@ -29,11 +29,14 @@ perl.buffers.sort = "number" perl.check_license = "on" perl.colorize_lines.avail_buffer = "all" +perl.colorize_lines.blacklist_buffers = "" perl.colorize_lines.blacklist_channels = "" perl.colorize_lines.buffer_autoset = "off" +perl.colorize_lines.buffers = "all" perl.colorize_lines.chat = "off" perl.colorize_lines.highlight = "on" perl.colorize_lines.hotlist_max_level_nicks_add = "off" +perl.colorize_lines.lines = "off" perl.colorize_lines.look_highlight = "on" perl.colorize_lines.look_highlight_regex = "on" perl.colorize_lines.nicks = "" @@ -61,8 +64,10 @@ [desc] perl.colorize_lines.avail_buffer = "messages will be colored in buffer (all = all buffers, channel = channel buffers, query = query buffers (default: all " +perl.colorize_lines.blacklist_buffers = "comma-separated list of channels to be ignored (e.g. freenode.#weechat,*.#python)" perl.colorize_lines.blacklist_channels = "comma separated list with channelname. Channels in this list will be ignored. (e.g.: freenode.#weechat,freenode.#weechat-fr)" perl.colorize_lines.buffer_autoset = "toggle highlight color in chat area for buffer_autoset (default: off)" +perl.colorize_lines.buffers = "buffer type affected by the script (all/channel/query, default: all)" perl.colorize_lines.chat = "colors text in chat area with according nick color (default: on)" perl.colorize_lines.highlight = "highlight messages will be fully highlighted in chat area (on = whole line will be highlighted, off = only nick will be highlighted, always = a highlight will always color the whole message) (default: on)" perl.colorize_lines.hotlist_max_level_nicks_add = "toggle highlight for hotlist (default: off)" diff -r 17b2d28b8871 -r d9ae20d5e829 weechat/weechat.conf --- a/weechat/weechat.conf Tue Dec 17 10:59:44 2013 -0500 +++ b/weechat/weechat.conf Thu Dec 19 11:17:49 2013 -0500 @@ -34,8 +34,8 @@ day_change = on day_change_time_format = "%a, %d %b %Y" eat_newline_glitch = off -highlight = "sjl" -highlight_regex = "(sjl|^all[,:]|backend(ia)?[^/]|slosh|slj|clojerks|red[- ]tape|c2c|arroway|[mM]oney ?[dD]rop)" +highlight = "sjl,slosh,slj,clojerks,c2c,arroway" +highlight_regex = "(^all[,:]|backend(ia)?[^/]|red[- ]tape|[mM]oney ?[dD]rop)" highlight_tags = "" hotlist_add_buffer_if_away = on hotlist_buffer_separator = ", "