From 8ff671d4ad5dc452dc7a703900377ac08a6f7c97 Mon Sep 17 00:00:00 2001 From: Ivan Kosenko <kosenko.ivan@gmail.com> Date: Mon, 13 Nov 2017 15:09:37 +0300 Subject: [PATCH] Fix input wrapping when terminal size changed --- src/main.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main.cc b/src/main.cc index d39cd91870..7b7ca8153f 100644 --- a/src/main.cc +++ b/src/main.cc @@ -84,7 +84,7 @@ static char *pid_file = NULL; static char **main_argv; static int main_argc; /** Signals handled after start as part of the event loop. */ -static ev_signal ev_sigs[4]; +static ev_signal ev_sigs[5]; static const int ev_sig_count = sizeof(ev_sigs)/sizeof(*ev_sigs); static double start_time; @@ -130,6 +130,15 @@ signal_cb(ev_loop *loop, struct ev_signal *w, int revents) ev_break(loop, EVBREAK_ALL); } +static void +signal_sigwinch_cb(ev_loop *loop, struct ev_signal *w, int revents) +{ + (void) loop; + (void) w; + (void) revents; + rl_resize_terminal(); +} + /** Try to log as much as possible before dumping a core. * * Core files are not aways allowed and it takes an effort to @@ -210,6 +219,7 @@ signal_reset() sigaction(SIGINT, &sa, NULL) == -1 || sigaction(SIGTERM, &sa, NULL) == -1 || sigaction(SIGHUP, &sa, NULL) == -1 || + sigaction(SIGWINCH, &sa, NULL) == -1 || sigaction(SIGSEGV, &sa, NULL) == -1 || sigaction(SIGFPE, &sa, NULL) == -1) say_syserror("sigaction"); @@ -260,6 +270,7 @@ signal_init(void) ev_signal_init(&ev_sigs[1], signal_cb, SIGINT); ev_signal_init(&ev_sigs[2], signal_cb, SIGTERM); ev_signal_init(&ev_sigs[3], signal_cb, SIGHUP); + ev_signal_init(&ev_sigs[4], signal_sigwinch_cb, SIGWINCH); for (int i = 0; i < ev_sig_count; i++) ev_signal_start(loop(), &ev_sigs[i]); -- GitLab