static void win_changed(int nsig) { int width; get_terminal_width_height(0, &width, NULL); cmdedit_setwidth(width, nsig /* - just a yes/no flag */); if (nsig == SIGWINCH) signal(SIGWINCH, win_changed); /* rearm ourself */ }
static void win_changed(int nsig) { static sighandler_t previous_SIGWINCH_handler; /* for reset */ /* emulate || signal call */ if (nsig == -SIGWINCH || nsig == SIGWINCH) { int width = 0; get_terminal_width_height(0, &width, NULL); cmdedit_setwidth(width, nsig == SIGWINCH); } /* Unix not all standard in recall signal */ if (nsig == -SIGWINCH) /* save previous handler */ previous_SIGWINCH_handler = signal(SIGWINCH, win_changed); else if (nsig == SIGWINCH) /* signaled called handler */ signal(SIGWINCH, win_changed); /* set for next call */ else /* nsig == 0 */ /* set previous handler */ signal(SIGWINCH, previous_SIGWINCH_handler); /* reset */ }