summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xrc/bin/ircrc32
-rw-r--r--sys/man/1/ircrc51
2 files changed, 53 insertions, 30 deletions
diff --git a/rc/bin/ircrc b/rc/bin/ircrc
index 9be2bc4e7..0a4a29196 100755
--- a/rc/bin/ircrc
+++ b/rc/bin/ircrc
@@ -38,9 +38,18 @@ fn work {
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 @@ fn work {
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 @@ fn work {
case /x
echo QUIT : Leaving... > $netdir/data
exit
+ case /*
+ echo unknown command
case *
msg = 'PRIVMSG '^$target^' :'^$"cmd
out = '('^$target^') ⇐ '^$"cmd
@@ -148,19 +161,22 @@ fn privmsg {
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 @@ if(~ $#userpass 2 && ~ $nick $user) {
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
}
diff --git a/sys/man/1/ircrc b/sys/man/1/ircrc
index 828a8f0c1..fbcee5e95 100644
--- a/sys/man/1/ircrc
+++ b/sys/man/1/ircrc
@@ -25,15 +25,15 @@ ircrc \- internet relay chat client
.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,15 +49,23 @@ Change the default name
.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
.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 @@ Send the raw IRC command
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 @@ command.
.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 @@ as a different user:
% 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 @@ otherwise messages are sent to both):
.B http://tools.ietf.org/html/rfc2812
.SH BUGS
.PP
-.I Ircrc
-calls the inexistent
-.IR auth/userpasswd .
-.PP
-Some of
-.BR irc.freenode.net 's
-welcome messages contain control characters.
+.I Auth/userpasswd
+(which is called by
+.IR ircrc )
+isn't compiled by default.
.PP
Some fonts do not support the nickname delimiters.
+.PP
+If the connection is lost,
+.I ircrc
+waits for input before exiting.