itHandle terminal resizing - sacc - sacc(omys), simple console gopher client (mirror) Err parazyd.org 70 hgit clone https://git.parazyd.org/sacc URL:https://git.parazyd.org/sacc parazyd.org 70 1Log /git/sacc/log.gph parazyd.org 70 1Files /git/sacc/files.gph parazyd.org 70 1Refs /git/sacc/refs.gph parazyd.org 70 1LICENSE /git/sacc/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit ba3bd1d88313cb8b876bc5d05de3d7449c03f38b /git/sacc/commit/ba3bd1d88313cb8b876bc5d05de3d7449c03f38b.gph parazyd.org 70 1parent 19ce7fd296bf5b5358b2d84a071466106ecf9204 /git/sacc/commit/19ce7fd296bf5b5358b2d84a071466106ecf9204.gph parazyd.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space parazyd.org 70 iDate: Sat, 27 Jan 2018 18:03:17 +0100 Err parazyd.org 70 i Err parazyd.org 70 iHandle terminal resizing Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M common.h | 1 + Err parazyd.org 70 i M sacc.c | 9 ++++++++- Err parazyd.org 70 i M ui_ti.c | 12 ++++++++++++ Err parazyd.org 70 i M ui_txt.c | 33 +++++++++++++++++++++---------- Err parazyd.org 70 i Err parazyd.org 70 i4 files changed, 44 insertions(+), 11 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/common.h b/common.h /git/sacc/file/common.h.gph parazyd.org 70 it@@ -30,3 +30,4 @@ void uistatus(char *fmt, ...); Err parazyd.org 70 i void uicleanup(void); Err parazyd.org 70 i char *uiprompt(char *fmt, ...); Err parazyd.org 70 i void uisetup(void); Err parazyd.org 70 i+void uisigwinch(int signal); Err parazyd.org 70 1diff --git a/sacc.c b/sacc.c /git/sacc/file/sacc.c.gph parazyd.org 70 it@@ -3,6 +3,7 @@ Err parazyd.org 70 i #include Err parazyd.org 70 i #include Err parazyd.org 70 i #include Err parazyd.org 70 i+#include Err parazyd.org 70 i #include Err parazyd.org 70 i #include Err parazyd.org 70 i #include Err parazyd.org 70 it@@ -779,6 +780,7 @@ cleanup(void) Err parazyd.org 70 i static void Err parazyd.org 70 i setup(void) Err parazyd.org 70 i { Err parazyd.org 70 i+ struct sigaction sa; Err parazyd.org 70 i int fd; Err parazyd.org 70 i Err parazyd.org 70 i setenv("PAGER", "more", 0); Err parazyd.org 70 it@@ -793,8 +795,13 @@ setup(void) Err parazyd.org 70 i die("open: /dev/null: %s", strerror(errno)); Err parazyd.org 70 i if (mkdir(tmpdir, S_IRWXU) < 0 && errno != EEXIST) Err parazyd.org 70 i die("mkdir: %s: %s", tmpdir, strerror(errno)); Err parazyd.org 70 i- if(interactive = isatty(1)) Err parazyd.org 70 i+ if(interactive = isatty(1)) { Err parazyd.org 70 i uisetup(); Err parazyd.org 70 i+ sigemptyset(&sa.sa_mask); Err parazyd.org 70 i+ sa.sa_handler = uisigwinch; Err parazyd.org 70 i+ sa.sa_flags = SA_RESTART; Err parazyd.org 70 i+ sigaction(SIGWINCH, &sa, NULL); Err parazyd.org 70 i+ } Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i int Err parazyd.org 70 1diff --git a/ui_ti.c b/ui_ti.c /git/sacc/file/ui_ti.c.gph parazyd.org 70 it@@ -16,6 +16,7 @@ Err parazyd.org 70 i static char bufout[256]; Err parazyd.org 70 i static struct termios tsave; Err parazyd.org 70 i static struct termios tsacc; Err parazyd.org 70 i+static Item *curentry; Err parazyd.org 70 i #if defined(__NetBSD__) Err parazyd.org 70 i #undef tparm Err parazyd.org 70 i #define tparm tiparm Err parazyd.org 70 it@@ -244,6 +245,8 @@ uidisplay(Item *entry) Err parazyd.org 70 i !(entry->type == '1' || entry->type == '+' || entry->type == '7')) Err parazyd.org 70 i return; Err parazyd.org 70 i Err parazyd.org 70 i+ curentry = entry; Err parazyd.org 70 i+ Err parazyd.org 70 i putp(tparm(clear_screen)); Err parazyd.org 70 i displaystatus(entry); Err parazyd.org 70 i Err parazyd.org 70 it@@ -536,3 +539,12 @@ uiselectitem(Item *entry) Err parazyd.org 70 i } Err parazyd.org 70 i } Err parazyd.org 70 i } Err parazyd.org 70 i+ Err parazyd.org 70 i+void Err parazyd.org 70 i+uisigwinch(int signal) Err parazyd.org 70 i+{ Err parazyd.org 70 i+ setupterm(NULL, 1, NULL); Err parazyd.org 70 i+ putp(tparm(change_scroll_region, 0, lines-2)); Err parazyd.org 70 i+ Err parazyd.org 70 i+ uidisplay(curentry); Err parazyd.org 70 i+} Err parazyd.org 70 1diff --git a/ui_txt.c b/ui_txt.c /git/sacc/file/ui_txt.c.gph parazyd.org 70 it@@ -11,6 +11,8 @@ Err parazyd.org 70 i #include "common.h" Err parazyd.org 70 i Err parazyd.org 70 i static char bufout[256]; Err parazyd.org 70 i+static Item *curentry; Err parazyd.org 70 i+static char cmd; Err parazyd.org 70 i int lines, columns; Err parazyd.org 70 i Err parazyd.org 70 i static void Err parazyd.org 70 it@@ -148,6 +150,8 @@ uidisplay(Item *entry) Err parazyd.org 70 i !(dir = entry->dat)) Err parazyd.org 70 i return; Err parazyd.org 70 i Err parazyd.org 70 i+ curentry = entry; Err parazyd.org 70 i+ Err parazyd.org 70 i items = dir->items; Err parazyd.org 70 i nitems = dir->nitems; Err parazyd.org 70 i nlines = dir->printoff + lines; Err parazyd.org 70 it@@ -218,7 +222,6 @@ Item * Err parazyd.org 70 i uiselectitem(Item *entry) Err parazyd.org 70 i { Err parazyd.org 70 i Dir *dir; Err parazyd.org 70 i- static char c; Err parazyd.org 70 i char buf[BUFSIZ], *sstr, nl; Err parazyd.org 70 i int item, nitems; Err parazyd.org 70 i Err parazyd.org 70 it@@ -228,9 +231,9 @@ uiselectitem(Item *entry) Err parazyd.org 70 i nitems = dir ? dir->nitems : 0; Err parazyd.org 70 i Err parazyd.org 70 i for (;;) { Err parazyd.org 70 i- if (!c) Err parazyd.org 70 i- c = 'h'; Err parazyd.org 70 i- printstatus(entry, c); Err parazyd.org 70 i+ if (!cmd) Err parazyd.org 70 i+ cmd = 'h'; Err parazyd.org 70 i+ printstatus(entry, cmd); Err parazyd.org 70 i fflush(stdout); Err parazyd.org 70 i Err parazyd.org 70 i if (!fgets(buf, sizeof(buf), stdin)) { Err parazyd.org 70 it@@ -238,28 +241,28 @@ uiselectitem(Item *entry) Err parazyd.org 70 i return NULL; Err parazyd.org 70 i } Err parazyd.org 70 i if (isdigit(*buf)) { Err parazyd.org 70 i- c = '\0'; Err parazyd.org 70 i+ cmd = '\0'; Err parazyd.org 70 i nl = '\0'; Err parazyd.org 70 i if (sscanf(buf, "%d%c", &item, &nl) != 2 || nl != '\n') Err parazyd.org 70 i item = -1; Err parazyd.org 70 i } else if (!strcmp(buf+1, "\n")) { Err parazyd.org 70 i item = -1; Err parazyd.org 70 i- c = *buf; Err parazyd.org 70 i+ cmd = *buf; Err parazyd.org 70 i } else if (*buf == '/') { Err parazyd.org 70 i for (sstr = buf+1; *sstr && *sstr != '\n'; ++sstr) Err parazyd.org 70 i ; Err parazyd.org 70 i *sstr = '\0'; Err parazyd.org 70 i sstr = buf+1; Err parazyd.org 70 i- c = *buf; Err parazyd.org 70 i+ cmd = *buf; Err parazyd.org 70 i } else if (isdigit(*(buf+1))) { Err parazyd.org 70 i nl = '\0'; Err parazyd.org 70 i if (sscanf(buf+1, "%d%c", &item, &nl) != 2 || nl != '\n') Err parazyd.org 70 i item = -1; Err parazyd.org 70 i else Err parazyd.org 70 i- c = *buf; Err parazyd.org 70 i+ cmd = *buf; Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i- switch (c) { Err parazyd.org 70 i+ switch (cmd) { Err parazyd.org 70 i case '\0': Err parazyd.org 70 i break; Err parazyd.org 70 i case 'q': Err parazyd.org 70 it@@ -301,7 +304,7 @@ uiselectitem(Item *entry) Err parazyd.org 70 i help(); Err parazyd.org 70 i continue; Err parazyd.org 70 i default: Err parazyd.org 70 i- c = 'h'; Err parazyd.org 70 i+ cmd = 'h'; Err parazyd.org 70 i continue; Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 it@@ -314,3 +317,13 @@ uiselectitem(Item *entry) Err parazyd.org 70 i Err parazyd.org 70 i return entry->entry; Err parazyd.org 70 i } Err parazyd.org 70 i+ Err parazyd.org 70 i+void Err parazyd.org 70 i+uisigwinch(int signal) Err parazyd.org 70 i+{ Err parazyd.org 70 i+ uisetup(); Err parazyd.org 70 i+ putchar('\n'); Err parazyd.org 70 i+ uidisplay(curentry); Err parazyd.org 70 i+ printstatus(curentry, cmd); Err parazyd.org 70 i+ fflush(stdout); Err parazyd.org 70 i+} Err parazyd.org 70 .