ihalf-working horizontal scrolling, with indicators - 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 d445637975d35e90023bcf4c7ebe73367b8b66e3 /scm/iomenu/commit/d445637975d35e90023bcf4c7ebe73367b8b66e3.gph bitreich.org 70 1parent 930de4d46310c943ccc2ee55d2b55e39a6941b50 /scm/iomenu/commit/930de4d46310c943ccc2ee55d2b55e39a6941b50.gph bitreich.org 70 hAuthor: Josuah Demangeonā  ā µ URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 19 Mar 2017 00:07:23 +0100 Err bitreich.org 70 i Err bitreich.org 70 ihalf-working horizontal scrolling, with indicators Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 49 +++++++++++++------------------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 21 insertions(+), 28 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@@ -116,6 +116,8 @@ filter_lines(void) Err bitreich.org 70 i char **tokv = NULL, *s, buffer[sizeof (input)]; Err bitreich.org 70 i size_t tokc = 0, n = 0; Err bitreich.org 70 i Err bitreich.org 70 i+ current = offset = prev = next = 0; Err bitreich.org 70 i+ Err bitreich.org 70 i /* tokenize input from space characters, this comes from dmenu */ Err bitreich.org 70 i strcpy(buffer, input); Err bitreich.org 70 i for (s = strtok(buffer, " "); s; s = strtok(NULL, " "), tokc++) { Err bitreich.org 70 i@@ -139,27 +141,13 @@ filter_lines(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-size_t Err bitreich.org 70 i-print_string(char *str, size_t cols, int current) Err bitreich.org 70 i+void Err bitreich.org 70 i+print_string(char *str, int current) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t col = 1; Err bitreich.org 70 i- Err bitreich.org 70 i- if (col >= cols) 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- fputs(str, stderr); Err bitreich.org 70 i- Err bitreich.org 70 i- if (col < cols) { 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+ fprintf(stderr, "%s \033[m", str); Err bitreich.org 70 i+ fputs(" \033[m", stderr); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -171,7 +159,7 @@ print_lines(size_t count, size_t cols) Err bitreich.org 70 i Err bitreich.org 70 i for (size_t i = offset; p < count && i < matchc; p++, i++) { Err bitreich.org 70 i fputc('\n', stderr); Err bitreich.org 70 i- print_string(matchv[i], cols, i == current); Err bitreich.org 70 i+ print_string(matchv[i], i == current); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i while (p++ <= count) Err bitreich.org 70 i@@ -191,6 +179,8 @@ update_pages(size_t pos, size_t cols) Err bitreich.org 70 i for (next = pos, col = 0; next < matchc; next++) Err bitreich.org 70 i if ((col += strlen(matchv[next]) + 2) > cols) Err bitreich.org 70 i break; Err bitreich.org 70 i+ Err bitreich.org 70 i+ next--; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -199,15 +189,19 @@ print_columns(size_t cols) Err bitreich.org 70 i { Err bitreich.org 70 i if (current < offset) { Err bitreich.org 70 i offset = prev; Err bitreich.org 70 i- update_pages(prev, cols - 30); Err bitreich.org 70 i+ update_pages(offset, cols - 30 - 1); Err bitreich.org 70 i Err bitreich.org 70 i } else if (current >= next) { Err bitreich.org 70 i offset = next; Err bitreich.org 70 i- update_pages(current, cols - 30); Err bitreich.org 70 i+ update_pages(offset, cols - 30 - 1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i for (size_t i = offset; i < next && i < matchc; i++) Err bitreich.org 70 i- print_string(matchv[i], cols - 30, i == current); Err bitreich.org 70 i+ print_string(matchv[i], i == current); Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (next < matchc) Err bitreich.org 70 i+ fprintf(stderr, "\033[%ldC>", cols); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -217,9 +211,11 @@ print_prompt(size_t cols) Err bitreich.org 70 i size_t limit = opt_lines ? cols : 30; Err bitreich.org 70 i Err bitreich.org 70 i fputc('\r', stderr); Err bitreich.org 70 i- for (size_t i = 0; i < limit; i++) Err bitreich.org 70 i+ for (size_t i = 0; i < limit - 2; i++) Err bitreich.org 70 i fputc(' ', stderr); Err bitreich.org 70 i Err bitreich.org 70 i+ fputs(offset > 0 ? "< " : " ", stderr); Err bitreich.org 70 i+ 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@@ -269,6 +265,8 @@ remove_word_input() Err bitreich.org 70 i len = strlen(input) - 1; Err bitreich.org 70 i for (int i = len; i >= 0 && !isspace(input[i]); i--) Err bitreich.org 70 i input[i] = '\0'; Err bitreich.org 70 i+ Err bitreich.org 70 i+ filter_lines(); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -283,8 +281,6 @@ add_character(char key) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i filter_lines(); Err bitreich.org 70 i- Err bitreich.org 70 i- current = 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -320,20 +316,17 @@ input_key(FILE *tty_fp) Err bitreich.org 70 i Err bitreich.org 70 i case CONTROL('U'): Err bitreich.org 70 i input[0] = '\0'; Err bitreich.org 70 i- current = 0; Err bitreich.org 70 i filter_lines(); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i case CONTROL('W'): Err bitreich.org 70 i remove_word_input(); Err bitreich.org 70 i- filter_lines(); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i case 127: Err bitreich.org 70 i case CONTROL('H'): /* backspace */ Err bitreich.org 70 i input[strlen(input) - 1] = '\0'; Err bitreich.org 70 i filter_lines(); Err bitreich.org 70 i- current = 0; Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i case CONTROL('N'): Err bitreich.org 70 .