SMOLNET PORTAL home about changes
iiomenu.c: horizontal page navigation - 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 2b8b6e2287a5ea4663695d0d64aec90a1d2520da	/scm/iomenu/commit/2b8b6e2287a5ea4663695d0d64aec90a1d2520da.gph	bitreich.org	70
1parent 4b996da3d1d470de301037c3de2cf45d03325c48	/scm/iomenu/commit/4b996da3d1d470de301037c3de2cf45d03325c48.gph	bitreich.org	70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net>	URL:mailto:josuah.demangeon@gandi.net	bitreich.org	70
iDate:   Mon,  4 Sep 2017 11:07:24 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iiomenu.c: horizontal page navigation	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M iomenu.c                            |      48 +++++++++++++++++--------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 26 insertions(+), 22 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@@ -24,7 +24,7 @@	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            current = 0, offset = 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[LINE_MAX], formatted[LINE_MAX * 8];	Err	bitreich.org	70
i@@ -86,7 +86,7 @@ set_terminal(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         struct termios new;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        /* save cursor postition */	Err	bitreich.org	70
i+        /* save currentsor postition */	Err	bitreich.org	70
i         fputs("\033[s", stderr);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* save attributes to `termios` */	Err	bitreich.org	70
i@@ -109,7 +109,7 @@ reset_terminal(void)	Err	bitreich.org	70
i         for (i = 0; i < rows + 1; i++)	Err	bitreich.org	70
i                 fputs("\r\033[K\n", stderr);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        /* reset cursor position */	Err	bitreich.org	70
i+        /* reset currentsor position */	Err	bitreich.org	70
i         fputs("\033[u", stderr);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         tcsetattr(ttyfd, TCSANOW, &termios);	Err	bitreich.org	70
i@@ -131,9 +131,9 @@ width(char *s)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i-prev_page(int pos, int cols)	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 col, 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@@ -143,9 +143,9 @@ prev_page(int pos, int cols)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i-next_page(int pos, int cols)	Err	bitreich.org	70
i+next_page(int pos)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        int col;	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@@ -169,18 +169,23 @@ move(signed int sign)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i 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-                return;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        i = current - current % rows + rows * sign;	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+                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+                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+                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 	Err	bitreich.org	70
i static char *	Err	bitreich.org	70
i@@ -245,11 +250,11 @@ print_segments(void)	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, ws.ws_col - MARGIN - 4);	Err	bitreich.org	70
i+                offset = prev_page(offset);	Err	bitreich.org	70
i 	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, ws.ws_col - MARGIN - 4);	Err	bitreich.org	70
i+                next   = next_page(offset);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         fprintf(stderr, "\r\033[K\033[%dC", MARGIN);	Err	bitreich.org	70
i@@ -258,7 +263,7 @@ print_segments(void)	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] == '#' ? "\033[1m %s \033[m" :	Err	bitreich.org	70
i-                        i == current                    ? "\033[7m %s \033[m" :	Err	bitreich.org	70
i+                        i == current                        ? "\033[7m %s \033[m" :	Err	bitreich.org	70
i                                                           " %s ",	Err	bitreich.org	70
i                         format(matchv[i], ws.ws_col - 1)	Err	bitreich.org	70
i                 );	Err	bitreich.org	70
i@@ -312,7 +317,7 @@ filter(void)	Err	bitreich.org	70
i         char **tokv = NULL, *s, buffer[sizeof (input)];	Err	bitreich.org	70
i         int       tokc = 0, n = 0, i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        current = offset = prev = next = 0;	Err	bitreich.org	70
i+        current = offset = next = 0;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         strcpy(buffer, input);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -428,7 +433,6 @@ top:	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         case CSI('5'):  /* page up */	Err	bitreich.org	70
i                 if (fgetc(stdin) != '~') break;	Err	bitreich.org	70
i-                /* FALLTHROUGH */	Err	bitreich.org	70
i         case ALT('v'):	Err	bitreich.org	70
i                 move_page(-1);	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/iomenu/commit/2b8b6e2287a5ea4...
Content-Typetext/plain; charset=utf-8