shithub: irc.myr

Download patch

ref: 68d69528bd1009b26ef0d01e38f271d22133031a
parent: 49075757a7eb606af381a341cda24df578817c55
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Jun 8 09:20:18 EDT 2017

Fix typographic issues.

--- a/irc.myr
+++ b/irc.myr
@@ -18,6 +18,8 @@
 	user	: byte[:]
 	nick	: byte[:]
 	input	: byte[:]
+	hist	: byte[:][:]
+	histidx	: std.size
 ;;
 
 type server = struct
@@ -39,7 +41,7 @@
 	topic	: byte[:]
 	users	: byte[:][:]
 	stale	: bool
-	gutter	: int
+	gutter	: std.size
 ;;
 
 const main = {
@@ -96,11 +98,12 @@
 		| "376":	srvmsg(cli, args)
 		| "NOTICE":	srvmsg(cli, args)
 		| "332":	topic(cli, srv, args)
-		| "353":	names(cli, srv, args)
+		| "353":	addnames(cli, srv, args)
+		| "366":	shownames(cli, [][:])
 		| "PRIVMSG":	recievemsg(cli, srv, src, args)
 		| "PING":	send(cli, srv, "PONG :{}\r\n", args[0])
 		| "JOIN":	joinchan(cli, srv, src, args, ln)
-		| "PART":	joinchan(cli, srv, src, args, ln)
+		//| "PART":	joinchan(cli, srv, src, args, ln)
 		| c:	
 			status(cli, "unknown server command {}\n", ln)
 		;;
@@ -136,7 +139,7 @@
 	chanmsg(cli, c, src, args[1])
 }
 
-const names = {cli, srv, args
+const addnames = {cli, srv, args
 	var c
 
 	if args.len != 4
@@ -145,7 +148,7 @@
 	c = name2chan(srv, args[2])
 	for n in std.bysplit(args[3], " ")
 		std.slpush(&c.users, std.sldup(n))
-		c.gutter = std.max(c.gutter, n.len + 4)
+		c.gutter = std.max(c.gutter, n.len + 1)
 	;;
 }
 
@@ -269,6 +272,7 @@
 	match sp[0]
 	| "connect":	connect(cli, sp[1:])
 	| "join":	join(cli, sp[1:])
+	| "names":	shownames(cli, sp[1:])
 	| "leave":	leave(cli, sp[1:])
 	| "chan":	switch(cli, sp[1:])
 	| "win":	switch(cli, sp[1:])
@@ -320,6 +324,22 @@
 	;;
 }
 
+const shownames = {cli, args
+	var s, c
+
+	if args.len == 0
+		c = curchan(cli)
+	elif args.len == 1
+		-> status(cli, "names: invalid arguments: {j= }\n", args)
+	;;
+	c = curchan(cli)
+	if c != cli.self
+		s = std.fmt("{j= }", c.users)
+		chanstatus(cli, c, s)
+		std.slfree(s)
+	;;
+}
+
 const handshake = {cli, srv
 	send(cli, srv, "NICK {}\r\n", srv.nick)
 	send(cli, srv, "USER {} 8 * :{}\r\n", srv.user, srv.user)
@@ -504,8 +524,7 @@
 	match termdraw.event(cli.term)
 	| `termdraw.Kc '\n':
 		do(cli, cli.input)
-		std.slfree(cli.input)
-		cli.input = ""
+		done(cli)
 	| `termdraw.Kc c:
 		s = std.fmt("{}", c)
 		std.sljoin(&cli.input, s)
@@ -522,6 +541,8 @@
 	| `termdraw.Ctrl 'u':
 		std.slfree(cli.input)
 		cli.input = ""
+	| `termdraw.Kup:
+	| `termdraw.Kdown:
 	| r:
 		s = std.fmt("{}\n", r)
 		std.sljoin(&cli.self.buf, s)
@@ -529,6 +550,11 @@
 	;;
 }
 
+const done = {cli
+	std.slpush(&cli.hist, cli.input)
+	cli.input = ""
+}
+
 const redraw = {cli
 	var c, x, y, w, h
 
@@ -757,6 +783,12 @@
 		chan.stale = true
 	;;
 
+}
+
+const chanstatus = {cli, chan, msg
+	std.sljoin(&chan.buf, "~~= ")
+	std.sljoin(&chan.buf, msg)
+	std.sljoin(&chan.buf, " =~~\n")
 }
 
 const writeall = {fd, buf
--