iPaginating like in dmenu. This works really well! - 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 930de4d46310c943ccc2ee55d2b55e39a6941b50 /scm/iomenu/commit/930de4d46310c943ccc2ee55d2b55e39a6941b50.gph bitreich.org 70 1parent a393b370908b21080348141ea591395502f4a36e /scm/iomenu/commit/a393b370908b21080348141ea591395502f4a36e.gph bitreich.org 70 hAuthor: Josuah Demangeonā  ā µ URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sat, 18 Mar 2017 23:29:25 +0100 Err bitreich.org 70 i Err bitreich.org 70 iPaginating like in dmenu. This works really well! Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 43 +++++++++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 32 insertions(+), 11 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@@ -18,7 +18,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i char input[BUFSIZ]; Err bitreich.org 70 i-size_t current = 0, offset = 0, last = 0; Err bitreich.org 70 i+size_t current = 0, offset = 0, prev = 0, next = 0; Err bitreich.org 70 i size_t linec = 0, matchc = 0; Err bitreich.org 70 i char **linev = NULL, **matchv = NULL; Err bitreich.org 70 i char *opt_prompt = ""; Err bitreich.org 70 i@@ -140,20 +140,19 @@ filter_lines(void) 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 limit, int current) Err bitreich.org 70 i+print_string(char *str, size_t cols, int current) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t i, col = 1; Err bitreich.org 70 i+ size_t col = 1; Err bitreich.org 70 i Err bitreich.org 70 i- if (col >= limit) 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(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+ fputs(str, stderr); Err bitreich.org 70 i Err bitreich.org 70 i- if (col < limit) { 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@@ -181,12 +180,34 @@ print_lines(size_t count, size_t cols) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i+update_pages(size_t pos, size_t cols) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t col; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (prev = pos, col = 0; prev > 0; prev--) Err bitreich.org 70 i+ if ((col += strlen(matchv[prev]) + 2) > cols) Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ 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+ 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 = 30; 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+ 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+ } Err bitreich.org 70 i Err bitreich.org 70 i- for (size_t i = offset; col < cols && i < matchc; i++) Err bitreich.org 70 i- col += print_string(matchv[i], cols - col, i == current); 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 } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 .