resizeterm(3X) Library calls resizeterm(3X)

# [NAME](#NAME)

**is\_term\_resized**, **resize\_term**, **resizeterm** - manage the terminal dimensions understood by *curses*

# [SYNOPSIS](#SYNOPSIS)

```
#include <curses.h>
```

```
bool is_term_resized(int lines, int columns);
int resize_term(int lines, int columns);
int resizeterm(int lines, int columns);
```

# [DESCRIPTION](#DESCRIPTION)

This is an extension to the *curses* library. It provides callers with a hook into the *ncurses* data to resize windows, primarily for use by programs running in an X Window terminal (e.g., xterm) when the terminal's screen size is changed by the user:

- *curses* windows cannot extend outside the screen. If the terminal is shrunk, *curses* windows must be shrunk to fit.
- If the terminal is stretched, rows and/or columns can be added to existing windows. The added cells should match the current attributes of the windows.

If the application has not set up a handler for *SIGWINCH* when it initializes *ncurses* (by calling [**initscr**(3X)](/man/os/ncurses/initscr.3X) or [**newterm**(3X)](/man/os/ncurses/newterm.3X)), then *ncurses* establishes a *SIGWINCH* handler that notifies the library when a window-resizing event has occurred. The library checks for this notification

- when reading input data,
- when implicitly resuming program mode (e.g., between [**endwin**(3X)](/man/os/ncurses/endwin.3X) and [**wrefresh**(3X)](/man/os/ncurses/wrefresh.3X)), and
- when explicitly resuming program mode in [**restartterm**(3X)](/man/os/ncurses/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.

## [resizeterm](#resizeterm)

The function **resizeterm** resizes the standard and current windows (i.e., **stdscr** and **curscr**) to the specified dimensions, and adjusts other bookkeeping data used by the *ncurses* library that record the window dimensions such as the **LINES** and **COLS** variables.

## [resize\_term](#resize_term)

Most of the work for **resizeterm** is done by the inner function **resize\_term**. The outer function **resizeterm** adds bookkeeping for the *SIGWINCH* handler, as well as repainting the soft-key area (see [**slk\_touch**(3X)](/man/os/ncurses/slk_touch.3X)).

The **resize\_term** function attempts to resize all windows. This helps with simple applications. However:

- It is not possible to automatically resize pads.
- 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.

## [is\_term\_resized](#is_term_resized)

A support function **is\_term\_resized** is provided so that applications can check if the **resize\_term** function would modify the window structures. It returns **TRUE** if the windows would be modified, and **FALSE** otherwise.

# [RETURN VALUE](#RETURN_VALUE)

Except as noted, these functions return the integer **ERR** upon failure and **OK** on success. They will fail if either of the dimensions are less than or equal to zero, or if an error occurs while (re)allocating memory for the windows.

# [NOTES](#NOTES)

While these functions are intended to be used to support a signal handler (i.e., for *SIGWINCH*), care should be taken to avoid invoking them in a context where **malloc** or **realloc** may have been interrupted, since it uses those functions.

If *ncurses* is configured to supply its own *SIGWINCH* handler,

- on receipt of a *SIGWINCH*, the handler sets a flag
- which is tested in [**wgetch**(3X)](/man/os/ncurses/wgetch.3X), [**doupdate**(3X)](/man/os/ncurses/doupdate.3X) and [**restartterm**(3X)](/man/os/ncurses/restartterm.3X),
- in turn, calling the **resizeterm** function,
- 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.

# [PORTABILITY](#PORTABILITY)

It is possible to resize the screen with SVr4 *curses*, by

- exiting *curses* with [**endwin**(3X)](/man/os/ncurses/endwin.3X) and
- resuming using [**refresh**(3X)](/man/os/ncurses/refresh.3X).

Doing that clears the screen and is visually distracting.

*ncurses* introduced this extension in mid-1995. NetBSD *curses* adopted it in 2001 and *PDCurses* in 2003.

# [AUTHORS](#AUTHORS)

Thomas Dickey (from an equivalent function written in 1988 for BSD *curses*)

# [SEE ALSO](#SEE_ALSO)

[**curs\_getch**(3X)](/man/os/ncurses/curs_getch.3X), [**curs\_variables**(3X)](/man/os/ncurses/curs_variables.3X), [**wresize**(3X)](/man/os/ncurses/wresize.3X)

2025-07-05 ncurses 6.6

---

Document: is_term_resized(3x) from ncurses 6.6.20261010-r0 (Chainguard OS)
Source: https://github.com/ThomasDickey/ncurses-snapshots
