iworking without scrolling - iomenu - interactive terminal-based selection menu Err bitreich.org 70 hgit clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu URL:git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu bitreich.org 70 1Log /scm/iomenu/log.gph bitreich.org 70 1Files /scm/iomenu/files.gph bitreich.org 70 1Refs /scm/iomenu/refs.gph bitreich.org 70 1Tags /scm/iomenu/tag bitreich.org 70 1README /scm/iomenu/file/README.gph bitreich.org 70 1LICENSE /scm/iomenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 32c00d932198ce81decc5b864da82bee5a482d26 /scm/iomenu/commit/32c00d932198ce81decc5b864da82bee5a482d26.gph bitreich.org 70 1parent e58594b7646d9c29a192174f194359b039001909 /scm/iomenu/commit/e58594b7646d9c29a192174f194359b039001909.gph bitreich.org 70 hAuthor: Josuah Demangeonā  ā µ URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sat, 18 Mar 2017 13:05:53 +0100 Err bitreich.org 70 i Err bitreich.org 70 iworking without scrolling Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 54 +++++++++++++++++-------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 30 insertions(+), 24 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70 i@@ -162,13 +162,28 @@ matching_next(size_t pos) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-void Err bitreich.org 70 i-print_line(size_t pos, const size_t cols) Err bitreich.org 70 i+size_t Err bitreich.org 70 i+print_string(char *str, size_t limit, int current) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(stderr, pos == current ? Err bitreich.org 70 i- "\n\033[30;47m\033[K%s\033[m" : "\n\033[K%s", Err bitreich.org 70 i- linev[pos]->text Err bitreich.org 70 i- ); Err bitreich.org 70 i+ size_t i, col = 1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (col >= limit) Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fputs(current ? "\033[30;47m" : "", stderr); Err bitreich.org 70 i+ fputs(opt_lines ? "\033[K " : " ", stderr); Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; str[i] && col < limit; i++, col++) Err bitreich.org 70 i+ fputc(str[i], stderr); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (col < limit) { Err bitreich.org 70 i+ fputc(' ', stderr); Err bitreich.org 70 i+ col++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ fputs("\033[m", stderr); Err bitreich.org 70 i+ Err bitreich.org 70 i+ return col; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -179,7 +194,8 @@ print_lines(size_t count, size_t cols) Err bitreich.org 70 i Err bitreich.org 70 i for (size_t i = offset; printed < count && i < linec; i++) { Err bitreich.org 70 i if (linev[i]->match) { Err bitreich.org 70 i- print_line(i, cols); Err bitreich.org 70 i+ fputc('\n', stderr); Err bitreich.org 70 i+ print_string(linev[i]->text, cols, i == current); Err bitreich.org 70 i printed++; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -189,27 +205,15 @@ print_lines(size_t count, size_t cols) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-int Err bitreich.org 70 i-print_column(size_t pos, size_t col, size_t cols) Err bitreich.org 70 i-{ Err bitreich.org 70 i- fputs(pos == current ? "\033[30;47m " : " ", stderr); Err bitreich.org 70 i- Err bitreich.org 70 i- for (size_t i = 0; col + i < cols && linev[pos]->text[i]; i++) Err bitreich.org 70 i- fputc(linev[pos]->text[i], stderr); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs(pos == current ? " \033[m" : " ", stderr); Err bitreich.org 70 i- Err bitreich.org 70 i- return col; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i- Err bitreich.org 70 i void Err bitreich.org 70 i print_columns(size_t cols) Err bitreich.org 70 i { Err bitreich.org 70 i size_t col = 20; Err bitreich.org 70 i Err bitreich.org 70 i- for (size_t i = offset; col < cols && i < linec; i++) Err bitreich.org 70 i- col = print_column(i, col, cols); Err bitreich.org 70 i+ for (size_t i = offset; col < cols && i < linec; i++) { Err bitreich.org 70 i+ if (linev[i]->match) Err bitreich.org 70 i+ col += print_string(linev[i]->text, cols - col, i == current); Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -222,7 +226,7 @@ print_prompt(size_t cols) Err bitreich.org 70 i for (size_t i = 0; i < limit; i++) Err bitreich.org 70 i fputc(' ', stderr); Err bitreich.org 70 i Err bitreich.org 70 i- fprintf(stderr, "\r\033[1m%s%s\033[m", opt_prompt, input); Err bitreich.org 70 i+ fprintf(stderr, "\r%s %s", opt_prompt, input); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -237,6 +241,8 @@ print_screen(int tty_fd) Err bitreich.org 70 i Err bitreich.org 70 i count = MIN(opt_lines, w.ws_row - 2); Err bitreich.org 70 i Err bitreich.org 70 i+ fputs("\r\033[K", stderr); Err bitreich.org 70 i+ Err bitreich.org 70 i if (opt_lines) { Err bitreich.org 70 i print_lines(count, w.ws_col); Err bitreich.org 70 i fprintf(stderr, "\033[%ldA", count); Err bitreich.org 70 .