2 .\"***************************************************************************
3 .\" Copyright 2018-2023,2024 Thomas E. Dickey *
4 .\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
6 .\" Permission is hereby granted, free of charge, to any person obtaining a *
7 .\" copy of this software and associated documentation files (the *
8 .\" "Software"), to deal in the Software without restriction, including *
9 .\" without limitation the rights to use, copy, modify, merge, publish, *
10 .\" distribute, distribute with modifications, sublicense, and/or sell *
11 .\" copies of the Software, and to permit persons to whom the Software is *
12 .\" furnished to do so, subject to the following conditions: *
14 .\" The above copyright notice and this permission notice shall be included *
15 .\" in all copies or substantial portions of the Software. *
17 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 .\" Except as contained in this notice, the name(s) of the above copyright *
26 .\" holders shall not be used in advertising or otherwise to promote the *
27 .\" sale, use or other dealings in this Software without prior written *
29 .\"***************************************************************************
31 .\" $Id: tput.1,v 1.114 2024/05/11 20:39:53 tom Exp $
32 .TH @TPUT@ 1 2024-05-11 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "User commands"
50 initialize a terminal, exercise its capabilities, or query \fI\%term\%info\fP database
52 \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP]
53 {\fIcap-code\fP [\fIparameter\fP .\|.\|.\&]} .\|.\|.
55 \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] [\fB\-x\fP] \fBclear\fP
57 \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fBinit\fP
59 \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fB\%reset\fP
61 \fB@TPUT@\fP [\fB\-T\fP \fIterminal-type\fP] \fB\%longname\fP
67 \fB\%@TPUT@\fP uses the
69 library and database to make terminal-specific capabilities and
70 information available to the shell,
71 to initialize or reset the terminal,
73 to report a description of the current
76 Terminal capabilities are accessed by
79 \fB\%terminfo\fP(5) discusses terminal capabilities at length
80 and presents a complete list of
83 When retrieving capability values,
84 the result depends upon the capability's type.
85 .TP 9 \" "Boolean" + 2n
87 \fB\%@TPUT@\fP sets its exit status to
89 if the terminal possesses
98 decimal value to the standard output stream if defined
101 followed by a newline.
104 \fB\%@TPUT@\fP writes
106 value to the standard output stream if defined,
107 without a trailing newline.
109 Before using a value returned on the standard output,
110 the application should test \fB\%@TPUT@\fP's exit status
112 see section \*(``EXIT STATUS\*('' below.
117 a capability code from the terminal database,
118 or a parameter thereto.
119 Three others are specially recognized by \fB\%@TPUT@\fP:
124 Although these resemble capability codes,
125 they in fact receive special handling;
126 we term them \*(``pseudo-capabilities\*(''.
127 .TP 11n \" "longname" + 2n + adjustment for PDF
129 indicates a capability from the terminal database.
133 is of string type and takes parameters,
134 \fB\%@TPUT@\fP interprets arguments following
137 up to the (fixed) quantity the capability requires.
139 Most parameters are numeric.
140 Only a few terminal capabilities require string parameters;
141 \fB\%@TPUT@\fP uses a table to decide which to pass as strings.
142 Normally \fB\%@TPUT@\fP uses \fB\%tparm\fP(3X) to perform the
144 If no parameters are given for the capability,
145 \fB\%@TPUT@\fP writes the string without performing the substitution.
148 initializes the terminal.
149 If the terminal database is present
150 and an entry for the user's terminal type exists,
155 \fB\%@TPUT@\fP retrieves the terminal's mode settings.
156 It successively tests the file descriptors corresponding to
159 the standard error stream,
161 the standard output stream,
163 the standard input stream,
169 to obtain terminal settings.
170 Having retrieved them,
171 \fB\%@TPUT@\fP remembers which descriptor to use for further updates.
174 If the terminal dimensions cannot be obtained from the operating system,
175 but the environment or terminal type database entry describes them,
176 \fB\%@TPUT@\fP updates the operating system's notion of them.
179 \fB\%@TPUT@\fP updates the terminal modes.
182 Any delays specified in the entry
184 when a newline is sent)
185 are set in the terminal driver.
187 Tab expansion is turned on or off per the specification in the entry,
190 if tabs are not expanded,
197 If initialization capabilities,
198 detailed in subsection \*(``Tabs and Initialization\*('' of
201 \fB\%@TPUT@\fP writes them to the standard output stream.
204 \fB\%@TPUT@\fP flushes the standard output stream.
207 If an entry lacks the information needed for an activity above,
208 that activity is silently skipped.
211 re-initializes the terminal.
212 A reset differs from initialization in two ways.
216 \fB\%@TPUT@\fP sets the the terminal modes to a \*(``sane\*('' state,
219 enabling cooked and echo modes,
221 disabling cbreak and raw modes,
223 enabling newline translation,
226 setting any unset special characters to their default values.
230 If any reset capabilities are defined for the terminal type,
231 \fB\%@TPUT@\fP writes them to the output stream.
233 \fB\%@TPUT@\fP uses any defined initialization capabilities.
234 Reset capabilities are detailed in subsection
235 \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5).
241 entry begins with one or more names by which an application
242 can refer to the entry,
243 before the list of terminal capabilities.
244 The names are separated by \*(``|\*('' characters.
245 X/Open Curses terms the last name the \*(``long name\*('',
246 and indicates that it may include blanks.
248 \fB\%@TIC@\fP warns if the last name does not include blanks,
251 entries that treated the long name as an optional feature.
252 The long name is often referred to as the description field.
254 If the terminal database is present and an entry for the user's terminal
256 \fB\%@TPUT@\fP reports its description to the standard output stream,
257 without a trailing newline.
258 See \fB\%terminfo\fP(5).
261 Redirecting the output of
262 .RB \%\*(`` "@TPUT@ init" \*(''
264 .RB \%\*(`` "@TPUT@ reset" \*(''
265 to a file will capture only part of their actions.
266 Changes to the terminal modes are not affected by file descriptor
268 since the terminal modes are altered via \fB\%ioctl\fP(2).
270 If \fB\%@TPUT@\fP is invoked via link with any of the names
275 it operates as if run with the corresponding (pseudo-)capability
278 executing a link named
280 that points to \fB\%@TPUT@\fP has the same effect as
281 .RB \%\*(`` "@TPUT@ \%reset" \*(''.
283 This feature was introduced by
289 is a separate program,
290 which is both smaller and more frequently executed.
293 has the same name as another program in widespread use.
297 by the \fB\%@TSET@\fP(1) utility (also via a link named
300 Besides the pseudo-capabilities
303 \fB\%@TPUT@\fP treats the
309 it may call \fB\%setupterm\fP(3X) to obtain the terminal size.
312 \fB\%@TPUT@\fP attempts to obtain these capabilities from the terminal
314 This generally fails for terminal emulators,
315 which lack a fixed window size and thus omit the capabilities.
317 It then asks the operating system for the terminal's size,
318 which generally works,
319 unless the connection is via a serial line that
320 does not support \*(``NAWS\*('': negotiations about window size.
323 it inspects the environment variables
327 which may override the terminal size.
332 \fB\%@TPUT@\fP ignores the environment variables by calling
333 .BR \%use_tioctl(TRUE) ,
334 relying upon the operating system
337 the terminal database).
339 .TP 9n \" "-T type" + 2n
341 retrieves more than one capability per invocation of \fB\%@TPUT@\fP.
342 The capabilities must be passed to \fB\%@TPUT@\fP from the standard
343 input stream instead of from the command line
344 (see section \*(``EXAMPLES\*('' below).
350 option changes the meanings of the
355 (see section \*(``EXIT STATUS\*('' below).
357 Some capabilities use string parameters rather than numeric ones.
358 \fB\%@TPUT@\fP employs a built-in table and the presence of parameters
359 in its input to decide how to interpret them,
360 and whether to use \fB\%tparm\fP(3X).
363 indicates the terminal's
365 Normally this option is unnecessary,
366 because a default is taken from the
368 environment variable.
370 the environment variables
377 reports the version of
379 associated with \fB\%@TPUT@\fP,
380 and exits with a successful status.
384 .RB \%\*(`` "@TPUT@ clear" \*(''
385 from attempting to clear the scrollback buffer.
388 one should interpret \fB\%@TPUT@\fP's exit statuses as follows.
395 Status Meaning When \-S Not Specified
397 0 Boolean or string capability present
398 1 Boolean or numeric capability absent
399 2 usage error or no terminal type specified
400 3 unrecognized terminal type
401 4 unrecognized capability code
402 >4 system error (4 + \fBerrno\fP)
408 some statuses change meanings.
415 Status Meaning When \-S Specified
417 0 all operands interpreted
419 4 some operands not interpreted
422 \fB@TPUT@\fP reads one environment variable.
423 .TP 8n \" "TERM" + 2n + adjustment for PDF
425 denotes the terminal type.
426 Each terminal type is distinct,
427 though many are similar.
430 option overrides its value.
434 tab stop initialization database
437 compiled terminal description database
442 has differed from that of System\ V in two important respects,
443 one now mostly historical.
447 writes to the standard output,
448 which need not be a terminal device.
450 the operands that manipulate terminal modes might not use the standard
458 operands use logic from 4.1cBSD
460 manipulating terminal modes.
461 It checks the same file descriptors
464 for association with a terminal device as
468 finally assumes a 1200 baud terminal.
469 When updating terminal modes,
475 (see section \*(``HISTORY\*('' below),
476 \fB\%@TPUT@\fP did not modify terminal modes.
477 It now employs a scheme similar to System\ V,
478 using functions shared with \fB\%@TSET@\fP
479 (and ultimately based on 4.4BSD
481 If it is not able to open a terminal
483 when run by \fIcron\fP(1)),
484 \fB\%@TPUT@\fP exits with an error status.
488 assumes that the type of a
490 operand is numeric if all the characters of its value are decimal
495 as a string capability.
497 Most implementations that provide support for
499 operands use the \fB\%tparm\fP(3X) function to expand its parameters.
500 That function expects a mixture of numeric and string parameters,
501 requiring \fB\%@TPUT@\fP to know which type to use.
505 uses a table to determine the parameter types for
509 and an internal function to analyze nonstandard
513 While more reliable than System\ V's utility,
514 a portability problem is introduced by this analysis.
515 An OpenBSD developer adapted the internal library function from
522 and modified it to interpret multiple
526 Portable applications should not rely upon this feature;
528 offers it to support applications written specifically for OpenBSD.
539 support is compiled in.
561 .B \%parm_delete_line
568 .BR \%parm_delete_line .
579 .B \%exit_delete_mode
595 .BR \%exit_delete_mode .
602 and the parameter-substitution features used in the
605 were not supported in
610 4.3BSD-Reno (1990) added support for
612 .\" longname was added in October 1989.
614 NetBSD added support for the parameter-substitution features.
616 IEEE Std 1003.1/The Open Group Base Specifications Issue 7
624 A few observations of interest arise from that selection.
629 as it does any other standard
635 do not correspond to terminal capabilities.
639 on SVr4-based systems such as Solaris,
642 as well as others such as AIX and Tru64,
643 also support standard
647 A few platforms such as FreeBSD recognize
651 capability codes in their respective
678 Because (apparently) all
680 Unix systems support the full set of capability codes,
681 the reason for documenting only a few may not be apparent.
683 X/Open Curses Issue 7 documents
688 and the other features used in this implementation.
691 there are two standards for
693 POSIX (a subset) and X/Open Curses (the full implementation).
694 POSIX documents a subset to avoid the complication of including
695 X/Open Curses and the terminal capability database.
697 While it is certainly possible to write a
699 program without using
703 implementation provides a
705 utility that does not also support standard
708 X/Open Curses Issue 7 (2009) is the first version to document utilities.
709 However that part of X/Open Curses does not follow existing practice
715 It assigns exit status 4 to \*(``invalid operand\*('',
716 which may have the same meaning as \*(``unknown capability\*(''.
721 uses the term \*(``invalid\*('' in this case.
723 It assigns exit status 255 to a numeric variable that is not specified
727 That likely is a documentation error,
728 mistaking the \*(``\-1\*('' written to the standard output to indicate
729 an absent or cancelled numeric capability for an (unsigned) exit status.
731 The various System\ V implementations
735 use the same exit statuses as
740 documents exit statuses that correspond to neither
746 command during development of 4BSD in October 1980.
747 This initial version only cleared the screen,
748 and did not ship with official distributions.
749 .\" It also exited with backwards exit status (1 on success, 0 on
750 .\" failure), and was characterized by Bostic in 1988 as "pretty
752 .\" See Spinellis's "unix-history-repo" on GitHub.
754 System\ V developed a different
758 SVr2 (1984) provided a rudimentary
760 that checked the parameter against each
761 predefined capability and returned the corresponding value.
764 did not use \fB\%tparm\fP(3X) for parameterized capabilities.
766 SVr3 (1987) replaced that
767 .\" SVr3 released in 1987, not 1985.
768 .\" https://unix.org/what_is_unix/history_timeline.html
769 with a more extensive program
775 (more than half the program)
780 written by Eric Allman.
782 SVr4 (1989) added color initialization by using the
792 Keith Bostic refactored BSD
794 for shipment in 4.3BSD-Tahoe (1988),
795 then replaced it the next year with a new implementation based on
798 Bostic's version similarly accepted some parameters named for
800 (pseudo-)capabilities:
812 codes for other capabilities.
816 did not modify the terminal modes as the earlier BSD
821 Bostic added a shell script named \*(``clear\*('' that used
824 Both of these appeared in 4.4BSD,
825 becoming the \*(``modern\*('' BSD implementation of
830 \fB\%@TPUT@\fP lies outside both System\ V and BSD,
837 Ridge's program made more sophisticated use of the terminal capabilities
838 than the BSD program.
839 Eric Raymond used that
847 Incorporating the portions dealing with terminal capabilities
848 almost without change,
849 Raymond made improvements to the way command-line parameters
855 its \fB\%@TSET@\fP and \fB\%@TPUT@\fP utilities differed.
857 \fB\%@TSET@\fP was more effective,
858 resetting the terminal modes and special characters.
861 \fB\%@TSET@\fP's repertoire of terminal capabilities for resetting the
862 terminal was more limited;
863 it had only equivalents of
871 and not the tab stop and margin update features of \fB\%@TPUT@\fP.
875 program is traditionally an alias for \fB\%@TSET@\fP due to its ability
876 to reset terminal modes and special characters.
881 the \*(``reset\*('' features of the two programs are (mostly) the same.
882 Two minor differences remain.
884 The \fB\%@TSET@\fP program waits one second when resetting,
885 in case the terminal happens to be a hardware device.
887 The two programs write the terminal initialization strings
888 to different streams;
890 standard error for \fB\%@TSET@\fP and
891 standard output for \fB\%@TPUT@\fP.
895 Initialize the terminal according to the type of
898 environment variable.
899 If the system does not reliably initialize the terminal upon login,
900 this command can be included in
904 environment variable.
906 .B "@TPUT@ \-T5620 reset"
907 Reset an AT&T 5620 terminal,
908 overriding the terminal type in the
910 environment variable.
913 Set cursor to normal visibility.
916 Move the cursor to row 0,
918 the upper left corner of the screen,
919 usually known as the \*(``home\*('' cursor position.
925 capability's value to the standard output stream.
928 Report the number of columns used by the current terminal type.
930 .B "@TPUT@ \-Tadm3a cols"
931 Report the number of columns used by an ADM-3A terminal.
933 .B "strong=\(ga@TPUT@ smso\(ga normal=\(ga@TPUT@ rmso\(ga"
934 Set shell variables to capability values:
940 stand-out mode for the terminal.
941 One might use these to present a prompt.
945 printf "${strong}Username:${normal} "
950 Indicate via exit status whether the terminal is a hard copy device.
953 Move the cursor to row 23,
957 Report the value of the
961 (used for cursor movement),
962 with no parameters substituted.
967 database's description of the terminal type specified in the
969 environment variable.
972 Process multiple capabilities.
975 option can be profitably used with a shell \*(``here document\*(''.
978 .RB $\ "@TPUT@ \-S <<!"
987 moves the cursor to position
993 .B "@TPUT@ clear cup 10 10 bold"
994 Perform the same actions as the foregoing
995 .RB \%\*(`` "@TPUT@ \-S" \*(''
1002 \fB\%curs_termcap\fP(3X),