Commits

totte committed 073fbac

Replace Irssi with Konversation+ZNC

  • Participants
  • Parent commits 093650d

Comments (0)

Files changed (9)

File .Xresources

-xft.dpi:                        96
-xft.lcdfilter:                  lcddefault
-xft.antialias:                  true
-xft.hinting:                    true
-xft.hintstyle:                  hintfull
-xft.rgba:                       rgb
-
-!xsetroot -cursor_name left_ptr
-
-urxvt*geometry:                 86x42
-urxvt*transparent:              false
-urxvt*shading:                  0
-urxvt*font:                     xft:Inconsolata:style=Medium:size=16:antialias=true:hinting=true
-urxvt*boldFont:                 xft:Inconsolata:style=Medium:size=16:antialias=true:hinting=true
-urxvt*italicFont:               xft:Inconsolata:style=Medium:size=16:antialias=true:hinting=true
-urxvt*boldItalicFont:           xft:Inconsolata:style=Medium:size=16:antialias=true:hinting=true
-urxvt*letterSpace:              0
-urxvt*urlLauncher:              opera
-urxvt*scrollBar:                false
-urxvt*cursorColor:              #ffffff
-urxvt*cursorBlink:              true
-urxvt*buffered:                 true
-urxvt*underlineColor:           yellow
-urxvt*depth:                    32
-urxvt*borderless:               1
-urxvt*loginShell:               false
-urxvt*secondaryScroll:          true    # Enable Shift-PageUp/Down in screen
-urxvt*saveLines:                4096
-urxvt*termName:                 rxvt-unicode
-urxvt.matcher.button:           1
-
-#define S_base03        #002b36
-#define S_base02        #073642
-#define S_base01        #586e75
-#define S_base00        #657b83
-#define S_base0         #839496
-#define S_base1         #93a1a1
-#define S_base2         #eee8d5
-#define S_base3         #fdf6e3
-#define S_yellow        #b58900
-#define S_orange        #cb4b16
-#define S_red           #dc322f
-#define S_magenta       #d33682
-#define S_violet        #6c71c4
-#define S_blue          #268bd2
-#define S_cyan          #2aa198
-#define S_green         #859900
-
-*background:            S_base03
-*foreground:            S_base00
-*cursorColor:           S_base1
-*pointerColorBackground:S_base01
-*pointerColorForeground:S_base1
-! black dark/light
-*color0:                S_base02
-*color8:                S_base03
-! red dark/light
-*color1:                S_red
-*color9:                S_orange
-! green dark/light
-*color2:                S_green
-*color10:               S_base01
-! yellow dark/light
-*color3:                S_yellow
-*color11:               S_base00
-! blue dark/light
-*color4:                S_blue
-*color12:               S_base0
-! magenta dark/light
-*color5:                S_magenta
-*color13:               S_violet
-! cyan dark/light
-*color6:                S_cyan
-*color14:               S_base1
-! white dark/light
-*color7:                S_base2
-*color15:               S_base3
 .kde4
-.mpd/database
-.mpd/log
-.mpd/pid
-.mpd/playlists
-.mpd/state
+.mpd/
 .netrwhist
 .opera
 .xmonad/xmonad.errors

File .irssi/config

-servers = (
-  {
-    address = "irc.freenode.net";
-    chatnet = "Freenode";
-    port = "7070";
-    use_ssl = "ON";
-    autoconnect = "Yes";
-  }
-);
-
-aliases = {
-  J = "join";
-  WJOIN = "join -window";
-  WQUERY = "query -window";
-  LEAVE = "part";
-  EXIT = "quit";
-  DESCRIBE = "action";
-  DATE = "time";
-  HOST = "userhost";
-  LAST = "lastlog";
-  SAY = "msg *";
-  WI = "whois";
-  WII = "whois $0 $0";
-  WW = "whowas";
-  W = "who";
-  N = "names";
-  M = "msg";
-  T = "topic";
-  C = "clear";
-  CL = "clear";
-  K = "kick";
-  KB = "kickban";
-  KN = "knockout";
-  BANS = "ban";
-  B = "ban";
-  MUB = "unban *";
-  UB = "unban";
-  IG = "ignore";
-  UNIG = "unignore";
-  SB = "scrollback";
-  UMODE = "mode $N";
-  WC = "window close";
-  WN = "window new hide";
-  SV = "say Irssi $J ($V) - http://irssi.org/";
-  GOTO = "sb goto";
-  CHAT = "dcc chat";
-  RUN = "SCRIPT LOAD";
-  CALC = "exec - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
-  SBAR = "STATUSBAR";
-  INVITELIST = "mode $C +I";
-  Q = "QUERY";
-  "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save";
-  EXEMPTLIST = "mode $C +e";
-  ATAG = "WINDOW SERVER";
-  UNSET = "set -clear";
-  RESET = "set -default";
-  afk = "away";
-  mni = "msg nickserv identify";
-  jfc = "/join #debian;/join #archlinux;/join #zsh;/join #tmux;/join #vim;/join #git;/join #python;/join #qt;/join #mer;/join #haskell;/join #kde;/join #xmonad";
-};
-
-statusbar = {
-  # formats:
-  # when using {templates}, the template is shown only if it's argument isn't
-  # empty unless no argument is given. for example {sb} is printed always,
-  # but {sb $T} is printed only if $T isn't empty.
-
-  items = {
-    # start/end text in statusbars
-    barstart = "{sbstart}";
-    barend = "{sbend}";
-
-    topicbarstart = "{topicsbstart}";
-    topicbarend = "{topicsbend}";
-
-    # treated "normally", you could change the time/user name to whatever
-    time = "{sb $Z}";
-    user = "{sb {sbnickmode $cumode}$N{sbaway $A}{sbmode $usermode}}";
-
-    # treated specially .. window is printed with non-empty windows,
-    # window_empty is printed with empty windows
-    #window = "{sb $winref:$tag/$itemname{sbmode $M}}";
-    window = " %Cto{sb $itemname{sbmode $M}}";
-    #window_empty = "{sb $winref{sbservertag $tag}}";
-    window_empty = "";
-    prompt = "{prompt $[.15]itemname}";
-    prompt_empty = "{prompt $winname}";
-    topic = " $topic";
-    topic_empty = " Irssi v$J";
-
-    # all of these treated specially, they're only displayed when needed
-    lag = "{sb Lag: $0-}";
-    act = "{sb Act: $0-}";
-    more = "-- more --";
-  };
-
-  # there's two type of statusbars. root statusbars are either at the top
-  # of the screen or at the bottom of the screen. window statusbars are at
-  # the top/bottom of each split window in screen.
-  default = {
-    # the "default statusbar" to be displayed at the bottom of the window.
-    # contains all the normal items.
-    window = {
-      disabled = "no";
-
-      # window, root
-      type = "window";
-      # top, bottom
-      placement = "bottom";
-      # number
-      position = "1";
-      # active, inactive, always
-      visible = "active";
-
-      # list of items in statusbar in the display order
-      items = {
-        barstart = { priority = "100"; };
-        user = { };
-        window = { };
-        window_empty = { };
-        lag = { priority = "-1"; };
-        more = { priority = "-1"; alignment = "right"; };
-        barend = { priority = "100"; alignment = "right"; };
-      };
-    };
-
-    # statusbar to use in inactive split windows
-    window_inact = {
-      type = "window";
-      placement = "bottom";
-      position = "1";
-      visible = "inactive";
-      items = {
-        barstart = { priority = "100"; };
-        more = { priority = "-1"; alignment = "right"; };
-        barend = { priority = "100"; alignment = "right"; };
-      };
-    };
-
-    # we treat input line as yet another statusbar :) It's possible to
-    # add other items before or after the input line item.
-    prompt = {
-      type = "root";
-      placement = "bottom";
-      # we want to be at the bottom always
-      position = "100";
-      visible = "always";
-      items = {
-        prompt = { priority = "-1"; };
-        prompt_empty = { priority = "-1"; };
-        # treated specially, this is the real input line.
-        input = { priority = "10"; };
-      };
-    };
-
-    # topicbar
-    topic = {
-      type = "root";
-      placement = "top";
-      position = "1";
-      visible = "always";
-      items = {
-        topicbarstart = { priority = "100"; };
-        topic = { };
-        topic_empty = { };
-        topicbarend = { priority = "100"; alignment = "right"; };
-      };
-    };
-
-    # advanced window list
-    awl_0 = {
-      placement = "top";
-      items = {
-        barstart = { priority = "100"; };
-        awl_0 = { };
-        barend = { priority = "100"; alignment = "right"; };
-      };
-    };
-  };
-};
-settings = {
-  core = {
-    recode = "yes";
-    recode_out_default_charset = "utf-8";
-    recode_fallback = "utf-8";
-    recode_autodetect_utf8 = "yes";
-    real_name = "Hans Tovetjärn";
-    user_name = "totte";
-    nick = "totte";
-  };
-  "fe-text" = { actlist_sort = "refnum"; };
-  "fe-common/core" = { theme = "default"; };
-  "perl/core/scripts" = {
-    awl_display_key = "%6$Q%w:%k$H$C$S%n";
-    awl_placement = "top";
-    awl_maxlines = "1";
-    awl_display_key_active = "%7 %k$Q:$H$C $S%n";
-  };
-};
-hilights = ( { text = "totte"; nick = "yes"; word = "yes"; } );
-ignores = (
-  {
-    level = "JOINS PARTS QUITS NICKS";
-    channels = (
-      "#debian",
-      "#archlinux",
-      "#zsh",
-      "#tmux",
-      "#vim",
-      "#git",
-      "#python",
-      "#qt",
-      "#haskell",
-      "#kde",
-      "#mer",
-      "#xmonad",
-      "#django"
-    );
-  }
-);
-windows = { 1 = { immortal = "yes"; name = "network"; level = "ALL"; }; };
-mainwindows = { 1 = { first_line = "1"; lines = "9"; }; };
-logs = { };
-chatnets = { Freenode = { type = "IRC"; }; };
-keyboard = (
-  { key = "^W"; id = "key"; data = "window"; },
-  { key = "window-c"; id = "command"; data = "WINDOW NEW HIDDEN"; },
-  { key = "window-w"; id = "command"; data = "WINDOW KILL"; },
-  { key = "window-q"; id = "command"; data = "QUIT"; },
-  { key = "window-n"; id = "command"; data = "WINDOW PREVIOUS"; },
-  { key = "window-o"; id = "command"; data = "WINDOW NEXT"; },
-  { key = "window-<"; id = "command"; data = "WINDOW MOVE LEFT"; },
-  { key = "window->"; id = "command"; data = "WINDOW MOVE RIGHT"; },
-  { key = "window-."; id = "command"; data = "RELOAD"; }
-);

File .irssi/default.theme

-# default foreground color (%N) - -1 is the "default terminal color"
-default_color = "-1";
-
-# print timestamp/servertag at the end of line, not at beginning
-info_eol = "false";
-
-# these characters are automatically replaced with specified color
-# (dark grey by default)
-replaces = {
-  #  "[]" = "%B$*%N";
-  "!@+" = "%r$*%N";
-};
-
-abstracts = {
-  ##
-  ## generic
-  ##
-
-  # text to insert at the beginning of each non-message line
-  line_start = "";
-
-  # timestamp styling, nothing by default
-  timestamp = "%c$*%N";
-
-  # any kind of text that needs hilighting, default is to bold
-  hilight = "%_$*%_";
-
-  # any kind of error message, default is bright red
-  error = "%R$*%N";
-
-  # channel name is printed
-  channel = "$*";
-
-  # nick is printed
-  nick = "%_$*%_";
-
-  # nick host is printed
-  nickhost = "(%C$*%N)";
-
-  # server name is printed
-  server = "%_$*%_";
-
-  # some kind of comment is printed
-  comment = "($*)";
-
-  # reason for something is printed (part, quit, kick, ..)
-  reason = "($*)";
-
-  # mode change is printed ([+o nick])
-  mode = "($*)";
-
-  ##
-  ## channel specific messages
-  ##
-
-  # highlighted nick/host is printed (joins)
-  channick_hilight = "$*";
-  chanhost_hilight = "{nickhost $*}";
-
-  # nick/host is printed (parts, quits, etc.)
-  channick = "$*";
-  chanhost = "{nickhost $*}";
-
-  # highlighted channel name is printed
-  channelhilight = "$*";
-
-  # ban/ban exception/invite list mask is printed
-  ban = "$*";
-
-  ##
-  ## messages
-  ##
-
-  # the basic styling of how to print message, $0 = nick mode, $1 = nick
-  msgnick = "%B$0%N$1 %c»%N ";
-
-  # $0 = nick mode, $1 = nick
-  ownmsgnick = "{msgnick $0$1-}";
-  ownnick = "%g$*%N";
-
-  # public message in channel, $0 = nick mode, $1 = nick
-  pubmsgnick = "{msgnick $0$1-}";
-  pubnick = "%C$*%N";
-
-  # public message in channel meant for me, $0 = nick mode, $1 = nick
-  pubmsgmenick = "{msgnick $0%r$1-}%N";
-  menick = "%r$*";
-
-  # public highlighted message in channel
-  # $0 = highlight color, $1 = nick mode, $2 = nick
-  pubmsghinick = "{msgnick $1$2-}";
-
-  # channel name is printed with message
-  msgchannel = "$*";
-
-  # private message, $0 = nick, $1 = host
-  privmsg = "%r[$0$1-]%N ";
-
-  # private message from you, $0 = "msg", $1 = target nick
-  ownprivmsg = "[%K$0(%N$1-)] ";
-
-  # own private message in query
-  ownprivmsgnick = "{msgnick  $*}";
-  ownprivnick = "%g$*";
-
-  # private message in query
-  privmsgnick = "{msgnick %g$*%N}";
-
-  ##
-  ## Actions (/ME stuff)
-  ##
-
-  # used internally by this theme
-  action_core = " $*";
-
-  # generic one that's used by most actions
-  action = "{action_core $*} ";
-
-  # own action, both private/public
-  ownaction = "{action %C$*}";
-
-  # own action with target, both private/public
-  ownaction_target = "%P(#123){action_core $0}%g:%c$1%N ";
-
-  # private action sent by others
-  pvtaction = "%P(#126){action %p$*} ";
-  pvtaction_query = "{action %C$*}";
-
-  # public action sent by others
-  pubaction = "%C{action %p$*}";
-
-
-  ##
-  ## other IRC events
-  ##
-
-  # whois
-  whois = "%r$[-8]0%N  | %w$1-%N";
-
-  # notices
-  ownnotice = "$0%r:%N$1- ";
-  notice = "$* %B>%N ";
-  pubnotice_channel = "%r:%K$*%N";
-  pvtnotice_host = "%r:%K$*%N";
-  servernotice = "%C$*%N %B>%N %_";
-
-  # CTCPs
-  ownctcp = "[%w$0!%c$1-] ";
-  ctcp = "%C$*%N";
-
-  # wallops
-  wallop = "%W$*%N: ";
-  wallop_nick = "%N$*";
-  wallop_action = "%W * $*%N ";
-
-  # netsplits
-  netsplit = "%B$*%N";
-  netjoin = "%B$*%N";
-
-  # /names list
-  names_prefix = "%B>>>%N ";
-  names_nick = "%C$0$1-%N ";
-  names_nick_op = "%b$0%N%_$1-%_ ";
-  names_nick_halfop = "%B$0%N%_$1-%_ ";
-  names_nick_voice = "%B$0%N$1- ";
-  names_users = "[$*]";
-  names_channel = "%b$*%N";
-
-  # DCC
-  dcc = "$*";
-  dccfile = "%_$*%_";
-
-  # DCC chat, own msg/action
-  dccownmsg = "[%w$0!%r$1-%N] ";
-  dccownnick = "%w$*%N";
-  dccownquerynick = "%W$*%N";
-  dccownaction = "{action $*}";
-  dccownaction_target = "{action_core $0}%B:%c$1%N ";
-
-  # DCC chat, others
-  dccmsg = "[%w$1-!%g$0%N] ";
-  dccquerynick = "%B$*%N";
-  dccaction = "%W (*dcc*) $*%N %|";
-
-  ##
-  ## statusbar
-  ##
-
-  # default background for all statusbars. You can also give
-  # the default foreground color for statusbar items.
-  sb_background = "%0";
-
-  # default backround for "default" statusbar group
-  sb_default_bg = "%6";
-  # background for prompt / input line
-  sb_prompt_bg = "%N";
-  # background for info statusbar
-  sb_info_bg = "%0";
-  # background for topicbar (same default)
-  sb_topic_bg = "%7%k";
-  sb_awl_0_bg = "%6%W";
-
-  # text at the beginning of statusbars. sb-item already puts
-  # space there,so we don't use anything by default.
-  sbstart = "";
-  # text at the end of statusbars. Use space so that it's never
-  # used for anything.
-  sbend = " ";
-
-  topicsbstart = "{sbstart $*}";
-  topicsbend = "{sbend $*}";
-
-  #  prompt = "%w$S%B/%w$*%N%B:%W ";
-  prompt = "%W» %N";
-
-  sb = " %W$*%N";
-  sbmode = " %C[%W$*%C]%N";
-  sbaway = " %1 %WAFK %n";
-  sbservertag = ":$1";
-  sbnickmode = "%b$0%W";
-
-  # activity in statusbar
-
-  # ',' separator
-  sb_act_sep = "%w$*%N";
-  # normal text
-  sb_act_text = "%w$*%N";
-  # public message
-  sb_act_msg = "%w$*%N";
-  # hilight
-  sb_act_hilight = "%g$*%N";
-  # hilight with specified color, $0 = color, $1 = text
-  sb_act_hilight_color = "%r$1-%N";
-
-  #usercount
-  sb_usercount = "{sb %W[%w$0%N $1-}";
-  sb_uc_ircops = "%wi/%w$*%N";
-  sb_uc_ops = "%wo/%w$*%N";
-  sb_uc_halfops = "%wh/%w$*%N";
-  sb_uc_voices = "%wv/%w$*%N";
-  sb_uc_normal = "%wn/%w$*%W]%N";
-  sb_uc_space = " ";
-
-  #nact
-  nact_display = "%W(%w$3%N%W)%N$0%R>%W$1%R>%N$2%W(%w$4%W)%N";
-};

File .irssi/scripts/autorun/adv_windowlist.pl

-use strict; # use warnings;
-
-# {{{ debug
-
-#BEGIN {
-#	open STDERR, '>', '/home/ailin/wlstatwarnings';
-#};
-
-# FIXME COULD SOMEONE PLEASE TELL ME HOW TO SHUT UP
-#
-# ...
-# Variable "*" will not stay shared at (eval *) line *.
-# Variable "*" will not stay shared at (eval *) line *.
-# ...
-# Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at (eval *) line *.
-# ...
-#
-# THANKS
-
-# }}}
-
-# if you don't know how to operate folds, type zn
-
-# {{{ header
-
-use Irssi (); # which is the minimum required version of Irssi ?
-use Irssi::TextUI;
-
-use vars qw($VERSION %IRSSI);
-
-$VERSION = '0.6ca';
-%IRSSI = (
-	original_authors => q(BC-bd,        Veli,          Timo Sirainen, ).
-	                    q(Wouter Coekaerts,    Jean-Yves Lefort), # (decadix)
-	original_contact => q(bd@bc-bd.org, veli@piipiip.net, tss@iki.fi, ).
-	                    q(wouter@coekaerts.be, jylefort@brutele.be),
-	authors          => q(Nei),
-	contact          => q(Nei @ anti@conference.jabber.teamidiot.de),
-	url              =>  "http://anti.teamidiot.de/",
-	name             => q(awl),
-	description      => q(Adds a permanent advanced window list on the right or ).
-	                    q(in a statusbar.),
-	description2     => q(Based on chanact.pl which was apparently based on ).
-	                    q(lightbar.c and nicklist.pl with various other ideas ).
-	                    q(from random scripts.),
-	license          => q(GNU GPLv2 or later),
-);
-
-# }}}
-
-# {{{ *** D O C U M E N T A T I O N ***
-
-# adapted by Nei
-
-###############
-# {{{ original comment
-# ###########
-# # Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias).
-# # Lets you give alias characters to windows so that you can select those with
-# # meta-<char>.
-# #
-# # for irssi 0.8.2 by bd@bc-bd.org
-# #
-# # inspired by chanlist.pl by 'cumol@hammerhart.de'
-# #
-# #########
-# # {{{ Contributors
-# #########
-# #
-# # veli@piipiip.net   /window_alias code
-# # qrczak@knm.org.pl  chanact_abbreviate_names
-# # qerub@home.se      Extra chanact_show_mode and chanact_chop_status
-# # }}}
-# }}}
-# 
-# {{{ FURTHER THANKS TO
-# ############
-# # buu, fxn, Somni, Khisanth, integral, tybalt89   for much support in any aspect perl
-# # and the channel in general ( #perl @ freenode ) and especially the ir_* functions
-# #
-# # Valentin 'senneth' Batz ( vb@g-23.org ) for the pointer to grep.pl, continuous support
-# #                                         and help in digging up ir_strip_codes
-# #
-# # OnetrixNET technology networks for the debian environment
-# #
-# # Monkey-Pirate.com / Spaceman Spiff for the webspace
-# #
-# }}}
-
-######
-# {{{ M A I N    P R O B L E M
-#####
-#
-# It is impossible to place the awl on a statusbar together with other items,
-# because I do not know how to calculate the size that it is going to get
-# granted, and therefore I cannot do the linebreaks properly.
-# This is what is missing to make a nice script out of awl.
-# If you have any ideas, please contact me ASAP :).
-# }}}
-######
-
-######
-# {{{ UTF-8 PROBLEM
-#####
-#
-# Please help me find a solution to this:
-# this be your statusbar, it is using up the maximum term size
-# [[1=1]#abc [2=2]#defghi]
-# 
-# now consider this example:i
-# "ascii" characters are marked with ., utf-8 characters with *
-# [[1=1]#... [2=2]#...***]
-#
-# you should think that this is how it would be displayed? WRONG!
-# [[1=1]#... [2=2]#...***   ]
-#
-# this is what Irssi does.. I believe my length calculating code to be correct,
-# however, I'd love to be proven wrong (or receive any other fix, too, of
-# course!)
-# }}}
-######
-
-#########
-# {{{ USAGE
-###
-#
-# copy the script to ~/.irssi/scripts/
-#
-# In irssi:
-#
-#		/script load awl
-#
-#
-# Hint: to get rid of the old [Act:] display
-#     /statusbar window remove act
-#
-# to get it back:
-#     /statusbar window add -after lag -priority 10 act
-# }}}
-##########
-# {{{ OPTIONS
-########
-#
-# {{{ /set awl_display_nokey <string>
-#     /set awl_display_key <string>
-#     /set awl_display_nokey_active <string>
-#     /set awl_display_key_active <string>
-#     * string : Format String for one window. The following $'s are expanded:
-#         $C : Name
-#         $N : Number of the Window
-#         $Q : meta-Keymap
-#         $H : Start highlighting
-#         $S : Stop highlighting
-#             /+++++++++++++++++++++++++++++++++,
-#            | ****  I M P O R T A N T :  ****  |
-#            |                                  |
-#            | don't forget  to use  $S  if you |
-#            | used $H before!                  |
-#            |                                  |
-#            '+++++++++++++++++++++++++++++++++/
-#       XXX NOTE ON *_active: there is a BUG somewhere in the length
-#       XXX calculation. currently it's best to NOT remove $H/$S from those
-#       XXX settings if you use it in the non-active settings.
-# }}}
-# {{{ /set awl_separator <string>
-#     * string : Charater to use between the channel entries
-#     you'll need to escape " " space and "$" like this:
-#     "/set awl_separator \ "
-#     "/set awl_separator \$"
-#     and {}% like this:
-#     "/set awl_separator %{"
-#     "/set awl_separator %}"
-#     "/set awl_separator %%"
-#     (reason being, that the separator is used inside a {format })
-# }}}
-# {{{ /set awl_prefer_name <ON|OFF>
-#     * this setting decides whether awl will use the active_name (OFF) or the
-#       window name as the name/caption in awl_display_*.
-#       That way you can rename windows using /window name myownname.
-# }}}
-# {{{ /set awl_hide_data <num>
-#     * num : hide the window if its data_level is below num
-#     set it to 0 to basically disable this feature,
-#               1 if you don't want windows without activity to be shown
-#               2 to show only those windows with channel text or hilight
-#               3 to show only windows with hilight
-# }}}
-# {{{ /set awl_maxlines <num>
-#     * num : number of lines to use for the window list (0 to disable, negative
-#       lock)
-# }}}
-# {{{ /set awl_columns <num>
-#     * num : number of columns to use in screen mode (0 for unlimited)
-# }}}
-# {{{ /set awl_block <num>
-#     * num : width of a column in screen mode (negative values = block display)
-#             /+++++++++++++++++++++++++++++++++,
-#            | ******  W A R N I N G !  ******  |
-#            |                                  |
-#            | If  your  block  display  looks  |
-#            | DISTORTED,  you need to add the  |
-#            | following  line to your  .theme  |
-#            | file under                       |
-#            |     abstracts = {             :  |
-#            |                                  |
-#            |       sb_act_none = "%n$*";      |
-#            |                                  |
-#            '+++++++++++++++++++++++++++++++++/
-#.02:08:26. < shi>  Irssi::current_theme()->get_format <.. can this be used?
-# }}}
-# {{{ /set awl_sbar_maxlength <ON|OFF>
-#     * if you enable the maxlength setting, the block width will be used as a
-#       maximum length for the non-block statusbar mode too.
-# }}}
-# {{{ /set awl_height_adjust <num>
-#     * num : how many lines to leave empty in screen mode
-# }}}
-# {{{ /set awl_sort <-data_level|-last_line|refnum>
-#     * you can change the window sort order with this variable
-#         -data_level : sort windows with hilight first
-#         -last_line  : sort windows in order of activity
-#         refnum      : sort windows by window number
-# }}}
-# {{{ /set awl_placement <top|bottom>
-#     /set awl_position <num>
-#     * these settings correspond to /statusbar because awl will create
-#       statusbars for you
-#     (see /help statusbar to learn more)
-# }}}
-# {{{ /set awl_all_disable <ON|OFF>
-#     * if you set awl_all_disable to ON, awl will also remove the
-#       last statusbar it created if it is empty.
-#       As you might guess, this only makes sense with awl_hide_data > 0 ;)
-# }}}
-# {{{ /set awl_automode <sbar|screen|emulate_lightbar>
-#     * this setting defines whether the window list is shown in statusbars or
-#       whether the screen hack is used (from nicklist.pl)
-# }}}
-# }}}
-##########
-# {{{ COMMANDS
-########
-# {{{ /awl paste <ON|OFF|TOGGLE>
-#     * enables or disables the screen hack windowlist. This is useful when you
-#       want to mark & copy text that you want to paste somewhere (hence the
-#       name). (ON means AWL disabled!)
-#       This is nicely bound to a function key for example.
-# }}}
-# {{{ /awl redraw
-#     * redraws the screen hack windowlist. There are many occasions where the
-#       screen hack windowlist can get destroyed so you can use this command to
-#       fix it.
-# }}}
-# }}}
-###
-# {{{ WISHES
-####
-#
-# if you fiddle with my mess, provide me with your fixes so I can benefit as well
-#
-# Nei =^.^= ( anti@conference.jabber.teamidiot.de )
-# }}}
-
-# }}}
-
-# {{{ modules
-
-#use Class::Classless;
-#use Term::Info;
-
-# }}}
-
-# {{{ global variables
-
-my $replaces = '[=]'; # AARGH!!! (chars that are always surrounded by weird
-                      # colour codes by Irssi)
-
-my $actString = [];   # statusbar texts
-my $currentLines = 0;
-my $resetNeeded;      # layout/screen has changed, redo everything
-my $needRemake;       # "normal" changes
-#my $callcount = 0;
-sub GLOB_QUEUE_TIMER () { 100 }
-my $globTime = undef; # timer to limit remake() calls
-
-
-my $SCREEN_MODE;
-my $DISABLE_SCREEN_TEMP;
-my $currentColumns = 0;
-my $screenResizing;
-my ($screenHeight, $screenWidth);
-my $screenansi = bless {
-	NAME => 'Screen::ANSI',
-	PARENTS => [],
-	METHODS => {
-		dcs   => sub { "\033P" },
-		st    => sub { "\033\\"},
-	}
-}, 'Class::Classless::X';
-#my $terminfo = new Term::Info 'xterm'; # xterm here, make this modular
-# {{{{{{{{{{{{{{{
-my $terminfo = bless { # xterm here, make this modular
-	NAME => 'Term::Info::xterm',
-	PARENTS => [],
-	METHODS => {
- # 	civis=\E[?25l,
-		civis => sub { "\033[?25l" },
- # 	sc=\E7,
-		sc    => sub { "\0337" },
- # 	cup=\E[%i%p1%d;%p2%dH,
-		cup   => sub { shift;shift; "\033[" . ($_[0] + 1) . ';' . ($_[1] + 1) . 'H' },
- # 	el=\E[K,
-		el    => sub { "\033[K" },
- # 	rc=\E8,
-		rc    => sub { "\0338" },
- # 	cnorm=\E[?25h,
-		cnorm => sub { "\033[?25h" },
- # 	setab=\E[4%p1%dm,
-		setab => sub { shift;shift; "\033[4" . $_[0] . 'm' },
- # 	setaf=\E[3%p1%dm,
-		setaf => sub { shift;shift; "\033[3" . $_[0] . 'm' },
- # 	bold=\E[1m,
-		bold  => sub { "\033[1m" },
- # 	blink=\E[5m,
-		blink => sub { "\033[5m" },
- # 	rev=\E[7m,
-		rev   => sub { "\033[7m" },
- # 	op=\E[39;49m,
-		op    => sub { "\033[39;49m" },
-	}
-}, 'Class::Classless::X';
-# }}}}}}}}}}}}}}}
-
-
-sub setc () {
-	$IRSSI{'name'}
-}
-sub set ($) {
-	setc . '_' . shift
-}
-
-# }}}
-
-
-# {{{ sbar mode
-
-my %statusbars;       # currently active statusbars
-
-# maybe I should just tie the array ?
-sub add_statusbar {
-	for (@_) {
-		# add subs
-		for my $l ($_) { {
-			no strict 'refs'; # :P
-			*{set$l} = sub { awl($l, @_) };
-		}; }
-		Irssi::command('statusbar ' . (set$_) . ' reset');
-		Irssi::command('statusbar ' . (set$_) . ' enable');
-		if (lc Irssi::settings_get_str(set 'placement') eq 'top') {
-			Irssi::command('statusbar ' . (set$_) . ' placement top');
-		}
-		if ((my $x = int Irssi::settings_get_int(set 'position')) != 0) {
-			Irssi::command('statusbar ' . (set$_) . ' position ' . $x);
-		}
-		Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment left barstart');
-		Irssi::command('statusbar ' . (set$_) . ' add ' . (set$_));
-		Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment right barend');
-		Irssi::command('statusbar ' . (set$_) . ' disable');
-		Irssi::statusbar_item_register(set$_, '$0', set$_);
-		$statusbars{$_} = {};
-	}
-}
-
-sub remove_statusbar {
-	for (@_) {
-		Irssi::command('statusbar ' . (set$_) . ' reset');
-		Irssi::statusbar_item_unregister(set$_); # XXX does this actually work ?
-		# DO NOT REMOVE the sub before you have unregistered it :))
-		for my $l ($_) { {
-			no strict 'refs';
-			undef &{set$l};
-		}; }
-		delete $statusbars{$_};
-	}
-}
-
-sub syncLines {
-	my $temp = $currentLines;
-	$currentLines = @$actString;
-	#Irssi::print("current lines: $temp new lines: $currentLines");
-	my $currMaxLines = Irssi::settings_get_int(set 'maxlines');
-	if ($currMaxLines > 0 and @$actString > $currMaxLines) {
-		$currentLines = $currMaxLines;
-	}
-	elsif ($currMaxLines < 0) {
-		$currentLines = abs($currMaxLines);
-	}
-	return if ($temp == $currentLines);
-	if ($currentLines > $temp) {
-		for ($temp .. ($currentLines - 1)) {
-			add_statusbar($_);
-			Irssi::command('statusbar ' . (set$_) . ' enable');
-		}
-	}
-	else {
-		for ($_ = ($temp - 1); $_ >= $currentLines; $_--) {
-			Irssi::command('statusbar ' . (set$_) . ' disable');
-			remove_statusbar($_);
-		}
-	}
-}
-
-# FIXME implement $get_size_only check, and user $item->{min|max-size} ??
-sub awl {
-	my ($line, $item, $get_size_only) = @_;
-
-	if ($needRemake) {
-		$needRemake = undef;
-		remake();
-	}
-
-	my $text = $actString->[$line];  # DO NOT set the actual $actString->[$line] to '' here or
-	$text = '' unless defined $text; # you'll screw up the statusbar counter ($currentLines)
-	$item->default_handler($get_size_only, $text, '', 1);
-}
-
-# remove old statusbars
-my %killBar;
-sub get_old_status {
-	my ($textDest, $cont, $cont_stripped) = @_;
-	if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
-			and !defined($textDest->{'server'})
-	) {
-		my $name = quotemeta(set '');
-		if ($cont_stripped =~ m/^$name(\d+)\s/) { $killBar{$1} = {}; }
-		Irssi::signal_stop();
-	}
-}
-sub killOldStatus {
-	%killBar = ();
-	Irssi::signal_add_first('print text' => 'get_old_status');
-	Irssi::command('statusbar');
-	Irssi::signal_remove('print text' => 'get_old_status');
-	remove_statusbar(keys %killBar);
-}
-#killOldStatus();
-
-# end sbar mode }}}
-
-
-# {{{ keymaps
-
-my %keymap;
-
-sub get_keymap {
-	my ($textDest, undef, $cont_stripped) = @_;
-	if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
-			and !defined($textDest->{'server'})
-	) {
-		if ($cont_stripped =~ m/((?:meta-)+)(.)\s+change_window (\d+)/) {
-			my ($level, $key, $window) = ($1, $2, $3);
-			my $numlevel = ($level =~ y/-//) - 1;
-			$keymap{$window} = ('-' x $numlevel) . "$key";
-		}
-		Irssi::signal_stop();
-	}
-}
-
-sub update_keymap {
-	%keymap = ();
-	Irssi::signal_remove('command bind' => 'watch_keymap');
-	Irssi::signal_add_first('print text' => 'get_keymap');
-	Irssi::command('bind'); # stolen from grep
-	Irssi::signal_remove('print text' => 'get_keymap');
-	Irssi::signal_add('command bind' => 'watch_keymap');
-	Irssi::timeout_add_once(100, 'eventChanged', undef);
-}
-
-# watch keymap changes
-sub watch_keymap {
-	Irssi::timeout_add_once(1000, 'update_keymap', undef);
-}
-
-update_keymap();
-
-# end keymaps }}}
-
-# {{{ format handling
-
-# a bad way do do expansions but who cares
-sub expand {
-	my ($string, %format) = @_;
-	my ($exp, $repl);
-	$string =~ s/\$$exp/$repl/g while (($exp, $repl) = each(%format));
-	return $string;
-}
-
-my %strip_table = (
-	# fe-common::core::formats.c:format_expand_styles
-	#      delete                format_backs  format_fores bold_fores   other stuff
-	(map { $_ => '' } (split //, '04261537' .  'kbgcrmyw' . 'KBGCRMYW' . 'U9_8:|FnN>#[')),
-	#      escape
-	(map { $_ => $_ } (split //, '{}%')),
-);
-sub ir_strip_codes { # strip %codes
-	my $o = shift;
-	$o =~ s/(%(.))/exists $strip_table{$2} ? $strip_table{$2} : $1/gex;
-	$o
-}
-
-sub ir_parse_special {
-	my $o; my $i = shift;
-	#if ($_[0]) { # for the future?!?
-	#	eval {
-	#		$o = $_[0]->parse_special($i);
-	#	};
-	#	unless ($@) {
-	#		return $o;
-	#	}
-	#}
-	my $win = shift || Irssi::active_win();
-	my $server = Irssi::active_server();
-	if (ref $win and ref $win->{'active'}) {
-		$o = $win->{'active'}->parse_special($i);
-	}
-	elsif (ref $win and ref $win->{'active_server'}) {
-		$o = $win->{'active_server'}->parse_special($i);
-	}
-	elsif (ref $server) {
-		$o =  $server->parse_special($i);
-	}
-	else {
-		$o = Irssi::parse_special($i);
-	}
-	$o
-}
-sub ir_parse_special_protected {
-	my $o; my $i = shift;
-	$i =~ s/
-		( \\. ) | # skip over escapes (maybe)
-		( \$[^% $\]+ ) # catch special variables
-	/
-		if ($1) { $1 }
-		elsif ($2) { my $i2 = $2; ir_fe(ir_parse_special($i2, @_)) }
-		else { $& }
-	/gex;
-	$i
-}
-
-
-sub sb_ctfe { # Irssi::current_theme->format_expand wrapper
-	Irssi::current_theme->format_expand(
-		shift,
-		(
-			Irssi::EXPAND_FLAG_IGNORE_REPLACES
-				|
-			($_[0]?0:Irssi::EXPAND_FLAG_IGNORE_EMPTY)
-		)
-	)
-}
-sub sb_expand { # expand {format }s (and apply parse_special for $vars)
-	ir_parse_special(
-		sb_ctfe(shift)
-	)
-}
-sub sb_strip {
-	ir_strip_codes(
-		sb_expand(shift)
-	); # does this get us the actual length of that s*ty bar :P ?
-}
-sub sb_length {
-	# unicode cludge, d*mn broken Irssi
-	# screw it, this will fail from broken joining anyway (and cause warnings)
-	my $term_type = 'term_type';
-	if (Irssi::version > 20040819) { # this is probably wrong, but I don't know
-		                              # when the setting name got changed
-		$term_type = 'term_charset';
-	}
-	#if (lc Irssi::settings_get_str($term_type) eq '8bit'
-	#		or Irssi::settings_get_str($term_type) =~ /^iso/i
-	#) {
-	#	length(sb_strip(shift))
-	#}
-	#else {
-	my $temp = sb_strip(shift);
-	# try to get the displayed width
-	my $length;
-	eval {
-		require Text::CharWidth;
-		$length = Text::CharWidth::mbswidth($temp);
-	};
-	unless ($@) {
-		return $length;
-	}
-	else {
-		if (lc Irssi::settings_get_str($term_type) eq 'utf-8') {
-			# try to switch on utf8
-			eval {
-				no warnings;
-				require Encode;
-				#$temp = Encode::decode_utf8($temp); # thanks for the hint, but I have my
-				#                                    # reasons for _utf8_on
-				Encode::_utf8_on($temp);
-			};
-		}
-		# there is nothing more I can do
-		length($temp)
-	}
-	#}
-}
-
-# !!! G*DD*MN Irssi is adding an additional layer of backslashitis per { } layer
-# !!! AND I still don't know what I need to escape.
-# !!! and NOONE else seems to know or care either.
-# !!! f*ck open source. I mean it.
-# XXX any Irssi::print debug statement leads to SEGFAULT - why ?
-
-# major parts of the idea by buu (#perl @ freenode)
-# thanks to fxn and Somni for debugging
-#	while ($_[0] =~ /(.)/g) {
-#		my $c = $1; # XXX sooo... goto kills $1
-#		if ($q eq '%') { goto ESC; }
-
-## <freenode:#perl:tybalt89> s/%(.)|(\{)|(\})|(\\|\$)/$1?$1:$2?($level++,$2):$3?($level>$min_level&&$level--,$3):'\\'x(2**$level-1).$4/ge;  # untested...
-sub ir_escape {
-	my $min_level = $_[1] || 0; my $level = $min_level;
-	my $o = shift;
-	$o =~ s/
-		(	%.	)	| # $1
-		(	\{	)	| # $2
-		(	\}	)	| # $3
-		(	\\	)	| # $4
-		(	\$(?=[^\\])	)	| # $5
-		(	\$	) # $6
-	/
-		if ($1) { $1 } # %. escape
-		elsif ($2) { $level++; $2 } # { nesting start
-		elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
-		elsif ($4) { '\\'x(2**$level) } # \ needs \\escaping
-		elsif ($5) { '\\'x(2**$level-1) . '$' . '\\'x(2**$level-1) } # and $ needs even more because of "parse_special"
-		else { '\\'x(2**$level-1) . '$' } # $ needs \$ escaping
-	/gex;
-	$o
-}
-#sub ir_escape {
-#	my $min_level = $_[1] || 0; my $level = $min_level;
-#	my $o = shift;
-#	$o =~ s/
-#		(	%.	)	| # $1
-#		(	\{	)	| # $2
-#		(	\}	)	| # $3
-#		(	\\	|	\$	)	# $4
-#	/
-#		if ($1) { $1 } # %. escape
-#		elsif ($2) { $level++; $2 } # { nesting start
-#		elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
-#		else { '\\'x(2**($level-1)-1) . $4 } # \ or $ needs \\escaping
-#	/gex;
-#	$o
-#}
-
-sub ir_fe { # try to fix format stuff
-	my $x = shift;
-	# XXX why do I have to use two/four % here instead of one/two ??
-	# answer: you screwed up in ir_escape
-	$x =~ s/([%{}])/%$1/g;
-	#$x =~ s/(\\|\$|[ ])/\\$1/g; # XXX HOW CAN I HANDLE THE SPACES CORRECTLY XXX
-	$x =~ s/(\\|\$)/\\$1/g;
-	#$x =~ s/(\$(?=.))|(\$)/$1?"\\\$\\":"\\\$"/ge; # I think this should be here
-	#                                              # (logic), but it doesn't work
-	#                                              # that way :P
-	#$x =~ s/\\/\\\\/g; # that's right, escape escapes
-	$x
-}
-sub ir_ve { # escapes special vars but leave colours alone
-	my $x = shift;
-	#$x =~ s/([%{}])/%$1/g;
-	$x =~ s/(\\|\$|[ ])/\\$1/g;
-	$x
-}
-
-my %ansi_table;
-{
-	my ($i, $j, $k) = (0, 0, 0);
-	%ansi_table = (
-		# fe-common::core::formats.c:format_expand_styles
-		#      do                                              format_backs
-		(map { $_ => $terminfo->setab($i++) } (split //, '01234567' )),
-		#      do                                              format_fores
-		(map { $_ => $terminfo->setaf($j++) } (split //, 'krgybmcw' )),
-		#      do                                              bold_fores
-		(map { $_ => $terminfo->bold() .
-		             $terminfo->setaf($k++) } (split //, 'KRGYBMCW')),
-		# reset
-		#(map { $_ => $terminfo->op() } (split //, 'nN')),
-		(map { $_ => $terminfo->op() } (split //, 'n')),
-		(map { $_ => "\033[0m" } (split //, 'N')), # XXX quick and DIRTY
-		# flash/bright
-		F => $terminfo->blink(),
-		# reverse
-		8 => $terminfo->rev(),
-		# bold
-		(map { $_ => $terminfo->bold() } (split //, '9_')),
-		#      delete                other stuff
-		(map { $_ => '' } (split //, ':|>#[')),
-		#      escape
-		(map { $_ => $_ } (split //, '{}%')),
-	)
-}
-sub formats_to_ansi_basic {
-	my $o = shift;
-	$o =~ s/(%(.))/exists $ansi_table{$2} ? $ansi_table{$2} : $1/gex;
-	$o
-}
-
-sub lc1459 ($) { my $x = shift; $x =~ y/A-Z][\^/a-z}{|~/; $x }
-Irssi::settings_add_str(setc, 'banned_channels', '');
-Irssi::settings_add_bool(setc, 'banned_channels_on', 0);
-my %banned_channels = map { lc1459($_) => undef }
-split ' ', Irssi::settings_get_str('banned_channels');
-Irssi::settings_add_str(setc, 'fancy_abbrev', 'fancy');
-
-# }}}
-
-# {{{ main
-
-sub remake () {
-	#$callcount++;
-	#my $xx = $callcount; Irssi::print("starting remake [ $xx ]");
-	my ($hilight, $number, $display);
-	my $separator = '{sb_act_sep ' . Irssi::settings_get_str(set 'separator') .
-		'}';
-	my $custSort = Irssi::settings_get_str(set 'sort');
-	my $custSortDir = 1;
-	if ($custSort =~ /^[-!](.*)/) {
-		$custSortDir = -1;
-		$custSort = $1;
-	}
-
-	my @wins = 
-		sort {
-			(
-				( (int($a->{$custSort}) <=> int($b->{$custSort})) * $custSortDir )
-					||
-				($a->{'refnum'} <=> $b->{'refnum'})
-			)
-		} Irssi::windows;
-	my $block = Irssi::settings_get_int(set 'block');
-	my $columns = $currentColumns;
-	my $oldActString = $actString if $SCREEN_MODE;
-	$actString = $SCREEN_MODE ? ['   A W L'] : [];
-	my $line = $SCREEN_MODE ? 1 : 0;
-	my $width = $SCREEN_MODE
-			?
-		$screenWidth - abs($block)*$columns + 1
-			:
-		([Irssi::windows]->[0]{'width'} - sb_length('{sb x}'));
-	my $height = $screenHeight - abs(Irssi::settings_get_int(set
-			'height_adjust'));
-	my ($numPad, $keyPad) = (0, 0);
-	my %abbrevList;
-	if ($SCREEN_MODE or Irssi::settings_get_bool(set 'sbar_maxlength')
-			or ($block < 0)
-	) {
-		%abbrevList = ();
-		if (Irssi::settings_get_str('fancy_abbrev') !~ /^(no|off|head)/i) {
-			my @nameList = map { ref $_ ? $_->get_active_name : '' } @wins;
-			for (my $i = 0; $i < @nameList - 1; ++$i) {
-				my ($x, $y) = ($nameList[$i], $nameList[$i + 1]);
-				for ($x, $y) { s/^[+#!=]// }
-				my $res = Algorithm::LCSS::LCSS($x, $y);
-				if (defined $res) {
-					#Irssi::print("common pattern $x $y : $res");
-					#Irssi::print("found at $nameList[$i] ".index($nameList[$i],
-					#		$res));
-					$abbrevList{$nameList[$i]} = int (index($nameList[$i], $res) +
-						(length($res) / 2));
-					#Irssi::print("found at ".$nameList[$i+1]." ".index($nameList[$i+1],
-					#		$res));
-					$abbrevList{$nameList[$i+1]} = int (index($nameList[$i+1], $res) +
-						(length($res) / 2));
-				}
-			}
-		}
-		if ($SCREEN_MODE or ($block < 0)) {
-			$numPad = length((sort { length($b) <=> length($a) } keys %keymap)[0]);
-			$keyPad = length((sort { length($b) <=> length($a) } values %keymap)[0]);
-		}
-	}
-	if ($SCREEN_MODE) {
-		print STDERR $screenansi->dcs().
-		             $terminfo->civis().
-						 $terminfo->sc().
-						 $screenansi->st();
-		if (@$oldActString < 1) {
-			print STDERR $screenansi->dcs().
-							 $terminfo->cup(0, $width).
-			             $actString->[0].
-							 $terminfo->el().
-			             $screenansi->st();
-		}
-	}
-	foreach my $win (@wins) {
-		unless ($SCREEN_MODE) {
-			$actString->[$line] = '' unless defined $actString->[$line]
-					or Irssi::settings_get_bool(set 'all_disable');
-		}
-
-		# all stolen from chanact, what does this code do and why do we need it ?
-		!ref($win) && next;
-
-		my $name = $win->get_active_name;
-		$name = '*' if (Irssi::settings_get_bool('banned_channels_on') and exists
-			$banned_channels{lc1459($name)});
-		$name = $win->{'name'} if $name ne '*' and $win->{'name'} ne ''
-			and Irssi::settings_get_bool(set 'prefer_name');
-		my $active = $win->{'active'};
-		my $colour = $win->{'hilight_color'};
-		if (!defined $colour) { $colour = ''; }
-
-		if ($win->{'data_level'} < Irssi::settings_get_int(set 'hide_data')) {
-			next; } # for Geert
-		if    ($win->{'data_level'} == 0) { $hilight = '{sb_act_none '; }
-		elsif ($win->{'data_level'} == 1) { $hilight = '{sb_act_text '; }
-		elsif ($win->{'data_level'} == 2) { $hilight = '{sb_act_msg '; }
-		elsif ($colour             ne '') { $hilight = "{sb_act_hilight_color $colour "; }
-		elsif ($win->{'data_level'} == 3) { $hilight = '{sb_act_hilight '; }
-		else                              { $hilight = '{sb_act_special '; }
-
-		$number = $win->{'refnum'};
-		my @display = ('display_nokey');
-		if (defined $keymap{$number} and $keymap{$number} ne '') {
-			unshift @display, map { (my $cpy = $_) =~ s/_no/_/; $cpy } @display;
-		}
-		if (Irssi::active_win->{'refnum'} == $number) {
-			unshift @display, map { my $cpy = $_; $cpy .= '_active'; $cpy } @display;
-		}
-		#Irssi::print("win $number [@display]: " . join '.', split //, join '<<', map {
-			#		Irssi::settings_get_str(set $_) } @display);
-		$display = (grep { $_ }
-			map { Irssi::settings_get_str(set $_) }
-			@display)[0];
-			#Irssi::print("win $number : " . join '.', split //, $display);
-
-		if ($SCREEN_MODE or Irssi::settings_get_bool(set 'sbar_maxlength')
-				or ($block < 0)
-		) {
-			my $baseLength = sb_length(ir_escape(ir_ve(ir_parse_special_protected(sb_ctfe(
-				'{sb_background}' . expand($display,
-				C => ir_fe('x'),
-				N => $number . (' 'x($numPad - length($number))),
-				Q => ir_fe((' 'x($keyPad - length($keymap{$number}))) . $keymap{$number}),
-				H => $hilight,
-				S => '}{sb_background}'
-			), 1), $win)))) - 1;
-			my $diff = abs($block) - (length($name) + $baseLength);
-			if ($diff < 0) { # too long
-				if (abs($diff) >= length($name)) { $name = '' } # forget it
-				elsif (abs($diff) + 1 >= length($name)) { $name = substr($name,
-						0, 1); }
-				else {
-					my $middle = exists $abbrevList{$name} ?
-					(($abbrevList{$name} + (2*(length($name) / 2)))/3) :
-						((Irssi::settings_get_str('fancy_abbrev') =~ /^head/i) ?
-								length($name) :
-						(length($name) / 2));
-					my $cut = int($middle - (abs($diff) / 2) + .55); 
-					$cut = 1 if $cut < 1;
-					$cut = length($name) - abs($diff) - 1 if $cut > (length($name) -
-						abs($diff) - 1);
-					$name = substr($name, 0, $cut) . '~' . substr($name, $cut +
-						abs($diff) + 1);
-				}
-			}
-			elsif ($SCREEN_MODE or ($block < 0)) {
-				$name .= (' ' x $diff);
-			}
-		}
-
-		my $add = ir_ve(ir_parse_special_protected(sb_ctfe('{sb_background}' . expand($display,
-			C => ir_fe($name),
-			N => $number . (' 'x($numPad - length($number))),
-			Q => ir_fe((' 'x($keyPad - length($keymap{$number}))) . $keymap{$number}),
-			H => $hilight,
-			S => '}{sb_background}'
-		), 1), $win));
-		if ($SCREEN_MODE) {
-			$actString->[$line] = $add;
-			if ((!defined $oldActString->[$line]
-					or $oldActString->[$line] ne $actString->[$line])
-					and
-				$line <= ($columns * $height)
-			) {
-				print STDERR $screenansi->dcs().
-								 $terminfo->cup(($line-1) % $height+1, $width + (
-									 abs($block) * int(($line-1) / $height))).
-				formats_to_ansi_basic(sb_expand(ir_escape($actString->[$line]))).
-								#$terminfo->el().
-								 $screenansi->st();
-			}
-			$line++;
-		}
-		else {
-			#$temp =~ s/\{\S+?(?:\s(.*?))?\}/$1/g;
-			#$temp =~ s/\\\\\\\\/\\/g; # XXX I'm actually guessing here, someone point me
-			#                          # XXX to docs please
-			$actString->[$line] = '' unless defined $actString->[$line];
-
-			# XXX how can I check whether the content still fits in the bar? this would
-			# XXX allow awlstatus to reside on a statusbar together with other items...
-			if (sb_length(ir_escape($actString->[$line] . $add)) >= $width) {
-				# XXX doesn't correctly handle utf-8 multibyte ... help !!?
-				$actString->[$line] .= ' ' x ($width - sb_length(ir_escape(
-					$actString->[$line])));
-				$line++;
-			}
-			$actString->[$line] .= $add . $separator;
-			# XXX if I use these prints, output layout gets screwed up... why ?
-			#Irssi::print("line $line: ".$actString->[$line]);
-			#Irssi::print("temp $line: ".$temp);
-		}
-	}
-
-	if ($SCREEN_MODE) {
-		while ($line <= ($columns * $height)) {
-			print STDERR $screenansi->dcs().
-							 $terminfo->cup(($line-1) % $height+1, $width + (
-								 abs($block) * int(($line-1) / $height))).
-							 $terminfo->el().
-							 $screenansi->st();
-			$line++;
-		}
-		print STDERR $screenansi->dcs().
-						 $terminfo->rc().
-		             $terminfo->cnorm().
-						 $screenansi->st();
-	}
-	else {
-		# XXX the Irssi::print statements lead to the MOST WEIRD results
-		# e.g.: the loop gets executed TWICE for p > 0 ?!?
-		for (my $p = 0; $p < @$actString; $p++) { # wrap each line in {sb }, escape it
-			my $x = $actString->[$p];              # properly, etc.
-			$x =~ s/\Q$separator\E([ ]*)$/$1/;
-			#Irssi::print("[$p]".'current:'.join'.',split//,sb_strip(ir_escape($x,0)));
-			#Irssi::print("assumed length before:".sb_length(ir_escape($x,0)));
-			$x = "{sb $x}";
-			#Irssi::print("[$p]".'new:'.join'.',split//,sb_expand(ir_escape($x,0)));
-			#Irssi::print("[$p]".'new:'.join'.',split//,ir_escape($x,0));
-			#Irssi::print("assumed length after:".sb_length(ir_escape($x,0)));
-			$x = ir_escape($x);
-			#Irssi::print("[$p]".'REALnew:'.join'.',split//,sb_strip($x));
-			$actString->[$p] = $x;
-			# XXX any Irssi::print debug statement leads to SEGFAULT (sometimes) - why ?
-		}
-	}
-	#Irssi::print("remake [ $xx ] finished");
-}
-
-sub awlHasChanged () {
-	$globTime = undef;
-	my $temp = ($SCREEN_MODE ?
-		"\\\n" . Irssi::settings_get_int(set 'block').
-		Irssi::settings_get_int(set 'height_adjust')
-		: "!\n" . Irssi::settings_get_str(set 'placement').
-		Irssi::settings_get_int(set 'position')).
-		Irssi::settings_get_str(set 'automode');
-	if ($temp ne $resetNeeded) { wlreset(); return; }
-	#Irssi::print("awl has changed, calls to remake so far: $callcount");
-	$needRemake = 1;
-
-	#remake();
-	if (
-		($SCREEN_MODE and !$DISABLE_SCREEN_TEMP)
-			or
-		($needRemake and Irssi::settings_get_bool(set 'all_disable'))
-			or
-		(!Irssi::settings_get_bool(set 'all_disable') and $currentLines < 1)
-	) {
-		$needRemake = undef;
-		remake();
-	}
-
-	unless ($SCREEN_MODE) {
-		# XXX Irssi crashes if I try to do this without timer, why ? What's the minimum
-		# XXX delay I need to use in the timer ?
-		Irssi::timeout_add_once(100, 'syncLines', undef);
-
-		for (keys %statusbars) {
-			Irssi::statusbar_items_redraw(set$_);
-		}
-	}
-	else {
-		Irssi::timeout_add_once(100, 'syncColumns', undef);
-	}
-}
-
-sub eventChanged () { # Implement a change queue/blocker -.-)
-	if (defined $globTime) {
-		Irssi::timeout_remove($globTime);
-	} # delay the update further
-	$globTime = Irssi::timeout_add_once(GLOB_QUEUE_TIMER, 'awlHasChanged', undef);
-}
-
-# }}}
-
-
-# {{{ screen mode
-
-sub screenFullRedraw {
-	my ($window) = @_;
-	if (!ref $window or $window->{'refnum'} == Irssi::active_win->{'refnum'}) {
-		$actString = [];
-		eventChanged();
-	}
-}
-
-sub screenSize { # from nicklist.pl
-	$screenResizing = 1;
-	# fit screen
-	system 'screen -x '.$ENV{'STY'}.' -X fit';
-	# get size
-	my ($row, $col) = split ' ', `stty size`;
-	# set screen width
-	$screenWidth = $col-1;
-	$screenHeight = $row-1;
-	
-	# on some recent systems, "screen -X fit; screen -X width -w 50" doesn't work, needs a sleep in between the 2 commands
-	# so we wait a second before setting the width
-	Irssi::timeout_add_once(100, sub {
-		my ($new_irssi_width) = @_;
-		$new_irssi_width -= abs(Irssi::settings_get_int(set
-				'block'))*$currentColumns - 1;
-		system 'screen -x '.$ENV{'STY'}.' -X width -w ' . $new_irssi_width;
-		# and then we wait another second for the resizing, and then redraw.
-		Irssi::timeout_add_once(10,sub {$screenResizing = 0; screenFullRedraw()}, []);
-	}, $screenWidth);
-}
-
-sub screenOff {
-	my ($unloadMode) = @_;
-	Irssi::signal_remove('gui print text finished' => 'screenFullRedraw');
-	Irssi::signal_remove('gui page scrolled' => 'screenFullRedraw');
-	Irssi::signal_remove('window changed' => 'screenFullRedraw');
-	Irssi::signal_remove('window changed automatic' => 'screenFullRedraw');
-	if ($unloadMode) {
-		Irssi::signal_remove('terminal resized' => 'resizeTerm');
-	}
-	system 'screen -x '.$ENV{'STY'}.' -X fit';
-}
-
-sub syncColumns {
-	return if (@$actString == 0);
-	my $temp = $currentColumns;
-	#Irssi::print("current columns $temp");
-	my $height = $screenHeight - abs(Irssi::settings_get_int(set
-			'height_adjust'));
-	$currentColumns = int(($#$actString-1) / $height) + 1;
-	#Irssi::print("objects in actstring:".scalar(@$actString).", screen height:".
-	#	$height);
-	my $currMaxColumns = Irssi::settings_get_int(set 'columns');
-	if ($currMaxColumns > 0 and $currentColumns > $currMaxColumns) {
-		$currentColumns = $currMaxColumns;
-	}
-	elsif ($currMaxColumns < 0) {
-		$currentColumns = abs($currMaxColumns);
-	}
-	return if ($temp == $currentColumns);
-	screenSize();
-}
-
-#$needRemake = 1;
-sub resizeTerm () {
-	if ($SCREEN_MODE and !$screenResizing) {
-		$screenResizing = 1;
-		Irssi::timeout_add_once(10, 'screenSize', undef);
-	}
-	Irssi::timeout_add_once(100, 'eventChanged', undef);
-}
-
-# }}}
-
-
-# {{{ settings add
-
-Irssi::settings_add_str(setc, set 'display_nokey', '[$N]$H$C$S');
-Irssi::settings_add_str(setc, set 'display_key', '[$Q=$N]$H$C$S');
-Irssi::settings_add_str(setc, set 'display_nokey_active', '');
-Irssi::settings_add_str(setc, set 'display_key_active', '');
-Irssi::settings_add_str(setc, set 'separator', "\\ ");
-Irssi::settings_add_bool(setc, set 'prefer_name', 0);
-Irssi::settings_add_int(setc, set 'hide_data', 0);
-Irssi::settings_add_int(setc, set 'maxlines', 9);
-Irssi::settings_add_int(setc, set 'columns', 1);
-Irssi::settings_add_int(setc, set 'block', 20);
-Irssi::settings_add_bool(setc, set 'sbar_maxlength', 0);
-Irssi::settings_add_int(setc, set 'height_adjust', 2);
-Irssi::settings_add_str(setc, set 'sort', 'refnum');
-Irssi::settings_add_str(setc, set 'placement', 'bottom');
-Irssi::settings_add_int(setc, set 'position', 0);
-Irssi::settings_add_bool(setc, set 'all_disable', 0);
-Irssi::settings_add_str(setc, set 'automode', 'sbar');
-
-# }}}
-
-
-# {{{ init
-
-sub wlreset {
-	$actString = [];
-	$currentLines = 0; # 1; # mhmmmm .. we actually enable one line down there so
-	                        # let's try this.
-	#update_keymap();
-	killOldStatus();
-	# Register statusbar
-	#add_statusbar(0);
-	#Irssi::command('statusbar wl0 enable');
-	my $was_screen_mode = $SCREEN_MODE;
-	if ($SCREEN_MODE = (Irssi::settings_get_str(set 'automode') =~ /screen/i)
-			and
-		!$was_screen_mode
-	) {
-		if (!defined $ENV{'STY'}) {
-			Irssi::print('Screen mode can only be used in GNU screen but no '.
-				'screen was found.', MSGLEVEL_CLIENTERROR);
-			$SCREEN_MODE = undef;
-		}
-		else {
-			Irssi::signal_add_last('gui print text finished' => 'screenFullRedraw');
-			Irssi::signal_add_last('gui page scrolled' => 'screenFullRedraw');
-			Irssi::signal_add('window changed' => 'screenFullRedraw');
-			Irssi::signal_add('window changed automatic' => 'screenFullRedraw');
-		}
-	}
-	elsif ($was_screen_mode and !$SCREEN_MODE) {
-		screenOff();
-	}
-	$resetNeeded = ($SCREEN_MODE ?
-		"\\\n" . Irssi::settings_get_int(set 'block').
-		Irssi::settings_get_int(set 'height_adjust')
-		: "!\n" . Irssi::settings_get_str(set 'placement').
-		Irssi::settings_get_int(set 'position')).
-		Irssi::settings_get_str(set 'automode');
-	resizeTerm();
-}
-
-wlreset();
-
-# }}}
-
-
-# {{{ unload/deinit
-
-my $Unload;
-sub unload ($$$) {
-	$Unload = 1;
-	# pretend we didn't do anything ASAP
-	Irssi::timeout_add_once(10, sub { $Unload = undef; }, undef);
-}
-# last try to catch a sigsegv
-Irssi::signal_add_first('gui exit' => sub { $Unload = undef; });
-sub UNLOAD {
-	# this might well crash Irssi... try /eval /script unload someotherscript ;
-	# /quit (= SEGFAULT !)
-	if ($Unload) {
-		$actString = ['']; # syncLines(); # XXX Irssi crashes when trying to disable
-		killOldStatus();                  # XXX all statusbars ?
-		if ($SCREEN_MODE) {
-			screenOff('unload mode');
-		}
-	}
-}
-
-# }}}
-
-
-# {{{ signals
-
-sub addPrintTextHook { # update on print text
-	return if $_[0]->{'level'} == 262144 and $_[0]->{'target'} eq ''
-			and !defined($_[0]->{'server'});
-	if (Irssi::settings_get_str(set 'sort') =~ /^[-!]?last_line$/) {
-		Irssi::timeout_add_once(100, 'eventChanged', undef);
-	}
-}
-
-#sub _x { my ($x, $y) = @_; ($x, sub { Irssi::print('-->signal '.$x); eval "$y();"; }) }
-#sub _x { @_ }
-Irssi::signal_add_first(
-	'command script unload' => 'unload'
-);
-Irssi::signal_add_last({
-	'setup changed' => 'eventChanged',
-	'print text' => 'addPrintTextHook',
-	'terminal resized' => 'resizeTerm',
-	'setup reread' => 'wlreset',
-	'window hilight' => 'eventChanged',
-});
-Irssi::signal_add({
-	'window created' => 'eventChanged',
-	'window destroyed' => 'eventChanged',
-	'window name changed' => 'eventChanged',
-	'window refnum changed' => 'eventChanged',
-	'window changed' => 'eventChanged',
-	'window changed automatic' => 'eventChanged',
-});
-
-#Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # relicts
-
-# }}}
-
-# {{{ commands
-
-
-sub runsub {
-	my ($cmd) = @_;
-	sub {
-		my ($data, $server, $item) = @_;
-		Irssi::command_runsub($cmd, $data, $server, $item);
-	};
-}
-Irssi::command_bind( setc() => runsub(setc()) );
-Irssi::command_bind( setc() . ' paste' => runsub(setc() . ' paste') );
-Irssi::command_bind(
-	setc() . ' paste on' => sub {
-		return unless $SCREEN_MODE;
-		my $was_disabled = $DISABLE_SCREEN_TEMP;
-		$DISABLE_SCREEN_TEMP = 1;
-		Irssi::print('Paste mode is now ON, '.uc(setc()).' is temporarily '.
-		             'disabled.');
-		if (!$was_disabled) {
-			$screenResizing = 1;
-			screenOff();
-		}
-	}
-);
-Irssi::command_bind(
-	setc() . ' paste off' => sub {
-		return unless $SCREEN_MODE;
-		my $was_disabled = $DISABLE_SCREEN_TEMP;
-		$DISABLE_SCREEN_TEMP = undef;
-		Irssi::print('Paste mode is now OFF, '.uc(setc()).' is enabled.');
-		if ($was_disabled) {
-			$SCREEN_MODE = undef;
-			$screenResizing = 0;
-			wlreset();
-		}
-	}
-);
-Irssi::command_bind(
-	setc() . ' paste toggle' => sub {
-		if ($DISABLE_SCREEN_TEMP) {
-			Irssi::command(setc() . ' paste off');
-		}
-		else {
-			Irssi::command(setc() . ' paste on');
-		}
-	}
-);
-Irssi::command_bind(
-	setc() . ' redraw' => sub {
-		return unless $SCREEN_MODE;
-		screenFullRedraw();
-	}
-);
-		
-
-# }}}
-
-# {{{ Algorithm::LCSS module
-{
-	package Algorithm::Diff;
-	# Skip to first "=head" line for documentation.
-	use strict;
-
-	use integer;    # see below in _replaceNextLargerWith() for mod to make
-						 # if you don't use this
-
-	# McIlroy-Hunt diff algorithm
-	# Adapted from the Smalltalk code of Mario I. Wolczko, <mario@wolczko.com>
-	# by Ned Konz, perl@bike-nomad.com
-	# Updates by Tye McQueen, http://perlmonks.org/?node=tye
-
-	# Create a hash that maps each element of $aCollection to the set of
-	# positions it occupies in $aCollection, restricted to the elements
-	# within the range of indexes specified by $start and $end.
-	# The fourth parameter is a subroutine reference that will be called to
-	# generate a string to use as a key.
-	# Additional parameters, if any, will be passed to this subroutine.
-	#
-	# my $hashRef = _withPositionsOfInInterval( \@array, $start, $end, $keyGen );
-
-	sub _withPositionsOfInInterval
-	{
-		 my $aCollection = shift;    # array ref
-		 my $start       = shift;
-		 my $end         = shift;
-		 my $keyGen      = shift;
-		 my %d;
-		 my $index;
-		 for ( $index = $start ; $index <= $end ; $index++ )
-		 {
-			  my $element = $aCollection->[$index];
-			  my $key = &$keyGen( $element, @_ );
-			  if ( exists( $d{$key} ) )
-			  {
-					unshift ( @{ $d{$key} }, $index );
-			  }
-			  else
-			  {
-					$d{$key} = [$index];
-			  }
-		 }
-		 return wantarray ? %d : \%d;
-	}
-
-	# Find the place at which aValue would normally be inserted into the
-	# array. If that place is already occupied by aValue, do nothing, and
-	# return undef. If the place does not exist (i.e., it is off the end of
-	# the array), add it to the end, otherwise replace the element at that
-	# point with aValue.  It is assumed that the array's values are numeric.
-	# This is where the bulk (75%) of the time is spent in this module, so
-	# try to make it fast!
-
-	sub _replaceNextLargerWith
-	{
-		 my ( $array, $aValue, $high ) = @_;
-		 $high ||= $#$array;
-
-		 # off the end?
-		 if ( $high == -1 || $aValue > $array->[-1] )
-		 {
-			  push ( @$array, $aValue );
-			  return $high + 1;
-		 }
-
-		 # binary search for insertion point...
-		 my $low = 0;
-		 my $index;
-		 my $found;
-		 while ( $low <= $high )
-		 {
-			  $index = ( $high + $low ) / 2;
-
-			  # $index = int(( $high + $low ) / 2);  # without 'use integer'
-			  $found = $array->[$index];
-
-			  if ( $aValue == $found )
-			  {
-					return undef;
-			  }
-			  elsif ( $aValue > $found )
-			  {
-					$low = $index + 1;
-			  }
-			  else
-			  {
-					$high = $index - 1;
-			  }
-		 }
-
-		 # now insertion point is in $low.
-		 $array->[$low] = $aValue;    # overwrite next larger
-		 return $low;
-	}
-
-	# This method computes the longest common subsequence in $a and $b.
-
-	# Result is array or ref, whose contents is such that
-	#   $a->[ $i ] == $b->[ $result[ $i ] ]
-	# foreach $i in ( 0 .. $#result ) if $result[ $i ] is defined.
-
-	# An additional argument may be passed; this is a hash or key generating
-	# function that should return a string that uniquely identifies the given
-	# element.  It should be the case that if the key is the same, the elements
-	# will compare the same. If this parameter is undef or missing, the key
-	# will be the element as a string.
-
-	# By default, comparisons will use "eq" and elements will be turned into keys
-	# using the default stringizing operator '""'.
-
-	# Additional parameters, if any, will be passed to the key generation
-	# routine.
-
-	sub _longestCommonSubsequence
-	{
-		 my $a        = shift;    # array ref or hash ref
-		 my $b        = shift;    # array ref or hash ref
-		 my $counting = shift;    # scalar
-		 my $keyGen   = shift;    # code ref
-		 my $compare;             # code ref
-
-		 if ( ref($a) eq 'HASH' )
-		 {                        # prepared hash must be in $b
-			  my $tmp = $b;
-			  $b = $a;
-			  $a = $tmp;
-		 }
-
-		 # Check for bogus (non-ref) argument values
-		 if ( !ref($a) || !ref($b) )
-		 {
-			  my @callerInfo = caller(1);
-			  die 'error: must pass array or hash references to ' . $callerInfo[3];
-		 }
-
-		 # set up code refs
-		 # Note that these are optimized.
-		 if ( !defined($keyGen) )    # optimize for strings
-		 {
-			  $keyGen = sub { $_[0] };
-			  $compare = sub { my ( $a, $b ) = @_; $a eq $b };
-		 }
-		 else
-		 {
-			  $compare = sub {
-					my $a = shift;
-					my $b = shift;
-					&$keyGen( $a, @_ ) eq &$keyGen( $b, @_ );
-			  };
-		 }
-
-		 my ( $aStart, $aFinish, $matchVector ) = ( 0, $#$a, [] );
-		 my ( $prunedCount, $bMatches ) = ( 0, {} );
-
-		 if ( ref($b) eq 'HASH' )    # was $bMatches prepared for us?
-		 {
-			  $bMatches = $b;
-		 }
-		 else
-		 {
-			  my ( $bStart, $bFinish ) = ( 0, $#$b );
-
-			  # First we prune off any common elements at the beginning
-			  while ( $aStart <= $aFinish
-					and $bStart <= $bFinish
-					and &$compare( $a->[$aStart], $b->[$bStart], @_ ) )
-			  {
-					$matchVector->[ $aStart++ ] = $bStart++;
-					$prunedCount++;
-			  }
-
-			  # now the end
-			  while ( $aStart <= $aFinish
-					and $bStart <= $bFinish
-					and &$compare( $a->[$aFinish], $b->[$bFinish], @_ ) )
-			  {
-					$matchVector->[ $aFinish-- ] = $bFinish--;
-					$prunedCount++;
-			  }
-
-			  # Now compute the equivalence classes of positions of elements
-			  $bMatches =
-				 _withPositionsOfInInterval( $b, $bStart, $bFinish, $keyGen, @_ );
-		 }
-		 my $thresh = [];
-		 my $links  = [];
-
-		 my ( $i, $ai, $j, $k );
-		 for ( $i = $aStart ; $i <= $aFinish ; $i++ )
-		 {
-			  $ai = &$keyGen( $a->[$i], @_ );
-			  if ( exists( $bMatches->{$ai} ) )
-			  {
-					$k = 0;
-					for $j ( @{ $bMatches->{$ai} } )
-					{
-
-						 # optimization: most of the time this will be true
-						 if ( $k and $thresh->[$k] > $j and $thresh->[ $k - 1 ] < $j )
-						 {
-							  $thresh->[$k] = $j;
-						 }
-						 else