From 3ba7724e92b52f5933632ff7d948d0f9491440db Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Mon, 9 Apr 2012 03:02:59 +0200 Subject: [PATCH] interactive: Honor SIGWINCH. For the upcoming single key mode of the i9e subsystem, we need to know the width of the terminal. This makes this information available to all functions in interactive.c via the i9e_private structure. The new num_columns variable of this structure is updated whenever i9e_signal_dispatch() is called with sig_num equal to SIGWINCH. --- interactive.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/interactive.c b/interactive.c index dda5f84e..f75e4be5 100644 --- a/interactive.c +++ b/interactive.c @@ -27,6 +27,7 @@ struct i9e_private { struct i9e_client_info *ici; FILE *stderr_stream; + int num_columns; char empty_line[1000]; struct task task; struct btr_node *stdout_btrn; @@ -339,14 +340,15 @@ static void update_winsize(void) { struct winsize w; int ret = ioctl(i9ep->ici->fds[2], TIOCGWINSZ, (char *)&w); - int num_columns = 80; if (ret >= 0) { assert(w.ws_col < sizeof(i9ep->empty_line)); - num_columns = w.ws_col; - } - memset(i9ep->empty_line, ' ', num_columns); - i9ep->empty_line[num_columns] = '\0'; + i9ep->num_columns = w.ws_col; + } else + i9ep->num_columns = 80; + + memset(i9ep->empty_line, ' ', i9ep->num_columns); + i9ep->empty_line[i9ep->num_columns] = '\0'; } /** @@ -431,6 +433,8 @@ __printf_2_3 void i9e_log(int ll, const char* fmt,...) */ void i9e_signal_dispatch(int sig_num) { + if (sig_num == SIGWINCH) + return update_winsize(); if (sig_num == SIGINT) { fprintf(i9ep->stderr_stream, "\n"); rl_replace_line ("", false /* clear_undo */); -- 2.39.5