---
name: "curs_touch"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/curs_touch"
---

# curs\_touch(3)

control terminal output refresh in a curses window

## NAME

**touchwin**, **touchline**, **untouchwin**, **wtouchln**, **is\_linetouched**, **is\_wintouched** - control terminal output refresh in a *curses* window

## SYNOPSIS

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

**int touchline(WINDOW \****win***, int** *start***, int** *count***);**

**int touchwin(WINDOW \****win***);** **int wtouchln(WINDOW \****win***, int** *y***, int** *n***, int** *changed***);**

**int untouchwin(WINDOW \****win***);**

**bool is\_linetouched(WINDOW \****win***, int** *line***);** **bool is\_wintouched(WINDOW \****win***);**

## DESCRIPTION

**The touchwin and touchline routines throw away all** **optimization information about which parts of the window have been** **touched, by pretending that the entire window has been drawn on.** **This** **is sometimes necessary when using overlapping windows, since a change** **to one window affects the other window, but the records of which lines** **have been changed in the other window do not reflect the change.** **The** **routine touchline only pretends that** *count* **lines have been** **changed, beginning with line** *start***.**

**The untouchwin routine marks all lines in the window as unchanged since** **the last call to wrefresh.**

**The wtouchln routine makes** *n* **lines in the window, starting** **at line** *y*, look as if they have (*changed***=1**) or have not (*changed***=0**) been changed since the last call to **wrefresh**.

The **is\_linetouched** and **is\_wintouched** routines return **TRUE** if the specified line/window was modified since the last call to **wrefresh**; otherwise they return **FALSE**.  In addition, **is\_linetouched** returns **ERR** if *line* is not valid for the given window.

## RETURN VALUE

Functions returning integers return **ERR** upon failure and **OK** upon success.

In *ncurses*,

- **is\_linetouched**

  returns **ERR** if the window pointer is null, or if the line number is outside the window boundaries.

-

  The constant **ERR** is distinct from **TRUE** and **FALSE**, which are the normal return values of this function. Because the function returns a **bool**, returning **ERR** (which is neither **TRUE** nor **FALSE**) may not be supported by the compiler.

-

  To provide error-checking and also match the X/Open function prototype, the **ERR** is provided by a macro named **is\_linetouched**. The actual function returns **FALSE** when it detects an error.

- **wtouchln**

  returns **ERR** if the window pointer is null, or if the line number is outside the window boundaries.

## NOTES

All of these functions except **wtouchln** may be implemented as macros.

## PORTABILITY

X/Open Curses Issue 4 describes these functions. It specifies no error conditions for them.

SVr4 describes a successful return value except where “otherwise noted” as “an integer value other than *ERR*”.

SVr4 does not check *win* to ensure that it is not a null pointer.

## HISTORY

SVr2 (1984) introduced *touchwin*,

SVr3 (1987) added *touchline*. SVr3.1 later that year supplied *is\_linetouched*, *is\_wintouched*, *untouchwin*, and *wtouchln*.

## SEE ALSO

**curses**(3X), **curs\_refresh**(3X), **curs\_variables**(3X)
