From 80fbb7e1ead4d16f1f4d511d30df18eeb65ceafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Bakker?= Date: Fri, 16 Jun 2023 11:59:25 +0200 Subject: Add fullscreen param to vis_pipe_collect() and Lua API vis:pipe() This enables restoring the terminal from a fullscreen command like curses based program. Use cases are e.g. a file picker based on some external program like nnn (https://github.com/jarun/nnn). --- vis.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index f21efa8..0ffbd39 100644 --- a/vis.c +++ b/vis.c @@ -1729,7 +1729,8 @@ Regex *vis_regex(Vis *vis, const char *pattern) { int vis_pipe(Vis *vis, File *file, Filerange *range, const char *argv[], void *stdout_context, ssize_t (*read_stdout)(void *stdout_context, char *data, size_t len), - void *stderr_context, ssize_t (*read_stderr)(void *stderr_context, char *data, size_t len)) { + void *stderr_context, ssize_t (*read_stderr)(void *stderr_context, char *data, size_t len), + bool fullscreen) { /* if an invalid range was given, stdin (i.e. key board input) is passed * through the external command. */ @@ -1754,7 +1755,7 @@ int vis_pipe(Vis *vis, File *file, Filerange *range, const char *argv[], return -1; } - vis->ui->terminal_save(vis->ui); + vis->ui->terminal_save(vis->ui, fullscreen); pid_t pid = fork(); if (pid == -1) { @@ -1958,13 +1959,14 @@ static ssize_t read_buffer(void *context, char *data, size_t len) { return len; } -int vis_pipe_collect(Vis *vis, File *file, Filerange *range, const char *argv[], char **out, char **err) { +int vis_pipe_collect(Vis *vis, File *file, Filerange *range, const char *argv[], char **out, char **err, bool fullscreen) { Buffer bufout, buferr; buffer_init(&bufout); buffer_init(&buferr); int status = vis_pipe(vis, file, range, argv, &bufout, out ? read_buffer : NULL, - &buferr, err ? read_buffer : NULL); + &buferr, err ? read_buffer : NULL, + fullscreen); buffer_terminate(&bufout); buffer_terminate(&buferr); if (out) -- cgit v1.2.3