diff options
Diffstat (limited to 'client/rl.cpp')
-rw-r--r-- | client/rl.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/client/rl.cpp b/client/rl.cpp index 2e74e5f..493f753 100644 --- a/client/rl.cpp +++ b/client/rl.cpp @@ -10,24 +10,22 @@ #include "cmd.h" #include "parse.h" -void rl_printf(const char *fmt, ...) { +static char* saved_line; +static int saved_point, saved_end; + +void _rl_printf_start() { // save line - char* saved_line = rl_copy_text(0, rl_end); - int saved_point = rl_point; - int saved_end = rl_end; + saved_line = rl_copy_text(0, rl_end); + saved_point = rl_point; + saved_end = rl_end; // clear line rl_save_prompt(); rl_replace_line("", 0); rl_redisplay(); +} - // printf - va_list args; - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - - // restore line +void _rl_printf_stop() { rl_restore_prompt(); rl_replace_line(saved_line, 0); rl_point = saved_point; @@ -37,6 +35,17 @@ void rl_printf(const char *fmt, ...) { free(saved_line); } +void rl_printf(const char *fmt, ...) { + _rl_printf_start(); + + va_list args; + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + + _rl_printf_stop(); +} + static void cli_cmd(char* cmd) { cmd += strspn(cmd, IFS); // skip leading whitespace char* line = consume_token(cmd, IFS); |