diff options
author | Steve Bennett <steveb@workware.net.au> | 2018-01-01 13:42:35 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2018-01-01 13:42:52 +1000 |
commit | 88c5e1f7e0341d4f16dbe54a8f94293a641a7850 (patch) | |
tree | 7aca809b56e283dad2dd4a28a8ec9712c9e82415 /linenoise.c | |
parent | c445502bd5b3dcafb4f01988e61eb2904ae1573b (diff) | |
download | jimtcl-88c5e1f7e0341d4f16dbe54a8f94293a641a7850.zip jimtcl-88c5e1f7e0341d4f16dbe54a8f94293a641a7850.tar.gz jimtcl-88c5e1f7e0341d4f16dbe54a8f94293a641a7850.tar.bz2 |
linenoise: Add ^Z (SUSP) support
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'linenoise.c')
-rw-r--r-- | linenoise.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/linenoise.c b/linenoise.c index f65d383..f6b9442 100644 --- a/linenoise.c +++ b/linenoise.c @@ -127,8 +127,10 @@ #include <stdlib.h> #include <stdarg.h> #include <stdio.h> +#include <assert.h> #include <errno.h> #include <string.h> +#include <signal.h> #include <stdlib.h> #include <sys/types.h> @@ -289,6 +291,8 @@ static void fd_printf(int fd, const char *format, ...) va_start(args, format); n = vsnprintf(buf, sizeof(buf), format, args); + /* This will never happen because we are sure to use fd_printf() for short sequences */ + assert(n < sizeof(buf)); va_end(args); IGNORE_RC(write(fd, buf, n)); } @@ -1230,6 +1234,16 @@ process_char: case ctrl('C'): /* ctrl-c */ errno = EAGAIN; return -1; + case ctrl('Z'): /* ctrl-z */ +#ifdef SIGTSTP + /* send ourselves SIGSUSP */ + disableRawMode(current); + raise(SIGTSTP); + /* and resume */ + enableRawMode(current); + refreshLine(current->prompt, current); +#endif + continue; case 127: /* backspace */ case ctrl('H'): if (remove_char(current, current->pos - 1) == 1) { |