aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorJörg Bakker <captaingroove@openmultimedia.org>2023-06-16 11:59:25 +0200
committerRandy Palamar <palamar@ualberta.ca>2023-07-18 21:06:46 -0600
commit80fbb7e1ead4d16f1f4d511d30df18eeb65ceafa (patch)
tree106950ed5bdcfbc14b18c6bc8e96df92aa951268 /vis.c
parent599ced0bfc378682053484a9658bd59c02c96973 (diff)
downloadvis-80fbb7e1ead4d16f1f4d511d30df18eeb65ceafa.tar.gz
vis-80fbb7e1ead4d16f1f4d511d30df18eeb65ceafa.tar.xz
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).
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c10
1 files changed, 6 insertions, 4 deletions
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)