Mercurial > hg > xemacs-beta
comparison man/termcap.texi @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 \input texinfo @c -*-texinfo-*- | |
2 @setfilename ../info/termcap.info | |
3 @settitle The Termcap Library | |
4 @ifinfo | |
5 This file documents the termcap library of the GNU system. | |
6 | |
7 Copyright (C) 1988 Free Software Foundation, Inc. | |
8 | |
9 Permission is granted to make and distribute verbatim copies of | |
10 this manual provided the copyright notice and this permission notice | |
11 are preserved on all copies. | |
12 | |
13 @ignore | |
14 Permission is granted to process this file through TeX and print the | |
15 results, provided the printed document carries copying permission | |
16 notice identical to this one except for the removal of this paragraph | |
17 (this paragraph not being relevant to the printed manual). | |
18 | |
19 @end ignore | |
20 Permission is granted to copy and distribute modified versions of this | |
21 manual under the conditions for verbatim copying, provided that the entire | |
22 resulting derived work is distributed under the terms of a permission | |
23 notice identical to this one. | |
24 | |
25 Permission is granted to copy and distribute translations of this manual | |
26 into another language, under the above conditions for modified versions, | |
27 except that this permission notice may be stated in a translation approved | |
28 by the Foundation. | |
29 @end ifinfo | |
30 | |
31 @setchapternewpage odd | |
32 @titlepage | |
33 @sp 6 | |
34 @center @titlefont{Termcap} | |
35 @sp 1 | |
36 @center The Termcap Library and Data Base | |
37 @sp 4 | |
38 @center First Edition | |
39 @sp 1 | |
40 @center April 1988 | |
41 @sp 5 | |
42 @center Richard M. Stallman | |
43 @sp 1 | |
44 @center Free Software Foundation | |
45 @page | |
46 @vskip 0pt plus 1filll | |
47 Copyright @copyright{} 1988 Free Software Foundation, Inc. | |
48 | |
49 Published by the Free Software Foundation | |
50 (675 Mass Ave, Cambridge MA 02139). | |
51 Printed copies are available for $10 each. | |
52 | |
53 Permission is granted to make and distribute verbatim copies of | |
54 this manual provided the copyright notice and this permission notice | |
55 are preserved on all copies. | |
56 | |
57 Permission is granted to copy and distribute modified versions of this | |
58 manual under the conditions for verbatim copying, provided that the entire | |
59 resulting derived work is distributed under the terms of a permission | |
60 notice identical to this one. | |
61 | |
62 Permission is granted to copy and distribute translations of this manual | |
63 into another language, under the above conditions for modified versions, | |
64 except that this permission notice may be stated in a translation approved | |
65 by the Foundation. | |
66 @end titlepage | |
67 @page | |
68 | |
69 @synindex vr fn | |
70 | |
71 @node Top, Introduction, (DIR), (DIR) | |
72 | |
73 @menu | |
74 * Introduction::What is termcap? Why this manual? | |
75 * Library:: The termcap library functions. | |
76 * Data Base:: What terminal descriptions in @file{/etc/termcap} look like. | |
77 * Capabilities::Definitions of the individual terminal capabilities: | |
78 how to write them in descriptions, and how to use | |
79 their values to do display updating. | |
80 * Summary:: Brief table of capability names and their meanings. | |
81 * Var Index:: Index of C functions and variables. | |
82 * Cap Index:: Index of termcap capabilities. | |
83 * Index:: Concept index. | |
84 @end menu | |
85 | |
86 @node Introduction, Library, Top, Top | |
87 @unnumbered Introduction | |
88 | |
89 @cindex termcap | |
90 @dfn{Termcap} is a library and data base that enables programs to use | |
91 display terminals in a terminal-independent manner. It originated in | |
92 Berkeley Unix. | |
93 | |
94 The termcap data base describes the capabilities of hundreds of different | |
95 display terminals in great detail. Some examples of the information | |
96 recorded for a terminal could include how many columns wide it is, what | |
97 string to send to move the cursor to an arbitrary position (including how | |
98 to encode the row and column numbers), how to scroll the screen up one or | |
99 several lines, and how much padding is needed for such a scrolling | |
100 operation. | |
101 | |
102 The termcap library is provided for easy access this data base in programs | |
103 that want to do terminal-independent character-based display output. | |
104 | |
105 This manual describes the GNU version of the termcap library, which has | |
106 some extensions over the Unix version. All the extensions are identified | |
107 as such, so this manual also tells you how to use the Unix termcap. | |
108 | |
109 The GNU version of the termcap library is available free as source code, | |
110 for use in free programs, and runs on Unix and VMS systems (at least). You | |
111 can find it in the GNU Emacs distribution in the files @file{termcap.c} and | |
112 @file{tparam.c}. | |
113 | |
114 This manual was written for the GNU project, whose goal is to develop a | |
115 complete free operating system upward-compatible with Unix for user | |
116 programs. The project is approximately two thirds complete. For more | |
117 information on the GNU project, including the GNU Emacs editor and the | |
118 mostly-portable optimizing C compiler, send one dollar to | |
119 | |
120 @display | |
121 Free Software Foundation | |
122 675 Mass Ave | |
123 Cambridge, MA 02139 | |
124 @end display | |
125 | |
126 @node Library, Data Base, Introduction, Top | |
127 @chapter The Termcap Library | |
128 | |
129 The termcap library is the application programmer's interface to the | |
130 termcap data base. It contains functions for the following purposes: | |
131 | |
132 @itemize @bullet | |
133 @item | |
134 Finding the description of the user's terminal type (@code{tgetent}). | |
135 | |
136 @item | |
137 Interrogating the description for information on various topics | |
138 (@code{tgetnum}, @code{tgetflag}, @code{tgetstr}). | |
139 | |
140 @item | |
141 Computing and performing padding (@code{tputs}). | |
142 | |
143 @item | |
144 Encoding numeric parameters such as cursor positions into the | |
145 terminal-specific form required for display commands (@code{tparam}, | |
146 @code{tgoto}). | |
147 @end itemize | |
148 | |
149 @menu | |
150 * Preparation:: Preparing to use the termcap library. | |
151 * Find:: Finding the description of the terminal being used. | |
152 * Interrogate:: Interrogating the description for particular capabilities. | |
153 * Initialize:: Initialization for output using termcap. | |
154 * Padding:: Outputting padding. | |
155 * Parameters:: Encoding parameters such as cursor positions. | |
156 @end menu | |
157 | |
158 @node Preparation, Find, Library, Library | |
159 @section Preparing to Use the Termcap Library | |
160 | |
161 To use the termcap library in a program, you need two kinds of preparation: | |
162 | |
163 @itemize @bullet | |
164 @item | |
165 The compiler needs declarations of the functions and variables in the | |
166 library. | |
167 | |
168 On GNU systems, it suffices to include the header file | |
169 @file{termcap.h} in each source file that uses these functions and | |
170 variables.@refill | |
171 | |
172 On Unix systems, there is often no such header file. Then you must | |
173 explictly declare the variables as external. You can do likewise for | |
174 the functions, or let them be implicitly declared and cast their | |
175 values from type @code{int} to the appropriate type. | |
176 | |
177 We illustrate the declarations of the individual termcap library | |
178 functions with ANSI C prototypes because they show how to pass the | |
179 arguments. If you are not using the GNU C compiler, you probably | |
180 cannot use function prototypes, so omit the argument types and names | |
181 from your declarations. | |
182 | |
183 @item | |
184 The linker needs to search the library. Usually either | |
185 @samp{-ltermcap} or @samp{-ltermlib} as an argument when linking will | |
186 do this.@refill | |
187 @end itemize | |
188 | |
189 @node Find, Interrogate, Preparation, Library | |
190 @section Finding a Terminal Description: @code{tgetent} | |
191 | |
192 @findex tgetent | |
193 An application program that is going to use termcap must first look up the | |
194 description of the terminal type in use. This is done by calling | |
195 @code{tgetent}, whose declaration in ANSI Standard C looks like: | |
196 | |
197 @example | |
198 int tgetent (char *@var{buffer}, char *@var{termtype}); | |
199 @end example | |
200 | |
201 @noindent | |
202 This function finds the description and remembers it internally so that | |
203 you can interrogate it about specific terminal capabilities | |
204 (@pxref{Interrogate}). | |
205 | |
206 The argument @var{termtype} is a string which is the name for the type of | |
207 terminal to look up. Usually you would obtain this from the environment | |
208 variable @code{TERM} using @code{getenv ("TERM")}. | |
209 | |
210 If you are using the GNU version of termcap, you can alternatively ask | |
211 @code{tgetent} to allocate enough space. Pass a null pointer for | |
212 @var{buffer}, and @code{tgetent} itself allocates the storage using | |
213 @code{malloc}. In this case the returned value on success is the address | |
214 of the storage, cast to @code{int}. But normally there is no need for you | |
215 to look at the address. Do not free the storage yourself.@refill | |
216 | |
217 With the Unix version of termcap, you must allocate space for the | |
218 description yourself and pass the address of the space as the argument | |
219 @var{buffer}. There is no way you can tell how much space is needed, so | |
220 the convention is to allocate a buffer 2048 characters long and assume that | |
221 is enough. (Formerly the convention was to allocate 1024 characters and | |
222 assume that was enough. But one day, for one kind of terminal, that was | |
223 not enough.) | |
224 | |
225 No matter how the space to store the description has been obtained, | |
226 termcap records its address internally for use when you later interrogate | |
227 the description with @code{tgetnum}, @code{tgetstr} or @code{tgetflag}. If | |
228 the buffer was allocated by termcap, it will be freed by termcap too if you | |
229 call @code{tgetent} again. If the buffer was provided by you, you must | |
230 make sure that its contents remain unchanged for as long as you still plan | |
231 to interrogate the description.@refill | |
232 | |
233 The return value of @code{tgetent} is @minus{}1 if there is some difficulty | |
234 accessing the data base of terminal types, 0 if the data base is accessible | |
235 but the specified type is not defined in it, and some other value | |
236 otherwise. | |
237 | |
238 Here is how you might use the function @code{tgetent}: | |
239 | |
240 @example | |
241 #ifdef unix | |
242 static char term_buffer[2048]; | |
243 #else | |
244 #define term_buffer 0 | |
245 #endif | |
246 | |
247 init_terminal_data () | |
248 @{ | |
249 char *termtype = getenv ("TERM"); | |
250 int success; | |
251 | |
252 if (termtype == 0) | |
253 fatal ("Specify a terminal type with `setenv TERM <yourtype>'.\n"); | |
254 | |
255 success = tgetent (term_buffer, termtype); | |
256 if (success < 0) | |
257 fatal ("Could not access the termcap data base.\n"); | |
258 if (success == 0) | |
259 fatal ("Terminal type `%s' is not defined.\n", termtype); | |
260 @} | |
261 @end example | |
262 | |
263 @noindent | |
264 Here we assume the function @code{fatal} prints an error message and exits. | |
265 | |
266 If the environment variable @code{TERMCAP} is defined, its value is used to | |
267 override the terminal type data base. The function @code{tgetent} checks | |
268 the value of @code{TERMCAP} automatically. If the value starts with | |
269 @samp{/} then it is taken as a file name to use as the data base file, | |
270 instead of @file{/etc/termcap} which is the standard data base. If the | |
271 value does not start with @samp{/} then it is itself used as the terminal | |
272 description, provided that the terminal type @var{termtype} is among the | |
273 types it claims to apply to. @xref{Data Base}, for information on the | |
274 format of a terminal description.@refill | |
275 | |
276 @node Interrogate, Initialize, Find, Library | |
277 @section Interrogating the Terminal Description | |
278 | |
279 Each piece of information recorded in a terminal description is called a | |
280 @dfn{capability}. Each defined terminal capability has a two-letter code | |
281 name and a specific meaning. For example, the number of columns is named | |
282 @samp{co}. @xref{Capabilities}, for definitions of all the standard | |
283 capability names. | |
284 | |
285 Once you have found the proper terminal description with @code{tgetent} | |
286 (@pxref{Find}), your application program must @dfn{interrogate} it for | |
287 various terminal capabilities. You must specify the two-letter code of | |
288 the capability whose value you seek. | |
289 | |
290 Capability values can be numeric, boolean (capability is either present or | |
291 absent) or strings. Any particular capability always has the same value | |
292 type; for example, @samp{co} always has a numeric value, while @samp{am} | |
293 (automatic wrap at margin) is always a flag, and @samp{cm} (cursor motion | |
294 command) always has a string value. The documentation of each capability | |
295 says which type of value it has.@refill | |
296 | |
297 There are three functions to use to get the value of a capability, | |
298 depending on the type of value the capability has. Here are their | |
299 declarations in ANSI C: | |
300 | |
301 @findex tgetnum | |
302 @findex tgetflag | |
303 @findex tgetstr | |
304 @example | |
305 int tgetnum (char *@var{name}); | |
306 int tgetflag (char *@var{name}); | |
307 char *tgetstr (char *@var{name}, char **@var{area}); | |
308 @end example | |
309 | |
310 @table @code | |
311 @item tgetnum | |
312 Use @code{tgetnum} to get a capability value that is numeric. The | |
313 argument @var{name} is the two-letter code name of the capability. If | |
314 the capability is present, @code{tgetnum} returns the numeric value | |
315 (which is nonnegative). If the capability is not mentioned in the | |
316 terminal description, @code{tgetnum} returns @minus{}1. | |
317 | |
318 @item tgetflag | |
319 Use @code{tgetflag} to get a boolean value. If the capability | |
320 @var{name} is present in the terminal description, @code{tgetflag} | |
321 returns 1; otherwise, it returns 0. | |
322 | |
323 @item tgetstr | |
324 Use @code{tgetstr} to get a string value. It returns a pointer to a | |
325 string which is the capability value, or a null pointer if the | |
326 capability is not present in the terminal description. | |
327 | |
328 There are two ways @code{tgetstr} can find space to store the string value: | |
329 | |
330 @itemize @bullet | |
331 @item | |
332 You can ask @code{tgetstr} to allocate the space. Pass a null | |
333 pointer for the argument @var{area}, and @code{tgetstr} will use | |
334 @code{malloc} to allocate storage big enough for the value. | |
335 Termcap will never free this storage or refer to it again; you | |
336 should free it when you are finished with it. | |
337 | |
338 This method is more robust, since there is no need to guess how | |
339 much space is needed. But it is supported only by the GNU | |
340 termcap library. | |
341 | |
342 @item | |
343 You can provide the space. Provide for the argument @var{area} the | |
344 address of a pointer variable of type @code{char *}. Before calling | |
345 @code{tgetstr}, initialize the variable to point at available space. | |
346 Then @code{tgetstr} will store the string value in that space and will | |
347 increment the pointer variable to point after the space that has been | |
348 used. You can use the same pointer variable for many calls to | |
349 @code{tgetstr}. | |
350 | |
351 There is no way to determine how much space is needed for a single | |
352 string, and no way for you to prevent or handle overflow of the area | |
353 you have provided. However, you can be sure that the total size of | |
354 all the string values you will obtain from the terminal description is | |
355 no greater than the size of the description (unless you get the same | |
356 capability twice). You can determine that size with @code{strlen} on | |
357 the buffer you provided to @code{tgetent}. See below for an example. | |
358 | |
359 Providing the space yourself is the only method supported by the Unix | |
360 version of termcap. | |
361 @end itemize | |
362 @end table | |
363 | |
364 Note that you do not have to specify a terminal type or terminal | |
365 description for the interrogation functions. They automatically use the | |
366 description found by the most recent call to @code{tgetent}. | |
367 | |
368 Here is an example of interrogating a terminal description for various | |
369 capabilities, with conditionals to select between the Unix and GNU methods | |
370 of providing buffer space. | |
371 | |
372 @example | |
373 char *tgetstr (); | |
374 | |
375 char *cl_string, *cm_string; | |
376 int height; | |
377 int width; | |
378 int auto_wrap; | |
379 | |
380 char PC; /* For tputs. */ | |
381 char *BC; /* For tgoto. */ | |
382 char *UP; | |
383 | |
384 interrogate_terminal () | |
385 @{ | |
386 #ifdef UNIX | |
387 /* Here we assume that an explicit term_buffer | |
388 was provided to tgetent. */ | |
389 char *buffer | |
390 = (char *) malloc (strlen (term_buffer)); | |
391 #define BUFFADDR &buffer | |
392 #else | |
393 #define BUFFADDR 0 | |
394 #endif | |
395 | |
396 char *temp; | |
397 | |
398 /* Extract information we will use. */ | |
399 cl_string = tgetstr ("cl", BUFFADDR); | |
400 cm_string = tgetstr ("cm", BUFFADDR); | |
401 auto_wrap = tgetflag ("am"); | |
402 height = tgetnum ("li"); | |
403 width = tgetnum ("co"); | |
404 | |
405 /* Extract information that termcap functions use. */ | |
406 temp = tgetstr ("pc", BUFFADDR); | |
407 PC = temp ? *temp : 0; | |
408 BC = tgetstr ("le", BUFFADDR); | |
409 UP = tgetstr ("up", BUFFADDR); | |
410 @} | |
411 @end example | |
412 | |
413 @noindent | |
414 @xref{Padding}, for information on the variable @code{PC}. @xref{Using | |
415 Parameters}, for information on @code{UP} and @code{BC}. | |
416 | |
417 @node Initialize, Padding, Interrogate, Library | |
418 @section Initialization for Use of Termcap | |
419 @cindex terminal flags (kernel) | |
420 | |
421 Before starting to output commands to a terminal using termcap, | |
422 an application program should do two things: | |
423 | |
424 @itemize @bullet | |
425 @item | |
426 Initialize various global variables which termcap library output | |
427 functions refer to. These include @code{PC} and @code{ospeed} for | |
428 padding (@pxref{Output Padding}) and @code{UP} and @code{BC} for | |
429 cursor motion (@pxref{tgoto}).@refill | |
430 | |
431 @item | |
432 Tell the kernel to turn off alteration and padding of horizontal-tab | |
433 characters sent to the terminal. | |
434 @end itemize | |
435 | |
436 To turn off output processing in Berkeley Unix you would use @code{ioctl} | |
437 with code @code{TIOCLSET} to set the bit named @code{LLITOUT}, and clear | |
438 the bits @code{ANYDELAY} using @code{TIOCSETN}. In POSIX or System V, you | |
439 must clear the bit named @code{OPOST}. Refer to the system documentation | |
440 for details.@refill | |
441 | |
442 If you do not set the terminal flags properly, some older terminals will | |
443 not work. This is because their commands may contain the characters that | |
444 normally signify newline, carriage return and horizontal tab---characters | |
445 which the kernel thinks it ought to modify before output. | |
446 | |
447 When you change the kernel's terminal flags, you must arrange to restore | |
448 them to their normal state when your program exits. This implies that the | |
449 program must catch fatal signals such as @code{SIGQUIT} and @code{SIGINT} | |
450 and restore the old terminal flags before actually terminating. | |
451 | |
452 Modern terminals' commands do not use these special characters, so if you | |
453 do not care about problems with old terminals, you can leave the kernel's | |
454 terminal flags unaltered. | |
455 | |
456 @node Padding, Parameters, Initialize, Library | |
457 @section Padding | |
458 @cindex padding | |
459 | |
460 @dfn{Padding} means outputting null characters following a terminal display | |
461 command that takes a long time to execute. The terminal description says | |
462 which commands require padding and how much; the function @code{tputs}, | |
463 described below, outputs a terminal command while extracting from it the | |
464 padding information, and then outputs the padding that is necessary. | |
465 | |
466 @menu | |
467 * Why Pad:: Explanation of padding. | |
468 * Describe Padding:: The data base says how much padding a terminal needs. | |
469 * Output Padding:: Using @code{tputs} to output the needed padding. | |
470 @end menu | |
471 | |
472 @node Why Pad, Describe Padding, Padding, Padding | |
473 @subsection Why Pad, and How | |
474 | |
475 Most types of terminal have commands that take longer to execute than they | |
476 do to send over a high-speed line. For example, clearing the screen may | |
477 take 20msec once the entire command is received. During that time, on a | |
478 9600 bps line, the terminal could receive about 20 additional output | |
479 characters while still busy clearing the screen. Every terminal has a | |
480 certain amount of buffering capacity to remember output characters that | |
481 cannot be processed yet, but too many slow commands in a row can cause the | |
482 buffer to fill up. Then any additional output that cannot be processed | |
483 immediately will be lost. | |
484 | |
485 To avoid this problem, we normally follow each display command with enough | |
486 useless charaters (usually null characters) to fill up the time that the | |
487 display command needs to execute. This does the job if the terminal throws | |
488 away null characters without using up space in the buffer (which most | |
489 terminals do). If enough padding is used, no output can ever be lost. The | |
490 right amount of padding avoids loss of output without slowing down | |
491 operation, since the time used to transmit padding is time that nothing | |
492 else could be done. | |
493 | |
494 The number of padding characters needed for an operation depends on the | |
495 line speed. In fact, it is proportional to the line speed. A 9600 baud | |
496 line transmits about one character per msec, so the clear screen command in | |
497 the example above would need about 20 characters of padding. At 1200 baud, | |
498 however, only about 3 characters of padding are needed to fill up 20msec. | |
499 | |
500 @node Describe Padding, Output Padding, Why Pad, Padding | |
501 @subsection Specifying Padding in a Terminal Description | |
502 | |
503 In the terminal description, the amount of padding required by each display | |
504 command is recorded as a sequence of digits at the front of the command. | |
505 These digits specify the padding time in msec. They can be followed | |
506 optionally by a decimal point and one more digit, which is a number of | |
507 tenths of msec. | |
508 | |
509 Sometimes the padding needed by a command depends on the cursor position. | |
510 For example, the time taken by an ``insert line'' command is usually | |
511 proportional to the number of lines that need to be moved down or cleared. | |
512 An asterisk (@samp{*}) following the padding time says that the time | |
513 should be multiplied by the number of screen lines affected by the command. | |
514 | |
515 @example | |
516 :al=1.3*\E[L: | |
517 @end example | |
518 | |
519 @noindent | |
520 is used to describe the ``insert line'' command for a certain terminal. | |
521 The padding required is 1.3 msec per line affected. The command itself is | |
522 @samp{@key{ESC} [ L}. | |
523 | |
524 The padding time specified in this way tells @code{tputs} how many pad | |
525 characters to output. @xref{Output Padding}. | |
526 | |
527 Two special capability values affect padding for all commands. These are | |
528 the @samp{pc} and @samp{pb}. The variable @samp{pc} specifies the | |
529 character to pad with, and @samp{pb} the speed below which no padding is | |
530 needed. The defaults for these variables, a null character and 0, | |
531 are correct for most terminals. @xref{Pad Specs}. | |
532 | |
533 @node Output Padding,, Describe Padding, Padding | |
534 @subsection Performing Padding with @code{tputs} | |
535 @cindex line speed | |
536 | |
537 @findex tputs | |
538 Use the termcap function @code{tputs} to output a string containing an | |
539 optional padding spec of the form described above (@pxref{Describe | |
540 Padding}). The function @code{tputs} strips off and decodes the padding | |
541 spec, outputs the rest of the string, and then outputs the appropriate | |
542 padding. Here is its declaration in ANSI C: | |
543 | |
544 @example | |
545 char PC; | |
546 short ospeed; | |
547 | |
548 int tputs (char *@var{string}, int @var{nlines}, int (*@var{outfun}) ()); | |
549 @end example | |
550 | |
551 Here @var{string} is the string (including padding spec) to be output; | |
552 @var{nlines} is the number of lines affected by the operation, which is | |
553 used to multiply the amount of padding if the padding spec ends with a | |
554 @samp{*}. Finally, @var{outfun} is a function (such as @code{fputchar}) | |
555 that is called to output each character. When actually called, | |
556 @var{outfun} should expect one argument, a character. | |
557 | |
558 @vindex ospeed | |
559 @vindex PC | |
560 The operation of @code{tputs} is controlled by two global variables, | |
561 @code{ospeed} and @code{PC}. The value of @code{ospeed} is supposed to be | |
562 the terminal output speed, encoded as in the @code{ioctl} system call which | |
563 gets the speed information. This is needed to compute the number of | |
564 padding characters. The value of @code{PC} is the character used for | |
565 padding. | |
566 | |
567 You are responsible for storing suitable values into these variables before | |
568 using @code{tputs}. The value stored into the @code{PC} variable should be | |
569 taken from the @samp{pc} capability in the terminal description (@pxref{Pad | |
570 Specs}). Store zero in @code{PC} if there is no @samp{pc} | |
571 capability.@refill | |
572 | |
573 The argument @var{nlines} requires some thought. Normally, it should be | |
574 the number of lines whose contents will be cleared or moved by the command. | |
575 For cursor motion commands, or commands that do editing within one line, | |
576 use the value 1. For most commands that affect multiple lines, such as | |
577 @samp{al} (insert a line) and @samp{cd} (clear from the cursor to the end | |
578 of the screen), @var{nlines} should be the screen height minus the current | |
579 vertical position (origin 0). For multiple insert and scroll commands such | |
580 as @samp{AL} (insert multiple lines), that same value for @var{nlines} is | |
581 correct; the number of lines being inserted is @i{not} correct.@refill | |
582 | |
583 If a ``scroll window'' feature is used to reduce the number of lines | |
584 affected by a command, the value of @var{nlines} should take this into | |
585 account. This is because the delay time required depends on how much work | |
586 the terminal has to do, and the scroll window feature reduces the work. | |
587 @xref{Scrolling}. | |
588 | |
589 Commands such as @samp{ic} and @samp{dc} (insert or delete characters) are | |
590 problematical because the padding needed by these commands is proportional | |
591 to the number of characters affected, which is the number of columns from | |
592 the cursor to the end of the line. It would be nice to have a way to | |
593 specify such a dependence, and there is no need for dependence on vertical | |
594 position in these commands, so it is an obvious idea to say that for these | |
595 commands @var{nlines} should really be the number of columns affected. | |
596 However, the definition of termcap clearly says that @var{nlines} is always | |
597 the number of lines affected, even in this case, where it is always 1. It | |
598 is not easy to change this rule now, because too many programs and terminal | |
599 descriptions have been written to follow it. | |
600 | |
601 Because @var{nlines} is always 1 for the @samp{ic} and @samp{dc} strings, | |
602 there is no reason for them to use @samp{*}, but some of them do. These | |
603 should be corrected by deleting the @samp{*}. If, some day, such entries | |
604 have disappeared, it may be possible to change to a more useful convention | |
605 for the @var{nlines} argument for these operations without breaking any | |
606 programs. | |
607 | |
608 @node Parameters,, Padding, Library | |
609 @section Filling In Parameters | |
610 @cindex parameters | |
611 | |
612 Some terminal control strings require numeric @dfn{parameters}. For | |
613 example, when you move the cursor, you need to say what horizontal and | |
614 vertical positions to move it to. The value of the terminal's @samp{cm} | |
615 capability, which says how to move the cursor, cannot simply be a string of | |
616 characters; it must say how to express the cursor position numbers and | |
617 where to put them within the command. | |
618 | |
619 The specifications of termcap include conventions as to which string-valued | |
620 capabilities require parameters, how many parameters, and what the | |
621 parameters mean; for example, it defines the @samp{cm} string to take | |
622 two parameters, the vertical and horizontal positions, with 0,0 being the | |
623 upper left corner. These conventions are described where the individual | |
624 commands are documented. | |
625 | |
626 Termcap also defines a language used within the capability definition for | |
627 specifying how and where to encode the parameters for output. This language | |
628 uses character sequences starting with @samp{%}. (This is the same idea as | |
629 @code{printf}, but the details are different.) The language for parameter | |
630 encoding is described in this section. | |
631 | |
632 A program that is doing display output calls the functions @code{tparam} or | |
633 @code{tgoto} to encode parameters according to the specifications. These | |
634 functions produce a string containing the actual commands to be output (as | |
635 well a padding spec which must be processed with @code{tputs}; | |
636 @pxref{Padding}). | |
637 | |
638 @menu | |
639 * Encode Parameters:: The language for encoding parameters. | |
640 * Using Parameters:: Outputting a string command with parameters. | |
641 @end menu | |
642 | |
643 @node Encode Parameters, Using Parameters, Parameters, Parameters | |
644 @subsection Describing the Encoding | |
645 @cindex % | |
646 | |
647 A terminal command string that requires parameters contains special | |
648 character sequences starting with @samp{%} to say how to encode the | |
649 parameters. These sequences control the actions of @code{tparam} and | |
650 @code{tgoto}. | |
651 | |
652 The parameters values passed to @code{tparam} or @code{tgoto} are | |
653 considered to form a vector. A pointer into this vector determines | |
654 the next parameter to be processed. Some of the @samp{%}-sequences | |
655 encode one parameter and advance the pointer to the next parameter. | |
656 Other @samp{%}-sequences alter the pointer or alter the parameter | |
657 values without generating output. | |
658 | |
659 For example, the @samp{cm} string for a standard ANSI terminal is written | |
660 as @samp{\E[%i%d;%dH}. (@samp{\E} stands for @key{ESC}.) @samp{cm} by | |
661 convention always requires two parameters, the vertical and horizontal goal | |
662 positions, so this string specifies the encoding of two parameters. Here | |
663 @samp{%i} increments the two values supplied, and each @samp{%d} encodes | |
664 one of the values in decimal. If the cursor position values 20,58 are | |
665 encoded with this string, the result is @samp{\E[21;59H}. | |
666 | |
667 First, here are the @samp{%}-sequences that generate output. Except for | |
668 @samp{%%}, each of them encodes one parameter and advances the pointer | |
669 to the following parameter. | |
670 | |
671 @table @samp | |
672 @item %% | |
673 Output a single @samp{%}. This is the only way to represent a literal | |
674 @samp{%} in a terminal command with parameters. @samp{%%} does not | |
675 use up a parameter. | |
676 | |
677 @item %d | |
678 As in @code{printf}, output the next parameter in decimal. | |
679 | |
680 @item %2 | |
681 Like @samp{%02d} in @code{printf}: output the next parameter in | |
682 decimal, and always use at least two digits. | |
683 | |
684 @item %3 | |
685 Like @samp{%03d} in @code{printf}: output the next parameter in | |
686 decimal, and always use at least three digits. Note that @samp{%4} | |
687 and so on are @emph{not} defined. | |
688 | |
689 @item %. | |
690 Output the next parameter as a single character whose ASCII code is | |
691 the parameter value. Like @samp{%c} in @code{printf}. | |
692 | |
693 @item %+@var{char} | |
694 Add the next parameter to the character @var{char}, and output the | |
695 resulting character. For example, @samp{%+ } represents 0 as a space, | |
696 1 as @samp{!}, etc. | |
697 @end table | |
698 | |
699 The following @samp{%}-sequences specify alteration of the parameters | |
700 (their values, or their order) rather than encoding a parameter for output. | |
701 They generate no output; they are used only for their side effects | |
702 on the parameters. Also, they do not advance the ``next parameter'' pointer | |
703 except as explicitly stated. Only @samp{%i}, @samp{%r} and @samp{%>} are | |
704 defined in standard Unix termcap. The others are GNU extensions.@refill | |
705 | |
706 @table @samp | |
707 @item %i | |
708 Increment the next two parameters. This is used for terminals that | |
709 expect cursor positions in origin 1. For example, @samp{%i%d,%d} would | |
710 output two parameters with @samp{1} for 0, @samp{2} for 1, etc. | |
711 | |
712 @item %r | |
713 Interchange the next two parameters. This is used for terminals whose | |
714 cursor positioning command expects the horizontal position first. | |
715 | |
716 @item %s | |
717 Skip the next parameter. Do not output anything. | |
718 | |
719 @item %b | |
720 Back up one parameter. The last parameter used will become once again | |
721 the next parameter to be output, and the next output command will use | |
722 it. Using @samp{%b} more than once, you can back up any number of | |
723 parameters, and you can refer to each parameter any number of times. | |
724 | |
725 @item %>@var{c1}@var{c2} | |
726 Conditionally increment the next parameter. Here @var{c1} and | |
727 @var{c2} are characters which stand for their ASCII codes as numbers. | |
728 If the next parameter is greater than the ASCII code of @var{c1}, the | |
729 ASCII code of @var{c2} is added to it.@refill | |
730 | |
731 @item %a @var{op} @var{type} @var{pos} | |
732 Perform arithmetic on the next parameter, do not use it up, and do not | |
733 output anything. Here @var{op} specifies the arithmetic operation, | |
734 while @var{type} and @var{pos} together specify the other operand. | |
735 | |
736 Spaces are used above to separate the operands for clarity; the spaces | |
737 don't appear in the data base, where this sequence is exactly five | |
738 characters long. | |
739 | |
740 The character @var{op} says what kind of arithmetic operation to | |
741 perform. It can be any of these characters: | |
742 | |
743 @table @samp | |
744 @item = | |
745 assign a value to the next parameter, ignoring its old value. | |
746 The new value comes from the other operand. | |
747 | |
748 @item + | |
749 add the other operand to the next parameter. | |
750 | |
751 @item - | |
752 subtract the other operand from the next parameter. | |
753 | |
754 @item * | |
755 multiply the next parameter by the other operand. | |
756 | |
757 @item / | |
758 divide the next parameter by the other operand. | |
759 @end table | |
760 | |
761 The ``other operand'' may be another parameter's value or a constant; | |
762 the character @var{type} says which. It can be: | |
763 | |
764 @table @samp | |
765 @item p | |
766 Use another parameter. The character @var{pos} says which | |
767 parameter to use. Subtract 64 from its ASCII code to get the | |
768 position of the desired parameter relative to this one. Thus, | |
769 the character @samp{A} as @var{pos} means the parameter after the | |
770 next one; the character @samp{?} means the parameter before the | |
771 next one. | |
772 | |
773 @item c | |
774 Use a constant value. The character @var{pos} specifies the | |
775 value of the constant. The 0200 bit is cleared out, so that 0200 | |
776 can be used to represent zero. | |
777 @end table | |
778 @end table | |
779 | |
780 The following @samp{%}-sequences are special purpose hacks to compensate | |
781 for the weird designs of obscure terminals. They modify the next parameter | |
782 or the next two parameters but do not generate output and do not use up any | |
783 parameters. @samp{%m} is a GNU extension; the others are defined in | |
784 standard Unix termcap. | |
785 | |
786 @table @samp | |
787 @item %n | |
788 Exclusive-or the next parameter with 0140, and likewise the parameter | |
789 after next. | |
790 | |
791 @item %m | |
792 Complement all the bits of the next parameter and the parameter after next. | |
793 | |
794 @item %B | |
795 Encode the next parameter in BCD. It alters the value of the | |
796 parameter by adding six times the quotient of the parameter by ten. | |
797 Here is a C statement that shows how the new value is computed: | |
798 | |
799 @example | |
800 @var{parm} = (@var{parm} / 10) * 16 + @var{parm} % 10; | |
801 @end example | |
802 | |
803 @item %D | |
804 Transform the next parameter as needed by Delta Data terminals. | |
805 This involves subtracting twice the remainder of the parameter by 16. | |
806 | |
807 @example | |
808 @var{parm} -= 2 * (@var{parm} % 16); | |
809 @end example | |
810 @end table | |
811 | |
812 @node Using Parameters,, Encode Parameters, Parameters | |
813 @subsection Sending Display Commands with Parameters | |
814 | |
815 The termcap library functions @code{tparam} and @code{tgoto} serve as the | |
816 analog of @code{printf} for terminal string parameters. The newer function | |
817 @code{tparam} is a GNU extension, more general but missing from Unix | |
818 termcap. The original parameter-encoding function is @code{tgoto}, which | |
819 is preferable for cursor motion. | |
820 | |
821 @menu | |
822 * tparam:: The general case, for GNU termcap only. | |
823 * tgoto:: The special case of cursor motion. | |
824 @end menu | |
825 | |
826 @node tparam, tgoto, Using Parameters, Using Parameters | |
827 @subsubsection @code{tparam} | |
828 | |
829 @findex tparam | |
830 The function @code{tparam} can encode display commands with any number of | |
831 parameters and allows you to specify the buffer space. It is the preferred | |
832 function for encoding parameters for all but the @samp{cm} capability. Its | |
833 ANSI C declaration is as follows: | |
834 | |
835 @example | |
836 char *tparam (char *@var{ctlstring}, char *@var{buffer}, int @var{size}, int @var{parm1},...) | |
837 @end example | |
838 | |
839 The arguments are a control string @var{ctlstring} (the value of a terminal | |
840 capability, presumably), an output buffer @var{buffer} and @var{size}, and | |
841 any number of integer parameters to be encoded. The effect of | |
842 @code{tparam} is to copy the control string into the buffer, encoding | |
843 parameters according to the @samp{%} sequences in the control string. | |
844 | |
845 You describe the output buffer by its address, @var{buffer}, and its size | |
846 in bytes, @var{size}. If the buffer is not big enough for the data to be | |
847 stored in it, @code{tparam} calls @code{malloc} to get a larger buffer. In | |
848 either case, @code{tparam} returns the address of the buffer it ultimately | |
849 uses. If the value equals @var{buffer}, your original buffer was used. | |
850 Otherwise, a new buffer was allocated, and you must free it after you are | |
851 done with printing the results. If you pass zero for @var{size} and | |
852 @var{buffer}, @code{tparam} always allocates the space with @code{malloc}. | |
853 | |
854 All capabilities that require parameters also have the ability to specify | |
855 padding, so you should use @code{tputs} to output the string produced by | |
856 @code{tparam}. @xref{Padding}. Here is an example. | |
857 | |
858 @example | |
859 @{ | |
860 char *buf; | |
861 char buffer[40]; | |
862 | |
863 buf = tparam (command, buffer, 40, parm); | |
864 tputs (buf, 1, fputchar); | |
865 if (buf != buffer) | |
866 free (buf); | |
867 @} | |
868 @end example | |
869 | |
870 If a parameter whose value is zero is encoded with @samp{%.}-style | |
871 encoding, the result is a null character, which will confuse @code{tputs}. | |
872 This would be a serious problem, but luckily @samp{%.} encoding is used | |
873 only by a few old models of terminal, and only for the @samp{cm} | |
874 capability. To solve the problem, use @code{tgoto} rather than | |
875 @code{tparam} to encode the @samp{cm} capability.@refill | |
876 | |
877 @node tgoto,, tparam, Using Parameters | |
878 @subsubsection @code{tgoto} | |
879 | |
880 @findex tgoto | |
881 The special case of cursor motion is handled by @code{tgoto}. There | |
882 are two reasons why you might choose to use @code{tgoto}: | |
883 | |
884 @itemize @bullet | |
885 @item | |
886 For Unix compatibility, because Unix termcap does not have @code{tparam}. | |
887 | |
888 @item | |
889 For the @samp{cm} capability, since @code{tgoto} has a special feature | |
890 to avoid problems with null characters, tabs and newlines on certain old | |
891 terminal types that use @samp{%.} encoding for that capability. | |
892 @end itemize | |
893 | |
894 Here is how @code{tgoto} might be declared in ANSI C: | |
895 | |
896 @example | |
897 char *tgoto (char *@var{cstring}, int @var{hpos}, int @var{vpos}) | |
898 @end example | |
899 | |
900 There are three arguments, the terminal description's @samp{cm} string and | |
901 the two cursor position numbers; @code{tgoto} computes the parametrized | |
902 string in an internal static buffer and returns the address of that buffer. | |
903 The next time you use @code{tgoto} the same buffer will be reused. | |
904 | |
905 @vindex UP | |
906 @vindex BC | |
907 Parameters encoded with @samp{%.} encoding can generate null characters, | |
908 tabs or newlines. These might cause trouble: the null character because | |
909 @code{tputs} would think that was the end of the string, the tab because | |
910 the kernel or other software might expand it into spaces, and the newline | |
911 becaue the kernel might add a carriage-return, or padding characters | |
912 normally used for a newline. To prevent such problems, @code{tgoto} is | |
913 careful to avoid these characters. Here is how this works: if the target | |
914 cursor position value is such as to cause a problem (that is to say, zero, | |
915 nine or ten), @code{tgoto} increments it by one, then compensates by | |
916 appending a string to move the cursor back or up one position. | |
917 | |
918 The compensation strings to use for moving back or up are found in global | |
919 variables named @code{BC} and @code{UP}. These are actual external C | |
920 variables with upper case names; they are declared @code{char *}. It is up | |
921 to you to store suitable values in them, normally obtained from the | |
922 @samp{le} and @samp{up} terminal capabilities in the terminal description | |
923 with @code{tgetstr}. Alternatively, if these two variables are both zero, | |
924 the feature of avoiding nulls, tabs and newlines is turned off. | |
925 | |
926 It is safe to use @code{tgoto} for commands other than @samp{cm} only if | |
927 you have stored zero in @code{BC} and @code{UP}. | |
928 | |
929 Note that @code{tgoto} reverses the order of its operands: the horizontal | |
930 position comes before the vertical position in the arguments to | |
931 @code{tgoto}, even though the vertical position comes before the horizontal | |
932 in the parameters of the @samp{cm} string. If you use @code{tgoto} with a | |
933 command such as @samp{AL} that takes one parameter, you must pass the | |
934 parameter to @code{tgoto} as the ``vertical position''.@refill | |
935 | |
936 @node Data Base, Capabilities, Library, Top | |
937 @chapter The Format of the Data Base | |
938 | |
939 The termcap data base of terminal descriptions is stored in the file | |
940 @file{/etc/termcap}. It contains terminal descriptions, blank lines, and | |
941 comments. | |
942 | |
943 A terminal description starts with one or more names for the terminal type. | |
944 The information in the description is a series of @dfn{capability names} | |
945 and values. The capability names have standard meanings | |
946 (@pxref{Capabilities}) and their values describe the terminal. | |
947 | |
948 @menu | |
949 * Format:: Overall format of a terminal description. | |
950 * Capability Format:: Format of capabilities within a description. | |
951 * Naming:: Naming conventions for terminal types. | |
952 * Inheriting:: Inheriting part of a description from | |
953 a related terminal type. | |
954 @end menu | |
955 | |
956 @node Format, Capability Format, Data Base, Data Base | |
957 @section Terminal Description Format | |
958 @cindex description format | |
959 | |
960 Aside from comments (lines starting with @samp{#}, which are ignored), each | |
961 nonblank line in the termcap data base is a terminal description. | |
962 A terminal description is nominally a single line, but it can be split | |
963 into multiple lines by inserting the two characters @samp{\ newline}. | |
964 This sequence is ignored wherever it appears in a description. | |
965 | |
966 The preferred way to split the description is between capabilities: insert | |
967 the four characters @samp{: \ newline tab} immediately before any colon. | |
968 This allows each sub-line to start with some indentation. This works | |
969 because, after the @samp{\ newline} are ignored, the result is @samp{: tab | |
970 :}; the first colon ends the preceding capability and the second colon | |
971 starts the next capability. If you split with @samp{\ newline} alone, you | |
972 may not add any indentation after them. | |
973 | |
974 Here is a real example of a terminal description: | |
975 | |
976 @example | |
977 dw|vt52|DEC vt52:\ | |
978 :cr=^M:do=^J:nl=^J:bl=^G:\ | |
979 :le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#80:li#24:\ | |
980 :nd=\EC:ta=^I:pt:sr=\EI:up=\EA:\ | |
981 :ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H: | |
982 @end example | |
983 | |
984 Each terminal description begins with several names for the terminal type. | |
985 The names are separated by @samp{|} characters, and a colon ends the last | |
986 name. The first name should be two characters long; it exists only for the | |
987 sake of very old Unix systems and is never used in modern systems. The | |
988 last name should be a fully verbose name such as ``DEC vt52'' or ``Ann | |
989 Arbor Ambassador with 48 lines''. The other names should include whatever | |
990 the user ought to be able to specify to get this terminal type, such as | |
991 @samp{vt52} or @samp{aaa-48}. @xref{Naming}, for information on how to | |
992 choose terminal type names. | |
993 | |
994 After the terminal type names come the terminal capabilities, separated by | |
995 colons and with a colon after the last one. Each capability has a | |
996 two-letter name, such as @samp{cm} for ``cursor motion string'' or @samp{li} | |
997 for ``number of display lines''. | |
998 | |
999 @node Capability Format, Naming, Format, Data Base | |
1000 @section Writing the Capabilities | |
1001 | |
1002 There are three kinds of capabilities: flags, numbers, and strings. Each | |
1003 kind has its own way of being written in the description. Each defined | |
1004 capability has by convention a particular kind of value; for example, | |
1005 @samp{li} always has a numeric value and @samp{cm} always a string value. | |
1006 | |
1007 A flag capability is thought of as having a boolean value: the value is | |
1008 true if the capability is present, false if not. When the capability is | |
1009 present, just write its name between two colons. | |
1010 | |
1011 A numeric capability has a value which is a nonnegative number. Write the | |
1012 capability name, a @samp{#}, and the number, between two colons. For | |
1013 example, @samp{@dots{}:li#48:@dots{}} is how you specify the @samp{li} | |
1014 capability for 48 lines.@refill | |
1015 | |
1016 A string-valued capability has a value which is a sequence of characters. | |
1017 Usually these are the characters used to perform some display operation. | |
1018 Write the capability name, a @samp{=}, and the characters of the value, | |
1019 between two colons. For example, @samp{@dots{}:cm=\E[%i%d;%dH:@dots{}} is | |
1020 how the cursor motion command for a standard ANSI terminal would be | |
1021 specified.@refill | |
1022 | |
1023 Special characters in the string value can be expressed using | |
1024 @samp{\}-escape sequences as in C; in addition, @samp{\E} stands for | |
1025 @key{ESC}. @samp{^} is also a kind of escape character; @samp{^} followed | |
1026 by @var{char} stands for the control-equivalent of @var{char}. Thus, | |
1027 @samp{^a} stands for the character control-a, just like @samp{\001}. | |
1028 @samp{\} and @samp{^} themselves can be represented as @samp{\\} and | |
1029 @samp{\^}.@refill | |
1030 | |
1031 To include a colon in the string, you must write @samp{\072}. You might | |
1032 ask, ``Why can't @samp{\:} be used to represent a colon?'' The reason is | |
1033 that the interrogation functions do not count slashes while looking for a | |
1034 capability. Even if @samp{:ce=ab\:cd:} were interpreted as giving the | |
1035 @samp{ce} capability the value @samp{ab:cd}, it would also appear to define | |
1036 @samp{cd} as a flag. | |
1037 | |
1038 The string value will often contain digits at the front to specify padding | |
1039 (@pxref{Padding}) and/or @samp{%}-sequences within to specify how to encode | |
1040 parameters (@pxref{Parameters}). Although these things are not to be | |
1041 output literally to the terminal, they are considered part of the value of | |
1042 the capability. They are special only when the string value is processed | |
1043 by @code{tputs}, @code{tparam} or @code{tgoto}. By contrast, @samp{\} and | |
1044 @samp{^} are considered part of the syntax for specifying the characters | |
1045 in the string. | |
1046 | |
1047 Let's look at the VT52 example again: | |
1048 | |
1049 @example | |
1050 dw|vt52|DEC vt52:\ | |
1051 :cr=^M:do=^J:nl=^J:bl=^G:\ | |
1052 :le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#80:li#24:\ | |
1053 :nd=\EC:ta=^I:pt:sr=\EI:up=\EA:\ | |
1054 :ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H: | |
1055 @end example | |
1056 | |
1057 Here we see the numeric-valued capabilities @samp{co} and @samp{li}, the | |
1058 flags @samp{bs} and @samp{pt}, and many string-valued capabilities. Most | |
1059 of the strings start with @key{ESC} represented as @samp{\E}. The rest | |
1060 contain control characters represented using @samp{^}. The meanings of the | |
1061 individual capabilities are defined elsewhere (@pxref{Capabilities}). | |
1062 | |
1063 @node Naming, Inheriting, Capability Format, Data Base | |
1064 @section Terminal Type Name Conventions | |
1065 @cindex names of terminal types | |
1066 | |
1067 There are conventions for choosing names of terminal types. For one thing, | |
1068 all letters should be in lower case. The terminal type for a terminal in | |
1069 its most usual or most fundamental mode of operation should not have a | |
1070 hyphen in it. | |
1071 | |
1072 If the same terminal has other modes of operation which require | |
1073 different terminal descriptions, these variant descriptions are given | |
1074 names made by adding suffixes with hyphens. Such alternate descriptions | |
1075 are used for two reasons: | |
1076 | |
1077 @itemize @bullet | |
1078 @item | |
1079 When the terminal has a switch that changes its behavior. Since the | |
1080 computer cannot tell how the switch is set, the user must tell the | |
1081 computer by choosing the appropriate terminal type name. | |
1082 | |
1083 @cindex wrapping | |
1084 For example, the VT-100 has a setup flag that controls whether the | |
1085 cursor wraps at the right margin. If this flag is set to ``wrap'', | |
1086 you must use the terminal type @samp{vt100-am}. Otherwise you must | |
1087 use @samp{vt100-nam}. Plain @samp{vt100} is defined as a synonym for | |
1088 either @samp{vt100-am} or @samp{vt100-nam} depending on the | |
1089 preferences of the local site.@refill | |
1090 | |
1091 The standard suffix @samp{-am} stands for ``automatic margins''. | |
1092 | |
1093 @item | |
1094 To give the user a choice in how to use the terminal. This is done | |
1095 when the terminal has a switch that the computer normally controls. | |
1096 | |
1097 @cindex screen size | |
1098 For example, the Ann Arbor Ambassador can be configured with many | |
1099 screen sizes ranging from 20 to 60 lines. Fewer lines make bigger | |
1100 characters but more lines let you see more of what you are editing. | |
1101 As a result, users have different preferences. Therefore, termcap | |
1102 provides terminal types for many screen sizes. If you choose type | |
1103 @samp{aaa-30}, the terminal will be configured to use 30 lines; if you | |
1104 choose @samp{aaa-48}, 48 lines will be used, and so on. | |
1105 @end itemize | |
1106 | |
1107 Here is a list of standard suffixes and their conventional meanings: | |
1108 | |
1109 @table @samp | |
1110 @item -w | |
1111 Short for ``wide''. This is a mode that gives the terminal more | |
1112 columns than usual. This is normally a user option. | |
1113 | |
1114 @item -am | |
1115 ``Automatic margins''. This is an alternate description for use when | |
1116 the terminal's margin-wrap switch is on; it contains the @samp{am} | |
1117 flag. The implication is that normally the switch is off and the | |
1118 usual description for the terminal says that the switch is off. | |
1119 | |
1120 @item -nam | |
1121 ``No automatic margins''. The opposite of @samp{-am}, this names an | |
1122 alternative description which lacks the @samp{am} flag. This implies | |
1123 that the terminal is normally operated with the margin-wrap switch | |
1124 turned on, and the normal description of the terminal says so. | |
1125 | |
1126 @item -na | |
1127 ``No arrows''. This terminal description initializes the terminal to | |
1128 keep its arrow keys in local mode. This is a user option. | |
1129 | |
1130 @item -rv | |
1131 ``Reverse video''. This terminal description causes text output for | |
1132 normal video to appear as reverse, and text output for reverse video | |
1133 to come out as normal. Often this description differs from the usual | |
1134 one by interchanging the two strings which turn reverse video on and | |
1135 off.@refill | |
1136 | |
1137 This is a user option; you can choose either the ``reverse video'' | |
1138 variant terminal type or the normal terminal type, and termcap will | |
1139 obey. | |
1140 | |
1141 @item -s | |
1142 ``Status''. Says to enable use of a status line which ordinary output | |
1143 does not touch (@pxref{Status Line}). | |
1144 | |
1145 Some terminals have a special line that is used only as a status line. | |
1146 For these terminals, there is no need for an @samp{-s} variant; the | |
1147 status line commands should be defined by default. On other | |
1148 terminals, enabling a status line means removing one screen line from | |
1149 ordinary use and reducing the effective screen height. For these | |
1150 terminals, the user can choose the @samp{-s} variant type to request | |
1151 use of a status line. | |
1152 | |
1153 @item -@var{nlines} | |
1154 Says to operate with @var{nlines} lines on the screen, for terminals | |
1155 such as the Ambassador which provide this as an option. Normally this | |
1156 is a user option; by choosing the terminal type, you control how many | |
1157 lines termcap will use. | |
1158 | |
1159 @item -@var{npages}p | |
1160 Says that the terminal has @var{npages} pages worth of screen memory, | |
1161 for terminals where this is a hardware option. | |
1162 | |
1163 @item -unk | |
1164 Says that description is not for direct use, but only for reference in | |
1165 @samp{tc} capabilities. Such a description is a kind of subroutine, | |
1166 because it describes the common characteristics of several variant | |
1167 descriptions that would use other suffixes in place of @samp{-unk}. | |
1168 @end table | |
1169 | |
1170 @node Inheriting,, Naming, Data Base | |
1171 @section Inheriting from Related Descriptions | |
1172 | |
1173 @cindex inheritance | |
1174 When two terminal descriptions are similar, their identical parts do not | |
1175 need to be given twice. Instead, one of the two can be defined in terms of | |
1176 the other, using the @samp{tc} capability. We say that one description | |
1177 @dfn{refers to} the other, or @dfn{inherits from} the other. | |
1178 | |
1179 The @samp{tc} capability must be the last one in the terminal description, | |
1180 and its value is a string which is the name of another terminal type which | |
1181 is referred to. For example, | |
1182 | |
1183 @example | |
1184 N9|aaa|ambassador|aaa-30|ann arbor ambassador/30 lines:\ | |
1185 :ti=\E[2J\E[30;0;0;30p:\ | |
1186 :te=\E[60;0;0;30p\E[30;1H\E[J:\ | |
1187 :li#30:tc=aaa-unk: | |
1188 @end example | |
1189 | |
1190 @noindent | |
1191 defines the terminal type @samp{aaa-30} (also known as plain @samp{aaa}) in | |
1192 terms of @samp{aaa-unk}, which defines everything about the Ambassador that | |
1193 is independent of screen height. The types @samp{aaa-36}, @samp{aaa-48} | |
1194 and so on for other screen heights are likewise defined to inherit from | |
1195 @samp{aaa-unk}. | |
1196 | |
1197 The capabilities overridden by @samp{aaa-30} include @samp{li}, which says | |
1198 how many lines there are, and @samp{ti} and @samp{te}, which configure the | |
1199 terminal to use that many lines. | |
1200 | |
1201 The effective terminal description for type @samp{aaa} consists of the text | |
1202 shown above followed by the text of the description of @samp{aaa-unk}. The | |
1203 @samp{tc} capability is handled automatically by @code{tgetent}, which | |
1204 finds the description thus referenced and combines the two descriptions | |
1205 (@pxref{Find}). Therefore, only the implementor of the terminal | |
1206 descriptions needs to think about using @samp{tc}. Users and application | |
1207 programmers do not need to be concerned with it. | |
1208 | |
1209 Since the reference terminal description is used last, capabilities | |
1210 specified in the referring description override any specifications of the | |
1211 same capabilities in the reference description. | |
1212 | |
1213 The referring description can cancel out a capability without specifying | |
1214 any new value for it by means of a special trick. Write the capability in | |
1215 the referring description, with the character @samp{@@} after the capability | |
1216 name, as follows: | |
1217 | |
1218 @example | |
1219 NZ|aaa-30-nam|ann arbor ambassador/30 lines/no automatic-margins:\ | |
1220 :am@@:tc=aaa-30: | |
1221 @end example | |
1222 | |
1223 @node Capabilities, Summary, Data Base, Top | |
1224 @chapter Definitions of the Terminal Capabilities | |
1225 | |
1226 This section is divided into many subsections, each for one aspect of | |
1227 use of display terminals. For writing a display program, you usually need | |
1228 only check the subsections for the operations you want to use. For writing | |
1229 a terminal description, you must read each subsection and fill in the | |
1230 capabilities described there. | |
1231 | |
1232 String capabilities that are display commands may require numeric | |
1233 parameters (@pxref{Parameters}). Most such capabilities do not use | |
1234 parameters. When a capability requires parameters, this is explicitly | |
1235 stated at the beginning of its definition. In simple cases, the first or | |
1236 second sentence of the definition mentions all the parameters, in the order | |
1237 they should be given, using a name | |
1238 @iftex | |
1239 in italics | |
1240 @end iftex | |
1241 @ifinfo | |
1242 in upper case | |
1243 @end ifinfo | |
1244 for each one. For example, the @samp{rp} capability is a command that | |
1245 requires two parameters; its definition begins as follows: | |
1246 | |
1247 @quotation | |
1248 String of commands to output a graphic character @var{c}, repeated @var{n} | |
1249 times. | |
1250 @end quotation | |
1251 | |
1252 In complex cases or when there are many parameters, they are described | |
1253 explicitly. | |
1254 | |
1255 When a capability is described as obsolete, this means that programs should | |
1256 not be written to look for it, but terminal descriptions should still be | |
1257 written to provide it. | |
1258 | |
1259 When a capability is described as very obsolete, this means that it should | |
1260 be omitted from terminal descriptions as well. | |
1261 | |
1262 @menu | |
1263 * Basic:: Basic characteristics. | |
1264 * Screen Size:: Screen size, and what happens when it changes. | |
1265 * Cursor Motion:: Various ways to move the cursor. | |
1266 * Scrolling:: Pushing text up and down on the screen. | |
1267 * Wrapping:: What happens if you write a character in the last column. | |
1268 * Windows:: Limiting the part of the window that output affects. | |
1269 * Clearing:: Erasing one or many lines. | |
1270 * Insdel Line:: Making new blank lines in mid-screen; deleting lines. | |
1271 * Insdel Char:: Inserting and deleting characters within a line. | |
1272 * Standout:: Highlighting some of the text. | |
1273 * Underlining:: Underlining some of the text. | |
1274 * Cursor Visibility:: Making the cursor more or less easy to spot. | |
1275 * Bell:: Attracts user's attention; not localized on the screen. | |
1276 * Keypad:: Recognizing when function keys or arrows are typed. | |
1277 * Meta Key:: @key{META} acts like an extra shift key. | |
1278 * Initialization:: Commands used to initialize or reset the terminal. | |
1279 * Pad Specs:: Info for the kernel on how much padding is needed. | |
1280 * Status Line:: A status line displays ``background'' information. | |
1281 * Half-Line:: Moving by half-lines, for superscripts and subscripts. | |
1282 * Printer:: Controlling auxiliary printers of display terminals. | |
1283 @end menu | |
1284 | |
1285 @node Basic, Screen Size, Capabilities, Capabilities | |
1286 @section Basic Characteristics | |
1287 | |
1288 This section documents the capabilities that describe the basic and | |
1289 nature of the terminal, and also those that are relevant to the output | |
1290 of graphic characters. | |
1291 | |
1292 @table @samp | |
1293 @item os | |
1294 @kindex os | |
1295 @cindex overstrike | |
1296 Flag whose presence means that the terminal can overstrike. This | |
1297 means that outputting a graphic character does not erase whatever was | |
1298 present in the same character position before. The terminals that can | |
1299 overstrike include printing terminals, storage tubes (all obsolete | |
1300 nowadays), and many bit-map displays. | |
1301 | |
1302 @item eo | |
1303 @kindex eo | |
1304 Flag whose presence means that outputting a space can erase an | |
1305 overstrike. If this is not present and overstriking is supported, | |
1306 output of a space has no effect except to move the cursor. | |
1307 | |
1308 @item gn | |
1309 @kindex gn | |
1310 @cindex generic terminal type | |
1311 Flag whose presence means that this terminal type is a generic type | |
1312 which does not really describe any particular terminal. Generic types | |
1313 are intended for use as the default type assigned when the user | |
1314 connects to the system, with the intention that the user should | |
1315 specify what type he really has. One example of a generic type | |
1316 is the type @samp{network}. | |
1317 | |
1318 Since the generic type cannot say how to do anything interesting with | |
1319 the terminal, termcap-using programs will always find that the | |
1320 terminal is too weak to be supported if the user has failed to specify | |
1321 a real terminal type in place of the generic one. The @samp{gn} flag | |
1322 directs these programs to use a different error message: ``You have | |
1323 not specified your real terminal type'', rather than ``Your terminal | |
1324 is not powerful enough to be used''. | |
1325 | |
1326 @item hc | |
1327 @kindex hc | |
1328 Flag whose presence means this is a hardcopy terminal. | |
1329 | |
1330 @item rp | |
1331 @kindex rp | |
1332 @cindex repeat output | |
1333 String of commands to output a graphic character @var{c}, repeated @var{n} | |
1334 times. The first parameter value is the ASCII code for the desired | |
1335 character, and the second parameter is the number of times to repeat the | |
1336 character. Often this command requires padding proportional to the | |
1337 number of times the character is repeated. This effect can be had by | |
1338 using parameter arithmetic with @samp{%}-sequences to compute the | |
1339 amount of padding, then generating the result as a number at the front | |
1340 of the string so that @code{tputs} will treat it as padding. | |
1341 | |
1342 @item hz | |
1343 @kindex hz | |
1344 Flag whose presence means that the ASCII character @samp{~} cannot be | |
1345 output on this terminal because it is used for display commands. | |
1346 | |
1347 Programs handle this flag by checking all text to be output and | |
1348 replacing each @samp{~} with some other character(s). If this is not | |
1349 done, the screen will be thoroughly garbled. | |
1350 | |
1351 The old Hazeltine terminals that required such treatment are probably | |
1352 very rare today, so you might as well not bother to support this flag. | |
1353 | |
1354 @item CC | |
1355 @kindex CC | |
1356 @cindex command character | |
1357 String whose presence means the terminal has a settable command | |
1358 character. The value of the string is the default command character | |
1359 (which is usually @key{ESC}). | |
1360 | |
1361 All the strings of commands in the terminal description should be | |
1362 written to use the default command character. If you are writing an | |
1363 application program that changes the command character, use the | |
1364 @samp{CC} capability to figure out how to translate all the display | |
1365 commands to work with the new command character. | |
1366 | |
1367 Most programs have no reason to look at the @samp{CC} capability. | |
1368 | |
1369 @item xb | |
1370 @kindex xb | |
1371 @cindex Superbee | |
1372 Flag whose presence identifies Superbee terminals which are unable to | |
1373 transmit the characters @key{ESC} and @kbd{Control-C}. Programs which | |
1374 support this flag are supposed to check the input for the code sequences | |
1375 sent by the @key{F1} and @key{F2} keys, and pretend that @key{ESC} | |
1376 or @kbd{Control-C} (respectively) had been read. But this flag is | |
1377 obsolete, and not worth supporting. | |
1378 @end table | |
1379 | |
1380 @node Screen Size, Cursor Motion, Basic, Capabilities | |
1381 @section Screen Size | |
1382 @cindex screen size | |
1383 | |
1384 A terminal description has two capabilities, @samp{co} and @samp{li}, | |
1385 that describe the screen size in columns and lines. But there is more | |
1386 to the question of screen size than this. | |
1387 | |
1388 On some operating systems the ``screen'' is really a window and the | |
1389 effective width can vary. On some of these systems, @code{tgetnum} | |
1390 uses the actual width of the window to decide what value to return for | |
1391 the @samp{co} capability, overriding what is actually written in the | |
1392 terminal description. On other systems, it is up to the application | |
1393 program to check the actual window width using a system call. For | |
1394 example, on BSD 4.3 systems, the system call @code{ioctl} with code | |
1395 @code{TIOCGWINSZ} will tell you the current screen size. | |
1396 | |
1397 On all window systems, termcap is powerless to advise the application | |
1398 program if the user resizes the window. Application programs must | |
1399 deal with this possibility in a system-dependent fashion. On some | |
1400 systems the C shell handles part of the problem by detecting changes | |
1401 in window size and setting the @code{TERMCAP} environment variable | |
1402 appropriately. This takes care of application programs that are | |
1403 started subsequently. It does not help application programs already | |
1404 running. | |
1405 | |
1406 On some systems, including BSD 4.3, all programs using a terminal get | |
1407 a signal named @code{SIGWINCH} whenever the screen size changes. | |
1408 Programs that use termcap should handle this signal by using | |
1409 @code{ioctl TIOCGWINSZ} to learn the new screen size. | |
1410 | |
1411 @table @samp | |
1412 @item co | |
1413 @kindex co | |
1414 @cindex screen size | |
1415 Numeric value, the width of the screen in character positions. Even | |
1416 hardcopy terminals normally have a @samp{co} capability. | |
1417 | |
1418 @item li | |
1419 @kindex li | |
1420 Numeric value, the height of the screen in lines. | |
1421 @end table | |
1422 | |
1423 @node Cursor Motion, Wrapping, Screen Size, Capabilities | |
1424 @section Cursor Motion | |
1425 @cindex cursor motion | |
1426 | |
1427 Termcap assumes that the terminal has a @dfn{cursor}, a spot on the screen | |
1428 where a visible mark is displayed, and that most display commands take | |
1429 effect at the position of the cursor. It follows that moving the cursor | |
1430 to a specified location is very important. | |
1431 | |
1432 There are many terminal capabilities for different cursor motion | |
1433 operations. A terminal description should define as many as possible, but | |
1434 most programs do not need to use most of them. One capability, @samp{cm}, | |
1435 moves the cursor to an arbitrary place on the screen; this by itself is | |
1436 sufficient for any application as long as there is no need to support | |
1437 hardcopy terminals or certain old, weak displays that have only relative | |
1438 motion commands. Use of other cursor motion capabilities is an | |
1439 optimization, enabling the program to output fewer characters in some | |
1440 common cases. | |
1441 | |
1442 If you plan to use the relative cursor motion commands in an application | |
1443 program, you must know what the starting cursor position is. To do this, | |
1444 you must keep track of the cursor position and update the records each | |
1445 time anything is output to the terminal, including graphic characters. | |
1446 In addition, it is necessary to know whether the terminal wraps after | |
1447 writing in the rightmost column. @xref{Wrapping}. | |
1448 | |
1449 One other motion capability needs special mention: @samp{nw} moves the | |
1450 cursor to the beginning of the following line, perhaps clearing all the | |
1451 starting line after the cursor, or perhaps not clearing at all. This | |
1452 capability is a least common denominator that is probably supported even by | |
1453 terminals that cannot do most other things such as @samp{cm} or @samp{do}. | |
1454 Even hardcopy terminals can support @samp{nw}. | |
1455 | |
1456 @table @asis | |
1457 @item @samp{cm} | |
1458 @kindex cm | |
1459 String of commands to position the cursor at line @var{l}, column @var{c}. | |
1460 Both parameters are origin-zero, and are defined relative to the | |
1461 screen, not relative to display memory. | |
1462 | |
1463 All display terminals except a few very obsolete ones support @samp{cm}, | |
1464 so it is acceptable for an application program to refuse to operate on | |
1465 terminals lacking @samp{cm}. | |
1466 | |
1467 @item @samp{ho} | |
1468 @kindex ho | |
1469 @cindex home position | |
1470 String of commands to move the cursor to the upper left corner of the | |
1471 screen (this position is called the @dfn{home position}). In | |
1472 terminals where the upper left corner of the screen is not the same as | |
1473 the beginning of display memory, this command must go to the upper | |
1474 left corner of the screen, not the beginning of display memory. | |
1475 | |
1476 Every display terminal supports this capability, and many application | |
1477 programs refuse to operate if the @samp{ho} capability is missing. | |
1478 | |
1479 @item @samp{ll} | |
1480 @kindex ll | |
1481 String of commands to move the cursor to the lower left corner of the | |
1482 screen. On some terminals, moving up from home position does this, | |
1483 but programs should never assume that will work. Just output the | |
1484 @samp{ll} string (if it is provided); if moving to home position and | |
1485 then moving up is the best way to get there, the @samp{ll} command | |
1486 will do that. | |
1487 | |
1488 @item @samp{cr} | |
1489 @kindex cr | |
1490 String of commands to move the cursor to the beginning of the line it | |
1491 is on. If this capability is not specified, many programs assume | |
1492 they can use the ASCII carriage return character for this. | |
1493 | |
1494 @item @samp{le} | |
1495 @kindex le | |
1496 String of commands to move the cursor left one column. Unless the | |
1497 @samp{bw} flag capability is specified, the effect is undefined if the | |
1498 cursor is at the left margin; do not use this command there. If | |
1499 @samp{bw} is present, this command may be used at the left margin, and | |
1500 it wraps the cursor to the last column of the preceding line. | |
1501 | |
1502 @item @samp{nd} | |
1503 @kindex nd | |
1504 String of commands to move the cursor right one column. The effect is | |
1505 undefined if the cursor is at the right margin; do not use this | |
1506 command there, not even if @samp{am} is present. | |
1507 | |
1508 @item @samp{up} | |
1509 @kindex up | |
1510 String of commands to move the cursor vertically up one line. The | |
1511 effect of sending this string when on the top line is undefined; | |
1512 programs should never use it that way. | |
1513 | |
1514 @item @samp{do} | |
1515 @kindex do | |
1516 String of commands to move the cursor vertically down one line. The | |
1517 effect of sending this string when on the bottom line is undefined; | |
1518 programs should never use it that way. | |
1519 | |
1520 The original idea was that this string would not contain a newline | |
1521 character and therefore could be used without disabling the kernel's usual | |
1522 habit of converting of newline into a carriage-return newline sequence. | |
1523 But many terminal descriptions do use newline in the @samp{do} string, so | |
1524 this is not possible; a program which sends the @samp{do} string must | |
1525 disable output conversion in the kernel (@pxref{Initialize}). | |
1526 | |
1527 @item @samp{bw} | |
1528 @kindex bw | |
1529 Flag whose presence says that @samp{le} may be used in column zero | |
1530 to move to the last column of the preceding line. If this flag | |
1531 is not present, @samp{le} should not be used in column zero. | |
1532 | |
1533 @item @samp{nw} | |
1534 @kindex nw | |
1535 String of commands to move the cursor to start of next line, possibly | |
1536 clearing rest of line (following the cursor) before moving. | |
1537 | |
1538 @item @samp{DO}, @samp{UP}, @samp{LE}, @samp{RI} | |
1539 @kindex DO | |
1540 @kindex LE | |
1541 @kindex RI | |
1542 @kindex UP | |
1543 Strings of commands to move the cursor @var{n} lines down vertically, | |
1544 up vertically, or @var{n} columns left or right. Do not attempt to | |
1545 move past any edge of the screen with these commands; the effect of | |
1546 trying that is undefined. Only a few terminal descriptions provide | |
1547 these commands, and most programs do not use them. | |
1548 | |
1549 @item @samp{CM} | |
1550 @kindex CM | |
1551 String of commands to position the cursor at line @var{l}, column | |
1552 @var{c}, relative to display memory. Both parameters are origin-zero. | |
1553 This capability is present only in terminals where there is a | |
1554 difference between screen-relative and memory-relative addressing, and | |
1555 not even in all such terminals. | |
1556 | |
1557 @item @samp{ch} | |
1558 @kindex ch | |
1559 String of commands to position the cursor at column @var{c} in the | |
1560 same line it is on. This is a special case of @samp{cm} in which the | |
1561 vertical position is not changed. The @samp{ch} capability is | |
1562 provided only when it is faster to output than @samp{cm} would be in | |
1563 this special case. Programs should not assume most display terminals | |
1564 have @samp{ch}. | |
1565 | |
1566 @item @samp{cv} | |
1567 @kindex cv | |
1568 String of commands to position the cursor at line @var{l} in the same | |
1569 column. This is a special case of @samp{cm} in which the horizontal | |
1570 position is not changed. The @samp{cv} capability is provided only | |
1571 when it is faster to output than @samp{cm} would be in this special | |
1572 case. Programs should not assume most display terminals have | |
1573 @samp{cv}. | |
1574 | |
1575 @item @samp{sc} | |
1576 @kindex sc | |
1577 String of commands to make the terminal save the current cursor | |
1578 position. Only the last saved position can be used. If this | |
1579 capability is present, @samp{rc} should be provided also. Most | |
1580 terminals have neither. | |
1581 | |
1582 @item @samp{rc} | |
1583 @kindex rc | |
1584 String of commands to make the terminal restore the last saved cursor | |
1585 position. If this capability is present, @samp{sc} should be provided | |
1586 also. Most terminals have neither. | |
1587 | |
1588 @item @samp{ff} | |
1589 @kindex ff | |
1590 String of commands to advance to the next page, for a hardcopy | |
1591 terminal. | |
1592 | |
1593 @item @samp{ta} | |
1594 @kindex ta | |
1595 String of commands to move the cursor right to the next hardware tab | |
1596 stop column. Missing if the terminal does not have any kind of | |
1597 hardware tabs. Do not send this command if the kernel's terminal | |
1598 modes say that the kernel is expanding tabs into spaces. | |
1599 | |
1600 @item @samp{bt} | |
1601 @kindex bt | |
1602 String of commands to move the cursor left to the previous hardware | |
1603 tab stop column. Missing if the terminal has no such ability; many | |
1604 terminals do not. Do not send this command if the kernel's terminal | |
1605 modes say that the kernel is expanding tabs into spaces. | |
1606 @end table | |
1607 | |
1608 The following obsolete capabilities should be included in terminal | |
1609 descriptions when appropriate, but should not be looked at by new programs. | |
1610 | |
1611 @table @samp | |
1612 @item nc | |
1613 @kindex nc | |
1614 Flag whose presence means the terminal does not support the ASCII | |
1615 carriage return character as @samp{cr}. This flag is needed because | |
1616 old programs assume, when the @samp{cr} capability is missing, that | |
1617 ASCII carriage return can be used for the purpose. We use @samp{nc} | |
1618 to tell the old programs that carriage return may not be used. | |
1619 | |
1620 New programs should not assume any default for @samp{cr}, so they need | |
1621 not look at @samp{nc}. However, descriptions should contain @samp{nc} | |
1622 whenever they do not contain @samp{cr}. | |
1623 | |
1624 @item xt | |
1625 @kindex xt | |
1626 Flag whose presence means that the ASCII tab character may not be used | |
1627 for cursor motion. This flag exists because old programs assume, when | |
1628 the @samp{ta} capability is missing, that ASCII tab can be used for | |
1629 the purpose. We use @samp{xt} to tell the old programs not to use tab. | |
1630 | |
1631 New programs should not assume any default for @samp{ta}, so they need | |
1632 not look at @samp{xt} in connection with cursor motion. Note that | |
1633 @samp{xt} also has implications for standout mode (@pxref{Standout}). | |
1634 It is obsolete in regard to cursor motion but not in regard to | |
1635 standout. | |
1636 | |
1637 In fact, @samp{xt} means that the terminal is a Teleray 1061. | |
1638 | |
1639 @item bc | |
1640 @kindex bc | |
1641 Very obsolete alternative name for the @samp{le} capability. | |
1642 | |
1643 @item bs | |
1644 @kindex bs | |
1645 Flag whose presence means that the ASCII character backspace may be | |
1646 used to move the cursor left. Obsolete; look at @samp{le} instead. | |
1647 | |
1648 @item nl | |
1649 @kindex nl | |
1650 Obsolete capability which is a string that can either be used to move | |
1651 the cursor down or to scroll. The same string must scroll when used | |
1652 on the bottom line and move the cursor when used on any other line. | |
1653 New programs should use @samp{do} or @samp{sf}, and ignore @samp{nl}. | |
1654 | |
1655 If there is no @samp{nl} capability, some old programs assume they can | |
1656 use the newline character for this purpose. These programs follow a | |
1657 bad practice, but because they exist, it is still desirable to define | |
1658 the @samp{nl} capability in a terminal description if the best way to | |
1659 move down is @emph{not} a newline. | |
1660 @end table | |
1661 | |
1662 @node Wrapping, Scrolling, Cursor Motion, Capabilities | |
1663 @section Wrapping | |
1664 @cindex wrapping | |
1665 | |
1666 @dfn{Wrapping} means moving the cursor from the right margin to the left | |
1667 margin of the following line. Some terminals wrap automatically when a | |
1668 graphic character is output in the last column, while others do not. Most | |
1669 application programs that use termcap need to know whether the terminal | |
1670 wraps. There are two special flag capabilities to describe what the | |
1671 terminal does when a graphic character is output in the last column. | |
1672 | |
1673 @table @samp | |
1674 @item am | |
1675 @kindex am | |
1676 Flag whose presence means that writing a character in the last column | |
1677 causes the cursor to wrap to the beginning of the next line. | |
1678 | |
1679 If @samp{am} is not present, writing in the last column leaves the | |
1680 cursor at the place where the character was written. | |
1681 | |
1682 Writing in the last column of the last line should be avoided on | |
1683 terminals with @samp{am}, as it may or may not cause scrolling to | |
1684 occur (@pxref{Scrolling}). Scrolling is surely not what you would | |
1685 intend. | |
1686 | |
1687 If your program needs to check the @samp{am} flag, then it also needs | |
1688 to check the @samp{xn} flag which indicates that wrapping happens in a | |
1689 strange way. Many common terminals have the @samp{xn} flag. | |
1690 | |
1691 @item xn | |
1692 @kindex xn | |
1693 Flag whose presence means that the cursor wraps in a strange way. At | |
1694 least two distinct kinds of strange behavior are known; the termcap | |
1695 data base does not contain anything to distinguish the two. | |
1696 | |
1697 On Concept-100 terminals, output in the last column wraps the cursor | |
1698 almost like an ordinary @samp{am} terminal. But if the next thing | |
1699 output is a newline, it is ignored. | |
1700 | |
1701 DEC VT-100 terminals (when the wrap switch is on) do a different | |
1702 strange thing: the cursor wraps only if the next thing output is | |
1703 another graphic character. In fact, the wrap occurs when the | |
1704 following graphic character is received by the terminal, before the | |
1705 character is placed on the screen. | |
1706 | |
1707 On both of these terminals, after writing in the last column a | |
1708 following graphic character will be displayed in the first column of | |
1709 the following line. But the effect of relative cursor motion | |
1710 characters such as newline or backspace at such a time depends on the | |
1711 terminal. The effect of erase or scrolling commands also depends on | |
1712 the terminal. You can't assume anything about what they will do on a | |
1713 terminal that has @samp{xn}. So, to be safe, you should never do | |
1714 these things at such a time on such a terminal. | |
1715 | |
1716 To be sure of reliable results on a terminal which has the @samp{xn} | |
1717 flag, output a @samp{cm} absolute positioning command after writing in | |
1718 the last column. Another safe thing to do is to output carriage-return | |
1719 newline, which will leave the cursor at the beginning of the following | |
1720 line. | |
1721 @end table | |
1722 | |
1723 @node Scrolling, Windows, Wrapping, Capabilities | |
1724 @section Scrolling | |
1725 @cindex scrolling | |
1726 | |
1727 @dfn{Scrolling} means moving the contents of the screen up or down one or | |
1728 more lines. Moving the contents up is @dfn{forward scrolling}; moving them | |
1729 down is @dfn{reverse scrolling}. | |
1730 | |
1731 Scrolling happens after each line of output during ordinary output on most | |
1732 display terminals. But in an application program that uses termcap for | |
1733 random-access output, scrolling happens only when explicitly requested with | |
1734 the commands in this section. | |
1735 | |
1736 Some terminals have a @dfn{scroll region} feature. This lets you limit | |
1737 the effect of scrolling to a specified range of lines. Lines outside the | |
1738 range are unaffected when scrolling happens. The scroll region feature | |
1739 is available if either @samp{cs} or @samp{cS} is present. | |
1740 | |
1741 @table @samp | |
1742 @item sf | |
1743 @kindex sf | |
1744 String of commands to scroll the screen one line up, assuming it is | |
1745 output with the cursor at the beginning of the bottom line. | |
1746 | |
1747 @item sr | |
1748 @kindex sr | |
1749 String of commands to scroll the screen one line down, assuming it is | |
1750 output with the cursor at the beginning of the top line. | |
1751 | |
1752 @item SF | |
1753 @kindex SF | |
1754 String of commands to scroll the screen @var{n} lines up, assuming it | |
1755 is output with the cursor at the beginning of the bottom line. | |
1756 | |
1757 @item SR | |
1758 @kindex SR | |
1759 String of commands to scroll the screen @var{n} line down, assuming it | |
1760 is output with the cursor at the beginning of the top line. | |
1761 | |
1762 @item cs | |
1763 @kindex cs | |
1764 String of commands to set the scroll region. This command takes two | |
1765 parameters, @var{start} and @var{end}, which are the line numbers | |
1766 (origin-zero) of the first line to include in the scroll region and of | |
1767 the last line to include in it. When a scroll region is set, | |
1768 scrolling is limited to the specified range of lines; lines outside | |
1769 the range are not affected by scroll commands. | |
1770 | |
1771 Do not try to move the cursor outside the scroll region. The region | |
1772 remains set until explicitly removed. To remove the scroll region, | |
1773 use another @samp{cs} command specifying the full height of the | |
1774 screen. | |
1775 | |
1776 The cursor position is undefined after the @samp{cs} command is set, | |
1777 so position the cursor with @samp{cm} immediately afterward. | |
1778 | |
1779 @item cS | |
1780 @kindex cS | |
1781 String of commands to set the scroll region using parameters in | |
1782 different form. The effect is the same as if @samp{cs} were used. | |
1783 Four parameters are required: | |
1784 | |
1785 @enumerate | |
1786 @item | |
1787 Total number of lines on the screen. | |
1788 @item | |
1789 Number of lines above desired scroll region. | |
1790 @item | |
1791 Number of lines below (outside of) desired scroll region. | |
1792 @item | |
1793 Total number of lines on the screen, the same as the first parameter. | |
1794 @end enumerate | |
1795 | |
1796 This capability is a GNU extension that was invented to allow the Ann | |
1797 Arbor Ambassador's scroll-region command to be described; it could | |
1798 also be done by putting non-Unix @samp{%}-sequences into a @samp{cs} | |
1799 string, but that would have confused Unix programs that used the | |
1800 @samp{cs} capability with the Unix termcap. Currently only GNU Emacs | |
1801 uses the @samp{cS} capability. | |
1802 | |
1803 @item ns | |
1804 @kindex ns | |
1805 Flag which means that the terminal does not normally scroll for | |
1806 ordinary sequential output. For modern terminals, this means that | |
1807 outputting a newline in ordinary sequential output with the cursor on | |
1808 the bottom line wraps to the top line. For some obsolete terminals, | |
1809 other things may happen. | |
1810 | |
1811 The terminal may be able to scroll even if it does not normally do so. | |
1812 If the @samp{sf} capability is provided, it can be used for scrolling | |
1813 regardless of @samp{ns}. | |
1814 | |
1815 @item da | |
1816 @kindex da | |
1817 Flag whose presence means that lines scrolled up off the top of the | |
1818 screen may come back if scrolling down is done subsequently. | |
1819 | |
1820 The @samp{da} and @samp{db} flags do not, strictly speaking, affect | |
1821 how to scroll. But programs that scroll usually need to clear the | |
1822 lines scrolled onto the screen, if these flags are present. | |
1823 | |
1824 @item db | |
1825 @kindex db | |
1826 Flag whose presence means that lines scrolled down off the bottom of | |
1827 the screen may come back if scrolling up is done subsequently. | |
1828 | |
1829 @item lm | |
1830 @kindex lm | |
1831 Numeric value, the number of lines of display memory that the terminal | |
1832 has. A value of zero means that the terminal has more display memory | |
1833 than can fit on the screen, but no fixed number of lines. (The number | |
1834 of lines may depend on the amount of text in each line.) | |
1835 @end table | |
1836 | |
1837 Any terminal description that defines @samp{SF} should also define @samp{sf}; | |
1838 likewise for @samp{SR} and @samp{sr}. However, many terminals can only | |
1839 scroll by one line at a time, so it is common to find @samp{sf} and not | |
1840 @samp{SF}, or @samp{sr} without @samp{SR}.@refill | |
1841 | |
1842 Therefore, all programs that use the scrolling facilities should be | |
1843 prepared to work with @samp{sf} in the case that @samp{SF} is absent, and | |
1844 likewise with @samp{sr}. On the other hand, an application program that | |
1845 uses only @samp{sf} and not @samp{SF} is acceptable, though slow on some | |
1846 terminals.@refill | |
1847 | |
1848 When outputting a scroll command with @code{tputs}, the @var{nlines} | |
1849 argument should be the total number of lines in the portion of the screen | |
1850 being scrolled. Very often these commands require padding proportional to | |
1851 this number of lines. @xref{Padding}. | |
1852 | |
1853 @node Windows, Clearing, Scrolling, Capabilities | |
1854 @section Windows | |
1855 @cindex window | |
1856 | |
1857 A @dfn{window}, in termcap, is a rectangular portion of the screen to which | |
1858 all display operations are restricted. Wrapping, clearing, scrolling, | |
1859 insertion and deletion all operate as if the specified window were all the | |
1860 screen there was. | |
1861 | |
1862 @table @samp | |
1863 @item wi | |
1864 @kindex wi | |
1865 String of commands to set the terminal output screen window. | |
1866 This string requires four parameters, all origin-zero: | |
1867 @enumerate | |
1868 @item | |
1869 The first line to include in the window. | |
1870 @item | |
1871 The last line to include in the window. | |
1872 @item | |
1873 The first column to include in the window. | |
1874 @item | |
1875 The last column to include in the window. | |
1876 @end enumerate | |
1877 @end table | |
1878 | |
1879 Most terminals do not support windows. | |
1880 | |
1881 @node Clearing, Insdel Line, Windows, Capabilities | |
1882 @section Clearing Parts of the Screen | |
1883 @cindex erasing | |
1884 @cindex clearing the screen | |
1885 | |
1886 There are several terminal capabilities for clearing parts of the screen | |
1887 to blank. All display terminals support the @samp{cl} string, and most | |
1888 display terminals support all of these capabilities. | |
1889 | |
1890 @table @samp | |
1891 @item cl | |
1892 @kindex cl | |
1893 String of commands to clear the entire screen and position the cursor | |
1894 at the upper left corner. | |
1895 | |
1896 @item cd | |
1897 @kindex cd | |
1898 String of commands to clear the line the cursor is on, and all the | |
1899 lines below it, down to the bottom of the screen. This command string | |
1900 should be used only with the cursor in column zero; their effect is | |
1901 undefined if the cursor is elsewhere. | |
1902 | |
1903 @item ce | |
1904 @kindex ce | |
1905 String of commands to clear from the cursor to the end of the current | |
1906 line. | |
1907 | |
1908 @item ec | |
1909 @kindex ec | |
1910 String of commands to clear @var{n} characters, starting with the | |
1911 character that the cursor is on. This command string is expected to | |
1912 leave the cursor position unchanged. The parameter @var{n} should never | |
1913 be large enough to reach past the right margin; the effect of such a | |
1914 large parameter would be undefined. | |
1915 @end table | |
1916 | |
1917 Clear to end of line (@samp{ce}) is extremely important in programs that | |
1918 maintain an updating display. Nearly all display terminals support this | |
1919 operation, so it is acceptable for a an application program to refuse to | |
1920 work if @samp{ce} is not present. However, if you do not want this | |
1921 limitation, you can accomplish clearing to end of line by outputting spaces | |
1922 until you reach the right margin. In order to do this, you must know the | |
1923 current horizontal position. Also, this technique assumes that writing a | |
1924 space will erase. But this happens to be true on all the display terminals | |
1925 that fail to support @samp{ce}. | |
1926 | |
1927 @node Insdel Line, Insdel Char, Clearing, Capabilities | |
1928 @section Insert/Delete Line | |
1929 | |
1930 @cindex insert line | |
1931 @cindex delete line | |
1932 @dfn{Inserting a line} means creating a blank line in the middle | |
1933 of the screen, and pushing the existing lines of text apart. In fact, | |
1934 the lines above the insertion point do not change, while the lines below | |
1935 move down, and one is normally lost at the bottom of the screen. | |
1936 | |
1937 @dfn{Deleting a line} means causing the line to disappear from the screen, | |
1938 closing up the gap by moving the lines below it upward. A new line | |
1939 appears at the bottom of the screen. Usually this line is blank, but | |
1940 on terminals with the @samp{db} flag it may be a line previously moved | |
1941 off the screen bottom by scrolling or line insertion. | |
1942 | |
1943 Insertion and deletion of lines is useful in programs that maintain an | |
1944 updating display some parts of which may get longer or shorter. They are | |
1945 also useful in editors for scrolling parts of the screen, and for | |
1946 redisplaying after lines of text are killed or inserted. | |
1947 | |
1948 Many terminals provide commands to insert or delete a single line at the | |
1949 cursor position. Some provide the ability to insert or delete several | |
1950 lines with one command, using the number of lines to insert or delete as a | |
1951 parameter. Always move the cursor to column zero before using any of | |
1952 these commands. | |
1953 | |
1954 @table @samp | |
1955 @item al | |
1956 @kindex al | |
1957 String of commands to insert a blank line before the line the cursor | |
1958 is on. The existing line, and all lines below it, are moved down. | |
1959 The last line in the screen (or in the scroll region, if one is set) | |
1960 disappears and in most circumstances is discarded. It may not be | |
1961 discarded if the @samp{db} is present (@pxref{Scrolling}). | |
1962 | |
1963 The cursor must be at the left margin before this command is used. | |
1964 This command does not move the cursor. | |
1965 | |
1966 @item dl | |
1967 @kindex dl | |
1968 String of commands to delete the line the cursor is on. The following | |
1969 lines move up, and a blank line appears at the bottom of the screen | |
1970 (or bottom of the scroll region). If the terminal has the @samp{db} | |
1971 flag, a nonblank line previously pushed off the screen bottom may | |
1972 reappear at the bottom. | |
1973 | |
1974 The cursor must be at the left margin before this command is used. | |
1975 This command does not move the cursor. | |
1976 | |
1977 @item AL | |
1978 @kindex AL | |
1979 String of commands to insert @var{n} blank lines before the line that | |
1980 the cursor is on. It is like @samp{al} repeated @var{n} times, except | |
1981 that it is as fast as one @samp{al}. | |
1982 | |
1983 @item DL | |
1984 @kindex DL | |
1985 String of commands to delete @var{n} lines starting with the line that | |
1986 the cursor is on. It is like @samp{dl} repeated @var{n} times, except | |
1987 that it is as fast as one @samp{dl}. | |
1988 @end table | |
1989 | |
1990 Any terminal description that defines @samp{AL} should also define | |
1991 @samp{al}; likewise for @samp{DL} and @samp{dl}. However, many terminals | |
1992 can only insert or delete one line at a time, so it is common to find | |
1993 @samp{al} and not @samp{AL}, or @samp{dl} without @samp{DL}.@refill | |
1994 | |
1995 Therefore, all programs that use the insert and delete facilities should be | |
1996 prepared to work with @samp{al} in the case that @samp{AL} is absent, and | |
1997 likewise with @samp{dl}. On the other hand, it is acceptable to write | |
1998 an application that uses only @samp{al} and @samp{dl} and does not look | |
1999 for @samp{AL} or @samp{DL} at all.@refill | |
2000 | |
2001 If a terminal does not support line insertion and deletion directly, | |
2002 but does support a scroll region, the effect of insertion and deletion | |
2003 can be obtained with scrolling. However, it is up to the individual | |
2004 user program to check for this possibility and use the scrolling | |
2005 commands to get the desired result. It is fairly important to implement | |
2006 this alternate strategy, since it is the only way to get the effect of | |
2007 line insertion and deletion on the popular VT100 terminal. | |
2008 | |
2009 Insertion and deletion of lines is affected by the scroll region on | |
2010 terminals that have a settable scroll region. This is useful when it is | |
2011 desirable to move any few consecutive lines up or down by a few lines. | |
2012 @xref{Scrolling}. | |
2013 | |
2014 The line pushed off the bottom of the screen is not lost if the terminal | |
2015 has the @samp{db} flag capability; instead, it is pushed into display | |
2016 memory that does not appear on the screen. This is the same thing that | |
2017 happens when scrolling pushes a line off the bottom of the screen. | |
2018 Either reverse scrolling or deletion of a line can bring the apparently | |
2019 lost line back onto the bottom of the screen. If the terminal has the | |
2020 scroll region feature as well as @samp{db}, the pushed-out line really | |
2021 is lost if a scroll region is in effect. | |
2022 | |
2023 When outputting an insert or delete command with @code{tputs}, the | |
2024 @var{nlines} argument should be the total number of lines from the cursor | |
2025 to the bottom of the screen (or scroll region). Very often these commands | |
2026 require padding proportional to this number of lines. @xref{Padding}. | |
2027 | |
2028 For @samp{AL} and @samp{DL} the @var{nlines} argument should @emph{not} | |
2029 depend on the number of lines inserted or deleted; only the total number of | |
2030 lines affected. This is because it is just as fast to insert two or | |
2031 @var{n} lines with @samp{AL} as to insert one line with @samp{al}. | |
2032 | |
2033 @node Insdel Char, Standout, Insdel Line, Capabilities | |
2034 @section Insert/Delete Character | |
2035 @cindex insert character | |
2036 @cindex delete character | |
2037 | |
2038 @dfn{Inserting a character} means creating a blank space in the middle of a | |
2039 line, and pushing the rest of the line rightward. The character in the | |
2040 rightmost column is lost. | |
2041 | |
2042 @dfn{Deleting a character} means causing the character to disappear from | |
2043 the screen, closing up the gap by moving the rest of the line leftward. A | |
2044 blank space appears in the rightmost column. | |
2045 | |
2046 Insertion and deletion of characters is useful in programs that maintain an | |
2047 updating display some parts of which may get longer or shorter. It is also | |
2048 useful in editors for redisplaying the results of editing within a line. | |
2049 | |
2050 Many terminals provide commands to insert or delete a single character at | |
2051 the cursor position. Some provide the ability to insert or delete several | |
2052 characters with one command, using the number of characters to insert or | |
2053 delete as a parameter. | |
2054 | |
2055 @cindex insert mode | |
2056 Many terminals provide an insert mode in which outputting a graphic | |
2057 character has the added effect of inserting a position for that character. | |
2058 A special command string is used to enter insert mode and another is used | |
2059 to exit it. The reason for designing a terminal with an insert mode rather | |
2060 than an insert command is that inserting character positions is usually | |
2061 followed by writing characters into them. With insert mode, this is as | |
2062 fast as simply writing the characters, except for the fixed overhead of | |
2063 entering and leaving insert mode. However, when the line speed is great | |
2064 enough, padding may be required for the graphic characters output in insert | |
2065 mode. | |
2066 | |
2067 Some terminals require you to enter insert mode and then output a special | |
2068 command for each position to be inserted. Or they may require special | |
2069 commands to be output before or after each graphic character to be | |
2070 inserted. | |
2071 | |
2072 @cindex delete mode | |
2073 Deletion of characters is usually accomplished by a straightforward command | |
2074 to delete one or several positions; but on some terminals, it is necessary | |
2075 to enter a special delete mode before using the delete command, and leave | |
2076 delete mode afterward. Sometimes delete mode and insert mode are the same | |
2077 mode. | |
2078 | |
2079 Some terminals make a distinction between character positions in which a | |
2080 space character has been output and positions which have been cleared. On | |
2081 these terminals, the effect of insert or delete character runs to the first | |
2082 cleared position rather than to the end of the line. In fact, the effect | |
2083 may run to more than one line if there is no cleared position to stop the | |
2084 shift on the first line. These terminals are identified by the @samp{in} | |
2085 flag capability. | |
2086 | |
2087 On terminals with the @samp{in} flag, the technique of skipping over | |
2088 characters that you know were cleared, and then outputting text later on in | |
2089 the same line, causes later insert and delete character operations on that | |
2090 line to do nonstandard things. A program that has any chance of doing this | |
2091 must check for the @samp{in} flag and must be careful to write explicit | |
2092 space characters into the intermediate columns when @samp{in} is present. | |
2093 | |
2094 A plethora of terminal capabilities are needed to describe all of this | |
2095 complexity. Here is a list of them all. Following the list, we present | |
2096 an algorithm for programs to use to take proper account of all of these | |
2097 capabilities. | |
2098 | |
2099 @table @samp | |
2100 @item im | |
2101 @kindex im | |
2102 String of commands to enter insert mode. | |
2103 | |
2104 If the terminal has no special insert mode, but it can insert | |
2105 characters with a special command, @samp{im} should be defined with a | |
2106 null value, because the @samp{vi} editor assumes that insertion of a | |
2107 character is impossible if @samp{im} is not provided. | |
2108 | |
2109 New programs should not act like @samp{vi}. They should pay attention | |
2110 to @samp{im} only if it is defined. | |
2111 | |
2112 @item ei | |
2113 @kindex ei | |
2114 String of commands to leave insert mode. This capability must be | |
2115 present if @samp{im} is. | |
2116 | |
2117 On a few old terminals the same string is used to enter and exit | |
2118 insert mode. This string turns insert mode on if it was off, and off | |
2119 it it was on. You can tell these terminals because the @samp{ei} | |
2120 string equals the @samp{im} string. If you want to support these | |
2121 terminals, you must always remember accurately whether insert mode is | |
2122 in effect. However, these terminals are obsolete, and it is | |
2123 reasonable to refuse to support them. On all modern terminals, you | |
2124 can safely output @samp{ei} at any time to ensure that insert mode is | |
2125 turned off. | |
2126 | |
2127 @item ic | |
2128 @kindex ic | |
2129 String of commands to insert one character position at the cursor. | |
2130 The cursor does not move. | |
2131 | |
2132 If outputting a graphic character while in insert mode is sufficient | |
2133 to insert the character, then the @samp{ic} capability should be | |
2134 defined with a null value. | |
2135 | |
2136 If your terminal offers a choice of ways to insert---either use insert | |
2137 mode or use a special command---then define @samp{im} and do not define | |
2138 @samp{ic}, since this gives the most efficient operation when several | |
2139 characters are to be inserted. @emph{Do not} define both strings, for | |
2140 that means that @emph{both} must be used each time insertion is done. | |
2141 | |
2142 @item ip | |
2143 @kindex ip | |
2144 String of commands to output following an inserted graphic character | |
2145 in insert mode. Often it is used just for a padding spec, when padding | |
2146 is needed after an inserted character (@pxref{Padding}). | |
2147 | |
2148 @item IC | |
2149 @kindex IC | |
2150 String of commands to insert @var{n} character positions at and after | |
2151 the cursor. It has the same effect as repeating the @samp{ic} string | |
2152 and a space, @var{n} times. | |
2153 | |
2154 If @samp{IC} is provided, application programs may use it without first | |
2155 entering insert mode. | |
2156 | |
2157 @item mi | |
2158 @kindex mi | |
2159 Flag whose presence means it is safe to move the cursor while in insert | |
2160 mode and assume the terminal remains in insert mode. | |
2161 | |
2162 @item in | |
2163 @kindex in | |
2164 Flag whose presence means that the terminal distinguishes between | |
2165 character positions in which space characters have been output and | |
2166 positions which have been cleared. | |
2167 @end table | |
2168 | |
2169 An application program can assume that the terminal can do character | |
2170 insertion if @emph{any one of} the capabilities @samp{IC}, @samp{im}, | |
2171 @samp{ic} or @samp{ip} is provided. | |
2172 | |
2173 To insert @var{n} blank character positions, move the cursor to the place | |
2174 to insert them and follow this algorithm: | |
2175 | |
2176 @enumerate | |
2177 @item | |
2178 If an @samp{IC} string is provided, output it with parameter @var{n} | |
2179 and you are finished. Otherwise (or if you don't want to bother to | |
2180 look for an @samp{IC} string) follow the remaining steps. | |
2181 | |
2182 @item | |
2183 Output the @samp{im} string, if there is one, unless the terminal is | |
2184 already in insert mode. | |
2185 | |
2186 @item | |
2187 Repeat steps 4 through 6, @var{n} times. | |
2188 | |
2189 @item | |
2190 Output the @samp{ic} string if any. | |
2191 | |
2192 @item | |
2193 Output a space. | |
2194 | |
2195 @item | |
2196 Output the @samp{ip} string if any. | |
2197 | |
2198 @item | |
2199 Output the @samp{ei} string, eventually, to exit insert mode. There | |
2200 is no need to do this right away. If the @samp{mi} flag is present, | |
2201 you can move the cursor and the cursor will remain in insert mode; | |
2202 then you can do more insertion elsewhere without reentering insert | |
2203 mode. | |
2204 @end enumerate | |
2205 | |
2206 To insert @var{n} graphic characters, position the cursor and follow this | |
2207 algorithm: | |
2208 | |
2209 @enumerate | |
2210 @item | |
2211 If an @samp{IC} string is provided, output it with parameter @var{n}, | |
2212 then output the graphic characters, and you are finished. Otherwise | |
2213 (or if you don't want to bother to look for an @samp{IC} string) | |
2214 follow the remaining steps. | |
2215 | |
2216 @item | |
2217 Output the @samp{im} string, if there is one, unless the terminal is | |
2218 already in insert mode. | |
2219 | |
2220 @item | |
2221 For each character to be output, repeat steps 4 through 6. | |
2222 | |
2223 @item | |
2224 Output the @samp{ic} string if any. | |
2225 | |
2226 @item | |
2227 Output the next graphic character. | |
2228 | |
2229 @item | |
2230 Output the @samp{ip} string if any. | |
2231 | |
2232 @item | |
2233 Output the @samp{ei} string, eventually, to exit insert mode. There | |
2234 is no need to do this right away. If the @samp{mi} flag is present, | |
2235 you can move the cursor and the cursor will remain in insert mode; | |
2236 then you can do more insertion elsewhere without reentering insert | |
2237 mode. | |
2238 @end enumerate | |
2239 | |
2240 Note that this is not the same as the original Unix termcap specifications | |
2241 in one respect: it assumes that the @samp{IC} string can be used without | |
2242 entering insert mode. This is true as far as I know, and it allows you be | |
2243 able to avoid entering and leaving insert mode, and also to be able to | |
2244 avoid the inserted-character padding after the characters that go into the | |
2245 inserted positions. | |
2246 | |
2247 Deletion of characters is less complicated; deleting one column is done by | |
2248 outputting the @samp{dc} string. However, there may be a delete mode that | |
2249 must be entered with @samp{dm} in order to make @samp{dc} work. | |
2250 | |
2251 @table @samp | |
2252 @item dc | |
2253 @kindex dc | |
2254 String of commands to delete one character position at the cursor. If | |
2255 @samp{dc} is not present, the terminal cannot delete characters. | |
2256 | |
2257 @item DC | |
2258 @kindex DC | |
2259 String of commands to delete @var{n} characters starting at the cursor. | |
2260 It has the same effect as repeating the @samp{dc} string @var{n} times. | |
2261 Any terminal description that has @samp{DC} also has @samp{dc}. | |
2262 | |
2263 @item dm | |
2264 @kindex dm | |
2265 String of commands to enter delete mode. If not present, there is no | |
2266 delete mode, and @samp{dc} can be used at any time (assuming there is | |
2267 a @samp{dc}). | |
2268 | |
2269 @item ed | |
2270 @kindex ed | |
2271 String of commands to exit delete mode. This must be present if | |
2272 @samp{dm} is. | |
2273 @end table | |
2274 | |
2275 To delete @var{n} character positions, position the cursor and follow these | |
2276 steps: | |
2277 | |
2278 @enumerate | |
2279 @item | |
2280 If the @samp{DC} string is present, output it with parameter @var{n} | |
2281 and you are finished. Otherwise, follow the remaining steps. | |
2282 | |
2283 @item | |
2284 Output the @samp{dm} string, unless you know the terminal is already | |
2285 in delete mode. | |
2286 | |
2287 @item | |
2288 Output the @samp{dc} string @var{n} times. | |
2289 | |
2290 @item | |
2291 Output the @samp{ed} string eventually. If the flag capability | |
2292 @samp{mi} is present, you can move the cursor and do more deletion | |
2293 without leaving and reentering delete mode. | |
2294 @end enumerate | |
2295 | |
2296 As with the @samp{IC} string, we have departed from the original termcap | |
2297 specifications by assuming that @samp{DC} works without entering delete | |
2298 mode even though @samp{dc} would not. | |
2299 | |
2300 If the @samp{dm} and @samp{im} capabilities are both present and have the | |
2301 same value, it means that the terminal has one mode for both insertion and | |
2302 deletion. It is useful for a program to know this, because then it can do | |
2303 insertions after deletions, or vice versa, without leaving insert/delete | |
2304 mode and reentering it. | |
2305 | |
2306 @node Standout, Underlining, Insdel Char, Capabilities | |
2307 @section Standout and Appearance Modes | |
2308 @cindex appearance modes | |
2309 @cindex standout | |
2310 @cindex magic cookie | |
2311 | |
2312 @dfn{Appearance modes} are modifications to the ways characters are | |
2313 displayed. Typical appearance modes include reverse video, dim, bright, | |
2314 blinking, underlined, invisible, and alternate character set. Each kind of | |
2315 terminal supports various among these, or perhaps none. | |
2316 | |
2317 For each type of terminal, one appearance mode or combination of them that | |
2318 looks good for highlighted text is chosen as the @dfn{standout mode}. The | |
2319 capabilities @samp{so} and @samp{se} say how to enter and leave standout | |
2320 mode. Programs that use appearance modes only to highlight some text | |
2321 generally use the standout mode so that they can work on as many terminals | |
2322 as possible. Use of specific appearance modes other than ``underlined'' | |
2323 and ``alternate character set'' is rare. | |
2324 | |
2325 Terminals that implement appearance modes fall into two general classes as | |
2326 to how they do it. | |
2327 | |
2328 In some terminals, the presence or absence of any appearance mode is | |
2329 recorded separately for each character position. In these terminals, each | |
2330 graphic character written is given the appearance modes current at the time | |
2331 it is written, and keeps those modes until it is erased or overwritten. | |
2332 There are special commands to turn the appearance modes on or off for | |
2333 characters to be written in the future. | |
2334 | |
2335 In other terminals, the change of appearance modes is represented by a | |
2336 marker that belongs to a certain screen position but affects all following | |
2337 screen positions until the next marker. These markers are traditionally | |
2338 called @dfn{magic cookies}. | |
2339 | |
2340 The same capabilities (@samp{so}, @samp{se}, @samp{mb} and so on) for | |
2341 turning appearance modes on and off are used for both magic-cookie | |
2342 terminals and per-character terminals. On magic cookie terminals, these | |
2343 give the commands to write the magic cookies. On per-character terminals, | |
2344 they change the current modes that affect future output and erasure. Some | |
2345 simple applications can use these commands without knowing whether or not | |
2346 they work by means of cookies. | |
2347 | |
2348 However, a program that maintains and updates a display needs to know | |
2349 whether the terminal uses magic cookies, and exactly what their effect is. | |
2350 This information comes from the @samp{sg} capability. | |
2351 | |
2352 The @samp{sg} capability is a numeric capability whose presence indicates | |
2353 that the terminal uses magic cookies for appearance modes. Its value is | |
2354 the number of character positions that a magic cookie occupies. Usually | |
2355 the cookie occupies one or more character positions on the screen, and these | |
2356 character positions are displayed as blank, but in some terminals the | |
2357 cookie has zero width. | |
2358 | |
2359 The @samp{sg} capability describes both the magic cookie to turn standout | |
2360 on and the cookie to turn it off. This makes the assumption that both | |
2361 kinds of cookie have the same width on the screen. If that is not true, | |
2362 the narrower cookie must be ``widened'' with spaces until it has the same | |
2363 width as the other. | |
2364 | |
2365 On some magic cookie terminals, each line always starts with normal | |
2366 display; in other words, the scope of a magic cookie never extends over | |
2367 more than one line. But on other terminals, one magic cookie affects all | |
2368 the lines below it unless explicitly canceled. Termcap does not define any | |
2369 way to distinguish these two ways magic cookies can work. To be safe, it | |
2370 is best to put a cookie at the beginning of each line. | |
2371 | |
2372 On some per-character terminals, standout mode or other appearance modes | |
2373 may be canceled by moving the cursor. On others, moving the cursor has no | |
2374 effect on the state of the appearance modes. The latter class of terminals | |
2375 are given the flag capability @samp{ms} (``can move in standout''). All | |
2376 programs that might have occasion to move the cursor while appearance modes | |
2377 are turned on must check for this flag; if it is not present, they should | |
2378 reset appearance modes to normal before doing cursor motion. | |
2379 | |
2380 A program that has turned on only standout mode should use @samp{se} to | |
2381 reset the standout mode to normal. A program that has turned on only | |
2382 alternate character set mode should use @samp{ae} to return it to normal. | |
2383 If it is possible that any other appearance modes are turned on, use the | |
2384 @samp{me} capability to return them to normal. | |
2385 | |
2386 Note that the commands to turn on one appearance mode, including @samp{so} | |
2387 and @samp{mb} @dots{} @samp{mr}, if used while some other appearance modes | |
2388 are turned on, may combine the two modes on some terminals but may turn off | |
2389 the mode previously enabled on other terminals. This is because some | |
2390 terminals do not have a command to set or clear one appearance mode without | |
2391 changing the others. Programs should not attempt to use appearance modes | |
2392 in combination except with @samp{sa}, and when switching from one single | |
2393 mode to another should always turn off the previously enabled mode and then | |
2394 turn on the new desired mode. | |
2395 | |
2396 On some old terminals, the @samp{so} and @samp{se} commands may be the same | |
2397 command, which has the effect of turning standout on if it is off, or off | |
2398 it is on. It is therefore risky for a program to output extra @samp{se} | |
2399 commands for good measure. Fortunately, all these terminals are obsolete. | |
2400 | |
2401 Programs that update displays in which standout-text may be replaced with | |
2402 non-standout text must check for the @samp{xs} flag. In a per-character | |
2403 terminal, this flag says that the only way to remove standout once written is | |
2404 to clear that portion of the line with the @samp{ce} string or something | |
2405 even more powerful (@pxref{Clearing}); just writing new characters at those | |
2406 screen positions will not change the modes in effect there. In a magic | |
2407 cookie terminal, @samp{xs} says that the only way to remove a cookie is to | |
2408 clear a portion of the line that includes the cookie; writing a different | |
2409 cookie at the same position does not work. | |
2410 | |
2411 Such programs must also check for the @samp{xt} flag, which means that the | |
2412 terminal is a Teleray 1061. On this terminal it is impossible to position | |
2413 the cursor at the front of a magic cookie, so the only two ways to remove a | |
2414 cookie are (1) to delete the line it is on or (2) to position the cursor at | |
2415 least one character before it (possibly on a previous line) and output the | |
2416 @samp{se} string, which on these terminals finds and removes the next | |
2417 @samp{so} magic cookie on the screen. (It may also be possible to remove a | |
2418 cookie which is not at the beginning of a line by clearing that line.) The | |
2419 @samp{xt} capability also has implications for the use of tab characters, | |
2420 but in that regard it is obsolete (@xref{Cursor Motion}). | |
2421 | |
2422 @table @samp | |
2423 @item so | |
2424 @kindex so | |
2425 String of commands to enter standout mode. | |
2426 | |
2427 @item se | |
2428 @kindex se | |
2429 String of commands to leave standout mode. | |
2430 | |
2431 @item sg | |
2432 @kindex sg | |
2433 Numeric capability, the width on the screen of the magic cookie. This | |
2434 capability is absent in terminals that record appearance modes | |
2435 character by character. | |
2436 | |
2437 @item ms | |
2438 @kindex ms | |
2439 Flag whose presence means that it is safe to move the cursor while the | |
2440 appearance modes are not in the normal state. If this flag is absent, | |
2441 programs should always reset the appearance modes to normal before | |
2442 moving the cursor. | |
2443 | |
2444 @item xs | |
2445 @kindex xs | |
2446 Flag whose presence means that the only way to reset appearance modes | |
2447 already on the screen is to clear to end of line. On a per-character | |
2448 terminal, you must clear the area where the modes are set. On a magic | |
2449 cookie terminal, you must clear an area containing the cookie. | |
2450 See the discussion above. | |
2451 | |
2452 @item xt | |
2453 @kindex xt | |
2454 Flag whose presence means that the cursor cannot be positioned right | |
2455 in front of a magic cookie, and that @samp{se} is a command to delete | |
2456 the next magic cookie following the cursor. See discussion above. | |
2457 | |
2458 @item mb | |
2459 @kindex mb | |
2460 String of commands to enter blinking mode. | |
2461 | |
2462 @item md | |
2463 @kindex md | |
2464 String of commands to enter double-bright mode. | |
2465 | |
2466 @item mh | |
2467 @kindex mh | |
2468 String of commands to enter half-bright mode. | |
2469 | |
2470 @item mk | |
2471 @kindex mk | |
2472 String of commands to enter invisible mode. | |
2473 | |
2474 @item mp | |
2475 @kindex mp | |
2476 String of commands to enter protected mode. | |
2477 | |
2478 @item mr | |
2479 @kindex mr | |
2480 String of commands to enter reverse-video mode. | |
2481 | |
2482 @item me | |
2483 @kindex me | |
2484 String of commands to turn off all appearance modes, including | |
2485 standout mode and underline mode. On some terminals it also turns off | |
2486 alternate character set mode; on others, it may not. This capability | |
2487 must be present if any of @samp{mb} @dots{} @samp{mr} is present. | |
2488 | |
2489 @item as | |
2490 @kindex as | |
2491 String of commands to turn on alternate character set mode. This mode | |
2492 assigns some or all graphic characters an alternate picture on the | |
2493 screen. There is no standard as to what the alternate pictures look | |
2494 like. | |
2495 | |
2496 @item ae | |
2497 @kindex ae | |
2498 String of commands to turn off alternate character set mode. | |
2499 | |
2500 @item sa | |
2501 @kindex sa | |
2502 String of commands to turn on an arbitrary combination of appearance | |
2503 modes. It accepts 9 parameters, each of which controls a particular | |
2504 kind of appearance mode. A parameter should be 1 to turn its appearance | |
2505 mode on, or zero to turn that mode off. Most terminals do not support | |
2506 the @samp{sa} capability, even among those that do have various | |
2507 appearance modes. | |
2508 | |
2509 The nine parameters are, in order, @var{standout}, @var{underline}, | |
2510 @var{reverse}, @var{blink}, @var{half-bright}, @var{double-bright}, | |
2511 @var{blank}, @var{protect}, @var{alt char set}. | |
2512 @end table | |
2513 | |
2514 @node Underlining, Cursor Visibility, Standout, Capabilities | |
2515 @section Underlining | |
2516 @cindex underlining | |
2517 | |
2518 Underlining on most terminals is a kind of appearance mode, much like | |
2519 standout mode. Therefore, it may be implemented using magic cookies or as | |
2520 a flag in the terminal whose current state affects each character that is | |
2521 output. @xref{Standout}, for a full explanation. | |
2522 | |
2523 The @samp{ug} capability is a numeric capability whose presence indicates | |
2524 that the terminal uses magic cookies for underlining. Its value is the | |
2525 number of character positions that a magic cookie for underlining occupies; | |
2526 it is used for underlining just as @samp{sg} is used for standout. Aside | |
2527 from the simplest applications, it is impossible to use underlining | |
2528 correctly without paying attention to the value of @samp{ug}. | |
2529 | |
2530 @table @samp | |
2531 @item us | |
2532 @kindex us | |
2533 String of commands to turn on underline mode or to output a magic cookie | |
2534 to start underlining. | |
2535 | |
2536 @item ue | |
2537 @kindex ue | |
2538 String of commands to turn off underline mode or to output a magic | |
2539 cookie to stop underlining. | |
2540 | |
2541 @item ug | |
2542 @kindex ug | |
2543 Width of magic cookie that represents a change of underline mode; | |
2544 or missing, if the terminal does not use a magic cookie for this. | |
2545 | |
2546 @item ms | |
2547 @kindex ms | |
2548 Flag whose presence means that it is safe to move the cursor while the | |
2549 appearance modes are not in the normal state. Underlining is an | |
2550 appearance mode. If this flag is absent, programs should always turn | |
2551 off underlining before moving the cursor. | |
2552 @end table | |
2553 | |
2554 There are two other, older ways of doing underlining: there can be a | |
2555 command to underline a single character, or the output of @samp{_}, the | |
2556 ASCII underscore character, as an overstrike could cause a character to be | |
2557 underlined. New programs need not bother to handle these capabilities | |
2558 unless the author cares strongly about the obscure terminals which support | |
2559 them. However, terminal descriptions should provide these capabilities | |
2560 when appropriate. | |
2561 | |
2562 @table @samp | |
2563 @item uc | |
2564 @kindex uc | |
2565 String of commands to underline the character under the cursor, and | |
2566 move the cursor right. | |
2567 | |
2568 @item ul | |
2569 @kindex ul | |
2570 Flag whose presence means that the terminal can underline by | |
2571 overstriking an underscore character (@samp{_}); some terminals can do | |
2572 this even though they do not support overstriking in general. An | |
2573 implication of this flag is that when outputting new text to overwrite | |
2574 old text, underscore characters must be treated specially lest they | |
2575 underline the old text instead. | |
2576 @end table | |
2577 | |
2578 @node Cursor Visibility, Bell, Underlining, Capabilities | |
2579 @section Cursor Visibility | |
2580 @cindex visibility | |
2581 | |
2582 Some terminals have the ability to make the cursor invisible, or to enhance | |
2583 it. Enhancing the cursor is often done by programs that plan to use the | |
2584 cursor to indicate to the user a position of interest that may be anywhere | |
2585 on the screen---for example, the Emacs editor enhances the cursor on entry. | |
2586 Such programs should always restore the cursor to normal on exit. | |
2587 | |
2588 @table @samp | |
2589 @item vs | |
2590 @kindex vs | |
2591 String of commands to enhance the cursor. | |
2592 | |
2593 @item vi | |
2594 @kindex vi | |
2595 String of commands to make the cursor invisible. | |
2596 | |
2597 @item ve | |
2598 @kindex ve | |
2599 String of commands to return the cursor to normal. | |
2600 @end table | |
2601 | |
2602 If you define either @samp{vs} or @samp{vi}, you must also define @samp{ve}. | |
2603 | |
2604 @node Bell, Keypad, Cursor Visibility, Capabilities | |
2605 @section Bell | |
2606 @cindex bell | |
2607 @cindex visible bell | |
2608 | |
2609 Here we describe commands to make the terminal ask for the user to pay | |
2610 attention to it. | |
2611 | |
2612 @table @samp | |
2613 @item bl | |
2614 @kindex bl | |
2615 String of commands to cause the terminal to make an audible sound. If | |
2616 this capability is absent, the terminal has no way to make a suitable | |
2617 sound. | |
2618 | |
2619 @item vb | |
2620 @kindex vb | |
2621 String of commands to cause the screen to flash to attract attention | |
2622 (``visible bell''). If this capability is absent, the terminal has no | |
2623 way to do such a thing. | |
2624 @end table | |
2625 | |
2626 @node Keypad, Meta Key, Bell, Capabilities | |
2627 @section Keypad and Function Keys | |
2628 | |
2629 Many terminals have arrow and function keys that transmit specific | |
2630 character sequences to the computer. Since the precise sequences used | |
2631 depend on the terminal, termcap defines capabilities used to say what the | |
2632 sequences are. Unlike most termcap string-valued capabilities, these are | |
2633 not strings of commands to be sent to the terminal, rather strings that | |
2634 are received from the terminal. | |
2635 | |
2636 Programs that expect to use keypad keys should check, initially, for a | |
2637 @samp{ks} capability and send it, to make the keypad actually transmit. | |
2638 Such programs should also send the @samp{ke} string when exiting. | |
2639 | |
2640 @table @asis | |
2641 @item @samp{ks} | |
2642 @kindex ka@dots{}ku | |
2643 String of commands to make the function keys transmit. If this | |
2644 capability is not provided, but the others in this section are, | |
2645 programs may assume that the function keys always transmit. | |
2646 | |
2647 @item @samp{ke} | |
2648 String of commands to make the function keys work locally. This | |
2649 capability is provided only if @samp{ks} is. | |
2650 | |
2651 @item @samp{kl} | |
2652 String of input characters sent by typing the left-arrow key. If this | |
2653 capability is missing, you cannot expect the terminal to have a | |
2654 left-arrow key that transmits anything to the computer. | |
2655 | |
2656 @item @samp{kr} | |
2657 String of input characters sent by typing the right-arrow key. | |
2658 | |
2659 @item @samp{ku} | |
2660 String of input characters sent by typing the up-arrow key. | |
2661 | |
2662 @item @samp{kd} | |
2663 String of input characters sent by typing the down-arrow key. | |
2664 | |
2665 @item @samp{kh} | |
2666 String of input characters sent by typing the ``home-position'' key. | |
2667 | |
2668 @item @samp{K1} @dots{} @samp{K5} | |
2669 @kindex K1@dots{}K5 | |
2670 Strings of input characters sent by the five other keys in a 3-by-3 | |
2671 array that includes the arrow keys, if the keyboard has such a 3-by-3 | |
2672 array. Note that one of these keys may be the ``home-position'' key, | |
2673 in which case one of these capabilities will have the same value as | |
2674 the @samp{kh} key. | |
2675 | |
2676 @item @samp{k0} | |
2677 String of input characters sent by function key 10 (or 0, if the terminal | |
2678 has one labeled 0). | |
2679 | |
2680 @item @samp{k1} @dots{} @samp{k9} | |
2681 @kindex k1@dots{}k9 | |
2682 Strings of input characters sent by function keys 1 through 9, | |
2683 provided for those function keys that exist. | |
2684 | |
2685 @item @samp{kn} | |
2686 Number: the number of numbered function keys, if there are more than | |
2687 10. | |
2688 | |
2689 @item @samp{l0} @dots{} @samp{l9} | |
2690 @kindex l0@dots{}l9 | |
2691 Strings which are the labels appearing on the keyboard on the keys | |
2692 described by the capabilities @samp{k0} @dots{} @samp{l9}. These | |
2693 capabilities should be left undefined if the labels are @samp{f0} or | |
2694 @samp{f10} and @samp{f1} @dots{} @samp{f9}.@refill | |
2695 | |
2696 @item @samp{kH} | |
2697 @kindex kA@dots{}kT | |
2698 String of input characters sent by the ``home down'' key, if there is | |
2699 one. | |
2700 | |
2701 @item @samp{kb} | |
2702 String of input characters sent by the ``backspace'' key, if there is | |
2703 one. | |
2704 | |
2705 @item @samp{ka} | |
2706 String of input characters sent by the ``clear all tabs'' key, if there | |
2707 is one. | |
2708 | |
2709 @item @samp{kt} | |
2710 String of input characters sent by the ``clear tab stop this column'' | |
2711 key, if there is one. | |
2712 | |
2713 @item @samp{kC} | |
2714 String of input characters sent by the ``clear screen'' key, if there is | |
2715 one. | |
2716 | |
2717 @item @samp{kD} | |
2718 String of input characters sent by the ``delete character'' key, if | |
2719 there is one. | |
2720 | |
2721 @item @samp{kL} | |
2722 String of input characters sent by the ``delete line'' key, if there is | |
2723 one. | |
2724 | |
2725 @item @samp{kM} | |
2726 String of input characters sent by the ``exit insert mode'' key, if | |
2727 there is one. | |
2728 | |
2729 @item @samp{kE} | |
2730 String of input characters sent by the ``clear to end of line'' key, if | |
2731 there is one. | |
2732 | |
2733 @item @samp{kS} | |
2734 String of input characters sent by the ``clear to end of screen'' key, | |
2735 if there is one. | |
2736 | |
2737 @item @samp{kI} | |
2738 String of input characters sent by the ``insert character'' or ``enter | |
2739 insert mode'' key, if there is one. | |
2740 | |
2741 @item @samp{kA} | |
2742 String of input characters sent by the ``insert line'' key, if there is | |
2743 one. | |
2744 | |
2745 @item @samp{kN} | |
2746 String of input characters sent by the ``next page'' key, if there is | |
2747 one. | |
2748 | |
2749 @item @samp{kP} | |
2750 String of input characters sent by the ``previous page'' key, if there is | |
2751 one. | |
2752 | |
2753 @item @samp{kF} | |
2754 String of input characters sent by the ``scroll forward'' key, if there | |
2755 is one. | |
2756 | |
2757 @item @samp{kR} | |
2758 String of input characters sent by the ``scroll reverse'' key, if there | |
2759 is one. | |
2760 | |
2761 @item @samp{kT} | |
2762 String of input characters sent by the ``set tab stop in this column'' | |
2763 key, if there is one. | |
2764 | |
2765 @item @samp{ko} | |
2766 String listing the other function keys the terminal has. This is a | |
2767 very obsolete way of describing the same information found in the | |
2768 @samp{kH} @dots{} @samp{kT} keys. The string contains a list of | |
2769 two-character termcap capability names, separated by commas. The | |
2770 meaning is that for each capability name listed, the terminal has a | |
2771 key which sends the string which is the value of that capability. For | |
2772 example, the value @samp{:ko=cl,ll,sf,sr:} says that the terminal has | |
2773 four function keys which mean ``clear screen'', ``home down'', | |
2774 ``scroll forward'' and ``scroll reverse''.@refill | |
2775 @end table | |
2776 | |
2777 @node Meta Key, Initialization, Keypad, Capabilities | |
2778 @section Meta Key | |
2779 | |
2780 @cindex meta key | |
2781 A Meta key is a key on the keyboard that modifies each character you type | |
2782 by controlling the 0200 bit. This bit is on if and only if the Meta key is | |
2783 held down when the character is typed. Characters typed using the Meta key | |
2784 are called Meta characters. Emacs uses Meta characters as editing | |
2785 commands. | |
2786 | |
2787 @table @samp | |
2788 @item km | |
2789 @kindex km | |
2790 Flag whose presence means that the terminal has a Meta key. | |
2791 | |
2792 @item mm | |
2793 @kindex mm | |
2794 String of commands to enable the functioning of the Meta key. | |
2795 | |
2796 @item mo | |
2797 @kindex mo | |
2798 String of commands to disable the functioning of the Meta key. | |
2799 @end table | |
2800 | |
2801 If the terminal has @samp{km} but does not have @samp{mm} and @samp{mo}, it | |
2802 means that the Meta key always functions. If it has @samp{mm} and | |
2803 @samp{mo}, it means that the Meta key can be turned on or off. Send the | |
2804 @samp{mm} string to turn it on, and the @samp{mo} string to turn it off. | |
2805 I do not know why one would ever not want it to be on. | |
2806 | |
2807 @node Initialization, Pad Specs, Meta Key, Capabilities | |
2808 @section Initialization | |
2809 @cindex reset | |
2810 @cindex initialization | |
2811 @cindex tab stops | |
2812 | |
2813 @table @samp | |
2814 @item ti | |
2815 @kindex ti | |
2816 String of commands to put the terminal into whatever special modes are | |
2817 needed or appropriate for programs that move the cursor | |
2818 nonsequentially around the screen. Programs that use termcap to do | |
2819 full-screen display should output this string when they start up. | |
2820 | |
2821 @item te | |
2822 @kindex te | |
2823 String of commands to undo what is done by the @samp{ti} string. | |
2824 Programs that output the @samp{ti} string on entry should output this | |
2825 string when they exit. | |
2826 | |
2827 @item is | |
2828 @kindex is | |
2829 String of commands to initialize the terminal for each login session. | |
2830 | |
2831 @item if | |
2832 @kindex if | |
2833 String which is the name of a file containing the string of commands | |
2834 to initialize the terminal for each session of use. Normally @samp{is} | |
2835 and @samp{if} are not both used. | |
2836 | |
2837 @item i1 | |
2838 @itemx i3 | |
2839 @kindex i1 | |
2840 @kindex i3 | |
2841 Two more strings of commands to initialize the terminal for each login | |
2842 session. The @samp{i1} string (if defined) is output before @samp{is} | |
2843 or @samp{if}, and the @samp{i3} string (if defined) is output after. | |
2844 | |
2845 The reason for having three separate initialization strings is to make | |
2846 it easier to define a group of related terminal types with slightly | |
2847 different initializations. Define two or three of the strings in the | |
2848 basic type; then the other types can override one or two of the | |
2849 strings. | |
2850 | |
2851 @item rs | |
2852 @kindex rs | |
2853 String of commands to reset the terminal from any strange mode it may | |
2854 be in. Normally this includes the @samp{is} string (or other commands | |
2855 with the same effects) and more. What would go in the @samp{rs} | |
2856 string but not in the @samp{is} string are annoying or slow commands | |
2857 to bring the terminal back from strange modes that nobody would | |
2858 normally use. | |
2859 | |
2860 @item it | |
2861 @kindex it | |
2862 Numeric value, the initial spacing between hardware tab stop columns | |
2863 when the terminal is powered up. Programs to initialize the terminal | |
2864 can use this to decide whether there is a need to set the tab stops. | |
2865 If the initial width is 8, well and good; if it is not 8, then the | |
2866 tab stops should be set; if they cannot be set, the kernel is told | |
2867 to convert tabs to spaces, and other programs will observe this and do | |
2868 likewise. | |
2869 | |
2870 @item ct | |
2871 @kindex ct | |
2872 String of commands to clear all tab stops. | |
2873 | |
2874 @item st | |
2875 @kindex st | |
2876 String of commands to set tab stop at current cursor column on all | |
2877 lines. | |
2878 @end table | |
2879 | |
2880 @node Pad Specs, Status Line, Initialization, Capabilities | |
2881 @section Padding Capabilities | |
2882 @cindex padding | |
2883 | |
2884 There are two terminal capabilities that exist just to explain the proper | |
2885 way to obey the padding specifications in all the command string | |
2886 capabilities. One, @samp{pc}, must be obeyed by all termcap-using | |
2887 programs. | |
2888 | |
2889 @table @samp | |
2890 @item pb | |
2891 @kindex pb | |
2892 Numeric value, the lowest baud rate at which padding is actually | |
2893 needed. Programs may check this and refrain from doing any padding at | |
2894 lower speeds. | |
2895 | |
2896 @item pc | |
2897 @kindex pc | |
2898 String of commands for padding. The first character of this string is | |
2899 to be used as the pad character, instead of using null characters for | |
2900 padding. If @samp{pc} is not provided, use null characters. Every | |
2901 program that uses termcap must look up this capability and use it to | |
2902 set the variable @code{PC} that is used by @code{tputs}. | |
2903 @xref{Padding}. | |
2904 @end table | |
2905 | |
2906 Some termcap capabilities exist just to specify the amount of padding that | |
2907 the kernel should give to cursor motion commands used in ordinary | |
2908 sequential output. | |
2909 | |
2910 @table @samp | |
2911 @item dC | |
2912 @kindex dC | |
2913 Numeric value, the number of msec of padding needed for the | |
2914 carriage-return character. | |
2915 | |
2916 @item dN | |
2917 @kindex dN | |
2918 Numeric value, the number of msec of padding needed for the newline | |
2919 (linefeed) character. | |
2920 | |
2921 @item dB | |
2922 @kindex dB | |
2923 Numeric value, the number of msec of padding needed for the backspace | |
2924 character. | |
2925 | |
2926 @item dF | |
2927 @kindex dF | |
2928 Numeric value, the number of msec of padding needed for the formfeed | |
2929 character. | |
2930 | |
2931 @item dT | |
2932 @kindex dT | |
2933 Numeric value, the number of msec of padding needed for the tab | |
2934 character. | |
2935 @end table | |
2936 | |
2937 In some systems, the kernel uses the above capabilities; in other systems, | |
2938 the kernel uses the paddings specified in the string capabilities | |
2939 @samp{cr}, @samp{sf}, @samp{le}, @samp{ff} and @samp{ta}. Descriptions of | |
2940 terminals which require such padding should contain the @samp{dC} @dots{} | |
2941 @samp{dT} capabilities and also specify the appropriate padding in the | |
2942 corresponding string capabilities. Since no modern terminals require | |
2943 padding for ordinary sequential output, you probably won't need to do | |
2944 either of these things. | |
2945 | |
2946 @node Status Line, Half-Line, Pad Specs, Capabilities | |
2947 @section Status Line | |
2948 | |
2949 @cindex status line | |
2950 A @dfn{status line} is a line on the terminal that is not used for ordinary | |
2951 display output but instead used for a special message. The intended use is | |
2952 for a continuously updated description of what the user's program is doing, | |
2953 and that is where the name ``status line'' comes from, but in fact it could | |
2954 be used for anything. The distinguishing characteristic of a status line | |
2955 is that ordinary output to the terminal does not affect it; it changes only | |
2956 if the special status line commands of this section are used. | |
2957 | |
2958 @table @samp | |
2959 @item hs | |
2960 @kindex hs | |
2961 Flag whose presence means that the terminal has a status line. If a | |
2962 terminal description specifies that there is a status line, it must | |
2963 provide the @samp{ts} and @samp{fs} capabilities. | |
2964 | |
2965 @item ts | |
2966 @kindex ts | |
2967 String of commands to move the terminal cursor into the status line. | |
2968 Usually these commands must specifically record the old cursor | |
2969 position for the sake of the @samp{fs} string. | |
2970 | |
2971 @item fs | |
2972 @kindex fs | |
2973 String of commands to move the cursor back from the status line to its | |
2974 previous position (outside the status line). | |
2975 | |
2976 @item es | |
2977 @kindex es | |
2978 Flag whose presence means that other display commands work while | |
2979 writing the status line. In other words, one can clear parts of it, | |
2980 insert or delete characters, move the cursor within it using @samp{ch} | |
2981 if there is a @samp{ch} capability, enter and leave standout mode, and | |
2982 so on. | |
2983 | |
2984 @item ds | |
2985 @kindex ds | |
2986 String of commands to disable the display of the status line. This | |
2987 may be absent, if there is no way to disable the status line display. | |
2988 | |
2989 @item ws | |
2990 @kindex ws | |
2991 Numeric value, the width of the status line. If this capability is | |
2992 absent in a terminal that has a status line, it means the status line | |
2993 is the same width as the other lines. | |
2994 | |
2995 Note that the value of @samp{ws} is sometimes as small as 8. | |
2996 @end table | |
2997 | |
2998 @node Half-Line, Printer, Status Line, Capabilities | |
2999 @section Half-Line Motion | |
3000 | |
3001 Some terminals have commands for moving the cursor vertically by half-lines, | |
3002 useful for outputting subscripts and superscripts. Mostly it is hardcopy | |
3003 terminals that have such features. | |
3004 | |
3005 @table @samp | |
3006 @item hu | |
3007 @kindex hu | |
3008 String of commands to move the cursor up half a line. If the terminal | |
3009 is a display, it is your responsibility to avoid moving up past the | |
3010 top line; however, most likely the terminal that supports this is a | |
3011 hardcopy terminal and there is nothing to be concerned about. | |
3012 | |
3013 @item hd | |
3014 @kindex hd | |
3015 String of commands to move the cursor down half a line. If the | |
3016 terminal is a display, it is your responsibility to avoid moving down | |
3017 past the bottom line, etc. | |
3018 @end table | |
3019 | |
3020 @node Printer,, Half-Line, Capabilities | |
3021 @section Controlling Printers Attached to Terminals | |
3022 @cindex printer | |
3023 | |
3024 Some terminals have attached hardcopy printer ports. They may be able to | |
3025 copy the screen contents to the printer; they may also be able to redirect | |
3026 output to the printer. Termcap does not have anything to tell the program | |
3027 whether the redirected output appears also on the screen; it does on some | |
3028 terminals but not all. | |
3029 | |
3030 @table @samp | |
3031 @item ps | |
3032 @kindex ps | |
3033 String of commands to cause the contents of the screen to be printed. | |
3034 If it is absent, the screen contents cannot be printed. | |
3035 | |
3036 @item po | |
3037 @kindex po | |
3038 String of commands to redirect further output to the printer. | |
3039 | |
3040 @item pf | |
3041 @kindex pf | |
3042 String of commands to terminate redirection of output to the printer. | |
3043 This capability must be present in the description if @samp{po} is. | |
3044 | |
3045 @item pO | |
3046 @kindex pO | |
3047 String of commands to redirect output to the printer for next @var{n} | |
3048 characters of output, regardless of what they are. Redirection will | |
3049 end automatically after @var{n} characters of further output. Until | |
3050 then, nothing that is output can end redirection, not even the | |
3051 @samp{pf} string if there is one. The number @var{n} should not be | |
3052 more than 255. | |
3053 | |
3054 One use of this capability is to send non-text byte sequences (such as | |
3055 bit-maps) to the printer. | |
3056 @end table | |
3057 | |
3058 Most terminals with printers do not support all of @samp{ps}, @samp{po} and | |
3059 @samp{pO}; any one or two of them may be supported. To make a program that | |
3060 can send output to all kinds of printers, it is necessary to check for all | |
3061 three of these capabilities, choose the most convenient of the ones that | |
3062 are provided, and use it in its own appropriate fashion. | |
3063 | |
3064 @node Summary, Var Index, Capabilities, Top | |
3065 @chapter Summary of Capability Names | |
3066 | |
3067 Here are all the terminal capability names in alphabetical order | |
3068 with a brief description of each. For cross references to their definitions, | |
3069 see the index of capability names (@pxref{Cap Index}). | |
3070 | |
3071 @table @samp | |
3072 @item ae | |
3073 String to turn off alternate character set mode. | |
3074 @item al | |
3075 String to insert a blank line before the cursor. | |
3076 @item AL | |
3077 String to insert @var{n} blank lines before the cursor. | |
3078 @item am | |
3079 Flag: output to last column wraps cursor to next line. | |
3080 @item as | |
3081 String to turn on alternate character set mode.like. | |
3082 @item bc | |
3083 Very obsolete alternative name for the @samp{le} capability. | |
3084 @item bl | |
3085 String to sound the bell. | |
3086 @item bs | |
3087 Obsolete flag: ASCII backspace may be used for leftward motion. | |
3088 @item bt | |
3089 String to move the cursor left to the previous hardware tab stop column. | |
3090 @item bw | |
3091 Flag: @samp{le} at left margin wraps to end of previous line. | |
3092 @item CC | |
3093 String to change terminal's command character. | |
3094 @item cd | |
3095 String to clear the line the cursor is on, and following lines. | |
3096 @item ce | |
3097 String to clear from the cursor to the end of the line. | |
3098 @item ch | |
3099 String to position the cursor at column @var{c} in the same line. | |
3100 @item cl | |
3101 String to clear the entire screen and put cursor at upper left corner. | |
3102 @item cm | |
3103 String to position the cursor at line @var{l}, column @var{c}. | |
3104 @item CM | |
3105 String to position the cursor at line @var{l}, column | |
3106 @var{c}, relative to display memory. | |
3107 @item co | |
3108 Number: width of the screen. | |
3109 @item cr | |
3110 String to move cursor sideways to left margin. | |
3111 @item cs | |
3112 String to set the scroll region. | |
3113 @item cS | |
3114 Alternate form of string to set the scroll region. | |
3115 @item ct | |
3116 String to clear all tab stops. | |
3117 @item cv | |
3118 String to position the cursor at line @var{l} in the same column. | |
3119 @item da | |
3120 Flag: data scrolled off top of screen may be scrolled back. | |
3121 @item db | |
3122 Flag: data scrolled off bottom of screen may be scrolled back. | |
3123 @item dB | |
3124 Obsolete number: msec of padding needed for the backspace character. | |
3125 @item dc | |
3126 String to delete one character position at the cursor. | |
3127 @item dC | |
3128 Obsolete number: msec of padding needed for the carriage-return character. | |
3129 @item DC | |
3130 String to delete @var{n} characters starting at the cursor. | |
3131 @item dF | |
3132 Obsolete number: msec of padding needed for the formfeed character. | |
3133 @item dl | |
3134 String to delete the line the cursor is on. | |
3135 @item DL | |
3136 String to delete @var{n} lines starting with the cursor's line. | |
3137 @item dm | |
3138 String to enter delete mode. | |
3139 @item dN | |
3140 Obsolete number: msec of padding needed for the newline character. | |
3141 @item do | |
3142 String to move the cursor vertically down one line. | |
3143 @item DO | |
3144 String to move cursor vertically down @var{n} lines. | |
3145 @item ds | |
3146 String to disable the display of the status line. | |
3147 @item dT | |
3148 Obsolete number: msec of padding needed for the tab character. | |
3149 @item ec | |
3150 String of commands to clear @var{n} characters at cursor. | |
3151 @item ed | |
3152 String to exit delete mode. | |
3153 @item ei | |
3154 String to leave insert mode. | |
3155 @item eo | |
3156 Flag: output of a space can erase an overstrike. | |
3157 @item es | |
3158 Flag: other display commands work while writing the status line. | |
3159 @item ff | |
3160 String to advance to the next page, for a hardcopy terminal. | |
3161 @item fs | |
3162 String to move the cursor back from the status line to its | |
3163 previous position (outside the status line). | |
3164 @item gn | |
3165 Flag: this terminal type is generic, not real. | |
3166 @item hc | |
3167 Flag: hardcopy terminal. | |
3168 @item hd | |
3169 String to move the cursor down half a line. | |
3170 @item ho | |
3171 String to position cursor at upper left corner. | |
3172 @item hs | |
3173 Flag: the terminal has a status line. | |
3174 @item hu | |
3175 String to move the cursor up half a line. | |
3176 @item hz | |
3177 Flag: terminal cannot accept @samp{~} as output. | |
3178 @item i1 | |
3179 String to initialize the terminal for each login session. | |
3180 @item i3 | |
3181 String to initialize the terminal for each login session. | |
3182 @item ic | |
3183 String to insert one character position at the cursor. | |
3184 @item IC | |
3185 String to insert @var{n} character positions at the cursor. | |
3186 @item if | |
3187 String naming a file of commands to initialize the terminal. | |
3188 @item im | |
3189 String to enter insert mode. | |
3190 @item in | |
3191 Flag: outputting a space is different from moving over empty positions. | |
3192 @item ip | |
3193 String to output following an inserted character in insert mode. | |
3194 @item is | |
3195 String to initialize the terminal for each login session. | |
3196 @item it | |
3197 Number: initial spacing between hardware tab stop columns. | |
3198 @item k0 | |
3199 String of input sent by function key 0 or 10. | |
3200 @item k1 @dots{} k9 | |
3201 Strings of input sent by function keys 1 through 9. | |
3202 @item K1 @dots{} K5 | |
3203 Strings sent by the five other keys in 3-by-3 array with arrows. | |
3204 @item ka | |
3205 String of input sent by the ``clear all tabs'' key. | |
3206 @item kA | |
3207 String of input sent by the ``insert line'' key. | |
3208 @item kb | |
3209 String of input sent by the ``backspace'' key. | |
3210 @item kC | |
3211 String of input sent by the ``clear screen'' key. | |
3212 @item kd | |
3213 String of input sent by typing the down-arrow key. | |
3214 @item kD | |
3215 String of input sent by the ``delete character'' key. | |
3216 @item ke | |
3217 String to make the function keys work locally. | |
3218 @item kE | |
3219 String of input sent by the ``clear to end of line'' key. | |
3220 @item kF | |
3221 String of input sent by the ``scroll forward'' key. | |
3222 @item kh | |
3223 String of input sent by typing the ``home-position'' key. | |
3224 @item kH | |
3225 String of input sent by the ``home down'' key. | |
3226 @item kI | |
3227 String of input sent by the ``insert character'' or ``enter | |
3228 insert mode'' key. | |
3229 @item kl | |
3230 String of input sent by typing the left-arrow key. | |
3231 @item kL | |
3232 String of input sent by the ``delete line'' key. | |
3233 @item km | |
3234 Flag: the terminal has a Meta key. | |
3235 @item kM | |
3236 String of input sent by the ``exit insert mode'' key. | |
3237 @item kn | |
3238 Numeric value, the number of numbered function keys. | |
3239 @item kN | |
3240 String of input sent by the ``next page'' key. | |
3241 @item ko | |
3242 Very obsolete string listing the terminal's named function keys. | |
3243 @item kP | |
3244 String of input sent by the ``previous page'' key. | |
3245 @item kr | |
3246 String of input sent by typing the right-arrow key. | |
3247 @item kR | |
3248 String of input sent by the ``scroll reverse'' key. | |
3249 @item ks | |
3250 String to make the function keys transmit. | |
3251 @item kS | |
3252 String of input sent by the ``clear to end of screen'' key. | |
3253 @item kt | |
3254 String of input sent by the ``clear tab stop this column'' key. | |
3255 @item kT | |
3256 String of input sent by the ``set tab stop in this column'' key. | |
3257 @item ku | |
3258 String of input sent by typing the up-arrow key. | |
3259 @item l0 | |
3260 String on keyboard labelling function key 0 or 10. | |
3261 @item l1 @dots{} l9 | |
3262 Strings on keyboard labelling function keys 1 through 9. | |
3263 @item le | |
3264 String to move the cursor left one column. | |
3265 @item LE | |
3266 String to move cursor left @var{n} columns. | |
3267 @item li | |
3268 Number: height of the screen. | |
3269 @item ll | |
3270 String to position cursor at lower left corner. | |
3271 @item lm | |
3272 Number: lines of display memory. | |
3273 @item mb | |
3274 String to enter blinking mode. | |
3275 @item md | |
3276 String to enter double-bright mode. | |
3277 @item me | |
3278 String to turn off all appearance modes | |
3279 @item mh | |
3280 String to enter half-bright mode. | |
3281 @item mi | |
3282 Flag: cursor motion in insert mode is safe. | |
3283 @item mk | |
3284 String to enter invisible mode. | |
3285 @item mm | |
3286 String to enable the functioning of the Meta key. | |
3287 @item mo | |
3288 String to disable the functioning of the Meta key. | |
3289 @item mp | |
3290 String to enter protected mode. | |
3291 @item mr | |
3292 String to enter reverse-video mode. | |
3293 @item ms | |
3294 Flag: cursor motion in standout mode is safe. | |
3295 @item nc | |
3296 Obsolete flag: do not use ASCII carriage-return on this terminal. | |
3297 @item nd | |
3298 String to move the cursor right one column. | |
3299 @item nl | |
3300 Obsolete alternative name for the @samp{do} and @samp{sf} capabilities. | |
3301 @item ns | |
3302 Flag: the terminal does not normally scroll for sequential output. | |
3303 @item nw | |
3304 String to move to start of next line, possibly clearing rest of old line. | |
3305 @item os | |
3306 Flag: terminal can overstrike. | |
3307 @item pb | |
3308 Number: the lowest baud rate at which padding is actually needed. | |
3309 @item pc | |
3310 String containing character for padding. | |
3311 @item pf | |
3312 String to terminate redirection of output to the printer. | |
3313 @item po | |
3314 String to redirect further output to the printer. | |
3315 @item pO | |
3316 String to redirect @var{n} characters ofoutput to the printer. | |
3317 @item ps | |
3318 String to print the screen on the attached printer. | |
3319 @item rc | |
3320 String to move to last saved cursor position. | |
3321 @item RI | |
3322 String to move cursor right @var{n} columns. | |
3323 @item rp | |
3324 String to output character @var{c} repeated @var{n} times. | |
3325 @item rs | |
3326 String to reset the terminal from any strange modes. | |
3327 @item sa | |
3328 String to turn on an arbitrary combination of appearance modes. | |
3329 @item sc | |
3330 String to save the current cursor position. | |
3331 @item se | |
3332 String to leave standout mode. | |
3333 @item sf | |
3334 String to scroll the screen one line up. | |
3335 @item SF | |
3336 String to scroll the screen @var{n} lines up. | |
3337 @item sg | |
3338 Number: width of magic standout cookie. Absent if magic cookies are | |
3339 not used. | |
3340 @item so | |
3341 String to enter standout mode. | |
3342 @item sr | |
3343 String to scroll the screen one line down. | |
3344 @item SR | |
3345 String to scroll the screen @var{n} line down. | |
3346 @item st | |
3347 String to set tab stop at current cursor column on all lines. | |
3348 programs. | |
3349 @item ta | |
3350 String to move the cursor right to the next hardware tab stop column. | |
3351 @item te | |
3352 String to return terminal to settings for sequential output. | |
3353 @item ti | |
3354 String to initialize terminal for random cursor motion. | |
3355 @item ts | |
3356 String to move the terminal cursor into the status line. | |
3357 @item uc | |
3358 String to underline one character and move cursor right. | |
3359 @item ue | |
3360 String to turn off underline mode | |
3361 @item ug | |
3362 Number: width of underlining magic cookie. Absent if underlining | |
3363 doesn't use magic cookies. | |
3364 @item ul | |
3365 Flag: underline by overstriking with an underscore. | |
3366 @item up | |
3367 String to move the cursor vertically up one line. | |
3368 @item UP | |
3369 String to move cursor vertically up @var{n} lines. | |
3370 @item us | |
3371 String to turn on underline mode | |
3372 @item vb | |
3373 String to make the screen flash. | |
3374 @item ve | |
3375 String to return the cursor to normal. | |
3376 @item vi | |
3377 String to make the cursor invisible. | |
3378 @item vs | |
3379 String to enhance the cursor. | |
3380 @item wi | |
3381 String to set the terminal output screen window. | |
3382 @item ws | |
3383 Number: the width of the status line. | |
3384 @item xb | |
3385 Flag: superbee terminal. | |
3386 @item xn | |
3387 Flag: cursor wraps in a strange way. | |
3388 @item xs | |
3389 Flag: clearing a line is the only way to clear the appearance modes of | |
3390 positions in that line (or, only way to remove magic cookies on that | |
3391 line). | |
3392 @item xt | |
3393 Flag: Teleray 1061; several strange characteristics. | |
3394 @end table | |
3395 | |
3396 @node Var Index, Cap Index, Summary, Top | |
3397 @unnumbered Variable and Function Index | |
3398 | |
3399 @printindex fn | |
3400 | |
3401 @node Cap Index, Index, Var Index, Top | |
3402 @unnumbered Capability Index | |
3403 | |
3404 @printindex ky | |
3405 | |
3406 @node Index,, Cap Index, Top | |
3407 @unnumbered Concept Index | |
3408 | |
3409 @printindex cp | |
3410 | |
3411 @contents | |
3412 @bye |