iAdded support for page up and down with Ctrl/Alt + v - 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 422bb3cf75123ac36aed39c370de89dfbe55dd78 /scm/iomenu/commit/422bb3cf75123ac36aed39c370de89dfbe55dd78.gph bitreich.org 70
1parent e2db9fd49d5351986d5803604bed7e2680545621 /scm/iomenu/commit/e2db9fd49d5351986d5803604bed7e2680545621.gph bitreich.org 70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net> URL:mailto:josuah.demangeon@gandi.net bitreich.org 70
iDate: Mon, 21 Aug 2017 09:04:18 +0200 Err bitreich.org 70
i Err bitreich.org 70
iAdded support for page up and down with Ctrl/Alt + v Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M README | 34 ++++++++++++++++++------------- Err bitreich.org 70
i M iomenu.1 | 24 +++++++++++++++--------- Err bitreich.org 70
i M iomenu.c | 51 +++++++++++++++++++------------ Err bitreich.org 70
i Err bitreich.org 70
i3 files changed, 66 insertions(+), 43 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/README b/README /scm/iomenu/file/README.gph bitreich.org 70
i@@ -1,7 +1,7 @@ Err bitreich.org 70
i-IOMENU(1) General Commands Manual IOMENU(1) Err bitreich.org 70
i+IOMENU(1) FreeBSD General Commands Manual IOMENU(1) Err bitreich.org 70
i Err bitreich.org 70
i NAME Err bitreich.org 70
i- iomenu – interactive selection menu Err bitreich.org 70
i+ iomenu - interactive selection menu Err bitreich.org 70
i Err bitreich.org 70
i SYNOPSIS Err bitreich.org 70
i iomenu [-#] [-l lines] [-p prompt] Err bitreich.org 70
i@@ -22,28 +22,34 @@ DESCRIPTION Err bitreich.org 70
i -# If a line starts with #, iomenu will interprete it as a Err bitreich.org 70
i header, which always matches, and can not be printed. Err bitreich.org 70
i Err bitreich.org 70
i- Selection control Err bitreich.org 70
i+ Selection keybindings Err bitreich.org 70
i An active selection is highlighted, and can be controlled with Err bitreich.org 70
i keybindings. Err bitreich.org 70
i Err bitreich.org 70
i- ^P, ^N Move selection to the previous/next item. Err bitreich.org 70
i+ Ctrl + p, Ctrl + n Err bitreich.org 70
i+ Move selection to the previous/next item. Err bitreich.org 70
i Err bitreich.org 70
i- ^M, ^J, Enter Print the selection to the standard output, and exit 0. Err bitreich.org 70
i+ Ctrl + v Ns, Alt + v Err bitreich.org 70
i+ Move one page up or down. Err bitreich.org 70
i Err bitreich.org 70
i- Input handling Err bitreich.org 70
i- As printable keys are entered, the selection is filtered to match every Err bitreich.org 70
i- word from the input. Err bitreich.org 70
i+ Ctrl + m, Ctrl + j, Enter Err bitreich.org 70
i+ Print the selection to the standard output, and exit 0. Err bitreich.org 70
i Err bitreich.org 70
i- ^H, Bakcspace Remove last character from current input. Err bitreich.org 70
i+Text input Err bitreich.org 70
i+ As printable keys are entered, the lines are filtered to match each word Err bitreich.org 70
i+ from the input. Err bitreich.org 70
i Err bitreich.org 70
i- ^W Remove last word from current input. Err bitreich.org 70
i+ Ctrl + h, Bakcspace Err bitreich.org 70
i+ Remove last character from current input. Err bitreich.org 70
i Err bitreich.org 70
i- ^U Remove the whole input string. Err bitreich.org 70
i+ Ctrl + w Remove last word from current input. Err bitreich.org 70
i Err bitreich.org 70
i- ^I, Tab Fill the input with current selection. Err bitreich.org 70
i+ Ctrl + u Remove the whole input string. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Ctrl + i, Tab Fill the input with current selection. Err bitreich.org 70
i Err bitreich.org 70
i EXIT STATUS Err bitreich.org 70
i- The iomenu utility exits 0 on success, and >0 if an error occurs. Err bitreich.org 70
i+ The iomenu utility exits 0 on success, and >0 if an error occurs. Err bitreich.org 70
i Err bitreich.org 70
i EXAMPLES Err bitreich.org 70
i Open a bookmark from a list in a text file: Err bitreich.org 70
i@@ -80,4 +86,4 @@ AUTORS Err bitreich.org 70
i iomenu was written from scratch by Josuah Demangeon <mail@josuah.net> Err bitreich.org 70
i with the help of dmenu(1) and vis-menu(1) as models. Err bitreich.org 70
i Err bitreich.org 70
i-Void Linux August 21, 2017 Void Linux Err bitreich.org 70
i+FreeBSD 11.0-RELEASE-p1 August 21, 2017 FreeBSD 11.0-RELEASE-p1 Err bitreich.org 70
1diff --git a/iomenu.1 b/iomenu.1 /scm/iomenu/file/iomenu.1.gph bitreich.org 70
i@@ -54,36 +54,42 @@ will interprete it as a header, which always matches, and can not be Err bitreich.org 70
i printed. Err bitreich.org 70
i . Err bitreich.org 70
i . Err bitreich.org 70
i-.Ss Selection control Err bitreich.org 70
i+.Ss Selection keybindings Err bitreich.org 70
i . Err bitreich.org 70
i An active selection is highlighted, and can be controlled with keybindings. Err bitreich.org 70
i .Bl -tag -width XXXXXXXXXXXXXXX Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^P Ns , Ic ^N Err bitreich.org 70
i+.It Ic Ctrl + p Ns , Ic Ctrl + n Err bitreich.org 70
i Move selection to the previous/next item. Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^M Ns , Ic ^J Ns , Ic Enter Err bitreich.org 70
i+.It Ic Ctrl + v Ns, Ic Alt + v Err bitreich.org 70
i+Move one page up or down. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Ic Ctrl + m Ns , Ic Ctrl + j Ns , Ic Enter Err bitreich.org 70
i Print the selection to the standard output, and exit 0. Err bitreich.org 70
i . Err bitreich.org 70
i .El Err bitreich.org 70
i . Err bitreich.org 70
i-.Ss Input handling Err bitreich.org 70
i . Err bitreich.org 70
i-As printable keys are entered, the selection is filtered to match every Err bitreich.org 70
i+.Sh Text input Err bitreich.org 70
i+. Err bitreich.org 70
i+As printable keys are entered, the lines are filtered to match each Err bitreich.org 70
i word from the input. Err bitreich.org 70
i+. Err bitreich.org 70
i .Bl -tag -width XXXXXXXXXXXXXXX Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^H Ns , Ic Bakcspace Err bitreich.org 70
i+.It Ic Ctrl + h Ns , Ic Bakcspace Err bitreich.org 70
i Remove last character from current input. Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^W Err bitreich.org 70
i+.It Ic Ctrl + w Err bitreich.org 70
i Remove last word from current input. Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^U Err bitreich.org 70
i+.It Ic Ctrl + u Err bitreich.org 70
i Remove the whole input string. Err bitreich.org 70
i . Err bitreich.org 70
i-.It Ic ^I Ns , Ic Tab Err bitreich.org 70
i+.It Ic Ctrl + i Ns , Ic Tab Err bitreich.org 70
i Fill the input with current selection. Err bitreich.org 70
i+. Err bitreich.org 70
i .El Err bitreich.org 70
i . 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,13 +18,13 @@ Err bitreich.org 70
i 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 linec = 0, matchc = 0; Err bitreich.org 70
i-static char **linev = NULL, **matchv = NULL; Err bitreich.org 70
i-static char input[BUFSIZ], formatted[BUFSIZ * 8]; Err bitreich.org 70
i-static int opt[128]; Err bitreich.org 70
i-static char *prompt = ""; 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 linec = 0, matchc = 0; Err bitreich.org 70
i+static char **linev = NULL, **matchv = NULL; Err bitreich.org 70
i+static char input[BUFSIZ], formatted[BUFSIZ * 8]; Err bitreich.org 70
i+static int opt[128], rows = 0; Err bitreich.org 70
i+static char *prompt = ""; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i freelines(void) Err bitreich.org 70
i@@ -145,11 +145,11 @@ 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-printlines(int count) Err bitreich.org 70
i+printlines(void) Err bitreich.org 70
i { Err bitreich.org 70
i- int printed = 0, i = current / count * count; Err bitreich.org 70
i+ int printed = 0, i = current - current % rows; Err bitreich.org 70
i Err bitreich.org 70
i- while (printed < count && i < matchc) { Err bitreich.org 70
i+ while (printed < rows && i < matchc) { Err bitreich.org 70
i Err bitreich.org 70
i char *s = format(matchv[i], ws.ws_col - 1); Err bitreich.org 70
i Err bitreich.org 70
i@@ -163,7 +163,7 @@ printlines(int count) Err bitreich.org 70
i i++; printed++; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- while (printed++ < count) 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 Err bitreich.org 70
i@@ -171,12 +171,11 @@ static void Err bitreich.org 70
i printscreen(void) Err bitreich.org 70
i { Err bitreich.org 70
i int cols = ws.ws_col - 1; Err bitreich.org 70
i- int count = MIN(opt['l'], ws.ws_row - 1); Err bitreich.org 70
i Err bitreich.org 70
i fputs("\r\033[K", stderr); Err bitreich.org 70
i Err bitreich.org 70
i- printlines(count); Err bitreich.org 70
i- fprintf(stderr, "\033[%dA\r", count); Err bitreich.org 70
i+ printlines(); Err bitreich.org 70
i+ fprintf(stderr, "\033[%dA\r", rows); Err bitreich.org 70
i Err bitreich.org 70
i if (*prompt) { Err bitreich.org 70
i format(prompt, cols - 2); Err bitreich.org 70
i@@ -204,11 +203,11 @@ matchline(char *line, char **tokv, int tokc) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-move(signed int n) Err bitreich.org 70
i+move(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- for (i = current + n; 0 <= i && i < matchc; i += n) { Err bitreich.org 70
i+ for (i = current + sign; 0 <= i && i < matchc; i += sign) { Err bitreich.org 70
i if (!opt['#'] || matchv[i][0] != '#') { Err bitreich.org 70
i current = i; Err bitreich.org 70
i break; Err bitreich.org 70
i@@ -217,6 +216,18 @@ move(signed int n) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+movepg(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+ 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+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i filter(void) Err bitreich.org 70
i { Err bitreich.org 70
i char **tokv = NULL, *s, buffer[sizeof (input)]; Err bitreich.org 70
i@@ -280,7 +291,6 @@ addchar(char key) Err bitreich.org 70
i static void Err bitreich.org 70
i printselection(void) Err bitreich.org 70
i { Err bitreich.org 70
i- /* header */ Err bitreich.org 70
i if (opt['#']) { Err bitreich.org 70
i char **match = matchv + current; Err bitreich.org 70
i Err bitreich.org 70
i@@ -294,7 +304,6 @@ printselection(void) Err bitreich.org 70
i putchar('\t'); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- /* input or selection */ Err bitreich.org 70
i if (matchc == 0 || (opt['#'] && matchv[current][0] == '#')) { Err bitreich.org 70
i puts(input); Err bitreich.org 70
i } else { Err bitreich.org 70
i@@ -339,11 +348,11 @@ top: Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case CONTROL('V'): Err bitreich.org 70
i- move(ws.ws_row - 1); Err bitreich.org 70
i+ movepg(+1); Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case ALT('v'): Err bitreich.org 70
i- move(-ws.ws_row + 1); Err bitreich.org 70
i+ movepg(-1); Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case CONTROL('I'): /* tab */ Err bitreich.org 70
i@@ -373,6 +382,8 @@ sigwinch() Err bitreich.org 70
i { Err bitreich.org 70
i if (ioctl(ttyfd, TIOCGWINSZ, &ws) < 0) Err bitreich.org 70
i die("ioctl"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ rows = MIN(opt['l'], ws.ws_row - 1); Err bitreich.org 70
i printscreen(); Err bitreich.org 70
i Err bitreich.org 70
i signal(SIGWINCH, sigwinch); Err bitreich.org 70
.
Response:
text/plain