sigwinch - iomenu - interactive terminal-based selection menu
HTML git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
DIR LICENSE
---
DIR commit 4a488ca1bbb3bf794bccdd502c5c64173f4b5bdb
DIR parent 4ce5703054613b342e3bc0fb1b1d35f510984fbd
HTML Author: Josuah Demangeon <josuah.demangeon@gandi.net>
Date: Thu, 18 May 2017 11:53:32 +0200
sigwinch
Diffstat:
M iomenu.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
---
DIR diff --git a/iomenu.c b/iomenu.c
@@ -1,5 +1,6 @@
#include <fcntl.h>
#include <locale.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -58,10 +59,6 @@ set_terminal(void)
{
struct termios new;
- /* get window size */
- if (ioctl(tty_fd, TIOCGWINSZ, &ws) < 0)
- die("ioctl");
-
/* save cursor postition */
fputs("\033[s", stderr);
@@ -434,7 +431,6 @@ input_get(void)
input[0] = '\0';
- print_screen();
while ((exit_code = input_key()) == CONTINUE)
print_screen();
@@ -445,6 +441,21 @@ input_get(void)
static void
+sigwinch()
+{
+ extern struct winsize ws;
+
+ /* get window size */
+ if (ioctl(tty_fd, TIOCGWINSZ, &ws) < 0)
+ die("ioctl");
+
+ print_screen();
+
+ signal(SIGWINCH, sigwinch);
+}
+
+
+static void
usage(void)
{
fprintf(stderr, "%s [-b] [-t] [-s] [-l lines] [-p prompt]\n", argv0);
@@ -505,6 +516,7 @@ main(int argc, char *argv[])
tty_fd = open("/dev/tty", O_RDWR);
set_terminal();
+ sigwinch();
exit_code = input_get(); /* main loop */
reset_terminal();
close(tty_fd);