--- a/weechat/perl/autoload/colorize_lines.pl	Tue Jan 17 14:25:49 2012 -0500
+++ b/weechat/perl/autoload/colorize_lines.pl	Wed Jan 18 16:30:31 2012 -0500
@@ -17,9 +17,19 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# settings see help page
+# for settings see help page
 #
 # history:
+# 1.0: fixed: irc.look.nick_prefix wasn't supported
+# 0.9: added: option "own_nick" (idea by travkin)
+#    : new value (always) for option highlight
+#    : clean up code
+# 0.8.1: fixed: regex()
+# 0.8: added: option "avail_buffer" and "nicks" (please read help-page) (suggested by ldvx)
+#    : fixed: blacklist_channels wasn't load at start
+#    : fixed: nick_modes wasn't displayed since v0.7
+#    : rewrote init() routine
+#    : thanks to stfn for hint with unescaped variables in regex.
 # 0.7: fixed: bug when irc.look.nick_suffix was set (reported and beta-testing by: hw2) (>= weechat 0.3.4)
 #      blacklist_channels option supports servername
 #      clean up code
@@ -38,35 +48,55 @@
 #    : /me text will be coloured, too
 # 0.1: initial release
 #
+# Development is currently hosted at
+# https://github.com/weechatter/weechat-scripts
+#
 # requirements: sunglasses ;-)
 
 use strict;
 my $prgname	= "colorize_lines";
-my $version	= "0.7";
+my $version	= "1.0";
 my $description	= "colors text in chat area with according nick color. Highlight messages will be fully highlighted in chat area";
 
 # default values
-my %default_options = (	"var_highlight"		=> "on",
-			"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",
-			"zahl"			=> 0,
-			"default_version"	=> 0,
-			"prefix_action"		=> "",
-			"var_blacklist_channels"	=> "",
+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 @var_blacklist_channels = "";
 
+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 <servername>.<nickname>",
+                  "own_lines"            => "colors own written messages (default: off)",
+);
+
+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");
+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");
 
 # program starts here
 sub colorize_cb {
@@ -76,30 +106,37 @@
   return $string;
 }
 
-if ($default_options{var_highlight} eq "off" and $default_options{var_chat} eq "off"){		# all options OFF
+if ($default_options{var_highlight} eq "off" and $default_options{var_chat} eq "off"){          # all options OFF
   return $string;
 }
 
-$modifier_data =~ (m/irc;(.+?)\.(.+?)\;/);							# irc;servername.channelname;
+$modifier_data =~ (m/irc;(.+?)\.(.+?)\;/);                                                      # irc;servername.channelname;
 my ($t0, $t1 , $t2) = split(/;/,$modifier_data);
 #$t1 =~ m/^(.+)\.(.+)$/;
 my $servername = $1;
 my $channel_name = $2;
-
+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;
 }
 
-my $my_nick = weechat::info_get( 'irc_nick', $servername );                                    # get nick with servername (;freenode.)
-
-$string =~ m/^(.*)\t(.*)/;									# get the nick name: nick[tab]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
+my $line = $2;                                                                                  # get written text
 $line = weechat::string_remove_color($line,"");                                                 # remove color-codes from line, first
+$modifier_data =~ m/nick_(.*),/;                                                                # get the nick name from modifier_data (without nick_mode and color codes!)
+my $nick_wo_suffix = $1;                                                                        # nickname without nick_suffix
 
-$modifier_data =~ m/nick_(.*),/;                                                                # get the nick name from modifier_data (without nick_mode and color codes!)
-$nick = $1;
+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
+    }
+  }
+}
 
 # recreate irc.look.nick_suffix and irc.color.nick_suffix
 my $nick_suffix_with_color = "";
@@ -108,6 +145,13 @@
   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 = "";
@@ -119,13 +163,13 @@
 
 # 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 $default_options{prefix_action}) and (index($modifier_data,"notify_private")) == -1){
+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 $buf_pointer = weechat::buffer_search("irc",$servername . "." . $channel_name);
-      my $nick_pointer = weechat::nicklist_search_nick($buf_pointer,"",$nick);
+      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::config_string( weechat::config_get( weechat::nicklist_nick_get_string($buf_pointer,$nick_pointer,"prefix_color") ) ) );
-      if ( $nick_mode eq " " or $color_mode eq ""){                                             # no nick_mode!
+      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;
@@ -133,16 +177,19 @@
 }
 
 # i wrote the message
-    if ($nick eq $my_nick ){	        			        				# i wrote the message
+    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
+	  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){
+          if (index($modifier_data,"irc_action") >= 0){                                                 # /me message?
             $nick = $prefix_action_with_color;
+            $nick_mode = "";                                                                            # clear nick_mode for /me
           }else{
-            $nick = $nick . $nick_suffix_with_color;
+            $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;
@@ -151,13 +198,21 @@
       }
     }
 
+
 # get nick color
-$nick = weechat::string_remove_color($nick,"");							# remove colour-codes from nick
-my $nick_color = weechat::info_get('irc_nick_color', $nick);					# get nick-colour
+$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"){						# highlight_mode on?
+    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 = "";
 
@@ -175,15 +230,15 @@
 	    $var_hl_max_level_nicks_add = 1;
 	  }
 
-	    # kill "," at end of string
-	    $/ = ",";
+            $/ = ",";                                                                           # kill "," at end of string
+
 	    chomp($highlight_words);
 
-	      foreach ( split( /,+/, $highlight_words ) ) {					# check for highlight_words
-		  if ($_ eq ""){next;}								# ignore empty string
+	      foreach ( split( /,+/, $highlight_words ) ) {                                     # check for highlight_words
+		  if ($_ eq ""){next;}                                                          # ignore empty string
 		    my $search_string = shell2regex($_);
 
-		  if ($string =~ m/\b$search_string\b/gi){					# i (ignorecase)
+		  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");
@@ -194,19 +249,18 @@
 			    return $line;
 			  }
 		    $line = colorize_nicks($high_color,$modifier_data,$line);
-		    $line = $nick_mode . $high_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset');
+		    $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.
-    # TODO: Fix "all:" and "all," highlighting
 	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");
 
-              if (index($modifier_data,"irc_action") >= 0){                                    # action used (/me)
+              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');
@@ -216,40 +270,50 @@
 # highlight whole line
 	if ( $var_hl_max_level_nicks_add eq 0 ){
 	      $line = colorize_nicks($high_color,$modifier_data,$line);
-	      $line = $nick_mode . $high_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset');
+	      $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" );
+  }
+}
+
 # simple channel message
-    if ($default_options{var_chat} eq "on"){							# chat_mode on?
-	if ($default_options{var_shuffle} eq "on"){						# color_shuffle on?
+    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 ( $default_options{zahl} ==  ($zahl2 = int(rand(14))) or ($colours{$zahl2} eq $my_color) );	# latest color nor own nick color
-	      $default_options{zahl} = $zahl2;
+	  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{$default_options{zahl}});			# get new random color
+	  $nick_color = weechat::color($colours{$zahl});                                        # get new random color
 	}
 
 # check for weechat version and use weechat.look.highlight_regex option
-       if ( $default_options{default_version} eq 1 ){						# weechat is >= 0.3.4?
+       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_mode . $high_color . $nick . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset');
+		$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);                                    # get nick-color
+                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');
@@ -257,13 +321,30 @@
 	  }
 
       $line = colorize_nicks($nick_color,$modifier_data,$line);
-      $line = $nick_mode . $nick_color . $nick . $nick_suffix_with_color .  "\t" . $nick_color . $line . weechat::color('reset');  # create new line nick_color+nick+separator+text
+      $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;
@@ -301,183 +382,185 @@
 return $line;
 }
 
-# changes in settings hooked by hook_config()?
+# -----------------------------[ 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) );
+        }
+    }
+
+    if ( ($weechat_version ne "") && (weechat::info_get("version_number", "") >= 0x00030500) ) {    # v0.3.5
+        description_options();
+    }
+
+    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} = $value;
+    $default_options{"var_" . $name} = lc($value);
 
     if ( $name eq "blacklist_channels" ){
       @var_blacklist_channels = "";
       @var_blacklist_channels = split( /,/, $default_options{"var_" . $name} );
     }
+    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 ;
 }
 
-# toggle functions on/off manually
-sub change_settings{
-my $getarg = lc($_[2]);										# switch to lower-case
-
-  if ($getarg eq "highlight"){
-    if ($default_options{var_highlight} eq "on"){
-      weechat::config_set_plugin("highlight", "off");
-    } else{
-      weechat::config_set_plugin("highlight", "on");
+# create description options for script...
+sub description_options{
+    foreach my $option ( keys %help_desc ){
+        weechat::config_set_desc_plugin( $option,$help_desc{$option} );
     }
-    return weechat::WEECHAT_RC_OK;
-  }
+}
 
-  if ($getarg eq "autoset"){
-    if ($default_options{var_buffer_autoset} eq "on"){
-      weechat::config_set_plugin("buffer_autoset", "off");
-    } else{
-      weechat::config_set_plugin("buffer_autoset", "on");
-    }
-    return weechat::WEECHAT_RC_OK;
-  }
-
-  if ($getarg eq "lookhighlight"){
-    if ($default_options{var_look_highlight} eq "on"){
-      weechat::config_set_plugin("look_highlight", "off");
-    } else{
-      weechat::config_set_plugin("look_highlight", "on");
-    }
-    return weechat::WEECHAT_RC_OK;
-  }
+# toggle functions on/off with command line
+sub change_settings{
+my $getarg = lc($_[2]); # switch to lower-case
 
-  if ($getarg eq "lookhighlight_regex"){
-    if ($default_options{var_look_highlight_regex} eq "on"){
-      weechat::config_set_plugin("look_highlight_regex", "off");
-    } else{
-      weechat::config_set_plugin("look_highlight_regex", "on");
-    }
-    return weechat::WEECHAT_RC_OK;
-  }
-
-  if ($getarg eq "hotlist"){
-    if ($default_options{var_hotlist_max_level_nicks_add} eq "on"){
-      weechat::config_set_plugin("hotlist_max_level_nicks_add", "off");
-    } else{
-      weechat::config_set_plugin("hotlist_max_level_nicks_add", "on");
+    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;
-  }
-
-  if ($getarg eq "chat"){
-    if ($default_options{var_chat} eq "on"){
-      weechat::config_set_plugin("chat", "off");
-    } else{
-      weechat::config_set_plugin("chat", "on");
-    }
-  return weechat::WEECHAT_RC_OK;
-  }
-
-  if ($getarg eq "shuffle"){
-    if ($default_options{var_shuffle} eq "on"){
-      weechat::config_set_plugin("shuffle", "off");
-    } else{
-      weechat::config_set_plugin("shuffle", "on");
-    }
-  return weechat::WEECHAT_RC_OK;
-  }
-weechat::command("", "/help $prgname");								# no arguments given. Print help
 return weechat::WEECHAT_RC_OK;
 }
 
-# main routine
+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 (<WL>) {
+                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 (<servername>.<nickname>).");
+                                return;
+                        }
+              push @nick_list,($servername.".".$nickname."," );                 # servername.nickname+","
+        }
+        close WL;
+        chop @nick_list;                                                        # remove last ","
+}
+
+# debug....
+sub count_nicks{
+  my $anzahl=@nick_list;
+  weechat::print("","anzahl: $anzahl");
+
+  foreach (@nick_list){
+      weechat::print ("","$_");
+  }
+}
+# -------------------------------[ init ]-------------------------------------
 # first function called by a WeeChat-script.
 weechat::register($prgname, "Nils Görs <weechatter\@arcor.de>", $version,
                   "GPL3", $description, "", "");
-
-  if (!weechat::config_is_set_plugin("highlight")){
-    weechat::config_set_plugin("highlight", $default_options{var_highlight});
-  }else{
-    $default_options{var_highlight} = weechat::config_get_plugin("highlight");
-  }
-  if (!weechat::config_is_set_plugin("buffer_autoset")){
-    weechat::config_set_plugin("buffer_autoset", $default_options{var_buffer_autoset});
-  }else{
-    $default_options{var_buffer_autoset} = weechat::config_get_plugin("buffer_autoset");
-  }
-  if (!weechat::config_is_set_plugin("hotlist_max_level_nicks_add")){
-    weechat::config_set_plugin("hotlist_max_level_nicks_add", $default_options{var_hotlist_max_level_nicks_add});
-  }else{
-    $default_options{var_hotlist_max_level_nicks_add} = weechat::config_get_plugin("hotlist_max_level_nicks_add");
-  }
-  if (!weechat::config_is_set_plugin("look_highlight")){
-    weechat::config_set_plugin("look_highlight", $default_options{var_look_highlight});
-  }else{
-    $default_options{var_look_highlight} = weechat::config_get_plugin("look_highlight");
-  }
-  if (!weechat::config_is_set_plugin("look_highlight_regex")){
-    weechat::config_set_plugin("look_highlight_regex", $default_options{var_look_highlight_regex});
-  }else{
-    $default_options{var_look_highlight_regex} = weechat::config_get_plugin("look_highlight_regex");
-  }
-  if (!weechat::config_is_set_plugin("chat")){
-    weechat::config_set_plugin("chat", $default_options{var_chat});
-  }else{
-    $default_options{var_chat} = weechat::config_get_plugin("chat");
-  }
-  if (!weechat::config_is_set_plugin("shuffle")){
-    weechat::config_set_plugin("shuffle", $default_options{var_shuffle});
-  }else{
-    $default_options{var_shuffle} = weechat::config_get_plugin("shuffle");
-  }
-  if (!weechat::config_is_set_plugin("blacklist_channels")){
-    weechat::config_set_plugin("blacklist_channels", $default_options{var_blacklist_channels});
-  }else{
-    $default_options{var_blacklist_channels} = weechat::config_get_plugin("blacklist_channels");
+# 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");
   }
 
-  # 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++} = $_;
-    }
-    undef $colours_buf;
-    undef @array;
-  }
+
+init_config();
 
-$default_options{prefix_action} = weechat::config_string(weechat::config_get("weechat.look.prefix_action"));
+
+$get_prefix_action = weechat::config_string(weechat::config_get("weechat.look.prefix_action"));
 weechat::hook_modifier("weechat_print","colorize_cb", "");
 #weechat::hook_modifier("colorize_text","colorize_cb", "");
 
-# check weechat version
-  $default_options{default_version} = weechat::info_get("version_number", "");
-  if (( $default_options{default_version} ne "" ) && ( $default_options{default_version} >= 0x00030400 )){	# v0.3.4?
-    $default_options{default_version} = 1;									# yes!
+  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++} = $_;
+        }
+      undef $colours_buf;
+      undef @array;
+    }
   }
 
 weechat::hook_command($prgname, $description,
 
-        "<highlight> <chat> <shuffle> <autoset> <lookhighlight> <hotlist>",
+        "<highlight> || <chat> || <shuffle> || <autoset> || <look_highlight> || <look_highlight_regex> || <hotlist> || <own_lines>",
 
-        "<highlight>           toggle highlight color in chat area (on/off)\n".
-        "<chat>                colors the text in chat area with according nick color (on/off)\n".
-        "<shuffle>             toggle shuffle color mode on/off\n".
-        "<autoset>             toggle highlight color mode for buffer_autoset on/off\n".
-        "<lookhighlight>       toggle highlight color mode for weechat.look.highlight on/off\n".
-        "<lookhighlight_regex> toggle highlight color in chat area for option weechat.look.highlight_regex on/off\n".
-        "<hotlist>             toggle hotlist_max_level_nicks_add on/off\n\n".
+        "<highlight>            toggle highlight color in chat area (on/off)\n".
+        "<chat>                 colors the text in chat area with according nick color (on/off)\n".
+        "<shuffle>              toggle shuffle color mode on/off\n".
+        "<autoset>              toggle highlight color mode for buffer_autoset on/off\n".
+        "<look_highlight>       toggle highlight color mode for weechat.look.highlight on/off\n".
+        "<look_highlight_regex> toggle highlight color in chat area for option weechat.look.highlight_regex on/off\n".
+        "<hotlist>              toggle hotlist_max_level_nicks_add on/off\n".
+        "<own_lines>            toggle coloring of own lines on/off\n".
+        "\n".
         "Options (script):\n".
-        "   'plugins.var.perl.$prgname.highlight'                   : toggle highlight color in chat area on/off.\n".
-        "   'plugins.var.perl.$prgname.hotlist_max_level_nicks_add' : toggle highlight for hotlist on/off\n".
-        "   'plugins.var.perl.$prgname.buffer_autoset'              : toggle highlight color in chat area for buffer_autoset on/off\n".
-        "   'plugins.var.perl.$prgname.look_highlight'              : toggle highlight color in chat area for option weechat.look.highlight on/off\n".
-        "   'plugins.var.perl.$prgname.look_highlight_regex'        : toggle highlight color in chat area for option weechat.look.highlight_regex on/off\n".
-        "   'plugins.var.perl.$prgname.chat'                        : toggle colored text for chats on/off\n".
-        "   'plugins.var.perl.$prgname.shuffle'                     : toggle shuffle color mode for chats area on/off\n".
-        "   'plugins.var.perl.$prgname.blacklist_channels'          : comma separated list with channelname (e.g.: freenode.#weechat,freenode.#weechat-fr)\n\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 the buffer_autoset and/or hotlist_max_level_nicks_install buffer_autoset script from: http://www.weechat.org/scripts/\n",
-        "highlight|chat|shuffle|autoset|lookhighlight|lookhighlight_regex|hotlist", "change_settings", "");
+        "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", "");
 
 weechat::hook_config( "plugins.var.perl.$prgname.*", "toggle_config_by_set", "" );