iiomenu.c: horizontal page navigation - 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 2b8b6e2287a5ea4663695d0d64aec90a1d2520da /scm/iomenu/commit/2b8b6e2287a5ea4663695d0d64aec90a1d2520da.gph bitreich.org 70
1parent 4b996da3d1d470de301037c3de2cf45d03325c48 /scm/iomenu/commit/4b996da3d1d470de301037c3de2cf45d03325c48.gph bitreich.org 70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net> URL:mailto:josuah.demangeon@gandi.net bitreich.org 70
iDate: Mon, 4 Sep 2017 11:07:24 +0200 Err bitreich.org 70
i Err bitreich.org 70
iiomenu.c: horizontal page navigation Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M iomenu.c | 48 +++++++++++++++++-------------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 26 insertions(+), 22 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@@ -24,7 +24,7 @@ Err bitreich.org 70
i static struct winsize ws; Err bitreich.org 70
i static struct termios termios; Err bitreich.org 70
i static int ttyfd; Err bitreich.org 70
i-static int current = 0, offset = 0, prev = 0, next = 0; Err bitreich.org 70
i+static int current = 0, offset = 0, next = 0; Err bitreich.org 70
i static int linec = 0, matchc = 0; Err bitreich.org 70
i static char **linev = NULL, **matchv = NULL; Err bitreich.org 70
i static char input[LINE_MAX], formatted[LINE_MAX * 8]; Err bitreich.org 70
i@@ -86,7 +86,7 @@ set_terminal(void) Err bitreich.org 70
i { Err bitreich.org 70
i struct termios new; Err bitreich.org 70
i Err bitreich.org 70
i- /* save cursor postition */ Err bitreich.org 70
i+ /* save currentsor postition */ Err bitreich.org 70
i fputs("\033[s", stderr); Err bitreich.org 70
i Err bitreich.org 70
i /* save attributes to `termios` */ Err bitreich.org 70
i@@ -109,7 +109,7 @@ reset_terminal(void) Err bitreich.org 70
i for (i = 0; i < rows + 1; i++) Err bitreich.org 70
i fputs("\r\033[K\n", stderr); Err bitreich.org 70
i Err bitreich.org 70
i- /* reset cursor position */ Err bitreich.org 70
i+ /* reset currentsor position */ Err bitreich.org 70
i fputs("\033[u", stderr); Err bitreich.org 70
i Err bitreich.org 70
i tcsetattr(ttyfd, TCSANOW, &termios); Err bitreich.org 70
i@@ -131,9 +131,9 @@ width(char *s) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-prev_page(int pos, int cols) Err bitreich.org 70
i+prev_page(int pos) Err bitreich.org 70
i { Err bitreich.org 70
i- int col; Err bitreich.org 70
i+ int col, cols = ws.ws_col - MARGIN - 4; 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@@ -143,9 +143,9 @@ prev_page(int pos, int cols) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-next_page(int pos, int cols) Err bitreich.org 70
i+next_page(int pos) Err bitreich.org 70
i { Err bitreich.org 70
i- int col; Err bitreich.org 70
i+ int col, cols = ws.ws_col - MARGIN - 4; Err bitreich.org 70
i Err bitreich.org 70
i for (col = 0; pos < matchc; pos++) Err bitreich.org 70
i if ((col += width(matchv[pos]) + 2) > cols) Err bitreich.org 70
i@@ -169,18 +169,23 @@ 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; Err bitreich.org 70
i- 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- i = current - current % rows + rows * sign; Err bitreich.org 70
i+ if (opt['l'] <= 0) { Err bitreich.org 70
i+ if (sign > 0) { Err bitreich.org 70
i+ offset = current = next; Err bitreich.org 70
i+ next = next_page(next); Err bitreich.org 70
i+ } else if (sign < 0) { Err bitreich.org 70
i+ next = offset; Err bitreich.org 70
i+ offset = current = prev_page(offset); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ int 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+ 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- move(+1); Err bitreich.org 70
i+ current = i - 1; Err bitreich.org 70
i+ move(+1); Err bitreich.org 70
i+ } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static char * Err bitreich.org 70
i@@ -245,11 +250,11 @@ print_segments(void) Err bitreich.org 70
i Err bitreich.org 70
i if (current < offset) { Err bitreich.org 70
i next = offset; Err bitreich.org 70
i- offset = prev_page(offset, ws.ws_col - MARGIN - 4); Err bitreich.org 70
i+ offset = prev_page(offset); 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- next = next_page(offset, ws.ws_col - MARGIN - 4); Err bitreich.org 70
i+ next = next_page(offset); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i fprintf(stderr, "\r\033[K\033[%dC", MARGIN); Err bitreich.org 70
i@@ -258,7 +263,7 @@ print_segments(void) Err bitreich.org 70
i for (i = offset; i < next && i < matchc; i++) { Err bitreich.org 70
i fprintf(stderr, Err bitreich.org 70
i opt['#'] && matchv[i][0] == '#' ? "\033[1m %s \033[m" : Err bitreich.org 70
i- i == current ? "\033[7m %s \033[m" : Err bitreich.org 70
i+ i == current ? "\033[7m %s \033[m" : Err bitreich.org 70
i " %s ", Err bitreich.org 70
i format(matchv[i], ws.ws_col - 1) Err bitreich.org 70
i ); Err bitreich.org 70
i@@ -312,7 +317,7 @@ filter(void) Err bitreich.org 70
i char **tokv = NULL, *s, buffer[sizeof (input)]; Err bitreich.org 70
i int tokc = 0, n = 0, i; Err bitreich.org 70
i Err bitreich.org 70
i- current = offset = prev = next = 0; Err bitreich.org 70
i+ current = offset = next = 0; Err bitreich.org 70
i Err bitreich.org 70
i strcpy(buffer, input); Err bitreich.org 70
i Err bitreich.org 70
i@@ -428,7 +433,6 @@ top: Err bitreich.org 70
i Err bitreich.org 70
i case CSI('5'): /* page up */ Err bitreich.org 70
i if (fgetc(stdin) != '~') break; Err bitreich.org 70
i- /* FALLTHROUGH */ Err bitreich.org 70
i case ALT('v'): Err bitreich.org 70
i move_page(-1); Err bitreich.org 70
i break; Err bitreich.org 70
.
Response:
text/plain