isimpler input escape sequence management - 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 09d7cdbc37907c01400e2193f4eafba74736aa7d /scm/iomenu/commit/09d7cdbc37907c01400e2193f4eafba74736aa7d.gph bitreich.org 70 1parent 2425ac3f4cb13eef4db1e4e4d66feede9bf3ab84 /scm/iomenu/commit/2425ac3f4cb13eef4db1e4e4d66feede9bf3ab84.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:josuah.demangeon@gandi.net bitreich.org 70 iDate: Mon, 21 Aug 2017 15:40:31 +0200 Err bitreich.org 70 i Err bitreich.org 70 isimpler input escape sequence management Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 35 ++++++++++--------------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 11 insertions(+), 24 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@@ -14,10 +14,9 @@ Err bitreich.org 70 i Err bitreich.org 70 i #define CONTROL(char) (char ^ 0x40) Err bitreich.org 70 i #define ALT(char) (char + 0x80) Err bitreich.org 70 i+#define ESC(char) (char + 0x80 + 0x80) Err bitreich.org 70 i #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) Err bitreich.org 70 i Err bitreich.org 70 i-enum { KEY_UP = 0x81, KEY_DOWN, PG_UP, PG_DOWN }; 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@@ -341,22 +340,26 @@ top: Err bitreich.org 70 i filter(); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i- case KEY_UP: Err bitreich.org 70 i+ case ESC('A'): /* up */ Err bitreich.org 70 i case CONTROL('P'): Err bitreich.org 70 i move(-1); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i- case KEY_DOWN: Err bitreich.org 70 i+ case ESC('B'): /* down */ Err bitreich.org 70 i case CONTROL('N'): Err bitreich.org 70 i move(+1); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i- case PG_UP: Err bitreich.org 70 i+ case ESC('5'): 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 movepg(-1); Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i- case PG_DOWN: Err bitreich.org 70 i+ case ESC('6'): Err bitreich.org 70 i+ if (fgetc(stdin) != '~') break; Err bitreich.org 70 i+ /* FALLTHROUGH */ Err bitreich.org 70 i case CONTROL('V'): Err bitreich.org 70 i movepg(+1); Err bitreich.org 70 i break; Err bitreich.org 70 i@@ -373,24 +376,8 @@ top: Err bitreich.org 70 i return EXIT_SUCCESS; Err bitreich.org 70 i Err bitreich.org 70 i case ALT('['): Err bitreich.org 70 i- switch (fgetc(stdin)) { Err bitreich.org 70 i- case 'A': Err bitreich.org 70 i- key = KEY_UP; Err bitreich.org 70 i- goto top; Err bitreich.org 70 i- case 'B': Err bitreich.org 70 i- key = KEY_DOWN; Err bitreich.org 70 i- goto top; Err bitreich.org 70 i- case '5': Err bitreich.org 70 i- if (fgetc(stdin) == '~') { Err bitreich.org 70 i- key = PG_UP; Err bitreich.org 70 i- goto top; Err bitreich.org 70 i- } Err bitreich.org 70 i- case '6': Err bitreich.org 70 i- if (fgetc(stdin) == '~') { Err bitreich.org 70 i- key = PG_DOWN; Err bitreich.org 70 i- goto top; Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i+ key = ESC(fgetc(stdin)); Err bitreich.org 70 i+ goto top; Err bitreich.org 70 i Err bitreich.org 70 i case 033: /* escape / alt */ Err bitreich.org 70 i key = ALT(fgetc(stdin)); Err bitreich.org 70 .