commit a47341bf2461699b53df1f67d31bde9a63534a36
parent a53e9a5e720410da00030ad4bb6afe4fd716a2bf
Author: hhvn <dev@hhvn.uk>
Date: Sun, 31 Oct 2021 23:10:32 +0000
.c/irssi/: remove
I will probably be using my own IRC client soon.
This config is a *mess* so I'm just removing it.
Diffstat:
36 files changed, 0 insertions(+), 28579 deletions(-)
diff --git a/.config/irssi/config b/.config/irssi/config
@@ -1,895 +0,0 @@
-servers = (
- { address = "irc.rizon.net"; chatnet = "rizon"; port = "6667"; },
- {
- address = "irc.freenode.net";
- chatnet = "freenode";
- port = "6667";
- },
- {
- address = "irc.nebulacentre.net";
- chatnet = "nebulacentre";
- port = "6667";
- },
- {
- address = "irc.haydenvh.com";
- chatnet = "hlircnet";
- port = "6697";
- use_tls = "yes";
- tls_verify = "no";
- },
- { address = "efnet.port80.se"; chatnet = "efnet"; port = "6667"; },
- { address = "irc.sdf.org"; chatnet = "sdf"; port = "6667"; },
- { address = "irc.unix.chat"; chatnet = "unix"; port = "6667"; },
- { address = "irc.oscss.eu"; chatnet = "oscss"; port = "6667"; },
- {
- address = "irc.cyberia.is";
- use_tls = "yes";
- chatnet = "cyberia";
- port = "6697";
- },
- { address = "genoce.org"; chatnet = "genoce"; port = "6667"; },
- {
- address = "irc.dataswamp.org";
- chatnet = "dataswamp";
- port = "6697";
- use_tls = "yes";
- },
- {
- address = "localhost";
- chatnet = "bitlbee-matrix";
- port = "6667";
- use_tls = "no";
- tls_verify = "no";
- },
- {
- address = "localhost";
- chatnet = "matrix.haydenvh.com";
- port = "15558";
- password = "W3YLmjluCiO";
- use_tls = "no";
- tls_verify = "no";
- }
-);
-chatnets = {
- Rizon = {
- type = "IRC";
- nick = "hhvn";
- autosendcmd = "/exec - -msg NickServ dpass irc.rizon.net identify; /mode hhvn -x; wait 5000";
- };
- hlircnet = { type = "IRC"; autosendcmd = "/oper haydenh !!!"; };
- sdf = { type = "IRC"; };
- efnet = { type = "IRC"; nick = "hhvn"; alternative_nick = "h_hvn"; };
- unix = { type = "IRC"; };
- nebulacentre = { type = "IRC"; };
- cyberia = { type = "IRC"; };
- genoce = { type = "IRC"; };
- freenode = {
- nick = "fr3en0de";
- alternate_nick = "fr3e-estn0de";
- type = "IRC";
- autosendcmd = "/exec - -msg NickServ dpass irc.freenode.net identify haydenh; wait 10000";
- };
- oscss = { type = "IRC"; };
- dataswamp = { type = "IRC"; };
- hlircnettor = { type = "IRC"; };
- "bitlbee-matrix" = { type = "IRC"; };
- "matrix.haydenvh.com" = { type = "IRC"; };
-};
-aliases = {
- ATAG = "WINDOW SERVER";
- ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
- ACMSG = "/action";
- B = "BAN";
- BACK = "AWAY";
- BANS = "BAN";
- BYE = "QUIT";
- C = "CLEAR";
- CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
- CHAT = "DCC CHAT";
- CUBES = "SCRIPT EXEC Irssi::active_win->print(\"%_bases\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x0\\${_}0\\$_\" } '0'..'9','A'..'F' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_cubes\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { my \\$y = \\$_*6 \\; join '', map { my \\$x = \\$_ \\; map { \"%x\\$x\\$_\\$x\\$_\" } @{['0'..'9','A'..'Z']}[\\$y .. \\$y+5] } 1..6 }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) for 0..5 \\; Irssi::active_win->print(\"%_grays\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x7\\${_}7\\$_\" } 'A'..'X' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_mIRC extended colours\", MSGLEVEL_CLIENTCRAP) \\; my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 0..15 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; for my \\$z (0..6) { my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 16+(\\$z*12)..16+(\\$z*12)+11 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) }";
- DATE = "TIME";
- DEHIGHLIGHT = "DEHILIGHT";
- DHL = "DEHILIGHT";
- EXEMPTLIST = "MODE $C +e";
- EXIT = "try //exit";
- GOTO = "SCROLLBACK GOTO";
- HIGHLIGHT = "HILIGHT";
- HL = "HILIGHT";
- HOST = "USERHOST";
- IDENTIFY = "msg NickServ identify";
- INVITELIST = "MODE $C +I";
- J = "JOIN";
- K = "KICK";
- KB = "KICKBAN";
- KN = "KNOCKOUT";
- LAST = "LASTLOG";
- LEAVE = "PART";
- M = "MSG";
- MUB = "UNBAN *";
- N = "NAMES";
- NMSG = "^MSG";
- P = "PART";
- Q = "QUERY";
- RESET = "SET -default";
- RUN = "SCRIPT LOAD";
- SAY = "MSG *";
- SB = "SCROLLBACK";
- SBAR = "STATUSBAR";
- SIGNOFF = "QUIT";
- T = "TOPIC";
- UB = "UNBAN";
- UMODE = "MODE $N";
- UNSET = "SET -clear";
- W = "WHO";
- WC = "WINDOW CLOSE";
- WG = "WINDOW GOTO";
- WJOIN = "JOIN -window";
- WI = "WHOIS";
- WII = "WHOIS $0 $0";
- WL = "WINDOW LIST";
- WN = "WINDOW NEW HIDDEN";
- WQUERY = "QUERY -window";
- WW = "WHOWAS";
- 1 = "WINDOW GOTO 1";
- 2 = "WINDOW GOTO 2";
- 3 = "WINDOW GOTO 3";
- 4 = "WINDOW GOTO 4";
- 5 = "WINDOW GOTO 5";
- 6 = "WINDOW GOTO 6";
- 7 = "WINDOW GOTO 7";
- 8 = "WINDOW GOTO 8";
- 9 = "WINDOW GOTO 9";
- 10 = "WINDOW GOTO 10";
- 11 = "WINDOW GOTO 11";
- 12 = "WINDOW GOTO 12";
- 13 = "WINDOW GOTO 13";
- 14 = "WINDOW GOTO 14";
- 15 = "WINDOW GOTO 15";
- 16 = "WINDOW GOTO 16";
- 17 = "WINDOW GOTO 17";
- 18 = "WINDOW GOTO 18";
- 19 = "WINDOW GOTO 19";
- 20 = "WINDOW GOTO 20";
- 21 = "WINDOW GOTO 21";
- 22 = "WINDOW GOTO 22";
- 23 = "WINDOW GOTO 23";
- 24 = "WINDOW GOTO 24";
- 25 = "WINDOW GOTO 25";
- 26 = "WINDOW GOTO 26";
- 27 = "WINDOW GOTO 27";
- 28 = "WINDOW GOTO 28";
- 29 = "WINDOW GOTO 29";
- 30 = "WINDOW GOTO 30";
- 31 = "WINDOW GOTO 31";
- 32 = "WINDOW GOTO 32";
- 33 = "WINDOW GOTO 33";
- 34 = "WINDOW GOTO 34";
- 35 = "WINDOW GOTO 35";
- 36 = "WINDOW GOTO 36";
- 37 = "WINDOW GOTO 37";
- 38 = "WINDOW GOTO 38";
- 39 = "WINDOW GOTO 39";
- 40 = "WINDOW GOTO 40";
- 41 = "WINDOW GOTO 41";
- 42 = "WINDOW GOTO 42";
- 43 = "WINDOW GOTO 43";
- 44 = "WINDOW GOTO 44";
- 45 = "WINDOW GOTO 45";
- 46 = "WINDOW GOTO 46";
- 47 = "WINDOW GOTO 47";
- 48 = "WINDOW GOTO 48";
- 49 = "WINDOW GOTO 49";
- 50 = "WINDOW GOTO 50";
- 51 = "WINDOW GOTO 51";
- 52 = "WINDOW GOTO 52";
- 53 = "WINDOW GOTO 53";
- 54 = "WINDOW GOTO 54";
- 55 = "WINDOW GOTO 55";
- 56 = "WINDOW GOTO 56";
- 57 = "WINDOW GOTO 57";
- 58 = "WINDOW GOTO 58";
- 59 = "WINDOW GOTO 59";
- 60 = "WINDOW GOTO 60";
- 61 = "WINDOW GOTO 61";
- 62 = "WINDOW GOTO 62";
- 63 = "WINDOW GOTO 63";
- 64 = "WINDOW GOTO 64";
- 65 = "WINDOW GOTO 65";
- 66 = "WINDOW GOTO 66";
- 67 = "WINDOW GOTO 67";
- 68 = "WINDOW GOTO 68";
- 69 = "WINDOW GOTO 69";
- 70 = "WINDOW GOTO 70";
- 71 = "WINDOW GOTO 71";
- 72 = "WINDOW GOTO 72";
- 73 = "WINDOW GOTO 73";
- 74 = "WINDOW GOTO 74";
- 75 = "WINDOW GOTO 75";
- 76 = "WINDOW GOTO 76";
- 77 = "WINDOW GOTO 77";
- 78 = "WINDOW GOTO 78";
- 79 = "WINDOW GOTO 79";
- 80 = "WINDOW GOTO 80";
- 81 = "WINDOW GOTO 81";
- 82 = "WINDOW GOTO 82";
- 83 = "WINDOW GOTO 83";
- 84 = "WINDOW GOTO 84";
- 85 = "WINDOW GOTO 85";
- 86 = "WINDOW GOTO 86";
- 87 = "WINDOW GOTO 87";
- 88 = "WINDOW GOTO 88";
- 89 = "WINDOW GOTO 89";
- 90 = "WINDOW GOTO 90";
- 91 = "WINDOW GOTO 91";
- 92 = "WINDOW GOTO 92";
- 93 = "WINDOW GOTO 93";
- 94 = "WINDOW GOTO 94";
- 95 = "WINDOW GOTO 95";
- 96 = "WINDOW GOTO 96";
- 97 = "WINDOW GOTO 97";
- 98 = "WINDOW GOTO 98";
- 99 = "WINDOW GOTO 99";
- ADDALLCHANNELS = "script exec foreach my $$channel (Irssi::channels()) { Irssi::command(\"channel add -auto $$channel->{name} $$channel->{server}->{tag} $$channel->{key}\") }";
- night = "/away -all sleeping";
- day = "back";
- gone = "away -all somewhere";
- wave = "/SAY \\ 0/;SAY /|;SAY / \\\\";
- admin = "/mode * +a $0";
- super = "/mode * +q $0";
- desuper = "/mode * -q $0";
- deadmin = "/mode * -a $0";
- save = "/layout save; /ADDALLCHANS; /save -formats";
- halfop = "/mode * +h $0";
- dehalfop = "/mode * -h $0";
- vm_add = " /^statusbar prompt add -after input -alignment right more; /^statusbar prompt add -after input -alignment right vim_cmd_mode";
- vm_del = "/^statusbar prompt remove vim_cmb_mode; /^statusbar prompt remove more";
- chanhold = "^msg chanhold";
- boxx = "say \\ _\\ \\ \\ _\\ \\ \\ _\\ \\ \\ _\\ \\ \\ _; say |_| |_| |_| |_| |_|";
- kline = "quote KLINE";
- gline = "quote GLINE";
- zline = "quote ZLINE";
- gzline = "quote GZLINE";
- bet = "/say I bet $0 hlirccens (imaginary moneys) $1 $2 $3 $4 $5 $6 $7 $8 $9";
- theme = "/set theme";
- retheme = "/set theme default; /set theme $0";
- reply = "/msg $, $*";
- rep = "/reply";
- helpop = "/quote helpop";
- cycle = "/cycle cycling";
- replay = " ";
- saumode = "/quote saumode";
- "runauto;" = "/script load autorun/$0";
- runauto = "/script load autorun/$0";
- dns = "/quote dns";
- clones = "/quote clones";
- ttime = "/exec - -out date +%H:%M:%S";
- arep = "/ACMSG $, $*";
- AAAA = "SAY \\\\0/;SAY |;SAY / \\\\";
- matrix = "SAY I'd like to interject for a moment, what you're referring to as Matrix, is in fact GNU/matrix, or as I've recently taken to calling it, GNU+matrix. Matrix is not an ideology unto itself, but rather another free component of a fully functioning method of thought.";
- rules = "/quote rules";
- mkpasswd = "/quote mkpasswd";
- vhost = "/quote vhost";
- sanick = "/quote sanick";
- chghost = "/quote chghost";
- v = "voice";
- reputation = "/quote reputation";
- ircops = "/quote ircops";
- module = "/quote module";
- marvvin = "/^msg marvvin";
- ALLLASTLOG = "script exec foreach (Irssi::windows()) {Irssi::command(lastlog -window \\$_->{refnum} $*)\\;}";
- TAG = "script exec Irssi::server_find_tag(‘$0′)->command(‘$1-’);";
- CONNECTIONUPTIME = "script exec \\$a=`date +%s` – Irssi::active_win->{‘active_server’}->{‘connect_time’}\\; Irssi::print( int(\\$a/3600/24).”d “.int(\\$a/3600%24).”h “. int(\\$a/60%60).”m “. int(\\$a%60).”s”)\\;";
- smotd = "/quote smotd";
- sadmin = "/quote admin";
- ping = "/quote ping";
- awl_nosbar = "/script load autorun/adv_windowlist; /format awl_display_nokey %N$$H$$C$$S %N$$N; /format awl_display_key %N$$H$$C$$S%N %mM-$$Q; /format awl_display_nokey_active %N%K>%N$$C %N$$N; /format awl_display_key_active %N%K>%N$$C %mM-$$Q; /format awl_display_header %1 %Y$$C ($${N}); /format awl_display_nokey_visible %N%K<%N$$C %N$$N; /format awl_display_key_visible %N%K<%N$$C %mM-$$Q; /rm_awl_sbar";
- sajoin = "/quote sajoin";
- chgident = "/quote chgident";
- shrug = "/SAY . _0_ .; SAY \\ ` | `; SAY \\ \\ \\ |; SAY \\ \\ / \\\\";
- plop = "/SAY | \\ \\ \\ \\ |; SAY |~~-.-|; SAY | 0 \\ .|; SAY |o \\ . |; SAY |_____|";
- ll = "/lastlog";
- llc = "/lastlog -clear";
- quickconn = "/connect unix; /connect dataswamp; /connect sdf; /connect freenode; /connect hlircnet; /connect cyberia; /connect nebulacentre; /connect efnet";
- "expose-self" = "/mode $N -x";
- rm_awl_sbar = "/sbar modify -disable awl_0; sbar modify -disable awl_1; sbar modify -disable awl_2; sbar modify -disable awl_3; sbar modify -disable awl_4; sbar modify -disable awl_5";
- decloak = "mode $N -x";
- 2say = "SAY $*; SAY $*";
- 4say = "2say $*; 2say $*";
- 8say = "4say $*; 4say $*";
- 16say = "8say $*; 8say $*";
- 32say = "16say $*; wait 5000; 16say $*";
- 64say = "32say $*; wait 20000; 32say $*";
- 2colsay = "colsay $*; colsay $*";
- 4colsay = "2colsay $*; 2colsay $*";
- 8colsay = "4colsay $*; 4colsay $*";
- 16colsay = "8colsay $*; 8colsay $*";
- 32colsay = "16colsay $*; wait 5000; 16colsay $*";
- 64colsay = "32colsay $*; wait 20000; 32say $*";
- winhilight = "/window show 4; /window size 8";
- art = "/exec - -out cat /srv/storage/art.tmp";
- quit = "/echo no";
- net = "/echo $chatnet";
- wh0 = "who 0";
- alright = "/exec - -out echo Alright, I $$(shuf < /usr/share/dict/british-english 2>/dev/null | grep -v 'ed$$' 2>/dev/null | head -n 1 2>/dev/null).";
-};
-statusbar = {
- items = {
- barstart = "{sbstart}";
- ibarstart = "{isbstart}";
- barend = "{sbend}";
- user = "{sb $P$N +$usermode{sbaway $A}{opered $O}}";
- winref = "{sb $winname$itemname{sbmode $M}}{sb3 $winref}";
- server = "{sb {sbservertag $tag}}";
- prompt = "{prompt $[.15]itemname}";
- prompt_empty = "{prompt $winname}";
- topic = "{sb_topic $topic}";
- topicend = "%0 ";
- vim_cmd_mode = "{sb3 $vim_cmd_mode}";
- lag = "{sb Lag: $0-}";
- act = "{sb Act: $0-}";
- more = "{sb3 {sbmore}}";
- end = "%N%K%_──────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────";
- inact = "%N%G%_──────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────";
- none = " ";
- };
- default = {
- window_inact = {
- type = "window";
- placement = "bottom";
- position = "1";
- visible = "never";
- items = { inact = { alignment = "left"; priority = "100"; }; };
- disabled = "yes";
- };
- window = {
- items = {
- end = { alignment = "left"; priority = "0"; };
- time = { priority = "10"; };
- user = { priority = "20"; };
- winref = { priority = "35"; };
- lag = { priority = "40"; };
- server = { priority = "50"; };
- };
- type = "window";
- position = "0";
- visible = "active";
- };
- topic = {
- type = "window";
- position = "0";
- visible = "always";
- items = {
- topic = { priority = "1"; };
- topicend = { alignment = "right"; };
- };
- };
- awl_2 = {
- items = {
- barstart = { priority = "100"; };
- awl_2 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- awl_3 = {
- items = {
- barstart = { priority = "100"; };
- awl_3 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- awl_4 = {
- items = {
- barstart = { priority = "100"; };
- awl_4 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- awl_5 = {
- items = {
- barstart = { priority = "100"; };
- awl_5 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- awl_6 = {
- items = {
- barstart = { priority = "100"; };
- awl_6 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- prompt = {
- items = {
- uberprompt = { priority = "-1"; };
- input = { priority = "10"; };
- vim_cmd_mode = { alignment = "right"; };
- };
- position = "100";
- };
- awl_0 = {
- items = {
- barstart = { priority = "100"; };
- awl_0 = { };
- barend = { priority = "100"; alignment = "right"; };
- };
- disabled = "yes";
- };
- };
-};
-settings = {
- core = {
- real_name = "gopher://haydenvh.com";
- user_name = "h";
- nick = "hhvn";
- recode_transliterate = "no";
- timestamp_format = "%H:%M:%S";
- hostname = "";
- quit_message = "pain is temporary";
- STATUS_OPER = "yes";
- resolve_prefer_ipv6 = "no";
- awaylog_file = "~/.cache/irc/away.log";
- chanmode_expando_strip = "yes";
- server_reconnect_time = "2m";
- server_connect_timeout = "20secs";
- rawlog_lines = "10000";
- };
- "fe-text" = {
- actlist_sort = "refnum";
- colors_ansi_24bit = "yes";
- scrollback_lines = "2500";
- scrollback_time = "5days";
- };
- "fe-common/core" = {
- theme = "pipeline";
- autolog = "yes";
- completion_char = ",";
- emphasis_italics = "no";
- beep_msg_level = "msgs hilight dccmsgs";
- show_names_on_join = "no";
- window_check_level_first = "yes";
- autocreate_own_query = "no";
- autocreate_windows = "yes";
- use_msgs_window = "no";
- autocreate_query_level = "NONE";
- emphasis = "yes";
- emphasis_multiword = "yes";
- emphasis_replace = "no";
- window_default_level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- autolog_path = "~/.cache/irclogs/$tag-$0/%d-%m-%y.log";
- autolog_level = "all";
- autolog_colors = "yes";
- completion_keep_privates = "50";
- };
- "perl/core/scripts" = {
- ascii_figlet_path = "/usr/bin/figlet";
- nickcolor_coltag = "4 8 9 10 11 12 13 14 15";
- nicklist_width = "21";
- nicklist_height = "46";
- dim_nicks_color = "r";
- awl_shared_sbar = "OFF";
- awl_block = "25";
- awl_sort = "active/server/tag";
- trackbar_string = "──────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────";
- trackbar_style = "%g%_";
- trackbar_print_timestamp = "no";
- uberprompt_load_hook = "/^vm_add";
- uberprompt_unload_hook = "/^vm_del";
- cmdind_warn_text = "%G%_MSG?";
- cmdind_text = "%g%_CMD: ";
- tmux_away_window = "";
- tmux_away_message = "(set away by a script)";
- neat_colors = "X40RX4CX5CX6CX5EX3CX2DX2JX3PX1CGcX1ZBX3HX2TX3MX25X2BX4NX6AX3AX4GX42X63X6BX6HX6NX51";
- hilightwin_show_network = "yes";
- hilightwin_showprivmsg = "no";
- neat_history = "10000000";
- neat_truncate_nick = "yes";
- title_screen_window = "yes";
- vim_mode_map_leader = ";";
- dim_nicks_ignore_hilights = "no";
- awl_maxcolumns = "1";
- awl_viewer = "yes";
- awl_path = "/tmp/_windowlist";
- awl_placement = "bottom";
- ascii_default_font = "small";
- ascii_default_kickreason = "irssi script :)";
- trackbar_ignore_windows = "[control-panel] [hilights]";
- hilightwin_ignore_targets = "#users #service";
- awl_height_adjust = "0";
- };
- "irc/core" = {
- alternate_nick = "h_hvn";
- ctcp_version_reply = "UNIVERSE v42";
- ctcp_userinfo_reply = "gopher://haydenvh.com:73";
- part_message = "pain is temporary";
- split_line_start = "";
- usermode = "+iw";
- join_auto_chans_on_invite = "yes";
- cmd_queue_speed = "790msec";
- auto_whowas = "no";
- };
- proxy = {
- irssiproxy_password = "awDhuK15^";
- irssiproxy_ports = "?=22";
- irssiproxy = "yes";
- irssiproxy_bind = "0.0.0.0";
- };
-};
-logs = { };
-keyboard = (
- { key = "meta-u"; id = "change_window"; data = "17"; },
- { key = "meta-i"; id = "change_window"; data = "18"; },
- { key = "^i"; id = "command"; data = "nicklist scroll -10"; },
- { key = "meta-j"; id = "change_window"; data = "27"; },
- { key = "meta-k"; id = "change_window"; data = "28"; },
- { key = "^s"; id = "command"; data = "away -all away"; },
- { key = "meta-s"; id = "change_window"; data = "22"; },
- { key = "meta-b"; id = "change_window"; data = "34"; },
- { key = "meta-n"; id = "change_window"; data = "35"; },
- { key = "^Z"; id = "next_window_item"; data = ""; },
- { key = "meta-o"; id = "change_window"; data = "19"; },
- { key = "meta-p"; id = "change_window"; data = "20"; },
- { key = "meta-a"; id = "change_window"; data = "21"; },
- { key = "meta-z"; id = "change_window"; data = "30"; },
- { key = "meta-d"; id = "change_window"; data = "23"; },
- { key = "meta-f"; id = "change_window"; data = "24"; },
- { key = "meta-g"; id = "change_window"; data = "25"; },
- { key = "meta-h"; id = "change_window"; data = "26"; },
- { key = "meta-l"; id = "change_window"; data = "29"; },
- { key = "meta-x"; id = "change_window"; data = "31"; },
- { key = "meta-c"; id = "change_window"; data = "32"; },
- { key = "meta-v"; id = "change_window"; data = "33"; },
- { key = "^A"; },
- { key = "^R"; id = "command"; data = "history_search "; },
- { key = "^G"; id = "multi"; data = "erase_line;insert_text /ws "; },
- { key = "^K"; id = "scroll_backward"; data = ""; },
- { key = "^J"; id = "scroll_forward"; data = ""; },
- { key = "^j"; id = "scroll_forward"; data = ""; },
- { key = "^k"; id = "scroll_backward"; data = ""; },
- { key = "meta-m"; id = "change_window"; data = "36"; },
- { key = "meta-,"; id = "change_window"; data = "37"; },
- { key = "meta-."; id = "change_window"; data = "38"; },
- { key = "meta-/"; id = "change_window"; data = "39"; },
- { key = "^I"; id = "key"; data = "tab"; },
- {
- key = "^Y";
- id = "command";
- data = "script unload adv_windowlist";
- },
- { key = "^T"; id = "command"; data = "awl_nosbar "; },
- { key = "meta-;"; id = "change_window"; data = "40"; },
- { key = "meta-'"; id = "change_window"; data = "41"; },
- { key = "meta-\\"; id = "change_window"; data = "42"; },
- { key = "meta-["; id = "change_window"; data = "43"; },
- { key = "meta-]"; id = "change_window"; data = "44"; },
- { key = "meta-="; id = "change_window"; data = "45"; },
- { key = "meta--"; id = "change_window"; data = "46"; },
- {
- key = "^X";
- id = "multi";
- data = "erase_line;insert_text /window server ";
- },
- { key = "^D"; id = "scroll_forward"; data = ""; },
- { key = "^U"; }
-);
-hilights = (
- { text = "haydenh"; nick = "yes"; word = "yes"; },
- { text = "hayden"; nick = "yes"; word = "yes"; },
- { text = "hhvn"; nick = "yes"; word = "yes"; },
- { text = "fr3en0de"; nick = "yes"; word = "yes"; }
-);
-channels = (
- { name = "#hlircnet"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#GNU/matrix"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#help"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#gopher"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#vhosts"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#opers"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#users"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#service"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#darkscience"; chatnet = "darkscience"; autojoin = "yes"; },
- { name = "#asciiart"; chatnet = "efnet"; autojoin = "yes"; },
- { name = "#unix"; chatnet = "unix"; autojoin = "yes"; },
- { name = "#/g/technology"; chatnet = "Rizon"; autojoin = "yes"; },
- { name = "#uk"; chatnet = "Rizon"; autojoin = "yes"; },
- { name = "#/tech/"; chatnet = "Rizon"; autojoin = "yes"; },
- { name = "#8chan"; chatnet = "Rizon"; autojoin = "yes"; },
- { name = "#books"; chatnet = "genoce"; autojoin = "yes"; },
- { name = "#general"; chatnet = "genoce"; autojoin = "yes"; },
- { name = "#general"; chatnet = "nebulacentre"; autojoin = "yes"; },
- { name = "#gopher"; chatnet = "sdf"; autojoin = "yes"; },
- { name = "#sdf"; chatnet = "sdf"; autojoin = "yes"; },
- { name = "#helpdesk"; chatnet = "sdf"; autojoin = "yes"; },
- { name = "#dataswamp"; chatnet = "dataswamp"; autojoin = "yes"; },
- { name = "#political"; chatnet = "efnet"; autojoin = "yes"; },
- { name = "#LRH"; chatnet = "efnet"; autojoin = "yes"; },
- { name = "#thepiratebay.org"; chatnet = "efnet"; autojoin = "yes"; },
- { name = "#2f30"; chatnet = "cyberia"; autojoin = "yes"; },
- { name = "#shadow"; chatnet = "hlircnet"; autojoin = "yes"; },
- { name = "#cyberia"; chatnet = "cyberia"; autojoin = "yes"; }
-);
-completions = {
- hubus = { value = "hub.us.hlircnet."; };
- iarea51 = { value = "irc.area51.haydenvh.com"; };
- hubeu = { value = "hub.eu.hlircnet."; };
- chhlirc = { value = "chanhold.hlircnet."; };
- torhlirc = { value = "tor.hlircnet."; };
- morn = { value = "Morning"; };
- aftn = { value = "Afternoon"; };
- aft = { value = "Afternoon"; };
-};
-ignores = (
- { mask = "ARS"; level = "NOTICES"; },
- { mask = "[control-panel]"; level = "NO_ACT ALL"; },
- { mask = "[hilights]"; level = "NO_ACT ALL"; },
- { mask = "BASHy2-EU"; level = "MSGS"; },
- { mask = "freenode-connect"; level = "ALL"; },
- { mask = "P80drone"; level = "ALL"; },
- { mask = "dmonp80"; level = "ALL"; },
- { level = "NO_ACT ALL"; channels = ( "#service" ); },
- { level = "NO_ACT ALL"; channels = ( "#users" ); },
- { mask = "BASHy2"; level = "MSGS"; }
-);
-notifies = { "creep^ltx!*" = { ircnets = ( "freenode" ); }; incal = { }; };
-windows = {
- 1 = {
- immortal = "yes";
- name = "[control-panel]";
- level = "CRAP PUBLICS JOINS PARTS QUITS KICKS MODES TOPICS NICKS CLIENTNOTICES CLIENTCRAP CLIENTERRORS";
- };
- 2 = {
- immortal = "yes";
- name = "[notices]";
- servertag = "hlircnet";
- level = "SNOTES WALLOPS";
- };
- 3 = {
- immortal = "yes";
- name = "[msgs]";
- level = "MSGS NOTICES CTCPS ACTIONS KICKS TOPICS INVITES NICKS DCC DCCMSGS";
- };
- 4 = { name = "[hilights]"; servertag = "hlircnet"; level = "HILIGHTS"; };
- 5 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#2f30";
- tag = "cyberia";
- }
- );
- };
- 6 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#cyberia";
- tag = "cyberia";
- }
- );
- };
- 7 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#gopher";
- tag = "sdf";
- }
- );
- };
- 8 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#sdf";
- tag = "sdf";
- }
- );
- };
- 9 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#helpdesk";
- tag = "sdf";
- }
- );
- };
- 10 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#hlircnet";
- tag = "hlircnet";
- }
- );
- };
- 11 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#GNU/matrix";
- tag = "hlircnet";
- }
- );
- };
- 12 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#help";
- tag = "hlircnet";
- }
- );
- };
- 13 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#gopher";
- tag = "hlircnet";
- }
- );
- };
- 14 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#vhosts";
- tag = "hlircnet";
- }
- );
- };
- 15 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#opers";
- tag = "hlircnet";
- }
- );
- };
- 16 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#users";
- tag = "hlircnet";
- }
- );
- };
- 17 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#service";
- tag = "hlircnet";
- }
- );
- };
- 18 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#unix";
- tag = "unix";
- }
- );
- };
- 19 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#dataswamp";
- tag = "dataswamp";
- }
- );
- };
- 20 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#general";
- tag = "nebulacentre";
- }
- );
- };
- 21 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#asciiart";
- tag = "efnet";
- }
- );
- };
- 22 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#political";
- tag = "efnet";
- }
- );
- };
- 23 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#LRH";
- tag = "efnet";
- }
- );
- };
- 24 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#thepiratebay.org";
- tag = "efnet";
- }
- );
- };
- 25 = {
- level = "PUBLICS NOTICES CTCPS ACTIONS JOINS PARTS QUITS KICKS MODES TOPICS NICKS";
- items = (
- {
- type = "CHANNEL";
- chat_type = "IRC";
- name = "#shadow";
- tag = "hlircnet";
- }
- );
- };
-};
-mainwindows = {
- 1 = {
- first_line = "0";
- lines = "90";
- first_column = "0";
- columns = "349";
- };
-};
diff --git a/.config/irssi/default.theme b/.config/irssi/default.theme
@@ -1,833 +0,0 @@
-# When testing changes, the easiest way to reload the theme is with /RELOAD.
-# This reloads the configuration file too, so if you did any changes remember
-# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
-# old data so keep backups :)
-
-# TEMPLATES:
-
-# The real text formats that irssi uses are the ones you can find with
-# /FORMAT command. Back in the old days all the colors and texts were mixed
-# up in those formats, and it was really hard to change the colors since you
-# might have had to change them in tens of different places. So, then came
-# this templating system.
-
-# Now the /FORMATs don't have any colors in them, and they also have very
-# little other styling. Most of the stuff you need to change is in this
-# theme file. If you can't change something here, you can always go back
-# to change the /FORMATs directly, they're also saved in these .theme files.
-
-# So .. the templates. They're those {blahblah} parts you see all over the
-# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
-# When irssi sees this kind of text, it goes to find "name" from abstracts
-# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
-# can have more parameters of course). Templates can have subtemplates.
-# Here's a small example:
-# /FORMAT format hello {colorify {underline world}}
-# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
-# When irssi expands the templates in "format", the final string would be:
-# hello %G%Uworld%U%n
-# ie. underlined bright green "world" text.
-# and why "$0-", why not "$0"? $0 would only mean the first parameter,
-# $0- means all the parameters. With {underline hello world} you'd really
-# want to underline both of the words, not just the hello (and world would
-# actually be removed entirely).
-
-# COLORS:
-
-# You can find definitions for the color format codes in docs/formats.txt.
-
-# There's one difference here though. %n format. Normally it means the
-# default color of the terminal (white mostly), but here it means the
-# "reset color back to the one it was in higher template". For example
-# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
-# print yellow "foo" (as set with %Y) but "bar" would be green, which was
-# set at the beginning before the {foo} template. If there wasn't the %g
-# at start, the normal behaviour of %n would occur. If you _really_ want
-# to use the terminal's default color, use %N.
-
-#############################################################################
-
-# 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 = { "[]=" = "%K$*%n"; };
-
-abstracts = {
- ##
- ## generic
- ##
-
- # text to insert at the beginning of each non-message line
- line_start = "%B-%n!%B-%n ";
-
- # timestamp styling, nothing by default
- timestamp = "$*";
-
- # 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 = "[$*]";
-
- # server name is printed
- server = "%_$*%_";
-
- # some kind of comment is printed
- comment = "[$*]";
-
- # reason for something is printed (part, quit, kick, ..)
- reason = "{comment $*}";
-
- # mode change is printed ([+o nick])
- mode = "{comment $*}";
-
- ##
- ## channel specific messages
- ##
-
- # highlighted nick/host is printed (joins)
- channick_hilight = "%C$*%n";
- chanhost_hilight = "{nickhost %c$*%n}";
-
- # nick/host is printed (parts, quits, etc.)
- channick = "%c$*%n";
- chanhost = "{nickhost $*}";
-
- # highlighted channel name is printed
- channelhilight = "%c$*%n";
-
- # ban/ban exception/invite list mask is printed
- ban = "%c$*%n";
-
- ##
- ## messages
- ##
-
- # the basic styling of how to print message, $0 = nick mode, $1 = nick
- msgnick = "%K<%n$0$1-%K>%n %|";
-
- # message from you is printed. "ownnick" specifies the styling of the
- # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
- # whole line.
-
- # Example1: You want the message text to be green:
- # ownmsgnick = "{msgnick $0 $1-}%g";
- # Example2.1: You want < and > chars to be yellow:
- # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
- # (you'll also have to remove <> from replaces list above)
- # Example2.2: But you still want to keep <> grey for other messages:
- # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
- # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
- # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
- # ownprivmsgnick = "%K{msgnick $*%K}%n";
- # privmsgnick = "%K{msgnick %R$*%K}%n";
-
- # $0 = nick mode, $1 = nick
- ownmsgnick = "{msgnick $0 $1-}";
- ownnick = "%_$*%n";
-
- # public message in channel, $0 = nick mode, $1 = nick
- pubmsgnick = "{msgnick $0 $1-}";
- pubnick = "%N$*%n";
-
- # public message in channel meant for me, $0 = nick mode, $1 = nick
- pubmsgmenick = "{msgnick $0 $1-}";
- menick = "%Y$*%n";
-
- # public highlighted message in channel
- # $0 = highlight color, $1 = nick mode, $2 = nick
- pubmsghinick = "{msgnick $1 $0$2-%n}";
-
- # channel name is printed with message
- msgchannel = "%K:%c$*%n";
-
- # private message, $0 = nick, $1 = host
- privmsg = "[%R$0%K(%r$1-%K)%n] ";
-
- # private message from you, $0 = "msg", $1 = target nick
- ownprivmsg = "[%r$0%K(%R$1-%K)%n] ";
-
- # own private message in query
- ownprivmsgnick = "{msgnick $*}";
- ownprivnick = "%_$*%n";
-
- # private message in query
- privmsgnick = "{msgnick %R$*%n}";
-
- ##
- ## Actions (/ME stuff)
- ##
-
- # used internally by this theme
- action_core = "%_ * $*%n";
-
- # generic one that's used by most actions
- action = "{action_core $*} ";
-
- # own action, both private/public
- ownaction = "{action $*}";
-
- # own action with target, both private/public
- ownaction_target = "{action_core $0}%K:%c$1%n ";
-
- # private action sent by others
- pvtaction = "%_ (*) $*%n ";
- pvtaction_query = "{action $*}";
-
- # public action sent by others
- pubaction = "{action $*}";
-
-
- ##
- ## other IRC events
- ##
-
- # whois
- whois = "%# $[8]0 : $1-";
-
- # notices
- ownnotice = "[%r$0%K(%R$1-%K)]%n ";
- notice = "%K-%M$*%K-%n ";
- pubnotice_channel = "%K:%m$*";
- pvtnotice_host = "%K(%m$*%K)";
- servernotice = "%g!$*%n ";
-
- # CTCPs
- ownctcp = "[%r$0%K(%R$1-%K)] ";
- ctcp = "%g$*%n";
-
- # wallops
- wallop = "%_$*%n: ";
- wallop_nick = "%n$*";
- wallop_action = "%_ * $*%n ";
-
- # netsplits
- netsplit = "%R$*%n";
- netjoin = "%C$*%n";
-
- # /names list
- names_prefix = "";
- names_nick = "[%_$0%_$1-] ";
- names_nick_op = "{names_nick $*}";
- names_nick_halfop = "{names_nick $*}";
- names_nick_voice = "{names_nick $*}";
- names_users = "[%g$*%n]";
- names_channel = "%G$*%n";
-
- # DCC
- dcc = "%g$*%n";
- dccfile = "%_$*%_";
-
- # DCC chat, own msg/action
- dccownmsg = "[%r$0%K($1-%K)%n] ";
- dccownnick = "%R$*%n";
- dccownquerynick = "%_$*%n";
- dccownaction = "{action $*}";
- dccownaction_target = "{action_core $0}%K:%c$1%n ";
-
- # DCC chat, others
- dccmsg = "[%G$1-%K(%g$0%K)%n] ";
- dccquerynick = "%G$*%n";
- dccaction = "%_ (*dcc*) $*%n %|";
-
- ##
- ## statusbar
- ##
-
- # default background for all statusbars. You can also give
- # the default foreground color for statusbar items.
- sb_background = "%4%w";
- window_border = "%4%w";
-
- # default backround for "default" statusbar group
- #sb_default_bg = "%4";
- # background for prompt / input line
- sb_prompt_bg = "%n";
- # background for info statusbar
- sb_info_bg = "%8";
- # background for topicbar (same default)
- #sb_topic_bg = "%4";
-
- # text at the beginning of statusbars. "sb" already puts a 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 = "[$*] ";
-
- sb = " %c[%n$*%c]%n";
- sbmode = "(%c+%n$*)";
- sbaway = " (%GzZzZ%n)";
- sbservertag = ":$0 (change with ^X)";
- sbnickmode = "$0";
-
- # activity in statusbar
-
- # ',' separator
- sb_act_sep = "%c$*";
- # normal text
- sb_act_text = "%c$*";
- # public message
- sb_act_msg = "%W$*";
- # hilight
- sb_act_hilight = "%M$*";
- # hilight with specified color, $0 = color, $1 = text
- sb_act_hilight_color = "$0$1-%n";
-};
-formats = {
- "fe-common/irc/notifylist" = {
- notify_join = "{nick $0} [$1@$2] [{hilight $3}] has joined to $4";
- notify_part = "{nick $0} has left $4";
- notify_away = "{nick $0} [$5] [$1@$2] [{hilight $3}] is now away: $4";
- notify_unaway = "{nick $0} [$4] [$1@$2] [{hilight $3}] is now unaway";
- notify_online = "On $0: {hilight $1}";
- notify_offline = "Offline: $0";
- notify_list = "$0: $1 $2";
- notify_list_empty = "The notify list is empty";
- };
- "fe-common/core" = {
- line_start = "{line_start}";
- line_start_irssi = "{line_start}{hilight Irssi:} ";
- timestamp = "{timestamp $Z} ";
- servertag = "[$0] ";
- daychange = "Day changed to %%d %%b %%Y";
- talking_with = "You are now talking with {nick $0}";
- refnum_too_low = "Window number must be greater than 1";
- error_server_sticky = "Window's server is sticky and it cannot be changed without -unsticky option";
- set_server_sticky = "Window's server set sticky";
- unset_server_sticky = "Window's server isn't sticky anymore";
- window_name_not_unique = "Window names must be unique";
- window_level = "Window level is now $0";
- window_set_immortal = "Window is now immortal";
- window_unset_immortal = "Window isn't immortal anymore";
- window_immortal_error = "Window is immortal, if you really want to close it, say /WINDOW IMMORTAL OFF";
- windowlist_header = "%#Ref Name Active item Server Level";
- windowlist_line = "%#$[4]0 %|$[20]1 $[15]2 $[15]3 $4";
- windowlist_footer = "";
- windows_layout_saved = "Layout of windows is now remembered";
- windows_layout_reset = "Layout of windows reset to defaults";
- window_info_header = "";
- window_info_footer = "";
- window_info_refnum = "%#Window : {hilight #$0}";
- window_info_refnum_sticky = "%#Window : {hilight #$0 (sticky)}";
- window_info_name = "%#Name : $0";
- window_info_history = "%#History : $0";
- window_info_immortal = "%#Immortal: yes";
- window_info_size = "%#Size : $0x$1";
- window_info_level = "%#Level : $0";
- window_info_server = "%#Server : $0";
- window_info_server_sticky = "%#Server : $0 (sticky)";
- window_info_theme = "%#Theme : $0$1";
- window_info_bound_items_header = "%#Bounds : {hilight Name Server tag}";
- window_info_bound_item = "%# : $[!30]0 $[!15]1 $2";
- window_info_bound_items_footer = "";
- window_info_items_header = "%#Items : {hilight Name Server tag}";
- window_info_item = "%# $[7]0: $[!30]1 $2";
- window_info_items_footer = "";
- looking_up = "Looking up {server $0}";
- connecting = "Connecting to {server $0} [$1] port {hilight $2}";
- reconnecting = "Reconnecting to {server $0} [$1] port {hilight $2} - use /RMRECONNS to abort";
- connection_established = "Connection to {server $0} established";
- cant_connect = "Unable to connect server {server $0} port {hilight $1} {reason $2}";
- connection_lost = "Connection lost to {server $0}";
- lag_disconnected = "No PONG reply from server {server $0} in $1 seconds, disconnecting";
- disconnected = "Disconnected from {server $0} {reason $1}";
- server_quit = "Disconnecting from server {server $0}: {reason $1}";
- server_changed = "Changed to {hilight $2} server {server $1}";
- unknown_server_tag = "Unknown server tag {server $0}";
- no_connected_servers = "Not connected to any servers";
- server_list = "{server $0}: $1:$2 ($3)";
- server_lookup_list = "{server $0}: $1:$2 ($3) (connecting...)";
- server_reconnect_list = "{server $0}: $1:$2 ($3) ($5 left before reconnecting)";
- server_reconnect_removed = "Removed reconnection to server {server $0} port {hilight $1}";
- server_reconnect_not_found = "Reconnection tag {server $0} not found";
- setupserver_added = "Server {server $0} saved";
- setupserver_removed = "Server {server $0} removed";
- setupserver_not_found = "Server {server $0} not found";
- your_nick = "Your nickname is {nick $0}";
- join = "{channick_hilight $0} {chanhost_hilight $1} has joined {channel $2}";
- part = "{channick $0} {chanhost $1} has left {channel $2} {reason $3}";
- kick = "{channick $0} was kicked from {channel $1} by {nick $2} {reason $3}";
- quit = "{channick $0} {chanhost $1} has quit {reason $2}";
- quit_once = "{channel $3} {channick $0} {chanhost $1} has quit {reason $2}";
- invite = "{nick $0} invites you to {channel $1}";
- not_invited = "You have not been invited to a channel!";
- new_topic = "{nick $0} changed the topic of {channel $1} to: $2";
- topic_unset = "Topic unset by {nick $0} on {channel $1}";
- your_nick_changed = "You're now known as {nick $1}";
- nick_changed = "{channick $0} is now known as {channick_hilight $1}";
- talking_in = "You are now talking in {channel $0}";
- not_in_channels = "You are not on any channels";
- current_channel = "Current channel {channel $0}";
- names = "{names_users Users {names_channel $0}}";
- names_prefix = "%#{names_prefix $0}";
- names_nick_op = "{names_nick_op $0 $1}";
- names_nick_halfop = "{names_nick_halfop $0 $1}";
- names_nick_voice = "{names_nick_voice $0 $1}";
- names_nick = "{names_nick $0 $1}";
- endofnames = "{channel $0}: Total of {hilight $1} nicks {comment {hilight $2} ops, {hilight $3} halfops, {hilight $4} voices, {hilight $5} normal}";
- chanlist_header = "%#You are on the following channels:";
- chanlist_line = "%#{channel $[-10]0} %|+$1 ($2): $3";
- chansetup_not_found = "Channel {channel $0} not found";
- chansetup_added = "Channel {channel $0} saved";
- chansetup_removed = "Channel {channel $0} removed";
- chansetup_header = "%#Channel Network Password Settings";
- chansetup_line = "%#{channel $[15]0} %|$[10]1 $[10]2 $3";
- chansetup_footer = "";
- own_msg = "{ownmsgnick $2 {ownnick $0}}$1";
- own_msg_channel = "{ownmsgnick $3 {ownnick $0}{msgchannel $1}}$2";
- own_msg_private = "{ownprivmsg msg $0}$1";
- own_msg_private_query = "{ownprivmsgnick {ownprivnick $2}}$1";
- pubmsg_me = "{pubmsgmenick $2 {menick $0}}$1";
- pubmsg_me_channel = "{pubmsgmenick $3 {menick $0}{msgchannel $1}}$2";
- pubmsg_hilight = "{pubmsghinick $0 $3 $1}$2";
- pubmsg_hilight_channel = "{pubmsghinick $0 $4 $1{msgchannel $2}}$3";
- pubmsg = "{pubmsgnick $2 {pubnick $0}}$1";
- pubmsg_channel = "{pubmsgnick $3 {pubnick $0}{msgchannel $1}}$2";
- msg_private = "{privmsg $0 $1}$2";
- msg_private_query = "{privmsgnick $0}$2";
- no_msgs_got = "You have not received a message from anyone yet";
- no_msgs_sent = "You have not sent a message to anyone yet";
- query_start = "Starting query in {server $1} with {nick $0}";
- query_stop = "Closing query with {nick $0}";
- no_query = "No query with {nick $0}";
- query_server_changed = "Query with {nick $0} changed to server {server $1}";
- hilight_header = "%#Highlights:";
- hilight_line = "%#$[-4]0 $1 $2 $3$4";
- hilight_footer = "";
- hilight_not_found = "Highlight not found: $0";
- hilight_removed = "Highlight removed: $0";
- alias_added = "Alias $0 added";
- alias_removed = "Alias $0 removed";
- alias_not_found = "No such alias: $0";
- aliaslist_header = "%#Aliases:";
- aliaslist_line = "%#$[10]0 $1";
- aliaslist_footer = "";
- log_opened = "Log file {hilight $0} opened";
- log_closed = "Log file {hilight $0} closed";
- log_create_failed = "Couldn't create log file {hilight $0}: $1";
- log_locked = "Log file {hilight $0} is locked, probably by another running Irssi";
- log_not_open = "Log file {hilight $0} not open";
- log_started = "Started logging to file {hilight $0}";
- log_stopped = "Stopped logging to file {hilight $0}";
- log_list_header = "%#Logs:";
- log_list = "%#$0 $1: $2 $3$4$5";
- log_list_footer = "";
- windowlog_file = "Window LOGFILE set to $0";
- windowlog_file_logging = "Can't change window's logfile while log is on";
- no_away_msgs = "No new messages in awaylog";
- away_msgs = "{hilight $1} new messages in awaylog:";
- module_header = "%#Module Type Submodules";
- module_line = "%#$[!20]0 $[7]1 $2";
- module_footer = "";
- module_already_loaded = "Module {hilight $0/$1} already loaded";
- module_not_loaded = "Module {hilight $0/$1} is not loaded";
- module_load_error = "Error loading module {hilight $0/$1}: $2";
- module_version_mismatch = "{hilight $0/$1} is ABI version $2 but Irssi is version $abiversion, cannot load";
- module_invalid = "{hilight $0/$1} isn't Irssi module";
- module_loaded = "Loaded module {hilight $0/$1}";
- module_unloaded = "Unloaded module {hilight $0/$1}";
- command_unknown = "Unknown command: $0";
- command_ambiguous = "Ambiguous command: $0";
- option_unknown = "Unknown option: $0";
- option_ambiguous = "Ambiguous option: $0";
- option_missing_arg = "Missing required argument for: $0";
- not_enough_params = "Not enough parameters given";
- not_connected = "Not connected to server";
- not_joined = "Not joined to any channel";
- chan_not_found = "Not joined to such channel";
- chan_not_synced = "Channel not fully synchronized yet, try again after a while";
- illegal_proto = "Command isn't designed for the chat protocol of the active server";
- not_good_idea = "Doing this is not a good idea. Add -YES option to command if you really mean it";
- invalid_number = "Invalid number";
- invalid_time = "Invalid timestamp";
- invalid_level = "Invalid message level";
- invalid_size = "Invalid size";
- invalid_charset = "Invalid charset: $0";
- invalid_choice = "Invalid choice, must be one of $0";
- eval_max_recurse = "/eval hit maximum recursion limit";
- program_not_found = "Could not find file or file is not executable";
- no_server_defined = "No servers defined for this network, see /help server for how to add one";
- theme_saved = "Theme saved to $0";
- theme_save_failed = "Error saving theme to $0: $1";
- theme_not_found = "Theme {hilight $0} not found";
- theme_changed = "Now using theme {hilight $0} ($1)";
- window_theme = "Using theme {hilight $0} in this window";
- window_theme_default = "No theme is set for this window";
- window_theme_changed = "Now using theme {hilight $0} ($1) in this window";
- window_theme_removed = "Removed theme from this window";
- format_title = "%:[{hilight $0}] - [{hilight $1}]%:";
- format_subtitle = "[{hilight $0}]";
- format_item = "$0 = $1";
- ignored = "Ignoring {hilight $1} from {nick $0}";
- ignored_options = "Ignoring {hilight $1} from {nick $0} {comment $2}";
- unignored = "Unignored {nick $0}";
- ignore_not_found = "{nick $0} is not being ignored";
- ignore_no_ignores = "There are no ignores";
- ignore_header = "%#Ignore List:";
- ignore_line = "%#$[-4]0 $1: $2 $3 $4";
- ignore_footer = "";
- not_channel_or_query = "The current window is not a channel or query window";
- conversion_added = "Added {hilight $0}/{hilight $1} to conversion database";
- conversion_removed = "Removed {hilight $0} from conversion database";
- conversion_not_found = "{hilight $0} not found in conversion database";
- conversion_no_translits = "Transliterations not supported in this system";
- recode_header = "%#Target Character set";
- recode_line = "%#%|$[!30]0 $1";
- unknown_chat_protocol = "Unknown chat protocol: $0";
- unknown_chatnet = "Unknown chat network: $0 (create it with /NETWORK ADD)";
- not_toggle = "Value must be either ON, OFF or TOGGLE";
- perl_error = "Perl error: $0";
- bind_header = "%#Key Action";
- bind_list = "%#$[!20]0 $1 $2";
- bind_command_list = "$[!30]0 $1";
- bind_footer = "";
- bind_unknown_id = "Unknown bind action: $0";
- config_saved = "Saved configuration to file $0";
- config_reloaded = "Reloaded configuration";
- config_modified = "Configuration file was modified since irssi was last started - do you want to overwrite the possible changes?";
- glib_error = "{error $0} $1";
- overwrite_config = "Overwrite config (y/N)?";
- set_title = "[{hilight $0}]";
- set_item = "$[-!32]0 %_$1";
- set_unknown = "Unknown setting $0";
- set_not_boolean = "Setting {hilight $0} isn't boolean, use /SET";
- no_completions = "There are no completions";
- completion_removed = "Removed completion $0";
- completion_header = "%#Key Value Auto";
- completion_line = "%#$[10]0 $[!40]1 $2";
- completion_footer = "";
- capsicum_enabled = "Capability mode enabled";
- capsicum_disabled = "Capability mode not enabled";
- capsicum_failed = "Capability mode failed: $0";
- tls_ephemeral_key = "EDH Key: {hilight $0} bit {hilight $1}";
- tls_ephemeral_key_unavailable = "EDH Key: {error N/A}";
- tls_pubkey = "Public Key: {hilight $0} bit {hilight $1}, valid from {hilight $2} to {hilight $3}";
- tls_cert_header = "Certificate Chain:";
- tls_cert_subject = " Subject: {hilight $0}";
- tls_cert_issuer = " Issuer: {hilight $0}";
- tls_pubkey_fingerprint = "Public Key Fingerprint: {hilight $0} ({hilight $1})";
- tls_cert_fingerprint = "Certificate Fingerprint: {hilight $0} ({hilight $1})";
- tls_protocol_version = "Protocol: {hilight $0} ({hilight $1} bit, {hilight $2})";
- };
- "fe-common/irc/dcc" = {
- own_dcc = "{dccownmsg dcc {dccownnick $1}}$2";
- own_dcc_action = "{dccownaction_target $0 $1}$2";
- own_dcc_action_query = "{dccownaction $0}$2";
- own_dcc_ctcp = "{ownctcp ctcp $0}$1 $2";
- dcc_msg = "{dccmsg dcc $0}$1";
- action_dcc = "{dccaction $0}$1";
- action_dcc_query = "{dccaction $0}$1";
- own_dcc_query = "{ownmsgnick {dccownquerynick $0}}$2";
- dcc_msg_query = "{privmsgnick $0}$1";
- dcc_ctcp = "{dcc >>> DCC CTCP {hilight $1} received from {hilight $0}: $2}";
- dcc_chat = "{dcc DCC CHAT from {nick $0} [$1 port $2]}";
- dcc_chat_channel = "{dcc DCC CHAT from {nick $0} [$1 port $2] requested in channel {channel $3}}";
- dcc_chat_not_found = "{dcc No DCC CHAT connection open to {nick $0}}";
- dcc_chat_connected = "{dcc DCC CHAT connection with {nick $0} [$1 port $2] established}";
- dcc_chat_disconnected = "{dcc DCC lost chat to {nick $0}}";
- dcc_send = "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4]}";
- dcc_send_channel = "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] requested in channel {channel $5}}";
- dcc_send_exists = "{dcc DCC already sending file {dccfile $0} for {nick $1}}";
- dcc_send_no_route = "{dcc DCC route lost to nick {nick $0} when trying to send file {dccfile $1}}";
- dcc_send_not_found = "{dcc DCC not sending file {dccfile $1} to {nick $0}}";
- dcc_send_file_open_error = "{dcc DCC can't open file {dccfile $0}: $1}";
- dcc_send_connected = "{dcc DCC sending file {dccfile $0} for {nick $1} [$2 port $3]}";
- dcc_send_complete = "{dcc DCC sent file {dccfile $0} [{hilight $1}] for {nick $2} in {hilight $3} [{hilight $4kB/s}]}";
- dcc_send_aborted = "{dcc DCC aborted sending file {dccfile $0} for {nick $1}}";
- dcc_get_not_found = "{dcc DCC no file offered by {nick $0}}";
- dcc_get_connected = "{dcc DCC receiving file {dccfile $0} from {nick $1} [$2 port $3]}";
- dcc_get_complete = "{dcc DCC received file {dccfile $0} [$1] from {nick $2} in {hilight $3} [$4kB/s]}";
- dcc_get_aborted = "{dcc DCC aborted receiving file {dccfile $0} from {nick $1}}";
- dcc_get_write_error = "{dcc DCC error writing to file {dccfile $0}: {comment $1}";
- dcc_unknown_ctcp = "{dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}";
- dcc_unknown_reply = "{dcc DCC unknown reply {hilight $0} from {nick $1} [$2]}";
- dcc_unknown_type = "{dcc DCC unknown type {hilight $0}}";
- dcc_invalid_ctcp = "{dcc DCC received CTCP {hilight $0} with invalid parameters from {nick $1}}";
- dcc_connect_error = "{dcc DCC can't connect to {hilight $0} port {hilight $1}}";
- dcc_cant_create = "{dcc DCC can't create file {dccfile $0}: $1}";
- dcc_rejected = "{dcc DCC $0 was rejected by {nick $1} [{hilight $2}]}";
- dcc_request_send = "{dcc DCC $0 request sent to {nick $1}: $2";
- dcc_close = "{dcc DCC $0 close for {nick $1} [{hilight $2}]}";
- dcc_lowport = "{dcc Warning: Port sent with DCC request is a lowport ({hilight $0, $1}) - this isn't normal. It is possible the address/port is faked (or maybe someone is just trying to bypass firewall)}";
- dcc_list_header = "{dcc DCC connections}";
- dcc_list_line_chat = "{dcc $0 $1}";
- dcc_list_line_file = "{dcc $0 $1: %|$2 of $3 ($4%%) - $5kB/s - ETA $7 - $6}";
- dcc_list_line_queued_send = "{dcc - $0 $2 (queued)}";
- dcc_list_footer = "";
- dcc_list_line_server = "{dcc $0: Port($1) - Send($2) - Chat($3) - Fserve($4)}";
- dcc_server_started = "{dcc DCC SERVER started on port {hilight $0}}";
- dcc_server_closed = "{dcc DCC SERVER on port {hilight $0} closed}";
- };
- "fe-common/irc" = {
- netsplit = "{netsplit Netsplit} {server $0} <-> {server $1} quits: $2";
- netsplit_more = "{netsplit Netsplit} {server $0} <-> {server $1} quits: $2 (+$3 more, use /NETSPLIT to show all of them)";
- netsplit_join = "{netjoin Netsplit} over, joins: $0";
- netsplit_join_more = "{netjoin Netsplit} over, joins: $0 (+$1 more)";
- no_netsplits = "There are no net splits";
- netsplits_header = "%#Nick Channel Server Split server";
- netsplits_line = "%#$[9]0 $[10]1 $[20]2 $3";
- netsplits_footer = "";
- network_added = "Network $0 saved";
- network_removed = "Network $0 removed";
- network_not_found = "Network $0 not found";
- network_header = "%#Networks:";
- network_line = "%#$0: $1";
- network_footer = "";
- setupserver_header = "%#Server Port Network Settings";
- setupserver_line = "%#%|$[!20]0 $[5]1 $[10]2 $3";
- setupserver_footer = "";
- sasl_success = "SASL authentication succeeded";
- sasl_error = "Cannot authenticate via SASL ($0)";
- cap_req = "Capabilities requested: $0";
- cap_ls = "Capabilities supported: $0";
- cap_ack = "Capabilities acknowledged: $0";
- cap_nak = "Capabilities refused: $0";
- cap_list = "Capabilities currently enabled: $0";
- cap_new = "Capabilities now available: $0";
- cap_del = "Capabilities removed: $0";
- joinerror_toomany = "Cannot join to channel {channel $0} (You have joined to too many channels)";
- joinerror_full = "Cannot join to channel {channel $0} (Channel is full)";
- joinerror_invite = "Cannot join to channel {channel $0} (You must be invited)";
- joinerror_banned = "Cannot join to channel {channel $0} (You are banned)";
- joinerror_bad_key = "Cannot join to channel {channel $0} (Bad channel key)";
- joinerror_bad_mask = "Cannot join to channel {channel $0} (Bad channel mask)";
- joinerror_unavail = "Cannot join to channel {channel $0} (Channel is temporarily unavailable)";
- joinerror_duplicate = "Channel {channel $0} already exists - cannot create it";
- channel_rejoin = "Channel {channel $0} is temporarily unavailable, this is normally because of netsplits. Irssi will now automatically try to rejoin back to this channel until the join is successful. Use /RMREJOINS command if you wish to abort this.";
- inviting = "Inviting {nick $0} to {channel $1}";
- channel_created = "Channel {channelhilight $0} created $1";
- url = "Home page for {channelhilight $0}: $1";
- topic = "Topic for {channelhilight $0}: $1";
- no_topic = "No topic set for {channelhilight $0}";
- topic_info = "Topic set by {nick $0} {nickhost $2} {comment $1}";
- chanmode_change = "mode/{channelhilight $0} {mode $1} by {nick $2}";
- server_chanmode_change = "{netsplit ServerMode}/{channelhilight $0} {mode $1} by {nick $2}";
- channel_mode = "mode/{channelhilight $0} {mode $1}";
- bantype = "Ban type changed to {channel $0}";
- no_bans = "No bans in channel {channel $0}";
- banlist = "$0 - {channel $1}: ban {ban $2}";
- banlist_long = "$0 - {channel $1}: ban {ban $2} {comment by {nick $3}, $4 secs ago}";
- ebanlist = "{channel $0}: ban exception {ban $1}";
- ebanlist_long = "{channel $0}: ban exception {ban $1} {comment by {nick $2}, $3 secs ago}";
- no_invitelist = "Invite list is empty in channel {channel $0}";
- invitelist = "{channel $0}: invite {ban $1}";
- invitelist_long = "{channel $0}: invite {ban $1} {comment by {nick $2}, $3 secs ago}";
- no_such_channel = "{channel $0}: No such channel";
- channel_synced = "Join to {channel $0} was synced in {hilight $1} secs";
- usermode_change = "Mode change {mode $0} for user {nick $1}";
- user_mode = "Your user mode is {mode $0}";
- away = "You have been marked as being away";
- unaway = "You are no longer marked as being away";
- nick_away = "{nick $0} is away: $1";
- no_such_nick = "{nick $0}: No such nick/channel";
- nick_in_use = "Nick {nick $0} is already in use";
- nick_unavailable = "Nick {nick $0} is temporarily unavailable";
- your_nick_owned = "Your nick is owned by {nick $3} {comment $1@$2}";
- whois = "{nick $0} {nickhost $1@$2}%:{whois ircname $3}";
- whowas = "{nick $0} {nickhost $1@$2}%:{whois was $3}";
- whois_idle = "{whois idle %|$1 days $2 hours $3 mins $4 secs}";
- whois_idle_signon = "{whois idle %|$1 days $2 hours $3 mins $4 secs {comment signon: $5}}";
- whois_server = "{whois server %|$1 {comment $2}}";
- whois_oper = "{whois {hilight $1}}";
- whois_modes = "{whois modes $1}";
- whois_realhost = "{whois hostname $1-}";
- whois_usermode = "{whois usermode $1}";
- whois_channels = "{whois channels %|$1}";
- whois_away = "{whois away %|$1}";
- whois_special = "{whois %|$1}";
- whois_extra = "{whois account %|$1}";
- end_of_whois = "End of WHOIS";
- end_of_whowas = "End of WHOWAS";
- whois_not_found = "There is no such nick $0";
- who = "%#{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}";
- end_of_who = "End of /WHO list";
- own_notice = "{ownnotice notice $0}$1";
- own_action = "{ownaction $0}$1";
- own_action_target = "{ownaction_target $0 $2}$1";
- own_ctcp = "{ownctcp ctcp $0}$1 $2";
- notice_server = "{servernotice $0}$1";
- notice_public = "{notice $0{pubnotice_channel $1}}$2";
- notice_private = "{notice $0{pvtnotice_host $1}}$2";
- action_private = "{pvtaction $0}$2";
- action_private_query = "{pvtaction_query $0}$2";
- action_public = "{pubaction $0}$1";
- action_public_channel = "{pubaction $0{msgchannel $1}}$2";
- ctcp_reply = "CTCP {hilight $0} reply from {nick $1}: $2";
- ctcp_reply_channel = "CTCP {hilight $0} reply from {nick $1} in channel {channel $3}: $2";
- ctcp_ping_reply = "CTCP {hilight PING} reply from {nick $0}: $1.$[-3.0]2 seconds";
- ctcp_requested = "{ctcp {hilight $0} {comment $1} requested CTCP {hilight $2} from {nick $4}}: $3";
- ctcp_requested_unknown = "{ctcp {hilight $0} {comment $1} requested unknown CTCP {hilight $2} from {nick $4}}: $3";
- online = "Users online: {hilight $0}";
- pong = "PONG received from $0: $1";
- wallops = "{wallop WALLOP {wallop_nick $0}} $1";
- action_wallops = "{wallop WALLOP {wallop_action $0}} $1";
- kill = "You were {error killed} by {nick $0} {nickhost $1} {reason $2} {comment Path: $3}";
- kill_server = "You were {error killed} by {server $0} {reason $1} {comment Path: $2}";
- error = "{error ERROR} $0";
- unknown_mode = "Unknown mode character $0";
- default_event = "$1";
- default_event_server = "[$0] $1";
- silenced = "Silenced {nick $0}";
- unsilenced = "Unsilenced {nick $0}";
- silence_line = "{nick $0}: silence {ban $1}";
- ask_oper_pass = "Operator password:";
- accept_list = "Accepted users: {hilight $0}";
- };
- "fe-common/perl" = {
- script_not_found = "Script {hilight $0} not found";
- script_not_loaded = "Script {hilight $0} is not loaded";
- script_loaded = "Loaded script {hilight $0}";
- script_unloaded = "Unloaded script {hilight $0}";
- no_scripts_loaded = "No scripts are loaded";
- script_list_header = "%#Loaded scripts:";
- script_list_line = "%#$[!15]0 $1";
- script_list_footer = "";
- script_error = "{error Error in script {hilight $0}:}";
- };
- "Irssi::Script::ctcpspoof" = {
- fctcp_info = " # ctcpitem ctcpreply";
- fctcp_empty = "%R>>%n %_FCTCP:%_ Your fake ctcp list is empty.";
- fctcp_added = "%R>>%n %_FCTCP:%_ Added %_$0%_ ($1) to the fake ctcp list.";
- fctcp_replaced = "%R>>%n %_FCTCP:%_ Replaced the old fake reply %_$0%_ with the new one ($1)";
- fctcp_delled = "%R>>%n %_FCTCP:%_ Deleted %_$0%_ from the fake ctcp list.";
- fctcp_nfound = "%R>>%n %_FCTCP:%_ Can't find $0 in the fake ctcp list.";
- fctcp_delusage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -del <ctcp-item>";
- fctcp_usage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -add <ctcp-item> <ctcp-reply>";
- fctcp_repusage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -replace <ctcp-item> <ctcp-reply>";
- fctcp_nload = "%R>>%n %_FCTCP:%_ Could not load the fake ctcp list.";
- fctcp_request = "%R>>%n %_FCTCP:%_ Used the fake reply %_$1%_ on %_$0%_";
- fctcp_loaded = "%R>>%n %_FCTCP:%_ The fake reply %_$0%_ already exists, use %_/FCTCP -del $0%_ to remove it from the list.";
- fctcp_print = "$[!-2]0 $[20]1 $2";
- fctcp_help = "$0";
- loaded = "%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.";
- };
- "Irssi::Script::tmux_away" = {
- tmux_away_crap = "{line_start}{hilight tmux_away:} $0";
- };
- "Irssi::Script::ascii" = {
- ascii_not_connected = "%_$0:%_ You're not connected to server";
- ascii_not_window = "%_$0:%_ Not joined to any channel or query window";
- ascii_not_chanwindow = "%_$0:%_ Not joined to any channel";
- ascii_not_chanop = "%_$0:%_ You're not channel operator in {hilight $1}";
- ascii_figlet_notfound = "%_Ascii:%_ Cannot execute {hilight $0} - file not found or bad permissions";
- ascii_figlet_notset = "%_Ascii:%_ Cannot find external program %_figlet%_, usign /SET ascii_figlet_path [path], to set it";
- ascii_cmd_syntax = "%_$0:%_ $1, usage: $2";
- ascii_figlet_error = "%_Ascii: Figlet returns error:%_ $0-";
- ascii_fontlist = "%_Ascii:%_ Available fonts [in $0]: $1 ($2)";
- ascii_empty_fontlist = "%_Ascii:%_ Cannot find figlet fonts in $0";
- ascii_unknown_fontdir = "%_Ascii:%_ Cannot find figlet fontdir";
- ascii_show_line = "$0-";
- };
- "Irssi::Script::trackbar" = {
- trackbar_loaded = "%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.";
- trackbar_wrong_version = "%R>>%n %_Trackbar:%_ Please upgrade your client to 0.8.17 or above if you would like to use this feature of trackbar.";
- trackbar_all_removed = "%R>>%n %_Trackbar:%_ All the trackbars have been removed.";
- trackbar_not_found = "%R>>%n %_Trackbar:%_ No trackbar found in this window.";
- };
- "Irssi::Script::adv_windowlist" = {
- awl_display_nokey = "$N${cumode_space}$H$C$S";
- awl_display_key = "$Q${cumode_space}$H$C$S";
- awl_display_nokey_visible = "%2$N${cumode_space}$H$C$S";
- awl_display_key_visible = "%2$Q${cumode_space}$H$C$S";
- awl_display_nokey_active = "%1$N${cumode_space}$H$C$S";
- awl_display_key_active = "%1$Q${cumode_space}$H$C$S";
- awl_display_header = "%8$C|${N}";
- awl_name_display = "$0";
- awl_separator = " ";
- awl_separator2 = "";
- awl_abbrev_chars = "~〜";
- awl_viewer_item_bg = "%0";
- awl_title = "\\Vawl\\:";
- };
- "Irssi::Script::trigger" = {
- trigger_header = "Triggers:";
- trigger_line = "%#$[-4]0 $1";
- trigger_added = "Trigger $0 added: $1";
- trigger_not_found = "Trigger {hilight $0} not found";
- trigger_saved = "Triggers saved to $0";
- trigger_loaded = "Triggers loaded from $0";
- };
- "fe-text" = {
- lastlog_too_long = "/LASTLOG would print $0 lines. If you really want to print all these lines use -force option.";
- lastlog_count = "{hilight Lastlog}: $0 lines";
- lastlog_start = "{hilight Lastlog}:";
- lastlog_end = "{hilight End of Lastlog}";
- lastlog_separator = "--";
- lastlog_date = "%%F ";
- refnum_not_found = "Window number $0 not found";
- window_too_small = "Not enough room to resize this window";
- cant_hide_last = "You can't hide the last window";
- cant_hide_sticky_windows = "You can't hide sticky windows (use /SET autounstick_windows ON)";
- cant_show_sticky_windows = "You can't show sticky windows (use /SET autounstick_windows ON)";
- window_not_sticky = "Window is not sticky";
- window_set_sticky = "Window set sticky";
- window_unset_sticky = "Window is not sticky anymore";
- window_info_sticky = "%#Sticky : $0";
- window_info_scroll = "%#Scroll : $0";
- window_scroll = "Window scroll mode is now $0";
- window_scroll_unknown = "Unknown scroll mode $0, must be ON, OFF or DEFAULT";
- window_hidelevel = "Window hidden level is now $0";
- statusbar_list_header = "%#Name Type Placement Position Visible";
- statusbar_list_footer = "";
- statusbar_list = "%#$[30]0 $[6]1 $[9]2 $[8]3 $4";
- statusbar_info_name = "%#Statusbar: {hilight $0}";
- statusbar_info_type = "%#Type : $0";
- statusbar_info_placement = "%#Placement: $0";
- statusbar_info_position = "%#Position : $0";
- statusbar_info_visible = "%#Visible : $0";
- statusbar_info_item_header = "%#Items : Name Priority Alignment";
- statusbar_info_item_footer = "";
- statusbar_info_item_name = "%# : $[35]0 $[9]1 $2";
- statusbar_not_found = "Statusbar is disabled: $0";
- statusbar_item_not_found = "Statusbar item doesn't exist: $0";
- statusbar_unknown_command = "Unknown statusbar command: $0";
- statusbar_unknown_type = "Statusbar type must be 'window' or 'root'";
- statusbar_unknown_placement = "Statusbar placement must be 'top' or 'bottom'";
- statusbar_unknown_visibility = "Statusbar visibility must be 'always', 'active' or 'inactive'";
- paste_warning = "Pasting $0 lines to $1. Press Ctrl-K if you wish to do this or Ctrl-C to cancel.";
- paste_prompt = "Hit Ctrl-K to paste, Ctrl-C to abort?";
- irssi_banner = " ___ _%:|_ _|_ _ _____(_)%: | || '_(_-<_-< |%:|___|_| /__/__/_|%:Irssi v$J - https://irssi.org";
- welcome_firsttime = "- - - - - - - - - - - - - - - - - - - - - - - - - - - -\012Hi there! If this is your first time using Irssi, you%:might want to go to our website and read the startup%:documentation to get you going.%:%:Our community and staff are available to assist you or%:to answer any questions you may have.%:%:Use the /HELP command to get detailed information about%:the available commands.%:%:For Debian specific help type \"/connect OFTC\" and%:\"/join #debian\" (without the quotes) and ask your%:question.%:- - - - - - - - - - - - - - - - - - - - - - - - - - - -";
- welcome_init_settings = "The following settings were initialized";
- };
- "Irssi::Script::keepnick" = {
- keepnick_crap = "{line_start}{hilight Keepnick:} $0";
- keepnick_add = "{line_start}{hilight Keepnick:} Now keeping {nick $0} on [$1]";
- keepnick_remove = "{line_start}{hilight Keepnick:} Stopped trying to keep {nick $0} on [$1]";
- keepnick_hold = "{line_start}{hilight Keepnick:} Nickkeeping deactivated on [$1]";
- keepnick_unhold = "{line_start}{hilight Keepnick:} Nickkeeping reactivated on [$1]";
- keepnick_list_empty = "{line_start}{hilight Keepnick:} No nicks in keep list";
- keepnick_list_header = "";
- keepnick_list_line = "{line_start}{hilight Keepnick:} Keeping {nick $0} in [$1] ($2)";
- keepnick_list_footer = "";
- keepnick_got_nick = "{hilight Keepnick:} Nickstealer left [$1], got {nick $0} back";
- };
- "Irssi::Script::nm2" = {
- neat_style = " , , p , , c , t , , , ";
- neat_action_style = " , p , , t , ";
- neat_pad_char = "%K.";
- neat_truncate_char = "%m+";
- neat_notruncate_char = "";
- neat_custom_modes = "&%B&%n | @%g@%n | +%y+%n";
- };
-};
diff --git a/.config/irssi/fctcplist b/.config/irssi/fctcplist
@@ -1,9 +0,0 @@
-time Time to get a watch
-hitthisoneifyouareaflooder fuck off
-away I dunno - might be away, might not be... you know, these aren't programmable they're just a string, heheheh
-ping ~1958345676742784768726452647
-whoami Why would I know?
-fuckoff no you
-advert Server: irc.hlirc.net, port: 6667, 6697
-version Something better than what you have
-clientinfo PING VERSION TIME CLIENTINFO WHOAMI ADVERT AWAY FUCKOFF
diff --git a/.config/irssi/keepnick b/.config/irssi/keepnick
@@ -1,11 +0,0 @@
-cyberia hhvn
-dataswamp hhvn
-efnet hhvn
-freenode fr3en0de
-genoce hhvn
-hlircnet hhvn
-nebulacentre hhvn
-rizon hhvn
-sdf hhvn
-unix hhvn
-unrealircd hhvn
diff --git a/.config/irssi/log2ansi.pl b/.config/irssi/log2ansi.pl
@@ -1,412 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright (C) 2002-2019 by Peder Stray <peder.stray@gmail.com>
-#
-# This is a standalone perl program and not intended to run within
-# irssi, it will complain if you try to...
-
-use strict;
-use Getopt::Long;
-use Encode;
-use Pod::Usage;
-
-use vars qw(%ansi %base %attr %old);
-use vars qw(@bols @nums @mirc @irssi @mc @mh @ic @ih @cn);
-use vars qw($class $oldclass);
-
-use vars qw{$VERSION %IRSSI};
-($VERSION) = '$Revision: 1.10 $' =~ / (\d+\.\d+) /;
-%IRSSI = (
- name => 'log2ansi',
- authors => 'Peder Stray',
- contact => 'peder.stray@gmail.com',
- url => 'https://github.com/pstray/irssi-log2ansi',
- license => 'GPL',
- description => 'Convert various color codes to ANSI colors, useful for log filtering and viewing.',
- );
-
-if (__PACKAGE__ =~ /^Irssi/) {
- # we are within irssi... die!
- Irssi::print("%RWarning:%n log2ansi should not run from within irssi");
- die "Suicide to prevent loading\n";
-}
-
-my $opt_clear = 0;
-my $opt_html = 0;
-my $opt_utf8 = 0;
-my $opt_help = 0;
-
-GetOptions(
- 'c|clear!' => \$opt_clear,
- 'h|html!' => \$opt_html,
- 'u|utf8!' => \$opt_utf8,
- 'help' => sub { $opt_help = 1 },
- 'full-help' => sub { $opt_help = 2 },
- ) or pod2usage(2);
-
-# show some help if stdin is a tty and no files
-$opt_help = 1 if !$opt_help && -t 0 && !@ARGV;
-
-pod2usage(-verbose => $opt_help,
- -exitval => 0,
- ) if $opt_help;
-
-for (@ARGV) {
- if (/\.xz$/) {
- $_ = "unxz < '$_' |";
- }
- elsif (/\.bz2$/) {
- $_ = "bunzip2 < '$_' |";
- }
- elsif (/\.gz$/) {
- $_ = "gunzip < '$_' |";
- }
- elsif (/\.lzma$/) {
- $_ = "unlzma < '$_' |";
- }
-}
-
-my($n) = 0;
-%ansi = map { $_ => $n++ } split //, 'krgybmcw';
-
-@bols = qw(bold underline blink reverse fgh bgh);
-@nums = qw(fgc bgc);
-
-@base{@bols} = qw(1 4 5 7 1 5);
-@base{@nums} = qw(30 40);
-
-@mirc = split //, 'WkbgRrmyYGcCBMKw';
-@irssi = split //, 'kbgcrmywKBGCRMYW';
-
-@mc = map {$ansi{lc $_}} @mirc;
-@mh = map {$_ eq uc $_} @mirc;
-
-@ic = map {$ansi{lc $_}} @irssi;
-@ih = map {$_ eq uc $_} @irssi;
-
-@cn = qw(black dr dg dy db dm dc lgray dgray lr lg ly lb lm lc white);
-
-sub defc {
- my($attr) = shift || \%attr;
- $attr->{fgc} = $attr->{bgc} = -1;
- $attr->{fgh} = $attr->{bgh} = 0;
-}
-
-sub defm {
- my($attr) = shift || \%attr;
- $attr->{bold} = $attr->{underline} =
- $attr->{blink} = $attr->{reverse} = 0;
-}
-
-sub def {
- my($attr) = shift || \%attr;
- defc($attr);
- defm($attr);
-}
-
-sub setold {
- %old = %attr;
-}
-
-sub emit {
- my($str) = @_;
- my(%elem,@elem);
-
- if ($opt_clear) {
- # do nothing
- }
- else {
-
- if ($opt_html) {
- my %class;
-
- for (@bols) {
- $class{$_}++ if $attr{$_};
- }
-
- for (qw(fg bg)) {
- my $h = delete $class{"${_}h"};
- my $n = $attr{"${_}c"};
- next unless $n >= 0;
- $class{"$_$cn[$n + 8 * $h]"}++;
- }
-
- $class = join " ", sort keys %class;
-
- print qq{</span>} if $oldclass;
- print qq{<span class="$class">} if $class;
- $oldclass = $class;
- }
- else {
- my(@clear) = ( (grep { $old{$_} > $attr{$_} } @bols),
- (grep { $old{$_}>=0 && $attr{$_}<0 } @nums)
- );
-
- $elem{0}++ if @clear;
-
- for (@bols) {
- $elem{$base{$_}}++
- if $attr{$_} && ($old{$_} != $attr{$_} || $elem{0});
- }
-
- for (@nums) {
- $elem{$base{$_}+$attr{$_}}++
- if $attr{$_} >= 0 && ($old{$_} != $attr{$_} || $elem{0});
- }
-
- @elem = sort {$a<=>$b} keys %elem;
-
- if (@elem) {
- @elem = () if @elem == 1 && !$elem[0];
- printf "\e[%sm", join ";", @elem;
- }
- }
- }
-
- if ($opt_html) {
- for ($str) {
- s/&/&/g;
- s/</</g;
- s/>/>/g;
- }
- }
-
- print $str;
-
- setold;
-}
-
-if ($opt_html) {
- print qq{<div class="loglines">\n};
-}
-
-if ($opt_utf8) {
- binmode STDIN, ':bytes'; #encoding(cp1252)';
- binmode STDOUT, ':utf8';
-}
-
-while (<>) {
- if ($opt_utf8) {
- my $line;
- while (length) {
- $line .= decode("utf8", $_, Encode::FB_QUIET);
- $line .= substr $_, 0, 1, "";
- }
- $_ = $line;
- }
-
- chomp;
-
- def;
- setold;
-
- if ($opt_html) {
- printf qq{<div class="logline">};
- }
-
- while (length) {
- if (s/^\cB//) {
- # toggle bold
- $attr{bold} = !$attr{bold};
-
- } elsif (s/^\cC//) {
- # mirc colors
-
- if (/^[^\d,]/) {
- defc;
- } else {
-
- if (s/^(\d\d?)//) {
- $attr{fgc} = $mc[$1 % 16];
- $attr{fgh} = $mh[$1 % 16];
- }
-
- if (s/^,//) {
- if (s/^(\d\d?)//) {
- $attr{bgc} = $mc[$1 % 16];
- $attr{bgh} = $mh[$1 % 16];
- } else {
- $attr{bgc} = -1;
- $attr{bgh} = 0;
- }
- }
- }
-
- } elsif (s/^\cD//) {
- # irssi format
-
- if (s/^a//) {
- $attr{blink} = !$attr{blink};
- } elsif (s/^b//) {
- $attr{underline} = !$attr{underline};
- } elsif (s/^c//) {
- $attr{bold} = !$attr{bold};
- } elsif (s/^d//) {
- $attr{reverse} = !$attr{reverse};
- } elsif (s/^e//) {
- # indent
- } elsif (s/^f([^,]*),//) {
- # indent_func
- } elsif (s/^g//) {
- def;
- } elsif (s/^h//) {
- # cleol
- } elsif (s/^i//) {
- # monospace
- } else {
- s/^(.)(.)//;
- my($f,$b) = map { ord($_)-ord('0') } $1, $2;
- if ($f<0) {
-# $attr{fgc} = -1; $attr{fgh} = 0;
- } else {
- # c>7 => bold, c -= 8 if c>8
- $attr{fgc} = $ic[$f];
- $attr{fgh} = $ih[$f];
- }
- if ($b<0) {
-# $attr{bgc} = -1; $attr{bgh} = 0;
- } else {
- # c>7 => blink, c -= 8
- $attr{bgc} = $ic[$b];
- $attr{bgh} = $ih[$b];
- }
- }
-
- } elsif (s/^\cF//) {
- # blink
- $attr{blink} = !$attr{blink};
-
- } elsif (s/^\cO//) {
- def;
-
- } elsif (s/^\cV//) {
- $attr{reverse} = !$attr{reverse};
-
- } elsif (s/^\c[\[([^m]*)m//) {
- my(@ansi) = split ";", $1;
- my(%a);
-
- push @ansi, 0 unless @ansi;
-
- for my $code (@ansi) {
- if ($code == 0) {
- def(\%a);
- } elsif ($code == $base{bold}) {
- $a{bold} = 1;
- } elsif ($code == $base{underline}) {
- $a{underline} = 1;
- } elsif ($code == $base{blink}) {
- $a{underline} = 1;
- } elsif ($code == $base{reverse}) {
- $a{reverse} = 1;
- } elsif ($code => 30 && $code <= 37) {
- $a{fgc} = $code - 30;
- } elsif ($code => 40 && $code <= 47) {
- $a{bgc} = $code - 40;
- } else {
- $a{$code} = 1;
- }
- }
-
- if ($a{fgc} >= 0 && $a{bold}) {
- $a{fgh} = 1;
- $a{bold} = 0;
- }
-
- if ($a{bgc} >= 0 && $a{blink}) {
- $a{bgh} = 1;
- $a{blink} = 0;
- }
-
- for my $key (keys %a) {
- $attr{$key} = $a{$key};
- }
-
- } elsif (s/^\c_//) {
- $attr{underline} = !$attr{underline};
-
- } else {
- s/^(.[^\cB\cC\cD\cF\cO\cV\c[\c_]*)//;
- emit $1;
- }
- }
-
- def;
- emit "";
- if ($opt_html) {
- print "</div>";
- }
- print "\n";
-}
-
-if ($opt_html) {
- print "</div>\n";
-}
-
-__END__
-
-=head1 NAME
-
-log2ansi - Convert foo various color escape codes to ANSI (or strip them)
-
-=head1 SYNOPSIS
-
-B<log2ansi>
-[B<-c>|B<--clear>]
-[B<-h>|B<--html>]
-[B<-u>|B<--utf8>]
-[B<--help>]
-[I<logfile ...>]
-
-=head1 OPTIONS
-
-=over
-
-=item B<-c>, B<--clear>
-
-Instructs B<log2ansi> to clear all formatting and output plain text logs.
-
-=item B<-h>, B<--html>
-
-Instructs B<log2ansi> to output a HTML fragment instead of ANSI text.
-
-The whole log will be wrapped in a div with class C<loglines>, each line
-of the log in a div with class C<logline>. Colors are wrapped in spans,
-with a class name consisting of C<fg> or C<bg>, concatenated with the
-color name, either C<black> or C<white>, or C<r>, C<g>, C<b>, C<c>,
-C<m>, C<y>, or C<gray> prefixed with either C<l> for light, or C<d> for
-dark.
-
-You have to include appropriate CSS yourself to get any colors at all
-when viewing the log.
-
-=item B<-u>, B<--utf8>
-
-This forces output to be UTF-8, and does input decoding of UTF-8 with
-fallback to ISO-8859-1. Use this if your input logs have mixed UTF-8
-and ISO-8859-1.
-
-=item B<--help>, B<--full-help>
-
-Show help, either just option descriptions or a full man page.
-
-=back
-
-=head1 DESCRIPTION
-
-Use B<log2ansi> to convert logfiles from Irssi with internal escape
-codes, mIRC color codes or ANSI escapes to plain text with ANSI
-formatted color codes for viewing in a terminal.
-
-Use the B<--clear> option to strip all formatting escapes and output
-just plain text.
-
-You can supply input on standard input, or as filenames on the command
-line. Any file ending in B<.gz>, B<.bz2>, B<.xz> or B<.lzma> will be
-uncompressed automatically before processing.
-
-=head1 AUTHORS
-
- Peder Stray <peder.stray@gmail.com>
-
-=cut
diff --git a/.config/irssi/modules/libtheme_indent.so b/.config/irssi/modules/libtheme_indent.so
Binary files differ.
diff --git a/.config/irssi/pipeline.theme b/.config/irssi/pipeline.theme
@@ -1,705 +0,0 @@
-#!/bin/bash
-#
-# pipeline2
-#
-# Inspired by the original pipeline theme
-# Created by: Hayden Hamilton <hayden@haydenvh.com>
-# License: wtfpl
-
-replaces = { "/[]=" = "%K$*%n"; "*@+." = "%W$*%n"; };
-
-#replaces = { "!@+" = "%r$*%n"; };
-info_eol = "false";
-
-abstracts = {
- # abstracts that do not take arguments - only for replicating certain text
- line_start = "";
- timestamp = "%G%%H:%%M%b ";
- pad = " ";
-
- # usage agnostic text hilighting
- hilight = "%_$*%_";
- error = "%R$*%n";
- channel = "%_$*%_";
- server = "%R%_$*%_";
- comment = "%b$*%n";
- reason = "{comment $*}";
- mode = "%b$*%n";
- channelhilight = "%R$*%n";
- ban = "%r$*%n";
- msgchannel = "%b:$*%n";
- ownnick = "%y$*";
- dcc = "%b$*%n";
- dccfile = "%_$*%_";
-
- # kept for compatibility
- nick = "$*";
- nickhost = "$*";
- action = "{action_core $*} ";
-
- # hilighting with nickcolor-expando.pl
- pubnick = "%w$nickcolor$*";
- # constructs for basic message
- msgnick = "$0$1%K %_│%_%N ";
- himsg = "$0$1%M %_#%_%N ";
- nticenick = "$0$1%K %_:%_%N ";
- askctcp = "$0$1%K %_?%_%N%_ ";
- ansctcp = "$0$1%M %_A%_%N%_ ";
-
- # msgs
- ownmsgnick = "{msgnick $0 $1-}";
- pubmsgnick = "{msgnick $0 $1}";
- pubmsgmenick = "{himsg $0 $1}";
- ownprivmsgnick = "{msgnick $*}";
- privmsgnick = "{msgnick $*}";
- privmsg = "{himsg %R<---$0}$1}";
- ownprivmsg = "{msgnick %K--->$1}$2}";
- ownprivnick = "%W$0%n%w";
-
- # used internally for actions
- action_core = "{pad}%w*%w %K│ %_$0%_ $1";
- action_nsp = "%w*%w%_$0%_ $1";
-
- # actions
- pvaction = "%R<---{action_nsp $0 $1}";
- ownaction_target = "%K--->$1{action_nsp $0}";
-
- # notices
- ownnotice = "{nticenick %K--->$1}$2}";
- notice = " {nticenick $nickcolor$*}%N";
- servernotice = "%w!$*%n ";
-
- # CTCPs
- ownctcp = "{askctcp %K--->$0}$1";
- ctcp = "{ansctcp %R<---$1}$0:%_ $2-";
- rctcp = "{askctcp %R<---$0}$1";
-
- # wallops
- wallop = "%n[%WWALLOP%n] $*";
-
- # netsplits
- netsplit = "%GSplit: %N$0 %R<-> $1 %N%_Quits:%_ {nick $2} ($3 more)";
- netjoin = "%WSplit over: %N%_joins:%_ {nick $0} ($1 more)";
-
- # /names list
- names_nick = "%_$0%_$1 ";
- names_users = "%b$*%n:";
- names_channel = "%W$*%n";
-
- # I don't use dcc, someone else can figure this stuff out
- dccownmsg = "{ownprivmsg $*}";
- dccownnick = "{ownnick $*}";
- dccownaction = "{action_core $*}";
- dccownaction_target = "{action_core $0}%K:%b$1%n ";
- dccmsg = "[%W$1-%K(%b$0%K)%n] ";
- dccquerynick = "%W$*%n";
- dccaction = "%W (*dcc*) $*%n %|";
-
- # statusbar
- sb_background = "%N";
- isbstart = "%N";
- opered = " (ircop: $*)";
- sb = "%N%K%_──[%_%G$*%K]";
- sb2 = "%m[%G$*%m]%n";
- sb3 = "%N%K%_[%_%G$*%K]";
- sb_awl = "$*";
- sbmode = " %b+%G$*";
- sbaway = " (away: $*)";
- sbservertag = "$0";
- sbmore = "%_+more+%_";
- sblag = "{sb L: %W$*}";
- sbmail = "{sb M: $*}";
- sbact_det = " D: $*";
- sb_usercount = "{sb %W$0%n $1-}";
- sb_uc_ircops = "%_.*%_%G/%G$*%n";
- sb_uc_ops = "%_.@%_%G/%G$*%n";
- sb_uc_halfops = "%_.=%_%G/%g$*%n";
- sb_uc_voices = "%_.+%_%G/%Y$*%n";
- sb_uc_normal = "%_.%_%G/%W$*%n";
- sb_uc_space = " ";
- sb_act_hilight = "%M%_X%_%N$*";
- sb_act_hilight_color = "%M%%%N$*";
- sb_act_sep = "%N$*";
- sb_act_text = "%c-%N$*";
- sb_act_msg = "%W*%N$*";
- sb_act_none = " $*";
- sb_topic = "%0$* ";
-
- # other
- whois_begin = ".-WHOIS----.--------------------------------->";
- whois = "| $[8]0 : $1-";
- whowas_begin = "|-WHOWAS---:-------------------------->";
- who___end = "'----------'-------------------------->";
- # keepnick
- keepnick = "{line_start} {hilight Keepnick} %K│%N $*";
-
- # indent (https://github.com/irssi-import/modules/blob/master/theme-indent.c)
- indent_default = " {pad} %K│ ";
- level_hilight = " {pad} %M# ";
-};
-
-# %r%n%_$0%_$1%K |%n %|
-formats = {
- "fe-common/core" = {
- # excuse the ugly as hell formats here, blame nm2.pl
- pubmsg = "$nickalign{pubmsgnick %G$2 {pubnick $[.9]0}$nicktrunc}$1";
- join = "{pad}%_%W+ %K│ {pubnick %_$0%_}!$1";
- part = "{pad}%_%G-%_ %K│ {pubnick %_$0%_}!$1 {reason $3}";
- kick = "{pad}%_%G!%_ %K│ $0 %n%wby {pubnick $2}, {reason $3}, from $1";
- quit = "{pad}%_%G<%_ %K│ {pubnick %_$0%_}!$1 {reason $2}";
- own_msg = "$nickalign{ownmsgnick %G$2 {ownnick $[.10]0}$nicktrunc}$1";
- own_msg_channel = "$nickalign{ownmsgnick %G$3 {ownnick $[.10]0}$nicktrunc{msgchannel $1}}$2";
- pubmsg_me = "$nickalign{pubmsgmenick %G$2 {pubnick $[.9]0}$nicktrunc}$1";
- pubmsg_me_channel = "$nickalign{pubmsgmenick %G$3 {pubnick $[.9]0}$nicktrunc{msgchannel $1}}$2";
- pubmsg_hilight = "$nickalign{pubmsgmenick %G$3 {pubnick $[.9]1}$nicktrunc}$2";
- pubmsg_channel = "$nickalign{pubmsgnick %G$4 {pubnick $[.9]0}$nicktrunc{msgchannel $1}}$2";
-
- chanmode_change = " {$channel $1} {nick $2} %nsets mode %W{$mode $1}";
- channel_mode = " {$channel $0} {nick $2} %nsets mode %W{$mode $1}";
- nick_changed = "{pad} %K│ {pubnick $0}%w %_-->%_ $1";
-
- # names
- endofnames = "{channel $0}: {hilight $1} nicks ({comment @/{hilight $2} +/{hilight $3} -/{hilight $4}})";
-
- # random
- timestamp = "%G%%H:%%M%b ";
- line_start = "{line_start}";
- line_start_irssi = "{hilight}";
- servertag = "[$0] ";
- daychange = " {pad} %K│ %_----%_ %%d %%b %%Y %_----%_";
- talking_with = "You are now talking with {nick $0}";
-
- # windows
- refnum_too_low = "Window number must be greater than 1";
- error_server_sticky = "Window's server is sticky and it cannot be changed without -unsticky option";
- set_server_sticky = "Window's server set sticky";
- unset_server_sticky = "Window's server isn't sticky anymore";
- window_name_not_unique = "Window names must be unique";
- window_level = "Window level is now $0";
- window_set_immortal = "Window is now immortal";
- window_unset_immortal = "Window isn't immortal anymore";
- window_immortal_error = "Window is immortal, if you really want to close it, say /WINDOW IMMORTAL OFF";
- windows_layout_saved = "Layout of windows is now remembered";
- windows_layout_reset = "Layout of windows reset to defaults";
-
- windowlist_header = ",-Ref---Name-------------------Active item-------Server------------Level-------------------------------->";
- windowlist_line = "| $[3]0 | %|$[20]1 | $[15]2 | $[15]3 | $4";
- windowlist_footer = "'------------------------------------------------------------------------------------------------>";
-
- window_info_header = "";
- window_info_footer = "";
- window_info_refnum = "%#Window : {hilight #$0}";
- window_info_refnum_sticky = "%#Window : {hilight #$0 (sticky)}";
- window_info_name = "%#Name : $0";
- window_info_history = "%#History : $0";
- window_info_immortal = "%#Immortal: yes";
- window_info_size = "%#Size : $0x$1";
- window_info_level = "%#Level : $0";
- window_info_server = "%#Server : $0";
- window_info_server_sticky = "%#Server : $0 (sticky)";
- window_info_theme = "%#Theme : $0$1";
- window_info_bound_items_header = "%#Bounds : {hilight Name Server tag}";
- window_info_bound_item = "%# : $[!30]0 $[!15]1 $2";
- window_info_bound_items_footer = "";
- window_info_items_header = "%#Items : {hilight Name Server tag}";
- window_info_item = "%# $[7]0: $[!30]1 $2";
- window_info_items_footer = "";
-
- # servers
- looking_up = "Looking up {server $0}";
- connecting = "Connecting to {server $0} [$1] port {hilight $2} -- Remember: on irc nobody knows you're a dog";
- reconnecting = "Reconnecting to {server $0} [$1] port {hilight $2} - use /RMRECONNS to abort";
- connection_established = "Connection to {server $0} established";
- cant_connect = "Unable to connect server {server $0} port {hilight $1} {reason $2}";
- connection_lost = "Connection lost to {server $0}";
- lag_disconnected = "No PONG reply from server {server $0} in $1 seconds, disconnecting";
- disconnected = "Disconnected from {server $0} {reason $1}";
- server_quit = "Disconnecting from server {server $0}: {reason $1}";
- server_changed = "Changed to {hilight $2} server {server $1}";
- unknown_server_tag = "Unknown server tag {server $0}";
- no_connected_servers = "Not connected to any servers";
- server_reconnect_removed = "Removed reconnection to server {server $0} port {hilight $1}";
- server_reconnect_not_found = "Reconnection tag {server $0} not found";
- setupserver_added = "Server {server $0} saved";
- setupserver_removed = "Server {server $0} removed";
- setupserver_not_found = "Server {server $0} not found";
-
- server_list = "$[15]0 {server $[25]1} %b$[6]2 $[15]3";
- server_lookup_list = "$[15]0 {server $[25]1} %b$[6]2 $[15]3 (connecting...)";
- server_reconnect_list = "$[20]0 {server $[25]1} %b$[6]2 $[15]3 ($5 left before reconnecting)";
-
- your_nick = "Your nickname is {nick $0}";
- quit_once = "{channel $3} {channick $0} {chanhost $1} has quit {reason $2}";
- invite = "{nick $0} invites you to {channel $1}";
- not_invited = "You have not been invited to a channel!";
- new_topic = "{nick $0} changed the topic of {channel $1}: $2";
- topic_unset = "Topic unset by {nick $0} on {channel $1}";
- your_nick_changed = "{ownnick $0}%w %_-->%_ {ownnick $1}";
- talking_in = "You are now talking in {channel $0}";
- not_in_channels = "You are not on any channels";
- current_channel = "Current channel {channel $0}";
- names = "{names_users Users {names_channel $0}}";
- names_prefix = "%#{names_prefix $0}";
- names_nick_op = "{names_nick_op $0 $1}";
- names_nick_halfop = "{names_nick_halfop $0 $1}";
- names_nick_voice = "{names_nick_voice $0 $1}";
- names_nick = "{names_nick $0 $1}";
- chanlist_header = "";
- chanlist_line = "%#{channel $[-10]0} %|+$1 ($2): $3";
- chansetup_not_found = "Channel {channel $0} not found";
- chansetup_added = "Channel {channel $0} saved";
- chansetup_removed = "Channel {channel $0} removed";
- chansetup_header = "%#Channel Network Password Settings%:------------------------------------------------------";
- chansetup_line = "%#{channel $[15]0} | %|$[12]1 | $[10]2 | $3";
- chansetup_footer = "";
- own_msg_private = "{ownprivmsg {ownnick $N} {pubnick $0} $1}";
- own_msg_private_query = "{ownprivmsgnick {ownprivnick $2}}$1";
- pubmsg_hilight_channel = "$nickalign{pubmsgmenick %G$4 {pubnick $[.9]1$nicktrunc{msgchannel $2}}$3";
- msg_private = "{privmsg {pubnick $0}}$2";
- msg_private_query = "{privmsgnick $0}$2";
- no_msgs_got = "You have not received a message from anyone yet";
- no_msgs_sent = "You have not sent a message to anyone yet";
- query_start = "Starting query in {server $1} with {nick $0}";
- query_stop = "Closing query with {nick $0}";
- no_query = "No query with {nick $0}";
- query_server_changed = "Query with {nick $0} changed to server {server $1}";
- hilight_header = "%#Highlights:";
- hilight_line = "%#$[-4]0 $1 $2 $3$4";
- hilight_footer = "";
- hilight_not_found = "Highlight not found: $0";
- hilight_removed = "Highlight removed: $0";
-
- # alias'
- alias_added = "Alias $0 added";
- alias_removed = "Alias $0 removed";
- alias_not_found = "No such alias: $0";
-
- aliaslist_header = ",-Alias------,-Action------------------------------>";
- aliaslist_line = "| $[10]0 | $1";
- aliaslist_footer = "'------------'------------------------------>";
-
- # logging
- log_opened = "Log file {hilight $0} opened";
- log_closed = "Log file {hilight $0} closed";
- log_create_failed = "Couldn't create log file {hilight $0}: $1";
- log_locked = "Log file {hilight $0} is locked, probably by another running Irssi";
- log_not_open = "Log file {hilight $0} not open";
- log_started = "Started logging to file {hilight $0}";
- log_stopped = "Stopped logging to file {hilight $0}";
- log_list_header = ",-Path-----------------------------------------------,----Chan & net-----------------------,----Levels-------------->";
- log_list = "| $[50]1 | $[32]2 | $3$4$5";
- log_list_footer = "'------------------------------------------------------------------------------------------------------------>";
-
- windowlog_file = "Window LOGFILE set to $0";
- windowlog_file_logging = "Can't change window's logfile while log is on";
- no_away_msgs = "No new messages in awaylog";
- away_msgs = "{hilight $1} new messages in awaylog:";
- module_header = "%#Module Type Submodules";
- module_line = "%#$[!20]0 $[7]1 $2";
- module_footer = "";
- module_already_loaded = "Module {hilight $0/$1} already loaded";
- module_not_loaded = "Module {hilight $0/$1} is not loaded";
- module_load_error = "Error loading module {hilight $0/$1}: $2";
- module_version_mismatch = "{hilight $0/$1} is ABI version $2 but Irssi is version $abiversion, cannot load";
- module_invalid = "{hilight $0/$1} isn't Irssi module";
- module_loaded = "Loaded module {hilight $0/$1}";
- module_unloaded = "Unloaded module {hilight $0/$1}";
- command_unknown = "Unknown command: $0";
- command_ambiguous = "Ambiguous command: $0";
- option_unknown = "Unknown option: $0";
- option_ambiguous = "Ambiguous option: $0";
- option_missing_arg = "Missing required argument for: $0";
- not_enough_params = "Not enough parameters given";
- not_connected = "Not connected to server";
- not_joined = "Not joined to any channel";
- chan_not_found = "Not joined to such channel";
- chan_not_synced = "Channel not fully synchronized yet, try again after a while";
- illegal_proto = "Command isn't designed for the chat protocol of the active server";
- not_good_idea = "Doing this is not a good idea. Add -YES option to command if you really mean it";
- invalid_number = "Invalid number";
- invalid_time = "Invalid timestamp";
- invalid_level = "Invalid message level";
- invalid_size = "Invalid size";
- invalid_charset = "Invalid charset: $0";
- invalid_choice = "Invalid choice, must be one of $0";
- eval_max_recurse = "/eval hit maximum recursion limit";
- program_not_found = "Could not find file or file is not executable";
- no_server_defined = "No servers defined for this network, see /help server for how to add one";
- theme_saved = "Theme saved to $0";
- theme_save_failed = "Error saving theme to $0: $1";
- theme_not_found = "Theme {hilight $0} not found";
- theme_changed = "Now using theme {hilight $0} ($1)";
- window_theme = "Using theme {hilight $0} in this window";
- window_theme_default = "No theme is set for this window";
- window_theme_changed = "Now using theme {hilight $0} ($1) in this window";
- window_theme_removed = "Removed theme from this window";
- format_title = "%:[{hilight $0}] - [{hilight $1}]%:";
- format_subtitle = "[{hilight $0}]";
- format_item = "$0 = $1";
- ignored = "Ignoring {hilight $1} from {nick $0}";
- ignored_options = "Ignoring {hilight $1} from {nick $0} {comment $2}";
- unignored = "Unignored {nick $0}";
- ignore_not_found = "{nick $0} is not being ignored";
- ignore_no_ignores = "There are no ignores";
- ignore_header = "%#Ignore List:";
- ignore_line = "%#$[-4]0 $1: $2 $3 $4";
- ignore_footer = "";
- not_channel_or_query = "The current window is not a channel or query window";
- conversion_added = "Added {hilight $0}/{hilight $1} to conversion database";
- conversion_removed = "Removed {hilight $0} from conversion database";
- conversion_not_found = "{hilight $0} not found in conversion database";
- conversion_no_translits = "Transliterations not supported in this system";
- recode_header = "%#Target Character set";
- recode_line = "%#%|$[!30]0 $1";
- unknown_chat_protocol = "Unknown chat protocol: $0";
- unknown_chatnet = "Unknown chat network: $0 (create it with /NETWORK ADD)";
- not_toggle = "boolean - ON/OFF only";
- perl_error = "Perl error: $0";
- bind_header = "%#Key Action";
- bind_list = "%#$[!20]0 $1 $2";
- bind_command_list = "$[!30]0 $1";
- bind_footer = "";
- bind_unknown_id = "Unknown bind action: $0";
- config_saved = "Saved configuration to file $0";
- config_reloaded = "Reloaded configuration";
- config_modified = "Configuration file was modified since irssi was last started - do you want to overwrite the possible changes?";
- glib_error = "{error $0} $1";
- overwrite_config = "Overwrite config (y/N)?";
- set_title = "[{hilight $0}]";
- set_item = "$[-!32]0 %_$1";
- set_unknown = "Unknown setting $0";
- set_not_boolean = "Setting {hilight $0} isn't boolean, use /SET";
- no_completions = "There are no completions";
- completion_removed = "Removed completion $0";
- completion_header = "%#Key | Value | Auto%:--------------------------------------------------------------";
- completion_line = "%#$[10]0 | $[!40]1 | $2";
- completion_footer = "";
- capsicum_enabled = "Capability mode enabled";
- capsicum_disabled = "Capability mode not enabled";
- capsicum_failed = "Capability mode failed: $0";
- tls_ephemeral_key = "EDH Key: {hilight $0} bit {hilight $1}";
- tls_ephemeral_key_unavailable = "EDH Key: {error N/A}";
- tls_pubkey = "Public Key: {hilight $0} bit {hilight $1}, valid from {hilight $2} to {hilight $3}";
- tls_cert_header = "Certificate Chain:";
- tls_cert_subject = " Subject: {hilight $0}";
- tls_cert_issuer = " Issuer: {hilight $0}";
- tls_pubkey_fingerprint = "Public Key Fingerprint: {hilight $0} ({hilight $1})";
- tls_cert_fingerprint = "Certificate Fingerprint: {hilight $0} ({hilight $1})";
- tls_protocol_version = "Protocol: {hilight $0} ({hilight $1} bit, {hilight $2})";
- };
- "fe-common/text" = { window_info_sticky = "%# Sticky : $0"; };
- "fe-common/irc" = {
- chanmode_change = " {nick $2} %nsets mode %b{$mode $1} %non {$channelhilight $0}";
- whois = "{whois_begin}%:{whois nick %|{hilight $0}}%:{whois host %|$2}%:{whois ident $|$1}%:{whois comment %|$3}";
- server_chanmode_change = "%RServermode: {mode $1} by {server $2}";
- whois_server = "{whois server %|$1 ({comment $2})}";
- own_action = "{action_core {ownnick $0$nicktrunc}}$1";
- action_public = "{action_core {pubnick $0$nicktrunc}}$1";
- away = "%_%G----->";
- unaway = "%_%W<-----";
- end_of_whois = "{who___end}";
- whois_idle_signon = "{whois idle %|$1 days $2 hours $3 mins $4 secs}%:{whois signon %|$5}";
- whois_oper = "{whois oper %|$1}";
- whois_realhost = "{whois realhost %|$1-}";
- whois_special = "{whois info %|$1}";
- whois_extra = "{whois extra %|$1}";
- whois_not_found = "$0 doesn't exist";
- netsplit = "{netsplit {server $0} {server $1} $2 0}";
- netsplit_more = "{netsplit {server $0} {server $1} $2 $3}";
- netsplit_join = "{netjoin $0 0}";
- netsplit_join_more = "{netjoin Netsplit} over, joins: $0 (+$1 more)";
- no_netsplits = "There are no net splits";
- netsplits_header = "%#Nick Channel Server Split server";
- netsplits_line = "%#$[9]0 $[10]1 $[20]2 $3";
- netsplits_footer = "";
- network_added = "Network $0 saved";
- network_removed = "Network $0 removed";
- network_not_found = "Network $0 not found";
- network_header = "%#Networks:";
- network_line = "%#$0: $1";
- network_footer = "";
- setupserver_header = "%#Server Port Network Settings";
- setupserver_line = "%#%|$[!20]0 $[5]1 $[10]2 $3";
- setupserver_footer = "";
- sasl_success = "SASL authentication succeeded";
- sasl_error = "Cannot authenticate via SASL ($0)";
- cap_req = "Capabilities requested: $0";
- cap_ls = "Capabilities supported: $0";
- cap_ack = "Capabilities acknowledged: $0";
- cap_nak = "Capabilities refused: $0";
- cap_list = "Capabilities currently enabled: $0";
- cap_new = "Capabilities now available: $0";
- cap_del = "Capabilities removed: $0";
- joinerror_toomany = "Cannot join to channel {channel $0} (You have joined to too many channels)";
- joinerror_full = "Cannot join to channel {channel $0} (Channel is full)";
- joinerror_invite = "Cannot join to channel {channel $0} (You must be invited)";
- joinerror_banned = "Cannot join to channel {channel $0} (You are banned)";
- joinerror_bad_key = "Cannot join to channel {channel $0} (Bad channel key)";
- joinerror_bad_mask = "Cannot join to channel {channel $0} (Bad channel mask)";
- joinerror_unavail = "Cannot join to channel {channel $0} (Channel is temporarily unavailable)";
- joinerror_duplicate = "Channel {channel $0} already exists - cannot create it";
- channel_rejoin = "Channel {channel $0} is temporarily unavailable, this is normally because of netsplits. Irssi will now automatically try to rejoin back to this channel until the join is successful. Use /RMREJOINS command if you wish to abort this.";
- inviting = "Inviting {nick $0} to {channel $1}";
- channel_created = "Channel {channelhilight $0} created $1";
- url = "Home page for {channelhilight $0}: $1";
- topic = "Topic for {channelhilight $0}: $1";
- no_topic = "No topic set for {channelhilight $0}";
- topic_info = "Topic set by {pubnick $0} {nickhost $2} {comment $1}";
- channel_mode = "mode/{channelhilight $0} {mode $1}";
- bantype = "Ban type changed to {channel $0}";
- no_bans = "No bans in channel {channel $0}";
- banlist = "$0 - {channel $1}: ban {ban $2}";
- banlist_long = "$0 - {channel $1}: ban {ban $2} {comment by {nick $3}, $4 secs ago}";
- ebanlist = "{channel $0}: ban exception {ban $1}";
- ebanlist_long = "{channel $0}: ban exception {ban $1} {comment by {nick $2}, $3 secs ago}";
- no_invitelist = "Invite list is empty in channel {channel $0}";
- invitelist = "{channel $0}: invite {ban $1}";
- invitelist_long = "{channel $0}: invite {ban $1} {comment by {nick $2}, $3 secs ago}";
- no_such_channel = "{channel $0}: No such channel";
- channel_synced = "Join to {channel $0} was synced in {hilight $1} secs";
- usermode_change = "Mode change {mode $0} for user {nick $1}";
- user_mode = "Your user mode is {mode $0}";
- nick_away = "{nick $0} is away: $1";
- no_such_nick = "{nick $0}: No such nick/channel";
- nick_in_use = "Nick {nick $0} is already in use";
- nick_unavailable = "Nick {nick $0} is temporarily unavailable";
- your_nick_owned = "Your nick is owned by {nick $3} {comment $1@$2}";
- whowas = "{whowas_begin}%:{whois nick %|{hilight $0}}%:{whois host %|$2}%:{whois ident $|$1}%:{whois comment %|$3}";
- whois_idle = "{whois idle %|$1 days $2 hours $3 mins $4 secs}";
- whois_modes = "{whois modes $1}";
- whois_usermode = "{whois usermode $1}";
- whois_channels = "{whois channels %|$1}";
- whois_away = "{whois away %|$1}";
- end_of_whowas = "{who___end}";
- who = "%#{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}";
- end_of_who = "End of /WHO list";
- own_notice = "{ownnotice {ownnick $N} {pubnick $0}}$1";
- own_action_target = "{ownaction_target {ownnick $0} {pubnick $2}}$1";
- own_ctcp = "{ownctcp $0 $1}";
- notice_server = "{servernotice $0}$1";
- notice_public = "{notice $0}$2";
- notice_private = "{notice $0}$2";
- action_private = "{pvaction {pubnick $0}}$2";
- action_private_query = "{pvaction {pubnick $0}}$2";
- action_public_channel = "{action_core {pubnick $0}}$2";
- ctcp_reply = "{ctcp $0 {pubnick $1} $2}";
- ctcp_reply_channel = "{ctcp $0 {pubnick $1} $2}";
- ctcp_ping_reply = "{ctcp PING {pubnick $0} $1-}";
- ctcp_requested = "{rctcp {pubnick $0} $2}";
- ctcp_requested_unknown = "{rctcp {pubnick $0} $2}";
- online = "Users online: {hilight $0}";
- pong = "PONG received from $0: $1";
- wallops = "{wallop {pubnick $0} %K| $1}";
- action_wallops = "{wallop {action_core {pubnick $0}} $1}";
- kill = "You were {error killed} by {nick $0} {nickhost $1} {reason $2} {comment Path: $3}";
- kill_server = "You were {error killed} by {server $0} {reason $1} {comment Path: $2}";
- error = "{error ERROR} $0";
- unknown_mode = "Unknown mode character $0";
- default_event = "$1";
- default_event_server = "[$0] $1";
- silenced = "Silenced {nick $0}";
- unsilenced = "Unsilenced {nick $0}";
- silence_line = "{nick $0}: silence {ban $1}";
- ask_oper_pass = "Operator password:";
- accept_list = "Accepted users: {hilight $0}";
- };
- "Irssi::Script::adv_windowlist" = {
- awl_display_nokey = "%N$H$C$S %N$N";
- awl_display_key = "%N$H$C$S%N %mM-$Q";
- awl_display_nokey_active = "%N%K>%N$C %N$N";
- awl_display_key_active = "%N%K>%N$C %mM-$Q";
- awl_display_header = "%1 %Y$C (${N})";
- awl_display_nokey_visible = "%N%K<%N$C %N$N";
- awl_display_key_visible = "%N%K<%N$C %mM-$Q";
- awl_name_display = "$0";
- awl_separator = " ";
- awl_separator2 = "";
- awl_abbrev_chars = "~〜";
- awl_viewer_item_bg = "%0";
- awl_title = "\\Vawl\\:";
- };
- "fe-common/irc/notifylist" = {
- notify_join = "{nick $0} [$1@$2] [{hilight $3}] has joined to $4";
- notify_part = "{nick $0} has left $4";
- notify_away = "{nick $0} [$5] [$1@$2] [{hilight $3}] is now away: $4";
- notify_unaway = "{nick $0} [$4] [$1@$2] [{hilight $3}] is now unaway";
- notify_online = "On $0: {hilight $1}";
- notify_offline = "Offline: $0";
- notify_list = "$0: $1 $2";
- notify_list_empty = "The notify list is empty";
- };
- "fe-common/irc/dcc" = {
- own_dcc = "{dccownmsg dcc {dccownnick $1}}$2";
- own_dcc_action = "{dccownaction_target $0 $1}$2";
- own_dcc_action_query = "{dccownaction $0}$2";
- own_dcc_ctcp = "{ownctcp $0 $1}";
- dcc_msg = "{dccmsg dcc $0}$1";
- action_dcc = "{dccaction $0}$1";
- action_dcc_query = "{dccaction $0}$1";
- own_dcc_query = "{ownmsgnick {dccownquerynick $0}}$2";
- dcc_msg_query = "{privmsgnick $0}$1";
- dcc_ctcp = "{dcc >>> DCC CTCP {hilight $1} received from {hilight $0}: $2}";
- dcc_chat = "{dcc DCC CHAT from {nick $0} [$1 port $2]}";
- dcc_chat_channel = "{dcc DCC CHAT from {nick $0} [$1 port $2] requested in channel {channel $3}}";
- dcc_chat_not_found = "{dcc No DCC CHAT connection open to {nick $0}}";
- dcc_chat_connected = "{dcc DCC CHAT connection with {nick $0} [$1 port $2] established}";
- dcc_chat_disconnected = "{dcc DCC lost chat to {nick $0}}";
- dcc_send = "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4]}";
- dcc_send_channel = "{dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] requested in channel {channel $5}}";
- dcc_send_exists = "{dcc DCC already sending file {dccfile $0} for {nick $1}}";
- dcc_send_no_route = "{dcc DCC route lost to nick {nick $0} when trying to send file {dccfile $1}}";
- dcc_send_not_found = "{dcc DCC not sending file {dccfile $1} to {nick $0}}";
- dcc_send_file_open_error = "{dcc DCC can't open file {dccfile $0}: $1}";
- dcc_send_connected = "{dcc DCC sending file {dccfile $0} for {nick $1} [$2 port $3]}";
- dcc_send_complete = "{dcc DCC sent file {dccfile $0} [{hilight $1}] for {nick $2} in {hilight $3} [{hilight $4kB/s}]}";
- dcc_send_aborted = "{dcc DCC aborted sending file {dccfile $0} for {nick $1}}";
- dcc_get_not_found = "{dcc DCC no file offered by {nick $0}}";
- dcc_get_connected = "{dcc DCC receiving file {dccfile $0} from {nick $1} [$2 port $3]}";
- dcc_get_complete = "{dcc DCC received file {dccfile $0} [$1] from {nick $2} in {hilight $3} [$4kB/s]}";
- dcc_get_aborted = "{dcc DCC aborted receiving file {dccfile $0} from {nick $1}}";
- dcc_get_write_error = "{dcc DCC error writing to file {dccfile $0}: {comment $1}";
- dcc_unknown_ctcp = "{dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}";
- dcc_unknown_reply = "{dcc DCC unknown reply {hilight $0} from {nick $1} [$2]}";
- dcc_unknown_type = "{dcc DCC unknown type {hilight $0}}";
- dcc_invalid_ctcp = "{dcc DCC received CTCP {hilight $0} with invalid parameters from {nick $1}}";
- dcc_connect_error = "{dcc DCC can't connect to {hilight $0} port {hilight $1}}";
- dcc_cant_create = "{dcc DCC can't create file {dccfile $0}: $1}";
- dcc_rejected = "{dcc DCC $0 was rejected by {nick $1} [{hilight $2}]}";
- dcc_request_send = "{dcc DCC $0 request sent to {nick $1}: $2";
- dcc_close = "{dcc DCC $0 close for {nick $1} [{hilight $2}]}";
- dcc_lowport = "{dcc Warning: Port sent with DCC request is a lowport ({hilight $0, $1}) - this isn't normal. It is possible the address/port is faked (or maybe someone is just trying to bypass firewall)}";
- dcc_list_header = "{dcc DCC connections}";
- dcc_list_line_chat = "{dcc $0 $1}";
- dcc_list_line_file = "{dcc $0 $1: %|$2 of $3 ($4%%) - $5kB/s - ETA $7 - $6}";
- dcc_list_line_queued_send = "{dcc - $0 $2 (queued)}";
- dcc_list_footer = "";
- dcc_list_line_server = "{dcc $0: Port($1) - Send($2) - Chat($3) - Fserve($4)}";
- dcc_server_started = "{dcc DCC SERVER started on port {hilight $0}}";
- dcc_server_closed = "{dcc DCC SERVER on port {hilight $0} closed}";
- };
- "fe-common/perl" = {
- script_not_found = "Script {hilight $0} not found";
- script_not_loaded = "Script {hilight $0} is not loaded";
- script_loaded = "Loaded script {hilight $0}";
- script_unloaded = "Unloaded script {hilight $0}";
- no_scripts_loaded = "No scripts are loaded";
- script_list_header = ",-----------------Name-,-Location----------------------------------------->";
- script_list_line = "| $[-20]0 | $1";
- script_list_footer = "'----------------------'------------------------------------------->";
- script_error = "{error Error in script {hilight $0}:}";
- };
- "Irssi::Script::ascii" = {
- ascii_not_connected = "%_$0:%_ You're not connected to server";
- ascii_not_window = "%_$0:%_ Not joined to any channel or query window";
- ascii_not_chanwindow = "%_$0:%_ Not joined to any channel";
- ascii_not_chanop = "%_$0:%_ You're not channel operator in {hilight $1}";
- ascii_figlet_notfound = "%_Ascii:%_ Cannot execute {hilight $0} - file not found or bad permissions";
- ascii_figlet_notset = "%_Ascii:%_ Cannot find external program %_figlet%_, usign /SET ascii_figlet_path [path], to set it";
- ascii_cmd_syntax = "%_$0:%_ $1, usage: $2";
- ascii_figlet_error = "%_Ascii: Figlet returns error:%_ $0-";
- ascii_fontlist = "%_Ascii:%_ Available fonts [in $0]: $1 ($2)";
- ascii_empty_fontlist = "%_Ascii:%_ Cannot find figlet fonts in $0";
- ascii_unknown_fontdir = "%_Ascii:%_ Cannot find figlet fontdir";
- ascii_show_line = "$0-";
- };
- "Irssi::Script::trackbar" = {
- trackbar_loaded = "%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.";
- trackbar_wrong_version = "%R>>%n %_Trackbar:%_ Please upgrade your client to 0.8.17 or above if you would like to use this feature of trackbar.";
- trackbar_all_removed = "%R>>%n %_Trackbar:%_ All the trackbars have been removed.";
- trackbar_not_found = "%R>>%n %_Trackbar:%_ No trackbar found in this window.";
- };
- "Irssi::Script::trigger" = {
- trigger_header = "Triggers:";
- trigger_line = "%#$[-4]0 $1";
- trigger_added = "Trigger $0 added: $1";
- trigger_not_found = "Trigger {hilight $0} not found";
- trigger_saved = "Triggers saved to $0";
- trigger_loaded = "Triggers loaded from $0";
- };
- "fe-text" = {
- # lastlog
- lastlog_too_long = "/LASTLOG would print $0 lines. If you really want to print all these lines use -force option.";
- lastlog_count = "";
- lastlog_start = " %b---------LASTLOG--------------------------------->";
- lastlog_end = " %b--END OF LASTLOG-------------------------->";
- lastlog_separator = "--";
- lastlog_date = "%%F ";
-
- refnum_not_found = "Window number $0 not found";
- window_too_small = "Not enough room to resize this window";
- cant_hide_last = "You can't hide the last window";
- cant_hide_sticky_windows = "You can't hide sticky windows (use /SET autounstick_windows ON)";
- cant_show_sticky_windows = "You can't show sticky windows (use /SET autounstick_windows ON)";
- window_not_sticky = "Window is not sticky";
- window_set_sticky = "Window set sticky";
- window_unset_sticky = "Window is not sticky anymore";
- window_info_sticky = "%#Sticky : $0";
- window_info_scroll = "%#Scroll : $0";
- window_scroll = "Window scroll mode is now $0";
- window_scroll_unknown = "Unknown scroll mode $0, must be ON, OFF or DEFAULT";
- window_hidelevel = "Window hidden level is now $0";
-
- # statusbar
- statusbar_list_header = ",-Name---------------------------,-Type---,-Placement-,-Position-,-Visible-------------->";
- statusbar_list = "| $[30]0 | $[6]1 | $[9]2 | $[8]3 | $4";
- statusbar_list_footer = "'--------------------------------'--------'-----------'----------'--------------->";
-
- statusbar_info_name = "%#Statusbar: {hilight $0}";
- statusbar_info_type = "%#Type : $0";
- statusbar_info_placement = "%#Placement: $0";
- statusbar_info_position = "%#Position : $0";
- statusbar_info_visible = "%#Visible : $0";
- statusbar_info_item_header = "%#Items : Name Priority Alignment";
- statusbar_info_item_footer = "";
- statusbar_info_item_name = "%# : $[35]0 $[9]1 $2";
- statusbar_not_found = "Statusbar is disabled: $0";
- statusbar_item_not_found = "Statusbar item doesn't exist: $0";
- statusbar_unknown_command = "Unknown statusbar command: $0";
- statusbar_unknown_type = "Statusbar type must be 'window' or 'root'";
- statusbar_unknown_placement = "Statusbar placement must be 'top' or 'bottom'";
- statusbar_unknown_visibility = "Statusbar visibility must be 'always', 'active' or 'inactive'";
- paste_prompt = "%GPasting: %g{hilight ^Cancel ^Kontinue}";
- paste_warning = "";
- irssi_banner = " ";
- welcome_firsttime = " ";
- welcome_init_settings = "The following settings were initialized";
- };
- "Irssi::Script::ctcpspoof" = {
- fctcp_request = "{rctcp {pubnick $0} $1}";
- fctcp_info = " # ctcpitem ctcpreply";
- fctcp_empty = "%R>>%n %_FCTCP:%_ Your fake ctcp list is empty.";
- fctcp_added = "%R>>%n %_FCTCP:%_ Added %_$0%_ ($1) to the fake ctcp list.";
- fctcp_replaced = "%R>>%n %_FCTCP:%_ Replaced the old fake reply %_$0%_ with the new one ($1)";
- fctcp_delled = "%R>>%n %_FCTCP:%_ Deleted %_$0%_ from the fake ctcp list.";
- fctcp_nfound = "%R>>%n %_FCTCP:%_ Can't find $0 in the fake ctcp list.";
- fctcp_delusage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -del <ctcp-item>";
- fctcp_usage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -add <ctcp-item> <ctcp-reply>";
- fctcp_repusage = "%R>>%n %_FCTCP:%_ Usage: /FCTCP -replace <ctcp-item> <ctcp-reply>";
- fctcp_nload = "%R>>%n %_FCTCP:%_ Could not load the fake ctcp list.";
- fctcp_loaded = "%R>>%n %_FCTCP:%_ The fake reply %_$0%_ already exists, use %_/FCTCP -del $0%_ to remove it from the list.";
- fctcp_print = "$[!-2]0 $[20]1 $2";
- fctcp_help = "$0";
- loaded = "%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.";
- };
- "Irssi::Script::tmux_away" = { tmux_away_crap = "$0"; };
- "Irssi::Script::keepnick" = {
- keepnick_crap = "{line_start}{hilight Keepnick:} $0";
- keepnick_add = "{line_start}{hilight Keepnick:} Now keeping {nick $0} on [$1]";
- keepnick_remove = "{line_start}{hilight Keepnick:} Stopped trying to keep {nick $0} on [$1]";
- keepnick_hold = "{line_start}{hilight Keepnick:} Nickkeeping deactivated on [$1]";
- keepnick_unhold = "{line_start}{hilight Keepnick:} Nickkeeping reactivated on [$1]";
- keepnick_list_empty = "{line_start}{hilight Keepnick:} No nicks in keep list";
- keepnick_list_header = "";
- keepnick_list_line = "{line_start}{hilight Keepnick:} Keeping {nick $0} in [$1] ($2)";
- keepnick_list_footer = "";
- keepnick_got_nick = "{keepnick Nickstealer left [$1], got {nick $0} back}";
- };
- "Irssi::Script::nm2" = {
- neat_style = " , p , , , , , t , , ,";
- neat_action_style = " , p , , t , ";
- neat_pad_char = " ";
- neat_truncate_char = "%m+";
- neat_notruncate_char = "";
- neat_custom_modes = "&%W&%n | @%g@%n | +%y+%n";
- };
-};
diff --git a/.config/irssi/saved_nick_colors b/.config/irssi/saved_nick_colors
@@ -1,11679 +0,0 @@
-[set]
-/:1Z
-/408AAAAA7:4G
-/408AAAAAG:3A
-/92AABC12T:0A
-/A0c:3H
-/AAAAAAAAAAAAAAAAAAAAAAAAAA:0D
-/AAAAAAAAAAAAAAAAAAAAAAAAAAAA:4C
-/AAAAAAAAAAAAAAAAAAAAAAAAAAAAA:25
-/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:42
-/AAAAAAAAAAB:03
-/AAG:1U
-/AARRSS:3M
-/ACGZ:2T
-/ADL:6C
-/AG:3A
-/AG15:1C
-/AG4:4G
-/AGG:3H
-/AG_:51
-/AIM:1C
-/AJ:40
-/AKP:42
-/AK_47:3A
-/AL:51
-/ALAKTORN:4N
-/ANCAP95:3C
-/ANNA:4N
-/ANNA-:3P
-/ANNA_:2D
-/ANNA`:4N
-/ANNa:3C
-/AOC:4C
-/AOC_:6B
-/ARS:2T
-/ARSE:6C
-/ARSv2:3C
-/ATMOS:2D
-/ATMOS|2:63
-/ATMOS|3:0A
-/ATMOS|4:5E
-/ATMOS|41:4N
-/AV3NG3R:3H
-/AYC:6H
-/AYYYYYYYYYLMAO:0C
-/AaThai:4N
-/Aaaaand:3A
-/Aakoy:6H
-/Aayush:1C
-/AbigailK:0A
-/Absalom:3H
-/Acer_:25
-/Acer__:03
-/AdDeRaLL:4N
-/Adam:03
-/Addgg:3M
-/Addie:1C
-/Adie:1C
-/Adiemus:03
-/Adle:0C
-/Admin:3A
-/AdminServ:2T
-/AdmiraL:09
-/Adra:4G
-/AdrameleK:42
-/AdrameleK_:25
-/AdrianDX:40
-/Adrian_DX:6A
-/AePhi:3A
-/Aecait:42
-/Aecheu:0C
-/Aefeic:3C
-/Aekae:51
-/Aenri:1C
-/Aenri1:25
-/Aequer:6H
-/Aeres:4G
-/Aeres-:25
-/AfroJack:09
-/AfroNigga:42
-/AfroNukka:6C
-/Afrteen:3C
-/Agadashi:0A
-/Agadashi_:09
-/Agarian79:4G
-/Agbalu:1U
-/AhHsajJAf:4N
-/Ahcho:1C
-/Ahgeo:25
-/AhmedDsa:1Z
-/Ahmedkh:2D
-/Ahmos:5E
-/Ahnberg:2J
-/Ahosh:6C
-/Ahqui:3A
-/AiChup:1C
-/AiRah:0A
-/Aide:6H
-/AifieW:63
-/Aifiw:63
-/Aijaki:2T
-/AimHere:0A
-/Aipahh:3C
-/Airplane:09
-/Aishah:6H
-/Ajannie:0C
-/Aki-lucky:5E
-/AkibaDeep:6H
-/AlLMfryoE:4N
-/Alaura:0A
-/AlbertEncode:2J
-/AlbertEncode2:6B
-/AlbozZ:6H
-/Alchemica:09
-/Alchemical:3C
-/AlexBigCheese:0D
-/AlexBigCheese3:3A
-/AlexBigCheese4:2J
-/AlexBigCheese5:1C
-/AlexBigCheese53:6C
-/AlexBigCheese7:3M
-/AlexBigCheese8:4N
-/AlexBigCheese9:6C
-/AlexBigCheese98:2D
-/AlexC:1C
-/AlexCato:4G
-/AlexCato_:3A
-/Alfah:0D
-/Alga:3M
-/Alhazred:42
-/Alhazred_:0D
-/Alice_:51
-/Alien88:4C
-/Alina25:4G
-/Alives:03
-/AlkaSeltzer:4N
-/AllY0urB4:51
-/Alliance1911:6B
-/Aloui:5E
-/AlphaChadBro:0C
-/Alpherior:2T
-/Alphi:0D
-/Alphminster:0D
-/AlrightIconcede:2T
-/AltOption:5E
-/AltaVista:4G
-/AlterEgo_:0D
-/AlterEgo__:03
-/Altey:6B
-/Am:6C
-/Amanda:3A
-/AmandaB:1C
-/AmberJ_:0C
-/Amethyst:1C
-/Amiga600:2D
-/AmigaGod:09
-/AmorPropa:3C
-/AmputatedFatGoose:4G
-/Amsterdam:1C
-/An01nt3d_0n3_:2D
-/AnEnemySpotted:6C
-/Ana:25
-/Anayx:03
-/Ancient:0A
-/AndChat|479316:6H
-/AndChat|730100:6H
-/Andrey:3M
-/AndroSyn:1C
-/AndroUser:3C
-/AndroUser2:0C
-/AndroidHackedBy-maph3r1us:51
-/AndroidUS:63
-/AndyPratt:09
-/Anemone:5E
-/Ann:4N
-/Anna:0A
-/AnnaCutas:4N
-/AnnaDina:1C
-/AnnaFiona:42
-/AnnaGames20:3C
-/AnnaGr:1Z
-/AnnaHater:0C
-/AnnaRizona:4N
-/AnnaSex:63
-/Annette:3C
-/Anon-a-mo:03
-/Anon7of10:5E
-/Anon7of11:5E
-/AnonRadio_|43832:5E
-/AnonRadio_|62947:63
-/Anon_7424:0C
-/Anonamoos:63
-/Anonymoos:1Z
-/Anonymou1:0D
-/Anonymous:1Z
-/Anselmo:4N
-/Ansikteoolo:03
-/Anth0mk:2T
-/Anthony:63
-/Antipeace:6C
-/Anubis169:6B
-/Anubis169|Away:63
-/Anymouse:3C
-/Anzerfaus:6C
-/Anzrael:1Z
-/Aocho:3C
-/Aoyagi:09
-/Aoyagi_mehtop:42
-/Aoyagi_raventop:4N
-/Apenasvejo:51
-/Aph3x:4C
-/Apocalypse:6B
-/Apostata:4G
-/Appb:3C
-/April26:5E
-/AqTVUxSmx:3H
-/Aqua:3C
-/Aragon:4C
-/Arbit3r:4N
-/Arbiter:1Z
-/Architect:3C
-/Arden:0D
-/AreH:6B
-/Area66:1C
-/Argetlam:5E
-/Ariana:09
-/Ariana16:3M
-/ArianaGrande:6B
-/Arirang:09
-/Arirang_:51
-/Arisu_:42
-/Arizu:4C
-/Armageddon:2J
-/Armando:25
-/ArmedRobbo:6B
-/Armen:09
-/Armen138:09
-/Armen8:6B
-/Arnie:2T
-/Arohyn:0A
-/Arohyn3:0D
-/Arohyn42:3M
-/Arohyn420:6C
-/Arohyn_J2081q:0A
-/Arragon:4N
-/Arthas:4N
-/Aruseus:6B
-/As:0C
-/Asds:2J
-/Asg23:6B
-/Ashey:09
-/AshleyMoorz:4C
-/Ashura666:25
-/Ashy:3A
-/Asian:3A
-/AspieAdie:6C
-/Asriel:3C
-/AssignedMale:42
-/Assivity:2T
-/Astr1:2J
-/Astr1_:03
-/AstroAI:51
-/AtHKvrpAR:6N
-/Ataego:03
-/Atari:3C
-/Atheri:0A
-/Atlantic:6C
-/Atlas:2T
-/Atomen:42
-/Audasity:0C
-/Audasity_:42
-/Audi:09
-/AudioRCA:3C
-/Audi|Away:4C
-/Austin^:25
-/Austo1212:6N
-/AvVW:3M
-/AverageJo:6H
-/Avery:6C
-/AvrilLavigne:03
-/AwayLurker:3C
-/AwooRallyINC:3C
-/AwoooooRallyINC:42
-/Axujen:3H
-/Ayirog:03
-/Ayrton:3M
-/Az:1Z
-/Azelphur:0A
-/Azero87:4N
-/Azonic:0D
-/Azrael:03
-/Aztec03:1U
-/Aztec03_:6C
-/Azyi:42
-/B:6C
-/B1GSQU1D:6C
-/B1ngIt:3P
-/BASEMENT:51
-/BASEMENT_:03
-/BASHy2:03
-/BASHy2-EU:3H
-/BBC:6C
-/BCMCCMMNX:25
-/BEASTFACE:1C
-/BHnL:3A
-/BIALAS:3M
-/BIRTHDAYchrissy:1Z
-/BLM:2J
-/BLMhater:1Z
-/BLkx:4C
-/BOMBA-FAT:5E
-/BONKSCOUT:0A
-/BOSSHAWG:3C
-/BOSSHAWG_:40
-/BOSSHOG:3P
-/BRAGG:6H
-/BRB:51
-/BSHk:0A
-/BUNDT_CAKE:2D
-/BUNDT_CAKE_:42
-/BaBe:51
-/BaD_BoY:03
-/BackupBackupNickname:2D
-/BadASS:6H
-/BadBoneMoFo:0C
-/Bahpur:2T
-/Bahzi:42
-/Bakersfie:63
-/BallSac:0C
-/Ballz:3M
-/Balthazar:0C
-/Balthazar_Bath_Bazaar:51
-/Balthazar_Destoryer:3M
-/Balthazar_Destroyer:4C
-/Barack:5E
-/Baradium:0A
-/Baron:2D
-/Barry:3A
-/Barry_:2J
-/BasedAfrican:3C
-/BasedDecoyPrincessKitana:4G
-/Bashout:3H
-/Basilisk:4G
-/Batman:25
-/Bay-Guy:1C
-/BeAsTaH:09
-/Beas:63
-/Beast:4C
-/Beast_:51
-/Beauty:5E
-/Beck:42
-/BeeNeeZ:6B
-/BeefEats:4N
-/BeefMode:4G
-/Bekzz:6H
-/Beleth:03
-/Belial:5E
-/Bella26:3M
-/BelugaChan:3H
-/Belzebub:6C
-/Ben:2D
-/BenBernanke:6C
-/BenBernanke414:4C
-/BenLand100:2D
-/Bender:1C
-/Benett:03
-/Benjamin:51
-/Beran:2J
-/Berger:0D
-/Berger_:4C
-/Bernard:2D
-/Berserker:0C
-/Bertha:51
-/Bertie^Wooster:3C
-/Beth:3M
-/Bethany:6C
-/Betrachtu:3C
-/Betrayedu:25
-/Betty:09
-/BeyoundCringePubeFace:1C
-/Bifrost:3C
-/BigD:6H
-/BigDadE:4G
-/Big_M:1C
-/Bigphin:4C
-/Bigphin_:6B
-/Bilirubin:6B
-/BillGates:4G
-/BingIt:1Z
-/BitBot:4N
-/BitSplash:3A
-/Bitch:0C
-/BitcoinFo:1C
-/BitcoinMarkets:2D
-/BitconFox:42
-/Biznz:51
-/Bizooga:63
-/BlAkDogg:3A
-/Black-Mug:51
-/BlackAss`:42
-/BlackMug:3H
-/BlackSails:09
-/BlackSails_:6H
-/Blackhawk:51
-/Blackwhite:6B
-/Blaine:2T
-/Blanker:1Z
-/Blanker3:1U
-/Blanker37:6C
-/BlinkinFl:4C
-/Blode:5E
-/Blossy:2J
-/Blossy_:0A
-/Blue:09
-/BlueOystr:6H
-/Blumpkin:5E
-/Blumpkin_:42
-/BoBeR:3A
-/BoBeR182:1C
-/Bobby:2T
-/BobbyBoulders:0A
-/Bobo_36_M:1Z
-/Bohyi:3C
-/Bolero:6H
-/Bollox:0D
-/Bollox_:1C
-/Bollox__:42
-/BonafideL:09
-/Bones:42
-/Bones_:0A
-/BonnGerm:2T
-/Boolz:2J
-/BootlegJo:4N
-/Botnet:4N
-/Botsen:2D
-/BottyMcBotface:4G
-/Botulf:42
-/Bourbon:09
-/Bovdin:5E
-/Bowery:0C
-/Bozg:63
-/BradCoom:25
-/Bradley:63
-/Brag:6H
-/Brainium:4C
-/BreannaTa:4G
-/Brenda:2T
-/BrewerKit:5E
-/Brewster:0A
-/Brewster_the_chicken:5E
-/Briana:6H
-/Broken_pi:2D
-/Brooklyn:3M
-/Bruce:2J
-/BruceL:3C
-/Bruh:4N
-/BruntLIVE:4N
-/Buckeyes:3P
-/Bulgarian:3C
-/BurnZeZ:2J
-/Busterx:1Z
-/ButchDeLoria:4N
-/Buttercrotch:6C
-/Butterscotch:03
-/Buvahf:25
-/Buzzard:3C
-/Buzzard_:4C
-/Buzzy:25
-/ByteLawd:4G
-/ByteLord:1C
-/BzbV:6H
-/C0d3X:40
-/C0m|ck:42
-/C1YNkXaf:25
-/C1v1l:1Z
-/C1v|l:4C
-/CAP1891:6H
-/CAP4567:2J
-/CAPdaFLAG:0A
-/CATS:6C
-/CC66:1C
-/CCFL_Man:6C
-/CCP:4C
-/CDEFG:1C
-/CDPervert58:51
-/CG-Office-2:6C
-/CHAN_FIX:6B
-/CHARLES:3H
-/CHOMODEL:09
-/CIAnigger:51
-/CMJk:2J
-/CMvt:2D
-/COOL_MAN_:40
-/CORVID-19:63
-/CORY^1981:03
-/COVID19:3C
-/CRISPR:2J
-/CRImier:5E
-/CT:25
-/CYbEwznGT:3P
-/C_Monster:42
-/CaNNoN:4C
-/CaNNoN_:0C
-/CaPiTaN:6C
-/Caku:63
-/Callabro:3A
-/CamVal3:09
-/Canadian:2D
-/Canadoey:4G
-/CannaCo:0C
-/Cano:3C
-/CapCIAS_:6C
-/CapOOF:2J
-/CapOOF_:6C
-/CapOOF__:25
-/CapablePresident:4N
-/Capheind:1Z
-/CapitalGain:09
-/Captain4LK:3H
-/CaptainJack:03
-/Captain_Homosexxor:3C
-/Carbone5:42
-/Cardinal_:3C
-/CarlosHe:2D
-/Carp:03
-/Casey:3H
-/Cassim:51
-/CatMan:6B
-/CatSlayer:6H
-/CatValentine:5E
-/Cat_hunter:25
-/Catherine:3C
-/CatoAlex:3C
-/Caz81:25
-/CcOFjf4:6H
-/CcxWrk:4C
-/CeVVaL-c:09
-/CeeCha:6C
-/CeeChu:6C
-/Celebrity:6B
-/Celelibi:09
-/Celine:2T
-/Celine_:6B
-/Cenbe:09
-/Ceq:3C
-/Cequel:4G
-/CertifiedRapist:2D
-/Chad_Thundercock:6H
-/ChanHold:51
-/ChanServ:42
-/ChanStat:2T
-/Chandra:4C
-/Chang:2T
-/Chang_:6C
-/Chang__:25
-/Chang___:6B
-/Charles:3A
-/ChatBottl:0C
-/CheRRy218:3A
-/CheRRy2fl:2D
-/CheRRy2fly21:03
-/CheeseNCrackers:0D
-/Cheeseman:5E
-/Cherub:3A
-/ChewBaka:6C
-/Chewy:6H
-/Chex:4N
-/Chex_:3H
-/Chicanx:42
-/Chickadee:1Z
-/ChimpNayshYall:09
-/ChipsHandon:09
-/ChipsMusicVonTrappeHandon:25
-/Choco:63
-/ChocolateServ:4G
-/Christine:3H
-/Christistheway:0D
-/Christopher:3C
-/Chriz:42
-/Chromanin:3H
-/Chuckie:6B
-/Chucks:3C
-/Chungos:09
-/CiaPh:0C
-/Cinderella_Man:4G
-/Cinderfel:1C
-/Civ1l:03
-/Civil:6H
-/Civil-:25
-/Civil_:0A
-/Civ|l:2D
-/Cjefke:2J
-/ClZy:5E
-/Clamkin:3H
-/Clamkin-:51
-/Clarence:3A
-/Claudine:6H
-/Clefairy:51
-/Clevela17:2T
-/Cleveland:4N
-/Clockweig:3C
-/ClockworkCoder:6B
-/CloroxMan:2B
-/ClownPoss:09
-/Co-Op:2J
-/CoCaInE-:3C
-/CoDeInE:25
-/CoDeInE-:2T
-/CoMBo:5E
-/CoViD-:3C
-/CoViD_:09
-/Cockroach:6C
-/Cockzilla:3A
-/CodeMasta:3A
-/Code_Red:1C
-/Codemaste:6C
-/Codexx:51
-/Codexx_:63
-/Coffee:1C
-/CoffeeInc:1Z
-/Cog:63
-/Cogitabun:42
-/ColDecker:4G
-/Coldblack:4N
-/ColeSlaw:0C
-/ComfortablyDumb:3M
-/ComfortablyNumb:6B
-/Communist:3H
-/Computer-:4N
-/ComputerTech:3A
-/ComputerTech_:0D
-/Computer^:25
-/Computersarebadat:5E
-/Computer|:63
-/ConEdison:1Z
-/ConEdison2:2T
-/ConEdison5:4C
-/Connie:03
-/ConnorWil:25
-/ConnorWilliams:2T
-/ConsmueristProvocateur:3A
-/ConspiracyProof:0A
-/ConsumeristProvocateur:4G
-/Coonyarro:6B
-/Corazoni:2D
-/CorbinDallas:2D
-/Core5113:3H
-/CoreDuo:0D
-/CoronaCri:1C
-/CosmicRay:5E
-/Cosmicjoker:4N
-/Cosmicjoker_:4G
-/Cr0no:0A
-/Cr0no-:2D
-/Cragnathar:0C
-/Crapwrongnick:3C
-/CrashTM:51
-/CrazyPal:3A
-/CrazyPale:3H
-/CrazyRobLolzors:2J
-/CrazyRoboCrumbs:51
-/Crazyout:0A
-/Creator:3H
-/CrepeMake:4N
-/CrimisoK:3C
-/Crissy:6C
-/CrocSmith:6C
-/Crocodile:3M
-/Cromu`:09
-/Cron0:63
-/Crono:1C
-/Crono-:2T
-/Crono--:2D
-/Crono\:4G
-/Crono_:3H
-/Cronoli:1C
-/Cronus:2J
-/Crow:6C
-/Crow-:3H
-/Crow_:0C
-/Crow_0:4G
-/Crow_1:2D
-/Crow_2:3M
-/Crow_3:6C
-/Crow_6:1C
-/Crow_8:6B
-/CrtxReavr:4G
-/Crust:2D
-/Crustie:4G
-/Crustie_:3H
-/CryMaster:6B
-/Crystal:6B
-/CrystalSoldier:03
-/Ctrl:2J
-/Cuckoo:1Z
-/Cuonee:6H
-/Cyb3RALis:3M
-/Cybaria:6B
-/CyberBit:63
-/CyberGlo:3M
-/CyberManifest:0A
-/CyberOne:3A
-/CyberOne_:1Z
-/CyberOnne:1C
-/CyberThre:6B
-/CyberTrekker:4N
-/CyberTwo:6B
-/CyborgPerson:2D
-/Cyosc:09
-/Cypher:3M
-/CypherBlo:25
-/Cyrus:51
-/CythSide:2T
-/Cythraul:3M
-/Cythside:0D
-/D:4G
-/D00:6H
-/D0m3r:4C
-/D4nny:6N
-/D8RainA:25
-/DAJlKjaXG:2D
-/DASPRiD1:1C
-/DBoyz:4G
-/DBoyz[A]:03
-/DG:51
-/DIARRHEA_GARGLER_69:51
-/DJTrump:2T
-/DJ_AA:4G
-/DNX2JNLIG:2J
-/DNuD:5E
-/DOGWATER:63
-/DOX_SALE:25
-/DOYouNo:09
-/DPA:0C
-/DPA-:0C
-/DRUGS:2J
-/DSyndrome:6C
-/DTales:5E
-/DZLFKNWZL:6H
-/DZLWZL:4G
-/D_A_N:2J
-/D_A_N_:03
-/DaCeige:3M
-/DaCe|ge:4G
-/Da_KO:4C
-/DadBundy:6B
-/DaddyState:42
-/Daemonk:1C
-/Dajjal_1:1Z
-/Dak22:4C
-/Daler:0C
-/DanLeroux:0C
-/DanMatrix:3M
-/Dangelo54:1Z
-/Daniel:2T
-/Danny:6A
-/Daria11:1Z
-/Darius:1Z
-/DarkCider:5E
-/DarkHelp:5E
-/DarkLore:03
-/DarkV3n:0A
-/Darn:3H
-/Darn_:4G
-/Darn__:3C
-/Darn___:6B
-/Darnme:2T
-/Darnn:1C
-/Darnn_:09
-/Darnn__:3M
-/Darnn___:40
-/Darnwise:0A
-/DarwinElf:3A
-/DasBot:4G
-/DateMasamune2000:6C
-/DaveCafe:0A
-/Dave_2794:6A
-/David:51
-/DavidDuke:25
-/Dbsy:2D
-/Deadpool:2D
-/Deaht_Syn:1C
-/Dean:3A
-/Death_Syn:03
-/Deborah:1C
-/Debra:0C
-/DecadePlus:3M
-/DedBundy:2T
-/DedBundy_:63
-/Def_Starr:3H
-/DefuserKi:4G
-/Deliveran:4C
-/Democrat:3M
-/DeppaMann:1C
-/Depressionfries:1C
-/DerMann:0D
-/Derecho:3H
-/DerpGusta:09
-/Derp_:6C
-/Deryk:4G
-/Desire:2J
-/Dessimat0r:0C
-/Destoya:4G
-/DeusVult:42
-/Deus_Vult:4G
-/Develon:3C
-/DeviL:1C
-/Deviance-:51
-/Deviancee:0A
-/DevilFox:3P
-/Dflp:6H
-/Dgby714:2T
-/Dghjjb:25
-/Dhejavu_:0C
-/DiamondTiara:03
-/DiamondTiara1:3M
-/Diamondtiara:3M
-/Diana:6H
-/Diannao:3C
-/Diavolo:2J
-/DickInHand:3H
-/Dicksucker:2D
-/DieLi:42
-/Diego:1Z
-/DigDug:0D
-/Digerati:5E
-/DijaVooD:0C
-/Dildo:6B
-/Dildo_Dad:3M
-/Diocletian:03
-/Dionysus:6B
-/Disciple:25
-/Diviny:4G
-/DoYouKno:03
-/DoYouKnow:1Z
-/DoYouNo:4G
-/DoctorGoatLips:4G
-/DoctorKit:2J
-/DoctorROBotnik:0D
-/Doctor_Balthazar_Bath_Bazaar:4C
-/Dog:2T
-/Dog_slayer:1C
-/Dog_slayer13:3M
-/Doggo:3M
-/Dojo:6B
-/DolphinKun:0D
-/Dominator:4G
-/DonQuixot:2J
-/Donald:3C
-/Donger:2D
-/Dongrito:51
-/Donnie:63
-/Doo:3C
-/Doo___:51
-/DoomSquirrel:1Z
-/Doonald:42
-/Doopool:1C
-/Doormat:2D
-/Dora28:1C
-/Dorian:25
-/Doris10:3A
-/Doris14:25
-/Dorothy:03
-/DosAmp:3M
-/DoubleT7:2D
-/Douglas:3C
-/DpEpsilon:2D
-/DpyXkevhG:63
-/Dr-G:3H
-/Dr00:3C
-/DrBovdin:4C
-/DrD33M:6B
-/DrD33M_:2J
-/DrDixzzle:0A
-/DrDizle:3H
-/DrDizzle:4N
-/DrGod:1C
-/DrGood:2J
-/DrNizzle:2J
-/DrTooCool:1C
-/DrToronto:6H
-/DrTucker:1Z
-/DrTucler:09
-/Dr_Rebec:5C
-/Dragon:3H
-/DragonEyes:0C
-/DragonGeo2:09
-/DragonGlo:2T
-/DreadPirateRoberts:3A
-/Dreda:4N
-/DrestGlas:6H
-/Drew:09
-/Drew`:0C
-/Drewsh:42
-/Droz:5E
-/DrunkKit:6C
-/Duailibe:3A
-/DudeBruh:25
-/Dude_:2T
-/Dude__:4C
-/Dugnuts:3H
-/DunkinDKNY:5E
-/Duranix:2T
-/Durvin:51
-/DustinFea:1C
-/DvineLord:4C
-/Dwaine:1U
-/Dwaine_:3A
-/Dwarf:3H
-/Dworin:1C
-/DxaQJGzTC:6C
-/Dyke_:25
-/DynamiteDan:0A
-/DzHH:42
-/EARS:51
-/EC:09
-/EChoh:3M
-/EGH:4N
-/EKcryptor:2J
-/ERR_NOPRIVILEGES:3C
-/ETtpRAi:3H
-/ET|ufo:51
-/E_Martin:4G
-/Earth:5C
-/Easymone-:42
-/Easymoney:2T
-/EatL0de:0A
-/EaterofCuteKittens:2D
-/Eboj:4C
-/EcOB:6C
-/EcStAsY:1C
-/EcStAsY-:25
-/EcToPlAsM:2J
-/Ecchan:3M
-/EchoShun:09
-/Echo_C:3C
-/Echo_Chidori:0C
-/Ediyeu:3H
-/Eefasa:3A
-/Eewigo:4C
-/EghFNgF:6C
-/Egyptian_Revolutionary:25
-/EiLSEL:1C
-/EicooV:3A
-/Eilahs:0A
-/Eingua:51
-/Eismc2:2T
-/El3ktra:3C
-/ElHumppa:2D
-/ElRatonAzul:25
-/El_Zilcho:1C
-/Elara:3P
-/ElectRo`:03
-/Eliza:25
-/Elizabeth:03
-/Ellen:2T
-/Elusiv3:3A
-/Elusive:6B
-/Eman:6H
-/Emi:4N
-/Emi_:0A
-/Emily:3P
-/Emily____:09
-/Emma:5E
-/Emma03:2D
-/Emma17:3C
-/EmmaHater:09
-/EmmaL:25
-/EmmaLouise:2D
-/EmmaYuh:2T
-/Emmaa38:6B
-/Emmaa61:25
-/Emmae:3C
-/EmoFear:25
-/Emsixteen:2T
-/End3r:3M
-/EndItAll:0C
-/EndaEnDag:3P
-/Eneerge:1U
-/Eneerge_:0C
-/Engai:3A
-/Entitlement:4G
-/Enton:0C
-/Enui:3C
-/Enui_:3C
-/Era:3C
-/Era_:63
-/Eri:1Z
-/EricYuzo:3H
-/Eric_Blair:4G
-/Eric_Blair2:3A
-/Erik:4N
-/Erika11:2D
-/Erika_16:0D
-/ErisX:4N
-/ErkanINNE:6C
-/Esa__:3C
-/Estella:03
-/Estella-:09
-/Etamin:3M
-/Etamin_:51
-/Eternal_Blizzard:4C
-/Eunice^44:6H
-/Euroob:2D
-/Euthanizer:6B
-/Euyee:2T
-/EvAs:3C
-/Evelyn:0A
-/Evil0ne:3M
-/EvilB:42
-/Evil_Bob:5E
-/Ewmr:25
-/Excelium:42
-/Excellsio:2D
-/Extreme25:3M
-/ExtremelyOldPerson:2T
-/Extynct:0C
-/F-ck_NKJ:4G
-/F0FFF0:4N
-/F0FFFF:6H
-/FAT-BOMBA:3H
-/FAXn:2J
-/FBI:42
-/FBIGov:4N
-/FBIServ:2T
-/FBIpedos:42
-/FFoD:6C
-/FGhuorfiu:4C
-/FJD:3C
-/FKKCyprus:2D
-/FREAKUser:2T
-/FSgX:0C
-/FUCK:2D
-/FUCK_SWEDEN:2D
-/FUPA:09
-/FUPA-:0C
-/F_JUNK_DUMP:4N
-/Fabio:3M
-/Fabulous:3M
-/FactorOfX:25
-/FaggotHunter:6C
-/FahTe:4N
-/FairsAreDumb:6H
-/FalconKirtaran:2T
-/Fallinglights:3A
-/Fallinglights4:09
-/Fallinglights7:1Z
-/Fallinglights8:63
-/FarAway:5E
-/FarAway-:3A
-/FarAway`:6C
-/FarmerKit:2T
-/Fasiha:4N
-/FatBob:2D
-/Fatphin_:2J
-/Fatty:1C
-/FbmBdgkHC:3C
-/FeNTaNyL:4C
-/FeNTaNyL-:1Z
-/Fear:1C
-/Fear-:09
-/Fear--:3A
-/FearIsMAD:1C
-/FearKild:2T
-/FearUSA_:2B
-/Fearf:42
-/Fearful:4G
-/Fearkille:1U
-/Fearl:6A
-/Fearsum:03
-/Fear|:1C
-/FederalReserve:3H
-/Feero:2T
-/Ferris:5E
-/Fez:2D
-/FiErYGT:51
-/FiErYGT-:09
-/FiReYGT:3H
-/Fiegaa:6C
-/Fierak:51
-/Fierra200:51
-/Fighting:03
-/FiloDough:2T
-/FilthNSW:2T
-/FinalX:4G
-/Finger:51
-/FinnaDeli:2D
-/Firefox_:3H
-/Fishmongering:3H
-/Fiver:0A
-/FiyoC:63
-/Fjear:6H
-/Fjr1dcCP:4C
-/Flattie:3P
-/Flo56456:1Z
-/Flo6786:2D
-/Floyd:1C
-/Fly:25
-/FlynnTaggart:3A
-/FlynnTaggart41:25
-/FlynnTaggart55:2D
-/FncyPnts:51
-/FncyPnts_:1C
-/Forest:6C
-/ForexT:4N
-/ForexTrad:3H
-/Fortex:2D
-/FoundingF:51
-/Four20:51
-/Four20gottalight:25
-/FoxSteals:6C
-/Fox_:1C
-/Foxie__:0C
-/Foxtrot:4C
-/Foxy:51
-/Foxy`:5E
-/FqKM:3A
-/Fr0stina:4G
-/Fr0sty:0D
-/Fr0styy:0D
-/Fragile:09
-/Fragile_:5E
-/Frances:2D
-/Francy:1C
-/Frankencookie:0C
-/Frax:6B
-/Freak_:0A
-/Freakish:4G
-/Frederick:3A
-/Freedumb:5E
-/FreshColegeGirl:63
-/FreshcollegeGir:2J
-/FrostRanger[m]:63
-/FuOtGMjne:40
-/FuZzCasT:1Z
-/FuZzCasT1:3M
-/FunkyStickman:2D
-/Fusl:4N
-/Fusspils:09
-/G-:09
-/G-Flex:0A
-/G0D:3M
-/G0jQ:51
-/GCHQ:09
-/GCY:25
-/GDX:3H
-/GEORGEFLOYD:4G
-/GERMANSARELAME:5E
-/GG:63
-/GGMethos:0C
-/GIGACHAD:25
-/GISdPSGFL:25
-/GI_Jack:4N
-/GI_X_JACK:6H
-/GK-Deacon:4N
-/GOD:1Z
-/GOD_:1C
-/GRNRJJD:51
-/GTAXL:3H
-/G_Love:6H
-/GaAdaNama:6B
-/GaMbiTo:1Z
-/GaMbiTo-:2T
-/GaMbiTo_:0C
-/Gabriel:03
-/Gabriel3:4N
-/Gabriel30:3H
-/Gabriel53:0A
-/Gabriel62:6H
-/Gabriel67:6H
-/Gabriel76:6H
-/Gabriel79:6H
-/Gabriel84:5E
-/Gadzooki:03
-/Galactic:3A
-/Galactic_:63
-/Galeliw:5E
-/Gamayun:5E
-/Gandhi:0C
-/Gandoon:2D
-/GarcaMan611548282:3A
-/GarcaMan6115482821:3A
-/GarcaMan6115482826:0C
-/GarcaMan61154828264:03
-/GarcaMan611548282643:3C
-/GarcaMan6115482826434:1C
-/GarcaMan61154828264340:03
-/GarcaMan61154828264341:2D
-/GarcaMan61154828264342:4N
-/GarcaMan61154828264343:25
-/GarcaMan61154828264344:6B
-/GarcaMan61154828264345:3C
-/GarcaMan61154828264346:1Z
-/GarcaMan611548282643460:0C
-/GarcaMan611548282643461:3M
-/GarcaMan611548282643462:42
-/GarcaMan611548282643463:25
-/GarcaMan611548282643464:2D
-/GarcaMan611548282643465:3C
-/GarcaMan611548282643466:4C
-/GarcaMan611548282643467:1Z
-/GarcaMan611548282643468:3C
-/GarcaMan611548282643469:1Z
-/GarcaMan61154828264349:5E
-/GarcaMan61154828265:1C
-/GarcaMan61154828267:3A
-/GarcaMan61154828268:3A
-/GarcaMan6115482828:4C
-/Gargoyle:6C
-/Garr:3H
-/Garry94:03
-/GaryGranite:2T
-/Gary`Oak:0A
-/Gasoline:5E
-/Gaspar:2T
-/GavinCool:25
-/GavinK00l:51
-/GavinWool:03
-/Gavriel:6B
-/GavrielK:2T
-/Gavrl:4N
-/GayRage:09
-/GayestYeen:51
-/Gbyo:4C
-/Geeze:40
-/Gemini:2T
-/GenTsoChk:09
-/Genesis`:51
-/GenomeX:2J
-/GensENVY:6H
-/Gentleman:1U
-/GentlyCaressedYouth:2T
-/Gentlye10net:0A
-/Gentoo:3H
-/Gentoo_:25
-/George:03
-/George42:2D
-/GermanWra:1Z
-/German_aryan:2T
-/Germania:6B
-/Gerula:51
-/GhoGl:09
-/GholG:2D
-/GholG_:6C
-/Gholg:4N
-/GhosT_:2D
-/Ghoul:42
-/Ghoul_:5E
-/Ghoul|bbl:0C
-/GideonShimshelewitz:09
-/GilesCorey:63
-/Gilgamesh:1C
-/Gilli:3M
-/Gin:63
-/Girl44_:09
-/GirlScout:4C
-/Glenn:51
-/Glider-IR:40
-/Glider_IR:4G
-/Gloria:2J
-/GnuPlusLinux:0A
-/GoCommitSuicide:6B
-/GoCommitSuicideFaggot:3C
-/GoLdShLaG:3C
-/GodDr:2J
-/God_:40
-/Godmau5:0C
-/GodokaHomuHomu:3M
-/Gof:3H
-/GoldState:6C
-/GoodSir:03
-/GoogleMother:1C
-/Googlebot:1Z
-/GooseTheDuck:2D
-/Gordan_Proprietary_Man:3C
-/GorillaDr:3C
-/Goriya:42
-/Goriyafixd:2D
-/Gosha:4C
-/GothAlice:3C
-/Gottem:3C
-/Gough:2J
-/Governador:3C
-/Goyo:3C
-/Goyo_:09
-/Gq:2T
-/Gqbriele:0C
-/Grahm:6B
-/Grande:3H
-/Grapejuice:6B
-/Grav2:3C
-/Grav2_:51
-/GravitaZ3:2T
-/Gravitas:3A
-/GreasyBob:3A
-/Greatest:6C
-/GreenArch:63
-/GretaThunberg:4N
-/GreyBeard:6N
-/Grimmgrey:2T
-/Grizo:63
-/Gron:09
-/Grounded0:6B
-/GsC_RuL3Z:3M
-/Gudey:0A
-/Guest:0C
-/Guest0000:3M
-/Guest10:5E
-/Guest1000:3C
-/Guest10184:2J
-/Guest10223:3A
-/Guest10671:2J
-/Guest10849:2T
-/Guest10963:6B
-/Guest11087:42
-/Guest12:0D
-/Guest12122:2T
-/Guest12335:03
-/Guest12714:42
-/Guest13:4G
-/Guest13211:51
-/Guest13899:42
-/Guest14060:2T
-/Guest14144:6B
-/Guest14711:0D
-/Guest1497:6C
-/Guest15:6B
-/Guest15653:0A
-/Guest15656:03
-/Guest1665:3M
-/Guest17191:2T
-/Guest1731:5E
-/Guest17367:4G
-/Guest17981:51
-/Guest20010:63
-/Guest20154:5E
-/Guest21270:2T
-/Guest22129:0C
-/Guest2249:03
-/Guest22875:25
-/Guest23695:25
-/Guest24875:42
-/Guest25:0D
-/Guest25036:6B
-/Guest25083:6B
-/Guest25125:3C
-/Guest25232:0C
-/Guest25281:2D
-/Guest25614:09
-/Guest25944:3M
-/Guest25989:2T
-/Guest26728:3M
-/Guest26868:0A
-/Guest2687:3C
-/Guest27:63
-/Guest27254:6C
-/Guest27913:51
-/Guest28:6B
-/Guest28225:63
-/Guest28409:51
-/Guest28567:25
-/Guest28734:5E
-/Guest29:2T
-/Guest29069:6H
-/Guest29184:3C
-/Guest29251:63
-/Guest29606:3C
-/Guest29675:3M
-/Guest3:3M
-/Guest30024:2D
-/Guest30558:2D
-/Guest31448:3C
-/Guest31663:3M
-/Guest31889:3H
-/Guest32:42
-/Guest32429:2J
-/Guest32951:3H
-/Guest33156:09
-/Guest33287:63
-/Guest3350:1Z
-/Guest33840:3M
-/Guest34098:42
-/Guest34254:2J
-/Guest34328:2T
-/Guest34857:4G
-/Guest35081:3C
-/Guest35098:3C
-/Guest35447:25
-/Guest35500:51
-/Guest35998:0D
-/Guest36062:09
-/Guest36634:6C
-/Guest36954:6C
-/Guest36970:1C
-/Guest3732:4N
-/Guest37403:3H
-/Guest38002:6B
-/Guest38339:42
-/Guest38656:6H
-/Guest3875:3A
-/Guest39435:3M
-/Guest3970:2D
-/Guest39750:42
-/Guest39835:2D
-/Guest40011:25
-/Guest40085:2D
-/Guest40699:2J
-/Guest40971:1Z
-/Guest41151:25
-/Guest41342:25
-/Guest42243:4G
-/Guest4246:09
-/Guest42783:42
-/Guest42937:3H
-/Guest43:0C
-/Guest43271:3A
-/Guest43871:4G
-/Guest43995:5E
-/Guest44017:0A
-/Guest44200:3M
-/Guest44347:3C
-/Guest44388:3M
-/Guest44597:5E
-/Guest44638:4G
-/Guest44817:03
-/Guest45311:03
-/Guest4556:4G
-/Guest45699:2T
-/Guest45737:3M
-/Guest45920:2J
-/Guest46535:5E
-/Guest46659:63
-/Guest46883:4G
-/Guest47:25
-/Guest47029:2T
-/Guest47501:2J
-/Guest47709:3M
-/Guest47829:09
-/Guest49205:4G
-/Guest49765:6C
-/Guest50163:6C
-/Guest50388:09
-/Guest5047:6B
-/Guest51478:3C
-/Guest51526:03
-/Guest51921:4N
-/Guest52145:4C
-/Guest52914:25
-/Guest53046:09
-/Guest53501:3H
-/Guest53651:2T
-/Guest53930:63
-/Guest55056:51
-/Guest55331:42
-/Guest55812:1C
-/Guest55842:4G
-/Guest55858:1Z
-/Guest56:1U
-/Guest57:5E
-/Guest57478:2D
-/Guest5780:09
-/Guest57867:63
-/Guest57923:3C
-/Guest58502:1C
-/Guest58741:3M
-/Guest59883:0A
-/Guest6:5E
-/Guest60108:1C
-/Guest60528:09
-/Guest606:3C
-/Guest60916:3C
-/Guest60940:2T
-/Guest61126:42
-/Guest61706:3M
-/Guest61815:51
-/Guest61820:63
-/Guest6184:4N
-/Guest62193:63
-/Guest62256:2D
-/Guest62562:09
-/Guest62896:63
-/Guest62903:3M
-/Guest63433:6B
-/Guest63556:1Z
-/Guest64:5E
-/Guest64207:5E
-/Guest64609:6C
-/Guest64762:2T
-/Guest6538:0D
-/Guest6730:3A
-/Guest68:0A
-/Guest6969:4N
-/Guest7:25
-/Guest72:2D
-/Guest7288:4C
-/Guest7340:4N
-/Guest7529:03
-/Guest77:3P
-/Guest78:6C
-/Guest80:6C
-/Guest8014:4G
-/Guest82:2D
-/Guest8387:25
-/Guest85:1Z
-/Guest8539:6B
-/Guest92:3A
-/Guest924:03
-/Guest9273:2T
-/Guest9338:3C
-/Guest969:1C
-/Guest98:1Z
-/Guest989:3C
-/Gumbie:5E
-/Gun_Bunny:2D
-/GunnerJon:51
-/GuntherDW:1C
-/Gus:0C
-/GuyCornoa:0C
-/Guyver2:1C
-/Guyver2_:1C
-/GwooLad:03
-/H0m3r:63
-/HAILSATAN:4N
-/HAL_7000:3P
-/HAPM:42
-/HARLIE-shelden:0C
-/HAUAH:3A
-/HAUAH3d1n:0C
-/HAUAH6bjd:4G
-/HAUAH7664:4C
-/HAUAH9uh0:1C
-/HAUAHbu6p:6H
-/HAUAHcqo6:6B
-/HAUAHcv97:3M
-/HAUAHdaye:51
-/HAUAHegvu:3H
-/HAUAHewnu:2T
-/HAUAHgc2k:63
-/HAUAHi4pv:0A
-/HAUAHirfo:3M
-/HAUAHjv6l:6B
-/HAUAHkple:3H
-/HAUAHmboq:4G
-/HAUAHpl7v:3C
-/HAUAHpp3y:3A
-/HAUAHtb2n:1C
-/HAUAHtztj:0C
-/HAUAHueg5:1Z
-/HAUAHx5b8:25
-/HAUAHzhcz:3C
-/HAUAHzle9:51
-/HGM:3C
-/HGMic:6H
-/HHHMMMHHH:63
-/HIVlntin-:63
-/HIVlntine:4G
-/HKM:4G
-/HLiwsYRMI:40
-/HNRMR:1C
-/HRMKTH:2T
-/HRNRMTY:3H
-/HSH:42
-/HTML5CAR:25
-/HTYTTMKR:5E
-/HWWIS:3C
-/Hachi-chan:3A
-/HackerII:3A
-/Hackerpc1:2T
-/Hackerpcs:3A
-/HaeB:0C
-/HaeKie:6H
-/Haeloi:3H
-/Hafera:03
-/Hahsh:51
-/Hairy:03
-/HairyLegs:51
-/Haiti:3C
-/Hajmola:5E
-/Hal`d`Hal:09
-/HamAdams:2J
-/Hamburger:2T
-/Han`:09
-/Hana:0C
-/Hank_Hill:2J
-/HanyuuChama:3H
-/HappyTime:0C
-/Happy_Dog:3A
-/Hard-Sexpalace:5E
-/HardDisk:6H
-/Harold:4N
-/Harry:4C
-/HaruKid:4C
-/Haruhiro:4N
-/Harzilein:4G
-/HasanAbi:4N
-/HashNuke:5E
-/Havok:5E
-/Hawk:6C
-/Haxxor:4N
-/Hayro:25
-/Hazbyn:3A
-/Hazel:0C
-/HeIs0x:6H
-/HeLLsOwN:3M
-/HeeSha:25
-/Hefohp:2T
-/HelderHeid:1Z
-/Helenah:63
-/HellSpaw-:1Z
-/HellSpawn:0C
-/Hellbilly:09
-/Hellor:09
-/Helsinki:4C
-/Henry151:42
-/Henry151_:0C
-/Hero101:2D
-/Hextor:0D
-/Hexx:6C
-/Hexxx:2D
-/HeyHackers:25
-/Heyy:6B
-/Hi_tler:3C
-/Hi_tler25:2D
-/Hi_tler39:3M
-/Hide:1C
-/Hideki:03
-/Hideki_:6C
-/Highdra1:3M
-/Highdra1`:1C
-/Hillbilly:6C
-/Himmler:63
-/Hitten:25
-/HlloGrlz:2D
-/Hobbyboy:3M
-/HoloIRCUser:03
-/Holo|server:2J
-/HolySog:6H
-/Holz:1C
-/Homura_:1Z
-/Honky:6C
-/HonkyKill:3C
-/HonkyStom:5E
-/Hoosilon:4G
-/Hora:2D
-/HornyCow:3A
-/HorzA:3C
-/HorzA_:4C
-/HotPacket:3M
-/HotStud4u:3H
-/Howard:6H
-/Hp_:51
-/Huff:03
-/Huntyz:1Z
-/Hush:40
-/Hydrastra:25
-/Hydraxis:6C
-/Hyperjag:3A
-/Hz0:2T
-/I017OBt0l:2D
-/IBBR:42
-/IDoNotKnow:0C
-/IGQN:4G
-/III111II-:2T
-/IRCStat41:3H
-/IRS:63
-/IRSGov:4G
-/IRSSucks:4N
-/IRSSux:4N
-/IRS_CDC:0C
-/ISIS:0C
-/ISIS_GENERAL:3A
-/ITechGeek:4C
-/IWJe0rCGJ:1C
-/IX:25
-/I`im`a`guest:3M
-/Iajea:2J
-/IamJustTooSmart:51
-/IamNotGayIswearPleaseDontRape:2D
-/IamVerySmart:2D
-/IamVerySmart22:6H
-/IamVerySmart30:51
-/IamVerySmart49:63
-/IamVerySmart86:3H
-/IamVerySmart89:3M
-/Iamum:4C
-/Iblis:6N
-/Ice:6C
-/IceCold2000:03
-/IceMan66:0D
-/Ice_Dragon:3C
-/Ice`:3M
-/Iciest`:2J
-/IdUS:25
-/Idywild:2D
-/Iebuci:25
-/IfADog:2T
-/IfaDog:3H
-/IgnatiousIgneous:3H
-/Ikeing:1Z
-/Ikon:2J
-/Ikoru:3M
-/Ikoru1:1C
-/Ikoru3:3C
-/Ikoru6:3A
-/IlIlIllllIIIIllIIIllIIl:3A
-/IlikeTHISsuperLONGnick:6B
-/IllusiveM:63
-/Illusive_:3H
-/IloveMYsIster:3H
-/Immortal-Crypto-Boomer:03
-/Imperator:2D
-/Implant:2T
-/Impulsief:63
-/Impulsif:1C
-/IndexMatch:4G
-/IndexMatch56:4G
-/IndianBoss:1C
-/Indian_Boss:0A
-/Induus:3C
-/IneedHelp:63
-/Innmntvs:03
-/Innmntvs_:3A
-/Inspiral:3C
-/Inspiral_:2D
-/Internet:6H
-/InternetBestFriend:5E
-/Internets:0D
-/IoZuwe:4N
-/IocQ:2D
-/Ionizer:3M
-/Irish:3M
-/Irkutsk:6B
-/Isabel25:4C
-/Isimud:1Z
-/Iskander:0C
-/Iskander_:09
-/Isuzu:09
-/It:2T
-/Ithah:5E
-/Iushu:4N
-/Ivan:51
-/Iyeole:0C
-/Iz:4G
-/J-yd-n:09
-/J0P3YE:5E
-/J3rsey:6H
-/JAMIE{1977}:1C
-/JAMy:3M
-/JAPX4556:2J
-/JAzy:6C
-/JCwEWXj:3A
-/JEWS:0A
-/JFK:2J
-/JGR:0A
-/JJH:03
-/JManalFatty:6C
-/JNmO8I:4G
-/JWST_:42
-/JaVa_:3C
-/Jack4ss:2T
-/Jack_:42
-/Jack__:2T
-/Jake_:4N
-/JamalCoal:3M
-/James:0C
-/JamesDeSanta:42
-/James_F:6C
-/Jamezz:2T
-/Jan:4G
-/JanBrady:0A
-/Jan_:5E
-/Janet:03
-/Jaquilah:6C
-/Jaquilahs_dog:25
-/Jarsto:1Z
-/Jason:25
-/Jason3456:5E
-/Jasons:1Z
-/Jasons7:3C
-/Jasper[m]:3C
-/Jax:3A
-/JaxOff:0C
-/JayCe:0C
-/Jayden:2T
-/Jayden,aldcor:2D
-/Jayden04966912:4G
-/Jayden12:6H
-/JediM:1C
-/JediM_:4N
-/JediM__:42
-/Jefreymon:1C
-/JekuTheSneku:2T
-/Jekuthesneku:0D
-/Jellis:0D
-/Jenetrix:42
-/Jenetrizx:0A
-/Jennifer:0D
-/Jenny:1C
-/Jenny-:0D
-/Jenova:25
-/Jerome:09
-/Jerry^:6B
-/Jesseca:3H
-/Jessica:4G
-/JessicaP:3H
-/JessicaTurino:6B
-/Jestua_becha:42
-/JewB1rd:4G
-/Jew_Bird:1C
-/Jibbler:4N
-/JigBooze:0C
-/Jigsaw:1C
-/Jigsaw_:6A
-/Jigsaww:4C
-/Jigsaww__:5E
-/Jim:3H
-/JimBrass:2T
-/Jimbeazy:4N
-/Jimboskee:4G
-/Jimmy:63
-/JimmyHoffa:09
-/Jimster480-W10:6B
-/Jinx:0C
-/JkI5_:03
-/Jmtrix:1C
-/JntPtAKjj:42
-/Joan:2J
-/Jobe:3H
-/Jobe1986:51
-/JochanMahlzan93:0C
-/Joe-Biden:4G
-/JoeAverag:6H
-/JoeBiden:03
-/JoeBidenn:4N
-/JoeHiden:6H
-/JoeTheRapist:25
-/Joe_Biden:6N
-/Joelixny:51
-/Joey:3C
-/JoeyBiden:0C
-/JofTrades:6H
-/JohnDerp:6B
-/JohnDerp_:0C
-/JohnGalt:1C
-/John^:6H
-/Johnny:03
-/JohnnyBon:42
-/Jokk55:2D
-/Jokkelol:1Z
-/JollyRoge:03
-/Jonas:3M
-/Jonaz:42
-/Jordan:25
-/Jordan_:51
-/Jordan_0:0C
-/Jordan_0_:6C
-/Jordan_O:4G
-/Jordizle:4N
-/Jorduck:6B
-/Jose:4G
-/JoseAlPaca:4C
-/Joseph:4N
-/JuanSoup:63
-/Jubi:3A
-/Jubileu:6C
-/Juchi:0C
-/Judenras:1Z
-/Julian:2D
-/Juliet14:3M
-/Julius5_1:4G
-/Julius6_1:09
-/Julius6_2:2D
-/Jupey:63
-/JustAPerson:3A
-/Justasperg:1Z
-/Justin:63
-/JustinBaeverRompeSkraever:03
-/Justin_T:3H
-/JuttyMire:09
-/K0ISS3R:3C
-/K0mpromat:3H
-/K1smet:6H
-/K8wb8zOd:6H
-/KAMALA:3M
-/KAREN:2T
-/KB:3A
-/KFC:3C
-/KForKende:4N
-/KGWo:6B
-/KING_JAFFE_JOFFER:2T
-/KKK:51
-/KKKman:6C
-/KLaus:2T
-/KLwu:0C
-/KN1FE:2J
-/KO:09
-/KOKOKO:4G
-/KO_:0D
-/KXTgYW:63
-/Kabe:3M
-/Kabewaki:6B
-/Kaffeine:6C
-/KaiLikesLinux:4G
-/KaitoDaumoto:2J
-/Kaivo:6H
-/Kaivo_:6H
-/Kale:03
-/Kali:0A
-/KaliEMO:2D
-/Kaliuna:6B
-/Kamping_Kaiser:0A
-/Kanabit:2T
-/Kaorub:03
-/Karen:0C
-/Kasm279:51
-/Katou:6C
-/Kcznsk:6C
-/Kcznsk1:09
-/Keb:51
-/Kebo:3A
-/Kebolio:42
-/Kebolio_:63
-/Kefka:2B
-/KeiCha:4G
-/Keik0s:3C
-/KeiraT:0C
-/Keivi:25
-/Keiya:3H
-/Kemwer:03
-/Kenneth_Andersson:3M
-/Ketchup901:1Z
-/Kettering:2T
-/Keven:2D
-/Kevlar_Noir:0D
-/Khaotic:0D
-/KhashayaR:3A
-/Khea:6C
-/Khea_:3C
-/KiGv:1C
-/Kiitt:2J
-/Kijt:0C
-/KillMePlease:25
-/KillaH:6B
-/KindOne:5E
-/KindOne_:1C
-/KindTwo:42
-/KineticUser-1729:63
-/King:63
-/King20:51
-/KingNick:3H
-/KingNickl:42
-/KingOfKings:2J
-/KingTuT:3A
-/Kirakishou:3C
-/Kirakishou_:4N
-/Kirk:1Z
-/Kirkland_Signature:51
-/Kirtaner:0C
-/Kirtide:0D
-/Kirtide_:0C
-/Kiss:0D
-/Kiss_:6H
-/Kiss__:3A
-/Kit:1Z
-/KitAgain:63
-/KitFlamin:3M
-/KitMega:25
-/KitPro:3H
-/KitSet:4N
-/KitSet_:51
-/KitSn00p:63
-/KitTheMer:0C
-/KitUltima:3M
-/KitWisdom:42
-/Kitt:09
-/Kitty:51
-/KittyKatt:51
-/Kitu:51
-/Kiva:2J
-/Klaatu:25
-/Klaus:1C
-/Kliment:1Z
-/KnVnpWRXL:0C
-/Knackwurst:0D
-/Knicks-Fan:4G
-/Knobio:40
-/KnuX:5E
-/KnuX[absent]:2J
-/Kobe-24:0D
-/Kobe1Keno:3A
-/Koduck:0C
-/Koi:0D
-/Kompromat:2T
-/Konox1337:3M
-/Koragg:6C
-/KornKage:1Z
-/Korthrun:0C
-/Kotomi:0C
-/KravMAGA:42
-/Kristal:63
-/Kristin:6C
-/Kritnich:6C
-/Krunge:42
-/KrysGaleh:0C
-/KtDarwin:3H
-/Kujata:25
-/KuluBot:0D
-/Kumool:3C
-/KuppyKeKs:0A
-/Kuro-chan:2J
-/Kuro-chan_:4N
-/Kuroi:3H
-/Kurokin:25
-/Kutgebruiker9000:1C
-/Kye:1C
-/Kyle:3H
-/Kyoon:1C
-/Kzer-Za:6C
-/L0DESCLIT:25
-/L0deStink:42
-/L0j1k:6C
-/L0j1k_:3A
-/L1CABA:3A
-/L4MvgGh:63
-/LB:25
-/LEB1969:0A
-/LEB2000:2D
-/LHI:6B
-/LHI[AFK]:1C
-/LOL_WUT:63
-/LOQUILLO:03
-/LOQUILLO_:2J
-/LOVE:3C
-/LOVE-:3H
-/LOVESCiENCE:0C
-/LOVESHAC1:0C
-/LOVESHACK:63
-/LUKS:42
-/LaRose_Bleu:5E
-/Lab:5E
-/Laceless:09
-/Lacer:5E
-/Lad-Russo:0C
-/Lady_D:1Z
-/Laegha:42
-/Laekon:1Z
-/Lahey:6H
-/Lahey-:0A
-/Lakereke:0C
-/Lama^jo:3H
-/LambastMo:3M
-/Lamontcol:2D
-/Laphroaig:3H
-/Laris:3M
-/Laris-:4C
-/Lasall:5E
-/LaserEyess:1C
-/LatinLover:03
-/Laurie:2D
-/LaydGirLL:63
-/LazyMouse:6A
-/Le:6C
-/LeBlueMice:3M
-/Le_Coyote:6C
-/Lebbe:40
-/Lebluemice:4N
-/Lebluemouse:3M
-/Leeloo:2D
-/Left`ie:3C
-/Leila:3A
-/Leissi:3C
-/Leissi_:09
-/Leito:0C
-/Lemon__:25
-/Lenore_Nevermore:3M
-/Leslie:2J
-/Leslie_:0D
-/Lestat:25
-/LestatC6:2D
-/LestatCap:6C
-/LetsDie:25
-/LetsLive:5E
-/LetsSolve:3C
-/LiCeUser1:0D
-/LiCeUser4:0D
-/LiL-FeLLa:40
-/LiQWuD:03
-/Libram:6B
-/Librarian:3C
-/Libre___:4G
-/LieNdre:42
-/LiftLeft:6B
-/LikMYoung:63
-/LilNigBoy:03
-/LilNikita:4G
-/LimitServ:1C
-/Linda:1Z
-/Link:2J
-/LinoYeen:51
-/Lions:25
-/Lions_:2D
-/Liothen:51
-/LiqWuD:6N
-/LisaPregg:3M
-/LittleWytch:3H
-/Livestradamus:2J
-/Llllllllll:1C
-/LloydC88:51
-/Lm4:4G
-/LmaoPubeBoyFailedStartup:3H
-/Lmouse:09
-/LoKii:0D
-/LoKii_:4G
-/LoL-BooBs:09
-/LoLa_BuNNy:63
-/Lolipop:0D
-/LoneWolf367:3A
-/Loner:25
-/Long_distance_M:09
-/Lord255:2T
-/Lord255_:0A
-/LordKing:09
-/LordOfValhalla:2D
-/LordToValhalla:25
-/Lord_KO:3C
-/Lorn:6C
-/LostBiT:4G
-/Louella:2J
-/Loyalist:63
-/Lthere:25
-/LuShang:2J
-/Lucas:4G
-/Lucas_:51
-/Lucifer:6B
-/Lucifer_:25
-/Lucille:2J
-/Ludax:63
-/Lue:3H
-/Lukah:42
-/Lukin:1C
-/Lukin_:03
-/Lukin_HAL:2B
-/LukrBtyan:2T
-/Lulzy:0D
-/Lumez:4N
-/Luxmem:4G
-/LvQbrKxjXuAnErzV:4G
-/LwXhpMetC:4N
-/Lynn:4C
-/Lyphe0:42
-/Lypheo:5E
-/Lznj:0C
-/M-Cburton:51
-/M16:2D
-/M4riu5:4N
-/MAGA2020:6C
-/MAGIC:2J
-/MALMM:3C
-/MC-SharP:09
-/MCUIRCClient:3H
-/MCWEENY:0C
-/MDMA-:1Z
-/MDMA_:3C
-/MGTOW:1Z
-/MGpOH8SEl:25
-/MGree:6C
-/MIKEJONEZ:6B
-/MISTERCOINBLATT:51
-/MKULTRA:2B
-/MK_Delta:3M
-/MK_Naomi:6H
-/MK_Ultra:6H
-/MNKU:03
-/MNXa:03
-/MRMET:42
-/MRNFN80:4G
-/MTCan__:03
-/MTcan_:5E
-/MTcan__:51
-/MTcan___:4N
-/MTv:0C
-/M_epshee2:09
-/M_epsheep:4G
-/MaL-E:6B
-/MaLi:6B
-/Mac101:3C
-/MacYET2:63
-/Macedonia:42
-/Macrotech:3H
-/MadDecent:51
-/Mad_Love_Modus:3M
-/Maestral:1C
-/MagicBot:3H
-/MagicPencil:3A
-/Magneto:6H
-/Magnolia:4N
-/MagnuzMaximuz:0A
-/Magoggles:2J
-/Mahjong:1U
-/Mahjong1:2J
-/Mai:3H
-/MaidenAmerica:25
-/MajMajorMajorMajor:4G
-/MajorRizon:6C
-/ManDick:0C
-/Manhattan:42
-/Manifesst:25
-/Manny:4G
-/ManofHumilty:03
-/Mantis:25
-/Mantis_:25
-/Marburg-chan:1C
-/MarcLepin:3C
-/Marcella:2D
-/MarceloCM:2B
-/MarcinWieczorek:6C
-/MarcinWieczorek_:0C
-/Marcus_Aurelius:3M
-/Marianna:63
-/MarieLoew:0C
-/MartijnBraam:3A
-/Martina_i:1Z
-/Martine:1C
-/Martini:2J
-/Mary:3M
-/Maser:4N
-/MasterKat:6C
-/MasterOfMuppets:63
-/MasterdonX:6H
-/MastrKat1:63
-/MastrKate:1U
-/MathMan:1Z
-/Matilde:51
-/MattG:5E
-/Matt_P:63
-/Matthew:2T
-/MatthewG:4G
-/Matty:2T
-/Matumbi:25
-/Maximus:2T
-/Maxwell:6B
-/Maxximus:2J
-/Maxximus_:2T
-/Maylay:03
-/Mbar:3H
-/Mbla:09
-/McKat:51
-/McMurphy:3C
-/McQueen:4C
-/MeaningfulNick:1Z
-/MeatStick:1Z
-/Medig8r:5E
-/Medih8r:4C
-/MediumAbner:0A
-/Medusa:0C
-/Medusa-chan:1C
-/Meekrab:3C
-/Meepshee1:09
-/Meepsheep:51
-/Mehh:6C
-/Mehh_:0D
-/Mehhh:2T
-/Mei:2D
-/Mellowchan:1Z
-/Mellowlink:1C
-/Mend3s:1C
-/Mentok:6H
-/Mestri:6A
-/Mezz:2T
-/Mezz_:03
-/Mezz__:6B
-/MiCulo:4C
-/MiDoolo:63
-/MiMelio:3H
-/Mi_92:3A
-/Michael:63
-/Michael^:6C
-/Michael_:63
-/Michiellll:09
-/Mickey:42
-/Micoolo:6B
-/MidnightRanger:3C
-/MidnightRanger_:4G
-/Miep:1Z
-/Miggy`:2J
-/MikeBlack:42
-/MikeMurdock:03
-/MikeS:42
-/Mikollo:3H
-/MikooIo:3H
-/Mikoolo:51
-/MilkJug:4G
-/MillerBOS:6B
-/MillerBOSS:3H
-/Milli:1C
-/Milliway:2D
-/Milliways:25
-/Milliways-:2D
-/Milton:6H
-/Minamo:3M
-/MinimE:51
-/Minnen:0D
-/Minnen|:0A
-/Mirc0p:63
-/Missssy:42
-/Mista:25
-/Mister_X:0A
-/Mithras:0A
-/MnmJ:4N
-/MoRpHiNe:2T
-/MoRpHiNe-:0D
-/MoX:3A
-/Moab:3H
-/MobileRoey:09
-/Mod:6H
-/ModsToHell:2D
-/ModsToHell60:6H
-/ModsToHell64:1C
-/ModsToHell66:3A
-/ModsToVahala:1C
-/ModsToVahala21:3A
-/ModstoVahala:2T
-/MoeIcenowy:4N
-/Moeph:5E
-/MohammadUddin:25
-/MojoRizon:2T
-/Molly:2D
-/MommyJean:2D
-/MommyJeans:2D
-/Monalisa:3M
-/MonkeySp:5E
-/Monroe:6H
-/Monty5:2D
-/Mooing-Bun:63
-/MoonUnit:3C
-/Moone:4C
-/MooseGod:0A
-/Mort:2J
-/Mortimer:6B
-/Mortir:0D
-/Morty:3H
-/Mosquito:4G
-/MotherSuperior:09
-/Motives:63
-/Moudi:25
-/Movieguy:0D
-/Mp3S3v3r:63
-/Mpshp:5E
-/Mpshp_:6B
-/MrC:2T
-/MrCat:6C
-/MrChimp:03
-/MrDetonia:09
-/MrMW:03
-/MrMiagi:1Z
-/MrMisery:25
-/MrMoose:0A
-/MrOats:6H
-/MrRandom:25
-/MrRandom_:0D
-/MrReader:51
-/Mr_Freeman:03
-/Mr_Keyser_Soze:6B
-/Mr_wh1t3:0C
-/Mrox:6H
-/MrsLovejoy:42
-/Mr|Dave||:6C
-/Mr||Dave|:1C
-/MsBIOS:2D
-/MuNk:3H
-/MuTao:63
-/Mufasa:2T
-/Mufasa_:0C
-/Muffin_Man:0C
-/Mule:0A
-/Mule_:0D
-/MummyJean:4N
-/MummyJeans:3M
-/MuroAmi:4G
-/Muscles_of_homosexx:3C
-/MusicKing:25
-/MusicKing8:2T
-/MusicKing9:2T
-/MyAss:4G
-/MyDickInMyHand:09
-/MyMickeyInMyHands:63
-/Myrtle:42
-/Mystic-Mac:1Z
-/Mystic_Mac:1C
-/Mystic_Mac_:51
-/MysticalD:51
-/N:25
-/N1XX_:4N
-/N3150:4C
-/N3150_:42
-/N3150__:2T
-/N350:3M
-/N3TFL1X:03
-/NANCY:5E
-/NBA2K21PC:3H
-/NC1776:25
-/NES:4N
-/NHS:0A
-/NIN101:2J
-/NLDM:6H
-/NSA:2T
-/NSAGov:3M
-/NSAnigger:42
-/NUGu:42
-/NX4bb:6B
-/NZpF:4C
-/Nabilushk:6C
-/Nachlader:51
-/Nadezhda:51
-/Nadyushka:4G
-/NaiGhe:4C
-/Naia:3H
-/NakaNaka:2D
-/Nakah:25
-/Nan:5E
-/Nando:03
-/Nanoha:3C
-/NaomiShaniquala:6B
-/Naomi_Shaniquala_Al-Baghadadi:0D
-/Naomi_Shaniquala_Al-Baghdadi:5E
-/Nap:0A
-/Nap0:09
-/Narple:42
-/Nasrani:03
-/NatGreen:1Z
-/Navi21:0C
-/NcXk:2T
-/NeX-:51
-/Nea:1Z
-/NebulaAI:42
-/NebulaCentre:63
-/Nebula_W-:2D
-/Nebula_W2081d:0A
-/Nebula_W2082d:3C
-/Nebula_WD40:3A
-/Necrodancer:6C
-/Necrodancer`:6H
-/NedDigger:2J
-/Ned_Digge:63
-/Negra:09
-/Neijei:03
-/Neil2:1C
-/Neil_:3C
-/Neil_Zaza:0C
-/NejjqsJyR:2J
-/Nekobot:4G
-/Nekobot1:25
-/Nemesys:2D
-/Nemomen:0C
-/NerdCore:09
-/NerdLyfe:3A
-/NerdyGirl:3H
-/Nesie:2D
-/Netboy3:6H
-/Neutrino:6H
-/New:51
-/NiKaN:03
-/Nice:42
-/Nick71:4N
-/NickSerc:25
-/NickServ:3H
-/Nick_Gerkiller:3M
-/NigerMurderer:2D
-/Nigger:51
-/Nikitis:2B
-/Nikola:5E
-/Nikonova:2D
-/Nilfirith:2T
-/Nilgeist:1C
-/Nilgeist_:42
-/NimFan:4G
-/NiniGeo2:4C
-/Ninja3047:42
-/NinjaMast:40
-/Nintenuen:4C
-/Nipun:4N
-/Nka:3C
-/Nl3avE:1Z
-/NoLivesMatter:1Z
-/NoStepOn:0C
-/NoXPhasma:1Z
-/No_One:0A
-/Noemi:4C
-/Nognosis:4G
-/Nol888:4N
-/Nomkid:6B
-/Non-ICE:6H
-/Nora11:42
-/Norsemen:63
-/Norvegia:2J
-/NotALawyer:0C
-/NotAnna:3M
-/Not_Beast:1U
-/NotnotOutOfGum:42
-/Noxturnix:09
-/Nrk:3C
-/Nslobz:3H
-/NuSpike:1C
-/Nuclear:3M
-/Nugem:6H
-/NukesTop5:0A
-/Null_:2D
-/Nuotoh:42
-/Nyx:0C
-/N|GG0R:6C
-/O:6B
-/OCCLNkjkK:2B
-/OKIU:4N
-/OMg74:4N
-/OMg747:3A
-/ONhB:3C
-/ORIENTAL:4N
-/ORIENTAL16:42
-/OXaku:42
-/O_od:42
-/ObLQ:42
-/Obama:5E
-/Obl1vion:51
-/Oblivion:03
-/Obunga:6C
-/Ofelia:6B
-/Ogre:0C
-/Ohfah:2J
-/Ohfai:5E
-/Ohgac:1C
-/Ohkaa:3C
-/Oksana:25
-/Oksana_:63
-/Oksana_Baiul:2D
-/OldGnom:2J
-/OldSch00l:6C
-/OldSchoo1:3H
-/Oluc:0A
-/Omelette:6B
-/OmenOvKane:3H
-/OmenOvKane_:3C
-/Omen_Ov_Kane:2T
-/OmerAti:2J
-/OnLine:0D
-/OnMind:09
-/OneBTS_:09
-/OneBTS__:3H
-/OneBTS___:0C
-/OneVision:4C
-/OodieT:3H
-/Oongia:2T
-/OpaAdolf:5E
-/OperServ:2J
-/OperatorR:6H
-/OpiSIS:4N
-/OpiSIS_:0C
-/Oprah:09
-/OrGoN3:3A
-/OrcaKun:5E
-/Orelob:6B
-/Ori_B:51
-/OriginalAntiHustler:5E
-/Orillion:1Z
-/Orval:3M
-/Osama:6B
-/Oscar:0C
-/Oshkosh:51
-/Osloane:1Z
-/Osloanie:1Z
-/Othermeats:3M
-/OttoYukie:5E
-/OutOfGum:6C
-/OutOfGum_:0C
-/OutOfGum__:4G
-/Outlaw:3A
-/Outlawed:4G
-/OutlawedOutlaw:4C
-/OverFiend:3M
-/OverMind:2J
-/Ovular:51
-/Owl:1C
-/OxYCoNtiN:0D
-/Oxdeadbeef:3H
-/OyashiroChama:09
-/OzRat:5E
-/OzRat_:6C
-/P00Pstink:51
-/PATTY:0C
-/PC__:0C
-/PEDOMETER:42
-/PEEgwvviG:6A
-/PG13:1Z
-/PHPWoman:1C
-/PIES_:42
-/PIba:2T
-/PKFraudster:6C
-/PKsimp:3C
-/PLSk:3A
-/PPA:51
-/PPs:0C
-/PQLe:2D
-/PR0PH3T:2T
-/PRETEXTATO:2D
-/PSyMASA:1C
-/PXPYxI3:42
-/P_B:6C
-/Paddy:5E
-/Palaver_:2D
-/PaleHorseGiddyUp:2D
-/PaleHorseGiddyup:09
-/Pali:6B
-/Palmon:3A
-/Pamela:2J
-/Pantheistic:03
-/Parf:4G
-/Parf_:51
-/Parfing:25
-/Parfingto:3H
-/Parfington:42
-/Parfol:3P
-/Passcor:4N
-/Passivit1:6B
-/Passivity:5E
-/Passivity2:5E
-/Patch:1C
-/Patch_:5E
-/Patrese:51
-/Patrick:3A
-/Patrick^:6H
-/Paul:42
-/Paula:6B
-/PbiipxD:0A
-/PdTMmFv:4C
-/Pe2WVOhlb:1C
-/PeGaSuS:5E
-/PeacefulDeath:3M
-/Pear:03
-/Peebs:0A
-/Peggy:0D
-/Pelos:3C
-/PepeLopez:1Z
-/PepePains:3M
-/PeptoBismark:0C
-/Peregrinus_:09
-/Peregrinus__:5E
-/Perineum:3A
-/Perkele:3H
-/Perv4chat:0D
-/PervFag:6B
-/Petar_:3C
-/PeteyPebbles:2J
-/PhahH:3H
-/Phallus:42
-/Philas:25
-/Phish:3C
-/PhoneOwner:6B
-/Phy:3A
-/PiOjitoh:3C
-/Piba:42
-/PicantePaavo:6C
-/Pikachu:1Z
-/Pillus:03
-/Pinco:4C
-/Pineapple:42
-/PingPong`:4G
-/Pinguo:3H
-/Pinkisjustnumber:51
-/Pinklady:6C
-/Piojo:03
-/Pipel:42
-/PissWizard:3C
-/Pistachio:51
-/Pixi:6B
-/Pixi_:0A
-/Pixi__:0C
-/Pixi`:2J
-/Pizza_:4N
-/PlanBinc:2T
-/Plas:2J
-/Plas_:6B
-/Platinum_:42
-/PleXus:0C
-/PleaseSuckMyDick:5E
-/Ploks:6H
-/Ploo:1Z
-/PmIS:0C
-/PoPp:03
-/Poirot:3C
-/Pol_Haddad:09
-/Police:09
-/Politik:2T
-/Pontuzz:3C
-/Pontuzz_:4N
-/Ponyo:5E
-/PonzoSporrigan:2J
-/PooftersFroth:4C
-/PoolShark:42
-/Poorchop:4C
-/Poot:1Z
-/Popper:2J
-/Porco:3H
-/PornStar:63
-/PostKode:4N
-/Potardo:3A
-/PrOZaC:3M
-/PrOZaC-:42
-/Prendar:51
-/PriVEHTqK:1Z
-/PrimalP67:1C
-/PrimalP76:6B
-/PrimalP92:1Z
-/PrimalPuppy:1Z
-/PrinceUSA:3C
-/PrincessEmmaOfNorway:25
-/PrincessKitanaEliteDarkWhite:3A
-/Prinsessa:51
-/ProfesionalRapist:3C
-/ProfessionalRapist:4G
-/ProfessionalRapistTT:25
-/ProgressiveRapist:2T
-/Proklantis:2J
-/Proleeh:4G
-/Prometheus:4G
-/PrometheusRising:42
-/Protestant:25
-/ProtoType:3A
-/ProudBoy`:6H
-/Provic:3C
-/Przemek92_:0A
-/PsYcHoPaT:4N
-/Psion:3C
-/PsyChoop:1C
-/PsyChoopa:4N
-/PsyMassa:3A
-/PsyMaster:42
-/PsyMastre:63
-/Psymaster:4C
-/PubesGrowGrowGrow:1C
-/Publios:6N
-/Pucker:0D
-/PuertoRoc:6H
-/PumpSlut:4N
-/PumpSlut`:0D
-/PuntGathrr:4N
-/Punter:0A
-/PureTryOut[m]:3H
-/Purpl:6C
-/Purple:3C
-/Purpleb0w:2T
-/Purplebow:2D
-/PussyHater:03
-/PussyKiller:63
-/PyR3X:1U
-/PyR3X_:4G
-/Pzex:63
-/Q2M0xl:2J
-/Q91:42
-/QANON:5E
-/QAnon:1Z
-/QDX45:6C
-/QJoP:1Z
-/QKnown:0A
-/Q\ANON:03
-/Qnorsten:1Z
-/Qnus:09
-/Qoggis:3C
-/QuadRTX:3C
-/QuadRow:42
-/Quallure:51
-/Quandall:6H
-/Quanemmi:4C
-/Quantum_Alpha:2D
-/Queer91:25
-/QueiDa:6C
-/Qui_Sum:3H
-/Quindall:2T
-/Quinii:6B
-/Quixo:2J
-/Quotes:03
-/R:09
-/R0ckSh0x:6B
-/R0nnie:1Z
-/R2D2:5E
-/R3D3:1Z
-/R4D4:63
-/R4Rfw:0D
-/RABIA[45]:4G
-/RAPISTofficial:51
-/RASHIDA^wolfgang:63
-/RAlex:03
-/RDyLzgdMp:4G
-/RJ45:3H
-/RJ45_:2J
-/RMOTAO:3M
-/RPG:3H
-/RTB:5E
-/RTB_:0C
-/RTFT:0D
-/RTX3090:3M
-/R_Reagan:2J
-/Raaku:2B
-/Rabid_Masochist:6B
-/Raccoon:3H
-/Raccoon`:3C
-/Rachael:4N
-/RacistBat:0C
-/RackSmurf:0D
-/Radio:2T
-/Rafaela:1C
-/RaginCajun92:6H
-/Ragone:2D
-/Raina:3M
-/Raina_:3A
-/Ran:3M
-/RanchIsla:3C
-/Rando:3M
-/Random:6C
-/Random024:09
-/Random024A:3A
-/Random1:4G
-/Random420:1Z
-/Random4200:25
-/Random42000:2D
-/RandomPir49:3C
-/Randy:1Z
-/Randy-:2D
-/Randy_:3H
-/Randy__:4G
-/Raoknar:2T
-/RapStar:1C
-/RapeIsaRight:25
-/RapistLifeMatters:09
-/RareDCOMC:1Z
-/RaySting:4G
-/Raya:0C
-/RayaMew:2J
-/Rayaa:6C
-/Raymond:4N
-/Rayvyn:03
-/ReThan:4G
-/Reader:0A
-/Ready:51
-/Ready_:09
-/RealJew:2J
-/RealKit:4C
-/RealSatoshiNakamoto:4N
-/Rebecca^:4N
-/Red:25
-/Red14:3A
-/RedW:6C
-/Reed39:1C
-/Reed_Solomon:0C
-/Regor:51
-/Relena:4G
-/Relih_:51
-/Relis:4G
-/Relis7:6C
-/RemyV:09
-/Rena_Ryugu:3M
-/RepairManManMan:1C
-/Requit:4G
-/Retalin:4G
-/RhinoBeetle:1C
-/RhinoCodes:2T
-/Rhum-blan:2D
-/Rhumblanc:0C
-/Rhvs:0C
-/Rhvs_:0D
-/RiTaLiN:3A
-/RiTaLiN-:09
-/RiTaLiN_:0A
-/Ricardus:4N
-/Ricardus_:0C
-/Ricardus__:0D
-/Richard^:63
-/RickJames009:4G
-/RickyRocks:4G
-/Riddrib:42
-/Riefie:3H
-/RigelStar:3M
-/RiggedHorror:03
-/RindFrost:2D
-/Ringo-:09
-/Ritche:25
-/Rizo98469:6B
-/Rjx:0A
-/RoBiN:6H
-/RoSe:3C
-/RobBond:3C
-/RobanovThomaski:3A
-/Robby:0A
-/Robert:4C
-/Robin:51
-/RobinHood:5E
-/RobotoneX:3H
-/RockShox:25
-/RockinRobin:51
-/Rodney:3H
-/Roedy:2D
-/Roffles:51
-/Roliga:6C
-/Rome:0D
-/Romer:3H
-/RonaldKof:03
-/RootA:51
-/RootB:2J
-/Rowan:25
-/RowdyFun:03
-/Royal:5E
-/Royce:3A
-/Ru:0D
-/Rue:4N
-/Rue_:0C
-/Ruemu:2J
-/Ruin:4C
-/Ruint:0A
-/Ruint-:63
-/Rukus:3M
-/Rukusz:3A
-/Rum:4G
-/RumpHurl:5C
-/Rusalka:5E
-/Russell:3C
-/Russell-:4G
-/Ruth:0C
-/Ruthless:6C
-/Rwiz:3M
-/Ryan_Evans:1C
-/Rytord:1C
-/Ryuuguu:3H
-/S2AmgpXFp:2D
-/S2N2:51
-/S3N7IN3L:2T
-/S3xyL1nux:63
-/SBG:0C
-/SBn00b109:3H
-/SBn00b156:09
-/SBn00b157:1C
-/SBn00b176:51
-/SBn00b192:40
-/SBn00b200:2J
-/SBn00b240:40
-/SBn00b245:0A
-/SBn00b269:2J
-/SBn00b29:4N
-/SBn00b324:5E
-/SBn00b328:09
-/SBn00b361:4C
-/SBn00b376:1Z
-/SBn00b377:5E
-/SBn00b389:51
-/SBn00b398:6B
-/SBn00b412:09
-/SBn00b420:5C
-/SBn00b469:40
-/SBn00b528:03
-/SBn00b551:6N
-/SBn00b579:6N
-/SBn00b589:2D
-/SBn00b631:2D
-/SBn00b668:0C
-/SBn00b671:1Z
-/SBn00b678:3P
-/SBn00b724:6H
-/SBn00b735:40
-/SBn00b773:6A
-/SBn00b823:63
-/SBn00b826:40
-/SBn00b85:3H
-/SBn00b852:3M
-/SBn00b86:5C
-/SBn00b872:2B
-/SBn00b911:2J
-/SBn00b979:0C
-/SBn00b987:09
-/SBn00b994:2B
-/SCHAPiE:2J
-/SD:3A
-/SDCHN:03
-/SDr:1C
-/SE:1C
-/SEEN:3H
-/SENebula_W2081d:1C
-/SEPassivity:3H
-/SERGE90:3A
-/SEX:51
-/SH3RM:2J
-/SHEENY:4C
-/SINOHAWK:0C
-/SLAAAPP_YUA`-:42
-/SLAAPP_CORP`-:4G
-/SLAAP_CORP`-:6B
-/SLAPP_ASS`-:1C
-/SLAPP_BAN`-:1Z
-/SLAPP_CEO`:03
-/SLAPP_CEO`-:3A
-/SLAPP_CON`-:1Z
-/SLAPP_COR:1C
-/SLAPP_CORP:4C
-/SLAPP_CORP`-:4N
-/SLAPP_CO`:51
-/SLAPP_CO`-:2D
-/SLAPP_CUM`-:2T
-/SLAPP_DOCTOR`-:5E
-/SLAPP_DUDE`-:09
-/SLAPP_INC`-:6B
-/SLAPP_IT`:03
-/SLAPP_IT`-:42
-/SLAPP_NET:6H
-/SLAPP_NET`-:4G
-/SLAPP_NOW`-:51
-/SLAPP_NO`-:2D
-/SLAPP_ON`-:63
-/SLAPP_PORN`-:51
-/SLAPP_U`-:63
-/SLAPP_YOU`-:0C
-/SLAPP_`-:42
-/SLAP_CORP`-:0C
-/SLAP_INC`-:42
-/SLAP_PRO`-:63
-/SLAP_TV`-:6H
-/SLu7:2T
-/SNIFF:40
-/SOMTA:1Z
-/SP3:4N
-/SP9002Alu:5E
-/SPOON:4N
-/SRBLuka:3M
-/SRBLuka_:2T
-/SRidc32t:0C
-/SSI_bux:1C
-/SS_CORP`-:51
-/STARY_FON:3C
-/STUPID:3M
-/SWEJ:6C
-/SWL:03
-/SXL:4G
-/SYF_:6C
-/S_Co`-:2D
-/Sagara1:25
-/Saidu:1C
-/Saifxin:5E
-/Saitan:42
-/Sakuyak:0C
-/Salvadori:4N
-/SamHyde:0C
-/SamIam:2J
-/Sam_:6C
-/Samantha^:3M
-/Samhain:51
-/Samy:4N
-/Samy^ZzZz:6C
-/SandFlow:6H
-/SandPower:6C
-/Sander:6C
-/Sandflow:25
-/Sandra:0C
-/SanePerson:25
-/Saneperson:4C
-/Sanguine:2D
-/Santiago38:09
-/Santiago38_2:4N
-/Santiago38_3:03
-/Sapphirus:1C
-/Sarah^:2D
-/SatanX:1C
-/Sathurion:5E
-/SaylrMoon:2J
-/Scalia:1Z
-/SchwarzeLocke:2D
-/Scientist578:4G
-/Sciuro:6B
-/ScoobsMcD:3A
-/Scopes:0A
-/Scotteh:1Z
-/Scrappy:25
-/Scub:4C
-/Sd:3A
-/Se8v:4C
-/Searbo:6H
-/Secondary:42
-/Secondary1:1C
-/SeeRob:25
-/Seepei:5E
-/Seerbo:2D
-/SeiZe:0A
-/Seirdy:0C
-/Seirdy0:3H
-/Self-Love:3C
-/SelfDJ:2D
-/Semilevel:0D
-/SendInTheFeds:1C
-/SendInTheMeds:4N
-/Sentient:2D
-/Serah:42
-/Seran:63
-/SereneBea:63
-/SereneSwan:3C
-/Seres:0D
-/Seresu:0D
-/Serh:3H
-/Serh_:6B
-/SeriousCouching:1Z
-/Server-Rooted-By-CSH-Members:6C
-/ServiceBot:09
-/Seshat:3M
-/Seshat`:03
-/SethRCooper:4N
-/SethRCooper78:2T
-/SethRyanCooper:51
-/Seth__:09
-/Sexton-Hardcastle:51
-/Sexton-Hardcastle5:63
-/Seyaryuki:42
-/Sh3r1ff:6H
-/Sh3rP:0C
-/Sh3rP_:3H
-/Sh4rP:63
-/Shadowmm:2D
-/Shadowmm-:0C
-/Shadowmm_:1Z
-/Shahid:4G
-/Shane:2J
-/ShannoW:42
-/SharP-:4G
-/SharP0ink:5E
-/SharP99:1Z
-/SharP_:25
-/SharP_X9:2J
-/SharP_x3:0D
-/SharP_x5:2J
-/SharP`:63
-/SharkB0lz:09
-/Shark_CHX:2D
-/Shark_YDQ:1Z
-/Sharky:3C
-/Sharon:5E
-/Shawn:4C
-/Sheep:4G
-/Shelly:42
-/Shillos:2T
-/Shine-j2me:03
-/Shinku_:4C
-/ShinyRice:09
-/Shipp:25
-/Shirakawa:40
-/ShitTierSpaghettiCoder:0C
-/Shm00:3M
-/Shooxo:0C
-/Shuqu:1C
-/Siberian_Shaman:2J
-/Silence:42
-/SilentAnime:3M
-/SilentMES:63
-/SillyGoose:5E
-/Silver4K:63
-/SilverSpoon:3A
-/Silverbac:2B
-/Simping:63
-/Sinusoid:3C
-/Siousxie:4C
-/Siouxsie:6C
-/SirVerII:2D
-/Sirdon:3H
-/Sithlord:25
-/SixNein:3A
-/Skaface82:4N
-/SkinFlute:63
-/Skrillex:03
-/Sky-Wizard:3C
-/SkyDad:1C
-/Sky_Wizard:3C
-/SlaSerX:63
-/SleepyMokou:6C
-/Slimey:0A
-/Slugs:6B
-/Slumlord:2J
-/SlyTheDog:6C
-/Smagigy:0C
-/Smaque:4G
-/Smaque_:3P
-/Smaque|2:03
-/Smax:09
-/Smax`:3H
-/Smegma_Sandwich:09
-/Smoke:3C
-/SmokeyZ:0A
-/Smoque:4N
-/SmutLord:63
-/SmutLord^:0C
-/Smutlord:4C
-/Snail:3A
-/Snail_:1Z
-/SnakeEyes:3A
-/Sniper:3M
-/SnowDrop:3M
-/SoB:0D
-/SoPasqyfW:0A
-/Sobek:03
-/SocialistRapist:1C
-/SockMonkey:1Z
-/Sofiia:3A
-/Sog:1C
-/Sog51:4N
-/SolarAqu-:0A
-/SolarAquarion:6H
-/Solbu:1Z
-/Soldev:3A
-/Solo:4G
-/SoloEjo27:1C
-/SomeB:4N
-/Someblackguy:5E
-/Sonder:51
-/Sonder_:1Z
-/SoniCF242:25
-/SoniCFL:6B
-/Sook:42
-/Sookie:09
-/Soosi:4G
-/Sopel:2J
-/Sophie:3H
-/Soraya:0D
-/SoreNina:6H
-/Soreina:1C
-/Soros:4G
-/SoulCareer:5E
-/Souseiseki:1Z
-/Souseiseki_:03
-/Southern_B|tch:42
-/Southern_Gentlem:3H
-/SouulCareer:4N
-/SovereignNSW:03
-/Soviet_Soldier:09
-/SoyBot:6C
-/SoyBot_v2:2D
-/SoyLunafan:1Z
-/SoyberManifest:4N
-/SpaceDoG:3C
-/SpamcyPnt:0A
-/Spartacus:2J
-/SpearRaven:2D
-/Speario:3M
-/Special-G:2J
-/SpiderGwen:3C
-/SpiredMoth:6B
-/SpmcyPntz:6H
-/SponeBob:7E
-/Sponk:2D
-/SponkH:4N
-/Spooky:09
-/Spooky_:1Z
-/Sprinkle:0C
-/Spud17:25
-/Spydar007:1Z
-/St0ner`:6B
-/StCyber:51
-/StUcK2[S:51
-/Stalin:1C
-/StanMarkov:2J
-/Stanley:42
-/Starla:0C
-/Starter:5E
-/StaticX:1C
-/Statton:0C
-/Stealth:4N
-/Stefan:1Z
-/Stella:5E
-/Stellar:3C
-/StephenLynx:2D
-/Steve:3C
-/SteveM:2J
-/SteveV6:3A
-/Stewie:03
-/Stfuktx:3A
-/StillCyco:0A
-/Stillgerm:6B
-/StinkySteve:25
-/Stoney:0D
-/StoneyBark:1C
-/Stormo32Piqued:2D
-/Stormo32Piqued__:4N
-/StormofBytes:3C
-/Strasbourgs:2D
-/StripleP:2D
-/StrongBad:42
-/StrongGod:6C
-/StrongSad:25
-/StrongTop:1Z
-/Stuk:5E
-/SuchWow:2T
-/SuckBoiSlime:1C
-/SuckMySmallDick:4N
-/Suffer:51
-/Suffering:09
-/Sufo:4N
-/Sugar_:3H
-/Sugar__:0C
-/Sugar___:25
-/Sugar____:40
-/SuicideHelper:42
-/SuicideMaster:0C
-/SuicideSupport:3M
-/Suigintou_:25
-/Sumbrero:6H
-/Summer2020:51
-/Sun:5E
-/Suntop:09
-/Suntop_:1C
-/Suntop__:2T
-/Superstar:3A
-/Superzak:0C
-/Superzak_:1C
-/SurplusCamel:51
-/Susan:3M
-/SuspiciousPizza:03
-/SvenG:0C
-/SwampAss:3C
-/Swayze:1Z
-/Swayze_:51
-/Sweag:0C
-/SwedishMeatball:42
-/SweetPoto:1Z
-/Swin3:0D
-/Swine:09
-/Sycophant:2J
-/SyneRyder:0C
-/Synth:6B
-/Syzop:51
-/T-2:3A
-/TAFKAMP:25
-/TAFKAMP_:0C
-/TAS-2012v:3M
-/TAS_2012v:3M
-/TBNK420:2T
-/TCZ:63
-/TDK:0C
-/TGMC:1C
-/THATFUCKN:1Z
-/THEGAME:25
-/THERULES:03
-/THE_FORECASTER:3A
-/THEjman:4N
-/TJC2020:2D
-/TJC2040:4N
-/TJzaXOqQO:2D
-/TK614:1C
-/TKO:1Z
-/TOMBRADY:3A
-/TRANS:40
-/TRB143:4N
-/TRUGOAT:6B
-/TRUMP2020:1C
-/TStark:1Z
-/TUDOR^1985:0A
-/TVfan69:42
-/T_D_H:2J
-/TaWPgLnXV:5E
-/TaZeR:0C
-/TaZeR2:4G
-/Tableset:4G
-/Tacky:51
-/TackyTack:03
-/Taetarthe:3M
-/Taetarthe1:1U
-/Tagged:3H
-/Tai:6H
-/Taigabot:25
-/Takehiko101:4N
-/Talia:0D
-/Talia`:6B
-/Tamaresu:1Z
-/Tanami:1Z
-/Tanoc:03
-/Tantivy:5E
-/Tar:0C
-/Taurus:1Z
-/TechB:3P
-/TechGuru:63
-/TechItch:63
-/TechSmurf:09
-/Techman:2J
-/Techman-:1C
-/Techman_:51
-/Ted:63
-/Teeed:3P
-/Teenagecitry:5E
-/Teeph:63
-/TekWizOne:6C
-/Tekdude:3A
-/Tekdude-:42
-/Tekdude2:2T
-/TekdudeLT:0A
-/TekdudeN:51
-/TekdudeN-:3A
-/TeleType:4N
-/TeleType_:51
-/Tempest:3M
-/TempoFunktron:51
-/Temptress:2J
-/TendieQueen:2T
-/Tenicu:2J
-/Teridax:3M
-/TerminatorOfVermin:6C
-/Tero:4N
-/Terofoo:2T
-/Terri:63
-/TestDude:09
-/Testah:4N
-/Testware:25
-/TgrS:1Z
-/Th3Z0h4n:2J
-/Thabtos:6H
-/Thacu:09
-/Thaodan:3H
-/The:0C
-/TheAssassin:2D
-/TheDarb:2T
-/TheDoctor:51
-/TheFag:6B
-/TheFalcon:25
-/TheGentleman:0C
-/TheGoodMa:63
-/TheHoliestRoger:4G
-/TheLegitimateMod:4C
-/TheLie:3C
-/TheMajesticCamel:51
-/TheMod:2D
-/TheNSA:1Z
-/TheNigerianPrince:51
-/TheOneAnd:3A
-/TheOneAndOnlyMod:6C
-/TheOnlyMod:2D
-/TheQuantumAlpha:2J
-/TheReader:40
-/TheRealKi:42
-/TheSashm_:3M
-/TheSashmo2:3H
-/TheSilentLink:4C
-/TheSilentLink_:0C
-/The_Blosso:4N
-/The_Hanging_Flesh__of_Jcaesar1:6H
-/The_Hatta:42
-/The_Myth:42
-/The_Real_Nebula:0C
-/Theas:0A
-/Theev:6C
-/ThermZ:6C
-/Thidran:25
-/Thidran3:42
-/This:1Z
-/Thisisbilly:3M
-/ThorDK:3C
-/Thor_dk:6H
-/Thorne:0C
-/Thorne_:0C
-/Thorne__:0C
-/Thorne___:09
-/Thot_Police:3A
-/ThruthHam:42
-/Thule2welt:3C
-/Thunder:2D
-/ThunderChicken:6H
-/TiLT:3H
-/TiSg:3H
-/Tibsi:03
-/Tiddles:0A
-/Tiddles_:6B
-/TideRZ:25
-/TideRZ2:6B
-/Tiefling:6B
-/TigerbotHesh:3C
-/TimWolla:42
-/TimWolla_:0D
-/Time:3C
-/TimeWolf:4G
-/Timorousness:0A
-/Timorousness1:0A
-/Timorousness2:0A
-/Timorousness3:0A
-/Timorousness4:0A
-/Timorousness5:0A
-/Timothy:2D
-/TimothyT:0C
-/TimothyWT:0D
-/Timourousness:0A
-/Timourousness1:0A
-/Timourousness2:0A
-/Timourousness3:0A
-/Timourousness4:0A
-/Timourousness5:0A
-/TirMcdhol:4G
-/TirMcdhol2:4G
-/Tjark:3M
-/TlrPrkGrl:6B
-/TnwR:0A
-/ToUsMiC:2T
-/ToWL:2T
-/Toastmaster124:6C
-/TohPiD:63
-/TokyoGringo:3M
-/TomHilnig:5E
-/TomatoSyn:6H
-/Tomma:4N
-/TommyHiln:42
-/Tomoko:51
-/TonTon:63
-/TonyL:42
-/TooCool:09
-/TooCool-:6H
-/TooCool_:2T
-/TooMuchX:6H
-/TooPi:03
-/ToofAudit:51
-/Tools:4N
-/ToonLink2:6B
-/Toothless:1C
-/TopBanana:4G
-/Toples:4N
-/Torikhtil:6C
-/Torikhtil_:09
-/Torrenter:3C
-/Tosiaki:4C
-/TotallyNotEKcryptor:0C
-/Touran:3C
-/Toxic:6B
-/Toyota:2T
-/Tracreed:3A
-/Trasp:42
-/Travis:2D
-/TreeServ:25
-/Trevelyan:63
-/Trichocereus:0D
-/Trickster:25
-/Trieste:1Z
-/TripityDudeGuy:3C
-/Tripper35303:6C
-/Tristan:3H
-/Trixar_za:4N
-/Trollol_owo:51
-/Truenos:5E
-/Trump20:42
-/Trump_202:25
-/Trumper:0C
-/Truth:03
-/Tsukasa-kun:4C
-/Tsutsu:3M
-/TubeStake:09
-/TubeSteak:6H
-/Tum:63
-/Tur:3C
-/Turrent:3H
-/Turrent_:4G
-/Tware:4G
-/TwiPrime:0C
-/TwinTail:4G
-/TwinTail_:3C
-/TwisT:25
-/TwisTg2sb:6C
-/TwisTqew3:4N
-/Tyrod:6C
-/Tyrone:25
-/TzepesH:1C
-/TzepesH_:09
-/U1S1A1:2D
-/U7v8:63
-/UBykpigKL:0C
-/UD98:0A
-/UFC:09
-/UFC_:5E
-/UIcT:4G
-/UOAM:4N
-/UTC:4G
-/UYLZ1:4N
-/UberGoof:0C
-/Uberius:25
-/Uberius_:2T
-/Uberking:6C
-/Ubermensc:4C
-/Ugur:2D
-/Uiwoo:25
-/Ultra-Far-Right:3C
-/Umeeg:6B
-/UmpireRewire:03
-/UnaChicaYeye:42
-/Uncled1023:03
-/Uncled1023_:25
-/Undefined_Reference:1Z
-/Underdose:5E
-/Undermose:0C
-/UniquelyGeneric:0A
-/UnrealFeeds:2J
-/Upaeko:63
-/UpandDown:1Z
-/UpnDown:4G
-/Uranium:1U
-/Uranium28:1C
-/Uranium58:1U
-/UrbenHulk:4N
-/Urine_Bubbles:1Z
-/Ursa:25
-/UserNo1:3C
-/UserOO7:6C
-/User_:09
-/User__:4G
-/Uthes:25
-/V1nL4nD:2D
-/V1nL4nD_:63
-/V1p3rBytes|`:2T
-/V3n3RiX:5E
-/VIKU:0C
-/VLetrmx:6C
-/VOiceMe:63
-/VPNmob:6N
-/VZfz:51
-/VaLiuM:6B
-/Vaerchi:42
-/Valyrie:25
-/VampirePonyo:6C
-/VanEclair:2D
-/Vanessa:4C
-/Vegan:0C
-/Veixe:5E
-/Veldsky:3H
-/Venu:42
-/Veracioux:25
-/Vernon:6B
-/Vertigo1:6A
-/ViCi:25
-/ViCoDiN:5E
-/ViCoDiN-:0A
-/ViCoDiN_:4G
-/ViKU:0C
-/ViaGetty:09
-/ViciousVoila:3C
-/VictimToEmma:3H
-/VictimtoKo:2J
-/Vile:1U
-/Vincent:5E
-/VincentXi:25
-/Vinny666:3M
-/Viper:03
-/Vipera:25
-/Virgin98:1Z
-/Virginox:0C
-/Virginox_:1C
-/Virtual:1C
-/VirtualIl:2J
-/Visig0th:4G
-/Visigoth:6C
-/Visor:25
-/VitamineD:1C
-/VitaoDoidao:5E
-/ViveChat_44342:1Z
-/Vizitator_8509:0C
-/VoZtFOeKr:3H
-/Vodka:3A
-/VodkaV:6B
-/Vohtee:3H
-/Volentis:0C
-/Vomista:25
-/Vomitus:09
-/Vortex:1Z
-/Vousti:03
-/W00gaWoo:6C
-/W8LPJFQnZ:0C
-/WANG-HANG:1C
-/WAP:1Z
-/WEAKmage:1C
-/WESTDAMION:42
-/WIN98SE:63
-/WOPR:3H
-/WORDPRESS:3P
-/WOW:0C
-/WQ5aj:6C
-/WU_1596487322336:0D
-/WU_1600224364883:03
-/WU_1600792671750:2J
-/WZOp:4C
-/WZRD:3H
-/WackyWolf:4C
-/Wallet:2J
-/Warsawio:63
-/Warss:09
-/Wasim7:51
-/Waye:51
-/Wayne:0C
-/WeEatnKi1:4G
-/WeEatnKid:03
-/WeGotMoreGum:2J
-/WeLoveCP:6B
-/WeeBo:09
-/WeeBo_:03
-/Weenished:51
-/WheelZ:3H
-/WhereIsMySpoon:4N
-/WhiteBoy:3M
-/WhiteBull:25
-/WhiteNigs:4G
-/WhiteTiger:0C
-/WhiteTigerRage:03
-/Whitewolf:6B
-/WhizzWarlock:3A
-/WiZ:2D
-/Wildstorm:4C
-/Wildthang2:3C
-/WillePoik:25
-/William:3A
-/William^:51
-/Willux:51
-/Willux-chan:3H
-/WinSock:3H
-/Winddd:2D
-/Windigo:6C
-/Wint3r:51
-/WiseOne:6H
-/WishIHadACock:51
-/Wizzup:4N
-/Wnlqra:3A
-/Wobbly:3M
-/Wolf:3M
-/Wolfy87:09
-/Wompum3:5E
-/Word:0A
-/Wordswort:1C
-/Wordswrth:5E
-/Workbench:42
-/WorkingGoose:25
-/Wrongnick:3A
-/WuhanFlu:0A
-/Wulfe:6H
-/WyAn:6H
-/Wylie:2T
-/Wynton:03
-/WzDarwin:3A
-/X:09
-/X-Scale:0D
-/X-Scale`:3A
-/XSlS:03
-/XYAZvrovp:3H
-/XaNaX-:1C
-/XaNaX_:4C
-/Xafloc:6C
-/Xakurinha32:4N
-/Xavi92:3C
-/XbCKzvEfB:6B
-/Xea:4N
-/Xen0:5E
-/Xhdhc:4G
-/Xibalba:6B
-/Xicor:1U
-/XqUr:09
-/Xylitol:2T
-/Xylitol^:1Z
-/Xzibath-H:1C
-/Y-BOTHA:4G
-/YAYOfolksYAYO:51
-/YCKWMfg:2D
-/YEWKQL:5E
-/YIwO:3C
-/YT-info:0C
-/Yaedie:2D
-/Yak-san:0A
-/Yakui:6B
-/Yakui_:2D
-/Yallqueda:6A
-/Yasze:1C
-/Yeji:0A
-/Yeji_:3M
-/Yemeni:03
-/Yendred:3H
-/Yito:2T
-/Yito37:3M
-/Yito54:03
-/Yito9:03
-/Yitomato:0A
-/Yitoo:6H
-/Yndrd:3H
-/YodaGnom:3C
-/YogSoWhat:4G
-/Yossarian:09
-/Yoursself:6B
-/YtxrIxsEE:3H
-/Yukiiii:3H
-/Yuppie:4N
-/YuwuY:2T
-/YuwuY_:42
-/Z4CH3:6N
-/Z4CHe:51
-/ZUB:3A
-/Zach2:03
-/ZaeQue:2J
-/ZahVu:1Z
-/Zanthas:3A
-/Zarharva:03
-/Zarharvester:1U
-/ZayStorm:3C
-/Zayto:3A
-/ZcwM:6C
-/Zed:42
-/Zeeye:1Z
-/Zelda:6H
-/Zerg51:4N
-/Zerg_:1Z
-/Zero:4C
-/ZeroFux:3H
-/Zeth:0C
-/Zig_Zoss:0C
-/Ziginox:3H
-/ZipStick:4N
-/Zn3s:5E
-/Zoe_Pace:1U
-/Zoldax_II:4G
-/ZoomGuy:0A
-/Zordon:3M
-/Zork:0C
-/Zub:6C
-/Zub_:42
-/Zuppone:0D
-/Zx:03
-/ZyAO:3H
-/Zyll:2D
-/[:5E
-/[-_-]:3A
-/[-{}-]:4N
-/[7hC]x5h4d0w:0C
-/[ARS:51
-/[BigDadE]:40
-/[CFLeX]:4C
-/[CIA]:6B
-/[Crow]:3M
-/[E:25
-/[Harlot]:1Z
-/[I-R-D-1-:3A
-/[IRS]:3M
-/[KGB]:4C
-/[Marius]:2T
-/[NSA]:2T
-/[NoNameAvailable]:5E
-/[RMS]:03
-/[R]:03
-/[Randall]:0D
-/[TriiiX]:25
-/[_^Ne[N]o^_]:2T
-/[`:51
-/[`voidhlwm_:3C
-/[d-_-b]:2T
-/[haydenh]:7H
-/[k00l]zducuck:6B
-/[k]:4C
-/[k]LtKWR:03
-/[k]LtKWRI:09
-/[k]WATLTL:1C
-/[k]bed:3M
-/[k]beerIn:2J
-/[k]doogh:0D
-/[k]habib:25
-/[k]inBED:1Z
-/[k]inBar:3C
-/[k]itbs:3A
-/[k]mbp:4C
-/[k]mbpINb:4G
-/[k]sunbat:6B
-/[k]walk:6C
-/[k]work:6B
-/[k]workpc:2T
-/[m]:03
-/[m]_:2T
-/[mezmur]:6C
-/[mz]:4C
-/[roar]:3H
-/[roar]_:3H
-/[twat]:4G
-/[vae]:42
-/[vlad]:5E
-/[werejag]:0D
-/[x]:0C
-/\:1Z
-/\0:42
-/\\:6H
-/\\Mr_C\\:42
-/\_:1Z
-/\`\:1Z
-/\g:42
-/\o:0A
-/]IBF[:1C
-/]R[:1C
-/][_R_][:6C
-/]haydenh[:7H
-/^-^:6C
-/^1597514^:51
-/^1597532^:1Z
-/^1597546^:5E
-/^1598128^:4N
-/^1598151^:0D
-/^1599937^:09
-/^1599966^:2J
-/^1600552^:51
-/^1600570^:6H
-/^1601138^:09
-/^1601146^:1C
-/^1601175^:51
-/^1601204^:4C
-/^1601298^:2T
-/^1601756^:6H
-/^1601780^:4N
-/^1602971^:6C
-/^1603575^:4C
-/^1603577^:6H
-/^1609020^:40
-/^1609034^:2D
-/^1609625^:1C
-/^1609639^:4G
-/^Emi^^:6N
-/^Emilay^:6N
-/^Emily^:0A
-/^Voyager:40
-/^^:6B
-/^^^Emily^:4G
-/^^^emi^^^:1Z
-/^_Emi_^:03
-/^_^:09
-/^_^_:3M
-/^__^:25
-/^___^:3H
-/^______^:3A
-/^_______^:4G
-/^e_mily^:1C
-/^emi^:4C
-/^emi^^:3A
-/^emi^^^:0C
-/^emily^:1C
-/^emma^:63
-/^i^:2J
-/^neet^:4N
-/^pHANTOM-:5E
-/^pHANTOM^:6B
-/^syn^:03
-/_:3A
-/_07N1:2J
-/_0N1P:1C
-/_0nap:51
-/_0pan:51
-/_0x5fc3:6B
-/_Biznz:51
-/_Dude_:09
-/_Leviticus_:63
-/_Parvati_:09
-/_QB:1Z
-/_QB_:2T
-/_Q_:1C
-/_Royal:42
-/_SoniCFL:4G
-/_Supersta:4G
-/_Zialus_:6A
-/__:3M
-/___:09
-/______:42
-/__ahimsa:3C
-/__minty:09
-/__poke:3M
-/__sbrk:3A
-/_alph4_:3A
-/_benj:4G
-/_blasty`:6H
-/_cr4ck_b1:42
-/_d:0A
-/_ghoul:4G
-/_heavyarm:03
-/_insomniac:6B
-/_jiggawat:2T
-/_jim:63
-/_joey_:4C
-/_kylef:6C
-/_mak:4N
-/_mak_:42
-/_minty:0A
-/_ncog:3C
-/_notK:2T
-/_oranges_:42
-/_owo:4N
-/_paranoid:2D
-/_poke:40
-/_tepes:09
-/_willo_:3A
-/`:3H
-/`-`:5E
-/`360`MM:2D
-/`360`mm:5E
-/`Ice:42
-/`Sprinkle:6C
-/`St0ner:63
-/``:4G
-/````:6B
-/`````:2T
-/````````````````:3C
-/`nonamoos:63
-/a:0D
-/a1exs:6B
-/a23456789:6A
-/a2m:2D
-/a2m_:3A
-/a3d:3H
-/a7:4N
-/a7_:0D
-/aBiesh:3H
-/aDB-[u]:0C
-/aFaggot:63
-/aFaggotHunterWhosAlsoAFaggot:63
-/aFaggotHunterWhosAlsoAFaggotKi:6H
-/aFaggotKiller:0C
-/aGT-[e]:2T
-/aGaviW:3M
-/aHT-[u]:4N
-/aLongNick:4N
-/aLpine_:3H
-/aMC-[e]:3A
-/aPJ-[u]:4N
-/aPV-[i]:6B
-/aRV-[i]:2D
-/aTD-[i]:3A
-/aTurkRapingSwedes:2D
-/aWC-[i]:1C
-/aWT-[u]:2T
-/aZM-[e]:3C
-/a_:0D
-/aa:3C
-/aaa:3H
-/aaaa:3A
-/aaaaa:0C
-/aaapycov:51
-/aanji:4N
-/aaro:0D
-/aaronmcadam:3C
-/abdf9988:03
-/abe_simpson_:63
-/abeato:03
-/abecx:4N
-/abecx_:6C
-/aber:6C
-/abigail:03
-/abq9J:0A
-/abrahm:6A
-/absinthe-:6H
-/absinthe_:1C
-/abuck05:63
-/abum:25
-/abum2:3H
-/abumfone:03
-/abumpad:3A
-/abumphone:51
-/abyssangel:3H
-/ac1:25
-/ac1dvegas:6H
-/ac2:6H
-/acappell-:3M
-/acappella:2D
-/acbn:3A
-/accuracy:1Z
-/ace_kevi:03
-/acerising:51
-/acid-:2J
-/acid_:51
-/acidapex:0C
-/acidchik:09
-/acidified:6B
-/acidjazz:4N
-/acidjazz_:63
-/acidspaces:42
-/acidvegas:51
-/aclark:2J
-/acrsu:25
-/activFDNY:2D
-/adahn:0A
-/adam:42
-/adamd:0A
-/adamd_:42
-/adamr:51
-/adc:0C
-/addc182:4G
-/adde9708:0D
-/adesas:0A
-/adhn:42
-/adium:6C
-/adm:0A
-/admin__:63
-/admin___:2D
-/adon:1Z
-/adonisasu:4C
-/adresas:6C
-/adrien:25
-/adrien-:3A
-/adrien1:6C
-/adv0c4te:2J
-/adventure:0C
-/aeChi:51
-/aeGie:3H
-/aeShe:2T
-/aeZiek:03
-/aecoiG:3H
-/aegis:4G
-/aelien27:5E
-/aempirei_:2T
-/aeres:3C
-/aesthetic:3H
-/aesthetik:3H
-/aether_:03
-/aether`:63
-/afb1:1C
-/afkay:03
-/afkgoy:5E
-/after8:2J
-/afx:0D
-/agant:6B
-/aghgurqa:25
-/agmbat:1C
-/agmethod_:2D
-/agnahim:63
-/agsv:3M
-/aguslr:0C
-/ahFie:51
-/ahNgum:2D
-/ahf:03
-/ahfeel:2J
-/ahimsa:4C
-/ahltvrlb:25
-/ahmet:0A
-/ahmuT:3M
-/ahplA:4C
-/ahtoX:2D
-/aiKuiy:5E
-/aiWoKe:03
-/aidenholmes:3M
-/aids:63
-/aids_:3H
-/aidsbird:4N
-/aidz:63
-/aims:25
-/ainoue:2T
-/ainoue_:6B
-/air:5E
-/airconditioner:6C
-/airconditioner2:42
-/aisec:51
-/aisec3:3P
-/aiwahS:2D
-/aj:0A
-/ajace:5E
-/ajax:51
-/ajcau:6H
-/ajgrit_:2T
-/ajguille:6C
-/ajpfefj:3M
-/ajpiano:3A
-/ajpywlb:0A
-/akaso:3M
-/akejay:5E
-/akejay_:2D
-/akem__:2B
-/akfuu:3C
-/akfuu_:25
-/akitten:42
-/aku:03
-/alanna:09
-/alaskabea:3H
-/alberto:6H
-/albino:0C
-/alchemist:4C
-/alchemist0:6C
-/aldKorn:51
-/aldcor:51
-/aldocr:1C
-/aldroc:0A
-/alex[in]chains:4G
-/alexs:0D
-/alexsm:63
-/alexss:1C
-/alff:25
-/alfred_cockhitch:63
-/alfredo:3C
-/alg0d:3A
-/alhassana:6B
-/alhassanaraouf:1C
-/alice:2T
-/alien88:63
-/alienbaby:4N
-/alison:6B
-/alkalinity:2D
-/alkyl:09
-/all-ameri:2J
-/allant4:2T
-/allant40:4G
-/allant401:42
-/allenp:3A
-/allenwren:3A
-/allfather:0C
-/allison:4N
-/allison_:6C
-/aloeventj:3M
-/alongtong:3H
-/alph:42
-/alph02:6B
-/alt3r3d:4N
-/alt_5t5:3A
-/alterego:2D
-/alterego__:2J
-/altomo:3H
-/alts:3A
-/alucardo:6C
-/alucardoo:2T
-/alyosha:6B
-/alyosha_:0D
-/alyoshaa:2D
-/alz:3M
-/am_an_exit:2D
-/amadeus:4C
-/amanda_:0A
-/amar:6B
-/ambrose:6B
-/ambrosia:0A
-/amc-:0A
-/amcclure:4C
-/amelian:4C
-/amelian_:03
-/amez:1Z
-/amino:3H
-/amino-:2D
-/aminoo:25
-/aminooo:5E
-/aminux:42
-/aml:63
-/amlutios:1C
-/ammon:2T
-/amolith:3P
-/amphibulu:0C
-/amphibulus:3C
-/amrowsell:0C
-/amrowsell_:1Z
-/amvoled:0D
-/ana:0C
-/anachron:0C
-/anarchist:6C
-/anarchy_1:3C
-/anarchy__:4C
-/anass:3C
-/ancmt:03
-/andai:4G
-/andai1:4N
-/ando:1Z
-/andonuts:03
-/andquesada:25
-/andras:63
-/andrea:4G
-/andropov:3H
-/andropov_:4N
-/andsee:0C
-/andy_:1Z
-/andykof20:4G
-/andyvk5:6B
-/anfpilu:4C
-/ang8lax:4G
-/ange1:1Z
-/angel_fir:03
-/angelzrkr:3H
-/angieb:0C
-/angular:4G
-/anherop:5E
-/animu:3M
-/anishakar:2J
-/anita_20:6H
-/anjel:51
-/anjelic:0A
-/anjifa:3H
-/anjifa_:03
-/anlqw:5E
-/annA:6C
-/anna:1Z
-/annaSEX:4N
-/anna_:51
-/anna_\:5E
-/annaa:09
-/annal:1Z
-/annalena:4C
-/annalisa:6H
-/annamalinka:4G
-/anniez:25
-/anniez-:3H
-/anniez9:25
-/anniez_:4N
-/annna:25
-/annnna:2D
-/annon:51
-/ano^:4C
-/anon:42
-/anon1:03
-/anon108:09
-/anon1312:09
-/anon2:4N
-/anon4:6N
-/anon623:0D
-/anon9234:1C
-/anon9234_:1Z
-/anon987321:25
-/anon_:1C
-/anon__:4G
-/anonamoos:1C
-/anonssssssss:4C
-/anonymoos:4C
-/anonymous_:1Z
-/anonyxoxo:25
-/anoroc:0C
-/anthis:4G
-/anthis_:3C
-/anthk1:09
-/anthonyg:6H
-/anti-soci:51
-/antifox:4C
-/antipeace:25
-/antipent:1C
-/antithes_:0A
-/antithesis_:3H
-/antithesis__:63
-/antitype:63
-/antman:42
-/anton:4G
-/anton1:2T
-/anton2:6B
-/antonizoon:2T
-/anton|pw:0C
-/anubis:09
-/anunciad:03
-/anus:42
-/anxia:1Z
-/anystasia:3C
-/anzzrjg:4N
-/apb:0C
-/apenas:4N
-/apetresc:0C
-/apetresc[m]:1Z
-/aphrax:2D
-/aphrodite:3A
-/api:5E
-/aporpo:42
-/apostate:3A
-/apostrope:2J
-/apple:6B
-/apu:3C
-/aqmgdxp:42
-/aqua_teh:4G
-/aquinzie:2T
-/aquoot_:6C
-/ar:6H
-/ar-:63
-/arabi:6H
-/aradesh:4G
-/ararouge:25
-/ararouge_:51
-/arbogt:25
-/arbogt_:3A
-/archbspwm_:63
-/archwizard:0D
-/arcseconds:4N
-/ardoyne:2D
-/ardoynne:3H
-/arf20:2J
-/argoss:3M
-/arhoy:3A
-/ariana:25
-/arianagrande:0A
-/ariciu2k-:2J
-/ariel:1Z
-/ariel_1:51
-/arii:1U
-/ario:6B
-/ark:0A
-/ark_:5E
-/arleigh:4C
-/arleigh`:25
-/armeni:42
-/armin:03
-/armin76:25
-/armoth:03
-/arnge:1Z
-/aroticoz:0D
-/arsekeks:0C
-/arsekeks_:51
-/arsmagna:3M
-/arsonal:4G
-/arzael:09
-/asd123:6H
-/asdadasasdqw:51
-/asdadfa:3M
-/asdf__:6B
-/asdfgh:6B
-/asdfghjk:2T
-/asdjaksdjkasdjkasdj:0C
-/ash:25
-/ash9:2D
-/ash_:0D
-/ash___:1Z
-/ashie:63
-/ashtrace:0C
-/ashtrace_:09
-/ashy:6B
-/ashylary:09
-/ask_anyon:09
-/askaxon:6B
-/askme:3H
-/asome1:40
-/ass:3A
-/ass_:1C
-/assboy:6B
-/asscandle:3H
-/assfog:2D
-/assfrog:0C
-/asspiringfaggot:4C
-/asswhispr:0C
-/asterismo:6H
-/asterismo_:3M
-/astr1:42
-/astra:1Z
-/astra_:1C
-/astro:2J
-/astro_:3M
-/astroid__:1C
-/astron:2D
-/astro|:3C
-/asuka:0C
-/atechad:25
-/ateppqx:51
-/ath0:4C
-/atk:03
-/atlas_:42
-/atlus3:6H
-/atomic:6B
-/atrocityvoyeur:5E
-/atunecat:09
-/aucampia:6C
-/aucklan:1Z
-/audemux:6H
-/audioslave:1C
-/aunickuser:4G
-/aunickuser1:4C
-/aunickuser_:6B
-/aunickuser__:3H
-/aurghyadip:2T
-/aurghyadip0:09
-/aurghyadip3:1C
-/aurghyadip4:25
-/auronite:1Z
-/autism:2D
-/autismnesday:51
-/autismo:3C
-/autismo_:4N
-/auxdemux:63
-/avalon:25
-/avast:3H
-/avdb:42
-/awe:3A
-/awex:25
-/awfgq3gq3:25
-/awwe:25
-/ax0l:03
-/axlwqp:0A
-/axon:5E
-/axu:0C
-/aycanada:2B
-/ayersea:25
-/ayerseas:42
-/aylamao:2J
-/ayool:09
-/ayylmao:1C
-/azel:09
-/azgbz:3C
-/azirino:6C
-/azod:3C
-/azrael:4G
-/azsciitec:25
-/azsclltec:0A
-/azscootec:6N
-/azscqqtec:09
-/azscuutec:25
-/aztec:51
-/azupoo:4N
-/azurexp:09
-/azuzu:42
-/azza:3H
-/b:0C
-/b00bs-:2T
-/b00da:5E
-/b00t:4C
-/b0dhi:3A
-/b0dhi_:2T
-/b0nk:42
-/b0redey:63
-/b0x:1C
-/b0x191446253:2T
-/b0za:6C
-/b0za_:6H
-/b17bmber:6H
-/b1ackcat:2D
-/b1ink:3M
-/b30wulf:3H
-/b333nz:03
-/b333nz_:4G
-/b33nz:3H
-/b3ck_2k2:03
-/b3d1n4t01:1Z
-/b3d1n4t02:09
-/b3d1n4t03:2D
-/b3d1n4t0r:3M
-/b3enz:4N
-/bBNXhE:25
-/bROG:4C
-/bUTTvOMIT:1Z
-/b_:2T
-/babo:0D
-/baby_penguin:09
-/babychaos:51
-/babyfarts:4N
-/backronymman:3M
-/backspace:4C
-/baconshit:0A
-/bacterio:0C
-/badbit:3C
-/badcloud_:0C
-/badcmpany:2J
-/bade_:63
-/badperson:4N
-/bads:6C
-/bads_:1Z
-/badumbum:0C
-/badumbum_:1C
-/bafs:25
-/baguette:1Z
-/baguette_:0D
-/bakedpotato:0A
-/bakuzan8:5E
-/bakuzan87:4C
-/bakuzan88:25
-/ballsweat:1C
-/balters:3C
-/bamdad:03
-/bamdad_:25
-/bananazur:6C
-/bananstol:4C
-/barby:63
-/barf:3P
-/barguesto:3M
-/barkl:3M
-/barnie_:0C
-/baruchel:2D
-/based:6H
-/basse:0A
-/bassedul:4N
-/batewolf:3C
-/batman:2D
-/batman-:4N
-/baus:0A
-/bax:5E
-/bax__:6H
-/baxmoke:63
-/baz_:42
-/bb:3C
-/bb420:63
-/bb8:3C
-/bbb:3C
-/bbb1:3M
-/bbbbuni:6H
-/bbcereal:2D
-/bbojug:1Z
-/bbqnp:09
-/bbunni:6C
-/bcd:6B
-/bch:25
-/bchall:09
-/bcphmx:6B
-/bcqgpsba:3H
-/bcwcebiwb:25
-/bda:09
-/bdavey:2J
-/bdna:09
-/bdotdiwd:6C
-/bdown:2T
-/bdz:2T
-/beach:2D
-/bean__curd:25
-/bean_curd:3C
-/bean_curd_:2J
-/bean_curl:1Z
-/bear9:03
-/beard:6C
-/bearmarch:4G
-/beatdown-:25
-/beatdown_:25
-/beautyy:3M
-/bedrolls:6H
-/beeard:09
-/beebz:09
-/beeenz:51
-/beef:3P
-/beefadd:51
-/beenz:1C
-/beenz-:6C
-/beepingwindows:6B
-/beers:03
-/beez:0C
-/begriffs:6N
-/behold_a_great_red_dragon:2J
-/behrad:0C
-/bela_lago:4C
-/belanthor:2T
-/belcher:1Z
-/belcher_:4G
-/bellman:4N
-/ben:3A
-/ben-z_:0C
-/benburwell:2J
-/benburwell_:3P
-/bencoh:3H
-/benderRodriguez2:6C
-/bendoin:5E
-/benedikt:09
-/benett:51
-/beng-nl:51
-/bengt:6B
-/benharri:5E
-/benj:4N
-/benna831:40
-/benvenuto:3H
-/beoli999:03
-/bep:1Z
-/bergur_:1C
-/bero:25
-/bertiger:3A
-/bestmusic:3H
-/beta-:42
-/betaboy25uk:51
-/betatester:2T
-/bex:09
-/bex-:63
-/bex_:2T
-/bex__:4G
-/bexiled:3C
-/bexit:5C
-/bextra:2D
-/bexxx:6C
-/bfnhyu:2J
-/bfot:51
-/bg_:2T
-/bg__:3H
-/bhavesh:3M
-/bheekie:6B
-/bhkor:4C
-/bhp:3H
-/biePha:1C
-/bigBelly:3A
-/bigV:2D
-/bigVplaya:2J
-/big_dad_e:3M
-/big_t:42
-/bigbird:1C
-/bigbob:3M
-/bigboss:25
-/bigboy42:51
-/bigchungus:2J
-/bigdave:0C
-/bigdouche:3A
-/biggus:5E
-/biggus_diccus:4G
-/bigjohn:1Z
-/bigman1337420:0D
-/bigman645886:1C
-/bigman789420:2J
-/bigmark:0C
-/bigrichie:4G
-/biheoad:4C
-/bikr:0C
-/bilbo991:2T
-/bildramer:09
-/bilegeek:6B
-/bills:42
-/billyb0b:3H
-/bin:03
-/binary_:51
-/binbasti:0C
-/binfu:03
-/biniar:6C
-/binky:3A
-/binwiederhier:09
-/bionic:4N
-/bionic_:1Z
-/bionicpup:1Z
-/birkoff:6B
-/birth:0D
-/birth_:3A
-/biscoro:09
-/bitatem:1Z
-/bitch:2J
-/bitchass:2T
-/bitchlor-:6C
-/bitchlord:63
-/bitco:6H
-/bithov:0C
-/bitrot:1Z
-/bitrush:5E
-/bixnood:42
-/bj0rg:2B
-/bj0rn:6C
-/bjongo:25
-/bk:25
-/bkhl:2T
-/bkjxkaxg:2D
-/bkyy:6B
-/bla:3C
-/blaag:3H
-/blaag1:2T
-/blackbea-:4N
-/blackbea|:5C
-/blackbird:2J
-/blackbit:1C
-/blackdev-:4C
-/blackdevl:0C
-/blackest_mamba:3M
-/blackest_mamba_:03
-/blackjid:0C
-/blackntan:51
-/blackout:1Z
-/blackpape:3A
-/blackrose1:3A
-/blacktie:3P
-/blackwhale:2D
-/blah:0C
-/blakange-:4N
-/blakem:2T
-/blank:6C
-/blass:0A
-/blass_:63
-/blaxthos_:6H
-/bleach:0C
-/bleb:2T
-/bletch:2D
-/blfyah:6B
-/bling:63
-/blink:3M
-/blink_:5E
-/blip:03
-/blippy:03
-/blitzen:3H
-/blmbm:3C
-/blocked:1Z
-/blocko:0C
-/blode:09
-/bloeree:2T
-/blogbird:2T
-/blogging:2B
-/bloodyMurder:25
-/blowfish:3A
-/blowmeok^:1C
-/bludfurst:63
-/blue:25
-/blue_:3H
-/blue__:3H
-/bluefourier:4C
-/bluerose:2D
-/blumpkin:4C
-/bmlnpw:63
-/bnozliee:3M
-/bo-:2T
-/bob:6C
-/bobMarley:0C
-/bobafett:3M
-/bobpp_:6C
-/bobsonofb:0A
-/bogo_lode:3A
-/bohCh:09
-/boii:4N
-/bollocks:25
-/bomas:4G
-/bombluje:2T
-/bomct:4C
-/bonfacemu:2D
-/bong:6B
-/bono_nob:0A
-/bono_nob_:25
-/bonz060:0C
-/boo:3H
-/boobtube:3H
-/boof:25
-/boof_:2T
-/boogaloo:3C
-/booger_:63
-/boopingwindows:09
-/bootleg:3M
-/bootrom:1C
-/bootydoom:6H
-/bopadoo:2D
-/borliz:3A
-/bot22:1C
-/bothadeez:42
-/bothofthosearethesame:42
-/botulf:3C
-/boubou:4G
-/bougyman:3C
-/bovpxdb:1C
-/box1:25
-/boxer:0C
-/boxrick:6C
-/boxrick_:0D
-/boza:51
-/bozozcur:6B
-/bozozocur:3A
-/br1dg:4G
-/br377:0C
-/brabo:3M
-/bradley:3P
-/brah:40
-/braixenirl:4C
-/braixenirl0:6C
-/braixenirl2:1Z
-/braixenirl6:4N
-/branden:3A
-/brandfilt:3A
-/brandi_:4N
-/branefawt:2T
-/branon:3H
-/brap:6H
-/braplord:25
-/brayden:3C
-/brea:03
-/bree33:2J
-/brendantcc:3C
-/brendantcc1:3C
-/brendo:2J
-/brian__:1U
-/bricks:3C
-/bricks_:03
-/briesss:0D
-/brite:3A
-/brite19:6B
-/brite41:0A
-/brite49:2T
-/brite50:2D
-/brite90:4G
-/brobird:1Z
-/brocashelm:0C
-/brokenrecord:42
-/brolin_empey:03
-/bronzie94:2D
-/brooklyn:5E
-/broski:3C
-/bruh:1C
-/brujomemin:6C
-/brule:3M
-/brutex:0C
-/bruv:2J
-/bryce:2D
-/bryno:03
-/bs719:3H
-/bsd:1C
-/bsteel:2J
-/bteeer:2D
-/buZz:3M
-/bubble26111989:0D
-/bubbles:4C
-/buck_lanc:2J
-/buckhardp:0C
-/bugtester:2J
-/buh:3M
-/buinb:1C
-/buinb_:6H
-/buinb__:6C
-/bulldozer:1Z
-/bullet:6C
-/bullet_:0C
-/bullmark:3C
-/bullmark-:09
-/bullmark_:3H
-/bully:6B
-/bumfuck:0A
-/bunbun:3H
-/bungo:25
-/bunkerrr:09
-/burak:1C
-/burn:1U
-/burn_:6H
-/burnmjd:03
-/burnout:6C
-/burntjew:1Z
-/burntkale:03
-/bushwhack:3M
-/bushwhacker:0D
-/bushwhacker_:3C
-/buss:5E
-/bustghost:4C
-/butcha:09
-/butcha-:03
-/buttercup:0A
-/buttercup^:4C
-/buttertoast:42
-/butth0le:2D
-/butthash:3M
-/butts:09
-/buttvomit:2J
-/buyer__:1C
-/bwkyurrl:6B
-/bx:5E
-/byoung:3H
-/bysizngp:51
-/byte1032:63
-/bzed:6C
-/bzed_:5E
-/bzeld:42
-/bzjakq:2D
-/bzzp:3C
-/c041:51
-/c0nker:42
-/c0ntempt:1C
-/c0ntempt`:4G
-/c1v1l:09
-/c2cCJSRl:4N
-/c5n:2D
-/c64:3A
-/cBQW:3A
-/cDpY:2T
-/cGSmNYyQw:4G
-/c__bmxlkb:0C
-/c_hi3:0A
-/c_hi3-:4G
-/cabat:42
-/cable_:4G
-/cacco:4N
-/cactus:1C
-/caeTh:4N
-/caesar:51
-/caesar-:3A
-/caesar_:25
-/caesium:3M
-/caffeinatedcode:6C
-/cahXee:03
-/cahlosspl:4N
-/caitlynn:51
-/calaf:3H
-/calafRPG:2J
-/callcc:4C
-/callow:6B
-/calma:5E
-/calsonic:2T
-/calsonic28:51
-/calsonic58:40
-/camSF:09
-/camus:2D
-/canada420:6C
-/candy:63
-/candyman:6H
-/cant_chat:6H
-/cantstop_:0A
-/capheind:51
-/capt_zap:25
-/capt_zap_:42
-/captian_c:4N
-/carciofino:3M
-/carciofino68:2D
-/careet:1C
-/carly:63
-/carradine:0D
-/cartier:03
-/cartman:0C
-/casanostr:5E
-/cashstir:1Z
-/casimir:51
-/caskd:1Z
-/caskd-dev:2J
-/caskd-uir:5E
-/caskd-uirc:1Z
-/cassim:6B
-/cassim-:42
-/cat:3M
-/catacomb1:3C
-/catacombs:3C
-/catalase:42
-/catalase_:03
-/catatoni-:0D
-/catatonic:3M
-/catatoni|:1C
-/catdad:3H
-/catman:0C
-/catman370:03
-/catpeach:51
-/cau0:25
-/caubert:2T
-/caubert_afk:63
-/cave:2T
-/cazpxqw:51
-/cbdoll:1C
-/cbmsfdwh:25
-/cbmuser:3P
-/cbtgr:4C
-/ccanw:0A
-/ccjqudw:25
-/cdBr:25
-/cdb:6H
-/cdma:4G
-/cdolan22:3C
-/ceasar:0C
-/ceaser:4N
-/cecilb:4C
-/ced117:1Z
-/ceene:63
-/ceibal:4C
-/ceibal_:4G
-/cel:6C
-/cephalus:63
-/cerulean:2D
-/cews:51
-/cfongyyf:0C
-/cgixyyms:42
-/ch:2D
-/ch00m:4C
-/ch3mist:5E
-/ch4ff:03
-/chEEKie:2B
-/chaff:0C
-/challah:6C
-/chals:4G
-/champ:5E
-/changO-:4N
-/changeme:4C
-/changoXPR:5E
-/chanhold:42
-/chanhold.hlircnet.:0C
-/chanhold@chanhold:0A
-/chanhold@chanhold.hlircnet.:03
-/chano:42
-/chano0:5E
-/chano2:6H
-/chano3:2J
-/chano4:2J
-/chano5:4G
-/chano6:0D
-/chano7:2D
-/chano8:3C
-/chano9:5E
-/chanserv:0A
-/chapi:09
-/charles_bottle_popper:0D
-/charles_bottle_popper_with_che:25
-/charliebrownau:3H
-/chartreuse:25
-/chase_:09
-/chatStroker:0C
-/chc4:6H
-/cheapie:6A
-/checho:63
-/cheeNe:5E
-/cheeseburger:4N
-/cheesemonk:6B
-/cheesemonk-:6B
-/cheesemonk_:1Z
-/cheez_:51
-/cheiBu:25
-/cheller:09
-/chelmzy:0A
-/chelmzy8:2D
-/chemicalgraft:42
-/chemist:09
-/chemtrail:0C
-/chendo_:25
-/cheno1115:09
-/chernobyl:25
-/chewbacca:4G
-/chewy:42
-/chicane:03
-/chicane_:3C
-/chicken_nugger:1C
-/chik:2J
-/chik_:2T
-/chiklet:6C
-/chiku:4C
-/chill:4G
-/chill_:2D
-/chill__:63
-/chinaski:5E
-/chinatown:1C
-/chioLa:6H
-/chipolux:6C
-/chippah:0D
-/chitao:2T
-/chiyou:03
-/chiyou-:09
-/chiyou3:6H
-/chiyou_:4C
-/chkrr00k:6C
-/chmuri:4N
-/choob_:63
-/choom:63
-/choom_:5C
-/chopchop1:1C
-/chowder:63
-/chown-:6C
-/chown_:3C
-/chown__:03
-/chrippa:1C
-/chris39:63
-/chris3915:3M
-/chris_40:2D
-/chrisfagd:1Z
-/chrisgayd:25
-/chrissy:6C
-/christistheway:2T
-/chromis:4C
-/chron:6B
-/chrono:1Z
-/chrono-:09
-/chrono_:1C
-/chrono__:1U
-/chuchu:09
-/chucky_d:25
-/chxeizpr:6H
-/cidal:03
-/cidal_:3P
-/cil:1C
-/cilla:6H
-/cipher:3M
-/ciprian_:25
-/circuitbone:09
-/cismq:4G
-/cities:25
-/cjg:42
-/cjglyefa:4N
-/cjmtyx:6B
-/cjrroevm:1C
-/ck:3A
-/ckat:2J
-/ckejsdib:3A
-/claire:63
-/clam_:4C
-/clamkin:6C
-/clamkin-:0C
-/clamkin|:4C
-/clams:3H
-/clapback:3A
-/clarux:5E
-/classhole:5E
-/clavichords:3A
-/cleaningwindows:6B
-/cleantwat:1C
-/clitboner:6C
-/clort:2D
-/clotrim:3C
-/clownUSA:2D
-/clownboy:2T
-/clownprty:63
-/cm:25
-/cmang_:6H
-/cmccabe:42
-/cmos:2J
-/cmx:63
-/cncfi:6H
-/cnr:6C
-/cobra_:40
-/cockroach:2D
-/cocks:0C
-/coderobe:3H
-/codestr0m:6C
-/codez:4G
-/cody-:0C
-/coffeeiazo:1C
-/cogitase:0A
-/cohen:0A
-/colbertin:25
-/coldwheels:4G
-/colombus:0C
-/colonials:0A
-/coltseavers:2J
-/coltseavers_:0D
-/commodus:6H
-/commodus_:1C
-/communist:3C
-/comnsense:51
-/comod0:6H
-/comodo:0C
-/comp4:42
-/compTECH:3C
-/compTECH-:3A
-/computer:4C
-/computers:0C
-/comrade:1Z
-/comrade-:09
-/comstud:6H
-/conf_t:09
-/conno:4G
-/connor332:4N
-/conrad:63
-/constructed:4C
-/contained:42
-/contrail:0A
-/convict:4G
-/convolution:1C
-/cooey:51
-/cooey-:25
-/cooey^:63
-/cookie:6H
-/coolacid:25
-/coolbeens:6C
-/cooldude:3M
-/coolio:09
-/coolmandude:51
-/coolmandudebro:6B
-/coolmandudebroguy:4N
-/coolomb:0A
-/coontach:25
-/cope:0C
-/copypasta:25
-/copypaste:03
-/copypasteque:0D
-/corelax:25
-/coreleade:4G
-/corey1:4G
-/corey2:2D
-/coreys:1C
-/coreystephan:4G
-/corn:3A
-/cornfeedhobo:2J
-/cornflake:4G
-/coronadetona:1C
-/corosiv:40
-/corr64:25
-/corvex:3C
-/cosa:4N
-/costin:5E
-/coughsyru:42
-/covid19:2T
-/covid19_:0C
-/covid19__:63
-/cow0w:4N
-/cow0w_:4N
-/cozen:1Z
-/cp_veneto:3C
-/cprez:2J
-/cpyne007:4G
-/cpyne777:4C
-/cqi:09
-/cr1p:5E
-/cr4ck_b1t:6B
-/crackfu:6C
-/crackfu_:0A
-/craig:1C
-/craig1:4C
-/craig2:2T
-/craig3:2T
-/craig4:3C
-/craigt:0C
-/cramey:5C
-/cranium:03
-/cranky:3M
-/crapple:42
-/crash:63
-/cray0n:63
-/crayonsandsisssors:6C
-/crayonsyummy:0C
-/crazy88:40
-/crazyfox:1C
-/crazyfoxy:6C
-/crazytypo:0C
-/crdb055:0D
-/creedmoot:51
-/creep^ltx:1C
-/creider:3M
-/crimisok:0C
-/crip:2D
-/crip_:03
-/cripplekike:2D
-/cris10an:1Z
-/crisu:42
-/crisu_:4N
-/crns:25
-/crns_:0C
-/cron:2J
-/crono_:4C
-/crono|:4G
-/crossword:2T
-/crushdmb:4G
-/crwl:0A
-/crwl_:5E
-/crypt0kr1:63
-/crypt0kraken:2J
-/cryptopanic:5E
-/crzdfkr:0C
-/crzlg:4N
-/crzlg_:0D
-/csadilek:63
-/csawedpo:42
-/cshrik3:2T
-/csr:51
-/cstroie:3C
-/ct6:42
-/ct8:6B
-/ctcp:1Z
-/ctone:3A
-/ctt:25
-/cttechnician:25
-/ctxu:2T
-/cubes:3M
-/cuck:4C
-/cuckadoodledoo:0C
-/cuckoo:0A
-/cuckoo1:6H
-/cujkh:2D
-/cukcyzd:1Z
-/cull:2J
-/cum:3C
-/cumbayah:40
-/cunny:2D
-/cunt:1Z
-/cuntrox:6C
-/cup:3A
-/cupaiV:09
-/cupcake:25
-/curegodde:09
-/curiouscity:42
-/curmet:2J
-/curveball:42
-/cushin:3C
-/cutie:3C
-/cutiepie:42
-/cutlass:2D
-/cvx:1C
-/cwgnmp:4N
-/cx:63
-/cxp:42
-/cyb3r:0C
-/cyber:2T
-/cyberPUNK:6C
-/cyberfr0g:03
-/cyberjunkie:3M
-/cyberlard:6B
-/cygnus:1Z
-/cykaspy`:3M
-/cylex:1Z
-/cyr4x3:4N
-/cyren:42
-/cyria:03
-/cyrus:03
-/cyzx400:1Z
-/czaks:2J
-/czarbomba:25
-/czer00:6N
-/czolgosz:25
-/czolgosz_:25
-/d:3H
-/d-_-:51
-/d-_-b:1C
-/d0:4C
-/d00dles:1C
-/d0m3r:1C
-/d0m3r0:6B
-/d0mP33-:1C
-/d0mP33_:1U
-/d0ndit0:1C
-/d0ze-phone:42
-/d1g1t:63
-/d3m0:25
-/d3m0nm4dn3ss:25
-/d4:6B
-/d4nny:0A
-/d4redevil:03
-/d9thought:0C
-/dArK:03
-/dArK_:2J
-/dAwUD__:4C
-/dCwBDusJO:51
-/dEEMZ:3C
-/dEEMZ187:63
-/dNk:4N
-/dOm3r:03
-/d_rebel:4C
-/d_rebel_:0C
-/d`:6A
-/dab21:3C
-/dabUFC:3H
-/dabdab:2T
-/dabears:2T
-/dabears_:25
-/dabguy:3A
-/dabguy000:2J
-/dabguy2:51
-/dabguy3:51
-/dabguy444:4G
-/dabguy555:6B
-/dabguy666:51
-/dabguy7:0C
-/dabguy777:3M
-/dabguy778:03
-/dabguy8:6B
-/dabguy9:2D
-/dabguy999:6B
-/dabguy_:3P
-/dabguyrul:0C
-/dabman:09
-/dabmuslim:6C
-/dabohm:42
-/dad:0A
-/dad_:3H
-/daddy:0C
-/daed_:5E
-/daedisgay:09
-/daggett:2J
-/daglhx:6B
-/dah-rat:4G
-/dahrat:51
-/dailykenster:25
-/dailykoder:4C
-/daim2k5:4C
-/dakkar:51
-/dakuwan:3H
-/dalasfpok:1C
-/dalila:0D
-/dalila_:1C
-/damax452:0C
-/dan:5E
-/dan_:1Z
-/dani:25
-/daniel_:0C
-/danielinux:4G
-/danielz:6H
-/dann:3M
-/dap:2T
-/daphne:03
-/dark_tang:5E
-/darka:42
-/darkdoomer:3M
-/darkdoomer_:6B
-/darkex:03
-/darkfade1:51
-/darkfader:3M
-/darkmage:3H
-/darkmage_:1U
-/darkmagic:40
-/darkmask:09
-/darkmask`:2T
-/darkneb5b:03
-/darknelc9:51
-/darkness:25
-/darkness1:09
-/darkness_:0A
-/darkneyp8:2D
-/darksage:3M
-/darksnake:1Z
-/darkspadez|lapto:09
-/darkwind:3H
-/darkwise:3A
-/darkydark:4N
-/darn:5C
-/darndush:1C
-/dart:2J
-/darwin:03
-/darwin-:6B
-/darwin-el:0C
-/datajerk:2J
-/datalobe:25
-/datalobe_:4G
-/dataman:25
-/dataman2:2D
-/dataman4:09
-/datastrea:63
-/dave:6C
-/dave4925:6B
-/dave4925_:2J
-/david:2T
-/davis:51
-/davitt:6B
-/daw:1C
-/daww:0A
-/dayid:3H
-/db-:1C
-/db-_:3P
-/db420:4G
-/dboard2:4G
-/dburno:42
-/dcNY:2D
-/dcamp:3H
-/dcamp_:0A
-/dcat:3A
-/dcli:25
-/dcm3605:3A
-/dcoPSnEi8:1C
-/dctrud:6C
-/dctrud_:25
-/dcx:25
-/ddarko:2D
-/ddd:0D
-/dddd5555:4N
-/dddddd:1C
-/ddelony:4N
-/ddevault:4N
-/ddfd:2T
-/ddos_hard:1C
-/ddos_me_h:6B
-/ddosalert:0A
-/ddosbird:63
-/deadcat:03
-/deaderz:4G
-/deadguy:2D
-/deadhomie:09
-/deadly:1C
-/deadmeat:5E
-/deadnigs:6C
-/death5:4N
-/death_to_NWO:6C
-/deathbybandaid:2T
-/deathbybandaid_:63
-/deceit:1C
-/deceit_:5E
-/decent:3C
-/dee_:0A
-/deeply:25
-/deerbutts:09
-/deez:42
-/def_not_s:3H
-/default:3M
-/defiler:09
-/defqon:63
-/deicer:3H
-/deiol:09
-/delial:4N
-/delisa:42
-/della3:1Z
-/deltaepsilon23:4N
-/demfloro:3A
-/demo:4G
-/demo_:3M
-/demogorg1:6H
-/demogorgo:5E
-/demsh:6N
-/demure:2J
-/demure-test:2D
-/denkenz:1Z
-/denkenz_:25
-/denwa:51
-/denwa2:5E
-/derk0pf:3A
-/derr__:6N
-/derwutmann:0A
-/destro:51
-/desu:4N
-/desu9x:63
-/deth_vege:09
-/deurzen:4N
-/dev\null:2J
-/developer:3C
-/devi8d:03
-/devil:1Z
-/devilfox:40
-/devilfoxy:63
-/devnewton:3M
-/devrtz:0A
-/dewbieZ:3H
-/dewbieZ_:3A
-/dex:25
-/deysu:51
-/dfgh_:4G
-/dfghj:2J
-/dfive:4G
-/dfksjlfda:25
-/dflp:6A
-/dfs:4N
-/dfstorm:2T
-/dfx:2D
-/dh:51
-/dhPu:2T
-/dh_:3A
-/dhejavu:4G
-/di0ad_:51
-/diChe:6B
-/diE:1C
-/dianora:4N
-/dibi:3A
-/dice:2D
-/dick:4N
-/dickey:1Z
-/dickey_:0C
-/dickey__:51
-/dicot:3A
-/didheevenexist:6B
-/didjital:0C
-/didnotknowthatiusesuchalongnic:1Z
-/didsle:4C
-/dieforir1:2D
-/dieforirc:3A
-/digi_:3A
-/digital:42
-/digital_:25
-/digitl:5E
-/digitlaci:3A
-/dijit:0C
-/dijit-:4G
-/dijit-hexchat:6C
-/dilubxwv:0C
-/dimples:4G
-/ding0pryd:4N
-/dingir:6B
-/dingir_:4N
-/dingir__:4G
-/dingo:63
-/dingopryd:4C
-/dinkee:3C
-/dionysis:6C
-/dioxide:4C
-/dip:25
-/directhex:42
-/dirmaster:3A
-/disc:3A
-/disc9:0D
-/disci:5E
-/disconnected:0A
-/disconz:0C
-/discord:09
-/discussed:4N
-/dislabled1:3A
-/disobey:3H
-/dispose:5E
-/disturb:2T
-/disturb_:4G
-/diviny:63
-/diviny-csh:63
-/diviny1337:3A
-/divve:0D
-/dj-e:0A
-/dj-rollex:4G
-/djahandarie:2T
-/djce:63
-/djcoby:4N
-/djel:6B
-/djeleas:6A
-/djeleas__:0A
-/djmoch:42
-/djneomxl:4G
-/djordjecupic:4C
-/djpeebles:6C
-/djreflecc:09
-/djreflect:51
-/djste:25
-/dk56:25
-/dk57:6C
-/dk58:1U
-/dkcf:6B
-/dklsdkl:3C
-/dlan:09
-/dld630-2:3C
-/dleu:4N
-/dleux:4C
-/dlippy:4N
-/dlm92j:4C
-/dm:0C
-/dm9kriFkQ:1Z
-/dma:4N
-/dma_:03
-/dma`:6N
-/dmage:6H
-/dmask`:2J
-/dmt:0D
-/dns:1Z
-/dnsk:03
-/dnsk_:63
-/dnull:1C
-/dnwklin:09
-/doberty:6H
-/doc:2D
-/docteurfolamour:0C
-/dog_whistle:4C
-/dogg:0C
-/dok:2D
-/dokuja:4G
-/dolarhyde:3H
-/dolaver:09
-/dolbe:25
-/dolla:63
-/dolphin:1U
-/dolrayge:2D
-/dongfix:3C
-/donkarr:09
-/donkey:03
-/doodles:3A
-/doomas:0D
-/doomer0:4C
-/doomer8:63
-/doppler:2J
-/dorf:0A
-/dorkmage:42
-/dorkness:4C
-/dorkvader:6H
-/dornier:3P
-/dos1:09
-/dosmap:3H
-/dothacker:2D
-/dotskin:0C
-/dotsonskin:2J
-/dotsonskin45:6B
-/dottymcdotface:0A
-/dottymcdots:25
-/dottys:3A
-/dotzee:3H
-/double-a:3P
-/douche:51
-/douche-:6C
-/doug:25
-/doviny:3M
-/download:3H
-/doyhen:2T
-/doyhen_:0C
-/dozer_:51
-/dpIi:3H
-/dpgb:2B
-/dptdrma:6C
-/dptklei:25
-/dqfO:2J
-/dqk:25
-/dr1p:6H
-/drPrimate:0C
-/dr_rce_:6C
-/dr_rce__:1C
-/drachen:4C
-/dragnalus:3A
-/dragon2:5E
-/dramo:5E
-/drastik:6B
-/drastikbot:03
-/dratbaby:6H
-/drbean:4N
-/drbean_:0C
-/dreadful:5C
-/dreamer:51
-/dreamer_:6H
-/dreamingwindows:0D
-/drek:1Z
-/drelcott:4G
-/drelcott_:6H
-/drestglas:1C
-/drewlande:0A
-/drewsh:4G
-/drewski:25
-/drhamstuh:42
-/driver76:3C
-/driver77:4C
-/driver78:2J
-/driver79:09
-/driz:42
-/drkcactus:1C
-/drkhsh:3C
-/drkmg:2T
-/dromer:1U
-/dropkick:0C
-/droptone:3C
-/dross_Phy:09
-/droud:4G
-/drpepper:25
-/drulw:2D
-/drum:51
-/drunk:63
-/drunkos:63
-/druqs:1C
-/dsasd:1Z
-/dsaxzaq:1C
-/dsc_:0C
-/dsp:2B
-/dtwpeoc:3M
-/du6w:25
-/dubb:4N
-/dublord:5E
-/duckhunt:03
-/duckhunt101:1C
-/duckk:2D
-/duckonomy:5E
-/ducksauce:2D
-/dude2:2J
-/dude3:4G
-/dude4:6C
-/dudis:42
-/dudisss:1C
-/dudley:6A
-/duglbexg:4N
-/duiLah:1Z
-/duk0r:1C
-/dumbergoy:09
-/dumbgoy:6H
-/dumbgoy1:4C
-/dumbgoy5:3C
-/dumbgoy_:09
-/dumbgoyy:0C
-/dumbgu:6C
-/dumbguy:0A
-/dumbguy-:3A
-/dumbguy2:42
-/dumbguy22:2T
-/dumbguy4:03
-/dumbguy5:3H
-/dumbguy^:0D
-/dumbguy_:6B
-/dumbguy|:3H
-/dumguy:6C
-/dumguy2:2T
-/dumvgut:0A
-/dupa:6B
-/duro:3M
-/duroSK:4G
-/dusker:3M
-/dv:1C
-/dvdmuckle:6B
-/dvqgm:1C
-/dwa:4G
-/dwainbird:2D
-/dwaineNOT:2D
-/dwarfinyourwalls:42
-/dwarfinyourwalls_:2J
-/dwayne:6H
-/dwts:6A
-/dwts39:1Z
-/dxahv:63
-/dxsqa:1Z
-/dylan:63
-/dzajs:42
-/dzho:3M
-/dzjfm:42
-/dzl:3H
-/dzyuflf:3A
-/e:4G
-/e0f:6B
-/e0f_:0A
-/e8narx:0A
-/eCW-[a]:6B
-/eDG-[a]:2J
-/eFX-[u]:6H
-/eKM-[a]:2J
-/eLN-[a]:03
-/ePOg:4N
-/eR0dicChat:25
-/eRB-[u]:3M
-/eRT-[i]:09
-/eU696Bl:4N
-/eWT-[a]:1Z
-/eXS:6C
-/eYV-[i]:6B
-/e_:6B
-/eaDae:2D
-/eafahV:5E
-/ealona:6C
-/earlgrey:6C
-/earne3:51
-/eastcoastweb:25
-/easy_switch:4N
-/eatshit:0D
-/eav:3C
-/ebwaj:09
-/ece:25
-/ecelis:3H
-/ecelis1:51
-/echapa:3M
-/ecmo:3C
-/ecmo0:3C
-/ecmo1:2J
-/ecmo2:0C
-/ecmo3:4N
-/ecmo4:6B
-/ecmo5:03
-/ecmo6:6H
-/ecmo7:0D
-/ecmo8:3C
-/ecmo9:2J
-/ecs:2D
-/ectomorph:25
-/ed:0D
-/eddie:25
-/eddie-:3A
-/eddie_:6B
-/edgarfrie:63
-/edgelord:3A
-/edicius:09
-/edin:3A
-/ediot:42
-/edists3w:0D
-/edtej:2J
-/eduardas:09
-/edward:3P
-/edward_:3A
-/edward__:25
-/edxley:1Z
-/eeDaB:6C
-/eeGhee:63
-/eeHae:51
-/eeHiet:4G
-/eeNgu:0C
-/eePaes:1C
-/eeShie:6C
-/eeZahr:25
-/eeero:3M
-/eeesy:25
-/eeesy_:3C
-/eeesy__:1C
-/eefer:51
-/eefer_:09
-/eegenolf:1C
-/eegenolf1:09
-/efge:42
-/efil4cri:3M
-/efil4cri1:3M
-/efil4cri2:3M
-/efil4cri3:3M
-/efil4cri4:3M
-/efil4cri5:3M
-/efil4cri_:3A
-/efircorg:51
-/efman:4G
-/efman_:5E
-/efnable:0C
-/efnet.deic.eu:40
-/efnetbot:0C
-/efnetbot0:3C
-/efnetbot`:2J
-/efriendly:03
-/efsenable:4N
-/efsnable:03
-/efsneable:0D
-/eggo:2T
-/eggsalad:4C
-/eggy:1C
-/eggy1:3H
-/eghkun:3H
-/egito:03
-/egypcio:3C
-/ehdee:4C
-/ehejnej:2D
-/ehioCh:42
-/eiGohx:6B
-/eiLeiC:6B
-/eiThi:5E
-/eightChad:4N
-/eightmegs1:40
-/eiruLu:4G
-/eisen:03
-/ejgywfud:6B
-/ejh:3C
-/ejr:2B
-/ekeinos:2B
-/ekollof:25
-/el8:09
-/elena:3C
-/elevator:6C
-/elias:6C
-/elioat:0A
-/elita:2J
-/elldvc:03
-/elle:2J
-/ellie:1Z
-/ells:6C
-/elp:03
-/elph:3A
-/elph_:25
-/elred_:63
-/els:4G
-/elsimio:4G
-/elusive:6B
-/elw:4N
-/elwisp:3M
-/elx:3H
-/em:6N
-/emaliy:6C
-/emay:6N
-/emayyyy:40
-/emb:2B
-/embri0n:25
-/emhcnmy:25
-/emiemi:51
-/emiemiemi:6C
-/emiiiiii:5E
-/emli:2T
-/emllle:2T
-/emma03:03
-/emma035:2J
-/emmaa:0C
-/emmaf:5E
-/emmaloui:09
-/emmalouis:09
-/emmalouise:2D
-/emmalouise11:4N
-/emmalouise14:4G
-/emmalouise27:51
-/emmalouise37:63
-/emmalouise42:1C
-/emmalouise71:3A
-/emmalouise84:42
-/emmalouise85:6H
-/emmalui:1C
-/emmaluigi:09
-/emmanuel_:1C
-/emmaps:03
-/emmasfather:1C
-/emmff:0C
-/emo-effy:3C
-/emoEFFY:4G
-/emoguy:6C
-/emojiirc:25
-/emp:03
-/emp_:2T
-/emu:6A
-/enderwigg:6H
-/endofinte:3C
-/engelbart_prickly:03
-/englishm:4G
-/eni:0C
-/enigma:2J
-/enqcih:25
-/enrique:51
-/ent:3C
-/entartet:3C
-/enthd:25
-/enthdgree:2D
-/enyc:0A
-/eoUt:3A
-/eojksem:4N
-/epbzh:3A
-/epd:6B
-/ephemer0l:4G
-/epl:25
-/epl692:63
-/epl6921:09
-/epl692_:25
-/epoch:0C
-/equwal:6H
-/eqxvwj:6B
-/era:3A
-/erase:03
-/eraser:1C
-/eraser_:25
-/erazer:0C
-/erf:09
-/erf-:0A
-/erfenable:3C
-/ergo:3C
-/ergo_:3M
-/erica__:4C
-/ericdm:3H
-/erika:2D
-/erikb:4G
-/erin:2T
-/erin_:03
-/erin__:1C
-/erocker:51
-/erockr:2D
-/erockr_:3A
-/erratic:6H
-/erratic_:09
-/erratic__:0C
-/error:6B
-/eruantiensaga:09
-/erzr:1Z
-/esk2mo:6B
-/eskimo:5E
-/eskimo_:3M
-/eslowai:25
-/esql:42
-/esqws:3C
-/esran:3H
-/esrh:1C
-/et:4C
-/eta:51
-/etendard:0C
-/etendard_:0A
-/eti:0A
-/etki:25
-/etki-b:3H
-/euidzero:3C
-/eurydice:6A
-/evelynm:6B
-/every0ne:5E
-/everyone:3C
-/evewasframed:6H
-/eviMek:2D
-/evilRails:6H
-/evilgrin:2J
-/evt:3H
-/evulanjal:1C
-/evy:42
-/ewerd:4N
-/ex25:2D
-/ex2525:1C
-/exHc:42
-/exYG:4N
-/exp0sure:25
-/expjx:2T
-/expo:25
-/exposed:1Z
-/extreem:1C
-/exusser:0D
-/eyehate_:4C
-/eyehbdyd:4G
-/eyenx:3H
-/eyenx|m:6B
-/eyersea:4C
-/eyersea1:3H
-/eyersea_:4G
-/eyesage:5E
-/eyowh:5E
-/eyrsea:0A
-/eysage:0C
-/ezvmgk:0C
-/f00k:5E
-/f0zk:3A
-/f13:1C
-/f17needhelpwithmacbookairpls:6C
-/f212e:1C
-/f3bruary:5E
-/f3bruary_:03
-/f3r0x:42
-/f4ggles:6A
-/f6hn:3H
-/fAzEr:1U
-/fC:63
-/fEEUOqLHK:3C
-/fLegmatik:6B
-/f_:0A
-/fabs:0C
-/facebiter:6H
-/factshurt:6C
-/faeQuu:4N
-/fag:4G
-/fagasarus:0A
-/fagg0t:3M
-/faggator:3M
-/faggetttss:2J
-/faggles:2D
-/faggot:5E
-/faggot-:6C
-/faggot--:1C
-/faggotbot:3A
-/faggots:3H
-/faggtchan:25
-/fagsage:4C
-/fagstag:51
-/fagstag-:63
-/failog:1C
-/failtime:2J
-/failure_:1Z
-/fairee:3A
-/fairlyhard:0C
-/faith_:2D
-/falcon_:4G
-/falconx:6H
-/family:4C
-/fancsali:09
-/faqata:03
-/far0ut:2T
-/fartbird:6H
-/fartgang:0C
-/fasibcs:3A
-/fat_frog:0C
-/fatalhalt:3C
-/fatcor:0C
-/fatcor2:1Z
-/fatfag:0A
-/fatman:63
-/fault:09
-/fault-:0C
-/fauna:09
-/fauna_:63
-/faust:2T
-/faust_:3H
-/fausto:25
-/favicon:5E
-/fbs:3A
-/fc-:1Z
-/fckd:0A
-/fckd-:42
-/fckd^:5E
-/fckd_:5E
-/fckd`:4N
-/fckda:42
-/fckd|:0D
-/fcobz:2J
-/fd0e:4N
-/fd71:1C
-/fd71_:0D
-/fdckr:09
-/fdfd:3A
-/feach:3H
-/fearUSA:40
-/fear_:0C
-/feczcei:63
-/fed:51
-/feddef:4G
-/feelingsreal:25
-/feibg:6H
-/feisod:2J
-/felon:3M
-/felon`:4G
-/femi:1Z
-/femy:4G
-/ferminter:1Z
-/fever:6C
-/fever1:09
-/ffej:3H
-/ffejj:3C
-/ffl:1C
-/ffl|lappy:0D
-/fforfuck:4C
-/ffucvw:09
-/ffuentes:5E
-/ffuentes1:51
-/ffuentes_:6H
-/fg:6H
-/fgau:6H
-/fgghjjkll:2T
-/fgghjjkll2:42
-/fgts:2T
-/fgts3:63
-/fhfjkhf:0A
-/fhhj:63
-/fhrnjrjr:42
-/fiMui:3H
-/fiQ:1C
-/fiQ2:4C
-/fiber0ps:0C
-/fieryFU:6C
-/fieryGT:51
-/fieryUSA:2J
-/fifth:4G
-/fiftysixer:3C
-/fight:3M
-/filostyktos:3H
-/finex:4G
-/finextodingo:3H
-/fireaves:51
-/fireman:2D
-/firewyre:09
-/fishbutt:4N
-/fishe:3C
-/fishe2:3A
-/fishe_:2T
-/fishebage:6H
-/fission:6C
-/fitcor:51
-/fittan:6B
-/fitzgerald1337:03
-/five5:63
-/fjgkjkljn:0C
-/fjmc8:3C
-/fjyimwz:3M
-/fkinEZ:2J
-/fkinglag:63
-/fkinglag_:63
-/fkkzypern:25
-/fklnEZ:51
-/fkr:3P
-/fkxpcw:2D
-/flagondry:4G
-/flameboi:5E
-/flash67:5E
-/flavoral:2D
-/flewkey:42
-/flex14:6C
-/flgr:0C
-/flip:3M
-/flipp:2T
-/flippp:09
-/flipppp:4N
-/flippy:4G
-/flippyBOT:2D
-/flippybot:4N
-/flippyy:09
-/flippyyyyyyyyyyyyyyyyyy:2D
-/flippyyyyyyyyyyyyyyyyyyyyyyyyy:25
-/flo:63
-/florens:0C
-/florens_:2D
-/flp:25
-/fluff:4N
-/fluffy:2T
-/fluffypony:4N
-/flunky:0A
-/flunky_:3C
-/flurp:2D
-/flurry:0C
-/flute:51
-/fly:4N
-/flysky:6H
-/flytronix:3A
-/fmoonII:0A
-/fmoonSW:2J
-/fmop:03
-/fn:4N
-/fnbridge:2T
-/fncy:6B
-/fni:2T
-/fni_:3M
-/fnnmbjq:1C
-/fnoodl:5E
-/fnoodl_:1C
-/fnzqvwz:3A
-/fohCha:25
-/folesfan:3H
-/foo:1Z
-/foobar:25
-/fook:2T
-/for_a_memory:6C
-/foreverr:25
-/forkbomb:51
-/forks:1Z
-/fornicato:3A
-/fossegrim:0D
-/fossegrim[m]:6H
-/fossy:0C
-/foto:3C
-/foureyes:4G
-/foureyes-:3H
-/fow:4G
-/fox:3C
-/fox_:4N
-/foxbutt:2T
-/foxes:4G
-/foxes_:40
-/foxtrash:3C
-/foxyou:1Z
-/foxzillah:1Z
-/fp:6C
-/fpb4:0C
-/fpfihuh:4C
-/fppe:42
-/fppe-:6C
-/fpwr:4G
-/fpwr_:5C
-/fr0sty:09
-/fr0zn:1C
-/fr33d0g:2D
-/fr3en0de:7H
-/frEEKie:2T
-/fractal:51
-/fractal-:1U
-/fran:51
-/franscan:0D
-/franzer:0A
-/franzer_:3C
-/freakazoid0223:03
-/freckles:1Z
-/fred:09
-/fred-:3C
-/fred--:3M
-/fred_:51
-/fredy1:0A
-/free:2J
-/free2:6H
-/free2_:63
-/freedom:42
-/freekoala:2T
-/freem:2J
-/freemangordon:5E
-/freex:2B
-/frenK:1C
-/freq:03
-/frewq:2T
-/frez:03
-/frida:09
-/friend:3C
-/fris_:5E
-/frisjon:2T
-/fritzl:25
-/frogaincia:0D
-/frogface:51
-/frogface_:2T
-/frogface_outside:63
-/frosty:63
-/frozen:0A
-/frrobert:03
-/frrobert_:63
-/frvazab:3H
-/frvbcbbh:0A
-/fsckoff:09
-/fsh:51
-/fshow1:2D
-/fstd:4G
-/fstd_:3C
-/fstd__:03
-/fstrelok:2B
-/fstrelok_:5C
-/fstrelok`:4N
-/ftl:6B
-/ftwjames:25
-/fuck:3C
-/fuckJews:51
-/fuckasss:4G
-/fuckdoll:51
-/fuckdoll_:2T
-/fuckface:3H
-/fucku:0C
-/fucsadfga:4N
-/fujikmoh:4N
-/fujikmon:2J
-/fujikom0:0D
-/fujikomo:3C
-/fullybent:25
-/fumblefez:0C
-/functions:0C
-/funintl:2J
-/funkpow:6H
-/funkpow1:4C
-/funkpow1_:1C
-/funkpowe1:6B
-/funkpower:0D
-/funkpwr`:03
-/funpower:03
-/furlow:03
-/fury:4G
-/fusionroc:0C
-/fuzpock:2J
-/fuzz:3M
-/fxjewlfu:6C
-/fy:25
-/fyr:3M
-/fyrfaras:03
-/fyxiamk:1Z
-/g:1Z
-/g0d_:25
-/g0dub:2J
-/g0dub_:63
-/g0dub__:2D
-/g0newtw:25
-/g0wce:6C
-/g0wse:1C
-/g22:4N
-/g33:3A
-/g3n713m4n:4G
-/g3phi:5E
-/g4570n:3M
-/g7ji:1C
-/gBHK:4G
-/gNQf:3H
-/gaetano:51
-/gaetano_:6B
-/gah2:1C
-/gahSh:2T
-/galago:2T
-/galego:09
-/gall0ws:6H
-/gamakichi:4C
-/gamedude:0A
-/gamerdude:3H
-/gamerrr:42
-/gamersdude:2T
-/gammald:09
-/gandhi:3H
-/gands:4N
-/gangIand:3M
-/gangfart:0C
-/gangland:0C
-/gangreen:1C
-/gantry:5E
-/garandil:25
-/gareppa:0D
-/gargantua:0A
-/gargus:1Z
-/garlic:03
-/garp:6B
-/garp_:2J
-/garre:6H
-/garret:3C
-/garret88:25
-/garrett:42
-/gary:2D
-/gary_oak:4N
-/garyd:0A
-/gascon:0C
-/gascon_:5E
-/gascon_lady:4N
-/gascon_test_web:25
-/gasconheart:4N
-/gasconheart1:6H
-/gasconheart`:4C
-/gast0n:0A
-/gast0n_:0C
-/gasull:3M
-/gateway2000:3A
-/gatti:4G
-/gatti_:3H
-/gatti`:25
-/gauss:0C
-/gayrage:4N
-/gayrape:4N
-/gaysage:03
-/gayzee:63
-/gbmor:09
-/gbrqgme:25
-/gclau_:5C
-/gcsyql:0A
-/gctechs:3A
-/gdkbql:4G
-/gdyjifr:3C
-/gebejhe:2T
-/gediz0x53:25
-/gediz539:3M
-/geeJee:3C
-/geee:2J
-/geezus:4G
-/gelb:6H
-/gemmi:6H
-/gemmo:40
-/generalC:0D
-/generalC_:6B
-/genesc:3M
-/genkade:6B
-/genkade_:3H
-/gentoodwm:6C
-/geordie:3A
-/geordie_:25
-/george:1Z
-/georgette:3H
-/gephi:2J
-/geqjrxsg:3C
-/gerbet:0C
-/germ:42
-/germy:2J
-/gerry666:6B
-/getinrich:6N
-/getout:6A
-/gf5FaN5rx:25
-/gffmhk:1Z
-/gfj:25
-/gfrds:0C
-/gfsgd:4C
-/gg:3C
-/ggainey:6B
-/ggg:63
-/ggibyza:5E
-/gguopkin:42
-/gh0st:2J
-/ghjgh777:4C
-/ghjkl:2D
-/ghost:09
-/ghost2501:3C
-/ghost2501_:03
-/ghost64:6C
-/ghost_:4N
-/ghost__:1C
-/ghosti1990:5E
-/ghoul:09
-/gibigiana:5E
-/gid:4G
-/gigga:63
-/giggle:2T
-/giggle-tan:25
-/gigio2000:2D
-/gigs:3A
-/gillz_:5E
-/gimp:1Z
-/gingerling:1Z
-/ginopino:4C
-/giorgos:3H
-/gir:3H
-/gisah:3A
-/gituser:09
-/giwwvy:2D
-/gizmo_:0C
-/gjtgkt:63
-/gjvc:0A
-/gjvc_:63
-/gk:42
-/gl00m:0D
-/gl0ck:1Z
-/glHC:42
-/glaciurso:51
-/gleevauomm:5E
-/glenda:2T
-/glhmnqfp:1Z
-/glider:4C
-/glinder:6H
-/glitrbitz:6B
-/gllit:0C
-/globbot:4N
-/glooby_32:1C
-/gloomDev:2T
-/glorfind1:42
-/glorfinde:2D
-/glorious:1Z
-/glorious_:4N
-/glppvaa:4C
-/gm:0C
-/gmh:6C
-/gmh-:51
-/gmh--:4C
-/gmh--_:2J
-/gms:2T
-/gmxpllqe:03
-/gnaahoe:6H
-/gnik:2D
-/gnomus:42
-/gnostik:2T
-/gnstaxo:0C
-/gnupluslinux:42
-/gnusd:1C
-/gnusd_:0C
-/gob:4C
-/gobbo:0C
-/gobbo_:3A
-/god:4N
-/god_:4C
-/god_is_dead:03
-/goduck777:3M
-/goduck777_:2T
-/gogo:3A
-/gogog:25
-/goh:51
-/golakers:51
-/goldie:3A
-/goldnick7:3H
-/golem:3H
-/goliath:6C
-/gongreen:3A
-/goodtimes:6B
-/goody:3M
-/goody2:63
-/gooey:4N
-/goofypeen:4N
-/goog:2J
-/googal:03
-/google:1C
-/gookfuzi:0C
-/gophbot:09
-/gorgonzol:03
-/gorilla:2T
-/goring1:2T
-/gorthx:3C
-/gotdosd:03
-/gotothekitchen:42
-/gowce:51
-/gowse:63
-/gowse_:6C
-/gpQf:1Z
-/gpaqdbpp:03
-/gppcpu:4C
-/gpunjjkt:5E
-/gq:0D
-/gqbriele:09
-/gqllo:0C
-/gr:2T
-/gr-:3A
-/gr0zz:2D
-/gr3p:51
-/gr3y:25
-/gradew:4N
-/gravestench:51
-/gravitas:0D
-/gravitaz:6C
-/gravyv:4G
-/grawity1:2T
-/grayskull:1C
-/grayv:3C
-/gre:3M
-/greasee:0D
-/greasy:3M
-/greelly:5E
-/greenbagels:3M
-/greenone:6H
-/greeter:03
-/greettest:0C
-/greg:6C
-/greg_:09
-/greghume:51
-/greghume_:3M
-/gregory:3A
-/grenade_:6H
-/gretathunberg:3H
-/greyc4:0A
-/greywolver:5E
-/greywolver_:4C
-/grfzsnk:0C
-/gri-:1C
-/grimes:4G
-/grimfosse:6C
-/grip:3A
-/grip-:3A
-/grip^:4N
-/grip_:3A
-/gri|:3C
-/grns3:4N
-/grns4:40
-/groid:03
-/groin:5E
-/groin_:0A
-/groki:2D
-/groove-o-:0C
-/grosjean:51
-/grpar:4G
-/grrf:3A
-/grrfield:3M
-/grrr:42
-/grrrrr:2T
-/grsjfcn:03
-/gru:5E
-/grufwub:3A
-/grumble:1Z
-/grungy:09
-/gruodf:6H
-/grxyox:2D
-/gry:3C
-/gry_:4N
-/gsserxo:63
-/gt:03
-/gt100boss:4N
-/gtb:0C
-/gtc:0C
-/gtc1977:4N
-/gtc19771:2J
-/gtrhteh:63
-/gturner:6C
-/guest1211:09
-/guest50320:25
-/guk:4G
-/gulamakba:25
-/gumpybloo:3C
-/gun:0C
-/gupdg:1C
-/guseboi:3A
-/gusugs:4N
-/guy9000:42
-/guzzo:51
-/gvzgcze:3C
-/gwxsyz:2D
-/gxyaem:3C
-/gxykwllk:6C
-/gyepfqd:42
-/gzyiyn:4G
-/h0nk:4N
-/h0noo:2J
-/h0t1ine:25
-/h0tl1ne:0C
-/h0tline:3A
-/h1x:4C
-/h1x_:4N
-/h31:3M
-/h3h3:4N
-/h4ppy:0C
-/h4rb1ng3rs:2T
-/hHgs3s:2T
-/hUpc:2D
-/h_:3H
-/h_hvn:7H
-/haarek:25
-/hackerman:42
-/hackles:40
-/haeGh:0A
-/hagen:1Z
-/haiPa:6B
-/haiku:42
-/hairyanus:1C
-/haitch:1Z
-/haleysmith:3A
-/hallucinate:03
-/halmmfke:42
-/halt:3C
-/hana:2J
-/hangar118:6H
-/hank:1C
-/hank-:63
-/hank_:3H
-/happy:1Z
-/happy_day:6C
-/happy_har:1C
-/happyblue:4N
-/happybox:5E
-/happyhog:40
-/harilikha:2D
-/harloe:3A
-/harlow:6C
-/harmetic:4N
-/hasan:3C
-/hasanAbi:3M
-/hashcat:4N
-/hashcat_:2D
-/hashem:5E
-/hashfyre:6H
-/hata:4N
-/hatefuckr:3M
-/hatesec:6H
-/have:2D
-/havel:3A
-/havel_:0C
-/hawking_romantic:63
-/hay:0D
-/haydenh:7H
-/haydenh_:7H
-/haydenh__:7H
-/haydenh___:7H
-/haydenh____:X7E
-/haydenvh:2D
-/haywalk:6B
-/haywo:6C
-/hazel:25
-/hc9:2T
-/hcliph:6H
-/he_has_risen:25
-/hea:4N
-/heartface:2J
-/heartless:0C
-/heartliss:63
-/heartofrevel:6C
-/heartofrevel1:2T
-/heartofrevel4:09
-/heather:25
-/heatwave0:6H
-/heaven_:0A
-/heavy-r:6C
-/heavyarms:0C
-/heckle:09
-/hedge123:5E
-/hedy:6H
-/heftig1:4G
-/heimdall:03
-/heimdall_:5E
-/heimdallr:63
-/heinrich:3C
-/hekyn:6H
-/hellfire:0C
-/hellfox:63
-/hellfoxy:2D
-/hello_navi:03
-/hellofox:63
-/hellofoxy:51
-/help:6B
-/henninb:51
-/henosis:3H
-/henrique:3C
-/heredoc:5E
-/heretyk:51
-/hero:0A
-/herszt:4N
-/hextasy:0D
-/hextasy^:3A
-/heydude_:25
-/heydude`:09
-/heyron:6H
-/heyron-:3M
-/hfg:03
-/hfhgd:1C
-/hgc:0C
-/hgc_:3M
-/hgdfsh:25
-/hghg:0C
-/hhh:0C
-/hhh`:09
-/hhhh:63
-/hhjbov:5E
-/hhmmhh:2D
-/hhvn:7H
-/hhvn_:63
-/hhvn__:63
-/hhvnscv:2J
-/hi:3C
-/hiWoh:3A
-/hiddmahj:03
-/hieFai:4G
-/hif:2D
-/hifbpz:3C
-/higgs:6H
-/higgsboso:6C
-/hijack:09
-/hilighter:6H
-/himmler:2T
-/hinac:63
-/hippopotamus:51
-/hirnspiel:42
-/hiro:25
-/hisacro:1C
-/hislittlelordshipFontleroy:0A
-/hist0ry:3H
-/hiteki:1Z
-/hitl3r:09
-/hitler:2D
-/hive-min1:0C
-/hive-mind:42
-/hjenny:3M
-/hjnzko:6C
-/hkgf:6B
-/hlfm:6B
-/hmamj:6C
-/hmh:09
-/hmm:4N
-/hmmh:6B
-/hnb:63
-/hobbelpaard:63
-/hobbler:2T
-/hobosock:25
-/hobotier:3M
-/hoek:6C
-/hoho:0D
-/hoho1:25
-/hollowleviathan:4N
-/hollywood:6H
-/hologra:6H
-/holtmann:63
-/honest:40
-/honk:3H
-/honk-:25
-/honken:1Z
-/honk|:4C
-/hook_ups:0C
-/hooligani:25
-/hoosier5-:51
-/hoosier54:3C
-/hooway:03
-/hooway_:6N
-/hornyguy:25
-/horseshoecrab:63
-/hostserv:03
-/hotdogess:1C
-/hotfart:63
-/hotline:09
-/hozed:5E
-/hozed_:4G
-/hpbvw:5E
-/hpyc9:4N
-/hrbdnjrh:4G
-/hrbsjd:4C
-/hrmtkrl:3H
-/hrz:3H
-/hschmale:6A
-/hsen:1C
-/html5car:63
-/htmrkl_:6B
-/htmrmkml:5E
-/htnrmek:0C
-/htnrmkl:1Z
-/htrkel:3M
-/https:1C
-/hub.efnet.us:3M
-/hub.eu.hlircnet.:3H
-/hub.us.hlircnet.:0D
-/hubertf:4C
-/hubutm20:63
-/hugo:4C
-/huloxia:3M
-/humbleMan:3M
-/humility:3C
-/hung0ver:5E
-/hungral:2D
-/hunko:51
-/hunnie:42
-/hunter_cat:6C
-/hushmummy:3C
-/huyens:1C
-/hvhost1:2D
-/hvnh:5E
-/hvvn:6H
-/hwidke:3H
-/hyb:42
-/hybrid:5E
-/hydrololi:0D
-/hydrololi_:5E
-/hyiltiz:09
-/hyiltiz_:51
-/hyper_object:4C
-/hyperreal:1C
-/hyperreal0:6B
-/hyperreal3:42
-/hyperreal4:4G
-/hyperreal6:0D
-/hyyoyfk:3C
-/hzavaesc:63
-/i:3H
-/i3-lover:51
-/i87:2T
-/iCjay:0C
-/iKahl:3H
-/iNgiew:4C
-/iRapedYourFather:3C
-/iRuint:5E
-/iTzNavic:51
-/iTzNavic-:25
-/iZcc:4G
-/i_like_THISsuperLONGnickBetter:63
-/i`:0C
-/ia:6B
-/ia2:6B
-/ia_:51
-/ia__:1Z
-/ia`:03
-/iahlbb:4N
-/iai:0D
-/iai_:1C
-/iamerror:3H
-/iamgr00t:42
-/iamkorea:1Z
-/iamnotbob:42
-/iamthebug:2J
-/ian:2J
-/ianax:0C
-/ibiza:6C
-/ibnii:1Z
-/icaretoomuch:6B
-/ice303:1C
-/icebane:0C
-/iceman:25
-/icequeen81:6B
-/iceweasel:3C
-/icon:51
-/icy:1C
-/idal-:63
-/identd-:63
-/identify:3M
-/idiot:51
-/idiot_:6C
-/idiot__:3H
-/idleman:2T
-/idleman_:03
-/ido:5E
-/ie:1C
-/ieBoo:3A
-/ieGhi:4G
-/ieHoch:1Z
-/ieHooh:6C
-/ieNohg:2T
-/ieatcrayons:0C
-/ieatcrayons66:3H
-/ieatcrayons76:42
-/ieatpaste:2D
-/ieatpaste21:42
-/ieatpaste37:25
-/ieatpaste76:6H
-/iehueD:42
-/ieloyptj:51
-/iephoF:63
-/iga:1Z
-/igel_:40
-/iggysage:6H
-/ignucious:09
-/igol:03
-/igol_:1C
-/igotreez:63
-/ihasdivui:63
-/ihate:6B
-/ihavealongnickna:1Z
-/ihower:63
-/ihtiby:51
-/ihugjews:4C
-/ii:3M
-/iiee:4N
-/iiee2:1C
-/iiee`:3H
-/iiee``:3A
-/iiee```:0D
-/iiee````:1Z
-/iije:2J
-/iije`:09
-/iije``:6C
-/iiwsa:2J
-/iizqsvzr:3M
-/ikhfxkcg:0C
-/ikiboo:1C
-/ikiycw:3A
-/ikkkhakv:3M
-/ikmaak:6C
-/iko:6B
-/ikr:1C
-/ileHU:63
-/ill_eagle:3C
-/illumin:4C
-/ilovekit:3C
-/iloveshortnickfuckyoumotherfuc:0D
-/ilsa:3M
-/ilsundal:3H
-/ilumnatr:3M
-/iluvkoala:42
-/imad_al-din-1970:0D
-/imbbwjma:1C
-/imbroken:4G
-/imd0ne:1Z
-/imfee:5E
-/imnothere:1C
-/impact:09
-/impl:4N
-/impl-:0C
-/impl_:25
-/impo:6B
-/inVictus:03
-/incal:2T
-/incel:3M
-/incel46:51
-/incelupri:6H
-/incluso:6B
-/inco6:09
-/incog:4G
-/inconsistentt:2J
-/incubus:09
-/indacuhh:42
-/indulgence:5E
-/indy:4C
-/ine:3C
-/inex:3A
-/infection:0C
-/infidelis:03
-/infil00p:51
-/infox:4C
-/infraudsi:0C
-/infraudsr:4G
-/infspire:0D
-/infy:0A
-/inhiding:0C
-/inky:63
-/innercircle:1Z
-/innmntvs:3M
-/innominat:4C
-/inocent:0C
-/ins4n3:4G
-/ins4n3_:0C
-/insanity:0C
-/insep_:6B
-/insidiou1:25
-/insidious:09
-/inssh:6C
-/intebenis:4N
-/intekra:0C
-/intelinsidecore7:6B
-/intelinsidecorei7:03
-/intercep7:4C
-/intercep8:3H
-/interdom:3C
-/interdom-:0C
-/interdom3:09
-/interdome:4G
-/internut:0A
-/intr0:09
-/intrin:63
-/intro:1C
-/intx:03
-/invertednetron3:0A
-/inz:2J
-/io:4G
-/iocc:09
-/iocc_:40
-/iolhkrl:03
-/ionosphre:3C
-/iori_:03
-/ip22:3C
-/ip_:42
-/irc:6H
-/irc-eu-1.darkscience.net:03
-/irc-eu-2.darkscience.net:09
-/irc-us-east-1.darkscience.net:3H
-/irc-us-east-2.darkscience.net:6C
-/irc.Prison.NET:0C
-/irc.area51.haydenvh.com:25
-/irc.efnet.nl:3A
-/irc.haydenvh.com:3C
-/irc1.unrealircd.org:09
-/irc2.unrealircd.org:3H
-/ircMERC:63
-/ircchannelinfluencer:6C
-/ircshark:1C
-/ircuser01:6B
-/ircuser10:4N
-/iriHei:6B
-/irick:2T
-/irie:4G
-/irie_:5E
-/irish666:25
-/irish667:2J
-/irishsoft:5C
-/irl:5E
-/ironmountain:3A
-/ironybomb:03
-/irt^:1Z
-/irwinz:1C
-/is-:2J
-/is-_:42
-/isaac:03
-/isahYe:2D
-/ishutin:42
-/islam:3A
-/islam2:4N
-/ismoke:6B
-/ismokechronik:2D
-/it:3A
-/it9exm:3M
-/it_doesnt_matter_if_your_black:6H
-/its_a_question:03
-/itsanaddiction:4C
-/itsmylife:4G
-/itspecial:51
-/itsracist:6H
-/ivan:2J
-/ivanfrey:25
-/iwq:51
-/ixirc1:4G
-/iyeaa:3A
-/iyzsong:03
-/iyzsong-:2B
-/j0rdan:3M
-/j0rdn:25
-/j0rdn]:2T
-/j0rdn_:4G
-/j0sh:42
-/j3wbird:0C
-/jIMcRaMER:42
-/jWang:5E
-/jabol:0C
-/jaccid_:4G
-/jaccid__:4N
-/jack:09
-/jackiff:25
-/jaekwon:0D
-/jagjoe:42
-/jah:2J
-/jahPhi:6C
-/jaiQu:6B
-/jak:4C
-/jak_:63
-/jake_:0A
-/jakk:4C
-/jakk_:5E
-/jakks0:1Z
-/jakozy85:1Z
-/james:3A
-/james_freewall:0C
-/jameshjacks0njr:25
-/jammr:5E
-/janet:09
-/japexxxx:4N
-/jappxx:5E
-/japxe:51
-/japxx:03
-/japxxx:4G
-/jaqque:2T
-/jar:2D
-/jarg:25
-/jarro:6C
-/jasmaz:0D
-/jason14:63
-/jason7:42
-/jason_:0C
-/javier37:42
-/javier38:2T
-/jax0m:63
-/jay7369:6H
-/jayde:6H
-/jaydubbs:03
-/jayhamm-:1Z
-/jaymondaddy:51
-/jayparee:2D
-/jayw:3C
-/jbaikge:5E
-/jbals:2D
-/jbird:1Z
-/jblslpf:63
-/jboy:3C
-/jbzabd:2D
-/jcatv:25
-/jcb:03
-/jcrawford:0A
-/jdavid:3C
-/jdavid_:3H
-/jduck:5E
-/jdvfvleu:3C
-/jdx:3A
-/je:3H
-/jebug29:03
-/jebug29_:0A
-/jebug29__:3A
-/jedi:4G
-/jednak:09
-/jednak_:51
-/jeeLai:3A
-/jeepee:63
-/jeff_stacey:3A
-/jeffrey:25
-/jehru:6C
-/jellyb:2T
-/jellybeens:03
-/jenna:3A
-/jenni_:2D
-/jennie:6H
-/jennie1:1C
-/jepvpv:51
-/jepx:42
-/jerem:5E
-/jericho:1C
-/jerk:51
-/jerm:4N
-/jero2:4N
-/jero3:1Z
-/jero4:6C
-/jeru:09
-/jeru-:51
-/jerufu:0C
-/jeruism:4G
-/jerwin:42
-/jerwin-:51
-/jes:3C
-/jess:42
-/jess-----:2T
-/jessica:1Z
-/jessica-:0A
-/jessica-_:1Z
-/jessup:1Z
-/jest0:42
-/jester:0A
-/jesusaur:6B
-/jet_:25
-/jetcream:3C
-/jetienne:3C
-/jetscream:03
-/jevin:3C
-/jew_b1rds:1Z
-/jewbird:42
-/jewbird-:4N
-/jewbird`:63
-/jewbirds:4C
-/jewline:6C
-/jewpax:1C
-/jezbel:1Z
-/jezza:63
-/jfkhibz:3A
-/jh0ng:6C
-/jhigh:6C
-/jhigh_:0C
-/jhigh__:4N
-/jhill:4G
-/jhonny:0C
-/jhutchins:6C
-/ji:09
-/ji_:6A
-/jieuunwx:4G
-/jig:0C
-/jig_:3H
-/jiggawatt:0D
-/jiggawatz:0D
-/jilla:1C
-/jim0r:1C
-/jim^:0C
-/jim_:63
-/jimmy-:3M
-/jims:51
-/jimz0fr:0C
-/jimz0r:0A
-/jimzor:6H
-/jitoz:42
-/jiurjyts:6H
-/jizzle_anesthesia:42
-/jizzmore:1C
-/jjohnstone:0D
-/jjrhekqo:6H
-/jjs_tty:3M
-/jkli5_:3M
-/jkli5_________________________:3H
-/jkrueger:3H
-/jkyahgha:51
-/jlu5:03
-/jmancully:2D
-/jmanfatty:4G
-/jmansWifey:2D
-/jmanswife:4G
-/jmcgann:4C
-/jmlich:4G
-/jmoney:42
-/jmpzer0:51
-/jmw2020software:1C
-/jnhmjyg:51
-/jns:09
-/jns_:6B
-/jnsjunio1:4N
-/jnsjunior:03
-/jnvhphe:6C
-/joacim:6C
-/joacim_:4C
-/joacim__:25
-/joacim___:4G
-/joaoprb:0A
-/joe1701:63
-/joe1710:5E
-/joeblogs:2D
-/joedoe47:42
-/joelchrono12:4C
-/joeleg:03
-/joeroller:42
-/joeroller_:1C
-/joes:2J
-/joes_:63
-/joew:5E
-/jogisgaya:3A
-/johan_:2D
-/johansen:2D
-/john-titor:3H
-/john222:2D
-/john_ceph:1C
-/johncylee:2T
-/johngalt3:51
-/johnhamelink:3H
-/johnm:3M
-/johnny569:09
-/join_sub1ine:1C
-/join_subline:6H
-/joji:4C
-/jojoje:4G
-/jojoli:4G
-/jokk55:1U
-/jokk555:4C
-/jokk55_:6B
-/jokles:3H
-/jolia:1Z
-/jolt:2T
-/jonah:40
-/jonathan:0D
-/jonnow:2J
-/jonsger:3A
-/jonsger1:1Z
-/joobird:63
-/joonnnn:3C
-/jooopltr:1C
-/jordan_0:09
-/jordan__:0C
-/jordan_o:3A
-/jordan_o_:1C
-/jordintosh:3A
-/jordizle:6H
-/jordn:0C
-/jorge:2D
-/josecito:6B
-/joseph:09
-/josh:3A
-/josi:6C
-/josuah:25
-/jowbvu:2J
-/jpcw:2T
-/jprestwo:4C
-/jpwg:3C
-/jpx:3H
-/jpxx:4N
-/jpxxx:1Z
-/jrayhawk:3M
-/jrgufc:3M
-/jrhorn424:3H
-/jrra:0A
-/jrra1:4G
-/jrra3:2D
-/jrra4:3C
-/jrra5:1C
-/jrra_:2D
-/jrrabird:1Z
-/jrrra:25
-/jrue:03
-/jrwr:3H
-/jshoard:6C
-/jshoard_:42
-/jshoard__:3C
-/jsilver:2J
-/jsilver_iphone:1C
-/jsilvertw:42
-/jsmalls:2T
-/jsmalls1:0C
-/jsmalls2:6A
-/jstg:0C
-/jtm-lis:03
-/jtru:5E
-/jts:42
-/jts_:25
-/juRs:1C
-/jualgcqn:2D
-/juda__:6C
-/judge:51
-/julienxx:1C
-/julienxx_:4G
-/juliet:25
-/jungnam:6H
-/junter2:4N
-/jupedbir1:0C
-/jupedbird:09
-/jupitor:42
-/just-testing3:03
-/justice:4C
-/jvoisin:6B
-/jvxxja:2J
-/jwheare:51
-/jwinn:09
-/jwst:2B
-/jxftlagd:51
-/jzrcvc:2D
-/k:03
-/k0ga:0D
-/k1r1t0:3M
-/k22:4N
-/k3yp:5E
-/k3yp-:5E
-/k4be:6C
-/k82k8:3C
-/k8du27d5:0C
-/kB`:3M
-/kB`_:4N
-/k__:63
-/k___:2T
-/k____:63
-/k_____:63
-/k______:3H
-/k________:25
-/ka0s:42
-/kaalto:2J
-/kaan:2D
-/kaasen:1C
-/kahn:51
-/kaiserin:09
-/kaj:2D
-/kaj_:6C
-/kajira:2D
-/kakama:6C
-/kakama_:63
-/kakamobil:09
-/kal:2D
-/kal_:3C
-/kalbasit:3H
-/kalekale:3C
-/kalekale_:3H
-/kali:0C
-/kalle:03
-/kalube:6C
-/kamawana1:6H
-/kamawanai:4G
-/kamchatka:2D
-/kameel:1Z
-/kamel:2J
-/kamel-:3H
-/kamper:1Z
-/kamper1:6C
-/kaotisk:03
-/kaotisk_:0D
-/kap:4G
-/kara-:25
-/kara_:3C
-/karatesan:6C
-/karli:1Z
-/karma:1C
-/karnath:09
-/kash:25
-/kash_:3C
-/kaskokaos:6H
-/kathy:0D
-/katkiller:6B
-/kattarin-:3C
-/kattarina:09
-/katzeilla:25
-/katzeilla1:3H
-/kaw:0C
-/kayo5:6H
-/kayos:3M
-/kayos_:2T
-/kayzee:0C
-/kb22:42
-/kbenn:3C
-/kbrosnan:2J
-/kbz:03
-/kbz3:4C
-/kcayr:09
-/kcefjnm:42
-/kchr:3M
-/kcn:6C
-/kd:6B
-/kd4wov:5C
-/kdjdjd:4N
-/kdndksj:0C
-/kdy:3M
-/kee:1Z
-/keeZa:25
-/kee_:4N
-/keentech:1Z
-/kefka:3A
-/keithhulu:1Z
-/kek:63
-/kelp:1Z
-/kelp-asusfone:1C
-/kelp_:25
-/kelp____:3H
-/kelpstar:6C
-/ken:1C
-/kendra-NU:6C
-/kenn:42
-/kennedy:1C
-/kenny:25
-/kenster:4C
-/kerbalbass:25
-/keria:2J
-/kermit:6C
-/keroff:6H
-/kest10:6H
-/ketas:0A
-/ketas-:03
-/kevin_:0D
-/kevin_mit:1Z
-/kevinburke:3C
-/kevrocks67:2J
-/keweiH:3M
-/keyz:51
-/kgkfeaq:6B
-/kgsuhy:25
-/khaybar:6B
-/khecka_:2T
-/khronos:2D
-/khronos63:09
-/kiad:63
-/kichimi:3H
-/kichimi2:0C
-/kick-azz8:6C
-/kidskilll:2D
-/kierank:2D
-/kiff_:5E
-/kike1:6H
-/kikee:2D
-/kikes:3H
-/kikesmasher:4N
-/kill:1Z
-/kill_grandma:4G
-/killah2k:3A
-/killarney:0A
-/killer:51
-/killsushi:3C
-/killwhite:25
-/killwhtes:03
-/killwites:4G
-/kilroy:25
-/kilroy1:6B
-/kilroy_:5E
-/kilroy__:4G
-/kilroy_work:2T
-/kimberlite:2D
-/kimjun:4G
-/kindling:4N
-/kinduff:1Z
-/kinduff1:3H
-/kinduff5:4G
-/kingcobra:3H
-/kingdom:6B
-/kingdomz:3M
-/kirch:0D
-/kiririno[m]:4G
-/kiryin:2J
-/kissie:3M
-/kit:2D
-/kitTails:2T
-/kitk:0A
-/kitoy:51
-/kitoy_:1Z
-/kitt:51
-/kittens:0A
-/kiwi_27:6A
-/kiwi_28:2D
-/kiwi_38:51
-/kiwi_56:4G
-/kiwi_57:3M
-/kiwi_6:25
-/kiwi_99:1C
-/kizuka:2D
-/kj8am:3M
-/kj8am_:51
-/kj8am_AFK:2D
-/kj8am_CZ:3M
-/kja:6C
-/kjg:63
-/kjkomu:4N
-/kk_:09
-/kkczk:42
-/kkk:0D
-/kkkk:5E
-/kkplqc:63
-/klaus:09
-/klaus-sleep:2T
-/klaus1:2T
-/klaus_:0C
-/klc-:1Z
-/klob:09
-/kloenk:4C
-/klotski:2D
-/klu:6B
-/klu1:63
-/klu_:6C
-/klyburn:0C
-/klys:2T
-/km:6B
-/km_:5E
-/kmbwabba:51
-/kmypw:09
-/kn1f3:09
-/kn1fe:3H
-/kneegr0w:63
-/kneeldownbeforehim:2J
-/knives:25
-/knqxbw:2D
-/koalab:4C
-/koasa:03
-/kobach:6B
-/koenig:3C
-/kog8:6H
-/koga:09
-/koh:51
-/koi:25
-/koirishima:42
-/koisser:3H
-/kojak:5E
-/kokamo:2T
-/kolobyte:2T
-/komhxwn:4G
-/konata404:51
-/kongfuzi:63
-/konox-csh:6C
-/konox1337:6H
-/konsentr`:3H
-/konsonanz:03
-/kontaxis:3M
-/koolaid:3C
-/kornelio1:0C
-/korneliov:3M
-/koroded:42
-/koroded_:1C
-/korozion:42
-/kosmorage:0C
-/koss:42
-/kossy:4C
-/koz:6H
-/kr:51
-/kr1ss:03
-/krampus:0A
-/krampus_:3M
-/krell:2J
-/kristal:2D
-/kristian_on_linu:03
-/kristian_on_linu_:6B
-/kristjans:0C
-/krjst:3C
-/krkd:3C
-/krml:3A
-/kron:5E
-/kronik:2J
-/kronuz:2J
-/krud__:1U
-/krusty:6C
-/krys:63
-/ktrace:42
-/kubast2:6B
-/kubes:2J
-/kug:4C
-/kujira:3M
-/kukost:3H
-/kulj:09
-/kultur:4N
-/kun1z:2J
-/kundumsta:40
-/kunt:0A
-/kuntry:0A
-/kuntz:1Z
-/kupo:3H
-/kuroi_dotsh:1C
-/kuz:25
-/kuz2:3M
-/kuz3:03
-/kuzx:4C
-/kvm2k:1C
-/kvothe:51
-/kwamaking:4G
-/kwrs:4N
-/kwvqnvad:25
-/kyle:2T
-/kyle-:63
-/kyle2f:42
-/kylef:2T
-/kylef_:0A
-/kylefhitempest:3C
-/kyloren:5E
-/kyonko:3H
-/kyonko_:25
-/kyonko___:40
-/kyonko|2:4G
-/kyoon_:1C
-/kyoon__:6B
-/kyshoc:51
-/kyuzo:1Z
-/kyzer:1Z
-/kzxbcd:09
-/l0bster:4C
-/l0bster_:1C
-/l0de:0C
-/l0de_:1C
-/l0de__:03
-/l0decuck:3H
-/l0dehater:3M
-/l0demas:03
-/l0demas_:6A
-/l0deradio:3M
-/l0dey:3M
-/l0dey_:1C
-/l0deyear:2J
-/l0draydio:09
-/l0ganWh1t:51
-/l0gic:1C
-/l0gic__:6C
-/l0l:5E
-/l0l6:25
-/l0ra:4N
-/l1tup:63
-/l1tup_:6H
-/l200bps:5E
-/l200bps_:09
-/l200bps__:1C
-/l23456:4C
-/l23456`:4G
-/l4g:6H
-/lFu9d52Ne:0A
-/lIPMACaPHY:6B
-/lJCg:1Z
-/lRma:51
-/l^l:09
-/l_bratch:42
-/labanu:0C
-/laboum:2J
-/laboum-:03
-/laburd:5E
-/laceless:6H
-/lacni:5E
-/ladew__:09
-/ladewerk:1C
-/ladyG:4G
-/lady_caro:63
-/ladyg:4N
-/laePe:4C
-/lagzilla:09
-/lain:3A
-/lal:2J
-/lal_:4N
-/lameshit:3A
-/lan:3A
-/lane:1C
-/largetni:3A
-/lari:03
-/lari1:4N
-/larpingwindows:42
-/larsan:2J
-/lasers:3P
-/last:63
-/last_:0C
-/laters:1C
-/latez_:2J
-/lawjbug:4G
-/lawnchair:25
-/lazr:42
-/lazyhazy:6C
-/lb:4N
-/ld100:63
-/ldrancer:2T
-/leachim6:2T
-/lead_pip3:4N
-/lead_pipe:2D
-/lead_pipe23:3C
-/lean:1C
-/lebbe1:1C
-/lebbe2:4C
-/lecci:09
-/lecter:0C
-/legendary:3C
-/legended:4G
-/legended_:09
-/leighton:25
-/leisrech1:1C
-/leisrich:2T
-/lek:4N
-/leku:0A
-/lel:3A
-/lel_:09
-/lelo:25
-/lemmings:4C
-/lemon:6C
-/lemon_meringue:3C
-/lemond:42
-/lemongra1s:51
-/lemongrass:0C
-/lemur:1C
-/len:3C
-/len_rose:4N
-/lenin:51
-/lenin_:3P
-/lenk:1C
-/lennox:3A
-/lennx:0D
-/lenny:2D
-/lenny_:0C
-/leodisk:1Z
-/leodisk_:6B
-/leotare:4N
-/lesderid:6B
-/lesderid_:3M
-/lesmo:09
-/lesmo1:6C
-/lesmo3:6H
-/lesmo7:6B
-/lesmo8:2D
-/less:42
-/lessbCd:0A
-/leveal:4N
-/levon444:2T
-/lfozhyad:6H
-/lhoqvso:1C
-/lhtrsua:2D
-/liber:42
-/liber2:4G
-/lich:0D
-/lickingwindows:4C
-/lictalotofpuss:3C
-/liePah:63
-/lienus:2J
-/lift:25
-/lightup:2T
-/likesboc:03
-/likwid:25
-/lil0ne-:03
-/lil0ne-_:1Z
-/lil0ne-_-:3A
-/lileh__:2T
-/lilfagpoo:3A
-/lillith:2D
-/lillybett:1C
-/lily_:1C
-/limie:2T
-/lin:6H
-/lindalap:4G
-/lindso:6B
-/lindso_:09
-/lindso__:4N
-/linear:0C
-/linear-:6B
-/linear_:2B
-/linear__:6N
-/linkinpar:4G
-/linmob:4G
-/linuxunix:03
-/linuxyo:1Z
-/linuxyo3:63
-/linuxyo3_:4G
-/linuxyo_:2B
-/linx:03
-/lionkilla:1C
-/liothen:4C
-/liquidpc:4G
-/liquidpc_:3C
-/liqwud:2B
-/liron:1Z
-/liron_:1C
-/liron__:1C
-/lisq:0C
-/litenull:5E
-/literati:0A
-/littleEVA:25
-/litup:2D
-/litup_:25
-/liujhuw:2D
-/live4irc:0C
-/liveanna:2T
-/livepan:09
-/livespan:6N
-/ljrLBlx:6C
-/ljypk:3A
-/lklowdq:4G
-/lkpsp:51
-/lkpsp__:63
-/lloyd15:4N
-/llpmfq:25
-/lneely:2B
-/loadlin:1C
-/localhost:63
-/lochnas:1C
-/lodis:51
-/lodis_:2D
-/loganwhit:63
-/logic:3H
-/loja:0A
-/lokenorth:09
-/loki:0C
-/lol:4G
-/lol0gram:42
-/loliba:2J
-/loller:2T
-/loller_:42
-/lolmac:5E
-/lolman:3C
-/lologram:2J
-/lolwhut:2J
-/lolz0r:5E
-/lolzenik:4C
-/longer:40
-/longnickboi:5E
-/loob:0C
-/looney:6B
-/looool:4G
-/loophole_:6H
-/loplz:6C
-/lord-znc:2T
-/lordbobso:4N
-/lordfoxes:2T
-/lordfoxle:25
-/lordkarf:4G
-/lordsea:42
-/loser:09
-/loserwastaken:3C
-/lossevaril:25
-/lost`:3H
-/lostd:09
-/lostd_:6B
-/losto__:4G
-/losuler:09
-/loul:0A
-/lovbe:09
-/love:4G
-/love-:42
-/lovesage:51
-/lowkey:5E
-/loyal:6B
-/loyalis:51
-/loyalist:3P
-/loyalty:6B
-/loyqlist:0C
-/lpgtwysr:1Z
-/lphnus:3H
-/lrvx:3C
-/lt:1Z
-/ltCd-:51
-/ltooru:63
-/ltup:1Z
-/ltup_:0C
-/lu1ldangs:1C
-/luajvt:1C
-/lucy_:6H
-/luis:1Z
-/lukaso666:2D
-/luldangs:4G
-/lulu:03
-/lulzee:03
-/lulzy:1Z
-/lulzyyyyy:4C
-/lumi:2J
-/lumpy:63
-/luna_is_here:6B
-/luna_is_here_:2J
-/lunario:1C
-/lurk:4C
-/lus:2B
-/luth:3M
-/luvbunny_:0A
-/luxneet:6C
-/lvmbdv:42
-/lvwW:3C
-/lvzffm:5E
-/lwop:63
-/lxmrft:3C
-/lynxis:3M
-/lyrical:09
-/m0ds_halp:0D
-/m0ngk:1U
-/m0ngk_:6H
-/m0nk:3P
-/m0nt3:63
-/m0p4r:09
-/m0rgan:1Z
-/m0rgan_:4C
-/m0rgan__:6B
-/m0rt1m0r:2J
-/m1k[3y]:6H
-/m1sdirection:2J
-/m1sdirection_:6H
-/m242:2J
-/m33:0A
-/m34r:1C
-/m34r_:3H
-/m3sk:5E
-/m4d3lf:1C
-/mAyui46:4C
-/mEDIH8R:3A
-/mIRC:51
-/mOrO^:42
-/mRl:0C
-/mRmiSta:03
-/mWkO:63
-/ma0u:0C
-/mac:1Z
-/machiavel:42
-/machicol:09
-/machicola:3M
-/macho:3A
-/macho_man:4G
-/machoduck:6B
-/mackstann:4N
-/macpie:0A
-/madH4tter:1Z
-/madHatter:3C
-/madd:1C
-/maddo:1Z
-/madhatt_:6H
-/madmouse:4N
-/madmouse_:42
-/madog:51
-/madonna:6H
-/madsage-:2B
-/madsage-_:6A
-/maga1488:5E
-/magevet:5E
-/maggie:3A
-/magic:3M
-/magicfx:3C
-/magictest:6B
-/magpie_:3C
-/magus:0A
-/mahoogan:2T
-/majic_:1Z
-/mak:6C
-/mak13:1Z
-/maki_:51
-/maki__:5E
-/makudonarudo:3M
-/malar:5E
-/malice:1C
-/maligno:3H
-/mamabird:09
-/mamadou:3H
-/man:03
-/manat:3C
-/manat-:03
-/manat_:4C
-/mandiblegrip:42
-/mandico:63
-/manedwolf:4N
-/manhattan:4C
-/maniac:42
-/manjaro-user-:3C
-/manjaroi3_:0A
-/manjaroxfcelol:1C
-/manjaroxfcelol_:3H
-/manoloeld:09
-/mantas322:09
-/mantra:3H
-/manweuhk:25
-/mao:5E
-/maph3r1us:2D
-/maph3r1us-csh:5E
-/maph3r1us1337:6C
-/maph3r1us_csh:1C
-/mapherius:3H
-/mapherius_:5E
-/mapperr:6H
-/mar77i:0A
-/marco_:63
-/marcthe12:2J
-/mardril:6B
-/mardril_:3P
-/marfles:4N
-/marg:6C
-/marguesto:4G
-/marienz:51
-/marihone:0D
-/marilou:4G
-/marissa:4C
-/mark_:0C
-/mark__:6B
-/markm:4G
-/marley:2D
-/maroon:2D
-/martin:09
-/martiu:4N
-/martti:0C
-/marvin:51
-/marvvin:2T
-/marxthebat:2D
-/marxthebat_:0A
-/marxthebat__:0C
-/mas4u20000:2T
-/mason:4G
-/masonburt:6C
-/masoncb:4G
-/masterdonx2:6H
-/mastry0da:6H
-/matcha:4G
-/materiyolo:1Z
-/mathepauker:4G
-/mathsman:25
-/matiasP:6H
-/matiasP_:3C
-/matiasP__:51
-/matlio:4N
-/matr1x:09
-/matrix:1C
-/matrixrel:6H
-/matryoshka:03
-/mattf:3C
-/mattf1:2J
-/matthew_:1Z
-/matthewcu:3A
-/matthewga:6C
-/matthewth:6B
-/mattisgay:3A
-/matty:51
-/matuka:2D
-/matus_120:63
-/mauRai:0C
-/max10char:0C
-/max_:2D
-/max_stir-:0C
-/max_stirner:09
-/maxh:0A
-/maxster:63
-/maxwell:1Z
-/maxxe:42
-/maxxe_:6B
-/maya:03
-/mayui:6H
-/maze:2J
-/mazet:3A
-/mbezyyat:4N
-/mbp:51
-/mcburton:2J
-/mcburton_:3M
-/mcornick:6B
-/mcornick_:3C
-/mcp:0C
-/mdashx:6C
-/mdgsqbu:2T
-/mdn:6B
-/me-u:2D
-/me`:1Z
-/meadre:0A
-/meaningfulNick:09
-/meat:3M
-/meatthug:4C
-/mech:3H
-/mech_:0C
-/mecosito:4N
-/media:4N
-/meemo:0C
-/meenk_:2D
-/meetnana:1Z
-/meganrat:42
-/meh:09
-/meh`:2D
-/mehcositi:0D
-/mehh:3C
-/mekyb:6H
-/mel:09
-/mel_:2D
-/melans:51
-/mella:5E
-/mella-:03
-/mella|:6C
-/mels:0A
-/mels_:25
-/meltdown:5E
-/meltheadorable:51
-/mem0ut:2J
-/membranou:40
-/memingwindows:25
-/menfie:25
-/mengel3:6H
-/mengu:63
-/meowmeow:03
-/meowy_:3C
-/merav:0C
-/merav-:5E
-/meridion:2T
-/merlin_1991:3C
-/mermi:3A
-/merpkz:3C
-/mert:6H
-/merzbow:42
-/messiah:2D
-/metalchic:3A
-/metalrock:2J
-/metaphaze:1C
-/metaphz:2T
-/metaqwe:6A
-/metestbug:42
-/mexicunt:3M
-/mez:2J
-/mfebxg:3C
-/mffrice:6B
-/mg55:2J
-/mgsyfmw:63
-/mhitmikey:42
-/mhj:3M
-/mhuqjq:6H
-/mib_14puyt:51
-/mib_77vq3i:6B
-/mib_8ygx9x:09
-/mib_geowgq:42
-/mib_jktqft:3C
-/mib_m0go3k:2D
-/mib_nor4ml:03
-/mib_s6lvls:0D
-/mib_tujkas:6C
-/mib_zj6ij1:6B
-/mibggt:25
-/micha:6C
-/michael_:6B
-/michaelfm1211:5E
-/michaelrules:6C
-/michaelrules2:5E
-/michaelrules_:03
-/michele:09
-/michele_:6C
-/michi:51
-/michi_:0C
-/michill:6A
-/miconda:25
-/micrex22:0A
-/microwire:42
-/midgardlol:42
-/midphase:09
-/mieJah:6H
-/migbatix:1C
-/miggy-chan:3C
-/mighty17[m]:1C
-/migranha:6H
-/mihoX:25
-/mike_:5E
-/mikealgor:3M
-/mikejonez:4N
-/mikemike:3H
-/mikepence:1C
-/mikeshea:4N
-/milenia:0C
-/militant-:3C
-/milkii:3M
-/milkness:0C
-/milkness_:0C
-/milktoast:2D
-/millet:3H
-/milquetoasti:3A
-/mime:1U
-/mimilaUra:4N
-/mindcrime:5E
-/mindlesstux:25
-/minicom:1C
-/minicom7:3A
-/minix92:3P
-/mink:5E
-/minorov:42
-/mintice:3M
-/minty:6H
-/minus:3C
-/minusMplz:3C
-/mion__:42
-/mircus:1Z
-/mirhorse:3H
-/mirhorse_:1C
-/mirik:40
-/mirika:51
-/misfit:51
-/misfit_:3C
-/misslavey:2T
-/missx:63
-/misterjester:1C
-/mithras_:1Z
-/mits`:25
-/mixter:5E
-/miyamoto:6N
-/miyu:6C
-/mjankovi`:2T
-/mjankovic:1C
-/mjo:2D
-/mk-nn:5E
-/mkfpq:63
-/mkk:2J
-/mkke:03
-/mkkee:3H
-/mkky:2T
-/mkultra:3H
-/mlaine:1Z
-/mlavr:51
-/mlm:5C
-/mm:6B
-/mm29942:4C
-/mmalecki:4C
-/mmango:3C
-/mmm:51
-/mmmh:6B
-/mnemonix:4C
-/mnmn:03
-/mnu:0C
-/mnwafletx978:1C
-/mnx:25
-/mnx_:09
-/mny:51
-/moane:03
-/mob_w:0A
-/mobirails:1Z
-/mod:42
-/modsToValhalla:5E
-/moej:51
-/mofo-x:3A
-/mofo-z:1C
-/mohnish:0D
-/mohnish_:25
-/mom:51
-/mona:1U
-/monad:3A
-/money40:1C
-/moneytree:6H
-/mongrel:2D
-/moni12:3H
-/monich:5E
-/monique:63
-/monkey:09
-/monkeybal:0A
-/mono:0D
-/mono2:03
-/monokrom1:3H
-/monokrome:6H
-/monoxane:3A
-/monoxane6:42
-/monoxyde:0C
-/monte:6B
-/monte-:0D
-/monx:2J
-/moon_:09
-/moondanc1:1Z
-/moondance:3H
-/moony:09
-/moony1:4N
-/moony_:1C
-/moot:03
-/mopi:4N
-/mork:6B
-/morse_naughty:63
-/mort:5E
-/morthrane:3A
-/mortisha:1C
-/mosh:6A
-/mostcows:3C
-/mosterdt:3C
-/moth3r:6N
-/motte:5E
-/motte_:6C
-/moucly:6C
-/mousepad:4G
-/mouser:5E
-/moutai__:3C
-/mover:4G
-/moxie:4N
-/moxie`:5E
-/mozillasandvich:63
-/mpt:6C
-/mpwvyjdk:1C
-/mpx:09
-/mr_hhvn:7H
-/mr_moobs:4N
-/mr_pants:0D
-/mrafiee:6C
-/mrbentarikau:4C
-/mrbitterness:6A
-/mrdubz:0C
-/mre:42
-/mredgarfr:03
-/mrfreeze:3C
-/mrhanky:2J
-/mrinfinity:25
-/mrjones:6B
-/mrkajetanp[m]:09
-/mrm:1C
-/mrmehtada:6A
-/mrnicke:1Z
-/mrpfilser:42
-/mrraj:3A
-/mrs__novak:51
-/mrs_hhvn:3P
-/mrsfatty:0C
-/mrskunk:4G
-/mrtux_:03
-/mruno:4N
-/ms_d:03
-/mshadle:5E
-/mtqonv:6H
-/muba:6H
-/muba2:42
-/mugen:0C
-/mugen_afk:4N
-/mulberi:2J
-/mulpjo:51
-/mumtaz_mahal95:3C
-/mumtaz_mahal_:25
-/muneytree:3A
-/munki_:4C
-/muppeth:0C
-/murmur_:4G
-/musashi:5C
-/muse:4C
-/mushu:3H
-/musicmake:3C
-/muskrat:0C
-/muslim:42
-/muslim_:0C
-/mutarts:4N
-/mutiny:09
-/mvDs:3H
-/mwb:3M
-/mwczwl:4N
-/mwdkfx:6H
-/mxl:0D
-/mxthang:6C
-/my5:4G
-/myax:63
-/mychal:0A
-/mydeardiary:4C
-/mykah:2J
-/myla:4G
-/myr:4C
-/mys:4C
-/mys149:42
-/mys_:4C
-/myscor:2T
-/mysltex:1C
-/mystery:0D
-/mysticum:3M
-/mystos:03
-/mzal:2T
-/mzal_:25
-/mzgvpgpg:6B
-/mzm:63
-/mzmzm:2T
-/mzydjc:51
-/n00b:6C
-/n00b100:4C
-/n00b549:4N
-/n00b620:4C
-/n00b684:5E
-/n00b849:2T
-/n00b984:09
-/n00b__:3M
-/n00ber:3A
-/n00ber_:63
-/n07m3:2T
-/n07m3-:2J
-/n0_m0re:0A
-/n0a110w:0C
-/n0haxt:4N
-/n0ne:2J
-/n0ne`:6B
-/n0nsense:2D
-/n0rv:0C
-/n0t0w:63
-/n0txx:2D
-/n30nhybr1:1C
-/n3mt4b:0A
-/n473r5:0A
-/n6tadam:0C
-/nCore:6B
-/nEverpk:4G
-/nHlu:0A
-/nIYO:4G
-/nJRv:2T
-/nOgAnOo:3A
-/nUN3F47:4C
-/na2met:2J
-/naari:3H
-/nabla:3A
-/naeXi:6B
-/nagdr:2D
-/nagisa:3H
-/nagual:25
-/nagual_:4G
-/nahkhpjs:09
-/nahtjona:3M
-/naitootat:42
-/naka:4G
-/nala:0C
-/name1:0A
-/namibj:2J
-/nan:63
-/nan0:6C
-/nance:1C
-/nancee:3C
-/nanceeeee:3H
-/nancy:4N
-/nang:63
-/nani:2D
-/nanii:3M
-/nannerjammer:63
-/nano:03
-/nano-:2T
-/nano_:4N
-/nano_8086:51
-/nanoniem:51
-/nanoniem\:6A
-/narada:2J
-/narkos:09
-/nasteacat:3H
-/nat:25
-/nate1:6C
-/natsuya:2J
-/nature:6A
-/nax:1C
-/nax_:4C
-/nbozyoh:63
-/nc_:1Z
-/ncqgjq:6H
-/ndsddaeb:2T
-/ndyeaj:25
-/ne:51
-/neaeto:63
-/neato:51
-/nebtakesthingsto:42
-/nebula027:25
-/nebula495:1Z
-/neeasade:2J
-/need:25
-/neelam69:3C
-/negroe:6C
-/negrokiller:4N
-/negrox:3A
-/neilalexander:0D
-/neko_:4G
-/nekobot:5E
-/nekochen:03
-/nekomune:4C
-/nem:3M
-/nemdiggers:2T
-/nemesisx:3M
-/nemo:09
-/neonCoinZ:6C
-/neonSimp:4C
-/neonfreon:3H
-/neongold:42
-/neonjesus:6B
-/neonsata1:0A
-/neonsatan:03
-/nerdk0re_:03
-/nero:3M
-/nervous:0C
-/neshpion:2J
-/nesipice:63
-/nesipice_:2T
-/nesoi:6C
-/nesoi1:51
-/nesoin:42
-/nesta:2J
-/nestacat:3H
-/netblaz3:09
-/netblaze:6B
-/netblaze-:0A
-/netlan:2D
-/netsec:4G
-/netyaroze:6B
-/netz:6C
-/netz_:3M
-/neuro:1C
-/new:0D
-/newbie:1C
-/newnigger:51
-/newt:6H
-/newt456:03
-/nexis_:2J
-/nf:5E
-/nga:63
-/nga0x539:09
-/nhahzwz:3C
-/nharris:3H
-/nhmmjtjc:6B
-/ni291187:6H
-/ni638629:4G
-/ni886105:25
-/nib9888:0C
-/nib9888_:6B
-/nicenice:03
-/niceplace:3C
-/nicesage:25
-/nicesage_:2D
-/nicetry:42
-/nicetry-:4C
-/nick1234:1C
-/nick2:2J
-/nickel:09
-/nickel_:3A
-/nickl008:6C
-/nickname:03
-/nickname0:3M
-/nickotheus:03
-/nickserv:1Z
-/nickyxxxl:6C
-/nico1:51
-/nicolagi:03
-/nicolas:2J
-/nicotime:6C
-/nicteamn:6C
-/nig_:2D
-/niget:1C
-/nigg3r:03
-/nigga:4C
-/nigger:6B
-/niggerman:3C
-/niggerple:09
-/niggers:3A
-/niggs:0A
-/nightmares:3M
-/nignog:4G
-/nigsaw:4C
-/nik:63
-/niles:3A
-/nilnull:25
-/nin:4C
-/nine:3A
-/nine11:1C
-/ninewise:51
-/ninex:2T
-/ninex-:1Z
-/ninex-_:4N
-/ninex_:4C
-/ninjabuffet:51
-/niqqqer:25
-/nirojan:4C
-/nirvan4:5E
-/nirvana:4N
-/nisse:3H
-/nitoplayer:42
-/nitrogen:6B
-/nitroxis:09
-/nix:3C
-/nixfloyd:3C
-/niyish:2D
-/nj:42
-/njaM:3C
-/njha:3A
-/njsg:51
-/njsg_:2J
-/nk9k:3C
-/nka:6B
-/nkbkie:4N
-/nkuld4:42
-/nm0i:6C
-/nmQW:09
-/nmeum:4G
-/nmmm:09
-/nmnm:4C
-/nmvpf:2D
-/nn:2J
-/nnbt:4C
-/nnnn:6C
-/nnns:0C
-/nnrre:4G
-/no:5E
-/nobo:4C
-/nobo_:4N
-/nobo__:0A
-/nobody:4N
-/nocarrie1:3C
-/nocarrier:6H
-/nocbz:6H
-/nocountryforoldboy:0C
-/nocturnal:2J
-/nocturne:3A
-/node:2T
-/nodebit:1Z
-/nodebit0:0C
-/nodewire:0D
-/nodfhfgf:6C
-/noface:0C
-/nofc:3C
-/nohaq:2D
-/nohesnot:1Z
-/nohit:2J
-/noice:5E
-/nola_f_15:3M
-/nolan:25
-/nolentils:1Z
-/nolte:4N
-/nom_:0D
-/nom__:6H
-/nomad:2T
-/nomam:6H
-/nomans:1Z
-/nomic:1C
-/nomic2:6B
-/noname:4G
-/noname_:3A
-/noname__:63
-/nonickame:1C
-/nonicknam:4C
-/nonickname:3H
-/nonlinear:0C
-/nonlinear1:3A
-/nonlinear2:63
-/noob_noob:2D
-/noodlesx:2J
-/nookname:2D
-/nop:4N
-/nope:03
-/nor:2J
-/norex:42
-/normale:03
-/norvegia:42
-/norwaygrl:4N
-/nosilica:1C
-/nosilica_:03
-/nospam:63
-/nospinzy:42
-/nospinzyz:3H
-/nostradms:40
-/not-rich:2J
-/notB:09
-/notI:25
-/notK:3M
-/notOutOfGum:6H
-/not_b:42
-/not_seird:2J
-/notagain:3M
-/notatall:4N
-/notb:3H
-/notblaag:3M
-/notbrewster:09
-/notdumb:6B
-/notgamedude:6C
-/nothuman:2T
-/notimp:3H
-/notkoro:3M
-/notkoro_:03
-/notlenny:51
-/notnaka:2J
-/notnoobr:0C
-/notpk:25
-/notptr:1C
-/notvash:1Z
-/novidroog:2D
-/novpnsigu:09
-/npchuv:2D
-/nqafqtaq:1C
-/nrgeqp:25
-/nsee:6B
-/nt0__:3C
-/ntr:03
-/ntvvyc:0A
-/nubbles:4N
-/nubbs:03
-/nubiee:2T
-/nucor:42
-/nudist^AF:03
-/nufsed:25
-/nugget:3M
-/nugrape:1C
-/nujabes:0A
-/nujabes-:6B
-/null:3H
-/null_:2T
-/null__:3M
-/null_ex:2J
-/nulligan:09
-/nullptr:1C
-/nullptr_:1C
-/nully:1C
-/nully2:3A
-/number3:63
-/numbnuts:1C
-/nutz0:6C
-/nvnuq:1Z
-/nvrhome:6B
-/nxTMeksmG:4C
-/nxnja:3H
-/nxocd:6C
-/ny:2J
-/nyan:03
-/nyctea:4G
-/nyctroll:6A
-/nydel:09
-/nyku:3A
-/nym:3A
-/nymph:25
-/nyt:3C
-/nyt_:51
-/nyyGOfLvb:2B
-/o0:03
-/o9aa:63
-/oChoo:3A
-/oGOMLsCMG:25
-/oMo:2D
-/oTeeHi:2D
-/o_0:0C
-/o_C:3M
-/o__o:25
-/oarion7:2T
-/obake:4N
-/obiZu:09
-/obon:2J
-/obungie:4N
-/obviyus:3H
-/ocin:09
-/oclet:6C
-/oct0:2T
-/oct0pus:25
-/octest:51
-/octo:0C
-/octopus:3A
-/octopus-:6C
-/octopus8:25
-/octopus`:6C
-/od6n:3C
-/odd13:4G
-/odd13_:0D
-/oddity:3C
-/oddluck:0D
-/oddluck7:0D
-/odie:2T
-/odp:0A
-/oeXar:1C
-/oelna5:25
-/oem:4G
-/oepsie:4C
-/oerjan:6H
-/oevl:03
-/ofafynqw:09
-/offended:42
-/offendo:0C
-/offic:4C
-/offic_:6B
-/offic__:6B
-/ofiqjm:6C
-/ogdeuwo:5E
-/oh:0C
-/ohJai:6C
-/ohNgi:2J
-/ohThoo:5E
-/ohceiX:2T
-/ohfmsmbh:4G
-/ohgeetee:1C
-/ohgeetee`:1Z
-/ohn0s0hard:03
-/ohshi:3M
-/ohyeahhh:3C
-/ohyed:4G
-/oicxvkzo:4G
-/ojsdtxt:3A
-/ok_____:0C
-/okaber:51
-/okami:4N
-/okay:6B
-/okboss:3A
-/okc0mputer:3M
-/oketoch:63
-/okgovz:2D
-/oksvk8989:6B
-/olderkind:25
-/oldgeek:1Z
-/olie-bol:63
-/oliebol:51
-/ollieparanoid[m]:51
-/ols:3A
-/olsas:09
-/olus:03
-/olusx:0C
-/omhwg:4N
-/omlet:5E
-/omlet_:4C
-/oms:2D
-/omse:0C
-/onOw:51
-/one:6C
-/one_almond:1U
-/oned4:51
-/oneeightf:3A
-/oneeightfourstco:51
-/oniijin:0A
-/onmfd:2T
-/onodera:6B
-/ooGeeH:1C
-/ooNge:4C
-/ooNgoh:2J
-/ooQuah:3M
-/ooXav:3C
-/oogaa:0A
-/oohMemory:6C
-/ooo:6H
-/oopgcwv:51
-/oops_i_did_it_again:1C
-/oosh:0A
-/opal:51
-/opal-:63
-/opal_:6B
-/openface:5E
-/openface_:0A
-/openfly:03
-/operbot:1Z
-/ophie:03
-/opkes:51
-/opkes_:63
-/oppgqd:6H
-/oppnhj:03
-/opposition:09
-/opticnerve:3H
-/orahPi:4C
-/orangefox:3A
-/orangutan:3C
-/orb:6C
-/orbital:3C
-/orblivion:09
-/ordinon:63
-/ordy:2T
-/ordy1:25
-/ordy18:25
-/oregano:3M
-/oreo:6B
-/orgamses:2J
-/ori:3H
-/orko57:09
-/orlly:2D
-/orlly11:1Z
-/orlly2:63
-/orlly3:4C
-/oroboroso:5E
-/orthros:5E
-/orthros77:0C
-/osaoL:3M
-/oscar:42
-/oshaH:3A
-/osiris:1Z
-/osprey:4C
-/ossii:4N
-/ot5436:2J
-/ot54361:42
-/otfms:03
-/otorp:3A
-/outsider_f:3C
-/outt13:4N
-/outtie:3M
-/outwardjourney:2J
-/ovan:3H
-/over_loa-:09
-/over_load:4C
-/overdose:09
-/ovsbgsem:3A
-/ow:6B
-/owenambro:63
-/owlpatrol:3A
-/owo:1Z
-/owo_:6C
-/owo_owner_trollolol:25
-/ox8d:25
-/oxblood_r:5E
-/oxidation:2J
-/oxide:4G
-/oxihe:1C
-/ozamiz:09
-/oziiiz:2D
-/p-ng:5E
-/p0rpoise:4C
-/p0rps:1C
-/p0tat0es:3A
-/p0tus:42
-/p1gl33t:3P
-/p2pefnet:09
-/p4r4n0id0ne:3H
-/p4xz:0A
-/p80info:51
-/p80info`:3M
-/pFUd:0C
-/pHeS:1Z
-/pJPQ:0A
-/pRDB:1Z
-/p`:6H
-/p``f:5E
-/p`f:0A
-/paajeit:09
-/pagbndfv:6B
-/pahreese:03
-/paige:1C
-/paige1:2J
-/pajeet:63
-/pajeet-:2J
-/palisade:2D
-/palooka:3C
-/palyboy:3M
-/pam_unix:0C
-/panda1:6H
-/pando:0D
-/panicstr:2T
-/panicstr_:4N
-/panini:1U
-/panini_:3M
-/panini`:3A
-/panitaliemom:1Z
-/pankkake:2T
-/panorain:3H
-/panthar:4G
-/panthar-:25
-/panzeroceania:3A
-/papa:51
-/papawoofs:51
-/paper:6B
-/parallels:5E
-/paranoid:6B
-/parazyd:3H
-/parloir:3H
-/parnini:51
-/parodie:0A
-/partall:2J
-/pask:42
-/pask2:6C
-/passerby:3A
-/password123:5E
-/pastorkoa:0C
-/pat:0C
-/patkgnp:2D
-/patpat4567:3H
-/patpat4568:3A
-/patpat4569:6C
-/patryk:25
-/paul43:6B
-/paulk-collins:1C
-/pauum:3H
-/paven:2J
-/paven`:2T
-/paxed:3C
-/pay4irc:42
-/payforirc:51
-/payge:6B
-/paysage:2J
-/pb:1C
-/pbb:4G
-/pbb_:6B
-/pbot:4G
-/pbrxoifu:5E
-/pbui:0C
-/pbx5000:3H
-/pbxou:2D
-/pc:3P
-/pc_:4G
-/pcap:3A
-/pcgjm:4C
-/pcmike:1Z
-/pea:51
-/peacecheese:0A
-/peaches:25
-/peazz:42
-/peckr:09
-/pedo`:25
-/pedofile:6C
-/pedophile:3C
-/pedro[46]:4C
-/peepee:1Z
-/peetah:6C
-/pekka:3A
-/pemi:51
-/pencewins:51
-/pene:4G
-/penedicavallo:1Z
-/penis:1C
-/penisbot:1Z
-/penistits:6B
-/penkster:2D
-/penny:3M
-/penski:1C
-/penski_:0A
-/penta:1Z
-/penus:4G
-/peppeag:3M
-/perc:09
-/pere:3M
-/pere_:1Z
-/perlfan:4G
-/perohig:3C
-/peron:6B
-/peron_:1C
-/perp1exa:25
-/perplexa:2J
-/perrierjo:0D
-/pesky:3C
-/pesky_:4G
-/pespin:1C
-/pespin_:4N
-/peterhil:42
-/peterpomade:3C
-/peters:2D
-/pezmonkey:0C
-/pf:1C
-/pgreptom:0C
-/pgrptm:6B
-/ph0cis:3C
-/ph0cus:25
-/phaggit:4C
-/phanaeus:09
-/phantomb:63
-/phargle:6B
-/phargul:0C
-/phc:1Z
-/pheni:0A
-/phieP:6C
-/phil:2T
-/phillbush:3M
-/phillipe5221:3H
-/philmacfly:42
-/philzimmermann:3C
-/phish:1Z
-/phlud:4N
-/phobos:2J
-/phobos-:6A
-/phocus:2J
-/phocus`:4G
-/phocus`_:3M
-/phoenixcanary:4N
-/phonekait:4N
-/phonic:0A
-/phooey:4G
-/phooey_:4G
-/photocyte:3M
-/phr33d0m:03
-/phreak:1Z
-/phrgl:3A
-/phrost:4C
-/phylum:3H
-/pi:1C
-/pi_:6B
-/pi__:2D
-/pickfire:1Z
-/pickfire_:1C
-/pico:3M
-/pie:5E
-/pierre:1C
-/piesage:42
-/pig:6C
-/pigeons:42
-/pinchy:3C
-/pine127:09
-/ping:3H
-/pingagn:42
-/pinkky:09
-/pinsessa:0C
-/pinsessa14:2D
-/piotrcap:0C
-/pip:6N
-/piratefox:25
-/piskapo-:25
-/pissbottl:0A
-/pisslord:5E
-/pitbull:2J
-/pitbull_:4C
-/pitz:6H
-/pitz-:03
-/pixel_:25
-/pixelated:0C
-/piyop:4G
-/pizptein:4G
-/pizzapal:4G
-/pjgtre:6B
-/pk:3A
-/pk_is_fat:3H
-/pkap:4G
-/plab:03
-/plab_:42
-/plab__:25
-/plarceny:2T
-/plastic:42
-/plasticca:5E
-/plasticcat23434:3H
-/plasticcat4030432:63
-/plasticcat420:4G
-/player6969:4G
-/pleemrkrl:03
-/plexa:1C
-/ploks:03
-/plow:25
-/plskm:63
-/plsno:51
-/plsunban:3A
-/plusMe:0C
-/plus_m:2D
-/plus_v-_p:1C
-/plusme:3H
-/plusvee:4G
-/plusvplz:25
-/plzunban:4N
-/pm-:5E
-/pmi:0C
-/pmis:3A
-/pmis2:42
-/pmise:25
-/pnazzm:1C
-/pnotic:6H
-/poccri:09
-/poche:3M
-/pocketpr0:1C
-/pocketpro:25
-/pocky:51
-/podesta:3M
-/podesta_:5E
-/podesta__:63
-/poggri:51
-/pohBu:2J
-/pok:2T
-/poka:0A
-/polanco:6B
-/politburo:51
-/politicallycorrect:2D
-/polka:63
-/pollini:2D
-/pollpoc:42
-/poloanjel:25
-/polyglot:3M
-/polyhrut:51
-/polyhurt:1U
-/polyprop:1Z
-/pomegra:3A
-/pomf:4G
-/pomff:1Z
-/pomfret:4G
-/pomfyyy:63
-/pomggf:6B
-/pong:1C
-/ponziSchemer:6B
-/poontang:1U
-/poop:0C
-/poopbaby:1Z
-/popcorn:4N
-/popey:1C
-/poppy:63
-/poptart:09
-/poqznx:6C
-/porksandwich:5E
-/pornini:03
-/porno:0A
-/port:3C
-/portee:3C
-/potgirl:4C
-/potien203:0C
-/potien356:51
-/potsmoka:3A
-/potus:6C
-/poutine:3C
-/powerfulmind:51
-/powiw:2D
-/ppcpunk:4N
-/ppp1:03
-/ppx:3C
-/ppydsny:3M
-/pr0pri3taryn0de:3C
-/prank:2T
-/prawnsalad:2J
-/praxage:2B
-/praxsage:4N
-/prc194:0C
-/prcdn:03
-/precipic1:6B
-/precipic2:5E
-/precipice:0C
-/pregoia:3H
-/prepuk:4N
-/presonic:1Z
-/presonic_:3C
-/pretma:03
-/prez:6C
-/prg:03
-/princeski:5E
-/princesskitana:6B
-/princesskitana-csh:0A
-/princesskitana1337:6H
-/prinsessa:25
-/prinsesse:3A
-/priti:51
-/privbot:4N
-/privy:6C
-/prizzly:6B
-/prizzly_:2T
-/prjrbhru:5E
-/prnflks:5E
-/pro:3C
-/profedward:4G
-/profetik777:4N
-/progrel:3C
-/project:2J
-/projectak:51
-/prometheus:2D
-/proof:3H
-/prophet:0A
-/proto:6C
-/proto-:0A
-/protocol:3M
-/protocol-:6C
-/prym:2D
-/psauqro:2T
-/psg:2J
-/psych094:63
-/psychedel:1C
-/psycho:3M
-/psychobee:3H
-/psymasta:3H
-/psymaste1:3H
-/psynigger:2D
-/psyop:4N
-/psyvenrix:1Z
-/pt300:03
-/ptadv:2T
-/ptol3my:2J
-/publicNME:4N
-/puccimane:5E
-/pudtrt:4G
-/puke:03
-/puke2020:5E
-/pulsar12:3C
-/puly:5E
-/pumpbull:3A
-/pumpkins:1Z
-/punished_mayu:0C
-/puoSa:51
-/pupper:3P
-/puppy:3C
-/puppy-:4G
-/purgemaster:3A
-/purist:4G
-/purp_:40
-/purpel:1C
-/pussy:1Z
-/pwkwht:0A
-/pxgjlozt:42
-/pymassa:09
-/pyn:25
-/pyrate:2J
-/pyrate_:03
-/pyratebeard:09
-/pyre:4C
-/pyrex:42
-/pzUhgzI2s:42
-/q-u-a-n:42
-/q-u-a-n1:51
-/q-u-a-n2:1C
-/q-u-a-n3:1C
-/qD:1Z
-/qapla_org:6B
-/qarhmkrl:51
-/qbit:4G
-/qcbiboy:0D
-/qdflUe:51
-/qgkreg:4C
-/qhfrmkv:3C
-/qi:4G
-/qizbdpct:6C
-/qjajrkel:09
-/qk:4G
-/qksmekl:51
-/qkvmuxb:6H
-/qmiwea:63
-/qmjtlr:0C
-/qnorsten|away:0A
-/qpt:25
-/qpvud:2J
-/qq2222222222222222222222222222:42
-/qqq:51
-/qryfhob:51
-/qrzn:1Z
-/qscju:6B
-/qsgpd:5E
-/qssqxxu:0A
-/qsvgu:09
-/qto:3C
-/qto^:4N
-/qtpie:0D
-/qtpie_:3H
-/quadDamage:4N
-/quan:4N
-/quan_:0D
-/quantax:6B
-/quantax_:0C
-/quantico:0C
-/quarex:2J
-/quarex_:4G
-/qubix_:6C
-/queenofkings:6H
-/queiD:25
-/quertzuiop:4G
-/quiXuj:4N
-/quinq:2J
-/quisling:0C
-/qw:42
-/qwe123454:2D
-/qwebirc12:1Z
-/qwebirc71:63
-/qwerty:3A
-/qwertzuiop:51
-/qwertzuiop_:4G
-/qwop:09
-/qy:03
-/qy_:1C
-/r00t_Gh0sT:03
-/r00tobo:09
-/r00xz:2D
-/r0bby:3H
-/r0bobox:2J
-/r0ndit0:6H
-/r1mu:3H
-/r1oWHt:0C
-/r2d2:6C
-/r3ader:6B
-/r3d:03
-/r3d-:3C
-/r3d_:4N
-/r3d__:0D
-/r3hab:3C
-/r3mk:2D
-/r6ZD:6H
-/rEspiD:6H
-/rMobWYX:1C
-/ra-ra:03
-/ra-ra_:6H
-/ra1n:63
-/ra7s:6H
-/ra8s:6B
-/raT:1Z
-/raab:03
-/rabbipires:03
-/rabbitear:3M
-/raboof:63
-/racehorse:2T
-/racist-:2B
-/radchad:40
-/radie:1C
-/rafael2k:3A
-/rage-:6H
-/ragga64:3C
-/raghavgururajan:3A
-/ragnarok_:6B
-/rails:4N
-/rain`:2T
-/rain`_:0C
-/rainbowjo:40
-/rainy:0A
-/raisin:4C
-/raj:0C
-/raj_:09
-/rak:0C
-/rakemeS:6H
-/rakiru:6C
-/rakshasa:4C
-/ramenz:1Z
-/rami:0A
-/rami_:3M
-/ramiferou:09
-/rampage-:0C
-/ramsay:25
-/ramsay_:4N
-/ramses:4G
-/ramses_:5E
-/rand:3H
-/randnet3:3C
-/rando_99:2J
-/random:0A
-/randomO24:0C
-/random_yanek:3C
-/randomnickname:2J
-/ranix:6B
-/rapemerdr:3H
-/rapemurdr:2T
-/raperape:2D
-/raph_ael:0A
-/raphidae:03
-/raphidae-:0C
-/raphidae`:6B
-/rapunzel:25
-/rasengan:1Z
-/rask0ln1k0v:1C
-/raskolni-:0A
-/raskolni|:2T
-/raspcherry:6H
-/raspcherry_:3A
-/raspcherry__:4C
-/rastabomb:4N
-/rat:42
-/ratbert:09
-/ratfactor:51
-/rattle:1Z
-/ratxue:03
-/ravagrrl:3C
-/raven_:4N
-/rawr:6H
-/raxa:4C
-/razy:4N
-/rbk:0C
-/rbots:51
-/rbrdv:0C
-/rbrezzmh:5E
-/rcdgpxe:63
-/rcdjssqd:25
-/rcf:42
-/rcf1:09
-/rda:40
-/rdr:2J
-/rdr_:3H
-/rds:1C
-/rdtbjvoq:6C
-/reading:5E
-/reagen_:6C
-/realDonaldTrump:3C
-/realcone:2D
-/reallll:42
-/reallylongnick:1C
-/reaxt:3C
-/rebel:6C
-/rebel_:3P
-/rebirf_:3M
-/rebirth:6B
-/rebs:25
-/receptive:2J
-/rechos:6B
-/redLotus:6B
-/redangel:3M
-/redbear:3M
-/reden:2J
-/redlegion:0C
-/redneonglow:3C
-/redragon:6H
-/redsand:25
-/redsquare:6B
-/redubious:03
-/redukt:51
-/redx113:51
-/redxer:2D
-/reebot:03
-/reeee:03
-/reeeeeeeeee:2J
-/refusist:2D
-/regeneron:09
-/regulate:2D
-/rehab:63
-/reiamani:3C
-/reillyeon:6C
-/reinnosuki:25
-/reisub:25
-/rejeeC:2J
-/rejon:63
-/rekir:3C
-/relaxo:51
-/relic:4N
-/remogt:4N
-/removepk:0C
-/ren00b:0A
-/rengaf:3C
-/rennie:3A
-/replicant:0C
-/reppard:4N
-/resemc:03
-/reshma:3H
-/resident-:3H
-/respect_:6C
-/resting:4C
-/restless:0D
-/retards:4C
-/retsetbug:4G
-/retsetgub:3A
-/retwt:0C
-/reuntal:4G
-/revilon:0C
-/revolution:03
-/rewq:6B
-/rfeany:25
-/rfmctm:0C
-/rfx:40
-/rgcpcTqva:2D
-/rgdgnfnfgh:51
-/rgsbkq:1Z
-/rgu:1C
-/rhauch:25
-/rhysm:63
-/ricardus:0C
-/ricardus_mini9:0C
-/richard:0A
-/richiez:25
-/rickhayes:51
-/ricksanch:2D
-/rievies:1Z
-/right:1C
-/riker:0A
-/rill1:4N
-/rimas:3C
-/riznqfd:0A
-/rjc:3M
-/rjhurt:51
-/rjt_znc:6B
-/rjyzlbt:5E
-/rkk:3H
-/rkl__:0C
-/rklorax:4G
-/rkl|:3C
-/rlam1:4C
-/rlszoc:51
-/rm:0C
-/rm-:6C
-/rmb:1Z
-/rmb0:03
-/rmb1:63
-/rmmm:0C
-/rmmm_:2J
-/roaar:4C
-/roach:42
-/roar:6C
-/roar_:25
-/rob0:6H
-/robbiet480:25
-/robbos:5E
-/robboss:25
-/robertm:51
-/robi:3A
-/robits:0D
-/robmusial:03
-/robo_:6H
-/roboirc:6C
-/roboirc-:1C
-/robot:0C
-/robotic:51
-/roboticr:25
-/robotnik:4G
-/robotnik_:2J
-/robrand:3C
-/robrand_:3C
-/robwerks:03
-/rocepj:2T
-/rocia:51
-/rock1:3M
-/rockets:0C
-/rocketsnail:4G
-/rockey:1Z
-/rockho:25
-/rodolphoeck:63
-/rodpod:3P
-/rodpodimu:2D
-/roen:2D
-/roen1:4N
-/rofl:2B
-/roflwaffl:63
-/romare:3M
-/romarefai:0C
-/ron:2J
-/rondeeto:51
-/rondito:6B
-/ronery:2D
-/roniez:4N
-/ronnic:6H
-/ronvoit:51
-/rooky:6C
-/root:09
-/root1:25
-/root2:0C
-/root3:3H
-/roroboin-:0D
-/roroboing:1Z
-/roror:0C
-/rorx:03
-/rosemary:0D
-/rosemary1:6C
-/rosfr:0A
-/rosseaux:2T
-/rossjones:63
-/rottenbi1s:3A
-/rottenbits:4G
-/route:3M
-/roygbiv:2D
-/rozay:3M
-/rpP6QW5Q:09
-/rpifan:51
-/rptr:25
-/rpwwij:42
-/rqifio:2D
-/rrats:4C
-/rrats_:3M
-/rrfx:25
-/rrn:5E
-/rrn_:0C
-/rrn__:4N
-/rrn___:4G
-/rrrts:4G
-/rsaa:6C
-/rsakeys:3P
-/rsal:2T
-/rsdmovw:1Z
-/rshakin:3A
-/rsoemn:4N
-/rtalk101:4C
-/rthrthstr:6C
-/rubii:3A
-/ruciu:4C
-/rude:63
-/ruedeguy:2T
-/ruedeguy1:3H
-/rugan:2D
-/rum-:3C
-/rumblepez:3H
-/rumbler:4G
-/rumblerez:1C
-/runswithcrayons:3A
-/runswithsissors:3H
-/runswithsissors7:03
-/runswithsissors8:25
-/rush:4G
-/russanna2020---SnapChatName:2D
-/russian:4N
-/ruthless:40
-/ruthlesss:2T
-/rvbres:2J
-/rwDK:51
-/rwZL:2D
-/rx:0D
-/rx5100:1C
-/rx999:03
-/ryan:0C
-/ryanbw:42
-/ryanm:42
-/ryans:4N
-/rydyi:09
-/rymeten:3M
-/ryst:1Z
-/ryxxed:25
-/rznegva:5E
-/rznwclpu:2J
-/s010:63
-/s0berag:3A
-/s0berage:51
-/s0k1t:3H
-/s0k1t_:3C
-/s1l3nced:03
-/s1lent:25
-/s31:4G
-/s3xyl1nux__:42
-/s628940:4N
-/s7ntax:0D
-/sBjc:6H
-/sD:4G
-/sF3Y:2D
-/sHIa:0C
-/sHIa2489:09
-/sKitt:25
-/sKyK:6H
-/sLuL:0C
-/sOkefenok:3M
-/sSsSSs:09
-/sSssSs:4G
-/sTranGer:0D
-/sUbMuNdO:42
-/sUbMuNdO_:03
-/sVez:0C
-/sZKuKutk:6C
-/s\ash:42
-/saba:4G
-/sabazios:51
-/sabazios_:3H
-/sabotage:6C
-/sabre:51
-/sacon:1C
-/sact:2T
-/sactown:5C
-/sadasaulna:51
-/sadblue:6C
-/safe:3P
-/sagashi:1Z
-/saika11:3C
-/saintpie:3C
-/sakura:3C
-/sakurazuk:2D
-/sal_:42
-/sal__:6H
-/salerace:25
-/salimfadh:2T
-/sally_v:4N
-/saltbird:25
-/saltyspittoon:3A
-/salvador:63
-/sam:0C
-/samdems:3C
-/sameo:4C
-/sameo_:63
-/sammuel86:4N
-/sammyette:2J
-/samueldr:4G
-/sand:6A
-/sandflow:25
-/sandman:0C
-/santiago39-uy:25
-/santiago39uy:51
-/santiago__:2J
-/sara:2D
-/sarkazm:5E
-/sashimi:51
-/satan:63
-/saty:0C
-/saty_:3C
-/sauce1:6B
-/sav:25
-/say10:5E
-/sayjay:5C
-/sbeve:0D
-/sbffrtevz:2D
-/sbhg:3C
-/sbk:0C
-/sboke:0A
-/scar`face:6A
-/scarecrow:09
-/scared:6C
-/scarface:51
-/scd:0D
-/scd_:0A
-/schmillin:2B
-/scholar:3A
-/schwuk:3H
-/sci3nc3:51
-/scifi:25
-/scifi_:63
-/sckuz:3A
-/scones:6B
-/scrapped:3A
-/screamscreamSCREAM:3M
-/screamscreamSCREAM_:2J
-/screwgohan:3A
-/scrim:0A
-/scrotal_b:1Z
-/scrub_:3M
-/scruffles:1Z
-/sctqha:4C
-/scuttle:3C
-/scuzwoot:2T
-/sdas:4N
-/sdfawdfas:3M
-/sdfs:0D
-/sdk:1Z
-/sdldjsk:3M
-/sdlfsd:3C
-/sdrawkca1:5E
-/sdrawkcab:1Z
-/sdsadewf:6C
-/se200718:1Z
-/se7en:6B
-/sea:3H
-/sea_:63
-/seanh:3M
-/seans:40
-/seasons:6H
-/sebbu:2T
-/sebbu2:2D
-/sebyrock:3M
-/secef:3H
-/secretmyth:51
-/secure:1Z
-/secure-:42
-/sedbot:4C
-/sedjuani:3H
-/seeNg:4C
-/sefnintr:4G
-/sehaydenh:X7E
-/sehnsucht:4N
-/seijvert:2J
-/seisatsu:4G
-/sektie:4G
-/semendemon:25
-/sentinL:09
-/sepples:25
-/seriesofnumbers:25
-/serious:1Z
-/seroquel:25
-/seroquel_:51
-/serrabqr:25
-/serviteur:5E
-/set:2D
-/seth:2T
-/seuzt:0C
-/severbot:3M
-/sex:3M
-/sex_slave:3H
-/sexsex:2J
-/sexslave:51
-/sfd8:3C
-/sfowler:3A
-/sg111:42
-/sgkfvgc:5E
-/sgo:0C
-/sh4:09
-/shadowfox:6H
-/shaed:6C
-/shah^:0A
-/shamoanjac:2J
-/shamus:09
-/shardy:0C
-/sharky2:4G
-/sharp:0A
-/shawn:1Z
-/shawn_:63
-/shaye:1Z
-/shaye3:2T
-/shekk:0C
-/shelpe:0D
-/shelpe_:3H
-/sheraldo2:3P
-/sherlock:25
-/sherop:2D
-/shii:3M
-/shiitake:4N
-/shin_getter:63
-/shine:1C
-/shine_:1C
-/shine__:1C
-/shinedown:4G
-/shit:3C
-/shitlord:1C
-/shlomostein:5E
-/shmoo:2J
-/shockwave:1C
-/showyrslf:2D
-/shr00m:0A
-/shrooms:2J
-/sht:3M
-/shusky:2T
-/shusky_:4C
-/shutuploser:3H
-/shutuploser_:09
-/shzzx:4G
-/sicelo:09
-/sickofag:6H
-/sideffect:3H
-/sife:6C
-/sigkill:2J
-/signop:03
-/sigrun:4N
-/silhuette:03
-/sili:2J
-/simbaLion:1C
-/simboona:4C
-/simp:4C
-/simplewom:2T
-/sin:42
-/singasbr:51
-/siniStar:4N
-/sins:2J
-/sitths:51
-/six8:03
-/sixone:42
-/sixwells:3M
-/sjc:5E
-/sjrvf:63
-/sk8erchic:4C
-/skOlast:6B
-/skalar10-:6H
-/skankhunt:3C
-/skapeg0aa:2T
-/skepo:0A
-/skg:6A
-/skg_xyz:6H
-/skill:1C
-/skindots:5E
-/skinzz87:3C
-/skirl:1C
-/skjoldr:4C
-/sknkhnt42:3A
-/skrike:6C
-/skroni:09
-/skronind:4N
-/skrzyp:4C
-/skud_:3M
-/skvidal:4G
-/skydog:4N
-/skydrome:2J
-/skyghosts:09
-/skymaster:0C
-/skywalk0:0C
-/slackfam:1Z
-/slackfam1:6B
-/slapnuts:0A
-/slaqer:63
-/slavegirl:25
-/slawz:2D
-/slaypage:42
-/slee:5E
-/sleeping:2J
-/sleepy:51
-/sleepy_:4N
-/slegna:0C
-/slewis:42
-/sliceOirc:40
-/slime:5E
-/slimeball:0A
-/slopey:51
-/sloth`:3A
-/slovenia:42
-/slowbot:4N
-/sluagh:3A
-/sly:3M
-/sly_:4C
-/slyshot:4G
-/sm00:2J
-/smPPtoDf:42
-/smartguy:4N
-/smash-:0C
-/smashgra_:2D
-/smashgrab:5E
-/smashjew:63
-/smashjew2:0A
-/smbopax:6B
-/smegmab0y:2J
-/smithnesson:25
-/smlckz:42
-/smoke-z:42
-/smolder:5E
-/smptnx:25
-/sn00p:4C
-/sn00p_:51
-/sn00p___:51
-/sn1ff:0A
-/sn1ff_:3H
-/sn2ff:51
-/snEak:6B
-/snEk:5E
-/sn_:3A
-/sn_ff:25
-/snadge:3M
-/snazo:03
-/sneak:6A
-/sneek:25
-/snek:1C
-/snek_snab:3C
-/snibeti:4N
-/sniff:42
-/sniff-:1C
-/sniff_:25
-/snip:25
-/snitches:3A
-/snitchku:0C
-/snk:03
-/snoozens:5E
-/snorf:5E
-/snow_:1Z
-/snowdy:3H
-/snuf:0C
-/snuffy:3C
-/snufkin:0C
-/snufkinson:0C
-/snugglo:6B
-/snwwro:6B
-/soTWYKFwt:25
-/society:6B
-/sockmister:25
-/socks_:3H
-/sockspls:51
-/socraticDev:0D
-/soda4fries:6B
-/sodium:03
-/softashell:25
-/soho:4G
-/sohoichai2:2T
-/sol:1Z
-/sol37829:09
-/sol748923:6B
-/solanjay:42
-/solene:03
-/solidus:1C
-/solo:6B
-/somatic:63
-/somedude:03
-/someguy:0C
-/someguy__:6B
-/someone:3A
-/sonic-:1C
-/soolo:6B
-/sorengard:2D
-/sorinello:6C
-/sorinello1:4N
-/soso:1Z
-/soul_:4G
-/souph3r:6H
-/souph3r-csh:6H
-/souph3r_:6H
-/soupher-csh:63
-/soupnazi:25
-/soupspin:4G
-/southey:3C
-/southie:03
-/soxfan:3H
-/soybean:42
-/sp:3H
-/sp5ke:6H
-/sp5ke_:3C
-/sp8ke:4G
-/sp8ke_:6C
-/spGke:3H
-/spQke:6H
-/spQke_:42
-/spVke:25
-/spVke_:1C
-/spWke:03
-/sp^ke:25
-/sp_:4N
-/sp_ke:6H
-/sp_ke_:3C
-/space_rou:4G
-/spacecat:5E
-/spacecore:0D
-/spags:1Z
-/spags2:51
-/spake:51
-/spamus:1Z
-/spamus_:2J
-/spamus__:03
-/spamux:3M
-/spark1313:3C
-/sparklee:3M
-/sparrow:0D
-/spartan:6A
-/spathi-wa:0A
-/spawn-:6H
-/spear:4G
-/spear-:6B
-/spear-_:4N
-/spear^:51
-/spear_:2J
-/spear|:3H
-/spectre:3C
-/sped:03
-/speedy:6C
-/speedy_:4C
-/speedy__:3M
-/speko:4C
-/spetzes:6C
-/sphx:6C
-/sphx_:6C
-/sphx__:6C
-/spice_:42
-/spidy:3H
-/spidy_:2D
-/spike:0C
-/spill:6H
-/spindizy:3H
-/spinsane:2J
-/spirit:6H
-/spitroast:09
-/spk:6B
-/splat:3C
-/splatter:09
-/spoek:1U
-/spoke:09
-/spoon:42
-/spoonm:4C
-/spricht:2D
-/sprinkle:2D
-/spuddy:3C
-/spuddy-:25
-/spunkworm:1Z
-/spxke:4C
-/spxke_:4N
-/spy_:4N
-/spynxic:3M
-/spzke:25
-/sq:6H
-/sq_:0A
-/squiggle:1Z
-/squirt:2D
-/squirts:2B
-/srh:3A
-/srm:6C
-/srmf:6C
-/srsrh:6H
-/srvdown:0A
-/ssd:0A
-/sslbea:2T
-/sslr_:3H
-/sss:25
-/sstd:2D
-/ssxlfm:1C
-/st0vepipe:0C
-/stEvo:4N
-/stabbie:4G
-/stacker:2J
-/stackiller:51
-/stansmith:2T
-/starbomba:6C
-/starboy:2T
-/stardome:0D
-/stark:4G
-/starman85:4C
-/starmobba:3C
-/starrcade:0A
-/starseed:0A
-/stateles1:2D
-/stateless:09
-/staticfox:3A
-/staymad:1C
-/stcyber:4N
-/stcyber_:4N
-/stdio:5E
-/stdio_:3H
-/ste90:4C
-/ste[:1C
-/steamgirl:42
-/steampot:0A
-/stedly:3A
-/stedly_:42
-/stedly__:6B
-/steeby:2J
-/steev:0A
-/stegotti:03
-/sterile:2D
-/steve:4C
-/stevenix:2T
-/stevenm:2T
-/stevepipe:1Z
-/steveskyp:4G
-/stevoo:51
-/sth:3M
-/sth-2:42
-/sthors:1Z
-/stian:0C
-/stick:6C
-/stickfigure:03
-/stid3r:42
-/stigger:0D
-/stigma:1C
-/stigma2:2D
-/stilbruch:6N
-/stinker:3M
-/stirlitz:2J
-/stkhomi:1Z
-/stoic:6H
-/stoked:0A
-/stomper:0D
-/stompykins:0C
-/ston3r:2D
-/stone:0A
-/stonecold:4N
-/stonedcold:0A
-/stonedcold_:3M
-/stormd:4N
-/stormium:2J
-/stormsz:03
-/stormsz3:51
-/stormsz4:3C
-/stormsz6:25
-/stormsz9:3C
-/stormsz92:0C
-/stormsz98:6H
-/stovep1p3:2D
-/stovep1pe:5E
-/stovepip3:25
-/stovepipe:6B
-/stovepooo:09
-/stovep|pe:1C
-/stowa:1Z
-/stowaway1:1C
-/stranger:2D
-/straton:2D
-/stratum:03
-/stratum_:4N
-/stratum__:5E
-/stratum`:42
-/stratum`_:6C
-/stratumm:25
-/straw-hat:2D
-/strike:2J
-/strikersh:6C
-/strixy:1C
-/strontium:42
-/stroopwafel:25
-/strtok:5E
-/stu_meat:5E
-/stupidguy:4C
-/stuttgart:6B
-/stygian:1Z
-/styledash:4N
-/styledash3:25
-/styledash7:3M
-/styles:3M
-/stylez:3C
-/styopah:2D
-/sub0hm:0D
-/sub0hm-:42
-/sub0hm|:3M
-/subXhm:4C
-/subcon:3C
-/subway:42
-/suckbot:51
-/suckmuh:63
-/suckmywan:3M
-/sud0:3A
-/sueuse:3C
-/sufizzle:3H
-/sugar:4N
-/sugoi:51
-/sulke:1C
-/sully:4C
-/sultanofping:51
-/sum:51
-/sumbrero:1Z
-/sumbrero_:5C
-/sun-light:3C
-/sun-lightt:51
-/sundie__:0A
-/sundie___:6C
-/sunrise:51
-/sunrise_:3P
-/sunshavi:4C
-/sunshy:1C
-/sunzer0:25
-/suparel:0A
-/suparel\aw:42
-/super-ultra_extreme_far_right:6B
-/super_duper_uber_far_right:4G
-/super_duper_uber_ultra_extreme:63
-/super_duper_uber_ultra_far_rig:03
-/superalpine:5E
-/superalpine_:3M
-/supercilious:4N
-/superflu9:2J
-/superfly:2T
-/superher0:6A
-/superjack:6N
-/superpj:4C
-/suplani:25
-/supradyn:3A
-/surfdiver:3M
-/surplussi:0A
-/surreal:3H
-/surreal_:0C
-/sushibut:4G
-/susse:3H
-/sussumu:09
-/suswrd:3C
-/suwa:42
-/svere:0C
-/swab:6H
-/swaps:4N
-/swaps_:09
-/swaps__:4C
-/swapss:63
-/swarthyPerson:1Z
-/swiffles:2D
-/swift:4G
-/swift110:09
-/swift110_:4G
-/swinder:51
-/swiss1:1C
-/swrangsar:4G
-/swudth:3A
-/sxyvitami:3M
-/sy:3C
-/sy11ab3ar:1C
-/syamimerinin:1C
-/sycopa:6B
-/syf:6C
-/syf_:2T
-/sykoeye:09
-/sylar:5E
-/symtecs:3C
-/syn:3A
-/syn3yrb:25
-/syn\:2D
-/syn^:6B
-/syn`_:6C
-/syn`__:4G
-/synbiose:2T
-/syneevj:5E
-/synm7n3:3H
-/synnlf3:25
-/synowvu:4G
-/synqf4f:3C
-/synszre:2T
-/syntax:2T
-/synth:25
-/synthk:09
-/synxqgf:6C
-/synyof1:2D
-/syrianrue:2D
-/syrius:51
-/syrius_:3M
-/sys:4G
-/sysadmins:6B
-/sysfz:2D
-/sysop:4G
-/system:6H
-/systwi:5E
-/systwi_:0A
-/sz3kl3r:6H
-/szass:6C
-/szass_:09
-/szsdvfi:2D
-/szssitdt:2D
-/szzymzt:1Z
-/t--manyt-c-unt:3C
-/t--manyt-t-unt:2J
-/t0fu:3M
-/t0fu_:63
-/t2:2D
-/t3chn01r:4C
-/t3hyoshi:4C
-/t3xtm0de:6H
-/t420:6C
-/t420_:0A
-/t4l:09
-/t4n:4G
-/t4nk949:2T
-/t9Z4n:3A
-/tGumbie:09
-/tXeX:4N
-/tXmD:1C
-/tXul:3M
-/taaLu:25
-/tabb:6B
-/tachikoma:5C
-/tacocat:1C
-/tacosage:3C
-/tadam:40
-/taehuH:25
-/tafari:4G
-/tag-:63
-/tag_:6H
-/tahCha:4C
-/tailpush:63
-/taimur:2J
-/taimur_:6B
-/tait1491:1Z
-/takoyaki:63
-/tald:4N
-/talia`:51
-/talia``:0A
-/tallship:3M
-/tallship_:5C
-/tallship__:4N
-/tammy:1C
-/tanami:6H
-/tangier:1C
-/tankfox:3C
-/tankfox_:63
-/tao:3H
-/tardbaby:6B
-/tater:0A
-/tater_:0C
-/tau:4N
-/tawny:4N
-/taxman:0D
-/tay:4C
-/tay_:0C
-/taylor85345:25
-/tbwfv:1C
-/tcghhj:4G
-/tcm:3C
-/td:6C
-/td`:4G
-/tdk:6B
-/te:3H
-/teGhi:3C
-/teaman:0C
-/teaman_:4G
-/teaman__:25
-/teamux:42
-/technically:42
-/technically_:1C
-/techniggger2:4C
-/teddy66:2T
-/tedead:6H
-/teechay:6H
-/tef:51
-/tegxxw:3A
-/teiwaX:3A
-/tekk:2T
-/teksimia1:6C
-/teksimian:4C
-/telephone:6B
-/television:51
-/teller:6B
-/tem:4G
-/tem_:6B
-/tempette:3M
-/tenecks:3C
-/tenecks-:4N
-/tepes:63
-/tepssct:25
-/tera_:1C
-/teragram:03
-/teranaut:51
-/teratoma:51
-/teratoma_:3A
-/termer:1Z
-/termer_:1Z
-/termina:3A
-/terps:0C
-/terpy:3C
-/terra:3M
-/terra-x:03
-/terri`schiavos`lover:09
-/terror:2D
-/tertl3:5E
-/test:1C
-/test2:25
-/testabbb:3H
-/testbot:4G
-/testbot1:0C
-/tester:3C
-/tester_:6H
-/testing:1Z
-/testing123:42
-/testing123456:03
-/testing_:0C
-/testman:2J
-/testman9:6C
-/testtest:1C
-/tet3020:4G
-/tetrasage:6C
-/tetsing:4C
-/teu-:1C
-/teu-_:1Z
-/tevzsbffr:3C
-/textmate:4G
-/tfpfzel:51
-/tgzgiy:3H
-/th0rn:6A
-/th1nkp4d:0C
-/th3m4dm4n:4G
-/th3r4p1st:40
-/thanat0s:4N
-/thanatos:6B
-/thanatos_:6C
-/thatsme:4G
-/thatsraci:2D
-/thatty:4N
-/that|Guy:1U
-/the-fool:1Z
-/theGrg:2D
-/the_ark:1C
-/the_d:03
-/the_hwite_race:3A
-/thebaconfromhell:6B
-/thecrp:6H
-/thefoxes:5C
-/thegiant:4N
-/thelounge35:1Z
-/thelounge92:5E
-/them:2D
-/them_:1Z
-/themaSk:3H
-/themadman:3C
-/themask:03
-/thenewdesu:4N
-/therealemma:4G
-/therestrainingorder:25
-/theruleofodds:3C
-/thetasock:25
-/thief:4N
-/thinking:2D
-/thinkp_:6C
-/thinkpad:0C
-/thirstyho:3C
-/thirty:09
-/thomas:1C
-/thonao:6H
-/thonao_:42
-/thooGi:3A
-/thopas:5E
-/thot:1Z
-/thot_:5E
-/threv:6B
-/thrillho:03
-/thruways:0C
-/thufir:0A
-/thwack:4N
-/tiberius:4C
-/tickles:4G
-/tidux:6B
-/tidux|webchat:25
-/tigg3r:6C
-/tigger:25
-/tiggers:0D
-/tim1:09
-/timecrystal:4G
-/timm:0C
-/timmah:3C
-/tin_:4C
-/tire:6C
-/tires:2T
-/tis:40
-/tiwEllien:3C
-/tiwesdaeg:03
-/tiwesdaeg1:0D
-/tiwgy:4N
-/tj:1C
-/tj_:2T
-/tj__:0D
-/tj___:0C
-/tjuda:42
-/tjw:09
-/tkane:6C
-/tkjmlb:4C
-/tkk:63
-/tkk__:4C
-/tlac:03
-/tlyu:0A
-/tm512:3C
-/tmberg:0C
-/tmlind:6B
-/tmux:25
-/tmuxedo:51
-/tndez:3A
-/to0n:25
-/toast__:25
-/tobias:3H
-/tobo:4N
-/tobo2:09
-/toddler:1Z
-/todlyncz:3A
-/tofu:3H
-/tofu_:1C
-/tokyogringo:2J
-/tokyogringo`:5E
-/tomchanks:51
-/tomhanks:6B
-/tomhanks-:6C
-/tomhanx:1Z
-/tomma`:0A
-/tomo:1Z
-/tomo_:5E
-/tony:0C
-/tony-:63
-/tooFarry:2T
-/toocool_:42
-/tooka:3A
-/tool1:2T
-/tool2:25
-/tool4:6C
-/toor_:25
-/tootle:4C
-/tor.hlircnet.:1C
-/torax:1Z
-/torbot:3C
-/torbox:6B
-/torgal:3C
-/torvalds_jovial:42
-/tosiaki1:0C
-/tosiaki2:5E
-/totally_not_OutOfGum:5E
-/tough:1C
-/tourettes:4C
-/tourmaline:42
-/toxait174115422819548835257138:51
-/toxik:0D
-/tprime:6B
-/tprophet:4G
-/tqcdw:3M
-/tqndkruj:0C
-/tr3:1Z
-/trafficcone:03
-/tranny4u:42
-/trans:25
-/trans-git:2J
-/trans-old:3M
-/trans2:0A
-/transact:42
-/transacte:3M
-/transtest:5E
-/trapgawd:3M
-/traph:3C
-/trapstze:3A
-/traxex:25
-/trdaisuke:6C
-/trebbn:4C
-/tredfghyu:03
-/tree^_^:5C
-/treehugga:1Z
-/treeman2:4G
-/treeman5:0C
-/treeman6:51
-/treeman7:3H
-/treeview:3M
-/treeview2:0C
-/treeview3:25
-/tref:6B
-/trench:4C
-/trev:63
-/trev1:4N
-/trey:42
-/trigex:3C
-/trigex_:03
-/trilobyte:0C
-/trip:0C
-/trip_:09
-/tripledonkey:09
-/tripped:3C
-/triques:51
-/triques4:63
-/triques6:51
-/triques9:0C
-/trishi:25
-/trivalleur23:1C
-/trixis:1C
-/trixisowned:4G
-/trn:03
-/trnv2:3M
-/trn|c:09
-/trollUSA:09
-/trollfag:3P
-/tron:3A
-/tronic:4C
-/trper:3A
-/true-asset:3A
-/trummo:4N
-/trump2020:0A
-/truthhurtssome:6C
-/truthr:5E
-/truthrx:3H
-/truthvalue:25
-/trypanoss:25
-/tsal:5E
-/tsarb:2D
-/tsarbobma:51
-/tsarbomb-:3H
-/tsarbomb_:3A
-/tsarbomba:1Z
-/tsarmabob:3A
-/tsiegel:0A
-/tsk_:1C
-/tsong:51
-/tt:09
-/tt1:09
-/ttill:2T
-/tubes__:63
-/tubman_:42
-/tubman__:6C
-/tuinhekje:5E
-/tulpa:25
-/tulpa_:09
-/tumble:1Z
-/tumble_:51
-/tumbleweed:1Z
-/tuna:6H
-/turd:2J
-/turdboy:6H
-/turin:3M
-/turkrapingswedes:1C
-/turtle:3M
-/tuy360:3A
-/tuy360_:42
-/tvall:1Z
-/tw0:3H
-/tweak:1C
-/twinkcrea:4C
-/twinkiecr:51
-/twinkream:2J
-/twitch069:03
-/twixisowned:25
-/twoshay:03
-/twpvhyaw:63
-/txgl3mos:3C
-/tyil:4N
-/tynkle:2T
-/type:6B
-/type0:5E
-/tystratum:63
-/tytratum:3C
-/tyui:09
-/tzanger:2D
-/tzanger_:4N
-/tzngr:4C
-/u:1Z
-/u0_a117:4G
-/u0_a157:3H
-/u0_a165:0A
-/u0_a165_:3A
-/u0_a202:1C
-/u0_a256:6B
-/u0_a313:2D
-/u0_a633:3C
-/u1ktMQhOW:25
-/u2NmP2:42
-/u3046:1C
-/u4ea:3C
-/u4ea_:2D
-/u4t:5E
-/uBaig:6H
-/uMaike:1C
-/uNeebe:3C
-/uReeve:0C
-/uXLGKVgqI:3M
-/uXyZ9V:0C
-/ub`:5E
-/ubergeek:2T
-/uberius:42
-/uchi:4G
-/udjygrpx:3H
-/uejgk:4N
-/uflwrm:1C
-/ufo:2B
-/ugjokndk:51
-/uhTrFrXXd:09
-/uhekki:1C
-/uhg:1C
-/uhhhh:3P
-/ui89o:40
-/uid:63
-/ujcMaMSFZ:6H
-/ukkces:3H
-/ukulelele:6H
-/ulcerpain:25
-/ulijtzvo:3M
-/ultimate-:6C
-/ultimate11:2J
-/ultimate11_:6H
-/ultra_extreme_far_right:5E
-/ultraanon:0A
-/ultraanon2:6H
-/ulua:1C
-/umaruchan:6C
-/unacked:2T
-/unbanMe:4G
-/uncool:1C
-/undefinde7:09
-/underAnt:5C
-/underd0g:1Z
-/underd0g_:2J
-/underdoge:6B
-/underline:2D
-/undream:25
-/undream_:3M
-/undulum:6C
-/unfo-:0C
-/unickusr:3C
-/unicorn:1Z
-/univrsal:1C
-/unixbsd:0C
-/unkn00n:0C
-/unkn0w7n:3C
-/unkster:6A
-/unkw0oN:51
-/unlqrau:09
-/unrAAlvgJ:4N
-/unreal23:2B
-/unrooted:09
-/unrznbl[m]:3H
-/unsane:6C
-/unsmoked:51
-/unstone:6C
-/unwrappin:1C
-/uoam:03
-/uoya:25
-/uoya_:3A
-/upfuck:5E
-/upgrade:3M
-/upyhpeh:4C
-/uqbyuhnj:25
-/uqxhx:4G
-/urhfre:03
-/urlinfo:4C
-/urlinfo`:4N
-/urodna:0C
-/urodna_:3C
-/ursa_vox:6H
-/ursula:25
-/urthmover:2J
-/usKt:63
-/usaezc:63
-/usedbird:6H
-/user:2T
-/user99200:4N
-/user_:3C
-/user__:0D
-/user___:4N
-/usernick:6C
-/usr1987:25
-/usr481320:2T
-/usxWieIrI:2T
-/utanapischti:42
-/uther:3H
-/utrvmfth:4N
-/uuPB:1C
-/uuVee:2J
-/uvos:3H
-/uw0tm8:3A
-/uwvqgpgd:3M
-/uxtfm:2D
-/uzasof:1Z
-/v:03
-/v4th0r:0A
-/vFQF:3M
-/vLK:3M
-/vacuum:4N
-/vae:0C
-/vae1cpf:2D
-/vae1tqp:6C
-/vae1xte:0C
-/vae2zs1:51
-/vae38d0:1Z
-/vae3w06:4C
-/vae483d:4N
-/vae8705:03
-/vae8hwl:2D
-/vae92rx:1Z
-/vae99y9:6H
-/vae_:0C
-/vaeab91:2T
-/vaebo5y:4N
-/vaeccag:63
-/vaecx23:4G
-/vaecyqw:3C
-/vaed0ug:6C
-/vaed8wa:25
-/vaedgub:1C
-/vaedmoi:42
-/vaefj7u:5E
-/vaegob7:51
-/vaei75x:3A
-/vaej89o:0C
-/vaejrk0:0C
-/vaekc8h:6C
-/vaekmov:1Z
-/vaem7fg:1C
-/vaemf63:4N
-/vaemfbx:09
-/vaemztr:6C
-/vaeoh2m:3M
-/vaeolnr:63
-/vaeoped:09
-/vaeos67:09
-/vaeosj7:3H
-/vaeqqkp:63
-/vaeqsii:3M
-/vaesima:63
-/vaeuvrl:3M
-/vaevboc:3C
-/vaevjby:6H
-/vaey480:2D
-/vaeyqbi:3C
-/vagisil:6C
-/valiant:4C
-/valuables:2D
-/vamp1337:6B
-/vamprella:03
-/vandmend:51
-/vanir:3C
-/vanity:3M
-/vanity-:2J
-/vantawyte:0A
-/vap0r_:1C
-/var-g:42
-/var-g_:51
-/variableLabel:0D
-/varju:63
-/vasalquaf:3M
-/vash:3M
-/vash-:63
-/vash_:6B
-/vauvroe:6H
-/vb:3C
-/vbskapg:1Z
-/vc:6H
-/vectis:5E
-/veeVoh:63
-/veiRu:0C
-/vencx:63
-/vencx_:3M
-/venial:3M
-/venodka:3A
-/ventures:2T
-/venus_:6C
-/venx:03
-/ver1z0n:2D
-/ver1z0nn:3P
-/verifier:1C
-/verm1n:25
-/vert:6H
-/vert2:3C
-/veryvery:1C
-/vet:2D
-/vexorg:3M
-/vexuC:42
-/vfC:2B
-/vfrmedia:0D
-/vicentius:0C
-/videl:2D
-/vigilant:42
-/vigilant`:3A
-/vigilante:2D
-/vigilan|:1Z
-/vigole:0C
-/viic:42
-/vikara_das:1C
-/vikodin:4G
-/vikodin_:4G
-/vim:6C
-/vim_user:03
-/vincenzo7:2T
-/vino:6H
-/vintagero:6B
-/viper-:2J
-/viper__:4N
-/vir:25
-/virago:3M
-/virginAnalyst:2D
-/vish:09
-/visitoor:2J
-/vita:6H
-/vitimiti:6B
-/viutk:1Z
-/viwxcr:3C
-/vix:40
-/vixen`_:1C
-/vlad:1C
-/vlad-:3A
-/vmz:40
-/vnc-:09
-/vodka:4N
-/vodka_:4N
-/voet:42
-/vohHo:0A
-/voice4u:4C
-/voice_of_reason:4N
-/voicemepl:1C
-/voicepls:3M
-/voiceplx:25
-/voidP0inter:3A
-/voiddwm_:63
-/voidhlwm:42
-/voidhlwm_:4N
-/volusto:4C
-/vortex:4C
-/vp:2D
-/vpnbase:2T
-/vprowl:3C
-/vprowless:6B
-/vpw:4G
-/vr0n:6B
-/vr0n1:6B
-/vr0n2:6B
-/vr0nmas:6B
-/vr0nmas2:6B
-/vr0nmas3:6B
-/vraphim:5E
-/vraphim_:0D
-/vrelchott:25
-/vrl:2T
-/vroomfondel:0C
-/vrshfp:2J
-/vscefj:4N
-/vtgoneh:3H
-/vueafk:25
-/vujxt:6C
-/vvjkk:3A
-/vvv_:6B
-/vwehpreq:3H
-/vx:25
-/w:42
-/w0bos:3A
-/w0nder:63
-/w0rd:2J
-/w0rd_:3H
-/w0red:2D
-/w0rhed:2T
-/w0rm:0C
-/w10x12:1C
-/w10x121:42
-/w3stside:6B
-/wDZY:6H
-/wGumbie:0C
-/wJVeZoc:6N
-/waax:2T
-/wagonbird:51
-/wakaranai:1C
-/waleed:51
-/walrus:6B
-/wang:51
-/wangs:6B
-/wangx:09
-/wankEboi:25
-/warmbrake:42
-/warsawiol:3M
-/warsoul:09
-/wasd55:6B
-/wasd55_:25
-/wattlings:1Z
-/waveclaw:0D
-/waveclaw_:3A
-/waveframe:2J
-/waw:2J
-/waylon531:3A
-/wayne:51
-/wayne_:6H
-/wb9814:0A
-/wbwj:6B
-/wdna:09
-/wdz:09
-/we_____:4C
-/wear:25
-/weather:42
-/webslayer:2D
-/wednesday:3A
-/wednesday_:3C
-/weds:63
-/weds_:3M
-/weeHiz:0A
-/weeds:0C
-/weekend:2T
-/weekend-away:6C
-/weekoro:3M
-/weems:2D
-/weird:2J
-/wer1:3M
-/wer2:3M
-/wer3:3M
-/wer4:3M
-/wer5:3M
-/werejag:2J
-/werewolf:3C
-/werrejag:2T
-/wervenyt:4N
-/west:6C
-/westerns:03
-/westor:25
-/westor{off}:3M
-/wfUauWQ:0A
-/wfnincor:0D
-/wfnintor:1Z
-/wfnintr:3M
-/wfnintr_:3M
-/wfnintr___:3M
-/whatwut:0C
-/wheat:3C
-/wheresmyv:2D
-/whiplash:09
-/whirlygig:42
-/whispers:4N
-/whitecaps:0C
-/whitetras:0A
-/whitey:5E
-/whjuwb:09
-/whoami:1Z
-/whodini:6B
-/whoef:09
-/whoflungpoop:3A
-/whoops:03
-/whore:4N
-/whtes:3M
-/whuntley:51
-/whyiseveryonecha:6C
-/wiavb:0C
-/wikkid:0C
-/wil:2J
-/wil_:2T
-/wildting:4G
-/wildting2:03
-/wildting4:42
-/wildtingTwo:6B
-/wilkie:0C
-/william:3A
-/wilsonk|2:6C
-/wilt3d:0C
-/wilt3d_:4N
-/win:6H
-/win95:6B
-/win98:6B
-/windsok:2B
-/wink:2D
-/winny:6B
-/wirss:1C
-/wise:1Z
-/wise_:6C
-/wise__:6B
-/wisefool:3C
-/wiseguy:3M
-/wiseone:42
-/wishbone:25
-/wizard:4N
-/wizarddude:0C
-/wizrd:2D
-/wizrd_:3H
-/wjmnmeuq:42
-/wk:1C
-/wkr4k4r:09
-/wkuwxk:4N
-/wleslie:51
-/wleslie_:4G
-/wlsn:2J
-/wlsseksv:4G
-/wmllximz:3H
-/wnqubdx:4C
-/wo0GieWoO:3C
-/wof:4N
-/wof_:4N
-/wof__:4G
-/wojo:3H
-/wombat:3C
-/wombat_:25
-/womble2:03
-/wompum:3C
-/wonder:6H
-/woofwoof:1Z
-/wook:0D
-/wook_____:3C
-/wooky:1C
-/wooky__:3A
-/wordpress:63
-/workdays:6B
-/worst_alternative:03
-/worstwish:0D
-/wowaname:03
-/woyzz:1C
-/wpsoonkh:6H
-/wqphasi:3H
-/wrapper:0C
-/wredny:2D
-/wreo:42
-/wrex:03
-/wrjeod:25
-/wrqhw:1C
-/wsco:2D
-/wsgkx:63
-/wslahr:51
-/wsmith:2D
-/wsnnPVBoA:63
-/wtfanon:2J
-/wtweek:3C
-/wurrier:2D
-/wut:3A
-/wuvjfq:3H
-/wuwei:6H
-/www:3C
-/wyaei:2T
-/wyldmagyc:09
-/wylel:0D
-/wymillerlinux:1Z
-/wyn:3A
-/wynton_boomer:6H
-/wyrm:6B
-/wytau:63
-/x:3C
-/x-amy-x:4C
-/x-fag:3H
-/x-girl:1C
-/x0:0A
-/x11r72:0C
-/x1bncwn:1C
-/x1bncwn_:5C
-/x1bncwn__:6N
-/x3mboy:6H
-/x3pom:3P
-/x507:0C
-/x7z:6C
-/x90:6C
-/xAsh:42
-/xDemonessx:3H
-/xGps:4G
-/xGumbie:25
-/xKqK:4N
-/xLara:6B
-/xLink:0D
-/xSubZer0x:0C
-/xVgZdftRO:3A
-/xYaA:0C
-/x_:6B
-/x_x:1Z
-/xa0s:2J
-/xadammr:2J
-/xade:42
-/xaePhu:5E
-/xanban:0C
-/xanban6:2J
-/xaphod:0C
-/xaphod1:4N
-/xargs1:3A
-/xart:4C
-/xartet:42
-/xartet-:2D
-/xartet--:3H
-/xartet_:4C
-/xartet__:3M
-/xavier:2T
-/xaviercm63:63
-/xb0ner:2D
-/xbbitfm:3A
-/xbeastx:1Z
-/xbfuxp:6C
-/xbhjxk:51
-/xbmhy:0A
-/xboner:4C
-/xbpyyx:0A
-/xc:42
-/xczzcas:3A
-/xc|:0D
-/xdaff:42
-/xdragon:4C
-/xecut:25
-/xeeder:1C
-/xelpapus:5E
-/xeni:42
-/xeno:2J
-/xeno_:4G
-/xero:0C
-/xerrox:0C
-/xerrox_:3A
-/xes_:5E
-/xes__:4N
-/xfskoo:3C
-/xhigb:6H
-/xiXai:3C
-/xikkub:2D
-/xiktc:6B
-/xinnie:1Z
-/xioGh:63
-/xjcyq:4C
-/xkwgre:6C
-/xld:3H
-/xlei:6C
-/xmage:6C
-/xmn:3A
-/xmyicyu:6H
-/xnaas:0D
-/xnaas2:42
-/xnaas7:4N
-/xokfealn:25
-/xolhbj:3H
-/xorhash:4N
-/xoutxin:1Z
-/xqndpk:6B
-/xqxvjr:0C
-/xrmjlwcz:4C
-/xs:3M
-/xspfgoqt:1Z
-/xtc:25
-/xtc-:1Z
-/xtfcpdm:6H
-/xtor:42
-/xtraterra:3H
-/xuu:3C
-/xvcusv:42
-/xxaY:3H
-/xxld:0C
-/xxx32:3H
-/xxxxx:51
-/xyte:09
-/xz:6B
-/y0m5CQtGb:2J
-/y91y91y91:2T
-/yDFw:0C
-/yGYK1Vg:3H
-/yQOX:6H
-/yUpKx:09
-/yWbc:0C
-/yakamo:3H
-/yakuza:3C
-/yall:63
-/yang:3M
-/yanski:4C
-/yanski_:63
-/yanu:6H
-/yasoR:42
-/yaungcor:4G
-/yawkvlhp:0A
-/yayjman:09
-/yayoman:0C
-/yayomanpatty:0C
-/yayomanshatty:4N
-/yaypixxo:1Z
-/ybbuq:3H
-/ybwfneiv:09
-/ydtotm:03
-/ydvvzqyh:4C
-/ydxccjxa:3H
-/yeagel:4G
-/yeahok:63
-/yeeQu:4G
-/yeee:3H
-/yeee`:2J
-/yelmxn:51
-/yenrod:1C
-/yerseas:51
-/yeti:1Z
-/yeti1:3H
-/yeye:51
-/yeynruru:2J
-/yhoxHCaj:51
-/yhsiang:09
-/yito:2J
-/yjgbn:25
-/yjxbxmc:3H
-/ykjsony:2T
-/ylJPQu6Z:25
-/ymtdmkz:51
-/yngwizard:4N
-/ynizyjq:6B
-/yoduh:1C
-/yoonix:0A
-/yoonix-:1C
-/yoonix0:3H
-/yoshi15:1C
-/yoss:2D
-/youdontknowme:42
-/youfuckin:1C
-/yourbothere:1C
-/yourname:42
-/yowhbvq:3C
-/yoyomiho:0A
-/ypfkqig:3M
-/ysyck:4G
-/ytcracker:2D
-/ytf0rd:2T
-/ytilimuh:6B
-/ytlyv97:1Z
-/ytoucs:2D
-/yumas:3A
-/yur3i:5C
-/yxhjsh:5E
-/yxutqvz:63
-/yxxqpb:3H
-/yyy:4G
-/yzUBAy:0C
-/z:03
-/z0z0:6B
-/z3bra:09
-/z3n:2D
-/z3ntu_:0A
-/z3r0:2J
-/z3uS:3A
-/zFgXdqQKQ:3H
-/zabxg:6C
-/zacts:3M
-/zahyxqxd:1C
-/zakku:3C
-/zakku90:09
-/zakku900:1C
-/zakkus:09
-/zambia:42
-/zanetti:3H
-/zapatasec:25
-/zaqtjwv:09
-/zb_:42
-/zcPq:42
-/zcrayfish:5E
-/zcrbqs:6C
-/zdfop:0C
-/zduchac:4N
-/zeamp:5E
-/zeb:03
-/zebra:25
-/zedfreak:51
-/zeeshi:1C
-/zeezoo:6B
-/zeezoo_:6C
-/zelest:3A
-/zen:0C
-/zen-:6C
-/zeng0d:1C
-/zenga:4C
-/zenik:51
-/zenik-:4C
-/zenik^:51
-/zenik_:3A
-/zenik|:6C
-/zenostar:4G
-/zensor:6B
-/zen|:0A
-/zeougm:3H
-/zephros:4G
-/zeptar:3A
-/zer0rest:0D
-/zero:51
-/zeroNot:4G
-/zerocool:4G
-/zerocool0:2D
-/zerodaysfordays:2J
-/zerodub:3H
-/zerosouls:0D
-/zerous:3C
-/zerous1:3A
-/zeta:51
-/zethius:4N
-/zfs:0D
-/zfvxv:4G
-/zfvxv-:0D
-/zgngzzya:6H
-/zgrep:3M
-/zhhawgql:5E
-/zhig:4N
-/zi:1C
-/zid:3C
-/zigg:09
-/ziggys:25
-/zigzag:0C
-/zinestro:51
-/zinestro_:6B
-/zip:3M
-/zipper:2J
-/zippity:6H
-/ziqlqwu:2J
-/zllkemev:6H
-/zlspetek:1C
-/zmm:63
-/zmugee:1Z
-/znEk:6C
-/zneak:1C
-/znedw:3H
-/zneeb:0A
-/zodi4c:25
-/zof:42
-/zooey:4C
-/zorg:1Z
-/zorg1:4G
-/zoroaster:3C
-/zouz:42
-/zouz_:4N
-/zozo:42
-/zp:2D
-/zphinx:6H
-/zpkbz:3A
-/zpmafkuf:1C
-/zpwMjXYrF:40
-/zqjfk:2T
-/zrrn:3A
-/zsjrsre:03
-/ztmihhl:3A
-/zuHiHu:63
-/zuexys:2D
-/zujnavyi:2T
-/zune:6B
-/zup:4C
-/zwansch:2T
-/zx:3C
-/zyfuob:3A
-/zyklon:63
-/zylone:25
-/zylone_:6H
-/zylone__:4N
-/zyme:3A
-/zyxx0r:2D
-/zyxxor:6C
-/zzenik:1C
-/zzmm`:2T
-/zzzzzzzzzzzzzzz:2D
-/{0_o}:03
-/{nick}:5E
-/{zenik}:3C
-/|:51
-/|-{}-|:2D
-/|00|:3P
-/|23|:2T
-/|3[]T:2D
-/|GIG:6B
-/|GIG-1:0A
-/|GIG2:4N
-/|V||K[][]|_[]:09
-/|WEREJAG|:6C
-/|X-File|:3A
-/|][][]:63
-/|beatdown:6C
-/|darkwind:3C
-/|dev|:2D
-/|haydenh|:7H
-/|iCE|:0A
-/|san|:03
-/|san|-:1Z
-/|silicon:3C
-/|werejag:2J
-/|werejag|:0A
-/|werejeg|:0C
-/|||||||||:0C
-/}{-XP-}{:3C
-/beenz/beenz:1C
-/davis/davis:2J
-/fixingshithopefully/fixingshithopefully:25
-/happy/happy:1Z
-/hyperreal/hyperreal:1C
-/ia/ia:6B
-Rizon/#/g/technology/hyperreal:4N
-Rizon/#8chan/Benett:4G
-Rizon/#8chan/Wildstorm:0C
-Rizon/#8chan/viic:03
-Rizon/#uk/Benett:03
-Rizon/#uk/Wildstorm:4C
-Rizon/#uk/viic:42
-efnet/#IRC30/beenz:2J
-efnet/#asciiart/haydenh:5E
-efnet/#efnet/haydenh:5E
-hlircnet/#hlircnet/davis:3M
-hlircnet/#hlircnet/fixingshithopefully:03
-sdf/#sdf/haydenh:09
-
-[set]
-/NickServ:3H
-/Sopel:2J
-/card.freenode.net:5C
-/efnet.port80.se:6N
-/freenode-connect:40
-/hhvn:7H
-/irc.haydenvh.com:3C
-/irc.nebulacentre.net:09
-/irc.sdf.org:2D
-/legended:4G
-/thufir:0A
-/unix.chat:03
diff --git a/.config/irssi/scripts/autorun/README b/.config/irssi/scripts/autorun/README
@@ -1,21 +0,0 @@
-
-ascii.pl:
- /ASCII [-c1234] [-f <fontname>] [-p <prefix>] [-l|-s|-m <where>] <text>
- /COLSAY [-1234] [-m <where>] <text>
- /COLME [-1234] <text>
- /COLTOPIC [-1234] <text>
- /COLKICK [-1234] [nick(,nick_1,...,nick_n)] <reason>
- /COLQUIT [-1234] <reason>
- /SET ascii_figlet_path [path]
-
-auto_whois:
- all is handled by itself
-
-nickcolor.pl:
- all is handled by itself
-
-url_hilight.pl:
- all is handled by itself
-
-usercount.pl:
- all is handled by itself
diff --git a/.config/irssi/scripts/autorun/adv_windowlist.pl b/.config/irssi/scripts/autorun/adv_windowlist.pl
@@ -1,2954 +0,0 @@
-use strict;
-use warnings;
-
-our $VERSION = '1.9'; # 32a6d4807a45e71
-our %IRSSI = (
- authors => 'Nei',
- contact => 'Nei @ anti@conference.jabber.teamidiot.de',
- url => "http://anti.teamidiot.de/",
- name => 'adv_windowlist',
- description => 'Adds a permanent advanced window list on the right or in a status bar.',
- sbitems => 'awl_shared',
- license => 'GNU GPLv2 or later',
- );
-
-# UPGRADE NOTE
-# ============
-# for users of 0.7 or earlier series, please note that appearance
-# settings have moved to /format, i.e. inside your theme!
-# the fifo (screen) has been replaced by an external viewer script
-
-# Usage
-# =====
-# copy the script to ~/.irssi/scripts/
-#
-# In irssi:
-#
-# /run adv_windowlist
-#
-# In your shell (for example a tmux split):
-#
-# perl ~/.irssi/scripts/adv_windowlist.pl
-#
-# To use sbar mode instead:
-#
-# /toggle awl_viewer
-#
-# 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
-# =======
-# formats can be cleared with /format -delete
-#
-# /format awl_display_(no)key(_active|_visible) <string>
-# * string : Format String for one window. The following $'s are expanded:
-# $C : Name
-# $N : Number of the Window
-# $Q : meta-Keymap
-# $H : Start hilighting
-# $S : Stop hilighting
-# /+++++++++++++++++++++++++++++++++,
-# | **** I M P O R T A N T : **** |
-# | |
-# | don't forget to use $S if you |
-# | used $H before! |
-# | |
-# '+++++++++++++++++++++++++++++++++/
-# key : a key binding that goes to this window could be detected in /bind
-# nokey : no such key binding was detected
-# active : window would receive the input you are currently typing
-# visible : window is also visible on screen but not active (a split window)
-#
-# /format awl_name_display <string>
-# * string : Format String for window names
-# $0 : name as formatted by the settings
-#
-# /format awl_display_header <string>
-# * string : Format String for this header line. The following $'s are expanded:
-# $C : network tag
-#
-# /format awl_separator(2) <string>
-# * string : Character to use between the channel entries
-# variant 2 can be used for alternating separators (only in status bar
-# without block display)
-#
-# /format awl_abbrev_chars <string>
-# * string : Character to use when shortening long names. The second character
-# will be used if two blocks need to be filled.
-#
-# /format awl_title <string>
-# * string : Text to display in the title string or title bar
-#
-# /format awl_viewer_item_bg <string>
-# * string : Format String specifying the viewer's item background colour
-#
-# /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_empty <num>
-# * if visible windows without items should be hidden from the window list
-# set it to 0 to show all windows
-# 1 to hide visible windows without items (negative exempt
-# active window)
-#
-# /set awl_detach <list>
-# * list of windows that should be hidden from the window list. you
-# can also use /awl detach and /awl attach to manage this
-# setting. an optional data_level can be specified with ",num"
-#
-# /set awl_detach_data <num>
-# * num : hide the detached window if its data_level is below num
-#
-# /set awl_detach_aht <ON|OFF>
-# * if enabled, also detach all windows listed in the
-# activity_hide_targets setting
-#
-# /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 (negative exempt active window)
-#
-# /set awl_hide_name_data <num>
-# * num : hide the name of the window if its data_level is below num
-# (only works in status bar without block display)
-# you will want to change your formats to add $H...$S around $Q or $N
-# if you plan to use this
-#
-# /set awl_maxlines <num>
-# * num : number of lines to use for the window list (0 to disable, negative
-# lock)
-#
-# /set awl_maxcolumns <num>
-# * num : number of columns to use for the window list when using the
-# tmux integration (0 to disable)
-#
-# /set awl_block <num>
-# * num : width of a column in viewer mode (negative values = block
-# display in status bar mode)
-# /+++++++++++++++++++++++++++++++++,
-# | ****** 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 = "%K$*"; |
-# | |
-# '+++++++++++++++++++++++++++++++++/
-#
-# /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 status bar mode too.
-#
-# /set awl_height_adjust <num>
-# * num : how many lines to leave empty in viewer 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
-# active/server/tag : sort by server name
-# lru : sort windows with the last recently used last
-# "-" reverses the sort order
-# typechecks are supported via ::, e.g. active::Query or active::Irc::Query
-# undefinedness can be checked with ~, e.g. ~active
-# string comparison can be done with =, e.g. name=(status)
-# to make sort case insensitive, use #i, e.g. name#i
-# any key in the window hash can be tested, e.g. active/chat_type=XMPP
-# multiple criteria can be separated with , or +, e.g. -data_level+-last_line
-#
-# /set awl_placement <top|bottom>
-# /set awl_position <num>
-# * these settings correspond to /statusbar because awl will create
-# status bars 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 status bar it created if it is empty.
-# As you might guess, this only makes sense with awl_hide_data > 0 ;)
-#
-# /set awl_viewer <ON|OFF>
-# * enable the external viewer script
-#
-# /set awl_viewer_launch <ON|OFF>
-# * try to auto-launch the viewer under tmux or with a shell command
-# /awl restart is required all auto-launch related settings to take
-# effect
-#
-# /set awl_viewer_tmux_position <left|top|right|bottom|custom>
-# * try to split in this direction when using tmux for the viewer
-# custom : use custom_command setting
-#
-# /set awl_viewer_xwin_command <shell command>
-# * custom command to run in order to start the viewer when irssi is
-# running under X
-# %A - gets replaced by the command to run the viewer
-# %qA - additionally quote the command
-#
-# /set awl_viewer_custom_command <shell command>
-# * custom command to run in order to start the viewer
-#
-# /set awl_viewer_launch_env <string>
-# * specific environment settings for use on viewer auto-launch,
-# without the AWL_ prefix
-#
-# /set awl_shared_sbar <left<right|OFF>
-# * share a status bar for the first awl item, you will need to manually
-# /statusbar window add -after lag -priority 10 awl_shared
-# left : space in cells occupied on the left of status bar
-# right : space occupied on the right
-# Note: you need to replace "left" AND "right" with the appropriate numbers!
-#
-# /set awl_path <path>
-# * path to the file which the viewer script reads
-#
-# /set fancy_abbrev <no|head|strict|fancy>
-# * how to shorten too long names
-# no : shorten in the middle
-# head : always cut off the ends
-# strict : shorten repeating substrings
-# fancy : combination of no+strict
-#
-# /set awl_custom_xform <perl code>
-# * specify a custom routine to transform window names
-# example: s/^#// remove the #-mark of IRC channels
-# the special flags $CHANNEL / $TAG / $QUERY / $NAME can be
-# tested in conditionals
-#
-# /set awl_last_line_shade <timeout>
-# * set timeout to shade activity base colours, to enable
-# you also need to add +-last_line to awl_sort
-# (requires 256 colour support)
-#
-# /set awl_no_mode_hint <ON|OFF>
-# * whether to show the hint of running the viewer script in the
-# status bar
-#
-# /set awl_mouse <ON|OFF>
-# * enable the terminal mouse in irssi
-# (use the awl-patched mouse.pl for gestures and commands if you need
-# them and disable mouse_escape)
-#
-# /set awl_mouse_offset <num>
-# * specifies where on the screen is the awl status bar
-# (0 = on top/bottom, 1 = one additional line in between,
-# e.g. prompt)
-# you MUST set this correctly otherwise the mouse coordinates will
-# be off
-#
-# /set mouse_scroll <num>
-# * how many lines the mouse wheel scrolls
-#
-# /set mouse_escape <num>
-# * seconds to disable the mouse, when not clicked on the windowlist
-#
-
-# Commands
-# ========
-# /awl detach <num>
-# * hide the current window from the window list. num specifies the
-# data_level (optional)
-#
-# /awl attach
-# * unhide the current window from the window list
-#
-# /awl ack
-# * change to the next window with activity, ignoring detached windows
-#
-# /awl redraw
-# * redraws the windowlist. There may be occasions where the
-# windowlist can get destroyed so you can use this command to
-# force a redraw.
-#
-# /awl restart
-# * restart the connection to the viewer script.
-
-# Viewer script
-# =============
-# When run from the command line, adv_windowlist acts as the viewer
-# script to be used together with the irssi script to display the
-# window list in a sidebar/terminal of its own.
-#
-# One optional parameter is accepted, the awl_path
-#
-# The viewer can be configured by three environment variables:
-#
-# AWL_HI9=1
-# * interpret %9 as high-intensity toggle instead of bold. This had
-# been the default prior to version 0.9b8
-#
-# AWL_AUTOFOCUS=0
-# * disable auto-focus behaviour when activating a window
-#
-# AWL_NOTITLE=1
-# * disable the title bar
-
-# Nei =^.^= ( anti@conference.jabber.teamidiot.de )
-
-no warnings 'redefine';
-use constant IN_IRSSI => __PACKAGE__ ne 'main' || $ENV{IRSSI_MOCK};
-use constant SCRIPT_FILE => __FILE__;
-no if !IN_IRSSI, strict => (qw(subs refs));
-use if IN_IRSSI, Irssi => ();
-use if IN_IRSSI, 'Irssi::TextUI' => ();
-use v5.10;
-use Encode;
-use Storable ();
-use IO::Socket::UNIX;
-use List::Util qw(min max reduce);
-use Hash::Util qw(lock_keys);
-use Text::ParseWords qw(shellwords);
-
-BEGIN {
- if ($] < 5.012) {
- *CORE::GLOBAL::length = *CORE::GLOBAL::length = sub (_) {
- defined $_[0] ? CORE::length($_[0]) : undef
- };
- }
- *Irssi::active_win = {}; # hide incorrect warning
-}
-
-unless (IN_IRSSI) {
- local *_ = \@ARGV;
- &AwlViewer::main;
- exit;
-}
-
-
-use constant GLOB_QUEUE_TIMER => 100;
-
-our $BLOCK_ALL; # localized blocker
-my @actString; # status bar texts
-my @win_items;
-my $currentLines = 0;
-my %awins;
-my $globTime; # timer to limit remake calls
-
-my %CHANGED;
-my $VIEWER_MODE;
-my $MOUSE_ON;
-my %mouse_coords;
-my %statusbars;
-my %S; # settings
-my $settings_str = '1';
-my $window_sort_func;
-my $custom_xform;
-my ($sb_base_width, $sb_base_width_pre, $sb_base_width_post);
-my $print_text_activity;
-my $shade_line_timer;
-my ($screenHeight, $screenWidth);
-my %viewer;
-
-my (%keymap, %nummap, %wnmap, %specialmap, %wnmap_exp, %custom_key_map);
-my %banned_channels;
-my %detach_map;
-my %abbrev_cache;
-
-use constant setc => 'awl';
-
-sub set ($) {
- setc . '_' . $_[0]
-}
-
-sub add_statusbar {
- for (@_) {
- # add subs
- my $l = set $_;
- {
- my $close = $_;
- no strict 'refs';
- *{$l} = sub { awl($close, @_) };
- }
- Irssi::command("^statusbar $l reset");
- Irssi::command("statusbar $l enable");
- if (lc $S{placement} eq 'top') {
- Irssi::command("statusbar $l placement top");
- }
- if (my $x = $S{position}) {
- Irssi::command("statusbar $l position $x");
- }
- Irssi::command("statusbar $l add -priority 100 -alignment left barstart");
- Irssi::command("statusbar $l add $l");
- Irssi::command("statusbar $l add -priority 100 -alignment right barend");
- Irssi::command("statusbar $l disable");
- Irssi::statusbar_item_register($l, '$0', $l);
- $statusbars{$_} = 1;
- Irssi::command("statusbar $l enable");
- }
-}
-
-sub remove_statusbar {
- for (@_) {
- my $l = set $_;
- Irssi::command("statusbar $l disable");
- Irssi::command("statusbar $l reset");
- Irssi::statusbar_item_unregister($l);
- {
- no strict 'refs';
- undef &{$l};
- }
- delete $statusbars{$_};
- }
-}
-
-my $awl_shared_empty = sub {
- return if $BLOCK_ALL;
- my ($item, $get_size_only) = @_;
- $item->default_handler($get_size_only, '', '', 0);
-};
-
-sub syncLines {
- my $maxLines = $S{maxlines};
- my $newLines = ($maxLines > 0 and @actString > $maxLines) ?
- $maxLines :
- ($maxLines < 0) ?
- -$maxLines :
- @actString;
- $currentLines = 1 if !$currentLines && $S{shared_sbar};
- if ($S{shared_sbar} && !$statusbars{shared}) {
- my $l = set 'shared';
- {
- no strict 'refs';
- *{$l} = sub {
- return if $BLOCK_ALL;
- my ($item, $get_size_only) = @_;
-
- my $text = $actString[0];
- my $title = _get_format(set 'title');
- if (length $title) {
- $title =~ s{\\(.)|(.)}{
- defined $2 ? quotemeta $2
- : $1 eq 'V' ? '\u'
- : $1 eq ':' ? quotemeta ':%n'
- : $1 =~ /^[uUFQE]$/ ? "\\$1"
- : quotemeta "\\$1"
- }sge;
- $title = eval qq{"$title"};
- $title .= ' ';
- }
- my $pat = defined $text ? "{sb_awl $title\$*}" : '{sb_awl }';
- $text //= '';
- $item->default_handler($get_size_only, $pat, $text, 0);
- };
- }
- $statusbars{shared} = 1;
- remove_statusbar (0) if $statusbars{0};
- }
- elsif ($statusbars{shared} && !$S{shared_sbar}) {
- add_statusbar (0) if $currentLines && $newLines;
- delete $statusbars{shared};
- my $l = set 'shared';
- {
- no strict 'refs';
- *{$l} = $awl_shared_empty;
- }
- }
- if ($currentLines == $newLines) { return; }
- elsif ($newLines > $currentLines) {
- add_statusbar ($currentLines .. ($newLines - 1));
- }
- else {
- remove_statusbar (reverse ($newLines .. ($currentLines - 1)));
- }
- $currentLines = $newLines;
-}
-
-sub awl {
- return if $BLOCK_ALL;
- my ($line, $item, $get_size_only) = @_;
-
- my $text = $actString[$line];
- my $pat = defined $text ? '{sb_awl $*}' : '{sb_awl }';
- $text //= '';
- $item->default_handler($get_size_only, $pat, $text, 0);
-}
-
-# 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} = 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);
- }
-}
-
-sub _add_map {
- my ($type, $target, $map) = @_;
- ($type->{$target}) = sort { length $a <=> length $b || $a cmp $b }
- $map, exists $type->{$target} ? $type->{$target} : ();
-}
-
-sub get_keymap {
- my ($textDest, undef, $cont_stripped) = @_;
- if ($textDest->{level} == 524288 and $textDest->{target} eq '' and !defined $textDest->{server}) {
- my $one_meta_or_ctrl_key = qr/((?:meta-)*?)(?:(meta-|\^)(\S)|(\w+))/;
- $cont_stripped = as_uni($cont_stripped);
- if ($cont_stripped =~ m/((?:$one_meta_or_ctrl_key-)*$one_meta_or_ctrl_key)\s+(.*)$/) {
- my ($combo, $command) = ($1, $10);
- my $map = '';
- while ($combo =~ s/(?:-|^)$one_meta_or_ctrl_key$//) {
- my ($level, $ctl, $key, $nkey) = ($1, $2, $3, $4);
- my $numlevel = ($level =~ y/-//);
- $ctl = '' if !$ctl || $ctl ne '^';
- $map = ('-' x ($numlevel%2)) . ('+' x ($numlevel/2)) .
- $ctl . (defined $key ? $key : "\01$nkey\01") . $map;
- }
- for ($command) {
- last unless length $map;
- if (/^change_window (\d+)/i) {
- _add_map(\%nummap, $1, $map);
- }
- elsif (/^(?:command window goto|change_window) (\S+)/i) {
- my $window = $1;
- if ($window !~ /\D/) {
- _add_map(\%nummap, $window, $map);
- }
- elsif (lc $window eq 'active') {
- _add_map(\%specialmap, '_active', $map);
- }
- else {
- _add_map(\%wnmap, $window, $map);
- }
- }
- elsif (/^(?:active_window|command ((awl )?ack))/i) {
- _add_map(\%specialmap, '_active', $map);
- $viewer{use_ack} = $1;
- }
- elsif (/^command window last/i) {
- _add_map(\%specialmap, '_last', $map);
- }
- elsif (/^(?:upper_window|command window up)/i) {
- _add_map(\%specialmap, '_up', $map);
- }
- elsif (/^(?:lower_window|command window down)/i) {
- _add_map(\%specialmap, '_down', $map);
- }
- elsif (/^key\s+(\w+)/i) {
- $custom_key_map{$1} = $map;
- }
- }
- }
- Irssi::signal_stop;
- }
-}
-
-sub update_keymap {
- %nummap = %wnmap = %specialmap = %custom_key_map = ();
- Irssi::signal_remove('command bind' => 'watch_keymap');
- Irssi::signal_add_first('print text' => 'get_keymap');
- Irssi::command('bind');
- Irssi::signal_remove('print text' => 'get_keymap');
- for (keys %custom_key_map) {
- if (exists $custom_key_map{$_} &&
- $custom_key_map{$_} =~ s/\01(\w+)\01/exists $custom_key_map{$1} ? $custom_key_map{$1} : "\02"/ge) {
- if ($custom_key_map{$_} =~ /\02/) {
- delete $custom_key_map{$_};
- }
- else {
- redo;
- }
- }
- }
- for my $keymap (\(%specialmap, %wnmap, %nummap)) {
- for (keys %$keymap) {
- if ($keymap->{$_} =~ s/\01(\w+)\01/exists $custom_key_map{$1} ? $custom_key_map{$1} : "\02"/ge) {
- if ($keymap->{$_} =~ /\02/) {
- delete $keymap->{$_};
- }
- }
- }
- }
- Irssi::signal_add('command bind' => 'watch_keymap');
- delete $viewer{client_keymap};
- &wl_changed;
-}
-
-# watch keymap changes
-sub watch_keymap {
- Irssi::timeout_add_once(1000, 'update_keymap', undef);
-}
-
-{ 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_8I:|FnN>#[' . 'pP')),
- # escape
- (map { $_ => $_ } (split //, '{}%')),
- );
- sub ir_strip_codes { # strip %codes
- my $o = shift;
- $o =~ s/(%(%|Z.{6}|z.{6}|X..|x..|.))/exists $strip_table{$2} ? $strip_table{$2} :
- $2 =~ m{x(?:0[a-f]|[1-6][0-9a-z]|7[a-x])|z[0-9a-f]{6}}i ? '' : $1/gex;
- $o
- }
-}
-## ir_parse_special -- wrapper around parse_special
-## $i - input format
-## $args - array ref of arguments to format
-## $win - different target window (default current window)
-## $flags - different kind of escape flags (default 4|8)
-## returns formatted str
-sub ir_parse_special {
- my $o;
- my $i = shift;
- my $args = shift // [];
- y/ /\177/ for @$args; # hack to escape spaces
- my $win = shift || Irssi::active_win;
- my $flags = shift // 0x4|0x8;
- my @cmd_args = ($i, (join ' ', @$args), $flags);
- my $server = Irssi::active_server();
- if (ref $win and ref $win->{active}) {
- $o = $win->{active}->parse_special(@cmd_args);
- }
- elsif (ref $win and ref $win->{active_server}) {
- $o = $win->{active_server}->parse_special(@cmd_args);
- }
- elsif (ref $server) {
- $o = $server->parse_special(@cmd_args);
- }
- else {
- $o = &Irssi::parse_special(@cmd_args);
- }
- $o =~ y/\177/ /;
- $o
-}
-
-sub sb_format_expand { # Irssi::current_theme->format_expand wrapper
- Irssi::current_theme->format_expand(
- $_[0],
- (
- Irssi::EXPAND_FLAG_IGNORE_REPLACES
- |
- ($_[1] ? 0 : Irssi::EXPAND_FLAG_IGNORE_EMPTY)
- )
- )
-}
-
-{ my $term_type = Irssi::version > 20040819 ? 'term_charset' : 'term_type';
- if (Irssi->can('string_width')) {
- *screen_length = sub { Irssi::string_width($_[0]) };
- }
- else {
- local $@;
- eval { require Text::CharWidth; };
- unless ($@) {
- *screen_length = sub { Text::CharWidth::mbswidth($_[0]) };
- }
- else {
- my $err = $@; chomp $err; $err =~ s/\sat .* line \d+\.$//;
- #Irssi::print("%_$IRSSI{name}: warning:%_ Text::CharWidth module failed to load. Length calculation may be off! Error was:");
- print "%_$IRSSI{name}:%_ $err";
- *screen_length = sub {
- my $temp = shift;
- if (lc Irssi::settings_get_str($term_type) eq 'utf-8') {
- Encode::_utf8_on($temp);
- }
- length($temp)
- };
- }
- }
- sub as_uni {
- no warnings 'utf8';
- Encode::decode(Irssi::settings_get_str($term_type), $_[0], 0)
- }
- sub as_tc {
- Encode::encode(Irssi::settings_get_str($term_type), $_[0], 0)
- }
-}
-
-sub sb_length {
- screen_length(ir_strip_codes($_[0]))
-}
-
-sub run_custom_xform {
- local $@;
- eval {
- $custom_xform->()
- };
- if ($@) {
- $@ =~ /^(.*)/;
- print '%_'.(set 'custom_xform').'%_ died (disabling): '.$1;
- $custom_xform = undef;
- }
-}
-
-sub remove_uniform {
- my $o = shift;
- $o =~ s/^xmpp:(.*?[%@]).+\.[^.]+$/$1/ or
- $o =~ s#^psyc://.+\.[^.]+/([@~].*)$#$1#;
- if ($custom_xform) {
- run_custom_xform() for $o;
- }
- $o
-}
-
-sub remove_uniform_vars {
- my $win = shift;
- my $name = __PACKAGE__ . '::custom_xform::' . $win->{active}{type}
- if ref $win->{active} && $win->{active}{type};
- no strict 'refs';
- local ${$name} = 1 if $name;
- remove_uniform(+shift);
-}
-
-sub lc1459 {
- my $x = shift;
- $x =~ y/][\\^/}{|~/;
- lc $x
-}
-
-sub window_list {
- my $i = 0;
- map { $_->[1] } sort $window_sort_func map { [ $i++, $_ ] } Irssi::windows;
-}
-
-sub _calculate_abbrev {
- my ($wins, $abbrevList) = @_;
- if ($S{fancy_abbrev} !~ /^(no|off|head)/i) {
- my @nameList = map { ref $_ ? remove_uniform_vars($_, as_uni($_->get_active_name) // '') : '' } @$wins;
- for (my $i = 0; $i < @nameList - 1; ++$i) {
- my ($x, $y) = ($nameList[$i], $nameList[$i + 1]);
- s/^[+#!=]// for $x, $y;
- my $res = exists $abbrev_cache{$x}{$y} ? $abbrev_cache{$x}{$y}
- : $abbrev_cache{$x}{$y} = string_LCSS($x, $y);
- if (defined $res) {
- for ($nameList[$i], $nameList[$i + 1]) {
- $abbrevList->{$_} //= int((index $_, $res) + (length $res) / 2);
- }
- }
- }
- }
-}
-
-my %act_last_line_shades = (
- r => [qw[ 50 40 30 20 ]],
- g => [qw[ 1O 1I 1C 16 ]],
- y => [qw[ 5O 4I 3C 26 ]],
- b => [qw[ 15 14 13 12 ]],
- m => [qw[ 54 43 32 21 ]],
- c => [qw[ 1S 1L 1E 17 ]],
- w => [qw[ 7W 7T 7Q 3E ]],
- K => [qw[ 7M 7K 27 7H ]],
- R => [qw[ 60 50 40 30 ]],
- G => [qw[ 1U 1O 1I 1C ]],
- Y => [qw[ 6U 5O 4I 3C ]],
- B => [qw[ 2B 2A 29 28 ]],
- M => [qw[ 65 54 43 32 ]],
- C => [qw[ 1Z 1S 1L 1E ]],
- W => [qw[ 6Z 5S 7R 7O ]],
- );
-
-sub _format_display {
- my (undef, $format, $cformat, $hilight, $name, $number, $key, $win) = @_;
- if ($print_text_activity && $S{line_shade}) {
- my @hilight_code = split /\177/, sb_format_expand("{$hilight \177}"), 2;
- my $max_time = max(1, log($S{line_shade}) - log(1000));
- my $time_delta = min(3, min($max_time, log(max(1, time - $win->{last_line}))) / $max_time * 3);
- if ($hilight_code[0] =~ /%(.)/ && exists $act_last_line_shades{$1}) {
- $hilight = 'sb_act_hilight_color %X'.$act_last_line_shades{$1}[$time_delta];
- }
- }
- $cformat = '$0' unless length $cformat;
- my %map = ('$C' => $cformat, '$N' => '$1', '$Q' => '$2');
- $format =~ s<(\$.)><$map{$1}//$1>ge;
- $format =~ s<\$H((?:\$.|[^\$])*?)\$S><{$hilight $1%n}>g;
- my @ret = ir_parse_special(sb_format_expand($format), [$name, $number, $key], $win);
- @ret
-}
-
-sub _get_format {
- Irssi::current_theme->get_format(__PACKAGE__, @_)
-}
-
-sub _is_detached {
- my ($win, $active_number) = @_;
- my $level = $win->{data_level} // 0;
- my $number = $win->{refnum};
- my $name = lc1459( as_uni($win->{name}) );
- my $active = lc1459( as_uni($win->get_active_name) // '' );
- my $tag = $win->{active} && $win->{active}{server} ? lc1459( as_uni($win->{active}{server}{tag}) // '' ) : '';
- my @cond = ($number);
- push @cond, "$name" if length $name;
- push @cond, "$tag/$active" if length $tag && length $active;
- push @cond, "$active" if length $active;
- push @cond, "$tag/*", "$tag/::all" if length $tag;
- push @cond, "*", "::all";
- for my $cond (@cond) {
- if (exists $detach_map{ $cond }) {
- my $dd = $detach_map{ $cond } // $S{detach_data};
- return $win->{data_level} < abs $dd
- && ($number != $active_number || 0 <= $dd);
- }
- }
- return;
-}
-
-sub _calculate_items {
- my ($wins, $abbrevList) = @_;
-
- my $display_header = _get_format(set 'display_header');
- my $name_format = _get_format(set 'name_display');
- my $abbrev_chars = as_uni(_get_format(set 'abbrev_chars'));
-
- my %displays;
-
- my $active = Irssi::active_win;
- @win_items = ();
- %keymap = (%nummap, %wnmap_exp);
-
- my ($numPad, $keyPad) = (0, 0);
- if ($VIEWER_MODE or $S{block} < 0) {
- $numPad = length((sort { length $b <=> length $a } keys %keymap)[0]) // 0;
- $keyPad = length((sort { length $b <=> length $a } values %keymap)[0]) // 0;
- }
- my $last_net;
- my ($abbrev1, $abbrev2) = $abbrev_chars =~ /(\X)(.*)/;
- my @abbrev_chars = ('~', "\x{301c}");
- unless (defined $abbrev1 && screen_length(as_tc($abbrev1)) == 1) { $abbrev1 = $abbrev_chars[0] }
- unless (length $abbrev2) {
- $abbrev2 = $abbrev1;
- if ($abbrev1 eq $abbrev_chars[0]) {
- $abbrev2 = $abbrev_chars[1];
- }
- else {
- $abbrev2 = $abbrev1;
- }
- }
- if (screen_length(as_tc($abbrev2)) == 1) {
- $abbrev2 x= 2;
- }
- while (screen_length(as_tc($abbrev2)) > 2) {
- chop $abbrev2;
- }
- unless (screen_length(as_tc($abbrev2)) == 2) {
- $abbrev2 = $abbrev_chars[1];
- }
- for my $win (@$wins) {
- my $global_tag_header_mode;
-
- next unless ref $win;
-
- my $backup_win = Storable::dclone($win);
- delete $backup_win->{active} unless ref $backup_win->{active};
-
- $global_tag_header_mode =
- $display_header && ($last_net // '') ne ($backup_win->{active}{server}{tag} // '');
-
- if ($win->{data_level} < abs $S{hide_data}
- && ($win->{refnum} != $active->{refnum} || 0 <= $S{hide_data})) {
- next; }
- elsif (exists $awins{$win->{refnum}} && $S{hide_empty} && !$win->items
- && ($win->{refnum} != $active->{refnum} || 0 <= $S{hide_empty})) {
- next; }
- elsif (_is_detached($win, $active->{refnum})) {
- next; }
-
- my $colour = $win->{hilight_color} // '';
- my $hilight = do {
- if ($win->{data_level} == 0) { 'sb_act_none'; }
- elsif ($win->{data_level} == 1) { 'sb_act_text'; }
- elsif ($win->{data_level} == 2) { 'sb_act_msg'; }
- elsif ($colour ne '') { 'sb_act_hilight'; }
- elsif ($win->{data_level} == 3) { 'sb_act_hilight'; }
- else { 'sb_act_special'; }
- };
- my $number = $win->{refnum};
-
- my ($name, $display, $cdisplay);
- if ($global_tag_header_mode) {
- $display = $display_header;
- $name = as_uni($backup_win->{active}{server}{tag}) // '';
- if ($custom_xform) {
- no strict 'refs';
- local ${ __PACKAGE__ . '::custom_xform::TAG' } = 1;
- run_custom_xform() for $name;
- }
- }
- else {
- my @display = ('display_nokey');
- if (defined $keymap{$number} and $keymap{$number} ne '') {
- unshift @display, map { (my $cpy = $_) =~ s/_no/_/; $cpy } @display;
- }
- if (exists $awins{$number}) {
- unshift @display, map { my $cpy = $_; $cpy .= '_visible'; $cpy } @display;
- }
- if ($active->{refnum} == $number) {
- unshift @display, map { my $cpy = $_; $cpy .= '_active'; $cpy }
- grep { !/_visible$/ } @display;
- }
- $display = (grep { length $_ }
- map { $displays{$_} //= _get_format(set $_) }
- @display)[0];
- $cdisplay = $name_format;
- $name = as_uni($win->get_active_name) // '';
- $name = '*' if $S{banned_on} and exists $banned_channels{lc1459($name)};
- $name = remove_uniform_vars($win, $name) if $name ne '*';
- if ($name ne '*' and $win->{name} ne '' and $S{prefer_name}) {
- $name = as_uni($win->{name});
- if ($custom_xform) {
- no strict 'refs';
- local ${ __PACKAGE__ . '::custom_xform::NAME' } = 1;
- run_custom_xform() for $name;
- }
- }
-
- if (!$VIEWER_MODE && $S{block} >= 0 && $S{hide_name}
- && $win->{data_level} < abs $S{hide_name}
- && ($win->{refnum} != $active->{refnum} || 0 <= $S{hide_name})) {
- $name = '';
- $cdisplay = '';
- }
- }
-
- $display = "$display%n";
- my $num_ent = (' 'x max(0,$numPad - length $number)) . $number;
- my $key_ent = exists $keymap{$number} ? ((' 'x max(0,$keyPad - length $keymap{$number})) . $keymap{$number}) : ' 'x$keyPad;
- if ($VIEWER_MODE or $S{sbar_maxlen} or $S{block} < 0) {
- my $baseLength = sb_length(_format_display(
- '', $display, $cdisplay, $hilight,
- 'x', # placeholder
- $num_ent,
- $key_ent,
- $win)) - 1;
- my $diff = (abs $S{block}) - (screen_length(as_tc($name)) + $baseLength);
- if ($diff < 0) { # too long
- my $screen_length = screen_length(as_tc($name));
- if ((abs $diff) >= $screen_length) { $name = '' } # forget it
- elsif ((abs $diff) + screen_length(as_tc(substr($name, 0, 1))) >= $screen_length) { $name = substr($name, 0, 1); }
- else {
- my $ulen = length $name;
- my $middle2 = exists $abbrevList->{$name} ?
- ($S{fancy_strict}) ?
- 2* $abbrevList->{$name} :
- (2*($abbrevList->{$name} + $ulen) / 3) :
- ($S{fancy_head}) ?
- 2*$ulen :
- $ulen;
- my $first = 1;
- while (length $name > 1) {
- my $cp = $middle2 >= 0 ? $middle2/2 : -1; # clearing position
- my $rm = 2;
- # if character at end is wider than 1 cell -> replace it with ~
- if (screen_length(as_tc(substr $name, $cp, 1)) > 1) {
- if ($first || $cp < 0) {
- $rm = 1;
- $first = undef;
- }
- }
- elsif ($cp < 0) { # elsif at end -> replace last 2 characters
- --$cp;
- }
- (substr $name, $cp, $rm) = $abbrev1;
- if ($cp > -1 && $rm > 1) {
- --$middle2;
- }
- my $sl = screen_length(as_tc($name));
- if ($sl + $baseLength < abs $S{block}) {
- (substr $name, ($middle2+1)/2, 1) = $abbrev2;
- last;
- }
- elsif ($sl + $baseLength == abs $S{block}) {
- last;
- }
- }
- }
- }
- elsif ($VIEWER_MODE or $S{block} < 0) {
- $name .= (' ' x $diff);
- }
- }
-
- push @win_items, _format_display(
- '', $display, $cdisplay, $hilight,
- as_tc($name),
- $num_ent,
- as_tc($key_ent),
- $win);
-
- if ($global_tag_header_mode) {
- $last_net = $backup_win->{active}{server}{tag};
- redo;
- }
-
- $mouse_coords{refnum}{$#win_items} = $number;
- }
-}
-
-sub _spread_items {
- my $width = $screenWidth - $sb_base_width - 1;
- my @separator = _get_format(set 'separator');
- if ($S{block} >= 0) {
- my $sep2 = _get_format(set 'separator2');
- push @separator, $sep2 if length $sep2 && $sep2 ne $separator[0];
- }
- $separator[0] .= '%n';
- my @sepLen = map { sb_length($_) } @separator;
-
- @actString = ();
- my $curLine;
- my $curLen = 0;
- if ($S{shared_sbar}) {
- $curLen += $S{shared_sbar}[0] + 2;
- $width -= $S{shared_sbar}[2];
- }
- my $mouse_header_check = 0;
- for my $it (@win_items) {
- my $itemLen = sb_length($it);
- if ($curLen) {
- if ($curLen + $itemLen + $sepLen[$mouse_header_check % @sepLen] > $width) {
- $width += $S{shared_sbar}[2]
- if !@actString && $S{shared_sbar};
- push @actString, $curLine;
- $curLine = undef;
- $curLen = 0;
- }
- elsif (defined $curLine) {
- $curLine .= $separator[$mouse_header_check % @separator];
- $curLen += $sepLen[$mouse_header_check % @sepLen];
- }
- }
- $curLine .= $it;
- if (exists $mouse_coords{refnum}{$mouse_header_check}) {
- $mouse_coords{scalar @actString}{ $_ } = $mouse_coords{refnum}{$mouse_header_check}
- for $curLen .. $curLen + $itemLen - 1;
- }
- $curLen += $itemLen;
- }
- continue {
- ++$mouse_header_check;
- }
- $curLen -= $S{shared_sbar}[0]
- if !@actString && $S{shared_sbar};
- push @actString, $curLine if $curLen;
-}
-
-sub remake {
- my %abbrevList;
- my @wins = window_list();
- if ($VIEWER_MODE or $S{sbar_maxlen} or $S{block} < 0) {
- _calculate_abbrev(\@wins, \%abbrevList);
- }
-
- %mouse_coords = ( refnum => +{} );
- _calculate_items(\@wins, \%abbrevList);
-
- unless ($VIEWER_MODE) {
- _spread_items();
-
- push @actString, undef unless @actString || $S{all_disable};
- }
-}
-
-sub update_wl {
- return if $BLOCK_ALL;
- remake();
-
- Irssi::statusbar_items_redraw(set $_) for keys %statusbars;
-
- unless ($VIEWER_MODE) {
- Irssi::timeout_add_once(100, 'syncLines', undef);
- }
- else {
- syncViewer();
- }
-}
-
-sub screenFullRedraw {
- my ($window) = @_;
- if (!ref $window or $window->{refnum} == Irssi::active_win->{refnum}) {
- $viewer{fullRedraw} = 1 if $viewer{client};
- $settings_str = '';
- &setup_changed;
- }
-}
-
-sub restartViewerServer {
- if ($VIEWER_MODE) {
- stop_viewer();
- start_viewer();
- }
-}
-
-sub _simple_quote {
- my @r = map {
- my $x = $_;
- $x =~ s/'/'"'"'/g;
- $x = "'$x'";
- } @_;
- wantarray ? @r : shift @r
-}
-
-sub _viewer_command_replace_format {
- my ($ecmd, @args) = @_;
- my $file = _simple_quote(SCRIPT_FILE());
- my $path = _simple_quote($viewer{path});
- my @env;
- for my $env (shellwords($S{viewer_launch_env})) {
- if ($env =~ /^(\w+)(?:=(.*))$/) {
- push @env, "AWL_$1=$2"
- }
- }
- my $cmd = join ' ',
- (@env ? ('env', _simple_quote(@env)) : ()),
- 'perl', $file, '-1', _simple_quote(@args), $path;
- $ecmd =~ s{%(%|\w+)}{
- my $sub = $1;
- if ($sub eq '%') {
- '%'
- }
- elsif ($sub =~ /^(q*)A(.*)/) {
- my $ret = $cmd;
- for (1..length $1) {
- $ret = _simple_quote($ret);
- }
- "$ret$2"
- }
- else {
- "%$sub"
- }
- }gex;
- $ecmd
-}
-
-sub start_viewer {
- unlink $viewer{path} if -S $viewer{path} || -p _;
-
- $viewer{server} = IO::Socket::UNIX->new(
- Type => SOCK_STREAM,
- Local => $viewer{path},
- Listen => 1
- );
- unless ($viewer{server}) {
- $viewer{msg} = "Viewer: $!";
- $viewer{retry} = Irssi::timeout_add_once(5000, 'retry_viewer', 1);
- return;
- }
- $viewer{server}->blocking(0);
- set_viewer_mode_hint();
- $viewer{server_tag} = Irssi::input_add($viewer{server}->fileno, INPUT_READ, 'vi_connected', undef);
-
- if ($S{viewer_launch}) {
- if (length $ENV{TMUX_PANE} && length $ENV{TMUX} && lc $S{viewer_tmux_position} ne 'custom') {
- my $cmd = _viewer_command_replace_format('%qA', '-p', lc $S{viewer_tmux_position});
- Irssi::command("exec - tmux neww -d $cmd 2>&1 &");
- }
- elsif (length $ENV{WINDOWID} && length $ENV{DISPLAY} && length $S{viewer_xwin_command} && $S{viewer_xwin_command} =~ /\S/) {
- my $cmd = _viewer_command_replace_format($S{viewer_xwin_command});
- Irssi::command("exec - $cmd 2>&1 &");
- }
- elsif (length $S{viewer_custom_command} && $S{viewer_custom_command} =~ /\S/) {
- my $cmd = _viewer_command_replace_format($S{viewer_custom_command});
- Irssi::command("exec - $cmd 2>&1 &");
- }
- }
-}
-
-sub set_viewer_mode_hint {
- return unless $viewer{server};
- if ($S{no_mode_hint}) {
- $viewer{msg} = undef;
- }
- else {
- my ($name) = __PACKAGE__ =~ /::([^:]+)$/;
- $viewer{msg} = "Run $name from the shell or switch to sbar mode";
- }
-}
-
-sub retry_viewer {
- start_viewer();
-}
-
-sub vi_close_client {
- Irssi::input_remove(delete $viewer{client_tag}) if exists $viewer{client_tag};
- $viewer{client}->close if $viewer{client};
- delete $viewer{client};
- delete $viewer{client_keymap};
- delete $viewer{client_settings};
- delete $viewer{client_env};
- delete $viewer{fullRedraw};
-}
-
-sub vi_connected {
- vi_close_client();
- $viewer{client} = $viewer{server}->accept or return;
- $viewer{client}->blocking(0);
- $viewer{client_tag} = Irssi::input_add($viewer{client}->fileno, INPUT_READ, 'vi_clientinput', undef);
- syncViewer();
-}
-
-use constant VIEWER_BLOCK_SIZE => 1024;
-sub vi_clientinput {
- if ($viewer{client}->read(my $buf, VIEWER_BLOCK_SIZE)) {
- $viewer{rcvbuf} .= $buf;
- if ($viewer{rcvbuf} =~ s/^(?:(active|\d+)|(last|up|down))\n//igm) {
- if (defined $2) {
- Irssi::command("window $2");
- }
- elsif (lc $1 eq 'active' && $viewer{use_ack}) {
- Irssi::command($viewer{use_ack});
- }
- else {
- Irssi::command("window goto $1");
- }
- }
- }
- else {
- vi_close_client();
- Irssi::timeout_add_once(100, 'syncViewer', undef);
- }
-}
-
-sub stop_viewer {
- Irssi::timeout_remove(delete $viewer{retry}) if exists $viewer{retry};
- vi_close_client();
- Irssi::input_remove(delete $viewer{server_tag}) if exists $viewer{server_tag};
- return unless $viewer{server};
- $viewer{server}->close;
- delete $viewer{server};
-}
-sub _encode_var {
- my $str;
- while (@_) {
- my ($name, $var) = splice @_, 0, 2;
- my $type = ref $var ? $var =~ /HASH/ ? 'map' : $var =~ /ARRAY/ ? 'list' : '' : '';
- $str .= "\n\U$name$type\_begin\n";
- if ($type eq 'map') {
- no warnings 'numeric';
- $str .= " $_\n ${$var}{$_}\n" for sort { $a <=> $b || $a cmp $b } keys %$var;
- }
- elsif ($type eq 'list') {
- $str .= " $_\n" for @$var;
- }
- else {
- $str .= " $var\n";
- }
- $str .= "\U$name$type\_end\n";
- }
- $str
-}
-sub syncViewer {
- if ($viewer{client}) {
- @actString = ();
- if ($currentLines) {
- killOldStatus();
- $currentLines = 0;
- }
- my $str;
- unless ($viewer{client_keymap}) {
- $str .= _encode_var('key', +{ %nummap, %specialmap });
- $viewer{client_keymap} = 1;
- }
- unless ($viewer{client_settings}) {
- $str .= _encode_var(
- block => $S{block},
- ha => $S{height_adjust},
- mc => $S{maxcolumns},
- ml => $S{maxlines},
- tc => $S{true_colour},
- );
- $viewer{client_settings} = 1;
- }
- unless ($viewer{client_env}) {
- $str .= _encode_var(irssienv => +{
- length $ENV{TMUX_PANE} && length $ENV{TMUX} ?
- (tmux_pane => $ENV{TMUX_PANE},
- tmux_srv => $ENV{TMUX}) : (),
- length $ENV{WINDOWID} ?
- (xwinid => $ENV{WINDOWID}) : (),
- });
- $viewer{client_env} = 1;
- }
- my $separator = _get_format(set 'separator');
- my $sepLen = sb_length($separator);
- my $item_bg = _get_format(set 'viewer_item_bg');
- my $title = _get_format(set 'title');
- if (length $title) {
- $title =~ s{\\(.)|(.)}{
- defined $2 ? quotemeta $2
- : $1 eq 'V' ? '\U'
- : $1 eq ':' ? quotemeta '%N'
- : $1 =~ /^[uUFQE]$/ ? "\\$1"
- : quotemeta "\\$1"
- }sge;
- $title = eval qq{"$title"};
- }
- $str .= _encode_var(redraw => 1) if delete $viewer{fullRedraw};
- $str .= _encode_var(separator => $separator,
- seplen => $sepLen,
- itembg => $item_bg,
- title => $title,
- mouse => $mouse_coords{refnum},
- key2 => \%wnmap_exp,
- win => \@win_items);
-
- my $was = $viewer{client}->blocking(1);
- $viewer{client}->print($str);
- $viewer{client}->blocking($was);
- }
- elsif ($viewer{server}) {
- if (defined $viewer{msg}) {
- @actString = ((uc setc()).": $viewer{msg}");
- }
- else {
- @actString = ();
- }
- }
- elsif (defined $viewer{msg}) {
- @actString = ((uc setc()).": $viewer{msg}");
- }
- if (@actString) {
- Irssi::timeout_add_once(100, 'syncLines', undef);
- }
- elsif ($currentLines) {
- killOldStatus();
- $currentLines = 0;
- }
-}
-
-sub reset_awl {
- Irssi::timeout_remove($shade_line_timer) if $shade_line_timer; $shade_line_timer = undef;
- my $was_sort = $S{sort} // '';
- my $was_xform = $S{xform} // '';
- my $was_shared = $S{shared_sbar};
- my $was_no_hint = $S{no_mode_hint};
- %S = (
- sort => Irssi::settings_get_str( set 'sort'),
- fancy_abbrev => Irssi::settings_get_str('fancy_abbrev'),
- xform => Irssi::settings_get_str( set 'custom_xform'),
- block => Irssi::settings_get_int( set 'block'),
- banned_on => Irssi::settings_get_bool('banned_channels_on'),
- prefer_name => Irssi::settings_get_bool(set 'prefer_name'),
- hide_data => Irssi::settings_get_int( set 'hide_data'),
- hide_name => Irssi::settings_get_int( set 'hide_name_data'),
- hide_empty => Irssi::settings_get_int( set 'hide_empty'),
- detach => Irssi::settings_get_str( set 'detach'),
- detach_data => Irssi::settings_get_int( set 'detach_data'),
- detach_aht => Irssi::settings_get_bool(set 'detach_aht'),
- sbar_maxlen => Irssi::settings_get_bool(set 'sbar_maxlength'),
- placement => Irssi::settings_get_str( set 'placement'),
- position => Irssi::settings_get_int( set 'position'),
- maxlines => Irssi::settings_get_int( set 'maxlines'),
- maxcolumns => Irssi::settings_get_int( set 'maxcolumns'),
- all_disable => Irssi::settings_get_bool(set 'all_disable'),
- height_adjust => Irssi::settings_get_int( set 'height_adjust'),
- mouse_offset => Irssi::settings_get_int( set 'mouse_offset'),
- mouse_scroll => Irssi::settings_get_int( 'mouse_scroll'),
- mouse_escape => Irssi::settings_get_int( 'mouse_escape'),
- line_shade => Irssi::settings_get_time(set 'last_line_shade'),
- no_mode_hint => Irssi::settings_get_bool(set 'no_mode_hint'),
- true_colour => Irssi::parse_special('$colors_ansi_24bit'),
- viewer_launch => Irssi::settings_get_bool(set 'viewer_launch'),
- viewer_launch_env => Irssi::settings_get_str(set 'viewer_launch_env'),
- viewer_xwin_command => Irssi::settings_get_str(set 'viewer_xwin_command'),
- viewer_custom_command => Irssi::settings_get_str(set 'viewer_custom_command'),
- viewer_tmux_position => Irssi::settings_get_str(set 'viewer_tmux_position'),
- );
- $S{fancy_strict} = $S{fancy_abbrev} =~ /^strict/i;
- $S{fancy_head} = $S{fancy_abbrev} =~ /^head/i;
- my $shared = Irssi::settings_get_str(set 'shared_sbar');
- if ($shared =~ /^(\d+)([<])(\d+)$/) {
- $S{shared_sbar} = [$1, $2, $3];
- }
- else {
- Irssi::settings_set_str(set 'shared_sbar', 'OFF');
- $S{shared_sbar} = undef;
- }
- lock_keys(%S);
- if ($was_sort ne $S{sort}) {
- $print_text_activity = undef;
- my @sort_order = grep { @$_ > 4 } map {
- s/^\s*//;
- my $reverse = s/^\W*\K[-!]//;
- my $undef_check = s/^\W*\K~// ? 1 : undef;
- my $equal_check = s/=(.*)\s?$// ? $1 : undef;
- s/\s*$//;
- my $ignore_case = s/#i$// ? 1 : undef;
-
- $print_text_activity = 1 if $_ eq 'last_line';
-
- my @path = split '/';
- my $class_check = @path && $path[-1] =~ s/(::.*)$// ? $1 : undef;
- my $lru = "@path" eq 'lru';
-
- [ $reverse ? -1 : 1, $undef_check, $equal_check, $class_check, $ignore_case, $lru, @path ]
- } "$S{sort}," =~ /([^+,]*|[^+,]*=[^,]*?\s(?=\+)|[^+,]*=[^,]*)[+,]/g;
- $window_sort_func = sub {
- no warnings qw(numeric uninitialized);
- for my $so (@sort_order) {
- my @x = map {
- my $ret = 0;
- $_ = lc1459($_) if defined $_ && !ref $_ && $so->[4];
- $ret = $_ eq ($so->[4] ? lc1459($so->[2]) : $so->[2]) ? 1 : -1 if defined $so->[2];
- $ret = defined $_ ? ($ret || -3) : 3 if $so->[1];
- $ret = ref $_ && $_->isa('Irssi'.$so->[3]) ? 2 : ($ret || -2) if $so->[3];
- -$ret || $_
- }
- map {
- $so->[5] ? $_->[0] : reduce { return unless ref $a; $a->{$b} } $_->[1], @{$so}[6..$#$so]
- } $a, $b;
- return ((($x[0] <=> $x[1] || $x[0] cmp $x[1]) * $so->[0]) || next);
- }
- return ($a->[1]{refnum} <=> $b->[1]{refnum});
- };
- }
- if ($was_xform ne $S{xform}) {
- if ($S{xform} !~ /\S/) {
- $custom_xform = undef;
- }
- else {
- my $script_pkg = __PACKAGE__ . '::custom_xform';
- local $@;
- $custom_xform = eval qq{
-package $script_pkg;
-use strict;
-no warnings;
-our (\$QUERY, \$CHANNEL, \$TAG, \$NAME);
-return sub {
-# line 1 @{[ set 'custom_xform' ]}\n$S{xform}\n}};
- if ($@) {
- $@ =~ /^(.*)/;
- print '%_'.(set 'custom_xform').'%_ did not compile: '.$1;
- }
- }
- }
-
- my $new_settings = join "\n", $VIEWER_MODE
- ? ("\\", $S{block}, $S{height_adjust}, $S{maxlines}, $S{maxcolumns}, $S{true_colour})
- : ("!", $S{placement}, $S{position});
-
- my $first_viewer = $settings_str eq '1';
- if ($settings_str ne $new_settings) {
- @actString = ();
- %abbrev_cache = ();
- $currentLines = 0;
- killOldStatus();
- delete $viewer{client_settings};
- $settings_str = $new_settings;
- }
-
- my $was_mouse_mode = $MOUSE_ON;
- if ($MOUSE_ON = Irssi::settings_get_bool(set 'mouse') and !$was_mouse_mode) {
- install_mouse();
- }
- elsif ($was_mouse_mode and !$MOUSE_ON) {
- uninstall_mouse();
- }
-
- unless ($first_viewer) {
- my $path = Irssi::settings_get_str(set 'path');
- my $was_viewer_mode = $VIEWER_MODE;
- if ($was_viewer_mode &&
- defined $viewer{path} && $viewer{path} ne $path) {
- stop_viewer();
- $was_viewer_mode = 0;
- }
- elsif ($was_viewer_mode && $S{no_mode_hint} != $was_no_hint + 0) {
- set_viewer_mode_hint();
- }
- $viewer{path} = $path;
- if ($VIEWER_MODE = Irssi::settings_get_bool(set 'viewer') and !$was_viewer_mode) {
- start_viewer();
- }
- elsif ($was_viewer_mode and !$VIEWER_MODE) {
- stop_viewer();
- }
- }
-
- %banned_channels = map { lc1459(as_uni($_)) => undef }
- split ' ', Irssi::settings_get_str('banned_channels');
-
- %detach_map = ($S{detach_aht}
- ? (map { ( lc1459(as_uni($_)) => undef ) }
- split ' ', Irssi::settings_get_str('activity_hide_targets')) : (),
- (map { my ($k, $v) = (split /(?:,(-?\d+))$/, $_)[0, 1];
- ( lc1459(as_uni($k)) => $v ) }
- split ' ', $S{detach}));
-
- my @sb_base = split /\177/, sb_format_expand("{sbstart}{sb_awl \177}{sbend}"), 2;
- $sb_base_width_pre = sb_length($sb_base[0]);
- $sb_base_width_post = max 0, sb_length($sb_base[1])-1;
- $sb_base_width = $sb_base_width_pre + $sb_base_width_post;
-
- if ($print_text_activity && $S{line_shade}) {
- $shade_line_timer = Irssi::timeout_add(max(10 * GLOB_QUEUE_TIMER, 100*$S{line_shade}**(1/3)), 'wl_changed', undef);
- }
-
- $CHANGED{AWINS} = 1;
-}
-
-sub hide_window {
- my ($data) = @_;
- my $ent;
-
- $data =~ s/\s*$//;
- my $win = Irssi::active_win;
- my $number = $win->{refnum};
- my $name = as_uni($win->{name});
- my $active = as_uni($win->get_active_name) // '';
- my $tag = $win->{active} && $win->{active}{server} ? as_uni($win->{active}{server}{tag}) // '' : '';
- if (length $name) {
- $ent = "$name";
- }
- elsif (length $tag && length $active) {
- $ent = "$tag/$active";
- }
- else {
- $ent = "$number";
- }
-
- my $found = 0;
- my @setting;
- for my $s (split ' ', $S{detach}) {
- my ($k, $v) = (split /(?:,(-?\d+))$/, $s)[0, 1];
- if (lc1459(as_uni($k)) eq lc1459($ent)) {
- unless ($found) {
- if ($data =~ /^(-?\d+)$/) {
- $ent .= ",$1";
- }
- if (defined $v && 0 == abs $v) {
- $win->print("Hiding window $ent");
- }
- push @setting, as_tc($ent);
- $found = 1;
- }
- }
- else {
- push @setting, defined $v ? "$k,$v" : $k;
- }
- }
- unless ($found) {
- $win->print("Hiding window $ent");
- if ($data =~ /^(-?\d+)$/) {
- $ent .= ",$1";
- }
- push @setting, as_tc($ent);
- }
-
- if (@setting) {
- Irssi::command("^set ".(set 'detach')." @setting");
- } else {
- Irssi::command("^set -clear ".(set 'detach'));
- }
-}
-
-sub unhide_window {
- my ($data, $server, $witem) = @_;
- my $win = Irssi::active_win;
- my $number = $win->{refnum};
- my $name = as_uni($win->{name});
- my $active = as_uni($win->get_active_name) // '';
- my $tag = $win->{active} && $win->{active}{server} ? as_uni($win->{active}{server}{tag}) // '' : '';
-
- my %detach_aht;
- if ($S{detach_aht}) {
- %detach_aht = (map { ( lc1459(as_uni($_)) => undef ) }
- split ' ', Irssi::settings_get_str('activity_hide_targets'));
- }
- my @setting;
- my @kills = (length $name ? $name : undef,
- length $tag && length $active ? "$tag/$active" : undef,
- length $active ? $active : undef,
- $number);
- my @was_unhidden = (0) x @kills;
- for my $s (split ' ', $S{detach}) {
- my ($k, $v) = (split /(?:,(-?\d+))$/, $s)[0, 1];
- my $k2 = lc1459(as_uni($k));
- my $kill;
- for my $ki (0..$#kills) {
- if (defined $kills[$ki] && $k2 eq lc1459($kills[$ki])) {
- $kill = $ki;
- }
- }
-
- if (defined $kill) {
- if (defined $v && 0 == abs $v) {
- $was_unhidden[$kill] = 1;
- push @setting, defined $v ? "$k,$v" : $k;
- } else {
- $win->print("Unhiding window $kills[$kill]");
- }
- }
- else {
- push @setting, defined $v ? "$k,$v" : $k;
- }
- }
- my @is_hidden = (defined $kills[0] && (exists $detach_map{"*"} || exists $detach_map{"::all"}),
- defined $kills[1] && (exists $detach_map{lc1459("$tag/*")} || exists $detach_map{lc1459("$tag/::all")}
- || exists $detach_map{"*"} || exists $detach_map{"::all"}),
- defined $kills[2] && (exists $detach_map{"*"} || exists $detach_map{"::all"}),
- (exists $detach_map{"*"} || exists $detach_map{"::all"})
- );
- for my $ki (1, 2, 0, 3) {
- if ($is_hidden[$ki]) {
- unless ($was_unhidden[$ki]) {
- $win->print("Unhiding window $kills[$ki]");
- push @setting, "$kills[$ki],0";
- $was_unhidden[$ki] = 1;
- }
- last;
- }
- }
- my @is_hidden_aht = (defined $kills[0] && (exists $detach_aht{lc1459($name)}
- || exists $detach_aht{"*"} || exists $detach_aht{"::all"}),
- defined $kills[1] && (exists $detach_aht{lc1459("$tag/$active")}
- || exists $detach_aht{lc1459($active)}
- || exists $detach_aht{lc1459("$tag/*")} || exists $detach_aht{lc1459("$tag/::all")}
- || exists $detach_aht{"*"} || exists $detach_aht{"::all"}),
- defined $kills[2] && (exists $detach_aht{lc1459($active)}
- || exists $detach_aht{"*"} || exists $detach_aht{"::all"}),
- (exists $detach_aht{$number} || exists $detach_aht{"*"} || exists $detach_aht{"::all"})
- );
- for my $ki (1, 2, 0, 3) {
- if ($is_hidden_aht[$ki]) {
- unless ($was_unhidden[$ki]) {
- $win->print("Unhiding window $kills[$ki], it is hidden because ".(set 'detach_aht')." is ON");
- push @setting, "$kills[$ki],0";
- $was_unhidden[$ki] = 1;
- }
- last;
- }
- }
-
- if (@setting) {
- Irssi::command("^set ".(set 'detach')." @setting");
- } else {
- Irssi::command("^set -clear ".(set 'detach'));
- }
-}
-
-sub ack_window {
- my ($data, $server, $witem) = @_;
- my $win = Irssi::active_win;
- my $number = $win->{refnum};
- if (grep { $_->{cmd} eq 'ack' } Irssi::commands) {
- my $Orig_Irssi_windows = \&Irssi::windows;
- local *Irssi::windows = sub () { grep { !_is_detached($_, $number) } $Orig_Irssi_windows->() };
- Irssi::command("ack" . (length $data ? " $data" : ""));
- } else {
- my $ignore_refnum = Irssi::settings_get_bool('active_window_ignore_refnum');
- my $max_win;
- my $max_act = 0;
- my $max_ref = 0;
- for my $rec (Irssi::windows) {
- next if _is_detached($rec, $number);
-
- # ignore refnum
- if ($ignore_refnum &&
- $rec->{data_level} > 0 && $max_act < $rec->{data_level}) {
- $max_act = $rec->{data_level};
- $max_win = $rec;
- }
-
- # windows with lower refnums break ties
- elsif (!$ignore_refnum &&
- $rec->{data_level} > 0 &&
- ($rec->{data_level} > $max_act ||
- ($rec->{data_level} == $max_act && $rec->{refnum} < $max_ref))) {
- $max_act = $rec->{data_level};
- $max_win = $rec;
- $max_ref = $rec->{refnum};
- }
- }
- $max_win->set_active if defined $max_win;
- }
-}
-
-sub refnum_changed {
- my ($win, $old_refnum) = @_;
- my @old_setting = split ' ', $S{detach};
- my @setting = map {
- my ($k, $v) = (split /(?:,(-?\d+))$/, $_)[0, 1];
- if ($k eq $old_refnum) {
- $win->{refnum} . (defined $v ? ",$v" : "")
- }
- else {
- $_
- }
- } @old_setting;
- if ("@old_setting" ne "@setting") {
- $S{detach} = "@setting";
- Irssi::settings_set_str(set 'detach', "@setting");
- &setup_changed;
- }
- else {
- &wl_changed;
- }
-}
-
-sub window_destroyed {
- my ($win) = @_;
- my @old_setting = split ' ', $S{detach};
- my @setting = grep {
- my ($k, $v) = (split /(?:,(-?\d+))$/, $_)[0, 1];
- if ($k eq $win->{refnum}) {
- 0;
- }
- else {
- 1;
- }
- } @old_setting;
- if ("@old_setting" ne "@setting") {
- $S{detach} = "@setting";
- Irssi::settings_set_str(set 'detach', "@setting");
- &setup_changed;
- }
- else {
- &awins_changed;
- }
-}
-
-sub stop_mouse_tracking {
- print STDERR "\e[?1005l\e[?1000l";
-}
-sub start_mouse_tracking {
- print STDERR "\e[?1000h\e[?1005h";
-}
-sub install_mouse {
- Irssi::command_bind('mouse_xterm' => 'mouse_xterm');
- Irssi::command('^bind meta-[M command mouse_xterm');
- Irssi::signal_add_first('gui key pressed' => 'mouse_key_hook');
- start_mouse_tracking();
-}
-sub uninstall_mouse {
- stop_mouse_tracking();
- Irssi::signal_remove('gui key pressed' => 'mouse_key_hook');
- Irssi::command('^bind -delete meta-[M');
- Irssi::command_unbind('mouse_xterm' => 'mouse_xterm');
-}
-
-sub awl_mouse_event {
- return if $VIEWER_MODE;
- if ((($_[0] == 3 and $_[3] == 0)
- || $_[0] == 64 || $_[0] == 65) and
- $_[1] == $_[4] and $_[2] == $_[5]) {
- my $top = lc $S{placement} eq 'top';
- my ($pos, $line) = @_[1 .. 2];
- unless ($top) {
- $line -= $screenHeight;
- $line += $currentLines;
- $line += $S{mouse_offset};
- }
- else {
- $line -= $S{mouse_offset};
- }
- $pos -= $sb_base_width_pre;
- return if $line < 0 || $line >= $currentLines;
- if ($_[0] == 64) {
- Irssi::command('window up');
- }
- elsif ($_[0] == 65) {
- Irssi::command('window down');
- }
- elsif (exists $mouse_coords{$line}{$pos}) {
- my $win = $mouse_coords{$line}{$pos};
- Irssi::command('window ' . $win);
- }
- Irssi::signal_stop;
- }
-}
-
-sub mouse_scroll_event {
- return unless $S{mouse_scroll};
- if (($_[3] == 64 or $_[3] == 65) and
- $_[0] == $_[3] and $_[1] == $_[4] and $_[2] == $_[5]) {
- my $cmd = 'scrollback goto ' . ($_[3] == 64 ? '-' : '+') . $S{mouse_scroll};
- Irssi::active_win->command($cmd);
- Irssi::signal_stop;
- }
- elsif ($_[0] == 64 or $_[0] == 65) {
- Irssi::signal_stop;
- }
-}
-
-sub mouse_escape {
- return unless $S{mouse_escape} > 0;
- if ($_[0] == 3) {
- my $tm = $S{mouse_escape};
- $tm *= 1000 if $tm < 1000;
- stop_mouse_tracking();
- Irssi::timeout_add_once($tm, 'start_mouse_tracking', undef);
- Irssi::signal_stop;
- }
-}
-
-sub UNLOAD {
- @actString = ();
- killOldStatus();
- stop_viewer() if $VIEWER_MODE;
- uninstall_mouse() if $MOUSE_ON;
-}
-
-sub addPrintTextHook { # update on print text
- return unless defined $^S;
- return if $BLOCK_ALL;
- return unless $print_text_activity;
- return if $_[0]->{level} == 262144 and $_[0]->{target} eq ''
- and !defined($_[0]->{server});
- &wl_changed;
-}
-
-sub block_event_window_change {
- Irssi::signal_stop;
-}
-
-sub update_awins {
- my @wins = Irssi::windows;
- local $BLOCK_ALL = 1;
- Irssi::signal_add_first('window changed' => 'block_event_window_change');
- my $bwin =
- my $awin = Irssi::active_win;
- my $lwin;
- my $defer_irssi_broken_last;
- unless ($wins[0]{refnum} == $awin->{refnum}) {
- # special case: more than 1 last win, so /win last;
- # /win last doesn't come back to the current window. eg. after
- # connect & autojoin; we can't handle this situation, bail out
- $defer_irssi_broken_last = 1;
- }
- else {
- $awin->command('window last');
- $lwin = Irssi::active_win;
- $lwin->command('window last');
- $defer_irssi_broken_last = $lwin->{refnum} == $bwin->{refnum};
- }
- my $awin_counter = 0;
- Irssi::signal_remove('window changed' => 'block_event_window_change');
- unless ($defer_irssi_broken_last) {
- # we need to keep the fe-windows code running here
- Irssi::signal_add_priority('window changed' => 'block_event_window_change', -99);
- %awins = %wnmap_exp = ();
- do {
- Irssi::active_win->command('window up');
- $awin = Irssi::active_win;
- $awins{$awin->{refnum}} = undef;
- ++$awin_counter;
- } until ($awin->{refnum} == $bwin->{refnum} || $awin_counter >= @wins);
- Irssi::signal_remove('window changed' => 'block_event_window_change');
-
- Irssi::signal_add_first('window changed' => 'block_event_window_change');
- for my $key (keys %wnmap) {
- next unless Irssi::window_find_name($key) || Irssi::window_find_item($key);
- $awin->command("window goto $key");
- my $cwin = Irssi::active_win;
- $wnmap_exp{ $cwin->{refnum} } = $wnmap{$key};
- $cwin->command('window last')
- if $cwin->{refnum} != $awin->{refnum};
- }
- for my $win (reverse @wins) { # restore original window order
- Irssi::active_win->command('window '.$win->{refnum});
- }
- $awin->command('window '.$lwin->{refnum}); # restore last win
- Irssi::active_win->command('window last');
- Irssi::signal_remove('window changed' => 'block_event_window_change');
- }
- $CHANGED{WL} = 1;
-}
-
-sub resizeTerm {
- if (defined (my $r = `stty size 2>/dev/null`)) {
- ($screenHeight, $screenWidth) = split ' ', $r;
- $CHANGED{SETUP} = 1;
- }
- else {
- $CHANGED{SIZE} = 1;
- }
-}
-
-sub awl_refresh {
- $globTime = undef;
- resizeTerm() if delete $CHANGED{SIZE};
- reset_awl() if delete $CHANGED{SETUP};
- update_awins() if delete $CHANGED{AWINS};
- update_wl() if delete $CHANGED{WL};
-}
-
-sub termsize_changed { $CHANGED{SIZE} = 1; &queue_refresh; }
-sub setup_changed { $CHANGED{SETUP} = 1; &queue_refresh; }
-sub awins_changed { $CHANGED{AWINS} = 1; &queue_refresh; }
-sub wl_changed { $CHANGED{WL} = 1; &queue_refresh; }
-
-sub window_changed {
- &awins_changed if $_[1];
-}
-
-sub queue_refresh {
- return if $BLOCK_ALL;
- Irssi::timeout_remove($globTime)
- if defined $globTime; # delay the update further
- $globTime = Irssi::timeout_add_once(GLOB_QUEUE_TIMER, 'awl_refresh', undef);
-}
-
-sub awl_init {
- termsize_changed();
- setup_changed();
- update_keymap();
- Irssi::timeout_remove($globTime)
- if defined $globTime;
- awl_refresh();
- termsize_changed();
-}
-
-sub runsub {
- my $cmd = shift;
- sub {
- my ($data, $server, $item) = @_;
- Irssi::command_runsub($cmd, $data, $server, $item);
- };
-}
-
-Irssi::signal_register({
- 'gui mouse' => [qw/int int int int int int/],
- });
-{ my $broken_expandos = (Irssi::version >= 20081128 && Irssi::version < 20110210)
- ? sub { my $x = shift; $x =~ s/\$\{cumode_space\}/ /; $x } : undef;
- Irssi::theme_register([
- map { $broken_expandos ? $broken_expandos->($_) : $_ }
- set 'display_nokey' => '$N${cumode_space}$H$C$S',
- set 'display_key' => '$Q${cumode_space}$H$C$S',
- set 'display_nokey_visible' => '%2$N${cumode_space}$H$C$S',
- set 'display_key_visible' => '%2$Q${cumode_space}$H$C$S',
- set 'display_nokey_active' => '%1$N${cumode_space}$H$C$S',
- set 'display_key_active' => '%1$Q${cumode_space}$H$C$S',
- set 'display_header' => '%8$C|${N}',
- set 'name_display' => '$0',
- set 'separator' => ' ',
- set 'separator2' => '',
- set 'abbrev_chars' => "~\x{301c}",
- set 'viewer_item_bg' => sb_format_expand('{sb_background}'),
- set 'title' => '\V'.setc().'\:',
- ]);
-}
-Irssi::settings_add_bool(setc, set 'prefer_name', 0); #
-Irssi::settings_add_int( setc, set 'hide_empty', 0); #
-Irssi::settings_add_int( setc, set 'hide_data', 0); #
-Irssi::settings_add_str( setc, set 'detach', ''); #
-Irssi::settings_add_int( setc, set 'detach_data', -3); #
-Irssi::settings_add_bool(setc, set 'detach_aht', 0); #
-Irssi::settings_add_int( setc, set 'hide_name_data', 0); #
-Irssi::settings_add_int( setc, set 'maxlines', 9); #
-Irssi::settings_add_int( setc, set 'maxcolumns', 4); #
-Irssi::settings_add_int( setc, set 'block', 15); #
-Irssi::settings_add_bool(setc, set 'sbar_maxlength', 1); #
-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', 1); #
-Irssi::settings_add_bool(setc, set 'viewer', 1); #
-Irssi::settings_add_str( setc, set 'shared_sbar', 'OFF'); #
-Irssi::settings_add_bool(setc, set 'mouse', 0); #
-Irssi::settings_add_str( setc, set 'path', Irssi::get_irssi_dir . '/_windowlist'); #
-Irssi::settings_add_str( setc, set 'custom_xform', ''); #
-Irssi::settings_add_time(setc, set 'last_line_shade', '0'); #
-Irssi::settings_add_int( setc, set 'mouse_offset', 1); #
-Irssi::settings_add_int( setc, 'mouse_scroll', 3); #
-Irssi::settings_add_int( setc, 'mouse_escape', 1); #
-Irssi::settings_add_str( setc, 'banned_channels', '');
-Irssi::settings_add_bool(setc, 'banned_channels_on', 1);
-Irssi::settings_add_str( setc, 'fancy_abbrev', 'fancy'); #
-Irssi::settings_add_bool(setc, set 'no_mode_hint', 0); #
-Irssi::settings_add_bool(setc, set 'viewer_launch', 1); #
-Irssi::settings_add_str( setc, set 'viewer_launch_env', ''); #
-Irssi::settings_add_str( setc, set 'viewer_tmux_position', 'left'); #
-Irssi::settings_add_str( setc, set 'viewer_xwin_command', 'xterm +sb -e %A'); #
-Irssi::settings_add_str( setc, set 'viewer_custom_command', ''); #
-
-Irssi::signal_add_last({
- 'setup changed' => 'setup_changed',
- 'print text' => 'addPrintTextHook',
- 'terminal resized' => 'termsize_changed',
- 'setup reread' => 'screenFullRedraw',
- 'window hilight' => 'wl_changed',
- 'command format' => 'wl_changed',
-});
-Irssi::signal_add({
- 'window changed' => 'window_changed',
- 'window item changed' => 'wl_changed',
- 'window changed automatic' => 'window_changed',
- 'window created' => 'awins_changed',
- 'window destroyed' => 'window_destroyed',
- 'window name changed' => 'wl_changed',
- 'window refnum changed' => 'refnum_changed',
-});
-Irssi::signal_add_last('gui mouse' => 'mouse_escape');
-Irssi::signal_add_last('gui mouse' => 'mouse_scroll_event');
-Irssi::signal_add_last('gui mouse' => 'awl_mouse_event');
-Irssi::command_bind( setc() => runsub(setc()) );
-Irssi::command_bind( setc() . ' redraw' => 'screenFullRedraw' );
-Irssi::command_bind( setc() . ' restart' => 'restartViewerServer' );
-Irssi::command_bind( setc() . ' attach' => 'unhide_window' );
-Irssi::command_bind( setc() . ' detach' => 'hide_window' );
-Irssi::command_bind( setc() . ' ack' => 'ack_window' );
-
-{
- my $l = set 'shared';
- {
- no strict 'refs';
- *{$l} = $awl_shared_empty;
- }
- Irssi::statusbar_item_register($l, '$0', $l);
-}
-
-awl_init();
-
-# Mouse script based on irssi mouse patch by mirage
-{ my $mouse_status = -1; # -1:off 0,1,2:filling mouse_combo
- my @mouse_combo; # 0:button 1:x 2:y
- my @mouse_previous; # previous contents of mouse_combo
-
- sub mouse_xterm_off {
- $mouse_status = -1;
- }
- sub mouse_xterm {
- $mouse_status = 0;
- Irssi::timeout_add_once(10, 'mouse_xterm_off', undef);
- }
-
- sub mouse_key_hook {
- my ($key) = @_;
- if ($mouse_status != -1) {
- if ($mouse_status == 0) {
- @mouse_previous = @mouse_combo;
- #if @mouse_combo && $mouse_combo[0] < 64;
- }
- $mouse_combo[$mouse_status] = $key - 32;
- $mouse_status++;
- if ($mouse_status == 3) {
- $mouse_status = -1;
- # match screen coordinates
- $mouse_combo[1]--;
- $mouse_combo[2]--;
- Irssi::signal_emit('gui mouse', @mouse_combo[0 .. 2], @mouse_previous[0 .. 2]);
- }
- Irssi::signal_stop;
- }
- }
-}
-
-sub string_LCSS {
- my $str = join "\0", @_;
- (sort { length $b <=> length $a } $str =~ /(?=(.+).*\0.*\1)/g)[0]
-}
-
-# workaround for issue #271
-{ package Irssi::Nick }
-
-# workaround for issue #572
-@Irssi::UI::Exec::ISA = 'Irssi::Windowitem'
- if Irssi::version >= 20140822 && Irssi::version <= 20161101 && !@Irssi::UI::Exec::ISA;
-
-UNITCHECK
-{ package AwlViewer;
- use strict;
- use warnings;
- no warnings 'redefine';
- use Encode;
- use IO::Socket::UNIX;
- use IO::Select;
- use List::Util qw(max);
- use constant BLOCK_SIZE => 1024;
- use constant RECONNECT_TIME => 5;
-
- my $sockpath;
-
- our $VERSION = '0.8';
-
- our ($got_int, $resized, $timeout);
-
- my %vars;
- my (%c2w, @seqlist);
- my %mouse_coords;
- my (@mouse, @last_mouse);
- my ($err, $sock, $loop);
- my ($keybuf, $rcvbuf);
- my @screen;
- my ($screenHeight, $screenWidth);
- my ($disp_update, $fs_open, $one_shot_integration, $one_shot_resize);
- my $integration_position;
- my $show_title_bar;
-
- sub connect_it {
- $sock = IO::Socket::UNIX->new(
- Type => SOCK_STREAM,
- Peer => $sockpath,
- );
- unless ($sock) {
- $err = $!;
- return;
- }
- $sock->blocking(0);
- $loop->add($sock);
- }
-
- sub remove_conn {
- my $fh = shift;
- $loop->remove($fh);
- $fh->close;
- $sock = undef;
- %vars = ();
- @screen = ();
- }
-
- { package Terminfo; # xterm
- sub civis { "\e[?25l" }
- sub sc { "\e7" }
- sub cup { "\e[" . ($_[0] + 1) . ';' . ($_[1] + 1) . 'H' }
- sub el { "\e[K" }
- sub rc { "\e8" }
- sub cnorm { "\e[?25h" }
- sub setab { "\e[4" . $_[0] . 'm' }
- sub setaf { "\e[3" . $_[0] . 'm' }
- sub setaf16 { "\e[9" . $_[0] . 'm' }
- sub setab16 { "\e[10" . $_[0] . 'm' }
- sub setaf256 { "\e[38;5;" . $_[0] . 'm' }
- sub setab256 { "\e[48;5;" . $_[0] . 'm' }
- sub setafrgb { "\e[38;2;" . $_[0] . ';' . $_[1] . ';' . $_[2] . 'm' }
- sub setabrgb { "\e[48;2;" . $_[0] . ';' . $_[1] . ';' . $_[2] . 'm' }
- sub sgr0 { "\e[0m" }
- sub bold { "\e[1m" }
- sub it { "\e[3m" }
- sub ul { "\e[4m" }
- sub blink { "\e[5m" }
- sub rev { "\e[7m" }
- sub op { "\e[39;49m" }
- sub exit_bold { "\e[22m" }
- sub exit_it { "\e[23m" }
- sub exit_ul { "\e[24m" }
- sub exit_blink { "\e[25m" }
- sub exit_rev { "\e[27m" }
- sub smcup { "\e[?1049h" }
- sub rmcup { "\e[?1049l" }
- sub smmouse { "\e[?1000h\e[?1005h" }
- sub rmmouse { "\e[?1005l\e[?1000l" }
- }
-
- sub init {
- $sockpath = shift // "$ENV{HOME}/.irssi/_windowlist";
- STDOUT->autoflush(1);
- printf "\r%swaiting for %s...", Terminfo::sc, $::IRSSI{name};
-
- `stty -icanon -echo`;
-
- $loop = IO::Select->new;
- STDIN->blocking(0);
- $loop->add(\*STDIN);
-
- $SIG{INT} = sub {
- $got_int = 1
- };
- $SIG{WINCH} = sub {
- $resized = 1
- };
-
- $resized = 3;
-
- $disp_update = 2;
-
- $show_title_bar = 1;
- }
-
- sub enter_fs {
- return if $fs_open;
- safe_print(Terminfo::rc, Terminfo::smcup, Terminfo::civis, Terminfo::smmouse);
- $fs_open = 1;
- }
-
- sub leave_fs {
- return unless $fs_open;
- safe_print(Terminfo::rmmouse, Terminfo::cnorm, Terminfo::rmcup);
- safe_print(sprintf "\r%swaiting for %s...", Terminfo::sc, $::IRSSI{name}) if $_[0];
-
- $fs_open = 0;
- }
-
- sub end_prog {
- leave_fs();
- STDIN->blocking(1);
- `stty sane`;
- printf "\r%s%sthanks for using %s\n", Terminfo::rc, Terminfo::el, $::IRSSI{name};
- }
-
- sub safe_print {
- my $st = STDIN->blocking(1);
- print @_;
- STDIN->blocking($st);
- }
-
- sub safe_qx {
- my $st = STDIN->blocking(1);
- my $ret = `$_[0]`;
- STDIN->blocking($st);
- $ret
- }
-
- sub safe_print_sock {
- return unless $sock;
- my $was = $sock->blocking(1);
- $sock->print(@_);
- $sock->blocking($was);
- }
-
- sub process_recv {
- my $need = 0;
- while ($rcvbuf =~ s/\n(.+)_BEGIN\n((?: .*\n)*)\1_END\n//) {
- my $var = lc $1;
- my $data = $2;
- my @data = split "\n ", "\n$data ", -1;
- shift @data; pop @data;
- my $itembg = $vars{itembg};
- if ($var =~ s/list$//) {
- $vars{$var} = \@data;
- }
- elsif ($var =~ s/map$//) {
- $vars{$var} = +{ @data };
- }
- else {
- $vars{$var} = join "\n", @data;
- }
- $need = 1 if $var eq 'win';
- $need = 1 if $var eq 'redraw' && $vars{$var};
- if (($itembg//'') ne ($vars{itembg}//'')) {
- $need = $vars{redraw} = 1;
- }
- _build_keymap() if $var eq 'key2';
- }
- $need
- }
-
- { my %ansi_table;
- my ($i, $j, $k) = (0, 0, 0);
- my %term_state;
- sub reset_term_state { my %old_term = %term_state; %term_state = (); %old_term }
- sub set_term_state { my %old_term = %term_state; %term_state = @_; %old_term }
- %ansi_table = (
- # fe-common::core::formats.c:format_expand_styles
- (map { my $t = $i++; ($_ => sub { my $n = $term_state{hicolor} ? \&Terminfo::setab16 : \&Terminfo::setab;
- $n->($t) }) } (split //, '01234567' )),
- (map { my $t = $j++; ($_ => sub { my $n = $term_state{hicolor} ? \&Terminfo::setaf16 : \&Terminfo::setaf;
- $n->($t) }) } (split //, 'krgybmcw' )),
- (map { my $t = $k++; ($_ => sub { my $n = $term_state{hicolor} ? \&Terminfo::setaf : \&Terminfo::setaf16;
- $n->($t) }) } (split //, 'KRGYBMCW')),
- # reset
- n => sub { $term_state{hicolor} = 0; my $r = Terminfo::op;
- for (qw(blink rev bold)) {
- $r .= Terminfo->can("exit_$_")->() if delete $term_state{$_};
- }
- {
- local $ansi_table{n} = $ansi_table{N};
- $r .= formats_to_ansi_basic($vars{itembg});
- }
- $r
- },
- N => sub { reset_term_state(); Terminfo::sgr0 },
- # flash/bright
- F => sub { my $n = 'blink'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # reverse
- 8 => sub { my $n = 'rev'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # bold
- "_" => sub { my $n = 'bold'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # underline
- U => sub { my $n = 'ul'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # italic
- I => sub { my $n = 'it'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # bold, used as colour modifier if AWL_HI9 is set
- 9 => $ENV{AWL_HI9} ? sub { $term_state{hicolor} ^= 1; '' }
- : sub { my $n = 'bold'; my $e = ($term_state{$n} ^= 1) ? $n : "exit_$n"; Terminfo->can($e)->() },
- # delete other stuff
- (map { $_ => sub { '' } } (split //, ':|>#[')),
- # escape
- (map { my $close = $_; $_ => sub { $close } } (split //, '{}%')),
- );
- for my $base (0 .. 15) {
- my $close = $base;
- my $idx = ($close&8) | ($close&4)>>2 | ($close&2) | ($close&1)<<2;
- $ansi_table{ (sprintf "x0%x", $close) } =
- $ansi_table{ (sprintf "x0%X", $close) } =
- sub { Terminfo::setab256($idx) };
- $ansi_table{ (sprintf "X0%x", $close) } =
- $ansi_table{ (sprintf "X0%X", $close) } =
- sub { Terminfo::setaf256($idx) };
- }
- for my $plane (1 .. 6) {
- for my $coord (0 .. 35) {
- my $close = 16 + ($plane-1) * 36 + $coord;
- my $ch = $coord < 10 ? $coord : chr( $coord - 10 + ord 'a' );
- $ansi_table{ "x$plane$ch" } =
- $ansi_table{ "x$plane\U$ch" } =
- sub { Terminfo::setab256($close) };
- $ansi_table{ "X$plane$ch" } =
- $ansi_table{ "X$plane\U$ch" } =
- sub { Terminfo::setaf256($close) };
- }
- }
- for my $gray (0 .. 23) {
- my $close = 232 + $gray;
- my $ch = chr( $gray + ord 'a' );
- $ansi_table{ "x7$ch" } =
- $ansi_table{ "x7\U$ch" } =
- sub { Terminfo::setab256($close) };
- $ansi_table{ "X7$ch" } =
- $ansi_table{ "X7\U$ch" } =
- sub { Terminfo::setaf256($close) };
- }
- # fe-windows.c:color_24bit_256
- my $cc = sub {
- use integer;
-
- my $cstep_size = 40;
- my $cstep_start = 0x5f;
-
- my $gstep_size = 10;
- my $gstep_start = 0x08;
-
- my @dist = (0) x 3;
- my @r; my @gr;
-
- for (my $i = 0; $i < 3; ++$i) {
- my $n = $_[$i];
- $gr[$i] = -1;
- if ($n < $cstep_start /2) {
- $r[$i] = 0;
- $dist[$i] = -$cstep_size/2;
- }
- else {
- $r[$i] = 1+(($n-$cstep_start + $cstep_size /2)/$cstep_size);
- $dist[$i] = (($n-$cstep_start + $cstep_size /2)% $cstep_size - $cstep_size/2);
- }
- if ($n < $gstep_start /2) {
- $gr[$i] = -1;
- }
- else {
- $gr[$i] = (($n-$gstep_start + $gstep_size /2)/$gstep_size);
- }
- }
- if ($r[0] == $r[1] && $r[1] == $r[2] &&
- 4*abs($dist[0]) < $gstep_size && 4*abs($dist[1]) < $gstep_size && 4*abs($dist[2]) < $gstep_size) {
- # skip gray detection
- }
- else {
- my $j = $r[1] == $r[2] ? 0 : 1;
- if (($r[0] == $r[1] || $r[$j] == $r[2]) && abs($r[$j]-$r[($j+1)% 3]) <= 1) {
- my $k = $gr[1] == $gr[2] ? 0 : 1;
- if (($gr[0] == $gr[1] || $gr[$k] == $gr[2]) && abs($gr[$k]-$gr[($k+1)% 3]) <= 2) {
- if ($gr[$k] < 0) {
- $r[0] = $r[1] = $r[2] = 0;
- }
- elsif ($gr[$k] > 23) {
- $r[0] = $r[1] = $r[2] = 5;
- }
- else {
- $r[0] = 6;
- $r[1] = ($gr[$k] / 6);
- $r[2] = $gr[$k]% 6;
- }
- }
- }
- }
- return 16 + $r[0]*36 + $r[1] * 6 + $r[2];
- };
- $ansi_table{z} = sub {
- my ($r, $g, $b) = map { hex } unpack '(A2)*', $_[0];
- $vars{tc} eq 'ON' ? Terminfo::setabrgb($r, $g, $b) : Terminfo::setab256($cc->($r, $g, $b));
- };
- $ansi_table{Z} = sub {
- my ($r, $g, $b) = map { hex } unpack '(A2)*', $_[0];
- $vars{tc} eq 'ON' ? Terminfo::setafrgb($r, $g, $b) : Terminfo::setaf256($cc->($r, $g, $b));
- };
- sub formats_to_ansi_basic {
- my $o = shift;
- $o =~ s{(%((Z|z)(......)|X..|x..|.))}{
- if ($ansi_table{$2}) { $ansi_table{$2}->() }
- elsif ($ansi_table{$3}) { $ansi_table{$3}->($4) }
- else { $1 }
- }gex;
- $o
- }
- }
-
- sub _header {
- my $str = $vars{title} // uc ::setc();
- my $ccs = qr/%(?:Z(?:[0-9A-F]{6})|X(?:[1-6][0-9A-Z]|7[A-X])|[0-9BCFGIKMNRUWY_])/i;
- (my $stripstr = $str) =~ s/($ccs)//g;
- my $space = int( ((abs $vars{block}) - length $stripstr) / (1 + length $stripstr));
- if ($space > 0) {
- my $ss = ' ' x $space;
- my @x = $str =~ /((?:$ccs)*\X(?:(?:$ccs)*$)?)/g;
- $str = join $ss, '', @x, '';
- }
- ($stripstr = $str) =~ s/($ccs)//g;
- my $pad = max 0, (abs $vars{block}) - length $stripstr;
- $str = ' ' x ($pad/2) . $str . ' ' x ($pad/2 + $pad%2);
- $str
- }
-
- sub _add_item {
- my ($i, $j, $c, $wi, $screen, $mouse) = @_;
- $screen->[$i][$j] = "%N%n$wi";
- if (exists $vars{mouse}{$c - 1}) {
- $mouse->[$i][$j] = $vars{mouse}{$c - 1};
- }
- }
- sub update_screen {
- $disp_update = 0;
- unless ($sock && exists $vars{seplen} && exists $vars{block}) {
- leave_fs(1);
- return;
- }
- enter_fs();
- @screen = () if delete $vars{redraw};
- %mouse_coords = ();
- my $ncols = ($vars{seplen} + abs $vars{block}) ?
- int( ($screenWidth + $vars{seplen}) / ($vars{seplen} + abs $vars{block}) ) : 0;
- my $xenl = ($vars{seplen} + abs $vars{block})
- && $ncols > int( ($screenWidth + $vars{seplen} - 1) / ($vars{seplen} + abs $vars{block}) );
- my $nrows = $screenHeight - $vars{ha};
- my @wi = @{$vars{win}//[]};
- my $max_items = $ncols * $nrows;
- my $c = $show_title_bar ? 1 : 0;
- my $items = @wi + $c;
- my $titems = $items > $max_items ? $max_items : $items;
- my $i = 0;
- my $j = 0;
- my @new_screen;
- my @new_mouse;
- $new_screen[0][0] = _header() #. ' ' x $vars{seplen}
- if $show_title_bar;
- unless ($nrows > $ncols) { # line layout
- ++$j if $show_title_bar;
- for my $wi (@wi) {
- if ($j >= $ncols) {
- $j = 0;
- ++$i;
- }
- last if $i >= $nrows;
- _add_item($i, $j, $show_title_bar ? $c : $c + 1,
- $wi, \@new_screen, \@new_mouse);
- if ($c + 1 < $titems && $j + 1 < $ncols) {
- $new_screen[$i][$j] .= $vars{separator};
- }
- ++$j;
- ++$c;
- }
- }
- else { # column layout
- ++$i if $show_title_bar;
- for my $wi (@wi) {
- if ($i >= $nrows) {
- $i = 0;
- ++$j;
- }
- last if $j >= $ncols;
- _add_item($i, $j, $show_title_bar ? $c : $c + 1,
- $wi, \@new_screen, \@new_mouse);
- if ($c + $nrows < $titems) {
- $new_screen[$i][$j] .= $vars{separator};
- }
- ++$i;
- ++$c;
- }
- }
- my $step = $vars{seplen} + abs $vars{block};
- $i = 0;
- my $str = Terminfo::sc . Terminfo::sgr0;
- for (my $i = 0; $i < @new_screen; ++$i) {
- for (my $j = 0; $j < @{$new_screen[$i]}; ++$j) {
- if (defined $new_mouse[$i] && defined $new_mouse[$i][$j]) {
- my $from = $j * $step;
- $mouse_coords{$i}{$_} = $new_mouse[$i][$j]
- for $from .. $from + abs $vars{block};
- }
- next if defined $screen[$i] && defined $screen[$i][$j]
- && $screen[$i][$j] eq $new_screen[$i][$j];
- $str .= Terminfo::cup($i, $j * $step)
- . formats_to_ansi_basic($new_screen[$i][$j])
- . Terminfo::sgr0;
- $str .= Terminfo::el if $j == $#{$new_screen[$i]} && (!$xenl || $j + 1 != $ncols);
- }
- }
- for (@new_screen .. $screenHeight - 1) {
- if (!@screen || defined $screen[$_]) {
- $str .= Terminfo::cup($_, 0) . Terminfo::sgr0 . Terminfo::el;
- }
- }
- $str .= Terminfo::rc;
- safe_print $str;
- @screen = @new_screen;
- }
-
- sub handle_resize {
- if (defined (my $r = safe_qx('stty size'))) {
- ($screenHeight, $screenWidth) = split ' ', $r;
- $resized = 0;
- @screen = ();
- $disp_update = 1;
- if ($one_shot_integration == 2) {
- $one_shot_resize--;
- }
- }
- else {
- }
- }
-
- sub _build_keymap {
- %c2w = reverse( %{$vars{key}}, %{$vars{key2}} );
- if (!grep { /^[+-]./ } keys %c2w) {
- %c2w = (%c2w, map { ("-$_" => $c2w{$_}) } grep { !/^\^./ } keys %c2w);
- }
- %c2w = map {
- my $key = $_;
- s{^(-)?(\+)?(\^)?(.)}{
- join '', (
- ($1 ? "\e" : ''),
- ($2 ? "\e\e" : ''),
- ($3 ? "$4"^"@" : $4)
- )
- }e;
- $_ => $c2w{$key}
- } keys %c2w;
- @seqlist = sort { length $b <=> length $a } keys %c2w;
- }
-
- sub _match_tmux {
- length $ENV{TMUX} && exists $vars{irssienv}{tmux_srv} && length $vars{irssienv}{tmux_pane}
- && $ENV{TMUX} eq $vars{irssienv}{tmux_srv}
- }
-
- sub process_keys {
- Encode::_utf8_on($keybuf);
- my $win;
- my $use_mouse;
- my $maybe;
- KEY: while (length $keybuf && !$maybe) {
- $maybe = 0;
- if ($keybuf =~ s/^\e\[M(.)(.)(.)//) {
- @last_mouse = @mouse;# if @mouse && $mouse[0] < 64;
- @mouse = map { -32 + ord } ($1, $2, $3);
- $use_mouse = 1;
- next KEY;
- }
- for my $s (@seqlist) {
- if ($keybuf =~ s/^\Q$s//) {
- $win = $c2w{$s};
- $use_mouse = 0;
- next KEY;
- }
- elsif (length $keybuf < length $s && $s =~ /^\Q$keybuf/) {
- $maybe = 1;
- }
- }
- unless ($maybe) {
- substr $keybuf, 0, 1, '';
- }
- }
- if ($use_mouse && @mouse && @last_mouse &&
- $mouse[2] == $last_mouse[2] &&
- $mouse[1] == $last_mouse[1] &&
- ($mouse[0] == 3 || $mouse[0] == 64 || $mouse[0] == 65)) {
- if ($mouse[0] == 64) {
- $win = 'up';
- }
- elsif ($mouse[0] == 65) {
- $win = 'down';
- }
- elsif (exists $mouse_coords{$mouse[2] - 1}{$mouse[1] - 1}) {
- $win = $mouse_coords{$mouse[2] - 1}{$mouse[1] - 1};
- }
- elsif ($mouse[2] == 1 && $mouse[1] <= abs $vars{block}) {
- $win = $last_mouse[0] != 0 ? 'last' : 'active';
- }
- else {
- }
- }
- if (defined $win) {
- $win =~ s/^_//;
- safe_print_sock("$win\n");
- if (!exists $ENV{AWL_AUTOFOCUS} || $ENV{AWL_AUTOFOCUS}) {
- if (_match_tmux()) {
- safe_qx("tmux selectp -t $vars{irssienv}{tmux_pane} 2>&1");
- }
- elsif (exists $vars{irssienv}{xwinid}) {
- safe_qx("wmctrl -ia $vars{irssienv}{xwinid} 2>/dev/null");
- }
- }
- }
- Encode::_utf8_off($keybuf);
- }
-
- sub check_integration {
- return unless $vars{irssienv};
- return unless $sock && exists $vars{seplen} && exists $vars{block};
- if ($one_shot_integration == 1) {
- my $nrows = $screenHeight - $vars{ha};
- my $ncols = ($vars{seplen} + abs $vars{block}) ? int( ($screenWidth + $vars{seplen}) / ($vars{seplen} + abs $vars{block}) ) : 0;
- my $items = ($show_title_bar ? 1 : 0) + @{$vars{win}//[]};
- my $dcols_required = $nrows ? int($items/$nrows) + !!($items%$nrows) : 0;
- my $rows_required = $ncols ? int($items/$ncols) + !!($items%$ncols) : 0;
- $rows_required = abs $vars{ml}
- if ($vars{ml} < 0 || ($vars{ml} > 0 && $rows_required > $vars{ml}));
- $dcols_required = abs $vars{mc}
- if ($vars{mc} < 0 || ($vars{mc} > 0 && $dcols_required > $vars{mc}));
- my $rows = $rows_required + $vars{ha};
- my $cols = ($dcols_required * ($vars{seplen} + abs $vars{block})) - $vars{seplen};
- if (_match_tmux()) {
- # int( ($screenWidth + $vars{seplen}) / ($vars{seplen} + abs $vars{block}) );
- my ($pos_flag, $before);
- if ($integration_position eq 'left') {
- $pos_flag = 'h';
- $before = 1;
- }
- elsif ($integration_position eq 'top') {
- $pos_flag = 'v';
- $before = 1;
- }
- elsif ($integration_position eq 'right') {
- $pos_flag = 'h';
- }
- else {
- $pos_flag = 'v';
- }
- my @cmd = "joinp -d$pos_flag -s $ENV{TMUX_PANE} -t $vars{irssienv}{tmux_pane}";
- push @cmd, "swapp -d -t $ENV{TMUX_PANE} -s $vars{irssienv}{tmux_pane}"
- if $before;
- $cols = max($cols, 2);
- $rows = max($rows, 2);
-
- safe_qx("tmux " . (join " \\\; ", @cmd) . " 2>&1");
- }
- else {
- $resized = 1;
- #safe_qx("resize -s $screenHeight $cols 2>&1")
- # if $cols > 0;
- }
- $one_shot_integration++;
- if ($resized == 1) {
- handle_resize();
- resize_integration();
- }
- }
- elsif ($one_shot_integration == 2) {
- resize_integration(1);
- }
- }
-
- sub resize_integration {
- return unless $one_shot_integration;
- return unless ($one_shot_resize//0) < 0 || shift;
- return if ($one_shot_resize//0) > 0;
-
- my $nrows = $screenHeight - $vars{ha};
- my $ncols = ($vars{seplen} + abs $vars{block}) ? int( ($screenWidth + $vars{seplen}) / ($vars{seplen} + abs $vars{block}) ) : 0;
- my $items = ($show_title_bar ? 1 : 0) + @{$vars{win}//[]};
- my $dcols_required = $nrows ? (int($items/$nrows) + !!($items%$nrows)) : 0;
- my $rows_required = $ncols ? int($items/$ncols) + !!($items%$ncols) : 0;
- $rows_required = abs $vars{ml}
- if ($vars{ml} < 0 || ($vars{ml} > 0 && $rows_required > $vars{ml}));
- $dcols_required = abs $vars{mc}
- if ($vars{mc} < 0 || ($vars{mc} > 0 && $dcols_required > $vars{mc}));
- my $rows = $rows_required + $vars{ha};
- my $cols = ($dcols_required * ($vars{seplen} + abs $vars{block})) - $vars{seplen};
- if (_match_tmux()) {
- my $pos_flag;
- my $before = 0;
- if ($integration_position eq 'left') {
- $pos_flag = 'h';
- $before = 1;
- }
- elsif ($integration_position eq 'top') {
- $pos_flag = 'v';
- $before = 1;
- }
- elsif ($integration_position eq 'right') {
- $pos_flag = 'h';
- }
- else {
- $pos_flag = 'v';
- }
- my @cmd;
- # hard tmux limits
- $cols = max($cols, 2);
- $rows = max($rows, 2);
- if ($pos_flag eq 'h' && $cols != $screenWidth) {
- my $change = $screenWidth - $cols;
- my $dir = ($before ^ ($change<0)) ? 'L' : 'R';
- push @cmd, "resizep -$dir -t $ENV{TMUX_PANE} @{[abs $change]}";
- #push @cmd, "resizep -x $cols -t $ENV{TMUX_PANE}";
- $one_shot_resize = 1;
- }
- if ($pos_flag eq 'v' && $rows != $screenHeight) {
- #push @cmd, "resizep -y $rows -t $ENV{TMUX_PANE}";
- my $change = $screenHeight - $rows;
- my $dir = ($before ^ ($change<0)) ? 'U' : 'D';
- push @cmd, "resizep -$dir -t $ENV{TMUX_PANE} @{[abs $change]}";
- $one_shot_resize = 1;
- }
-
- safe_qx("tmux " . (join " \\\; ", @cmd) . " 2>&1")
- if @cmd;
- }
- else {
- $cols = max($cols, 1);
- $rows = max($rows, 1);
- unless ($nrows > $ncols) { # line layout
- if ($rows != $screenHeight) {
- safe_qx("resize -s $rows $screenWidth 2>&1");
- $one_shot_resize = 1;
- }
- }
- else {
- if ($cols != $screenWidth) {
- safe_qx("resize -s $screenHeight $cols 2>&1");
- $one_shot_resize = 1;
- }
- }
- }
- if ($resized == 1) {
- handle_resize();
- }
- }
-
- sub init_integration {
- return unless $one_shot_integration;
- if (_match_tmux()) {
- }
- else {
- }
- safe_print("\e]2;".(uc ::setc())."\e\\");
- }
-
- sub main {
- require Getopt::Std;
- my %opts;
- Getopt::Std::getopts('1p:', \%opts);
- my $one_shot = $opts{1};
- $integration_position = $opts{p};
- $one_shot_integration = 0+!!$one_shot;
- #shift if @_ && $_[0] eq '--';
- &init;
- $show_title_bar = 0;
- init_integration();
- until ($got_int) {
- $timeout = undef;
- if ($resized) {
- if ($resized == 1) {
- $timeout = 1;
- $resized++;
- }
- else {
- handle_resize();
- resize_integration();
- }
- }
- unless ($sock || $timeout) {
- connect_it();
- }
- $timeout ||= RECONNECT_TIME unless $sock;
- update_screen() if $disp_update;
- SELECT: while (my @read = $loop->can_read($timeout)) {
- for my $fh (@read) {
- if ($fh == \*STDIN) {
- if (read STDIN, my $buf, BLOCK_SIZE) {
- do {
- $keybuf .= $buf;
- } while read STDIN, $buf, BLOCK_SIZE;
- }
- else {
- $got_int = 1;
- last SELECT;
- }
- }
- else {
- if ($fh->read(my $buf, BLOCK_SIZE)) {
- do {
- $rcvbuf .= $buf;
- } while $fh->read($buf, BLOCK_SIZE);
- }
- else {
- $disp_update = 1;
- remove_conn($fh);
- if ($one_shot) {
- $got_int = 1;
- last SELECT;
- }
- $timeout ||= RECONNECT_TIME;
- }
- }
- }
- $disp_update |= process_recv() if length $rcvbuf;
- process_keys() if length $keybuf;
- check_integration() if $one_shot;
- update_screen() if $disp_update;
- }
- continue {
- }
- }
- end_prog();
- }
-}
-
-1;
-
-# Changelog
-# =========
-# 1.9
-# - add %Z support to viewer
-#
-# 1.8
-# - use string_width in Irssi 1.2.0
-#
-# 1.7
-# - fix crash on invalid /set awl_sort, introduced in 1.6, reported by
-# tpetazzoni
-# - delay viewer initialisation
-# - improve race condition on tmux resize integration
-#
-# 1.6
-# - add detach setting to hide windows
-# - fix race condition when loading the script, reported by madduck
-# - improve compatibility with irssi 1.2
-# - add special value lru to awl_sort to sort windows by usage
-#
-# 1.5
-# - improve compat. with sideways splits
-#
-# 1.4
-# - fix line wrapping in some themes, reported by justanotherbody
-# - fix named window key detection, reported by madduck
-# - make title (in viewer and shared_sbar) configurable
-#
-# 1.3
-# - workaround for irssi issue #572
-#
-# 1.2
-# - new format to choose abbreviation character
-#
-# 1.1
-# - infinite loop on shortening certain window names reported by Kalan
-#
-# 1.0
-# - new awl_viewer_launch setting and an array of related settings
-# - fixed regression bug /exec -interactive
-# - fixed some warnings in perl 5.10 reported by kl3
-# - workaround for crash due to infinite recursion in irssi's Perl
-# error handling
-#
-# 0.9
-# - fix endless loop in awin detection code!
-# - correct colour swap in awl_viewer
-# - fix passing of alternate socket path to the viewer
-# - potential undefinedness in mouse refnum hinted at by Canopus
-# - fixed regression bug /exec -interactive
-# - add case-insensitive modifier to awl_sort
-# - run custom_xform on awl_prefer_name also
-# - avoid inconsistent active window state after awin detection
-# reported by ss
-# - revert %9-hack in the viewer prompted by discussion with pierrot
-# - fix new warning in perl 5.22
-#
-# 0.8
-# - replace fifo mode with external viewer script
-# - remove bundled cpan modules
-# - work around bogus irssi warning
-# - improve mouse support
-# - workaround for broken cumode in irssi 0.8.15
-# - fix handling of non-meta windows (uninitialized warning)
-# - add 256 colour support, strip true colour codes
-# - fix totally bogus $N padding reported by Ed S.
-# - make /window goto #name mappings work but ignore non-existant ones
-# - improve incomplete reads reported by bcode
-# - fix single % in awl_viewer reported by bcode
-# - add support for key bindings by nike and ferret
-# - coerce utf8 key binds
-# - add settings: custom_xform, last_line_shade, hide_name_data
-# - abbreviations were broken in some cases
-# - fix some misuse of / as cmdchar in mouse script reported by bcode
-# - add shared status bar mode
-# - ${type} variables for custom_xform setting
-# - crash if custom_xform had runtime error
-# - update sorting documentation
-# - fix odd case in size calculation noted by lasers
-# - add missing font styles to the viewer reported by ishanyx
-# - add italic
-#
-# 0.7g
-# - remove screen support and replace it with fifo support
-# - add double-width support to the shortener
-# - correct documentation regarding $T vs. display_header
-# - add missing refresh for window item changed (thanks vague)
-# - add visible windows
-# - add exemptions for active window
-# - workaround for hiding the window changes from trackbar
-# - hack to force 16colours in screen mode
-# - remember last window (reported by earthnative)
-# - wrong window focus on new queries (reported by emsid)
-# - dataloss bug on trying to remember last window
-#
-# 0.6d+
-# - add support for network headers
-# - fixed regression bug /exec -interactive
-#
-# 0.6ca+
-# - add screen support (from nicklist.pl)
-# - names can now have a max length and window names can be used
-# - fixed a bug with block display in screen mode and status bar mode
-# - added space handling to ir_fe and removed it again
-# - now handling formats on my own
-# - started to work on $tag display
-# - added warning about missing sb_act_none abstract leading to
-# - display*active settings
-# - added warning about the bug in awl_display_(no)key_active settings
-# - mouse hack
-#
-# 0.5d
-# - add setting to also hide the last status bar if empty (awl_all_disable)
-# - reverted to old utf8 code to also calculate broken utf8 length correctly
-# - simplified dealing with status bars in wlreset
-# - added a little tweak for the renamed term_type somewhere after Irssi 0.8.9
-# - fixed bug in handling channel #$$
-# - reset background colour at the beginning of an entry
-#
-# 0.4d
-# - fixed order of disabling status bars
-# - several attempts at special chars, without any real success
-# and much more weird new bugs caused by this
-# - setting to specify sort order
-# - reduced timeout values
-# - added awl_hide_data
-# - make it so the dynamic sub is actually deleted
-# - fix a bug with removing of the last separator
-# - take into consideration parse_special
-#
-# 0.3b
-# - automatically kill old status bars
-# - reset on /reload
-# - position/placement settings
-#
-# 0.2
-# - automated retrieval of key bindings (thanks grep.pl authors)
-# - improved removing of status bars
-# - got rid of status chop
-#
-# 0.1
-# - Based on chanact.pl which was apparently based on lightbar.c and
-# nicklist.pl with various other ideas from random scripts.
diff --git a/.config/irssi/scripts/autorun/ascii.pl b/.config/irssi/scripts/autorun/ascii.pl
@@ -1,405 +0,0 @@
-#
-# Commands: /ASCII, /COLSAY, /COLME, /COLTOPIC, /COLKICK, /COLQUIT
-# Usage:
-# /ASCII [-c1234] [-f <fontname>] [-p <prefix>] [-l|-s|-m <where>] <text>
-# /COLSAY [-1234] [-m <where>] <text>
-# /COLME [-1234] <text>
-# /COLTOPIC [-1234] <text>
-# /COLKICK [-1234] [nick(,nick_1,...,nick_n)] <reason>
-# /COLQUIT [-1234] <reason>
-# Settings:
-# /SET ascii_figlet_path [path]
-# /SET ascii_default_font [fontname]
-# /SET ascii_default_colormode [1-4]
-# /SET ascii_default_prefix [prefix]
-# /SET ascii_default_kickreason [reason]
-# /SET ascii_default_quitreason [reason]
-#
-# Script is bassed on figlet.
-#
-
-use strict;
-use Irssi;
-use Irssi::Irc;
-
-use vars qw($VERSION %IRSSI);
-
-$VERSION = "1.6.3";
-%IRSSI = (
- "authors" => "Marcin Rozycki",
- "contact" => "derwan\@irssi.pl",
- "name" => "ascii-art",
- "description" => "Ascii-art bassed on figlet. Available commands: /ASCII, /COLSAY, /COLME, /COLTOPIC, /COLKICK, /COLQUIT.",
- "url" => "http://derwan.irssi.pl",
- "license" => "GNU GPL v2",
- "changed" => "Fri Jun 21 17:17:53 CEST 2002"
-);
-
-use IPC::Open3;
-
-# defaults
-my $ascii_default_font = "small.flf";
-my $ascii_default_kickreason = "Irssi BaBy!";
-my $ascii_default_quitreason = "I Quit!";
-my $ascii_last_color = undef;
-my @ascii_colors = (12, 12, 12, 9, 5, 4, 13, 8, 7, 3, 11, 10, 2, 6, 6, 6, 6, 10, 8, 7, 4, 3, 9, 11, 2, 12, 13, 5);
-
-# registering themes
-Irssi::theme_register([
- 'ascii_not_connected', '%_$0:%_ You\'re not connected to server',
- 'ascii_not_window', '%_$0:%_ Not joined to any channel or query window',
- 'ascii_not_chanwindow', '%_$0:%_ Not joined to any channel',
- 'ascii_not_chanop', '%_$0:%_ You\'re not channel operator in {hilight $1}',
- 'ascii_figlet_notfound', '%_Ascii:%_ Cannot execute {hilight $0} - file not found or bad permissions',
- 'ascii_figlet_notset', '%_Ascii:%_ Cannot find external program %_figlet%_, usign /SET ascii_figlet_path [path], to set it',
- 'ascii_cmd_syntax', '%_$0:%_ $1, usage: $2',
- 'ascii_figlet_error', '%_Ascii: Figlet returns error:%_ $0-',
- 'ascii_fontlist', '%_Ascii:%_ Available fonts [in $0]: $1 ($2)',
- 'ascii_empty_fontlist', '%_Ascii:%_ Cannot find figlet fonts in $0',
- 'ascii_unknown_fontdir', '%_Ascii:%_ Cannot find figlet fontdir',
- 'ascii_show_line', '$0-'
-
-]);
-
-# str find_figlet_path()
-sub find_figlet_path {
- foreach my $dir (split(/\:/, $ENV{'PATH'}))
- {
- return "$dir/figlet" if ($dir and -x "$dir/figlet");
- }
-}
-
-# int randcolor()
-sub randcolor {
- return $ascii_colors[int(rand(12)+18)];
-}
-
-# str colorline($colormode, $text)
-sub colorline {
- my ($colormode, $text) = @_;
- my $colortext = undef;
- my $last = ($ascii_last_color) ? $ascii_last_color : randcolor();
- my $indx = $last;
-
- if ($colormode =~ /3/) {
- $ascii_last_color = randcolor();
- }elsif ($colormode =~ /4/) {
- $ascii_last_color = $ascii_colors[$last];
- }elsif ($colormode !~ /2/) {
- $ascii_last_color = $ascii_colors[14+$last];
- }
-
- while ($text =~ /./g)
- {
- my $char = "$&";
-
- if ($colormode =~ /3/) {
- while ($indx == $last) { $indx = randcolor(); };
- $last = $indx;
- }elsif ($colormode =~ /4/) {
- $indx = $ascii_colors[$indx];
- }elsif ($last) {
- $indx = $ascii_colors[$last];
- undef $last;
- } else {
- $indx = $ascii_colors[$indx];
- $last = $indx + 14;
- };
-
- $colortext .= $char, next if ($char eq " ");
- $colortext .= "\003" . sprintf("%02d", $indx) . $char;
- $colortext .= $char if ($char eq ",");
- };
-
- return $colortext;
-};
-
-# int colormode()
-sub colormode {
- my $mode = Irssi::settings_get_int("ascii_default_colormode");
- $mode =~ s/-//g;
- return (!$mode or $mode > 4) ? 1 : $mode;
-};
-
-# bool ascii_test($command, $flags, $server, $window)
-sub ascii_test {
- my ($cmd, $test, $server, $window) = @_;
-
- if ($test =~ /s/ and !$server || !$server->{connected}) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_not_connected", $cmd);
- return 0;
- };
- if ($test =~ /W/ and !$window || $window->{type} !~ /(channel|query)/i) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_not_window", $cmd);
- return 0;
- };
- if ($test =~ /(w|o)/ and !$window || $window->{type} !~ /channel/i) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_not_chanwindow", $cmd);
- return 0;
- };
- if ($test =~ /o/ and !$window->{chanop}) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_not_chanop", $cmd, Irssi::active_win()->get_active_name());
- return 0;
- };
-
- return 1;
-}
-
-# void cmd_ascii()
-# handles /ascii
-sub cmd_ascii
-{
- my $usage = "/ASCII [-c1234] [-f <fontname>] [-p <prefix>] [-l|-s|-m <where>] <text>";
- my $font = Irssi::settings_get_str("ascii_default_font");
- my $prefix = Irssi::settings_get_str("ascii_default_prefix");
- my ($arguments, $server, $witem) = @_;
- my ($text, $cmd, $mode);
-
- $font = $ascii_default_font unless ($font);
- $ascii_last_color = randcolor();
-
- my $figlet = Irssi::settings_get_str("ascii_figlet_path");
- if (!$figlet or !(-x $figlet)) {
- my $theme = ($figlet) ? "ascii_figlet_notfound" : "ascii_figlet_notset";
- Irssi::printformat(MSGLEVEL_CRAP, $theme, $figlet);
- return;
- };
-
- my @foo = split(/ +/, $arguments);
- while ($_ = shift(@foo))
- {
- /^-l$/ and show_figlet_fonts($figlet), return;
- /^-c$/ and $mode = colormode(), next;
- /^-(1|2|3|4)$/ and s/-//g, $mode = $_, next;
- /^-f$/ and $font = shift(@foo), next;
- /^-p$/ and $prefix = shift(@foo), next;
- /^-m$/ and $cmd = shift(@foo), next;
- /^-s$/ and $cmd = 0, next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Ascii", "Unknown argument: $_", $usage), return;
- $text = ($#foo < 0) ? $_ : $_ . " " . join(" ", @foo);
- last;
- }
-
- unless (length($text)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Ascii", "Missing arguments", $usage);
- return;
- };
-
- if ($cmd eq "") {
- return unless (ascii_test("Ascii", "sW", $server, $witem));
- $cmd = Irssi::active_win()->get_active_name();
- } elsif ($cmd ne "0" and !ascii_test("Ascii", "s", $server, $witem)) {
- return;
- }
-
- my $pid = open3(*FIGIN, *FIGOUT, *FIGERR, $figlet, qw(-k -f), $font, $text);
-
- while (<FIGOUT>)
- {
- chomp;
- next unless (/[^ ]/);
- $_ = colorline($mode, $_) if ($mode);
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, "ascii_show_line", $prefix.$_), next if ($cmd eq "0");
- $server->command("msg $cmd $prefix$_");
- }
-
- while (<FIGERR>)
- {
- chomp;
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_figlet_error", $_);
- };
-
- close FIGIN;
- close FIGOUT;
- close FIGERR;
-
- waitpid $pid, 0;
-}
-
-# void show_figlet_fonts(figlet path)
-sub show_figlet_fonts {
- my @fontlist;
- if (my $fontdir = `"$_[0]" -I 2 2>/dev/null`) {
- chomp $fontdir;
- foreach my $font (glob $fontdir."/*.flf")
- {
- $font =~ s/^$fontdir\///;
- $font =~ s/\.flf$//;
- push @fontlist, $font;
- }
- if ($#fontlist < 0) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_fontlist_empty", $fontdir);
- } else {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_fontlist", $fontdir, join(", ", @fontlist), scalar(@fontlist));
- }
- } else {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_unknown_fontdir");
- }
-}
-
-# void cmd_colsay()
-# handles /colsay
-sub cmd_colsay {
- my $usage = "/COLSAY [-1234] [-m <where>] <text>";
- my ($arguments, $server, $witem) = @_;
- my ($cmd, $text);
- my $mode = colormode();
-
- $ascii_last_color = randcolor();
-
- my @foo = split(/ /, $arguments);
- while ($_ = shift(@foo))
- {
- /^-(1|2|3|4)$/ and $mode = $_, next;
- /^-m$/i and $cmd = shift(@foo), next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colsay", "Unknown argument: $_", $usage), return;
- $text = ($#foo < 0) ? $_ : $_ . " " . join(" ", @foo);
- last;
- };
-
- unless (length($text)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colsay", "Missing arguments", $usage);
- return;
- };
-
- if ($cmd) {
- return unless (ascii_test("Colsay", "s", $server, $witem));
- } else {
- return unless (ascii_test("Colsay", "sW", $server, $witem));
- $cmd = Irssi::active_win()->get_active_name();
- };
-
- $server->command("msg $cmd ".colorline($mode, $text));
-}
-
-
-sub cmd_colme {
- my $usage = "/COLME [-1234] <text>";
- my ($arguments, $server, $witem) = @_;
- my $mode = colormode();
- my $text;
-
- $ascii_last_color = randcolor();
-
- my @foo = split(/ /, $arguments);
- while ($_ = shift(@foo))
- {
- /^-(1|2|3|4)$/ and $mode = $_, next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colme", "Unknown argument: $_", $usage), return;
- $text = ($#foo < 0) ? $_ : $_ . " " . join(" ", @foo);
- last;
- };
-
- unless (length($text)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colme", "Missing arguments", $usage);
- return;
- };
-
- return unless (ascii_test("Colme", "sW", $server, $witem));
- $witem->command("me ".colorline($mode, $text));
-}
-
-# void cmd_coltopic()
-# handles /coltopic
-sub cmd_coltopic {
- my $usage = "/COLTOPIC [-1234] <text>";
- my ($arguments, $server, $witem) = @_;
- my $mode = colormode();
- my $text;
-
- $ascii_last_color = randcolor();
-
- my @foo = split(/ /, $arguments);
- while ($_ = shift(@foo))
- {
- /^-(1|2|3|4)$/ and $mode = $_, next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Coltopic", "Unknown argument: $_", $usage), return;
- $text = ($#foo < 0) ? $_ : $_ . " " . join(" ", @foo);
- last;
- };
-
- unless (length($text)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Coltopic", "Missing arguments", $usage);
- return;
- };
-
- return unless (ascii_test("Coltopic", "sw", $server, $witem));
-
- $server->command("topic " . Irssi::active_win()->get_active_name() . " " . colorline($mode, $text));
-};
-
-# void cmd_colkick()
-# handles /colkick
-sub cmd_colkick {
- my $usage = "/COLKICK [-1234] [nick(,nick_1,...,nick_n)] <reason>";
- my ($arguments, $server, $witem) = @_;
- my $kickreason = Irssi::settings_get_str("ascii_default_kickreason");
- my $mode = colormode();
- my $who = undef;
-
- $ascii_last_color = randcolor();
- $kickreason = $ascii_default_kickreason unless ($kickreason);
-
- my @foo = split(/ /, $arguments);
- while ($_ = shift(@foo))
- {
- /^-(1|2|3|4)$/ and $mode = $_, next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colkick", "Unknown argument: $_", $usage), return;
- $kickreason = join(" ", @foo) if ($#foo >= 0);
- $who = $_;
- last;
- };
-
- if (!$who or !length($kickreason)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colkick", "Missing arguments", $usage);
- return;
- };
-
- return unless (ascii_test("Colkick", "swo", $server, $witem));
- $witem->command("kick $who ".colorline($mode, $kickreason));
-};
-
-# void cmd_colquit()
-# handles /colquit
-sub cmd_colquit {
- my $usage = "/COLQUIT [-1234] <reason>";
- my ($arguments, $server, $witem) = @_;
- my $quitreason = Irssi::settings_get_str("ascii_default_quitreason");
- my $mode = colormode();
-
- $ascii_last_color = randcolor();
- $quitreason = $ascii_default_quitreason unless ($quitreason);
-
- my @foo = split(/ /, $arguments);
- while ($_ = shift(@foo))
- {
- /^-(1|2|3|4)$/ and $mode = $_, next;
- /^-/ and Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colquit", "Unknown argument: $_", $usage), return;
- $quitreason = ($#foo < 0) ? $_ : $_ . " " . join(" ", @foo);
- last;
- };
-
- unless (length($quitreason)) {
- Irssi::printformat(MSGLEVEL_CRAP, "ascii_cmd_syntax", "Colquit", "Missing arguments", $usage);
- return;
- };
-
- return unless (ascii_test("Colquit", "s", $server, $witem));
- $server->command("quit " . colorline($mode, $quitreason));
-}
-
-# registering settings
-Irssi::settings_add_str("misc", "ascii_default_font", $ascii_default_font);
-Irssi::settings_add_str("misc", "ascii_default_kickreason", $ascii_default_kickreason);
-Irssi::settings_add_str("misc", "ascii_default_quitreason", $ascii_default_quitreason);
-Irssi::settings_add_str("misc", "ascii_default_prefix", "");
-Irssi::settings_add_int("misc", "ascii_default_colormode", 1);
-Irssi::settings_add_str("misc", "ascii_figlet_path", find_figlet_path);
-
-# binding commands
-Irssi::command_bind("ascii", "cmd_ascii");
-Irssi::command_bind("colsay", "cmd_colsay");
-Irssi::command_bind("colme", "cmd_colme");
-Irssi::command_bind("coltopic", "cmd_coltopic");
-Irssi::command_bind("colkick", "cmd_colkick");
-Irssi::command_bind("colquit", "cmd_colquit");
diff --git a/.config/irssi/scripts/autorun/autonickprefix.pl b/.config/irssi/scripts/autorun/autonickprefix.pl
@@ -1,39 +0,0 @@
-use strict;
-
-our $VERSION = '1.00';
-our %IRSSI = (
- authors => 'Juerd',
- contact => '#####@juerd.nl',
- name => 'autonickprefix',
- description => "Change 'nick: ' prefix if the nick is changed while you're still editing.",
- license => 'Any OSI',
-);
-
-use Irssi::TextUI;
-use Irssi qw(
- signal_add active_win settings_get_str parse_special
- gui_input_get_pos gui_input_set gui_input_set_pos
-);
-
-signal_add 'nicklist changed' => sub {
- my ($chan, $newnick, $oldnick) = @_;
- $newnick = $newnick->{nick};
-
- # Ignore other channels than current
- my $viewing = active_win->{active} or return;
- $viewing->{_irssi} == $chan->{_irssi} or return;
-
- my $char = settings_get_str 'completion_char';
- my $pos = gui_input_get_pos;
-
- # Incomplete nick could be something else.
- $pos >= length("$oldnick$char") or return;
-
- my $delta = length($newnick) - length($oldnick);
-
- my $input = parse_special '$L';
- $input =~ s/^\Q$oldnick$char/$newnick$char/ or return;
-
- gui_input_set $input;
- gui_input_set_pos $pos + $delta;
-};
diff --git a/.config/irssi/scripts/autorun/cmdind.pl b/.config/irssi/scripts/autorun/cmdind.pl
@@ -1,61 +0,0 @@
-use strict;
-use warnings;
-
-our $VERSION = '1.1'; # 67ffc4766319fe4
-our %IRSSI = (
- authors => 'Nei',
- contact => 'Nei @ anti@conference.jabber.teamidiot.de',
- url => "http://anti.teamidiot.de/",
- name => 'cmdind',
- description => 'Indicator for input prompt if you are inputting a command or text',
- license => 'GNU GPLv2 or later',
- );
-
-# Usage
-# =====
-# This script requires the
-#
-# uberprompt
-#
-# script to work. If you don't have it yet, /script install uberprompt
-
-# Options
-# =======
-# /set cmdind_text <string>
-# * string : Text to show in prompt when typing a command
-#
-# /set cmdind_warn_text <string>
-# * string : Text to show in prompt when typing a command with spaces in front
-
-use Irssi;
-
-my $cmd_state = 0;
-my $cmdchars;
-my @text;
-
-sub check_input {
- my $inputline = Irssi::parse_special('$L');
- my $c1 = length $inputline > 0 ? substr $inputline, 0, 1 : '';
- my $c2 = length $inputline > 1 ? substr $inputline, 1, 1 : '';
- my $old_state = $cmd_state;
- my $x_state = length $c2 && (-1 != index $cmdchars, $c1) && $c2 ne ' ';
- my $warn_state =
- ($inputline =~ /^\s+(\S)/ && (-1 != index $cmdchars, $1))
- || ($x_state && $inputline =~ /^(.)\1?+\S*[\Q$cmdchars\E]/);
- $cmd_state = $warn_state ? 2 : $x_state ? 1 : 3;
- if ($cmd_state ne $old_state) {
- Irssi::signal_emit('change prompt', $text[ $cmd_state ], 'UP_POST');
- }
-}
-sub setup_changed {
- $cmdchars = Irssi::settings_get_str('cmdchars');
- @text = ('',
- Irssi::settings_get_str('cmdind_text'),
- Irssi::settings_get_str('cmdind_warn_text'),
- '');
-}
-Irssi::settings_add_str('cmdind', 'cmdind_text', '%gCmd:');
-Irssi::settings_add_str('cmdind', 'cmdind_warn_text', '%RMsg?');
-setup_changed();
-Irssi::signal_add_last('gui key pressed', 'check_input');
-Irssi::signal_add('setup changed', 'setup_changed');
diff --git a/.config/irssi/scripts/autorun/ctcpspoof.pl b/.config/irssi/scripts/autorun/ctcpspoof.pl
@@ -1,277 +0,0 @@
-#!/usr/bin/perl -w
-
-## Bugreports and Licence disclaimer.
-#
-# For bugreports and other improvements contact Geert Hauwaerts <geert@irssi.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 2 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 script; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-##
-
-use strict;
-use Irssi;
-use vars qw($VERSION %IRSSI);
-
-$VERSION = "1.04";
-
-%IRSSI = (
- authors => 'Geert Hauwaerts',
- contact => 'geert@irssi.org',
- name => 'fakectcp.pl',
- description => 'This script sends fake ctcp replies to a client using a fake ctcp list.',
- license => 'GNU General Public License',
- url => 'http://irssi.hauwaerts.be/default.pl',
- changed => '2018-09-17',
-);
-
-my @fakectcp = ();
-my $fakectcp_file = "fctcplist";
-my $irssidir = Irssi::get_irssi_dir();
-
-my $help = <<EOF;
-
-Usage: (all on one line)
-/FCTCP [-add||-replace <ctcp-item> <ctcp-reply>] [-del <ctcp-item>] [-list] [-help]
-
--add: Add a new fake ctcp-reply to the list.
--del: Delete a fake ctcp-reply from the list.
--list: Display the contents of the fake ctcp-reply list.
--help: Display this useful little helpfile.
--replace: Replace an existing fake reply with a new one. If the old one doesn't exist, the new one will be added by default.
-
-Examples: (all on one line)
-/FCTCP -add CHRISTEL We all love christel, don't we! :)
-/FCTCP -add LOCATION I'm at home, reading some helpfiles.
-
-/FCTCP -del CHRISTEL
-/FCTCP -del LOCATION
-
-Note: The caps are not obligated. The default parameter is -list.
-EOF
-
-Irssi::theme_register([
- 'fctcp_info', ' # ctcpitem ctcpreply',
- 'fctcp_empty', '%R>>%n %_FCTCP:%_ Your fake ctcp list is empty.',
- 'fctcp_added', '%R>>%n %_FCTCP:%_ Added %_$0%_ ($1) to the fake ctcp list.',
- 'fctcp_replaced', '%R>>%n %_FCTCP:%_ Replaced the old fake reply %_$0%_ with the new one ($1)',
- 'fctcp_delled', '%R>>%n %_FCTCP:%_ Deleted %_$0%_ from the fake ctcp list.',
- 'fctcp_nfound', '%R>>%n %_FCTCP:%_ Can\'t find $0 in the fake ctcp list.',
- 'fctcp_delusage', '%R>>%n %_FCTCP:%_ Usage: /FCTCP -del <ctcp-item>',
- 'fctcp_usage', '%R>>%n %_FCTCP:%_ Usage: /FCTCP -add <ctcp-item> <ctcp-reply>',
- 'fctcp_repusage', '%R>>%n %_FCTCP:%_ Usage: /FCTCP -replace <ctcp-item> <ctcp-reply>',
- 'fctcp_nload', '%R>>%n %_FCTCP:%_ Could not load the fake ctcp list.',
- 'fctcp_request', '%R>>%n %_FCTCP:%_ Used the fake reply %_$1%_ on %_$0%_',
- 'fctcp_loaded', '%R>>%n %_FCTCP:%_ The fake reply %_$0%_ already exists, use %_/FCTCP -del $0%_ to remove it from the list.',
- 'fctcp_print', '$[!-2]0 $[20]1 $2',
- 'fctcp_help', '$0',
- 'loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.'
-]);
-
-sub ctcpreply {
-
- my ($server, $data, $nick, $address, $target) = @_;
- my ($findex);
-
- $data = lc($data);
-
- return unless (lc($server->{nick}) eq lc($target));
-
- if (!already_loaded($data)) {
- $findex = check_loaded($data);
- $server->command("^NCTCP $nick $data $fakectcp[$findex]->{reply}");
- Irssi::printformat(MSGLEVEL_CTCPS, 'fctcp_request', $nick, $data);
- Irssi::signal_stop();
- }
-}
-
-sub new_fctcp {
-
- my $fctcp = {};
-
- $fctcp->{item} = shift;
- $fctcp->{reply} = shift;
-
- return $fctcp;
-}
-
-sub already_loaded {
-
- my ($item) = @_;
- my $loaded = check_loaded($item);
-
- if ($loaded > -1) {
- return 0;
- }
-
- return 1;
-}
-
-sub check_loaded {
-
- my ($item) = @_;
-
- $item = lc($item);
-
- for (my $loaded = 0; $loaded < @fakectcp; ++$loaded) {
- return $loaded if (lc($fakectcp[$loaded]->{item}) eq $item);
- }
-
- return -1;
-}
-
-sub load_fakectcplist {
-
- my ($file) = @_;
-
- @fakectcp = ();
-
- if (-e $file) {
- local *F;
- open(F, "<", $file);
- local $/ = "\n";
-
- while (<F>) {
- chop;
- my $new_fctcp = new_fctcp(split("\t"));
-
- if (($new_fctcp->{item} ne "") && ($new_fctcp->{reply} ne "")) {
- push(@fakectcp, $new_fctcp);
- }
- }
-
- close(F);
- } else {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_nload');
- }
-}
-
-sub save_fakectcplist {
-
- my ($file) = @_;
-
- local *F;
- open(F, ">", $file) or die "Could not load the fake ctcpreply list for writing";
-
- for (my $n = 0; $n < @fakectcp; ++$n) {
- print(F join("\t", $fakectcp[$n]->{item}, $fakectcp[$n]->{reply}) . "\n");
- }
-
- close(F);
-}
-
-sub addfakectcp {
-
- my ($ctcpitem, $ctcpreply) = split (" ", $_[0], 2);
-
- if (($ctcpitem eq "") || ($ctcpreply eq "")) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_usage');
- return;
- } elsif (!already_loaded($ctcpitem)) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_loaded', $ctcpitem);
- return;
- }
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_added', $ctcpitem, $ctcpreply);
- push(@fakectcp, new_fctcp($ctcpitem, $ctcpreply));
- save_fakectcplist("$irssidir/$fakectcp_file");
-}
-
-sub delfakectcp {
-
- my ($fdata) = @_;
- my ($fdataindex);
-
- if ($fdata eq "") {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_delusage');
- return;
- }
-
- for (my $index = 0; $index < @fakectcp; ++$index) {
- if (lc($fakectcp[$index]->{item}) eq $fdata) {
- $fdataindex = splice(@fakectcp, $index, 1);
- }
- }
-
- if ($fdataindex) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_delled', $fdata);
- save_fakectcplist("$irssidir/$fakectcp_file");
- } else {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_nfound', $fdata);
- }
-}
-
-sub replacefakectcp {
-
- my ($ctcpitem, $ctcpreply) = split (" ", $_[0], 2);
- my ($fdataindex);
-
- if (($ctcpitem eq "") || ($ctcpreply eq "")) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_repusage');
- return;
- }
-
- if (!already_loaded($ctcpitem)) {
- for (my $index = 0; $index < @fakectcp; ++$index) {
- if (lc($fakectcp[$index]->{item}) eq $ctcpitem) {
- $fdataindex = splice(@fakectcp, $index, 1);
- } elsif ($fdataindex) {
- save_fakectcplist("$irssidir/$fakectcp_file");
- }
- }
- }
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_replaced', $ctcpitem, $ctcpreply);
- push(@fakectcp, new_fctcp($ctcpitem, $ctcpreply));
- save_fakectcplist("$irssidir/$fakectcp_file");
-}
-
-sub fakectcp {
-
- my ($cmdoption, $ctcpitem, $ctcpreply) = split (" ", $_[0], 3);
-
- $ctcpitem = lc($ctcpitem);
- $cmdoption = lc($cmdoption);
-
- if ($cmdoption eq "-add") {
- addfakectcp("$ctcpitem $ctcpreply");
- return;
- } elsif ($cmdoption eq "-del") {
- delfakectcp("$ctcpitem");
- return;
- } elsif ($cmdoption eq "-help") {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_help', $help);
- return;
- } elsif ($cmdoption eq "-replace") {
- replacefakectcp("$ctcpitem $ctcpreply");
- return;
- }
-
- if (@fakectcp == 0) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_empty');
- } else {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_info');
-
- for (my $n = 0; $n < @fakectcp ; ++$n) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'fctcp_print', $n, $fakectcp[$n]->{item}, $fakectcp[$n]->{reply});
- }
- }
-}
-
-load_fakectcplist("$irssidir/$fakectcp_file");
-
-Irssi::signal_add('ctcp msg', 'ctcpreply');
-Irssi::command_bind('fctcp', 'fakectcp');
-Irssi::command_set_options('fctcp','add del list help replace');
-Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
diff --git a/.config/irssi/scripts/autorun/dim_nicks.pl b/.config/irssi/scripts/autorun/dim_nicks.pl
@@ -1,431 +0,0 @@
-use strict;
-use warnings;
-
-our $VERSION = '0.4.9';
-our %IRSSI = (
- authors => 'Nei',
- contact => 'Nei @ anti@conference.jabber.teamidiot.de',
- url => "http://anti.teamidiot.de/",
- name => 'dim_nicks',
- description => 'Dims nicks that are not in channel anymore.',
- license => 'GNU GPLv2 or later',
- );
-
-# Usage
-# =====
-# Once loaded, this script will record the nicks of each new
-# message. If the user leaves the room, the messages will be rewritten
-# with the nick in another colour/style.
-#
-# Depending on your theme, tweaking the forms settings may be
-# necessary. With the default irssi theme, this script should just
-# work.
-
-# Options
-# =======
-# /set dim_nicks_color <colour>
-# * the colour code to use for dimming the nick, or a string of format
-# codes with the special token $* in place of the nick (e.g. %I$*%I
-# for italic)
-#
-# /set dim_nicks_history_lines <num>
-# * only this many lines of messages are remembered/rewritten (per
-# window)
-#
-# /set dim_nicks_ignore_hilights <ON|OFF>
-# * ignore lines with hilight when dimming
-#
-# /set dim_nicks_forms_skip <num>
-# /set dim_nicks_forms_search_max <num>
-# * these two settings limit the range where to search for the
-# nick.
-# It sets how many forms (blocks of irssi format codes or
-# non-letters) to skip at the beginning of line before starting to
-# search for the nick, and from then on how many forms to search
-# before stopping.
-# You should set this to the appropriate values to avoid (a) dimming
-# your timestamp (b) dimming message content instead of the nick.
-# To check your settings, you can use the command
-# /script exec Irssi::Script::dim_nicks::debug_forms
-
-
-no warnings 'redefine';
-use constant IN_IRSSI => __PACKAGE__ ne 'main' || $ENV{IRSSI_MOCK};
-use Irssi 20140701;
-use Irssi::TextUI;
-use Encode;
-
-
-sub setc () {
- $IRSSI{name}
-}
-
-sub set ($) {
- setc . '_' . $_[0]
-}
-
-my $history_lines = 100;
-my $skip_forms = 1;
-my $search_forms_max = 5;
-my $ignore_hilights = 1;
-my $color_letter = 'K';
-my @color_code = ("\cD8/"); # update this when you change $color_letter
-
-# nick object cache, chan object cache, line id cache, line id -> window map, -> channel, -> nick, -> nickname, channel -> line ids, channel->nickname->departure time, channel->nickname->{parts of line}
-my (%nick_reg, %chan_reg, %history_w, %history_c, %history_n, %history_nn, %history_st, %lost_nicks, %lost_nicks_fs, %lost_nicks_fc, %lost_nicks_bc, %lost_nicks_bs);
-
-our ($dest, $chanref, $nickref);
-
-
-sub msg_line_tag {
- my ($srv, $msg, $nick, $addr, $targ) = @_;
- local $chanref = $srv->channel_find($targ);
- local $nickref = ref $chanref ? $chanref->nick_find($nick) : undef;
- &Irssi::signal_continue;
-}
-
-sub color_to_code {
- my $win = Irssi::active_win;
- my $view = $win->view;
- my $cl = $color_letter;
- if (-1 == index $cl, '$*') {
- $cl = "%$cl\$*";
- }
- $win->print_after(undef, MSGLEVEL_NEVER, "$cl ");
- my $lp = $win->last_line_insert;
- my $color_code = $lp->get_text(1);
- $color_code =~ s/ $//;
- $view->remove_line($lp);
- @color_code = split /\$\*/, $color_code, 2;
-}
-
-sub setup_changed {
- $history_lines = Irssi::settings_get_int( set 'history_lines' );
- $skip_forms = Irssi::settings_get_int( set 'forms_skip' );
- $search_forms_max = Irssi::settings_get_int( set 'forms_search_max' );
- $ignore_hilights = Irssi::settings_get_bool( set 'ignore_hilights' );
- my $new_color = Irssi::settings_get_str( set 'color' );
- if ($new_color ne $color_letter) {
- $color_letter = $new_color;
- color_to_code();
- }
-}
-
-sub init_dim_nicks {
- setup_changed();
-}
-
-sub prt_text_issue {
- my ($ld) = @_;
- local $dest = $ld;
- &Irssi::signal_continue;
-}
-
-sub expire_hist {
- for my $ch (keys %history_st) {
- if (@{$history_st{$ch}} > 2 * $history_lines) {
- my @del = splice @{$history_st{$ch}}, 0, $history_lines;
- delete @history_w{ @del };
- delete @history_c{ @del };
- delete @history_n{ @del };
- delete @history_nn{ @del };
- }
- }
-}
-
-sub prt_text_ref {
- return unless $nickref;
- return unless $dest && defined $dest->{target};
- return unless $dest->{level} & MSGLEVEL_PUBLIC;
- return if $ignore_hilights && $dest->{level} & MSGLEVEL_HILIGHT;
-
- my ($win) = @_;
- my $view = $win->view;
- my $line_id = $view->{buffer}{_irssi} .','. $view->{buffer}{cur_line}{_irssi};
- $chan_reg{ $chanref->{_irssi} } = $chanref;
- $nick_reg{ $nickref->{_irssi} } = $nickref;
- if (exists $history_w{ $line_id }) {
- }
- $history_w{ $line_id } = $win->{_irssi};
- $history_c{ $line_id } = $chanref->{_irssi};
- $history_n{ $line_id } = $nickref->{_irssi};
- $history_nn{ $line_id } = $nickref->{nick};
- push @{$history_st{ $chanref->{_irssi} }}, $line_id;
- expire_hist();
- my @lost_forever = grep { $view->{buffer}{first_line}{info}{time} > $lost_nicks{ $chanref->{_irssi} }{ $_ } }
- keys %{$lost_nicks{ $chanref->{_irssi} }};
- delete @{$lost_nicks{ $chanref->{_irssi} }}{ @lost_forever };
- delete @{$lost_nicks_fs{ $chanref->{_irssi} }}{ @lost_forever };
- delete @{$lost_nicks_fc{ $chanref->{_irssi} }}{ @lost_forever };
- delete @{$lost_nicks_bc{ $chanref->{_irssi} }}{ @lost_forever };
- delete @{$lost_nicks_bs{ $chanref->{_irssi} }}{ @lost_forever };
- return;
-}
-
-sub win_del {
- my ($win) = @_;
- for my $ch (keys %history_st) {
- @{$history_st{$ch}} = grep { exists $history_w{ $_ } &&
- $history_w{ $_ } != $win->{_irssi} } @{$history_st{$ch}};
- }
- my @del = grep { $history_w{ $_ } == $win->{_irssi} } keys %history_w;
- delete @history_w{ @del };
- delete @history_c{ @del };
- delete @history_n{ @del };
- delete @history_nn{ @del };
- return;
-}
-
-sub _alter_lines {
- my ($chan, $check_lr, $ad) = @_;
- my $win = $chan->window;
- return unless ref $win;
- my $view = $win->view;
- my $count = $history_lines;
- my $buffer_id = $view->{buffer}{_irssi} .',';
- my $lp = $view->{buffer}{cur_line};
- my %check_lr = map { $_ => undef } @$check_lr;
- my $redraw;
- my $bottom = $view->{bottom};
- while ($lp && $count) {
- my $line_id = $buffer_id . $lp->{_irssi};
- if (exists $check_lr{ $line_id }) {
- $lp = _alter_line($buffer_id, $line_id, $win, $view, $lp, $chan->{_irssi}, $ad);
- unless ($lp) {
- last;
- }
- $redraw = 1;
- }
- } continue {
- --$count;
- $lp = $lp->prev;
- }
- if ($redraw) {
- $win->command('^scrollback end') if $bottom && !$win->view->{bottom};
- $view->redraw;
- }
-}
-
-my $irssi_mumbo = qr/\cD[`-i]|\cD[&-@\xff]./;
-my $irssi_mumbo_no_partial = qr/(?<!\cD)(?<!\cD[&-@\xff])/;
-my $irssi_skip_form_re = qr/((?:$irssi_mumbo|[.,*@%+&!#$()=~'";:?\/><]+(?=$irssi_mumbo|\s))+|\s+)/;
-
-sub debug_forms {
- my $win = Irssi::active_win;
- my $view = $win->view;
- my $lp = $view->{buffer}{cur_line};
- my $count = $history_lines;
- my $buffer_id = $view->{buffer}{_irssi} .',';
- while ($lp && $count) {
- my $line_id = $buffer_id . $lp->{_irssi};
- if (exists $history_w{ $line_id }) {
- my $line_nick = $history_nn{ $line_id };
- my $text = $lp->get_text(1);
- pos $text = 0;
- my $from = 0;
- for (my $i = 0; $i < $skip_forms; ++$i) {
- last unless
- scalar $text =~ /$irssi_skip_form_re/g;
- $from = pos $text;
- }
- my $to = $from;
- for (my $i = 0; $i < $search_forms_max; ++$i) {
- last unless
- scalar $text =~ /$irssi_skip_form_re/g;
- $to = pos $text;
- }
- my $pre = substr $text, 0, $from;
- my $search = substr $text, $from, $to-$from;
- my $post = substr $text, $to;
- unless ($to > $from) {
- } else {
- my @nick_reg;
- unshift @nick_reg, quotemeta substr $line_nick, 0, $_ for 1 .. length $line_nick;
- no warnings 'uninitialized';
- for my $nick_reg (@nick_reg) {
- last if $search
- =~ s/(\Q$color_code[0]\E\s*)?((?:$irssi_mumbo)+)?$irssi_mumbo_no_partial($nick_reg)((?:$irssi_mumbo)+)?(\s*\Q$color_code[0]\E)?/<match>$1$2<nick>$3<\/nick>$4$5<\/match>/;
- last if $search
- =~ s/(?:\Q$color_code[0]\E)?(?:(?:$irssi_mumbo)+?)?$irssi_mumbo_no_partial($nick_reg)(?:(?:$irssi_mumbo)+?)?(?:\Q$color_code[1]\E)?/<nick>$1<\/nick>/;
- }
- }
- my $msg = "$pre<search>$search</search>$post";
- #$msg =~ s/([^[:print:]])/sprintf '\\x%02x', ord $1/ge;
- $msg =~ s/\cDe/%|/g; $msg =~ s/%/%%/g;
- $win->print(setc." form debug: [$msg]", MSGLEVEL_CLIENTCRAP);
- return;
- }
- } continue {
- --$count;
- $lp = $lp->prev;
- }
- $win->print(setc." form debug: no usable line found", MSGLEVEL_CLIENTCRAP);
-}
-
-sub _alter_line {
- my ($buffer_id, $lrp, $win, $view, $lp, $cid, $ad) = @_;
- my $line_nick = $history_nn{ $lrp };
- my $text = $lp->get_text(1);
- pos $text = 0;
- my $from = 0;
- for (my $i = 0; $i < $skip_forms; ++$i) {
- last unless
- scalar $text =~ /$irssi_skip_form_re/g;
- $from = pos $text;
- }
- my $to = $from;
- for (my $i = 0; $i < $search_forms_max; ++$i) {
- last unless
- scalar $text =~ /$irssi_skip_form_re/g;
- $to = pos $text;
- }
- return $lp unless $to > $from;
- my @nick_reg;
- unshift @nick_reg, quotemeta substr $line_nick, 0, $_ for 1 .. length $line_nick;
- { no warnings 'uninitialized';
- if ($ad) {
- if (exists $lost_nicks_fs{ $cid }{ $line_nick }) {
- my ($fs, $fc, $bc, $bs) = ($lost_nicks_fs{ $cid }{ $line_nick }, $lost_nicks_fc{ $cid }{ $line_nick }, $lost_nicks_bc{ $cid }{ $line_nick }, $lost_nicks_bs{ $cid }{ $line_nick });
- my $sen = length $bs ? $color_code[0] : '';
- for my $nick_reg (@nick_reg) {
- last if
- (substr $text, $from, $to-$from)
- =~ s/(?:\Q$color_code[0]\E)?(?:(?:$irssi_mumbo)+?)?$irssi_mumbo_no_partial($nick_reg)(?:(?:$irssi_mumbo)+?)?(?:\Q$color_code[1]\E)?/$fc$1$bc$sen/;
- }
- }
- }
- else {
- for my $nick_reg (@nick_reg) {
- if (
- (substr $text, $from, $to-$from)
- =~ s/(\Q$color_code[0]\E\s*)?((?:$irssi_mumbo)+)?$irssi_mumbo_no_partial($nick_reg)((?:$irssi_mumbo)+)?(\s*\Q$color_code[0]\E)?/$1$2$color_code[0]$3$color_code[1]$4$5/) {
- $lost_nicks_fs{ $cid }{ $line_nick } = $1;
- $lost_nicks_fc{ $cid }{ $line_nick } = $2;
- $lost_nicks_bc{ $cid }{ $line_nick } = $4;
- $lost_nicks_bs{ $cid }{ $line_nick } = $5;
- last;
- }
- }
- } }
- $win->gui_printtext_after($lp->prev, $lp->{info}{level} | MSGLEVEL_NEVER, "$text\n", $lp->{info}{time});
- my $ll = $win->last_line_insert;
- my $line_id = $buffer_id . $ll->{_irssi};
- if (exists $history_w{ $line_id }) {
- }
- grep { $_ eq $lrp and $_ = $line_id } @{$history_st{ $cid }};
- $history_w{ $line_id } = delete $history_w{ $lrp };
- $history_c{ $line_id } = delete $history_c{ $lrp };
- $history_n{ $line_id } = delete $history_n{ $lrp };
- $history_nn{ $line_id } = delete $history_nn{ $lrp };
- $view->remove_line($lp);
- $ll;
-}
-
-sub nick_add {
- my ($chan, $nick) = @_;
- if (delete $lost_nicks{ $chan->{_irssi} }{ $nick->{nick} }) {
- my @check_lr = grep { $history_c{ $_ } == $chan->{_irssi} &&
- $history_n{ $_ } eq $nick->{nick} } keys %history_w;
- if (@check_lr) {
- $nick_reg{ $nick->{_irssi} } = $nick;
- for my $li (@check_lr) {
- $history_n{ $li } = $nick->{_irssi};
- }
- _alter_lines($chan, \@check_lr, 1);
- }
- }
- delete $lost_nicks_fs{ $chan->{_irssi} }{ $nick->{nick} };
- delete $lost_nicks_fc{ $chan->{_irssi} }{ $nick->{nick} };
- delete $lost_nicks_bc{ $chan->{_irssi} }{ $nick->{nick} };
- delete $lost_nicks_bs{ $chan->{_irssi} }{ $nick->{nick} };
- return;
-}
-
-sub nick_del {
- my ($chan, $nick) = @_;
- my @check_lr = grep { $history_n{ $_ } eq $nick->{_irssi} } keys %history_w;
- for my $li (@check_lr) {
- $history_n{ $li } = $nick->{nick};
- }
- if (@check_lr) {
- $lost_nicks{ $chan->{_irssi} }{ $nick->{nick} } = time;
- _alter_lines($chan, \@check_lr, 0);
- }
- delete $nick_reg{ $nick->{_irssi} };
- return;
-}
-
-sub nick_change {
- my ($chan, $nick, $oldnick) = @_;
- nick_add($chan, $nick);
-}
-
-sub chan_del {
- my ($chan) = @_;
- if (my $del = delete $history_st{ $chan->{_irssi} }) {
- delete @history_w{ @$del };
- delete @history_c{ @$del };
- delete @history_n{ @$del };
- delete @history_nn{ @$del };
- }
- delete $chan_reg{ $chan->{_irssi} };
- delete $lost_nicks{$chan->{_irssi}};
- delete $lost_nicks_fs{$chan->{_irssi}};
- delete $lost_nicks_fc{$chan->{_irssi}};
- delete $lost_nicks_bc{$chan->{_irssi}};
- delete $lost_nicks_bs{$chan->{_irssi}};
- return;
-}
-
-Irssi::settings_add_int( setc, set 'history_lines', $history_lines);
-Irssi::settings_add_bool( setc, set 'ignore_hilights', $ignore_hilights);
-Irssi::signal_add_last({
- 'setup changed' => 'setup_changed',
-});
-Irssi::signal_add({
- 'print text' => 'prt_text_issue',
- 'gui print text finished' => 'prt_text_ref',
- 'nicklist new' => 'nick_add',
- 'nicklist changed' => 'nick_change',
- 'nicklist remove' => 'nick_del',
- 'window destroyed' => 'win_del',
- 'message public' => 'msg_line_tag',
- 'channel destroyed' => 'chan_del',
-});
-
-sub dumphist {
- my $win = Irssi::active_win;
- my $view = $win->view;
- my $buffer_id = $view->{buffer}{_irssi} .',';
- for (my $lp = $view->{buffer}{first_line}; $lp; $lp = $lp->next) {
- my $line_id = $buffer_id . $lp->{_irssi};
- if (exists $history_w{ $line_id }) {
- my $k = $history_c{ $line_id };
- my $kn = $history_n{ $line_id };
- if (exists $chan_reg{ $k }) {
- }
- if (exists $nick_reg{ $kn }) {
- }
- if (exists $lost_nicks{ $k } && exists $lost_nicks{ $k }{ $kn }) {
- }
- }
- }
-}
-Irssi::settings_add_str( setc, set 'color', $color_letter);
-Irssi::settings_add_int( setc, set 'forms_skip', $skip_forms);
-Irssi::settings_add_int( setc, set 'forms_search_max', $search_forms_max);
-
-init_dim_nicks();
-
-{ package Irssi::Nick }
-
-# Changelog
-# =========
-# 0.4.9
-# - fix default setting not working
-# 0.4.8
-# - optionally ignore hilighted lines
-# 0.4.7
-# - fix useless re-reading of settings colour
-# 0.4.6
-# - fix crash on some lines reported by pierrot
diff --git a/.config/irssi/scripts/autorun/escape.pl b/.config/irssi/scripts/autorun/escape.pl
@@ -1,58 +0,0 @@
-# Usage:
-# Do /escape (or /esc) just like you would use /lastlog
-# this then prints the lines, which you can use in /eval.
-# see /help lastlog for options
-#
-# For example:
-# <someone> Hey! join #fooX (where X is some char you can't copy-paste)
-# then you do /esc #foo
-# and you'll get something like 19:50 \x048/<\x04g \x04gsomeone\x04g\x048/>\x04g \x04ehey! join #foo\x12
-# ignore the stuff in the first part of the message, that's irssi's internal color format for the line printed.
-# doing /eval join #foo\x12 will make you join the right channel
-# /esc -clear makes your scrollback clean again
-
-use Irssi;
-use strict;
-use vars qw($VERSION %IRSSI);
-$VERSION = '1.0';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'wouter@coekaerts.be, coekie@#irssi',
- name => 'escape',
- description => 'displays lines in your scrollback in escaped form, so you can copy and paste them including colors and special characters',
- license => 'GPL v2',
- url => 'http://wouter.coekaerts.be/irssi/',
-);
-
-sub escape {
- my ($text) = @_;
- $text =~ s/(.)/escape_char($1)/eg;
- return $text;
-}
-
-sub escape_char {
- my ($char) = @_;
- my $ord = ord($char);
- if ($char eq '\\' || $char eq '$' || $char eq ';') {
- return "\\$char";
- } elsif ($ord < 32 || $ord > 126) {
- return '\\x' . sprintf("%02x", ord($char));
- } else {
- return $char;
- }
-}
-
-Irssi::command_bind("escape", sub {
- my ($data, $server, $item) = @_;
- my $context = $item ? $item : Irssi::active_win;
-
- Irssi::signal_add_first('print text', 'sig_print_text');
- $context->command("lastlog $data");
- Irssi::signal_remove('print text', 'sig_print_text');
-});
-
-sub sig_print_text {
- my ($dest, $text, $stripped_text) = @_;
- $_[1] = escape($text);
- Irssi::signal_continue(@_);
-}
diff --git a/.config/irssi/scripts/autorun/hilightwin.pl b/.config/irssi/scripts/autorun/hilightwin.pl
@@ -1,86 +0,0 @@
-#
-# Print hilighted messages & private messages to window named "hilight" for
-# irssi 0.7.99 by Timo Sirainen
-#
-# Modded a tiny bit by znx to stop private messages entering the hilighted
-# window (can be toggled) and to put up a timestamp.
-#
-# Changed a little by rummik to optionally show network name. Enable with
-# `/set hilightwin_show_network on`
-#
-
-use strict;
-use Irssi;
-use POSIX;
-use vars qw($VERSION %IRSSI);
-
-$VERSION = "1.00";
-%IRSSI = (
- authors => "Timo \'cras\' Sirainen, Mark \'znx\' Sangster, Kimberly \'rummik\' Zick",
- contact => "tss\@iki.fi, znxster\@gmail.com, git\@zick.kim",
- name => "hilightwin",
- description => "Print hilighted messages to window named \"hilight\"",
- license => "Public Domain",
- url => "http://irssi.org/",
- changed => "Thu Apr 6 15:30:25 EDT 2017"
-);
-
-sub is_ignored {
- my ($dest) = @_;
-
- my @ignore = split(' ', Irssi::settings_get_str('hilightwin_ignore_targets'));
- return 0 if (!@ignore);
-
- my %targets = map { $_ => 1 } @ignore;
-
- return 1 if exists($targets{"*"});
- return 1 if exists($targets{$dest->{target}});
-
- if ($dest->{server}) {
- my $tag = $dest->{server}->{tag};
- return 1 if exists($targets{$tag . "/*"});
- return 1 if exists($targets{$tag . "/" . $dest->{target}});
- }
-
- return 0;
-}
-
-sub sig_printtext {
- my ($dest, $text, $stripped) = @_;
-
- my $opt = MSGLEVEL_HILIGHT;
- my $shownetwork = Irssi::settings_get_bool('hilightwin_show_network');
-
- if(Irssi::settings_get_bool('hilightwin_showprivmsg')) {
- $opt = MSGLEVEL_HILIGHT|MSGLEVEL_MSGS;
- }
-
- if(
- ($dest->{level} & ($opt)) &&
- ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0 &&
- (!is_ignored($dest))
- ) {
- my $window = Irssi::window_find_name('[hilights]');
- $text =~ s/^[[:space:]]*/ /; # fix nm2.pl output
-
- if ($dest->{level} & MSGLEVEL_PUBLIC) {
- $text = $dest->{target} . '14]' . $text;
- $text = '14[' . $dest->{server}->{tag} . "14/" . $text if ($shownetwork);
- } elsif ($shownetwork) {
- $text = $dest->{server}->{tag} . ": " . $text;
- }
- $text =~ s/%/%%/g;
- $window->print($text, MSGLEVEL_CLIENTCRAP) if ($window);
- }
-}
-
-my $window = Irssi::window_find_name('[hilights]');
-Irssi::print("Create a window named 'hilight'") if (!$window);
-
-Irssi::settings_add_bool('hilightwin','hilightwin_showprivmsg',1);
-Irssi::settings_add_str('hilightwin', 'hilightwin_ignore_targets', '');
-Irssi::settings_add_bool('hilightwin','hilightwin_show_network', 0);
-
-Irssi::signal_add('print text', 'sig_printtext');
-
-# vim:set ts=4 sw=4 et:
diff --git a/.config/irssi/scripts/autorun/history.pl b/.config/irssi/scripts/autorun/history.pl
@@ -1,146 +0,0 @@
-# Search within your typed history as you type (like ctrl-R in bash)
-# Usage:
-# * First do: /bind ^R /history_search
-# * Then type ctrl-R and type what you're searching for
-# * Optionally, you can bind something to "/history_search -forward" to go forward in the results
-
-# Copyright 2007-2009 Wouter Coekaerts <coekie@irssi.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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use Irssi 20070804;
-use Irssi::TextUI;
-
-use vars qw($VERSION %IRSSI);
-$VERSION = '2.1';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'coekie@irssi.org',
- name => 'history_search',
- description => 'Search within your typed history as you type (like ctrl-R in bash)',
- license => 'GPLv2 or later',
- url => 'http://wouter.coekaerts.be/irssi/',
-);
-
-# is the searching enabled?
-my $enabled = 0;
-# the typed text (the query) last time a key was pressed
-my $prev_typed;
-# the position in the input of where the typed text started.
-# everything before it is not typed by the user but added by this script as part of the result
-my $prev_startpos;
-# the current list of matches
-my @matches;
-# at what place are we in @matches?
-my $current_match_index;
-
-Irssi::command_bind('history_search', sub {
- my ($data, $server, $item) = @_;
- if ($data !~ /^ *(-forward)? *$/) {
- Irssi::print("history_search: Unknown arguments: $data");
- return;
- }
- my $forward = $1 eq '-forward';
-
- if (! $enabled) {
- $enabled = 1;
- $prev_typed = '';
- $prev_startpos = 0;
- @matches = ();
- $current_match_index = -1;
- } else {
- if ($forward) {
- if ($current_match_index + 1 < scalar(@matches)) {
- $current_match_index++;
- }
- } else { # backwards
- if ($current_match_index > 0) {
- $current_match_index--;
- }
- }
- }
-});
-
-Irssi::signal_add_last 'gui key pressed' => sub {
- my ($key) = @_;
-
- if ($key == 10 || $key == 13 || $key == 27) { # enter or escape
- $enabled = 0;
- }
-
- return unless $enabled;
-
- # get the content of the input line
- my $prompt = Irssi::parse_special('$L');
- my $pos = Irssi::gui_input_get_pos();
-
- # stop if the cursor is before the position where the typing started (e.g. if user pressed backspace more than he typed characters)
- if ($pos < $prev_startpos) {
- $enabled = 0;
- return;
- }
-
- # get the part of the input line that the user typed (strip the part before and after which this script added)
- my $typed = substr($prompt, $prev_startpos, ($pos-$prev_startpos));
-
- if ($typed ne $prev_typed) { # something changed
- # find matches
- find_matches($typed);
-
- # start searching from the end again
- $current_match_index = scalar(@matches) - 1;
- }
-
- # if nothing was found, just show what the user typed
- # else, show the current match
- my $result = ($current_match_index == -1) ? $typed : $matches[$current_match_index];
-
- # update the input line
- my $startpos = index(lc($result), lc($typed));
- Irssi::gui_input_set($result);
- Irssi::gui_input_set_pos($startpos + length($typed));
-
- # remember for next time
- $prev_typed = $typed;
- $prev_startpos = $startpos;
-};
-
-# find matches for the given user-typed text, and put it in @matches
-sub find_matches($) {
- my ($typed) = @_;
- if (Irssi::version() > 20090117) {
- $typed = lc($typed);
- my @history;
- if ($prev_typed ne '' && index($typed, lc($prev_typed)) != -1) { # previous typed plus more
- @history = @matches; # only search in previous results
- } else {
- @history = Irssi::active_win->get_history_lines();
- }
- @matches = ();
- for my $history_line (@history) {
- my $startpos = index(lc($history_line), $typed);
- if ($startpos != -1) {
- push @matches, $history_line;
- }
- }
- } else { # older irssi version, can only get the last match
- @matches = ();
- my $last_match = Irssi::parse_special('$!' . $typed . '!');
- if ($last_match ne '') {
- push @matches, $last_match;
- }
- }
-}
diff --git a/.config/irssi/scripts/autorun/keepnick.pl b/.config/irssi/scripts/autorun/keepnick.pl
@@ -1,458 +0,0 @@
-# keepnick - irssi 0.7.98.CVS
-#
-# $Id: keepnick.pl,v 1.19 2013/05/23 05:08:34 peder Exp $
-#
-# Copyright (C) 2001, 2002, 2006, 2013 by Peder Stray <peder@ninja.no>
-#
-
-use strict;
-use Irssi 20011118.1727;
-use Irssi::Irc;
-
-# ======[ Script Header ]===============================================
-
-use vars qw{$VERSION %IRSSI};
-($VERSION) = '$Revision: 1.19 $' =~ / (\d+\.\d+) /;
-%IRSSI = (
- name => 'keepnick',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/keepnick.pl',
- license => 'GPL',
- description => 'Try to get your nick back when it becomes available.',
- );
-
-# ======[ Variables ]===================================================
-
-my(%keepnick); # nicks we want to keep
-my(%getnick); # nicks we are currently waiting for
-my(%inactive); # inactive chatnets
-my(%manual); # manual nickchanges
-
-# ======[ Helper functions ]============================================
-
-# --------[ change_nick ]-----------------------------------------------
-
-sub change_nick {
- my($server,$nick) = @_;
- $server->redirect_event('keepnick nick', 1, ":$nick", -1, undef,
- {
- "event nick" => "redir keepnick nick",
- "" => "event empty",
- });
- $server->send_raw("NICK :$nick");
-}
-
-# --------[ check_nick ]------------------------------------------------
-
-sub check_nick {
- my($server,$net,$nick);
-
- %getnick = (); # clear out any old entries
-
- for $net (keys %keepnick) {
- next if $inactive{$net};
- $server = Irssi::server_find_chatnet($net);
- next unless $server;
- next if lc $server->{nick} eq lc $keepnick{$net};
-
- $getnick{$net} = $keepnick{$net};
- }
-
- for $net (keys %getnick) {
- $server = Irssi::server_find_chatnet($net);
- next unless $server;
- next unless ref($server) eq 'Irssi::Irc::Server'; # this only work on IRC
- $nick = $getnick{$net};
- if (lc $server->{nick} eq lc $nick) {
- delete $getnick{$net};
- next;
- }
- $server->redirect_event('keepnick ison', 1, '', -1, undef,
- { "event 303" => "redir keepnick ison" });
- $server->send_raw("ISON :$nick");
- }
-}
-
-# --------[ load_nicks ]------------------------------------------------
-
-sub load_nicks {
- my($file) = Irssi::get_irssi_dir."/keepnick";
- my($count) = 0;
- local(*CONF);
-
- %keepnick = ();
- open CONF, "<", $file;
- while (<CONF>) {
- my($net,$nick) = split;
- if ($net && $nick) {
- $keepnick{lc $net} = $nick;
- $count++;
- }
- }
- close CONF;
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Loaded $count nicks from $file");
-}
-
-# --------[ save_nicks ]------------------------------------------------
-
-sub save_nicks {
- my($auto) = @_;
- my($file) = Irssi::get_irssi_dir."/keepnick";
- my($count) = 0;
- local(*CONF);
-
- return if $auto && !Irssi::settings_get_bool('keepnick_autosave');
-
- open CONF, ">", $file;
- for my $net (sort keys %keepnick) {
- print CONF "$net\t$keepnick{$net}\n";
- $count++;
- }
- close CONF;
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Saved $count nicks to $file")
- unless $auto;
-}
-
-# --------[ server_printformat ]----------------------------------------
-
-sub server_printformat {
- my($server,$level,$format,@params) = @_;
- my($emitted) = 0;
- for my $win (Irssi::windows) {
- for my $item ($win->items) {
- next unless ref $item;
- if ($item->{server}{chatnet} eq $server->{chatnet}) {
- $item->printformat($level,$format,@params);
- $emitted++;
- last;
- }
- }
- }
- $server->printformat(undef,$level,$format,@params)
- unless $emitted;
-}
-
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_message_nick ]------------------------------------------
-
-# if anyone changes their nick, check if we want their old one.
-sub sig_message_nick {
- my($server,$newnick,$oldnick) = @_;
- my($chatnet) = lc $server->{chatnet};
- if (lc $oldnick eq lc $getnick{$chatnet}) {
- change_nick($server, $getnick{$chatnet});
- }
-}
-
-# --------[ sig_message_own_nick ]--------------------------------------
-
-# if we change our nick, check it to see if we wanted it and if so
-# remove it from the list.
-sub sig_message_own_nick {
- my($server,$newnick,$oldnick) = @_;
- my($chatnet) = lc $server->{chatnet};
- if (lc $newnick eq lc $keepnick{$chatnet}) {
- delete $getnick{$chatnet};
- if ($inactive{$chatnet}) {
- delete $inactive{$chatnet};
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_unhold',
- $newnick, $chatnet);
- }
- } elsif (lc $oldnick eq lc $keepnick{$chatnet} &&
- lc $newnick eq lc $manual{$chatnet}) {
- $inactive{$chatnet} = 1;
- delete $getnick{$chatnet};
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_hold',
- $oldnick, $chatnet);
- }
-}
-
-# --------[ sig_message_own_nick_block ]--------------------------------
-
-sub sig_message_own_nick_block {
- my($server,$new,$old,$addr) = @_;
- Irssi::signal_stop();
- if (Irssi::settings_get_bool('keepnick_quiet')) {
- Irssi::printformat(MSGLEVEL_NICKS | MSGLEVEL_NO_ACT,
- 'keepnick_got_nick', $new, $server->{chatnet});
- } else {
- server_printformat($server, MSGLEVEL_NICKS | MSGLEVEL_NO_ACT,
- 'keepnick_got_nick', $new, $server->{chatnet});
- }
-}
-
-# --------[ sig_message_quit ]------------------------------------------
-
-# if anyone quits, check if we want their nick.
-sub sig_message_quit {
- my($server,$nick) = @_;
- my($chatnet) = lc $server->{chatnet};
- if (lc $nick eq lc $getnick{$chatnet}) {
- change_nick($server, $getnick{$chatnet});
- }
-}
-
-# --------[ sig_redir_keepnick_ison ]-----------------------------------
-
-sub sig_redir_keepnick_ison {
- my($server,$text) = @_;
- my $nick = $getnick{lc $server->{chatnet}};
- change_nick($server, $nick)
- unless $text =~ /:\Q$nick\E\s?$/i;
-}
-
-# --------[ sig_redir_keepnick_nick ]-----------------------------------
-
-sub sig_redir_keepnick_nick {
- my($server,$args,$nick,$addr) = @_;
- Irssi::signal_add_first('message own_nick', 'sig_message_own_nick_block');
- Irssi::signal_emit('event nick', @_);
- Irssi::signal_remove('message own_nick', 'sig_message_own_nick_block');
-}
-
-# --------[ sig_setup_reread ]------------------------------------------
-
-# main setup is reread, so let us do it too
-sub sig_setup_reread {
- load_nicks;
-}
-
-# --------[ sig_setup_save ]--------------------------------------------
-
-# main config is saved, and so we should save too
-sub sig_setup_save {
- my($mainconf,$auto) = @_;
- save_nicks($auto);
-}
-
-# ======[ Commands ]====================================================
-
-# --------[ KEEPNICK ]--------------------------------------------------
-
-# Usage: /KEEPNICK [-net <chatnet>] [<nick>]
-sub cmd_keepnick {
- my(@params) = split " ", shift;
- my($server) = @_;
- my($chatnet,$nick,@opts);
-
- # parse named parameters from the parameterlist
- while (@params) {
- my($param) = shift @params;
- if ($param =~ /^-(chat|irc)?net$/i) {
- $chatnet = shift @params;
- } elsif ($param =~ /^-/) {
- Irssi::print("Unknown parameter $param");
- } else {
- push @opts, $param;
- }
- }
- $nick = shift @opts;
-
- # check if the ircnet specified (if any) is valid, and if so get the
- # server for it
- if ($chatnet) {
- my($cn) = Irssi::chatnet_find($chatnet);
- unless ($cn) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Unknown chat network: $chatnet");
- return;
- }
- $chatnet = $cn->{name};
- $server = Irssi::server_find_chatnet($chatnet);
- }
-
- # if we need a server, check if the one we got is connected.
- unless ($server || ($nick && $chatnet)) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Not connected to server");
- return;
- }
-
- # lets get the chatnet, and the nick we want
- $chatnet ||= $server->{chatnet};
- $nick ||= $server->{nick};
-
- # check that we really have a chatnet
- unless ($chatnet) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Unable to find server network, maybe you forgot /server add before connecting?");
- return;
- }
-
- if ($inactive{lc $chatnet}) {
- delete $inactive{lc $chatnet};
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_unhold',
- $nick, $chatnet);
- }
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_add', $nick,
- $chatnet);
-
- $keepnick{lc $chatnet} = $nick;
-
- save_nicks(1);
- check_nick();
-}
-
-# --------[ UNKEEPNICK ]------------------------------------------------
-
-# Usage: /UNKEEPNICK [<chatnet>]
-sub cmd_unkeepnick {
- my($chatnet,$server) = @_;
-
- # check if the ircnet specified (if any) is valid, and if so get the
- # server for it
- if ($chatnet) {
- my($cn) = Irssi::chatnet_find($chatnet);
- unless ($cn) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
- "Unknown chat network: $chatnet");
- return;
- }
- $chatnet = $cn->{name};
- } else {
- $chatnet = $server->{chatnet};
- }
-
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_remove',
- $keepnick{lc $chatnet}, $chatnet);
-
- delete $keepnick{lc $chatnet};
- delete $getnick{lc $chatnet};
-
- save_nicks(1);
-}
-
-# --------[ LISTNICK ]--------------------------------------------------
-
-# Usage: /LISTNICK
-sub cmd_listnick {
- my(@nets) = sort keys %keepnick;
- my $net;
- if (@nets) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_list_header');
- for (@nets) {
- $net = Irssi::chatnet_find($_);
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_list_line',
- $keepnick{$_},
- $net ? $net->{name} : ">$_<",
- $inactive{$_}?'inactive':'active');
- }
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_list_footer');
- } else {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_list_empty');
- }
-}
-
-# --------[ NICK ]------------------------------------------------------
-
-sub cmd_nick {
- my($data,$server) = @_;
- my($nick) = split " ", $data;
- return unless $server;
- $manual{lc $server->{chatnet}} = $nick;
-}
-
-# ======[ Setup ]=======================================================
-
-# --------[ Register settings ]-----------------------------------------
-
-Irssi::settings_add_bool('keepnick', 'keepnick_autosave', 1);
-Irssi::settings_add_bool('keepnick', 'keepnick_quiet', 0);
-
-# --------[ Register formats ]------------------------------------------
-
-Irssi::theme_register(
-[
- 'keepnick_crap',
- '{line_start}{hilight Keepnick:} $0',
-
- 'keepnick_add',
- '{line_start}{hilight Keepnick:} Now keeping {nick $0} on [$1]',
-
- 'keepnick_remove',
- '{line_start}{hilight Keepnick:} Stopped trying to keep {nick $0} on [$1]',
-
- 'keepnick_hold',
- '{line_start}{hilight Keepnick:} Nickkeeping deactivated on [$1]',
-
- 'keepnick_unhold',
- '{line_start}{hilight Keepnick:} Nickkeeping reactivated on [$1]',
-
- 'keepnick_list_empty',
- '{line_start}{hilight Keepnick:} No nicks in keep list',
-
- 'keepnick_list_header',
- '',
-
- 'keepnick_list_line',
- '{line_start}{hilight Keepnick:} Keeping {nick $0} in [$1] ($2)',
-
- 'keepnick_list_footer',
- '',
-
- 'keepnick_got_nick',
- '{hilight Keepnick:} Nickstealer left [$1], got {nick $0} back',
-
-]);
-
-# --------[ Register signals ]------------------------------------------
-
-Irssi::signal_add('message quit', 'sig_message_quit');
-Irssi::signal_add('message nick', 'sig_message_nick');
-Irssi::signal_add('message own_nick', 'sig_message_own_nick');
-
-Irssi::signal_add('redir keepnick ison', 'sig_redir_keepnick_ison');
-Irssi::signal_add('redir keepnick nick', 'sig_redir_keepnick_nick');
-
-Irssi::signal_add('setup saved', 'sig_setup_save');
-Irssi::signal_add('setup reread', 'sig_setup_reread');
-
-# --------[ Register commands ]-----------------------------------------
-
-Irssi::command_bind("keepnick", "cmd_keepnick");
-Irssi::command_bind("unkeepnick", "cmd_unkeepnick");
-Irssi::command_bind("listnick", "cmd_listnick");
-Irssi::command_bind("nick", "cmd_nick");
-
-# --------[ Register timers ]-------------------------------------------
-
-Irssi::timeout_add(12000, 'check_nick', '');
-
-# --------[ Register redirects ]----------------------------------------
-
-Irssi::Irc::Server::redirect_register('keepnick ison', 0, 0,
- undef,
- {
- "event 303" => -1,
- },
- undef );
-
-Irssi::Irc::Server::redirect_register('keepnick nick', 0, 0,
- undef,
- {
- "event nick" => 0,
- "event 432" => -1, # ERR_ERRONEUSNICKNAME
- "event 433" => -1, # ERR_NICKNAMEINUSE
- "event 437" => -1, # ERR_UNAVAILRESOURCE
- "event 484" => -1, # ERR_RESTRICTED
- },
- undef );
-
-# --------[ Load config ]-----------------------------------------------
-
-load_nicks;
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-# vim:set ts=8 sw=4:
diff --git a/.config/irssi/scripts/autorun/lastspoke.pl b/.config/irssi/scripts/autorun/lastspoke.pl
@@ -1,46 +0,0 @@
-use strict;
-use vars qw($VERSION %IRSSI);
-
-use Irssi;
-$VERSION = '2.1';
-%IRSSI = (
- authors => 'Daenyth',
- contact => 'Daenyth /at/ gmail /dot/ com',
- name => 'Complete Last-Spoke',
- description => 'When using tab completion on an empty input buffer, complete to the nick of the person who spoke most recently.',
- license => 'GPL2',
-);
-
-my %list_of_speakers;
-
-sub complete_to_last_nick {
- my ($strings, $window, $word, $linestart, $want_space) = @_;
- return unless ($linestart eq '' && $word eq '');
-
- my $last_speaker = get_last_speaker($window);
- return unless defined $last_speaker;
- my $suffix = Irssi::settings_get_str('completion_char');
- @$strings = $last_speaker . $suffix;
- $$want_space = 1;
- Irssi::signal_stop();
-}
-
-sub get_last_speaker {
- my $window = shift;
- return $list_of_speakers{$window->{active}->{name}};
-}
-
-sub store_last_speaker {
- my ($server, $message, $speaker, $address, $target) = @_;
- $list_of_speakers{$target} = $speaker;
-}
-
-sub store_last_actor {
- my ($server, $args, $actor, $address, $target) = @_;
- $list_of_speakers{$target} = $actor;
-}
-
-Irssi::signal_add_first( 'complete word', \&complete_to_last_nick );
-Irssi::signal_add_last ( 'message public', \&store_last_speaker );
-Irssi::signal_add_last ( 'ctcp action', \&store_last_actor );
-
diff --git a/.config/irssi/scripts/autorun/ls.pl b/.config/irssi/scripts/autorun/ls.pl
@@ -1,51 +0,0 @@
-use strict;
-use vars qw($VERSION %IRSSI);
-use Irssi 20020120;
-$VERSION = "0.03";
-%IRSSI = (
- authors => "c0ffee",
- contact => "c0ffee\@penguin-breeder.org",
- name => "List nicks in channel",
- description => "Use /ls <regex> to show all nicks (including ident\@host) matching regex in the current channel",
- license => "Public Domain",
- url => "http://www.penguin-breeder.org/irssi/",
- changed => "Sun Sep 17 06:31 CEST 2017",
-);
-
-
-sub cmd_ls {
- my ($data, $server, $channel) = @_;
-
- if ($channel->{type} ne "CHANNEL") {
- Irssi::print("You are not on a channel");
-
- return;
- }
-
- $channel->print("--- Search results:");
-
- my @nicks = $channel->nicks();
-
- my $re = eval { qr/$data/i };
- if (not $re) {
- chomp $@;
- $channel->print("Invalid regex pattern:\n$@");
- return;
- }
-
- my $found;
- foreach my $nick (@nicks) {
- my $n = $nick->{nick} . "!" . $nick->{host};
-
- if ($n =~ $re) {
- $channel->print($n);
- $found = 1;
- }
- }
-
- if (not $found) {
- $channel->print("No matches");
- }
-}
-
-Irssi::command_bind('ls','cmd_ls');
diff --git a/.config/irssi/scripts/autorun/nickcolor.pl b/.config/irssi/scripts/autorun/nickcolor.pl
@@ -1,1120 +0,0 @@
-use strict;
-use warnings;
-
-our $VERSION = '0.4.0'; # c274f630aff9967
-our %IRSSI = (
- authors => 'Nei',
- name => 'nickcolor_expando',
- description => 'colourise nicks',
- license => 'GPL v2',
- );
-
-# inspired by bc-bd's nm.pl and mrwright's nickcolor.pl
-
-# Usage
-# =====
-# after loading the script, add the colour expando to the format
-# (themes' abstracts are not supported)
-#
-# /format pubmsg {pubmsgnick $2 {pubnick $nickcolor$0}}$1
-#
-# alternatively, use it together with nm2 script
-
-# Options
-# =======
-# /set neat_colors <list of colours>
-# * the list of colours for automatic colouring (you can edit it more
-# conveniently with /neatcolor colors)
-#
-# /set neat_ignorechars <regex>
-# * regular expression of characters to remove from nick before
-# calculating the hash function
-#
-# /set neat_color_reassign_time <time>
-# * if the user has not spoken for so long, the assigned colour is
-# forgotten and another colour may be picked next time the user
-# speaks
-#
-# /set neat_global_colors <ON|OFF>
-# * more strongly prefer one global colour per nickname regardless of
-# channel
-
-# Commands
-# ========
-# /neatcolor
-# * show the current colour distribution of nicks
-#
-# /neatcolor set [<network>/<#channel>] <nick> <colour>
-# * set a fixed colour for nick
-#
-# /neatcolor reset [<network>/<#channel>] <nick>
-# * remove a set colour of nick
-#
-# /neatcolor get [<network>/<#channel>] <nick>
-# * query the current or set colour of nick
-#
-# /neatcolor re [<network>/<#channel>] <nick>
-# * force change the colour of nick to a random other colour (to
-# manually resolve clashes)
-#
-# /neatcolor save
-# * save the colours to ~/.irssi/saved_nick_colors
-#
-# /neatcolor reset --all
-# * re-set all colours
-#
-# /neatcolor colors
-# * show currently configured colours, in colour
-#
-# /neatcolor colors add <list of colours>
-# /neatcolor colors remove <list of colours>
-# * add or remove these colours from the neat_colors setting
-
-
-sub cmd_help_neatcolor {
- print CLIENTCRAP <<HELP
-%9Syntax:%9
-
-NEATCOLOR
-NEATCOLOR SET [<network>/<#channel>] <nick> <colour>
-NEATCOLOR RESET [<network>/<#channel>] <nick>
-NEATCOLOR GET [<network>/<#channel>] <nick>
-NEATCOLOR RE [<network>/<#channel>] <nick>
-NEATCOLOR SAVE
-NEATCOLOR RESET --all
-NEATCOLOR COLORS
-NEATCOLOR COLORS ADD <list of colours>
-NEATCOLOR COLORS REMOVE <list of colours>
-
-%9Parameters:%9
-
- SET: set a fixed colour for nick
- RESET: remove a set colour of nick
- GET: query the current or set colour of nick
- RE: force change the colour of nick to a random other
- colour (to manually resolve clashes)
- SAVE: save the colours to ~/.irssi/saved_nick_colors
- RESET --all: re-set all colours
- COLORS: show currently configured colours, in colour
- COLORS ADD/REMOVE: add or remove these colours from the
- neat_colors setting
-
- If no parameters are given, the current colour distribution of
- nicks is shown.
-
-%9Description:%9
-
- Manages nick based colouring
-
-HELP
-}
-
-use Hash::Util qw(lock_keys);
-use Irssi;
-
-
-{ package Irssi::Nick }
-
-my @action_protos = qw(irc silc xmpp);
-my (%set_colour, %avoid_colour, %has_colour, %last_time, %netchan_hist);
-my ($expando, $iexpando, $ignore_re, $ignore_setting, $global_colours, $retain_colour_time, @colours, $exited, $session_load_time);
-($expando, $iexpando) = ('', ''); # Initialise to empty
-
-# the numbers for the scoring system, highest colour value will be chosen
-my %scores = (
- set => 200,
- keep => 5,
- global => 4,
- hash => 3,
-
- avoid => -20,
- hist => -10,
- used => -2,
- );
-lock_keys(%scores);
-
-my $history_lines = 40;
-my $global_mode = 1; # start out with global nick colour
-
-my @colour_bags = (
- [qw[20 30 40 50 04 66 0C 61 60 67 6L]], # RED
- [qw[37 3D 36 4C 46 5C 56 6C 6J 47 5D 6K 6D 57 6E 5E 4E 4K 4J 5J 4D 5K 6R]], # ORANGE
- [qw[3C 4I 5I 6O 6I 06 4O 5O 3U 0E 5U 6U 6V 6P 6Q 6W 5P 4P 4V 4W 5W 4Q 5Q 5R 6Y 6X]], # YELLOW
- [qw[26 2D 2C 3I 3O 4U 5V 2J 3V 3P 3J 5X]], # YELLOW-GREEN
- [qw[16 1C 2I 2U 2O 1I 1O 1V 1P 02 0A 1U 2V 4X]], # GREEN
- [qw[1D 1J 1Q 1W 1X 2Y 2S 2R 3Y 3Z 3S 3R 2K 3K 4S 5Z 5Y 4R 3Q 2Q 2X 2W 3X 3W 2P 4Y]], # GREEN-TURQUOIS
- [qw[17 1E 1L 1K 1R 1S 03 1M 1N 1T 0B 1Y 1Z 2Z 4Z]], # TURQUOIS
- [qw[28 2E 18 1F 19 1G 1A 1B 1H 2N 2H 09 3H 3N 2T 3T 2M 2G 2A 2F 2L 3L 3F 4M 3M 3G 29 4T 5T]], # LIGHT-BLUE
- [qw[11 12 23 25 24 13 14 01 15 2B 4N]], # DARK-BLUE
- [qw[22 33 44 0D 45 5B 6A 5A 5H 3B 4H 3A 4G 39 4F 6S 6T 5L 5N]], # VIOLET
- [qw[21 32 42 53 63 52 43 34 35 55 65 6B 4B 4A 48 5G 6H 5M 6M 6N]], # PINK
- [qw[38 31 05 64 54 41 51 62 69 68 59 5F 6F 58 49 6G]], # ROSE
- [qw[7A 00 10 7B 7C 7D 7E 7G 7F]], # DARK-GRAY
- [qw[7H 7I 27 7K 7J 08 7L 3E 7O 7Q 7N 7M 7P]], # GRAY
- [qw[7S 7T 7R 4L 7W 7U 7V 5S 07 7X 6Z 0F]], # LIGHT-GRAY
- );
-my %colour_bags;
-{ my $idx = 0;
- for my $bag (@colour_bags) {
- @colour_bags{ @$bag } = ($idx)x@$bag;
- }
- continue {
- ++$idx;
- }
-}
-my @colour_list = map { @$_ } @colour_bags;
-my @bases = split //, 'kbgcrmywKBGCRMYW04261537';
-my %base_map = map { $bases[$_] => sprintf '%02X', ($_ % 0x10) } 0..$#bases;
-my %ext_to_base_map = map { (sprintf '%02X', $_) => $bases[$_] } 0..15;
-
-sub expando_neatcolour {
- return $expando;
-}
-
-sub expando_neatcolour_inv {
- return $iexpando;
-}
-
-# one-at-a-time hash
-sub simple_hash {
- use integer;
- my $hash = 0x5065526c + length $_[0];
- for my $ord (unpack 'U*', $_[0]) {
- $hash += $ord;
- $hash += $hash << 10;
- $hash &= 0xffffffff;
- $hash ^= $hash >> 6;
- }
- $hash += $hash << 3;
- $hash &= 0xffffffff;
- $hash ^= $hash >> 11;
- $hash = $hash + ($hash << 15);
- $hash &= 0xffffffff;
-}
-
-{ my %lut1;
- my @z = (0 .. 9, 'A' .. 'Z');
- for my $x (16..255) {
- my $idx = $x - 16;
- my $col = 1+int($idx / @z);
- $lut1{ $col . @z[(($col > 6 ? 10 : 0) + $idx) % @z] } = $x;
- }
- for my $idx (0..15) {
- $lut1{ (sprintf "%02X", $idx) } = ($idx&8) | ($idx&4)>>2 | ($idx&2) | ($idx&1)<<2;
- }
-
- sub debug_ansicolour {
- my ($col, $bg) = @_;
- return '' unless defined $col && exists $lut1{$col};
- $bg = $bg ? 48 : 38;
- "\e[$bg;5;$lut1{$col}m"
- }
-}
-sub debug_colour {
- my ($col, $bg) = @_;
- defined $col ? (debug_ansicolour($col, $bg) . $col . "\e[0m") : '(none)'
-}
-sub debug_score {
- my ($score) = @_;
- if ($score == 0) {
- return $score
- }
- my @scale = $score > 0 ? (qw(16 1C 1I 1U 2V 4X)) : (qw(20 30 40 60 67 6L));;
- my $v = (log 1+ abs $score)*(log 20);
- debug_ansicolour($scale[$v >= $#scale ? -1 : $v], 1) . $score . "\e[0m"
-}
-sub debug_reused {
- my ($netchan, $nick, $col) = @_;
- my $chc = simple_hash($netchan);
- my $hashcolour = @colours ? $colours[ $chc % @colours ] : 0;
-}
-sub debug_scores {
- my ($netchan, $nick, $col, $prios, $colours) = @_;
- my $inprogress;
- unless (ref $prios) {
- $inprogress = $prios;
- $prios = [ sort { $colours->{$b} <=> $colours->{$a} } grep { exists $colours->{$_} } @colour_list ];
- }
- my $chc = simple_hash($netchan);
- my $hashcolour = @colours ? $colours[ $chc % @colours ] : 0;
- unless ($inprogress) {
- }
- else {
- }
- for my $i (0..$#$prios) {
- }
-}
-
-sub colourise_nt {
- my ($netchan, $nick, $weak) = @_;
- my $time = time;
-
- my $g_or_n = $global_colours ? '' : $netchan;
-
- my $old_colour = $has_colour{$g_or_n}{$nick} // $has_colour{$netchan}{$nick};
- my $last_time = $last_time{$g_or_n}{$nick} // $last_time{$netchan}{$nick};
-
- my $keep_score = $weak ? $scores{keep} + $scores{set} : $scores{keep};
-
- unless ($weak) {
- $last_time{$netchan}{$nick}
- = $last_time{''}{$nick} = $time;
- }
- else {
- $last_time{$netchan}{$nick} ||= 0;
- }
-
- my $colour;
- if (defined $old_colour && ($weak || (defined $last_time
- && ($last_time + $retain_colour_time > $time
- || ($last_time > 0 && grep { $_->[0] eq $nick } @{ $netchan_hist{$netchan} // [] }))))) {
- $colour = $old_colour;
- }
- else {
- # search for a suitable colour
- my %colours = map { $_ => 0 } @colours;
- my $hashnick = $nick;
- $hashnick =~ s/$ignore_re//g if (defined $ignore_re && length $ignore_re);
- my $hash = simple_hash($global_mode ? "/$hashnick" : "$netchan/$hashnick");
-
- if (exists $set_colour{$netchan} && exists $set_colour{$netchan}{$nick}) {
- $colours{ $set_colour{$netchan}{$nick} } += $scores{set};
- }
- elsif (exists $set_colour{$netchan} && exists $set_colour{$netchan}{$hashnick}) {
- $colours{ $set_colour{$netchan}{$hashnick} } += $scores{set};
- }
- elsif (exists $set_colour{''} && exists $set_colour{''}{$nick}) {
- $colours{ $set_colour{''}{$nick} } += $scores{set};
- }
- elsif (exists $set_colour{''} && exists $set_colour{''}{$hashnick}) {
- $colours{ $set_colour{''}{$hashnick} } += $scores{set};
- }
-
- if (exists $avoid_colour{$netchan} && exists $avoid_colour{$netchan}{$nick}) {
- for (@{ $avoid_colour{$netchan}{$nick} }) {
- $colours{ $_ } += $scores{avoid} if exists $colours{ $_ };
- }
- }
- elsif (exists $avoid_colour{$g_or_n} && exists $avoid_colour{$g_or_n}{$nick}) {
- for (@{ $avoid_colour{$g_or_n}{$nick} }) {
- $colours{ $_ } += $scores{avoid} if exists $colours{ $_ };
- }
- }
-
- if (defined $old_colour) {
- $colours{$old_colour} += $keep_score
- if exists $colours{$old_colour};
- }
- elsif (exists $has_colour{''}{$nick}) {
- $colours{ $has_colour{''}{$nick} } += $scores{global}
- if exists $colours{ $has_colour{''}{$nick} };
- }
-
- if (@colours) {
- my $hashcolour = $colours[ $hash % @colours ];
- if (!defined $old_colour || $hashcolour ne $old_colour) {
- $colours{ $hashcolour } += $scores{hash};
- }
- }
-
- { my @netchans = $global_mode ? keys %has_colour : $netchan;
- my $total;
- my %colour_pens;
- for my $gnc (@netchans) {
- for my $onick (keys %{ $has_colour{$gnc} }) {
- next if $gnc ne $netchan && exists $has_colour{$netchan}{$onick};
- next unless exists $last_time{$gnc}{$onick};
- if ($last_time{$gnc}{$onick} + $retain_colour_time > $time # XXX
- || ($last_time{$gnc}{$onick} == 0 && $session_load_time + $retain_colour_time > $time)) {
- if (exists $colours{ $has_colour{$gnc}{$onick} }) {
- $colour_pens{ $has_colour{$gnc}{$onick} } += $scores{used};
- ++$total;
- }
- }
- }
- }
- for (keys %colour_pens) {
- $colours{ $_ } += $colour_pens{ $_ } / $total * @colours
- if @colours;
- }
- }
-
- { my $fac = 1;
- for my $gnetchan ($netchan, '') {
- my $idx = exp(-log($history_lines)/$scores{hist});
- for my $hent (reverse @{ $netchan_hist{$gnetchan} // [] }) {
- next unless defined $hent->[1];
- if ($hent->[0] ne $nick) {
- my $pen = 1;
- $pen *= 3 if length $nick == length $hent->[0];
- $pen *= 2 if (substr $nick, 0, 1) eq (substr $hent->[0], 0, 1)
- || 1 == abs +(length $nick) - (length $hent->[0]);
- $colours{ $hent->[1] } -= log($pen*$history_lines)/log($idx) / $fac
- if exists $colours{ $hent->[1] };
- }
- ++$idx;
- last if $idx > $history_lines;
- }
- ++$fac;
- }
- }
-
- { my %bag_pens;
- for my $co (keys %colours) {
- $bag_pens{ $colour_bags{$co} } -= $colours{$co}/2 if $colours{$co} < 0;
- }
- for my $bag (keys %bag_pens) {
- for my $co (@{ $colour_bags[$bag] }) {
- $colours{$co} -= $bag_pens{$bag} / @colours
- if @colours && exists $colours{$co};
- }
- }
- }
-
- my @prio_colours = sort { $colours{$b} <=> $colours{$a} } grep { exists $colours{$_} } @colour_list;
- my $stop_at = 0;
- while ($stop_at < $#prio_colours
- && $colours{ $prio_colours[$stop_at] } <= $colours{ $prio_colours[$stop_at + 1] }) {
- ++$stop_at;
- }
- $colour = $prio_colours[ $hash % ($stop_at + 1) ]
- if @prio_colours;
-
- }
-
- unless ($weak) {
- expire_hist($netchan, '');
-
- my $ent = [$nick, $colour];
- push @{ $netchan_hist{$netchan} }, $ent;
- push @{ $netchan_hist{''} }, $ent;
- }
-
- defined $colour ? ($has_colour{$g_or_n}{$nick} = $has_colour{$netchan}{$nick} = $colour) : $colour
-}
-
-sub expire_hist {
- for my $ch (@_) {
- if ($netchan_hist{$ch}
- && @{$netchan_hist{$ch}} > 2 * $history_lines) {
- splice @{$netchan_hist{$ch}}, 0, $history_lines;
- }
- }
-}
-
-sub msg_line_tag {
- my ($srv, $msg, $nick, $addr, $targ) = @_;
- my $colour = colourise_nt('/'.$nick, $nick);
- $expando = $colour ? format_expand('%X'.$colour) : '';
- $iexpando = $colour ? format_expand('%x'.$colour) : '';
-}
-
-# messy stuff below, hacked together by a non-perler (haydenh)
-sub join2mlt {
- my ($srv, $channel, $nick, $addr, $acc, $real) = @_;
- msg_line_tag($srv, $acc, $nick, $acc);
-}
-
-sub part2mlt {
- my ($srv, $channel, $nick, $addr, $reason) = @_;
- msg_line_tag($srv, $addr, $nick, $reason);
-}
-
-sub quit2mlt {
- my ($srv, $nick, $addr, $reason) = @_;
- msg_line_tag($srv, $addr, $nick, $reason);
-}
-
-sub kick2mlt {
- my ($srv, $channel, $nick, $kicker, $address, $reason) = @_;
- msg_line_tag($srv, $nick, $kicker, $reason);
-}
-
-sub nick2mlt {
- my ($srv, $nnick, $onick, $addr) = @_;
- msg_line_tag($srv, $addr, $onick, $addr);
-}
-
-sub invite2mlt {
- my ($srv, $chan, $nick, $addr) = @_;
- msg_line_tag($srv, $chan, $nick, $addr);
-}
-
-sub inviteo2mlt {
- my ($srv, $chan, $inv, $nick, $addr) = @_;
- msg_line_tag($srv, $chan, $inv, $addr);
-}
-
-sub topic2mlt {
- my ($srv, $chan, $topic, $nick, $addr) = @_;
- msg_line_tag($srv, $chan, $nick, $addr);
-}
-
-sub notice2mlt {
- my ($srv, $msg, $nick, $addr, $chan) = @_;
- msg_line_tag($srv, $chan, $nick, $addr);
-}
-
-sub msg_line_tag_xmppaction {
- clear_ref(), return unless @_;
- my ($srv, $msg, $nick, $targ) = @_;
- msg_line_tag($srv, $msg, $nick, undef, $targ);
-}
-
-sub msg_line_clear {
- clear_ref();
-}
-
-sub prnt_clear_public {
- my ($dest) = @_;
- clear_ref() if $dest->{level} & MSGLEVEL_PUBLIC;
-}
-
-sub clear_ref {
- $expando = '';
- $iexpando = '';
-}
-
-sub nicklist_changed {
- my ($chanobj, $nickobj, $old_nick) = @_;
-
- my $netchan = $chanobj->{server}{tag}.'/'.$chanobj->{name};
- my $nickstr = $nickobj->{nick};
-
- if (!exists $has_colour{''}{$nickstr} && exists $has_colour{''}{$old_nick}) {
- $has_colour{''}{$nickstr} = delete $has_colour{''}{$old_nick};
- }
- if (exists $has_colour{$netchan}{$old_nick}) {
- $has_colour{$netchan}{$nickstr} = delete $has_colour{$netchan}{$old_nick};
- }
-
- $last_time{$netchan}{$nickstr}
- = $last_time{''}{$nickstr} = time;
-
- for my $old_ent (@{ $netchan_hist{$netchan} }) {
- $old_ent->[0] = $nickstr if $old_ent->[0] eq $old_nick;
- }
-
-}
-
-{
- my %format2control = (
- 'F' => "\cDa", '_' => "\cDc", '|' => "\cDe", '#' => "\cDi", "n" => "\cDg", "N" => "\cDg",
- 'U' => "\c_", '8' => "\cV", 'I' => "\cDf",
- );
- my %bg_base = (
- '0' => '0', '4' => '1', '2' => '2', '6' => '3', '1' => '4', '5' => '5', '3' => '6', '7' => '7',
- 'x08' => '8', 'x09' => '9', 'x0a' => ':', 'x0b' => ';', 'x0c' => '<', 'x0d' => '=', 'x0e' => '>', 'x0f' => '?',
- );
- my %fg_base = (
- 'k' => '0', 'b' => '1', 'g' => '2', 'c' => '3', 'r' => '4', 'm' => '5', 'p' => '5', 'y' => '6', 'w' => '7',
- 'K' => '8', 'B' => '9', 'G' => ':', 'C' => ';', 'R' => '<', 'M' => '=', 'P' => '=', 'Y' => '>', 'W' => '?',
- );
- my @ext_colour_off = (
- '.', '-', ',',
- '+', "'", '&',
- );
- sub format_expand {
- my $copy = $_[0];
- $copy =~ s{%(Z.{6}|z.{6}|X..|x..|.)}{
- my $c = $1;
- if (exists $format2control{$c}) {
- $format2control{$c}
- }
- elsif (exists $bg_base{$c}) {
- "\cD/$bg_base{$c}"
- }
- elsif (exists $fg_base{$c}) {
- "\cD$fg_base{$c}/"
- }
- elsif ($c =~ /^[{}%]$/) {
- $c
- }
- elsif ($c =~ /^(z|Z)([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})$/) {
- my $bg = $1 eq 'z';
- my (@rgb) = map { hex $_ } $2, $3, $4;
- my $x = $bg ? 0x1 : 0;
- my $out = "\cD" . (chr -13 + ord '0');
- for (my $i = 0; $i < 3; ++$i) {
- if ($rgb[$i] > 0x20) {
- $out .= chr $rgb[$i];
- }
- else {
- $x |= 0x10 << $i; $out .= chr 0x20 + $rgb[$i];
- }
- }
- $out .= chr 0x20 + $x;
- $out
- }
- elsif ($c =~ /^(x)(?:0([[:xdigit:]])|([1-6])(?:([0-9])|([a-z]))|7([a-x]))$/i) {
- my $bg = $1 eq 'x';
- my $col = defined $2 ? hex $2
- : defined $6 ? 232 + (ord lc $6) - (ord 'a')
- : 16 + 36 * ($3 - 1) + (defined $4 ? $4 : 10 + (ord lc $5) - (ord 'a'));
- if ($col < 0x10) {
- my $chr = chr $col + ord '0';
- "\cD" . ($bg ? "/$chr" : "$chr/")
- }
- else {
- "\cD" . $ext_colour_off[($col - 0x10) / 0x50 + $bg * 3] . chr (($col - 0x10) % 0x50 - 1 + ord '0')
- }
- }
- else {
- "%$c"
- }
- }ge;
- $copy
- }
-}
-
-sub save_colours {
- open my $fid, '>', Irssi::get_irssi_dir() . '/saved_nick_colors'
- or do {
- Irssi::print("Error saving nick colours: $!", MSGLEVEL_CLIENTERROR)
- unless $exited;
- return;
- };
-
- local $\ = "\n";
- if (%set_colour) {
- print $fid '[set]';
- for my $netch (sort keys %set_colour) {
- for my $nick (sort keys %{ $set_colour{$netch} }) {
- print $fid "$netch/$nick:".$set_colour{$netch}{$nick};
- }
- }
- print $fid '';
- }
- my $time = time;
- print $fid '[set]';
- my %session_colour;
- for my $netch (sort keys %last_time) {
- for my $nick (sort keys %{ $last_time{$netch} }) {
- if (exists $has_colour{$netch} && exists $has_colour{$netch}{$nick}
- && ($last_time{$netch}{$nick} + $retain_colour_time > $time
- || ($last_time{$netch}{$nick} == 0 && $session_load_time + $retain_colour_time > $time)
- || grep { $_->[0] eq $nick } @{ $netchan_hist{$netch} // [] })) {
- $session_colour{$netch}{$nick} = $has_colour{$netch}{$nick};
- if (exists $session_colour{''}{$nick}) {
- if (defined $session_colour{''}{$nick}
- && $session_colour{''}{$nick} ne $session_colour{$netch}{$nick}) {
- $session_colour{''}{$nick} = undef;
- }
- }
- else {
- $session_colour{''}{$nick} = $session_colour{$netch}{$nick};
- }
- }
- }
- }
- for my $nick (sort keys %{ $session_colour{''} }) {
- if (defined $session_colour{''}{$nick}) {
- print $fid "/$nick:".$session_colour{''}{$nick};
- }
- else {
- for my $netch (sort keys %session_colour) {
- print $fid "$netch/$nick:".$session_colour{$netch}{$nick}
- if exists $session_colour{$netch}{$nick} && defined $session_colour{$netch}{$nick};
- }
- }
- }
-
- close $fid;
-}
-
-sub load_colours {
- $session_load_time = time;
-
- open my $fid, '<', Irssi::get_irssi_dir() . '/saved_nick_colors'
- or return;
- my $mode;
- while (my $line = <$fid>) {
- chomp $line;
- if ($line =~ /^\[(.*)\]$/) {
- $mode = $1;
- next;
- }
-
- my $colon = rindex $line, ':';
- next if $colon < 0;
- my $slash = rindex $line, '/', $colon;
- next if $slash < 0;
- my $col = substr $line, $colon +1;
- next unless length $col;
- my $netch = substr $line, 0, $slash;
- my $nick = substr $line, $slash +1, $colon-$slash -1;
- if ($mode eq 'set') {
- $set_colour{$netch}{$nick} = $col;
- }
- elsif ($mode eq 'session') {
- $has_colour{$netch}{$nick} = $col;
- $last_time{$netch}{$nick} = 0;
- }
- }
- close $fid;
-}
-
-sub UNLOAD {
- return if $exited;
- exit_save();
-}
-
-sub exit_save {
- $exited = 1;
- save_colours() if Irssi::settings_get_bool('settings_autosave');
-}
-
-sub get_nick_color2 {
- my ($tag, $chan, $nick, $format) = @_;
- my $col = colourise_nt('/'.$nick, $nick);
- $col ? $format ? format_expand('%X'.$col) : $col : ''
-}
-
-sub _cmd_colours_check {
- my ($add, $data) = @_;
- my @to_check = grep { defined && length } map {
- length == 1 ? $base_map{$_}
- : length == 3 ? substr $_, 1
- : $_ } map { /(?|x(..)|([0-7].)|(.))/gi }
- split ' ', $data;
- my @valid;
- my %scolours = map { $_ => undef } @colours;
- for my $c (@to_check) {
- if ((grep { $_ eq $c } @colour_list)) {
- if ($add) { next if exists $scolours{$c} }
- else { next if !exists $scolours{$c} }
- push @valid, $c;
- if ($add) { $scolours{$c} = undef; }
- else { delete $scolours{$c}; }
- }
- }
- (\@valid, \%scolours)
-}
-
-sub _cmd_colours_set {
- my $scolours = shift;
- Irssi::settings_set_str('neat_colors', join '', map { $ext_to_base_map{$_} // "X$_" } grep { exists $scolours->{$_} } @colour_list);
-}
-
-sub _cmd_colours_list {
- map { "%X$_".($ext_to_base_map{$_} // "X$_").'%n' } @{+shift}
-}
-
-sub cmd_neatcolor_colors_add {
- my ($data, $server, $witem) = @_;
- my ($added, $scolours) = _cmd_colours_check(1, $data);
- if (@$added) {
- _cmd_colours_set($scolours);
- Irssi::print("%_nce2%_: added @{[ _cmd_colours_list($added) ]} to neat_colors", MSGLEVEL_CLIENTCRAP);
- setup_changed();
- }
- else {
- Irssi::print("%_nce2%_: nothing added", MSGLEVEL_CLIENTCRAP);
- }
-}
-sub cmd_neatcolor_colors_remove {
- my ($data, $server, $witem) = @_;
- my ($removed, $scolours) = _cmd_colours_check(0, $data);
- if (@$removed) {
- _cmd_colours_set($scolours);
- Irssi::print("%_nce2%_: removed @{[ _cmd_colours_list($removed) ]} from neat_colors", MSGLEVEL_CLIENTCRAP);
- setup_changed();
- }
- else {
- Irssi::print("%_nce2%_: nothing removed", MSGLEVEL_CLIENTCRAP);
- }
-}
-
-sub cmd_neatcolor_colors {
- my ($data, $server, $witem) = @_;
- $data =~ s/\s+$//;
- unless (length $data) {
- Irssi::print("%_nce2%_: current colours: @{[ @colours ? _cmd_colours_list(\@colours) : '(none)' ]}");
- }
- Irssi::command_runsub('neatcolor colors', $data, $server, $witem);
-}
-
-sub cmd_neatcolor {
- my ($data, $server, $witem) = @_;
- $data =~ s/\s+$//;
- unless (length $data) {
- $witem ||= Irssi::active_win;
- my $time = time;
- my %distribution = map { $_ => 0 } @colours;
- for my $netch (keys %has_colour) {
- next unless length $netch;
- for my $nick (keys %{ $has_colour{$netch} }) {
- if (exists $last_time{$netch}{$nick}
- && ($last_time{$netch}{$nick} + $retain_colour_time > $time
- || grep { $_->[0] eq $nick } @{ $netchan_hist{$netch} // [] })) {
- $distribution{ $has_colour{$netch}{$nick} }++
- }
- }
- }
- $witem->print('%_nce2%_ Colour distribution: '.
- (join ', ',
- map { "%X$_$_:$distribution{$_}" }
- sort { $distribution{$b} <=> $distribution{$a} }
- grep { exists $distribution{$_} } @colour_list), MSGLEVEL_CLIENTCRAP);
- }
- Irssi::command_runsub('neatcolor', $data, $server, $witem);
-}
-
-sub _cmd_check_netchan_arg {
- my ($cmd, $netchan, $nick) = @_;
- my %global = map { $_ => undef } qw(set get reset);
- unless (length $netchan) {
- Irssi::print('%_nce2%_: no network/channel argument given for neatcolor '.$cmd
- .(exists $global{$cmd} ? ', use / to '.$cmd.' global colours' : ''),
- MSGLEVEL_CLIENTERROR);
- return;
- }
- elsif (-1 == index $netchan, '/') {
- Irssi::print('%_nce2%_: missing network/ in argument given for neatcolor '.$cmd, MSGLEVEL_CLIENTERROR);
- return;
- }
- elsif ($netchan =~ m\^[^/]+/$\) {
- Irssi::print('%_nce2%_: missing /channel in argument given for neatcolor '.$cmd, MSGLEVEL_CLIENTERROR);
- return;
- }
-
- unless (length $nick) {
- Irssi::print('%_nce2%_: no nick argument given for neatcolor '.$cmd, MSGLEVEL_CLIENTERROR);
- return;
- }
- elsif (-1 != index $nick, '/') {
- Irssi::print('%_nce2%_: / not supported in nicks in argument given for neatcolor '.$cmd, MSGLEVEL_CLIENTERROR);
- return;
- }
-
- return 1;
-}
-
-sub _cmd_check_colour {
- my ($cmd, $colour) = @_;
- $colour = substr $colour, 1 if length $colour == 3;
- $colour = $base_map{$colour} if length $colour == 1;
- unless (length $colour && grep { $_ eq $colour } @colour_list) {
- Irssi::print('%_nce2%_: no colour or invalid colour argument given for neatcolor '.$cmd, MSGLEVEL_CLIENTERROR);
- return;
- }
- return $colour;
-}
-
-sub cmd_neatcolor_set {
- my ($data, $server, $witem) = @_;
- my @args = split ' ', $data;
- if (@args < 2) {
- Irssi::print('%_nce2%_: not enough arguments for neatcolor set', MSGLEVEL_CLIENTERROR);
- return;
- }
- my $netchan;
- if (ref $witem) {
- $netchan = $witem->{server}{tag}.'/'.$witem->{name};
- }
- my $nick;
- my $colour;
- if (@args < 3) {
- ($nick, $colour) = @args;
- }
- else {
- ($netchan, $nick, $colour) = @args;
- }
-
- return unless _cmd_check_netchan_arg('set', $netchan, $nick);
- return unless defined ($colour = _cmd_check_colour('set', $colour));
-
- $set_colour{$netchan eq '/' ? '' : $netchan}{$nick} = $colour;
- for my $netch ($netchan eq '/' ? keys %has_colour
- : $global_colours ? ('', $netchan)
- : $netchan) {
- delete $has_colour{$netch}{$nick} unless
- exists $has_colour{$netch}{$nick} && $has_colour{$netch}{$nick} eq $colour;
- }
- Irssi::print("%_nce2%_: %X$colour$nick%n colour set to: %X$colour$colour%n ".($netchan eq '/' ? 'globally' : "in $netchan"), MSGLEVEL_CLIENTCRAP);
-}
-sub cmd_neatcolor_get {
- my ($data, $server, $witem) = @_;
- my @args = split ' ', $data;
- if (@args < 1) {
- Irssi::print('%_nce2%_: not enough arguments for neatcolor get', MSGLEVEL_CLIENTERROR);
- return;
- }
- my $netchan;
- if (ref $witem) {
- $netchan = $witem->{server}{tag}.'/'.$witem->{name};
- }
- my $nick;
- if (@args < 2) {
- $nick = $args[0];
- }
- else {
- ($netchan, $nick) = @args;
- }
-
- return unless _cmd_check_netchan_arg('get', $netchan, $nick);
-
- if ($netchan ne '/') {
- unless (exists $has_colour{$netchan} && exists $has_colour{$netchan}{$nick}) {
- Irssi::print("%_nce2%_: $nick is not coloured (yet) in $netchan", MSGLEVEL_CLIENTCRAP);
- }
- else {
- my $colour = $has_colour{$netchan}{$nick};
- Irssi::print("%_nce2%_: %X$colour$nick%n has colour: %X$colour$colour%n in $netchan", MSGLEVEL_CLIENTCRAP);
- }
- }
- my $hashnick = $nick;
- $hashnick =~ s/$ignore_re//g if (defined $ignore_re && length $ignore_re);
- if (exists $set_colour{$netchan} && exists $set_colour{$netchan}{$nick}) {
- my $colour = $set_colour{$netchan}{$nick};
- Irssi::print("%_nce2%_: set colour for %X$colour$nick%n in $netchan: %X$colour$colour%n ", MSGLEVEL_CLIENTCRAP);
- }
- elsif (exists $set_colour{$netchan} && exists $set_colour{$netchan}{$hashnick}) {
- my $colour = $set_colour{$netchan}{$hashnick};
- Irssi::print("%_nce2%_: set colour for %X$colour$hashnick%n in $netchan: %X$colour$colour%n ", MSGLEVEL_CLIENTCRAP);
- }
- elsif (exists $set_colour{''} && exists $set_colour{''}{$nick}) {
- my $colour = $set_colour{''}{$nick};
- Irssi::print("%_nce2%_: set colour for %X$colour$nick%n (global): %X$colour$colour%n ", MSGLEVEL_CLIENTCRAP);
- }
- elsif (exists $set_colour{''} && exists $set_colour{''}{$hashnick}) {
- my $colour = $set_colour{''}{$hashnick};
- Irssi::print("%_nce2%_: set colour for %X$colour$hashnick%n (global): %X$colour$colour%n ", MSGLEVEL_CLIENTCRAP);
- }
- elsif ($netchan eq '/') {
- Irssi::print("%_nce2%_: no global colour set for $nick", MSGLEVEL_CLIENTCRAP);
- }
-}
-sub cmd_neatcolor_reset {
- my ($data, $server, $witem) = @_;
- my @args = split ' ', $data;
- if (@args < 1) {
- Irssi::print('%_nce2%_: not enough arguments for neatcolor reset', MSGLEVEL_CLIENTERROR);
- return;
- }
- my $netchan;
- if (ref $witem) {
- $netchan = $witem->{server}{tag}.'/'.$witem->{name};
- }
- my $nick;
- if (@args == 1 && $args[0] eq '--all') {
- %set_colour = %avoid_colour = %has_colour = ();
- Irssi::print("%_nce2%_: re-set all colouring");
- return;
- }
- if (@args < 2) {
- $nick = $args[0];
- }
- else {
- ($netchan, $nick) = @args;
- }
-
- return unless _cmd_check_netchan_arg('reset', $netchan, $nick);
-
- $netchan = '' if $netchan eq '/';
- unless (exists $set_colour{$netchan} && exists $set_colour{$netchan}{$nick}) {
- Irssi::print("%_nce2%_: $nick has no colour set ". (length $netchan ? "in $netchan" : "globally"), MSGLEVEL_CLIENTERROR);
- return;
- }
- my $colour = delete $set_colour{$netchan}{$nick};
- for my $netch ($netchan eq '' ? keys %has_colour
- : $global_colours ? ('', $netchan)
- : $netchan) {
- delete $has_colour{$netch}{$nick} if exists $has_colour{$netch} && exists $has_colour{$netch}{$nick}
- && $has_colour{$netch}{$nick} eq $colour;
- }
- Irssi::print("%_nce2%_: ".($netchan eq '' ? 'global ' : '')."colouring re-set for $nick".($netchan eq '' ? '' : " in $netchan"), MSGLEVEL_CLIENTERROR);
-}
-sub cmd_neatcolor_re {
- my ($data, $server, $witem) = @_;
- my @args = split ' ', $data;
- if (@args < 1) {
- Irssi::print('%_nce2%_: not enough arguments for neatcolor re', MSGLEVEL_CLIENTERROR);
- return;
- }
- my $netchan;
- if (ref $witem) {
- $netchan = $witem->{server}{tag}.'/'.$witem->{name};
- }
- my $nick;
- if (@args < 2) {
- $nick = $args[0];
- }
- else {
- ($netchan, $nick) = @args;
- }
-
- return unless _cmd_check_netchan_arg('re', $netchan, $nick);
-
- unless (exists $has_colour{$netchan} && exists $has_colour{$netchan}{$nick}) {
- Irssi::print("%_nce2%_: could not find $nick in $netchan", MSGLEVEL_CLIENTERROR);
- return;
- }
- my $colour = delete $has_colour{$netchan}{$nick};
- if (grep { $colour eq $_ } @{ $avoid_colour{$netchan}{$nick} || [] }) {
- $avoid_colour{$netchan}{$nick} = [ $colour ]
- }
- else {
- push @{ $avoid_colour{$netchan}{$nick} }, $colour;
- }
- if ($global_colours) {
- delete $has_colour{''}{$nick} if defined $colour;
-
- if (grep { $colour eq $_ } @{ $avoid_colour{''}{$nick} || [] }) {
- $avoid_colour{''}{$nick} = [ $colour ]
- }
- else {
- push @{ $avoid_colour{''}{$nick} }, $colour;
- }
- }
- Irssi::print("%_nce2%_: re-colouring $nick in $netchan", MSGLEVEL_CLIENTERROR);
-}
-sub cmd_neatcolor_save {
- Irssi::print("%_nce2%_: saving colours to file", MSGLEVEL_CLIENTCRAP);
- save_colours();
-}
-
-sub setup_changed {
- $global_colours = Irssi::settings_get_bool('neat_global_colors');
- $retain_colour_time = int( abs( Irssi::settings_get_time('neat_color_reassign_time') ) / 1000 );
- my $old_ignore = $ignore_setting // '';
- $ignore_setting = Irssi::settings_get_str('neat_ignorechars');
- if ($old_ignore ne $ignore_setting) {
- local $@;
- eval { $ignore_re = qr/$ignore_setting/ };
- if ($@) {
- $@ =~ /^(.*)/;
- print '%_neat_ignorechars%_ did not compile: '.$1;
- }
- }
- my $old_colours = "@colours";
- my %scolours = map { ($base_map{$_} // $_) => undef } Irssi::settings_get_str('neat_colors') =~ /(?|x(..)|(.))/ig;
- @colours = grep { exists $scolours{$_} } @colour_list;
-
- if ($old_colours ne "@colours") {
- my $time = time;
- for my $netch (sort keys %last_time) {
- for my $nick (sort keys %{ $last_time{$netch} }) {
- if (exists $has_colour{$netch} && exists $has_colour{$netch}{$nick}) {
- if ($last_time{$netch}{$nick} + $retain_colour_time > $time
- || ($last_time{$netch}{$nick} == 0 && $session_load_time + $retain_colour_time > $time)) {
- $last_time{$netch}{$nick} = 0;
- }
- else {
- delete $last_time{$netch}{$nick};
- }
- }
- }
- $session_load_time = $time;
- }
- }
-}
-
-sub internals {
- +{
- set => \%set_colour,
- avoid => \%avoid_colour,
- has => \%has_colour,
- time => \%last_time,
- hist => \%netchan_hist,
- colours => \@colours
- }
-}
-
-sub init_nickcolour {
- setup_changed();
- load_colours();
-}
-
-Irssi::settings_add_str('misc', 'neat_colors', 'rRgGybBmMcCX42X3AX5EX4NX3HX3CX32');
-Irssi::settings_add_str('misc', 'neat_ignorechars', '');
-Irssi::settings_add_time('misc', 'neat_color_reassign_time', '30min');
-Irssi::settings_add_bool('misc', 'neat_global_colors', 0);
-init_nickcolour();
-
-Irssi::expando_create('nickcolor', \&expando_neatcolour, {
- 'message public' => 'none',
- 'message own_public' => 'none',
- 'message private' => 'none',
- 'message own_private'=> 'none',
- 'message join' => 'none',
- 'message part' => 'none',
- 'message quit' => 'none',
- 'message kick' => 'none',
- 'message nick' => 'none',
- 'message invite' => 'none',
- 'message invite_other' => 'none',
- 'message irc notice' => 'none',
- 'message topic' => 'none',
- });
-
-Irssi::expando_create('inickcolor', \&expando_neatcolour_inv, {
- 'message public' => 'none',
- 'message own_public' => 'none',
- });
-
-Irssi::signal_add({
- 'message public' => 'msg_line_tag',
- 'message own_public' => 'msg_line_clear',
- 'message private' => 'msg_line_tag',
- 'message own_private'=> 'msg_line_tag',
- 'message join' => 'join2mlt',
- 'message part' => 'part2mlt',
- 'message quit' => 'quit2mlt',
- 'message kick' => 'kick2mlt',
- 'message nick' => 'nick2mlt',
- 'message invite' => 'invite2mlt',
- 'message invite_other' => 'inviteo2mlt',
- 'message irc notice' => 'notice2mlt',
- 'message irc mode' => 'msg_line_clear',
- "message xmpp action" => 'msg_line_tag_xmppaction',
- "message xmpp own_action" => 'msg_line_clear',
- 'print text' => 'prnt_clear_public',
- 'nicklist changed' => 'nicklist_changed',
- 'gui exit' => 'exit_save',
-});
-Irssi::command_bind({
- 'help' => sub { &cmd_help_neatcolor if $_[0] =~ /^neatcolor\s*$/i;},
- 'neatcolor' => 'cmd_neatcolor',
- 'neatcolor save' => 'cmd_neatcolor_save',
- 'neatcolor set' => 'cmd_neatcolor_set',
- 'neatcolor get' => 'cmd_neatcolor_get',
- 'neatcolor reset' => 'cmd_neatcolor_reset',
- 'neatcolor re' => 'cmd_neatcolor_re',
- 'neatcolor colors' => 'cmd_neatcolor_colors',
- 'neatcolor colors add' => 'cmd_neatcolor_colors_add',
- 'neatcolor colors remove' => 'cmd_neatcolor_colors_remove',
- });
-
-Irssi::signal_add_last('setup changed' => 'setup_changed');
-
-
-# Changelog
-# =========
-# 0.4.0
-# - Allow usage of the colour as a background (using $inickcolor)
-# 0.3.7
-# - fix crash if xmpp action signal is not registered (just ignore it)
-# 0.3.6
-# - also look up ignorechars in set colours
-# 0.3.5
-# - bug fix release
-# 0.3.4
-# - re/set/reset-colouring was affected by the global colour
-# - set colour score too weak
-# 0.3.3
-# - fix error with get / reported by Meicceli
-# - now possible to reset global colour
-# - check for invalid colours
-# 0.3.2
-# - add global colour option
-# - respect save settings setting
-# - add action handling
-# 0.3.1
-# - regression: reset colours after removing colour
-# 0.3.0
-# - save some more colours
-# 0.2.9
-# - fix incorrect calculation of used colours
-# - add some sanity checks to set/get command
-# - avoid random colour changes
diff --git a/.config/irssi/scripts/autorun/nm2.pl b/.config/irssi/scripts/autorun/nm2.pl
@@ -1,546 +0,0 @@
-use Irssi;
-use strict;
-use v5.14;
-use List::Util qw(min max);
-use Hash::Util qw(lock_keys);
-
-our $VERSION = '2.1'; # a42b713aaa38823
-our %IRSSI = (
- authors => 'Nei',
- contact => 'Nei @ anti@conference.jabber.teamidiot.de',
- url => "http://anti.teamidiot.de/",
- name => 'nm2',
- description => 'right aligned nicks depending on longest nick',
- license => 'GPL v2',
-);
-
-# based on bc-bd's original nm.pl
-#
-# use a ** nickcolor_expando ** script for nick colors!
-#
-# why is there no right_mode? you can do that in your theme!
-
-# Options
-# =======
-# /set neat_dynamic <ON|OFF>
-# * whether the width should be dynamically chosen on each incoming
-# message
-#
-# /set neat_shrink <ON|OFF>
-# * whether shrinking of the width is allowed, or only growing
-#
-# /set neat_staircase_shrink <ON|OFF>
-# * whether shrinking should be done one character at a time
-#
-# The following styles decide if the nick is left/right aligned and
-# where the colour/mode goes, they're a bit complex...
-# put the desired indicator(s) between the appropriate "," and the
-# default format of the public messages or actions will be rewritten
-# appropriately.
-# This can be used to align the nick left or right, before or after
-# the nick brackets and before or between the nickmode (by using the
-# pad on the correct place). To change the mode from left of the nick
-# to right of the nick, you need to modify the abstracts in your theme
-# however.
-# By placing the colour at the end, you can even colour the message
-# text in the nick colour, however it might be broken if there are
-# other colour codes used inside the message or by scripts.
-#
-# /format neat_style , , , , , , , ,
-# î î î î î î î î î
-# p: pad | | | | | | | | `before message
-# c: colour | | | | | | | `-after msgchannel
-# t: truncate indicator | | | | | | `-before msgchannel
-# | | | | | `-after nick
-# | | | | `-before nick
-# | | | `-after mode
-# | | `-before mode
-# | `-before msgnick
-# `-none
-#
-# /format neat_action_style , , , ,
-# î î î î î
-# p: pad | | | | `-before message
-# c: colour | | | `-after nick
-# t: truncate indicator | | `-before nick
-# | `-before action
-# `-none
-#
-# /format neat_pad_char <char>
-# * the character(s) used for padding
-#
-# /format neat_truncate_char
-# * the format or character to indicate that nick was truncated
-#
-# /format neat_notruncate_char
-# * the format or character to indicate that nick NOT was truncated
-#
-# /format neat_customize_modes @@ | ++ | ?
-# * a |-separated mapping of mode prefixes and their rendition, can be
-# used to replace or colourise them
-#
-# /set neat_color_hinick <ON|OFF>
-# * whether to use colours in hilighted messages
-#
-# /set neat_color_menick <ON|OFF>
-# * whether to use colours in hilight_nick_matches
-#
-# /set neat_truncate_nick <ON|OFF>
-# * whether to truncate overlong nicks
-#
-# /set neat_custom_modes <ON|OFF>
-# * whether to enable the use of neat_customize_modes format
-#
-# /set neat_maxlength <number>
-# * number : (maximum) length to use for nick padding
-#
-# /set neat_melength <number>
-# * number : width to substract from maxlength for /me padding
-#
-# /set neat_history <number>
-# * number : number of formatted lines to remember for dynamic mode
-#
-
-my @action_protos = qw(irc silc xmpp);
-my (%histories, %S, @style, @astyle, %format_ok, %cmmap);
-
-my $align_expando = '';
-my $trunc_expando = '';
-my $cumode_expando = '';
-
-my $format_re = qr/ %(?=[}%{])
- | %[04261537kbgcrmywKBGCRMYWU9_8I:|FnN>#pP[]
- | %[Zz][[:xdigit:]]{6}
- | %[Xx](?i:0[a-f]|[1-6][0-9a-z]|7[a-x]) /x;
-
-sub update_expando {
- my ($mode, $server, $target, $nick, $space) = @_;
- my $t_add;
- if (exists $Irssi::Script::{'realnames::'}
- && (my $code = 'Irssi::Script::realnames'->can('_get_nick_chan'))) {
- if (my $i = $code->($server, $target, $nick)) {
- $nick = $i->{n}{realname}
- if length $i->{n}{realname};
- }
- }
- my $nl = length $nick;
- my $pad_len = max(0, $space - $nl);
- if ($S{truncate_nick}) {
- if (($mode >= 4 && $S{trunc_in_anick})
- || ($mode < 4 && $S{trunc_in_nick})) {
- $t_add = $S{tnolen};
- }
- if ($nl + $t_add > $space) {
- $trunc_expando = format_expand($S{tyes_char});
- $t_add = $S{tyeslen} if defined $t_add;
- }
- else {
- $trunc_expando = format_expand($S{tno_char});
- }
- $pad_len = max(0, $pad_len - $t_add) if $t_add;
- }
- else {
- $trunc_expando = '';
- }
- if ($pad_len) {
- my @subs = split /($format_re)/, $S{pad_char} x $pad_len;
- $align_expando = '';
- my $clen = 0;
- while (@subs) {
- my ($tx, $fmt) = splice @subs, 0, 2;
- my $txlen = length $tx // 0;
- $align_expando .= substr $tx, 0, ($pad_len - $clen) if defined $tx;
- $clen += $txlen;
- $align_expando .= $fmt if defined $fmt;
- last if $clen >= $pad_len;
- }
- $align_expando = format_expand($align_expando.'%n');
- }
- else {
- $align_expando = '';
- }
- return $t_add;
-}
-
-sub prnt_clear_levels {
- my ($dest) = @_;
- clear_ref() if $dest->{level}
- & (MSGLEVEL_PUBLIC|MSGLEVEL_MSGS|MSGLEVEL_ACTIONS|MSGLEVEL_DCCMSGS|MSGLEVEL_NOTICES);
-}
-
-sub clear_ref {
- $trunc_expando = $align_expando = $cumode_expando = '';
-}
-
-sub expando_nickalign { $align_expando }
-sub expando_nicktrunc { $trunc_expando }
-sub expando_nickcumode { $cumode_expando }
-
-Irssi::expando_create('nickalign', \&expando_nickalign, {
- 'message public' => 'none',
- 'message own_public' => 'none',
- 'message private' => 'none',
- 'message own_private' => 'none',
- });
-Irssi::expando_create('nicktrunc', \&expando_nicktrunc, {
- 'message public' => 'none',
- 'message own_public' => 'none',
- 'message private' => 'none',
- 'message own_private' => 'none',
- });
-Irssi::expando_create('nickcumode', \&expando_nickcumode, {
- 'message public' => 'none',
- 'message own_public' => 'none',
- 'message private' => 'none',
- 'message own_private' => 'none',
- });
-
-sub init_hist {
- my ($server, $target) = @_;
- if (my $ch = $server->channel_find($target)) {
- [ max map { length } map { $_->{nick} } $ch->nicks ]
- }
- else {
- [ max map { length } $server->{nick}, $target ]
- }
-}
-
-my %em = (
- p => '$nickalign',
- c => '$nickcolor',
- t => '$nicktrunc',
- m => '$nickcumode',
- );
-
-my %formats = (
- own_msg => [1, '{ownmsgnick ' ,'%G$2', ' {ownnick ' ,'$0','}','' ,'}','$1' ],
- own_msg_channel => [1, '{ownmsgnick ' ,'%G$3', ' {ownnick ' ,'$0','}','{msgchannel $1}','}','$2' ],
- pubmsg_me => [0, '{pubmsgmenick ' ,'%G$2', ' {pubnick ' ,'$0','}','' ,'}','$1' ],
- pubmsg_me_channel => [0, '{pubmsgmenick ' ,'%G$3', ' {pubnick ' ,'$0','}','{msgchannel $1}','}','$2' ],
- pubmsg_hilight => [0, '{pubmsgmenick ' ,'%G$3', ' {pubnick ' ,'$1','}','', ,'}','$2' ],
- pubmsg_hilight_channel => [0, '{pubmsgmenick ' ,'%G$4', ' {pubnick ' ,'$1', '','{msgchannel $2}','}','$3' ],
- pubmsg => [0, '{pubmsgnick ' ,'%G$2', ' {pubnick ' ,'$0','}','' ,'}','$1' ],
- pubmsg_channel => [0, '{pubmsgnick ' ,'%G$4', ' {pubnick ' ,'$0','}','{msgchannel $1}','}','$2' ],
- );
-
-sub reformat_format {
- Irssi::signal_remove('command format', 'update_formats');
- Irssi::signal_remove('theme changed' => 'update_formats');
- %format_ok = () unless @_;
- my ($mode, $server, $target, $nick, $size) = @_;
- for my $fmt (keys %formats) {
- next if defined $mode && $formats{$fmt}[0] != $mode;
-
- my @fs = @{ $formats{$fmt} };
-
- my $ls;
- if (defined $mode) {
- $ls = $size;
- }
- else {
- $ls = $fs[0] < 4 ? $S{max} : max(0, $S{max} - $S{melength});
- }
- next if exists $format_ok{$fmt} && $format_ok{$fmt} == $ls;
-
- if ($S{truncate_nick} && $ls) {
- $fs[ $fs[0] < 4 ? 4 : 2 ] =~ s/\$/\$[.$ls]/;
- }
- if ($S{custom_modes} && $fs[0] < 4) {
- $fs[2] =~ s/\$\K\d/nickcumode/;
- }
- my $s;
- local $em{c} = ''
- if ($fs[1] =~ /menick/ && !$S{color_menick})
- || ($fs[1] =~ /hinick/ && !$S{color_hinick});
- my $sr = $fs[0] >= 4 ? \@astyle : \@style;
- for my $i (1..$#fs) {
- $s .= ($sr->[$i] =~ s/(.)/$em{$1}/gr) if defined $sr->[$i];
- $s .= $fs[$i];
- }
- Irssi::command("^format $fmt $s");
- $format_ok{$fmt} = $ls;
- }
- Irssi::signal_add_last({
- 'theme changed' => 'update_formats',
- 'command format' => 'update_formats',
- });
-}
-
-sub update_nm {
- my ($mode, $server, $target, $nick) = @_;
- my $tg = $server->{tag};
- if (my $ch = $server->channel_find($target)) {
- $target = $ch->{name};
- my $nickobj = $ch->nick_find($nick);
- if ($nickobj) {
- $nick = $nickobj->{nick};
- my $mode = substr $nickobj->{prefixes}.' ', 0, 1;
- $cumode_expando = exists $cmmap{$mode} ? format_expand($cmmap{$mode}) : $mode;
- }
- else {
- $cumode_expando = '';
- }
- }
- elsif (my $q = $server->query_find($target)) {
- $target = $q->{name};
- }
-
- my $longest;
- # if ($S{dynamic}) {
- # my $hist = $histories{"$tg/$target"} ||= init_hist($server, $target);
- # my $last = $histories{"$tg/$target/last"} || 1;
- # unshift @$hist, length $nick;
- # if (@$hist > 2*$S{history}) {
- # splice @$hist, $S{history};
- # }
- # my @add;
- # unless ($S{shrink}) {
- # push @add, $last;
- # }
- # if ($S{staircase}) {
- # push @add, $last - 1
- # }
- # $longest = $histories{"$tg/$target/last"} = max(@$hist, @add);
-
- # if ($S{max} && ($S{max} < $longest || !$S{shrink})) {
- # $longest = $S{max};
- # }
- # }
- # else {
- # $longest = $S{max};
- $longest = 10;
- # }
-
- my $size = $mode < 4 ? $longest : max(0, $longest - $S{melength});
- my $t_add = update_expando($mode, $server, $target, $nick, $size);
- $size = max(0, $size - $t_add) if defined $t_add;
- if ($S{dynamic}) {
- reformat_format($mode, $server, $target, $nick, $size);
- }
-}
-
-sub sig_setup {
- my %old_S = %S;
- $S{history} = Irssi::settings_get_int('neat_history');
- $S{max} = Irssi::settings_get_int('neat_maxlength');
- $S{melength} = Irssi::settings_get_int('neat_melength');
-
- $S{dynamic} = Irssi::settings_get_bool('neat_dynamic');
- $S{shrink} = Irssi::settings_get_bool('neat_shrink');
- $S{staircase} = Irssi::settings_get_bool('neat_staircase_shrink');
-
- $S{color_hinick} = Irssi::settings_get_bool('neat_color_hinick');
- $S{color_menick} = Irssi::settings_get_bool('neat_color_menick');
- $S{truncate_nick} = Irssi::settings_get_bool('neat_truncate_nick');
- $S{custom_modes} = Irssi::settings_get_bool('neat_custom_modes');
-
- if (!defined $old_S{dynamic} || $old_S{dynamic} != $S{dynamic}) {
- %histories = ();
- reformat_format();
- }
- elsif ($old_S{max} != $S{max} || $old_S{melength} != $S{melength}
- || $old_S{color_hinick} != $S{color_hinick} || $old_S{color_menick} != $S{color_menick}
- || $old_S{truncate_nick} != $S{truncate_nick} || $old_S{custom_modes} != $S{custom_modes}) {
- reformat_format();
- }
-}
-
-sub update_formats {
- my $was_style = "@style";
- $S{style} = Irssi::current_theme->get_format(__PACKAGE__, 'neat_style');
- my $was_action_style = "@astyle";
- $S{action_style} = Irssi::current_theme->get_format(__PACKAGE__, 'neat_action_style');
- $S{pad_char} = Irssi::current_theme->get_format(__PACKAGE__, 'neat_pad_char');
- $S{tno_char} = Irssi::current_theme->get_format(__PACKAGE__, 'neat_notruncate_char');
- $S{tnolen} = length($S{tno_char} =~ s/$format_re//gr);
- $S{tyeslen} = length($S{tyes_char} =~ s/$format_re//gr);
- $S{tyes_char} = Irssi::current_theme->get_format(__PACKAGE__, 'neat_truncate_char');
- @style = map { y/pct//cd; $_ } split /,/, $S{style};
- @astyle = map { y/pctm//cd; $_ } split /,/, $S{action_style};
- $S{trunc_in_nick} = grep { /t/ } @style[2..min($#style, 6)];
- $S{trunc_in_anick} = grep { /t/ } @astyle[2..min($#astyle, 3)];
- my $custom_modes = Irssi::current_theme->get_format(__PACKAGE__, 'neat_custom_modes');
- %cmmap = map { (substr $_, 0, 1), (substr $_, 1) } $custom_modes =~ /(?:^\s?|\G\s?\|\s?)((?!\s\|)(?:[^\\|[:space:]]|\\.|\s(?!\||$))*)/sg;
- if ($was_style ne "@style" || $was_action_style ne "@astyle") {
- reformat_format();
- }
-}
-
-{
- my %format2control = (
- 'F' => "\cDa", '_' => "\cDc", '|' => "\cDe", '#' => "\cDi", "n" => "\cDg", "N" => "\cDg",
- 'U' => "\c_", '8' => "\cV", 'I' => "\cDf",
- );
- my %bg_base = (
- '0' => '0', '4' => '1', '2' => '2', '6' => '3', '1' => '4', '5' => '5', '3' => '6', '7' => '7',
- 'x08' => '8', 'x09' => '9', 'x0a' => ':', 'x0b' => ';', 'x0c' => '<', 'x0d' => '=', 'x0e' => '>', 'x0f' => '?',
- );
- my %fg_base = (
- 'k' => '0', 'b' => '1', 'g' => '2', 'c' => '3', 'r' => '4', 'm' => '5', 'p' => '5', 'y' => '6', 'w' => '7',
- 'K' => '8', 'B' => '9', 'G' => ':', 'C' => ';', 'R' => '<', 'M' => '=', 'P' => '=', 'Y' => '>', 'W' => '?',
- );
- my @ext_colour_off = (
- '.', '-', ',',
- '+', "'", '&',
- );
- sub format_expand {
- $_[0] =~ s{%(Z.{6}|z.{6}|X..|x..|.)}{
- my $c = $1;
- if (exists $format2control{$c}) {
- $format2control{$c}
- }
- elsif (exists $bg_base{$c}) {
- "\cD/$bg_base{$c}"
- }
- elsif (exists $fg_base{$c}) {
- "\cD$fg_base{$c}/"
- }
- elsif ($c =~ /^[{}%]$/) {
- $c
- }
- elsif ($c =~ /^(z|Z)([[:xdigit:]]{2})([[:xdigit:]]{2})([[:xdigit:]]{2})$/) {
- my $bg = $1 eq 'z';
- my (@rgb) = map { hex $_ } $2, $3, $4;
- my $x = $bg ? 0x1 : 0;
- my $out = "\cD" . (chr -13 + ord '0');
- for (my $i = 0; $i < 3; ++$i) {
- if ($rgb[$i] > 0x20) {
- $out .= chr $rgb[$i];
- }
- else {
- $x |= 0x10 << $i; $out .= chr 0x20 + $rgb[$i];
- }
- }
- $out .= chr 0x20 + $x;
- $out
- }
- elsif ($c =~ /^(x)(?:0([[:xdigit:]])|([1-6])(?:([0-9])|([a-z]))|7([a-x]))$/i) {
- my $bg = $1 eq 'x';
- my $col = defined $2 ? hex $2
- : defined $6 ? 232 + (ord lc $6) - (ord 'a')
- : 16 + 36 * ($3 - 1) + (defined $4 ? $4 : 10 + (ord lc $5) - (ord 'a'));
- if ($col < 0x10) {
- my $chr = chr $col + ord '0';
- "\cD" . ($bg ? "/$chr" : "$chr/")
- }
- else {
- "\cD" . $ext_colour_off[($col - 0x10) / 0x50 + $bg * 3] . chr (($col - 0x10) % 0x50 - 1 + ord '0')
- }
- }
- else {
- "%$c"
- }
- }ger;
- }
-}
-
-sub init {
- update_formats();
- sig_setup();
- lock_keys(%S);
- print "nm2 experimental version, please report issues. thanks!"
-}
-
-Irssi::settings_add_bool('misc', 'neat_dynamic', 1);
-Irssi::settings_add_bool('misc', 'neat_shrink', 1);
-Irssi::settings_add_bool('misc', 'neat_staircase_shrink', 0);
-
-Irssi::settings_add_bool('misc', 'neat_color_hinick', 0);
-Irssi::settings_add_bool('misc', 'neat_color_menick', 0);
-Irssi::settings_add_bool('misc', 'neat_truncate_nick', 1);
-Irssi::settings_add_bool('misc', 'neat_custom_modes', 0);
-
-Irssi::settings_add_int('misc', 'neat_maxlength', 0);
-Irssi::settings_add_int('misc', 'neat_melength', 2);
-Irssi::settings_add_int('misc', 'neat_history', 50);
-
-Irssi::signal_add('setup changed' => 'sig_setup');
-Irssi::signal_add_last({
- 'setup reread' => 'sig_setup',
- 'theme changed' => 'update_formats',
- 'command format' => 'update_formats',
- });
-
-Irssi::theme_register([
- 'neat_style' => ' , , p , , c , t , , , ',
- 'neat_action_style' => ' , p , , t , ',
- 'neat_pad_char' => '%K.',
- 'neat_truncate_char' => '%m+',
- 'neat_notruncate_char' => '',
- 'neat_custom_modes' => '&%B&%n | @%g@%n | +%y+%n',
- ]);
-
-Irssi::signal_add_first({
- 'message public' => sub {
- my ($server, $msg, $nick, $address, $target) = @_;
- update_nm(0, $server, $target, $nick);
- },
- 'message private' => sub {
- my ($server, $msg, $nick, $address) = @_;
- update_nm(2, $server, $nick, $nick);
- },
- });
-
-sub channel_nick {
- my ($server, $target) = @_;
- ($server->channel_find($target)||+{ownnick=>$server})->{ownnick}{nick}
-}
-
-Irssi::signal_add_first({
- 'message own_public' => sub {
- my ($server, $msg, $target) = @_;
- update_nm(1, $server, $target, channel_nick($server, $target));
- },
- 'message own_private' => sub {
- my ($server, $msg, $target) = @_;
- update_nm(3, $server, $target, $server->{nick});
- },
- 'message join' => sub {
- my ($server, $target, $nick) = @_;
- update_nm(2, $server, $target, $server->{nick});
- },
- 'message part' => sub {
- my ($server, $target, $nick) = @_;
- update_nm(2, $server, $target, $server->{nick});
- },
- 'message kick' => sub {
- my ($server, $target, $nick) = @_;
- update_nm(2, $server, $target, $server->{nick});
- },
- });
-Irssi::signal_add_last({
- 'channel destroyed' => sub {
- my ($channel) = @_;
- delete $histories{ $channel->{server}{tag} . '/' . $channel->{name} };
- delete $histories{ $channel->{server}{tag} . '/' . $channel->{name} . '/last' };
- },
- 'query destroyed' => sub {
- my ($query) = @_;
- delete $histories{ $query->{server}{tag} . '/' . $query->{name} };
- delete $histories{ $query->{server}{tag} . '/' . $query->{name} . '/last' };
- },
- 'query nick changed' => sub {
- my ($query, $old_nick) = @_;
- delete $histories{ $query->{server}{tag} . '/' . $old_nick };
- delete $histories{ $query->{server}{tag} . '/' . $old_nick . '/last' };
- },
- 'query server changed' => sub {
- my ($query, $old_server) = @_;
- delete $histories{ $old_server->{tag} . '/' . $query->{name} };
- delete $histories{ $old_server->{tag} . '/' . $query->{name} . '/last' };
- }
- });
-Irssi::signal_add({
- 'print text' => 'prnt_clear_levels',
-});
-
-init();
-
-# Changelog
-# =========
-# 2.1 - support realnames script
-#
-# 2.0
-# - fix crash if xmpp action signal is not registered (just ignore it)
-# - do not grow either when using no-shrink with maxlength
-# - hopefully fix alignment in xmpp muc
diff --git a/.config/irssi/scripts/autorun/nojointext.pl b/.config/irssi/scripts/autorun/nojointext.pl
@@ -1,35 +0,0 @@
-# vim:ft=perl:et:sw=2:ts=2:
-use strict;
-use Irssi;
-
-our $VERSION = '0.02';
-our %IRSSI = (
- authors => q{Magnus Woldrich},
- contact => q{m@japh.se},
- name => q{ignore_join_blob},
- description => q{Ignore the blob of text displayed when (re)joining a channel},
- license => q{MIT},
-);
-
-## ignores this:
-# > Topic for #ubuntu: hi
-# > Topic set by DalekSec
-# > Home page for #ubuntu: https://www.ubuntu.com
-# > Channel #ubuntu created Sun Nov 26 07:42:41 2006
-#
-# These lines have the CRAP MSGLEVEL (because they are crap) but they don't
-# respond to an /ignore * CRAP:
-# https://github.com/irssi/irssi/issues/992
-# https://github.com/trapd00r/irssi/commit/87f38a20beda81e409a72efd323f5db45d824927
-
-sub sig_print_text {
- my ($dest, $string, $stripped) = @_;
-
- if($dest->{level} & MSGLEVEL_CRAP) {
- if($stripped =~ m/Topic (for|set)|Channel [#]\S+ created|Home page for [#]\S+/) {
- Irssi::signal_stop();
- }
- }
-}
-
-Irssi::signal_add_first('print text', \&sig_print_text);
diff --git a/.config/irssi/scripts/autorun/pwp.pl b/.config/irssi/scripts/autorun/pwp.pl
@@ -1,109 +0,0 @@
-# Keeps a prompt per window.
-
-# Copyright 2007 Wouter Coekaerts <coekie@irssi.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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use Irssi 20070804;
-use Irssi::TextUI;
-
-use vars qw($VERSION %IRSSI);
-$VERSION = '1.0';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'coekie@irssi.org',
- name => 'per_window_prompt',
- description => 'Keeps a prompt per window',
- license => 'GPLv2 or later',
- url => 'http://wouter.coekaerts.be/irssi/',
- changed => '04/08/07'
-);
-
-my %prompts;
-
-my $in_command = 0;
-my $win_before_command;
-my $win_before_command_deleted;
-my $unloading = 0;
-
-# key to use to identify window
-sub winkey {
- my ($win) = @_;
- return defined($win) ? $win->{'_irssi'} : 0;
-}
-
-sub get_prompt {
- return {
- text => Irssi::parse_special('$L'),
- pos => Irssi::gui_input_get_pos()
- };
-}
-
-sub set_prompt {
- my ($prompt) = @_;
- if (defined($prompt)) {
- Irssi::gui_input_set($prompt->{text});
- Irssi::gui_input_set_pos($prompt->{pos});
- } else {
- Irssi::gui_input_set('');
- }
-}
-
-Irssi::signal_add_last 'window changed' => sub {
- my ($win, $oldwin)= @_;
- if (!$in_command) {
- if ($oldwin) {
- $prompts{winkey($oldwin)} = get_prompt();
- }
- set_prompt($prompts{winkey($win)});
- }
-};
-
-sub UNLOAD {
- $unloading = 1;
-}
-
-# needed when switching windows by command
-Irssi::signal_add_first 'gui key pressed' => sub {
- my ($key) = @_;
-
- if ($key == 10 && ! $in_command) {
- $win_before_command = winkey(Irssi::active_win);
- $win_before_command_deleted = 0;
- $in_command = 1;
- Irssi::signal_continue(@_);
- if ($unloading) {
- return; # avoid crash when unloading by command
- }
- $in_command = 0;
- my $win_after_command = winkey(Irssi::active_win);
-
- if ($win_before_command != $win_after_command) {
- if (! $win_before_command_deleted) {
- $prompts{$win_before_command} = get_prompt();
- }
- set_prompt($prompts{$win_after_command})
- }
- }
-};
-
-Irssi::signal_add_first 'window destroyed' => sub {
- my ($win) = @_;
- delete $prompts{winkey($win)};
- if ($win_before_command == winkey($win)) {
- $win_before_command_deleted = 1;
- }
-};
diff --git a/.config/irssi/scripts/autorun/servercomplete.pl b/.config/irssi/scripts/autorun/servercomplete.pl
@@ -1,86 +0,0 @@
-use strict;
-use Irssi 20020101.0250 ();
-use vars qw($VERSION %IRSSI);
-$VERSION = "2";
-%IRSSI = (
- authors => 'David Leadbeater',
- contact => 'dgl@dgl.cx',
- name => 'servercomplete',
- description => 'Tab complete servers and userhosts (irc. -> irc server, user@ -> user@host). Useful for lazy ircops for /squit and so on :)',
- license => 'GNU GPLv2 or later',
- url => 'http://irssi.dgl.cx/',
-);
-
-my %servers;
-
-sub sig_complete {
- my ($complist, $window, $word, $linestart, $want_space) = @_;
- my $tag = $window->{active_server}->{tag};
-
- if($word =~ /[!*@]/) {
- my $wi = Irssi::active_win()->{active};
- return unless ref $wi and $wi->{type} eq 'CHANNEL';
- my $server = $wi->{server};
- return unless ref $server;
-
- my($nick,$ident,$host) = ('','','');
-
- $nick = $1 if $word =~ /([^!]+)!/ && $1;
- $ident = $1 if $word !~ /!$/ && $word =~ /!?([^@]+)(@|$)/ && $1;
- $host = $1 if $word =~ /@(.*)$/ && $1;
-
- for my $n ($wi->nicks()) {
- next if not_wild($nick) and $n->{nick} !~ /^\Q$nick\E/i;
-
- my($user,$addr) = split(/@/, $n->{host});
-
- next if not_wild($ident) and $user !~ /^\Q$ident\E/i;
- next if not_wild($host) and $addr !~ /^\Q$host\E/i;
-
- if($word =~ /!/) {
- push @$complist, get_match($n->{nick}, $nick) . '!' . get_match($user, $ident) . '@' . get_match($addr,$host);
- }else{
- push @$complist, get_match($user, $ident) . '@' . get_match($addr,$host);
- }
- }
- }
-
- return unless $servers{$tag};
- for (keys %{$servers{$tag}}) {
- push @$complist, $_ if /^\Q$word\E/;
- }
-}
-
-sub get_match {
- my($match, $thing) = @_;
- return $thing eq '*' ? '*' : $match;
-}
-
-sub not_wild {
- return 0 if($_[0] eq '*' || $_[0] eq '');
- 1;
-}
-
-sub add_server {
- my($tag,$data,$offset) = @_;
- $servers{$tag}{(split(/ /,$data))[$offset]} = 1;
-}
-
-Irssi::signal_add_last('complete word', 'sig_complete');
-
-Irssi::signal_add('event 352', sub {
- my($server,$data) = @_;
- add_server($server->{tag}, $data, 4);
-} );
-
-Irssi::signal_add('event 312', sub {
- my($server,$data) = @_;
- add_server($server->{tag}, $data, 2);
-} );
-
-Irssi::signal_add('event 364', sub {
- my($server,$data) = @_;
- add_server($server->{tag}, $data, 1);
- add_server($server->{tag}, $data, 2);
-} );
-
diff --git a/.config/irssi/scripts/autorun/special_complete.pl b/.config/irssi/scripts/autorun/special_complete.pl
@@ -1,30 +0,0 @@
-use strict;
-use vars qw($VERSION %IRSSI);
-use Irssi;
-$VERSION = '1.1';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'wouter@coekaerts.be, coekie@#irssi',
- name => 'special_complete',
- description => '(tab)complete irssi special variables (words that start with $) by evaluating them',
- license => 'GPLv2',
- url => 'http://wouter.coekaerts.be/irssi/',
- changed => '28/07/03',
-);
-
-Irssi::signal_add_last 'complete word', sub {
- my ($complist, $window, $word, $linestart, $want_space) = @_;
- if ($word =~ /^\$/){
- my $evaluated;
- if (Irssi::active_win->{'active'}) {
- $evaluated = Irssi::active_win->{'active'}->parse_special($word);
- } elsif (Irssi::active_win->{'active_server'}) {
- $evaluated = Irssi::active_win->{'active_server'}->parse_special($word);
- } else {
- $evaluated = Irssi::parse_special($word);
- }
- if ($evaluated ne '') {
- push @$complist, $evaluated;
- }
- }
-};
diff --git a/.config/irssi/scripts/autorun/tmux-nicklist-portable.pl b/.config/irssi/scripts/autorun/tmux-nicklist-portable.pl
@@ -1,432 +0,0 @@
-# based on the nicklist.pl script
-################################################################################
-# tmux_nicklist.pl
-# This script integrates tmux and irssi to display a list of nicks in a
-# vertical right pane with 20% width. Right now theres no configuration
-# or setup, simply initialize the script with irssi and by default you
-# will get the nicklist for every channel(customize by altering
-# the regex in /set nicklist_channel_re)
-#
-# /set nicklist_channel_re <regex>
-# * only show on channels matching this regular expression
-#
-# /set nicklist_max_users <num>
-# * only show when the channel has so many users or less (0 = always)
-#
-# /set nicklist_smallest_main <num>
-# * only show when main window is larger than this (0 = always)
-#
-# /set nicklist_pane_width <num>
-# * width of the nicklist pane
-#
-# /set nicklist_color <ON|OFF>
-# * colourise the nicks in the nicklist (required nickcolor script
-# with get_nick_color2 and debug_ansicolour functions)
-#
-# /set nicklist_gone_sort <ON|OFF>
-# * sort away people below
-#
-# It supports mouse scrolling and the following keys:
-# k/up arrow: up one line
-# j/down arrow: down one line
-# u/pageup: up 50% lines
-# d/pagedown: down 50% lines
-# gg: go to top
-# G: go to bottom
-#
-# For better integration, unrecognized sequences will be sent to irssi and
-# its pane will be focused.
-#
-# to toggle the nicklist if it is in the way you can make a key binding:
-# /bind meta-Z /script exec Irssi::Script::tmux_nicklist_portable::toggle_nicklist
-################################################################################
-
-use strict;
-use warnings;
-use IO::Handle;
-use IO::Select;
-use POSIX;
-use File::Temp qw/ :mktemp /;
-use File::Basename;
-our $VERSION = '0.1.8';
-our %IRSSI = (
- authors => 'Thiago de Arruda',
- contact => 'tpadilha84@gmail.com',
- name => 'tmux-nicklist',
- description => 'displays a list of nicks in a separate tmux pane',
- license => 'WTFPL',
-);
-
-# "other" prefixes by danielg4 <daniel@gimpelevich.san-francisco.ca.us>
-# added 'd' and 'u' navigation as in vim, by @gerardbm (github)
-
-{ package Irssi::Nick }
-
-if ($#ARGV == -1) {
-require Irssi;
-
-my $enabled = 0;
-my $nicklist_toggle = 1;
-my $script_path = __FILE__;
-my $tmpdir;
-my $fifo_path;
-my $fifo;
-my $just_launched;
-my $resize_timer;
-
-sub enable_nicklist {
- return if ($enabled);
- $tmpdir = mkdtemp Irssi::get_irssi_dir()."/nicklist-XXXXXXXX";
- $fifo_path = "$tmpdir/fifo";
- POSIX::mkfifo($fifo_path, 0600) or die "can't mkfifo $fifo_path: $!";
- my $cmd = "perl $script_path $fifo_path $ENV{TMUX_PANE}";
- my $width = Irssi::settings_get_int('nicklist_pane_width');
- system('tmux', 'split-window', '-dh', '-l', $width, '-t', $ENV{TMUX_PANE}, $cmd);
- open_fifo();
- Irssi::timeout_remove($just_launched) if defined $just_launched;
- $just_launched = Irssi::timeout_add_once(300, sub { $just_launched = undef; }, '');
-}
-
-sub open_fifo {
- # The next system call will block until the other pane has opened the pipe
- # for reading, so synchronization is not an issue here.
- open $fifo, ">", $fifo_path or do {
- if ($! == 4) {
- Irssi::timeout_add_once(300, \&open_fifo, '');
- $enabled = -1 unless $enabled;
- return;
- }
- die "can't open $fifo_path: $!";
- };
- $fifo->autoflush(1);
- if ($enabled < -1) {
- $enabled = 1;
- disable_nicklist();
- } elsif ($enabled == -1) {
- $enabled = 1;
- reset_nicklist("enabled");
- } else {
- $enabled = 1;
- }
-}
-
-sub disable_nicklist {
- return unless ($enabled);
- if ($enabled > 0) {
- print $fifo "EXIT\n";
- close $fifo;
- $fifo = undef;
- unlink $fifo_path;
- rmdir $tmpdir;
- }
- $enabled--;
-}
-
-sub reset_nicklist {
- my $event = shift;
- my $active = Irssi::active_win();
- my $channel = $active->{active};
- return disable_nicklist unless $channel && ref $channel;
- if ($event =~ /^nick/) {
- # check if that nick event is for the current channel/nicklist
- my ($event_channel) = @_;
- return unless $channel->{_irssi} == $event_channel->{_irssi};
- }
- my ($colourer, $ansifier);
- if (Irssi::settings_get_bool('nicklist_color')) {
- for my $script (sort map { my $z = $_; $z =~ s/::$//; $z } grep { /^nickcolor|nm/ } keys %Irssi::Script::) {
- if ($colourer = "Irssi::Script::$script"->can('get_nick_color2')) {
- $ansifier = "Irssi::Script::$script"->can('debug_ansicolour');
- last;
- }
- }
- }
- my $channel_pattern = Irssi::settings_get_str('nicklist_channel_re');
- { local $@;
- $channel_pattern = eval { qr/$channel_pattern/ };
- $channel_pattern = qr/(?!)/ if $@;
- }
- my $smallest_main = Irssi::settings_get_int('nicklist_smallest_main');
- if (!$nicklist_toggle
- || !$channel || !ref($channel)
- || !$channel->isa('Irssi::Channel')
- || !$channel->{'names_got'}
- || $channel->{'name'} !~ $channel_pattern
- || ($smallest_main && $channel->window->{width} < $smallest_main)) {
- disable_nicklist;
- } else {
- my %colour;
- my @nicks = $channel->nicks();
- my $max_nicks = Irssi::settings_get_int('nicklist_max_users');
- if ($max_nicks && @nicks > $max_nicks) {
- disable_nicklist;
- } else {
- enable_nicklist;
- return unless $enabled > 0;
- foreach my $nick (sort { $a->{_irssi} <=> $b->{_irssi} } @nicks) {
- $colour{$nick->{nick}} = ($ansifier && $colourer) ? $ansifier->($colourer->($active->{active}{server}{tag}, $channel->{name}, $nick->{nick}, 0)) : '';
- }
- print($fifo "BEGIN\n");
- my $gone_sort = Irssi::settings_get_bool('nicklist_gone_sort');
- my $prefer_real;
- if (exists $Irssi::Script::{'realnames::'}) {
- my $code = "Irssi::Script::realnames"->can('use_realnames');
- $prefer_real = $code && $code->($channel);
- }
- my $_real = sub {
- my $nick = shift;
- $prefer_real && length $nick->{'realname'} ? $nick->{'realname'} : $nick->{'nick'}
- };
- foreach my $nick (sort {($a->{'op'}?'1':$a->{'halfop'}?'2':$a->{'voice'}?'3':$a->{'other'}>32?'0':'4').($gone_sort?($a->{'gone'}?1:0):'').lc($_real->($a))
- cmp ($b->{'op'}?'1':$b->{'halfop'}?'2':$b->{'voice'}?'3':$b->{'other'}>32?'0':'4').($gone_sort?($b->{'gone'}?1:0):'').lc($_real->($b))} @nicks) {
- my $colour = $colour{$nick->{nick}} || "\e[39m";
- $colour = "\e[37m" if $nick->{'gone'};
- print($fifo "NICK");
- if ($nick->{'op'}) {
- print($fifo "\e[92m\@$colour".$_real->($nick)."\e[39m");
- } elsif ($nick->{'halfop'}) {
- print($fifo "\e[92m%$colour".$_real->($nick)."\e[39m");
- } elsif ($nick->{'voice'}) {
- print($fifo "\e[92m+$colour".$_real->($nick)."\e[39m");
- } elsif ($nick->{'other'}>32) {
- print($fifo "\e[92m".(chr $nick->{'other'})."$colour".$_real->($nick)."\e[39m");
- } else {
- print($fifo " $colour".$_real->($nick)."\e[39m");
- }
- print($fifo "\n");
- }
- print($fifo "END\n");
- }
- }
-}
-
-sub toggle_nicklist {
- if ($enabled) {
- $nicklist_toggle = undef
- } else {
- $nicklist_toggle = 1;
- }
- reset_nicklist("toggle");
-}
-
-sub switch_channel {
- print $fifo "SWITCH_CHANNEL\n" if $fifo;
- &reset_nicklist;
-}
-
-sub resized_timed {
- Irssi::timeout_remove($resize_timer) if defined $resize_timer;
- return if defined $just_launched;
- $resize_timer = Irssi::timeout_add_once(1100, \&resized, '');
- #resized();
-}
-sub resized {
- $resize_timer = undef;
- return if defined $just_launched;
- return unless $enabled >= 0;
- disable_nicklist;
- Irssi::timeout_add_once(200, sub{reset_nicklist("terminal resized")}, '');
-}
-sub UNLOAD {
- disable_nicklist;
-}
-
-Irssi::settings_add_str('tmux_nicklist', 'nicklist_channel_re', '.*');
-Irssi::settings_add_int('tmux_nicklist', 'nicklist_max_users', 0);
-Irssi::settings_add_int('tmux_nicklist', 'nicklist_smallest_main', 0);
-Irssi::settings_add_int('tmux_nicklist', 'nicklist_pane_width', 13);
-Irssi::settings_add_bool('tmux_nicklist', 'nicklist_color', 1);
-Irssi::settings_add_bool('tmux_nicklist', 'nicklist_gone_sort', 0);
-Irssi::signal_add_last('window item changed', sub{switch_channel("window item changed",@_)});
-Irssi::signal_add_last('window changed', sub{switch_channel("window changed",@_)});
-Irssi::signal_add_last('channel joined', sub{switch_channel("channel joined",@_)});
-Irssi::signal_add('nicklist new', sub{reset_nicklist("nicklist new",@_)});
-Irssi::signal_add('nicklist remove', sub{reset_nicklist("nicklist remove",@_)});
-Irssi::signal_add('nicklist changed', sub{reset_nicklist("nicklist changed",@_)});
-Irssi::signal_add_first('nick mode changed', sub{reset_nicklist("nick mode changed",@_)});
-Irssi::signal_add('gui exit', \&disable_nicklist);
-Irssi::signal_add_last('terminal resized', \&resized_timed);
-
-} else {
-my $fifo_path = $ARGV[0];
-my $irssi_pane = $ARGV[1];
-# array to store the current channel nicknames
-my @nicknames = ();
-
-# helper functions for manipulating the terminal
-# escape sequences taken from
-# http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
-sub enable_mouse { print "\e[?1000h"; }
-# recognized sequences
-my $MOUSE_SCROLL_DOWN="\e[Ma";
-my $MOUSE_SCROLL_UP="\e[M`";
-my $ARROW_DOWN="\e[B";
-my $ARROW_UP="\e[A";
-my $DOWN="j";
-my $UP="k";
-my $PAGE_DOWN="\e[6~";
-my $PAGE_UP="\e[5~";
-my $PAGE_DOWN_D="d";
-my $PAGE_UP_U="u";
-my $GO_TOP="gg";
-my $GO_BOTTOM="G";
-
-my $current_line = 0;
-my $sequence = '';
-my ($rows, $cols);
-
-sub term_size {
- split ' ', `stty size`;
-}
-
-sub redraw {
- my $last_nick_idx = @nicknames;
- my $last_idx = $current_line + $rows;
- # normalize last visible index
- if ($last_idx > ($last_nick_idx)) {
- $last_idx = $last_nick_idx;
- }
- # redraw visible nicks
- for my $i (reverse 1..$rows) {
- print "\e[$i;1H\e[K";
- my $idx = $current_line + $i - 1;
- if ($idx < $last_idx) {
- my $z = 0; my $col = $cols;
- for (split /(\e\[(?:\d|;|:|\?|\s)*.)/, $nicknames[$idx]) {
- if ($z ^= 1) {
- print +(substr $_, 0, $col) if $col > 0;
- $col -= length;
- } else {
- print
- }
- }
- }
- }
-}
-
-sub move_down {
- $sequence = '';
- my $count = int $_[0];
- my $nickcount = $#nicknames;
- return if ($nickcount <= $rows);
- if ($count == -1) {
- $current_line = $nickcount - $rows + 1;
- redraw;
- return;
- }
- my $visible = $nickcount - $current_line - $count + 1;
- if ($visible > $rows) {
- $current_line += $count;
- redraw;
- } elsif (($visible + $count) > $rows) {
- # scroll the maximum we can
- $current_line = $nickcount - $rows + 1;
- redraw;
- }
-}
-
-sub move_up {
- $sequence = '';
- my $count = int $_[0];
- if ($count == -1) {
- $current_line = 0;
- redraw;
- return;
- }
- return if ($current_line == 0);
- $count = 1 if $count == 0;
- $current_line -= $count;
- $current_line = 0 if $current_line < 0;
- redraw;
-}
-
-$SIG{INT} = 'IGNORE';
-
-STDOUT->autoflush(1);
-# setup terminal so we can listen for individual key presses without echo
-`stty -icanon -echo`;
-
-# open named pipe and setup the 'select' wrapper object for listening on both
-# fds(fifo and sdtin)
-open my $fifo, "<", $fifo_path or die "can't open $fifo_path: $!";
-my $select = IO::Select->new();
-my @ready;
-$select->add($fifo);
-$select->add(\*STDIN);
-
-enable_mouse;
-system('tput', 'smcup');
-print "\e[?7l"; #system('tput', 'rmam');
-system('tput', 'civis');
-MAIN: {
- while (@ready = $select->can_read) {
- foreach my $fd (@ready) {
- ($rows, $cols) = term_size;
- if ($fd == $fifo) {
- while (<$fifo>) {
- my $line = $_;
- if ($line =~ /^BEGIN/) {
- @nicknames = ();
- } elsif ($line =~ /^SWITCH_CHANNEL/) {
- $current_line = 0;
- } elsif ($line =~ /^NICK(.+)$/) {
- push @nicknames, $1;
- } elsif ($line =~ /^END$/) {
- redraw;
- last;
- } elsif ($line =~ /^EXIT$/) {
- last MAIN;
- }
- }
- } else {
- my $key = '';
- sysread(STDIN, $key, 1);
- $sequence .= $key;
- if ($MOUSE_SCROLL_DOWN =~ /^\Q$sequence\E/) {
- if ($MOUSE_SCROLL_DOWN eq $sequence) {
- move_down 3;
- # mouse scroll has two more bytes that I dont use here
- # so consume them now to avoid sending unwanted bytes to
- # irssi
- sysread(STDIN, $key, 2);
- }
- } elsif ($MOUSE_SCROLL_UP =~ /^\Q$sequence\E/) {
- if ($MOUSE_SCROLL_UP eq $sequence) {
- move_up 3;
- sysread(STDIN, $key, 2);
- }
- } elsif ($ARROW_DOWN =~ /^\Q$sequence\E/) {
- move_down 1 if ($ARROW_DOWN eq $sequence);
- } elsif ($ARROW_UP =~ /^\Q$sequence\E/) {
- move_up 1 if ($ARROW_UP eq $sequence);
- } elsif ($DOWN =~ /^\Q$sequence\E/) {
- move_down 1 if ($DOWN eq $sequence);
- } elsif ($UP =~ /^\Q$sequence\E/) {
- move_up 1 if ($UP eq $sequence);
- } elsif ($PAGE_DOWN =~ /^\Q$sequence\E/) {
- move_down $rows/2 if ($PAGE_DOWN eq $sequence);
- } elsif ($PAGE_UP =~ /^\Q$sequence\E/) {
- move_up $rows/2 if ($PAGE_UP eq $sequence);
- } elsif ($PAGE_DOWN_D =~ /^\Q$sequence\E/) {
- move_down $rows/2 if ($PAGE_DOWN_D eq $sequence);
- } elsif ($PAGE_UP_U =~ /^\Q$sequence\E/) {
- move_up $rows/2 if ($PAGE_UP_U eq $sequence);
- } elsif ($GO_BOTTOM =~ /^\Q$sequence\E/) {
- move_down -1 if ($GO_BOTTOM eq $sequence);
- } elsif ($GO_TOP =~ /^\Q$sequence\E/) {
- move_up -1 if ($GO_TOP eq $sequence);
- } else {
- # Unrecognized sequences will be send to irssi and its pane
- # will be focused
- system('tmux', 'send-keys', '-t', $irssi_pane, $sequence);
- system('tmux', 'select-pane', '-t', $irssi_pane);
- $sequence = '';
- }
- }
- }
- }
-}
-
-close $fifo;
-
-}
diff --git a/.config/irssi/scripts/autorun/trackbar.pl b/.config/irssi/scripts/autorun/trackbar.pl
@@ -1,606 +0,0 @@
-## trackbar.pl
-#
-# This little script will do just one thing: it will draw a line each time you
-# switch away from a window. This way, you always know just upto where you've
-# been reading that window :) It also removes the previous drawn line, so you
-# don't see double lines.
-#
-# redraw trackbar only works on irssi 0.8.17 or higher.
-#
-##
-
-## Usage:
-#
-# The script works right out of the box, but if you want you can change
-# the working by /set'ing the following variables:
-#
-# Setting: trackbar_style
-# Description: This setting will be the color of your trackbar line.
-# By default the value will be '%K', only Irssi color
-# formats are allowed. If you don't know the color formats
-# by heart, you can take a look at the formats documentation.
-# You will find the proper docs on http://www.irssi.org/docs.
-#
-# Setting: trackbar_string
-# Description: This is the string that your line will display. This can
-# be multiple characters or just one. For example: '~-~-'
-# The default setting is '-'.
-# Here are some unicode characters you can try:
-# "───" => U+2500 => a line
-# "═══" => U+2550 => a double line
-# "━━━" => U+2501 => a wide line
-# "▭ " => U+25ad => a white rectangle
-#
-# Setting: trackbar_use_status_window
-# Description: If this setting is set to OFF, Irssi won't print a trackbar
-# in the statuswindow
-#
-# Setting: trackbar_ignore_windows
-# Description: A list of windows where no trackbar should be printed
-#
-# Setting: trackbar_print_timestamp
-# Description: If this setting is set to ON, Irssi will print the formatted
-# timestamp in front of the trackbar.
-#
-# Setting: trackbar_require_seen
-# Description: Only clear the trackbar if it has been scrolled to.
-#
-# Setting: trackbar_all_manual
-# Description: Never clear the trackbar until you do /mark.
-#
-# /mark is a command that will redraw the line at the bottom.
-#
-# Command: /trackbar, /trackbar goto
-# Description: Jump to where the trackbar is, to pick up reading
-#
-# Command: /trackbar keep
-# Description: Keep this window's trackbar where it is the next time
-# you switch windows (then this flag is cleared again)
-#
-# Command: /mark, /trackbar mark
-# Description: Remove the old trackbar and mark the bottom of this
-# window with a new trackbar
-#
-# Command: /trackbar markvisible
-# Description: Like mark for all visible windows
-#
-# Command: /trackbar markall
-# Description: Like mark for all windows
-#
-# Command: /trackbar remove
-# Description: Remove this window's trackbar
-#
-# Command: /trackbar removeall
-# Description: Remove all windows' trackbars
-#
-# Command: /trackbar redraw
-# Description: Force redraw of trackbars
-#
-##
-
-##
-#
-# For bugreports and other improvements contact one of the authors.
-#
-# 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 2 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 script; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-##
-
-use strict;
-use warnings;
-use vars qw($VERSION %IRSSI);
-
-$VERSION = "2.9"; # a4c78e85092a271
-
-%IRSSI = (
- authors => "Peter 'kinlo' Leurs, Uwe Dudenhoeffer, " .
- "Michiel Holtkamp, Nico R. Wohlgemuth, " .
- "Geert Hauwaerts",
- contact => 'peter@pfoe.be',
- patchers => 'Johan Kiviniemi (UTF-8), Uwe Dudenhoeffer (on-upgrade-remove-line)',
- name => 'trackbar',
- description => 'Shows a bar where you have last read a window.',
- license => 'GNU General Public License',
- url => 'http://www.pfoe.be/~peter/trackbar/',
- commands => 'trackbar',
-);
-
-## Comments and remarks.
-#
-# This script uses settings.
-# Use /SET to change the value or /TOGGLE to switch it on or off.
-#
-#
-# Tip: The command 'trackbar' is very useful if you bind that to a key,
-# so you can easily jump to the trackbar. Please see 'help bind' for
-# more information about keybindings in Irssi.
-#
-# Command: /BIND meta2-P key F1
-# /BIND F1 command trackbar
-#
-##
-
-## Bugfixes and new items in this rewrite.
-#
-# * Remove all the trackbars before upgrading.
-# * New setting trackbar_use_status_window to control the statuswindow trackbar.
-# * New setting trackbar_print_timestamp to print a timestamp or not.
-# * New command 'trackbar' to scroll up to the trackbar.
-# * When resizing your terminal, Irssi will update all the trackbars to the new size.
-# * When changing trackbar settings, change all the trackbars to the new settings.
-# * New command 'trackbar mark' to draw a new trackbar (The old '/mark').
-# * New command 'trackbar markall' to draw a new trackbar in each window.
-# * New command 'trackbar remove' to remove the trackbar from the current window.
-# * New command 'trackbar removeall' to remove all the trackbars.
-# * Don't draw a trackbar in empty windows.
-# * Added a version check to prevent Irssi redraw errors.
-# * Fixed a bookmark NULL versus 0 bug.
-# * Fixed a remove-line bug in Uwe Dudenhoeffer his patch.
-# * New command 'help trackbar' to display the trackbar commands.
-# * Fixed an Irssi startup bug, now processing each auto-created window.
-#
-##
-
-## Known bugs and the todolist.
-#
-# Todo: * Instead of drawing a line, invert the line.
-#
-##
-
-## Authors:
-#
-# - Main maintainer & author: Peter 'kinlo' Leurs
-# - Many thanks to Timo 'cras' Sirainen for placing me on my way
-# - on-upgrade-remove-line patch by Uwe Dudenhoeffer
-# - trackbar resizing by Michiel Holtkamp (02 Jul 2012)
-# - scroll to trackbar, window excludes, and timestamp options by Nico R.
-# Wohlgemuth (22 Sep 2012)
-#
-##
-
-## Version history:
-#
-# 2.9: - fix crash on /mark in empty window
-# 2.8: - fix /^join bug
-# 2.7: - add /set trackbar_all_manual option
-# 2.5: - merge back on scripts.irssi.org
-# - fix /trackbar redraw broken in 2.4
-# - fix legacy encodings
-# - add workaround for irssi issue #271
-# 2.4: - add support for horizontal splits
-# 2.3: - add some features for seen tracking using other scripts
-# 2.0: - big rewrite based on 1.4
-# * removed /tb, you can have it with /alias tb trackbar if you want
-# * subcommand and settings changes:
-# /trackbar vmark => /trackbar markvisible
-# /trackbar scroll => /trackbar goto (or just /trackbar)
-# /trackbar help => /help trackbar
-# /set trackbar_hide_windows => /set trackbar_ignore_windows
-# /set trackbar_timestamp => /set trackbar_print_timestamp
-# * magic line strings were removed, just paste the unicode you want!
-# * trackbar_timestamp_styled is not currently supported
-# 1.9: - add version guard
-# 1.8: - sub draw_bar
-# 1.7: - Added /tb scroll, trackbar_hide_windows, trackbar_timestamp_timestamp
-# and trackbar_timestamp_styled
-# 1.6: - Work around Irssi resize bug, please do /upgrade! (see below)
-# 1.5: - Resize trackbars in all windows when terminal is resized
-# 1.4: - Changed our's by my's so the irssi script header is valid
-# - Removed utf-8 support. In theory, the script should work w/o any
-# problems for utf-8, just set trackbar_string to a valid utf-8 character
-# and everything *should* work. However, this script is being plagued by
-# irssi internal bugs. The function Irssi::settings_get_str does NOT handle
-# unicode strings properly, hence you will notice problems when setting the bar
-# to a unicode char. For changing your bar to utf-8 symbols, read the line sub.
-# 1.3: - Upgrade now removes the trackbars.
-# - Some code cleanups, other defaults
-# - /mark sets the line to the bottom
-# 1.2: - Support for utf-8
-# - How the bar looks can now be configured with trackbar_string
-# and trackbar_style
-# 1.1: - Fixed bug when closing window
-# 1.0: - Initial release
-#
-##
-
-use Irssi;
-use Irssi::TextUI;
-use Encode;
-
-use POSIX qw(strftime);
-
-sub cmd_help {
- my ($args) = @_;
- if ($args =~ /^trackbar *$/i) {
- print CLIENTCRAP <<HELP
-%9Syntax:%9
-
-TRACKBAR
-TRACKBAR GOTO
-TRACKBAR KEEP
-TRACKBAR MARK
-TRACKBAR MARKVISIBLE
-TRACKBAR MARKALL
-TRACKBAR REMOVE
-TRACKBAR REMOVEALL
-TRACKBAR REDRAW
-
-%9Parameters:%9
-
- GOTO: Jump to where the trackbar is, to pick up reading
- KEEP: Keep this window's trackbar where it is the next time
- you switch windows (then this flag is cleared again)
- MARK: Remove the old trackbar and mark the bottom of this
- window with a new trackbar
- MARKVISIBLE: Like mark for all visible windows
- MARKALL: Like mark for all windows
- REMOVE: Remove this window's trackbar
- REMOVEALL: Remove all windows' trackbars
- REDRAW: Force redraw of trackbars
-
-%9Description:%9
-
- Manage a trackbar. Without arguments, it will scroll up to the trackbar.
-
-%9Examples:%9
-
- /TRACKBAR MARK
- /TRACKBAR REMOVE
-HELP
- }
-}
-
-Irssi::theme_register([
- 'trackbar_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.',
- 'trackbar_wrong_version', '%R>>%n %_Trackbar:%_ Please upgrade your client to 0.8.17 or above if you would like to use this feature of trackbar.',
- 'trackbar_all_removed', '%R>>%n %_Trackbar:%_ All the trackbars have been removed.',
- 'trackbar_not_found', '%R>>%n %_Trackbar:%_ No trackbar found in this window.',
-]);
-
-my $old_irssi = Irssi::version < 20140701;
-sub check_version {
- if ($old_irssi) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_wrong_version');
- return;
- } else {
- return 1;
- }
-}
-
-sub is_utf8 {
- lc Irssi::settings_get_str('term_charset') eq 'utf-8'
-}
-
-my (%config, %keep_trackbar, %unseen_trackbar);
-
-sub remove_one_trackbar {
- my $win = shift;
- my $view = shift || $win->view;
- my $line = $view->get_bookmark('trackbar');
- if (defined $line) {
- my $bottom = $view->{bottom};
- $view->remove_line($line);
- $win->command('^scrollback end') if $bottom && !$win->view->{bottom};
- $view->redraw;
- }
-}
-
-sub add_one_trackbar_pt1 {
- my $win = shift;
- my $view = shift || $win->view;
-
- my $last_cur_line = ($view->{buffer}{cur_line}||+{})->{_irssi};
- $win->print(line($win->{width}), MSGLEVEL_NEVER);
-
- my $cur_line = ($win->view->{buffer}{cur_line}||+{})->{_irssi}; # get a fresh buffer
-
- ($last_cur_line//'') ne ($cur_line//'') # printing was successful
-}
-
-sub add_one_trackbar_pt2 {
- my $win = shift;
- my $view = $win->view;
-
- $view->set_bookmark_bottom('trackbar');
- $unseen_trackbar{ $win->{_irssi} } = 1;
- Irssi::signal_emit("window trackbar added", $win);
- $view->redraw;
-}
-
-sub update_one_trackbar {
- my $win = shift;
- my $view = shift || $win->view;
- my $force = shift;
- my $ignored = win_ignored($win, $view);
- my $success;
-
- $success = add_one_trackbar_pt1($win, $view) ? 1 : 0
- if $force || !$ignored;
-
- remove_one_trackbar($win, $view)
- if ( $success || !defined $success ) && ( $force || !defined $force || !$ignored );
-
- add_one_trackbar_pt2($win)
- if $success;
-}
-
-sub win_ignored {
- my $win = shift;
- my $view = shift || $win->view;
- return 1 unless $view->{buffer}{lines_count};
- return 1 if $win->{name} eq '(status)' && !$config{use_status_window};
- no warnings 'uninitialized';
- return 1 if grep { $win->{name} eq $_ || $win->{refnum} eq $_
- || $win->get_active_name eq $_ } @{ $config{ignore_windows} };
- return 0;
-}
-
-sub sig_window_changed {
- my ($newwindow, $oldwindow) = @_;
- return unless $oldwindow;
- redraw_one_trackbar($newwindow) unless $old_irssi;
- trackbar_update_seen($newwindow);
- return if delete $keep_trackbar{ $oldwindow->{_irssi} };
- trackbar_update_seen($oldwindow);
- return if $config{require_seen} && $unseen_trackbar{ $oldwindow->{_irssi } };
- return if $config{all_manual};
- update_one_trackbar($oldwindow, undef, 0);
-}
-
-sub trackbar_update_seen {
- my $win = shift;
- return unless $win;
- return unless $unseen_trackbar{ $win->{_irssi} };
-
- my $view = $win->view;
- my $line = $view->get_bookmark('trackbar');
- unless ($line) {
- delete $unseen_trackbar{ $win->{_irssi} };
- Irssi::signal_emit("window trackbar seen", $win);
- return;
- }
- my $startline = $view->{startline};
- return unless $startline;
-
- if ($startline->{info}{time} < $line->{info}{time}
- || $startline->{_irssi} == $line->{_irssi}) {
- delete $unseen_trackbar{ $win->{_irssi} };
- Irssi::signal_emit("window trackbar seen", $win);
- }
-}
-
-sub screen_length;
-{ local $@;
- eval { require Text::CharWidth; };
- unless ($@) {
- *screen_length = sub { Text::CharWidth::mbswidth($_[0]) };
- }
- else {
- *screen_length = sub {
- my $temp = shift;
- Encode::_utf8_on($temp) if is_utf8();
- length($temp)
- };
- }
-}
-
-{ my %strip_table = (
- (map { $_ => '' } (split //, '04261537' . 'kbgcrmyw' . 'KBGCRMYW' . 'U9_8I:|FnN>#[' . 'pP')),
- (map { $_ => $_ } (split //, '{}%')),
- );
- sub c_length {
- my $o = Irssi::strip_codes($_[0]);
- $o =~ s/(%(%|Z.{6}|z.{6}|X..|x..|.))/exists $strip_table{$2} ? $strip_table{$2} :
- $2 =~ m{x(?:0[a-f]|[1-6][0-9a-z]|7[a-x])|z[0-9a-f]{6}}i ? '' : $1/gex;
- screen_length($o)
- }
-}
-
-sub line {
- my ($width, $time) = @_;
- my $string = $config{string};
- $string = ' ' unless length $string;
- $time ||= time;
-
- Encode::_utf8_on($string) if is_utf8();
- my $length = c_length($string);
-
- my $format = '';
- if ($config{print_timestamp}) {
- $format = $config{timestamp_str};
- $format =~ y/%/\01/;
- $format =~ s/\01\01/%/g;
- $format = strftime($format, localtime $time);
- $format =~ y/\01/%/;
- }
-
- my $times = $width / $length;
- $times += 1 if $times != int $times;
- my $style = "$config{style}";
- Encode::_utf8_on($style) if is_utf8();
- $format .= $style;
- $width -= c_length($format);
- $string x= $times;
- chop $string while length $string && c_length($string) > $width;
- return $format . $string;
-}
-
-sub remove_all_trackbars {
- for my $window (Irssi::windows) {
- next unless ref $window;
- remove_one_trackbar($window);
- }
-}
-
-sub UNLOAD {
- remove_all_trackbars();
-}
-
-sub redraw_one_trackbar {
- my $win = shift;
- my $view = $win->view;
- my $line = $view->get_bookmark('trackbar');
- return unless $line;
- my $bottom = $view->{bottom};
- $win->print_after($line, MSGLEVEL_NEVER, line($win->{width}, $line->{info}{time}),
- $line->{info}{time});
- $view->set_bookmark('trackbar', $win->last_line_insert);
- $view->remove_line($line);
- $win->command('^scrollback end') if $bottom && !$win->view->{bottom};
- $view->redraw;
-}
-
-sub redraw_trackbars {
- return unless check_version();
- for my $win (Irssi::windows) {
- next unless ref $win;
- redraw_one_trackbar($win);
- }
-}
-
-sub goto_trackbar {
- my $win = Irssi::active_win;
- my $line = $win->view->get_bookmark('trackbar');
-
- if ($line) {
- $win->command("scrollback goto ". strftime("%d %H:%M:%S", localtime($line->{info}{time})));
- } else {
- $win->printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_not_found');
- }
-}
-
-sub cmd_mark {
- update_one_trackbar(Irssi::active_win, undef, 1);
-}
-
-sub cmd_markall {
- for my $window (Irssi::windows) {
- next unless ref $window;
- update_one_trackbar($window);
- }
-}
-
-sub signal_stop {
- Irssi::signal_stop;
-}
-
-sub cmd_markvisible {
- my @wins = Irssi::windows;
- my $awin =
- my $bwin = Irssi::active_win;
- my $awin_counter = 0;
- Irssi::signal_add_priority('window changed' => 'signal_stop', -99);
- do {
- Irssi::active_win->command('window up');
- $awin = Irssi::active_win;
- update_one_trackbar($awin);
- ++$awin_counter;
- } until ($awin->{refnum} == $bwin->{refnum} || $awin_counter >= @wins);
- Irssi::signal_remove('window changed' => 'signal_stop');
-}
-
-sub cmd_trackbar_remove_one {
- remove_one_trackbar(Irssi::active_win);
-}
-
-sub cmd_remove_all_trackbars {
- remove_all_trackbars();
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_all_removed');
-}
-
-sub cmd_keep_once {
- $keep_trackbar{ Irssi::active_win->{_irssi} } = 1;
-}
-
-sub trackbar_runsub {
- my ($data, $server, $item) = @_;
- $data =~ s/\s+$//g;
-
- if ($data) {
- Irssi::command_runsub('trackbar', $data, $server, $item);
- } else {
- goto_trackbar();
- }
-}
-
-sub update_config {
- my $was_status_window = $config{use_status_window};
- $config{style} = Irssi::settings_get_str('trackbar_style');
- $config{string} = Irssi::settings_get_str('trackbar_string');
- $config{require_seen} = Irssi::settings_get_bool('trackbar_require_seen');
- $config{all_manual} = Irssi::settings_get_bool('trackbar_all_manual');
- $config{ignore_windows} = [ split /[,\s]+/, Irssi::settings_get_str('trackbar_ignore_windows') ];
- $config{use_status_window} = Irssi::settings_get_bool('trackbar_use_status_window');
- $config{print_timestamp} = Irssi::settings_get_bool('trackbar_print_timestamp');
- if (defined $was_status_window && $was_status_window != $config{use_status_window}) {
- if (my $swin = Irssi::window_find_name('(status)')) {
- if ($config{use_status_window}) {
- update_one_trackbar($swin);
- }
- else {
- remove_one_trackbar($swin);
- }
- }
- }
- if ($config{print_timestamp}) {
- my $ts_format = Irssi::settings_get_str('timestamp_format');
- my $ts_theme = Irssi::current_theme->get_format('fe-common/core', 'timestamp');
- my $render_str = Irssi::current_theme->format_expand($ts_theme);
- (my $ts_escaped = $ts_format) =~ s/([%\$])/$1$1/g;
- $render_str =~ s/(?|\$(.)(?!\w)|\$\{(\w+)\})/$1 eq 'Z' ? $ts_escaped : $1/ge;
- $config{timestamp_str} = $render_str;
- }
- redraw_trackbars() unless $old_irssi;
-}
-
-Irssi::settings_add_str('trackbar', 'trackbar_string', is_utf8() ? "\x{2500}" : '-');
-Irssi::settings_add_str('trackbar', 'trackbar_style', '%K');
-Irssi::settings_add_str('trackbar', 'trackbar_ignore_windows', '');
-Irssi::settings_add_bool('trackbar', 'trackbar_use_status_window', 1);
-Irssi::settings_add_bool('trackbar', 'trackbar_print_timestamp', 0);
-Irssi::settings_add_bool('trackbar', 'trackbar_require_seen', 0);
-Irssi::settings_add_bool('trackbar', 'trackbar_all_manual', 0);
-
-update_config();
-
-Irssi::signal_add_last( 'mainwindow resized' => 'redraw_trackbars')
- unless $old_irssi;
-
-Irssi::signal_register({'window trackbar added' => [qw/Irssi::UI::Window/]});
-Irssi::signal_register({'window trackbar seen' => [qw/Irssi::UI::Window/]});
-Irssi::signal_register({'gui page scrolled' => [qw/Irssi::UI::Window/]});
-Irssi::signal_add_last('gui page scrolled' => 'trackbar_update_seen');
-
-Irssi::signal_add('setup changed' => 'update_config');
-Irssi::signal_add_priority('session save' => 'remove_all_trackbars', Irssi::SIGNAL_PRIORITY_HIGH-1);
-
-Irssi::signal_add('window changed' => 'sig_window_changed');
-
-Irssi::command_bind('trackbar goto' => 'goto_trackbar');
-Irssi::command_bind('trackbar keep' => 'cmd_keep_once');
-Irssi::command_bind('trackbar mark' => 'cmd_mark');
-Irssi::command_bind('trackbar markvisible' => 'cmd_markvisible');
-Irssi::command_bind('trackbar markall' => 'cmd_markall');
-Irssi::command_bind('trackbar remove' => 'cmd_trackbar_remove_one');
-Irssi::command_bind('trackbar removeall' => 'cmd_remove_all_trackbars');
-Irssi::command_bind('trackbar redraw' => 'redraw_trackbars');
-Irssi::command_bind('trackbar' => 'trackbar_runsub');
-Irssi::command_bind('mark' => 'cmd_mark');
-Irssi::command_bind_last('help' => 'cmd_help');
-
-Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
-
-# workaround for issue #271
-{ package Irssi::Nick }
diff --git a/.config/irssi/scripts/autorun/trigger.pl b/.config/irssi/scripts/autorun/trigger.pl
@@ -1,1257 +0,0 @@
-# trigger.pl - execute a command or replace text, triggered by an event in irssi
-# Do /TRIGGER HELP or look at http://wouter.coekaerts.be/irssi/ for help
-
-# Copyright (C) 2002-2010 Wouter Coekaerts <wouter@coekaerts.be>
-#
-# 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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use Irssi 20020324 qw(command_bind command_runsub command signal_add_first signal_continue signal_stop signal_remove);
-use Text::ParseWords;
-use IO::File;
-use vars qw($VERSION %IRSSI);
-
-$VERSION = '1.2.4';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'wouter@coekaerts.be',
- name => 'trigger',
- description => 'execute a command or replace text, triggered by an event in irssi',
- license => 'GPLv2 or later',
- url => 'http://wouter.coekaerts.be/irssi/',
- changed => '2020-03-10',
-);
-
-sub cmd_help {
- Irssi::print (<<'SCRIPTHELP_EOF', MSGLEVEL_CLIENTCRAP);
-
-TRIGGER LIST
-TRIGGER SAVE
-TRIGGER RELOAD
-TRIGGER MOVE <number> <number>
-TRIGGER DELETE <number>
-TRIGGER CHANGE <number> ...
-TRIGGER ADD ...
-
-%U%_When to match%_%U
-%UOn which types of event to trigger%U
- These are simply specified by -name_of_the_type
- The normal IRC event types are:
- publics, %|privmsgs, (pub|priv)actions, (pub|priv)notices, (pub|priv)ctcps, (pub|priv)ctcpreplies, joins, parts, quits, kicks, topics, invites, nick_changes, dcc_msgs, dcc_actions, dcc_ctcps
- mode_channel: %|a mode on the (whole) channel (like +t, +i, +b)
- mode_nick: %|a mode on someone in the channel (like +o, +v)
- -all is an alias for all of those.
- Additionally, there is:
- rawin: %|raw text incoming from the server
- send_command: %|commands you give to irssi
- send_text: %|lines you type that aren't commands
- beep: %|when irssi beeps
- notify_join: %|someone in you notify list comes online
- notify_part: %|someone in your notify list goes offline
- notify_away: %|someone in your notify list goes away
- notify_unaway: %|someone in your notify list goes unaway
- notify_unidle: %|someone in your notify list stops idling
- (pub|priv)flood: %|flood in a channel or in private detected. See /set flood. Be careful, these flood signals can trigger many times for one flood (unless you have autoignore enabled)
-
-%UFilters (conditions) the event has to satisfy%U
-They all take one parameter. If you can give a list, seperate elements by space and use quotes around the list.
-All filters except for -pattern and -regexp can also be inversed by prefixing with -not_.
- -pattern: %|The message must match the given pattern. ? and * can be used as wildcards
- -regexp: %|The message must match the given regexp. (see man perlre)
- %|if -nocase is given as an option, the regexp or pattern is matched case insensitive
- -tags: %|The servertag must be in the given list of tags
- -channels: %|The event must be in one of the given list of channels.
- Examples: %|-channels '#chan1 #chan2' or -channels 'IRCNet/#channel'
- %|-channels 'EFNet/' means every channel on EFNet and is the same as -tags 'EFNet'
- -masks: %|The person who triggers it must match one of the given list of masks
- -hasmode: %|The person who triggers it must have the give mode
- Examples: %|'-o' means not opped, '+ov' means opped OR voiced, '-o&-v' means not opped AND not voiced
- -hasflag: %|Only trigger if friends.pl (friends_shasta.pl) or people.pl is loaded and the person who triggers it has the given flag in the script (same syntax as -hasmode)
- -other_masks
- -other_hasmode
- -other_hasflag: %|Same as above but for the victim for kicks or mode_nick.
-
-%U%_What to do when it matches%_%U
- -command: Execute the given Irssi-command
- %|You are able to use $1, $2 and so on generated by your regexp pattern.
- %|For multiple commands ; can be used as seperator
- %|The following variables are also expanded:
- $T: %|Server tag
- $C: %|Channel name
- $O: %|Your nick
- $N: %|Nickname of the person who triggered this command
- $A: %|His address (foo@bar.com),
- $I: %|His ident (foo)
- $H: %|His hostname (bar.com)
- $M: %|The complete message
- ${other}: %|The victim for kicks or mode_nick
- ${mode_type}: %|The type ('+' or '-') for a mode_channel or mode_nick
- ${mode_char}: %|The mode char ('o' for ops, 'b' for ban,...)
- ${mode_arg} : %|The argument to the mode (if there is one)
- %|$\X, with X being one of the above expands (e.g. $\M), escapes all non-alphanumeric characters, so it can be used with /eval or /exec. Don't use /eval or /exec without this, it's not safe.
- -replace: %|replaces the matching part with the given replacement in the event (requires a -regexp or -pattern)
- -once: %|remove the trigger if it is triggered, so it only executes once and then is forgotten.
- -stop: %|stops the signal. It won't get displayed by Irssi. Like /IGNORE
- -debug: %|print some debugging info
- -last: %|Don't process any more triggers for this message
-
-%U%_Other options%_%U
- -disabled: %|Same as removing it, but keeps it in case you might need it later
- -name: %|Give the trigger a name. You can refer to the trigger with this name in add/del/change commands
-
-%U%_Examples%_%U
- Knockout people who do a !list:
- %#/TRIGGER ADD %|-publics -channels "#channel1 #channel2" -nocase -regexp ^!list -command "KN $N This is not a warez channel!"
- React to !echo commands from people who are +o in your friends-script:
- %#/TRIGGER ADD %|-publics -regexp '^!echo (.*)' -hasflag '+o' -command 'say echo: $1'
- Ignore all non-ops on #channel:
- %#/TRIGGER ADD %|-publics -actions -channels "#channel" -hasmode '-o' -stop
- Send a mail to yourself every time a topic is changed:
- %#/TRIGGER ADD %|-topics -command 'exec echo $\N changed topic of $\C to: $\M | mail you@somewhere.com -s topic'
-
-
-%U%_Examples with -replace%_%U
- %|Replace every occurence of shit with sh*t, case insensitive:
- %#/TRIGGER ADD %|-all -nocase -regexp shit -replace sh*t
- %|Strip all colorcodes from *!lamer@*:
- %#/TRIGGER ADD %|-all -masks *!lamer@* -regexp '\x03\d?\d?(,\d\d?)?|\x02|\x1f|\x16|\x06' -replace ''
- %|Never let *!bot1@foo.bar or *!bot2@foo.bar hilight you
- %|(this works by cutting your nick in 2 different parts, 'myn' and 'ick' here)
- %|you don't need to understand the -replace argument, just trust that it works if the 2 parts separately don't hilight:
- %#/TRIGGER ADD %|-all masks '*!bot1@foo.bar *!bot2@foo.bar' -regexp '(myn)(ick)' -nocase -replace '$1\x02\x02$2'
- %|Avoid being hilighted by !top10 in eggdrops with stats.mod (but show your nick in bold):
- %#/TRIGGER ADD %|-publics -regexp '(Top.0\(.*\): 1.*)(my)(nick)' -replace '$1\x02$2\x02\x02$3\x02'
- %|Convert a Windows-1252 Euro to an ISO-8859-15 Euro (same effect as euro.pl):
- %#/TRIGGER ADD %|-regexp '\x80' -replace '\xA4'
- %|Show tabs as spaces, not the inverted I (same effect as tab_stop.pl):
- %#/TRIGGER ADD %|-all -regexp '\t' -replace ' '
-SCRIPTHELP_EOF
-} # /
-
-my @triggers; # array of all triggers
-my %triggers_by_type; # hash mapping types on triggers of that type
-my $recursion_depth = 0;
-my $changed_since_last_save = 0;
-
-###############
-### formats ###
-###############
-
-Irssi::theme_register([
- 'trigger_header' => 'Triggers:',
- 'trigger_line' => '%#$[-4]0 $1',
- 'trigger_added' => 'Trigger $0 added: $1',
- 'trigger_not_found' => 'Trigger {hilight $0} not found',
- 'trigger_saved' => 'Triggers saved to $0',
- 'trigger_loaded' => 'Triggers loaded from $0'
-]);
-
-#########################################
-### catch the signals & do your thing ###
-#########################################
-
-# trigger types with a message and a channel
-my @allchanmsg_types = qw(publics pubactions pubnotices pubctcps pubctcpreplies parts kicks topics);
-# trigger types with a message
-my @allmsg_types = (@allchanmsg_types, qw(privmsgs privactions privnotices privctcps privctcpreplies dcc_msgs dcc_actions dcc_ctcps quits));
-# trigger types with a channel
-my @allchan_types = (@allchanmsg_types, qw(mode_channel mode_nick joins invites pubflood send_text));
-# trigger types in -all
-my @all_types = (@allmsg_types, qw(mode_channel mode_nick joins invites nick_changes));
-# trigger types that can use -masks
-my @mask_types = (@all_types, qw(notify_join notify_part notify_away notify_unaway notify_unidle));
-# trigger types with a server
-my @all_server_types = (@mask_types, qw(rawin pubflood privflood));
-# all trigger types
-my @trigger_types = (@all_server_types, qw(send_command send_text beep));
-#trigger types that are not in -all
-#my @notall_types = grep {my $a=$_; return (!grep {$_ eq $a} @all_types);} @trigger_types;
-my @notall_types = qw(rawin notify_join notify_part notify_away notify_unaway notify_unidle send_command send_text beep pubflood privflood);
-
-my @signals = (
-# "message public", SERVER_REC, char *msg, char *nick, char *address, char *target
-{
- 'types' => ['publics'],
- 'signal' => 'message public',
- 'sub' => sub {check_signal_message(\@_,1,$_[0],$_[4],$_[2],$_[3],'publics');},
-},
-# "message private", SERVER_REC, char *msg, char *nick, char *address
-{
- 'types' => ['privmsgs'],
- 'signal' => 'message private',
- 'sub' => sub {check_signal_message(\@_,1,$_[0],undef,$_[2],$_[3],'privmsgs');},
-},
-# "message irc action", SERVER_REC, char *msg, char *nick, char *address, char *target
-{
- 'types' => ['privactions','pubactions'],
- 'signal' => 'message irc action',
- 'sub' => sub {
- if ($_[4] eq $_[0]->{nick}) {
- check_signal_message(\@_,1,$_[0],undef,$_[2],$_[3],'privactions');
- } else {
- check_signal_message(\@_,1,$_[0],$_[4],$_[2],$_[3],'pubactions');
- }
- },
-},
-# "message irc notice", SERVER_REC, char *msg, char *nick, char *address, char *target
-{
- 'types' => ['privnotices','pubnotices'],
- 'signal' => 'message irc notice',
- 'sub' => sub {
- if ($_[4] eq $_[0]->{nick}) {
- check_signal_message(\@_,1,$_[0],undef,$_[2],$_[3],'privnotices');
- } else {
- check_signal_message(\@_,1,$_[0],$_[4],$_[2],$_[3],'pubnotices');
- }
- }
-},
-# "message join", SERVER_REC, char *channel, char *nick, char *address
-{
- 'types' => ['joins'],
- 'signal' => 'message join',
- 'sub' => sub {check_signal_message(\@_,-1,$_[0],$_[1],$_[2],$_[3],'joins');}
-},
-# "message part", SERVER_REC, char *channel, char *nick, char *address, char *reason
-{
- 'types' => ['parts'],
- 'signal' => 'message part',
- 'sub' => sub {check_signal_message(\@_,4,$_[0],$_[1],$_[2],$_[3],'parts');}
-},
-# "message quit", SERVER_REC, char *nick, char *address, char *reason
-{
- 'types' => ['quits'],
- 'signal' => 'message quit',
- 'sub' => sub {check_signal_message(\@_,3,$_[0],undef,$_[1],$_[2],'quits');}
-},
-# "message kick", SERVER_REC, char *channel, char *nick, char *kicker, char *address, char *reason
-{
- 'types' => ['kicks'],
- 'signal' => 'message kick',
- 'sub' => sub {check_signal_message(\@_,5,$_[0],$_[1],$_[3],$_[4],'kicks',{'other'=>$_[2]});}
-},
-# "message topic", SERVER_REC, char *channel, char *topic, char *nick, char *address
-{
- 'types' => ['topics'],
- 'signal' => 'message topic',
- 'sub' => sub {check_signal_message(\@_,2,$_[0],$_[1],$_[3],$_[4],'topics');}
-},
-# "message invite", SERVER_REC, char *channel, char *nick, char *address
-{
- 'types' => ['invites'],
- 'signal' => 'message invite',
- 'sub' => sub {check_signal_message(\@_,-1,$_[0],$_[1],$_[2],$_[3],'invites');}
-},
-# "message nick", SERVER_REC, char *newnick, char *oldnick, char *address
-{
- 'types' => ['nick_changes'],
- 'signal' => 'message nick',
- 'sub' => sub {check_signal_message(\@_,-1,$_[0],undef,$_[1],$_[3],'nick_changes',{'other'=>$_[2]});}
-},
-# "message dcc", DCC_REC *dcc, char *msg
-{
- 'types' => ['dcc_msgs'],
- 'signal' => 'message dcc',
- 'sub' => sub {check_signal_message(\@_,1,$_[0]->{'server'},undef,$_[0]->{'nick'},undef,'dcc_msgs');
- }
-},
-# "message dcc action", DCC_REC *dcc, char *msg
-{
- 'types' => ['dcc_actions'],
- 'signal' => 'message dcc action',
- 'sub' => sub {check_signal_message(\@_,1,$_[0]->{'server'},undef,$_[0]->{'nick'},undef,'dcc_actions');}
-},
-# "message dcc ctcp", DCC_REC *dcc, char *cmd, char *data
-{
- 'types' => ['dcc_ctcps'],
- 'signal' => 'message dcc ctcp',
- 'sub' => sub {check_signal_message(\@_,1,$_[0]->{'server'},undef,$_[0]->{'nick'},undef,'dcc_ctcps');}
-},
-# "server incoming", SERVER_REC, char *data
-{
- 'types' => ['rawin'],
- 'signal' => 'server incoming',
- 'sub' => sub {check_signal_message(\@_,1,$_[0],undef,undef,undef,'rawin');}
-},
-# "send command", char *args, SERVER_REC, WI_ITEM_REC
-{
- 'types' => ['send_command'],
- 'signal' => 'send command',
- 'sub' => sub {
- sig_send_text_or_command(\@_,1);
- }
-},
-# "send text", char *line, SERVER_REC, WI_ITEM_REC
-{
- 'types' => ['send_text'],
- 'signal' => 'send text',
- 'sub' => sub {
- sig_send_text_or_command(\@_,0);
- }
-},
-# "beep"
-{
- 'types' => ['beep'],
- 'signal' => 'beep',
- 'sub' => sub {check_signal_message(\@_,-1,undef,undef,undef,undef,'beep');}
-},
-# "event "<cmd>, SERVER_REC, char *args, char *sender_nick, char *sender_address
-{
- 'types' => ['mode_channel', 'mode_nick'],
- 'signal' => 'event mode',
- 'sub' => sub {
- my ($server, $event_args, $nickname, $address) = @_;
- my ($target, $modes, $modeargs) = split(/ /, $event_args, 3);
- return if (!$server->ischannel($target));
- my (@modeargs) = split(/ /,$modeargs);
- my ($pos, $type, $event_type, $arg) = (0, '+');
- foreach my $char (split(//,$modes)) {
- if ($char eq "+" || $char eq "-") {
- $type = $char;
- } else {
- if ($char =~ /[Oovh]/) { # mode_nick
- $event_type = 'mode_nick';
- $arg = $modeargs[$pos++];
- } elsif ($char =~ /[beIqdk]/ || ( $char =~ /[lfJ]/ && $type eq '+')) { # chan_mode with arg
- $event_type = 'mode_channel';
- $arg = $modeargs[$pos++];
- } else { # chan_mode without arg
- $event_type = 'mode_channel';
- $arg = undef;
- }
- check_signal_message(\@_,-1,$server,$target,$nickname,$address,$event_type,{
- 'mode_type' => $type,
- 'mode_char' => $char,
- 'mode_arg' => $arg,
- 'other' => ($event_type eq 'mode_nick') ? $arg : undef
- });
- }
- }
- }
-},
-# "notifylist joined", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
-{
- 'types' => ['notify_join'],
- 'signal' => 'notifylist joined',
- 'sub' => sub {check_signal_message(\@_, 5, $_[0], undef, $_[1], $_[2].'@'.$_[3], 'notify_join', {'realname' => $_[4]});}
-},
-{
- 'types' => ['notify_part'],
- 'signal' => 'notifylist left',
- 'sub' => sub {check_signal_message(\@_, 5, $_[0], undef, $_[1], $_[2].'@'.$_[3], 'notify_left', {'realname' => $_[4]});}
-},
-{
- 'types' => ['notify_unidle'],
- 'signal' => 'notifylist unidle',
- 'sub' => sub {check_signal_message(\@_, 5, $_[0], undef, $_[1], $_[2].'@'.$_[3], 'notify_unidle', {'realname' => $_[4]});}
-},
-{
- 'types' => ['notify_away', 'notify_unaway'],
- 'signal' => 'notifylist away changed',
- 'sub' => sub {check_signal_message(\@_, 5, $_[0], undef, $_[1], $_[2].'@'.$_[3], ($_[5] ? 'notify_away' : 'notify_unaway'), {'realname' => $_[4]});}
-},
-# "ctcp msg", SERVER_REC, char *args, char *nick, char *addr, char *target
-{
- 'types' => ['pubctcps', 'privctcps'],
- 'signal' => 'ctcp msg',
- 'sub' => sub {
- my ($server, $args, $nick, $addr, $target) = @_;
- if ($target eq $server->{'nick'}) {
- check_signal_message(\@_, 1, $server, undef, $nick, $addr, 'privctcps');
- } else {
- check_signal_message(\@_, 1, $server, $target, $nick, $addr, 'pubctcps');
- }
- }
-},
-# "ctcp reply", SERVER_REC, char *args, char *nick, char *addr, char *target
-{
- 'types' => ['pubctcpreplies', 'privctcpreplies'],
- 'signal' => 'ctcp reply',
- 'sub' => sub {
- my ($server, $args, $nick, $addr, $target) = @_;
- if ($target eq $server->{'nick'}) {
- check_signal_message(\@_, 1, $server, undef, $nick, $addr, 'privctcpreplies');
- } else {
- check_signal_message(\@_, 1, $server, $target, $nick, $addr, 'pubctcpreplies');
- }
- }
-},
-# "flood", SERVER_REC, char *nick, char *host, int level, char *target
-{
- 'types' => ['pubflood', 'privflood'],
- 'signal' => 'flood',
- 'sub' => sub {
- my ($server, $nick, $host, $level, $target) = @_;
- if ($target eq $server->{'nick'}) {
- check_signal_message(\@_, -1, $server, undef, $nick, $host, 'privflood');
- } else {
- check_signal_message(\@_, -1, $server, $target, $nick, $host, 'pubflood');
- }
- }
-}
-);
-
-sub sig_send_text_or_command {
- my ($signal, $iscommand) = @_;
- my ($line, $server, $item) = @$signal;
- my ($channelname,$nickname,$address) = (undef,undef,undef);
- if ($item && (ref($item) eq 'Irssi::Irc::Channel' || ref($item) eq 'Irssi::Silc::Channel')) {
- $channelname = $item->{'name'};
- } elsif ($item && ref($item) eq 'Irssi::Irc::Query') { # TODO Silc query ?
- $nickname = $item->{'name'};
- $address = $item->{'address'}
- }
- # TODO pass context also for non-channels (queries and other stuff)
- check_signal_message($signal,0,$server,$channelname,$nickname,$address,$iscommand ? 'send_command' : 'send_text');
-
-}
-
-my %filters = (
-'tags' => {
- 'types' => \@all_server_types,
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
-
- if (!defined($server)) {
- return 0;
- }
- my $matches = 0;
- foreach my $tag (split(/ /,$param)) {
- if (lc($server->{'tag'}) eq lc($tag)) {
- $matches = 1;
- last;
- }
- }
- return $matches;
- }
-},
-'channels' => {
- 'types' => \@allchan_types,
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
-
- if (!defined($channelname) || !defined($server)) {
- return 0;
- }
- my $matches = 0;
- foreach my $trigger_channel (split(/ /,$param)) {
- if (lc($channelname) eq lc($trigger_channel)
- || lc($server->{'tag'}.'/'.$channelname) eq lc($trigger_channel)
- || lc($server->{'tag'}.'/') eq lc($trigger_channel)) {
- $matches = 1;
- last; # this channel matches, stop checking channels
- }
- }
- return $matches;
- }
-},
-'masks' => {
- 'types' => \@mask_types,
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- $address //= '';
- return (defined($nickname) && defined($server) && $server->masks_match($param, $nickname, $address));
- }
-},
-'other_masks' => {
- 'types' => ['kicks', 'mode_nick', 'nick_changes'],
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return 0 unless defined($extra->{'other'});
- my $other_address = ($condition ne 'nick_changes') ? get_address($extra->{'other'}, $server, $channelname) : $address;
- return defined($other_address) && $server->masks_match($param, $extra->{'other'}, $other_address);
- }
-},
-'hasmode' => {
- 'types' => \@all_types,
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return hasmode($param, $nickname, $server, $channelname);
- }
-},
-'other_hasmode' => {
- 'types' => ['kicks', 'mode_nick'],
- 'sub' => sub {
- my ($param,$signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return defined($extra->{'other'}) && hasmode($param, $extra->{'other'}, $server, $channelname);
- }
-},
-'hasflag' => {
- 'types' => \@all_types,
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return 0 unless defined($nickname) && defined($address) && defined($server);
- my $flags = get_flags ($server->{'chatnet'},$channelname,$nickname,$address);
- return defined($flags) && check_modes($flags,$param);
- }
-},
-'other_hasflag' => {
- 'types' => ['kicks', 'mode_nick'],
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return 0 unless defined($extra->{'other'});
- my $other_address = get_address($extra->{'other'}, $server, $channelname);
- return 0 unless defined($other_address);
- my $flags = get_flags ($server->{'chatnet'},$channelname,$extra->{'other'},$other_address);
- return defined($flags) && check_modes($flags,$param);
- }
-},
-'mode_type' => {
- 'types' => ['mode_channel', 'mode_nick'],
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return (($param) eq $extra->{'mode_type'});
- }
-},
-'mode_char' => {
- 'types' => ['mode_channel', 'mode_nick'],
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return (($param) eq $extra->{'mode_char'});
- }
-},
-'mode_arg' => {
- 'types' => ['mode_channel', 'mode_nick'],
- 'sub' => sub {
- my ($param, $signal,$parammessage,$server,$channelname,$nickname,$address,$condition,$extra) = @_;
- return (($param) eq $extra->{'mode_arg'});
- }
-}
-);
-
-sub get_address {
- my ($nick, $server, $channel) = @_;
- my $nickrec = get_nickrec($nick, $server, $channel);
- return $nickrec ? $nickrec->{'host'} : undef;
-}
-sub get_nickrec {
- my ($nick, $server, $channel) = @_;
- return unless defined($server) && defined($channel) && defined($nick);
- my $chanrec = $server->channel_find($channel);
- return $chanrec ? $chanrec->nick_find($nick) : undef;
-}
-
-sub hasmode {
- my ($param, $nickname, $server, $channelname) = @_;
- my $nickrec = get_nickrec($nickname, $server, $channelname);
- return 0 unless defined $nickrec;
- my $modes =
- ($nickrec->{'op'} ? 'o' : '')
- . ($nickrec->{'voice'} ? 'v' : '')
- . ($nickrec->{'halfop'} ? 'h' : '')
- ;
- return check_modes($modes, $param);
-}
-
-# list of all switches
-my @trigger_switches = (@trigger_types, qw(all nocase stop once debug disabled last));
-# parameters (with an argument)
-my @trigger_params = qw(pattern regexp command replace name);
-# all options that can be used to set filters, including negative matches (not_<filter>)
-my @trigger_filter_options = map(($_,'not_'.$_), keys(%filters));
-# list of all options (including switches) for /TRIGGER ADD
-my @trigger_add_options = (@trigger_switches, @trigger_params, @trigger_filter_options);
-# same for /TRIGGER CHANGE, this includes the -no<option>'s
-my @trigger_options = map(($_,'no'.$_) ,@trigger_add_options);
-
-# check the triggers on $signal's $parammessage parameter, for triggers with $condition set
-# on $server in $channelname, for $nickname!$address
-# set $parammessage to -1 if the signal doesn't have a message
-# for signal without channel, nick or address, set to undef
-sub check_signal_message {
- my ($signal, $parammessage, $server, $channelname, $nickname, $address, $condition, $extra) = @_;
- my ($changed, $stopped, $context, $need_rebuild);
- my $message = ($parammessage == -1) ? '' : $signal->[$parammessage];
-
- return if (!$triggers_by_type{$condition});
-
- if ($recursion_depth > 10) {
- Irssi::print("Trigger error: Maximum recursion depth reached, aborting trigger.", MSGLEVEL_CLIENTERROR);
- return;
- }
- $recursion_depth++;
-
-TRIGGER:
- foreach my $trigger (@{$triggers_by_type{$condition}}) {
- # check filters
- foreach my $trigfilter (filters_for_trigger($trigger)) {
- my $filter_sub = $trigfilter->{'filter'}->{'sub'};
- my $filter_matches = !!(&$filter_sub($trigfilter->{'param'}, $signal, $parammessage, $server, $channelname, $nickname, $address, $condition, $extra));
- if ($filter_matches != $trigfilter->{'must_match'}) { # if it didn't match, or if it's a -not_* filter and it did match
- next TRIGGER;
- }
- }
-
- # check regexp (and keep matches in @- and @+, so don't make a this a {block})
- next if ($trigger->{'compregexp'} && ($parammessage == -1 || $message !~ m/$trigger->{'compregexp'}/));
-
- # if we got this far, it fully matched, and we need to do the replace/command/stop/once
- my $expands = $extra;
- $expands->{'M'} = $message,;
- $expands->{'T'} = (defined($server)) ? $server->{'tag'} : '';
- $expands->{'C'} = $channelname;
- $expands->{'O'} = (defined($server)) ? $server->{'nick'} : '';
- $expands->{'N'} = $nickname;
- $expands->{'A'} = $address;
- $expands->{'I'} = ((!defined($address)) ? '' : substr($address,0,index($address,'@')));
- $expands->{'H'} = ((!defined($address)) ? '' : substr($address,index($address,'@')+1));
- $expands->{'$'} = '$';
- $expands->{';'} = ';';
-
- if (defined($trigger->{'replace'})) { # it's a -replace
- $message =~ s/$trigger->{'compregexp'}/do_expands(0,$trigger->{'compreplace'},$expands,$message)/ge;
- $changed = 1;
- }
-
- if ($trigger->{'command'}) { # it's a (nonempty) -command
- my $command = $trigger->{'command'};
- # $1 = the stuff behind the $ we want to expand: a number, or a character from %expands
- $command = do_expands(1, $command, $expands, $message);
-
- if (defined($server)) {
- if (defined($channelname) && $server->channel_find($channelname)) {
- $context = $server->channel_find($channelname);
- } else {
- $context = $server;
- }
- } else {
- $context = undef;
- }
-
- if (defined($context)) {
- $context->command("eval $command");
- } else {
- Irssi::command("eval $command");
- }
- }
-
- if ($trigger->{'debug'}) {
- print("DEBUG: trigger $condition pmesg=$parammessage message=$message server=$server->{tag} channel=$channelname nick=$nickname address=$address " . join(' ',map {$_ . '=' . $extra->{$_}} keys(%$extra)));
- }
-
- if ($trigger->{'stop'}) {
- $stopped = 1;
- }
-
- if ($trigger->{'once'}) {
- # find this trigger in the real trigger list, and remove it
- for (my $realindex=0; $realindex < scalar(@triggers); $realindex++) {
- if ($triggers[$realindex] == $trigger) {
- splice (@triggers,$realindex,1);
- last;
- }
- }
- $need_rebuild = 1;
- }
- if ($trigger->{'last'}) {
- last TRIGGER;
- }
- }
-
- if ($need_rebuild) {
- rebuild();
- $changed_since_last_save = 1;
- }
- if ($stopped) { # stopped with -stop
- signal_stop();
- } elsif ($changed) { # changed with -replace
- $signal->[$parammessage] = $message;
- signal_continue(@$signal);
- }
- $recursion_depth--;
-}
-
-# return array of filters for the given trigger
-sub filters_for_trigger($) {
- my ($trigger) = @_;
- return values(%{$trigger->{'filters'}});
-}
-
-# used in check_signal_message to expand $'s
-# $inthis is a string that can contain $ stuff (like 'foo$1bar$N')
-sub do_expands {
- my ($escape, $inthis, $expands, $from) = @_;
- # @+ and @- are copied because there are two s/// nested, and the inner needs the $1 and $2,... of the outer one
- my @plus = @+;
- my @min = @-;
- my $p = \@plus; my $m = \@min;
- $inthis =~ s/\$(\\*(\d+|[^0-9x{]|x[0-9a-fA-F][0-9a-fA-F]|{.*?}))/expand_and_escape($escape,$1,$expands,$m,$p,$from)/ge;
- return $inthis;
-}
-
-# \ $ and ; may need extra escaping because we use eval for -command
-sub expand_and_escape {
- my $escape = shift;
- my $retval = expand(@_);
- if ($escape) {
- $retval =~ s/([\\\$;])/\\\1/g;
- }
- return $retval;
-}
-
-# used in do_expands (via expand_and_escape), to_expand is the part after the $
-sub expand {
- my ($to_expand, $expands, $min, $plus, $from) = @_;
- if ($to_expand =~ /^\d+$/) { # a number => look up in $vars
- # from man perlvar:
- # $3 is the same as "substr $var, $-[3], $+[3] - $-[3])"
- return ($to_expand > @{$min} ? '' : substr($from,$min->[$to_expand],$plus->[$to_expand]-$min->[$to_expand]));
- } elsif ($to_expand =~ s/^\\//) { # begins with \, so strip that from to_expand
- my $exp = expand($to_expand,$expands,$min,$plus,$from); # first expand without \
- $exp =~ s/([^a-zA-Z0-9])/\\\1/g; # escape non-word chars
- return $exp;
- } elsif ($to_expand =~ /^x([0-9a-fA-F]{2})/) { # $xAA
- return chr(hex($1));
- } elsif ($to_expand =~ /^{(.*?)}$/) { # ${foo}
- return expand($1, $expands, $min, $plus, $from);
- } else { # look up in $expands
- return $expands->{$to_expand};
- }
-}
-
-sub check_modes {
- my ($has_modes, $need_modes) = @_;
- my $matches;
- my $switch = 1; # if a '-' if found, will be 0 (meaning the modes should not be set)
- foreach my $need_mode (split /&/, $need_modes) {
- $matches = 0;
- foreach my $char (split //, $need_mode) {
- if ($char eq '-') {
- $switch = 0;
- } elsif ($char eq '+') {
- $switch = 1;
- } elsif ((index($has_modes, $char) != -1) == $switch) {
- $matches = 1;
- last;
- }
- }
- if (!$matches) {
- return 0;
- }
- }
- return 1;
-}
-
-# get someones flags from people.pl or friends(_shasta).pl
-sub get_flags {
- my ($chatnet, $channel, $nick, $address) = @_;
- my $flags;
- no strict 'refs';
- if (%{ 'Irssi::Script::people::' }) {
- if (defined ($channel)) {
- $flags = (&{ 'Irssi::Script::people::find_local_flags' }($chatnet,$channel,$nick,$address));
- } else {
- $flags = (&{ 'Irssi::Script::people::find_global_flags' }($chatnet,$nick,$address));
- }
- $flags = join('',keys(%{$flags}));
- } else {
- my $shasta;
- if (%{ 'Irssi::Script::friends_shasta::' }) {
- $shasta = 'friends_shasta';
- } elsif (defined &{ 'Irssi::Script::friends::get_idx' }) {
- $shasta = 'friends';
- } else {
- return undef;
- }
- my $idx = (&{ 'Irssi::Script::'.$shasta.'::get_idx' }($nick, $address));
- if ($idx == -1) {
- return '';
- }
- $flags = (&{ 'Irssi::Script::'.$shasta.'::get_friends_flags' }($idx,undef));
- if ($channel) {
- $flags .= (&{ 'Irssi::Script::'.$shasta.'::get_friends_flags' }($idx,$channel));
- }
- }
- return $flags;
-}
-
-########################################################
-### internal stuff called by manage, needed by above ###
-########################################################
-
-my %mask_to_regexp = ();
-foreach my $i (0..255) {
- my $ch = chr $i;
- $mask_to_regexp{$ch} = "\Q$ch\E";
-}
-$mask_to_regexp{'?'} = '(.)';
-$mask_to_regexp{'*'} = '(.*)';
-
-sub compile_trigger {
- my ($trigger) = @_;
- my $regexp;
-
- if ($trigger->{'regexp'}) {
- $regexp = $trigger->{'regexp'};
- } elsif ($trigger->{'pattern'}) {
- $regexp = $trigger->{'pattern'};
- $regexp =~ s/(.)/$mask_to_regexp{$1}/g;
- } else {
- delete $trigger->{'compregexp'};
- return;
- }
-
- if ($trigger->{'nocase'}) {
- $regexp = '(?i)' . $regexp;
- }
-
- $trigger->{'compregexp'} = qr/$regexp/;
-
- if(defined($trigger->{'replace'})) {
- (my $replace = $trigger->{'replace'}) =~ s/\$/\$\$/g;
- $trigger->{'compreplace'} = Irssi::parse_special($replace);
- }
-}
-
-# rebuilds triggers_by_type and updates signal binds
-sub rebuild {
- %triggers_by_type = ();
- foreach my $trigger (@triggers) {
- if (!$trigger->{'disabled'}) {
- if ($trigger->{'all'}) {
- # -all is an alias for all types in @all_types for which the filters can apply
-ALLTYPES:
- foreach my $type (@all_types) {
- # check if all filters can apply to $type
- foreach my $trigfilter (filters_for_trigger($trigger)) {
- if (! grep {$_ eq $type} @{$trigfilter->{'filter'}->{'types'}}) {
- next ALLTYPES;
- }
- }
- push @{$triggers_by_type{$type}}, ($trigger);
- }
- }
-
- foreach my $type ($trigger->{'all'} ? @notall_types : @trigger_types) {
- if ($trigger->{$type}) {
- push @{$triggers_by_type{$type}}, ($trigger);
- }
- }
- }
- }
-
- foreach my $signal (@signals) {
- my $should_bind = 0;
- foreach my $type (@{$signal->{'types'}}) {
- if (defined($triggers_by_type{$type})) {
- $should_bind = 1;
- }
- }
- if ($should_bind && !$signal->{'bind'}) {
- signal_add_first($signal->{'signal'}, $signal->{'sub'});
- $signal->{'bind'} = 1;
- } elsif (!$should_bind && $signal->{'bind'}) {
- signal_remove($signal->{'signal'}, $signal->{'sub'});
- $signal->{'bind'} = 0;
- }
- }
-}
-
-################################
-### manage the triggers-list ###
-################################
-
-my $trigger_file; # cached setting
-
-sub sig_setup_changed {
- $trigger_file = Irssi::settings_get_str('trigger_file');
-}
-
-sub autosave {
- cmd_save() if ($changed_since_last_save);
-}
-
-# TRIGGER SAVE
-sub cmd_save {
- my $io = new IO::File $trigger_file, "w";
- if (defined $io) {
- $io->print("#Triggers file version $VERSION\n");
- foreach my $trigger (@triggers) {
- $io->print(to_string($trigger) . "\n");
- }
- $io->close;
- }
- Irssi::printformat(MSGLEVEL_CLIENTNOTICE, 'trigger_saved', $trigger_file);
- $changed_since_last_save = 0;
-}
-
-# save on unload
-sub UNLOAD {
- cmd_save();
-}
-
-# TRIGGER LOAD
-sub cmd_load {
- sig_setup_changed(); # make sure we've read the trigger_file setting
- my $converted = 0;
- my $io = new IO::File $trigger_file, "r";
- if (not defined $io) {
- if (-e $trigger_file) {
- Irssi::print("Error opening triggers file", MSGLEVEL_CLIENTERROR);
- }
- return;
- }
- if (defined $io) {
- @triggers = ();
- my $text;
- $text = $io->getline;
- my $file_version = '';
- if ($text =~ /^#Triggers file version (.*)\n/) {
- $file_version = $1;
- }
- if ($file_version lt '0.6.1+2') {
- no strict 'vars';
- $text .= $_ foreach ($io->getlines);
- my $rep = eval "$text";
- if (! ref $rep) {
- Irssi::print("Error in triggers file");
- return;
- }
- my @old_triggers = @$rep;
-
- for (my $index=0;$index < scalar(@old_triggers);$index++) {
- my $trigger = $old_triggers[$index];
-
- if ($file_version lt '0.6.1') {
- # convert old names: notices => pubnotices, actions => pubactions
- foreach $oldname ('notices','actions') {
- if ($trigger->{$oldname}) {
- delete $trigger->{$oldname};
- $trigger->{'pub'.$oldname} = 1;
- $converted = 1;
- }
- }
- }
- if ($file_version lt '0.6.1+1' && $trigger->{'modifiers'}) {
- if ($trigger->{'modifiers'} =~ /i/) {
- $trigger->{'nocase'} = 1;
- Irssi::print("Trigger: trigger ".($index+1)." had 'i' in it's modifiers, it has been converted to -nocase");
- }
- if ($trigger->{'modifiers'} !~ /^[ig]*$/) {
- Irssi::print("Trigger: trigger ".($index+1)." had unrecognised modifier '". $trigger->{'modifiers'} ."', which couldn't be converted.");
- }
- delete $trigger->{'modifiers'};
- $converted = 1;
- }
-
- # convert to text with compat, and then to new trigger hash
- $text = to_string($trigger,1);
- my @args = &shellwords($text . ' a');
- my $trigger = parse_options({},@args);
- if ($trigger) {
- push @triggers, $trigger;
- }
- }
- } else { # new format
- while ( $text = $io->getline ) {
- chop($text);
- next if ($text =~ /^[ ]*$|^#/);
- my @args = &shellwords($text . ' a');
- my $trigger = parse_options({},@args);
- if ($trigger) {
- push @triggers, $trigger;
- }
- }
- }
- }
- Irssi::printformat(MSGLEVEL_CLIENTNOTICE, 'trigger_loaded', $trigger_file);
- if ($converted) {
- Irssi::print("Trigger: Triggers file will be in new format next time it's saved.");
- }
- rebuild();
-}
-
-# escape for printing with to_string
-# <<abcdef>> => << 'abcdef' >>
-# <<abc'def>> => << "abc'def" >>
-# <<abc'def\x02>> => << 'abc'\''def\x02' >>
-sub param_to_string {
- my ($text) = @_;
- # avoid ugly escaping if we can use "-quotes without other escaping (no " or \)
- if ($text =~ /^[^"\\]*'[^"\\]$/) {
- return ' "' . $text . '" ';
- }
- # "'" signs without a (odd number of) \ in front of them, need be to escaped as '\''
- # this is ugly :(
- $text =~ s/(^|[^\\](\\\\)*)'/$1'\\''/g;
- return " '$text' ";
-}
-
-# converts a trigger back to "-switch -options 'foo'" form
-# if $compat, $trigger is in the old format (used to convert)
-sub to_string {
- my ($trigger, $compat) = @_;
- my $string;
-
- foreach my $switch (@trigger_switches) {
- if ($trigger->{$switch}) {
- $string .= '-'.$switch.' ';
- }
- }
-
- if ($compat) {
- foreach my $filter (keys(%filters)) {
- if ($trigger->{$filter}) {
- $string .= '-' . $filter . param_to_string($trigger->{$filter});
- }
- }
- } else {
- foreach my $trigfilter (filters_for_trigger($trigger)) {
- $string .= '-' . $trigfilter->{'option'} . param_to_string($trigfilter->{'param'});
- }
- }
-
- foreach my $param (@trigger_params) {
- if ($trigger->{$param} || ($param eq 'replace' && defined($trigger->{'replace'}))) {
- $string .= '-' . $param . param_to_string($trigger->{$param});
- }
- }
- return $string;
-}
-
-# find a trigger (for REPLACE and DELETE), returns index of trigger, or -1 if not found
-sub find_trigger {
- my ($data) = @_;
- if ($data =~ /^[0-9]*$/ and defined($triggers[$data-1])) {
- return $data-1;
- } else {
- for (my $i=0; $i < scalar(@triggers); $i++) {
- if ($triggers[$i]->{'name'} eq $data) {
- return $i;
- }
- }
- }
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trigger_not_found', $data);
- return -1; # not found
-}
-
-
-# TRIGGER ADD <options>
-sub cmd_add {
- my ($data, $server, $item) = @_;
- my @args = shellwords($data . ' a');
-
- my $trigger = parse_options({}, @args);
- if ($trigger) {
- push @triggers, $trigger;
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trigger_added', scalar(@triggers), to_string($trigger));
- rebuild();
- $changed_since_last_save = 1;
- }
-}
-
-# TRIGGER CHANGE <nr> <options>
-sub cmd_change {
- my ($data, $server, $item) = @_;
- my @args = shellwords($data . ' a');
- my $index = find_trigger(shift @args);
- if ($index != -1) {
- if(parse_options($triggers[$index], @args)) {
- Irssi::print("Trigger " . ($index+1) ." changed to: ". to_string($triggers[$index]));
- }
- rebuild();
- $changed_since_last_save = 1;
- }
-}
-
-# parses options for TRIGGER ADD and TRIGGER CHANGE
-# if invalid args returns undef, else changes $thetrigger and returns it
-sub parse_options {
- my ($thetrigger,@args) = @_;
- my ($trigger, $option);
-
- if (pop(@args) ne 'a') {
- Irssi::print("Syntax error, probably missing a closing quote", MSGLEVEL_CLIENTERROR);
- return undef;
- }
-
- %$trigger = %$thetrigger; # make a copy to prevent changing the given trigger if args doesn't parse
-ARGS: for (my $arg = shift @args; $arg; $arg = shift @args) {
- # expand abbreviated options, put in $option
- $arg =~ s/^-//;
- $option = undef;
- foreach my $ioption (@trigger_options) {
- if (index($ioption, $arg) == 0) { # -$opt starts with $arg
- if ($option) { # another already matched
- Irssi::print("Ambiguous option: $arg", MSGLEVEL_CLIENTERROR);
- return undef;
- }
- $option = $ioption;
- last if ($arg eq $ioption); # exact match is unambiguous
- }
- }
- if (!$option) {
- Irssi::print("Unknown option: $arg", MSGLEVEL_CLIENTERROR);
- return undef;
- }
-
- # -<param> <value> or -no<param>
- foreach my $param (@trigger_params) {
- if ($option eq $param) {
- $trigger->{$param} = shift @args;
- next ARGS;
- }
- if ($option eq 'no'.$param) {
- $trigger->{$param} = undef;
- next ARGS;
- }
- }
-
- # -[no]<switch>
- foreach my $switch (@trigger_switches) {
- # -<switch>
- if ($option eq $switch) {
- $trigger->{$switch} = 1;
- next ARGS;
- }
- # -no<switch>
- elsif ($option eq 'no'.$switch) {
- $trigger->{$switch} = undef;
- next ARGS;
- }
- }
-
- # -[not_]<filter> <value>
- if ($option =~ /^(not_)?(.*)$/ && $filters{$2}) {
- $trigger->{'filters'}->{$option} = {
- option => $option,
- must_match => ($1 ne 'not_'), # if false, trigger must only be done if filter sub returns false
- filter_name => $2,
- filter => $filters{$2},
- param => shift @args
- };
-
- next ARGS;
- }
-
- # -no<filter>
- if ($option =~ /^no(.*)$/ && $filters{$1}) {
- delete $trigger->{'filters'}->{$1};
- }
- }
-
- if (defined($trigger->{'replace'}) && ! $trigger->{'regexp'} && !$trigger->{'pattern'}) {
- Irssi::print("Trigger error: Can't have -replace without -regexp", MSGLEVEL_CLIENTERROR);
- return undef;
- }
-
- if ($trigger->{'pattern'} && $trigger->{'regexp'}) {
- Irssi::print("Trigger error: Can't have -pattern and -regexp in same trigger", MSGLEVEL_CLIENTERROR);
- return undef;
- }
-
- # remove types that are implied by -all
- if ($trigger->{'all'}) {
- foreach my $type (@all_types) {
- delete $trigger->{$type};
- }
- }
-
- # remove types for which the filters don't apply
- foreach my $type (@trigger_types) {
- if ($trigger->{$type}) {
- foreach my $trigfilter (filters_for_trigger($trigger)) {
- if (!grep {$_ eq $type} @{$trigfilter->{'filter'}->{'types'}}) {
- Irssi::print("Warning: the filter -" . $trigfilter->{'option'} . " can't apply to an event of type -$type, so I'm removing that type from this trigger.");
- delete $trigger->{$type};
- }
- }
- }
- }
-
- # check if it has at least one type
- my $has_a_type;
- foreach my $type (@trigger_types) {
- if ($trigger->{$type}) {
- $has_a_type = 1;
- last;
- }
- }
- if (!$has_a_type && !$trigger->{'all'}) {
- Irssi::print("Warning: this trigger doesn't trigger on any type of message. you probably want to add -publics or -all");
- }
-
- compile_trigger($trigger);
- %$thetrigger = %$trigger; # copy changes to real trigger
- return $thetrigger;
-}
-
-# TRIGGER DELETE <num>
-sub cmd_del {
- my ($data, $server, $item) = @_;
- my @args = shellwords($data);
- my $index = find_trigger(shift @args);
- if ($index != -1) {
- Irssi::print("Deleted ". ($index+1) .": ". to_string($triggers[$index]));
- splice (@triggers,$index,1);
- rebuild();
- $changed_since_last_save = 1;
- }
-}
-
-# TRIGGER MOVE <num> <num>
-sub cmd_move {
- my ($data, $server, $item) = @_;
- my @args = &shellwords($data);
- my $index = find_trigger(shift @args);
- if ($index != -1) {
- my $newindex = find_trigger(shift @args);
- if ($newindex != -1) {
- Irssi::print("Moved from " . ($index+1) . " to " . ($newindex+1) . ": " . to_string($triggers[$index]));
- my $trigger = splice (@triggers,$index,1); # remove from old place
- splice (@triggers,$newindex,0,($trigger)); # insert at new place
- rebuild();
- $changed_since_last_save = 1;
- }
- }
-}
-
-# TRIGGER LIST
-sub cmd_list {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trigger_header');
- my $i=1;
- foreach my $trigger (@triggers) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trigger_line', $i++, to_string($trigger));
- }
-}
-
-######################
-### initialisation ###
-######################
-
-command_bind('trigger help',\&cmd_help);
-command_bind('help trigger',\&cmd_help);
-command_bind('trigger add',\&cmd_add);
-command_bind('trigger change',\&cmd_change);
-command_bind('trigger move',\&cmd_move);
-command_bind('trigger list',\&cmd_list);
-command_bind('trigger delete',\&cmd_del);
-command_bind('trigger save',\&cmd_save);
-command_bind('trigger reload',\&cmd_load);
-command_bind 'trigger' => sub {
- my ( $data, $server, $item ) = @_;
- $data =~ s/\s+$//g;
- command_runsub('trigger', $data, $server, $item);
-};
-
-Irssi::signal_add('setup saved', \&autosave);
-Irssi::signal_add('setup changed', \&sig_setup_changed);
-
-# This makes tab completion work
-Irssi::command_set_options('trigger add',join(' ',@trigger_add_options));
-Irssi::command_set_options('trigger change',join(' ',@trigger_options));
-
-Irssi::settings_add_str($IRSSI{'name'}, 'trigger_file', Irssi::get_irssi_dir()."/triggers");
-
-cmd_load();
diff --git a/.config/irssi/scripts/autorun/uberprompt.pl b/.config/irssi/scripts/autorun/uberprompt.pl
@@ -1,774 +0,0 @@
-=pod
-
-=head1 NAME
-
-uberprompt.pl
-
-=head1 DESCRIPTION
-
-This script replaces the default prompt status-bar item with one capable of
-displaying additional information, under either user control or via scripts.
-
-=head1 INSTALLATION
-
-Copy into your F<~/.irssi/scripts/> directory and load with
-C</SCRIPT LOAD F<filename>>.
-
-It is recommended that you make it autoload in one of the
-L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
-
-=head1 SETUP
-
-If you have a custom prompt format, you may need to copy it to the
-uberprompt_format setting. See below for details.
-
-=head1 USAGE
-
-Although the script is designed primarily for other scripts to set
-status information into the prompt, the following commands are available:
-
-=over 4
-
-=item * C</prompt set [-inner|-pre|-post|only] E<lt>msgE<gt>>
-
-Sets the prompt to the given argument. Any use of C<$p> in the argument will
-be replaced by the original prompt content.
-
-A parameter corresponding to the C<UP_*> constants listed below is required, in
-the format C</prompt set -inner Hello!>
-
-=item * C</prompt clear>
-
-Clears the additional data provided to the prompt.
-
-=item * C</prompt on>
-
-Eenables the uberprompt (things may get confused if this is used
-whilst the prompt is already enabled)
-
-=item * C</prompt off>
-
-Restore the original irssi prompt and prompt_empty statusbars. unloading the
-script has the same effect.
-
-=item * C</help prompt>
-
-show help for uberprompt commands
-
-=back
-
-=head1 SETTINGS
-
-=head2 UBERPROMPT FORMAT
-
-C</set uberprompt_format E<lt>formatE<gt>>
-
-The default is C<[$*$uber]>, which is the same as the default provided in
-F<default.theme>.
-
-Changing this setting will update the prompt immediately, unlike editing your theme.
-
-An additional variable available within this format is C<$uber>, which expands to
-the content of prompt data provided with the C<UP_INNER> or C</prompt set -inner>
-placement argument.
-
-For all other placement arguments, it will expand to the empty string.
-
-B<Note:> This setting completely overrides the C<prompt="...";> line in your
-.theme file, and may cause unexpected behaviour if your theme wishes to set a
-different form of prompt. It can be simply copied from the theme file into the
-above setting.
-
-=head2 OTHER SETTINGS
-
-=over 4
-
-=item * C<uberprompt_autostart>
-
-Boolean value, which determines if uberprompt should enable itself automatically
-upon loading. If Off, it must be enabled manually with C</prompt on>. Defaults to On.
-
-=item * C<uberprompt_debug>
-
-Boolean value, which determines if uberprompt should print debugging information.
-Defaults to Off, and should probably be left that way unless requested for bug-tracing
-purposes.
-
-=item * C<uberprompt_format>
-
-String value containing the format-string which uberprompt uses to display the
-prompt. Defaults to "C<[$*$uber] >", where C<$*> is the content the prompt would
-normally display, and C<$uber> is a placeholder variable for dynamic content, as
-described in the section above.
-
-=item * C<uberprompt_load_hook>
-
-String value which can contain one or more commands to be run whenever the uberprompt
-is enabled, either via autostart, or C</prompt on>. Defaults to the empty string, in
-which case no commands are run. Some examples include:
-
-C</set uberprompt_load_hook /echo prompt enabled> or
-
-C</^sbar prompt add -after input vim_mode> for those using vim_mode.pl who want
-the command status indicator on the prompt line.
-
-=item * C<uberprompt_unload_hook>
-
-String value, defaulting to the empty string, which can contain commands which
-are executed when the uberprompt is disabled, either by unloading the script,
-or by the command C</prompt off>.
-
-=item * C<uberprompt_use_replaces>
-
-Boolean value, defaults to Off. If enabled, the format string for the prompt
-will be subject to the I<replaces> section of the theme. The most obvious
-effect of this is that bracket characters C<[ ]> are displayed in a different
-colour, typically quite dark.
-
-=back
-
-B<Note:> For both C<uberprompt_*_hook> settings above, multiple commands can
-be chained together in the form C</eval /^cmd1 ; /^cmd2>. The C<^> prevents
-any output from the commands (such as error messages) being displayed.
-
-=head2 SCRIPTING USAGE
-
-The primary purpose of uberprompt is to be used by other scripts to
-display information in a way that is not possible by printing to the active
-window or using statusbar items.
-
-The content of the prompt can be set from other scripts via the C<"change prompt">
-signal.
-
-For Example:
-
- signal_emit 'change prompt' 'some_string', UberPrompt::UP_INNER;
-
-will set the prompt to include that content, by default 'C<[$* some_string]>'
-
-The possible position arguments are the following strings:
-
-=over 4
-
-=item * C<UP_PRE> - place the provided string before the prompt - C<$string$prompt>
-
-=item * C<UP_INNER> - place the provided string inside the prompt - C<{prompt $* $string}>
-
-=item * C<UP_POST> - place the provided string after the prompt - C<$prompt$string>
-
-=item * C<UP_ONLY> - replace the prompt with the provided string - C<$string>
-
-=back
-
-All strings may use the special variable 'C<$prompt>' to include the prompt
-verbatim at that position in the string. It is probably only useful for
-the C<UP_ONLY> mode however. '$C<prompt_nt>' will include the prompt, minus any
-trailing whitespace.
-
-=head2 CHANGE NOTIFICATIONS
-
-You can also be notified when the prompt changes in response to the previous
-signal or manual C</prompt> commands via:
-
- signal_add 'prompt changed', sub { my ($text, $len) = @_; ... do something ... };
-
-This callback will occur whenever the contents of the prompt is changed.
-
-
-=head2 NOTES FOR SCRIPT WRITERS:
-
-The following code snippet can be used within your own script as a preamble
-to ensure that uberprompt is loaded before your script to avoid
-any issues with loading order. It first checks if uberprompt is loaded, and
-if not, attempts to load it. If the load fails, the script will die
-with an error message, otherwise it will call your app_init() function.
-
-I<---- start of snippet ---->
-
- my $DEBUG_ENABLED = 0;
- sub DEBUG () { $DEBUG_ENABLED }
-
- # check we have uberprompt loaded.
-
- sub script_is_loaded {
- return exists($Irssi::Script::{$_[0] . '::'});
- }
-
- if (not script_is_loaded('uberprompt')) {
-
- print "This script requires 'uberprompt.pl' in order to work. "
- . "Attempting to load it now...";
-
- Irssi::signal_add('script error', 'load_uberprompt_failed');
- Irssi::command("script load uberprompt.pl");
-
- unless(script_is_loaded('uberprompt')) {
- load_uberprompt_failed("File does not exist");
- }
- app_init();
- } else {
- app_init();
- }
-
- sub load_uberprompt_failed {
- Irssi::signal_remove('script error', 'load_uberprompt_failed');
-
- print "Script could not be loaded. Script cannot continue. "
- . "Check you have uberprompt.pl installed in your path and "
- . "try again.";
-
- die "Script Load Failed: " . join(" ", @_);
- }
-
-I<---- end of snippet ---->
-
-=head1 AUTHORS
-
-Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
-
-=head1 LICENCE
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-=head1 BUGS
-
-=over 4
-
-=item *
-
-Resizing the terminal rapidly whilst using this script in debug mode may cause
-irssi to crash. See bug report at http://bugs.irssi.org/index.php?do=details&task_id=772 for details.
-
-=back
-
-=head1 TODO
-
-=over 4
-
-=item * report failure (somehow) to clients if hte prompt is disabled.
-
-=item * fix issue at autorun startup with sbar item doesn't exist.
-
-=back
-
-=cut
-
-use strict;
-use warnings;
-
-use Irssi;
-use Irssi::TextUI;
-use Data::Dumper;
-
-{ package Irssi::Nick } # magic.
-
-our $VERSION = "0.2";
-our %IRSSI =
- (
- authors => "shabble",
- contact => 'shabble+irssi@metavore.org, shabble@#irssi/Freenode',
- name => "uberprompt",
- description => "Helper script for dynamically adding text "
- . "into the input-bar prompt.",
- license => "MIT",
- changed => "24/7/2010"
- );
-
-
-my $DEBUG_ENABLED = 0;
-sub DEBUG { $DEBUG_ENABLED }
-
-my $prompt_data = '';
-my $prompt_data_pos = 'UP_INNER';
-
-my $prompt_last = '';
-my $prompt_format = '';
-my $prompt_format_empty = '';
-
-# flag to indicate whether rendering of hte prompt should allow the replaces
-# theme formats to be applied to the content.
-my $use_replaces = 0;
-my $trim_data = 0;
-
-my $emit_request = 0;
-
-my $expando_refresh_timer;
-my $expando_vars = {};
-
-my $init_callbacks = {load => '', unload => ''};
-
-pre_init();
-
-sub pre_init {
- Irssi::command('statusbar prompt reset');
- init();
-}
-
-sub prompt_subcmd_handler {
- my ($data, $server, $item) = @_;
- #$data =~ s/\s+$//g; # strip trailing whitespace.
- Irssi::command_runsub('prompt', $data, $server, $item);
-}
-
-sub _error($) {
- my ($msg) = @_;
- Irssi::active_win->print($msg, MSGLEVEL_CLIENTERROR);
-}
-
-sub _debug_print($) {
- return unless DEBUG;
- my ($msg) = @_;
- Irssi::active_win->print($msg, MSGLEVEL_CLIENTCRAP);
-}
-
-sub _print_help {
- my ($args) = @_;
- if ($args =~ m/^\s*prompt/i) {
- my @help_lines =
- (
- "",
- "PROMPT ON",
- "PROMPT OFF",
- "PROMPT CLEAR",
- "PROMPT SET { -pre | -post | -only | -inner } <content>",
- "",
- "Commands for manipulating the UberPrompt.",
- "",
- "/PROMPT ON enables uberprompt, replacing the existing prompt ",
- " statusbar-item",
- "/PROMPT OFF disables it, and restores the original prompt item",
- "/PROMPT CLEAR resets the value of any additional data set by /PROMPT SET",
- " or a script",
- "/PROMPT SET changes the contents of the prompt, according to the mode",
- " and content provided.",
- " { -inner sets the value of the \$uber psuedo-variable in the",
- " /set uberprompt_format setting.",
- " | -pre places the content before the current prompt string",
- " | -post places the content after the prompt string",
- " | -only replaces the entire prompt contents with the given string }",
- "",
- "See Also:",
- '',
- '/SET uberprompt_format -- defaults to "[$*$uber] "',
- '/SET uberprompt_format_empty -- defaults to "[$*] "',
- "/SET uberprompt_autostart -- determines whether /PROMPT ON is run",
- " automatically when the script loads",
- "/SET uberprompt_use_replaces -- toggles the use of the current theme",
- " \"replaces\" setting. Especially",
- " noticeable on brackets \"[ ]\" ",
- "/SET uberprompt_trim_data -- defaults to off. Removes whitespace from",
- " both sides of the \$uber result.",
- "",
- );
-
- Irssi::print($_, MSGLEVEL_CLIENTCRAP) for @help_lines;
- Irssi::signal_stop;
- }
-}
-
-sub UNLOAD {
- deinit();
-}
-
-sub exp_lbrace() { '{' }
-sub exp_rbrace() { '}' }
-
-sub deinit {
- Irssi::expando_destroy('lbrace');
- Irssi::expando_destroy('rbrace');
-
- if (Irssi::settings_get_bool('uberprompt_restore_on_exit')) {
- # remove uberprompt and return the original ones.
- print "Removing uberprompt and restoring original";
- restore_prompt_items();
- }
-}
-
-sub init {
- Irssi::statusbar_item_register('uberprompt', 0, 'uberprompt_draw');
-
- # TODO: flags to prevent these from being recomputed?
- Irssi::expando_create('lbrace', \&exp_lbrace, {});
- Irssi::expando_create('rbrace', \&exp_rbrace, {});
-
- Irssi::settings_add_str ('uberprompt', 'uberprompt_format', '[$*$uber] ');
- Irssi::settings_add_str ('uberprompt', 'uberprompt_format_empty', '[$*] ');
-
- Irssi::settings_add_str ('uberprompt', 'uberprompt_load_hook', '');
- Irssi::settings_add_str ('uberprompt', 'uberprompt_unload_hook', '');
-
- Irssi::settings_add_bool('uberprompt', 'uberprompt_debug', 0);
- Irssi::settings_add_bool('uberprompt', 'uberprompt_autostart', 1);
- Irssi::settings_add_bool ('uberprompt', 'uberprompt_restore_on_exit', 1);
-
- Irssi::settings_add_bool('uberprompt', 'uberprompt_use_replaces', 0);
- Irssi::settings_add_bool('uberprompt', 'uberprompt_trim_data', 0);
-
- Irssi::command_bind("prompt", \&prompt_subcmd_handler);
- Irssi::command_bind('prompt on', \&replace_prompt_items);
- Irssi::command_bind('prompt off', \&restore_prompt_items);
- Irssi::command_bind('prompt set', \&cmd_prompt_set);
- Irssi::command_bind('prompt clear',
- sub {
- Irssi::signal_emit 'change prompt', '$p', 'UP_POST';
- });
-
- my $prompt_set_args_format = "inner pre post only";
- Irssi::command_set_options('prompt set', $prompt_set_args_format);
-
- Irssi::command_bind('help', \&_print_help);
-
- Irssi::signal_add('setup changed', \&reload_settings);
-
- # intialise the prompt format.
- reload_settings();
-
- # make sure we redraw when necessary.
- Irssi::signal_add('window changed', \&uberprompt_refresh);
- Irssi::signal_add('window name changed', \&uberprompt_refresh);
- Irssi::signal_add('window changed automatic', \&uberprompt_refresh);
- Irssi::signal_add('window item changed', \&uberprompt_refresh);
- Irssi::signal_add('window item server changed', \&uberprompt_refresh);
- Irssi::signal_add('window server changed', \&uberprompt_refresh);
- Irssi::signal_add('server nick changed', \&uberprompt_refresh);
-
- Irssi::signal_add('nick mode changed', \&refresh_if_me);
-
- # install our statusbars if required.
- if (Irssi::settings_get_bool('uberprompt_autostart')) {
- replace_prompt_items();
- }
-
- # API signals
-
- Irssi::signal_register({'change prompt' => [qw/string string/]});
- Irssi::signal_add('change prompt' => \&change_prompt_handler);
-
- # other scripts (specifically overlay/visual) can subscribe to
- # this event to be notified when the prompt changes.
- # arguments are new contents (string), new length (int)
- Irssi::signal_register({'prompt changed' => [qw/string int/]});
- Irssi::signal_register({'prompt length request' => []});
-
- Irssi::signal_add('prompt length request', \&length_request_handler);
-}
-
-sub cmd_prompt_set {
- my $args = shift;
- my @options_list = Irssi::command_parse_options "prompt set", $args;
- if (@options_list) {
- my ($options, $rest) = @options_list;
-
- my @opt_modes = keys %$options;
- if (@opt_modes != 1) {
- _error '%_/prompt set%_ must specify exactly one mode of'
- . ' {-inner, -only, -pre, -post}';
- return;
- }
-
- my $mode = 'UP_' . uc($opt_modes[0]);
-
- Irssi::signal_emit 'change prompt', $rest, $mode;
- } else {
- _error ('%_/prompt set%_ must specify a mode {-inner, -only, -pre, -post}');
- }
-}
-
-sub refresh_if_me {
- my ($channel, $nick) = @_;
-
- return unless $channel and $nick;
-
- my $server = Irssi::active_server;
- my $window = Irssi::active_win;
-
- return unless $server and $window;
-
- my $my_chan = $window->{active}->{name};
- my $my_nick = $server->parse_special('$N');
-
- return unless $my_chan and $my_nick;
-
- _debug_print "Chan: $channel->{name}, "
- . "nick: $nick->{nick}, "
- . "me: $my_nick, chan: $my_chan";
-
- if ($my_chan eq $channel->{name} and $my_nick eq $nick->{nick}) {
- uberprompt_refresh();
- }
-}
-
-sub length_request_handler {
- $emit_request = 1;
- uberprompt_render_prompt();
- $emit_request = 0;
-}
-
-sub reload_settings {
-
- $use_replaces = Irssi::settings_get_bool('uberprompt_use_replaces');
- $DEBUG_ENABLED = Irssi::settings_get_bool('uberprompt_debug');
-
- $init_callbacks = {
- load => Irssi::settings_get_str('uberprompt_load_hook'),
- unload => Irssi::settings_get_str('uberprompt_unload_hook'),
- };
-
- if (DEBUG) {
- Irssi::signal_add 'prompt changed', 'debug_prompt_changed';
- } else {
- Irssi::signal_remove 'prompt changed', 'debug_prompt_changed';
- }
-
- my $new = Irssi::settings_get_str('uberprompt_format');
-
- if ($prompt_format ne $new) {
- _debug_print("Updated prompt format");
- $prompt_format = $new;
- $prompt_format =~ s/\$uber/\$\$uber/;
- Irssi::abstracts_register(['uberprompt', $prompt_format]);
-
- $expando_vars = {};
-
- # TODO: something clever here to check if we need to schedule
- # an update timer or something, rather than just refreshing on
- # every possible activity in init()
- while ($prompt_format =~ m/(?<!\$)(\$[A-Za-z,.:;][a-z_]*)/g) {
- _debug_print("Detected Irssi expando variable $1");
- my $var_name = substr $1, 1; # strip the $
- $expando_vars->{$var_name} = Irssi::parse_special($1);
- }
- }
-
- $new = Irssi::settings_get_str('uberprompt_format_empty');
-
- if ($prompt_format_empty ne $new) {
- _debug_print("Updated prompt format");
- $prompt_format_empty = $new;
- $prompt_format_empty =~ s/\$uber/\$\$uber/;
- Irssi::abstracts_register(['uberprompt_empty', $prompt_format_empty]);
-
- $expando_vars = {};
-
- # TODO: something clever here to check if we need to schedule
- # an update timer or something, rather than just refreshing on
- # every possible activity in init()
- while ($prompt_format_empty =~ m/(?<!\$)(\$[A-Za-z,.:;][a-z_]*)/g) {
- _debug_print("Detected Irssi expando variable $1");
- my $var_name = substr $1, 1; # strip the $
- $expando_vars->{$var_name} = Irssi::parse_special($1);
- }
- }
-
- $trim_data = Irssi::settings_get_bool('uberprompt_trim_data');
-}
-
-sub debug_prompt_changed {
- my ($text, $len) = @_;
-
- $text =~ s/%/%%/g;
-
- print "DEBUG_HANDLER: Prompt Changed to: \"$text\", length: $len";
-}
-
-sub change_prompt_handler {
- my ($text, $pos) = @_;
-
- # fix for people who used prompt_info and hence the signal won't
- # pass the second argument.
- $pos = 'UP_INNER' unless defined $pos;
- _debug_print("Got prompt change signal with: $text, $pos");
-
- my ($changed_text, $changed_pos);
- $changed_text = defined $prompt_data ? $prompt_data ne $text : 1;
- $changed_pos = defined $prompt_data_pos ? $prompt_data_pos ne $pos : 1;
-
- $prompt_data = $text;
- $prompt_data_pos = $pos;
-
- if ($changed_text || $changed_pos) {
- _debug_print("Redrawing prompt");
- uberprompt_refresh();
- }
-}
-
-sub _escape_prompt_special {
- my $str = shift;
- $str =~ s/\$/\$\$/g;
- $str =~ s/\\/\\\\/g;
- #$str =~ s/%/%%/g;
- $str =~ s/{/\${lbrace}/g;
- $str =~ s/}/\${rbrace}/g;
-
- return $str;
-}
-
-sub uberprompt_render_prompt {
-
- my $window = Irssi::active_win;
- my $prompt_arg = '';
-
- # default prompt sbar arguments (from config)
- if (scalar( () = $window->items )) {
- $prompt_arg = '$[.15]{itemname}';
- } else {
- $prompt_arg = '${winname}';
- }
-
- my $prompt = ''; # rendered content of the prompt.
- my $theme = Irssi::current_theme;
-
- my $arg = $use_replaces ? 0 : Irssi::EXPAND_FLAG_IGNORE_REPLACES;
-
- if ($prompt_data && (!$trim_data || trim($prompt_data))) {
- $prompt = $theme->format_expand("{uberprompt $prompt_arg}", $arg);
- }
- else {
- $prompt = $theme->format_expand("{uberprompt_empty $prompt_arg}", $arg);
- }
-
- if ($prompt_data_pos eq 'UP_ONLY') {
- $prompt =~ s/\$\$uber//; # no need for recursive prompting, I hope.
-
- # TODO: only compute this if necessary?
- my $prompt_nt = $prompt;
- $prompt_nt =~ s/\s+$//;
-
- my $pdata_copy = $prompt_data;
-
- $pdata_copy =~ s/\$prompt_nt/$prompt_nt/;
- $pdata_copy =~ s/\$prompt/$prompt/;
-
- $prompt = $pdata_copy;
-
- } elsif ($prompt_data_pos eq 'UP_INNER' && defined $prompt_data) {
-
- my $esc = _escape_prompt_special($prompt_data);
- $esc = $trim_data ? trim($esc) : $esc;
- $prompt =~ s/\$\$uber/$esc/;
-
- } else {
- # remove the $uber marker
- $prompt =~ s/\$\$uber//;
-
- # and add the additional text at the appropriate position.
- if ($prompt_data_pos eq 'UP_PRE') {
- $prompt = $prompt_data . $prompt;
- } elsif ($prompt_data_pos eq 'UP_POST') {
- $prompt .= $prompt_data;
- }
- }
-
- _debug_print("rendering with: $prompt");
-
-
- if (($prompt ne $prompt_last) or $emit_request) {
-
- # _debug_print("Emitting prompt changed signal");
- # my $exp = Irssi::current_theme()->format_expand($text, 0);
- my $ps = Irssi::parse_special($prompt);
-
- Irssi::signal_emit('prompt changed', $ps, length($ps));
- $prompt_last = $prompt;
- }
- return $prompt;
-}
-
-sub uberprompt_draw {
- my ($sb_item, $get_size_only) = @_;
-
- my $prompt = uberprompt_render_prompt();
-
- my $ret = $sb_item->default_handler($get_size_only, $prompt, '', 0);
- _debug_print("redrawing with: $prompt");
- return $ret;
-}
-
-sub uberprompt_refresh {
- Irssi::statusbar_items_redraw('uberprompt');
-}
-
-sub replace_prompt_items {
- # remove existing ones.
- _debug_print("Removing original prompt");
-
- _sbar_command('prompt', 'remove', 'prompt');
- _sbar_command('prompt', 'remove', 'prompt_empty');
-
- # add the new one.
-
- _sbar_command('prompt', 'add', 'uberprompt',
- qw/-alignment left -before input -priority '-1'/);
-
- _sbar_command('prompt', 'position', '100');
-
- my $load_hook = $init_callbacks->{load};
- if (defined $load_hook and length $load_hook) {
- eval {
- Irssi::command($load_hook);
- };
- if ($@) {
- _error("Uberprompt user load-hook command ($load_hook) failed: $@");
- }
- }
-
-}
-
-sub restore_prompt_items {
-
- _sbar_command('prompt', 'remove', 'uberprompt');
-
- _debug_print("Restoring original prompt");
-
- _sbar_command('prompt', 'reset');
-
- my $unload_hook = $init_callbacks->{unload};
-
- if (defined $unload_hook and length $unload_hook) {
- eval {
- Irssi::command($unload_hook);
- };
- if ($@) {
- _error("Uberprompt user unload-hook command ($unload_hook) failed: $@");
- }
- }
-}
-
-sub _sbar_command {
- my ($bar, $cmd, $item, @args) = @_;
-
- my $args_str = join ' ', @args;
-
- $args_str .= ' ' if length $args_str && defined $item;
-
- my $command = sprintf 'STATUSBAR %s %s %s%s',
- $bar, $cmd, $args_str, defined $item ? $item : '';
-
- _debug_print("Running command: $command");
- Irssi::command($command);
-}
-
-sub trim {
- my $string = shift;
-
- $string =~ s/^\s*//;
- $string =~ s/\s*$//;
-
- return $string;
-}
diff --git a/.config/irssi/scripts/autorun/vim_mode.pl b/.config/irssi/scripts/autorun/vim_mode.pl
@@ -1,3781 +0,0 @@
-=pod
-
-=head1 NAME
-
-vim_mode.pl
-
-=head1 DESCRIPTION
-
-An Irssi script to emulate some of the vi(m) features for the Irssi inputline.
-
-=head1 INSTALLATION
-
-Copy into your F<~/.irssi/scripts/> directory and load with
-C</SCRIPT LOAD vim_mode.pl>. You may wish to have it autoload in one of the
-L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
-
-=head2 DEPENDENCIES
-
-For proper :ex mode support, vim-mode requires the installation of F<uberprompt.pl>
-Uberprompt can be downloaded from:
-
-L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
-
-and follow the instructions at the top of that file for installation.
-
-If you don't need Ex-mode, you can run vim_mode.pl without the
-uberprompt.pl script, but it is strongly recommended that you use it.
-
-=head3 Irssi requirements
-
-0.8.12 and above should work fine. However the following features are
-disabled in irssi < 0.8.13:
-
-=over 4
-
-=item * C<j> C<k> (only with count, they work fine without count in older versions)
-
-=item * C<gg>, C<G>
-
-=back
-
-It is intended to work with at Irssi 0.8.12 and later versions. However some
-features are disabled in older versions (see below for details).
-
-Perl >= 5.8.1 is recommended for UTF-8 support (which can be disabled if
-necessary). Please report bugs in older versions as well, we'll try to fix
-them. Later versions of Perl are also faster, which is probably beneficial
-to a script of this size and complexity.
-
-=head2 SETUP
-
-Vim Mode provides certain feedback to the user, such as the currently active
-mode (command, insert, ex), and if switching buffers, which buffer(s) currently
-match the search terms.
-
-There are two ways to go about displaying this information, as described in
-the following sections:
-
-=head3 Statusbar Items
-
-Run the following command to add a statusbar item that shows which mode
-you're in.
-
-C</statusbar window add vim_mode>
-
-And the following to let C<:b [str]> display a list of channels matching your
-search string.
-
-C</statusbar window add vim_windows>
-
-B<Note:> Remember to C</save> after adding these statusbar items to make them
-permanent.
-
-B<Note:> If you would rather have these statusbar items on your prompt
-line rather than thte window statusbar, please follow these steps.
-
-For technical reasons, I<uberprompt> must occasionally call C</statusbar prompt
-reset>, which will remove or deactivate any manually added items on the prompt
-statusbar. To get around this, uberprompt provides two command hooks,
-C<uberprompt_load_hook> and C<uberprompt_unload_hook>. Both of these settings
-can contain one (or more, using C</EVAL>) commands to be executed when the prompt
-is enabled and disabled, respectively.
-
-See the L<uberprompt documentation|https://github.com/shabble/irssi-scripts/blob/master/prompt_info/README.pod> for further details.
-
-For I<right-aligned> items (that is, after the input field:
-
-=over 4
-
-=item 1 C</alias vm_add /^statusbar prompt add -after input -alignment right vim_mode>
-
-=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
-
-=item 3 C</set uberprompt_load_hook /^vm_add>
-
-=item 4 C</set uberprompt_unload_hook /^vm_del>
-
-=back
-
-For I<left-aligned> items (before the prompt):
-
-=over 4
-
-=item 1 C</alias vm_add /^statusbar prompt add -before prompt -alignment left vim_mode>
-
-=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
-
-=item 3 C</set uberprompt_load_hook /^vm_add>
-
-=item 4 C</set uberprompt_unload_hook /^vm_del>
-
-=back
-
-If you wish to add both C<vim_mode> and C<vim_windows> items, replace steps 1 and 2
-above with the following (right-aligned):
-
-=over 4
-
-=item 1 C</alias vm_add /^eval /^statusbar prompt add -after input -alightment right vim_mode ; /^statusbar prompt add -after input -alignment right vim_windows>
-
-=item 2 C</alias vm_del /^eval /^statusbar prompt remove vim_mode ; /^statusbar prompt remove vim_windows>
-
-=back
-
-and then complete stages 3 and 4 as above. Replace the C<-after> and C<-alignment>
-to suit your location preferences.
-
-B<Note:> It is also possible to place the items between the prompt and input field,
-by specifying C<-after prompt> or C<-before input> as appropriate.
-
-=head3 Expando Variables
-
-Vim mode augments the existing Irssi expando (automatic variables) with two
-additional ones: C<$vim_cmd_mode> and C<$vim_wins>.
-
-C<$vim_cmd_mode> is the equivalent of the C<vim_mode> statusbar item, and
-C<$vim_wins> is the counterpart of C<vim_windows>.
-
-They can be added to your theme, or inserted into your uberprompt using
-a command such as:
-
-"C</set uberprompt_format [$vim_cmd_mode] $*$uber] >"
-
-=head3 FILE-BASED CONFIGURATION
-
-Additionally to the irssi settings described in L<settings|/SETTINGS>, vim_mode
-can be configured through an external configuration file named "vim_moderc"
-located in F<~/.irssi/vim_moderc>. If available it's loaded on startup and every
-supported ex-command is run. Its syntax is similar to "vimrc". To (re)load it
-while vim_mode is running use C<:so[urce]>.
-
-Currently Supported ex-commands:
-
-=over 4
-
-=item * C<:map>
-
-=back
-
-=head1 USAGE
-
-The following section is divided into the different modes as supported by Vim itself:
-
-=head2 COMMAND MODE
-
-It supports most commonly used command mode features:
-
-=over 2
-
-=item * Insert/Command mode.
-
-C<Esc> and C<Ctrl-C> enter command mode. C</set vim_mode_cmd_seq j> allows
-to use C<jj> as Escape (any other character can be used as well).
-
-=item * Cursor motion:
-
-C<h l 0 ^ $ E<lt>SpaceE<gt> E<lt>BSE<gt> f t F T>
-
-=item * History motion:
-
-C<j k gg G> C<gg> moves to the oldest (first) history line. C<G> without a
-count moves to the current input line, with a count it goes to the I<count-th>
-history line (1 is the oldest).
-
-=item * Cursor word motion:
-
-C<w b ge e W gE B E>
-
-=item * Word objects (only the following work yet):
-
-C<aw aW>
-
-=item * Yank and paste:
-
- C<y p P>
-
-=item * Change and delete:
-
-C<c d>
-
-=item * Delete at cursor:
-
-C<x X>
-
-=item * Replace at cursor:
-
-C<r>
-
-=item * Insert mode:
-
-C<i a I A>
-
-=item * Switch case:
-
-C<~>
-
-=item * Repeat change:
-
-C<.>
-
-=item * Repeat
-
-C<ftFT: ; ,>
-
-=item * Registers:
-
-C<"a-"z "" "0 "* "+ "_> (black hole)
-
-=item * Line-wise shortcuts:
-
-C<dd cc yy>
-
-=item * Shortcuts:
-
-C<s S C D>
-
-=item * Scroll the scrollback buffer:
-
-C<Ctrl-E Ctrl-D Ctrl-Y Ctrl-U Ctrl-F Ctrl-B>
-
-=item * Switch to last active window:
-
-C<Ctrl-6/Ctrl-^>
-
-=item * Switch split windows:
-
-<Ctrl-W j Ctrl-W k>
-
-=item * Undo/Redo:
-
-C<u Ctrl-R>
-
-=back
-
-Counts and combinations work as well, e.g. C<d5fx> or C<3iabcE<lt>escE<gt>>. Counts also work with mapped ex-commands (see below), e.g. if you map C<gb> to do C<:bn>, then C<2gb> will switch to the second next buffer. Repeat also supports counts.
-
-=head3 REGISTERS
-
-=over 4
-
-=item * Appending to register with C<"A-"Z>
-
-=item * C<""> is the default yank/delete register.
-
-=item * C<"0> contains the last yank (if no register was specified).
-
-=item * The special registers C<"* "+> both contain irssi's internal cut-buffer.
-
-=back
-
-=head2 INSERT MODE
-
-The following insert mode mappings are supported:
-
-=over 4
-
-=item * Insert register content: Ctrl-R x (where x is the register to insert)
-
-=back
-
-=head2 EX-MODE
-
-Ex-mode (activated by C<:> in command mode) supports the following commands:
-
-=over 4
-
-=item * Command History:
-
-C<E<lt>uparrowE<gt>> - cycle backwards through history
-
-C<E<lt>downarrowE<gt>> - cycle forwards through history
-
-C<:eh> - show ex history
-
-=item * Switching buffers:
-
-C<:[N]b [N]> - switch to channel number
-
-C<:b#> - switch to last channel
-
-C<:b> E<lt>partial-channel-nameE<gt>
-
-C<:b> <partial-server>/<partial-channel>
-
-C<:buffer {args}> (same as C<:b>)
-
-C<:[N]bn[ext] [N]> - switch to next window
-
-C<:[N]bp[rev] [N]> - switch to previous window
-
-=item * Close window:
-
-C<:[N]bd[elete] [N]>
-
-=item * Display windows:
-
-C<:ls>, C<:buffers>
-
-=item * Display registers:
-
-C<:reg[isters] {args}>, C<:di[splay] {args}>
-
-=item * Display undolist:
-
-C<:undol[ist]> (mostly used for debugging)
-
-=item * Source files:
-
-C<:so[urce]> - only sources vim_moderc at the moment,
- F<{file}> not supported
-
-=item * Mappings:
-
-C<:map> - display custom mappings
-
-=item * Saving mappings:
-
-C<:mkv[imrc][!]> - like in Vim, but [file] not supported
-
-=item * Substitution:
-
-C<:s///> - I<i> and I<g> are supported as flags, only C<///> can be used as
-eparator, and it uses Perl regex syntax instead of Vim syntax.
-
-=item * Settings:
-
-C<:se[t]> - display all options
-
-C<:se[t] {option}> - display all matching options
-
-C<:se[t] {option} {value}> - change option to value
-
-=back
-
-=head3 MAPPINGS
-
-=head4 Commands
-
-=over 4
-
-=item * C<:map {lhs}> - display mappings starting with {lhs}
-
-=item * C<:map {lhs} {rhs}> - add mapping
-
-=item * C<:unm[ap] {lhs}> - remove custom mapping
-
-=back
-
-=head4 Parameters
-
-I<{lhs}> is the key combination to be mapped, I<{rhs}> the target. The
-C<E<lt>E<gt>> notation is used
-
-(e.g. C<E<lt>C-FE<gt>> is I<Ctrl-F>), case is ignored.
- Supported C<E<lt>E<gt>> keys are:
-
-=over 4
-
-=item * C<E<lt>C-AE<gt>> - C<E<lt>C-ZE<gt>>,
-
-=item * C<E<lt>C-^E<gt>>, C<E<lt>C-6E<gt>>
-
-=item * C<E<lt>SpaceE<gt>>
-
-=item * C<E<lt>CRE<gt>> - Enter
-
-=item * C<E<lt>BSE<gt>> - Backspace
-
-=item * C<E<lt>NopE<gt>> - No-op (Do Nothing).
-
-=back
-
-Mapping ex-mode and irssi commands is supported. When mapping ex-mode commands
-the trailing C<E<lt>CrE<gt>> is not necessary. Only default mappings can be used
-in I<{rhs}>.
-
-Examples:
-
-=over 4
-
-=item * C<:map w W> - to remap w to work like W
-
-=item * C<:map gb :bnext> - to map gb to call :bnext
-
-=item * C<:map gB :bprev>
-
-=item * C<:map g1 :b 1> - to map g1 to switch to buffer 1
-
-=item * C<:map gb :b> - to map gb to :b, 1gb switches to buffer 1, 5gb to 5
-
-=item * C<:map E<lt>C-LE<gt> /clear> - map Ctrl-L to irssi command /clear
-
-=item * C<:map E<lt>C-GE<gt> /window goto 1>
-
-=item * C<:map E<lt>C-EE<gt> <Nop>> - disable E<lt>C-EE<gt>, it does nothing now
-
-=item * C<:unmap E<lt>C-EE<gt>> - restore default behavior of C<E<lt>C-EE<gt>>
-after disabling it
-
-=back
-
-Note that you must use C</> for irssi commands (like C</clear>), the current value
-of Irssi's cmdchars does B<not> work! This is necessary do differentiate between
-ex-commands and irssi commands.
-
-=head2 SETTINGS
-
-The settings are stored as irssi settings and can be set using C</set> as usual
-(prepend C<vim_mode_> to setting name) or using the C<:set> ex-command. The
-following settings are available:
-
-=over 4
-
-=item * utf8 - Support UTF-8 characters, boolean, default on
-
-=item * debug - Enable debug output, boolean, default off
-
-=item * cmd_seq - Char that when double-pressed simulates C<E<lt>EscE<gt>>, string, default '' (disabled)
-
-=item * start_cmd - Start every line in command mode, boolean, default off
-
-=item * max_undo_lines - Sze of the undo buffer. Integer, default 50 items.
-
-=item * ex_history_size - Number of items stored in the ex-mode history. Integer, default 100.
-
-=item * prompt_leading_space - Ddetermines whether ex mode prepends a space to the displayed input. Boolean, default on
-
-=back
-
-In contrast to irssi's settings, C<:set> accepts 0 and 1 as values for boolean
-settings, but only vim_mode's settings can be set/displayed.
-
-Examples:
-
- :set cmd_seq=j # set cmd_seq to j
- :set cmd_seq= # disable cmd_seq
- :set debug=on # enable debug
- :set debug=off # disable debug
-
-=head1 KNOWN ISSUES
-
-If you use tmux and want to use <esc> to exit insert mode you might want to
-reduce the escape-time for a better experience (500 is the default value):
-
- set -s escape-time 100
-
-A similar problem exist in GNU screen, the following settings in ~/.screenrc
-fix it (thanks to jsbronder for reporting the screen issue and fix):
-
- maptimeout 0
- defc1 off
-
-defc1 might not be necessary.
-
-=head1 SUPPORT
-
-Any behavior different from Vim (unless explicitly documented) should be
-considered a bug and reported.
-
-B<NOTE:> This script is still under heavy development, and there may be bugs.
-Please submit reproducible sequences to the bug-tracker at:
-L<http://github.com/shabble/irssi-scripts/issues/new>
-
-or contact rudi_s or shabble on irc.freenode.net (#irssi and #irssi_vim)
-
-=head1 AUTHORS
-
-Copyright E<copy> 2010-2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> and
-
-Copyright E<copy> 2010-2011 Simon Ruderich C<E<lt>simon@ruderich.orgE<gt>>
-
-=head1 THANKS
-
-Particular thanks go to
-
-=over 4
-
-=item * estragib: a lot of testing and many bug reports and feature requests
-
-=item * iaj: testing
-
-=item * tmr: explaining how various bits of vim work
-
-=back
-
-as well as the rest of C<#irssi> and C<#irssi_vim> on Freenode IRC.
-
-=head1 LICENCE
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-=head1 BUGS
-
-=over 4
-
-=item *
-
-count before register doesn't work: e.g. 3"ap doesn't work, but "a3p does
-
-=item *
-
-mapping an incomplete ex-command doesn't open the ex-mode with the partial
-command (e.g. C<:map gb :b> causes an error instead of opening the ex-mode and
-displaying C<:bE<lt>cursorE<gt>>)
-
-=item *
-
- undo/redo cursor positions are mostly wrong
-
-=back
-
-=head1 TODO
-
-=over 4
-
-=item *
-
-Make sure the input line is empty when entering ex mode. Stuff hanging around
-just looks silly.
-
-=item *
-
-History:
-
-=over 4
-
-=item *
-
- C< * /,?,n,N> to search through history (like rl_history_search.pl)
-
-=back
-
-=item *
-
-Window switching (C<:b>)
-
-=over 4
-
-=item *
-
-Tab completion of window(-item) names
-
-=item *
-
-non-sequential matches(?)
-
-=back
-
-=back
-
-See also the TODO file at
-L<github|https://github.com/shabble/irssi-scripts/blob/master/vim-mode/TODO> for
-many many more things.
-
-=head2 WONTFIX
-
-Things we're not ever likely to do:
-
-=over 4
-
-=item * Macros
-
-=back
-
-=cut
-
-use strict;
-use warnings;
-
-use Encode;
-use List::Util;
-
-use Irssi;
-use Irssi::TextUI; # for sbar_items_redraw
-use Irssi::Irc; # necessary for 0.8.14
-
-
-
-our $VERSION = "1.1.0";
-our %IRSSI =
- (
- authors => "Tom Feist (shabble), Simon Ruderich (rudi_s)",
- contact => 'shabble+irssi@metavore.org, '
- . 'shabble@#irssi/Freenode, simon@ruderich.org'
- . 'rudi_s@#irssi/Freenode',
- name => "vim_mode",
- description => "Give Irssi Vim-like commands for editing the inputline",
- license => "MIT",
- changed => "3/2/2012"
- );
-
-
-# CONSTANTS
-
-# command mode
-sub M_CMD () { 1 }
-# insert mode
-sub M_INS () { 0 }
-# extended mode (after a :?)
-sub M_EX () { 2 }
-
-# operator command
-sub C_OPERATOR () { 0 }
-# normal command, no special handling necessary
-sub C_NORMAL () { 1 }
-# command taking another key as argument
-sub C_NEEDSKEY () { 2 }
-# text-object command (i a)
-sub C_TEXTOBJECT () { 3 }
-# commands entering insert mode
-sub C_INSERT () { 4 }
-# ex-mode commands
-sub C_EX () { 5 }
-# irssi commands
-sub C_IRSSI () { 6 }
-# does nothing
-sub C_NOP () { 7 }
-
-# setting types, match irssi types as they are stored as irssi settings
-sub S_BOOL () { 0 }
-sub S_INT () { 1 }
-sub S_STR () { 2 }
-sub S_TIME () { 3 }
-
-# word and non-word regex, keep in sync with setup_changed()!
-my $word = qr/[\w_]/o;
-my $non_word = qr/[^\w_\s]/o;
-
-# COMMANDS
-
-# All available commands in command mode, they are stored with a char as key,
-# but this is not necessarily the key the command is currently mapped to.
-my $commands
- = {
- # operators
- c => { char => 'c', func => \&cmd_operator_c, type => C_OPERATOR,
- repeatable => 1 },
- d => { char => 'd', func => \&cmd_operator_d, type => C_OPERATOR,
- repeatable => 1 },
- y => { char => 'y', func => \&cmd_operator_y, type => C_OPERATOR,
- repeatable => 1 },
-
- # arrow like movement
- h => { char => 'h', func => \&cmd_h, type => C_NORMAL },
- l => { char => 'l', func => \&cmd_l, type => C_NORMAL },
- "\x08" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
- "\x7F" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
- ' ' => { char => '<Space>', func => \&cmd_l, type => C_NORMAL },
- # history movement
- j => { char => 'j', func => \&cmd_j, type => C_NORMAL,
- no_operator => 1 },
- k => { char => 'k', func => \&cmd_k, type => C_NORMAL,
- no_operator => 1 },
- gg => { char => 'gg', func => \&cmd_gg, type => C_NORMAL,
- no_operator => 1 },
- G => { char => 'G', func => \&cmd_G, type => C_NORMAL,
- needs_count => 1, no_operator => 1 },
- # char movement, take an additional parameter and use $movement
- f => { char => 'f', func => \&cmd_f, type => C_NEEDSKEY,
- selection_needs_move_right => 1 },
- t => { char => 't', func => \&cmd_t, type => C_NEEDSKEY,
- selection_needs_move_right => 1 },
- F => { char => 'F', func => \&cmd_F, type => C_NEEDSKEY },
- T => { char => 'T', func => \&cmd_T, type => C_NEEDSKEY },
- ';' => { char => ';', func => \&cmd_semicolon, type => C_NORMAL },
- ',' => { char => ',', func => \&cmd_comma, type => C_NORMAL },
- # word movement
- w => { char => 'w', func => \&cmd_w, type => C_NORMAL },
- b => { char => 'b', func => \&cmd_b, type => C_NORMAL },
- e => { char => 'e', func => \&cmd_e, type => C_NORMAL,
- selection_needs_move_right => 1 },
- ge => { char => 'ge', func => \&cmd_ge, type => C_NORMAL,
- selection_needs_move_right => 1 },
- W => { char => 'W', func => \&cmd_W, type => C_NORMAL },
- B => { char => 'B', func => \&cmd_B, type => C_NORMAL },
- E => { char => 'E', func => \&cmd_E, type => C_NORMAL },
- gE => { char => 'gE', func => \&cmd_gE, type => C_NORMAL,
- selection_needs_move_right => 1 },
- # text-objects, leading _ means can't be mapped!
- _i => { char => 'i', func => \&cmd__i, type => C_TEXTOBJECT },
- _a => { char => 'a', func => \&cmd__a, type => C_TEXTOBJECT },
- # line movement
- '0' => { char => '0', func => \&cmd_0, type => C_NORMAL },
- '^' => { char => '^', func => \&cmd_caret, type => C_NORMAL },
- '$' => { char => '$', func => \&cmd_dollar, type => C_NORMAL },
- # delete chars
- x => { char => 'x', func => \&cmd_x, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- X => { char => 'X', func => \&cmd_X, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- # C_NORMAL is correct, operator c takes care of insert mode
- s => { char => 's', func => \&cmd_s, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- # C_NORMAL is correct, operator c takes care of insert mode
- S => { char => 'S', func => \&cmd_S, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- # insert mode
- i => { char => 'i', func => \&cmd_i, type => C_INSERT,
- repeatable => 1, no_operator => 1 },
- I => { char => 'I', func => \&cmd_I, type => C_INSERT,
- repeatable => 1, no_operator => 1 },
- a => { char => 'a', func => \&cmd_a, type => C_INSERT,
- repeatable => 1, no_operator => 1 },
- A => { char => 'A', func => \&cmd_A, type => C_INSERT,
- repeatable => 1, no_operator => 1 },
- # replace
- r => { char => 'r', func => \&cmd_r, type => C_NEEDSKEY,
- repeatable => 1, no_operator => 1 },
- # paste
- p => { char => 'p', func => \&cmd_p, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- P => { char => 'P', func => \&cmd_P, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- # to end of line
- C => { char => 'C', func => \&cmd_C, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- D => { char => 'D', func => \&cmd_D, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- # scrolling
- "\x05" => { char => '<C-E>', func => \&cmd_ctrl_d, type => C_NORMAL,
- no_operator => 1 },
- "\x04" => { char => '<C-D>', func => \&cmd_ctrl_d, type => C_NORMAL,
- needs_count => 1, no_operator => 1 },
- "\x19" => { char => '<C-Y>', func => \&cmd_ctrl_u, type => C_NORMAL,
- no_operator => 1 },
- "\x15" => { char => '<C-U>', func => \&cmd_ctrl_u, type => C_NORMAL,
- needs_count => 1, no_operator => 1 },
- "\x06" => { char => '<C-F>', func => \&cmd_ctrl_f, type => C_NORMAL,
- no_operator => 1 },
- "\x02" => { char => '<C-B>', func => \&cmd_ctrl_b, type => C_NORMAL,
- no_operator => 1 },
- # window switching
- "\x17j" => { char => '<C-W>j', func => \&cmd_ctrl_wj, type => C_NORMAL,
- no_operator => 1 },
- "\x17k" => { char => '<C-W>k', func => \&cmd_ctrl_wk, type => C_NORMAL,
- no_operator => 1 },
- "\x1e" => { char => '<C-^>', func => \&cmd_ctrl_6, type => C_NORMAL,
- no_operator => 1 },
- # misc
- '~' => { char => '~', func => \&cmd_tilde, type => C_NORMAL,
- repeatable => 1, no_operator => 1 },
- '"' => { char => '"', func => \&cmd_register, type => C_NEEDSKEY,
- no_operator => 1 },
- '.' => { char => '.', type => C_NORMAL, repeatable => 1,
- no_operator => 1 },
- ':' => { char => ':', type => C_NORMAL },
- "\n" => { char => '<CR>', type => C_NORMAL }, # return
- # undo
- 'u' => { char => 'u', func => \&cmd_undo, type => C_NORMAL,
- no_operator => 1 },
- "\x12" => { char => '<C-R>', func => \&cmd_redo, type => C_NORMAL,
- no_operator => 1 },
- };
-
-# All available commands in Ex-Mode.
-my $commands_ex
- = {
- # arrow keys - not actually used, see handle_input_buffer()
- # TODO: make these work.
- "\e[A" => { char => ':exprev', func => \&ex_history_back,
- type => C_EX },
- "\e[B" => { char => ':exnext', func => \&ex_history_fwd,
- type => C_EX },
-
- # normal Ex mode commands.
- eh => { char => ':exhist', func => \&ex_history_show,
- type => C_EX },
- s => { char => ':s', func => \&ex_substitute,
- type => C_EX },
- bnext => { char => ':bnext', func => \&ex_bnext,
- type => C_EX, uses_count => 1 },
- bn => { char => ':bn', func => \&ex_bnext,
- type => C_EX, uses_count => 1 },
- bprev => { char => ':bprev', func => \&ex_bprev,
- type => C_EX, uses_count => 1 },
- bp => { char => ':bp', func => \&ex_bprev,
- type => C_EX, uses_count => 1 },
- bdelete => { char => ':bdelete', func => \&ex_bdelete,
- type => C_EX, uses_count => 1 },
- bd => { char => ':bd', func => \&ex_bdelete,
- type => C_EX, uses_count => 1 },
- buffer => { char => ':buffer', func => \&ex_buffer,
- type => C_EX, uses_count => 1 },
- b => { char => ':b', func => \&ex_buffer,
- type => C_EX, uses_count => 1 },
- registers => { char => ':registers', func => \&ex_registers,
- type => C_EX },
- reg => { char => ':reg', func => \&ex_registers,
- type => C_EX },
- display => { char => ':display', func => \&ex_registers,
- type => C_EX },
- di => { char => ':di', func => \&ex_registers,
- type => C_EX },
- buffers => { char => ':buffer', func => \&ex_buffers,
- type => C_EX },
- ls => { char => ':ls', func => \&ex_buffers,
- type => C_EX },
- undolist => { char => ':undolist', func => \&ex_undolist,
- type => C_EX },
- undol => { char => ':undol', func => \&ex_undolist,
- type => C_EX },
- map => { char => ':map', func => \&ex_map,
- type => C_EX },
- unmap => { char => ':unmap', func => \&ex_unmap,
- type => C_EX },
- unm => { char => ':unm', func => \&ex_unmap,
- type => C_EX },
- source => { char => ':source', func => \&ex_source,
- type => C_EX },
- so => { char => ':so', func => \&ex_source,
- type => C_EX },
- mkvimrc => { char => ':mkvimrc', func => \&ex_mkvimrc,
- type => C_EX },
- mkv => { char => ':mkv', func => \&ex_mkvimrc,
- type => C_EX },
- se => { char => ':se', func => \&ex_set,
- type => C_EX },
- set => { char => ':set', func => \&ex_set,
- type => C_EX },
- itemnext => { char => ':itemnext', func => \&ex_item_next,
- type => C_EX },
- inext => { char => ':itemnext', func => \&ex_item_next,
- type => C_EX },
- itemprev => { char => ':itemprev', func => \&ex_item_prev,
- type => C_EX },
- iprev => { char => ':itemprev', func => \&ex_item_prev,
- type => C_EX },
- servernext => { char => ':servernext', func => \&ex_server_next,
- type => C_EX },
- snext => { char => ':servernext', func => \&ex_server_next,
- type => C_EX },
- serverprev => { char => ':serverprev', func => \&ex_server_prev,
- type => C_EX },
- sprev => { char => ':serverprev', func => \&ex_server_prev,
- type => C_EX },
-
- };
-
-# MAPPINGS
-
-# default command mode mappings
-my $maps = {};
-
-# current imap still pending (first character entered)
-my $imap = undef;
-
-# maps for insert mode
-my $imaps
- = {
- # CTRL-R, insert register
- "\x12" => { map => undef, func => \&insert_ctrl_r },
- };
-
-
-# GLOBAL VARIABLES
-
-# all vim_mode settings, must be enabled in vim_mode_init() before usage
-my $settings
- = {
- # print debug output
- debug => { type => S_BOOL, value => 0 },
- # use UTF-8 internally for string calculations/manipulations
- utf8 => { type => S_BOOL, value => 1 },
- # esc-shortcut in insert mode
- cmd_seq => { type => S_STR, value => '' },
- # start every line in command mode
- start_cmd => { type => S_BOOL, value => 0 },
- # not used yet
- max_undo_lines => { type => S_INT, value => 50 },
- # size of history buffer for Ex mode.
- ex_history_size => { type => S_INT, value => 100 },
- # prompt_leading_space
- prompt_leading_space => { type => S_BOOL, value => 1 },
- # <Leader> value for prepending to commands.
- map_leader => { type => S_STR, value => '\\' },
- # timeout for keys following esc. In milliseconds.
- esc_buf_timeout => { type => S_TIME, value => '10ms' },
-
- };
-
-sub DEBUG { $settings->{debug}->{value} }
-
-# buffer to keep track of the last N keystrokes, used for Esc detection and
-# insert mode mappings
-my @input_buf;
-my $input_buf_timer;
-my $input_buf_enabled = 0;
-
-# insert mode repeat buffer, used to repeat (.) last insert
-my @insert_buf;
-
-# flag to allow us to emulate keystrokes without re-intercepting them
-my $should_ignore = 0;
-
-# ex mode buffer
-my @ex_buf;
-
-# ex mode history storage.
-my @ex_history;
-my $ex_history_index = 0;
-
-# we are waiting for another mapped key (e.g. g pressed, but there are
-# multiple mappings like gg gE etc.)
-my $pending_map = undef;
-
-# for commands like 10x
-my $numeric_prefix = undef;
-# current operator as $command hash
-my $operator = undef;
-# vi movements, only used when a movement needs more than one key (like f t).
-my $movement = undef;
-# last vi command, used by .
-my $last
- = {
- 'cmd' => $commands->{i}, # = i to support . when loading the script
- 'numeric_prefix' => undef,
- 'operator' => undef,
- 'movement' => undef,
- 'register' => '"',
- };
-# last ftFT movement, used by ; and ,
-my $last_ftFT
- = {
- type => undef, # f, t, F or T
- char => undef,
- };
-
-# what Vi mode we're in. We start in insert mode.
-my $mode = M_INS;
-
-# current active register
-my $register = '"';
-
-# vi registers
-my $registers
- = {
- '"' => '', # default register
- '0' => '', # yank register
- '+' => '', # contains irssi's cut buffer
- '*' => '', # same
- '_' => '', # black hole register, always empty
- };
-
-# index into the history list (for j,k)
-my $history_index = undef;
-# current line, necessary for j,k or the current input line gets destroyed
-my $history_input = undef;
-# position in input line
-my $history_pos = 0;
-
-# Undo/redo buffer.
-
-my @undo_buffer;
-my $undo_index = undef;
-
-# tab completion state vars
-
-my @tab_candidates;
-my $completion_active = 0;
-my $completion_string = '';
-
-sub script_is_loaded {
- return exists($Irssi::Script::{shift(@_) . '::'});
-}
-
-
-
-
-# INSERT MODE COMMANDS
-
-sub insert_ctrl_r {
- my ($key) = @_;
- _debug("ctrl-r called");
- my $char = chr($key);
- _debug("ctrl-r called with $char");
-
- return if not defined $registers->{$char} or $registers->{$char} eq '';
-
- my $pos = _insert_at_position($registers->{$char}, 1, _input_pos());
- _input_pos($pos + 1);
-}
-
-
-# COMMAND MODE OPERATORS
-
-sub cmd_operator_c {
- my ($old_pos, $new_pos, $move_cmd, $repeat) = @_;
-
- # Changing a word or WORD doesn't delete the last space before a word, but
- # not if we are on that whitespace before the word.
- if ($move_cmd and ($move_cmd == $commands->{w} or
- $move_cmd == $commands->{W})) {
- my $input = _input();
- if ($new_pos - $old_pos > 1 and
- substr($input, $new_pos - 1, 1) =~ /\s/) {
- $new_pos--;
- }
- }
-
- cmd_operator_d($old_pos, $new_pos, $move_cmd, $repeat, 1);
-
- if (!$repeat) {
- _update_mode(M_INS);
- } else {
- my $pos = _input_pos();
- $pos = _insert_buffer(1, $pos);
- _input_pos($pos);
- }
-}
-
-sub cmd_operator_d {
- my ($old_pos, $new_pos, $move_cmd, $repeat, $change) = @_;
-
- my ($pos, $length) = _get_pos_and_length($old_pos, $new_pos, $move_cmd);
-
- # Remove the selected string from the input.
- my $input = _input();
- my $string = substr $input, $pos, $length, '';
- if ($register =~ /[A-Z]/) {
- $registers->{lc $register} .= $string;
- print "Deleted into $register: ", $registers->{lc $register} if DEBUG;
- } else {
- $registers->{$register} = $string;
- print "Deleted into $register: ", $registers->{$register} if DEBUG;
- }
- _input($input);
-
- # Prevent moving after the text when we delete the last character. But not
- # when changing (C).
- $pos-- if $pos == length($input) and !$change;
-
- _input_pos($pos);
-}
-
-sub cmd_operator_y {
- my ($old_pos, $new_pos, $move_cmd, $repeat) = @_;
-
- my ($pos, $length) = _get_pos_and_length($old_pos, $new_pos, $move_cmd);
-
- # Extract the selected string and put it in the " register.
- my $input = _input();
- my $string = substr $input, $pos, $length;
- if ($register =~ /[A-Z]/) {
- $registers->{lc $register} .= $string;
- print "Yanked into $register: ", $registers->{lc $register} if DEBUG;
- } else {
- $registers->{$register} = $string;
- print "Yanked into $register: ", $registers->{$register} if DEBUG;
- if ($register eq '"') {
- $registers->{0} = $string;
- print "Yanked into 0: ", $registers->{0} if DEBUG;
- }
- }
-
- # Always move to the lower position.
- if ($old_pos > $new_pos) {
- _input_pos($new_pos);
- } else {
- _input_pos($old_pos);
- }
-}
-
-sub _get_pos_and_length {
- my ($old_pos, $new_pos, $move_cmd) = @_;
-
- my $length = $new_pos - $old_pos;
- # We need a positive length and $old_pos must be smaller.
- if ($length < 0) {
- $old_pos = $new_pos;
- $length *= -1;
- }
-
- # Some commands don't move one character after the deletion area which is
- # necessary for all commands moving to the right. Fix it.
- if ($move_cmd->{selection_needs_move_right}) {
- $length += 1;
- }
-
- return ($old_pos, $length);
-}
-
-# COMMAND MODE COMMANDS
-
-sub cmd_h {
- my ($count, $pos, $repeat) = @_;
-
- $pos -= $count;
- $pos = 0 if $pos < 0;
- return (undef, $pos);
-}
-
-sub cmd_l {
- my ($count, $pos, $repeat) = @_;
-
- my $length = _input_len();
- $pos += $count;
- $pos = _fix_input_pos($pos, $length);
- return (undef, $pos);
-}
-
-# later history (down)
-sub cmd_j {
- my ($count, $pos, $repeat) = @_;
-
- if (Irssi::version < 20090117) {
- # simulate a down-arrow
- _emulate_keystrokes(0x1b, 0x5b, 0x42);
- return (undef, undef);
- }
-
- my @history = Irssi::active_win->get_history_lines();
-
- if (defined $history_index) {
- $history_index += $count;
- print "History Index: $history_index" if DEBUG;
- # Prevent destroying the current input when pressing j after entering
- # command mode. Not exactly like in default irssi, but simplest solution
- # (and S can be used to clear the input line fast, which is what <down>
- # does in plain irssi).
- } else {
- return (undef, undef);
- }
-
- if ($history_index > $#history) {
- # Restore the input line.
- _input($history_input);
- _input_pos($history_pos);
- $history_index = $#history + 1;
- } elsif ($history_index >= 0) {
- my $history = $history[$history_index];
- # History is not in UTF-8!
- if ($settings->{utf8}->{value}) {
- $history = decode_utf8($history);
- }
- _input($history);
- _input_pos(0);
- }
- return (undef, undef);
-}
-
-# earlier history (up)
-sub cmd_k {
- my ($count, $pos, $repeat) = @_;
-
- if (Irssi::version < 20090117) {
- # simulate an up-arrow
- _emulate_keystrokes(0x1b, 0x5b, 0x41);
- return (undef, undef);
- }
-
- my @history = Irssi::active_win->get_history_lines();
-
- if (defined $history_index) {
- $history_index -= $count;
- $history_index = 0 if $history_index < 0;
- } else {
- $history_index = $#history;
- $history_input = _input();
- $history_pos = _input_pos();
- }
- print "History Index: $history_index" if DEBUG;
- if ($history_index >= 0) {
- my $history = $history[$history_index];
- # History is not in UTF-8!
- if ($settings->{utf8}->{value}) {
- $history = decode_utf8($history);
- }
- _input($history);
- _input_pos(0);
- }
- return (undef, undef);
-}
-
-sub cmd_G {
- my ($count, $pos, $repeat) = @_;
-
- if (Irssi::version < 20090117) {
- _warn("G and gg not supported in irssi < 0.8.13");
- return;
- }
-
- my @history = Irssi::active_win->get_history_lines();
-
- # Go to the current input line if no count was given or it's too big.
- if (not $count or $count - 1 >= scalar @history) {
- if (defined $history_input and defined $history_pos) {
- _input($history_input);
- _input_pos($history_pos);
- $history_index = undef;
- }
- return;
- } else {
- # Save input line so it doesn't get lost.
- if (not defined $history_index) {
- $history_input = _input();
- $history_pos = _input_pos();
- }
- $history_index = $count - 1;
- }
-
- my $history = $history[$history_index];
- # History is not in UTF-8!
- if ($settings->{utf8}->{value}) {
- $history = decode_utf8($history);
- }
- _input($history);
- _input_pos(0);
-
- return (undef, undef);
-}
-
-sub cmd_gg {
- my ($count, $pos, $repeat) = @_;
-
- return cmd_G(1, $pos, $repeat);
-}
-
-sub cmd_f {
- my ($count, $pos, $repeat, $char) = @_;
-
- $pos = _next_occurrence(_input(), $char, $count, $pos);
-
- $last_ftFT = { type => 'f', char => $char };
- return (undef, $pos);
-}
-
-sub cmd_t {
- my ($count, $pos, $repeat, $char) = @_;
-
- $pos = _next_occurrence(_input(), $char, $count, $pos);
- if (defined $pos) {
- $pos--;
- }
-
- $last_ftFT = { type => 't', char => $char };
- return (undef, $pos);
-}
-
-sub cmd_F {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $input = reverse _input();
- $pos = _next_occurrence($input, $char, $count, length($input) - $pos - 1);
- if (defined $pos) {
- $pos = length($input) - $pos - 1;
- }
-
- $last_ftFT = { type => 'F', char => $char };
- return (undef, $pos);
-}
-
-sub cmd_T {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $input = reverse _input();
- $pos = _next_occurrence($input, $char, $count, length($input) - $pos - 1);
- if (defined $pos) {
- $pos = length($input) - $pos - 1 + 1;
- }
-
- $last_ftFT = { type => 'T', char => $char };
- return (undef, $pos);
-}
-
-# Find $count-th next occurrence of $char.
-sub _next_occurrence {
- my ($input, $char, $count, $pos) = @_;
-
- while ($count-- > 0) {
- $pos = index $input, $char, $pos + 1;
- if ($pos == -1) {
- return undef;
- }
- }
- return $pos;
-}
-
-sub cmd_semicolon {
- my ($count, $pos, $repeat) = @_;
-
- return (undef, undef) if not defined $last_ftFT->{type};
-
- (undef, $pos)
- = $commands->{$last_ftFT->{type}}
- ->{func}($count, $pos, $repeat, $last_ftFT->{char});
- return (undef, $pos);
-}
-
-sub cmd_comma {
- my ($count, $pos, $repeat) = @_;
-
- return (undef, undef) if not defined $last_ftFT->{type};
-
- # Change direction.
- my $save = $last_ftFT->{type};
- my $type = $save;
- $type =~ tr/ftFT/FTft/;
-
- (undef, $pos)
- = $commands->{$type}
- ->{func}($count, $pos, $repeat, $last_ftFT->{char});
- # Restore type as the move functions overwrites it.
- $last_ftFT->{type} = $save;
- return (undef, $pos);
-}
-
-sub cmd_w {
- my ($count, $pos, $repeat) = @_;
-
- my $input = _input();
- $pos = _beginning_of_word($input, $count, $pos);
- $pos = _fix_input_pos($pos, length $input);
- return (undef, $pos);
-}
-
-sub cmd_b {
- my ($count, $pos, $repeat) = @_;
-
- my $input = reverse _input();
- $pos = length($input) - $pos - 1;
- $pos = 0 if ($pos < 0);
-
- $pos = _end_of_word($input, $count, $pos);
- $pos = length($input) - $pos - 1;
- $pos = 0 if ($pos < 0);
- return (undef, $pos);
-}
-
-sub cmd_e {
- my ($count, $pos, $repeat) = @_;
-
- my $input = _input();
- $pos = _end_of_word($input, $count, $pos);
- $pos = _fix_input_pos($pos, length $input);
- return (undef, $pos);
-}
-
-sub cmd_ge {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $input = reverse _input();
- $pos = length($input) - $pos - 1;
- $pos = 0 if ($pos < 0);
-
- $pos = _beginning_of_word($input, $count, $pos);
- $pos = length($input) - $pos - 1;
- $pos = 0 if ($pos < 0);
-
- return (undef, $pos);
-}
-
-# Go to the beginning of $count-th word, like vi's w.
-sub _beginning_of_word {
- my ($input, $count, $pos) = @_;
-
- while ($count-- > 0) {
- # Go to end of next word/non-word.
- if (substr($input, $pos) =~ /^$word+/ or
- substr($input, $pos) =~ /^$non_word+/) {
- $pos += $+[0];
- }
- # And skip over any whitespace if necessary. This also happens when
- # we're inside whitespace.
- if (substr($input, $pos) =~ /^\s+/) {
- $pos += $+[0];
- }
- }
-
- return $pos;
-}
-
-# Go to the end of $count-th word, like vi's e.
-sub _end_of_word {
- my ($input, $count, $pos) = @_;
-
- while ($count-- > 0 and length($input) > $pos) {
- my $skipped = 0;
- # Skip over whitespace if in the middle of it or directly after the
- # current word/non-word.
- if (substr($input, $pos + 1) =~ /^\s+/) {
- $pos += $+[0] + 1;
- $skipped = 1;
- }
- elsif (substr($input, $pos) =~ /^\s+/) {
- $pos += $+[0];
- $skipped = 1;
- }
- # We are inside a word/non-word, skip to the end of it.
- if (substr($input, $pos) =~ /^$word{2,}/ or
- substr($input, $pos) =~ /^$non_word{2,}/) {
- $pos += $+[0] - 1;
- # We are the border of word/non-word. Skip to the end of the next one.
- # But not if we've already jumped over whitespace because there could
- # be only one word/non-word char after the whitespace.
- } elsif (!$skipped and (substr($input, $pos) =~ /^$word($non_word+)/ or
- substr($input, $pos) =~ /^$non_word($word+)/)) {
- $pos += $+[0] - 1;
- }
- }
-
- # Necessary for correct deletion at the end of the line.
- if (length $input == $pos + 1) {
- $pos++;
- }
-
- return $pos;
-}
-
-sub cmd_W {
- my ($count, $pos, $repeat) = @_;
-
- my $input = _input();
- $pos = _beginning_of_WORD($input, $count, $pos);
- $pos = _fix_input_pos($pos, length $input);
- return (undef, $pos);
-}
-
-sub cmd_B {
- my ($count, $pos, $repeat) = @_;
-
- my $input = reverse _input();
- $pos = _end_of_WORD($input, $count, length($input) - $pos - 1);
- if ($pos == -1) {
- return cmd_0();
- } else {
- return (undef, length($input) - $pos - 1);
- }
-}
-
-sub cmd_E {
- my ($count, $pos, $repeat) = @_;
-
- $pos = _end_of_WORD(_input(), $count, $pos);
- if ($pos == -1) {
- return cmd_dollar();
- } else {
- return (undef, $pos);
- }
-}
-
-sub cmd_gE {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $input = reverse _input();
- $pos = _beginning_of_WORD($input, $count, length($input) - $pos - 1);
- if ($pos == -1 or length($input) - $pos - 1 == -1) {
- return cmd_0();
- } else {
- $pos = length($input) - $pos - 1;
- }
-
- return (undef, $pos);
-}
-
-# Go to beginning of $count-th WORD, like vi's W.
-sub _beginning_of_WORD {
- my ($input, $count, $pos) = @_;
-
- # Necessary for correct movement between two words with only one
- # whitespace.
- if (substr($input, $pos) =~ /^\s\S/) {
- $pos++;
- $count--;
- }
-
- while ($count-- > 0 and length($input) > $pos) {
- if (substr($input, $pos + 1) !~ /\s+/) {
- return length($input);
- }
- $pos += $+[0] + 1;
- }
-
- return $pos;
-}
-
-# Go to end of $count-th WORD, like vi's E.
-sub _end_of_WORD {
- my ($input, $count, $pos) = @_;
-
- return $pos if $pos >= length($input);
-
- # We are inside a WORD, skip to the end of it.
- if (substr($input, $pos + 1) =~ /^\S+(\s)/) {
- $pos += $-[1];
- $count--;
- }
-
- while ($count-- > 0) {
- if (substr($input, $pos) !~ /\s+\S+(\s+)/) {
- return -1;
- }
- $pos += $-[1] - 1;
- }
- return $pos;
-}
-
-sub cmd__i {
- my ($count, $pos, $repeat, $char) = @_;
-
- _warn("i_ not implemented yet");
- return (undef, undef);
-}
-
-sub cmd__a {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $cur_pos;
- my $input = _input();
-
- # aw and aW
- if ($char eq 'w' or $char eq 'W') {
- while ($count-- > 0 and length($input) > $pos) {
- if (substr($input, $pos, 1) =~ /\s/) {
- # Any whitespace before the word/WORD must be removed.
- if (not defined $cur_pos) {
- $cur_pos = _find_regex_before($input, '\S', $pos, 0);
- if ($cur_pos < 0) {
- $cur_pos = 0;
- } else {
- $cur_pos++;
- }
- }
- # Move before the word/WORD.
- if (substr($input, $pos + 1) =~ /^\s+/) {
- $pos += $+[0];
- }
- # And delete the word.
- if ($char eq 'w') {
- if (substr($input, $pos) =~ /^\s($word+|$non_word+)/) {
- $pos += $+[0];
- } else {
- $pos = length($input);
- }
- # WORD
- } else {
- if (substr($input, $pos + 1) =~ /\s/) {
- $pos += $-[0] + 1;
- } else {
- $pos = length($input);
- }
- }
-
- # word
- } elsif ($char eq 'w') {
- # Start at the beginning of this WORD.
- if (not defined $cur_pos and $pos > 0
- and substr($input, $pos - 1, 2)
- !~ /(\s.|$word$non_word|$non_word$word)/) {
-
- $cur_pos = _find_regex_before
- (
- $input,
- "^($word+$non_word|$non_word+$word|$word+\\s|$non_word+\\s)",
- $pos, 1
- );
-
- if ($cur_pos < 0) {
- $cur_pos = 0;
- } else {
- $cur_pos += 2;
- }
- }
- # Delete to the end of the word.
- if (substr($input, $pos) =~
- /^($word+$non_word|$non_word+$word|$word+\s+\S|$non_word+\s+\S)/) {
-
- $pos += $+[0] - 1;
- } else {
- $pos = length($input);
- # If we are at the end of the line, whitespace before
- # the word is also deleted.
- my $new_pos = _find_regex_before
- ($input,
- "^($word+\\s+|$non_word+\\s+)",
- $pos, 1);
-
- if ($new_pos != -1 and
- (not defined $cur_pos or
- $cur_pos > $new_pos + 1)) {
-
- $cur_pos = $new_pos + 1;
- }
- }
-
- # WORD
- } else {
- # Start at the beginning of this WORD.
- if (not defined $cur_pos and $pos > 0 and
- substr($input, $pos - 1, 1) !~ /\s/) {
- $cur_pos = _find_regex_before($input, '\s', $pos - 1, 0);
- if ($cur_pos < 0) {
- $cur_pos = 0;
- } else {
- $cur_pos++;
- }
- }
- # Delete to the end of the word.
- if (substr($input, $pos + 1) =~ /^\S*\s+\S/) {
- $pos += $+[0];
- } else {
- $pos = length($input);
- # If we are at the end of the line, whitespace before
- # the WORD is also deleted.
- my $new_pos = _find_regex_before($input, '\s+', $pos, 1);
- if (not defined $cur_pos or $cur_pos > $new_pos + 1) {
- $cur_pos = $new_pos + 1;
- }
- }
- }
- }
- }
-
- return ($cur_pos, $pos);
-}
-
-# Find regex as close as possible before the current position. If $end is true
-# the end of the match is returned, otherwise the beginning.
-sub _find_regex_before {
- my ($input, $regex, $pos, $end) = @_;
-
- $input = reverse $input;
- $pos = length($input) - $pos - 1;
- $pos = 0 if $pos < 0;
-
- if (substr($input, $pos) =~ /$regex/) {
- if (!$end) {
- $pos += $-[0];
- } else {
- $pos += $+[0];
- }
- return length($input) - $pos - 1;
- } else {
- return -1;
- }
-}
-
-sub cmd_0 {
- return (undef, 0);
-}
-
-sub cmd_caret {
- my $input = _input();
- my $pos;
- # No whitespace at all.
- if ($input !~ m/^\s/) {
- $pos = 0;
- # Some non-whitespace, go to first one.
- } elsif ($input =~ m/[^\s]/) {
- $pos = $-[0];
- # Only whitespace, go to the end.
- } else {
- $pos = _fix_input_pos(length $input, length $input);
- }
- return (undef, $pos);
-}
-
-sub cmd_dollar {
- my $length = _input_len();
- return (undef, _fix_input_pos($length, $length));
-}
-
-sub cmd_x {
- my ($count, $pos, $repeat) = @_;
-
- cmd_operator_d($pos, $pos + $count, $commands->{x}, $repeat);
- return (undef, undef);
-}
-
-sub cmd_X {
- my ($count, $pos, $repeat) = @_;
-
- return (undef, undef) if $pos == 0;
-
- my $new = $pos - $count;
- $new = 0 if $new < 0;
- cmd_operator_d($pos, $new, $commands->{X}, $repeat);
- return (undef, undef);
-}
-
-sub cmd_s {
- my ($count, $pos, $repeat) = @_;
-
- $operator = $commands->{c};
- return (undef, $pos + $count);
-}
-
-sub cmd_S {
- my ($count, $pos, $repeat) = @_;
-
- $operator = $commands->{c};
- return (0, _input_len());
-}
-
-sub cmd_i {
- my ($count, $pos, $repeat) = @_;
-
- if (!$repeat) {
- _update_mode(M_INS);
- } else {
- $pos = _insert_buffer($count, $pos);
- }
- return (undef, $pos);
-}
-
-sub cmd_I {
- my ($count, $pos, $repeat) = @_;
-
- $pos = cmd_caret();
- if (!$repeat) {
- _update_mode(M_INS);
- } else {
- $pos = _insert_buffer($count, $pos);
- }
- return (undef, $pos);
-}
-
-sub cmd_a {
- my ($count, $pos, $repeat) = @_;
-
- # Move after current character. Can't use cmd_l() because we need to mover
- # after last character at the end of the line.
- my $length = _input_len();
- $pos += 1;
- $pos = $length if $pos > $length;
-
- if (!$repeat) {
- _update_mode(M_INS);
- } else {
- $pos = _insert_buffer($count, $pos);
- }
- return (undef, $pos);
-}
-
-sub cmd_A {
- my ($count, $pos, $repeat) = @_;
-
- $pos = _input_len();
-
- if (!$repeat) {
- _update_mode(M_INS);
- } else {
- $pos = _insert_buffer($count, $pos);
- }
- return (undef, $pos);
-}
-
-# Add @insert_buf to _input() at the given position.
-sub _insert_buffer {
- my ($count, $pos) = @_;
- return _insert_at_position(join('', @insert_buf), $count, $pos);
-}
-
-sub _insert_at_position {
- my ($string, $count, $pos) = @_;
-
- $string = $string x $count;
-
- my $input = _input();
- # Check if we are not at the end of the line to prevent substr outside of
- # string error.
- if (length $input > $pos) {
- substr($input, $pos, 0) = $string;
- } else {
- $input .= $string;
- }
- _input($input);
-
- return $pos - 1 + length $string;
-}
-
-sub cmd_r {
- my ($count, $pos, $repeat, $char) = @_;
-
- my $input = _input();
-
- # Abort if at end of the line.
- return (undef, undef) if length($input) < $pos + $count;
-
- substr $input, $pos, $count, $char x $count;
- _input($input);
- return (undef, $pos + $count - 1);
-}
-
-sub cmd_p {
- my ($count, $pos, $repeat) = @_;
- $pos = _paste_at_position($count, $pos + 1);
- return (undef, $pos);
-}
-
-sub cmd_P {
- my ($count, $pos, $repeat) = @_;
- $pos = _paste_at_position($count, $pos);
- return (undef, $pos);
-}
-
-sub _paste_at_position {
- my ($count, $pos) = @_;
-
- return if $registers->{$register} eq '';
- return _insert_at_position($registers->{$register}, $count, $pos);
-}
-
-sub cmd_C {
- my ($count, $pos, $repeat) = @_;
-
- $operator = $commands->{c};
- return (undef, _input_len());
-}
-
-sub cmd_D {
- my ($count, $pos, $repeat) = @_;
-
- $operator = $commands->{d};
- return (undef, _input_len());
-}
-
-sub cmd_ctrl_d {
- my ($count, $pos, $repeat) = @_;
-
- my $window = Irssi::active_win();
- # no count = half of screen
- if (not defined $count) {
- $count = $window->{height} / 2;
- }
- $window->view()->scroll($count);
-
- Irssi::statusbar_items_redraw('more');
- return (undef, undef);
-}
-
-sub cmd_ctrl_u {
- my ($count, $pos, $repeat) = @_;
-
- my $window = Irssi::active_win();
- # no count = half of screen
- if (not defined $count) {
- $count = $window->{height} / 2;
- }
- $window->view()->scroll($count * -1);
-
- Irssi::statusbar_items_redraw('more');
- return (undef, undef);
-}
-
-sub cmd_ctrl_f {
- my ($count, $pos, $repeat) = @_;
-
- my $window = Irssi::active_win();
- $window->view()->scroll($count * $window->{height});
-
- Irssi::statusbar_items_redraw('more');
- return (undef, undef);
-}
-
-sub cmd_ctrl_b {
- my ($count, $pos, $repeat) = @_;
-
- return cmd_ctrl_f($count * -1, $pos, $repeat);
-}
-
-sub cmd_ctrl_wj {
- my ($count, $pos, $repeat) = @_;
-
- while ($count-- > 0) {
- Irssi::command('window down');
- }
-
- return (undef, undef);
-}
-
-sub cmd_ctrl_wk {
- my ($count, $pos, $repeat) = @_;
-
- while ($count-- > 0) {
- Irssi::command('window up');
- }
-
- return (undef, undef);
-}
-
-sub cmd_ctrl_6 {
- # like :b#
- Irssi::command('window last');
- return (undef, undef);
-}
-
-sub cmd_tilde {
- my ($count, $pos, $repeat) = @_;
-
- my $input = _input();
- my $string = substr $input, $pos, $count;
- $string =~ s/(.)/(uc($1) eq $1) ? lc($1) : uc($1)/ge;
- substr $input, $pos, $count, $string;
-
- _input($input);
- return (undef, _fix_input_pos($pos + $count, length $input));
-}
-
-sub cmd_register {
- my ($count, $pos, $repeat, $char) = @_;
-
- if (not exists $registers->{$char} and not exists $registers->{lc $char}) {
- print "Wrong register $char, ignoring." if DEBUG;
- return (undef, undef);
- }
-
- # make sure black hole register is always empty
- if ($char eq '_') {
- $registers->{_} = '';
- }
-
- # + and * contain both irssi's cut-buffer
- if ($char eq '+' or $char eq '*') {
- $registers->{'+'} = Irssi::parse_special('$U');
- $registers->{'*'} = $registers->{'+'};
- }
-
- $register = $char;
- print "Changing register to $register" if DEBUG;
- return (undef, undef);
-}
-
-sub cmd_undo {
- print "Undo!" if DEBUG;
-
- if ($undo_index != $#undo_buffer) {
- $undo_index++;
- _restore_undo_entry($undo_index);
- print "Undoing entry index: $undo_index of " . scalar(@undo_buffer)
- if DEBUG;
- } else {
- print "No further undo." if DEBUG;
- }
- return (undef, undef);
-}
-
-sub cmd_redo {
- print "Redo!" if DEBUG;
-
- if ($undo_index != 0) {
- $undo_index--;
- print "Undoing entry index: $undo_index of " . scalar(@undo_buffer)
- if DEBUG;
- _restore_undo_entry($undo_index);
- } else {
- print "No further Redo." if DEBUG;
- }
- return (undef, undef);
-}
-
-# Adapt the input position depending if an operator is active or not.
-sub _fix_input_pos {
- my ($pos, $length) = @_;
-
- # Allow moving past the last character when an operator is active to allow
- # correct handling of last character in line.
- if ($operator) {
- $pos = $length if $pos > $length;
- # Otherwise forbid it.
- } else {
- $pos = $length - 1 if $pos > $length - 1;
- }
-
- return $pos;
-}
-
-
-# EX MODE COMMANDS
-
-sub cmd_ex_command {
- my $arg_str = join '', @ex_buf;
-
- if ($arg_str !~ /^(\d*)?([a-z]+)/) {
- return _warn("Invalid Ex-mode command!");
- }
-
- # Abort if command doesn't exist or used with count for unsupported
- # commands.
- if (not exists $commands_ex->{$2} or
- ($1 ne '' and not $commands_ex->{$2}->{uses_count})) {
- return _warn("Ex-mode $1$2 doesn't exist!");
- }
-
- # add this item to the ex mode history
- ex_history_add($arg_str);
- $ex_history_index = 0; # and reset the history position.
-
- my $count = $1;
- if ($count eq '') {
- $count = undef;
- }
- $commands_ex->{$2}->{func}($arg_str, $count);
-}
-
-sub ex_substitute {
- my ($arg_str, $count) = @_;
-
- # :s///
- if ($arg_str =~ m|^s/(.+)/(.*)/([ig]*)|) {
- my ($search, $replace, $flags) = ($1, $2, $3);
- print "Searching for $search, replace: $replace, flags; $flags"
- if DEBUG;
-
- my $rep_fun = sub { $replace };
-
- my $line = _input();
- my @re_flags = split '', defined $flags?$flags:'';
-
- if (scalar grep { $_ eq 'i' } @re_flags) {
- $search = '(?i)' . $search;
- }
-
- print "Search is $search" if DEBUG;
-
- my $re_pattern = qr/$search/;
-
- if (scalar grep { $_ eq 'g' } @re_flags) {
- $line =~ s/$re_pattern/$rep_fun->()/eg;
- } else {
- print "Single replace: $replace" if DEBUG;
- $line =~ s/$re_pattern/$rep_fun->()/e;
- }
-
- print "New line is: $line" if DEBUG;
- _input($line);
- } else {
- _warn_ex('s');
- }
-}
-
-sub ex_bnext {
- my ($arg_str, $count) = @_;
-
- if (not defined $count) {
- if ($arg_str =~ /^bn(?:ext)?\s(\d+)$/) {
- $count = $1;
- } else {
- $count = 1;
- }
- }
-
- while ($count-- > 0) {
- Irssi::command('window next');
- }
-}
-
-sub ex_bprev {
- my ($arg_str, $count) = @_;
-
- if (not defined $count) {
- if ($arg_str =~ /^bp(?:rev)?\s(\d+)$/) {
- $count = $1;
- } else {
- $count = 1;
- }
- }
-
- while ($count-- > 0) {
- Irssi::command('window previous');
- }
-}
-
-sub ex_bdelete {
- my ($arg_str, $count) = @_;
-
- if (not defined $count) {
- if ($arg_str =~ /^bd(?:elete)?\s(\d+)$/) {
- $count = $1;
- }
- }
-
- if (defined $count) {
- my $window = Irssi::window_find_refnum($count);
- if (not $window) {
- return;
- }
- $window->set_active();
- }
- Irssi::command('window close');
-}
-
-sub ex_buffer {
- my ($arg_str, $count) = @_;
-
- # :b[buffer] {args}
- if ($arg_str =~ m|^b(?:uffer)?\s*(.+)$| or defined $count) {
- my $window;
- my $item;
- my $buffer = $1;
-
- # :[N]:b[uffer]
- if (defined $count) {
- $window = Irssi::window_find_refnum($count);
- # Go to window number.
- } elsif ($buffer =~ /^[0-9]+$/) {
- $window = Irssi::window_find_refnum($buffer);
- # Go to previous window.
- } elsif ($buffer eq '#') {
- Irssi::command('window last');
- # Go to best regex matching window.
- } else {
- eval {
- my $matches = _matching_windows($buffer);
- if (scalar @$matches > 0) {
- $window = @$matches[0]->{window};
- $item = @$matches[0]->{item};
- }
- };
- # Catch errors in /$buffer/ regex.
- if ($@) {
- _warn($@);
- }
- }
-
- if ($window) {
- $window->set_active();
- if ($item) {
- $item->set_active();
- }
- }
- } else {
- _warn_ex('buffer');
- }
-}
-
-sub ex_item_next {
- my ($arg_str, $count) = @_;
- my $win = Irssi::active_win;
- $count = 1 unless defined $count;
-
- $win->item_next for (1..$count);
-}
-
-sub ex_item_prev {
- my ($arg_str, $count) = @_;
- my $win = Irssi::active_win;
- $count = 1 unless defined $count;
-
- $win->item_prev for (1..$count);
-}
-
-# TODO: factor out the shared search code for server next/prev.
-sub ex_server_next {
- my ($arg_str, $count) = @_;
-
- my @server_ids = map { $_->{tag} . "\x1d" . $_->{nick} } Irssi::servers;
- my $server = Irssi::active_server;
-
- return unless $server;
-
- my $current_id = $server->{tag} . "\x1d" . $server->{nick};
- my $next = 0;
- my $server_count = scalar @server_ids;
- for my $i (0..$server_count - 1) {
- my $s_id = $server_ids[$i];
- if (defined($s_id) and ($s_id eq $current_id)) {
- print "Found match at $i" if DEBUG;
- $next = ($i + 1) % $server_count;
- last;
- }
- }
-
- my $next_server = $server_ids[$next];
- $next_server =~ s|^([^\x1d]+)\x1d.*$|$1|;
-
- print "Changing to server: $next: $next_server" if DEBUG;
- Irssi::command("window server $next_server");
-}
-
-sub ex_server_prev {
- my ($arg_str, $count) = @_;
-
- my @server_ids = map { $_->{tag} . "\x1d" . $_->{nick} } Irssi::servers;
- my $server = Irssi::active_server;
-
- return unless $server;
-
- my $current_id = $server->{tag} . "\x1d" . $server->{nick};
- my $prev = 0;
- my $server_count = scalar @server_ids;
-
- for my $i (0..$server_count - 1) {
- my $s_id = $server_ids[$i];
- if (defined($s_id) and ($s_id eq $current_id)) {
- print "Found match at $i" if DEBUG;
- $prev = ($i - 1) % $server_count;
- last;
- }
- }
-
- my $prev_server = $server_ids[$prev];
- $prev_server =~ s|^([^\x1d]+)\x1d.*$|$1|;
-
- print "Changing to server: $prev: $prev_server" if DEBUG;
- Irssi::command("window server $prev_server");
-
-}
-
-sub ex_registers {
- my ($arg_str, $count) = @_;
-
- # :reg[isters] {arg} and :di[splay] {arg}
- if ($arg_str =~ /^(?:reg(?:isters)?|di(?:splay)?)(?:\s+(.+)$)?/) {
- my @regs;
- if ($1) {
- my $regs = $1;
- $regs =~ s/\s+//g;
- @regs = split //, $regs;
- } else {
- @regs = keys %$registers;
- }
-
- # Update "+ and "* registers so correct values are displayed.
- $registers->{'+'} = Irssi::parse_special('$U');
- $registers->{'*'} = $registers->{'+'};
-
- my @empty_regs;
- my $special_regs = { '+' => 1, '*' => 1, '_' => 1, '"' => 1, '0' => 1 };
-
- my $active_window = Irssi::active_win;
- foreach my $key (sort @regs) {
- next if $key eq '_'; # skip black hole
- if (defined $registers->{$key}) {
- my $register_val = $registers->{$key};
- if (length $register_val or exists $special_regs->{$key}) {
- $register_val =~ s/%/%%/g;
- $active_window->print("register $key: $register_val");
- } else {
- push @empty_regs, $key;
- }
- }
- }
-
- # coalesce empty registers into a single line.
- if (@empty_regs) {
- my @runs;
- my $run_start;
- foreach my $i (0..$#empty_regs) {
- my $cur = $empty_regs[$i];
- my $next = $empty_regs[$i+1];
-
- $run_start = $cur unless $run_start;
- if (defined $next and ord($cur) + 1 == ord($next)) {
- # extend range.
- } else {
- # terminate range and restart
- my $run_str = $run_start;
-
- if ($cur ne $run_start) {
- $run_str .= "-$cur";
- }
- push @runs, $run_str;
- $run_start = undef;
- }
- }
- $active_window->print("Empty registers: " . join(', ', @runs));
- }
- } else {
- _warn_ex(':registers');
- }
-}
-
-sub ex_buffers {
- my ($arg_str, $count) = @_;
-
- Irssi::command('window list');
-}
-
-sub ex_undolist {
- my ($arg_str, $count) = @_;
-
- _print_undo_buffer();
-}
-
-sub ex_map {
- my ($arg_str, $count) = @_;
-
- # :map {lhs} {rhs}
- if ($arg_str =~ /^map (\S+) (\S.*)$/) {
- my $lhs = _parse_mapping($1);
- my $rhs = $2;
-
- if (not defined $lhs) {
- return _warn_ex('map', 'invalid {lhs}');
- }
-
- # Add new mapping.
- my $command;
- # Ex-mode command
- if (index($rhs, ':') == 0) {
- $rhs =~ /^:(\S+)(\s.+)?$/;
- if (not exists $commands_ex->{$1}) {
- return _warn_ex('map', "$rhs not found");
- } else {
- $command = { char => $rhs,
- func => $commands_ex->{$1}->{func},
- type => C_EX,
- };
- }
- # Irssi command
- } elsif (index($rhs, '/') == 0) {
- $command = { char => $rhs,
- func => substr($rhs, 1),
- type => C_IRSSI,
- };
- # <Nop> does nothing
- } elsif (lc $rhs eq '<nop>') {
- $command = { char => '<Nop>',
- func => undef,
- type => C_NOP,
- };
- # command-mode command
- } else {
- $rhs = _parse_mapping($2);
- if (not defined $rhs) {
- return _warn_ex('map', 'invalid {rhs}');
- } elsif (not exists $commands->{$rhs}) {
- return _warn_ex('map', "$2 not found");
- } else {
- $command = $commands->{$rhs};
- }
- }
- add_map($lhs, $command);
-
- # :map [lhs]
- } elsif ($arg_str =~ m/^map\s*$/ or $arg_str =~ m/^map (\S+)$/) {
- # Necessary for case insensitive matchings. lc alone won't work.
- my $search = $1;
- $search = '' if not defined $search;
- $search = _parse_mapping_reverse(_parse_mapping($search));
-
- my $active_window = Irssi::active_win();
- foreach my $key (sort keys %$maps) {
- my $map = $maps->{$key};
- my $cmd = $map->{cmd};
- if (defined $cmd) {
- next if $map->{char} eq $cmd->{char}; # skip default mappings
- # FIXME: Hack so <C-H> doesn't show up as mapped to <BS>.
- next if $map->{char} eq '<C-H>' and $cmd->{char} eq '<BS>';
- next if $map->{char} !~ /^\Q$search\E/; # skip non-matches
- $active_window->print(sprintf "%-15s %s", $map->{char},
- $cmd->{char});
- }
- }
- } else {
- _warn_ex('map');
- }
-}
-sub ex_unmap {
- my ($arg_str, $count) = @_;
-
- # :unm[ap] {lhs}
- if ($arg_str !~ /^unm(?:ap)? (\S+)$/) {
- return _warn_ex('unmap');
- }
-
- my $lhs = _parse_mapping($1);
- if (not defined $lhs) {
- return _warn_ex('unmap', 'invalid {lhs}');
- # Prevent unmapping of unknown or default mappings.
- } elsif (not exists $maps->{$lhs} or not defined $maps->{$lhs}->{cmd} or
- ($commands->{$lhs} and $maps->{$lhs}->{cmd} == $commands->{$lhs})) {
- return _warn_ex('unmap', "$1 not found");
- }
-
- delete_map($lhs);
-}
-sub _parse_mapping {
- my ($string) = @_;
-
- $string =~ s/<([^>]+)>/_parse_mapping_bracket($1)/ge;
- _debug("Parse mapping: $string");
- if (index($string, '<invalid>') != -1) {
- return undef;
- }
- return $string;
-}
-sub _parse_mapping_bracket {
- my ($string) = @_;
-
- $string = lc $string;
-
- # <C-X>, get corresponding CTRL char.
- if ($string =~ /^c-([a-z])$/i) {
- $string = chr(ord($1) - 96);
- # <C-6> and <C-^>
- } elsif ($string =~ /^c-[6^]$/i) {
- $string = chr(30);
- # <Space>
- } elsif ($string eq 'space') {
- $string = ' ';
- # <CR>
- } elsif ($string eq 'cr') {
- $string = "\n";
- # <BS>
- } elsif ($string eq 'bs') {
- $string = chr(127);
- } elsif ($string eq 'leader') {
- $string = $settings->{map_leader}->{value};
- # Invalid char, return special string to recognize the error.
- } else {
- $string = '<invalid>';
- }
- return $string;
-}
-sub _parse_mapping_reverse {
- my ($string) = @_;
-
- if (not defined $string) {
- _warn("Unable to reverse-map command: " . join('', @ex_buf));
- return;
- }
-
- my $escaped_leader = quotemeta($settings->{map_leader}->{value});
- $string =~ s/$escaped_leader/<Leader>/g;
-
- # Convert char to <char-name>.
- $string =~ s/ /<Space>/g;
- $string =~ s/\n/<CR>/g;
- $string =~ s/\x7F/<BS>/g;
- # Convert Ctrl-X to <C-X>.
- $string =~ s/([\x01-\x1A])/"<C-" . chr(ord($1) + 64) . ">"/ge;
- # Convert Ctrl-6 and Ctrl-^ to <C-^>.
- $string =~ s/\x1E/<C-^>/g;
-
- return $string;
-}
-sub _parse_partial_command_reverse {
- my ($string) = @_;
-
- my $escaped_leader = quotemeta($settings->{map_leader}->{value});
- $string =~ s/$escaped_leader/<Leader>/g;
-
- # Convert Ctrl-X to ^X.
- $string =~ s/([\x01-\x1A])/"^" . chr(ord($1) + 64)/ge;
- # Convert Ctrl-6 and Ctrl-^ to <C-^>.
- $string =~ s/\x1E/^^/g;
-
- return $string;
-}
-
-sub ex_source {
- my ($arg_str, $count) = @_;
-
- # :so[urce], but only loads the vim_moderc file at the moment
-
- open my $file, '<', Irssi::get_irssi_dir() . '/vim_moderc' or return;
-
- while (my $line = <$file>) {
- next if $line =~ /^\s*$/ or $line =~ /^\s*"/;
-
- chomp $line;
- # :map {lhs} {rhs}, keep in sync with ex_map()
- if ($line =~ /^\s*map (\S+) (\S.*)$/) {
- ex_map($line);
- } else {
- _warn_ex('source', "command not supported: $line");
- }
- }
-}
-
-sub ex_mkvimrc {
- my ($arg_str, $count) = @_;
-
- # :mkv[imrc][!], [file] not supported
-
- my $vim_moderc = Irssi::get_irssi_dir(). '/vim_moderc';
- if (-f $vim_moderc and $arg_str !~ /^mkv(?:imrc)?!$/) {
- return _warn_ex('mkvimrc', "$vim_moderc already exists");
- }
-
- open my $file, '>', $vim_moderc or return;
-
- # copied from ex_map()
- foreach my $key (sort keys %$maps) {
- my $map = $maps->{$key};
- my $cmd = $map->{cmd};
- if (defined $cmd) {
- next if $map->{char} eq $cmd->{char}; # skip default mappings
- print $file "map $map->{char} $cmd->{char}\n";
- }
- }
-
- close $file;
-}
-
-sub ex_set {
- my ($arg_str, $count) = @_;
-
- # :se[t] [option] [value]
- if ($arg_str =~ /^se(?:t)?(?:\s([^=]+)(?:=(.*)$)?)?/) {
- # :se[t] {option} {value}
- if (defined $1 and defined $2) {
- if (not exists $settings->{$1}) {
- return _warn_ex('map', "setting '$1' not found");
- }
- my $name = $1;
- my $value = $2;
- # Also accept numeric values for boolean options.
- if ($settings->{$name}->{type} == S_BOOL) {
- if ($value =~ /^(on|off)$/i) {
- $value = lc $value eq 'on' ? 1 : 0;
- } elsif ($value eq '') {
- $value = 0;
- }
- }
- _setting_set($name, $value);
- setup_changed();
-
- # :se[t] [option]
- } else {
- my $search = defined $1 ? $1 : '';
- my $active_window = Irssi::active_win();
- foreach my $setting (sort keys %$settings) {
- next if $setting !~ /^\Q$search\E/; # skip non-matches
- my $value = $settings->{$setting}->{value};
- # Irssi only accepts 'on' and 'off' as values for boolean
- # options.
- if ($settings->{$setting}->{type} == S_BOOL) {
- $value = $value ? 'on' : 'off';
- }
- $active_window->print($setting . '=' . $value);
- }
- }
- } else {
- _warn_ex('map');
- }
-}
-
-sub _warn_ex {
- my ($command, $description) = @_;
- my $message = "Error in ex-mode command $command";
- if (defined $description) {
- $message .= ": $description";
- }
- _warn($message);
-}
-
-sub _matching_windows {
- my ($buffer) = @_;
-
- my $server;
-
- if ($buffer =~ m{^(.+)/(.+)}) {
- $server = $1;
- $buffer = $2;
- }
-
- print ":b searching for channel $buffer" if DEBUG;
- print ":b on server $server" if $server and DEBUG;
-
- my @matches;
- foreach my $window (Irssi::windows()) {
- # Matching window names.
- if ($window->{name} =~ /$buffer/i) {
- my $win_ratio = ($+[0] - $-[0]) / length($window->{name});
- push @matches, { window => $window,
- item => undef,
- ratio => $win_ratio,
- text => $window->{name} };
- print ":b $window->{name}: $win_ratio" if DEBUG;
- }
- # Matching Window item names (= channels).
- foreach my $item ($window->items()) {
- # Wrong server.
- if ($server and (!$item->{server} or
- $item->{server}->{chatnet} !~ /^$server/i)) {
- next;
- }
- if ($item->{name} =~ /$buffer/i) {
- my $length = length($item->{name});
- $length-- if index($item->{name}, '#') == 0;
- my $item_ratio = ($+[0] - $-[0]) / $length;
- push @matches, { window => $window,
- item => $item,
- ratio => $item_ratio,
- text => $item->{name} };
- print ":b $window->{name} $item->{name}: $item_ratio" if DEBUG;
- }
- }
- }
-
- @matches = sort {$b->{ratio} <=> $a->{ratio}} @matches;
-
- return \@matches;
-}
-
-
-# STATUS ITEMS
-
-#TODO: give these things better names.
-sub vim_mode_cmd {
-
- my $mode_str = '';
- if ($mode == M_INS) {
- $mode_str = 'Insert';
- } elsif ($mode == M_EX) {
- $mode_str = '%_Ex%_';
- } else {
- $mode_str = 'Normal';
- if ($register ne '"' or $numeric_prefix or $operator or $movement or
- $pending_map) {
- my $partial = '';
- if ($register ne '"') {
- $partial .= '"' . $register;
- }
- if ($numeric_prefix) {
- $partial .= $numeric_prefix;
- }
- if ($operator) {
- $partial .= $operator->{char};
- }
- if ($movement) {
- $partial .= $movement->{char};
- }
- if (defined $pending_map) {
- $partial .= $pending_map;
- }
- $partial = _parse_partial_command_reverse($partial);
- $partial =~ s/\\/\\\\\\\\/g;
- $mode_str .= " ($partial)";
- }
- }
- return $mode_str;
-}
-
-sub vim_wins_data {
- my $windows = '';
-
- # A little code duplication of cmd_ex_command(), but \s+ instead of \s* so
- # :bd doesn't display buffers matching d.
- my $arg_str = join '', @ex_buf;
- if ($arg_str =~ m|^b(?:uffer)?\s+(.+)$|) {
- my $buffer = $1;
- if ($buffer !~ /^[0-9]$/ and $buffer ne '#') {
- # Display matching windows.
- eval {
- my $matches = _matching_windows($buffer);
- $windows = join ',', map { $_->{text} } @$matches;
- };
- # Catch errors in /$buffer/ regex.
- if ($@) {
- _warn($@);
- }
- }
- }
- return $windows;
-}
-
-sub vim_exp_mode {
- my ($server, $witem, $arg) = @_;
- return vim_mode_cmd();
-}
-
-sub vim_exp_wins {
- my ($server, $witem, $arg) = @_;
- return vim_wins_data();
-}
-
-# vi mode status item.
-sub vim_mode_cb {
- my ($sb_item, $get_size_only) = @_;
- my $mode_str = vim_mode_cmd();
- $sb_item->default_handler($get_size_only, "{sb $mode_str}", '', 0);
-}
-
-# :b window list item.
-sub b_windows_cb {
- my ($sb_item, $get_size_only) = @_;
-
- my $windows = vim_wins_data();
-
- $sb_item->default_handler($get_size_only, "{sb $windows}", '', 0);
-}
-
-
-# INPUT HANDLING
-
-sub got_key {
- my ($key) = @_;
-
- return if ($should_ignore);
-
- # Esc key
- if ($key == 27) {
- print "Esc seen, starting buffer" if DEBUG;
- $input_buf_enabled = 1;
-
- # NOTE: this timeout might be too low on laggy systems, but
- # it comes at the cost of keystroke latency for things that
- # contain escape sequences (arrow keys, etc)
- my $esc_buf_timeout = $settings->{esc_buf_timeout}->{value};
-
- $input_buf_timer
- = Irssi::timeout_add_once($esc_buf_timeout,
- \&handle_input_buffer, undef);
-
- print "Buffer Timer tag: $input_buf_timer" if DEBUG;
-
- } elsif ($mode == M_INS) {
- if ($key == 5) { # Ctrl-C enters command mode
- _update_mode(M_CMD);
- _stop();
- return;
- } elsif ($key == 10) { # enter.
- _commit_line();
-
- } elsif ($input_buf_enabled and $imap) {
- print "Imap $imap active" if DEBUG;
- my $map = $imaps->{$imap};
- if (not defined $map->{map} or chr($key) eq $map->{map}) {
- $map->{func}($key);
- # Clear the buffer so the imap is not printed.
- @input_buf = ();
- } else {
- push @input_buf, $key;
- }
- flush_input_buffer();
- _stop();
- $imap = undef;
- return;
-
- } elsif (exists $imaps->{chr($key)}) {
- print "Imap " . chr($key) . " seen, starting buffer" if DEBUG;
-
- # start imap pending mode
- $imap = chr($key);
-
- $input_buf_enabled = 1;
- push @input_buf, $key;
- $input_buf_timer
- = Irssi::timeout_add_once(1000, \&flush_input_buffer, undef);
-
- _stop();
- return;
-
- # Pressing delete resets insert mode repetition (8 = BS, 127 = DEL).
- # TODO: maybe allow it
- } elsif ($key == 8 || $key == 127) {
- @insert_buf = ();
- # All other entered characters need to be stored to allow repeat of
- # insert mode. Ignore delete and control characters.
- } elsif ($key > 31) {
- push @insert_buf, chr($key);
- }
- }
-
- if ($input_buf_enabled) {
- push @input_buf, $key;
- _stop();
- return;
- }
-
- if ($mode == M_CMD) {
- my $should_stop = handle_command_cmd($key);
- _stop() if $should_stop;
- Irssi::statusbar_items_redraw("vim_mode");
-
- } elsif ($mode == M_EX) {
-
- if ($key == 3) { # C-c cancels Ex mdoe as well.
- _update_mode(M_CMD);
- _stop();
- return;
- }
-
- handle_command_ex($key);
- }
-}
-
-# TODO: merge this with 'flush_input_buffer' below.
-
-sub handle_input_buffer {
-
- #Irssi::timeout_remove($input_buf_timer);
- $input_buf_timer = undef;
- # see what we've collected.
- print "Input buffer contains: ", join(", ", @input_buf) if DEBUG;
-
- if (@input_buf == 1 && $input_buf[0] == 27) {
-
- print "Enter Normal Mode" if DEBUG;
- _update_mode(M_CMD);
-
- } else {
- # we have more than a single esc, implying an escape sequence
- # (meta-* or esc-*)
-
- # currently, we only extract escape sequences if:
- # a) we're in ex mode
- # b) they're arrow keys (for history control)
-
- if ($mode == M_EX) {
- # ex mode
- my $key_str = join '', map { chr } @input_buf;
- if ($key_str =~ m/^\e\[([ABCD])/) {
- my $arrow = $1;
- _debug( "Arrow key: $arrow");
- if ($arrow eq 'A') { # up
- ex_history_back();
- } elsif ($arrow eq 'B') { # down
- ex_history_fwd();
- } else {
- $arrow =~ s/C/right/;
- $arrow =~ s/D/left/;
- _debug("Arrow key $arrow not supported");
- }
- }
- } else {
- # otherwise, we just forward them to irssi.
- _emulate_keystrokes(@input_buf);
- }
-
- # Clear insert buffer, pressing "special" keys (like arrow keys)
- # resets it.
- @insert_buf = ();
- }
-
- @input_buf = ();
- $input_buf_enabled = 0;
-}
-
-sub flush_input_buffer {
- Irssi::timeout_remove($input_buf_timer) if defined $input_buf_timer;
- $input_buf_timer = undef;
- # see what we've collected.
- print "Input buffer flushed" if DEBUG;
-
- # Add the characters to @insert_buf so they can be repeated.
- push @insert_buf, map chr, @input_buf;
-
- _emulate_keystrokes(@input_buf);
-
- @input_buf = ();
- $input_buf_enabled = 0;
-
- $imap = undef;
-}
-
-sub flush_pending_map {
- my ($old_pending_map) = @_;
-
- print "flush_pending_map(): ", $pending_map, ' ', $old_pending_map
- if DEBUG;
-
- return if not defined $pending_map or
- $pending_map ne $old_pending_map;
-
- handle_command_cmd(undef);
- Irssi::statusbar_items_redraw("vim_mode");
-}
-
-sub handle_numeric_prefix {
- my ($char) = @_;
- my $num = 0+$char;
-
- if (defined $numeric_prefix) {
- $numeric_prefix *= 10;
- $numeric_prefix += $num;
- } else {
- $numeric_prefix = $num;
- }
-}
-
-sub handle_command_cmd {
- my ($key) = @_;
-
- my $pending_map_flushed = 0;
-
- my $char;
- if (defined $key) {
- $char = chr($key);
- # We were called from flush_pending_map().
- } else {
- $char = $pending_map;
- $key = 0;
- $pending_map_flushed = 1;
- }
-
- # Counts
- if (!$movement and !$pending_map and
- ($char =~ m/[1-9]/ or ($numeric_prefix && $char =~ m/[0-9]/))) {
- print "Processing numeric prefix: $char" if DEBUG;
- handle_numeric_prefix($char);
- return 1; # call _stop()
- }
-
- if (defined $pending_map and not $pending_map_flushed) {
- $pending_map = $pending_map . $char;
- $char = $pending_map;
- }
-
- my $map;
- if ($movement) {
- $map = { char => $movement->{char},
- cmd => $movement,
- maps => {},
- };
-
- } elsif (exists $maps->{$char}) {
- $map = $maps->{$char};
-
- # We have multiple mappings starting with this key sequence.
- if (!$pending_map_flushed and scalar keys %{$map->{maps}} > 0) {
- if (not defined $pending_map) {
- $pending_map = $char;
- }
-
- # The current key sequence has a command mapped to it, run if
- # after a timeout.
- if (defined $map->{cmd}) {
- Irssi::timeout_add_once(1000, \&flush_pending_map,
- $pending_map);
- }
- return 1; # call _stop()
- }
-
- } else {
- print "No mapping found for $char" if DEBUG;
- $pending_map = undef;
- $numeric_prefix = undef;
- return 1; # call _stop()
- }
-
- $pending_map = undef;
-
- my $cmd = $map->{cmd};
-
- # Make sure we have a valid $cmd.
- if (not defined $cmd) {
- print "Bug in pending_map_flushed() $map->{char}" if DEBUG;
- return 1; # call _stop()
- }
-
- # Ex-mode commands can also be bound in command mode.
- if ($cmd->{type} == C_EX) {
- print "Processing ex-command: $map->{char} ($cmd->{char})" if DEBUG;
-
- $cmd->{func}->(substr($cmd->{char}, 1), $numeric_prefix);
- $numeric_prefix = undef;
-
- return 1; # call _stop()
- # As can irssi commands.
- } elsif ($cmd->{type} == C_IRSSI) {
- print "Processing irssi-command: $map->{char} ($cmd->{char})" if DEBUG;
-
- _command_with_context($cmd->{func});
-
- $numeric_prefix = undef;
- return 1; # call _stop();
- # <Nop> does nothing.
- } elsif ($cmd->{type} == C_NOP) {
- print "Processing <Nop>: $map->{char}" if DEBUG;
-
- $numeric_prefix = undef;
- return 1; # call _stop();
- }
-
- # text-objects (i a) are simulated with $movement
- if (!$movement and ($cmd->{type} == C_NEEDSKEY or
- ($operator and ($char eq 'i' or $char eq 'a')))) {
- print "Processing movement: $map->{char} ($cmd->{char})" if DEBUG;
- if ($char eq 'i') {
- $movement = $commands->{_i};
- } elsif ($char eq 'a') {
- $movement = $commands->{_a};
- } else {
- $movement = $cmd;
- }
-
- } elsif (!$movement and $cmd->{type} == C_OPERATOR) {
- print "Processing operator: $map->{char} ($cmd->{char})" if DEBUG;
- # Abort operator if we already have one pending.
- if ($operator) {
- # But allow cc/dd/yy.
- if ($operator == $cmd) {
- print "Processing line operator: ",
- $map->{char}, " (",
- $cmd->{char} ,")"
- if DEBUG;
-
- my $pos = _input_pos();
- $cmd->{func}->(0, _input_len(), undef, 0);
- # Restore position for yy.
- if ($cmd == $commands->{y}) {
- _input_pos($pos);
- # And save undo for other operators.
- } else {
- _add_undo_entry(_input(), _input_pos());
- }
- if ($register ne '"') {
- print 'Changing register to "' if DEBUG;
- $register = '"';
- }
- }
- $numeric_prefix = undef;
- $operator = undef;
- $movement = undef;
- # Set new operator.
- } else {
- $operator = $cmd;
- }
-
- # Start Ex mode.
- } elsif ($cmd == $commands->{':'}) {
-
- if (not script_is_loaded('uberprompt')) {
- _warn("Warning: Ex mode requires the 'uberprompt' script. " .
- "Please load it and try again.");
- } else {
- _update_mode(M_EX);
- _set_prompt(':');
- }
-
- # Enter key sends the current input line in command mode as well.
- } elsif ($key == 10) {
- _commit_line();
- return 0; # don't call _stop()
-
- } else {
- print "Processing command: $map->{char} ($cmd->{char})" if DEBUG;
-
- my $skip = 0;
- my $repeat = 0;
-
- if (!$movement) {
- # . repeats the last command.
- if ($cmd == $commands->{'.'} and defined $last->{cmd}) {
- $cmd = $last->{cmd};
- $char = $last->{char};
- # If . is given a count then it replaces original count.
- if (not defined $numeric_prefix) {
- $numeric_prefix = $last->{numeric_prefix};
- }
- $operator = $last->{operator};
- $movement = $last->{movement};
- $register = $last->{register};
- $repeat = 1;
- } elsif ($cmd == $commands->{'.'}) {
- print '. pressed but $last->{char} not set' if DEBUG;
- $skip = 1;
- }
- }
-
- # Ignore invalid operator/command combinations.
- if ($operator and $cmd->{no_operator}) {
- print "Invalid operator/command: $operator->{char} $cmd->{char}"
- if DEBUG;
- $skip = 1;
- }
-
- if ($skip) {
- print "Skipping movement and operator." if DEBUG;
- } else {
- # Make sure count is at least 1 except for functions which need to
- # know if no count was used.
- if (not $numeric_prefix and not $cmd->{needs_count}) {
- $numeric_prefix = 1;
- }
-
- my $cur_pos = _input_pos();
-
- # If defined $cur_pos will be changed to this.
- my $old_pos;
- # Position after the move.
- my $new_pos;
- # Execute the movement (multiple times).
- if (not $movement) {
- ($old_pos, $new_pos)
- = $cmd->{func}->($numeric_prefix, $cur_pos, $repeat);
- } else {
- ($old_pos, $new_pos)
- = $cmd->{func}->($numeric_prefix, $cur_pos, $repeat,
- $char);
- }
- if (defined $old_pos) {
- print "Changing \$cur_pos from $cur_pos to $old_pos" if DEBUG;
- $cur_pos = $old_pos;
- }
- if (defined $new_pos) {
- _input_pos($new_pos);
- } else {
- $new_pos = _input_pos();
- }
-
- # Update input position of last undo entry so that undo/redo
- # restores correct position.
- if (@undo_buffer and _input() eq $undo_buffer[0]->[0] and
- ((defined $operator and $operator == $commands->{d}) or
- $cmd->{repeatable})) {
- print "Updating history position: $undo_buffer[0]->[0]"
- if DEBUG;
- $undo_buffer[0]->[1] = $cur_pos;
- }
-
- # If we have an operator pending then run it on the handled text.
- # But only if the movement changed the position (this prevents
- # problems with e.g. f when the search string doesn't exist).
- if ($operator and $cur_pos != $new_pos) {
- print "Processing operator: ", $operator->{char} if DEBUG;
- $operator->{func}->($cur_pos, $new_pos, $cmd, $repeat);
- }
-
- # Save an undo checkpoint here for operators, all repeatable
- # movements, operators and repetition.
- if ((defined $operator and $operator == $commands->{d}) or
- $cmd->{repeatable}) {
- # TODO: why do history entries still show up in undo
- # buffer? Is avoiding the commands here insufficient?
-
- _add_undo_entry(_input(), _input_pos());
- }
-
- # Store command, necessary for .
- if ($operator or $cmd->{repeatable}) {
- $last->{cmd} = $cmd;
- $last->{char} = $char;
- $last->{numeric_prefix} = $numeric_prefix;
- $last->{operator} = $operator;
- $last->{movement} = $movement;
- $last->{register} = $register;
- }
- }
-
- # Reset the count unless we go into insert mode, _update_mode() needs
- # to know it when leaving insert mode to support insert with counts
- # (like 3i).
- if ($repeat or $cmd->{type} != C_INSERT) {
- $numeric_prefix = undef;
- }
- $operator = undef;
- $movement = undef;
-
- if ($cmd != $commands->{'"'} and $register ne '"') {
- print 'Changing register to "' if DEBUG;
- $register = '"';
- }
-
- }
-
- return 1; # call _stop()
-}
-
-sub handle_command_ex {
- my ($key) = @_;
-
- # BS key (8) or DEL key (127) - remove last character.
- if ($key == 8 || $key == 127) {
- print "Delete" if DEBUG;
- if (@ex_buf > 0) {
- pop @ex_buf;
- _set_prompt(':' . join '', @ex_buf);
- # Backspacing over : exits ex-mode.
- } else {
- _update_mode(M_CMD);
- }
-
- # Return key - execute command
- } elsif ($key == 10) {
- print "Run ex-mode command" if DEBUG;
- cmd_ex_command();
- _update_mode(M_CMD);
-
- } elsif ($key == 9) { # TAB
- print "Tab pressed" if DEBUG;
- print "Ex buf contains: " . join('', @ex_buf) if DEBUG;
- @tab_candidates = _tab_complete(join('', @ex_buf), [keys %$commands_ex]);
- _debug("Candidates: " . join(", ", @tab_candidates));
- if (@tab_candidates == 1) {
- @ex_buf = ( split('', $tab_candidates[0]), ' ');
- _set_prompt(':' . join '', @ex_buf);
- }
- # Ignore control characters for now.
- } elsif ($key > 0 && $key < 32) {
- # TODO: use them later, e.g. completion
-
- # Append entered key
- } else {
- if ($key != -1) {
- # check we're not called from an ex_history_* function
- push @ex_buf, chr $key;
- }
- _set_prompt(':' . join '', @ex_buf);
- }
-
- Irssi::statusbar_items_redraw("vim_windows");
-
- _stop();
-}
-
-sub _tab_complete {
- my ($input, $source) = @_;
- my @out;
- foreach my $item (@$source) {
- if ($item =~ m/^\Q$input\E/) {
- push @out, $item;
- }
- }
-
- return sort { $a cmp $b } @out;
-}
-
-sub vim_mode_init {
- Irssi::signal_add_first 'gui key pressed' => \&got_key;
- Irssi::statusbar_item_register ('vim_mode', 0, 'vim_mode_cb');
- Irssi::statusbar_item_register ('vim_windows', 0, 'b_windows_cb');
-
- Irssi::expando_create('vim_cmd_mode' => \&vim_exp_mode, {});
- Irssi::expando_create('vim_wins' => \&vim_exp_wins, {});
-
-
- # Register all available settings.
- foreach my $name (keys %$settings) {
- _setting_register($name);
- }
-
- foreach my $char ('a' .. 'z') {
- $registers->{$char} = '';
- }
-
- setup_changed();
-
- Irssi::signal_add 'setup changed' => \&setup_changed;
-
- # Add all default mappings.
- foreach my $char (keys %$commands) {
- next if $char =~ /^_/; # skip private commands (text-objects for now)
- add_map($char, $commands->{$char});
- }
-
- # Load the vim_moderc file if it exists.
- ex_source('source');
-
- setup_changed();
- _reset_undo_buffer();
-
- if ($settings->{start_cmd}->{value}) {
- _update_mode(M_CMD);
- } else {
- _update_mode(M_INS);
- }
-}
-
-sub setup_changed {
- my $value;
-
- if ($settings->{cmd_seq}->{value} ne '') {
- delete $imaps->{$settings->{cmd_seq}->{value}};
- }
- $value = _setting_get('cmd_seq');
- if ($value eq '') {
- $settings->{cmd_seq}->{value} = $value;
- } else {
- if (length $value == 1) {
- $imaps->{$value} = { 'map' => $value,
- 'func' => sub { _update_mode(M_CMD) }
- };
- $settings->{cmd_seq}->{value} = $value;
- } else {
- _warn("Error: vim_mode_cmd_seq must be a single character");
- # Restore the value so $settings and irssi settings are
- # consistent.
- _setting_set('cmd_seq', $settings->{cmd_seq}->{value});
- }
- }
-
- my $new_utf8 = _setting_get('utf8');
- if ($new_utf8 != $settings->{utf8}->{value}) {
- # recompile the patterns when switching to/from utf-8
- $word = qr/[\w_]/o;
- $non_word = qr/[^\w_\s]/o;
-
- $settings->{utf8}->{value} = $new_utf8;
- }
- if ($new_utf8 and (!$^V or $^V lt v5.8.1)) {
- _warn("Warning: UTF-8 isn't supported very well in perl < 5.8.1! " .
- "Please disable the vim_mode_utf8 setting.");
- }
-
- # Sync $settings with current irssi values.
- foreach my $name (keys %$settings) {
- # These were already handled above.
- next if $name eq 'cmd_seq' or $name eq 'cmd_seq';
-
- $settings->{$name}->{value} = _setting_get($name);
- }
-}
-
-sub UNLOAD {
- Irssi::signal_remove('gui key pressed' => \&got_key);
- Irssi::signal_remove('setup changed' => \&setup_changed);
- Irssi::statusbar_item_unregister ('vim_mode');
- Irssi::statusbar_item_unregister ('vim_windows');
-}
-
-sub _add_undo_entry {
- my ($line, $pos) = @_;
-
- # If we aren't at the top of the history stack, then drop newer entries as
- # we can't branch (yet).
- while ($undo_index > 0) {
- shift @undo_buffer;
- $undo_index--;
- }
-
- # check it's not a dupe of the list head
- my $current = $undo_buffer[$undo_index];
- if ($line eq $current->[0] && $pos == $current->[1]) {
- print "Not adding duplicate to undo list" if DEBUG;
- } elsif ($line eq $current->[0]) {
- print "Updating position of undo list at $undo_index" if DEBUG;
- $undo_buffer[$undo_index]->[1] = $pos;
- } else {
- print "adding $line ($pos) to undo list" if DEBUG;
- # add to the front of the buffer
- unshift @undo_buffer, [$line, $pos];
- $undo_index = 0;
- }
- my $max = $settings->{max_undo_lines}->{value};
-}
-
-sub _restore_undo_entry {
- my $entry = $undo_buffer[$undo_index];
- _input($entry->[0]);
- _input_pos($entry->[1]);
-}
-
-sub _print_undo_buffer {
-
- my $i = 0;
- my @buf;
- foreach my $entry (@undo_buffer) {
- my $str = '';
- if ($i == $undo_index) {
- $str .= '* ';
- } else {
- $str .= ' ';
- }
- my ($line, $pos) = @$entry;
- substr($line, $pos, 0) = '*';
- # substr($line, $pos+3, 0) = '%_';
-
- $str .= sprintf('%02d %s [%d]', $i, $line, $pos);
- push @buf, $str;
- $i++;
- }
- print "------ undo buffer ------";
- print join("\n", @buf);
- print "------------------ ------";
-
-}
-
-sub _reset_undo_buffer {
- my ($line, $pos) = @_;
- $line = _input() unless defined $line;
- $pos = _input_pos() unless defined $pos;
-
- print "Clearing undo buffer" if DEBUG;
- @undo_buffer = ([$line, $pos]);
- $undo_index = 0;
-}
-
-sub add_map {
- my ($keys, $command) = @_;
-
- # To allow multiple mappings starting with the same key (like gg, ge, gE)
- # also create maps for the keys "leading" to this key (g in this case, but
- # can be longer for this like ,ls). When looking for the mapping these
- # "leading" maps are followed.
- my $tmp = $keys;
- while (length $tmp > 1) {
- my $map = substr $tmp, -1, 1, '';
- if (not exists $maps->{$tmp}) {
- $maps->{$tmp} = { char => _parse_mapping_reverse($tmp),
- cmd => undef,
- maps => {}
- };
- }
- if (not exists $maps->{$tmp}->{maps}->{$tmp . $map}) {
- $maps->{$tmp}->{maps}->{$tmp . $map} = undef;
- }
- }
-
- if (not exists $maps->{$keys}) {
- $maps->{$keys} = { char => undef,
- cmd => undef,
- maps => {}
- };
- }
- $maps->{$keys}->{char} = _parse_mapping_reverse($keys);
- $maps->{$keys}->{cmd} = $command;
-}
-
-sub delete_map {
- my ($keys) = @_;
-
- # Abort for non-existent mappings or placeholder mappings.
- return if not exists $maps->{$keys} or not defined $maps->{$keys}->{cmd};
-
- my @add = ();
-
- # If no maps need the current key, then remove it and all other
- # unnecessary keys in the "tree".
- if (keys %{$maps->{$keys}->{maps}} == 0) {
- my $tmp = $keys;
- while (length $tmp > 1) {
- my $map = substr $tmp, -1, 1, '';
- delete $maps->{$tmp}->{maps}->{$tmp . $map};
- if (not $maps->{$tmp}->{cmd} and keys %{$maps->{$tmp}->{maps}} == 0) {
- push @add, $tmp;
- delete $maps->{$tmp};
- } else {
- last;
- }
- }
- }
-
- if (keys %{$maps->{$keys}->{maps}} > 0) {
- $maps->{$keys}->{cmd} = undef;
- } else {
- delete $maps->{$keys};
- }
- push @add, $keys;
-
- # Restore default keybindings in case we :unmapped a <Nop> or a remapped
- # key.
- foreach my $key (@add) {
- if (exists $commands->{$key}) {
- add_map($key, $commands->{$key});
- }
- }
-}
-
-
-sub _commit_line {
- _update_mode(M_INS);
-
- # separate from call above as _update_mode() does additional internal work
- # and we need to make sure it gets correctly called.
- _update_mode(M_CMD) if $settings->{start_cmd}->{value};
-
- _reset_undo_buffer('', 0);
-}
-
-sub _input {
- my ($data) = @_;
-
- my $current_data = Irssi::parse_special('$L', 0, 0);
-
- if ($settings->{utf8}->{value}) {
- $current_data = decode_utf8($current_data);
- }
-
- if (defined $data) {
- if ($settings->{utf8}->{value}) {
- Irssi::gui_input_set(encode_utf8($data));
- } else {
- Irssi::gui_input_set($data);
- }
- } else {
- $data = $current_data;
- }
-
- return $data;
-}
-
-sub _input_len {
- return length _input();
-}
-
-sub _input_pos {
- my ($pos) = @_;
- my $cur_pos = Irssi::gui_input_get_pos();
- # my $dpos = defined $pos?$pos:'undef';
- # my @call = caller(1);
- # my $cfunc = $call[3];
- # $cfunc =~ s/^.*?::([^:]+)$/$1/;
- # print "pos called from line: $call[2] sub: $cfunc pos: $dpos, cur_pos: $cur_pos"
- # if DEBUG;
-
- if (defined $pos) {
- #print "Input pos being set from $cur_pos to $pos" if DEBUG;
- Irssi::gui_input_set_pos($pos) if $pos != $cur_pos;
- } else {
- $pos = $cur_pos;
- #print "Input pos retrieved as $pos" if DEBUG;
- }
-
- return $pos;
-}
-
-sub _emulate_keystrokes {
- my @keys = @_;
- $should_ignore = 1;
- for my $key (@keys) {
- Irssi::signal_emit('gui key pressed', $key);
- }
- $should_ignore = 0;
-}
-
-sub _stop() {
- Irssi::signal_stop_by_name('gui key pressed');
-}
-
-sub _update_mode {
- my ($new_mode) = @_;
-
- my $pos;
-
- if ($mode == M_INS and $new_mode == M_CMD) {
- # Support counts with insert modes, like 3i.
- if ($numeric_prefix and $numeric_prefix > 1) {
- $pos = _insert_buffer($numeric_prefix - 1, _input_pos());
- _input_pos($pos);
- $numeric_prefix = undef;
-
- # In insert mode we are "between" characters, in command mode "on top"
- # of keys. When leaving insert mode we have to move on key left to
- # accomplish that.
- } else {
- $pos = _input_pos();
- if ($pos != 0) {
- _input_pos($pos - 1);
- }
- }
- # Store current line to allow undo of i/a/I/A.
- _add_undo_entry(_input(), _input_pos());
-
- # Change mode to i to support insert mode repetition. This doesn't affect
- # commands like i/a/I/A because handle_command_cmd() sets $last->{cmd}.
- # It's necessary when pressing enter so the next line can be repeated.
- } elsif ($mode == M_CMD and $new_mode == M_INS) {
- $last->{cmd} = $commands->{i};
- # Make sure prompt is cleared when leaving ex mode.
- } elsif ($mode == M_EX and $new_mode != M_EX) {
- _set_prompt('');
- }
-
- $mode = $new_mode;
- if ($mode == M_INS) {
- $history_index = undef;
- $register = '"';
- @insert_buf = ();
- # Reset every command mode related status as a fallback in case something
- # goes wrong.
- } elsif ($mode == M_CMD) {
- $numeric_prefix = undef;
- $operator = undef;
- $movement = undef;
- $register = '"';
-
- $pending_map = undef;
-
- # Also clear ex-mode buffer.
- @ex_buf = ();
- }
-
- Irssi::statusbar_items_redraw("vim_mode");
- Irssi::statusbar_items_redraw ('uberprompt');
-
-}
-
-sub _set_prompt {
- my $msg = shift;
-
- # add a leading space unless we're trying to clear it entirely.
- if (length($msg) and $settings->{prompt_leading_space}->{value}) {
- $msg = ' ' . $msg;
- }
-
- # escape % symbols. This prevents any _set_prompt calls from using
- # colouring sequences.
- $msg =~ s/%/%%/g;
-
- Irssi::signal_emit('change prompt', $msg, 'UP_INNER');
-}
-
-sub _setting_get {
- my ($name) = @_;
-
- my $type = $settings->{$name}->{type};
- $name = "vim_mode_$name";
-
- my $ret = undef;
-
- if ($type == S_BOOL) {
- $ret = Irssi::settings_get_bool($name);
- } elsif ($type == S_INT) {
- $ret = Irssi::settings_get_int($name);
- } elsif ($type == S_STR) {
- $ret = Irssi::settings_get_str($name);
- } elsif ($type == S_TIME) {
- $ret = Irssi::settings_get_time($name);
- } else {
- _warn("Unknown setting type '$type', please report.");
- }
-
- return $ret;
-}
-
-sub _setting_set {
- my ($name, $value) = @_;
-
- my $type = $settings->{$name}->{type};
- $name = "vim_mode_$name";
-
- if ($type == S_BOOL) {
- Irssi::settings_set_bool($name, $value);
- } elsif ($type == S_INT) {
- Irssi::settings_set_int($name, $value);
- } elsif ($type == S_STR) {
- Irssi::settings_set_str($name, $value);
- } elsif ($type == S_TIME) {
- Irssi::settings_set_time($name, $value);
- } else {
- _warn("Unknown setting type '$type', please report.");
- }
-}
-sub _setting_register {
- my ($name) = @_;
-
- my $value = $settings->{$name}->{value};
- my $type = $settings->{$name}->{type};
- $name = "vim_mode_$name";
-
- if ($type == S_BOOL) {
- Irssi::settings_add_bool('vim_mode', $name, $value);
- } elsif ($type == S_INT) {
- Irssi::settings_add_int('vim_mode', $name, $value);
- } elsif ($type == S_STR) {
- Irssi::settings_add_str('vim_mode', $name, $value);
- } elsif ($type == S_TIME) {
- Irssi::settings_add_time('vim_mode', $name, $value);
- } else {
- _warn("Unknown setting type '$type', please report.");
- }
-}
-
-sub _warn {
- my ($warning) = @_;
-
- print '%_vim_mode: ', $warning, '%_';
-}
-
-sub _debug {
- return unless DEBUG;
-
- my ($format, @args) = @_;
- my $str = sprintf($format, @args);
- print $str;
-}
-
-sub _command_with_context {
- my ($command) = @_;
- my $context;
- my $window = Irssi::active_win;
- if (defined $window) {
- my $witem = $window->{active};
- if (defined $witem and ref($witem) eq 'Irssi::Windowitem') {
- $context = $witem;
- } else {
- $context = $window;
- }
- } else {
- my $server = Irssi::active_server;
- if (defined $server) {
- $context = $server;
- }
- }
- if (defined $context) {
- print "Command $command Using context: " . ref($context) if DEBUG;
- $context->command($command);
- } else {
- print "Command $command has no context" if DEBUG;
- Irssi::command($command);
- }
-}
-
-sub ex_history_add {
- my ($line) = @_;
-
- # check it's not an exact dupe of the previous history line
-
- my $last_hist = $ex_history[$ex_history_index];
- $last_hist = '' unless defined $last_hist;
-
- return if $last_hist eq $line;
-
- _debug("Adding $line to ex command history");
-
- # add it to the history
- unshift @ex_history, $line;
-
- if ($settings->{ex_history_size}->{value} < @ex_history) {
- pop @ex_history; # junk the last entry if we've hit the max.
- }
-}
-
-sub ex_history_fwd {
-
- my $hist_max = $#ex_history;
- $ex_history_index++;
- if ($ex_history_index > $hist_max) {
- $ex_history_index = 0;
- _debug("ex history hit top, wrapping to 0");
- }
-
- my $line = $ex_history[$ex_history_index];
- $line = '' if not defined $line;
-
- _debug("Ex history line: $line");
-
- @ex_buf = split '', $line;
- handle_command_ex(-1);
-}
-
-sub ex_history_back {
- my $hist_max = $#ex_history;
- $ex_history_index--;
- if ($ex_history_index == -1) {
- $ex_history_index = $hist_max;
- _debug("ex history hit bottom, wrapping to $hist_max");
-
- }
-
- my $line = $ex_history[$ex_history_index];
- $line = '' if not defined $line;
-
- _debug("Ex history line: $line");
- @ex_buf = split '', $line;
- handle_command_ex(-1);
-
-}
-
-sub ex_history_show {
- my $win = Irssi::active_win();
- $win->print("Ex command history:");
- for my $i (0 .. $#ex_history) {
- my $flag = $i == $ex_history_index
- ? ' <'
- : '';
- $win->print("$i " . $ex_history[$i] . $flag);
- }
-}
-vim_mode_init();
diff --git a/.config/irssi/scripts/autorun/window_switcher.pl b/.config/irssi/scripts/autorun/window_switcher.pl
@@ -1,146 +0,0 @@
-# window_switcher: makes switching windows easy
-#
-# Usage:
-# * Add the statusbar item:
-# /STATUSBAR window add window_switcher
-# * Type /ws followed by a window number or part of a window or channel name.
-# * When the right item is at the first place in the statusbar, press enter.
-# * For faster usage, do "/BIND ^G multi erase_line;insert_text /ws ",
-# type ctrl-G, and start typing...
-
-# Copyright 2007 Wouter Coekaerts <coekie@irssi.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 2 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, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-use strict;
-use Irssi;
-use Irssi::TextUI;
-
-use vars qw($VERSION %IRSSI);
-$VERSION = '1.0';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'coekie@irssi.org',
- name => 'window_switcher',
- description => 'makes switching windows easy',
- license => 'GPLv2 or later',
- url => 'http://wouter.coekaerts.be/irssi/',
- changed => '29/07/07'
-);
-
-sub window_switcher_sb {
- my ($sbItem, $get_size_only) = @_;
-
- my $prompt = Irssi::parse_special('$L');
- my $cmdchars = Irssi::parse_special('$K');
-
- my $sb = '';
-
- if ($prompt =~ /^(.)ws (.+)$/i && index($cmdchars,$1) != -1) {
- my $arg = $2;
- my $wins = find_wins($arg);
-
- foreach my $win (@$wins) {
- $sb .= $win->{text} . ' ';
- }
- $sb =~ s/ $//;
- }
-
- $sbItem->default_handler($get_size_only, "{sb $sb}", undef, 1);
-}
-
-sub find_wins {
- my ($arg) = @_;
- my @wins;
- foreach my $window (Irssi::windows()) {
- my @items = $window->items();
- my $regex = qr/^(.*?)(\Q$arg\E)(.*)$/i;
-
- my $match = 0;
- my $text;
- my $refnumtext = $window->{refnum};
- my $itemname;
-
- if ($window->{refnum} eq $arg) {
- $match = 1;
- if ($window->{name} ne '') {
- $text = $window->{name};
- } elsif (scalar(@items) > 0) {
- $text = $items[0]->{visible_name};
- } else {
- $text = '';
- }
- $refnumtext = "%G$refnumtext%n";
- } elsif ($window->{name} =~ $regex) {
- ($match, $text) = do_match($1, $2, $3);
- } else {
- foreach my $item (@items) {
- if ($item->{visible_name} =~ $regex) {
- ($match, $text) = do_match($1, $2, $3);
- $itemname = $item->{name};
- last;
- }
- }
- }
-
- if ($match) {
- push @wins, {
- match => 1000 * $match + $window->{refnum},
- refnum => $window->{refnum},
- text => "$refnumtext:$text",
- itemname => $itemname
- };
- }
- }
-
- @wins = sort {$a->{match} <=> $b->{match}} @wins;
- return \@wins;
-}
-
-sub do_match {
- my ($begin, $mid, $end) = @_;
- my $match;
- if ($begin eq '' || $begin eq '#') {
- $match = ($end eq '') ? 2 : 3;
- } else {
- $match = 4;
- }
- return ($match, "%g$begin%G$mid%g$end%n");
-}
-
-Irssi::command_bind('ws', sub {
- my ($data, $server, $win) = @_;
- my $wins = find_wins($data);
- if (scalar(@$wins) > 0) {
- my $win = $wins->[0];
- Irssi::command('window goto ' . $win->{refnum});
- if (defined($win->{itemname})) {
- Irssi::command('window item goto ' . $win->{itemname});
- }
- }
-});
-
-Irssi::statusbar_item_register ('window_switcher', 0, 'window_switcher_sb');
-
-my $scheduled = 0;
-Irssi::signal_add_last 'gui key pressed' => sub {
- unless ($scheduled) {
- $scheduled = 1;
- Irssi::timeout_add_once(100, sub {
- Irssi::statusbar_items_redraw ('window_switcher');
- $scheduled = 0;
- }, []);
- }
-};
diff --git a/.config/irssi/scripts/printlevel.pl b/.config/irssi/scripts/printlevel.pl
@@ -1,19 +0,0 @@
-use Irssi;
-use strict;
-use vars qw($VERSION %IRSSI);
-$VERSION = '1.1';
-%IRSSI = (
- authors => 'Wouter Coekaerts',
- contact => 'wouter@coekaerts.be',
- name => 'printlevels',
- description => 'prints the message level before every line. useful for debugging your level settings',
- license => 'GPLv2',
- url => 'http://wouter.coekaerts.be/irssi',
- changed => '09/09/2003'
-);
-
-Irssi::signal_add('print text', sub {
- my ($dest, $text, $stripped) = @_;
- $_[1] = '|' . Irssi::bits2level($dest->{'level'}) . '| ' . $text;
- Irssi::signal_continue(@_);
-});
diff --git a/.config/irssi/startup b/.config/irssi/startup
@@ -1,2 +0,0 @@
-/load perl
-/sbar modify -type window -position 0 -visible active prompt
diff --git a/.config/irssi/triggers b/.config/irssi/triggers
@@ -1,59 +0,0 @@
-#Triggers file version 1.2.4
--all -regexp '\t' -replace ' '
--all -regexp '([[:alnum:]]) ([[:punct:]])[[:space:]]*$' -replace '$1$2'
--rawin -regexp 'Client connecting:' -replace '0CONNECT:'
--rawin -regexp 'Client exiting:' -replace '9QUIT:'
--rawin -regexp 'OperOverride --' -replace '14OPEROVERRIDE:'
--all -pattern '¯\_(ツ)_/¯' -replace '*shrug*'
--all -pattern '(╯°□°)╯︵ ┻━┻' -replace '*flips table*'
--publics -privmsgs -masks 'wfnintr!*@example.com. *!*@irc.haydenvh.com mys!*@mys.' -regexp '^halfop #hlircnet' -command '^msg -hlircnet chanhold halfop #hlircnet $N' -name 'AUTOHOP-#hlircnet'
--all -regexp '\t' -replace ' '
--all -pattern '00' -replace '99'
--all -pattern '01' -replace '88'
--all -pattern '02' -replace '48'
--all -pattern '03' -replace '56'
--all -pattern '04' -replace '52'
--all -pattern '05' -replace '40'
--all -pattern '06' -replace '50'
--all -pattern '07' -replace '18'
--all -pattern '08' -replace '42'
--all -pattern '09' -replace '56'
--all -pattern '10' -replace '46'
--all -pattern '11' -replace '58'
--all -pattern '12' -replace '48'
--all -pattern '13' -replace '62'
--all -pattern '14' -replace '90'
--all -pattern '15' -replace '96'
--all -pattern '(..),00' -replace '\1,99'
--all -pattern '(..),01' -replace '\1,88'
--all -pattern '(..),02' -replace '\1,48'
--all -pattern '(..),03' -replace '\1,56'
--all -pattern '(..),04' -replace '\1,52'
--all -pattern '(..),05' -replace '\1,40'
--all -pattern '(..),06' -replace '\1,50'
--all -pattern '(..),07' -replace '\1,18'
--all -pattern '(..),08' -replace '\1,42'
--all -pattern '(..),09' -replace '\1,56'
--all -pattern '(..),10' -replace '\1,46'
--all -pattern '(..),11' -replace '\1,58'
--all -pattern '(..),12' -replace '\1,48'
--all -pattern '(..),13' -replace '\1,62'
--all -pattern '(..),14' -replace '\1,90'
--all -pattern '(..),15' -replace '\1,96'
--all -pattern '(.),00' -replace '\1,99'
--all -pattern '(.),01' -replace '\1,88'
--all -pattern '(.),02' -replace '\1,48'
--all -pattern '(.),03' -replace '\1,56'
--all -pattern '(.),04' -replace '\1,52'
--all -pattern '(.),05' -replace '\1,40'
--all -pattern '(.),06' -replace '\1,50'
--all -pattern '(.),07' -replace '\1,18'
--all -pattern '(.),08' -replace '\1,42'
--all -pattern '(.),09' -replace '\1,56'
--all -pattern '(.),10' -replace '\1,46'
--all -pattern '(.),11' -replace '\1,58'
--all -pattern '(.),12' -replace '\1,48'
--all -pattern '(.),13' -replace '\1,62'
--all -pattern '(.),14' -replace '\1,90'
--all -pattern '(.),15' -replace '\1,96'
--all -nocase -channels '#general #test' -regexp '^!hilight (.*)' -command '^wait $1\x100\x100\x100; msg $C $N'