iworking horizontal scrolling - 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 a74019ac53549e4017a2aa36bd377c1e0c2c9fc7 /scm/iomenu/commit/a74019ac53549e4017a2aa36bd377c1e0c2c9fc7.gph bitreich.org 70 1parent d445637975d35e90023bcf4c7ebe73367b8b66e3 /scm/iomenu/commit/d445637975d35e90023bcf4c7ebe73367b8b66e3.gph bitreich.org 70 hAuthor: Josuah Demangeonā  ā µ URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 19 Mar 2017 01:35:48 +0100 Err bitreich.org 70 i Err bitreich.org 70 iworking horizontal scrolling Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 60 ++++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 30 insertions(+), 30 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,15 +18,15 @@ 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, prev = 0, next = 0; Err bitreich.org 70 i-size_t linec = 0, matchc = 0; Err bitreich.org 70 i+int current = 0, offset = 0, prev = 0, next = 0; Err bitreich.org 70 i+int 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 int opt_lines = 0; Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-free_v(char **v, size_t c) Err bitreich.org 70 i+free_v(char **v, int c) Err bitreich.org 70 i { Err bitreich.org 70 i for (; c > 0; c--) Err bitreich.org 70 i free(v[c - 1]); Err bitreich.org 70 i@@ -53,7 +53,7 @@ set_terminal(int tty_fd) Err bitreich.org 70 i if (tcgetattr(tty_fd, &termio_old) < 0) Err bitreich.org 70 i die("Can not get terminal attributes with tcgetattr()."); Err bitreich.org 70 i Err bitreich.org 70 i- termio_new = termio_old; Err bitreich.org 70 i+ termio_new = termio_old; Err bitreich.org 70 i termio_new.c_lflag &= ~(ICANON | ECHO | IGNBRK); Err bitreich.org 70 i Err bitreich.org 70 i tcsetattr(tty_fd, TCSANOW, &termio_new); Err bitreich.org 70 i@@ -66,7 +66,7 @@ void Err bitreich.org 70 i read_lines(void) Err bitreich.org 70 i { Err bitreich.org 70 i char buffer[BUFSIZ]; Err bitreich.org 70 i- size_t size = 1 << 6; Err bitreich.org 70 i+ int size = 1 << 6; Err bitreich.org 70 i Err bitreich.org 70 i linev = malloc(sizeof (char **) * size); Err bitreich.org 70 i matchv = malloc(sizeof (char **) * size); Err bitreich.org 70 i@@ -77,7 +77,7 @@ read_lines(void) Err bitreich.org 70 i Err bitreich.org 70 i /* read the file into an array of lines */ Err bitreich.org 70 i for (; fgets(buffer, sizeof buffer, stdin); linec++, matchc++) { Err bitreich.org 70 i- size_t len = strlen(buffer); Err bitreich.org 70 i+ int len = strlen(buffer); Err bitreich.org 70 i Err bitreich.org 70 i if (len > 0 && buffer[len - 1] == '\n') Err bitreich.org 70 i buffer[len - 1] = '\0'; Err bitreich.org 70 i@@ -100,9 +100,9 @@ read_lines(void) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i-match_line(char *line, char **tokv, size_t tokc) Err bitreich.org 70 i+match_line(char *line, char **tokv, int tokc) Err bitreich.org 70 i { Err bitreich.org 70 i- for (size_t i = 0; i < tokc; i++) Err bitreich.org 70 i+ for (int i = 0; i < tokc; i++) Err bitreich.org 70 i if (strstr(line, tokv[i]) == NULL) Err bitreich.org 70 i return 0; Err bitreich.org 70 i Err bitreich.org 70 i@@ -114,7 +114,7 @@ void Err bitreich.org 70 i filter_lines(void) Err bitreich.org 70 i { Err bitreich.org 70 i char **tokv = NULL, *s, buffer[sizeof (input)]; Err bitreich.org 70 i- size_t tokc = 0, n = 0; Err bitreich.org 70 i+ int tokc = 0, n = 0; Err bitreich.org 70 i Err bitreich.org 70 i current = offset = prev = next = 0; Err bitreich.org 70 i Err bitreich.org 70 i@@ -133,7 +133,7 @@ filter_lines(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i matchc = 0; Err bitreich.org 70 i- for (size_t i = 0; i < linec; i++) Err bitreich.org 70 i+ for (int i = 0; i < linec; i++) Err bitreich.org 70 i if (match_line(linev[i], tokv, tokc)) Err bitreich.org 70 i matchv[matchc++] = linev[i]; Err bitreich.org 70 i Err bitreich.org 70 i@@ -147,17 +147,16 @@ print_string(char *str, int current) 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 fprintf(stderr, "%s \033[m", str); Err bitreich.org 70 i- fputs(" \033[m", stderr); 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_lines(size_t count, size_t cols) Err bitreich.org 70 i+print_lines(int count, int cols) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t p = 0; /* amount of lines printed */ Err bitreich.org 70 i+ int p = 0; /* amount of lines printed */ Err bitreich.org 70 i offset = current / count * count; Err bitreich.org 70 i Err bitreich.org 70 i- for (size_t i = offset; p < count && i < matchc; p++, i++) { Err bitreich.org 70 i+ for (int i = offset; p < count && i < matchc; p++, i++) { Err bitreich.org 70 i fputc('\n', stderr); Err bitreich.org 70 i print_string(matchv[i], i == current); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -168,24 +167,25 @@ 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+update_pages(int pos, int cols) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t col; Err bitreich.org 70 i+ int 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+ 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+ next++; Err bitreich.org 70 i Err bitreich.org 70 i next--; 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+print_columns(int cols) Err bitreich.org 70 i { Err bitreich.org 70 i if (current < offset) { Err bitreich.org 70 i offset = prev; Err bitreich.org 70 i@@ -196,22 +196,22 @@ print_columns(size_t cols) Err bitreich.org 70 i update_pages(offset, cols - 30 - 1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- for (size_t i = offset; i < next && i < matchc; i++) Err bitreich.org 70 i+ for (int i = offset; i < next && i < matchc; i++) Err bitreich.org 70 i print_string(matchv[i], i == current); 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, "\033[%ldC>", cols); Err bitreich.org 70 i+ fprintf(stderr, "\033[%dC>", cols); 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_prompt(size_t cols) Err bitreich.org 70 i+print_prompt(int cols) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t limit = opt_lines ? cols : 30; Err bitreich.org 70 i+ int limit = opt_lines ? cols : 30; Err bitreich.org 70 i Err bitreich.org 70 i fputc('\r', stderr); Err bitreich.org 70 i- for (size_t i = 0; i < limit - 2; i++) Err bitreich.org 70 i+ for (int i = 0; i < limit - 2; i++) Err bitreich.org 70 i fputc(' ', stderr); Err bitreich.org 70 i Err bitreich.org 70 i fputs(offset > 0 ? "< " : " ", stderr); Err bitreich.org 70 i@@ -224,7 +224,7 @@ void Err bitreich.org 70 i print_screen(int tty_fd) Err bitreich.org 70 i { Err bitreich.org 70 i struct winsize w; Err bitreich.org 70 i- size_t count; Err bitreich.org 70 i+ int count; Err bitreich.org 70 i Err bitreich.org 70 i if (ioctl(tty_fd, TIOCGWINSZ, &w) < 0) Err bitreich.org 70 i die("could not get terminal size"); Err bitreich.org 70 i@@ -235,7 +235,7 @@ print_screen(int tty_fd) Err bitreich.org 70 i Err bitreich.org 70 i if (opt_lines) { Err bitreich.org 70 i print_lines(count, w.ws_col); Err bitreich.org 70 i- fprintf(stderr, "\033[%ldA", count + 1); Err bitreich.org 70 i+ fprintf(stderr, "\033[%dA", count + 1); Err bitreich.org 70 i } else { Err bitreich.org 70 i fputs("\033[30C", stderr); Err bitreich.org 70 i print_columns(w.ws_col); Err bitreich.org 70 i@@ -246,18 +246,18 @@ print_screen(int tty_fd) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-print_clear(size_t lines) Err bitreich.org 70 i+print_clear(int lines) Err bitreich.org 70 i { Err bitreich.org 70 i- for (size_t i = 0; i < lines + 1; i++) Err bitreich.org 70 i+ for (int i = 0; i < lines + 1; i++) Err bitreich.org 70 i fputs("\r\033[K\n", stderr); Err bitreich.org 70 i- fprintf(stderr, "\033[%ldA", lines + 1); Err bitreich.org 70 i+ fprintf(stderr, "\033[%dA", lines + 1); 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 remove_word_input() Err bitreich.org 70 i { Err bitreich.org 70 i- size_t len = strlen(input) - 1; Err bitreich.org 70 i+ int len = strlen(input) - 1; Err bitreich.org 70 i Err bitreich.org 70 i for (int i = len; i >= 0 && isspace(input[i]); i--) Err bitreich.org 70 i input[i] = '\0'; Err bitreich.org 70 i@@ -273,7 +273,7 @@ remove_word_input() Err bitreich.org 70 i void Err bitreich.org 70 i add_character(char key) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t len = strlen(input); Err bitreich.org 70 i+ int len = strlen(input); Err bitreich.org 70 i Err bitreich.org 70 i if (isprint(key)) { Err bitreich.org 70 i input[len] = key; Err bitreich.org 70 .