| '\" t |
| .\"*************************************************************************** |
| .\" Copyright 2018-2023,2024 Thomas E. Dickey * |
| .\" Copyright 1998-2016,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. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: tput.1,v 1.113 2024/04/20 19:58:50 tom Exp $ |
| .TH @TPUT@ 1 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "User commands" |
| .ie \n(.g \{\ |
| .ds `` \(lq |
| .ds '' \(rq |
| .\} |
| .el \{\ |
| .ie t .ds `` `` |
| .el .ds `` "" |
| .ie t .ds '' '' |
| .el .ds '' "" |
| .\} |
| . |
| .de bP |
| .ie n .IP \(bu 4 |
| .el .IP \(bu 2 |
| .. |
| .ds d @TERMINFO@ |
| .SH NAME |
| \fB\%@TPUT@\fP \- |
| initialize a terminal, exercise its capabilities, or query \fI\%term\%info\fP database |
| .SH SYNOPSIS |
| \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] |
| {\fIcap-code\fP [\fIparameter\fP .\|.\|.\&]} .\|.\|. |
| .PP |
| \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] [\fB\-x\fP] \fBclear\fP |
| .PP |
| \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fBinit\fP |
| .PP |
| \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fB\%reset\fP |
| .PP |
| \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fB\%longname\fP |
| .PP |
| \fB@TPUT@ \-S\fP |
| .PP |
| \fB@TPUT@ \-V\fP |
| .SH DESCRIPTION |
| \fB\%@TPUT@\fP uses the |
| .I \%term\%info |
| library and database to make terminal-specific capabilities and |
| information available to the shell, |
| to initialize or reset the terminal, |
| or |
| to report a description of the current |
| (or specified) |
| terminal type. |
| Terminal capabilities are accessed by |
| .IR cap-code . |
| .PP |
| \fB\%terminfo\fP(5) discusses terminal capabilities at length |
| and presents a complete list of |
| .IR cap-codes . |
| .PP |
| When retrieving capability values, |
| the result depends upon the capability's type. |
| .TP 9 \" "Boolean" + 2n |
| Boolean |
| \fB\%@TPUT@\fP sets its exit status to |
| .B 0 |
| if the terminal possesses |
| .IR cap-code , |
| and |
| .B 1 |
| if it does not. |
| .TP |
| numeric |
| \fB\%@TPUT@\fP writes |
| .IR cap-code 's |
| decimal value to the standard output stream if defined |
| .RB ( \-1 |
| if it is not) |
| followed by a newline. |
| .TP |
| string |
| \fB\%@TPUT@\fP writes |
| .IR cap-code 's |
| value to the standard output stream if defined, |
| without a trailing newline. |
| .PP |
| Before using a value returned on the standard output, |
| the application should test \fB\%@TPUT@\fP's exit status |
| to be sure it is 0; |
| see section \*(``EXIT STATUS\*('' below. |
| .SS Operands |
| Generally, |
| an operand is a |
| .IR cap-code , |
| a capability code from the terminal database, |
| or a parameter thereto. |
| Three others are specially recognized by \fB\%@TPUT@\fP: |
| .BR init , |
| .BR \%reset , |
| and |
| .BR \%longname . |
| Although these resemble capability codes, |
| they in fact receive special handling; |
| we term them \*(``pseudo-capabilities\*(''. |
| .TP 11n \" "longname" + 2n + adjustment for PDF |
| .I cap-code |
| indicates a capability from the terminal database. |
| .IP |
| If |
| .I cap-code |
| is of string type and takes parameters, |
| \fB\%@TPUT@\fP interprets arguments following |
| .I cap-code |
| as the parameters, |
| up to the (fixed) quantity the capability requires. |
| .IP |
| Most parameters are numeric. |
| Only a few terminal capabilities require string parameters; |
| \fB\%@TPUT@\fP uses a table to decide which to pass as strings. |
| Normally \fB\%@TPUT@\fP uses \fB\%tparm\fP(3X) to perform the |
| substitution. |
| If no parameters are given for the capability, |
| \fB\%@TPUT@\fP writes the string without performing the substitution. |
| .TP |
| .B init |
| initializes the terminal. |
| If the terminal database is present |
| and an entry for the user's terminal type exists, |
| the following occur. |
| .RS |
| .TP 5 |
| (1) |
| \fB\%@TPUT@\fP retrieves the terminal's mode settings. |
| It successively tests the file descriptors corresponding to |
| .RS |
| .bP |
| the standard error stream, |
| .bP |
| the standard output stream, |
| .bP |
| the standard input stream, |
| and |
| .bP |
| .I \%/dev/tty |
| .RE |
| .IP |
| to obtain terminal settings. |
| Having retrieved them, |
| \fB\%@TPUT@\fP remembers which descriptor to use for further updates. |
| .TP |
| (2) |
| If the terminal dimensions cannot be obtained from the operating system, |
| but the environment or terminal type database entry describes them, |
| \fB\%@TPUT@\fP updates the operating system's notion of them. |
| .TP |
| (3) |
| \fB\%@TPUT@\fP updates the terminal modes. |
| .RS |
| .bP |
| Any delays specified in the entry |
| (for example, |
| when a newline is sent) |
| are set in the terminal driver. |
| .bP |
| Tab expansion is turned on or off per the specification in the entry, |
| and |
| .bP |
| if tabs are not expanded, |
| standard tabs |
| (every 8 spaces) |
| are set. |
| .RE |
| .TP |
| (4) |
| If initialization capabilities, |
| detailed in subsection \*(``Tabs and Initialization\*('' of |
| \fB\%terminfo\fP(5), |
| are present, |
| \fB\%@TPUT@\fP writes them to the standard output stream. |
| .TP |
| (5) |
| \fB\%@TPUT@\fP flushes the standard output stream. |
| .RE |
| .IP |
| If an entry lacks the information needed for an activity above, |
| that activity is silently skipped. |
| .TP |
| .B reset |
| re-initializes the terminal. |
| A reset differs from initialization in two ways. |
| .RS |
| .TP 5 |
| (1) |
| \fB\%@TPUT@\fP sets the the terminal modes to a \*(``sane\*('' state, |
| .RS |
| .bP |
| enabling cooked and echo modes, |
| .bP |
| disabling cbreak and raw modes, |
| .bP |
| enabling newline translation, |
| and |
| .bP |
| setting any unset special characters to their default values. |
| .RE |
| .TP 5 |
| (2) |
| If any reset capabilities are defined for the terminal type, |
| \fB\%@TPUT@\fP writes them to the output stream. |
| Otherwise, |
| \fB\%@TPUT@\fP uses any defined initialization capabilities. |
| Reset capabilities are detailed in subsection |
| \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5). |
| .RE |
| .TP |
| .B longname |
| A |
| .I \%term\%info |
| entry begins with one or more names by which an application |
| can refer to the entry, |
| before the list of terminal capabilities. |
| The names are separated by \*(``|\*('' characters. |
| X/Open Curses terms the last name the \*(``long name\*('', |
| and indicates that it may include blanks. |
| .IP |
| \fB\%@TIC@\fP warns if the last name does not include blanks, |
| to accommodate old |
| .I \%term\%info |
| entries that treated the long name as an optional feature. |
| The long name is often referred to as the description field. |
| .IP |
| If the terminal database is present and an entry for the user's terminal |
| type exists, |
| \fB\%@TPUT@\fP reports its description to the standard output stream, |
| without a trailing newline. |
| See \fB\%terminfo\fP(5). |
| .PP |
| .I Note: |
| Redirecting the output of |
| .RB \%\*(`` "@TPUT@ init" \*('' |
| or |
| .RB \%\*(`` "@TPUT@ reset" \*('' |
| to a file will capture only part of their actions. |
| Changes to the terminal modes are not affected by file descriptor |
| redirection, |
| since the terminal modes are altered via \fB\%ioctl\fP(2). |
| .SS Aliases |
| If \fB\%@TPUT@\fP is invoked via link with any of the names |
| .BR clear , |
| .BR init , |
| or |
| .BR \%reset , |
| it operates as if run with the corresponding (pseudo-)capability |
| operand. |
| For example, |
| executing a link named |
| .B \%reset |
| that points to \fB\%@TPUT@\fP has the same effect as |
| .RB \%\*(`` "@TPUT@ \%reset" \*(''. |
| .PP |
| This feature was introduced by |
| .I \%ncurses |
| 5.2 in 2000. |
| It is rarely used: |
| .TP |
| .B \%clear |
| is a separate program, |
| which is both smaller and more frequently executed. |
| .TP |
| .B init |
| has the same name as another program in widespread use. |
| .TP |
| .B \%reset |
| is provided |
| by the \fB\%@TSET@\fP(1) utility (also via a link named |
| .BR \%reset ")." |
| .SS "Terminal Size" |
| Besides the pseudo-capabilities |
| (such as |
| .BR init ), |
| \fB\%@TPUT@\fP treats the |
| .B lines |
| and |
| .B cols |
| .I cap-codes |
| specially: |
| it may call \fB\%setupterm\fP(3X) to obtain the terminal size. |
| .bP |
| First, |
| \fB\%@TPUT@\fP attempts to obtain these capabilities from the terminal |
| database. |
| This generally fails for terminal emulators, |
| which lack a fixed window size and thus omit the capabilities. |
| .bP |
| It then asks the operating system for the terminal's size, |
| which generally works, |
| unless the connection is via a serial line that |
| does not support \*(``NAWS\*('': negotiations about window size. |
| .bP |
| Finally, |
| it inspects the environment variables |
| .I LINES |
| and |
| .IR \%COLUMNS , |
| which may override the terminal size. |
| .PP |
| If the |
| .B \-T |
| option is given, |
| \fB\%@TPUT@\fP ignores the environment variables by calling |
| .BR \%use_tioctl(TRUE) , |
| relying upon the operating system |
| (or, |
| ultimately, |
| the terminal database). |
| .SH OPTIONS |
| .TP 9n \" "-T type" + 2n |
| .B \-S |
| retrieves more than one capability per invocation of \fB\%@TPUT@\fP. |
| The capabilities must be passed to \fB\%@TPUT@\fP from the standard |
| input stream instead of from the command line |
| (see section \*(``EXAMPLES\*('' below). |
| Only one |
| .I cap-code |
| is allowed per line. |
| The |
| .B \-S |
| option changes the meanings of the |
| .B 0 |
| and |
| .B 1 |
| exit statuses |
| (see section \*(``EXIT STATUS\*('' below). |
| .IP |
| Some capabilities use string parameters rather than numeric ones. |
| \fB\%@TPUT@\fP employs a built-in table and the presence of parameters |
| in its input to decide how to interpret them, |
| and whether to use \fB\%tparm\fP(3X). |
| .TP |
| .BI \-T\ type |
| indicates the terminal's |
| .IR type . |
| Normally this option is unnecessary, |
| because a default is taken from the |
| .I TERM |
| environment variable. |
| If specified, |
| the environment variables |
| .I LINES |
| and |
| .I \%COLUMNS |
| are also ignored. |
| .TP |
| .B \-V |
| reports the version of |
| .I \%ncurses |
| associated with \fB\%@TPUT@\fP, |
| and exits with a successful status. |
| .TP |
| .B \-x |
| prevents |
| .RB \%\*(`` "@TPUT@ clear" \*('' |
| from attempting to clear the scrollback buffer. |
| .SH EXIT STATUS |
| Normally, |
| one should interpret \fB\%@TPUT@\fP's exit statuses as follows. |
| .PP |
| .if n .ne 3 |
| .if t .ne 2 |
| .TS |
| Lb Lb |
| Lb Lx. |
| Status Meaning When \-S Not Specified |
| _ |
| 0 Boolean or string capability present |
| 1 Boolean or numeric capability absent |
| 2 usage error or no terminal type specified |
| 3 unrecognized terminal type |
| 4 unrecognized capability code |
| >4 system error (4 + \fBerrno\fP) |
| .TE |
| .PP |
| When the |
| .B \-S |
| option is used, |
| some statuses change meanings. |
| .PP |
| .if n .ne 4 |
| .if t .ne 3 |
| .TS |
| Lb Lb |
| Lb Lx. |
| Status Meaning When \-S Specified |
| _ |
| 0 all operands interpreted |
| 1 unused |
| 4 some operands not interpreted |
| .TE |
| .SH ENVIRONMENT |
| \fB@TPUT@\fP reads one environment variable. |
| .TP 8n \" "TERM" + 2n + adjustment for PDF |
| .I TERM |
| denotes the terminal type. |
| Each terminal type is distinct, |
| though many are similar. |
| The |
| .B \-T |
| option overrides its value. |
| .SH FILES |
| .TP |
| .I @DATADIR@/tabset |
| tab stop initialization database |
| .TP |
| .I \*d |
| compiled terminal description database |
| .SH PORTABILITY |
| Over time |
| .I \%ncurses |
| \fB\%@TPUT@\fP |
| has differed from that of System\ V in two important respects, |
| one now mostly historical. |
| .bP |
| \%\*(``\fB@TPUT@\fP |
| .IR cap-code \*('' |
| writes to the standard output, |
| which need not be a terminal device. |
| However, |
| the operands that manipulate terminal modes might not use the standard |
| output. |
| .IP |
| System\ V |
| .BR tput 's |
| .B init |
| and |
| .B \%reset |
| operands use logic from 4.1cBSD |
| .BR tset , |
| manipulating terminal modes. |
| It checks the same file descriptors |
| (and |
| .IR \%/dev/tty ) |
| for association with a terminal device as |
| .I \%ncurses |
| now does, |
| and if none are, |
| finally assumes a 1200 baud terminal. |
| When updating terminal modes, |
| it ignores errors. |
| .IP |
| Until |
| .I \%ncurses |
| 6.1 |
| (see section \*(``HISTORY\*('' below), |
| \fB\%@TPUT@\fP did not modify terminal modes. |
| It now employs a scheme similar to System\ V, |
| using functions shared with \fB\%@TSET@\fP |
| (and ultimately based on 4.4BSD |
| .BR tset ). |
| If it is not able to open a terminal |
| (for instance, |
| when run by \fIcron\fP(1)), |
| \fB\%@TPUT@\fP exits with an error status. |
| .bP |
| System\ V |
| .B tput |
| assumes that the type of a |
| .I cap-code |
| operand is numeric if all the characters of its value are decimal |
| numbers; |
| if they are not, |
| it treats |
| .I cap-code |
| as a string capability. |
| .IP |
| Most implementations that provide support for |
| .I cap-code |
| operands use the \fB\%tparm\fP(3X) function to expand its parameters. |
| That function expects a mixture of numeric and string parameters, |
| requiring \fB\%@TPUT@\fP to know which type to use. |
| .IP |
| .I \%ncurses |
| \fB\%@TPUT@\fP |
| uses a table to determine the parameter types for |
| the standard |
| .I cap-code |
| operands, |
| and an internal function to analyze nonstandard |
| .I cap-code |
| operands. |
| .IP |
| While more reliable than System\ V's utility, |
| a portability problem is introduced by this analysis. |
| An OpenBSD developer adapted the internal library function from |
| .I \%ncurses |
| to port NetBSD's |
| .IR termcap -based |
| .B tput |
| to |
| .IR \%term\%info , |
| and modified it to interpret multiple |
| .I cap-codes |
| (and parameters) |
| on the command line. |
| Portable applications should not rely upon this feature; |
| .I \%ncurses |
| offers it to support applications written specifically for OpenBSD. |
| .PP |
| This implementation, |
| unlike others, |
| accepts both |
| .I termcap |
| and |
| .I \%term\%info |
| .I cap-codes |
| if |
| .I termcap |
| support is compiled in. |
| In that case, |
| however, |
| the predefined |
| .I termcap |
| and |
| .I \%term\%info |
| codes have two |
| ambiguities; |
| .I \%ncurses |
| assumes the |
| .I \%term\%info |
| code. |
| .bP |
| The |
| .I cap-code |
| .B dl |
| means |
| .B \%delete_line |
| to |
| .I termcap |
| but |
| .B \%parm_delete_line |
| to |
| .IR \%term\%info . |
| .I termcap |
| uses the code |
| .B DL |
| for |
| .BR \%parm_delete_line . |
| .I \%term\%info |
| uses the code |
| .B dl1 |
| for |
| .BR \%delete_line . |
| .bP |
| The |
| .I cap-code |
| .B ed |
| means |
| .B \%exit_delete_mode |
| to |
| .I termcap |
| but |
| .B \%clr_eos |
| to |
| .IR \%term\%info . |
| .I termcap |
| uses the code |
| .B cd |
| for |
| .BR \%clr_eos . |
| .I \%term\%info |
| uses the code |
| .B rmdc |
| for |
| .BR \%exit_delete_mode . |
| .PP |
| The |
| .B \%longname |
| operand, |
| .B \-S |
| option, |
| and the parameter-substitution features used in the |
| .B cup |
| example below, |
| were not supported in |
| AT&T/USL |
| .I curses |
| before SVr4 (1989). |
| Later, |
| 4.3BSD-Reno (1990) added support for |
| .BR \%longname , |
| .\" longname was added in October 1989. |
| and in 1994, |
| NetBSD added support for the parameter-substitution features. |
| .PP |
| IEEE Std 1003.1/The Open Group Base Specifications Issue 7 |
| (POSIX.1-2008) |
| documents only the |
| .BR clear , |
| .BR init , |
| and |
| .B \%reset |
| operands. |
| A few observations of interest arise from that selection. |
| .bP |
| .I \%ncurses |
| supports |
| .B clear |
| as it does any other standard |
| .IR cap-code . |
| The others |
| .RB ( init |
| and |
| .BR \%longname ) |
| do not correspond to terminal capabilities. |
| .bP |
| The |
| .B tput |
| on SVr4-based systems such as Solaris, |
| IRIX64, |
| and HP-UX, |
| as well as others such as AIX and Tru64, |
| also support standard |
| .I cap-code |
| operands. |
| .bP |
| A few platforms such as FreeBSD recognize |
| .I termcap |
| codes rather than |
| .I \%term\%info |
| capability codes in their respective |
| .B tput |
| commands. |
| Since 2010, |
| NetBSD's |
| .B tput |
| uses |
| .I \%term\%info |
| codes. |
| Before that, |
| it |
| (like FreeBSD) |
| recognized |
| .I termcap |
| codes. |
| .IP |
| Beginning in 2021, |
| FreeBSD uses |
| .I \%ncurses |
| .BR tput , |
| configured for both |
| .I \%term\%info |
| (tested first) |
| and |
| .I termcap |
| (as a fallback). |
| .PP |
| Because (apparently) all |
| .I certified |
| Unix systems support the full set of capability codes, |
| the reason for documenting only a few may not be apparent. |
| .bP |
| X/Open Curses Issue 7 documents |
| .B tput |
| differently, |
| with |
| .I cap-code |
| and the other features used in this implementation. |
| .bP |
| That is, |
| there are two standards for |
| .BR tput : |
| POSIX (a subset) and X/Open Curses (the full implementation). |
| POSIX documents a subset to avoid the complication of including |
| X/Open Curses and the terminal capability database. |
| .bP |
| While it is certainly possible to write a |
| .B tput |
| program without using |
| .IR curses , |
| no system with a |
| .I curses |
| implementation provides a |
| .B tput |
| utility that does not also support standard |
| .IR cap-codes . |
| .PP |
| X/Open Curses Issue 7 (2009) is the first version to document utilities. |
| However that part of X/Open Curses does not follow existing practice |
| (that is, |
| System\ V |
| .I curses |
| behavior). |
| .bP |
| It assigns exit status 4 to \*(``invalid operand\*('', |
| which may have the same meaning as \*(``unknown capability\*(''. |
| For instance, |
| the source code for |
| Solaris |
| .I xcurses |
| uses the term \*(``invalid\*('' in this case. |
| .bP |
| It assigns exit status 255 to a numeric variable that is not specified |
| in the |
| .I \%term\%info |
| database. |
| That likely is a documentation error, |
| mistaking the \*(``\-1\*('' written to the standard output to indicate |
| an absent or cancelled numeric capability for an (unsigned) exit status. |
| .PP |
| The various System\ V implementations |
| (AIX, |
| HP-UX, |
| Solaris) |
| use the same exit statuses as |
| .IR \%ncurses . |
| .PP |
| NetBSD |
| .I curses |
| documents exit statuses that correspond to neither |
| .I \%ncurses |
| nor X/Open Curses. |
| .SH HISTORY |
| Bill Joy wrote a |
| .B tput |
| command during development of 4BSD in October 1980. |
| This initial version only cleared the screen, |
| and did not ship with official distributions. |
| .\" It also exited with backwards exit status (1 on success, 0 on |
| .\" failure), and was characterized by Bostic in 1988 as "pretty |
| .\" unreasonable". |
| .\" See Spinellis's "unix-history-repo" on GitHub. |
| .PP |
| System\ V developed a different |
| .B tput |
| command. |
| .bP |
| SVr2 (1984) provided a rudimentary |
| .B tput |
| that checked the parameter against each |
| predefined capability and returned the corresponding value. |
| This version of |
| .B tput |
| did not use \fB\%tparm\fP(3X) for parameterized capabilities. |
| .bP |
| SVr3 (1987) replaced that |
| .\" SVr3 released in 1987, not 1985. |
| .\" https://unix.org/what_is_unix/history_timeline.html |
| with a more extensive program |
| whose support for |
| .B init |
| and |
| .B \%reset |
| operands |
| (more than half the program) |
| incorporated the |
| .B \%reset |
| feature of BSD |
| .B tset |
| written by Eric Allman. |
| .bP |
| SVr4 (1989) added color initialization by using the |
| .B \%orig_colors |
| .RB ( oc ) |
| and |
| .B \%orig_pair |
| .RB ( op ) |
| capabilities in its |
| .B init |
| logic. |
| .PP |
| Keith Bostic refactored BSD |
| .B tput |
| for shipment in 4.3BSD-Tahoe (1988), |
| then replaced it the next year with a new implementation based on |
| System\ V |
| .BR tput . |
| Bostic's version similarly accepted some parameters named for |
| .I \%term\%info |
| (pseudo-)capabilities: |
| .BR clear , |
| .BR init , |
| .BR \%longname , |
| and |
| .BR \%reset . |
| However, |
| because he had only |
| .I termcap |
| available, |
| it accepted |
| .I termcap |
| codes for other capabilities. |
| Also, |
| Bostic's BSD |
| .B tput |
| did not modify the terminal modes as the earlier BSD |
| .B tset |
| had done. |
| .PP |
| At the same time, |
| Bostic added a shell script named \*(``clear\*('' that used |
| .B tput |
| to clear the screen. |
| Both of these appeared in 4.4BSD, |
| becoming the \*(``modern\*('' BSD implementation of |
| .BR tput . |
| .PP |
| The origin of |
| .I \%ncurses |
| \fB\%@TPUT@\fP lies outside both System\ V and BSD, |
| in Ross Ridge's |
| .I \%mytinfo |
| package, |
| published on |
| .I comp.sources.unix |
| in December 1992. |
| Ridge's program made more sophisticated use of the terminal capabilities |
| than the BSD program. |
| Eric Raymond used that |
| .B tput |
| program |
| (and other parts of |
| .IR \%mytinfo ) |
| in |
| .I \%ncurses |
| in June 1995. |
| Incorporating the portions dealing with terminal capabilities |
| almost without change, |
| Raymond made improvements to the way command-line parameters |
| were handled. |
| .PP |
| Before |
| .I \%ncurses |
| 6.1 (2018), |
| its \fB\%@TSET@\fP and \fB\%@TPUT@\fP utilities differed. |
| .bP |
| \fB\%@TSET@\fP was more effective, |
| resetting the terminal modes and special characters. |
| .bP |
| On the other hand, |
| \fB\%@TSET@\fP's repertoire of terminal capabilities for resetting the |
| terminal was more limited; |
| it had only equivalents of |
| .B \%reset_1string |
| .RB ( rs1 ), |
| .B \%reset_2string |
| .RB ( rs2 ), |
| and |
| .B \%reset_file |
| .RB ( rf ), |
| and not the tab stop and margin update features of \fB\%@TPUT@\fP. |
| .PP |
| The |
| .B \%reset |
| program is traditionally an alias for \fB\%@TSET@\fP due to its ability |
| to reset terminal modes and special characters. |
| .PP |
| As of |
| .I \%ncurses |
| 6.1, |
| the \*(``reset\*('' features of the two programs are (mostly) the same. |
| Two minor differences remain. |
| .bP |
| The \fB\%@TSET@\fP program waits one second when resetting, |
| in case the terminal happens to be a hardware device. |
| .bP |
| The two programs write the terminal initialization strings |
| to different streams; |
| that is, |
| standard error for \fB\%@TSET@\fP and |
| standard output for \fB\%@TPUT@\fP. |
| .SH EXAMPLES |
| .TP |
| .B "@TPUT@ init" |
| Initialize the terminal according to the type of |
| terminal in the |
| .I TERM |
| environment variable. |
| If the system does not reliably initialize the terminal upon login, |
| this command can be included in |
| .I \%$HOME/.profile |
| after exporting the |
| .I TERM |
| environment variable. |
| .TP |
| .B "@TPUT@ \-T5620 reset" |
| Reset an AT&T 5620 terminal, |
| overriding the terminal type in the |
| .I TERM |
| environment variable. |
| .TP |
| .B "@TPUT@ cnorm" |
| Set cursor to normal visibility. |
| .TP |
| .B "@TPUT@ home" |
| Move the cursor to row 0, |
| column 0: |
| the upper left corner of the screen, |
| usually known as the \*(``home\*('' cursor position. |
| .TP |
| .B "@TPUT@ clear" |
| Clear the screen: |
| write the |
| .B \%clear_screen |
| capability's value to the standard output stream. |
| .TP |
| .B "@TPUT@ cols" |
| Report the number of columns used by the current terminal type. |
| .TP |
| .B "@TPUT@ \-Tadm3a cols" |
| Report the number of columns used by an ADM-3A terminal. |
| .TP |
| .B "strong=\(ga@TPUT@ smso\(ga normal=\(ga@TPUT@ rmso\(ga" |
| Set shell variables to capability values: |
| .B strong |
| and |
| .BR normal , |
| to begin and end, |
| respectively, |
| stand-out mode for the terminal. |
| One might use these to present a prompt. |
| .IP |
| .EX |
| .RS 14 |
| printf "${strong}Username:${normal} " |
| .RE |
| .EE |
| .TP |
| .B "@TPUT@ hc" |
| Indicate via exit status whether the terminal is a hard copy device. |
| .TP |
| .B "@TPUT@ cup 23 4" |
| Move the cursor to row 23, |
| column 4. |
| .TP |
| .B "@TPUT@ cup" |
| Report the value of the |
| .B \%cursor_address |
| .RB ( cup ) |
| capability |
| (used for cursor movement), |
| with no parameters substituted. |
| .TP |
| .B "@TPUT@ longname" |
| Report the |
| .I \%term\%info |
| database's description of the terminal type specified in the |
| .I TERM |
| environment variable. |
| .TP |
| .B "@TPUT@ \-S" |
| Process multiple capabilities. |
| The |
| .B \-S |
| option can be profitably used with a shell \*(``here document\*(''. |
| .IP |
| .EX |
| .RB $\ "@TPUT@ \-S <<!" |
| .RB >\ clear |
| .RB >\ "cup 10 10" |
| .RB >\ bold |
| .RB >\ ! |
| .EE |
| .IP |
| The foregoing |
| clears the screen, |
| moves the cursor to position |
| (10, 10) |
| and turns on bold |
| (extra bright) |
| mode. |
| .TP |
| .B "@TPUT@ clear cup 10 10 bold" |
| Perform the same actions as the foregoing |
| .RB \%\*(`` "@TPUT@ \-S" \*('' |
| example. |
| .SH SEE ALSO |
| \fB\%@CLEAR@\fP(1), |
| \fB\%stty\fP(1), |
| \fB\%@TABS@\fP(1), |
| \fB\%@TSET@\fP(1), |
| \fB\%curs_termcap\fP(3X), |
| \fB\%terminfo\fP(5) |