2 ****************************************************************************
3 * Copyright 2018-2022,2023 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 ****************************************************************************
30 * @Id: tset.1,v 1.79 2023/12/23 16:20:07 tom Exp @
31 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD/s6/reset.c
32 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/cmd/\
34 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD/s6/tset.c
35 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD/man7/ttycap.7
36 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/cmd/\
38 * https://minnie.tuhs.org/cgi-bin/utree.pl?file=2.9BSD/usr/src/ucb/\
41 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
44 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
45 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
46 <TITLE>tset 1 2023-12-23 ncurses 6.4 User commands</TITLE>
47 <link rel="author" href="mailto:bug-ncurses@gnu.org">
51 <H1 class="no-header">tset 1 2023-12-23 ncurses 6.4 User commands</H1>
53 <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG> User commands <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG>
58 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
59 <STRONG>tset</STRONG>, <STRONG>reset</STRONG> - initialize or reset terminal state
62 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
63 <STRONG>tset</STRONG> [<STRONG>-IQVcqrsw</STRONG>] [<STRONG>-</STRONG>] [<STRONG>-e</STRONG> <EM>ch</EM>] [<STRONG>-i</STRONG> <EM>ch</EM>] [<STRONG>-k</STRONG> <EM>ch</EM>] [<STRONG>-m</STRONG> <EM>mapping</EM>] [<EM>terminal-</EM>
65 <STRONG>reset</STRONG> [<STRONG>-IQVcqrsw</STRONG>] [<STRONG>-</STRONG>] [<STRONG>-e</STRONG> <EM>ch</EM>] [<STRONG>-i</STRONG> <EM>ch</EM>] [<STRONG>-k</STRONG> <EM>ch</EM>] [<STRONG>-m</STRONG> <EM>mapping</EM>] [<EM>terminal-</EM>
69 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
71 </PRE><H3><a name="h3-tset----initialization"><EM>tset</EM> -- initialization</a></H3><PRE>
72 This program initializes terminals.
74 First, <STRONG>tset</STRONG> retrieves the current terminal mode settings for your
75 terminal. It does this by successively testing
77 <STRONG>o</STRONG> the standard error,
79 <STRONG>o</STRONG> standard output,
81 <STRONG>o</STRONG> standard input and
83 <STRONG>o</STRONG> ultimately "/dev/tty"
85 to obtain terminal settings. Having retrieved these settings, <STRONG>tset</STRONG>
86 remembers which file descriptor to use when updating settings.
88 Next, <STRONG>tset</STRONG> determines the type of terminal that you are using. This
89 determination is done as follows, using the first terminal type found.
91 1. The <STRONG>terminal</STRONG> argument specified on the command line.
93 2. The value of the <EM>TERM</EM> environment variable.
95 3. (BSD systems only.) The terminal type associated with the standard
96 error output device in the <EM>/etc/ttys</EM> file. (On System V hosts and
97 systems using that convention, <STRONG>getty(8)</STRONG> does this job by setting <EM>TERM</EM>
98 according to the type passed to it by <EM>/etc/inittab</EM>.)
100 4. The default terminal type, "unknown", is not suitable for curses
103 If the terminal type was not specified on the command-line, the <STRONG>-m</STRONG>
104 option mappings are then applied; see subsection "Terminal Type
105 Mapping". Then, if the terminal type begins with a question mark
106 ("?"), the user is prompted for confirmation of the terminal type. An
107 empty response confirms the type, or, another type can be entered to
108 specify a new type. Once the terminal type has been determined, the
109 terminal description for the terminal is retrieved. If no terminal
110 description is found for the type, the user is prompted for another
113 Once the terminal description is retrieved,
115 <STRONG>o</STRONG> if the "<STRONG>-w</STRONG>" option is enabled, <STRONG>tset</STRONG> may update the terminal's
118 If the window size cannot be obtained from the operating system,
119 but the terminal description (or environment, e.g., <EM>LINES</EM> and
120 <EM>COLUMNS</EM> variables specify this), use this to set the operating
121 system's notion of the window size.
123 <STRONG>o</STRONG> if the "<STRONG>-c</STRONG>" option is enabled, the backspace, interrupt and line
124 kill characters (among many other things) are set
126 <STRONG>o</STRONG> unless the "<STRONG>-I</STRONG>" option is enabled, the terminal and tab
127 <EM>initialization</EM> strings are sent to the standard error output, and
128 <STRONG>tset</STRONG> waits one second (in case a hardware reset was issued).
130 <STRONG>o</STRONG> Finally, if the erase, interrupt and line kill characters have
131 changed, or are not set to their default values, their values are
132 displayed to the standard error output.
135 </PRE><H3><a name="h3-reset----reinitialization"><EM>reset</EM> -- reinitialization</a></H3><PRE>
136 When invoked as <STRONG>reset</STRONG>, <STRONG>tset</STRONG> sets the terminal modes to "sane" values:
138 <STRONG>o</STRONG> sets cooked and echo modes,
140 <STRONG>o</STRONG> turns off cbreak and raw modes,
142 <STRONG>o</STRONG> turns on newline translation and
144 <STRONG>o</STRONG> resets any unset special characters to their default values
146 before doing the terminal initialization described above. Also, rather
147 than using the terminal <EM>initialization</EM> strings, it uses the terminal
148 <EM>reset</EM> strings.
150 The <STRONG>reset</STRONG> command is useful after a program dies leaving a terminal in
153 <STRONG>o</STRONG> you may have to type
155 <EM><LF></EM><STRONG>reset</STRONG><EM><LF></EM>
157 (the line-feed character is normally control-J) to get the terminal
158 to work, as carriage-return may no longer work in the abnormal
161 <STRONG>o</STRONG> Also, the terminal will often not echo the command.
164 </PRE><H3><a name="h3-Setting-the-Environment">Setting the Environment</a></H3><PRE>
165 It is often desirable to enter the terminal type and information about
166 the terminal's capabilities into the shell's environment. This is done
167 using the <STRONG>-s</STRONG> option.
169 When the <STRONG>-s</STRONG> option is specified, the commands to enter the information
170 into the shell's environment are written to the standard output. If
171 the <EM>SHELL</EM> environment variable ends in "csh", the commands are for
172 <STRONG>csh(1)</STRONG>, otherwise, they are for <STRONG>sh(1)</STRONG>. The <EM>csh</EM> commands set and unset
173 the shell variable <STRONG>noglob</STRONG>, leaving it unset. The following line in the
174 <STRONG>.login</STRONG> or <STRONG>.profile</STRONG> files will initialize the environment correctly:
176 eval `tset -s options ... `
179 </PRE><H3><a name="h3-Terminal-Type-Mapping">Terminal Type Mapping</a></H3><PRE>
180 When the terminal is not hardwired into the system (or the current
181 system information is incorrect) the terminal type derived from the
182 <EM>/etc/ttys</EM> file or the <EM>TERM</EM> environment variable is often something
183 generic like <STRONG>network</STRONG>, <STRONG>dialup</STRONG>, or <STRONG>unknown</STRONG>. When <STRONG>tset</STRONG> is used in a
184 startup script it is often desirable to provide information about the
185 type of terminal used on such ports.
187 The <STRONG>-m</STRONG> options maps from some set of conditions to a terminal type,
188 that is, to tell <STRONG>tset</STRONG> "If I'm on this port at a particular speed, guess
189 that I'm on that kind of terminal".
191 The argument to the <STRONG>-m</STRONG> option consists of an optional port type, an
192 optional operator, an optional baud rate specification, an optional
193 colon (":") character and a terminal type. The port type is a string
194 (delimited by either the operator or the colon character). The
195 operator may be any combination of ">", "<", "@", and "!"; ">" means
196 greater than, "<" means less than, "@" means equal to and "!" inverts
197 the sense of the test. The baud rate is specified as a number and is
198 compared with the speed of the standard error output (which should be
199 the control terminal). The terminal type is a string.
201 If the terminal type is not specified on the command line, the <STRONG>-m</STRONG>
202 mappings are applied to the terminal type. If the port type and baud
203 rate match the mapping, the terminal type specified in the mapping
204 replaces the current type. If more than one mapping is specified, the
205 first applicable mapping is used.
207 For example, consider the following mapping: <STRONG>dialup>9600:vt100</STRONG>. The
208 port type is dialup , the operator is >, the baud rate specification is
209 9600, and the terminal type is vt100. The result of this mapping is to
210 specify that if the terminal type is <STRONG>dialup</STRONG>, and the baud rate is
211 greater than 9600 baud, a terminal type of <STRONG>vt100</STRONG> will be used.
213 If no baud rate is specified, the terminal type will match any baud
214 rate. If no port type is specified, the terminal type will match any
215 port type. For example, <STRONG>-m</STRONG> <STRONG>dialup:vt100</STRONG> <STRONG>-m</STRONG> <STRONG>:?xterm</STRONG> will cause any
216 dialup port, regardless of baud rate, to match the terminal type vt100,
217 and any non-dialup port type to match the terminal type ?xterm. Note,
218 because of the leading question mark, the user will be queried on a
219 default port as to whether they are actually using an xterm terminal.
221 No whitespace characters are permitted in the <STRONG>-m</STRONG> option argument.
222 Also, to avoid problems with meta-characters, it is suggested that the
223 entire <STRONG>-m</STRONG> option argument be placed within single quote characters, and
224 that <EM>csh</EM> users insert a backslash character ("\") before any
225 exclamation marks ("!").
228 </PRE><H2><a name="h2-OPTIONS">OPTIONS</a></H2><PRE>
229 The options are as follows:
231 <STRONG>-c</STRONG> Set control characters and modes.
233 <STRONG>-e</STRONG> <EM>ch</EM>
234 Set the erase character to <EM>ch</EM>.
236 <STRONG>-I</STRONG> Do not send the terminal or tab initialization strings to the
239 <STRONG>-i</STRONG> <EM>ch</EM>
240 Set the interrupt character to <EM>ch</EM>.
242 <STRONG>-k</STRONG> <EM>ch</EM>
243 Set the line kill character to <EM>ch</EM>.
245 <STRONG>-m</STRONG> <EM>mapping</EM>
246 Specify a mapping from a port type to a terminal; see subsection
247 "Terminal Type Mapping".
249 <STRONG>-Q</STRONG> Do not display any values for the erase, interrupt and line kill
250 characters. Normally <STRONG>tset</STRONG> displays the values for control
251 characters which differ from the system's default values.
253 <STRONG>-q</STRONG> The terminal type is displayed to the standard output, and the
254 terminal is not initialized in any way. The option "-" by itself
255 is equivalent but archaic.
257 <STRONG>-r</STRONG> Print the terminal type to the standard error output.
259 <STRONG>-s</STRONG> Print the sequence of shell commands to initialize the environment
260 variable <EM>TERM</EM> to the standard output; see subsection "Setting the
263 <STRONG>-V</STRONG> reports the version of <EM>ncurses</EM> which was used in this program, and
266 <STRONG>-w</STRONG> Resize the window to match the size deduced via <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>.
267 Normally this has no effect, unless <STRONG>setupterm</STRONG> is not able to
268 detect the window size.
270 The arguments for the <STRONG>-e</STRONG>, <STRONG>-i</STRONG>, and <STRONG>-k</STRONG> options may either be entered as
271 actual characters or by using the "hat" notation, i.e., control-h may
272 be specified as "^H" or "^h".
274 If neither <STRONG>-c</STRONG> or <STRONG>-w</STRONG> is given, both options are assumed.
277 </PRE><H2><a name="h2-ENVIRONMENT">ENVIRONMENT</a></H2><PRE>
278 The <STRONG>tset</STRONG> command uses these environment variables:
281 tells <STRONG>tset</STRONG> whether to initialize <EM>TERM</EM> using <STRONG>sh(1)</STRONG> or <STRONG>csh(1)</STRONG>
284 <EM>TERM</EM> Denotes your terminal type. Each terminal type is distinct,
285 though many are similar.
288 may denote the location of a termcap database. If it is not an
289 absolute pathname, e.g., begins with a "/", <STRONG>tset</STRONG> removes the
290 variable from the environment before looking for the terminal
294 </PRE><H2><a name="h2-FILES">FILES</a></H2><PRE>
296 system port name to terminal type mapping database (BSD versions
299 <EM>/usr/share/terminfo</EM>
300 compiled terminal description database directory
303 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
304 Neither IEEE Std 1003.1/The Open Group Base Specifications Issue 7
305 (POSIX.1-2008) nor X/Open Curses Issue 7 documents <STRONG>tset</STRONG> or <STRONG>reset</STRONG>.
307 The AT&T <STRONG>tput</STRONG> utility (AIX, HP-UX, Solaris) incorporated the terminal-
308 mode manipulation as well as termcap-based features such as resetting
309 tabstops from <STRONG>tset</STRONG> in BSD (4.1c), presumably with the intention of
310 making <STRONG>tset</STRONG> obsolete. However, each of those systems still provides
311 <STRONG>tset</STRONG>. In fact, the commonly-used <STRONG>reset</STRONG> utility is always an alias for
312 <STRONG>tset</STRONG>.
314 The <STRONG>tset</STRONG> utility provides backward compatibility with BSD environments;
315 under most modern Unices, <EM>/etc/inittab</EM> and <STRONG>getty(8)</STRONG> can set <EM>TERM</EM>
316 appropriately for each dial-up line, obviating what was <STRONG>tset</STRONG>'s most
317 important use. This implementation behaves like 4.4BSD <STRONG>tset</STRONG>, with a
318 few exceptions we shall consider now.
320 A few options are different because the <EM>TERMCAP</EM> variable is no longer
321 supported under terminfo-based <EM>ncurses</EM>:
323 <STRONG>o</STRONG> The <STRONG>-S</STRONG> option of BSD <STRONG>tset</STRONG> no longer works; it prints an error
324 message to the standard error and dies.
326 <STRONG>o</STRONG> The <STRONG>-s</STRONG> option only sets <EM>TERM</EM>, not <EM>TERMCAP</EM>.
328 There was an undocumented 4.4BSD feature that invoking <STRONG>tset</STRONG> via a link
329 named "TSET" (or via any other name beginning with an upper-case
330 letter) set the terminal to use upper-case only. This feature has been
333 The <STRONG>-A</STRONG>, <STRONG>-E</STRONG>, <STRONG>-h</STRONG>, <STRONG>-u</STRONG> and <STRONG>-v</STRONG> options were deleted from the <STRONG>tset</STRONG> utility in
334 4.4BSD. None of them were documented in 4.3BSD and all are of limited
335 utility at best. The <STRONG>-a</STRONG>, <STRONG>-d</STRONG>, and <STRONG>-p</STRONG> options are similarly not
336 documented or useful, but were retained as they appear to be in
337 widespread use. It is strongly recommended that any usage of these
338 three options be changed to use the <STRONG>-m</STRONG> option instead. The <STRONG>-a</STRONG>, <STRONG>-d</STRONG>, and
339 <STRONG>-p</STRONG> options are therefore omitted from the usage summary above.
341 Very old systems, e.g., 3BSD, used a different terminal driver which
342 was replaced in 4BSD in the early 1980s. To accommodate these older
343 systems, the 4BSD <STRONG>tset</STRONG> provided a <STRONG>-n</STRONG> option to specify that the new
344 terminal driver should be used. This implementation does not provide
347 It is still permissible to specify the <STRONG>-e</STRONG>, <STRONG>-i</STRONG>, and <STRONG>-k</STRONG> options without
348 arguments, although it is strongly recommended that such usage be fixed
349 to explicitly specify the character.
351 As of 4.4BSD, executing <STRONG>tset</STRONG> as <STRONG>reset</STRONG> no longer implies the <STRONG>-Q</STRONG> option.
352 Also, the interaction between the - option and the <EM>terminal</EM> argument in
353 some historic implementations of <STRONG>tset</STRONG> has been removed.
355 The <STRONG>-c</STRONG> and <STRONG>-w</STRONG> options are not found in earlier implementations.
356 However, a different window size-change feature was provided in 4.4BSD.
358 <STRONG>o</STRONG> In 4.4BSD, <STRONG>tset</STRONG> uses the window size from the termcap description
359 to set the window size if <STRONG>tset</STRONG> is not able to obtain the window
360 size from the operating system.
362 <STRONG>o</STRONG> In <EM>ncurses</EM>, <STRONG>tset</STRONG> obtains the window size using <STRONG>setupterm</STRONG>, which may
363 be from the operating system, the <EM>LINES</EM> and <EM>COLUMNS</EM> environment
364 variables or the terminal description.
366 Obtaining the window size from the terminal description is common to
367 both implementations, but considered obsolescent. Its only practical
368 use is for hardware terminals. Generally speaking, a window size would
369 be unset only if there were some problem obtaining the value from the
370 operating system (and <STRONG>setupterm</STRONG> would still fail). For that reason,
371 the <EM>LINES</EM> and <EM>COLUMNS</EM> environment variables may be useful for working
372 around window-size problems. Those have the drawback that if the
373 window is resized, those variables must be recomputed and reassigned.
374 To do this more easily, use the <STRONG>resize(1)</STRONG> program.
377 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
378 A <STRONG>reset</STRONG> command written by Kurt Shoens appeared in 1BSD (March 1978).
379 It set the <EM>erase</EM> and <EM>kill</EM> characters to <STRONG>^H</STRONG> (backspace) and <STRONG>@</STRONG>
380 respectively. Mark Horton improved this <STRONG>reset</STRONG> in 3BSD (October 1979),
381 adding <EM>intr</EM>, <EM>quit</EM>, <EM>start</EM>/<EM>stop</EM>, and <EM>eof</EM> characters as well as changing
382 the program to avoid modifying any user settings. That version of
383 <STRONG>reset</STRONG> did not use <EM>termcap</EM>.
385 Eric Allman wrote a distinct <STRONG>tset</STRONG> command for 1BSD, using a forerunner
386 of <EM>termcap</EM> called <EM>ttycap</EM>. Allman's comments in the source code
387 indicate that he began work in October 1977, continuing development
388 over the next few years. By late 1979, it had migrated to <EM>termcap</EM> and
389 handled the <EM>TERMCAP</EM> variable. Later comments indicate that <STRONG>tset</STRONG> was
390 modified in September 1980 to use logic copied from the 3BSD "reset"
391 program when it was invoked as <STRONG>reset</STRONG>. This version appeared in
392 4.1cBSD, late in 1982. Other developers such as Keith Bostic and Jim
393 Bloom continued to modify <STRONG>tset</STRONG> until 4.4BSD was released in 1993.
395 The <EM>ncurses</EM> implementation was lightly adapted from the 4.4BSD sources
396 to use the <EM>terminfo</EM> API by Eric S. Raymond <esr@snark.thyrsus.com>.
399 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
400 <STRONG>csh(1)</STRONG>, <STRONG>sh(1)</STRONG>, <STRONG>stty(1)</STRONG>, <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>, <STRONG>tty(4)</STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>,
401 <STRONG>ttys(5)</STRONG>, <STRONG>environ(7)</STRONG>
405 ncurses 6.4 2023-12-23 <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG>
409 <li><a href="#h2-NAME">NAME</a></li>
410 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
411 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
413 <li><a href="#h3-tset----initialization">tset -- initialization</a></li>
414 <li><a href="#h3-reset----reinitialization">reset -- reinitialization</a></li>
415 <li><a href="#h3-Setting-the-Environment">Setting the Environment</a></li>
416 <li><a href="#h3-Terminal-Type-Mapping">Terminal Type Mapping</a></li>
419 <li><a href="#h2-OPTIONS">OPTIONS</a></li>
420 <li><a href="#h2-ENVIRONMENT">ENVIRONMENT</a></li>
421 <li><a href="#h2-FILES">FILES</a></li>
422 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
423 <li><a href="#h2-HISTORY">HISTORY</a></li>
424 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>