diff --git a/src/include/pv.h b/src/include/pv.h index a8009ab..c467ac0 100644 --- a/src/include/pv.h +++ b/src/include/pv.h @@ -240,6 +240,7 @@ extern void pv_state_output_set(pvstate_t, int, const char *); extern void pv_state_average_rate_window_set(pvstate_t, unsigned int); extern void pv_state_set_terminal_supports_utf8(pvstate_t, bool); extern void pv_state_othermonitor_set(pvstate_t, pid_t, int, int); +extern void pv_state_cancel_output_if_empty_format_string(pvstate_t); extern void pv_state_inputfiles(pvstate_t, unsigned int, const char **); extern void pv_state_watchfds(pvstate_t, unsigned int, const pid_t *, const int *); diff --git a/src/main/main.c b/src/main/main.c index 67e4a20..604189f 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -325,6 +325,7 @@ static int pv__run_monitor(const char *program_name, pvstate_t state, pvside_t s /*@+observertrans@ */ pv_state_inputfiles(state, 1, dummy_argv); + pv_state_cancel_output_if_empty_format_string(state); return pv_main_loop(state); } @@ -892,10 +893,12 @@ int main(int argc, char **argv) break; case PV_ACTION_TRANSFER: /* Normal "transfer data" mode. */ + pv_state_cancel_output_if_empty_format_string(state); retcode = pv_main_loop(state); break; case PV_ACTION_STORE_AND_FORWARD: /* Store-and-forward transfer mode. */ + pv_state_cancel_output_if_empty_format_string(state); retcode = pv__store_and_forward(state, opts, can_have_eta); break; case PV_ACTION_WATCHFD: diff --git a/src/pv/loop.c b/src/pv/loop.c index 5c82bc9..c500fb7 100644 --- a/src/pv/loop.c +++ b/src/pv/loop.c @@ -185,10 +185,6 @@ int pv_main_loop(pvstate_t state) unsigned int file_idx; bool output_is_pipe; - /* TODO: treat "-F ''" as "-q" so there's no extra blank line. */ - /* TODO: if "-q", turn off "-c", again so there's no blank line. */ - /* May need local no_display and cursor flags for this. */ - /* * "written" is ALWAYS bytes written by the last transfer. * diff --git a/src/pv/state.c b/src/pv/state.c index 81cba2c..38f4e9e 100644 --- a/src/pv/state.c +++ b/src/pv/state.c @@ -779,6 +779,18 @@ void pv_state_othermonitor_set(pvstate_t state, pid_t pid, int read_fd, int writ state->control.othermonitor_write_fd = write_fd; } +/* If the format string is set to an empty string, stop all display output. */ +void pv_state_cancel_output_if_empty_format_string(pvstate_t state) +{ + if (NULL == state->control.format_string) + return; + if ('\0' != state->control.format_string[0]) + return; + debug("%s", "empty format string - setting no_display and turning off cursor positioning"); + state->control.no_display = true; + state->control.cursor = false; +} + /* * Set the array of input files. */