Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
curs_inopts(3X)			 Library calls		       curs_inopts(3X)

NAME
       cbreak,	echo, halfdelay, intrflush, is_cbreak, is_echo,	is_nl, is_raw,
       keypad, meta, nl, nocbreak, nodelay, noecho,  nonl,  noqiflush,	noraw,
       notimeout,  qiflush,  raw,  timeout,  wtimeout, typeahead - get and set
       curses terminal input options

SYNOPSIS
       #include	<ncurses/curses.h>

       int cbreak(void);
       int nocbreak(void);

       int echo(void);
       int noecho(void);

       int intrflush(WINDOW * win /* ignored */, bool bf);
       int keypad(WINDOW * win,	bool bf);
       int meta(WINDOW * win /*	ignored	*/, bool bf);
       int nodelay(WINDOW * win, bool bf);
       int notimeout(WINDOW * win, bool	bf);

       int nl(void);
       int nonl(void);

       void qiflush(void);
       void noqiflush(void);

       int raw(void);
       int noraw(void);

       int halfdelay(int tenths);
       void timeout(int	delay);
       void wtimeout(WINDOW * win, int delay);

       int typeahead(int fd);

       /* extensions */
       int is_cbreak(void);
       int is_echo(void);
       int is_nl(void);
       int is_raw(void);

DESCRIPTION
       curses offers configurable parameters permitting	an application to con-
       trol the	handling of input from the terminal.  Some, such as those  af-
       fecting the terminal's mode or line discipline, are global, applying to
       all  windows; others apply only to a specific window.  The library does
       not automatically apply such parameters to new or derived  windows;  an
       application must	configure each window for the desired behavior.

       Some  descriptions  below  make reference to an input character reading
       function: this is wgetch(3X) in the non-wide character curses  API  and
       wget_wch(3X)  in	 the  wide  character API.  In addition	to the variant
       forms  of  these	 described  in	ncurses(3X),  the   curses   functions
       wgetstr(3X) and wget_wstr(3X) and their own variants call the appropri-
       ate input character reading function.

   cbreak, nocbreak
       Normally,  the terminal driver buffers typed characters,	not delivering
       them to an application until a line feed	or carriage return  is	typed.
       This  canonical	("cooked") line	discipline also	supports software flow
       control,	simple line editing functions (character and word  erase,  and
       whole-line  erasure or "kill"), and job control.	 cbreak	configures the
       terminal	in cbreak mode,	which disables line buffering  and  erase  and
       kill  character	processing  --	the interrupt, quit, suspend, and flow
       control characters are unaffected -- and	makes characters typed by  the
       user immediately	available to the program.  nocbreak restores canonical
       ("cooked") mode.

       The  state  of  the terminal is unknown to a curses application when it
       starts; therefore, a program should call	cbreak or nocbreak explicitly.
       Most interactive	programs using curses set cbreak mode.	Calling	cbreak
       overrides raw.  The man page for	the input character  reading  function
       discusses how cbreak and	nocbreak interact with echo and	noecho.

   echo, noecho
       echo  and  noecho  determine  whether  characters typed by the user are
       written to the curses window by the input character reading function as
       they are	typed.	curses always disables the terminal driver's own echo-
       ing.  By	default, a curses screen's echo	option	is  set.   Authors  of
       most  interactive  programs  prefer  to	do their own echoing in	a con-
       trolled area of the screen, or not to echo at all, so they call noecho.
       The man page for	the input character  reading  function	discusses  how
       echo and	noecho interact	with cbreak and	nocbreak.

   halfdelay
       halfdelay  configures  half-delay mode, which is	similar	to cbreak mode
       in that characters typed	by the user are	immediately available  to  the
       program.	  However,  after  blocking for	tenths tenth-seconds, an input
       character reading function returns ERR if no  input  is	pending.   The
       value of	tenths must be between 1 and 255.  Use nocbreak	to leave half-
       delay mode.

   intrflush
       intrflush  calls	qiflush	(see below) if bf is TRUE, and noqiflush if bf
       is FALSE.  It ignores its win argument.

   keypad
       keypad enables recognition of a terminal's function keys.   If  enabled
       (bf  is	TRUE) then when	an input character reading function reads ESC,
       it waits	for further input corresponding	to an escape sequence  defined
       by  the	terminal  type description.  If	a valid	sequence populates the
       input stream, the input character reading function returns a value rep-
       resenting the function key,  such  as  KEY_LEFT.	  (Wide-character  API
       users:  wget_wch(3X)  returns KEY_CODE_YES to indicate the availability
       of a function key code in its wch parameter.)  If the sequence  is  in-
       valid, the input	character reading function returns only	its last char-
       acter.	If disabled (bf	is FALSE), curses does not treat function keys
       specially and the program has to	interpret escape sequences itself.  If
       the terminal type  description  defines	the  keypad_local  (rmkx)  and
       keypad_xmit  (smkx)  capabilities, enabling a window's keypad mode sets
       the terminal's keypad to	transmit, and disabling	keypad mode  sets  the
       terminal's  keypad to work locally.  By default,	a window's keypad mode
       is off.

   meta
       Initially, whether the terminal returns 7- or 8-bit character codes  on
       input  depends  on  the	configuration of the terminal driver; on POSIX
       systems,	see  termios(3).   To  force  8	 bits  to  be  returned,  call
       meta(...,  TRUE);  this is equivalent, on POSIX systems,	to setting the
       CS8 flag	on the terminal.   To  force  7	 bits  to  be  returned,  call
       meta(...,  FALSE); this is equivalent, on POSIX systems,	to setting the
       CS7 flag	on the terminal.  curses ignores the window argument win.   If
       the  terminfo  string capabilities meta_on (smm)	and meta_off (rmm) are
       defined for the terminal	type, enabling meta mode sends smm's value  to
       the terminal and	disabling it sends that	of rmm to the terminal.

   nl, nonl
       Initially,  whether  the	 terminal  reports a carriage return using the
       character code for a line feed in cbreak	or raw modes  depends  on  the
       configuration  of  the  terminal	driver;	see termios(3).	 nl configures
       the terminal to perform this translation.  nonl disables	it.  Under its
       canonical ("cooked") line discipline, the terminal driver always	trans-
       lates carriage returns to line feeds.

   nodelay
       nodelay configures the input character  reading	function  to  be  non-
       blocking	 for  window  win.  If no input	is ready, the reading function
       returns ERR.  If	disabled (bf is	FALSE),	the reading function does  not
       return until it has input.

   notimeout
       When keypad has been called on a	window and the input character reading
       function	 reads	an  ESC	 character  from it, curses sets a timer while
       waiting for the next character.	If the timer  elapses,	curses	inter-
       prets  the  ESC	as  an explicit	press of the terminal's	Escape key (or
       equivalent).  notimeout(win, TRUE) disables this	timer.	The purpose of
       the timeout is to distinguish sequences produced	by a function key from
       those typed by a	user.  If this timer is	disabled, curses waits forever
       for subsequent keystrokes until it determines the escape	sequence to be
       valid or	invalid.

   qiflush, noqiflush
       qiflush and noqiflush configure the terminal driver's treatment of  its
       input and output	queues when it handles the interrupt, suspend, or quit
       characters under	the canonical ("cooked") or cbreak line	disciplines on
       POSIX  systems; see termios(3).	The default behavior is	inherited from
       the terminal driver settings.  Calling qiflush configures the  terminal
       to  flush  the  queues  (discarding  their  contents) when any of these
       events occurs, giving the impression of faster response to user	input,
       but making the library's	model of the screen contents incorrect.	 Call-
       ing  noqiflush  prevents	 such  flushing, but might frustrate impatient
       users on	slow connections if a  curses  update  of  the	screen	is  in
       progress	when the event occurs; see typeahead below for a mitigation of
       this  problem.	You may	want to	call noqiflush in a signal handler if,
       after the handler exits,	you want output	to continue as though the sig-
       nal had not occurred.

   raw,	noraw
       raw configures the terminal to read input in raw	mode, which is similar
       to cbreak mode (see cbreak above) except	 that  it  furthermore	passes
       through	the  terminal's	 configured interrupt, quit, suspend, and flow
       control characters uninterpreted	to the application, instead of	gener-
       ating  a	 signal	or acting on I/O flow.	The behavior of	the terminal's
       "Break" key (if any) depends on terminal	driver	configuration  parame-
       ters that curses	does not handle.  noraw	restores the terminal's	canon-
       ical ("cooked") line discipline.

   timeout, wtimeout
       wtimeout	 configures  whether a curses input character reading function
       called on window	win uses blocking or non-blocking reads.  If delay  is
       negative,  curses uses a	blocking read, waiting indefinitely for	input.
       If delay	is zero, the read is non-blocking; an input character  reading
       function	 returns ERR if	no input is pending.  If delay is positive, an
       input character reading function	blocks for delay milliseconds, and re-
       turns ERR if the	delay elapses and there	is  still  no  input  pending.
       timeout calls wtimeout on stdscr.

   typeahead
       Normally,  a curses library checks the terminal's input file descriptor
       for activity with poll(2) or select(2) while updating the screen; if it
       finds  any,  it	postpones  output  until  the  next  wrefresh(3X)   or
       doupdate(3X)  call,  allowing faster response to	user key strokes.  The
       library tests the file descriptor  corresponding	 to  the  FILE	stream
       pointer passed to newterm(3X) (or stdin if initscr(3X) was called), for
       pending	input.	 typeahead instructs curses to test file descriptor fd
       instead.	 An fd of -1 disables the check.

RETURN VALUE
       timeout and wtimeout return no value.

       cbreak, nocbreak, echo, noecho,	halfdelay,  intrflush,	keypad,	 meta,
       nodelay,	 notimeout,  nl,  nonl,	raw, noraw, and	typeahead return OK on
       success and ERR on failure.

       In ncurses, the functions in the	previous paragraph return ERR if

          the library's TERMINAL structure for	the device has not  been  ini-
	   tialized with initscr(3X), newterm(3X), or setupterm(3X), or

          win is a null pointer (except with intrflush	and meta, which	ignore
	   its value).

       Further,	halfdelay returns ERR if delay is outside the range 1..255.

       See  section  "EXTENSIONS"  below  for  the return values of is_cbreak,
       is_echo,	is_nl, and is_raw.

NOTES
       echo, noecho, halfdelay,	intrflush, meta, nl, nonl, nodelay, notimeout,
       noqiflush, qiflush, timeout, and	wtimeout may be	implemented as macros.

       noraw and nocbreak follow historical practice in	that they  attempt  to
       restore	the  terminal's	 canonical ("cooked") line discipline from raw
       and cbreak, respectively.  Mixing raw/noraw calls with  cbreak/nocbreak
       calls  leads to terminal	driver control states that are hard to predict
       or understand; doing so is not recommended.

       curses documentation uses the terms "delay" and "timeout" freely	to de-
       scribe two related but distinct aspects of input	handling, at the  risk
       of  confusing the user.	The functions halfdelay, nodelay, timeout, and
       wtimeout	 configure  whether  the  input	 character  reading   function
       (wgetch(3X) or wget_wch(3X)) waits for keyboard input to	begin, and for
       how  long.   keypad  configures whether that function waits for further
       input if	the first character it reads is	ESC.  Calling notimeout, which
       has nothing to do with timeout or wtimeout, makes this delay in	expec-
       tation  of  further characters effectively infinite.  X/Open Curses af-
       fords no	means of otherwise configuring the length of this  second  de-
       lay,  but  an AIX and ncurses extension,	ESCDELAY, is available both as
       an environment variable and a global symbol permitting the user and ap-
       plication,   respectively,   to	 do   so;    see    ncurses(3X)	   and
       curs_variables(3X).

EXTENSIONS
       ncurses	provides  four	"is_" functions	corresponding to cbreak, echo,
       nl, and raw, permitting their states to be queried by the application.

			    Query	Set	 Reset
			    ------------------------------
			    is_cbreak	cbreak	 nocbreak
			    is_echo	echo	 noecho
			    is_nl	nl	 nonl
			    is_raw	raw	 noraw

       In each case, the function returns

       1    if the option is set,

       0    if the option is unset, or

       -1   if the library's TERMINAL structure	for the	device	has  not  been
	    initialized.

PORTABILITY
       Applications employing ncurses extensions should	condition their	use on
       the visibility of the NCURSES_VERSION preprocessor macro.

       Except  as  noted  in section "EXTENSIONS" above, X/Open	Curses Issue 4
       describes these functions.  It specifies	no error conditions for	them.

       SVr4 describes a	successful return value	 only  as  "an	integer	 value
       other than ERR".

       ncurses	follows	 X/Open	Curses and the historical practice of System V
       curses, clearing	the terminal driver's "echo"  flag  when  initializing
       the  screen.  BSD curses	did not, but its raw function turned it	off as
       a side effect.  For best	portability, call echo	or  noecho  explicitly
       just  after initialization, even	if your	program	retains	the terminal's
       canonical ("cooked") line discipline.

       X/Open Curses is	ambiguous regarding whether  raw  should  disable  the
       carriage	 return	and line feed translation feature controlled by	nl and
       nonl.  BSD curses turned	off these translations;	 System	V  curses  did
       not.   ncurses  does so,	on the assumption that a programmer requesting
       raw input wants a clean (ideally, 8-bit clean) connection that the  op-
       erating system will not alter.

       When  keypad  is	first enabled for a window, ncurses loads the standard
       function	key string capabilities	for the	terminal type  description  of
       its  screen;  see the entries beginning with "key_" in terminfo(5).  If
       that description	includes extended string capabilities, produced	by the
       -x option of tic(1), for	example, then ncurses also  defines  keys  for
       the  capabilities  whose	codes begin with "k".  ncurses generates a nu-
       meric key code for each such extended capability; depending on previous
       loads of	terminal type descriptions, these may differ from  one	execu-
       tion  of	 a  program to the next.  keyname(3X) recognizes the generated
       key codes and returns a name beginning with "k" denoting	 the  terminfo
       capability  name	rather than "KEY_", used for curses key	names.	On the
       other hand, an application can use define_key(3X) to  bind  a  selected
       key  to	a  string of the programmer's choice.  This feature enables an
       application to check for	its presence with tigetstr(3X),	 and  reassign
       the numeric key code to match its own needs.

       Low-level applications can use tigetstr(3X) to obtain the definition of
       any  string  capability.	  curses  applications use the input character
       reading function	to obtain key codes from input and rely	upon the order
       in which	the string capabilities	are loaded.  Multiple  key  capability
       strings	can have the same value, but the input character reading func-
       tion can	report only one	key code.  Most	 curses	 implementations  (in-
       cluding	ncurses)  load key definitions in the order they appear	in the
       strfnames array of string  capability  names;  see  term_variables(3X).
       The  last  capability read using	a particular definition	determines the
       key code	to be reported.	 In ncurses, extended capabilities can be  in-
       terpreted as key	definitions.  The library loads	these after its	built-
       in  definitions,	 and  if an extended capability's value	is the same as
       one previously loaded, the library uses the later definition.

HISTORY
       4BSD (1980) introduced echo, noecho, nl,	nonl, raw, and noraw.

       SVr2 (1984) featured a new terminal driver, extending the curses	API to
       support it with cbreak, nocbreak, intrflush, keypad, meta, nodelay, and
       typeahead.

       SVr3 (1987) added halfdelay,  notimeout,	 and  wtimeout.	  qiflush  and
       noqiflush  appeared in SVr3.1 (1987), at	which point intrflush became a
       wrapper for either of these functions, depending	on the	value  of  its
       Boolean argument.  SVr3.1 also added timeout.

       ncurses 6.5 (2024) introduced is_cbreak,	is_echo, is_nl,	and is_raw.

       Formerly,  ncurses  used	 nl and	nonl to	control	the conversion of new-
       lines to	carriage return/line feed on output as well as input.	X/Open
       Curses  documents the use of these functions only for input.  This dif-
       ference arose from converting the pcurses  source  (1986),  which  used
       ioctl(2)	calls and the sgttyb structure,	to termios (the	POSIX terminal
       API).  In the former, both input	and output conversions were controlled
       via a single option "CRMOD", while the latter separates these features.
       Because	that  conversion  interferes with output optimization, ncurses
       6.2 (2020) amended nl and nonl to eliminate their effect	on output.

SEE ALSO
       curses(3X),    curs_getch(3X),	  curs_initscr(3X),	curs_util(3X),
       define_key(3X), termios(3), term_variables(3X)

ncurses	6.6			  2025-10-04		       curs_inopts(3X)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=timeout&sektion=3&manpath=FreeBSD+Ports+15.0.quarterly>

home | help