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 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 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 .