Fixed horizontal scrolling - iomenu - interactive terminal-based selection menu HTML git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 70864688887921021de8ce2b803fdd4206214cda DIR parent 62853eb76762d6adfac4bd5cbcc410e96ebc955f HTML Author: Josuah Demangeonā ā µ <mail@josuah.net> Date: Sun, 19 Mar 2017 13:53:45 +0100 Fixed horizontal scrolling Diffstat: M iomenu.c | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) --- DIR diff --git a/iomenu.c b/iomenu.c @@ -137,11 +137,10 @@ print_lines(int count) static int prev_page(int pos, int cols) { - pos--; + pos -= pos > 0 ? 1 : 0; for (int col = 0; pos > 0; pos--) if ((col += strlen(matchv[pos]) + 2) > cols) return pos + 1; - return pos; } @@ -151,8 +150,7 @@ next_page(int pos, int cols) { for (int col = 0; pos < matchc; pos++) if ((col += strlen(matchv[pos]) + 2) > cols) - return pos - 1; - + return pos; return pos; } @@ -162,13 +160,11 @@ print_columns(void) { if (current < offset) { next = offset; - offset = prev; - prev = prev_page(offset, winsize.ws_col - 30 - 1); + offset = prev_page(offset, winsize.ws_col - 30 - 4); } else if (current >= next) { - prev = offset; offset = next; - next = next_page(offset, winsize.ws_col - 30 - 1); + next = next_page(offset, winsize.ws_col - 30 - 4); } fputs(offset > 0 ? "< " : " ", stderr); @@ -182,19 +178,6 @@ print_columns(void) static void -print_prompt(void) -{ - int limit = opt_lines ? winsize.ws_col : 30 - 2; - - fputc('\r', stderr); - for (int i = 0; i < limit; i++) - fputc(' ', stderr); - - fprintf(stderr, "\r%s %s", opt_prompt, input); -} - - -static void print_screen(int tty_fd) { int count; @@ -215,7 +198,7 @@ print_screen(int tty_fd) print_columns(); } - print_prompt(); + fprintf(stderr, "\r%s %s", opt_prompt, input); } @@ -256,8 +239,6 @@ filter_lines(void) matchv[matchc++] = linev[i]; free(tokv); - - next = next_page(0, winsize.ws_col - 30 - 1); }