iremoved the segment feature all over again - 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 8850bebc9c87d3331bcfcf6139f05821c6f1237e /scm/iomenu/commit/8850bebc9c87d3331bcfcf6139f05821c6f1237e.gph bitreich.org 70 1parent 0502e73cca4f319ac484f66983cf6d40bdf843da /scm/iomenu/commit/0502e73cca4f319ac484f66983cf6d40bdf843da.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Mon, 30 Oct 2017 00:41:32 +0100 Err bitreich.org 70 i Err bitreich.org 70 iremoved the segment feature all over again Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M control.c | 59 +++---------------------------- Err bitreich.org 70 i M display.c | 70 +++++++++++-------------------- Err bitreich.org 70 i M iomenu.1 | 5 +---- Err bitreich.org 70 i M main.c | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i4 files changed, 32 insertions(+), 104 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/control.c b/control.c /scm/iomenu/file/control.c.gph bitreich.org 70 i@@ -15,45 +15,6 @@ Err bitreich.org 70 i #define ALT(char) ((char) + 0x80) Err bitreich.org 70 i #define CSI(char) ((char) + 0x80 + 0x80) Err bitreich.org 70 i Err bitreich.org 70 i-static size_t 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 += 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- Err bitreich.org 70 i- return width; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int 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 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- 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- Err bitreich.org 70 i-int Err bitreich.org 70 i-next_page(int pos) Err bitreich.org 70 i-{ 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- return pos; Err bitreich.org 70 i- return pos; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i void Err bitreich.org 70 i move(signed int sign) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -72,21 +33,11 @@ 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- 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- i = current - current % rows + rows * sign; Err bitreich.org 70 i- if (!(0 < i && i < matchc)) Err bitreich.org 70 i- return; 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+ i = current - current % rows + rows * sign; Err bitreich.org 70 i+ if (!(0 < i && i < matchc)) Err bitreich.org 70 i+ return; 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 static void Err bitreich.org 70 1diff --git a/display.c b/display.c /scm/iomenu/file/display.c.gph bitreich.org 70 i@@ -40,60 +40,40 @@ format(char *str, int cols) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-print_lines(void) Err bitreich.org 70 i+print_line(char *line, int cur) Err bitreich.org 70 i { Err bitreich.org 70 i- int printed = 0, i = current - current % rows; Err bitreich.org 70 i- Err bitreich.org 70 i- for (; printed < rows && i < matchc; i++, printed++) { Err bitreich.org 70 i- fprintf(stderr, Err bitreich.org 70 i- opt['#'] && matchv[i][0] == '#' ? Err bitreich.org 70 i- "\n\x1b[1m\x1b[K %s\x1b[m" : Err bitreich.org 70 i- i == current ? Err bitreich.org 70 i- "\n\x1b[47;30m\x1b[K %s\x1b[m" : Err bitreich.org 70 i- "\n\x1b[K %s", Err bitreich.org 70 i- format(matchv[i], ws.ws_col - 1) Err bitreich.org 70 i- ); Err bitreich.org 70 i+ if (opt['#'] && line[0] == '#') { Err bitreich.org 70 i+ format(line + 1, ws.ws_col - 1); Err bitreich.org 70 i+ fprintf(stderr, "\n\x1b[1m\x1b[K %s\x1b[m", formatted); Err bitreich.org 70 i+ } else if (cur) { Err bitreich.org 70 i+ format(line, ws.ws_col - 1); Err bitreich.org 70 i+ fprintf(stderr, "\n\x1b[47;30m\x1b[K %s\x1b[m", formatted); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ format(line, ws.ws_col - 1); Err bitreich.org 70 i+ fprintf(stderr, "\n\x1b[K %s", formatted); Err bitreich.org 70 i } Err bitreich.org 70 i- while (printed++ < rows) Err bitreich.org 70 i- fputs("\n\x1b[K", stderr); Err bitreich.org 70 i- fprintf(stderr, "\x1b[%dA\r\x1b[K", rows); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-print_segments(void) Err bitreich.org 70 i-{ Err bitreich.org 70 i- int i; 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); 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); Err bitreich.org 70 i- } Err bitreich.org 70 i- fprintf(stderr, "\r\x1b[K\x1b[%dC", MARGIN); Err bitreich.org 70 i- fputs(offset > 0 ? "< " : " ", stderr); 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] == '#' ? "\x1b[1m %s \x1b[m" : Err bitreich.org 70 i- i == current ? "\x1b[7m %s \x1b[m" : " %s ", Err bitreich.org 70 i- format(matchv[i], ws.ws_col - 1) 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, "\x1b[%dC\b>", ws.ws_col - MARGIN); Err bitreich.org 70 i- fputc('\r', stderr); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i print_screen(void) Err bitreich.org 70 i { Err bitreich.org 70 i+ char **m; Err bitreich.org 70 i+ int p; Err bitreich.org 70 i+ int i; Err bitreich.org 70 i int cols = ws.ws_col - 1; 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- else Err bitreich.org 70 i- print_segments(); Err bitreich.org 70 i+ p = 0; Err bitreich.org 70 i+ i = current - current % rows; Err bitreich.org 70 i+ m = matchv + i; Err bitreich.org 70 i+ while (p < rows && i < matchc) { Err bitreich.org 70 i+ print_line(*m, i == current); Err bitreich.org 70 i+ p++, i++, m++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ while (p < rows) { Err bitreich.org 70 i+ fputs("\n\x1b[K", stderr); Err bitreich.org 70 i+ p++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ fprintf(stderr, "\x1b[%dA\r\x1b[K", rows); Err bitreich.org 70 i if (*prompt) { Err bitreich.org 70 i format(prompt, cols - 2); Err bitreich.org 70 i fprintf(stderr, "\x1b[30;47m %s \x1b[m", formatted); Err bitreich.org 70 1diff --git a/iomenu.1 b/iomenu.1 /scm/iomenu/file/iomenu.1.gph bitreich.org 70 i@@ -35,10 +35,7 @@ The selected line is printed to standard output. Err bitreich.org 70 i .It Fl l Ar lines Err bitreich.org 70 i If Err bitreich.org 70 i .Ar lines Err bitreich.org 70 i-is 0, the items are displayed in an horizontal list; Err bitreich.org 70 i-otherwise, in a vertical list of at most Err bitreich.org 70 i-.Ar lines Err bitreich.org 70 i-lines. Err bitreich.org 70 i+Total amount of lines to display on the screen. Err bitreich.org 70 i . Err bitreich.org 70 i .It Fl p Ar prompt Err bitreich.org 70 i Set the prompt to display at the beginning of the input to Err bitreich.org 70 1diff --git a/main.c b/main.c /scm/iomenu/file/main.c.gph bitreich.org 70 i@@ -103,7 +103,7 @@ parse_opt(int argc, char *argv[]) Err bitreich.org 70 i usage(); Err bitreich.org 70 i switch ((*argv)[1]) { Err bitreich.org 70 i case 'l': Err bitreich.org 70 i- if (!--argc || sscanf(*++argv, "%d", &opt['l']) <= 0) Err bitreich.org 70 i+ if (!--argc || (opt['l'] = atoi(*++argv)) <= 0) Err bitreich.org 70 i usage(); Err bitreich.org 70 i break; Err bitreich.org 70 i case 'p': Err bitreich.org 70 .