shithub: irc.myr

Download patch

ref: 995307348c9d76513e09b520d55d0d4d0997813a
parent: 85e0e28baed5b6e97319aaaae564491f62af33b5
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Nov 19 11:59:06 EST 2017

Do nick highlighting.

--- a/irc.myr
+++ b/irc.myr
@@ -35,7 +35,7 @@
 	nick	: byte[:]
 	ds	: byte[:]
 	buf	: byte[512]
-	off	: std.size
+	nbuf	: std.size
 	chan	: chan#[:]
 	focus	: std.size
 	live	: bool
@@ -107,9 +107,9 @@
 
 	srv = fd2srv(irc, fd)
 
-	match std.read(srv.fd, srv.buf[srv.off:])
+	match std.read(srv.fd, srv.buf[srv.nbuf:])
 	| `std.Ok 0:	closed(irc, srv, "eof")
-	| `std.Ok n:	srv.off += n
+	| `std.Ok n:	srv.nbuf += n
 	| `std.Err e:	closed(irc, srv, "error reading")
 	;;
 
@@ -271,11 +271,11 @@
 const nextln = {irc, srv
 	var r
 
-	match std.strfind(srv.buf[:srv.off], "\r\n")
+	match std.strfind(srv.buf[:srv.nbuf], "\r\n")
 	| `std.Some i:
 		r = std.sldup(srv.buf[:i])
-		std.slcp(srv.buf[:srv.off - i - 2], srv.buf[i + 2:srv.off])
-		srv.off = srv.off - i - 2
+		std.slcp(srv.buf[:srv.nbuf - i - 2], srv.buf[i + 2:srv.nbuf])
+		srv.nbuf = srv.nbuf - i - 2
 		-> `std.Some r
 	| `std.None:
 		-> `std.None
@@ -899,7 +899,7 @@
 		margin = 0
 		match h
 		| `Msg (m, ln):
-			margin = c.gutter + termdraw.strwidth(t, " > ")
+			margin = c.gutter + termdraw.strwidth(t, " | ")
 			width = termdraw.strwidth(t, ln)
 		| `Join user:
 			margin = termdraw.strwidth(t, "#joined: ")
@@ -932,10 +932,14 @@
 	for (tm, h) : c.hist[c.hist.len - c.scroll - count:]
 		match h
 		| `Msg (m, ln):
+			termdraw.setattr(t, termdraw.Bold)
+
 			x = std.clamp(x0 + c.gutter - termdraw.strwidth(t, m)  - 3, 0, dx)
 			(x, y) = draw(t, m, x, y, x1, y1)
-			(x, y) = draw(t, " > ", x, y, x1, y1)
+			(x, y) = draw(t, " | ", x, y, x1, y1)
+			termdraw.setattr(t, lineattr(irc, ln[off:]))
 			(x, y) = draw(t, ln[off:], x, y, x1, y1)
+			termdraw.setattr(t, termdraw.Normal)
 		| `Join user:
 			(x, y) = draw(t, "#joined ", x0, y, x1, y1)
 			(x, y) = draw(t, user[off:], x, y, x1, y1)
@@ -1016,6 +1020,17 @@
 	termdraw.put(t, "{}{}", chan, ln)
 	termdraw.cursorpos(t, cx, y0)
 	std.slfree(ln)
+}
+
+const lineattr = {irc, ln
+	match cursrv(irc)
+	| `std.None:	-> termdraw.Normal
+	| `std.Some srv:
+		match std.strfind(ln, srv.nick)
+		| `std.Some _:	-> termdraw.Italic
+		| `std.None:	-> termdraw.Normal
+		;;
+	;;
 }
 
 const inputstr = {irc, chan, dx
--