From 2d1ccaaea70c6b977c169f9f5d721a940b80377a Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Sat, 20 Jul 2019 17:05:14 -0400 Subject: Handle media copy sequence in shotty This all still feels a bit gross for some reason. --- bin/man1/shotty.1 | 4 ++++ bin/shotty.c | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bin/man1/shotty.1 b/bin/man1/shotty.1 index 1f747ee8..3ca3ef4b 100644 --- a/bin/man1/shotty.1 +++ b/bin/man1/shotty.1 @@ -35,6 +35,10 @@ and .Ev TERM Ns = Ns Cm xterm-256color as used by .Xr ncurses 3 . +A snapshot of the terminal +is output each time +a media copy sequence occurs, +or once at the end of the capture. . .Pp HTML output uses the classes diff --git a/bin/shotty.c b/bin/shotty.c index b394ece8..7cdf2d4a 100644 --- a/bin/shotty.c +++ b/bin/shotty.c @@ -74,7 +74,10 @@ static void move(struct Cell *dst, struct Cell *src, uint len) { } static struct { - bool debug, cursor, bright; + bool debug; + bool cursor; + bool bright; + bool done; } opts; static void span(const struct Style *prev, const struct Cell *cell) { @@ -186,6 +189,7 @@ static char updateNUL(wchar_t ch) { X(']', OSC) \ X('d', VPA) \ X('h', SM) \ + X('i', MC) \ X('l', RM) \ X('m', SGR) \ X('r', DECSTBM) @@ -211,6 +215,7 @@ static char updateESC(wchar_t ch) { switch (ch) { case '(': discard = true; return ESC; case '=': return NUL; + case '>': return NUL; case CSI: return CSI; case OSC: return OSC; default: warnx("unhandled ESC %lc", ch); return NUL; @@ -338,8 +343,13 @@ static char updateCSI(wchar_t ch) { scroll.bot = (n > 1 ? ps[1] - 1 : rows - 1); } - break; case 't': // ignore + break; case MC: { + if (ps[0] != 10) break; + opts.done = true; + html(); + } + break; case 't': // ignore break; default: warnx("unhandled CSI %lc", ch); } @@ -432,5 +442,5 @@ int main(int argc, char *argv[]) { } if (ferror(file)) err(EX_IOERR, "getwc"); - html(); + if (!opts.done) html(); } -- cgit 1.4.1