Add ircii configuration (except *.private files) - dotfiles - leot's dotfiles
 (HTM) hg clone https://bitbucket.org/iamleot/dotfiles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) changeset 1f005e65a9b8c82b84fab409a9fd22dde88354e2
 (DIR) parent 98aeef9d2c035c49af16a4cdf0471c8801fb7123
 (HTM) Author: Leonardo Taccari <iamleot@gmail.com>
       Date:   Sun, 23 Sep 2018 23:42:06 
       
       Add ircii configuration (except *.private files)
       
       Diffstat:
        irc/aliases      |   36 ++++
        irc/autoidentify |   24 +++
        irc/binds        |   19 ++
        irc/compl.mods   |  397 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
        irc/prec         |   68 +++++++++
        irc/silent       |   21 ++
        ircrc            |   52 +++++++
        7 files changed, 617 insertions(+), 0 deletions(-)
       ---
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/aliases
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/aliases       Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,36 @@
       +# log window
       +alias wlog {
       +       ^window name log
       +       ^window nostatus
       +       ^window notify_level beep
       +       ^eval window logfile ${HOME}/.irc/logs/log
       +       ^window log on
       +}
       +
       +# Freenode stuffs
       +alias freenode ^window name freenode;^window server -SSL chat.freenode.net:6697
       +alias fja {
       +       ^window addgroup freenode channel #netbsd bind #netbsd
       +       ^window addgroup freenode channel #netbsd-code bind #netbsd-code
       +       ^window addgroup freenode channel #netbsd-it bind #netbsd-it
       +       ^window addgroup freenode channel #pkgsrc bind #pkgsrc
       +}
       +alias fjo {
       +       ^window name freenode-others
       +       ^window addgroup freenode-others channel #bitreich-en bind #bitreich-en
       +       ^window addgroup freenode-others channel #gopherproject bind #gopherproject
       +}
       +
       +# OFTC stuffs
       +alias oftc ^window name oftc;^window server -SSL irc.oftc.net:6697
       +alias oja {
       +       ^window addgroup oftc channel #pwmt bind #pwmt
       +}
       +
       +# bitlbee stuffs
       +alias bitlbee ^window name bitlbee;^window server -IRC localhost:6667
       +
       +# identify stuffs
       +alias identify ^msg NickServ IDENTIFY
       +alias ghost ^msg NickServ GHOST
       +alias release ^msg NickServ RELEASE
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/autoidentify
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/autoidentify  Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,24 @@
       +alias .freenode_identify ^msg NickServ IDENTIFY $FREENODE_PASSWD
       +alias .oftc_identify ^msg NickServ IDENTIFY $OFTC_PASSWD
       +alias .bitlbee_identify ^msg NickServ IDENTIFY $BITLBEE_PASSWD
       +
       +on ^notice "NickServ % This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify <password>." {
       +       echo $1 *$0* $2-
       +       if (match(*.freenode.net $S) && match($FREENODE_NICK $N)) {
       +               timer 1 .freenode_identify
       +       }
       +}
       +
       +on ^notice "NickServ % This nickname is registered and protected.  If it is your nickname, you may" {
       +       echo $1 *$0* $2-
       +       if (match(*.oftc.net $S) && match($OFTC_NICK $N)) {
       +               timer 1 .oftc_identify
       +       }
       +}
       +
       +on ^372 "* This server is running BitlBee *" {
       +       echo $2-
       +       if (match(localhost $S) && match($BITLBEE_NICK $N)) {
       +               timer 1 .bitlbee_identify
       +       }
       +}
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/binds
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/binds Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,19 @@
       +bind meta1-1 parse_command ^window swap 1
       +bind meta1-2 parse_command ^window swap 2
       +bind meta1-3 parse_command ^window swap 3
       +bind meta1-4 parse_command ^window swap 4
       +bind meta1-5 parse_command ^window swap 5
       +bind meta1-6 parse_command ^window swap 6
       +bind meta1-7 parse_command ^window swap 7
       +bind meta1-8 parse_command ^window swap 8
       +bind meta1-9 parse_command ^window swap 9
       +
       +bind meta1-0 beginning_of_line
       +bind meta1-b backward_word
       +bind meta1-w forward_word
       +bind meta1-$ end_of_line
       +
       +bind ^C parse_command ^window new hide_others
       +bind ^D parse_command ^window kill
       +bind ^N parse_command ^window next
       +bind ^P parse_command ^window prev
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/compl.mods
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/compl.mods    Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,397 @@
       +#      $eterna: compl.mods,v 1.3 2003/12/08 05:05:59 mrg Exp $
       +#
       +# Complete Modules by Ian Frechette
       +# Last updated 2-2-94
       +# example modules
       +# Don't let the size scare you.  This is a whole collection of 
       +# examples and comments about the design of modules
       +# meat of all this are the interface functions to 'complete'
       +# compl.add, and compl.list  (soon to be compl.del)
       +# the function that does the work is compl.parse  which is very small
       +#   and whatever parsing routine it calls.
       +
       +# These should actually all be in their individual modules
       +# but this is just an example file..
       +
       +# Note.. compl.list is internal to complete.. shoulnd't normally be used
       +if (compl.list == [])
       +{
       +# Note here.. Currently, if you compl.add /blah blahparse
       +# followed by  compl.add /blah otherparse    only the latter will
       +# called.  No conflict message is shown unless you replace the
       +# default 'null' and 'nomatch' parsers.
       +    compl.add -null -nomatch defaultparse
       +    compl.add /c chanparse
       +    compl.add /channel chanparse
       +    compl.add /l chanparse
       +    compl.add /leave chanparse
       +    compl.add /part chanparse
       +}
       +
       +
       +# testparse <cmd> <stuff....pat>
       +# this is called by the complete routines.
       +@ dp.tmp = [0 :]
       +# [0 :] represents a count of 0.. and a null pattern :<pat> 
       +alias defaultparse {
       +       @ dp.cnt = [$*]
       +       @ dp.cnt = #dp.cnt
       +       ^assign -dp.pat 
       +       @ dplist = chanusers($C)
       +       # all the cnt stuff is in case you do  /command word1 word2 pattern<tab>
       +       @ dp.pat = [$(${dp.cnt - 1})]
       +       # '/command pattern ' leaves <pat> null
       +       # '/command pattern'  sets <pat> to a new pattern
       +       # important because smartparse may leave a space
       +       if (right(1 $L) != [ ]) {@ dp.tmp = [0 :$dp.pat]}
       +
       +       # call testparse with current cnt :<pat> <listname> <newpat>
       +       @ dp.tmp = smartparse($dp.tmp dplist $dp.pat)
       +       # note dp.tmp accounts for two arguments.. and is modified and saved
       +
       +       if (left(1 $word(1 $dp.tmp)) == [,])
       +       { } 
       +       {if (left(1 $word(1 $dp.tmp)) == [.])
       +       { }}
       +}
       +
       +alias chanparse {
       +       @ cp.cnt = [$*]
       +       @ cp.cnt = #cp.cnt
       +       ^assign -cp.pat 
       +       @ cplist = mychannels()
       +       # all the cnt stuff is in case you do  /command word1 word2 pattern<tab>
       +       @ cp.pat = [$(${cp.cnt - 1})]
       +       # '/command pattern ' leaves <pat> null
       +       # '/command pattern'  sets <pat> to a new pattern
       +       # important because smartparse may leave a space
       +       if (right(1 $L) != [ ]) {@ cp.tmp = [0 :$cp.pat]}
       +
       +       # call testparse with current cnt :<pat> <listname> <newpat>
       +       @ cp.tmp = smartparse($cp.tmp cplist $cp.pat)
       +       # note cp.tmp accounts for two arguments.. and is modified and saved
       +
       +       if (left(1 $word(1 $cp.tmp)) == [,])
       +       { } 
       +       {if (left(1 $word(1 $cp.tmp)) == [.])
       +       { }}
       +}
       +
       +# message parser module..   Compatible with included tabscript
       +# currently calls the tabkey script under 3 conditions
       +# the input line has more than 2 argments on it.. '/msg bob thud<TAB>'
       +# the input line has nothing on it '<TAB>'
       +# the input line has only one argument and the character before the 
       +#   cursor is a space    '/msg bob <TAB>'
       +# plus it now does nickname completion
       +# /m D<TAB>   expands to   /m Daemon   and so on
       +alias messparse {
       +    if (([$1] != []) && ([$2] == []))
       +    {
       +        if (right(1 $*) != [ ])
       +        {
       +            # this is the simple match.. just match first occurance
       +            # and expand
       +            if (mp.cnt = match($(1)* $tk.msglist))
       +            {
       +                parsekey delete_previous_word
       +                # in case one does  /m =ni<TAB> it must delete the =
       +                if (index(#=% $1) >= 0) {parsekey backspace}
       +                xtype -literal $word(${mp.cnt - 1} $tk.msglist)
       +                xtype -literal ${[ ]}
       +            }
       +        }
       +        {
       +            ^tk.getmsg 1 $tk.msglist
       +        }
       +    }
       +    {
       +        ^tk.getmsg 1 $tk.msglist
       +    }
       +}
       +
       +
       +# connect module  for opers..    easily changeable to kicks, bans.. etc..
       +# simply use  /connect <TAB> for list or /connect <uniqid tag><TAB>
       +# eg.  /connect pen<TAB>  expands to  /connect penfold.ece.uiuc.edu 
       +# It always expands first matching string.  Look at testparse for
       +# a more intelligent way to do it.
       +
       +@ connlist = [irc.uiuc.edu goren1.u.washington.edu ircserver.iastate.edu w6yx.stanford.edu hamblin.math.byu.edu freedom.nmsu.edu dreamtime.unm.edu ircserver.santafe.edu irc.netsys.com irc-2.mit.edu cs-mail.bu.edu]
       +
       +alias connparse {
       +    if ([$1] != [])
       +       {
       +               @ cp.line = [$*]
       +               if ((right(1 $*) == [ ]) && ([$2] == [])&& ([$0] == [/connect]))
       +               {
       +                       xtype -literal 6667;xtype -literal ${[ ]}
       +                       # note.. if converted to use smartparse.. the port number must
       +                       # be removed here.. the above logic conflicts with SP
       +               }
       +               {
       +                       # expand only the first match found (See 'testparse' for better way
       +                       if (cp.cnt = match($(${#cp.line -1})* $connlist))
       +                       {
       +                               delword
       +                               xtype -literal $word(${cp.cnt - 1} $connlist)
       +                               xtype -literal ${[ ]}
       +                       }
       +                       {
       +                               echo *** connlist $connlist
       +                       }
       +               }
       +    }
       +    {
       +        echo *** connlist $connlist
       +    }
       +}
       +
       +# Load module
       +# /load net<TAB> expand to /load netsplit  and so on.
       +# Note the problem right now is that it only finds and expands the first
       +# name in the list  I think we can get around this.
       +@ loadlist = [netsplit ircgrep cut-paste compl.mods]
       +alias loadparse {
       +    if ([$1] != []) {
       +        if (lp.cnt = match($(1)* $loadlist))
       +        {
       +            parsekey delete_previous_word
       +            xtype -literal $word(${lp.cnt - 1} $loadlist)
       +        }
       +    }
       +    {
       +        echo *** loadlist = $loadlist
       +    }
       +    ^assign -lp.cnt
       +}
       +
       +# ############ stuff related to SMARTPARSE ###################
       +# The new testparse rewritten to use the
       +# extremely awsome smartparse routine.
       +
       +if (!match(/test $compl.list)) {compl.add /test testparse}
       +
       +# just a quick alias for making LINKS lists..  /makelist testlist *.edu
       +# will make a list of all *.edu servers..   Note that just * is 
       +# generally too big a list for ircII
       +alias makelist {
       +       if ([$1])
       +       {
       +               ^on ^364 * push $0 $$1
       +               links $1-
       +               wait -cmd eval ^on 364 -\;echo *** makelist finished
       +       }
       +}
       +
       +@ testlist = [aone atwo athree bone btwo bthree ircserver.iastate.edu ircserver.santafe.edu]
       +
       +# testparse <cmd> <stuff....pat>
       +# this is called by the complete routines.
       +@ tp.tmp = [0 :]
       +# [0 :] represents a count of 0.. and a null pattern :<pat> 
       +alias testparse {
       +       # ignore this first line.. 
       +       @ tp.cnt = [$*]
       +       @ tp.cnt = #tp.cnt
       +       ^assign -tp.pat 
       +       # all the cnt stuff is in case you do  /command word1 word2 pattern<tab>
       +       if (tp.cnt > 1)
       +       {
       +               @ tp.pat = [$(${tp.cnt - 1})]
       +               # '/command pattern ' leaves <pat> null
       +               # '/command pattern'  sets <pat> to a new pattern
       +               # important because smartparse may leave a space
       +               if (right(1 $L) != [ ]) {@ tp.tmp = [0 :$tp.pat]}
       +
       +               # Uncomment the following line to see how it works from here.. debugging
       +               # echo smartparse\($tp.tmp testlist $tp.pat\)
       +
       +               # call testparse with current cnt :<pat> <listname> <newpat>
       +               @ tp.tmp = smartparse($tp.tmp testlist $tp.pat)
       +               # note tp.tmp accounts for two arguments.. and is modified and saved
       +
       +               if (left(1 $word(1 $tp.tmp)) == [,])
       +               {echo *** no match for pattern [$tp.pat] found in list} 
       +               {if (left(1 $word(1 $tp.tmp)) == [.])
       +               {echo *** testlist: $testlist}}
       +       }
       +       {
       +               echo *** testlist : $testlist
       +       }
       +}
       +
       +alias test echo *** TEST: You've matched: $*
       +
       +# test module
       +# Trying to make some sort of intelligent handling of the tab lists.
       +@ sp.cnt = 0
       +
       +# call it with smartparse <cnt> :<pat> <listname> <newpat>
       +#                          $0    $1       $2        $3
       +# returns <counter> [:,.]<pattern>
       +#                    : == successful match   , == no match  . == null
       +#
       +#  Look at how testparse uses it.. you shouldn't have to touch any
       +# smartparse vars.. It's all handled through the interface.. basically
       +# you're telling it where to start looking in the list and how
       +# long the list is..   Each time smartparse is called it returns a counter
       +# value indicating where it left off last time.  You can save it
       +# or not..   testparse saves it.. and passes it back as the new
       +# starting position  <cnt>
       +#
       +# Assuming the counter, pattern, and list are maintained through each call
       +# it'll assume you're searching forward in the list from some place
       +# after the last word matched in the list..   
       +#
       +# If you feed it a <newpat> for which <pat> is not a subset, it'll reassign
       +# <pat> to <newpat> and restart the process.. 
       +# It defaults to expansion..  so..  <pat> = blah
       +# will match blahone, blahtwo etc. Works with wildcards.. *a* matches a lot
       +# Try it.
       +
       +^assign -sp.tmp
       +alias smartparse {
       +# int sp.tmp     - index of last match found
       +# int sp.cnt     - position in list
       +# int sp.max     - max number of elements in list
       +# string sp.pat  - match pattern 
       +    if ([$3] != [])
       +    {
       +               # Extract <pat> from  :<pat>    Note.. It may be null
       +        @ sp.pat = mid(1 50 $1)
       +               @ sp.max = [$(#$2)]
       +               @ sp.cnt = [$0]
       +        # set pattern.   Determine if we've changed the base pattern or not
       +        if (sp.pat == [])
       +            {@ sp.pat = [$3]}
       +            { if (!match($(sp.pat)* $3)) {@sp.pat = [$3]} }
       +        @ sp.run = 1
       +
       +        while (((sp.list = words($sp.cnt $sp.max $($2))) != []) && (!sp.tmp) && sp.run)
       +        {
       +                       # look for match in list
       +            if (sp.tmp = match($(sp.pat)* $sp.list))
       +            {
       +                # sp.cnt is absolute position in list.  Jump over found item.
       +                               # to set up for the next call to smartparse
       +                @ sp.cnt = sp.cnt + sp.tmp
       +
       +                # parsekey delete_previous_word
       +                delword
       +                xtype -literal $word(${sp.tmp - 1} $sp.list)
       +                xtype -literal ${[ ]}
       +            }
       +            {
       +                # nothing found.. drop out of loop
       +                               # for this condidtion to occur we must be at the beginning
       +                               # of the loop... either first pass.. or just looped back
       +                if (!sp.cnt && !sp.tmp)
       +                {
       +                                       # notfound condition set for return value later
       +                                       @ sp.notfound = [$sp.cnt ,$sp.pat]
       +                    @ sp.run = 0
       +                    # echo *** smartparse: no matching pattern
       +                }
       +                               # loop back
       +                @ sp.cnt = 0
       +            }
       +        }
       +        ^assign -sp.tmp
       +        if (!sp.list) {@sp.cnt = 0}
       +        ^assign -sp.list
       +        if (sp.notfound == [])
       +                       {@ function_return = [$sp.cnt :$sp.pat]}
       +                       {@ function_return = sp.notfound;^assign -sp.notfound}
       +    }
       +    {
       +       # echo *** sp NULL
       +        # echo *** $2: $($2)
       +        @ function_return = [$sp.cnt .$sp.pat]
       +    }
       +    ^assign -sp.run
       +}
       +
       +# alias words.. usage   $word(<begin> <end> <words>)
       +# words(0 2 zero one two three ... ) ==  'zero one two'  and so on
       +alias words {
       +    @ function_return = [$(${[$0]+2}-${[$1] +2})]
       +}
       +
       +# This is like  DELETE_PREVIOUS_WORD except that it delets to the
       +# previous space which is much more useful than the current
       +# behavior of deleting to the previos non- [a-zA-Z0-9] char. :-?
       +alias delword {
       +    parsekey erase_to_end_of_line
       +    if ((dw.char = right(1 $L)) != [ ]) {@ dw.nw = 0} {@dw.nw = 1}
       +    while (((dw.char != [ ]) || dw.nw) && (dw.char != []))
       +    {
       +        parsekey backspace
       +        if ((dw.char = right(1 $L)) != [ ]) {@ dw.nw = 0}
       +    }
       +    ^assign -dw.char;^assign -dw.nw
       +}
       +
       +
       +# it is of course possible to do command completion with something like
       +alias expand.con parsekey erase_to_beg_of_line;type /connect $()
       +# /con<tab> expands to /connect
       +
       +# Be careful though.. note the $() at the end of the line.
       +# Without this 'complete' sends expand.con /con   and the above
       +# alias will add the '/con' back onto the end of the line resulting
       +# in /connect /con     on the input line when you're done
       +
       +
       +# # # # # # # # # # MODULE WRITING PHILOSOPHY # # # # # # # # # #
       +# Some thoughts about using complete and designing complete modules.
       +#
       +# Basically for any given time you hit TAB there are three states
       +# normal, null, and nomatch
       +# normal - there is something on the command line to process
       +#   and the command is in the command list maintained by 'complete'
       +#   The associated command parser is called with the contents of the
       +#   input line in its entirety as the arguments.
       +# null -  there is nothing at all on the command line and some
       +#   default action must be taken.  No parser need be called at all as well.
       +# nomatch - the command at the head of the input line is not
       +#   found in the list of commands maintained by 'complete'.
       +#   A default 'nomatch' parser may or may not be called but if it is called
       +#   it's passed the entire contents of the input line.
       +#
       +# This is not the end of the story however.
       +# If you're writing a completion module of some sort there are the same
       +# 3 states plus 1 more.  Let's say you want to write something to 
       +# find a match for a given keyword prefix out of a list when you hit
       +# TAB.  e.g. /eat ap<TAB>   looks for matching words that start with ap
       +# The 4 actions are
       +# normal - There is a single match for ap and it expands /eat apple
       +# multiple matches - There is more than one match for ap and thus
       +#   a choice must be made.  Possible choices include
       +#   1. do nothing
       +#   2. list possible matches   (like ^D) or set showmatch in tcsh shell
       +#      *** matches for prefix 'ap': apple apricot apendage
       +#   3. match only the first occurance  Currently what the /connect module
       +#      does    /eat apple
       +#   4. cycle through the possible matches for the keyword 'ap'.
       +#      The 'testparse' modules uses this scheme and it's my favorite
       +#      albiet a tad more expensive in terms of CPU cycles and responce
       +#      time. (I'm sure someone could see the diff.. I can't ;)
       +#      /eat ap<TAB> -> /eat apple<TAB> -> /eat apricot<TAB> etc.. 
       +#   5. display worthless error message
       +#      *** non-unique matches found
       +# nomatch - as as before, nomatching keywords are found, the choices are
       +#   limited to things like displaying the whole list or just cycling through
       +#   to the next item in the list like the 'tabkey' script's 'messparse' does.
       +# null - This one is more likely to happen only if 'complete' saw the
       +#   input line as null, but then the null action is ussually special anyway.
       +#   Otherwise this may occur when you say just /eat<TAB> and the obvious
       +#   thing to do here is just to display the list of items to choose from
       +#   in an appropriate format.
       +
       +# Just remember.. the parsing routine can really do anything it wants.. 
       +# it could simply 'sendline' the line on to the server and push a
       +# button to start WWIII when you hit tab.. It doesn't have to mess with the
       +# command line but it's more useful that way.  Although.. you could write
       +# a tab completion module that when tab was hit.. it spell checked
       +# the line.. anything is possible.. 
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/prec
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/prec  Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,68 @@
       +#      $eterna: prefix,v 1.2 2001/08/12 15:57:11 mrg Exp $
       +#
       +# prefix each message with date and channel name 
       +
       +alias log {
       +       if ( match(log $windows()) ) {
       +               xecho -window log $*
       +       }
       +}
       +
       +on ^action * {
       +       echo $1 *$0* $2-
       +       if (!MATCH($1 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $1 *$0* $2-
       +       }
       +       if (MATCH($N $STRIP(:,.!?<> $2-))) {
       +               beep
       +       }
       +}
       +on ^msg * {
       +       echo $0 <$0> $1-
       +       log $STRFTIME($TIME() %d/%m/%Y) $Z $0 <$0> $1-
       +       beep
       +}
       +on ^notice * {
       +       echo $1 *$0* $2-
       +       log $STRFTIME($TIME() %d/%m/%Y) $Z $1 *$0* $2-
       +       beep
       +}
       +on ^public * {
       +       echo $1 <$0> $2-
       +       if (!MATCH($1 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $1 <$0> $2-
       +       }
       +       if (MATCH($N $STRIP(:,.!?<> $2-))) {
       +               beep
       +       }
       +}
       +on ^public_msg * {
       +       echo $1 \($0) $2-
       +       if (!MATCH($1 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $1 \($0) $2-
       +       }
       +}
       +on ^public_other * {
       +       echo $1 <$0> $2-
       +       if (!MATCH($1 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $1 <$0> $2-
       +       }
       +}
       +on ^send_action * {
       +       echo $0 *$N* $1-
       +       if (!MATCH($0 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $0 *$N* $1-
       +       }
       +}
       +on ^send_msg * {
       +       echo $0 <$N> $1-
       +       log $STRFTIME($TIME() %d/%m/%Y) $Z $0 <$N> $1-
       +}
       +on ^send_public * {
       +       echo $0 <$N> $1-
       +       if (!MATCH($0 &bitlbee)) {
       +               log $STRFTIME($TIME() %d/%m/%Y) $Z $0 <$N> $1-
       +       }
       +}
       +
       +set input_prompt $T> 
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 irc/silent
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/irc/silent        Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,21 @@
       +#      $eterna: silent,v 1.2 2001/08/12 15:57:12 mrg Exp $
       +#
       +# This is necessary when you join crowded channels like #report...
       +# All the join,leave,quit,nick and mode change messages do not appear
       +# on the screen, unless you have %U somewhere in your STATUS_FORMAT,
       +# then the changes will be displayed in your status line, which is
       +# a lot less annoying and distracting.  ;-)
       +
       +on ^join * set status_user   join: $0 \($1\)
       +on ^leave * set status_user   leave: $0 \($1\)
       +on ^signoff * set status_user   signoff: $0
       +on ^nick * set status_user   nick: $0 -> $1
       +on ^mode * set status_user   mode: $*
       +on ^topic * set status_user   topic: $0: $1-
       +
       +on ^icb_status sign-on * set status_user   signon: $1
       +on ^icb_status sign-off * set status_user   signoff: $1
       +on ^icb_status join * set status_user   join: $1 \($2\)
       +on ^icb_status leave * set status_user   leave: $1 \($2\)
       +
       +# lynx91
       diff -r 98aeef9d2c03 -r 1f005e65a9b8 ircrc
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/ircrc     Sun Sep 23 23:42:06 2018 +0200
       @@ -0,0 +1,52 @@
       +set channel_name_width 64
       +set clock off
       +set continued_line     
       +set display_encoding UTF-8
       +set help_prompt off
       +set history 2000
       +set indent on
       +set input_encoding UTF-8
       +set input_prompt $T> 
       +set irc_encoding UTF-8
       +set lastlog 20000
       +set lastlog_level PUBLIC MSGS NOTICES WALLS WALLOPS NOTES OPNOTES SNOTES ACTIONS BEEP
       +set novice off
       +set scroll on
       +set show_away_once on
       +set show_channel_names on
       +set star_prefix *** 
       +set status_user  
       +
       +eval set logfile ${IRCLOG}
       +set log off
       +
       +alias c channel
       +alias j join
       +alias l leave
       +alias ll lastlog
       +alias m msg
       +alias q query
       +alias w window
       +
       +# XXX: this can SIGSEGV on older ircii when doing `/^I'
       +bind ^I command_completion
       +bind ^W delete_previous_word
       +
       +# ircii default scripts
       +load fkeys
       +
       +# Remap keys assigned by fkeys
       +assign fk.1 scroll_start
       +assign fk.4 scroll_end
       +
       +load aliases 
       +load aliases.private 
       +load binds
       +load prec
       +load silent
       +
       +load passwd.private
       +load autoidentify
       +
       +load complete
       +load compl.mods