iiomenu.c: fixed tab width calculation - 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 4b996da3d1d470de301037c3de2cf45d03325c48 /scm/iomenu/commit/4b996da3d1d470de301037c3de2cf45d03325c48.gph bitreich.org 70 1parent 695c25f7dc0613e9aa3e9057b333ec22c0e580f9 /scm/iomenu/commit/695c25f7dc0613e9aa3e9057b333ec22c0e580f9.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:josuah.demangeon@gandi.net bitreich.org 70 iDate: Mon, 4 Sep 2017 10:23:14 +0200 Err bitreich.org 70 i Err bitreich.org 70 iiomenu.c: fixed tab width calculation Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 23 ++++++++++++----------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 12 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@@ -116,13 +116,13 @@ reset_terminal(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static size_t Err bitreich.org 70 i-str_width(char *s) Err bitreich.org 70 i+width(char *s) Err bitreich.org 70 i { Err bitreich.org 70 i int width = 0; Err bitreich.org 70 i Err bitreich.org 70 i while (*s) { Err bitreich.org 70 i if (*s++ == '\t') Err bitreich.org 70 i- width += (width + 7) % 8; Err bitreich.org 70 i+ width += 8 - (width % 8); Err bitreich.org 70 i else Err bitreich.org 70 i width++; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -137,7 +137,7 @@ prev_page(int pos, int cols) Err bitreich.org 70 i Err bitreich.org 70 i pos -= pos > 0 ? 1 : 0; Err bitreich.org 70 i for (col = 0; pos > 0; pos--) Err bitreich.org 70 i- if ((col += str_width(matchv[pos]) + 2) > cols) Err bitreich.org 70 i+ if ((col += width(matchv[pos]) + 2) > cols) Err bitreich.org 70 i return pos + 1; Err bitreich.org 70 i return pos; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -148,7 +148,7 @@ next_page(int pos, int cols) Err bitreich.org 70 i int col; Err bitreich.org 70 i Err bitreich.org 70 i for (col = 0; pos < matchc; pos++) Err bitreich.org 70 i- if ((col += str_width(matchv[pos]) + 2) > cols) Err bitreich.org 70 i+ if ((col += width(matchv[pos]) + 2) > cols) Err bitreich.org 70 i return pos; Err bitreich.org 70 i return pos; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -169,12 +169,14 @@ move(signed int sign) Err bitreich.org 70 i static void Err bitreich.org 70 i move_page(signed int sign) Err bitreich.org 70 i { Err bitreich.org 70 i- int i = current - current % rows + rows * sign; Err bitreich.org 70 i+ int i; Err bitreich.org 70 i Err bitreich.org 70 i- if (!opt['l']) Err bitreich.org 70 i+ if (opt['l'] <= 0) Err bitreich.org 70 i return; Err bitreich.org 70 i Err bitreich.org 70 i- if (0 > i || i > matchc) Err bitreich.org 70 i+ i = current - current % rows + rows * sign; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (!(0 < i && i < matchc)) Err bitreich.org 70 i return; Err bitreich.org 70 i Err bitreich.org 70 i current = i - 1; Err bitreich.org 70 i@@ -232,6 +234,8 @@ print_lines(void) Err bitreich.org 70 i Err bitreich.org 70 i while (printed++ < rows) Err bitreich.org 70 i fputs("\n\033[K", stderr); Err bitreich.org 70 i+ Err bitreich.org 70 i+ fprintf(stderr, "\033[%dA\r\033[K", rows); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -273,7 +277,6 @@ print_screen(void) Err bitreich.org 70 i Err bitreich.org 70 i if (opt['l'] > 0) { Err bitreich.org 70 i print_lines(); Err bitreich.org 70 i- fprintf(stderr, "\033[%dA\r", rows); Err bitreich.org 70 i } else { Err bitreich.org 70 i print_segments(); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -432,14 +435,12 @@ top: Err bitreich.org 70 i Err bitreich.org 70 i case CSI('6'): /* page down */ Err bitreich.org 70 i if (fgetc(stdin) != '~') break; Err bitreich.org 70 i- /* FALLTHROUGH */ Err bitreich.org 70 i case CTL('V'): Err bitreich.org 70 i move_page(+1); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i case CTL('I'): /* tab */ Err bitreich.org 70 i- if (linec > 0) Err bitreich.org 70 i- strcpy(input, matchv[current]); Err bitreich.org 70 i+ if (linec > 0) strcpy(input, matchv[current]); Err bitreich.org 70 i filter(); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 .