diff options
author | Anatol Pomozov <anatol.pomozov@gmail.com> | 2020-04-17 19:36:38 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2020-05-09 03:58:39 +0200 |
commit | b96e0df4dceaa2677baa1a3563211950708d3e63 (patch) | |
tree | 00a5b415673f78eb4ad8bfa2dda037ff3744f35e /src/pacman/util.c | |
parent | c78eb48d915dc22146073162dda08ddf73c4a508 (diff) | |
download | pacman-b96e0df4dceaa2677baa1a3563211950708d3e63.tar.gz pacman-b96e0df4dceaa2677baa1a3563211950708d3e63.tar.xz |
Implement multibar UI
Multiplexed download requires ability to draw UI for multiple active progress
bars. To implement it we use ANSI codes to move cursor up/down and then
redraw the required progress bar.
`pacman_multibar_ui.active_downloads` field represents the list of active
downloads that correspond to progress bars.
`struct pacman_progress_bar` is a data structure for a progress bar.
In some cases (e.g. database downloads) we want to keep progress bars in order.
In some other cases (package downloads) we want to move completed items to the
top of the screen. Function `multibar_move_completed_up` allows to configure
such behavior.
Per discussion in the maillist we do not want to show download progress for
signature files.
Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'src/pacman/util.c')
-rw-r--r-- | src/pacman/util.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/pacman/util.c b/src/pacman/util.c index 97b8e06d..03035037 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -1837,3 +1837,21 @@ char *arg_to_string(int argc, char *argv[]) strcpy(p, argv[i]); return cl_text; } + +/* Moves console cursor `lines` up */ +void console_cursor_move_up(unsigned int lines) +{ + printf("\x1B[%dF", lines); +} + +/* Moves console cursor `lines` down */ +void console_cursor_move_down(unsigned int lines) +{ + printf("\x1B[%dE", lines); +} + +/* Erases line from the current cursor position till the end of the line */ +void console_erase_line(void) +{ + printf("\x1B[K"); +} |