ref: 85e0e28baed5b6e97319aaaae564491f62af33b5
parent: c54c921e3df50784fd308fa6d6c7032b36991b52
author: Ori Bernstein <ori@eigenstate.org>
date: Fri Nov 17 11:52:46 EST 2017
Scroll overly long input lines.
--- a/irc.myr
+++ b/irc.myr
@@ -1000,17 +1000,53 @@
}
const drawinput = {irc, x0, y0, x1, y1, c- var t, chan, ln
+ var t, chan, ln, cx, dx
+ dx = x1 - x0
t = irc.term
- ln = getstr(irc.cmd)
chan = std.fmt("[{}] ", c.name)+ ln = inputstr(irc, chan, dx)
+ cx = x0 + (std.strcellwidth(chan) + irc.off : int)
+ if cx > dx
+ cx = dx
+ ;;
termdraw.setbg(t, termdraw.Default)
termdraw.move(t, x0, y0)
termdraw.clear(t, x0, y0, x1, y1)
termdraw.put(t, "{}{}", chan, ln)- termdraw.cursorpos(t, x0 + (std.strcellwidth(chan) + irc.off : int), y0)
+ termdraw.cursorpos(t, cx, y0)
std.slfree(ln)
+}
+
+const inputstr = {irc, chan, dx+ var w, s, o
+ var start, end
+
+ s = irc.cmd
+ o = (irc.off : int)
+ dx -= termdraw.strwidth(irc.term, chan)
+ w = 0
+ start = 0
+ end = 0
+ for var i = 0; i < s.len; i++
+ w += std.cellwidth(s[i])
+ if w >= dx
+ break
+ ;;
+ end++
+ ;;
+ while end < s.len && irc.off >= (w : std.size)
+ start++
+ while std.cellwidth(s[end]) == 0
+ start++
+ ;;
+ w += std.cellwidth(s[end])
+ end++
+ while end < s.len && std.cellwidth(s[end]) == 0
+ end++
+ ;;
+ ;;
+ -> getstr(s[start:end])
}
const srvmsg = {irc, args--
⑨