[irssi] Adds some of my irssi config

This commit is contained in:
Nemo 2016-06-07 12:14:17 +05:30
parent cd684d3ea8
commit fe91bcb7cf
8 changed files with 2610 additions and 0 deletions

View File

@ -0,0 +1,294 @@
# 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. "msgownnick" 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";
# 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-item already puts
# space there,so we don't use anything by default.
sbstart = "";
# text at the end of statusbars. Use space so that it's never
# used for anything.
sbend = " ";
topicsbstart = "{sbstart $*}";
topicsbend = "{sbend $*}";
prompt = "[$*] ";
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";
};

497
files/irc/.irssi/envy.theme Normal file
View File

@ -0,0 +1,497 @@
# ___ ___ ___ ___
# /\ \ /\__\ /\__\ |\__\
# /::\ \ /::| | /:/ / |:| |
# /:/\:\ \ /:|:| | /:/ / |:| |
# /::\~\:\ \ /:/|:| |__ /:/__/ ___ |:|__|__
# /:/\:\ \:\__\ /:/ |:| /\__\ |:| | /\__\ /::::\__\
# \:\~\:\ \/__/ \/__|:|/:/ / |:| |/:/ / /:/~~/~
# \:\ \:\__\ |:/:/ / |:|__/:/ / /:/ /
# \:\ \/__/ |::/ / \::::/__/ \/__/
# \:\__\ /:/ / ~~~~
# \/__/ \/__/ v. 3.6
#
# theme by rolle (rolle @ QuakeNet, rolle_ @ Ircnet)
# http://rollemaa.org/
#
# you can find the most recent version here:
# http://rolle.tux.fi
default_color = "-1";
# Timestamp/servertag loppuun, ei alkuun
info_eol = "false";
replaces = { "[]=" = "$*"; };
abstracts = {
line_start = "%K";
timestamp = "%K$*%n";
hilight = "$*";
error = "$*";
channel = "$*";
nick = "$*";
nickhost = "$*";
server = "$*";
comment = "$*";
reason = "{comment $*}";
mode = "{comment $*}";
channick_hilight = "$*";
chanhost_hilight = "{nickhost $*}";
channick = "$*";
chanhost = "{nickhost $*}";
channelhilight = "$*";
ban = "$*";
# Kaikissa alemmissa: $0 = mode, $1 = nick
msgnick = "$0$1- %|";
ownmsgnick = "{msgnick %K<$0 %G$1-%K>}%n";
ownnick = "$*";
pubmsgnick = "{msgnick %K<$0 %W$1-%K>}%n";
pubnick = "$*";
pubmsgmenick = "{msgnick %K<$0 %P$1-%K>}%P";
menick = "%P$*%n";
# $0 = hilightin väri, $1 = mode, $2 = nick
pubmsghinick = "{msgnick %K<$1 %P$2-%K>%P}";
msgchannel = ":$*";
# $0 = nick, $1 = hosti
privmsg = "[$0($1-)] ";
# $0 = "msg", $1 = target nick
ownprivmsg = "[$0($1-)] ";
ownprivmsgnick = "{msgnick $*}";
ownprivnick = "%K<%G$*%K>%n";
privmsgnick = "%K<%B$*%K>%n ";
action_core = " %r>%y>%g> %c$0-";
action = "{action_core $*} ";
ownaction = "{action $*}";
ownaction_target = "{action_core $*}:$1 ";
pvtaction = " (>>>) $* ";
pvtaction_query = "{action $*}";
pubaction = "{action $*}";
ownnotice = "[$0($1-)] ";
notice = "%g$*%K -> %G";
whois = "%# $[8]0 : $1-";
pubnotice_channel = ":$*";
pvtnotice_host = "($*)";
servernotice = "%r!$* %n";
ownctcp = "[$0($1-)] ";
ctcp = "$*";
wallop = "$*: ";
wallop_nick = "$*";
wallop_action = " * $* ";
netsplit = "$*";
netjoin = "%K::%g:%K $*";
names_prefix = "%K";
names_nick = "%K[$0$1-] ";
names_nick_op = "%K{names_nick $*}";
names_nick_halfop = "%K{names_nick $*}";
names_nick_voice = "%K{names_nick $*}";
names_users = "%K[$*]";
names_channel = "%K$*";
dcc = "$*";
dccfile = "$*";
dccownmsg = "[$0($1-)] ";
dccownnick = "$*";
dccownquerynick = "$*";
dccownaction = "{action $*}";
dccownaction_target = "{action_core $0}:$1 ";
dccmsg = "[$1-($0)] ";
dccquerynick = "$*";
dccaction = " (*dcc*) $* %|";
sb_background = "";
sb_window_bg = "%n%2";
sb_default_bg = "";
sb_prompt_bg = "%0";
sb_info_bg = "";
sb_topic_bg = "%G";
sbstart = "";
sbend = " ";
topicsbstart = "{sbstart $*}";
topicsbend = "{sbend $*}";
prompt = "%R!%G$*%K: ";
sb = " %w/%W$*%w/%n";
sbmode = "";
sbaway = "%r>%n";
sbservertag = "%W$0%n";
sbnickmode = "";
sb_act_sep = "%w$*%n";
sb_act_text = "%G$*%n";
sb_act_msg = "%G$*%n";
sb_act_hilight = "%r($*)%n";
sb_act_hilight_color = "%r$0$1-%n";
};
formats = {
"fe-common/core" = {
query_start = "%K:%K:%g:%K %gStarting query%K in {server $1} with {nick $0}";
join = "%K::%g:%K {channick_hilight $0} [{chanhost_hilight $1}] has %gjoined%K {channel $2}";
part = "%r:%K:: {channick $0} [{chanhost $1}] has %rleft%K {channel $2}";
quit = "%r:%K:: {channick $0} [{chanhost $1}] has %rquit%k ({reason $2})";
quit_once = "%r:%K:: {channick $0} [{chanhost $1}] has %rquit%K ({reason $2})";
nick_changed = "%K:%y:%K: {channick_hilight $0} is %ynow known as%K {channick_hilight $1}";
# own_msg = "{ownmsgnick $2 {ownnick $[-10]0}}$1";
# own_msg_channel = "{ownmsgnick $3 {ownnick $[-10]0}{msgchannel $1}}$2";
# pubmsg_me = "{pubmsgmenick $2 {menick $[-10]0}}$1";
# pubmsg_me_channel = "{pubmsgmenick $3 {menick $[-10]0}{msgchannel $1}}$2";
# pubmsg_hilight = "{pubmsghinick $0 $3 $[-10]1}$2";
# pubmsg_hilight_channel = "{pubmsghinick $0 $4 $[-10]1{msgchannel $2}}$3";
# pubmsg = "{pubmsgnick $2 {pubnick \0030$0}}$1";
# pubmsg_channel = "{pubmsgnick $3 {pubnick $[-10]0}{msgchannel $1}}$2";
# line_start = "{line_start}";
# line_start_irssi = "{line_start}{hilight Irssi} %W|%n ";
line_start_irssi = "{line_start}";
timestamp = "%K{timestamp $Z} ";
# servertag = "$[-11]0 %W|%n ";
servertag = "";
daychange = "Day changed to %%d %%b %%Y %n";
talking_with = "%r:%y:%g:%K You are now talking with {nick $0}";
refnum_too_low = "%r:%K:: Window number must be greater than 1";
error_server_sticky = "%r:%K:: Window's server is %rsticky%K and it cannot be changed without -unsticky option";
set_server_sticky = "%K::%g:%K Window's server %gset sticky%K";
unset_server_sticky = "%K::%g:%K Window's server isn't sticky anymore";
window_name_not_unique = "%r:%K:: Window names must be unique";
window_level = "%K::%g:%K Window level is now $0";
windowlist_header = "Ref Name Active item Server Level";
windowlist_line = "$[3]0 %|$[20]1 $[15]2 $[15]3 $4";
windowlist_footer = "";
windows_layout_saved = "%K::%g:%K Layout of windows is now %gremembered%K next time you start irssi";
windows_layout_reset = "%K::%g:%K Layout of windows %greset%K 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_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 = "%K::%g:%K %gLooking up%K {server $0}";
connecting = "%K::%g:%K %gConnecting%K to {server $0} [$1] port {hilight $2}";
connection_established = "%K::%g:%K Connection to {server $0} %gestablished%K";
cant_connect = "%r:%K:: %rUnable to connect%K server {server $0} port {hilight $1} {reason $2}";
connection_lost = "%r:%K:: %rConnection lost%K to {server $0}";
lag_disconnected = "%r:%K:: %rNo PONG reply%K from server {server $0} in $1 seconds, disconnecting";
disconnected = "%r:%K:: %rDisconnected%K from {server $0} {reason $1}";
server_quit = "%r:%K:: %rDisconnecting%K from server {server $0}: {reason $1}";
server_changed = "%K:%y:%K: %yChanged%K to {hilight $2} server {server $1}";
unknown_server_tag = "%r:%K:: %rUnknown%K server tag {server $0}";
no_connected_servers = "%r:%K:: %rNot connected%K 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 = "%K::%g:%K %gRemoved reconnection%K to server {server $0} port {hilight $1}";
server_reconnect_not_found = "%r:%K:: Reconnection tag {server $0} %rnot found%K";
setupserver_added = "%K::%g:%K Server {server $0} %gsaved%K";
setupserver_removed = "%K::%g:%K Server {server $0} %gremoved%K";
setupserver_not_found = "%r:%K:: Server {server $0} %rnot found%K";
your_nick = "%r:%y:%g:%K Your nickname is {nick $0}";
kick = "%r:%K:: {channick $0} was %rkicked%K from {channel $1} by {nick $2} ({reason $3})";
invite = "%K:%y:%K: {channick_hilight $0} %yinvites%K you to {channel $1}";
not_invited = "You have not been invited to a channel!";
new_topic = "%K:%y:%K: {channick_hilight $0} %ychanged the topic%K of {channel $1} to: {hilight $2}";
topic_unset = "%K:%y:%K: {channick_hilight $0} %yunset the topic%K on {channel $1}";
your_nick_changed = "%K:%y:%K: You're %ynow known as%K {channick_hilight $1}";
talking_in = "%r:%y:%g:%K You are now talking in {channel $0}";
not_in_channels = "%r:%y:%g:%K You are not on any channels";
current_channel = "%r:%y:%g:%K Current channel {channel $0}";
names = "{names_users Users {names_channel $0}} {comment $1 total}";
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 = "%r:%y:%g:%K {channel $0}: Total of {hilight $1} nicks {comment {hilight $2} ops, {hilight $3} halfops, {hilight $4} voices, {hilight $5} normal}";
chanlist_header = "%r:%y:%g:%K You are on the following channels:";
chanlist_line = "{channel $[-9]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 = "";
channel_move_notify = "{channel $0} is already joined in window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
# own_msg_private = "{ownprivmsg msg $0}$1";
# own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-9]2}}$1";
# msg_private = "{privmsg $0 $1}$2";
# msg_private_query = "{privmsgnick $[-9]0}$2";
no_msgs_got = "%r:%y:%g:%K You have not received a message from anyone yet";
no_msgs_sent = "%r:%y:%g:%K You have not sent a message to anyone yet";
query_stop = "%r:%y:%g:%K Closing query with {nick $0}";
no_query = "%r:%y:%g:%K No query with {nick $0}";
query_server_changed = "%K:%y:%K: Query with {nick $0} %ychanged%K to server {server $1}";
query_move_notify = "%r:%y:%g:%K Query with {nick $0} is already created to window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
hilight_header = "%r:%y:%g:%K Highlights:";
hilight_line = "$[-4]0 $1 $2 $3$4$5";
hilight_footer = "";
hilight_not_found = "%r:%K:: Highlight %rnot found%K: $0";
hilight_removed = "%K::%g:%K Highlight %gremoved%K: $0";
alias_added = "%K::%g:%K Alias $0 %gadded%K";
alias_removed = "%K::%g:%K Alias $0 %gremoved%K";
alias_not_found = "%r:%K:: %rNo such%K alias: $0";
aliaslist_header = "%r:%y:%g:%K Aliases:";
aliaslist_line = "$[10]0 $1";
aliaslist_footer = "";
log_opened = "%K::%g:%K Log file {hilight $0} %gopened%K";
log_closed = "%K::%g:%K Log file {hilight $0} %gclosed%K";
log_create_failed = "%r:%K:: %rCouldn't create%K log file {hilight $0}: $1";
log_locked = "%r:%K:: Log file {hilight $0} is %rlocked%K, probably by another running Irssi";
log_not_open = "%r:%K:: Log file {hilight $0} %rnot open%K";
log_started = "%K::%g:%K %gStarted%K logging to file {hilight $0}";
log_stopped = "%r:%K:: %rStopped%K logging to file {hilight $0}";
log_list_header = "%r:%y:%g:%K Logs:";
log_list = "$0 $1: $2 $3$4";
log_list_footer = "";
windowlog_file = "%K::%g:%K Window LOGFILE set to $0";
windowlog_file_logging = "%r:%K:: %rCan't change%K window's logfile while log is on";
no_away_msgs = "%r:%K:: %rNo new%K messages in awaylog";
away_msgs = "%K::%g:%K {hilight $1} %gnew messages%K in awaylog:";
module_header = "Module Type Submodules";
module_line = "$[!20]0 $[7]1 $2";
module_footer = "";
module_already_loaded = "%r:%K:: Module {hilight $0/$1} already loaded";
module_not_loaded = "%r:%K:: Module {hilight $0/$1} %ris not loaded%K";
module_load_error = "%r:%K:: %rError%K loading module {hilight $0/$1}: $2";
module_invalid = "%r:%K:: {hilight $0/$1} isn't Irssi module";
module_loaded = "%K::%g:%K %gLoaded%K module {hilight $0/$1}";
module_unloaded = "%r:%K:: %rUnloaded%K module {hilight $0/$1}";
command_unknown = "%r:%K:: %rUnknown%K command: $0";
command_ambiguous = "%r:%K:: %rAmbiguous%K command: $0";
option_unknown = "%r:%K:: %rUnknown%K option: $0";
option_ambiguous = "%r:%K:: %rAmbiguous%K option: $0";
option_missing_arg = "%r:%K:: %rMissing%K required argument for: $0";
not_enough_params = "%r:%K:: %rNot enough%K parameters given";
not_connected = "%r:%K:: %rNot connected%K to server";
not_joined = "%r:%K:: %rNot joined%K to any channel";
chan_not_found = "%r:%K:: %rNot joined%K to such channel";
chan_not_synced = "%r:%K:: Channel %rnot fully synchronized%K yet, try again after a while";
illegal_proto = "%r:%K:: Command isn't designed for the chat protocol of the active server";
not_good_idea = "%r:%K:: Doing this is %rnot a good idea%K. Add -YES if you really mean it";
theme_saved = "%K::%g:%K Theme %gsaved%K to $0";
theme_save_failed = "%r:%K:: %rError%K saving theme to $0: $1";
theme_not_found = "%r:%K:: Theme {hilight $0} %rnot found%K";
theme_changed = "%K:%y:%K: %yUsing%K now theme {hilight $0} ($1)";
window_theme = "%K::%g:%K %gUsing%K theme {hilight $0} in this window";
window_theme_default = "%r:%K:: %rNo theme is set%K for this window";
window_theme_changed = "%K:%y:%K: %yUsing%K now theme {hilight $0} ($1) in this window";
window_theme_removed = "%K::%g:%K %gRemoved%K theme from this window";
format_title = "%:[{hilight $0}] - [{hilight $1}]%:";
format_subtitle = "[{hilight $0}]";
format_item = "$0 = $1";
ignored = "%K::%g:%K %gIgnoring%K {hilight $1} from {nick $0}";
unignored = "%K::%g:%K %gUnignored%K {nick $0}";
ignore_not_found = "%K::%g:%K {nick $0} %gis not%K being ignored";
ignore_no_ignores = "%r:%y:%g:%K There are no ignores";
ignore_header = "%r:%y:%g:%K Ignorance List:";
ignore_line = "$[-4]0 $1: $2 $3 $4";
ignore_footer = "";
unknown_chat_protocol = "%r:%K:: %rUnknown%K chat protocol: $0";
unknown_chatnet = "%r:%K:: %rUnknown%K chat network: $0 (create it with /IRCNET ADD)";
not_toggle = "%r:%K:: Value must be either ON, OFF or TOGGLE";
perl_error = "%r:%K:: Perl %rerror%K: $0";
bind_key = "$[!20]0 $1 $2";
bind_unknown_id = "%r:%K:: %rUnknown%K bind action: $0";
config_saved = "%K::%g:%K %gSaved%K configuration to file $0";
config_reloaded = "%K::%g:%K %gReloaded%K configuration";
config_modified = "%r:%y:%g:%K Configuration file was modified since irssi was last started - do you want to overwrite the possible changes?";
glib_error = "{error GLib $0} $1";
overwrite_config = "%r:%y:%g:%K Overwrite config (%gy%K/%rN%K)?";
set_title = "[{hilight $0}]";
set_item = "$0 = $1";
set_unknown = "%r:%K:: %rUnknown%K setting $0";
set_not_boolean = "%r:%K:: Setting {hilight $0} isn't boolean, use /SET";
translation_not_found = "%r:%K:: %rError%K opening translation table file $0: $1";
translation_file_error = "%r:%K:: %rError%K parsing translation table file $0";
};
"fe-common/irc/dcc" = {
dcc_list_header = "{line_start_irssi}{dcc DCC connections:}";
dcc_list_footer = "{line_start_irssi}{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 = "%K::%g:%K {dcc >>> DCC CTCP {hilight $1} %greceived%K from {hilight $0}: $2}";
dcc_chat = "%K::%g:%K {dcc DCC CHAT from {nick $0} [$1 port $2]}";
dcc_chat_channel = "%K::%g:%K {dcc DCC CHAT from {nick $0} [$1 port $2] %grequested%K in channel {channel $3}}";
dcc_chat_not_found = "%K::%g:%K {dcc No DCC CHAT %gconnection open%K to {nick $0}}";
dcc_chat_connected = "%K::%g:%K {dcc DCC CHAT connection with {nick $0} [$1 port $2] %gestablished%K}";
dcc_chat_disconnected = "%r:%K:: {dcc DCC %rlost chat%K to {nick $0}}";
dcc_send = "%K::%g:%K {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes]}";
dcc_send_channel = "%K::%g:%K {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] %grequested%K in channel {channel $5}}";
dcc_send_exists = "%r:%K:: {dcc DCC %ralready sending%K file {dccfile $0} for {nick $1}}";
dcc_send_not_found = "%r:%K:: {dcc DCC %rnot sending%K file {dccfile $1} to {nick $0}}";
dcc_send_file_open_error = "%r:%K:: {dcc DCC %rcan't open%K file {dccfile $0}: $1}";
dcc_send_connected = "%K::%g:%K {dcc DCC %gsending%K file {dccfile $0} for {nick $1} [$2 port $3]}";
dcc_send_complete = "%K::%g:%K {dcc DCC %gsent%K file {dccfile $0} [{hilight $1}kB] for {nick $2} in {hilight $3} secs [{hilight $4kB/s}]}";
dcc_send_aborted = "%r:%K:: {dcc DCC %raborted%K sending file {dccfile $0} for {nick $1}}";
dcc_get_not_found = "%r:%K:: {dcc DCC no file offered by {nick $0}}";
dcc_get_connected = "%K::%g:%K {dcc DCC %greceiving%K file {dccfile $0} from {nick $1} [$2 port $3]}";
dcc_get_complete = "%K::%g:%K {dcc DCC %greceived%K file {dccfile $0} [$1kB] from {nick $2} in {hilight $3} secs [$4kB/s]}";
dcc_get_aborted = "%r:%K:: {dcc DCC %raborted%K receiving file {dccfile $0} from {nick $1}}";
dcc_unknown_ctcp = "%r:%K:: {dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}";
dcc_unknown_reply = "%r:%K:: {dcc DCC unknown reply {hilight $0} from {nick $1} [$2]}";
dcc_unknown_type = "%r:%K:: {dcc DCC unknown type {hilight $0}}";
dcc_invalid_ctcp = "%r:%K:: {dcc DCC received CTCP {hilight $0} with %rinvalid%K parameters from {nick $1}}";
dcc_connect_error = "%r:%K:: {dcc DCC %rcan't connect%K to {hilight $0} port {hilight $1}}";
dcc_cant_create = "%r:%K:: {dcc DCC %rcan't create%K file {dccfile $0}}";
dcc_rejected = "%r:%K:: {dcc DCC $0 was %rrejected%K by {nick $1} [{hilight $2}]}";
dcc_request_send = "%K::%g:%K {dcc DCC $0 %grequest sent%K 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_line_chat = "%WChat ->%n {dcc $0 $1}";
dcc_list_line_file = "%WFile ->%n {dcc $0 $1 : $2k of $3k ($4%%) - $5kB/s - $6}";
};
"fe-text" = {
lastlog_too_long = "%r:%y:%g:%K /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}";
refnum_not_found = "%r:%K::%K Window number $0 %rnot found%K";
window_too_small = "%r:%K::%K %rNot enough room%K to resize this window";
cant_hide_last = "%r:%K::%K You %rcan't hide%K the last window";
cant_hide_sticky_windows = "%r:%K::%K You %rcan't hide%K sticky windows (use /WINDOW STICK OFF)";
cant_show_sticky_windows = "%r:%K::%K You %rcan't show%K sticky windows (use /WINDOW STICK OFF)";
window_not_sticky = "%r:%K::%K Window %ris not%K sticky";
window_set_sticky = "%K::%g:%K Window %gset%K sticky";
window_unset_sticky = "%K::%g:%K Window %gis not%K sticky anymore";
window_info_sticky = "Sticky : $0";
window_scroll = "%K::%g:%K Window scroll mode is now $0";
window_scroll_unknown = "%r:%K:: %rUnknown%K scroll mode $0, must be ON, OFF or DEFAULT";
};
"fe-common/irc" = {
netsplit = "%r:%K:: %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits%K: $2";
netsplit_more = "%r:%K:: %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits:%K $2 (+$3 more, use /NETSPLIT to show all of them)";
netsplit_join = "%K::%g:%K %g{netjoin netsplit}%K - %|%gjoins:%K $0";
netsplit_join_more = "%%K::%g:%K %g{netjoin netsplit}%K - %|over, %gjoins:%K $0 (+$1 more)";
no_netsplits = "%r:%y:%g:%K There are no netsplits";
netsplits_header = "Nick Channel Server Splitted server";
netsplits_line = "$[9]0 $[10]1 $[20]2 $3";
netsplits_footer = "";
ircnet_added = "%K::%g:%K Ircnet $0 %gsaved%K";
ircnet_removed = "%K::%g:%K Ircnet $0 %gremoved%K";
ircnet_not_found = "%r:%K:: Ircnet $0 %rnot found%K";
ircnet_header = "%r:%y:%g:%K Ircnets:";
ircnet_line = "$0: $1";
ircnet_footer = "";
setupserver_header = "Server Port Network Settings";
setupserver_line = "%|$[!20]0 $[5]1 $[10]2 $3";
setupserver_footer = "";
joinerror_toomany = "%r:%K:: Join %rfails%K: {channel $0} (You have joined to too many channels)";
joinerror_full = "%r:%K:: Join %rfails%K: {channel $0} (Channel is full)";
joinerror_invite = "%r:%K:: Join %rfails%K: {channel $0} (You must be invited)";
joinerror_banned = "%r:%K:: Join %rfails%K: {channel $0} (You are banned)";
joinerror_bad_key = "%r:%K:: Join %rfails%K: {channel $0} (Wrong channel key)";
joinerror_bad_mask = "%r:%K:: Join %rfails%K: {channel $0} (Bad channel mask)";
joinerror_unavail = "%r:%K:: Join %rfails%K: {channel $0} (Channel is temporarily unavailable)";
joinerror_duplicate = "%r:%K:: Channel {channel $0} already exists - %rcannot create%K it";
channel_rejoin = "%r:%K:: Channel {channel $0} is temporarily %runavailable%K. Setting up a rejoin, to not rejoin, use /rmrejoins.";
inviting = "%K::%g:%K %gInviting%K {nick $0} to {channel $1}";
channel_created = "%r:%y:%g:%K Channel {channel $0} created %_$1%_";
url = "%r:%y:%g:%K Home page for {channelhilight $0}: $1";
topic = "%r:%y:%g:%K Topic for {channel $0}: %_$1%_";
no_topic = "%r:%y:%g:%K No topic set for %_$0%_";
topic_info = "%r:%y:%g:%K Topic set by {channick_hilight $0} {mode $1}";
chanmode_change = "%K:%y:%K: %ymode%K/{channel $0} [{mode $1}] by {nick $2}";
server_chanmode_change = "%K::%g: {netsplit ServerMode}%K/{channelhilight $0}: {mode $1} by {nick $2}";
channel_mode = "%K:%y:%K: %ymode%K/{channelhilight $0} [{mode $1}]";
bantype = "%K:%y:%K: Ban type %ychanged%K to {channel $0}";
no_bans = "%r:%y:%g:%K 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 = "%r:%y:%g:%K Invite list is empty in channel {channel $0}";
invitelist = "{channel $0}: invite {ban $1}";
no_such_channel = "%r:%K::%K {channel $0}: %rNo such%K channel";
channel_change = "%K:%y:%K: %ymode%K/{channel $0} [{mode $1}]";
channel_synced = "%r:%y:%g:%K Join to {channel $0} was synced in {hilight $1} secs";
usermode_change = "%K:%y:%K: %ymode%K/{channel $0} [{mode $0}] by {channick_hilight $1}";
user_mode = "%r:%y:%g:%K Your user mode is {mode $0}";
away = "%K::%g:%K You have been %gmarked%K as being away";
unaway = "%K::%g:%K You are %gno longer marked%K as being away";
nick_away = "%r:%K::%K {nick $0} is %raway%K: $1";
no_such_nick = "%r:%K::%K {nick $0}: %rNo such%K nick/channel";
nick_in_use = "%r:%K::%K Nick {nick $0} is %ralready in use%K";
nick_unavailable = "%r:%K::%K Nick {nick $0} is temporarily %runavailable%K";
your_nick_owned = "%r:%K::%K Your nick is %rowned%K by {nick $3} {comment $1@$2}";
whois = "%K:%K:%g:%K %g%U{nick $0}%U%K ({nickhost $1@$2})%:%r:%y:%g:%K ircname: $3";
whowas = "%r:%y:%g:%K {nick $0} {nickhost $1@$2}%:%r:%y:%g:%K {whois ircname $3}";
whois_idle = "%r:%y:%g:%K Idle: %|since $1 days $2 hours $3 mins $4 secs";
whois_idle_signon = "%r:%y:%g:%K Idle: %|since $1 days $2 hours $3 mins $4 secs {comment Signed on: $5}";
whois_server = "%r:%y:%g:%K Server: %|$1 {comment $2}";
whois_oper = "%r:%y:%g:%K Info: %|{hilight $1}";
whois_registered = "%r:%y:%g:%K Info: %|has registered this nick";
whois_help = "%r:%y:%g:%K Info: %|available for help";
whois_modes = "%r:%y:%g:%K Modes: %|{mode $1}";
whois_realhost = "%r:%y:%g:%K Hostname: %|{hilight $1-}";
whois_usermode = "%r:%y:%g:%K Usermode: %|{mode $1}";
whois_channels = "%r:%y:%g:%K Channels: %|{channel $1}";
whois_away = "%r:%y:%g:%K Away: %|$1";
whois_special = "%r:%y:%g:%K Info: %|$1";
whois_extra = "%r:%y:%g:%K Info: %|$1";
end_of_whois = "%r:%K::%K %rEnd%K of WHOIS%K";
end_of_whowas = "%r:%y:%g:%K End of WHOWAS";
whois_not_found = "%r:%K::%K There is %rno such%K nick {channick_hilight $0}";
who = "{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}";
end_of_who = "%r:%y:%g:%K End of /WHO list";
own_notice = "{ownnotice notice $0}$1";
# own_action = "{nick $[-11]0}%n $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 = " {nick $[-11]0}%n $1";
# action_public_channel = "{pubaction $0{msgchannel $1}}$2";
ctcp_reply = "%K::%g:%K %gCTCP%K {hilight $0} reply from {channick_hilight $1}: $2";
ctcp_reply_channel = "%K::%g:%K %gCTCP {hilight $0} reply%K from {channick_hilight $1} in channel {channel $3}: $2";
ctcp_ping_reply = "%K::%g:%K %gCTCP {hilight PING} reply%K from {channick_hilight $0}: $1.$[-3.0]2 seconds";
ctcp_requested = "%K::%g:%K %K{ctcp {hilight $0} {comment $1} %grequested%K {hilight $2} from {nick $3}}";
ctcp_requested_unknown = "";
online = "%r:%y:%g:%K Users online: {hilight $0}";
pong = "%K::%g:%K PONG %greceived%K from $0: $1";
wallops = "{wallop WALLOP {wallop_nick $0}} $1";
action_wallops = "{wallop WALLOP {wallop_action $0}} $1";
kill = "%r:%K:: You were %r{error killed}%K by {nick $0} {nickhost $1} {reason $2} {comment Path: $3}";
kill_server = "%r:%K:: You were %r{error killed}%K by {server $0} {reason $1} {comment Path: $2}";
error = "%r:%K:: %r{error ERROR}%K $0";
unknown_mode = "%r:%K:: %rUnknown%K mode character $0";
not_chanop = "%r:%K:: You're %rnot channel operator%K in {channel $0}";
silenced = "%K::%g:%K %gSilenced%K {nick $0}";
unsilenced = "%K::%g:%K %gUnsilenced%K {nick $0}";
silence_line = "{nick $0}: silence {ban $1}";
ask_oper_pass = "%r:%y:%g:%K Operator password:";
};
"fe-common/perl" = {
script_not_found = "%r:%K:: Script {hilight $0} %rnot found%K";
script_not_loaded = "%r:%K:: Script {hilight $0} %ris not%K loaded";
script_loaded = "%K::%g:%K %gLoaded%K script {hilight $0}";
script_unloaded = "%r:%K:: %rUnloaded%K script {hilight $0}";
no_scripts_loaded = "%r:%y:%g:%K No scripts are loaded";
script_list_header = "%r:%y:%g:%K Loaded scripts:";
script_list_line = "$[!15]0 $1";
script_list_footer = "";
script_error = "{error %r:%K:: %rError%K in script {hilight $0}:}";
};
# "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_unidle = "{nick $0} [$5] [$1@$2] [{hilight $3}] just stopped idling";
# notify_online = "On $0: {hilight $1}";
# notify_offline = "Offline: $0";
# notify_list = "$0: $1 $2 $3";
# notify_list_empty = "The notify list is empty";
# };
};

View File

@ -0,0 +1,26 @@
use strict;
use warnings;
use Irssi;
use Irssi::Irc;
use vars qw($VERSION %IRSSI);
$VERSION = "0.0.2";
%IRSSI = (
authors => "Sebastian 'yath' Schmidt",
contact => "yathen\@web.de",
name => "Command dispatcher",
description => "This scripts sends unknown commands to the server",
license => "GNU GPLv2",
changed => "Tue Mar 5 14:55:29 CET 2002",
);
sub event_default_command {
my ($command, $server) = @_;
return if (Irssi::settings_get_bool("dispatch_unknown_commands") == 0
|| !$server);
$server->send_raw($command);
Irssi::signal_stop();
}
Irssi::settings_add_bool("misc", "dispatch_unknown_commands", 1);
Irssi::signal_add_first("default command", "event_default_command");

View File

@ -0,0 +1,55 @@
#
# 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.
#
use strict;
use Irssi;
use POSIX;
use vars qw($VERSION %IRSSI);
$VERSION = "0.04";
%IRSSI = (
authors => "Timo \'cras\' Sirainen, Mark \'znx\' Sangster",
contact => "tss\@iki.fi, znxster\@gmail.com",
name => "hilightwin",
description => "Print hilighted messages to window named \"hilight\"",
license => "Public Domain",
url => "http://irssi.org/",
changed => "Sun May 25 18:59:57 BST 2008"
);
sub sig_printtext {
my ($dest, $text, $stripped) = @_;
my $opt = MSGLEVEL_HILIGHT;
if(Irssi::settings_get_bool('hilightwin_showprivmsg')) {
$opt = MSGLEVEL_HILIGHT|MSGLEVEL_MSGS;
}
if(
($dest->{level} & ($opt)) &&
($dest->{level} & MSGLEVEL_NOHILIGHT) == 0
) {
my $window = Irssi::window_find_name('hilight');
if ($dest->{level} & MSGLEVEL_PUBLIC) {
$text = $dest->{target}.": ".$text;
}
$text =~ s/%/%%/g;
$window->print($text, MSGLEVEL_CLIENTCRAP) if ($window);
}
}
my $window = Irssi::window_find_name('hilight');
Irssi::print("Create a window named 'hilight'") if (!$window);
Irssi::settings_add_bool('hilightwin','hilightwin_showprivmsg',1);
Irssi::signal_add('print text', 'sig_printtext');
# vim:set ts=4 sw=4 et:

View File

@ -0,0 +1,447 @@
# vim: set expandtab:
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = "5.8";
%IRSSI = (
authors => "Simon 'simmel' Lundström",
contact => 'simmel@(freenode|quakenet|efnet) http://last.fm/user/darksoy',
name => "lastfm",
date => "20110125",
description => 'A now-playing-script which uses Last.fm',
license => "BSD",
url => "http://soy.se/code/",
);
# USAGE
# For details on how to use each setting, scroll down to the SETTINGS section.
# QUICK START
# * First of all, you need the libwww/LWP package installed. The package in
# your package system is probably called something with libwww and perl and/or
# p5 in it.
# * /set lastfm_user to the username that you are using on Last.fm
# * Show with /np or %np<TAB> what song "lastfm_user" last scrobbled to Last.fm via /say. If "lastfm_use_action" is set, it uses /me.
# * To see what another user on Last.fm is playing is also possible via /np <username> or %np(<username>).
# The now-playing message is configurable via via "lastfm_output" (and lastfm_output_tab_complete when using %np, if not set it will use lastfm_output by default.). "lastfm_strftime" can be used to configure the display of date and time when the song was scrobbled.
# SETTINGS
# NOTE: Do not set these options here, use /set <option> <value> in irssi!
# These are just defaults and descriptions on what the options do.
# The username which you are using on Last.fm
Irssi::settings_add_str("lastfm", "lastfm_user", "");
# The output that you want to use.
# The substitution variables are:
# %artist = Self explanatory
# %album = Self explanatory
# %name = Name of song*
# %url = URL to song on Last.fm
# %player = Player we are using to submit to Last.fm with. See setting "lastfm_get_player" below
# %user = User that is playing, when /np <username> or %np(<username> is used
# If "lastfm_output_tab_complete" is not defined, "lastfm_output" will be used instead.
# Something bothered me for a long time and when something really starts to itch
# I tend to want to do something about it. I'm /np:ing away displaying all sorts
# of tracks to my friends until I get to a track which has no album information
# on Last.fm and the output becomes really ugly "np: Kraftwerk-Aerodynamik
# (Alex Gopher/Etienne de Crecy dynamik mix) ()". What's with that last ()!? Oh,
# right we are using "np: %artist-%name (%album)" as "lastfm_output". Wouldn't
# it be really cool if lastfm.pl knew when certain information from Last.fm
# didn't exist and didn't display it? So thought I, so that's why I created a
# conditional. It works that you have to put your tag (%album e.g.) within %()
# e.g. "np: %artist-%name%( (%album))" and everything between %( and ) only gets
# displayed if the tag inside actually exists! Cool, huh!?
# *) Name is used instead of, the more logical IMO, track since that is what Last.fm reports in their .xml file that we parse.
Irssi::settings_add_str("lastfm", "lastfm_output", '%(%user is )np: %artist-%name');
Irssi::settings_add_str("lastfm", "lastfm_output_tab_complete", '');
# If we should use /me instead of /say
Irssi::settings_add_bool("lastfm", "lastfm_use_action", 0);
# If we should make the subtitution variable %player available which is very slow to fetch but nice to have.
Irssi::settings_add_bool("lastfm", "lastfm_get_player", 0);
# Changelog#{{{
# 5.8 -- Tue Jan 25 16:11:29 CET 2011
# * Ignore a closure warning
# 5.7 -- Mon Jan 24 16:39:06 CET 2011
# * Fixed a bug where we forked when we still waited for a reply from last.fm
# 5.6 -- Sun Jul 18 13:16:38 CEST 2010
# * Made substitution variable %user available when /np <username> or
# %np(<username>) is used.
# * Made some checks a bit more strict.
# 5.5 -- Mon Jul 12 19:04:26 CEST 2010
# * Rewrote the whole error handling
# * Fixed a bug where the error messages would be said and not printed.
# * Fixed some minor bugs and removed some unneeded code.
# 5.4 -- Wed May 26 17:04:08 CEST 2010
# * Last.fm updated their profile HTML so that the %player macro didn't work.
# Thanks to Keith Ward for mentioning this and suggesting a fix.
# * A minor fix which removes some debug messages when error reporting.
# 5.3 --
# * I used POSIX::_exit() but I never did "use POSIX;". Leo Green, mortiis and
# rissy reported this problem, thanks! This is an issue when you have a newer
# version of Perl installed (>5.10)
# 5.2 -- Mon Nov 16 08:25:20 CET 2009
# * When you remove a subroutine you should remove all calls to it..
# 5.1 -- Wed Nov 11 09:39:54 CET 2009
# * Ok, I admit that using undocumented features in an API is bad, but come
# on.. Anyway, fixed now, everything should work as it should and should
# never break again (flw)...
# 5.0 -- Mon Nov 9 08:34:48 CET 2009
# * Fixed a warning reported by mm_mannen and did a yet another clean up
# 4.9 -- Sat Nov 7 18:10:17 CET 2009
# * Last.fm changed how their API behaved and that broke my code because
# I'm a fool and I don't want to use an XML-lib because of your sake (so you
# won't have to install yet another Perl-module). Thanks to supertobbe and
# mm_mannen who saw and reported this!
# * Fixed so that lastfm_get_player works again and made it say that it
# doesn't work next time Last.fm changes their HTML.
# * Removed the date support in lastfm_output and lastfm_output_tab_complete
# since I use the API another way now.
# * Removed cache. It was broken at times and I can't be arsed to debug it.
# It's not that much faster but the complexity gets bigger. If someone REALLY
# needs this, give me a shout.
# * Removed, rewrote and cleaned up some parts of the script.
# 4.8 -- Sun May 10 10:11:29 CEST 2009
# * Fixed a bug with the cache ('There are only two hard things in
# Computer Science: cache invalidation and naming things' -Phil Karlton)
# * Started using HTML::Entities for decoding all sorts of HTML-chars, it's
# included in libwww anyway.
# 4.7 -- Tue Apr 8 13:37:11 CEST 2009
# * Start using LWP::UserAgent instead of LWP::Simple and got rid of the idea to
# start using my own HTTP-lib (it was finished, but..). I'm getting old ; P
# * Made so that everything is cached and checks if the Last-Modified date when
# getting information from Last.fm.
# * Fixed some documentation bugs.
# 4.6 -- Wed Mar 18 19:45:11 CET 2009
# * Fixed an changed behavour in irssi-trunk with the error handling (which I should replace anyway!).
# * Added %player substitute variable that shows what application you are using to scrobble with. This is very slow, so I made it an option, "lastfm_get_player".
# * Fixed print_raw once and for all (famous last words..) so now debug output looks really neat.
# * Added an quick start which should help get going faster
# * Fixed an issue where %np(lastfmusername) would not work.
# * Fixed error mesages for %np(lastfmusername)
# * Fixed an problem with irssi-svn where die's message have changed. Thanks tto jnpplf for reporting this.
# 4.5 -- Wed 1 Oct 2008 20:03:47 CEST
# * Removed a debug output
# * Fixed some datacorruption, references in Perl is hard! = (
# 4.4 -- Wed 1 Oct 2008 16:34:34 CEST
# * Changed so that all the tab-commands use % instead of $ so that it's consistent through out the script.
# * Ripped out my sprintf crap and made it more sane. You should use %artist, %album, etc in your nowplaying-setting now. Since sprintf is nolonger used I renamed that setting too.
# * Made everything that you can set in "lastfm_output" tabable so now you can do %artist<TAB>.
# %() in "lastfm_output" really works. It really didn't before.
# * Fixed some issues with the date probably not working, but should now.
# * Made the script check if Last.fm's scrobbler server is alive and kicking before we blame them.
# 4.3 -- Mon 21 Jul 2008 08:46:36 CEST
# * Seem like I misunderstood the protocol. The date/time is only sent when we have scrobbled the track, not when we started to listen to it.
# 4.2 -- Tue 15 Jul 2008 15:40:08 CEST
# Yay! Three new version within a day! (No, I'm not bored at work)
# * Made /np username and $np(username) make username the prefix of np: yadayada or whatever your lastfm_sprintf or lastfm_sprintf_tab_complete is.
# 4.1 -- Tue 15 Jul 2008 15:23:03 CEST
# Well, that version lasted long!
# * Fixed a bug with /np not working.
# * Fixed an issue where debug info would be printed even if lastfm_debug was off.
# 4.0 -- Tue 15 Jul 2008 10:17:51 CEST
# * Fixing a sprintfng-bug which didn't display time if album was not set.
# * Rewrote the whole script to use Last.fm's API which is very accurate. There is no need for $np! and /np! now, so I'm removing them.
# * Cleaned up abit.
# 3.9 -- Fri 11 Jul 2008 21:49:20 CEST
# * Fixing a few bugs noticed by supertobbe
# 3.8 -- Fri 11 Jul 2008 18:21:52 CEST
# * Shaped up error handling and now all error messages are shown.
# * Added a user configurable debug mode, good for sending in bugs and weird behaviour.
# * Minor cleanup
# 3.7 -- Thu 22 May 2008 10:33:55 CEST
# * Fixed so that /np! and $np! fetches the album title too. This is horribly slow and takes approx. 6s on very fast connection. Last.fm isnt very fast I'm afraid and this is not a good way to do it.
# * Cleaned up a few places. Started to look at the error handling and it seems to be alot of work.
# 3.6 -- Tue Nov 13 15:22:37 CET 2007
# * Fixed encoding so that it always the data into the charset that you have specified in "term_charset" which irssi also uses.
# 3.5 -- Mon Nov 12 11:50:46 CET 2007
# * Fixed the regex for parsing Recently Listened Tracks so that it works when listening with the Lastfm client.
# 3.4 -- Fri Nov 9 00:23:40 CET 2007
# * Added /np lastfmusername
# 3.3 -- Tue Nov 6 01:54:59 CET 2007
# * Finally added conditional sprintf-syntax! Let's say you want to use 'np: %s-%s (%s)' as "lastfm_sprintf". If you use /np it works out fine and displays 'np: Boards of Canada-Energy Warning (Geogaddi)' but what if you use /np! then it displays 'np: Boards of Canada-Energy Warning ()' since /np! can't get the album information. Doesn't that look ugly? Meet conditional sprintf. Now set your "lastfm_sprintf" to 'np: %s-%s%( (%s))'. ' (%s)' will only be printed if we get a third value, the album name in this case. Smart, huh? Big thanks to rindolf, apeiron and Khisanth from #perl@freenode for help with scoping with global variables.
# * Also added "lastfm_sprintf_tab_complete" which makes, if set, $np<TAB> use a different sprintf pattern than /np. Will default back to "lastfm_sprintf".
# 3.2 -- Wed Oct 24 23:07:01 CEST 2007
# * I don't like dependencies and I really wonder why I lastfm depended on DateTime. I remember now that it was morning and I was really tired when I coded it. Anyway, it's removed now along with Socket and URI::Escape. I'll try to remove the dependency for libwww later on.
# 3.1 -- Sun Oct 21 22:52:36 CEST 2007
# * Added /np! and $np! to use the "lastfm_be_accurate_and_slow" method without having to change the setting.
# 3.0 -- Fri Oct 19 14:26:03 CEST 2007
# * Created a new setting "lastfm_be_accurate_and_slow" which makes lastfm.pl parse your profile page to check what song you are playing right now. But be warned, this is slow and horrible (like my code! ; ). But it works until Last.fm makes this data available through their Web Services. This disables the album and "scrobbled at" features of "lastfm_sprintf" so you have to adapt it if you don't want it to look weird. I'm working on a new implementation of printf which allows for conditions but it took more time than I thought and time is something that I don't have much of ='(
# 2.5 -- Tue Oct 9 11:29:56 CEST 2007
# * Fixed the encoding issue by converting from Last.fms UTF-8 into Perls internal encoding. With $np<TAB> output will be looking UTF-8-in-latin1 if you don't have an UTF-8 enabled Terminal, but it will display correctly after you have sent it.
# 2.4 -- Mon Oct 8 16:08:09 CEST 2007
# * Fixed an error in error reporting ; P Bug noticed by supertobbe = *
# * I should make an more generic and better error reporting.
# 2.3 -- Sat Oct 6 16:38:34 CEST 2007
# * Made /np a nonblocking operation. Irssi's fork handling is REALLY messy. Thanks to tss and tommie for inspiring me in their scripts. $np cannot be made nonblocking, I'm afraid (patches welcome).
# * Cleaned up abit.
# 2.2 -- Sat Aug 18 02:20:44 CEST 2007
# * Now you can use $np(darksoy) to see what I play (or someone else for that matter ; ).
# 2.1 -- Tue Jul 17 12:50:18 CEST 2007
# * Now you can use $np or $nowplaying as a tab-completion too, but a warning here, this is a blocking action so irssi won't respond or be usable until it is finished or the timeout is hit.
# * Abstracted it abit more so that it can be used in more ways, ex. for the reason above.
# 2.0 -- Fri Jun 29 10:38:32 CEST 2007
# * Now you can show the time that the song was submitted in lastfm_sprintf. Added lastfm_strftime to configure how the date is presented.
# * Added $lastfm and $lfm as tab-completions to your own Last.fm profile URL. Ripoff of Jured's guts.pl (http://juerd.nl/irssi/)
# 1.5 -- Sat May 12 03:30:24 CEST 2007
# * Started using XML instead because we get more info from it, like album (but it's often wrong).
# 1.0 -- Thu Apr 12 16:57:26 CEST 2007
# * Got fedup with no good Last.fm-based now playing scripts around.
# THANKS
# Random individuals on #perl@freenode, could namedrop icke,
# }}}
# TODO
# You tell me!
# Move along now, there's nothing here to see.
sub DEBUG {
Irssi::settings_add_bool("lastfm", "lastfm_debug", 0);
Irssi::settings_get_bool("lastfm_debug");
};
use warnings;
no warnings 'closure';
use Data::Dumper;
use Encode;
use HTML::Entities;
use Irssi;
use LWP::UserAgent;
use POSIX;
my $pipe_tag;
my $waiting_for_reply;
my $api_key = "eba9632ddc908a8fd7ad1200d771beb7";
my $fields = "(artist|name|album|url|player|user)";
my $ua = LWP::UserAgent->new(agent => "lastfm.pl/$VERSION", timeout => 10);
sub lastfm_nowplaying {
my ($content, $url, $response, $tag, $value, %data);
my ($user_shifted, $is_tabbed, $nowplaying, $witem) = @_;
my $user = $user_shifted || Irssi::settings_get_str("lastfm_user");
$nowplaying ||= ((Irssi::settings_get_str("lastfm_output_tab_complete") ne "" && $is_tabbed) ? Irssi::settings_get_str("lastfm_output_tab_complete") : Irssi::settings_get_str("lastfm_output"));
my $command_message = ($is_tabbed) ? '%%np(username)' : '/np username';
if ($user eq '') {
return "ERROR: You must /set lastfm_user to a username on Last.fm or use $command_message";
}
if ($nowplaying =~ /^%(lastfm|lfm)$/) {
return "http://last.fm/user/$user/";
}
elsif ($nowplaying =~ /^%user$/) {
return $user;
}
$data{'user'} = $user if ($user_shifted);
$url = "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=$user&api_key=$api_key&limit=1";
print Dumper "Checking for scrobbles at: $url" if DEBUG;
$response = $ua->get($url);
$content = $response->content;
# TODO This should work, untested (fail more Last.fm! ; )
if ($content =~ m!<lfm status="failed">.*<error .*?>([^<]+)!s) {
return "ERROR: $1";
}
my @data = split('\n', $content);
if (!grep(m!<track nowplaying="true">!, @data)) {
print Dumper \$response if DEBUG;
print Dumper \$content if DEBUG;
return "ERROR: You are not playing anything according to Last.fm. Check http://www.last.fm/user/$user and see if they turn up there, otherwise restart your scrobbler.";
}
my $regex = qr!<$fields.*?(?:uts="(.*?)">.*?|>(.*?))</\1>!;
foreach my $data (@data) {
if ($data =~ m!</track>!) {
last;
}
elsif ($data =~ /$regex/) {
($tag, $value) = ($1, (defined($2) ? $2 : $3));
print Dumper \$tag, \$value, \$data if DEBUG;
$data{$tag} = $value;
}
}
if (Irssi::settings_get_bool("lastfm_get_player")) {
$url = "http://www.last.fm/user/$user";
$content = $ua->get($url)->content;
if ($content =~ m!<span class="source">(.*?)</span>!) {
$_ = $1;
s/<[^>]*>//mgs;
$data{'player'} = $_;
}
else {
print "Couldn't find the player even though lastfm_get_player was set" if DEBUG;
}
}
print Dumper \%data if DEBUG;
print Dumper "Output pattern before: $nowplaying" if DEBUG;
$nowplaying =~ s/(%\((.*?%(\w+).?)\))/($data{$3} ? $2 : "")/ge;
print Dumper "Output pattern after: $nowplaying" if DEBUG;
$nowplaying =~ s/%$fields/$data{$1}/ge;
decode_entities($nowplaying);
Encode::from_to($nowplaying, "utf-8", Irssi::settings_get_str("term_charset"));
return $nowplaying;
}
sub lastfm_blocking {
my ($witem, $user) = @_;
my $nowplaying = lastfm_nowplaying($user, undef, undef, $witem);
lastfm_print($witem, $nowplaying);
}
sub lastfm_forky {
my ($witem, $user) = @_;
if ($waiting_for_reply) {
lastfm_print(Irssi::active_win(), "We are still waiting for Last.fm to return our results");
return;
}
# pipe is used to get the reply from child
my ($rh, $wh);
pipe($rh, $wh);
# non-blocking host lookups with fork()ing
my $pid = fork();
if (!defined($pid)) {
Irssi::print("Can't fork() - aborting");
close($rh);
close($wh);
return;
}
$waiting_for_reply = 1;
if ($pid > 0) {
# parent, wait for reply
close($wh);
Irssi::pidwait_add($pid);
$pipe_tag = Irssi::input_add(fileno($rh), INPUT_READ, \&pipe_input, [$witem, $rh]);
return;
}
my $text;
eval {
# child, do the lookup
$text = lastfm_nowplaying($user);
};
if (!$text) {
$text = "ERROR: Error message: $!";
}
eval {
# write the reply
print($wh $text);
close($wh);
};
POSIX::_exit(1);
}
sub pipe_input {
my ($witem, $rh) = @{$_[0]};
my $text = <$rh>;
close($rh);
Irssi::input_remove($pipe_tag);
$pipe_tag = -1;
undef $waiting_for_reply;
lastfm_print($witem, $text);
}
sub lastfm_print {
my ($witem, $text, $tabbed) = @_;
# Fugly error handling
if ($text =~ s/^ERROR: //) {
Irssi::active_win()->print($text);
return;
}
if ($tabbed) {
return $text;
}
elsif (defined $witem->{type} && $witem->{type} =~ /^QUERY|CHANNEL$/) {
if (Irssi::settings_get_bool("lastfm_use_action")) {
$witem->command("me $text");
}
else {
$witem->command("say $text");
}
}
else {
Irssi::active_win()->print($text);
}
}
Irssi::command_bind('np', sub {
my ($data, $server, $witem) = @_;
$data =~ s/ .*//;
$data ||= 0;
if (DEBUG) {
lastfm_blocking($witem, $data);
}
else {
lastfm_forky($witem, $data);
}
}, 'lastfm');
Irssi::signal_add_last 'complete word' => sub {
my ($complist, $window, $word, $linestart, $want_space) = @_;
my $is_tabbed = 1;
my $tab_fields = $fields;
$tab_fields =~ s/\(/(nowplaying|np|lastfm|lfm|/;
if ($word =~ /(\%(?:$tab_fields))\(?(\w+)?\)?/) {
my ($nowplaying, $user) = ($1, $3);
undef $nowplaying if ($nowplaying =~ /nowplaying|np/);
$nowplaying = lastfm_nowplaying($user, $is_tabbed, $nowplaying);
if (lastfm_print(Irssi::active_win(), $nowplaying, 1)) {
push @$complist, "$nowplaying";
}
}
};

View File

@ -0,0 +1,611 @@
# for documentation: see http://wouter.coekaerts.be/site/irssi/nicklist
use Irssi;
use strict;
use IO::Handle; # for (auto)flush
use Fcntl; # for sysopen
use vars qw($VERSION %IRSSI);
$VERSION = '0.4.6';
%IRSSI = (
authors => 'Wouter Coekaerts',
contact => 'coekie@irssi.org',
name => 'nicklist',
description => 'draws a nicklist to another terminal, or at the right of your irssi in the same terminal',
license => 'GPLv2',
url => 'http://wouter.coekaerts.be/irssi',
changed => '29/06/2004'
);
sub cmd_help {
print ( <<EOF
Commands:
NICKLIST HELP
NICKLIST SCROLL <nr of lines>
NICKLIST SCREEN
NICKLIST FIFO
NICKLIST OFF
NICKLIST UPDATE
For help see: http://wouter.coekaerts.be/site/irssi/nicklist
in short:
1. FIFO MODE
- in irssi: /NICKLIST FIFO (only the first time, to create the fifo)
- in a shell, in a window where you want the nicklist: cat ~/.irssi/nicklistfifo
- back in irssi:
/SET nicklist_heigth <height of nicklist>
/SET nicklist_width <width of nicklist>
/NICKLIST FIFO
2. SCREEN MODE
- start irssi inside screen ("screen irssi")
- /NICKLIST SCREEN
EOF
);
}
my $prev_lines = 0; # number of lines in previous written nicklist
my $scroll_pos = 0; # scrolling position
my $cursor_line; # line the cursor is currently on
my ($OFF, $SCREEN, $FIFO) = (0,1,2); # modes
my $mode = $OFF; # current mode
my $need_redraw = 0; # nicklist needs redrawing
my $screen_resizing = 0; # terminal is being resized
my $active_channel; # (REC)
my @nicklist=(); # array of hashes, containing the internal nicklist of the active channel
# nick => realnick
# mode =>
my ($MODE_OP, $MODE_HALFOP, $MODE_VOICE, $MODE_NORMAL) = (0,1,2,3);
# status =>
my ($STATUS_NORMAL, $STATUS_JOINING, $STATUS_PARTING, $STATUS_QUITING, $STATUS_KICKED, $STATUS_SPLIT) = (0,1,2,3,4,5);
# text => text to be printed
# cmp => text used to compare (sort) nicks
# 'cached' settings
my ($screen_prefix, $irssi_width, @prefix_mode, @prefix_status, $height, $nicklist_width);
sub read_settings {
($screen_prefix = Irssi::settings_get_str('nicklist_screen_prefix')) =~ s/\\e/\033/g;
($prefix_mode[$MODE_OP] = Irssi::settings_get_str('nicklist_prefix_mode_op')) =~ s/\\e/\033/g;
($prefix_mode[$MODE_HALFOP] = Irssi::settings_get_str('nicklist_prefix_mode_halfop')) =~ s/\\e/\033/g;
($prefix_mode[$MODE_VOICE] = Irssi::settings_get_str('nicklist_prefix_mode_voice')) =~ s/\\e/\033/g;
($prefix_mode[$MODE_NORMAL] = Irssi::settings_get_str('nicklist_prefix_mode_normal')) =~ s/\\e/\033/g;
if ($mode != $SCREEN) {
$height = Irssi::settings_get_int('nicklist_height');
}
my $new_nicklist_width = Irssi::settings_get_int('nicklist_width');
if ($new_nicklist_width != $nicklist_width && $mode == $SCREEN) {
sig_terminal_resized();
}
$nicklist_width = $new_nicklist_width;
}
sub update {
read_settings();
make_nicklist();
}
##################
##### OUTPUT #####
##################
### off ###
sub cmd_off {
if ($mode == $SCREEN) {
screen_stop();
} elsif ($mode == $FIFO) {
fifo_stop();
}
}
### fifo ###
sub cmd_fifo_start {
read_settings();
my $path = Irssi::settings_get_str('nicklist_fifo_path');
unless (-p $path) { # not a pipe
if (-e _) { # but a something else
die "$0: $path exists and is not a pipe, please remove it\n";
} else {
require POSIX;
POSIX::mkfifo($path, 0666) or die "can\'t mkfifo $path: $!";
Irssi::print("Fifo created. Start reading it (\"cat $path\") and try again.");
return;
}
}
if (!sysopen(FIFO, $path, O_WRONLY | O_NONBLOCK)) { # or die "can't write $path: $!";
Irssi::print("Couldn\'t write to the fifo ($!). Please start reading the fifo (\"cat $path\") and try again.");
return;
}
FIFO->autoflush(1);
print FIFO "\033[2J\033[1;1H"; # erase screen & jump to 0,0
$cursor_line = 0;
if ($mode == $SCREEN) {
screen_stop();
}
$mode = $FIFO;
make_nicklist();
}
sub fifo_stop {
close FIFO;
$mode = $OFF;
Irssi::print("Fifo closed.");
}
### screen ###
sub cmd_screen_start {
if (!defined($ENV{'STY'})) {
Irssi::print 'screen not detected, screen mode only works inside screen';
return;
}
read_settings();
if ($mode == $SCREEN) {return;}
if ($mode == $FIFO) {
fifo_stop();
}
$mode = $SCREEN;
Irssi::signal_add_last('gui print text finished', \&sig_gui_print_text_finished);
Irssi::signal_add_last('gui page scrolled', \&sig_page_scrolled);
Irssi::signal_add('terminal resized', \&sig_terminal_resized);
screen_size();
make_nicklist();
}
sub screen_stop {
$mode = $OFF;
Irssi::signal_remove('gui print text finished', \&sig_gui_print_text_finished);
Irssi::signal_remove('gui page scrolled', \&sig_page_scrolled);
Irssi::signal_remove('terminal resized', \&sig_terminal_resized);
system 'screen -x '.$ENV{'STY'}.' -X fit';
}
sub screen_size {
if ($mode != $SCREEN) {
return;
}
$screen_resizing = 1;
# fit screen
system 'screen -x '.$ENV{'STY'}.' -X fit';
# get size (from perldoc -q size)
my ($winsize, $row, $col, $xpixel, $ypixel);
eval 'use Term::ReadKey; ($col, $row, $xpixel, $ypixel) = GetTerminalSize';
# require Term::ReadKey 'GetTerminalSize';
# ($col, $row, $xpixel, $ypixel) = Term::ReadKey::GetTerminalSize;
#};
if ($@) { # no Term::ReadKey, try the ugly way
eval {
require 'sys/ioctl.ph';
# without this reloading doesn't work. workaround for some unknown bug
do 'asm/ioctls.ph';
};
# ugly way not working, let's try something uglier, the dg-hack(tm) (constant for linux only?)
if($@) { no strict 'refs'; *TIOCGWINSZ = sub { return 0x5413 } }
unless (defined &TIOCGWINSZ) {
die "Term::ReadKey not found, and ioctl 'workaround' failed. Install the Term::ReadKey perl module to use screen mode.\n";
}
open(TTY, "+</dev/tty") or die "No tty: $!";
unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
die "Term::ReadKey not found, and ioctl 'workaround' failed ($!). Install the Term::ReadKey perl module to use screen mode.\n";
}
close(TTY);
($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
}
# set screen width
$irssi_width = $col-$nicklist_width-1;
$height = $row-1;
# on some recent systems, "screen -X fit; screen -X width -w 50" doesn't work, needs a sleep in between the 2 commands
# so we wait a second before setting the width
Irssi::timeout_add_once(1000, sub {
my ($new_irssi_width) = @_;
system 'screen -x '.$ENV{'STY'}.' -X width -w ' . $new_irssi_width;
# and then we wait another second for the resizing, and then redraw.
Irssi::timeout_add_once(1000,sub {$screen_resizing = 0; redraw()}, []);
}, $irssi_width);
}
sub sig_terminal_resized {
if ($screen_resizing) {
return;
}
$screen_resizing = 1;
Irssi::timeout_add_once(1000,\&screen_size,[]);
}
### both ###
sub nicklist_write_start {
if ($mode == $SCREEN) {
print STDERR "\033P\033[s\033\\"; # save cursor
}
}
sub nicklist_write_end {
if ($mode == $SCREEN) {
print STDERR "\033P\033[u\033\\"; # restore cursor
}
}
sub nicklist_write_line {
my ($line, $data) = @_;
if ($mode == $SCREEN) {
print STDERR "\033P\033[" . ($line+1) . ';'. ($irssi_width+1) .'H'. $screen_prefix . $data . "\033\\";
} elsif ($mode == $FIFO) {
$data = "\033[m$data"; # reset color
if ($line == $cursor_line+1) {
$data = "\n$data"; # next line
} elsif ($line == $cursor_line) {
$data = "\033[1G".$data; # back to beginning of line
} else {
$data = "\033[".($line+1).";0H".$data; # jump
}
$cursor_line=$line;
print(FIFO $data) or fifo_stop();
}
}
# recalc the text of the nicklist item
sub calc_text {
my ($nick) = @_;
my $tmp = $nicklist_width-3;
(my $text = $nick->{'nick'}) =~ s/^(.{$tmp})..+$/$1\033[34m~\033[m/;
$nick->{'text'} = $prefix_mode[$nick->{'mode'}] . $text . (' ' x ($nicklist_width-length($nick->{'nick'})-1));
$nick->{'cmp'} = $nick->{'mode'}.lc($nick->{'nick'});
}
# redraw the given nick (nr) if it is visible
sub redraw_nick_nr {
my ($nr) = @_;
my $line = $nr - $scroll_pos;
if ($line >= 0 && $line < $height) {
nicklist_write_line($line, $nicklist[$nr]->{'text'});
}
}
# nick was inserted, redraw area if necessary
sub draw_insert_nick_nr {
my ($nr) = @_;
my $line = $nr - $scroll_pos;
if ($line < 0) { # nick is inserted above visible area
$scroll_pos++; # 'scroll' down :)
} elsif ($line < $height) { # line is visible
if ($mode == $SCREEN) {
need_redraw();
} elsif ($mode == $FIFO) {
my $data = "\033[m\033[L". $nicklist[$nr]->{'text'}; # reset color & insert line & write nick
if ($line == $cursor_line) {
$data = "\033[1G".$data; # back to beginning of line
} else {
$data = "\033[".($line+1).";1H".$data; # jump
}
$cursor_line=$line;
print(FIFO $data) or fifo_stop();
if ($prev_lines < $height) {
$prev_lines++; # the nicklist has one line more
}
}
}
}
sub draw_remove_nick_nr {
my ($nr) = @_;
my $line = $nr - $scroll_pos;
if ($line < 0) { # nick removed above visible area
$scroll_pos--; # 'scroll' up :)
} elsif ($line < $height) { # line is visible
if ($mode == $SCREEN) {
need_redraw();
} elsif ($mode == $FIFO) {
#my $data = "\033[m\033[L[i$line]". $nicklist[$nr]->{'text'}; # reset color & insert line & write nick
my $data = "\033[M"; # delete line
if ($line != $cursor_line) {
$data = "\033[".($line+1)."d".$data; # jump
}
$cursor_line=$line;
print(FIFO $data) or fifo_stop();
if (@nicklist-$scroll_pos >= $height) {
redraw_nick_nr($scroll_pos+$height-1);
}
}
}
}
# redraw the whole nicklist
sub redraw {
$need_redraw = 0;
#make_nicklist();
nicklist_write_start();
my $line = 0;
### draw nicklist ###
for (my $i=$scroll_pos;$line < $height && $i < @nicklist; $i++) {
nicklist_write_line($line++, $nicklist[$i]->{'text'});
}
### clean up other lines ###
my $real_lines = $line;
while($line < $prev_lines) {
nicklist_write_line($line++,' ' x $nicklist_width);
}
$prev_lines = $real_lines;
nicklist_write_end();
}
# redraw (with little delay to avoid redrawing to much)
sub need_redraw {
if(!$need_redraw) {
$need_redraw = 1;
Irssi::timeout_add_once(10,\&redraw,[]);
}
}
sub sig_page_scrolled {
$prev_lines = $height; # we'll need to redraw everything if he scrolled up
need_redraw;
}
# redraw (with delay) if the window is visible (only in screen mode)
sub sig_gui_print_text_finished {
if ($need_redraw) { # there's already a redraw 'queued'
return;
}
my $window = @_[0];
if ($window->{'refnum'} == Irssi::active_win->{'refnum'} || Irssi::settings_get_str('nicklist_screen_split_windows') eq '*') {
need_redraw;
return;
}
foreach my $win (split(/[ ,]/, Irssi::settings_get_str('nicklist_screen_split_windows'))) {
if ($window->{'refnum'} == $win || $window->{'name'} eq $win) {
need_redraw;
return;
}
}
}
####################
##### NICKLIST #####
####################
# returns the position of the given nick(as string) in the (internal) nicklist
sub find_nick {
my ($nick) = @_;
for (my $i=0;$i < @nicklist; $i++) {
if ($nicklist[$i]->{'nick'} eq $nick) {
return $i;
}
}
return -1;
}
# find position where nick should be inserted into the list
sub find_insert_pos {
my ($cmp)= @_;
for (my $i=0;$i < @nicklist; $i++) {
if ($nicklist[$i]->{'cmp'} gt $cmp) {
return $i;
}
}
return scalar(@nicklist); #last
}
# make the (internal) nicklist (@nicklist)
sub make_nicklist {
@nicklist = ();
$scroll_pos = 0;
### get & check channel ###
my $channel = Irssi::active_win->{active};
if (!$channel || (ref($channel) ne 'Irssi::Irc::Channel' && ref($channel) ne 'Irssi::Silc::Channel' && ref($channel) ne 'Irssi::Xmpp::Channel') || $channel->{'type'} ne 'CHANNEL' || ($channel->{chat_type} ne 'SILC' && !$channel->{'names_got'}) ) {
$active_channel = undef;
# no nicklist
} else {
$active_channel = $channel;
### make nicklist ###
my $thisnick;
foreach my $nick (sort {(($a->{'op'}?'1':$a->{'halfop'}?'2':$a->{'voice'}?'3':'4').lc($a->{'nick'}))
cmp (($b->{'op'}?'1':$b->{'halfop'}?'2':$b->{'voice'}?'3':'4').lc($b->{'nick'}))} $channel->nicks()) {
$thisnick = {'nick' => $nick->{'nick'}, 'mode' => ($nick->{'op'}?$MODE_OP:$nick->{'halfop'}?$MODE_HALFOP:$nick->{'voice'}?$MODE_VOICE:$MODE_NORMAL)};
calc_text($thisnick);
push @nicklist, $thisnick;
}
}
need_redraw();
}
# insert nick(as hash) into nicklist
# pre: cmp has to be calculated
sub insert_nick {
my ($nick) = @_;
my $nr = find_insert_pos($nick->{'cmp'});
splice @nicklist, $nr, 0, $nick;
draw_insert_nick_nr($nr);
}
# remove nick(as nr) from nicklist
sub remove_nick {
my ($nr) = @_;
splice @nicklist, $nr, 1;
draw_remove_nick_nr($nr);
}
###################
##### ACTIONS #####
###################
# scroll the nicklist, arg = number of lines to scroll, positive = down, negative = up
sub cmd_scroll {
if (!$active_channel) { # not a channel active
return;
}
my @nicks=Irssi::active_win->{active}->nicks;
my $nick_count = scalar(@nicks)+0;
my $channel = Irssi::active_win->{active};
if (!$channel || $channel->{type} ne 'CHANNEL' || !$channel->{names_got} || $nick_count <= Irssi::settings_get_int('nicklist_height')) {
return;
}
$scroll_pos += @_[0];
if ($scroll_pos > $nick_count - $height) {
$scroll_pos = $nick_count - $height;
}
if ($scroll_pos <= 0) {
$scroll_pos = 0;
}
need_redraw();
}
sub is_active_channel {
my ($server,$channel) = @_; # (channel as string)
return ($server && $server->{'tag'} eq $active_channel->{'server'}->{'tag'} && $server->channel_find($channel) && $active_channel && $server->channel_find($channel)->{'name'} eq $active_channel->{'name'});
}
sub sig_channel_wholist { # this is actualy a little late, when the names are received would be better
my ($channel) = @_;
if (Irssi::active_win->{'active'} && Irssi::active_win->{'active'}->{'name'} eq $channel->{'name'}) { # the channel joined is active
make_nicklist
}
}
sub sig_join {
my ($server,$channel,$nick,$address) = @_;
if (!is_active_channel($server,$channel)) {
return;
}
my $newnick = {'nick' => $nick, 'mode' => $MODE_NORMAL};
calc_text($newnick);
insert_nick($newnick);
}
sub sig_kick {
my ($server, $channel, $nick, $kicker, $address, $reason) = @_;
if (!is_active_channel($server,$channel)) {
return;
}
my $nr = find_nick($nick);
if ($nr == -1) {
Irssi::print("nicklist warning: $nick was kicked from $channel, but not found in nicklist");
} else {
remove_nick($nr);
}
}
sub sig_part {
my ($server,$channel,$nick,$address, $reason) = @_;
if (!is_active_channel($server,$channel)) {
return;
}
my $nr = find_nick($nick);
if ($nr == -1) {
Irssi::print("nicklist warning: $nick has parted $channel, but was not found in nicklist");
} else {
remove_nick($nr);
}
}
sub sig_quit {
my ($server,$nick,$address, $reason) = @_;
if ($server->{'tag'} ne $active_channel->{'server'}->{'tag'}) {
return;
}
my $nr = find_nick($nick);
if ($nr != -1) {
remove_nick($nr);
}
}
sub sig_nick {
my ($server, $newnick, $oldnick, $address) = @_;
if ($server->{'tag'} ne $active_channel->{'server'}->{'tag'}) {
return;
}
my $nr = find_nick($oldnick);
if ($nr != -1) { # if nick was found (nickchange is in current channel)
my $nick = $nicklist[$nr];
remove_nick($nr);
$nick->{'nick'} = $newnick;
calc_text($nick);
insert_nick($nick);
}
}
sub sig_mode {
my ($channel, $nick, $setby, $mode, $type) = @_; # (nick and channel as rec)
if ($channel->{'server'}->{'tag'} ne $active_channel->{'server'}->{'tag'} || $channel->{'name'} ne $active_channel->{'name'}) {
return;
}
my $nr = find_nick($nick->{'nick'});
if ($nr == -1) {
Irssi::print("nicklist warning: $nick->{'nick'} had mode set on $channel->{'name'}, but was not found in nicklist");
} else {
my $nicklist_item = $nicklist[$nr];
remove_nick($nr);
$nicklist_item->{'mode'} = ($nick->{'op'}?$MODE_OP:$nick->{'halfop'}?$MODE_HALFOP:$nick->{'voice'}?$MODE_VOICE:$MODE_NORMAL);
calc_text($nicklist_item);
insert_nick($nicklist_item);
}
}
##### command binds #####
Irssi::command_bind 'nicklist' => sub {
my ( $data, $server, $item ) = @_;
$data =~ s/\s+$//g;
Irssi::command_runsub ('nicklist', $data, $server, $item ) ;
};
Irssi::signal_add_first 'default command nicklist' => sub {
# gets triggered if called with unknown subcommand
cmd_help();
};
Irssi::command_bind('nicklist update',\&update);
Irssi::command_bind('nicklist help',\&cmd_help);
Irssi::command_bind('nicklist scroll',\&cmd_scroll);
Irssi::command_bind('nicklist fifo',\&cmd_fifo_start);
Irssi::command_bind('nicklist screen',\&cmd_screen_start);
Irssi::command_bind('nicklist screensize',\&screen_size);
Irssi::command_bind('nicklist off',\&cmd_off);
##### signals #####
Irssi::signal_add_last('window item changed', \&make_nicklist);
Irssi::signal_add_last('window changed', \&make_nicklist);
Irssi::signal_add_last('channel wholist', \&sig_channel_wholist);
Irssi::signal_add_first('message join', \&sig_join); # first, to be before ignores
Irssi::signal_add_first('message part', \&sig_part);
Irssi::signal_add_first('message kick', \&sig_kick);
Irssi::signal_add_first('message quit', \&sig_quit);
Irssi::signal_add_first('message nick', \&sig_nick);
Irssi::signal_add_first('message own_nick', \&sig_nick);
Irssi::signal_add_first('nick mode changed', \&sig_mode);
Irssi::signal_add('setup changed', \&read_settings);
##### settings #####
Irssi::settings_add_str('nicklist', 'nicklist_screen_prefix', '\e[m ');
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_op', '\e[32m@\e[39m');
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_halfop', '\e[34m%\e[39m');
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_voice', '\e[33m+\e[39m');
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_normal', ' ');
Irssi::settings_add_int('nicklist', 'nicklist_width',11);
Irssi::settings_add_int('nicklist', 'nicklist_height',24);
Irssi::settings_add_str('nicklist', 'nicklist_fifo_path', Irssi::get_irssi_dir . '/nicklistfifo');
Irssi::settings_add_str('nicklist', 'nicklist_screen_split_windows', '');
Irssi::settings_add_str('nicklist', 'nicklist_automode', '');
read_settings();
if (uc(Irssi::settings_get_str('nicklist_automode')) eq 'SCREEN') {
cmd_screen_start();
} elsif (uc(Irssi::settings_get_str('nicklist_automode')) eq 'FIFO') {
cmd_fifo_start();
}

View File

@ -0,0 +1,79 @@
##
## Put me in ~/.irssi/scripts, and then execute the following in irssi:
##
## /load perl
## /script load notify
##
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);
use HTML::Entities;
$VERSION = "0.01";
%IRSSI = (
authors => 'Luke Macken, Paul W. Frields',
contact => 'lewk@csh.rit.edu, stickster@gmail.com',
name => 'notify.pl',
description => 'Use libnotify to alert user to hilighted messages',
license => 'GNU General Public License',
url => 'http://lewk.org/log/code/irssi-notify',
);
Irssi::settings_add_str('notify', 'notify_icon', 'gtk-dialog-info');
Irssi::settings_add_str('notify', 'notify_time', '5000');
sub sanitize {
my ($text) = @_;
$text =~ s/\$/\\\$/g;
$text =~ s/`/\\"/g;
encode_entities($text);
return $text;
}
sub notify {
my ($server, $summary, $message) = @_;
# Make the message entity-safe
$summary = sanitize($summary);
$message = sanitize($message);
my $cmd = "EXEC - notify-send" .
" -i " . Irssi::settings_get_str('notify_icon') .
" -t " . Irssi::settings_get_str('notify_time') .
" -- '" . $summary . "'" .
" '" . $message . "'";
$server->command($cmd);
}
sub print_text_notify {
my ($dest, $text, $stripped) = @_;
my $server = $dest->{server};
return if (!$server || !($dest->{level} & MSGLEVEL_HILIGHT));
my $sender = $stripped;
$sender =~ s/^\<.([^\>]+)\>.+/\1/ ;
$stripped =~ s/^\<.[^\>]+\>.// ;
my $summary = $dest->{target} . ": " . $sender;
notify($server, $summary, $stripped);
}
sub message_private_notify {
my ($server, $msg, $nick, $address) = @_;
return if (!$server);
notify($server, "Private message from ".$nick, $msg);
}
sub dcc_request_notify {
my ($dcc, $sendaddr) = @_;
my $server = $dcc->{server};
return if (!$dcc);
notify($server, "DCC ".$dcc->{type}." request", $dcc->{nick});
}
Irssi::signal_add('print text', 'print_text_notify');
Irssi::signal_add('message private', 'message_private_notify');
Irssi::signal_add('dcc request', 'dcc_request_notify');

601
files/irc/.irssi/weed.theme Normal file
View File

@ -0,0 +1,601 @@
# __ __ ___ ___ ___
# | T__T T / _] / _]| \
# | | | | / [_ / [_ | \
# | | | |Y _]Y _]| D Y
# l ` ' !| [_ | [_ | |
# \ / | T| T| |
# \_/\_/ l_____jl_____jl_____j
#
# Beautiful X-Chat inspired irssi theme by rolle @ QuakeNet
# http://roni.laukkarinen.info
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
#
# NOTE FOR FINNISH USERS:
#
# Jos olet suomalainen ja pidät teemasta, joini ihmeessä
# kanavalle #pulina quakenetissä. Lisää tietoa kanavasta:
# http://www.pulina.fi
#
# Ja jos tykkäsit, mikset sanoisi kiitokset privassa,
# jotta tiedän että tätä käyttää joku :-)
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
#
# Inspired by X-Chat.
# (not the xchat-irssi-theme: THE X-Chat-theme)
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
#
# IMPORTANT:
#
# Make sure this is the latest version and use the tutorial
# provided in https://github.com/ronilaukkarinen/weed
#
# Without actions in the tutorial the theme WILL NOT WORK
# PROPERLY!
#
# Always backup your ~/.irssi -folder before trying!
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
default_color = "-1";
# Timestamp/servertag to the end, not first
info_eol = "false";
replaces = { "[]=" = "$*"; };
abstracts = {
# Disabling client crap
# msglevel_clientcrap = "%p*%K | %W%K$*";
# For awaybar.pl
sb_awaybar = " %1 {sb %W$0-} %N";
# For usercount.pl
sb_usercount = " %0 {sb %G$0} %N ";
sb_uc_ircops = "%r*$*";
sb_uc_ops = "%Ro%K$*";
sb_uc_halfops = "%Bho%b$*";
sb_uc_voices = "%Gv%K$*";
sb_uc_normal = "%w$*%K";
sb_uc_space = " ";
line_start = "";
timestamp = " %_$* ";
hilight = "$*";
error = "$*";
channel = "$*";
nick = "$*";
nickhost = "$*";
server = "$*";
comment = "$*";
reason = "{comment $*}";
mode = "{comment $*}";
channick_hilight = "$*";
chanhost_hilight = "{nickhost $*}";
channick = "$*";
chanhost = "{nickhost $*}";
channelhilight = "$*";
ban = "$*";
# All of below: $0 = mode, $1 = nick
msgnick = "$0$1- %|";
ownmsgnick = "{msgnick %G$1%K%_|}%w";
ownnick = "$*";
# v3.05-hilight is now on red background and white text
# Can be seen better in communicator phone.
# (if you liked the old fashioned hilight, comment out next lines below and enable the noted ones)
#
pubmsgnick = "{msgnick %r$1%K%_|}%w";
pubnick = "$*";
pubmsgmenick = "%1%W{msgnick $1-|}";
menick = "$*%n";
# $0 = hilight color, $1 = mode, $2 = nick
pubmsghinick = "%1%W{msgnick $2-|}";
# Got rid of on version 3.05:
#
#pubmsgnick = "{msgnick %r$1%K%_|}%w";
#pubnick = "$*";
#pubmsgmenick = "%G%K{msgnick $1-%R|}%0%W";
#menick = "$*%n";
#pubmsghinick = "%G%K{msgnick $2-%R|}%0%W";
msgchannel = ":$*";
# $0 = nick, $1 = host
#
# msn-styled:
#privmsg = "%:[$0($1-)]";
privmsg = "[$0($1-)]";
#
# $0 = "msg",
# $1 = target nick
#
#
# msn-styled:
#ownprivmsg = "%:%w[$0(%1-)]";
ownprivmsg = "%w[$0(%1-)]";
ownprivmsgnick = "{msgnick $*}";
#
# msn-styled privmsgs:
#ownprivnick = "%B$*%K says:%:";
#privmsgnick = "%r$*%K says:%:";
ownprivnick = "%B$*%K%_|";
privmsgnick = "%r$*%K%_|";
action_core = " %C*%K | %C$0- ";
action = "%C{action_core $*}%W";
ownaction = "{action $*}";
ownaction_target = "{action_core $*}:$1 ";
pvtaction = " (>>>) $* ";
pvtaction_query = "{action $*}";
pubaction = "{action $*}";
ownnotice = "[$0($1-)] ";
notice = "$*";
whois = "%# $[8]0 : $1-";
pubnotice_channel = ":$*";
# pvtnotice_host = "($*)";
pvtnotice_host = "";
servernotice = "%r!$* %K";
ownctcp = "[$0($1-)] ";
ctcp = "$*";
wallop = "$*: ";
wallop_nick = "$*";
wallop_action = " * $* ";
netsplit = "$*";
netjoin = "$*";
names_prefix = " %p*%K | ";
names_nick = "$0$1- ";
names_nick_op = "{names_nick $*}";
names_nick_halfop = "{names_nick $*}";
names_nick_voice = "{names_nick $*}";
names_users = "$*";
names_channel = "%K$*";
dcc = "$*";
dccfile = "$*";
dccownmsg = "[$0($1-)] ";
dccownnick = "$*";
dccownquerynick = "$*";
dccownaction = "{action $*}";
dccownaction_target = "{action_core $0}:$1 ";
dccmsg = "[$1-($0)] ";
dccquerynick = "$*";
dccaction = " (*dcc*) $* %|";
sb_background = "%N";
sb_window_bg = "%k%0";
sb_default_bg = "%N";
sb_prompt_bg = "%N";
sb_info_bg = "%N";
sb_topic_bg = "%N";
sbstart = "";
sbend = " ";
topicsbstart = "{sbstart $*}";
topicsbend = "{sbend $*}";
#prompt = "%r$*%r: ";
prompt = "";
sb = "%K$*%K";
sbmode = "";
sbaway = "%raway!%n";
sbservertag = "$0%K";
sbnickmode = "";
sb_act_sep = "%w$*%n";
sb_act_text = "%K$*%n";
sb_act_msg = "%2%W$*%n";
sb_act_hilight = "%5%W $0%W$1-%n";
sb_act_hilight_color = "%5%W$0%W$1-%n";
};
formats = {
"fe-common/core" = {
query_start = " %g*%K | %gStarting query%W on {server $1} w/ {nick $0}";
join = " %g*%K | %K{channick_hilight $0} %gjoined%K {channel $2}";
part = " %r*%K | %K{channick $0} %rleft%K {channel $2}";
quit = " %r*%K | %K{channick $0} %rquit%k %w(%KReason: {reason $2}%w)";
quit_once = " %r*%K | %K{channick $0} [{chanhost $1}] %rquit%K %w(%KReason: \012{reason $2}%w)";
nick_changed = " %y*%K | %K{channick_hilight $0} %yis now known as%K {channick_hilight $1}";
own_msg = "{ownmsgnick $2 {ownnick $[-10]0}}%W$1";
own_msg_channel = "{ownmsgnick $3 {ownnick $[-10]0}{msgchannel $1}}%w%_$2";
pubmsg_me = "{pubmsgmenick $2 {menick $[-10]0}}%_$1";
pubmsg_me_channel = "{pubmsgmenick $3 {menick $[-10]0}{msgchannel $1}}$2";
pubmsg_hilight = "{pubmsghinick $0 $3 $[-10]1}$2";
pubmsg_hilight_channel = "{pubmsghinick $0 $4 $[-10]1{msgchannel $2}}$3";
pubmsg = "{pubmsgnick $2 {pubnick $nickcolor$[-10]0}}$1";
pubmsg_channel = "{pubmsgnick $3 {pubnick $[-10]0}{msgchannel $1}}$2";
# own_msg = "{ownmsgnick $2 {ownnick $[-10]0}}$1";
# own_msg_channel = "{ownmsgnick $3 {ownnick $[-10]0}{msgchannel $1}}$2";
#pubmsg_me = "{pubmsgmenick $2 {menick $[-9]0}}$1";
# pubmsg_me_channel = "{pubmsgmenick $3 {menick $[-10]0}{msgchannel $1}}$2";
# pubmsg_hilight = "{pubmsghinick $0 $3 $[-10]1}$2";
# pubmsg_hilight_channel = "{pubmsghinick $0 $4 $[-10]1{msgchannel $2}}$3";
# pubmsg = "{pubmsgnick $2 {pubnick \0030$0}}$1";
# pubmsg_channel = "{pubmsgnick $3 {pubnick $[-10]0}{msgchannel $1}}$2";
# line_start = "{line_start}";
# line_start_irssi = "{line_start}{hilight Irssi} %W|%n ";
line_start_irssi = "%K{line_start}";
timestamp = "%K%_{timestamp %_$Z} %W";
# servertag = "$[-11]0 %W|%n ";
servertag = "%K";
daychange = " %K%_00:00:00%p * | Day changed! Still up? Today is %%d. %%b, Anno Domini %%Y.%n";
talking_with = " %p*%K | %W%KYou are now having a conversation with {nick $0}.";
refnum_too_low = " %r*%K | Window number must be greater than one.";
error_server_sticky = " %r*%K | Window's server is %rsticky%K and it cannot be changed without -unsticky option";
set_server_sticky = " %g*%K | Window's server %gset sticky%K";
unset_server_sticky = " %g*%K | Window's server isn't sticky anymore";
window_name_not_unique = " %r*%K | Window names must be unique";
window_level = " %g*%K | Window level is now $0";
windowlist_header = "Ref Name Active item Server Level";
windowlist_line = "$[3]0 %|$[20]1 $[15]2 $[15]3 $4";
windowlist_footer = "";
windows_layout_saved = " %g*%K | Layout of windows is now %gremembered%K next time you start irssi";
windows_layout_reset = " %g*%K | Layout of windows %greset%K 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_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 = " %g*%K | %gLooking up%K {server $0}";
connecting = " %g*%K | %gConnecting%K to {server $0} [$1] port {hilight $2}";
connection_established = " %g*%K | Connection to {server $0} %gestablished%K";
cant_connect = " %r*%K | %rUnable to connect%K server {server $0} port {hilight $1} {reason $2}";
connection_lost = " %r*%K | %rConnection lost%K to {server $0}";
lag_disconnected = " %r*%K | %rNo PONG reply%K from server {server $0} in $1 seconds, disconnecting";
disconnected = " %r*%K | %rDisconnected%K from {server $0} {reason $1}";
server_quit = " %r*%K | %rDisconnecting%K from server {server $0}: {reason $1}";
server_changed = " %y*%K | %yChanged%K to {hilight $2} server {server $1}";
unknown_server_tag = " %r*%K | %rUnknown%K server tag {server $0}";
no_connected_servers = " %r*%K | %rNot connected%K 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 = " %g*%K | %gRemoved reconnection%K to server {server $0} port {hilight $1}";
server_reconnect_not_found = " %r*%K | Reconnection tag {server $0} %rnot found%K";
setupserver_added = " %g*%K | Server {server $0} %gsaved%K";
setupserver_removed = " %g*%K | Server {server $0} %gremoved%K";
setupserver_not_found = " %r*%K | Server {server $0} %rnot found%K";
your_nick = " %p*%K | %W%KYour nickname is {nick $0}";
kick = " %r*%K | {channick $0} was %rkicked%K from {channel $1} by {nick $2} ({reason $3})";
invite = " %y*%K | {channick_hilight $0} %yinvites%K you to {channel $1}";
not_invited = "You have not been invited to a channel!";
new_topic = " %y*%K | {channick_hilight $0} %ychanged topic%W of {channel $1} to: {hilight $2}";
topic_unset = " %y*%K | {channick_hilight $0} %yremoved the topic%W on {channel $1}";
your_nick_changed = " %y*%K | You %yare now better known as%K nickname {channick_hilight $1}";
talking_in = " %p*%K | %W%KYou are now on {channel $0}";
not_in_channels = " %p*%K | %W%KYou are not on any channels";
current_channel = " %p*%K | %W%KCurrent channel {channel $0}";
names = " %p*%K | %W%K{names_users Users: {names_channel $0}}: {comment $1}";
names_prefix = "%K{names_prefix $0}";
names_nick_op = "%p{names_nick_op $0 $1}";
names_nick_halfop = "%p{names_nick_halfop $0 $1}";
names_nick_voice = "%p{names_nick_voice $0 $1}";
names_nick = "%p{names_nick $0 $1}";
endofnames = " %p*%K | {channel $0}: Total: {hilight $1} users ({comment {hilight $2} ops, {hilight $3} halfops, \012 %p*%K | {hilight $4} voiced, {hilight $5} normal users.})";
chanlist_header = " %p*%K | %W%KYou are on the following channel:";
chanlist_line = "{channel $[-9]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 = "";
channel_move_notify = "{channel $0} is already joined in window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
# own_msg_private = "{ownprivmsg msg $0}$1";
# own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-9]2}}$1";
# msg_private = "{privmsg $0 $1}$2";
# msg_private_query = "{privmsgnick $[-9]0}$2";
no_msgs_got = " %p*%K | %W%KYou have not received a message from anyone yet";
no_msgs_sent = " %p*%K | %W%KYou have not sent a message to anyone yet";
query_stop = " %p*%K | %W%KA conversation with {nick $0} is ended.";
no_query = " %p*%K | %W%KNo query with {nick $0}";
query_server_changed = " %y*%K | Query with {nick $0} %ychanged%K to server {server $1}";
query_move_notify = " %p*%K | %W%KQuery with {nick $0} is already created to window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
hilight_header = " %p*%K | %W%KHighlights:";
hilight_line = "$[-4]0 $1 $2 $3$4$5";
hilight_footer = "";
hilight_not_found = " %r*%K | Highlight %rnot found%K: $0";
hilight_removed = " %g*%K | Highlight %gremoved%K: $0";
alias_added = " %g*%K | Alias $0 %gadded%K";
alias_removed = " %g*%K | Alias $0 %gremoved%K";
alias_not_found = " %r*%K | %rNo such%K alias: $0";
aliaslist_header = " %p*%K | %W%KAliases:";
aliaslist_line = "$[10]0 $1";
aliaslist_footer = "";
log_opened = " %g*%K | Log file {hilight $0} %gopened%K";
log_closed = " %g*%K | Log file {hilight $0} %gclosed%K";
log_create_failed = " %r*%K | %rCouldn't create%K log file {hilight $0}: $1";
log_locked = " %r*%K | Log file {hilight $0} is %rlocked%K, probably by another running Irssi";
log_not_open = " %r*%K | Log file {hilight $0} %rnot open%K";
log_started = " %g*%K | %gStarted%K logging to file {hilight $0}";
log_stopped = " %r*%K | %rStopped%K logging to file {hilight $0}";
log_list_header = " %p*%K | %W%KLogs:";
log_list = "%K$0 $1: $2 $3$4";
log_list_footer = "";
windowlog_file = " %g*%K | Window LOGFILE set to $0";
windowlog_file_logging = " %r*%K | %rCan't change%K window's logfile while log is on";
# no_away_msgs = " %r*%K | %rNo new%K messages in awaylog";
no_away_msgs = "";
# away_msgs = " %g*%K | {hilight $1} %gnew messages%K in awaylog:%K";
away_msgs = "";
module_header = "Module Type Submodules";
module_line = "$[!20]0 $[7]1 $2";
module_footer = "";
module_already_loaded = " %r*%K | Module {hilight $0/$1} already loaded";
module_not_loaded = " %r*%K | Module {hilight $0/$1} %ris not loaded%K";
module_load_error = " %r*%K | %rError%K loading module {hilight $0/$1}: $2";
module_invalid = " %r*%K | {hilight $0/$1} isn't Irssi module";
module_loaded = " %g*%K | %gLoaded%K module {hilight $0/$1}";
module_unloaded = " %r*%K | %rUnloaded%K module {hilight $0/$1}";
command_unknown = " %r*%K | %rUnknown%K command: $0";
command_ambiguous = " %r*%K | %rAmbiguous%K command: $0";
option_unknown = " %r*%K | %rUnknown%K option: $0";
option_ambiguous = " %r*%K | %rAmbiguous%K option: $0";
option_missing_arg = " %r*%K | %rMissing%K required argument for: $0";
not_enough_params = " %r*%K | %rNot enough%K parameters given";
not_connected = " %r*%K | %rNot connected%K to server";
not_joined = " %r*%K | %rNot joined%K to any channel";
chan_not_found = " %r*%K | %rNot joined%K to such channel";
chan_not_synced = " %r*%K | Channel %rnot fully synchronized%K yet, try again after a while";
illegal_proto = " %r*%K | Command isn't designed for the chat protocol of the active server";
not_good_idea = " %r*%K | Doing this is %rnot a good idea%K. Add -YES if you really mean it";
theme_saved = " %g*%K | Theme %gsaved%K to $0";
theme_save_failed = " %r*%K | %rError%K saving theme to $0: $1";
theme_not_found = " %r*%K | Theme {hilight $0} %rnot found%K";
theme_changed = " %y*%K | %yUsing%K now theme {hilight $0} ($1)";
window_theme = " %g*%K | %gUsing%K theme {hilight $0} in this window";
window_theme_default = " %r*%K | %rNo theme is set%K for this window";
window_theme_changed = " %y*%K | %yUsing%K now theme {hilight $0} ($1) in this window";
window_theme_removed = " %g*%K | %gRemoved%K theme from this window";
format_title = "%:[{hilight $0}] - [{hilight $1}]%:";
format_subtitle = "[{hilight $0}]";
format_item = "$0 = $1";
ignored = " %g*%K | %gIgnoring%K {hilight $1} from {nick $0}";
unignored = " %g*%K | %gUnignored%K {nick $0}";
ignore_not_found = " %g*%K | {nick $0} %gis not%K being ignored";
ignore_no_ignores = " %p*%K | %W%KThere are no ignores";
ignore_header = " %p*%K | %W%KIgnorance List:";
ignore_line = "$[-4]0 $1: $2 $3 $4";
ignore_footer = "";
unknown_chat_protocol = " %r*%K | %rUnknown%K chat protocol: $0";
unknown_chatnet = " %r*%K | %rUnknown%K chat network: $0 (create it with /IRCNET ADD)";
not_toggle = " %r*%K | Value must be either ON, OFF or TOGGLE";
perl_error = " %r*%K | Perl %rerror%K: $0";
bind_key = "$[!20]0 $1 $2";
bind_unknown_id = " %r*%K | %rUnknown%K bind action: $0";
config_saved = " %g*%K | %gSaved%K configuration to file $0";
config_reloaded = " %g*%K | %gReloaded%K configuration";
config_modified = " %p*%K | %W%KConfiguration file was modified since irssi was last started - do you want to overwrite the possible changes?";
glib_error = "{error GLib $0} $1";
overwrite_config = " %p*%K | %W%KOverwrite config (%gy%K/%rN%K)?";
set_title = "[{hilight $0}]";
set_item = "$0 = $1";
set_unknown = " %r*%K | %rUnknown%K setting $0";
set_not_boolean = " %r*%K | Setting {hilight $0} isn't boolean, use /SET";
translation_not_found = " %r*%K | %rError%K opening translation table file $0: $1";
translation_file_error = " %r*%K | %rError%K parsing translation table file $0";
#privat:
own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-10]2}}%W$1";
own_msg_private = "{ownprivmsg msg $0}%W$1";
msg_private_query = "{privmsgnick {privnick $[-10]0}} %W$2";
msg_private = "{privmsg $0 $1}%W$2";
# msn-styled:
# own_msg_private_query = "{ownprivnick $2}%w$1%:";
# msg_private_query = "{privmsgnick $0}%w$2%:";
};
"fe-common/irc/dcc" = {
dcc_list_header = "{line_start_irssi}{dcc DCC connections:}";
dcc_list_footer = "{line_start_irssi}{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 = " %g*%K | {dcc >>> DCC CTCP {hilight $1} %greceived%K from {hilight $0}: $2}";
dcc_chat = " %g*%K | {dcc DCC CHAT from {nick $0} [$1 port $2]}";
dcc_chat_channel = " %g*%K | {dcc DCC CHAT from {nick $0} [$1 port $2] %grequested%K in channel {channel $3}}";
dcc_chat_not_found = " %g*%K | {dcc No DCC CHAT %gconnection open%K to {nick $0}}";
dcc_chat_connected = " %g*%K | {dcc DCC CHAT connection with {nick $0} [$1 port $2] %gestablished%K}";
dcc_chat_disconnected = " %r*%K | {dcc DCC %rlost chat%K to {nick $0}}";
dcc_send = " %g*%K | {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes]}";
dcc_send_channel = " %g*%K | {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] %grequested%K in channel {channel $5}}";
dcc_send_exists = " %r*%K | {dcc DCC %ralready sending%K file {dccfile $0} for {nick $1}}";
dcc_send_not_found = " %r*%K | {dcc DCC %rnot sending%K file {dccfile $1} to {nick $0}}";
dcc_send_file_open_error = " %r*%K | {dcc DCC %rcan't open%K file {dccfile $0}: $1}";
dcc_send_connected = " %g*%K | {dcc DCC %gsending%K file {dccfile $0} for {nick $1} [$2 port $3]}";
dcc_send_complete = " %g*%K | {dcc DCC %gsent%K file {dccfile $0} [{hilight $1}kB] for {nick $2} in {hilight $3} secs [{hilight $4kB/s}]}";
dcc_send_aborted = " %r*%K | {dcc DCC %raborted%K sending file {dccfile $0} for {nick $1}}";
dcc_get_not_found = " %r*%K | {dcc DCC no file offered by {nick $0}}";
dcc_get_connected = " %g*%K | {dcc DCC %greceiving%K file {dccfile $0} from {nick $1} [$2 port $3]}";
dcc_get_complete = " %g*%K | {dcc DCC %greceived%K file {dccfile $0} [$1kB] from {nick $2} in {hilight $3} secs [$4kB/s]}";
dcc_get_aborted = " %r*%K | {dcc DCC %raborted%K receiving file {dccfile $0} from {nick $1}}";
dcc_unknown_ctcp = " %r*%K | {dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}";
dcc_unknown_reply = " %r*%K | {dcc DCC unknown reply {hilight $0} from {nick $1} [$2]}";
dcc_unknown_type = " %r*%K | {dcc DCC unknown type {hilight $0}}";
dcc_invalid_ctcp = " %r*%K | {dcc DCC received CTCP {hilight $0} with %rinvalid%K parameters from {nick $1}}";
dcc_connect_error = " %r*%K | {dcc DCC %rcan't connect%K to {hilight $0} port {hilight $1}}";
dcc_cant_create = " %r*%K | {dcc DCC %rcan't create%K file {dccfile $0}}";
dcc_rejected = " %r*%K | {dcc DCC $0 was %rrejected%K by {nick $1} [{hilight $2}]}";
dcc_request_send = " %g*%K | {dcc DCC $0 %grequest sent%K 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_line_chat = "%WChat ->%K {dcc $0 $1}";
dcc_list_line_file = "%WFile ->%K {dcc $0 $1 : $2k of $3k ($4%%) - $5kB/s - $6}";
};
"fe-text" = {
lastlog_too_long = " %p*%K | %W%K/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}";
refnum_not_found = " %r*%K | Window number $0 %rnot found%K";
window_too_small = " %r*%K | %rNot enough room%K to resize this window";
cant_hide_last = " %r*%K | You %rcan't hide%K the last window";
cant_hide_sticky_windows = " %r*%K | You %rcan't hide%K sticky windows (use /WINDOW STICK OFF)";
cant_show_sticky_windows = " %r*%K | You %rcan't show%K sticky windows (use /WINDOW STICK OFF)";
window_not_sticky = " %r*%K | Window %ris not%K sticky";
window_set_sticky = " %g*%K | Window %gset%K sticky";
window_unset_sticky = " %g*%K | Window %gis not%K sticky anymore";
window_info_sticky = "Sticky : $0";
window_scroll = " %g*%K | Window scroll mode is now $0";
window_scroll_unknown = " %r*%K | %rUnknown%K scroll mode $0, must be ON, OFF or DEFAULT";
};
"fe-common/irc" = {
netsplit = " %r*%K | %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits%K: $2";
netsplit_more = " %r*%K | %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits:%K $2 (+$3 more, use /NETSPLIT to show all of them)";
netsplit_join = " %g*%K | %g{netjoin netsplit}%K - %|%gjoins:%K $0";
netsplit_join_more = " %g*%K | %g{netjoin netsplit}%K - %|over, %gjoins:%K $0 (+$1 more)";
no_netsplits = " %p*%K | %W%KThere are no netsplits";
netsplits_header = "Nick Channel Server Splitted server";
netsplits_line = "$[9]0 $[10]1 $[20]2 $3";
netsplits_footer = "";
ircnet_added = " %g*%K | Ircnet $0 %gsaved%K";
ircnet_removed = " %g*%K | Ircnet $0 %gremoved%K";
ircnet_not_found = " %r*%K | Ircnet $0 %rnot found%K";
ircnet_header = " %p*%K | %W%KIrcnets:";
ircnet_line = "$0: $1";
ircnet_footer = "";
setupserver_header = "Server Port Network Settings";
setupserver_line = "%|$[!20]0 $[5]1 $[10]2 $3";
setupserver_footer = "";
joinerror_toomany = " %r*%K | Join %rfails%K: {channel $0} (You have joined to too many channels)";
joinerror_full = " %r*%K | Join %rfails%K: {channel $0} (Channel is full)";
joinerror_invite = " %r*%K | Join %rfails%K: {channel $0} (You must be invited)";
joinerror_banned = " %r*%K | Join %rfails%K: {channel $0} (You are banned)";
joinerror_bad_key = " %r*%K | Join %rfails%K: {channel $0} (Wrong channel key)";
joinerror_bad_mask = " %r*%K | Join %rfails%K: {channel $0} (Bad channel mask)";
joinerror_unavail = " %r*%K | Join %rfails%K: {channel $0} (Channel is temporarily unavailable)";
joinerror_duplicate = " %r*%K | Channel {channel $0} already exists - %rcannot create%K it";
channel_rejoin = " %r*%K | Channel {channel $0} is temporarily %runavailable%K. Setting up a rejoin, to not rejoin, use /rmrejoins.";
inviting = " %g*%K | %gInviting%K {nick $0} to {channel $1}";
channel_created = " %p*%K | %W%K{channel $0} is created %_$1%_";
url = " %p*%K | %W%KHome page for {channelhilight $0}: $1";
topic = " %p*%K | %WTopic for channel {channel $0}: %_$1%_";
no_topic = " %p*%K | %WNo topic for channel %_$0%_";
topic_info = " %p*%K | %WTopic is set by {channick_hilight $0} {mode $1}";
chanmode_change = " %y*%K | {nick $2} %ychanged mode%K on channel {channel $0} %w(%K{mode $1}%w)";
server_chanmode_change = " %g*%K | {netsplit ServerMode}%K/{channelhilight $0}: {mode $1} by {nick $2}";
channel_mode = " %y*%K | %yChannel settings%K: {mode $1}";
bantype = " %y*%K | Ban type %ychanged%K to {channel $0}";
no_bans = " %p*%K | %W%KNo 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 = " %p*%K | %W%KInvite list is empty in channel {channel $0}";
invitelist = "{channel $0}: invite {ban $1}";
no_such_channel = " %r*%K | {channel $0}: %rNo such%K channel";
channel_change = " %y*%K | %ychannel settings changed%K: %w(%K{mode $1}%w)";
channel_synced = " %p*%K | %W%KJoin to {channel $0} was synced in {hilight $1} secs";
usermode_change = " %y*%K | {nick $2} %ygave privileges%K on channel {channel $0} to %w(%K{mode $0}%w)";
user_mode = " %p*%K | %W%KYour user mode is {mode $0}";
# away = " %g*%K | You have been %gmarked%K as being away";
# unaway = " %g*%K | You are %gno longer marked%K as being away";
away = "";
unaway = "";
nick_away = " %r*%K | {nick $0} is %raway%K: $1";
no_such_nick = " %r*%K | {nick $0}: %rNo such%K nick/channel";
nick_in_use = " %r*%K | Nick {nick $0} is %ralready in use%K";
nick_unavailable = " %r*%K | Nick {nick $0} is temporarily %runavailable%K";
your_nick_owned = " %r*%K | Your nick is %rowned%K by {nick $3} {comment $1@$2}";
whois = " %g*%K | %g{nick $0}%K ({nickhost $1@$2})%: %p*%K | ircname: $3";
whowas = " %p*%K | %W%K{nick $0} {nickhost $1@$2}%: %p*%K | {whois ircname $3}";
whois_idle = " %p*%K | %W%KIdle: %|since $1 days $2 hours $3 mins $4 secs";
whois_idle_signon = " %p*%K | %W%KIdle: %|since $1 days $2 hours $3 mins $4 secs {comment Signed on: $5}";
whois_server = " %p*%K | %W%KServer: %|$1 {comment $2}";
whois_oper = " %p*%K | %W%KInfo: %|{hilight $1}";
whois_registered = " %p*%K | %W%KInfo: %|has registered this nick";
whois_help = " %p*%K | %W%KInfo: %|available for help";
whois_modes = " %p*%K | %W%KModes: %|{mode $1}";
whois_realhost = " %p*%K | %W%KHostname: %|{hilight $1-}";
whois_usermode = " %p*%K | %W%KUsermode: %|{mode $1}";
whois_channels = " %p*%K | %W%KChannels: %|{channel $1}";
whois_away = " %p*%K | %W%KAway: %|$1";
whois_special = " %p*%K | %W%KInfo: %|$1";
whois_extra = " %p*%K | %W%KInfo: %|$1";
end_of_whois = " %r*%K | %rEnd%K of WHOIS%K";
end_of_whowas = " %p*%K | %W%KEnd of WHOWAS";
whois_not_found = " %r*%K | There is %rno such%K nick {channick_hilight $0}";
who = "{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}";
end_of_who = " %p*%K | %W%KEnd of /WHO list";
own_notice = "%g>%K{ownnotice notice $0}%g< %w$1";
# own_action = "{nick $[-11]0}%n $1";
# own_action_target = "{ownaction_target $0 $2}$1";
own_ctcp = "{ownctcp ctcp $0}$1 $2";
notice_server = "%g>%K{servernotice $0}%g< %w$1";
# notice_public = "%g>%K{notice $0{pubnotice_channel%g< $1}}$2";
notice_private = "%g>%K{notice $0{pvtnotice_host $1}}%g< %w$2";
# action_private = "{pvtaction $0}$2";
# action_private_query = "{pvtaction_query $0}$2";
# action_public = " {nick $[-11]0}%n $1";
# action_public_channel = "{pubaction $0{msgchannel $1}}$2";
ctcp_reply = " %g*%K | %gCTCP%K {hilight $0} reply from {channick_hilight $1}: $2";
ctcp_reply_channel = " %g*%K | %gCTCP {hilight $0} reply%K from {channick_hilight $1} in channel {channel $3}: $2";
ctcp_ping_reply = " %g*%K | %gCTCP {hilight PING} reply%K from {channick_hilight $0}: $1.$[-3.0]2 seconds";
ctcp_requested = " %g*%K | %K{ctcp {hilight $0} {comment $1} %grequested%K {hilight $2} from {nick $3}}";
ctcp_requested_unknown = "";
online = " %p*%K | %W%KUsers online: {hilight $0}";
pong = " %g*%K | PONG %greceived%K from $0: $1";
wallops = "{wallop WALLOP {wallop_nick $0}} $1";
action_wallops = "{wallop WALLOP {wallop_action $0}} $1";
kill = " %r*%K | You were %r{error killed}%K by {nick $0} {nickhost $1} {reason $2} {comment Path: $3}";
kill_server = " %r*%K | You were %r{error killed}%K by {server $0} {reason $1} {comment Path: $2}";
error = " %r*%K | %r{error ERROR}%K $0";
unknown_mode = " %r*%K | %rUnknown%K mode character $0";
not_chanop = " %r*%K | You're %rnot channel operator%K in {channel $0}";
silenced = " %g*%K | %gSilenced%K {nick $0}";
unsilenced = " %g*%K | %gUnsilenced%K {nick $0}";
silence_line = "{nick $0}: silence {ban $1}";
ask_oper_pass = " %p*%K | %W%KOperator password:";
};
"fe-common/perl" = {
script_not_found = " %r*%K | Script {hilight $0} %rnot found%K";
script_not_loaded = " %r*%K | Script {hilight $0} %ris not%K loaded";
script_loaded = " %g*%K | %gLoaded%K script {hilight $0}";
script_unloaded = " %r*%K | %rUnloaded%K script {hilight $0}";
no_scripts_loaded = " %p*%K | %W%KNo scripts are loaded";
script_list_header = " %p*%K | %W%KLoaded scripts:";
script_list_line = "$[!15]0 $1";
script_list_footer = "";
script_error = "{error %r*%K %rError%K in script {hilight $0}:}";
};
# "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_unidle = "{nick $0} [$5] [$1@$2] [{hilight $3}] just stopped idling";
# notify_online = "On $0: {hilight $1}";
# notify_offline = "Offline: $0";
# notify_list = "$0: $1 $2 $3";
# notify_list_empty = "The notify list is empty";
# };
"Irssi::Script::nickcolor" = {
pubmsg_hilight = "{pubmsghinick $0 $3 $[-9]1}$2";
};
};