Copyright 2018-2023,2024 Thomas E. Dickey *
Copyright 1998-2015,2017 Free Software Foundation, Inc. *
*
Permission is hereby granted, free of charge, to any person obtaining a *
copy of this software and associated documentation files (the *
"Software"), to deal in the Software without restriction, including *
without limitation the rights to use, copy, modify, merge, publish, *
distribute, distribute with modifications, sublicense, and/or sell *
copies of the Software, and to permit persons to whom the Software is *
furnished to do so, subject to the following conditions: *
*
The above copyright notice and this permission notice shall be included *
in all copies or substantial portions of the Software. *
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
*
Except as contained in this notice, the name(s) of the above copyright *
holders shall not be used in advertising or otherwise to promote the *
sale, use or other dealings in this Software without prior written *
authorization. *
***************************************************************************
Author: Thomas E. Dickey 1996-on
$Id: resizeterm.3x,v 1.56 2024/03/16 15:35:01 tom Exp $
#include <curses.h>bool is_term_resized(int lines, int columns); int resize_term(int lines, int columns); int resizeterm(int lines, int columns);
If the calling program has not set up a handler for \%SIGWINCH when it initializes \%ncurses (e.g., using \%initscr(3X) or \%newterm(3X)), then \%ncurses sets a handler for \%SIGWINCH which notifies the library when a window-size event has occurred. The library checks for this notification .bP when reading input data, .bP when implicitly resuming program mode (e.g., between \%endwin(3X) and \%wrefresh(3X)), and .bP when explicitly resuming program mode in \%restartterm(3X).
When the library has found that the terminal's window-size has changed, it calls \%resizeterm to update its data structures.
An application which establishes its own \%SIGWINCH handler can call \%resizeterm, but in that case, the library will not see \%SIGWINCH, and proper layout will rely upon the application.
The \%resize_term function attempts to resize all windows. This helps with simple applications. However: .bP It is not possible to automatically resize pads. .bP Applications which have complicated layouts should check for \%KEY_RESIZE returned from \%wgetch, and adjust their layout, e.g., using \%wresize and \%mvwin, or by recreating the windows.
When resizing windows, \%resize_term recursively adjusts subwindows, keeping them within the updated parent window's limits. If a top-level window happens to extend to the screen's limits, then on resizing the window, \%resize_term will keep the window extending to the corresponding limit, regardless of whether the screen has shrunk or grown.
If \%ncurses is configured to supply its own \%SIGWINCH handler, .bP on receipt of a \%SIGWINCH, the handler sets a flag .bP which is tested in \%wgetch(3X), \%doupdate(3X) and \%restartterm(3X), .bP in turn, calling the \%resizeterm function, .bP which \%ungetch's a \%KEY_RESIZE which will be read on the next call to \%wgetch.
The \%KEY_RESIZE alerts an application that the screen size has changed, and that it should repaint special features such as pads that cannot be done automatically. Calling \%resizeterm or \%resize_term directly from a signal handler is unsafe. This indirect method is used to provide a safe way to resize the \%ncurses data structures.If the environment variables LINES or \%COLUMNS are set, this overrides the library's use of the window size obtained from the operating system. Thus, even if a \%SIGWINCH is received, no screen size change may be recorded.
Doing that clears the screen and is visually distracting.
This extension of \%ncurses was introduced in mid-1995. It was adopted in NetBSD curses (2001) and PDCurses (2003).