From 0d1152340ccb3c6a0a8b4160fda34cc6687b236e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 18 May 2016 12:31:33 +0200 Subject: vis: add an interactive mode to vis_pipe{,_collect}(...) Previously the interactive mode was implicitly enabled by passing an invalid range. However for some use cases (e.g. completion) we need to be able to pipe a given text range to an external process without also redirecting stderr (which is used to draw the slmenu interface on top of vis). --- vis.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'vis.h') diff --git a/vis.h b/vis.h index 0b819a9..e4ffa06 100644 --- a/vis.h +++ b/vis.h @@ -409,6 +409,10 @@ bool vis_cmd_unregister(Vis*, const char *name); bool vis_prompt_cmd(Vis*, const char *cmd); /* pipe a given file range to an external process + * + * in interactive mode stdin and stderr are not redirected, hence they + * can be used to read keyboard input and draw a user interface on top + * of vis. Attempting to pipe an invalid range enables interactive mode. * * if argv contains only one non-NULL element the command is executed using * /bin/sh -c (i.e. argument expansion is performed by the shell). In contrast @@ -418,14 +422,14 @@ bool vis_prompt_cmd(Vis*, const char *cmd); * if read_std{out,err} are non-NULL they will be called when output from * the forked process is available. */ -int vis_pipe(Vis *vis, Filerange *range, const char *argv[], +int vis_pipe(Vis *vis, Filerange *range, bool interactive, 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)); /* pipe a range to an external application, return its exit status and store * everything that is written to stdout/stderr in the gitven char pointers * which have to be free(3)-ed by the caller */ -int vis_pipe_collect(Vis *vis, Filerange *range, const char *argv[], char **out, char **err); +int vis_pipe_collect(Vis *vis, Filerange *range, bool interactive, const char *argv[], char **out, char **err); /* given the start of a key, returns a pointer to the start of the one immediately * following as will be processed by the input system. skips over special keys -- cgit v1.2.3