Citações de INSTALL
:
--enable-sigwinch
Compile support for ncurses' SIGWINCH handler. If your application has
its own SIGWINCH handler, ncurses will not use its own. The ncurses
handler causes wgetch() to return KEY_RESIZE when the screen-size
changes. This option is the default, unless you have disabled the
extended functions.
Se não estiver lá, foi desativado. Em princípio, você poderia fazer como mostrado na seção removida (long-obsolete) CAN_RESIZE
recentemente removida do teste / view.c arquivo. A biblioteca ncurses faz um trabalho melhor que isso; o exemplo foi adicionado em julho de 1995. O comentário se refere ao SunOS 4 :
/*
* This uses functions that are "unsafe", but it seems to work on SunOS.
* Usually: the "unsafe" refers to the functions that POSIX lists which may be
* called from a signal handler. Those do not include buffered I/O, which is
* used for instance in wrefresh(). To be really portable, you should use the
* KEY_RESIZE return (which relies on ncurses' sigwinch handler).
*
* The 'wrefresh(curscr)' is needed to force the refresh to start from the top
* of the screen -- some xterms mangle the bitmap while resizing.
*/
Um equivalente contemporâneo apenas definiria um sinalizador no manipulador de sinal, como feito no biblioteca :
#if USE_SIGWINCH
static void
handle_SIGWINCH(int sig GCC_UNUSED)
{
_nc_globals.have_sigwinch = 1;
# if USE_PTHREADS_EINTR
if (_nc_globals.read_thread) {
if (!pthread_equal(pthread_self(), _nc_globals.read_thread))
pthread_kill(_nc_globals.read_thread, SIGWINCH);
_nc_globals.read_thread = 0;
}
# endif
}
#endif /* USE_SIGWINCH */
A propósito, o script de pacote não é exibido que o recurso está desativado:
./configure --prefix=/usr --mandir=/usr/share/man \
--with-pkg-config-libdir=/usr/lib/pkgconfig \
--with-static --with-normal --without-debug --without-ada \
--enable-widec --enable-pc-files --with-cxx-binding --with-cxx-static \
--with-shared --with-cxx-shared
Voltando à biblioteca , ela inicializa SIGWINCH
handler se o sinal for o valor padrão (não definido):
#if USE_SIGWINCH
CatchIfDefault(SIGWINCH, handle_SIGWINCH);
#endif
Se já houver um manipulador SIGWINCH
, o ncurses não fará nada.