ref: 5d573a7488a90cc810e74b1322898845b17d5ae9
author: noodle <noodle@pastanoggin.com>
date: Sun Jan 11 00:35:03 EST 2026
add ircrc-multispace-wqwx: allow tabs and/or multiple whitespaces in messages and slash commands (thanks qwx for coauthoring!)
--- /dev/null
+++ b/ircrc-multispace-wqwx
@@ -1,0 +1,245 @@
+diff 24b39ab89c9fbcac2905a0a6949f07f16fea280b uncommitted
+--- a/rc/bin/ircrc
++++ b/rc/bin/ircrc
+@@ -2,6 +2,8 @@
+
+ rfork ne
+
++nl='
++'
+ server=irc.oftc.net
+ port=6697
+ realname='<nil>'
+@@ -19,18 +21,9 @@
+
+ fn sigint sigterm {+ if (! ~ $#netdir 0)
+- echo QUIT : Leaving... > $netdir/data
++ echo QUIT :Leaving... > $netdir/data
+ }
+
+-fn mshift {+- shift
+- echo $*
+-}
+-
+-fn etime {+- date | awk '{print $4}' | awk -F ':' '{print "[" $1 ":" $2 "]"}'+-}
+-
+ fn work {+ if(~ $#serverpass 1)
+ echo PASS $serverpass
+@@ -39,84 +32,81 @@
+ if (~ $#pass 1)
+ echo PRIVMSG NickServ :IDENTIFY $pass
+ if(! ~ $target ''){+- title
++ title $target
+ echo JOIN $target
+ }
+- if(~ $target *,*)
+- target = `{echo $target | awk -F',' '{print $NF}'}+- while (cmd=`{read}) {+- s=$status
+- if(~ $s *eof) {+- echo QUIT : Leaving...
+- exit
++ awk -v 'target='^$"target '
++ BEGIN{++ if(target ~ /.+,.+/){++ n = split(target, a, ",")
++ target = a[n]
+ }
+- msg=()
+- out=()
+- switch ($cmd(1)) {+- case /!
+- eval `{mshift $cmd} | while(rc=`{read})echo 'PRIVMSG '^$target^' :' $rc | tee /dev/cons+- case /M
+- msg = (MODE `{mshift $cmd})+- case /N
+- cmd = `{mshift $cmd}+- if (! ~ $#cmd 0 1)
+- msg = (NOTICE $cmd(1) : `{mshift $cmd})+- case /T
+- msg = (TOPIC `{mshift $cmd})+- case /W
+- msg = (WHOIS `{mshift $cmd})+- case /a
+- msg = (AWAY : `{mshift $cmd})+- case /j
+- if (~ $#cmd 2 3) {+- target=$cmd(2)
+- title
+- msg = (JOIN `{mshift $cmd})+- if(~ $target *,*)
+- target = `{echo $target | awk -F',' '{print $NF}'}+- }
+- case /l
+- msg = (LIST `{mshift $cmd})+- case /m
+- cmd = `{mshift $cmd}+- if (! ~ $#cmd 0 1) {+- to = $cmd(1)
+- cmd = `{mshift $cmd}+- out = '('^$to^') ⇐ '^$"cmd+- msg = (PRIVMSG $to :^$"cmd)
+- }
+- case /n
+- nick = `{mshift $cmd}+- msg = (NICK $nick)
+- case /p
+- cmd = `{mshift $cmd}+- if (! ~ $#cmd 0)
+- msg = (PART $cmd(1) : `{mshift $cmd})+- case /q
+- msg = `{mshift $cmd}+- case /t
+- cmd = $cmd(2)
+- target = $"cmd
+- title
+- case /u
+- msg = (USERS `{mshift $cmd})+- case /w
+- msg = (WHO `{mshift $cmd})+- case /x
+- echo QUIT : Leaving...
+- exit
+- case /*
+- echo unknown command >/dev/cons
+- case *
+- msg = (PRIVMSG $target :^$"cmd)
+- if (! ~ $#cmd 0)
+- out = '('^$target^') ⇐ '^$"cmd++ }
++ function title(){++ system("title ''"target"''")++ }
++ function etime(c, t){++ c = "date -f ''[\\[]hh:mm[\\]]''"
++ c | getline t
++ close(c)
++ return t
++ }
++ function out(nskip, space, pref, echo){++ if(nskip){++ r = "^";
++ for(i = 0; i < nskip; i++)
++ r = r "[^\t ]+[\t ]*"
++ sub(r, "")
+ }
+- if (! ~ $#out 0)
+- echo `{etime} $out >/dev/cons+- if (! ~ $#msg 0)
+- echo $msg
++ if(echo)
++ print echo $0 >"/dev/cons"
++ print pref (space&&$0 ? " " : "") $0
+ }
++ $1 !~ /^\//{++ out(0, 0, "PRIVMSG "target" :", NF>0 ? etime()" ("target") ⇐ " : "")++ next
++ }
++ $1 == "/!"{++ if(NF > 1){++ c = substr($0, index($0, $2))
++ while(c | getline)
++ out(0, 0, "PRIVMSG "target" :", "PRIVMSG "target" :")
++ close(c)
++ }
++ next
++ }
++ $1 == "/M"{ out(1, 1, "MODE"); next }++ $1 == "/N"{ if(NF > 2) out(2, 0, "NOTICE "$2" :"); next }++ $1 == "/T"{ if(NF > 1) out(1, 1, "TOPIC"); next }++ $1 == "/W"{ out(1, 1, "WHOIS"); next }++ $1 == "/a"{ out(1, 0, "AWAY :"); next }++ $1 == "/j"{++ if(NF == 2 || NF == 3){++ target = $2
++ title()
++ if(target ~ /.+,.+/)
++ target = a[split(target, a, ",")]
++ out(1, 1, "JOIN")
++ }
++ next
++ }
++ $1 == "/l"{ out(1, 1, "LIST"); next }++ $1 == "/m"{++ if(NF > 2)
++ out(2, 0, "PRIVMSG "$2" :", etime()" ("$2") ⇐ ")++ next
++ }
++ $1 == "/n"{ nick = $2; out(1, 1, "NICK"); next }++ $1 == "/p"{ if(NF > 1) out(2, 0, "PART "$2" :"); next }++ $1 == "/q"{ out(1, 0); next }++ $1 == "/t"{ target = $2; title(); next }++ $1 == "/u"{ out(1, 1, "USERS"); next }++ $1 == "/w"{ out(1, 1, "WHO"); next }++ $1 == "/x"{ out(1, 0, "QUIT :"); exit }++ { print "unknown command" >"/dev/cons" }++ END{ print "QUIT :Leaving..." }++ '
++ exit
+ }
+
+ fn misc {+@@ -168,22 +158,23 @@
+ }
+
+ fn pretty {+- while (line=`{read}) {++ while (line=`$nl{read}) {++ cmd=`{echo $line}+ switch ($line) {+ case *PRIVMSG*
+- line = `{echo -n $line | privmsg}++ line = `$nl{echo -n $line | privmsg}+ case *JOIN* *QUIT* *PART* *NICK*
+- line = `{echo -n $line | misc}++ line = `$nl{echo -n $line | misc}+ case *NOTICE*
+- line = `{echo -n $line | notice}++ line = `$nl{echo -n $line | notice}+ case PING* # *PING* could also be CASEMAPPING
+- echo PONG $line(2) > $netdir/data
++ echo PONG $cmd(2) > $netdir/data
+ line = ()
+ case *
+- line = `{echo -n $line | numeric}++ line = `$nl{echo -n $line | numeric}+ }
+ if (! ~ $#line 0)
+- echo `{etime} $line++ echo `{date -f '[\[]hh:mm[\]]'} $line+ }
+ exit
+ }
+@@ -191,10 +182,10 @@
+ fn title {+ if (! ~ $#winid 0) {+ if (test -f /mnt/acme/$winid/ctl)
+- echo name /$server/$target/-ircrc > /mnt/acme/$winid/ctl
++ echo name /$server/$"1/-ircrc > /mnt/acme/$winid/ctl
+ }
+ if not
+- label $target@$server
++ label $"1@$server
+ }
+
+ while (~ $1 -*) {+@@ -235,7 +226,7 @@
+ }
+ }
+
+-title
++title $target
+ userpass=`{auth/userpasswd -n 'server='^$server^' service=irc user='^$nick >[2]/dev/null}+ if(~ $#userpass 2)
+ pass=$userpass(2)
+@@ -255,4 +246,3 @@
+ netdir=$p
+ <$netdir/data tr -d '\x2\x8\xd\x1f' | pretty &
+ >$netdir/data work
+-
--
⑨