iswitch to arg.h - 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 bdefd3e959d83d05d65b5df6ce45e6d30b771984 /scm/iomenu/commit/bdefd3e959d83d05d65b5df6ce45e6d30b771984.gph bitreich.org 70
1parent d6c740ae9f36ae68149a9c438664213aaff06e97 /scm/iomenu/commit/d6c740ae9f36ae68149a9c438664213aaff06e97.gph bitreich.org 70
hAuthor: Josuah Demangeon <mail@josuah.net> URL:mailto:mail@josuah.net bitreich.org 70
iDate: Sat, 17 Mar 2018 16:38:00 +0100 Err bitreich.org 70
i Err bitreich.org 70
iswitch to arg.h Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A arg.h | 27 +++++++++++++++++++++++++++ Err bitreich.org 70
i M iomenu.c | 43 ++++++++++++------------------- Err bitreich.org 70
i Err bitreich.org 70
i2 files changed, 43 insertions(+), 27 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/arg.h b/arg.h /scm/iomenu/file/arg.h.gph bitreich.org 70
i@@ -0,0 +1,27 @@ Err bitreich.org 70
i+#ifndef ARG_H Err bitreich.org 70
i+#define ARG_H Err bitreich.org 70
i+ Err bitreich.org 70
i+extern char *argv0; Err bitreich.org 70
i+ Err bitreich.org 70
i+#define ARGBEGIN(argc, argv) \ Err bitreich.org 70
i+ for (argv0 = *argv, argv++, argc--; \ Err bitreich.org 70
i+ argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0'; \ Err bitreich.org 70
i+ argc--, argv++) { \ Err bitreich.org 70
i+ char **_argv, *_a; \ Err bitreich.org 70
i+ if (argv[0][1] == '-' && argv[0][2] == '\0') { \ Err bitreich.org 70
i+ argv++, argc--; \ Err bitreich.org 70
i+ break; \ Err bitreich.org 70
i+ } \ Err bitreich.org 70
i+ for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) { \ Err bitreich.org 70
i+ switch (*_a) Err bitreich.org 70
i+ Err bitreich.org 70
i+#define ARGEND \ Err bitreich.org 70
i+ if (_argv != argv) \ Err bitreich.org 70
i+ break; \ Err bitreich.org 70
i+ } \ Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+#define EARGF(x) \ Err bitreich.org 70
i+ ((argv[1] == NULL) ? ((x), (char *)0) : (argc--, argv++, argv[0])) Err bitreich.org 70
i+ Err bitreich.org 70
i+#endif Err bitreich.org 70
1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70
i@@ -10,10 +10,10 @@ Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <termios.h> Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i-#include <getopt.h> Err bitreich.org 70
i Err bitreich.org 70
i #include "utf8.h" Err bitreich.org 70
i #include "str.h" Err bitreich.org 70
i+#include "arg.h" Err bitreich.org 70
i Err bitreich.org 70
i #ifndef SIGWINCH Err bitreich.org 70
i #define SIGWINCH 28 Err bitreich.org 70
i@@ -27,12 +27,11 @@ Err bitreich.org 70
i static struct termios termios; Err bitreich.org 70
i struct winsize ws; Err bitreich.org 70
i static int ttyfd; Err bitreich.org 70
i- Err bitreich.org 70
i static int linec = 0, matchc = 0, cur = 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- Err bitreich.org 70
i-static int flag_hs = 0; Err bitreich.org 70
i+static int hsflag = 0; Err bitreich.org 70
i+char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
i ** Keep the line if it match every token (in no particular order, and allowed to Err bitreich.org 70
i@@ -41,7 +40,7 @@ static int flag_hs = 0; Err bitreich.org 70
i static int Err bitreich.org 70
i match_line(char *line, char **tokv) Err bitreich.org 70
i { Err bitreich.org 70
i- if (flag_hs && line[0] == '#') Err bitreich.org 70
i+ if (hsflag && line[0] == '#') Err bitreich.org 70
i return 2; Err bitreich.org 70
i for (; *tokv != NULL; tokv++) Err bitreich.org 70
i if (strcasestr(line, *tokv) == NULL) Err bitreich.org 70
i@@ -122,7 +121,7 @@ move(int direction) Err bitreich.org 70
i int i; Err bitreich.org 70
i Err bitreich.org 70
i for (i = cur + direction; 0 <= i && i < matchc; i += direction) { Err bitreich.org 70
i- if (!flag_hs || matchv[i][0] != '#') { Err bitreich.org 70
i+ if (!hsflag || matchv[i][0] != '#') { Err bitreich.org 70
i cur = i; Err bitreich.org 70
i break; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -162,7 +161,7 @@ filter(int searchc, char **searchv) Err bitreich.org 70
i for (n = 0; n < searchc; n++) Err bitreich.org 70
i if (match_line(searchv[n], tokv)) Err bitreich.org 70
i matchv[matchc++] = searchv[n]; Err bitreich.org 70
i- if (flag_hs && matchv[cur][0] == '#') Err bitreich.org 70
i+ if (hsflag && matchv[cur][0] == '#') Err bitreich.org 70
i move(+1); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -221,7 +220,7 @@ print_selection(void) Err bitreich.org 70
i Err bitreich.org 70
i char **match; Err bitreich.org 70
i Err bitreich.org 70
i- if (flag_hs) { Err bitreich.org 70
i+ if (hsflag) { Err bitreich.org 70
i match = matchv + cur; Err bitreich.org 70
i while (--match >= matchv) { Err bitreich.org 70
i if ((*match)[0] == '#') { Err bitreich.org 70
i@@ -231,7 +230,7 @@ print_selection(void) Err bitreich.org 70
i } Err bitreich.org 70
i putchar('\t'); Err bitreich.org 70
i } Err bitreich.org 70
i- if (matchc == 0 || (flag_hs && matchv[cur][0] == '#')) Err bitreich.org 70
i+ if (matchc == 0 || (hsflag && matchv[cur][0] == '#')) Err bitreich.org 70
i puts(input); Err bitreich.org 70
i else Err bitreich.org 70
i puts(matchv[cur]); Err bitreich.org 70
i@@ -314,7 +313,7 @@ print_line(char *line, int highlight) Err bitreich.org 70
i { Err bitreich.org 70
i extern struct winsize ws; Err bitreich.org 70
i Err bitreich.org 70
i- if (flag_hs && line[0] == '#') Err bitreich.org 70
i+ if (hsflag && line[0] == '#') Err bitreich.org 70
i fprintf(stderr, "\n\x1b[1m\r%.*s\x1b[m", Err bitreich.org 70
i utf8_col(line + 1, ws.ws_col, 0), line + 1); Err bitreich.org 70
i else if (highlight) Err bitreich.org 70
i@@ -399,22 +398,6 @@ usage(void) Err bitreich.org 70
i exit(EXIT_FAILURE); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-static void Err bitreich.org 70
i-parse_opt(int argc, char *argv[]) Err bitreich.org 70
i-{ Err bitreich.org 70
i- int c; Err bitreich.org 70
i- Err bitreich.org 70
i- while ((c = getopt(argc, argv, "#")) != -1) { Err bitreich.org 70
i- switch (c) { Err bitreich.org 70
i- case '#': Err bitreich.org 70
i- flag_hs = 1; Err bitreich.org 70
i- break; Err bitreich.org 70
i- default: Err bitreich.org 70
i- usage(); Err bitreich.org 70
i- } 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 init(void) Err bitreich.org 70
i { Err bitreich.org 70
i@@ -445,7 +428,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i { Err bitreich.org 70
i int exit_code; Err bitreich.org 70
i Err bitreich.org 70
i- parse_opt(argc, argv); Err bitreich.org 70
i+ ARGBEGIN(argc, argv) { Err bitreich.org 70
i+ case '#': Err bitreich.org 70
i+ hsflag = 1; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ default: Err bitreich.org 70
i+ usage(); Err bitreich.org 70
i+ } ARGEND Err bitreich.org 70
i init(); Err bitreich.org 70
i Err bitreich.org 70
i #ifdef __OpenBSD__ Err bitreich.org 70
.
Response:
text/plain