Fixed some ircrc bugs. Only the last channel given to the -t flag is set as target. Unknown commands are not sent to the server. Control-D can be used to exit the client. When the connection is lost, an error message is displayed and the client waits for user input before exiting. Manual page updated.

This commit is contained in:
ppatience0 2013-01-29 23:56:29 -05:00
parent bc0e5ffa22
commit f0a451d667
2 changed files with 53 additions and 30 deletions

View file

@ -38,7 +38,16 @@ fn work {
title
echo JOIN $target > $netdir/data
}
while (cmd=`{read}) {
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)) {
@ -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
}

View file

@ -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.