## 4.31 Terminal Control

The following predicates form a simple access mechanism to the Unix termcap library to provide terminal independent I/O for screen terminals. These predicates are only available on Unix machines. The SWI-Prolog Windows consoles accepts the ANSI escape sequences.

tty_get_capability(+Name, +Type, -Result)
  Get the capability named Name from the termcap library. See termcap(5) for the capability names. Type specifies the type of the expected result, and is one of `string`, `number` or `bool`. String results are returned as an atom, number result as an integer and bool results as the atom `on` or `off`. If an option cannot be found this predicate fails silently. The results are only computed once. Successive queries on the same capability are fast.
tty_goto(+X, +Y)
  Goto position (X, Y) on the screen. Note that the predicates line_count/2 and line_position/2 will not have a well defined behaviour while using this predicate.
tty_put(+Atom, +Lines)
  Put an atom via the termcap library function tputs(). This function decodes padding information in the strings returned by tty_get_capability/3 and should be used to output these strings. Lines is the number of lines affected by the operation, or 1 if not applicable (as in almost all cases).
set_tty(-OldStream, +NewStream)
  Set the output stream, used by tty_put/2 and tty_goto/2 to a specific stream. Default is user_output.
tty_size(-Rows, -Columns)
  Determine the size of the terminal. Platforms:
  Unix
    If the system provides ioctl calls for this, these are used and tty_size/2 properly reflects the actual size after a user resize of the window. As a fallback, the system uses tty_get_capability/3 using `li` and `co` capabilities. In this case the reported size reflects the size at the first call and is not updated after a user-initiated resize of the terminal.
  Windows
    Getting the size of the terminal is provided for swipl-win.exe. The requested value reflects the current size. For the multi-threaded version the console that is associated with the `user_input` stream is used.