diff options
Diffstat (limited to 'history-search')
| -rw-r--r-- | history-search/history_search.pl | 194 | ||||
| -rw-r--r-- | history-search/irssi/config | 266 | ||||
| -rw-r--r-- | history-search/irssi/default.theme | 294 | ||||
| l--------- | history-search/irssi/scripts | 1 | ||||
| -rwxr-xr-x | history-search/run_irssi.sh | 2 | 
5 files changed, 757 insertions, 0 deletions
| diff --git a/history-search/history_search.pl b/history-search/history_search.pl new file mode 100644 index 0000000..d54e264 --- /dev/null +++ b/history-search/history_search.pl @@ -0,0 +1,194 @@ +# Search within your typed history as you type (like ctrl-R in bash) +# Usage: +# * First do: /bind ^R /history_search +# * Then type ctrl-R and type what you're searching for + +# Copyright 2007  Wouter Coekaerts <coekie@irssi.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + +use strict; +use Irssi; +use Irssi::TextUI; +use Data::Dumper; + +use vars qw($VERSION %IRSSI); +$VERSION = '1.0'; +%IRSSI = ( +    authors     => 'Wouter Coekaerts', +    contact     => 'coekie@irssi.org', +    name        => 'history_search', +    description => 'Search within your typed history as you type (like ctrl-R in bash)', +    license     => 'GPLv2 or later', +    url         => 'http://wouter.coekaerts.be/irssi/', +    changed     => '04/08/07' +); + +my $prompt_append  = 1; +my $prompt_content = ''; + +# create a new statusbar item + +Irssi::statusbar_item_register ( 'custom_prompt', 0, 'custom_prompt' ); + +Irssi::signal_add_last 'gui print text finished' => sub { +    Irssi::statusbar_items_redraw ( 'custom_prompt' ); +}; + +Irssi::signal_register({'change prompt' => [qw/string int/]}); +Irssi::signal_add('change prompt' => \&handle_change_prompt_sig); + +sub handle_change_prompt_sig { +    my ($text, $append) = @_; +    print "sig args: ", Dumper(\@_); +    $prompt_content = $text; +    $prompt_append = $append; +    print "text: $prompt_content, append: $prompt_append"; + +    Irssi::statusbar_items_redraw('custom_prompt'); +} + +# TODO: make these work wiht subcommand (runsub) + +Irssi::command_bind('set_prompt' => \&dothing ); +Irssi::command_set_options('set_prompt', '+string @append'); + +Irssi::command_bind('install_prompt' => \&install_prompt); +Irssi::command_bind('uninstall_prompt' => \&uninstall_prompt); + +Irssi::settings_add_bool('custom_prompt', 'autoinstall_custom_prompt', 0); + +if (Irssi::settings_get_bool('autoinstall_custom_prompt')) { +    install_prompt(); +} + +sub install_prompt { +    Irssi::command("/statusbar prompt add -priority '-5' -alignment left" +                   . " -before prompt custom_prompt"); +    Irssi::command("/statusbar prompt remove prompt"); +    Irssi::command("/statusbar prompt remove prompt_empty"); +} + +sub uninstall_prompt { +    Irssi::command("/statusbar prompt remove custom_prompt"); +    Irssi::command("/statusbar prompt add -priority '-1' " +                   . "-before input -alignment left prompt"); +    Irssi::command("/statusbar prompt add -priority '-2' " +                   . "-before input -alignment left prompt_empty"); +} + +sub dothing { +    #my ($str, $append) = @_; +    #Irssi::print("str is $str, append=$append"); +    my $parsed = [Irssi::command_parse_options('set_prompt', $_[0])]; +    my $args = $parsed->[0] // {}; +    my $remainder = $parsed->[1] // ''; + +    my ($str, $append) = ('', 1); +    print Dumper $args; +    if (exists ($args->{string})) { +        $str = $args->{string}; +    } + +    if (exists($args->{append})) { +        $append = $args->{append}; +    } +    print "append in dothing: $append"; +    Irssi::signal_emit('change prompt', $str, $append); +} + +sub custom_prompt { +    my ($sb_item, $get_size_only) = @_; + +    my ($width, $padChar, $padNum, $length); + +    #my $prompt_str = '%K[%W$tag%c/%K$cumode%n$*%K]%n '; + +    my $theme = Irssi::current_theme; +    my $prompt = ''; + +    my $var = ''; +    if (window_is_empty(Irssi::active_win)) { +        $var = 'winname'; +    } else { +        $var = '[.15]itemname'; +    } + +    if ($prompt_append) { +        $prompt = $theme->format_expand("{prompt \$$var}"); +    } + +    my $trailing_space = ''; +    if ($prompt =~ /(\s*)$/ && length $prompt_content) { +        $trailing_space = $1; +    } + +    $prompt .= $prompt_content . $trailing_space; +    $sb_item->default_handler($get_size_only, $prompt, undef, 1); +} + +sub window_is_empty { +    my $window = shift; +    return $window->{name} eq $window->get_active_name; +} + +sub UNLOAD { +    print Dumper(\@_); +    uninstall_prompt(); +} +# my $prev_typed; +# my $prev_startpos; +# my $enabled = 0; + +# Irssi::command_bind('history_search', sub { +# 	$enabled = ! $enabled; +# 	if ($enabled) { +# 		$prev_typed = ''; +# 		$prev_startpos = 0; +# 	} +# }); + +# Irssi::signal_add_last 'gui key pressed' => sub { +# 	my ($key) = @_; +	 +# 	if ($key == 10) { # enter +# 		$enabled = 0; +# 	} + +# 	return unless $enabled; +	 +# 	my $prompt = Irssi::parse_special('$L'); +# 	my $pos = Irssi::gui_input_get_pos(); +	 +# 	if ($pos < $prev_startpos) { +# 		$enabled = 0; +# 		return; +# 	} +	 +# 	my $typed = substr($prompt, $prev_startpos, ($pos-$prev_startpos)); +	 +# 	my $history = ($typed eq '') ? '' : Irssi::parse_special('$!' . $typed . '!'); +# 	if ($history eq '') { +# 		$history = $typed; +# 	} +	 +# 	my $startpos = index(lc($history), lc($typed)); +		 +# 	Irssi::gui_input_set($history); +# 	Irssi::gui_input_set_pos($startpos + length($typed)); +	 +# 	$prev_typed = $typed; +# 	$prev_startpos = $startpos; +# }; diff --git a/history-search/irssi/config b/history-search/irssi/config new file mode 100644 index 0000000..052c67c --- /dev/null +++ b/history-search/irssi/config @@ -0,0 +1,266 @@ +servers = ( +  { address = "eu.irc6.net"; chatnet = "IRCnet"; port = "6667"; }, +  {  +    address = "irc.open-ircnet.net"; +    chatnet = "IRCnet"; +    port = "6667"; +  }, +  { address = "irc.efnet.org"; chatnet = "EFNet"; port = "6667"; }, +  {  +    address = "irc.undernet.org"; +    chatnet = "Undernet"; +    port = "6667"; +  }, +  { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; }, +  {  +    address = "irc.quakenet.org"; +    chatnet = "QuakeNet"; +    port = "6667"; +  }, +  { address = "irc.oftc.net"; chatnet = "OFTC"; port = "6667"; }, +  { +    address = "irc.gamesurge.net"; +    chatnet = "GameSurge"; +    port = "6667"; +  }, +  { address = "irc.webchat.org"; chatnet = "WebChat"; port = "6667"; }, +  { address = "irc.rizon.net"; chatnet = "Rizon"; port = "6667"; }, +  { address = "irc.link-net.org"; chatnet = "LinkNet"; port = "6667"; }, +  { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; } +); + +chatnets = { +  IRCnet = { +    type = "IRC"; +    max_kicks = "4"; +    max_msgs = "5"; +    max_whois = "4"; +    max_query_chans = "5"; +  }; +  EFNet = {  +    type = "IRC"; +    max_kicks = "4"; +    max_msgs = "3"; +    max_whois = "1"; +  }; +  Undernet = { +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  DALnet = { +    type = "IRC"; +    max_kicks = "4"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  QuakeNet = { +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  OFTC = {  +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  GameSurge = { +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  WebChat = { +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  Rizon = {  +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  LinkNet = { +    type = "IRC"; +    max_kicks = "1"; +    max_msgs = "3"; +    max_whois = "30"; +  }; +  SILC = { type = "SILC"; }; +}; + +channels = ( +  { name = "#irssi"; chatnet = "ircnet"; autojoin = "No"; }, +  { name = "silc"; chatnet = "silc"; autojoin = "No"; } +); + +aliases = { +  J = "join"; +  WJOIN = "join -window"; +  WQUERY = "query -window"; +  LEAVE = "part"; +  BYE = "quit"; +  EXIT = "quit"; +  SIGNOFF = "quit"; +  DESCRIBE = "action"; +  DATE = "time"; +  HOST = "userhost"; +  LAST = "lastlog"; +  SAY = "msg *"; +  WI = "whois"; +  WII = "whois $0 $0"; +  WW = "whowas"; +  W = "who"; +  N = "names"; +  M = "msg"; +  T = "topic"; +  C = "clear"; +  CL = "clear"; +  K = "kick"; +  KB = "kickban"; +  KN = "knockout"; +  BANS = "ban"; +  B = "ban"; +  MUB = "unban *"; +  UB = "unban"; +  IG = "ignore"; +  UNIG = "unignore"; +  SB = "scrollback"; +  UMODE = "mode $N"; +  WC = "window close"; +  WN = "window new hide"; +  SV = "say Irssi $J ($V) - http://irssi.org/"; +  GOTO = "sb goto"; +  CHAT = "dcc chat"; +  RUN = "SCRIPT LOAD"; +  CALC = "exec - if which bc &>/dev/null\\; then echo '$*' | bc | awk '{print \"$*=\"$$1}'\\; else echo bc was not found\\; fi"; +  SBAR = "STATUSBAR"; +  INVITELIST = "mode $C +I"; +  Q = "QUERY"; +  "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save"; +  EXEMPTLIST = "mode $C +e"; +  ATAG = "WINDOW SERVER"; +  UNSET = "set -clear"; +  RESET = "set -default"; +  s = "script"; +  rltest = "/script unload history_search; /script load history_search.pl"; +}; + +statusbar = { +  # formats: +  # when using {templates}, the template is shown only if it's argument isn't +  # empty unless no argument is given. for example {sb} is printed always, +  # but {sb $T} is printed only if $T isn't empty. + +  items = { +    # start/end text in statusbars +    barstart = "{sbstart}"; +    barend = "{sbend}"; + +    topicbarstart = "{topicsbstart}"; +    topicbarend = "{topicsbend}"; + +    # treated "normally", you could change the time/user name to whatever +    time = "{sb $Z}"; +    user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}"; + +    # treated specially .. window is printed with non-empty windows, +    # window_empty is printed with empty windows +    window = "{sb $winref:$tag/$itemname{sbmode $M}}"; +    window_empty = "{sb $winref{sbservertag $tag}}"; +    prompt = "{prompt $[.15]itemname}"; +    prompt_empty = "{prompt $winname}"; +    topic = " $topic"; +    topic_empty = " Irssi v$J - http://www.irssi.org"; + +    # all of these treated specially, they're only displayed when needed +    lag = "{sb Lag: $0-}"; +    act = "{sb Act: $0-}"; +    more = "-- more --"; +  }; + +  # there's two type of statusbars. root statusbars are either at the top +  # of the screen or at the bottom of the screen. window statusbars are at +  # the top/bottom of each split window in screen. +  default = { +    # the "default statusbar" to be displayed at the bottom of the window. +    # contains all the normal items. +    window = { +      disabled = "no"; + +      # window, root +      type = "window"; +      # top, bottom +      placement = "bottom"; +      # number +      position = "1"; +      # active, inactive, always +      visible = "active"; + +      # list of items in statusbar in the display order +      items = { +        barstart = { priority = "100"; }; +        time = { }; +        user = { }; +        window = { }; +        window_empty = { }; +        lag = { priority = "-1"; }; +        act = { priority = "10"; }; +        more = { priority = "-1"; alignment = "right"; }; +        barend = { priority = "100"; alignment = "right"; }; +      }; +    }; + +    # statusbar to use in inactive split windows +    window_inact = { +      type = "window"; +      placement = "bottom"; +      position = "1"; +      visible = "inactive"; +      items = { +        barstart = { priority = "100"; }; +        window = { }; +        window_empty = { }; +        more = { priority = "-1"; alignment = "right"; }; +        barend = { priority = "100"; alignment = "right"; }; +      }; +    }; + +    # we treat input line as yet another statusbar :) It's possible to +    # add other items before or after the input line item. + +    # topicbar +    topic = { +      type = "root"; +      placement = "top"; +      position = "1"; +      visible = "always"; +      items = { +        topicbarstart = { priority = "100"; }; +        topic = { }; +        topic_empty = { }; +        topicbarend = { priority = "100"; alignment = "right"; }; +      }; +    }; +    prompt = { +      items = { +        custom_prompt = { priority = "-5"; }; +        input = { priority = "10"; }; +      }; +    }; +  }; +}; +settings = { +  core = { +    real_name = "shabble"; +    user_name = "tomfeist"; +    nick = "tomfeist"; +  }; +  "fe-text" = { actlist_sort = "refnum"; }; +  "perl/core/scripts" = { autoinstall_custom_prompt = "yes"; }; +}; diff --git a/history-search/irssi/default.theme b/history-search/irssi/default.theme new file mode 100644 index 0000000..98af18b --- /dev/null +++ b/history-search/irssi/default.theme @@ -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-%W!%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 = "%W$*%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 = "%W$*%n"; + +  # private message in query +  privmsgnick = "{msgnick  %R$*%n}"; + +  ## +  ## Actions (/ME stuff) +  ## + +  # used internally by this theme +  action_core = "%W * $*%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 = "%W (*) $*%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 = "%W$*%n: "; +  wallop_nick = "%n$*"; +  wallop_action = "%W * $*%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 = "%W$*%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 = "%W (*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"; +}; diff --git a/history-search/irssi/scripts b/history-search/irssi/scripts new file mode 120000 index 0000000..b870225 --- /dev/null +++ b/history-search/irssi/scripts @@ -0,0 +1 @@ +../
\ No newline at end of file diff --git a/history-search/run_irssi.sh b/history-search/run_irssi.sh new file mode 100755 index 0000000..9b73b49 --- /dev/null +++ b/history-search/run_irssi.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +/opt/stow/repo/irssi/bin/irssi --home=irssi/ | 
