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:
parent
bc0e5ffa22
commit
f0a451d667
2 changed files with 53 additions and 30 deletions
28
rc/bin/ircrc
28
rc/bin/ircrc
|
@ -38,7 +38,16 @@ fn work {
|
||||||
title
|
title
|
||||||
echo JOIN $target > $netdir/data
|
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=()
|
msg=()
|
||||||
out=()
|
out=()
|
||||||
switch ($cmd(1)) {
|
switch ($cmd(1)) {
|
||||||
|
@ -61,6 +70,8 @@ fn work {
|
||||||
target=$cmd(2)
|
target=$cmd(2)
|
||||||
title
|
title
|
||||||
msg = (JOIN `{mshift $cmd})
|
msg = (JOIN `{mshift $cmd})
|
||||||
|
if(~ $target *,*)
|
||||||
|
target = `{echo $target | awk -F',' '{print $NF}'}
|
||||||
}
|
}
|
||||||
case /l
|
case /l
|
||||||
msg = (LIST `{mshift $cmd})
|
msg = (LIST `{mshift $cmd})
|
||||||
|
@ -91,6 +102,8 @@ fn work {
|
||||||
case /x
|
case /x
|
||||||
echo QUIT : Leaving... > $netdir/data
|
echo QUIT : Leaving... > $netdir/data
|
||||||
exit
|
exit
|
||||||
|
case /*
|
||||||
|
echo unknown command
|
||||||
case *
|
case *
|
||||||
msg = 'PRIVMSG '^$target^' :'^$"cmd
|
msg = 'PRIVMSG '^$target^' :'^$"cmd
|
||||||
out = '('^$target^') ⇐ '^$"cmd
|
out = '('^$target^') ⇐ '^$"cmd
|
||||||
|
@ -148,19 +161,22 @@ fn privmsg {
|
||||||
s = s ":" $i;
|
s = s ":" $i;
|
||||||
printf("%s\n", s);
|
printf("%s\n", s);
|
||||||
}'
|
}'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pretty {
|
fn pretty {
|
||||||
while (~ `{cat $netdir/status} *Established*) {
|
while (~ `{cat $netdir/status} *Established*) {
|
||||||
line=`{read}
|
if(! line=`{read}) {
|
||||||
|
echo Connection lost
|
||||||
|
date
|
||||||
|
exit
|
||||||
|
}
|
||||||
switch ($line) {
|
switch ($line) {
|
||||||
|
case *PRIVMSG*
|
||||||
|
line = `{echo -n $line | privmsg}
|
||||||
case *JOIN* *QUIT* *PART* *NICK*
|
case *JOIN* *QUIT* *PART* *NICK*
|
||||||
line = `{echo -n $line | misc}
|
line = `{echo -n $line | misc}
|
||||||
case *NOTICE*
|
case *NOTICE*
|
||||||
line = `{echo -n $line | notice}
|
line = `{echo -n $line | notice}
|
||||||
case *PRIVMSG*
|
|
||||||
line = `{echo -n $line | privmsg}
|
|
||||||
case *PING*
|
case *PING*
|
||||||
echo -n $line | sed 's/PING/PONG/' > $netdir/data
|
echo -n $line | sed 's/PING/PONG/' > $netdir/data
|
||||||
line = ()
|
line = ()
|
||||||
|
@ -235,6 +251,6 @@ if(~ $#userpass 2 && ~ $nick $user) {
|
||||||
netdir=`{basename -d $clonefile} ^ / ^ `{cat /fd/4}
|
netdir=`{basename -d $clonefile} ^ / ^ `{cat /fd/4}
|
||||||
echo connect $ip!$port >$netdir/ctl || exit 'cannot connect'
|
echo connect $ip!$port >$netdir/ctl || exit 'cannot connect'
|
||||||
echo connected to tcp!$ip!$port on $netdir
|
echo connected to tcp!$ip!$port on $netdir
|
||||||
cat $netdir/data | tr -d '
' | pretty &
|
cat $netdir/data | tr -d '\x2\xd\x1f' | pretty &
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,15 @@ ircrc \- internet relay chat client
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.I Ircrc
|
.I Ircrc
|
||||||
is an IRC client.
|
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
|
The default server is
|
||||||
.BR irc.freenode.net .
|
.BR irc.freenode.net .
|
||||||
.I Ircrc
|
The arguments
|
||||||
expands
|
|
||||||
.B bitlbee
|
.B bitlbee
|
||||||
and
|
and
|
||||||
.B oftc
|
.B oftc
|
||||||
to
|
are expanded to
|
||||||
.B im.bitlbee.org
|
.B im.bitlbee.org
|
||||||
and
|
and
|
||||||
.BR irc.oftc.net ,
|
.BR irc.oftc.net ,
|
||||||
|
@ -49,15 +49,23 @@ Change the default name
|
||||||
.RB ( <nil> ).
|
.RB ( <nil> ).
|
||||||
.TP
|
.TP
|
||||||
.BI -t " target
|
.BI -t " target
|
||||||
Set and join the target channel
|
Set and join the target channel.
|
||||||
(multiple channels may be separated by commas).
|
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
|
.TP
|
||||||
.BI -n " nick
|
.BI -n " nick
|
||||||
Change the default nickname
|
Change the default nickname
|
||||||
.RB ( $user ).
|
.RB ( $user ).
|
||||||
.SS Commands
|
.SS Commands
|
||||||
.I Ircrc
|
.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
|
.TP
|
||||||
.BI /! " cmd
|
.BI /! " cmd
|
||||||
Send the output of the shell command
|
Send the output of the shell command
|
||||||
|
@ -110,11 +118,11 @@ Send the raw IRC command
|
||||||
to the server.
|
to the server.
|
||||||
.TP
|
.TP
|
||||||
.BI /t " target
|
.BI /t " target
|
||||||
Set the current target.
|
Set
|
||||||
Messages are sent to
|
.IR target .
|
||||||
|
If
|
||||||
.I target
|
.I target
|
||||||
unless they are commands.
|
is more than one channel,
|
||||||
If the current target is more than one channel,
|
|
||||||
any messages are sent to all of them.
|
any messages are sent to all of them.
|
||||||
.TP
|
.TP
|
||||||
.B /u
|
.B /u
|
||||||
|
@ -128,8 +136,8 @@ command.
|
||||||
.B /x
|
.B /x
|
||||||
.B QUIT
|
.B QUIT
|
||||||
command.
|
command.
|
||||||
|
Control-D also sends this command.
|
||||||
.PP
|
.PP
|
||||||
Anything else is sent as a message to the current target.
|
|
||||||
See RFC 1459 and RFC 2812 for detailed information about
|
See RFC 1459 and RFC 2812 for detailed information about
|
||||||
IRC commands.
|
IRC commands.
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
|
@ -147,9 +155,7 @@ as a different user:
|
||||||
% ircrc -r glenda -n glenda irc.oftc.net
|
% ircrc -r glenda -n glenda irc.oftc.net
|
||||||
.EE
|
.EE
|
||||||
.PP
|
.PP
|
||||||
Join two channels on login
|
Join two channels on login:
|
||||||
(remember to set the target to a single channel,
|
|
||||||
otherwise messages are sent to both):
|
|
||||||
.IP
|
.IP
|
||||||
.EX
|
.EX
|
||||||
% ircrc -t '#cat-v,#plan9'
|
% ircrc -t '#cat-v,#plan9'
|
||||||
|
@ -162,12 +168,13 @@ otherwise messages are sent to both):
|
||||||
.B http://tools.ietf.org/html/rfc2812
|
.B http://tools.ietf.org/html/rfc2812
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
.PP
|
.PP
|
||||||
.I Ircrc
|
.I Auth/userpasswd
|
||||||
calls the inexistent
|
(which is called by
|
||||||
.IR auth/userpasswd .
|
.IR ircrc )
|
||||||
.PP
|
isn't compiled by default.
|
||||||
Some of
|
|
||||||
.BR irc.freenode.net 's
|
|
||||||
welcome messages contain control characters.
|
|
||||||
.PP
|
.PP
|
||||||
Some fonts do not support the nickname delimiters.
|
Some fonts do not support the nickname delimiters.
|
||||||
|
.PP
|
||||||
|
If the connection is lost,
|
||||||
|
.I ircrc
|
||||||
|
waits for input before exiting.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue