ref: 1a95889de0589ab9ceba83a2b5ac76a12d6b2f81
parent: 3145dbcd0444dbc654cd85602c490a31a12f5147
parent: 629e6ab133bb24d29546944b60af1f643a503f8c
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Wed Jan 30 01:30:07 EST 2013
merge
--- a/rc/bin/ircrc
+++ b/rc/bin/ircrc
@@ -38,9 +38,18 @@
title
echo JOIN $target > $netdir/data
}
- while (cmd=`{read}) {- msg=()
- out=()
+ if(~ $target *,*)
+ target = `{echo $target | awk -F',' '{print $NF}'}+ while () {+ cmd=`{read}+ if(! ~ `{cat $netdir/status} *Established*)+ exit
+ if(~ $#cmd 0) {+ echo QUIT : Leaving... > $netdir/data
+ exit
+ }
+ msg=()
+ out=()
switch ($cmd(1)) {case /!
eval `{mshift $cmd} | while(rc=`{read})echo 'PRIVMSG '^$target^' :' $rc | tee $netdir/data@@ -61,6 +70,8 @@
target=$cmd(2)
title
msg = (JOIN `{mshift $cmd})+ if(~ $target *,*)
+ target = `{echo $target | awk -F',' '{print $NF}'}}
case /l
msg = (LIST `{mshift $cmd})@@ -91,6 +102,8 @@
case /x
echo QUIT : Leaving... > $netdir/data
exit
+ case /*
+ echo unknown command
case *
msg = 'PRIVMSG '^$target^' :'^$"cmd
out = '('^$target^') ⇐ '^$"cmd@@ -148,19 +161,22 @@
s = s ":" $i;
printf("%s\n", s);}'
-
}
fn pretty { while (~ `{cat $netdir/status} *Established*) {- line=`{read}+ if(! line=`{read}) {+ echo Connection lost
+ date
+ exit
+ }
switch ($line) {+ case *PRIVMSG*
+ line = `{echo -n $line | privmsg}case *JOIN* *QUIT* *PART* *NICK*
line = `{echo -n $line | misc}case *NOTICE*
line = `{echo -n $line | notice}- case *PRIVMSG*
- line = `{echo -n $line | privmsg}case *PING*
echo -n $line | sed 's/PING/PONG/' > $netdir/data
line = ()
@@ -235,6 +251,6 @@
netdir=`{basename -d $clonefile} ^ / ^ `{cat /fd/4}echo connect $ip!$port >$netdir/ctl || exit 'cannot connect'
echo connected to tcp!$ip!$port on $netdir
- cat $netdir/data | tr -d ' ' | pretty &
+ cat $netdir/data | tr -d '\x2\xd\x1f' | pretty &
work
}
--- a/sys/man/1/ircrc
+++ b/sys/man/1/ircrc
@@ -25,15 +25,15 @@
.SH DESCRIPTION
.I Ircrc
is an IRC client.
-Messages are sent from stdin and received from stdout.
+Messages are sent from standard input and
+received from standard output.
The default server is
.BR irc.freenode.net .
-.I Ircrc
-expands
+The arguments
.B bitlbee
and
.B oftc
-to
+are expanded to
.B im.bitlbee.org
and
.BR irc.oftc.net ,
@@ -49,8 +49,13 @@
.RB ( <nil> ).
.TP
.BI -t " target
-Set and join the target channel
-(multiple channels may be separated by commas).
+Set and join the target channel.
+If multiple channels are specified,
+only the last one will be set as
+.IR target .
+Messages are sent to
+.I target
+unless they are commands.
.TP
.BI -n " nick
Change the default nickname
@@ -57,7 +62,10 @@
.RB ( $user ).
.SS Commands
.I Ircrc
-understands the following commands:
+commands begin with a slash.
+Unrecognized commands result in an error message
+and send nothing to the server.
+The commands are:
.TP
.BI /! " cmd
Send the output of the shell command
@@ -110,11 +118,11 @@
to the server.
.TP
.BI /t " target
-Set the current target.
-Messages are sent to
+Set
+.IR target .
+If
.I target
-unless they are commands.
-If the current target is more than one channel,
+is more than one channel,
any messages are sent to all of them.
.TP
.B /u
@@ -128,8 +136,8 @@
.B /x
.B QUIT
command.
+Control-D also sends this command.
.PP
-Anything else is sent as a message to the current target.
See RFC 1459 and RFC 2812 for detailed information about
IRC commands.
.SH EXAMPLES
@@ -147,9 +155,7 @@
% ircrc -r glenda -n glenda irc.oftc.net
.EE
.PP
-Join two channels on login
-(remember to set the target to a single channel,
-otherwise messages are sent to both):
+Join two channels on login:
.IP
.EX
% ircrc -t '#cat-v,#plan9'
@@ -162,12 +168,13 @@
.B http://tools.ietf.org/html/rfc2812
.SH BUGS
.PP
-.I Ircrc
-calls the inexistent
-.IR auth/userpasswd .
+.I Auth/userpasswd
+(which is called by
+.IR ircrc )
+isn't compiled by default.
.PP
-Some of
-.BR irc.freenode.net 's
-welcome messages contain control characters.
-.PP
Some fonts do not support the nickname delimiters.
+.PP
+If the connection is lost,
+.I ircrc
+waits for input before exiting.
--
⑨