From fbf4a58b75d997273b6e2b5ab471a986dbfd1151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 17 May 2017 10:07:24 +0200 Subject: vis: ensure complete ! command output is displayed For interactive processes started using `:!` stdout is redirected to stderr normally used by vis to draw its user interface. For some reason the first byte written by the interactive application is not being displayed. I suspect it has something to do with the terminal state change. For now we are writing a dummy space (which is never shown) ourself to ensure that the complete output is visible. Fix #545 --- vis.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index cf0a922..e4a706c 100644 --- a/vis.c +++ b/vis.c @@ -1734,12 +1734,20 @@ int vis_pipe(Vis *vis, File *file, Filerange *range, const char *argv[], dup2(pin[0], STDIN_FILENO); close(pin[0]); close(pin[1]); - if (interactive) + if (interactive) { dup2(STDERR_FILENO, STDOUT_FILENO); - else if (read_stdout) + /* For some reason the first byte written by the + * interactive application is not being displayed. + * It probably has something to do with the terminal + * state change. By writing a dummy byte ourself we + * ensure that the complete output is visible. + */ + write(STDOUT_FILENO, " ", 1); + } else if (read_stdout) { dup2(pout[1], STDOUT_FILENO); - else + } else { dup2(null, STDOUT_FILENO); + } close(pout[1]); close(pout[0]); if (!interactive) { -- cgit v1.2.3