3eb50a0fe94f

Add weechat.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Sun, 25 Sep 2011 15:29:33 -0400
parents 8183cec0eac6
children 03e2fdbbdc59 9f1f6274ec3d
branches/tags (none)
files weechat/alias.conf weechat/icon.png weechat/irc.conf weechat/logger.conf weechat/perl/autoload/buffers.pl weechat/perl/autoload/colorize_lines.pl weechat/plugins.conf weechat/python/autoload/growl.py weechat/relay.conf weechat/rmodifier.conf weechat/weechat.conf weechat/xfer.conf zsh/misc.zsh

Changes

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/alias.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,37 @@
+#
+# alias.conf -- weechat v0.3.5
+#
+
+[cmd]
+AAWAY = "allserv /away"
+AME = "allchan /me"
+AMSG = "allchan /msg *"
+ANICK = "allserv /nick"
+BYE = "quit"
+C = "buffer clear"
+CHAT = "dcc chat"
+CL = "buffer clear"
+CLOSE = "buffer close"
+EXIT = "quit"
+IG = "ignore"
+J = "join"
+K = "kick"
+KB = "kickban"
+LEAVE = "part"
+M = "msg"
+MUB = "unban *"
+N = "names"
+Q = "query"
+REDRAW = "window refresh"
+SAY = "msg *"
+SIGNOFF = "quit"
+T = "topic"
+UB = "unban"
+V = "command core version"
+W = "who"
+WC = "window merge"
+WI = "whois"
+WII = "whois $1 $1"
+WW = "whowas"
+
+[completion]
Binary file weechat/icon.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/irc.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,220 @@
+#
+# irc.conf -- weechat v0.3.5
+#
+
+[look]
+buffer_switch_autojoin = on
+buffer_switch_join = on
+color_nicks_in_names = off
+color_nicks_in_nicklist = off
+color_nicks_in_server_messages = on
+color_pv_nick_like_channel = on
+display_away = local
+display_ctcp_blocked = on
+display_ctcp_reply = on
+display_ctcp_unknown = on
+display_host_join = on
+display_host_join_local = on
+display_host_quit = on
+display_old_topic = on
+display_pv_away_once = on
+display_pv_back = on
+hide_nickserv_pwd = on
+highlight_tags = "irc_privmsg,irc_notice"
+item_away_message = on
+item_channel_modes = on
+item_channel_modes_hide_key = off
+item_display_server = buffer_plugin
+item_nick_modes = on
+item_nick_prefix = on
+msgbuffer_fallback = current
+new_channel_position = none
+new_pv_position = none
+nick_color_force = ""
+nick_color_stop_chars = "_|["
+nick_completion_smart = speakers
+nick_prefix = ""
+nick_suffix = ""
+notice_as_pv = auto
+notify_tags_ison = "notify_message"
+notify_tags_whois = "notify_message"
+part_closes_buffer = off
+raw_messages = 256
+server_buffer = merge_with_core
+smart_filter = on
+smart_filter_delay = 5
+smart_filter_join = on
+smart_filter_nick = on
+smart_filter_quit = on
+topic_strip_colors = off
+
+[color]
+input_nick = lightcyan
+item_away = yellow
+item_channel_modes = default
+item_lag_counting = default
+item_lag_finished = yellow
+message_join = green
+message_quit = red
+nick_prefix = green
+nick_prefixes = "q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
+nick_suffix = green
+notice = green
+reason_quit = default
+topic_new = white
+topic_old = darkgray
+
+[network]
+autoreconnect_delay_growing = 2
+autoreconnect_delay_max = 1800
+colors_receive = on
+colors_send = on
+lag_check = 60
+lag_disconnect = 0
+lag_min_show = 500
+lag_refresh_interval = 1
+notify_check_ison = 1
+notify_check_whois = 5
+send_unknown_commands = off
+
+[msgbuffer]
+
+[ctcp]
+
+[ignore]
+
+[server_default]
+addresses = ""
+anti_flood_prio_high = 2
+anti_flood_prio_low = 2
+autoconnect = off
+autojoin = ""
+autoreconnect = on
+autoreconnect_delay = 10
+autorejoin = off
+autorejoin_delay = 30
+away_check = 0
+away_check_max_nicks = 25
+command = ""
+command_delay = 0
+connection_timeout = 60
+default_msg_part = "WeeChat %v"
+default_msg_quit = "WeeChat %v"
+ipv6 = off
+local_hostname = ""
+nicks = "sjl,sjl1,sjl2,sjl3,sjl4"
+notify = ""
+password = ""
+proxy = ""
+realname = ""
+sasl_mechanism = plain
+sasl_password = ""
+sasl_timeout = 15
+sasl_username = ""
+ssl = off
+ssl_cert = ""
+ssl_dhkey_size = 2048
+ssl_priorities = "NORMAL"
+ssl_verify = on
+username = "sjl"
+
+[server]
+freenode.addresses = "chat.freenode.net/6667"
+freenode.proxy
+freenode.ipv6
+freenode.ssl
+freenode.ssl_cert
+freenode.ssl_priorities
+freenode.ssl_dhkey_size
+freenode.ssl_verify
+freenode.password
+freenode.sasl_mechanism
+freenode.sasl_username
+freenode.sasl_password
+freenode.sasl_timeout
+freenode.autoconnect
+freenode.autoreconnect
+freenode.autoreconnect_delay
+freenode.nicks
+freenode.username
+freenode.realname
+freenode.local_hostname
+freenode.command
+freenode.command_delay
+freenode.autojoin
+freenode.autorejoin
+freenode.autorejoin_delay
+freenode.connection_timeout
+freenode.anti_flood_prio_high
+freenode.anti_flood_prio_low
+freenode.away_check
+freenode.away_check_max_nicks
+freenode.default_msg_part
+freenode.default_msg_quit
+freenode.notify
+oftc.addresses = "irc.oftc.net/6667"
+oftc.proxy
+oftc.ipv6
+oftc.ssl
+oftc.ssl_cert
+oftc.ssl_priorities
+oftc.ssl_dhkey_size
+oftc.ssl_verify
+oftc.password
+oftc.sasl_mechanism
+oftc.sasl_username
+oftc.sasl_password
+oftc.sasl_timeout
+oftc.autoconnect
+oftc.autoreconnect
+oftc.autoreconnect_delay
+oftc.nicks
+oftc.username
+oftc.realname
+oftc.local_hostname
+oftc.command
+oftc.command_delay
+oftc.autojoin
+oftc.autorejoin
+oftc.autorejoin_delay
+oftc.connection_timeout
+oftc.anti_flood_prio_high
+oftc.anti_flood_prio_low
+oftc.away_check
+oftc.away_check_max_nicks
+oftc.default_msg_part
+oftc.default_msg_quit
+oftc.notify
+sjl.addresses = "stevelosh.com/30789"
+sjl.proxy
+sjl.ipv6
+sjl.ssl
+sjl.ssl_cert
+sjl.ssl_priorities
+sjl.ssl_dhkey_size
+sjl.ssl_verify
+sjl.password
+sjl.sasl_mechanism
+sjl.sasl_username
+sjl.sasl_password
+sjl.sasl_timeout
+sjl.autoconnect
+sjl.autoreconnect
+sjl.autoreconnect_delay
+sjl.nicks
+sjl.username
+sjl.realname
+sjl.local_hostname
+sjl.command
+sjl.command_delay
+sjl.autojoin
+sjl.autorejoin
+sjl.autorejoin_delay
+sjl.connection_timeout
+sjl.anti_flood_prio_high
+sjl.anti_flood_prio_low
+sjl.away_check
+sjl.away_check_max_nicks
+sjl.default_msg_part
+sjl.default_msg_quit
+sjl.notify
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/logger.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,19 @@
+#
+# logger.conf -- weechat v0.3.5
+#
+
+[look]
+backlog = 20
+
+[file]
+auto_log = on
+info_lines = off
+mask = "$plugin.$name.weechatlog"
+name_lower_case = on
+path = "%h/logs/"
+replacement_char = "_"
+time_format = "%Y-%m-%d %H:%M:%S"
+
+[level]
+
+[mask]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/perl/autoload/buffers.pl	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,490 @@
+#
+# Copyright (c) 2008-2011 by Sébastien Helleu <flashcode@flashtux.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+#
+# Display sidebar with list of buffers.
+#
+# History:
+# 2011-08-24, Sébastien Helleu <flashcode@flashtux.org>:
+#     v2.4: add mouse support
+# 2011-06-06, Nils G <weechatter@arcor.de>:
+#     v2.3: added: missed option "color_whitelist_default"
+# 2011-03-23, Sébastien Helleu <flashcode@flashtux.org>:
+#     v2.2: fix color of nick prefix with WeeChat >= 0.3.5
+# 2011-02-13, Nils G <weechatter@arcor.de>:
+#     v2.1: add options "color_whitelist_*"
+# 2010-10-05, Sébastien Helleu <flashcode@flashtux.org>:
+#     v2.0: add options "sort" and "show_number"
+# 2010-04-12, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.9: replace call to log() by length() to align buffer numbers
+# 2010-04-02, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.8: fix bug with background color and option indenting_number
+# 2010-04-02, Helios <helios@efemes.de>:
+#     v1.7: add indenting_number option
+# 2010-02-25, m4v <lambdae2@gmail.com>:
+#     v1.6: add option to hide empty prefixes
+# 2010-02-12, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.5: add optional nick prefix for buffers like IRC channels
+# 2009-09-30, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.4: remove spaces for indenting when bar position is top/bottom
+# 2009-06-14, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.3: add option "hide_merged_buffers"
+# 2009-06-14, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.2: improve display with merged buffers
+# 2009-05-02, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.1: sync with last API changes
+# 2009-02-21, Sébastien Helleu <flashcode@flashtux.org>:
+#     v1.0: remove timer used to update bar item first time (not needed any more)
+# 2009-02-17, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.9: fix bug with indenting of private buffers
+# 2009-01-04, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.8: update syntax for command /set (comments)
+# 2008-10-20, Jiri Golembiovsky <golemj@gmail.com>:
+#     v0.7: add indenting option
+# 2008-10-01, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.6: add default color for buffers, and color for current active buffer
+# 2008-09-18, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.5: fix color for "low" level entry in hotlist
+# 2008-09-18, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.4: rename option "show_category" to "short_names",
+#           remove option "color_slash"
+# 2008-09-15, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.3: fix bug with priority in hotlist (var not defined)
+# 2008-09-02, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.2: add color for buffers with activity and config options for
+#           colors, add config option to display/hide categories
+# 2008-03-15, Sébastien Helleu <flashcode@flashtux.org>:
+#     v0.1: script creation
+#
+# Help about settings:
+#   display short names (remove text before first "." in buffer name):
+#      /set plugins.var.perl.buffers.short_names on
+#   use indenting for some buffers like IRC channels:
+#      /set plugins.var.perl.buffers.indenting on
+#   use indenting for numbers:
+#      /set plugins.var.perl.buffers.indenting_number on
+#   hide merged buffers:
+#      /set plugins.var.perl.buffers.hide_merged_buffers on
+#   show prefix:
+#      /set plugins.var.perl.buffers.show_prefix on
+#      /set plugins.var.perl.buffers.show_prefix_empty on
+#   change colors:
+#      /set plugins.var.perl.buffers.color_number color
+#      /set plugins.var.perl.buffers.color_default color
+#      /set plugins.var.perl.buffers.color_hotlist_low color
+#      /set plugins.var.perl.buffers.color_hotlist_message color
+#      /set plugins.var.perl.buffers.color_hotlist_private color
+#      /set plugins.var.perl.buffers.color_hotlist_highlight color
+#      /set plugins.var.perl.buffers.color_current color
+#   (replace "color" by your color, which may be "fg" or "fg,bg")
+#
+
+use strict;
+
+my $version = "2.4";
+
+# -------------------------------[ config ]-------------------------------------
+
+my %default_options = ("short_names"               => "on",
+                       "indenting"                 => "on",
+                       "indenting_number"          => "on",
+                       "hide_merged_buffers"       => "off",
+                       "show_number"               => "on",
+                       "show_prefix"               => "off",
+                       "show_prefix_empty"         => "on",
+                       "sort"                      => "number",  # "number" or "name"
+                       "color_hotlist_low"         => "white",
+                       "color_hotlist_message"     => "yellow",
+                       "color_hotlist_private"     => "lightgreen",
+                       "color_hotlist_highlight"   => "magenta",
+                       "color_current"             => "lightcyan,red",
+                       "color_default"             => "default",
+                       "color_number"              => "lightgreen",
+                       "color_whitelist_buffers"   => "",
+                       "color_whitelist_default"   => "",
+                       "color_whitelist_low"       => "",
+                       "color_whitelist_message"   => "",
+                       "color_whitelist_private"   => "",
+                       "color_whitelist_highlight" => "",
+
+    );
+my %mouse_keys = ("\@item(buffers):button1*" => "hsignal:buffers_mouse");
+my %options;
+my %hotlist_level = (0 => "low", 1 => "message", 2 => "private", 3 => "highlight");
+my @whitelist_buffers = "";
+my @buffers_focus = ();
+
+# --------------------------------[ init ]--------------------------------------
+
+weechat::register("buffers", "Sébastien Helleu <flashcode\@flashtux.org>", $version,
+                  "GPL3", "Sidebar with list of buffers", "", "");
+
+foreach my $option (keys %default_options)
+{
+    if (!weechat::config_is_set_plugin($option))
+    {
+        weechat::config_set_plugin($option, $default_options{$option});
+    }
+}
+buffers_read_options();
+
+weechat::bar_item_new("buffers", "build_buffers", "");
+weechat::bar_new("buffers", "0", "0", "root", "", "left", "horizontal",
+                 "vertical", "0", "0", "default", "default", "default", "1",
+                 "buffers");
+weechat::hook_signal("buffer_*", "buffers_signal_buffer", "");
+weechat::hook_signal("hotlist_*", "buffers_signal_hotlist", "");
+weechat::hook_config("plugins.var.perl.buffers.*", "buffers_signal_config", "");
+weechat::bar_item_update("buffers");
+my $weechat_version = weechat::info_get("version_number", "") || 0;
+if ($weechat_version >= 0x00030600)
+{
+    weechat::hook_focus("buffers", "buffers_focus_buffers", "");
+    weechat::hook_hsignal("buffers_mouse", "buffers_hsignal_mouse", "");
+    weechat::key_bind("mouse", \%mouse_keys);
+}
+
+# ------------------------------------------------------------------------------
+
+sub buffers_read_options
+{
+    foreach my $option (keys %default_options)
+    {
+        $options{$option} = weechat::config_get_plugin($option);
+    }
+    @whitelist_buffers = split(/,/, $options{color_whitelist_buffers});
+}
+
+sub build_buffers
+{
+    my $str = "";
+    
+    # get bar position (left/right/top/bottom)
+    my $position = "left";
+    my $option_position = weechat::config_get("weechat.bar.buffers.position");
+    if ($option_position ne "")
+    {
+        $position = weechat::config_string($option_position);
+    }
+    
+    # read hotlist
+    my %hotlist;
+    my $infolist = weechat::infolist_get("hotlist", "", "");
+    while (weechat::infolist_next($infolist))
+    {
+        $hotlist{weechat::infolist_pointer($infolist, "buffer_pointer")} =
+            weechat::infolist_integer($infolist, "priority");
+    }
+    weechat::infolist_free($infolist);
+    
+    # read buffers list
+    @buffers_focus = ();
+    my @buffers;
+    my @current1 = ();
+    my @current2 = ();
+    my $old_number = -1;
+    my $max_number = 0;
+    my $max_number_digits = 0;
+    my $active_seen = 0;
+    $infolist = weechat::infolist_get("buffer", "", "");
+    while (weechat::infolist_next($infolist))
+    {
+        my $buffer;
+        my $number = weechat::infolist_integer($infolist, "number");
+        if ($number ne $old_number)
+        {
+            @buffers = (@buffers, @current2, @current1);
+            @current1 = ();
+            @current2 = ();
+            $active_seen = 0;
+        }
+        if ($number > $max_number)
+        {
+            $max_number = $number;
+        }
+        $old_number = $number;
+        my $active = weechat::infolist_integer($infolist, "active");
+        if ($active)
+        {
+            $active_seen = 1;
+        }
+        $buffer->{"pointer"} = weechat::infolist_pointer($infolist, "pointer");
+        $buffer->{"number"} = $number;
+        $buffer->{"active"} = $active;
+        $buffer->{"current_buffer"} = weechat::infolist_integer($infolist, "current_buffer");
+        $buffer->{"plugin_name"} = weechat::infolist_string($infolist, "plugin_name");
+        $buffer->{"name"} = weechat::infolist_string($infolist, "name");
+        $buffer->{"short_name"} = weechat::infolist_string($infolist, "short_name");
+        $buffer->{"full_name"} = $buffer->{"plugin_name"}.".".$buffer->{"name"};
+        if ($active_seen)
+        {
+            push(@current2, $buffer);
+        }
+        else
+        {
+            push(@current1, $buffer);
+        }
+    }
+    if ($max_number >= 1)
+    {
+        $max_number_digits = length(int($max_number));
+    }
+    @buffers = (@buffers, @current2, @current1);
+    weechat::infolist_free($infolist);
+    
+    # sort buffers by number, name or shortname
+    my %sorted_buffers;
+    if (1)
+    {
+        my $number = 0;
+        for my $buffer (@buffers)
+        {
+            my $key;
+            if ($options{"sort"} eq "name")
+            {
+                my $name = $buffer->{"name"};
+                $name = $buffer->{"short_name"} if ($options{"short_names"} eq "on");
+                $key = sprintf("%s%08d", lc($name), $buffer->{"number"});
+            }
+            else
+            {
+                $key = sprintf("%08d", $number);
+            }
+            $sorted_buffers{$key} = $buffer;
+            $number++;
+        }
+    }
+    
+    # build string with buffers
+    $old_number = -1;
+    foreach my $key (sort keys %sorted_buffers)
+    {
+        my $buffer = $sorted_buffers{$key};
+        if (($options{"hide_merged_buffers"} eq "on") && (! $buffer->{"active"}))
+        {
+            next;
+        }
+        
+        push(@buffers_focus, $buffer);
+        my $color = "";
+        # whitelist buffer?
+        if (grep /^$buffer->{"name"}$/, @whitelist_buffers)
+        {
+            # options empty?
+            if ($options{"color_whitelist_default"} eq "")
+            {
+                $color = $options{"color_default"};
+            }
+            else
+            {
+                # use color
+                $color = $options{"color_whitelist_default"};
+            }
+        }
+        else
+        {
+            # no whitelist buffer
+            $color = $options{"color_default"};
+        }
+
+        $color = "default" if ($color eq "");
+        my $bg = "";
+
+        if (exists $hotlist{$buffer->{"pointer"}})
+        {
+            if (grep /^$buffer->{"name"}$/, @whitelist_buffers)
+            {
+                if ($options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}} eq "")    # no color in settings
+                {
+                    $color = $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}};     # use standard colors
+                }
+                else
+                {
+                    $color = $options{"color_whitelist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}};
+                }
+            }
+            else
+            {
+                $color = $options{"color_hotlist_".$hotlist_level{$hotlist{$buffer->{"pointer"}}}};
+            }
+        }
+        if ($buffer->{"current_buffer"})
+        {
+            $color = $options{"color_current"};
+            $bg = $1 if ($color =~ /.*,(.*)/);
+        }
+        my $color_bg = "";
+        $color_bg = weechat::color(",".$bg) if ($bg ne "");
+        if ($options{"show_number"} eq "on")
+        {
+            if (($options{"indenting_number"} eq "on")
+                && (($position eq "left") || ($position eq "right")))
+            {
+                $str .= weechat::color("default").$color_bg
+                    .(" " x ($max_number_digits - length(int($buffer->{"number"}))));
+            }
+            if ($old_number ne $buffer->{"number"})
+            {
+                $str .= weechat::color($options{"color_number"})
+                    .$color_bg
+                    .$buffer->{"number"}
+                    .weechat::color("default")
+                    .$color_bg
+                    .".";
+            }
+            else
+            {
+                my $indent = "";
+                $indent = ((" " x length($buffer->{"number"}))." ") if (($position eq "left") || ($position eq "right"));
+                $str .= weechat::color("default")
+                    .$color_bg
+                    .$indent;
+            }
+        }
+        if (($options{"indenting"} eq "on")
+            && (($position eq "left") || ($position eq "right")))
+        {
+            my $type = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_type");
+            if (($type eq "channel") || ($type eq "private"))
+            {
+                $str .= "  ";
+            }
+        }
+        if ($options{"show_prefix"} eq "on")
+        {
+            my $nickname = weechat::buffer_get_string($buffer->{"pointer"}, "localvar_nick");
+            if ($nickname ne "")
+            {
+                # with version >= 0.3.2, this infolist will return only nick
+                # with older versions, whole nicklist is returned for buffer, and this can be very slow
+                my $infolist_nick = weechat::infolist_get("nicklist", $buffer->{"pointer"}, "nick_".$nickname);
+                if ($infolist_nick ne "")
+                {
+                    my $version = weechat::info_get("version_number", "");
+                    $version = 0 if ($version eq "");
+                    while (weechat::infolist_next($infolist_nick))
+                    {
+                        if ((weechat::infolist_string($infolist_nick, "type") eq "nick")
+                            && (weechat::infolist_string($infolist_nick, "name") eq $nickname))
+                        {
+                            my $prefix = weechat::infolist_string($infolist_nick, "prefix");
+                            if (($prefix ne " ") or ($options{"show_prefix_empty"} eq "on"))
+                            {
+                                # with version >= 0.3.5, it is now a color name (for older versions: option name with color)
+                                if (int($version) >= 0x00030500)
+                                {
+                                    $str .= weechat::color(weechat::infolist_string($infolist_nick, "prefix_color"));
+                                }
+                                else
+                                {
+                                    $str .= weechat::color(weechat::config_color(
+                                                               weechat::config_get(
+                                                                   weechat::infolist_string($infolist_nick, "prefix_color"))));
+                                }
+                                $str .= $prefix;
+                            }
+                            last;
+                        }
+                    }
+                    weechat::infolist_free($infolist_nick);
+                }
+            }
+        }
+        $str .= weechat::color($color);
+        if ($options{"short_names"} eq "on")
+        {
+            $str .= $buffer->{"short_name"};
+        }
+        else
+        {
+            $str .= $buffer->{"name"};
+        }
+        $str .= "\n";
+        $old_number = $buffer->{"number"};
+    }
+    
+    
+    return $str;
+}
+
+sub buffers_signal_buffer
+{
+    weechat::bar_item_update("buffers");
+    return weechat::WEECHAT_RC_OK;
+}
+
+sub buffers_signal_hotlist
+{
+    weechat::bar_item_update("buffers");
+    return weechat::WEECHAT_RC_OK;
+}
+
+sub buffers_signal_config
+{
+    buffers_read_options();
+    weechat::bar_item_update("buffers");
+    return weechat::WEECHAT_RC_OK;
+}
+
+# called when mouse click occured in buffers item: this callback returns buffer
+# hash according to line of item where click ccured
+sub buffers_focus_buffers
+{
+    my %info = %{$_[1]};
+    my $item_line = int($info{"_bar_item_line"});
+    undef my $hash;
+    if (($info{"_bar_item_name"} eq "buffers") && ($item_line >= 0) && ($item_line <= $#buffers_focus))
+    {
+        $hash = $buffers_focus[$item_line];
+    }
+    else
+    {
+        $hash = {};
+        my $hash_focus = $buffers_focus[0];
+        foreach my $key (keys %$hash_focus)
+        {
+            $hash->{$key} = "?";
+        }
+    }
+    return $hash;
+}
+
+# called when a mouse action is done on buffers item, to execute action
+# action can be: jump to a buffer, or move buffer in list (drag & drop of buffer)
+sub buffers_hsignal_mouse
+{
+    my ($data, $signal, %hash) = ($_[0], $_[1], %{$_[2]});
+    if ($hash{"number"} eq $hash{"number2"})
+    {
+        weechat::command("", "/buffer ".$hash{"full_name"});
+    }
+    else
+    {
+        my $number2 = $hash{"number2"};
+        if ($number2 eq "?")
+        {
+            # if number 2 is not known (end of gesture outside buffers list), then set it
+            # according to mouse gesture
+            $number2 = "999999";
+            $number2 = "1" if (($hash{"_key"} =~ /gesture-left/) || ($hash{"_key"} =~ /gesture-up/));
+        }
+        my $ptrbuf = weechat::current_buffer();
+        weechat::command("", "/buffer ".$hash{"number"});
+        weechat::command("", "/buffer move ".$number2);
+        weechat::buffer_set($ptrbuf, "display", "1");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/perl/autoload/colorize_lines.pl	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,482 @@
+#
+# Copyright (c) 2010-2011 by Nils Görs <weechatter@arcor.de>
+#
+# colors the channel text with nick color and also highlight the whole line
+# colorize_nicks.py script will be supported
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# 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
+#
+# history:
+# 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
+# 0.6: code optimazations.
+#      rename of script (rainbow_text.pl -> colorize_lines.pl) (suggested by xt and flashcode)
+# 0.5: support of hotlist_max_level_nicks_add and weechat.color.chat_nick_colors (>= weechat 0.3.4)
+# 0.4: support of weechat.look.highlight_regex option (>= weechat 0.3.4)
+#    : support of weechat.look.highlight option
+#    : highlighted line did not work with "." inside servername
+#    ; internal "autoset" function fixed
+# 0.3: support of colorize_nicks.py implemented.
+#    : /me text displayed wrong nick colour (colour from suffix was used)
+#    : highlight messages will be checked case insensitiv
+# 0.2: supports highlight_words_add from buffer_autoset.py script (suggested: Emralegna)
+#    : correct look_nickmode colour will be used (bug reported by: Emralegna)
+#    : /me text will be coloured, too
+# 0.1: initial release
+#
+# requirements: sunglasses ;-)
+
+use strict;
+my $prgname	= "colorize_lines";
+my $version	= "0.7";
+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 @var_blacklist_channels = "";
+
+my $nick_mode = "";
+
+# 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");
+
+# 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;
+}
+
+$modifier_data =~ (m/irc;(.+?)\.(.+?)\;/);							# irc;servername.channelname;
+my ($t0, $t1 , $t2) = split(/;/,$modifier_data);
+#$t1 =~ m/^(.+)\.(.+)$/;
+my $servername = $1;
+my $channel_name = $2;
+
+
+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
+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
+
+$modifier_data =~ m/nick_(.*),/;                                                                # get the nick name from modifier_data (without nick_mode and color codes!)
+$nick = $1;
+
+# 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;
+}
+
+# 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 $default_options{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);
+      $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!
+        $nick_mode = "";
+      }else{                                                                                    # nick_mode exists
+        $nick_mode = $color_mode . $nick_mode;
+      }
+}
+
+# i wrote the message
+    if ($nick eq $my_nick ){	        			        				# i wrote the message
+      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){
+            $nick = $prefix_action_with_color;
+          }else{
+            $nick = $nick . $nick_suffix_with_color;
+          }
+	  $line = $nick_mode . $nick_color . $nick . "\t" . $nick_color . $line . weechat::color('reset');
+	  return $line;
+      }else{
+	  return $string;
+      }
+    }
+
+# 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
+
+    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_buffer_autoset} eq "on" || $default_options{var_look_highlight} eq "on" ){# buffer_autoset or look_highlight "on"?
+	  my $highlight_words = "";
+
+	  # 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);
+
+	      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)
+		    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 . $nick_suffix_with_color . "\t" . $high_color . $line . weechat::color('reset');
+		    return $line;
+		  }
+	      }
+      }
+	# buffer_autoset is off.
+	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)
+                $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;
+	      }
+
+# 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');
+	      return $line;
+	}
+	}
+    } # highlight area finished
+
+# 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 ( $default_options{zahl} ==  ($zahl2 = int(rand(14))) or ($colours{$zahl2} eq $my_color) );	# latest color nor own nick color
+	      $default_options{zahl} = $zahl2;
+	    }
+	  $nick_color = weechat::color($colours{$default_options{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 ( $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');
+		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
+		$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_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{}
+
+# 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;
+}
+
+# changes in settings hooked by hook_config()?
+sub toggle_config_by_set{
+my ( $pointer, $name, $value ) = @_;
+    $name = substr($name,length("plugins.var.perl.$prgname."),length($name));
+    $default_options{"var_" . $name} = $value;
+
+    if ( $name eq "blacklist_channels" ){
+      @var_blacklist_channels = "";
+      @var_blacklist_channels = split( /,/, $default_options{"var_" . $name} );
+    }
+
+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");
+    }
+    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;
+  }
+
+  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");
+    }
+    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
+# 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");
+  }
+
+  # 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;
+  }
+
+$default_options{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!
+  }
+
+weechat::hook_command($prgname, $description,
+
+        "<highlight> <chat> <shuffle> <autoset> <lookhighlight> <hotlist>",
+
+        "<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".
+        "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".
+        "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", "");
+
+weechat::hook_config( "plugins.var.perl.$prgname.*", "toggle_config_by_set", "" );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/plugins.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,57 @@
+#
+# plugins.conf -- weechat v0.3.5
+#
+
+[var]
+fifo.fifo = "on"
+perl.buffers.color_current = "black,green"
+perl.buffers.color_default = "default"
+perl.buffers.color_hotlist_highlight = "lightmagenta"
+perl.buffers.color_hotlist_low = "white"
+perl.buffers.color_hotlist_message = "yellow"
+perl.buffers.color_hotlist_private = "lightgreen"
+perl.buffers.color_number = "green"
+perl.buffers.color_whitelist_buffers = ""
+perl.buffers.color_whitelist_default = ""
+perl.buffers.color_whitelist_highlight = ""
+perl.buffers.color_whitelist_low = ""
+perl.buffers.color_whitelist_message = ""
+perl.buffers.color_whitelist_private = ""
+perl.buffers.hide_merged_buffers = "on"
+perl.buffers.indenting = "on"
+perl.buffers.indenting_number = "on"
+perl.buffers.short_names = "on"
+perl.buffers.show_category = "off"
+perl.buffers.show_number = "on"
+perl.buffers.show_prefix = "off"
+perl.buffers.show_prefix_empty = "on"
+perl.buffers.sort = "number"
+perl.check_license = "on"
+perl.colorize_lines.blacklist_channels = ""
+perl.colorize_lines.buffer_autoset = "off"
+perl.colorize_lines.chat = "off"
+perl.colorize_lines.highlight = "on"
+perl.colorize_lines.hotlist_max_level_nicks_add = "off"
+perl.colorize_lines.look_highlight = "off"
+perl.colorize_lines.look_highlight_regex = "off"
+perl.colorize_lines.shuffle = "off"
+python.check_license = "on"
+python.growl.hostname = ""
+python.growl.icon = "icon.png"
+python.growl.password = ""
+python.growl.show_channel_topic = "on"
+python.growl.show_dcc = "on"
+python.growl.show_highlighted_message = "on"
+python.growl.show_invite_message = "on"
+python.growl.show_notice_message = "off"
+python.growl.show_private_action_message = "on"
+python.growl.show_private_message = "on"
+python.growl.show_public_action_message = "off"
+python.growl.show_public_message = "off"
+python.growl.show_server = "on"
+python.growl.show_upgrade_ended = "on"
+python.growl.sticky = "off"
+python.growl.sticky_away = "on"
+tcl.check_license = "on"
+
+[desc]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/python/autoload/growl.py	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,463 @@
+# -*- coding: utf-8 -*-
+#
+# growl.py 
+# Copyright (c) 2011 Sorin Ionescu <sorin.ionescu@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+SCRIPT_NAME    = 'growl'
+SCRIPT_AUTHOR  = 'Sorin Ionescu <sorin.ionescu@gmail.com>'
+SCRIPT_VERSION = '1.0.0'
+SCRIPT_LICENSE = 'GPL3'
+SCRIPT_DESC    = 'Sends Growl notifications upon events.'
+
+# Changelog
+#
+# 2011-03-27: v1.0.0 Initial release.
+
+
+# ------------------------------------------------------------------------------
+# Settings
+# ------------------------------------------------------------------------------
+SETTINGS = {
+    'show_public_message'         : 'off',
+    'show_private_message'        : 'on',
+    'show_public_action_message'  : 'off',
+    'show_private_action_message' : 'on',
+    'show_notice_message'         : 'off',
+    'show_invite_message'         : 'on',
+    'show_highlighted_message'    : 'on',
+    'show_server'                 : 'on',
+    'show_channel_topic'          : 'on',
+    'show_dcc'                    : 'on',
+    'show_upgrade_ended'          : 'on',
+    'sticky'                      : 'off',
+    'sticky_away'                 : 'on',
+    'hostname'                    : '',
+    'password'                    : '',
+    'icon'                        : 'icon.png',
+}
+
+
+# ------------------------------------------------------------------------------
+# Imports
+# ------------------------------------------------------------------------------
+try:
+    import re
+    import os
+    import weechat
+    import Growl
+    IMPORT_OK = True
+except ImportError as error:
+    IMPORT_OK = False
+    if str(error) == 'No module named weechat':
+        print('This script must be run under WeeChat.')
+        print('Get WeeChat at http://www.weechat.org.')
+    if str(error) == 'No module named Growl':
+        weechat.prnt('', 'Growl: Python bindings are not installed.')
+
+
+# ------------------------------------------------------------------------------
+# Globals
+# ------------------------------------------------------------------------------
+TAGGED_MESSAGES = {
+    'public message or action'  : set(['irc_privmsg', 'notify_message']),
+    'private message or action' : set(['irc_privmsg', 'notify_private']),
+    'notice message'            : set(['irc_notice', 'notify_private']),
+    'invite message'            : set(['irc_invite', 'notify_highlight']),
+    'channel topic'             : set(['irc_topic',]),
+    'away status'               : set(['away_info',]),
+}
+
+UNTAGGED_MESSAGES = {
+    'dcc chat request'   : re.compile(
+                               r'^xfer: incoming chat request from (\w+)',
+                               re.UNICODE),
+    'dcc chat closed'    : re.compile(
+                               r'^xfer: chat closed with (\w+)',
+                               re.UNICODE),
+    'dcc get request'    : re.compile(
+                               r'^xfer: incoming file from (\w+) [^:]+: ' +
+                                   '((?:,\w|[^,])+),',
+                               re.UNICODE),
+    'dcc get completed'  : re.compile(
+                               r'^xfer: file ([^\s]+) received from \w+: OK',
+                               re.UNICODE),
+    'dcc get failed'     : re.compile(
+                               r'^xfer: file ([^\s]+) received from \w+: ' +
+                                   'FAILED',
+                               re.UNICODE),
+    'dcc send completed' : re.compile(
+                               r'^xfer: file ([^\s]+) sent to \w+: OK',
+                               re.UNICODE),
+    'dcc send failed'    : re.compile(
+                               r'^xfer: file ([^\s]+) sent to \w+: FAILED',
+                               re.UNICODE),
+}
+
+DISPATCH_TABLE = {
+    'away status'               : 'set_away_status',
+    'public message or action'  : 'notify_public_message_or_action',
+    'private message or action' : 'notify_private_message_or_action',
+    'notice message'            : 'notify_notice_message',
+    'invite message'            : 'notify_invite_message',
+    'channel topic'             : 'notify_channel_topic',
+    'dcc chat request'          : 'notify_dcc_chat_request',
+    'dcc chat closed'           : 'notify_dcc_chat_closed',
+    'dcc get request'           : 'notify_dcc_get_request',
+    'dcc get completed'         : 'notify_dcc_get_completed',
+    'dcc get failed'            : 'notify_dcc_get_failed',
+    'dcc send completed'        : 'notify_dcc_send_completed',
+    'dcc send failed'           : 'notify_dcc_send_failed',
+}
+
+STATE = {
+    'growl'   : None,
+    'is_away' : False
+}
+
+# ------------------------------------------------------------------------------
+# Notifiers 
+# ------------------------------------------------------------------------------
+def cb_irc_server_connected(data, signal, signal_data):
+    '''Notify when connected to IRC server.'''
+    if weechat.config_get_plugin('show_server') == 'on':
+        growl_notify(
+            'Server',
+            'Server Connected',
+            'Connected to network {0}.'.format(signal_data))
+    return weechat.WEECHAT_RC_OK
+
+def cb_irc_server_disconnected(data, signal, signal_data):
+    '''Notify when disconnected to IRC server.'''
+    if weechat.config_get_plugin('show_server') == 'on':
+        growl_notify(
+            'Server',
+            'Server Disconnected',
+            'Disconnected from network {0}.'.format(signal_data))
+    return weechat.WEECHAT_RC_OK
+
+def cb_notify_upgrade_ended(data, signal, signal_data):
+    '''Notify on end of WeeChat upgrade.'''
+    if weechat.config_get_plugin('show_upgrade_ended') == 'on':
+        growl_notify(
+            'WeeChat',
+            'WeeChat Upgraded',
+            'WeeChat has been upgraded.')
+    return weechat.WEECHAT_RC_OK
+
+def notify_highlighted_message(prefix, message):
+    '''Notify on highlighted message.'''
+    if weechat.config_get_plugin("show_highlighted_message") == "on":
+        growl_notify(
+            'Highlight',
+            'Highlighted Message',
+            "{0}: {1}".format(prefix, message),
+            priority=2)
+
+def notify_public_message_or_action(prefix, message, highlighted):
+    '''Notify on public message or action.'''
+    if prefix == ' *':
+        regex = re.compile(r'^(\w+) (.+)$', re.UNICODE)
+        match = regex.match(message)
+        if match:
+            prefix = match.group(1)
+            message = match.group(2)
+            notify_public_action_message(prefix, message, highlighted)
+    else:
+        if highlighted:
+            notify_highlighted_message(prefix, message)
+        else:
+            if weechat.config_get_plugin("show_public_message") == "on":
+                growl_notify(
+                    'Public',
+                    'Public Message',
+                    '{0}: {1}'.format(prefix, message))
+
+def notify_private_message_or_action(prefix, message, highlighted):
+    '''Notify on private message or action.'''
+    regex = re.compile(r'^CTCP_MESSAGE.+?ACTION (.+)$', re.UNICODE)
+    match = regex.match(message)
+    if match:
+        notify_private_action_message(prefix, match.group(1), highlighted)
+    else:
+        if prefix == ' *':
+            regex = re.compile(r'^(\w+) (.+)$', re.UNICODE)
+            match = regex.match(message)
+            if match:
+                prefix = match.group(1)
+                message = match.group(2)
+                notify_private_action_message(prefix, message, highlighted)
+        else:
+            if highlighted:
+                notify_highlighted_message(prefix, message)
+            else:
+                if weechat.config_get_plugin("show_private_message") == "on":
+                    growl_notify(
+                        'Private',
+                        'Private Message',
+                        '{0}: {1}'.format(prefix, message))
+
+def notify_public_action_message(prefix, message, highlighted):
+    '''Notify on public action message.'''
+    if weechat.config_get_plugin("show_public_action_message") == "on":
+        if highlighted:
+            notify_highlighted_message(prefix, message)
+        else:
+            growl_notify(
+                'Action',
+                'Public Action Message',
+                '{0}: {1}'.format(prefix, message),
+                priority=1)
+
+def notify_private_action_message(prefix, message, highlighted):
+    '''Notify on private action message.'''
+    if weechat.config_get_plugin("show_private_action_message") == "on":
+        if highlighted:
+            notify_highlighted_message(prefix, message)
+        else:
+            growl_notify(
+                'Action',
+                'Private Action Message',
+                '{0}: {1}'.format(prefix, message),
+                priority=1)
+
+def notify_notice_message(prefix, message, highlighted):
+    '''Notify on notice message.'''
+    if weechat.config_get_plugin("show_notice_message") == "on":
+        regex = re.compile(r'^([^\s]*) [^:]*: (.+)$', re.UNICODE)
+        match = regex.match(message)
+        if match:
+            prefix = match.group(1)
+            message = match.group(2)
+            if highlighted:
+                notify_highlighted_message(prefix, message)
+            else:
+                growl_notify(
+                    'Notice',
+                    'Notice Message',
+                    '{0}: {1}'.format(prefix, message))
+
+def notify_invite_message(prefix, message, highlighted):
+    '''Notify on channel invitation message.'''
+    if weechat.config_get_plugin("show_invite_message") == "on":
+        regex = re.compile(
+            r'^You have been invited to ([^\s]+) by ([^\s]+)$', re.UNICODE)
+        match = regex.match(message)
+        if match:
+            channel = match.group(1)
+            nick = match.group(2)
+            growl_notify(
+                'Invite',
+                'Channel Invitation',
+                '{0} has invited you to join {1}.'.format(nick, channel))
+
+def notify_channel_topic(prefix, message, highlighted):
+    '''Notify on channel topic change.'''
+    if weechat.config_get_plugin("show_channel_topic") == "on":
+        regex = re.compile(
+            r'^\w+ has (?:changed|unset) topic for ([^\s]+)'+
+                '(?:(?: from "(?:(?:"\w|[^"])+)")? to "((?:"\w|[^"])+)")?',
+            re.UNICODE)
+        match = regex.match(message)
+        if match:
+            channel = match.group(1)
+            topic = match.group(2) or ''
+            growl_notify(
+                'Channel',
+                'Channel Topic',
+                "{0}: {1}".format(channel, topic))
+
+def notify_dcc_chat_request(match):
+    '''Notify on DCC chat request.'''
+    if weechat.config_get_plugin("show_dcc") == "on":
+        nick = match.group(1)
+        growl_notify(
+            'DCC',
+            'Direct Chat Request',
+            '{0} wants to chat directly.'.format(nick))
+
+def notify_dcc_chat_closed(match):
+    '''Notify on DCC chat termination.'''
+    if weechat.config_get_plugin("show_dcc") == "on":
+        nick = match.group(1)
+        growl_notify(
+            'DCC',
+            'Direct Chat Ended',
+            'Direct chat with {0} has ended.'.format(nick))
+
+def notify_dcc_get_request(match):
+    'Notify on DCC get request.'
+    if weechat.config_get_plugin("show_dcc") == "on":
+        nick = match.group(1)
+        file_name = match.group(2)
+        growl_notify(
+            'DCC',
+            'File Transfer Request',
+            '{0} wants to send you {1}.'.format(nick, file_name))
+
+def notify_dcc_get_completed(match):
+    'Notify on DCC get completion.'
+    if weechat.config_get_plugin("show_dcc") == "on":
+        file_name = match.group(1)
+        growl_notify('DCC', 'Download Complete', file_name)
+
+def notify_dcc_get_failed(match):
+    'Notify on DCC get failure.'
+    if weechat.config_get_plugin("show_dcc") == "on":
+        file_name = match.group(1)
+        growl_notify('DCC', 'Download Failed', file_name)
+
+def notify_dcc_send_completed(match):
+    'Notify on DCC send completion.'
+    if weechat.config_get_plugin("show_dcc") == "on":
+        file_name = match.group(1)
+        growl_notify('DCC', 'Upload Complete', file_name)
+
+def notify_dcc_send_failed(match):
+    'Notify on DCC send failure.'
+    if weechat.config_get_plugin("show_dcc") == "on":
+        file_name = match.group(1)
+        growl_notify('DCC', 'Upload Failed', file_name)
+
+
+# ------------------------------------------------------------------------------
+# Utility
+# ------------------------------------------------------------------------------
+def set_away_status(prefix, message, highlighted):
+    '''Sets away status for use by sticky notifications.'''
+    regex = re.compile(r'^\[\w+ \b(away|back)\b:', re.UNICODE)
+    match = regex.match(message)
+    if match:
+        status = match.group(1)
+        if status == 'away':
+            STATE['is_away'] = True
+        if status == 'back':
+            STATE['is_away'] = False
+
+def cb_process_message(
+    data,
+    wbuffer,
+    date,
+    tags,
+    displayed,
+    highlight,
+    prefix,
+    message
+):
+    '''Delegates incoming messages to appropriate handlers.'''
+    tags = set(tags.split(','))
+    functions = globals()
+    is_public_message = tags.issuperset(
+        TAGGED_MESSAGES['public message or action'])
+    buffer_name = weechat.buffer_get_string(wbuffer, 'name')
+    dcc_buffer_regex = re.compile(r'^irc_dcc\.', re.UNICODE)
+    dcc_buffer_match = dcc_buffer_regex.match(buffer_name)
+    highlighted = False
+    if highlight == "1":
+        highlighted = True
+    # Private DCC message identifies itself as public.
+    if is_public_message and dcc_buffer_match:
+        notify_private_message_or_action(prefix, message, highlighted)
+        return weechat.WEECHAT_RC_OK
+    # Pass identified, untagged message to its designated function.
+    for key, value in UNTAGGED_MESSAGES.items():
+        match = value.match(message)
+        if match:
+            functions[DISPATCH_TABLE[key]](match)
+            return weechat.WEECHAT_RC_OK
+    # Pass identified, tagged message to its designated function.
+    for key, value in TAGGED_MESSAGES.items():
+        if tags.issuperset(value):
+            functions[DISPATCH_TABLE[key]](prefix, message, highlighted)
+            return weechat.WEECHAT_RC_OK
+    return weechat.WEECHAT_RC_OK
+
+def growl_notify(notification, title, description, priority=None):
+    '''Returns whether Growl notifications should be sticky.'''
+    growl = STATE['growl']
+    is_away = STATE['is_away']
+    is_sticky = False
+    if weechat.config_get_plugin('sticky') == 'on':
+        is_sticky = True
+    if weechat.config_get_plugin('sticky_away') == 'on' and is_away:
+        is_sticky = True
+    growl.notify(notification, title, description, '', is_sticky, priority)
+
+
+# ------------------------------------------------------------------------------
+# Main
+# ------------------------------------------------------------------------------
+def main():
+    '''Sets up WeeChat Growl notifications.'''
+    # Initialize options.
+    for option, value in SETTINGS.items():
+        if not weechat.config_is_set_plugin(option):
+            weechat.config_set_plugin(option, value)
+    # Initialize Growl.
+    name = "WeeChat"
+    hostname = weechat.config_get_plugin('hostname')
+    password = weechat.config_get_plugin('password')
+    icon = Growl.Image.imageFromPath(
+        os.path.join(
+            weechat.info_get("weechat_dir", ""),
+            weechat.config_get_plugin('icon')))
+    notifications = [
+        'Public',
+        'Private',
+        'Action',
+        'Notice',
+        'Invite',
+        'Highlight',
+        'Server',
+        'Channel',
+        'DCC',
+        'WeeChat'
+    ]
+    if len(hostname) == 0:
+        hostname = None
+    if len(password) == 0:
+        password = None
+    growl = Growl.GrowlNotifier(
+        applicationName=name,
+        hostname=hostname,
+        password=password,
+        notifications=notifications,
+        applicationIcon=icon)
+    growl.register()
+    STATE['growl'] = growl
+    # Register hooks.
+    weechat.hook_signal(
+        'irc_server_connected',
+        'cb_irc_server_connected',
+        '')
+    weechat.hook_signal(
+        'irc_server_disconnected',
+        'cb_irc_server_disconnected',
+        '')
+    weechat.hook_signal('upgrade_ended', 'cb_upgrade_ended', '')
+    weechat.hook_print('', '', '', 1, 'cb_process_message', '')
+
+if __name__ == '__main__' and IMPORT_OK and weechat.register(
+    SCRIPT_NAME,
+    SCRIPT_AUTHOR,
+    SCRIPT_VERSION,
+    SCRIPT_LICENSE,
+    SCRIPT_DESC,
+    '',
+    ''
+):
+    main()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/relay.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,24 @@
+#
+# relay.conf -- weechat v0.3.5
+#
+
+[look]
+auto_open_buffer = on
+raw_messages = 256
+
+[color]
+status_active = lightblue
+status_auth_failed = lightred
+status_connecting = yellow
+status_disconnected = lightred
+status_waiting_auth = brown
+text = default
+text_bg = default
+text_selected = white
+
+[network]
+bind_address = ""
+max_clients = 5
+password = ""
+
+[port]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/rmodifier.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,11 @@
+#
+# rmodifier.conf -- weechat v0.3.5
+#
+
+[look]
+hide_char = "*"
+
+[modifier]
+nickserv = "history_add,input_text_display;^(/(msg|quote) +nickserv +(identify|ghost \S+) +)(.*);1,4*"
+oper = "history_add,input_text_display;^(/oper +\S+ +)(.*);1,2*"
+set_pass = "history_add;^(/set +\S*password\S* +)(.*);1,2*"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/weechat.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,455 @@
+#
+# weechat.conf -- weechat v0.3.5
+#
+
+[debug]
+
+[startup]
+command_after_plugins = ""
+command_before_plugins = ""
+display_logo = on
+display_version = on
+
+[look]
+align_end_of_lines = message
+buffer_notify_default = all
+buffer_time_format = "%H:%M:%S"
+color_pairs_auto_reset = 5
+color_real_white = off
+command_chars = ""
+confirm_quit = off
+day_change = on
+day_change_time_format = "%a, %d %b %Y"
+highlight = "sjl"
+highlight_regex = "sjl"
+highlight_tags = ""
+hline_char = "-"
+hotlist_add_buffer_if_away = on
+hotlist_buffer_separator = ", "
+hotlist_count_max = 2
+hotlist_count_min_msg = 2
+hotlist_names_count = 3
+hotlist_names_length = 0
+hotlist_names_level = 12
+hotlist_names_merged_buffers = off
+hotlist_short_names = on
+hotlist_sort = group_time_asc
+hotlist_unique_numbers = on
+input_cursor_scroll = 20
+input_share = none
+input_share_overwrite = off
+input_undo_max = 32
+item_time_format = "%H:%M"
+jump_current_to_previous_buffer = on
+jump_previous_buffer_when_closing = on
+nickmode = on
+nickmode_empty = off
+paste_max_lines = 3
+prefix_action = " *"
+prefix_align = right
+prefix_align_max = 15
+prefix_align_min = 0
+prefix_align_more = on
+prefix_buffer_align = right
+prefix_buffer_align_max = 0
+prefix_buffer_align_more = on
+prefix_error = "=!="
+prefix_join = "-->"
+prefix_network = "--"
+prefix_quit = "<--"
+prefix_suffix = "|"
+read_marker = line
+read_marker_always_show = off
+read_marker_string = "- "
+save_config_on_exit = on
+save_layout_on_exit = none
+scroll_amount = 3
+scroll_page_percent = 100
+search_text_not_found_alert = on
+set_title = on
+time_format = "%a, %d %b %Y %T"
+
+[palette]
+
+[color]
+bar_more = lightmagenta
+chat = default
+chat_bg = default
+chat_buffer = white
+chat_channel = white
+chat_delimiters = green
+chat_highlight = lightmagenta
+chat_highlight_bg = default
+chat_host = cyan
+chat_nick = lightcyan
+chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue"
+chat_nick_other = cyan
+chat_nick_self = white
+chat_prefix_action = white
+chat_prefix_buffer = brown
+chat_prefix_error = yellow
+chat_prefix_join = lightgreen
+chat_prefix_more = lightmagenta
+chat_prefix_network = magenta
+chat_prefix_quit = lightred
+chat_prefix_suffix = green
+chat_read_marker = magenta
+chat_read_marker_bg = default
+chat_server = brown
+chat_text_found = yellow
+chat_text_found_bg = lightmagenta
+chat_time = default
+chat_time_delimiters = brown
+chat_value = cyan
+input_actions = lightgreen
+input_text_not_found = red
+nicklist_away = cyan
+nicklist_group = green
+nicklist_offline = blue
+separator = blue
+status_count_highlight = magenta
+status_count_msg = brown
+status_count_other = default
+status_count_private = green
+status_data_highlight = lightmagenta
+status_data_msg = yellow
+status_data_other = default
+status_data_private = lightgreen
+status_filter = green
+status_more = yellow
+status_name = white
+status_name_ssl = lightgreen
+status_number = yellow
+status_time = default
+
+[completion]
+default_template = "%(nicks)|%(irc_channels)"
+nick_add_space = on
+nick_completer = ":"
+nick_first_only = off
+nick_ignore_chars = "[]`_-^"
+partial_completion_alert = on
+partial_completion_command = off
+partial_completion_command_arg = off
+partial_completion_count = on
+partial_completion_other = off
+
+[history]
+display_default = 5
+max_commands = 100
+max_lines = 4096
+max_visited_buffers = 50
+
+[proxy]
+
+[network]
+gnutls_ca_file = "%h/ssl/CAs.pem"
+gnutls_handshake_timeout = 30
+
+[plugin]
+autoload = "*"
+debug = off
+extension = ".so"
+path = "%h/plugins"
+save_config_on_unload = on
+
+[bar]
+buffers.color_bg = default
+buffers.color_delim = default
+buffers.color_fg = default
+buffers.conditions = ""
+buffers.filling_left_right = vertical
+buffers.filling_top_bottom = horizontal
+buffers.hidden = off
+buffers.items = "buffers"
+buffers.position = left
+buffers.priority = 0
+buffers.separator = on
+buffers.size = 0
+buffers.size_max = 0
+buffers.type = root
+input.color_bg = default
+input.color_delim = cyan
+input.color_fg = default
+input.conditions = ""
+input.filling_left_right = vertical
+input.filling_top_bottom = horizontal
+input.hidden = off
+input.items = "[input_prompt]+(away),[input_search],[input_paste],input_text"
+input.position = bottom
+input.priority = 1000
+input.separator = off
+input.size = 1
+input.size_max = 0
+input.type = window
+nicklist.color_bg = default
+nicklist.color_delim = cyan
+nicklist.color_fg = default
+nicklist.conditions = "nicklist"
+nicklist.filling_left_right = vertical
+nicklist.filling_top_bottom = columns_vertical
+nicklist.hidden = on
+nicklist.items = "buffer_nicklist"
+nicklist.position = right
+nicklist.priority = 200
+nicklist.separator = on
+nicklist.size = 0
+nicklist.size_max = 0
+nicklist.type = window
+status.color_bg = blue
+status.color_delim = cyan
+status.color_fg = default
+status.conditions = ""
+status.filling_left_right = vertical
+status.filling_top_bottom = horizontal
+status.hidden = off
+status.items = "[time],[buffer_count],[buffer_plugin],buffer_number+:+buffer_name+{buffer_nicklist_count}+buffer_filter,[lag],[hotlist],completion,scroll"
+status.position = bottom
+status.priority = 500
+status.separator = off
+status.size = 1
+status.size_max = 0
+status.type = window
+title.color_bg = blue
+title.color_delim = cyan
+title.color_fg = default
+title.conditions = ""
+title.filling_left_right = vertical
+title.filling_top_bottom = horizontal
+title.hidden = off
+title.items = "buffer_title"
+title.position = top
+title.priority = 500
+title.separator = off
+title.size = 1
+title.size_max = 0
+title.type = window
+
+[layout]
+
+[notify]
+
+[filter]
+irc_smart = on;*;irc_smart_filter;*
+nicks = on;*;irc_366;*
+
+[key]
+ctrl-? = "/input delete_previous_char"
+ctrl-A = "/input move_beginning_of_line"
+ctrl-B = "/input move_previous_char"
+ctrl-Cb = "/input insert \x02"
+ctrl-Cc = "/input insert \x03"
+ctrl-Ci = "/input insert \x1D"
+ctrl-Co = "/input insert \x0F"
+ctrl-Cr = "/input insert \x12"
+ctrl-Cu = "/input insert \x15"
+ctrl-D = "/input delete_next_char"
+ctrl-E = "/input move_end_of_line"
+ctrl-F = "/input move_next_char"
+ctrl-H = "/input delete_previous_char"
+ctrl-I = "/input complete_next"
+ctrl-J = "/input return"
+ctrl-K = "/input delete_end_of_line"
+ctrl-L = "/window refresh"
+ctrl-M = "/input return"
+ctrl-N = "/buffer +1"
+ctrl-P = "/buffer -1"
+ctrl-R = "/input search_text"
+ctrl-Sctrl-U = "/input set_unread"
+ctrl-T = "/input transpose_chars"
+ctrl-U = "/input delete_beginning_of_line"
+ctrl-W = "/input delete_previous_word"
+ctrl-X = "/input switch_active_buffer"
+ctrl-Y = "/input clipboard_paste"
+meta-0 = "/buffer *10"
+meta-1 = "/buffer *1"
+meta-2 = "/buffer *2"
+meta-3 = "/buffer *3"
+meta-4 = "/buffer *4"
+meta-5 = "/buffer *5"
+meta-6 = "/buffer *6"
+meta-7 = "/buffer *7"
+meta-8 = "/buffer *8"
+meta-9 = "/buffer *9"
+meta-< = "/input jump_previously_visited_buffer"
+meta-= = "/filter toggle"
+meta-> = "/input jump_next_visited_buffer"
+meta-OA = "/input history_global_previous"
+meta-OB = "/input history_global_next"
+meta-OC = "/input move_next_word"
+meta-OD = "/input move_previous_word"
+meta-OF = "/input move_end_of_line"
+meta-OH = "/input move_beginning_of_line"
+meta-Oa = "/input history_global_previous"
+meta-Ob = "/input history_global_next"
+meta-Oc = "/input move_next_word"
+meta-Od = "/input move_previous_word"
+meta2-15~ = "/buffer -1"
+meta2-17~ = "/buffer +1"
+meta2-18~ = "/window -1"
+meta2-19~ = "/window +1"
+meta2-1;3A = "/buffer -1"
+meta2-1;3B = "/buffer +1"
+meta2-1;3C = "/buffer +1"
+meta2-1;3D = "/buffer -1"
+meta2-1;5A = "/input history_global_previous"
+meta2-1;5B = "/input history_global_next"
+meta2-1~ = "/input move_beginning_of_line"
+meta2-20~ = "/bar scroll title * x-50%"
+meta2-21~ = "/bar scroll title * x+50%"
+meta2-23~ = "/bar scroll nicklist * y-100%"
+meta2-24~ = "/bar scroll nicklist * y+100%"
+meta2-3~ = "/input delete_next_char"
+meta2-4~ = "/input move_end_of_line"
+meta2-5;3~ = "/window scroll_up"
+meta2-5~ = "/window page_up"
+meta2-6;3~ = "/window scroll_down"
+meta2-6~ = "/window page_down"
+meta2-7~ = "/input move_beginning_of_line"
+meta2-8~ = "/input move_end_of_line"
+meta2-A = "/input history_previous"
+meta2-B = "/input history_next"
+meta2-C = "/input move_next_char"
+meta2-D = "/input move_previous_char"
+meta2-F = "/input move_end_of_line"
+meta2-G = "/window page_down"
+meta2-H = "/input move_beginning_of_line"
+meta2-I = "/window page_up"
+meta2-Z = "/input complete_previous"
+meta-meta2-1~ = "/window scroll_top"
+meta-meta2-23~ = "/bar scroll nicklist * yb"
+meta-meta2-24~ = "/bar scroll nicklist * ye"
+meta-meta2-4~ = "/window scroll_bottom"
+meta-meta2-5~ = "/window scroll_up"
+meta-meta2-6~ = "/window scroll_down"
+meta-meta2-7~ = "/window scroll_top"
+meta-meta2-8~ = "/window scroll_bottom"
+meta-meta2-A = "/buffer -1"
+meta-meta2-B = "/buffer +1"
+meta-meta2-C = "/buffer +1"
+meta-meta2-D = "/buffer -1"
+meta-_ = "/input redo"
+meta-a = "/input jump_smart"
+meta-b = "/input move_previous_word"
+meta-d = "/input delete_next_word"
+meta-f = "/input move_next_word"
+meta-h = "/input hotlist_clear"
+meta-j01 = "/buffer 1"
+meta-j02 = "/buffer 2"
+meta-j03 = "/buffer 3"
+meta-j04 = "/buffer 4"
+meta-j05 = "/buffer 5"
+meta-j06 = "/buffer 6"
+meta-j07 = "/buffer 7"
+meta-j08 = "/buffer 8"
+meta-j09 = "/buffer 9"
+meta-j10 = "/buffer 10"
+meta-j11 = "/buffer 11"
+meta-j12 = "/buffer 12"
+meta-j13 = "/buffer 13"
+meta-j14 = "/buffer 14"
+meta-j15 = "/buffer 15"
+meta-j16 = "/buffer 16"
+meta-j17 = "/buffer 17"
+meta-j18 = "/buffer 18"
+meta-j19 = "/buffer 19"
+meta-j20 = "/buffer 20"
+meta-j21 = "/buffer 21"
+meta-j22 = "/buffer 22"
+meta-j23 = "/buffer 23"
+meta-j24 = "/buffer 24"
+meta-j25 = "/buffer 25"
+meta-j26 = "/buffer 26"
+meta-j27 = "/buffer 27"
+meta-j28 = "/buffer 28"
+meta-j29 = "/buffer 29"
+meta-j30 = "/buffer 30"
+meta-j31 = "/buffer 31"
+meta-j32 = "/buffer 32"
+meta-j33 = "/buffer 33"
+meta-j34 = "/buffer 34"
+meta-j35 = "/buffer 35"
+meta-j36 = "/buffer 36"
+meta-j37 = "/buffer 37"
+meta-j38 = "/buffer 38"
+meta-j39 = "/buffer 39"
+meta-j40 = "/buffer 40"
+meta-j41 = "/buffer 41"
+meta-j42 = "/buffer 42"
+meta-j43 = "/buffer 43"
+meta-j44 = "/buffer 44"
+meta-j45 = "/buffer 45"
+meta-j46 = "/buffer 46"
+meta-j47 = "/buffer 47"
+meta-j48 = "/buffer 48"
+meta-j49 = "/buffer 49"
+meta-j50 = "/buffer 50"
+meta-j51 = "/buffer 51"
+meta-j52 = "/buffer 52"
+meta-j53 = "/buffer 53"
+meta-j54 = "/buffer 54"
+meta-j55 = "/buffer 55"
+meta-j56 = "/buffer 56"
+meta-j57 = "/buffer 57"
+meta-j58 = "/buffer 58"
+meta-j59 = "/buffer 59"
+meta-j60 = "/buffer 60"
+meta-j61 = "/buffer 61"
+meta-j62 = "/buffer 62"
+meta-j63 = "/buffer 63"
+meta-j64 = "/buffer 64"
+meta-j65 = "/buffer 65"
+meta-j66 = "/buffer 66"
+meta-j67 = "/buffer 67"
+meta-j68 = "/buffer 68"
+meta-j69 = "/buffer 69"
+meta-j70 = "/buffer 70"
+meta-j71 = "/buffer 71"
+meta-j72 = "/buffer 72"
+meta-j73 = "/buffer 73"
+meta-j74 = "/buffer 74"
+meta-j75 = "/buffer 75"
+meta-j76 = "/buffer 76"
+meta-j77 = "/buffer 77"
+meta-j78 = "/buffer 78"
+meta-j79 = "/buffer 79"
+meta-j80 = "/buffer 80"
+meta-j81 = "/buffer 81"
+meta-j82 = "/buffer 82"
+meta-j83 = "/buffer 83"
+meta-j84 = "/buffer 84"
+meta-j85 = "/buffer 85"
+meta-j86 = "/buffer 86"
+meta-j87 = "/buffer 87"
+meta-j88 = "/buffer 88"
+meta-j89 = "/buffer 89"
+meta-j90 = "/buffer 90"
+meta-j91 = "/buffer 91"
+meta-j92 = "/buffer 92"
+meta-j93 = "/buffer 93"
+meta-j94 = "/buffer 94"
+meta-j95 = "/buffer 95"
+meta-j96 = "/buffer 96"
+meta-j97 = "/buffer 97"
+meta-j98 = "/buffer 98"
+meta-j99 = "/buffer 99"
+meta-jmeta-l = "/input jump_last_buffer"
+meta-jmeta-r = "/server raw"
+meta-jmeta-s = "/server jump"
+meta-k = "/input grab_key_command"
+meta-n = "/window scroll_next_highlight"
+meta-p = "/window scroll_previous_highlight"
+meta-r = "/input delete_line"
+meta-u = "/input scroll_unread"
+meta-wmeta2-1;3A = "/window up"
+meta-wmeta2-1;3B = "/window down"
+meta-wmeta2-1;3C = "/window right"
+meta-wmeta2-1;3D = "/window left"
+meta-wmeta-meta2-A = "/window up"
+meta-wmeta-meta2-B = "/window down"
+meta-wmeta-meta2-C = "/window right"
+meta-wmeta-meta2-D = "/window left"
+meta-wmeta-b = "/window balance"
+meta-wmeta-s = "/window swap"
+meta-z = "/window zoom"
+ctrl-_ = "/input undo"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/weechat/xfer.conf	Sun Sep 25 15:29:33 2011 -0400
@@ -0,0 +1,36 @@
+#
+# xfer.conf -- weechat v0.3.5
+#
+
+[look]
+auto_open_buffer = on
+progress_bar_size = 20
+
+[color]
+status_aborted = lightred
+status_active = lightblue
+status_connecting = yellow
+status_done = lightgreen
+status_failed = lightred
+status_waiting = lightcyan
+text = default
+text_bg = default
+text_selected = white
+
+[network]
+blocksize = 65536
+fast_send = on
+own_ip = ""
+port_range = ""
+speed_limit = 0
+timeout = 300
+
+[file]
+auto_accept_chats = off
+auto_accept_files = off
+auto_rename = on
+auto_resume = on
+convert_spaces = on
+download_path = "%h/xfer"
+upload_path = "~"
+use_nick_in_filename = on
--- a/zsh/misc.zsh	Sun Sep 25 15:27:45 2011 -0400
+++ b/zsh/misc.zsh	Sun Sep 25 15:29:33 2011 -0400
@@ -8,6 +8,8 @@
 alias f='fab'
 alias fd='fab dev'
 
+alias weechat='weechat-curses'
+
 alias spotlight-off='sudo mdutil -a -i off && sudo mv /System/Library/CoreServices/Search.bundle/ /System/Library/CoreServices/SearchOff.bundle/ && killall SystemUIServer'
 alias spotlight-on='sudo mdutil -a -i on && sudo mv /System/Library/CoreServices/SearchOff.bundle/ /System/Library/CoreServices/Search.bundle/ && killall SystemUIServer'