|
|
1.1 ! root 1: \input texinfo @c -*-texinfo-*- ! 2: @setfilename ../info/termcap ! 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 Second Edition ! 39: @sp 1 ! 40: @center August 1992 ! 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 erases a character ! 1305: position even if the terminal supports overstriking. If this flag is ! 1306: not present and overstriking is supported, output of a space has no ! 1307: effect except to move the cursor. ! 1308: ! 1309: (On terminals that do not support overstriking, you can always assume ! 1310: that outputting a space at a position erases whatever character was ! 1311: previously displayed there.) ! 1312: ! 1313: @item gn ! 1314: @kindex gn ! 1315: @cindex generic terminal type ! 1316: Flag whose presence means that this terminal type is a generic type ! 1317: which does not really describe any particular terminal. Generic types ! 1318: are intended for use as the default type assigned when the user ! 1319: connects to the system, with the intention that the user should ! 1320: specify what type he really has. One example of a generic type ! 1321: is the type @samp{network}. ! 1322: ! 1323: Since the generic type cannot say how to do anything interesting with ! 1324: the terminal, termcap-using programs will always find that the ! 1325: terminal is too weak to be supported if the user has failed to specify ! 1326: a real terminal type in place of the generic one. The @samp{gn} flag ! 1327: directs these programs to use a different error message: ``You have ! 1328: not specified your real terminal type'', rather than ``Your terminal ! 1329: is not powerful enough to be used''. ! 1330: ! 1331: @item hc ! 1332: @kindex hc ! 1333: Flag whose presence means this is a hardcopy terminal. ! 1334: ! 1335: @item rp ! 1336: @kindex rp ! 1337: @cindex repeat output ! 1338: String of commands to output a graphic character @var{c}, repeated @var{n} ! 1339: times. The first parameter value is the ASCII code for the desired ! 1340: character, and the second parameter is the number of times to repeat the ! 1341: character. Often this command requires padding proportional to the ! 1342: number of times the character is repeated. This effect can be had by ! 1343: using parameter arithmetic with @samp{%}-sequences to compute the ! 1344: amount of padding, then generating the result as a number at the front ! 1345: of the string so that @code{tputs} will treat it as padding. ! 1346: ! 1347: @item hz ! 1348: @kindex hz ! 1349: Flag whose presence means that the ASCII character @samp{~} cannot be ! 1350: output on this terminal because it is used for display commands. ! 1351: ! 1352: Programs handle this flag by checking all text to be output and ! 1353: replacing each @samp{~} with some other character(s). If this is not ! 1354: done, the screen will be thoroughly garbled. ! 1355: ! 1356: The old Hazeltine terminals that required such treatment are probably ! 1357: very rare today, so you might as well not bother to support this flag. ! 1358: ! 1359: @item CC ! 1360: @kindex CC ! 1361: @cindex command character ! 1362: String whose presence means the terminal has a settable command ! 1363: character. The value of the string is the default command character ! 1364: (which is usually @key{ESC}). ! 1365: ! 1366: All the strings of commands in the terminal description should be ! 1367: written to use the default command character. If you are writing an ! 1368: application program that changes the command character, use the ! 1369: @samp{CC} capability to figure out how to translate all the display ! 1370: commands to work with the new command character. ! 1371: ! 1372: Most programs have no reason to look at the @samp{CC} capability. ! 1373: ! 1374: @item xb ! 1375: @kindex xb ! 1376: @cindex Superbee ! 1377: Flag whose presence identifies Superbee terminals which are unable to ! 1378: transmit the characters @key{ESC} and @kbd{Control-C}. Programs which ! 1379: support this flag are supposed to check the input for the code sequences ! 1380: sent by the @key{F1} and @key{F2} keys, and pretend that @key{ESC} ! 1381: or @kbd{Control-C} (respectively) had been read. But this flag is ! 1382: obsolete, and not worth supporting. ! 1383: @end table ! 1384: ! 1385: @node Screen Size, Cursor Motion, Basic, Capabilities ! 1386: @section Screen Size ! 1387: @cindex screen size ! 1388: ! 1389: A terminal description has two capabilities, @samp{co} and @samp{li}, ! 1390: that describe the screen size in columns and lines. But there is more ! 1391: to the question of screen size than this. ! 1392: ! 1393: On some operating systems the ``screen'' is really a window and the ! 1394: effective width can vary. On some of these systems, @code{tgetnum} ! 1395: uses the actual width of the window to decide what value to return for ! 1396: the @samp{co} capability, overriding what is actually written in the ! 1397: terminal description. On other systems, it is up to the application ! 1398: program to check the actual window width using a system call. For ! 1399: example, on BSD 4.3 systems, the system call @code{ioctl} with code ! 1400: @code{TIOCGWINSZ} will tell you the current screen size. ! 1401: ! 1402: On all window systems, termcap is powerless to advise the application ! 1403: program if the user resizes the window. Application programs must ! 1404: deal with this possibility in a system-dependent fashion. On some ! 1405: systems the C shell handles part of the problem by detecting changes ! 1406: in window size and setting the @code{TERMCAP} environment variable ! 1407: appropriately. This takes care of application programs that are ! 1408: started subsequently. It does not help application programs already ! 1409: running. ! 1410: ! 1411: On some systems, including BSD 4.3, all programs using a terminal get ! 1412: a signal named @code{SIGWINCH} whenever the screen size changes. ! 1413: Programs that use termcap should handle this signal by using ! 1414: @code{ioctl TIOCGWINSZ} to learn the new screen size. ! 1415: ! 1416: @table @samp ! 1417: @item co ! 1418: @kindex co ! 1419: @cindex screen size ! 1420: Numeric value, the width of the screen in character positions. Even ! 1421: hardcopy terminals normally have a @samp{co} capability. ! 1422: ! 1423: @item li ! 1424: @kindex li ! 1425: Numeric value, the height of the screen in lines. ! 1426: @end table ! 1427: ! 1428: @node Cursor Motion, Wrapping, Screen Size, Capabilities ! 1429: @section Cursor Motion ! 1430: @cindex cursor motion ! 1431: ! 1432: Termcap assumes that the terminal has a @dfn{cursor}, a spot on the screen ! 1433: where a visible mark is displayed, and that most display commands take ! 1434: effect at the position of the cursor. It follows that moving the cursor ! 1435: to a specified location is very important. ! 1436: ! 1437: There are many terminal capabilities for different cursor motion ! 1438: operations. A terminal description should define as many as possible, but ! 1439: most programs do not need to use most of them. One capability, @samp{cm}, ! 1440: moves the cursor to an arbitrary place on the screen; this by itself is ! 1441: sufficient for any application as long as there is no need to support ! 1442: hardcopy terminals or certain old, weak displays that have only relative ! 1443: motion commands. Use of other cursor motion capabilities is an ! 1444: optimization, enabling the program to output fewer characters in some ! 1445: common cases. ! 1446: ! 1447: If you plan to use the relative cursor motion commands in an application ! 1448: program, you must know what the starting cursor position is. To do this, ! 1449: you must keep track of the cursor position and update the records each ! 1450: time anything is output to the terminal, including graphic characters. ! 1451: In addition, it is necessary to know whether the terminal wraps after ! 1452: writing in the rightmost column. @xref{Wrapping}. ! 1453: ! 1454: One other motion capability needs special mention: @samp{nw} moves the ! 1455: cursor to the beginning of the following line, perhaps clearing all the ! 1456: starting line after the cursor, or perhaps not clearing at all. This ! 1457: capability is a least common denominator that is probably supported even by ! 1458: terminals that cannot do most other things such as @samp{cm} or @samp{do}. ! 1459: Even hardcopy terminals can support @samp{nw}. ! 1460: ! 1461: @table @asis ! 1462: @item @samp{cm} ! 1463: @kindex cm ! 1464: String of commands to position the cursor at line @var{l}, column @var{c}. ! 1465: Both parameters are origin-zero, and are defined relative to the ! 1466: screen, not relative to display memory. ! 1467: ! 1468: All display terminals except a few very obsolete ones support @samp{cm}, ! 1469: so it is acceptable for an application program to refuse to operate on ! 1470: terminals lacking @samp{cm}. ! 1471: ! 1472: @item @samp{ho} ! 1473: @kindex ho ! 1474: @cindex home position ! 1475: String of commands to move the cursor to the upper left corner of the ! 1476: screen (this position is called the @dfn{home position}). In ! 1477: terminals where the upper left corner of the screen is not the same as ! 1478: the beginning of display memory, this command must go to the upper ! 1479: left corner of the screen, not the beginning of display memory. ! 1480: ! 1481: Every display terminal supports this capability, and many application ! 1482: programs refuse to operate if the @samp{ho} capability is missing. ! 1483: ! 1484: @item @samp{ll} ! 1485: @kindex ll ! 1486: String of commands to move the cursor to the lower left corner of the ! 1487: screen. On some terminals, moving up from home position does this, ! 1488: but programs should never assume that will work. Just output the ! 1489: @samp{ll} string (if it is provided); if moving to home position and ! 1490: then moving up is the best way to get there, the @samp{ll} command ! 1491: will do that. ! 1492: ! 1493: @item @samp{cr} ! 1494: @kindex cr ! 1495: String of commands to move the cursor to the beginning of the line it ! 1496: is on. If this capability is not specified, many programs assume ! 1497: they can use the ASCII carriage return character for this. ! 1498: ! 1499: @item @samp{le} ! 1500: @kindex le ! 1501: String of commands to move the cursor left one column. Unless the ! 1502: @samp{bw} flag capability is specified, the effect is undefined if the ! 1503: cursor is at the left margin; do not use this command there. If ! 1504: @samp{bw} is present, this command may be used at the left margin, and ! 1505: it wraps the cursor to the last column of the preceding line. ! 1506: ! 1507: @item @samp{nd} ! 1508: @kindex nd ! 1509: String of commands to move the cursor right one column. The effect is ! 1510: undefined if the cursor is at the right margin; do not use this ! 1511: command there, not even if @samp{am} is present. ! 1512: ! 1513: @item @samp{up} ! 1514: @kindex up ! 1515: String of commands to move the cursor vertically up one line. The ! 1516: effect of sending this string when on the top line is undefined; ! 1517: programs should never use it that way. ! 1518: ! 1519: @item @samp{do} ! 1520: @kindex do ! 1521: String of commands to move the cursor vertically down one line. The ! 1522: effect of sending this string when on the bottom line is undefined; ! 1523: programs should never use it that way. ! 1524: ! 1525: The original idea was that this string would not contain a newline ! 1526: character and therefore could be used without disabling the kernel's usual ! 1527: habit of converting of newline into a carriage-return newline sequence. ! 1528: But many terminal descriptions do use newline in the @samp{do} string, so ! 1529: this is not possible; a program which sends the @samp{do} string must ! 1530: disable output conversion in the kernel (@pxref{Initialize}). ! 1531: ! 1532: @item @samp{bw} ! 1533: @kindex bw ! 1534: Flag whose presence says that @samp{le} may be used in column zero ! 1535: to move to the last column of the preceding line. If this flag ! 1536: is not present, @samp{le} should not be used in column zero. ! 1537: ! 1538: @item @samp{nw} ! 1539: @kindex nw ! 1540: String of commands to move the cursor to start of next line, possibly ! 1541: clearing rest of line (following the cursor) before moving. ! 1542: ! 1543: @item @samp{DO}, @samp{UP}, @samp{LE}, @samp{RI} ! 1544: @kindex DO ! 1545: @kindex LE ! 1546: @kindex RI ! 1547: @kindex UP ! 1548: Strings of commands to move the cursor @var{n} lines down vertically, ! 1549: up vertically, or @var{n} columns left or right. Do not attempt to ! 1550: move past any edge of the screen with these commands; the effect of ! 1551: trying that is undefined. Only a few terminal descriptions provide ! 1552: these commands, and most programs do not use them. ! 1553: ! 1554: @item @samp{CM} ! 1555: @kindex CM ! 1556: String of commands to position the cursor at line @var{l}, column ! 1557: @var{c}, relative to display memory. Both parameters are origin-zero. ! 1558: This capability is present only in terminals where there is a ! 1559: difference between screen-relative and memory-relative addressing, and ! 1560: not even in all such terminals. ! 1561: ! 1562: @item @samp{ch} ! 1563: @kindex ch ! 1564: String of commands to position the cursor at column @var{c} in the ! 1565: same line it is on. This is a special case of @samp{cm} in which the ! 1566: vertical position is not changed. The @samp{ch} capability is ! 1567: provided only when it is faster to output than @samp{cm} would be in ! 1568: this special case. Programs should not assume most display terminals ! 1569: have @samp{ch}. ! 1570: ! 1571: @item @samp{cv} ! 1572: @kindex cv ! 1573: String of commands to position the cursor at line @var{l} in the same ! 1574: column. This is a special case of @samp{cm} in which the horizontal ! 1575: position is not changed. The @samp{cv} capability is provided only ! 1576: when it is faster to output than @samp{cm} would be in this special ! 1577: case. Programs should not assume most display terminals have ! 1578: @samp{cv}. ! 1579: ! 1580: @item @samp{sc} ! 1581: @kindex sc ! 1582: String of commands to make the terminal save the current cursor ! 1583: position. Only the last saved position can be used. If this ! 1584: capability is present, @samp{rc} should be provided also. Most ! 1585: terminals have neither. ! 1586: ! 1587: @item @samp{rc} ! 1588: @kindex rc ! 1589: String of commands to make the terminal restore the last saved cursor ! 1590: position. If this capability is present, @samp{sc} should be provided ! 1591: also. Most terminals have neither. ! 1592: ! 1593: @item @samp{ff} ! 1594: @kindex ff ! 1595: String of commands to advance to the next page, for a hardcopy ! 1596: terminal. ! 1597: ! 1598: @item @samp{ta} ! 1599: @kindex ta ! 1600: String of commands to move the cursor right to the next hardware tab ! 1601: stop column. Missing if the terminal does not have any kind of ! 1602: hardware tabs. Do not send this command if the kernel's terminal ! 1603: modes say that the kernel is expanding tabs into spaces. ! 1604: ! 1605: @item @samp{bt} ! 1606: @kindex bt ! 1607: String of commands to move the cursor left to the previous hardware ! 1608: tab stop column. Missing if the terminal has no such ability; many ! 1609: terminals do not. Do not send this command if the kernel's terminal ! 1610: modes say that the kernel is expanding tabs into spaces. ! 1611: @end table ! 1612: ! 1613: The following obsolete capabilities should be included in terminal ! 1614: descriptions when appropriate, but should not be looked at by new programs. ! 1615: ! 1616: @table @samp ! 1617: @item nc ! 1618: @kindex nc ! 1619: Flag whose presence means the terminal does not support the ASCII ! 1620: carriage return character as @samp{cr}. This flag is needed because ! 1621: old programs assume, when the @samp{cr} capability is missing, that ! 1622: ASCII carriage return can be used for the purpose. We use @samp{nc} ! 1623: to tell the old programs that carriage return may not be used. ! 1624: ! 1625: New programs should not assume any default for @samp{cr}, so they need ! 1626: not look at @samp{nc}. However, descriptions should contain @samp{nc} ! 1627: whenever they do not contain @samp{cr}. ! 1628: ! 1629: @item xt ! 1630: @kindex xt ! 1631: Flag whose presence means that the ASCII tab character may not be used ! 1632: for cursor motion. This flag exists because old programs assume, when ! 1633: the @samp{ta} capability is missing, that ASCII tab can be used for ! 1634: the purpose. We use @samp{xt} to tell the old programs not to use tab. ! 1635: ! 1636: New programs should not assume any default for @samp{ta}, so they need ! 1637: not look at @samp{xt} in connection with cursor motion. Note that ! 1638: @samp{xt} also has implications for standout mode (@pxref{Standout}). ! 1639: It is obsolete in regard to cursor motion but not in regard to ! 1640: standout. ! 1641: ! 1642: In fact, @samp{xt} means that the terminal is a Teleray 1061. ! 1643: ! 1644: @item bc ! 1645: @kindex bc ! 1646: Very obsolete alternative name for the @samp{le} capability. ! 1647: ! 1648: @item bs ! 1649: @kindex bs ! 1650: Flag whose presence means that the ASCII character backspace may be ! 1651: used to move the cursor left. Obsolete; look at @samp{le} instead. ! 1652: ! 1653: @item nl ! 1654: @kindex nl ! 1655: Obsolete capability which is a string that can either be used to move ! 1656: the cursor down or to scroll. The same string must scroll when used ! 1657: on the bottom line and move the cursor when used on any other line. ! 1658: New programs should use @samp{do} or @samp{sf}, and ignore @samp{nl}. ! 1659: ! 1660: If there is no @samp{nl} capability, some old programs assume they can ! 1661: use the newline character for this purpose. These programs follow a ! 1662: bad practice, but because they exist, it is still desirable to define ! 1663: the @samp{nl} capability in a terminal description if the best way to ! 1664: move down is @emph{not} a newline. ! 1665: @end table ! 1666: ! 1667: @node Wrapping, Scrolling, Cursor Motion, Capabilities ! 1668: @section Wrapping ! 1669: @cindex wrapping ! 1670: ! 1671: @dfn{Wrapping} means moving the cursor from the right margin to the left ! 1672: margin of the following line. Some terminals wrap automatically when a ! 1673: graphic character is output in the last column, while others do not. Most ! 1674: application programs that use termcap need to know whether the terminal ! 1675: wraps. There are two special flag capabilities to describe what the ! 1676: terminal does when a graphic character is output in the last column. ! 1677: ! 1678: @table @samp ! 1679: @item am ! 1680: @kindex am ! 1681: Flag whose presence means that writing a character in the last column ! 1682: causes the cursor to wrap to the beginning of the next line. ! 1683: ! 1684: If @samp{am} is not present, writing in the last column leaves the ! 1685: cursor at the place where the character was written. ! 1686: ! 1687: Writing in the last column of the last line should be avoided on ! 1688: terminals with @samp{am}, as it may or may not cause scrolling to ! 1689: occur (@pxref{Scrolling}). Scrolling is surely not what you would ! 1690: intend. ! 1691: ! 1692: If your program needs to check the @samp{am} flag, then it also needs ! 1693: to check the @samp{xn} flag which indicates that wrapping happens in a ! 1694: strange way. Many common terminals have the @samp{xn} flag. ! 1695: ! 1696: @item xn ! 1697: @kindex xn ! 1698: Flag whose presence means that the cursor wraps in a strange way. At ! 1699: least two distinct kinds of strange behavior are known; the termcap ! 1700: data base does not contain anything to distinguish the two. ! 1701: ! 1702: On Concept-100 terminals, output in the last column wraps the cursor ! 1703: almost like an ordinary @samp{am} terminal. But if the next thing ! 1704: output is a newline, it is ignored. ! 1705: ! 1706: DEC VT-100 terminals (when the wrap switch is on) do a different ! 1707: strange thing: the cursor wraps only if the next thing output is ! 1708: another graphic character. In fact, the wrap occurs when the ! 1709: following graphic character is received by the terminal, before the ! 1710: character is placed on the screen. ! 1711: ! 1712: On both of these terminals, after writing in the last column a ! 1713: following graphic character will be displayed in the first column of ! 1714: the following line. But the effect of relative cursor motion ! 1715: characters such as newline or backspace at such a time depends on the ! 1716: terminal. The effect of erase or scrolling commands also depends on ! 1717: the terminal. You can't assume anything about what they will do on a ! 1718: terminal that has @samp{xn}. So, to be safe, you should never do ! 1719: these things at such a time on such a terminal. ! 1720: ! 1721: To be sure of reliable results on a terminal which has the @samp{xn} ! 1722: flag, output a @samp{cm} absolute positioning command after writing in ! 1723: the last column. Another safe thing to do is to output carriage-return ! 1724: newline, which will leave the cursor at the beginning of the following ! 1725: line. ! 1726: @end table ! 1727: ! 1728: @node Scrolling, Windows, Wrapping, Capabilities ! 1729: @section Scrolling ! 1730: @cindex scrolling ! 1731: ! 1732: @dfn{Scrolling} means moving the contents of the screen up or down one or ! 1733: more lines. Moving the contents up is @dfn{forward scrolling}; moving them ! 1734: down is @dfn{reverse scrolling}. ! 1735: ! 1736: Scrolling happens after each line of output during ordinary output on most ! 1737: display terminals. But in an application program that uses termcap for ! 1738: random-access output, scrolling happens only when explicitly requested with ! 1739: the commands in this section. ! 1740: ! 1741: Some terminals have a @dfn{scroll region} feature. This lets you limit ! 1742: the effect of scrolling to a specified range of lines. Lines outside the ! 1743: range are unaffected when scrolling happens. The scroll region feature ! 1744: is available if either @samp{cs} or @samp{cS} is present. ! 1745: ! 1746: @table @samp ! 1747: @item sf ! 1748: @kindex sf ! 1749: String of commands to scroll the screen one line up, assuming it is ! 1750: output with the cursor at the beginning of the bottom line. ! 1751: ! 1752: @item sr ! 1753: @kindex sr ! 1754: String of commands to scroll the screen one line down, assuming it is ! 1755: output with the cursor at the beginning of the top line. ! 1756: ! 1757: @item SF ! 1758: @kindex SF ! 1759: String of commands to scroll the screen @var{n} lines up, assuming it ! 1760: is output with the cursor at the beginning of the bottom line. ! 1761: ! 1762: @item SR ! 1763: @kindex SR ! 1764: String of commands to scroll the screen @var{n} line down, assuming it ! 1765: is output with the cursor at the beginning of the top line. ! 1766: ! 1767: @item cs ! 1768: @kindex cs ! 1769: String of commands to set the scroll region. This command takes two ! 1770: parameters, @var{start} and @var{end}, which are the line numbers ! 1771: (origin-zero) of the first line to include in the scroll region and of ! 1772: the last line to include in it. When a scroll region is set, ! 1773: scrolling is limited to the specified range of lines; lines outside ! 1774: the range are not affected by scroll commands. ! 1775: ! 1776: Do not try to move the cursor outside the scroll region. The region ! 1777: remains set until explicitly removed. To remove the scroll region, ! 1778: use another @samp{cs} command specifying the full height of the ! 1779: screen. ! 1780: ! 1781: The cursor position is undefined after the @samp{cs} command is set, ! 1782: so position the cursor with @samp{cm} immediately afterward. ! 1783: ! 1784: @item cS ! 1785: @kindex cS ! 1786: String of commands to set the scroll region using parameters in ! 1787: different form. The effect is the same as if @samp{cs} were used. ! 1788: Four parameters are required: ! 1789: ! 1790: @enumerate ! 1791: @item ! 1792: Total number of lines on the screen. ! 1793: @item ! 1794: Number of lines above desired scroll region. ! 1795: @item ! 1796: Number of lines below (outside of) desired scroll region. ! 1797: @item ! 1798: Total number of lines on the screen, the same as the first parameter. ! 1799: @end enumerate ! 1800: ! 1801: This capability is a GNU extension that was invented to allow the Ann ! 1802: Arbor Ambassador's scroll-region command to be described; it could ! 1803: also be done by putting non-Unix @samp{%}-sequences into a @samp{cs} ! 1804: string, but that would have confused Unix programs that used the ! 1805: @samp{cs} capability with the Unix termcap. Currently only GNU Emacs ! 1806: uses the @samp{cS} capability. ! 1807: ! 1808: @item ns ! 1809: @kindex ns ! 1810: Flag which means that the terminal does not normally scroll for ! 1811: ordinary sequential output. For modern terminals, this means that ! 1812: outputting a newline in ordinary sequential output with the cursor on ! 1813: the bottom line wraps to the top line. For some obsolete terminals, ! 1814: other things may happen. ! 1815: ! 1816: The terminal may be able to scroll even if it does not normally do so. ! 1817: If the @samp{sf} capability is provided, it can be used for scrolling ! 1818: regardless of @samp{ns}. ! 1819: ! 1820: @item da ! 1821: @kindex da ! 1822: Flag whose presence means that lines scrolled up off the top of the ! 1823: screen may come back if scrolling down is done subsequently. ! 1824: ! 1825: The @samp{da} and @samp{db} flags do not, strictly speaking, affect ! 1826: how to scroll. But programs that scroll usually need to clear the ! 1827: lines scrolled onto the screen, if these flags are present. ! 1828: ! 1829: @item db ! 1830: @kindex db ! 1831: Flag whose presence means that lines scrolled down off the bottom of ! 1832: the screen may come back if scrolling up is done subsequently. ! 1833: ! 1834: @item lm ! 1835: @kindex lm ! 1836: Numeric value, the number of lines of display memory that the terminal ! 1837: has. A value of zero means that the terminal has more display memory ! 1838: than can fit on the screen, but no fixed number of lines. (The number ! 1839: of lines may depend on the amount of text in each line.) ! 1840: @end table ! 1841: ! 1842: Any terminal description that defines @samp{SF} should also define @samp{sf}; ! 1843: likewise for @samp{SR} and @samp{sr}. However, many terminals can only ! 1844: scroll by one line at a time, so it is common to find @samp{sf} and not ! 1845: @samp{SF}, or @samp{sr} without @samp{SR}.@refill ! 1846: ! 1847: Therefore, all programs that use the scrolling facilities should be ! 1848: prepared to work with @samp{sf} in the case that @samp{SF} is absent, and ! 1849: likewise with @samp{sr}. On the other hand, an application program that ! 1850: uses only @samp{sf} and not @samp{SF} is acceptable, though slow on some ! 1851: terminals.@refill ! 1852: ! 1853: When outputting a scroll command with @code{tputs}, the @var{nlines} ! 1854: argument should be the total number of lines in the portion of the screen ! 1855: being scrolled. Very often these commands require padding proportional to ! 1856: this number of lines. @xref{Padding}. ! 1857: ! 1858: @node Windows, Clearing, Scrolling, Capabilities ! 1859: @section Windows ! 1860: @cindex window ! 1861: ! 1862: A @dfn{window}, in termcap, is a rectangular portion of the screen to which ! 1863: all display operations are restricted. Wrapping, clearing, scrolling, ! 1864: insertion and deletion all operate as if the specified window were all the ! 1865: screen there was. ! 1866: ! 1867: @table @samp ! 1868: @item wi ! 1869: @kindex wi ! 1870: String of commands to set the terminal output screen window. ! 1871: This string requires four parameters, all origin-zero: ! 1872: @enumerate ! 1873: @item ! 1874: The first line to include in the window. ! 1875: @item ! 1876: The last line to include in the window. ! 1877: @item ! 1878: The first column to include in the window. ! 1879: @item ! 1880: The last column to include in the window. ! 1881: @end enumerate ! 1882: @end table ! 1883: ! 1884: Most terminals do not support windows. ! 1885: ! 1886: @node Clearing, Insdel Line, Windows, Capabilities ! 1887: @section Clearing Parts of the Screen ! 1888: @cindex erasing ! 1889: @cindex clearing the screen ! 1890: ! 1891: There are several terminal capabilities for clearing parts of the screen ! 1892: to blank. All display terminals support the @samp{cl} string, and most ! 1893: display terminals support all of these capabilities. ! 1894: ! 1895: @table @samp ! 1896: @item cl ! 1897: @kindex cl ! 1898: String of commands to clear the entire screen and position the cursor ! 1899: at the upper left corner. ! 1900: ! 1901: @item cd ! 1902: @kindex cd ! 1903: String of commands to clear the line the cursor is on, and all the ! 1904: lines below it, down to the bottom of the screen. This command string ! 1905: should be used only with the cursor in column zero; their effect is ! 1906: undefined if the cursor is elsewhere. ! 1907: ! 1908: @item ce ! 1909: @kindex ce ! 1910: String of commands to clear from the cursor to the end of the current ! 1911: line. ! 1912: ! 1913: @item ec ! 1914: @kindex ec ! 1915: String of commands to clear @var{n} characters, starting with the ! 1916: character that the cursor is on. This command string is expected to ! 1917: leave the cursor position unchanged. The parameter @var{n} should never ! 1918: be large enough to reach past the right margin; the effect of such a ! 1919: large parameter would be undefined. ! 1920: @end table ! 1921: ! 1922: Clear to end of line (@samp{ce}) is extremely important in programs that ! 1923: maintain an updating display. Nearly all display terminals support this ! 1924: operation, so it is acceptable for a an application program to refuse to ! 1925: work if @samp{ce} is not present. However, if you do not want this ! 1926: limitation, you can accomplish clearing to end of line by outputting spaces ! 1927: until you reach the right margin. In order to do this, you must know the ! 1928: current horizontal position. Also, this technique assumes that writing a ! 1929: space will erase. But this happens to be true on all the display terminals ! 1930: that fail to support @samp{ce}. ! 1931: ! 1932: @node Insdel Line, Insdel Char, Clearing, Capabilities ! 1933: @section Insert/Delete Line ! 1934: ! 1935: @cindex insert line ! 1936: @cindex delete line ! 1937: @dfn{Inserting a line} means creating a blank line in the middle ! 1938: of the screen, and pushing the existing lines of text apart. In fact, ! 1939: the lines above the insertion point do not change, while the lines below ! 1940: move down, and one is normally lost at the bottom of the screen. ! 1941: ! 1942: @dfn{Deleting a line} means causing the line to disappear from the screen, ! 1943: closing up the gap by moving the lines below it upward. A new line ! 1944: appears at the bottom of the screen. Usually this line is blank, but ! 1945: on terminals with the @samp{db} flag it may be a line previously moved ! 1946: off the screen bottom by scrolling or line insertion. ! 1947: ! 1948: Insertion and deletion of lines is useful in programs that maintain an ! 1949: updating display some parts of which may get longer or shorter. They are ! 1950: also useful in editors for scrolling parts of the screen, and for ! 1951: redisplaying after lines of text are killed or inserted. ! 1952: ! 1953: Many terminals provide commands to insert or delete a single line at the ! 1954: cursor position. Some provide the ability to insert or delete several ! 1955: lines with one command, using the number of lines to insert or delete as a ! 1956: parameter. Always move the cursor to column zero before using any of ! 1957: these commands. ! 1958: ! 1959: @table @samp ! 1960: @item al ! 1961: @kindex al ! 1962: String of commands to insert a blank line before the line the cursor ! 1963: is on. The existing line, and all lines below it, are moved down. ! 1964: The last line in the screen (or in the scroll region, if one is set) ! 1965: disappears and in most circumstances is discarded. It may not be ! 1966: discarded if the @samp{db} is present (@pxref{Scrolling}). ! 1967: ! 1968: The cursor must be at the left margin before this command is used. ! 1969: This command does not move the cursor. ! 1970: ! 1971: @item dl ! 1972: @kindex dl ! 1973: String of commands to delete the line the cursor is on. The following ! 1974: lines move up, and a blank line appears at the bottom of the screen ! 1975: (or bottom of the scroll region). If the terminal has the @samp{db} ! 1976: flag, a nonblank line previously pushed off the screen bottom may ! 1977: reappear at the bottom. ! 1978: ! 1979: The cursor must be at the left margin before this command is used. ! 1980: This command does not move the cursor. ! 1981: ! 1982: @item AL ! 1983: @kindex AL ! 1984: String of commands to insert @var{n} blank lines before the line that ! 1985: the cursor is on. It is like @samp{al} repeated @var{n} times, except ! 1986: that it is as fast as one @samp{al}. ! 1987: ! 1988: @item DL ! 1989: @kindex DL ! 1990: String of commands to delete @var{n} lines starting with the line that ! 1991: the cursor is on. It is like @samp{dl} repeated @var{n} times, except ! 1992: that it is as fast as one @samp{dl}. ! 1993: @end table ! 1994: ! 1995: Any terminal description that defines @samp{AL} should also define ! 1996: @samp{al}; likewise for @samp{DL} and @samp{dl}. However, many terminals ! 1997: can only insert or delete one line at a time, so it is common to find ! 1998: @samp{al} and not @samp{AL}, or @samp{dl} without @samp{DL}.@refill ! 1999: ! 2000: Therefore, all programs that use the insert and delete facilities should be ! 2001: prepared to work with @samp{al} in the case that @samp{AL} is absent, and ! 2002: likewise with @samp{dl}. On the other hand, it is acceptable to write ! 2003: an application that uses only @samp{al} and @samp{dl} and does not look ! 2004: for @samp{AL} or @samp{DL} at all.@refill ! 2005: ! 2006: If a terminal does not support line insertion and deletion directly, ! 2007: but does support a scroll region, the effect of insertion and deletion ! 2008: can be obtained with scrolling. However, it is up to the individual ! 2009: user program to check for this possibility and use the scrolling ! 2010: commands to get the desired result. It is fairly important to implement ! 2011: this alternate strategy, since it is the only way to get the effect of ! 2012: line insertion and deletion on the popular VT100 terminal. ! 2013: ! 2014: Insertion and deletion of lines is affected by the scroll region on ! 2015: terminals that have a settable scroll region. This is useful when it is ! 2016: desirable to move any few consecutive lines up or down by a few lines. ! 2017: @xref{Scrolling}. ! 2018: ! 2019: The line pushed off the bottom of the screen is not lost if the terminal ! 2020: has the @samp{db} flag capability; instead, it is pushed into display ! 2021: memory that does not appear on the screen. This is the same thing that ! 2022: happens when scrolling pushes a line off the bottom of the screen. ! 2023: Either reverse scrolling or deletion of a line can bring the apparently ! 2024: lost line back onto the bottom of the screen. If the terminal has the ! 2025: scroll region feature as well as @samp{db}, the pushed-out line really ! 2026: is lost if a scroll region is in effect. ! 2027: ! 2028: When outputting an insert or delete command with @code{tputs}, the ! 2029: @var{nlines} argument should be the total number of lines from the cursor ! 2030: to the bottom of the screen (or scroll region). Very often these commands ! 2031: require padding proportional to this number of lines. @xref{Padding}. ! 2032: ! 2033: For @samp{AL} and @samp{DL} the @var{nlines} argument should @emph{not} ! 2034: depend on the number of lines inserted or deleted; only the total number of ! 2035: lines affected. This is because it is just as fast to insert two or ! 2036: @var{n} lines with @samp{AL} as to insert one line with @samp{al}. ! 2037: ! 2038: @node Insdel Char, Standout, Insdel Line, Capabilities ! 2039: @section Insert/Delete Character ! 2040: @cindex insert character ! 2041: @cindex delete character ! 2042: ! 2043: @dfn{Inserting a character} means creating a blank space in the middle of a ! 2044: line, and pushing the rest of the line rightward. The character in the ! 2045: rightmost column is lost. ! 2046: ! 2047: @dfn{Deleting a character} means causing the character to disappear from ! 2048: the screen, closing up the gap by moving the rest of the line leftward. A ! 2049: blank space appears in the rightmost column. ! 2050: ! 2051: Insertion and deletion of characters is useful in programs that maintain an ! 2052: updating display some parts of which may get longer or shorter. It is also ! 2053: useful in editors for redisplaying the results of editing within a line. ! 2054: ! 2055: Many terminals provide commands to insert or delete a single character at ! 2056: the cursor position. Some provide the ability to insert or delete several ! 2057: characters with one command, using the number of characters to insert or ! 2058: delete as a parameter. ! 2059: ! 2060: @cindex insert mode ! 2061: Many terminals provide an insert mode in which outputting a graphic ! 2062: character has the added effect of inserting a position for that character. ! 2063: A special command string is used to enter insert mode and another is used ! 2064: to exit it. The reason for designing a terminal with an insert mode rather ! 2065: than an insert command is that inserting character positions is usually ! 2066: followed by writing characters into them. With insert mode, this is as ! 2067: fast as simply writing the characters, except for the fixed overhead of ! 2068: entering and leaving insert mode. However, when the line speed is great ! 2069: enough, padding may be required for the graphic characters output in insert ! 2070: mode. ! 2071: ! 2072: Some terminals require you to enter insert mode and then output a special ! 2073: command for each position to be inserted. Or they may require special ! 2074: commands to be output before or after each graphic character to be ! 2075: inserted. ! 2076: ! 2077: @cindex delete mode ! 2078: Deletion of characters is usually accomplished by a straightforward command ! 2079: to delete one or several positions; but on some terminals, it is necessary ! 2080: to enter a special delete mode before using the delete command, and leave ! 2081: delete mode afterward. Sometimes delete mode and insert mode are the same ! 2082: mode. ! 2083: ! 2084: Some terminals make a distinction between character positions in which a ! 2085: space character has been output and positions which have been cleared. On ! 2086: these terminals, the effect of insert or delete character runs to the first ! 2087: cleared position rather than to the end of the line. In fact, the effect ! 2088: may run to more than one line if there is no cleared position to stop the ! 2089: shift on the first line. These terminals are identified by the @samp{in} ! 2090: flag capability. ! 2091: ! 2092: On terminals with the @samp{in} flag, the technique of skipping over ! 2093: characters that you know were cleared, and then outputting text later on in ! 2094: the same line, causes later insert and delete character operations on that ! 2095: line to do nonstandard things. A program that has any chance of doing this ! 2096: must check for the @samp{in} flag and must be careful to write explicit ! 2097: space characters into the intermediate columns when @samp{in} is present. ! 2098: ! 2099: A plethora of terminal capabilities are needed to describe all of this ! 2100: complexity. Here is a list of them all. Following the list, we present ! 2101: an algorithm for programs to use to take proper account of all of these ! 2102: capabilities. ! 2103: ! 2104: @table @samp ! 2105: @item im ! 2106: @kindex im ! 2107: String of commands to enter insert mode. ! 2108: ! 2109: If the terminal has no special insert mode, but it can insert ! 2110: characters with a special command, @samp{im} should be defined with a ! 2111: null value, because the @samp{vi} editor assumes that insertion of a ! 2112: character is impossible if @samp{im} is not provided. ! 2113: ! 2114: New programs should not act like @samp{vi}. They should pay attention ! 2115: to @samp{im} only if it is defined. ! 2116: ! 2117: @item ei ! 2118: @kindex ei ! 2119: String of commands to leave insert mode. This capability must be ! 2120: present if @samp{im} is. ! 2121: ! 2122: On a few old terminals the same string is used to enter and exit ! 2123: insert mode. This string turns insert mode on if it was off, and off ! 2124: it it was on. You can tell these terminals because the @samp{ei} ! 2125: string equals the @samp{im} string. If you want to support these ! 2126: terminals, you must always remember accurately whether insert mode is ! 2127: in effect. However, these terminals are obsolete, and it is ! 2128: reasonable to refuse to support them. On all modern terminals, you ! 2129: can safely output @samp{ei} at any time to ensure that insert mode is ! 2130: turned off. ! 2131: ! 2132: @item ic ! 2133: @kindex ic ! 2134: String of commands to insert one character position at the cursor. ! 2135: The cursor does not move. ! 2136: ! 2137: If outputting a graphic character while in insert mode is sufficient ! 2138: to insert the character, then the @samp{ic} capability should be ! 2139: defined with a null value. ! 2140: ! 2141: If your terminal offers a choice of ways to insert---either use insert ! 2142: mode or use a special command---then define @samp{im} and do not define ! 2143: @samp{ic}, since this gives the most efficient operation when several ! 2144: characters are to be inserted. @emph{Do not} define both strings, for ! 2145: that means that @emph{both} must be used each time insertion is done. ! 2146: ! 2147: @item ip ! 2148: @kindex ip ! 2149: String of commands to output following an inserted graphic character ! 2150: in insert mode. Often it is used just for a padding spec, when padding ! 2151: is needed after an inserted character (@pxref{Padding}). ! 2152: ! 2153: @item IC ! 2154: @kindex IC ! 2155: String of commands to insert @var{n} character positions at and after ! 2156: the cursor. It has the same effect as repeating the @samp{ic} string ! 2157: and a space, @var{n} times. ! 2158: ! 2159: If @samp{IC} is provided, application programs may use it without first ! 2160: entering insert mode. ! 2161: ! 2162: @item mi ! 2163: @kindex mi ! 2164: Flag whose presence means it is safe to move the cursor while in insert ! 2165: mode and assume the terminal remains in insert mode. ! 2166: ! 2167: @item in ! 2168: @kindex in ! 2169: Flag whose presence means that the terminal distinguishes between ! 2170: character positions in which space characters have been output and ! 2171: positions which have been cleared. ! 2172: @end table ! 2173: ! 2174: An application program can assume that the terminal can do character ! 2175: insertion if @emph{any one of} the capabilities @samp{IC}, @samp{im}, ! 2176: @samp{ic} or @samp{ip} is provided. ! 2177: ! 2178: To insert @var{n} blank character positions, move the cursor to the place ! 2179: to insert them and follow this algorithm: ! 2180: ! 2181: @enumerate ! 2182: @item ! 2183: If an @samp{IC} string is provided, output it with parameter @var{n} ! 2184: and you are finished. Otherwise (or if you don't want to bother to ! 2185: look for an @samp{IC} string) follow the remaining steps. ! 2186: ! 2187: @item ! 2188: Output the @samp{im} string, if there is one, unless the terminal is ! 2189: already in insert mode. ! 2190: ! 2191: @item ! 2192: Repeat steps 4 through 6, @var{n} times. ! 2193: ! 2194: @item ! 2195: Output the @samp{ic} string if any. ! 2196: ! 2197: @item ! 2198: Output a space. ! 2199: ! 2200: @item ! 2201: Output the @samp{ip} string if any. ! 2202: ! 2203: @item ! 2204: Output the @samp{ei} string, eventually, to exit insert mode. There ! 2205: is no need to do this right away. If the @samp{mi} flag is present, ! 2206: you can move the cursor and the cursor will remain in insert mode; ! 2207: then you can do more insertion elsewhere without reentering insert ! 2208: mode. ! 2209: @end enumerate ! 2210: ! 2211: To insert @var{n} graphic characters, position the cursor and follow this ! 2212: algorithm: ! 2213: ! 2214: @enumerate ! 2215: @item ! 2216: If an @samp{IC} string is provided, output it with parameter @var{n}, ! 2217: then output the graphic characters, and you are finished. Otherwise ! 2218: (or if you don't want to bother to look for an @samp{IC} string) ! 2219: follow the remaining steps. ! 2220: ! 2221: @item ! 2222: Output the @samp{im} string, if there is one, unless the terminal is ! 2223: already in insert mode. ! 2224: ! 2225: @item ! 2226: For each character to be output, repeat steps 4 through 6. ! 2227: ! 2228: @item ! 2229: Output the @samp{ic} string if any. ! 2230: ! 2231: @item ! 2232: Output the next graphic character. ! 2233: ! 2234: @item ! 2235: Output the @samp{ip} string if any. ! 2236: ! 2237: @item ! 2238: Output the @samp{ei} string, eventually, to exit insert mode. There ! 2239: is no need to do this right away. If the @samp{mi} flag is present, ! 2240: you can move the cursor and the cursor will remain in insert mode; ! 2241: then you can do more insertion elsewhere without reentering insert ! 2242: mode. ! 2243: @end enumerate ! 2244: ! 2245: Note that this is not the same as the original Unix termcap specifications ! 2246: in one respect: it assumes that the @samp{IC} string can be used without ! 2247: entering insert mode. This is true as far as I know, and it allows you be ! 2248: able to avoid entering and leaving insert mode, and also to be able to ! 2249: avoid the inserted-character padding after the characters that go into the ! 2250: inserted positions. ! 2251: ! 2252: Deletion of characters is less complicated; deleting one column is done by ! 2253: outputting the @samp{dc} string. However, there may be a delete mode that ! 2254: must be entered with @samp{dm} in order to make @samp{dc} work. ! 2255: ! 2256: @table @samp ! 2257: @item dc ! 2258: @kindex dc ! 2259: String of commands to delete one character position at the cursor. If ! 2260: @samp{dc} is not present, the terminal cannot delete characters. ! 2261: ! 2262: @item DC ! 2263: @kindex DC ! 2264: String of commands to delete @var{n} characters starting at the cursor. ! 2265: It has the same effect as repeating the @samp{dc} string @var{n} times. ! 2266: Any terminal description that has @samp{DC} also has @samp{dc}. ! 2267: ! 2268: @item dm ! 2269: @kindex dm ! 2270: String of commands to enter delete mode. If not present, there is no ! 2271: delete mode, and @samp{dc} can be used at any time (assuming there is ! 2272: a @samp{dc}). ! 2273: ! 2274: @item ed ! 2275: @kindex ed ! 2276: String of commands to exit delete mode. This must be present if ! 2277: @samp{dm} is. ! 2278: @end table ! 2279: ! 2280: To delete @var{n} character positions, position the cursor and follow these ! 2281: steps: ! 2282: ! 2283: @enumerate ! 2284: @item ! 2285: If the @samp{DC} string is present, output it with parameter @var{n} ! 2286: and you are finished. Otherwise, follow the remaining steps. ! 2287: ! 2288: @item ! 2289: Output the @samp{dm} string, unless you know the terminal is already ! 2290: in delete mode. ! 2291: ! 2292: @item ! 2293: Output the @samp{dc} string @var{n} times. ! 2294: ! 2295: @item ! 2296: Output the @samp{ed} string eventually. If the flag capability ! 2297: @samp{mi} is present, you can move the cursor and do more deletion ! 2298: without leaving and reentering delete mode. ! 2299: @end enumerate ! 2300: ! 2301: As with the @samp{IC} string, we have departed from the original termcap ! 2302: specifications by assuming that @samp{DC} works without entering delete ! 2303: mode even though @samp{dc} would not. ! 2304: ! 2305: If the @samp{dm} and @samp{im} capabilities are both present and have the ! 2306: same value, it means that the terminal has one mode for both insertion and ! 2307: deletion. It is useful for a program to know this, because then it can do ! 2308: insertions after deletions, or vice versa, without leaving insert/delete ! 2309: mode and reentering it. ! 2310: ! 2311: @node Standout, Underlining, Insdel Char, Capabilities ! 2312: @section Standout and Appearance Modes ! 2313: @cindex appearance modes ! 2314: @cindex standout ! 2315: @cindex magic cookie ! 2316: ! 2317: @dfn{Appearance modes} are modifications to the ways characters are ! 2318: displayed. Typical appearance modes include reverse video, dim, bright, ! 2319: blinking, underlined, invisible, and alternate character set. Each kind of ! 2320: terminal supports various among these, or perhaps none. ! 2321: ! 2322: For each type of terminal, one appearance mode or combination of them that ! 2323: looks good for highlighted text is chosen as the @dfn{standout mode}. The ! 2324: capabilities @samp{so} and @samp{se} say how to enter and leave standout ! 2325: mode. Programs that use appearance modes only to highlight some text ! 2326: generally use the standout mode so that they can work on as many terminals ! 2327: as possible. Use of specific appearance modes other than ``underlined'' ! 2328: and ``alternate character set'' is rare. ! 2329: ! 2330: Terminals that implement appearance modes fall into two general classes as ! 2331: to how they do it. ! 2332: ! 2333: In some terminals, the presence or absence of any appearance mode is ! 2334: recorded separately for each character position. In these terminals, each ! 2335: graphic character written is given the appearance modes current at the time ! 2336: it is written, and keeps those modes until it is erased or overwritten. ! 2337: There are special commands to turn the appearance modes on or off for ! 2338: characters to be written in the future. ! 2339: ! 2340: In other terminals, the change of appearance modes is represented by a ! 2341: marker that belongs to a certain screen position but affects all following ! 2342: screen positions until the next marker. These markers are traditionally ! 2343: called @dfn{magic cookies}. ! 2344: ! 2345: The same capabilities (@samp{so}, @samp{se}, @samp{mb} and so on) for ! 2346: turning appearance modes on and off are used for both magic-cookie ! 2347: terminals and per-character terminals. On magic cookie terminals, these ! 2348: give the commands to write the magic cookies. On per-character terminals, ! 2349: they change the current modes that affect future output and erasure. Some ! 2350: simple applications can use these commands without knowing whether or not ! 2351: they work by means of cookies. ! 2352: ! 2353: However, a program that maintains and updates a display needs to know ! 2354: whether the terminal uses magic cookies, and exactly what their effect is. ! 2355: This information comes from the @samp{sg} capability. ! 2356: ! 2357: The @samp{sg} capability is a numeric capability whose presence indicates ! 2358: that the terminal uses magic cookies for appearance modes. Its value is ! 2359: the number of character positions that a magic cookie occupies. Usually ! 2360: the cookie occupies one or more character positions on the screen, and these ! 2361: character positions are displayed as blank, but in some terminals the ! 2362: cookie has zero width. ! 2363: ! 2364: The @samp{sg} capability describes both the magic cookie to turn standout ! 2365: on and the cookie to turn it off. This makes the assumption that both ! 2366: kinds of cookie have the same width on the screen. If that is not true, ! 2367: the narrower cookie must be ``widened'' with spaces until it has the same ! 2368: width as the other. ! 2369: ! 2370: On some magic cookie terminals, each line always starts with normal ! 2371: display; in other words, the scope of a magic cookie never extends over ! 2372: more than one line. But on other terminals, one magic cookie affects all ! 2373: the lines below it unless explicitly canceled. Termcap does not define any ! 2374: way to distinguish these two ways magic cookies can work. To be safe, it ! 2375: is best to put a cookie at the beginning of each line. ! 2376: ! 2377: On some per-character terminals, standout mode or other appearance modes ! 2378: may be canceled by moving the cursor. On others, moving the cursor has no ! 2379: effect on the state of the appearance modes. The latter class of terminals ! 2380: are given the flag capability @samp{ms} (``can move in standout''). All ! 2381: programs that might have occasion to move the cursor while appearance modes ! 2382: are turned on must check for this flag; if it is not present, they should ! 2383: reset appearance modes to normal before doing cursor motion. ! 2384: ! 2385: A program that has turned on only standout mode should use @samp{se} to ! 2386: reset the standout mode to normal. A program that has turned on only ! 2387: alternate character set mode should use @samp{ae} to return it to normal. ! 2388: If it is possible that any other appearance modes are turned on, use the ! 2389: @samp{me} capability to return them to normal. ! 2390: ! 2391: Note that the commands to turn on one appearance mode, including @samp{so} ! 2392: and @samp{mb} @dots{} @samp{mr}, if used while some other appearance modes ! 2393: are turned on, may combine the two modes on some terminals but may turn off ! 2394: the mode previously enabled on other terminals. This is because some ! 2395: terminals do not have a command to set or clear one appearance mode without ! 2396: changing the others. Programs should not attempt to use appearance modes ! 2397: in combination except with @samp{sa}, and when switching from one single ! 2398: mode to another should always turn off the previously enabled mode and then ! 2399: turn on the new desired mode. ! 2400: ! 2401: On some old terminals, the @samp{so} and @samp{se} commands may be the same ! 2402: command, which has the effect of turning standout on if it is off, or off ! 2403: it is on. It is therefore risky for a program to output extra @samp{se} ! 2404: commands for good measure. Fortunately, all these terminals are obsolete. ! 2405: ! 2406: Programs that update displays in which standout-text may be replaced with ! 2407: non-standout text must check for the @samp{xs} flag. In a per-character ! 2408: terminal, this flag says that the only way to remove standout once written is ! 2409: to clear that portion of the line with the @samp{ce} string or something ! 2410: even more powerful (@pxref{Clearing}); just writing new characters at those ! 2411: screen positions will not change the modes in effect there. In a magic ! 2412: cookie terminal, @samp{xs} says that the only way to remove a cookie is to ! 2413: clear a portion of the line that includes the cookie; writing a different ! 2414: cookie at the same position does not work. ! 2415: ! 2416: Such programs must also check for the @samp{xt} flag, which means that the ! 2417: terminal is a Teleray 1061. On this terminal it is impossible to position ! 2418: the cursor at the front of a magic cookie, so the only two ways to remove a ! 2419: cookie are (1) to delete the line it is on or (2) to position the cursor at ! 2420: least one character before it (possibly on a previous line) and output the ! 2421: @samp{se} string, which on these terminals finds and removes the next ! 2422: @samp{so} magic cookie on the screen. (It may also be possible to remove a ! 2423: cookie which is not at the beginning of a line by clearing that line.) The ! 2424: @samp{xt} capability also has implications for the use of tab characters, ! 2425: but in that regard it is obsolete (@xref{Cursor Motion}). ! 2426: ! 2427: @table @samp ! 2428: @item so ! 2429: @kindex so ! 2430: String of commands to enter standout mode. ! 2431: ! 2432: @item se ! 2433: @kindex se ! 2434: String of commands to leave standout mode. ! 2435: ! 2436: @item sg ! 2437: @kindex sg ! 2438: Numeric capability, the width on the screen of the magic cookie. This ! 2439: capability is absent in terminals that record appearance modes ! 2440: character by character. ! 2441: ! 2442: @item ms ! 2443: @kindex ms ! 2444: Flag whose presence means that it is safe to move the cursor while the ! 2445: appearance modes are not in the normal state. If this flag is absent, ! 2446: programs should always reset the appearance modes to normal before ! 2447: moving the cursor. ! 2448: ! 2449: @item xs ! 2450: @kindex xs ! 2451: Flag whose presence means that the only way to reset appearance modes ! 2452: already on the screen is to clear to end of line. On a per-character ! 2453: terminal, you must clear the area where the modes are set. On a magic ! 2454: cookie terminal, you must clear an area containing the cookie. ! 2455: See the discussion above. ! 2456: ! 2457: @item xt ! 2458: @kindex xt ! 2459: Flag whose presence means that the cursor cannot be positioned right ! 2460: in front of a magic cookie, and that @samp{se} is a command to delete ! 2461: the next magic cookie following the cursor. See discussion above. ! 2462: ! 2463: @item mb ! 2464: @kindex mb ! 2465: String of commands to enter blinking mode. ! 2466: ! 2467: @item md ! 2468: @kindex md ! 2469: String of commands to enter double-bright mode. ! 2470: ! 2471: @item mh ! 2472: @kindex mh ! 2473: String of commands to enter half-bright mode. ! 2474: ! 2475: @item mk ! 2476: @kindex mk ! 2477: String of commands to enter invisible mode. ! 2478: ! 2479: @item mp ! 2480: @kindex mp ! 2481: String of commands to enter protected mode. ! 2482: ! 2483: @item mr ! 2484: @kindex mr ! 2485: String of commands to enter reverse-video mode. ! 2486: ! 2487: @item me ! 2488: @kindex me ! 2489: String of commands to turn off all appearance modes, including ! 2490: standout mode and underline mode. On some terminals it also turns off ! 2491: alternate character set mode; on others, it may not. This capability ! 2492: must be present if any of @samp{mb} @dots{} @samp{mr} is present. ! 2493: ! 2494: @item as ! 2495: @kindex as ! 2496: String of commands to turn on alternate character set mode. This mode ! 2497: assigns some or all graphic characters an alternate picture on the ! 2498: screen. There is no standard as to what the alternate pictures look ! 2499: like. ! 2500: ! 2501: @item ae ! 2502: @kindex ae ! 2503: String of commands to turn off alternate character set mode. ! 2504: ! 2505: @item sa ! 2506: @kindex sa ! 2507: String of commands to turn on an arbitrary combination of appearance ! 2508: modes. It accepts 9 parameters, each of which controls a particular ! 2509: kind of appearance mode. A parameter should be 1 to turn its appearance ! 2510: mode on, or zero to turn that mode off. Most terminals do not support ! 2511: the @samp{sa} capability, even among those that do have various ! 2512: appearance modes. ! 2513: ! 2514: The nine parameters are, in order, @var{standout}, @var{underline}, ! 2515: @var{reverse}, @var{blink}, @var{half-bright}, @var{double-bright}, ! 2516: @var{blank}, @var{protect}, @var{alt char set}. ! 2517: @end table ! 2518: ! 2519: @node Underlining, Cursor Visibility, Standout, Capabilities ! 2520: @section Underlining ! 2521: @cindex underlining ! 2522: ! 2523: Underlining on most terminals is a kind of appearance mode, much like ! 2524: standout mode. Therefore, it may be implemented using magic cookies or as ! 2525: a flag in the terminal whose current state affects each character that is ! 2526: output. @xref{Standout}, for a full explanation. ! 2527: ! 2528: The @samp{ug} capability is a numeric capability whose presence indicates ! 2529: that the terminal uses magic cookies for underlining. Its value is the ! 2530: number of character positions that a magic cookie for underlining occupies; ! 2531: it is used for underlining just as @samp{sg} is used for standout. Aside ! 2532: from the simplest applications, it is impossible to use underlining ! 2533: correctly without paying attention to the value of @samp{ug}. ! 2534: ! 2535: @table @samp ! 2536: @item us ! 2537: @kindex us ! 2538: String of commands to turn on underline mode or to output a magic cookie ! 2539: to start underlining. ! 2540: ! 2541: @item ue ! 2542: @kindex ue ! 2543: String of commands to turn off underline mode or to output a magic ! 2544: cookie to stop underlining. ! 2545: ! 2546: @item ug ! 2547: @kindex ug ! 2548: Width of magic cookie that represents a change of underline mode; ! 2549: or missing, if the terminal does not use a magic cookie for this. ! 2550: ! 2551: @item ms ! 2552: @kindex ms ! 2553: Flag whose presence means that it is safe to move the cursor while the ! 2554: appearance modes are not in the normal state. Underlining is an ! 2555: appearance mode. If this flag is absent, programs should always turn ! 2556: off underlining before moving the cursor. ! 2557: @end table ! 2558: ! 2559: There are two other, older ways of doing underlining: there can be a ! 2560: command to underline a single character, or the output of @samp{_}, the ! 2561: ASCII underscore character, as an overstrike could cause a character to be ! 2562: underlined. New programs need not bother to handle these capabilities ! 2563: unless the author cares strongly about the obscure terminals which support ! 2564: them. However, terminal descriptions should provide these capabilities ! 2565: when appropriate. ! 2566: ! 2567: @table @samp ! 2568: @item uc ! 2569: @kindex uc ! 2570: String of commands to underline the character under the cursor, and ! 2571: move the cursor right. ! 2572: ! 2573: @item ul ! 2574: @kindex ul ! 2575: Flag whose presence means that the terminal can underline by ! 2576: overstriking an underscore character (@samp{_}); some terminals can do ! 2577: this even though they do not support overstriking in general. An ! 2578: implication of this flag is that when outputting new text to overwrite ! 2579: old text, underscore characters must be treated specially lest they ! 2580: underline the old text instead. ! 2581: @end table ! 2582: ! 2583: @node Cursor Visibility, Bell, Underlining, Capabilities ! 2584: @section Cursor Visibility ! 2585: @cindex visibility ! 2586: ! 2587: Some terminals have the ability to make the cursor invisible, or to enhance ! 2588: it. Enhancing the cursor is often done by programs that plan to use the ! 2589: cursor to indicate to the user a position of interest that may be anywhere ! 2590: on the screen---for example, the Emacs editor enhances the cursor on entry. ! 2591: Such programs should always restore the cursor to normal on exit. ! 2592: ! 2593: @table @samp ! 2594: @item vs ! 2595: @kindex vs ! 2596: String of commands to enhance the cursor. ! 2597: ! 2598: @item vi ! 2599: @kindex vi ! 2600: String of commands to make the cursor invisible. ! 2601: ! 2602: @item ve ! 2603: @kindex ve ! 2604: String of commands to return the cursor to normal. ! 2605: @end table ! 2606: ! 2607: If you define either @samp{vs} or @samp{vi}, you must also define @samp{ve}. ! 2608: ! 2609: @node Bell, Keypad, Cursor Visibility, Capabilities ! 2610: @section Bell ! 2611: @cindex bell ! 2612: @cindex visible bell ! 2613: ! 2614: Here we describe commands to make the terminal ask for the user to pay ! 2615: attention to it. ! 2616: ! 2617: @table @samp ! 2618: @item bl ! 2619: @kindex bl ! 2620: String of commands to cause the terminal to make an audible sound. If ! 2621: this capability is absent, the terminal has no way to make a suitable ! 2622: sound. ! 2623: ! 2624: @item vb ! 2625: @kindex vb ! 2626: String of commands to cause the screen to flash to attract attention ! 2627: (``visible bell''). If this capability is absent, the terminal has no ! 2628: way to do such a thing. ! 2629: @end table ! 2630: ! 2631: @node Keypad, Meta Key, Bell, Capabilities ! 2632: @section Keypad and Function Keys ! 2633: ! 2634: Many terminals have arrow and function keys that transmit specific ! 2635: character sequences to the computer. Since the precise sequences used ! 2636: depend on the terminal, termcap defines capabilities used to say what the ! 2637: sequences are. Unlike most termcap string-valued capabilities, these are ! 2638: not strings of commands to be sent to the terminal, rather strings that ! 2639: are received from the terminal. ! 2640: ! 2641: Programs that expect to use keypad keys should check, initially, for a ! 2642: @samp{ks} capability and send it, to make the keypad actually transmit. ! 2643: Such programs should also send the @samp{ke} string when exiting. ! 2644: ! 2645: @table @asis ! 2646: @item @samp{ks} ! 2647: @kindex ka@dots{}ku ! 2648: String of commands to make the function keys transmit. If this ! 2649: capability is not provided, but the others in this section are, ! 2650: programs may assume that the function keys always transmit. ! 2651: ! 2652: @item @samp{ke} ! 2653: String of commands to make the function keys work locally. This ! 2654: capability is provided only if @samp{ks} is. ! 2655: ! 2656: @item @samp{kl} ! 2657: String of input characters sent by typing the left-arrow key. If this ! 2658: capability is missing, you cannot expect the terminal to have a ! 2659: left-arrow key that transmits anything to the computer. ! 2660: ! 2661: @item @samp{kr} ! 2662: String of input characters sent by typing the right-arrow key. ! 2663: ! 2664: @item @samp{ku} ! 2665: String of input characters sent by typing the up-arrow key. ! 2666: ! 2667: @item @samp{kd} ! 2668: String of input characters sent by typing the down-arrow key. ! 2669: ! 2670: @item @samp{kh} ! 2671: String of input characters sent by typing the ``home-position'' key. ! 2672: ! 2673: @item @samp{K1} @dots{} @samp{K5} ! 2674: @kindex K1@dots{}K5 ! 2675: Strings of input characters sent by the five other keys in a 3-by-3 ! 2676: array that includes the arrow keys, if the keyboard has such a 3-by-3 ! 2677: array. Note that one of these keys may be the ``home-position'' key, ! 2678: in which case one of these capabilities will have the same value as ! 2679: the @samp{kh} key. ! 2680: ! 2681: @item @samp{k0} ! 2682: String of input characters sent by function key 10 (or 0, if the terminal ! 2683: has one labeled 0). ! 2684: ! 2685: @item @samp{k1} @dots{} @samp{k9} ! 2686: @kindex k1@dots{}k9 ! 2687: Strings of input characters sent by function keys 1 through 9, ! 2688: provided for those function keys that exist. ! 2689: ! 2690: @item @samp{kn} ! 2691: Number: the number of numbered function keys, if there are more than ! 2692: 10. ! 2693: ! 2694: @item @samp{l0} @dots{} @samp{l9} ! 2695: @kindex l0@dots{}l9 ! 2696: Strings which are the labels appearing on the keyboard on the keys ! 2697: described by the capabilities @samp{k0} @dots{} @samp{l9}. These ! 2698: capabilities should be left undefined if the labels are @samp{f0} or ! 2699: @samp{f10} and @samp{f1} @dots{} @samp{f9}.@refill ! 2700: ! 2701: @item @samp{kH} ! 2702: @kindex kA@dots{}kT ! 2703: String of input characters sent by the ``home down'' key, if there is ! 2704: one. ! 2705: ! 2706: @item @samp{kb} ! 2707: String of input characters sent by the ``backspace'' key, if there is ! 2708: one. ! 2709: ! 2710: @item @samp{ka} ! 2711: String of input characters sent by the ``clear all tabs'' key, if there ! 2712: is one. ! 2713: ! 2714: @item @samp{kt} ! 2715: String of input characters sent by the ``clear tab stop this column'' ! 2716: key, if there is one. ! 2717: ! 2718: @item @samp{kC} ! 2719: String of input characters sent by the ``clear screen'' key, if there is ! 2720: one. ! 2721: ! 2722: @item @samp{kD} ! 2723: String of input characters sent by the ``delete character'' key, if ! 2724: there is one. ! 2725: ! 2726: @item @samp{kL} ! 2727: String of input characters sent by the ``delete line'' key, if there is ! 2728: one. ! 2729: ! 2730: @item @samp{kM} ! 2731: String of input characters sent by the ``exit insert mode'' key, if ! 2732: there is one. ! 2733: ! 2734: @item @samp{kE} ! 2735: String of input characters sent by the ``clear to end of line'' key, if ! 2736: there is one. ! 2737: ! 2738: @item @samp{kS} ! 2739: String of input characters sent by the ``clear to end of screen'' key, ! 2740: if there is one. ! 2741: ! 2742: @item @samp{kI} ! 2743: String of input characters sent by the ``insert character'' or ``enter ! 2744: insert mode'' key, if there is one. ! 2745: ! 2746: @item @samp{kA} ! 2747: String of input characters sent by the ``insert line'' key, if there is ! 2748: one. ! 2749: ! 2750: @item @samp{kN} ! 2751: String of input characters sent by the ``next page'' key, if there is ! 2752: one. ! 2753: ! 2754: @item @samp{kP} ! 2755: String of input characters sent by the ``previous page'' key, if there is ! 2756: one. ! 2757: ! 2758: @item @samp{kF} ! 2759: String of input characters sent by the ``scroll forward'' key, if there ! 2760: is one. ! 2761: ! 2762: @item @samp{kR} ! 2763: String of input characters sent by the ``scroll reverse'' key, if there ! 2764: is one. ! 2765: ! 2766: @item @samp{kT} ! 2767: String of input characters sent by the ``set tab stop in this column'' ! 2768: key, if there is one. ! 2769: ! 2770: @item @samp{ko} ! 2771: String listing the other function keys the terminal has. This is a ! 2772: very obsolete way of describing the same information found in the ! 2773: @samp{kH} @dots{} @samp{kT} keys. The string contains a list of ! 2774: two-character termcap capability names, separated by commas. The ! 2775: meaning is that for each capability name listed, the terminal has a ! 2776: key which sends the string which is the value of that capability. For ! 2777: example, the value @samp{:ko=cl,ll,sf,sr:} says that the terminal has ! 2778: four function keys which mean ``clear screen'', ``home down'', ! 2779: ``scroll forward'' and ``scroll reverse''.@refill ! 2780: @end table ! 2781: ! 2782: @node Meta Key, Initialization, Keypad, Capabilities ! 2783: @section Meta Key ! 2784: ! 2785: @cindex meta key ! 2786: A Meta key is a key on the keyboard that modifies each character you type ! 2787: by controlling the 0200 bit. This bit is on if and only if the Meta key is ! 2788: held down when the character is typed. Characters typed using the Meta key ! 2789: are called Meta characters. Emacs uses Meta characters as editing ! 2790: commands. ! 2791: ! 2792: @table @samp ! 2793: @item km ! 2794: @kindex km ! 2795: Flag whose presence means that the terminal has a Meta key. ! 2796: ! 2797: @item mm ! 2798: @kindex mm ! 2799: String of commands to enable the functioning of the Meta key. ! 2800: ! 2801: @item mo ! 2802: @kindex mo ! 2803: String of commands to disable the functioning of the Meta key. ! 2804: @end table ! 2805: ! 2806: If the terminal has @samp{km} but does not have @samp{mm} and @samp{mo}, it ! 2807: means that the Meta key always functions. If it has @samp{mm} and ! 2808: @samp{mo}, it means that the Meta key can be turned on or off. Send the ! 2809: @samp{mm} string to turn it on, and the @samp{mo} string to turn it off. ! 2810: I do not know why one would ever not want it to be on. ! 2811: ! 2812: @node Initialization, Pad Specs, Meta Key, Capabilities ! 2813: @section Initialization ! 2814: @cindex reset ! 2815: @cindex initialization ! 2816: @cindex tab stops ! 2817: ! 2818: @table @samp ! 2819: @item ti ! 2820: @kindex ti ! 2821: String of commands to put the terminal into whatever special modes are ! 2822: needed or appropriate for programs that move the cursor ! 2823: nonsequentially around the screen. Programs that use termcap to do ! 2824: full-screen display should output this string when they start up. ! 2825: ! 2826: @item te ! 2827: @kindex te ! 2828: String of commands to undo what is done by the @samp{ti} string. ! 2829: Programs that output the @samp{ti} string on entry should output this ! 2830: string when they exit. ! 2831: ! 2832: @item is ! 2833: @kindex is ! 2834: String of commands to initialize the terminal for each login session. ! 2835: ! 2836: @item if ! 2837: @kindex if ! 2838: String which is the name of a file containing the string of commands ! 2839: to initialize the terminal for each session of use. Normally @samp{is} ! 2840: and @samp{if} are not both used. ! 2841: ! 2842: @item i1 ! 2843: @itemx i3 ! 2844: @kindex i1 ! 2845: @kindex i3 ! 2846: Two more strings of commands to initialize the terminal for each login ! 2847: session. The @samp{i1} string (if defined) is output before @samp{is} ! 2848: or @samp{if}, and the @samp{i3} string (if defined) is output after. ! 2849: ! 2850: The reason for having three separate initialization strings is to make ! 2851: it easier to define a group of related terminal types with slightly ! 2852: different initializations. Define two or three of the strings in the ! 2853: basic type; then the other types can override one or two of the ! 2854: strings. ! 2855: ! 2856: @item rs ! 2857: @kindex rs ! 2858: String of commands to reset the terminal from any strange mode it may ! 2859: be in. Normally this includes the @samp{is} string (or other commands ! 2860: with the same effects) and more. What would go in the @samp{rs} ! 2861: string but not in the @samp{is} string are annoying or slow commands ! 2862: to bring the terminal back from strange modes that nobody would ! 2863: normally use. ! 2864: ! 2865: @item it ! 2866: @kindex it ! 2867: Numeric value, the initial spacing between hardware tab stop columns ! 2868: when the terminal is powered up. Programs to initialize the terminal ! 2869: can use this to decide whether there is a need to set the tab stops. ! 2870: If the initial width is 8, well and good; if it is not 8, then the ! 2871: tab stops should be set; if they cannot be set, the kernel is told ! 2872: to convert tabs to spaces, and other programs will observe this and do ! 2873: likewise. ! 2874: ! 2875: @item ct ! 2876: @kindex ct ! 2877: String of commands to clear all tab stops. ! 2878: ! 2879: @item st ! 2880: @kindex st ! 2881: String of commands to set tab stop at current cursor column on all ! 2882: lines. ! 2883: @end table ! 2884: ! 2885: @node Pad Specs, Status Line, Initialization, Capabilities ! 2886: @section Padding Capabilities ! 2887: @cindex padding ! 2888: ! 2889: There are two terminal capabilities that exist just to explain the proper ! 2890: way to obey the padding specifications in all the command string ! 2891: capabilities. One, @samp{pc}, must be obeyed by all termcap-using ! 2892: programs. ! 2893: ! 2894: @table @samp ! 2895: @item pb ! 2896: @kindex pb ! 2897: Numeric value, the lowest baud rate at which padding is actually ! 2898: needed. Programs may check this and refrain from doing any padding at ! 2899: lower speeds. ! 2900: ! 2901: @item pc ! 2902: @kindex pc ! 2903: String of commands for padding. The first character of this string is ! 2904: to be used as the pad character, instead of using null characters for ! 2905: padding. If @samp{pc} is not provided, use null characters. Every ! 2906: program that uses termcap must look up this capability and use it to ! 2907: set the variable @code{PC} that is used by @code{tputs}. ! 2908: @xref{Padding}. ! 2909: @end table ! 2910: ! 2911: Some termcap capabilities exist just to specify the amount of padding that ! 2912: the kernel should give to cursor motion commands used in ordinary ! 2913: sequential output. ! 2914: ! 2915: @table @samp ! 2916: @item dC ! 2917: @kindex dC ! 2918: Numeric value, the number of msec of padding needed for the ! 2919: carriage-return character. ! 2920: ! 2921: @item dN ! 2922: @kindex dN ! 2923: Numeric value, the number of msec of padding needed for the newline ! 2924: (linefeed) character. ! 2925: ! 2926: @item dB ! 2927: @kindex dB ! 2928: Numeric value, the number of msec of padding needed for the backspace ! 2929: character. ! 2930: ! 2931: @item dF ! 2932: @kindex dF ! 2933: Numeric value, the number of msec of padding needed for the formfeed ! 2934: character. ! 2935: ! 2936: @item dT ! 2937: @kindex dT ! 2938: Numeric value, the number of msec of padding needed for the tab ! 2939: character. ! 2940: @end table ! 2941: ! 2942: In some systems, the kernel uses the above capabilities; in other systems, ! 2943: the kernel uses the paddings specified in the string capabilities ! 2944: @samp{cr}, @samp{sf}, @samp{le}, @samp{ff} and @samp{ta}. Descriptions of ! 2945: terminals which require such padding should contain the @samp{dC} @dots{} ! 2946: @samp{dT} capabilities and also specify the appropriate padding in the ! 2947: corresponding string capabilities. Since no modern terminals require ! 2948: padding for ordinary sequential output, you probably won't need to do ! 2949: either of these things. ! 2950: ! 2951: @node Status Line, Half-Line, Pad Specs, Capabilities ! 2952: @section Status Line ! 2953: ! 2954: @cindex status line ! 2955: A @dfn{status line} is a line on the terminal that is not used for ordinary ! 2956: display output but instead used for a special message. The intended use is ! 2957: for a continuously updated description of what the user's program is doing, ! 2958: and that is where the name ``status line'' comes from, but in fact it could ! 2959: be used for anything. The distinguishing characteristic of a status line ! 2960: is that ordinary output to the terminal does not affect it; it changes only ! 2961: if the special status line commands of this section are used. ! 2962: ! 2963: @table @samp ! 2964: @item hs ! 2965: @kindex hs ! 2966: Flag whose presence means that the terminal has a status line. If a ! 2967: terminal description specifies that there is a status line, it must ! 2968: provide the @samp{ts} and @samp{fs} capabilities. ! 2969: ! 2970: @item ts ! 2971: @kindex ts ! 2972: String of commands to move the terminal cursor into the status line. ! 2973: Usually these commands must specifically record the old cursor ! 2974: position for the sake of the @samp{fs} string. ! 2975: ! 2976: @item fs ! 2977: @kindex fs ! 2978: String of commands to move the cursor back from the status line to its ! 2979: previous position (outside the status line). ! 2980: ! 2981: @item es ! 2982: @kindex es ! 2983: Flag whose presence means that other display commands work while ! 2984: writing the status line. In other words, one can clear parts of it, ! 2985: insert or delete characters, move the cursor within it using @samp{ch} ! 2986: if there is a @samp{ch} capability, enter and leave standout mode, and ! 2987: so on. ! 2988: ! 2989: @item ds ! 2990: @kindex ds ! 2991: String of commands to disable the display of the status line. This ! 2992: may be absent, if there is no way to disable the status line display. ! 2993: ! 2994: @item ws ! 2995: @kindex ws ! 2996: Numeric value, the width of the status line. If this capability is ! 2997: absent in a terminal that has a status line, it means the status line ! 2998: is the same width as the other lines. ! 2999: ! 3000: Note that the value of @samp{ws} is sometimes as small as 8. ! 3001: @end table ! 3002: ! 3003: @node Half-Line, Printer, Status Line, Capabilities ! 3004: @section Half-Line Motion ! 3005: ! 3006: Some terminals have commands for moving the cursor vertically by half-lines, ! 3007: useful for outputting subscripts and superscripts. Mostly it is hardcopy ! 3008: terminals that have such features. ! 3009: ! 3010: @table @samp ! 3011: @item hu ! 3012: @kindex hu ! 3013: String of commands to move the cursor up half a line. If the terminal ! 3014: is a display, it is your responsibility to avoid moving up past the ! 3015: top line; however, most likely the terminal that supports this is a ! 3016: hardcopy terminal and there is nothing to be concerned about. ! 3017: ! 3018: @item hd ! 3019: @kindex hd ! 3020: String of commands to move the cursor down half a line. If the ! 3021: terminal is a display, it is your responsibility to avoid moving down ! 3022: past the bottom line, etc. ! 3023: @end table ! 3024: ! 3025: @node Printer,, Half-Line, Capabilities ! 3026: @section Controlling Printers Attached to Terminals ! 3027: @cindex printer ! 3028: ! 3029: Some terminals have attached hardcopy printer ports. They may be able to ! 3030: copy the screen contents to the printer; they may also be able to redirect ! 3031: output to the printer. Termcap does not have anything to tell the program ! 3032: whether the redirected output appears also on the screen; it does on some ! 3033: terminals but not all. ! 3034: ! 3035: @table @samp ! 3036: @item ps ! 3037: @kindex ps ! 3038: String of commands to cause the contents of the screen to be printed. ! 3039: If it is absent, the screen contents cannot be printed. ! 3040: ! 3041: @item po ! 3042: @kindex po ! 3043: String of commands to redirect further output to the printer. ! 3044: ! 3045: @item pf ! 3046: @kindex pf ! 3047: String of commands to terminate redirection of output to the printer. ! 3048: This capability must be present in the description if @samp{po} is. ! 3049: ! 3050: @item pO ! 3051: @kindex pO ! 3052: String of commands to redirect output to the printer for next @var{n} ! 3053: characters of output, regardless of what they are. Redirection will ! 3054: end automatically after @var{n} characters of further output. Until ! 3055: then, nothing that is output can end redirection, not even the ! 3056: @samp{pf} string if there is one. The number @var{n} should not be ! 3057: more than 255. ! 3058: ! 3059: One use of this capability is to send non-text byte sequences (such as ! 3060: bit-maps) to the printer. ! 3061: @end table ! 3062: ! 3063: Most terminals with printers do not support all of @samp{ps}, @samp{po} and ! 3064: @samp{pO}; any one or two of them may be supported. To make a program that ! 3065: can send output to all kinds of printers, it is necessary to check for all ! 3066: three of these capabilities, choose the most convenient of the ones that ! 3067: are provided, and use it in its own appropriate fashion. ! 3068: ! 3069: @node Summary, Var Index, Capabilities, Top ! 3070: @chapter Summary of Capability Names ! 3071: ! 3072: Here are all the terminal capability names in alphabetical order ! 3073: with a brief description of each. For cross references to their definitions, ! 3074: see the index of capability names (@pxref{Cap Index}). ! 3075: ! 3076: @table @samp ! 3077: @item ae ! 3078: String to turn off alternate character set mode. ! 3079: @item al ! 3080: String to insert a blank line before the cursor. ! 3081: @item AL ! 3082: String to insert @var{n} blank lines before the cursor. ! 3083: @item am ! 3084: Flag: output to last column wraps cursor to next line. ! 3085: @item as ! 3086: String to turn on alternate character set mode.like. ! 3087: @item bc ! 3088: Very obsolete alternative name for the @samp{le} capability. ! 3089: @item bl ! 3090: String to sound the bell. ! 3091: @item bs ! 3092: Obsolete flag: ASCII backspace may be used for leftward motion. ! 3093: @item bt ! 3094: String to move the cursor left to the previous hardware tab stop column. ! 3095: @item bw ! 3096: Flag: @samp{le} at left margin wraps to end of previous line. ! 3097: @item CC ! 3098: String to change terminal's command character. ! 3099: @item cd ! 3100: String to clear the line the cursor is on, and following lines. ! 3101: @item ce ! 3102: String to clear from the cursor to the end of the line. ! 3103: @item ch ! 3104: String to position the cursor at column @var{c} in the same line. ! 3105: @item cl ! 3106: String to clear the entire screen and put cursor at upper left corner. ! 3107: @item cm ! 3108: String to position the cursor at line @var{l}, column @var{c}. ! 3109: @item CM ! 3110: String to position the cursor at line @var{l}, column ! 3111: @var{c}, relative to display memory. ! 3112: @item co ! 3113: Number: width of the screen. ! 3114: @item cr ! 3115: String to move cursor sideways to left margin. ! 3116: @item cs ! 3117: String to set the scroll region. ! 3118: @item cS ! 3119: Alternate form of string to set the scroll region. ! 3120: @item ct ! 3121: String to clear all tab stops. ! 3122: @item cv ! 3123: String to position the cursor at line @var{l} in the same column. ! 3124: @item da ! 3125: Flag: data scrolled off top of screen may be scrolled back. ! 3126: @item db ! 3127: Flag: data scrolled off bottom of screen may be scrolled back. ! 3128: @item dB ! 3129: Obsolete number: msec of padding needed for the backspace character. ! 3130: @item dc ! 3131: String to delete one character position at the cursor. ! 3132: @item dC ! 3133: Obsolete number: msec of padding needed for the carriage-return character. ! 3134: @item DC ! 3135: String to delete @var{n} characters starting at the cursor. ! 3136: @item dF ! 3137: Obsolete number: msec of padding needed for the formfeed character. ! 3138: @item dl ! 3139: String to delete the line the cursor is on. ! 3140: @item DL ! 3141: String to delete @var{n} lines starting with the cursor's line. ! 3142: @item dm ! 3143: String to enter delete mode. ! 3144: @item dN ! 3145: Obsolete number: msec of padding needed for the newline character. ! 3146: @item do ! 3147: String to move the cursor vertically down one line. ! 3148: @item DO ! 3149: String to move cursor vertically down @var{n} lines. ! 3150: @item ds ! 3151: String to disable the display of the status line. ! 3152: @item dT ! 3153: Obsolete number: msec of padding needed for the tab character. ! 3154: @item ec ! 3155: String of commands to clear @var{n} characters at cursor. ! 3156: @item ed ! 3157: String to exit delete mode. ! 3158: @item ei ! 3159: String to leave insert mode. ! 3160: @item eo ! 3161: Flag: output of a space can erase an overstrike. ! 3162: @item es ! 3163: Flag: other display commands work while writing the status line. ! 3164: @item ff ! 3165: String to advance to the next page, for a hardcopy terminal. ! 3166: @item fs ! 3167: String to move the cursor back from the status line to its ! 3168: previous position (outside the status line). ! 3169: @item gn ! 3170: Flag: this terminal type is generic, not real. ! 3171: @item hc ! 3172: Flag: hardcopy terminal. ! 3173: @item hd ! 3174: String to move the cursor down half a line. ! 3175: @item ho ! 3176: String to position cursor at upper left corner. ! 3177: @item hs ! 3178: Flag: the terminal has a status line. ! 3179: @item hu ! 3180: String to move the cursor up half a line. ! 3181: @item hz ! 3182: Flag: terminal cannot accept @samp{~} as output. ! 3183: @item i1 ! 3184: String to initialize the terminal for each login session. ! 3185: @item i3 ! 3186: String to initialize the terminal for each login session. ! 3187: @item ic ! 3188: String to insert one character position at the cursor. ! 3189: @item IC ! 3190: String to insert @var{n} character positions at the cursor. ! 3191: @item if ! 3192: String naming a file of commands to initialize the terminal. ! 3193: @item im ! 3194: String to enter insert mode. ! 3195: @item in ! 3196: Flag: outputting a space is different from moving over empty positions. ! 3197: @item ip ! 3198: String to output following an inserted character in insert mode. ! 3199: @item is ! 3200: String to initialize the terminal for each login session. ! 3201: @item it ! 3202: Number: initial spacing between hardware tab stop columns. ! 3203: @item k0 ! 3204: String of input sent by function key 0 or 10. ! 3205: @item k1 @dots{} k9 ! 3206: Strings of input sent by function keys 1 through 9. ! 3207: @item K1 @dots{} K5 ! 3208: Strings sent by the five other keys in 3-by-3 array with arrows. ! 3209: @item ka ! 3210: String of input sent by the ``clear all tabs'' key. ! 3211: @item kA ! 3212: String of input sent by the ``insert line'' key. ! 3213: @item kb ! 3214: String of input sent by the ``backspace'' key. ! 3215: @item kC ! 3216: String of input sent by the ``clear screen'' key. ! 3217: @item kd ! 3218: String of input sent by typing the down-arrow key. ! 3219: @item kD ! 3220: String of input sent by the ``delete character'' key. ! 3221: @item ke ! 3222: String to make the function keys work locally. ! 3223: @item kE ! 3224: String of input sent by the ``clear to end of line'' key. ! 3225: @item kF ! 3226: String of input sent by the ``scroll forward'' key. ! 3227: @item kh ! 3228: String of input sent by typing the ``home-position'' key. ! 3229: @item kH ! 3230: String of input sent by the ``home down'' key. ! 3231: @item kI ! 3232: String of input sent by the ``insert character'' or ``enter ! 3233: insert mode'' key. ! 3234: @item kl ! 3235: String of input sent by typing the left-arrow key. ! 3236: @item kL ! 3237: String of input sent by the ``delete line'' key. ! 3238: @item km ! 3239: Flag: the terminal has a Meta key. ! 3240: @item kM ! 3241: String of input sent by the ``exit insert mode'' key. ! 3242: @item kn ! 3243: Numeric value, the number of numbered function keys. ! 3244: @item kN ! 3245: String of input sent by the ``next page'' key. ! 3246: @item ko ! 3247: Very obsolete string listing the terminal's named function keys. ! 3248: @item kP ! 3249: String of input sent by the ``previous page'' key. ! 3250: @item kr ! 3251: String of input sent by typing the right-arrow key. ! 3252: @item kR ! 3253: String of input sent by the ``scroll reverse'' key. ! 3254: @item ks ! 3255: String to make the function keys transmit. ! 3256: @item kS ! 3257: String of input sent by the ``clear to end of screen'' key. ! 3258: @item kt ! 3259: String of input sent by the ``clear tab stop this column'' key. ! 3260: @item kT ! 3261: String of input sent by the ``set tab stop in this column'' key. ! 3262: @item ku ! 3263: String of input sent by typing the up-arrow key. ! 3264: @item l0 ! 3265: String on keyboard labelling function key 0 or 10. ! 3266: @item l1 @dots{} l9 ! 3267: Strings on keyboard labelling function keys 1 through 9. ! 3268: @item le ! 3269: String to move the cursor left one column. ! 3270: @item LE ! 3271: String to move cursor left @var{n} columns. ! 3272: @item li ! 3273: Number: height of the screen. ! 3274: @item ll ! 3275: String to position cursor at lower left corner. ! 3276: @item lm ! 3277: Number: lines of display memory. ! 3278: @item mb ! 3279: String to enter blinking mode. ! 3280: @item md ! 3281: String to enter double-bright mode. ! 3282: @item me ! 3283: String to turn off all appearance modes ! 3284: @item mh ! 3285: String to enter half-bright mode. ! 3286: @item mi ! 3287: Flag: cursor motion in insert mode is safe. ! 3288: @item mk ! 3289: String to enter invisible mode. ! 3290: @item mm ! 3291: String to enable the functioning of the Meta key. ! 3292: @item mo ! 3293: String to disable the functioning of the Meta key. ! 3294: @item mp ! 3295: String to enter protected mode. ! 3296: @item mr ! 3297: String to enter reverse-video mode. ! 3298: @item ms ! 3299: Flag: cursor motion in standout mode is safe. ! 3300: @item nc ! 3301: Obsolete flag: do not use ASCII carriage-return on this terminal. ! 3302: @item nd ! 3303: String to move the cursor right one column. ! 3304: @item nl ! 3305: Obsolete alternative name for the @samp{do} and @samp{sf} capabilities. ! 3306: @item ns ! 3307: Flag: the terminal does not normally scroll for sequential output. ! 3308: @item nw ! 3309: String to move to start of next line, possibly clearing rest of old line. ! 3310: @item os ! 3311: Flag: terminal can overstrike. ! 3312: @item pb ! 3313: Number: the lowest baud rate at which padding is actually needed. ! 3314: @item pc ! 3315: String containing character for padding. ! 3316: @item pf ! 3317: String to terminate redirection of output to the printer. ! 3318: @item po ! 3319: String to redirect further output to the printer. ! 3320: @item pO ! 3321: String to redirect @var{n} characters ofoutput to the printer. ! 3322: @item ps ! 3323: String to print the screen on the attached printer. ! 3324: @item rc ! 3325: String to move to last saved cursor position. ! 3326: @item RI ! 3327: String to move cursor right @var{n} columns. ! 3328: @item rp ! 3329: String to output character @var{c} repeated @var{n} times. ! 3330: @item rs ! 3331: String to reset the terminal from any strange modes. ! 3332: @item sa ! 3333: String to turn on an arbitrary combination of appearance modes. ! 3334: @item sc ! 3335: String to save the current cursor position. ! 3336: @item se ! 3337: String to leave standout mode. ! 3338: @item sf ! 3339: String to scroll the screen one line up. ! 3340: @item SF ! 3341: String to scroll the screen @var{n} lines up. ! 3342: @item sg ! 3343: Number: width of magic standout cookie. Absent if magic cookies are ! 3344: not used. ! 3345: @item so ! 3346: String to enter standout mode. ! 3347: @item sr ! 3348: String to scroll the screen one line down. ! 3349: @item SR ! 3350: String to scroll the screen @var{n} line down. ! 3351: @item st ! 3352: String to set tab stop at current cursor column on all lines. ! 3353: programs. ! 3354: @item ta ! 3355: String to move the cursor right to the next hardware tab stop column. ! 3356: @item te ! 3357: String to return terminal to settings for sequential output. ! 3358: @item ti ! 3359: String to initialize terminal for random cursor motion. ! 3360: @item ts ! 3361: String to move the terminal cursor into the status line. ! 3362: @item uc ! 3363: String to underline one character and move cursor right. ! 3364: @item ue ! 3365: String to turn off underline mode ! 3366: @item ug ! 3367: Number: width of underlining magic cookie. Absent if underlining ! 3368: doesn't use magic cookies. ! 3369: @item ul ! 3370: Flag: underline by overstriking with an underscore. ! 3371: @item up ! 3372: String to move the cursor vertically up one line. ! 3373: @item UP ! 3374: String to move cursor vertically up @var{n} lines. ! 3375: @item us ! 3376: String to turn on underline mode ! 3377: @item vb ! 3378: String to make the screen flash. ! 3379: @item ve ! 3380: String to return the cursor to normal. ! 3381: @item vi ! 3382: String to make the cursor invisible. ! 3383: @item vs ! 3384: String to enhance the cursor. ! 3385: @item wi ! 3386: String to set the terminal output screen window. ! 3387: @item ws ! 3388: Number: the width of the status line. ! 3389: @item xb ! 3390: Flag: superbee terminal. ! 3391: @item xn ! 3392: Flag: cursor wraps in a strange way. ! 3393: @item xs ! 3394: Flag: clearing a line is the only way to clear the appearance modes of ! 3395: positions in that line (or, only way to remove magic cookies on that ! 3396: line). ! 3397: @item xt ! 3398: Flag: Teleray 1061; several strange characteristics. ! 3399: @end table ! 3400: ! 3401: @node Var Index, Cap Index, Summary, Top ! 3402: @unnumbered Variable and Function Index ! 3403: ! 3404: @printindex fn ! 3405: ! 3406: @node Cap Index, Index, Var Index, Top ! 3407: @unnumbered Capability Index ! 3408: ! 3409: @printindex ky ! 3410: ! 3411: @node Index,, Cap Index, Top ! 3412: @unnumbered Concept Index ! 3413: ! 3414: @printindex cp ! 3415: ! 3416: @contents ! 3417: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.