diff options
author | June McEnroe <june@causal.agency> | 2019-07-20 17:05:14 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-07-20 17:05:14 -0400 |
commit | 697685d7954474e046afc4477a3ea24f628314e0 (patch) | |
tree | 900aa15b0952cb1eae9bd4254c99b7e0843bf443 | |
parent | Handle shotty output options more centrally (diff) | |
download | src-697685d7954474e046afc4477a3ea24f628314e0.tar.gz src-697685d7954474e046afc4477a3ea24f628314e0.zip |
Handle media copy sequence in shotty
This all still feels a bit gross for some reason.
-rw-r--r-- | bin/man1/shotty.1 | 4 | ||||
-rw-r--r-- | 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 fac1e044..41cb4e97 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(); } |