From 8fc49e14093b4ab96a417227e7bda5cfc8f1213c Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 12 Jul 2019 18:41:04 -0400 Subject: Support insert mode in shotty This is how curses puts characters into the bottom-right cell of the terminal. --- bin/shotty.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/shotty.c b/bin/shotty.c index 9c523677..62b109d4 100644 --- a/bin/shotty.c +++ b/bin/shotty.c @@ -51,6 +51,7 @@ static struct Style def = { .fg = 7 }; static uint rows, cols; static uint y, x; +static bool insert; static struct Style style; static struct Cell *cells; @@ -65,6 +66,10 @@ static void clear(struct Cell *a, struct Cell *b) { } } +static void move(struct Cell *dst, struct Cell *src, uint len) { + memmove(dst, src, sizeof(*dst) * len); +} + static char updateNUL(wchar_t ch) { switch (ch) { case BS: if (x) x--; return NUL; @@ -82,7 +87,14 @@ static char updateNUL(wchar_t ch) { warnx("unhandled \\u%X", ch); return NUL; } + if (x + width > cols) { + warnx("cannot fit '%lc'", ch); + return NUL; + } + if (insert) { + move(cell(y, x + width), cell(y, x), cols - x - width); + } cell(y, x)->style = style; cell(y, x)->ch = ch; @@ -177,8 +189,20 @@ static char updateCSI(wchar_t ch) { clear(a, b); } - break; case SM: // ignore - break; case RM: // ignore + break; case SM: { + if (dec) break; + switch (ps[0]) { + break; case 4: insert = true; + break; default: warnx("unhandled SM %u", ps[0]); + } + } + break; case RM: { + if (dec) break; + switch (ps[0]) { + break; case 4: insert = false; + break; default: warnx("unhandled RM %u", ps[0]); + } + } break; case SGR: { if (ps[0] == 38 && ps[1] == 5) { -- cgit 1.4.1 name='qt'>
path: root/Library/Application Support (unfollow)
Commit message (Collapse)Author
2016-09-17Forward pbd through *.local SSHJune McEnroe
2016-09-17Add pbcopy and pbpaste using pbdJune McEnroe
2016-09-17Check child status in pbdJune McEnroe
2016-09-17Factor out spawn in pbdJune McEnroe
2016-09-17Add initial pbd implementationJune McEnroe
Error handling in C is tedious.
2016-09-16Execute Homebrew SSH for tux iTerm profileJune McEnroe
2016-09-16Add Include config_private to SSH configJune McEnroe
2016-09-16Disable custom login command for local iTerm profileJune McEnroe
2016-09-16Add tux profile to iTermJune McEnroe
2016-09-15Use err(3) in xxJune McEnroe
2016-09-15Use sysexits.h in xxJune McEnroe
2016-09-15Use strtoul in xxJune McEnroe
Oops.
2016-09-15Write xx usage to stderrJune McEnroe
2016-09-13Use nvim as MANPAGERJune McEnroe
2016-09-13Use return value of getopt in xxJune McEnroe
On macOS/FreeBSD, optopt is always set after calling getopt. On Linux, optopt is only set if an unrecognized option was found. What is the point of POSIX if such behaviour can differ?
2016-09-12Compile xx.c with clang specificallyJune McEnroe
2016-09-12Prevent offset from xx when reading zeroJune McEnroe
2016-09-12Rewrite xx.cJune McEnroe
2016-09-12Fix ascii alignment in xxJune McEnroe
2016-09-12Add -s flag to xxJune McEnroe
2016-09-12Add -a flag to xxJune McEnroe
2016-09-12Add -o flag to xxJune McEnroe
2016-09-12Add -g option to xxJune McEnroe
2016-09-12Add -c option to xxJune McEnroe
2016-09-12Add .bin/xx.cJune McEnroe
2016-09-08Rename colorscheme to lameJune McEnroe
2016-09-04Simplify colors syntax in zsh promptJune McEnroe
2016-08-29Color rubyStringDelimiter as StringJune McEnroe
2016-08-24Highlight rubyDefine as StructureJune McEnroe
2016-08-23Remove scroll bindings from nvim configJune McEnroe
2016-08-17Highlight Search with black foregroundJune McEnroe
2016-08-15Remove gruvboxJune McEnroe
2016-08-04Remove march from SSH configJune McEnroe
2016-08-01Disable tab indicators in iTermJune McEnroe
2016-07-30Color PreProc DarkGreenJune McEnroe
2016-07-29Color Structure and Typedef in grayJune McEnroe
2016-07-27Color comments DarkBlue and LightBlueJune McEnroe
2016-07-27Color macros in yellowJune McEnroe
2016-07-26Colorscheme colors and schemesJune McEnroe
2016-07-26Add ''subtle'' colorschemeJune McEnroe
I'm just trying this out.
2016-07-26Add htoprcJune McEnroe
2016-07-24Add may and refactor ssh configJune McEnroe
2016-07-18Disable cursorlineJune McEnroe
2016-07-18Use hard constrast gruvbox darkJune McEnroe
2016-07-15Remove vim configurationJune McEnroe
2016-07-15Add readline to README configurations listJune McEnroe
2016-07-15Add vendor script to READMEJune McEnroe
2016-07-15Pull latest pathogen and gruvboxJune McEnroe