|
|
1.1 ! root 1: Info file: termcap, -*-Text-*- ! 2: produced by texinfo-format-buffer ! 3: from file: termcap.texinfo ! 4: ! 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: Permission is granted to copy and distribute modified versions of this ! 14: manual under the conditions for verbatim copying, provided that the entire ! 15: resulting derived work is distributed under the terms of a permission ! 16: notice identical to this one. ! 17: ! 18: Permission is granted to copy and distribute translations of this manual ! 19: into another language, under the above conditions for modified versions, ! 20: except that this permission notice may be stated in a translation approved ! 21: by the Foundation. ! 22: ! 23: ! 24: ! 25: ! 26: File: termcap Node: Basic, Prev: Capabilities, Up: Capabilities, Next: Screen Size ! 27: ! 28: Basic Characteristics ! 29: ===================== ! 30: ! 31: This section documents the capabilities that describe the basic and ! 32: nature of the terminal, and also those that are relevant to the output ! 33: of graphic characters. ! 34: ! 35: `os' ! 36: Flag whose presence means that the terminal can overstrike. This ! 37: means that outputting a graphic character does not erase whatever was ! 38: present in the same character position before. The terminals that can ! 39: overstrike include printing terminals, storage tubes (all obsolete ! 40: nowadays), and many bit-map displays. ! 41: ! 42: `eo' ! 43: Flag whose presence means that outputting a space can erase an ! 44: overstrike. If this is not present and overstriking is supported, ! 45: output of a space has no effect except to move the cursor. ! 46: ! 47: `gn' ! 48: Flag whose presence means that this terminal type is a generic type ! 49: which does not really describe any particular terminal. Generic types ! 50: are intended for use as the default type assigned when the user ! 51: connects to the system, with the intention that the user should ! 52: specify what type he really has. One example of a generic type ! 53: is the type `network'. ! 54: ! 55: Since the generic type cannot say how to do anything interesting with ! 56: the terminal, termcap-using programs will always find that the ! 57: terminal is too weak to be supported if the user has failed to specify ! 58: a real terminal type in place of the generic one. The `gn' flag ! 59: directs these programs to use a different error message: "You have ! 60: not specified your real terminal type", rather than "Your terminal ! 61: is not powerful enough to be used". ! 62: ! 63: `hc' ! 64: Flag whose presence means this is a hardcopy terminal. ! 65: ! 66: `rp' ! 67: String of commands to output a graphic character C, repeated N ! 68: times. The first parameter value is the ASCII code for the desired ! 69: character, and the second parameter is the number of times to repeat the ! 70: character. Often this command requires padding proportional to the ! 71: number of times the character is repeated. This effect can be had by ! 72: using parameter arithmetic with `%'-sequences to compute the ! 73: amount of padding, then generating the result as a number at the front ! 74: of the string so that `tputs' will treat it as padding. ! 75: ! 76: `hz' ! 77: Flag whose presence means that the ASCII character `~' cannot be ! 78: output on this terminal because it is used for display commands. ! 79: ! 80: Programs handle this flag by checking all text to be output and ! 81: replacing each `~' with some other character(s). If this is not ! 82: done, the screen will be thoroughly garbled. ! 83: ! 84: The old Hazeltine terminals that required such treatment are probably ! 85: very rare today, so you might as well not bother to support this flag. ! 86: ! 87: `CC' ! 88: String whose presence means the terminal has a settable command ! 89: character. The value of the string is the default command character ! 90: (which is usually ESC). ! 91: ! 92: All the strings of commands in the terminal description should be ! 93: written to use the default command character. If you are writing an ! 94: application program that changes the command character, use the ! 95: `CC' capability to figure out how to translate all the display ! 96: commands to work with the new command character. ! 97: ! 98: Most programs have no reason to look at the `CC' capability. ! 99: ! 100: `xb' ! 101: Flag whose presence identifies Superbee terminals which are unable to ! 102: transmit the characters ESC and `Control-C'. Programs which ! 103: support this flag are supposed to check the input for the code sequences ! 104: sent by the F1 and F2 keys, and pretend that ESC ! 105: or `Control-C' (respectively) had been read. But this flag is ! 106: obsolete, and not worth supporting. ! 107: ! 108: ! 109: File: termcap Node: Screen Size, Prev: Basic, Up: Capabilities, Next: Cursor Motion ! 110: ! 111: Screen Size ! 112: =========== ! 113: ! 114: A terminal description has two capabilities, `co' and `li', ! 115: that describe the screen size in columns and lines. But there is more ! 116: to the question of screen size than this. ! 117: ! 118: On some operating systems the "screen" is really a window and the ! 119: effective width can vary. On some of these systems, `tgetnum' ! 120: uses the actual width of the window to decide what value to return for ! 121: the `co' capability, overriding what is actually written in the ! 122: terminal description. On other systems, it is up to the application ! 123: program to check the actual window width using a system call. For ! 124: example, on BSD 4.3 systems, the system call `ioctl' with code ! 125: `TIOCGWINSZ' will tell you the current screen size. ! 126: ! 127: On all window systems, termcap is powerless to advise the application ! 128: program if the user resizes the window. Application programs must ! 129: deal with this possibility in a system-dependent fashion. On some ! 130: systems the C shell handles part of the problem by detecting changes ! 131: in window size and setting the `TERMCAP' environment variable ! 132: appropriately. This takes care of application programs that are ! 133: started subsequently. It does not help application programs already ! 134: running. ! 135: ! 136: On some systems, including BSD 4.3, all programs using a terminal get ! 137: a signal named `SIGWINCH' whenever the screen size changes. ! 138: Programs that use termcap should handle this signal by using ! 139: `ioctl TIOCGWINSZ' to learn the new screen size. ! 140: ! 141: `co' ! 142: Numeric value, the width of the screen in character positions. Even ! 143: hardcopy terminals normally have a `co' capability. ! 144: ! 145: `li' ! 146: Numeric value, the height of the screen in lines. ! 147: ! 148: ! 149: File: termcap Node: Cursor Motion, Prev: Screen Size, Up: Capabilities, Next: Wrapping ! 150: ! 151: Cursor Motion ! 152: ============= ! 153: ! 154: Termcap assumes that the terminal has a "cursor", a spot on the screen ! 155: where a visible mark is displayed, and that most display commands take ! 156: effect at the position of the cursor. It follows that moving the cursor ! 157: to a specified location is very important. ! 158: ! 159: There are many terminal capabilities for different cursor motion ! 160: operations. A terminal description should define as many as possible, but ! 161: most programs do not need to use most of them. One capability, `cm', ! 162: moves the cursor to an arbitrary place on the screen; this by itself is ! 163: sufficient for any application as long as there is no need to support ! 164: hardcopy terminals or certain old, weak displays that have only relative ! 165: motion commands. Use of other cursor motion capabilities is an ! 166: optimization, enabling the program to output fewer characters in some ! 167: common cases. ! 168: ! 169: If you plan to use the relative cursor motion commands in an application ! 170: program, you must know what the starting cursor position is. To do this, ! 171: you must keep track of the cursor position and update the records each ! 172: time anything is output to the terminal, including graphic characters. ! 173: In addition, it is necessary to know whether the terminal wraps after ! 174: writing in the rightmost column. *Note Wrapping::. ! 175: ! 176: One other motion capability needs special mention: `nw' moves the ! 177: cursor to the beginning of the following line, perhaps clearing all the ! 178: starting line after the cursor, or perhaps not clearing at all. This ! 179: capability is a least common denominator that is probably supported even by ! 180: terminals that cannot do most other things such as `cm' or `do'. ! 181: Even hardcopy terminals can support `nw'. ! 182: ! 183: `cm' ! 184: String of commands to position the cursor at line L, column C. ! 185: Both parameters are origin-zero, and are defined relative to the ! 186: screen, not relative to display memory. ! 187: ! 188: All display terminals except a few very obsolete ones support `cm', ! 189: so it is acceptable for an application program to refuse to operate on ! 190: terminals lacking `cm'. ! 191: ! 192: `ho' ! 193: String of commands to move the cursor to the upper left corner of the ! 194: screen (this position is called the "home position"). In ! 195: terminals where the upper left corner of the screen is not the same as ! 196: the beginning of display memory, this command must go to the upper ! 197: left corner of the screen, not the beginning of display memory. ! 198: ! 199: Every display terminal supports this capability, and many application ! 200: programs refuse to operate if the `ho' capability is missing. ! 201: ! 202: `ll' ! 203: String of commands to move the cursor to the lower left corner of the ! 204: screen. On some terminals, moving up from home position does this, ! 205: but programs should never assume that will work. Just output the ! 206: `ll' string (if it is provided); if moving to home position and ! 207: then moving up is the best way to get there, the `ll' command ! 208: will do that. ! 209: ! 210: `cr' ! 211: String of commands to move the cursor to the beginning of the line it ! 212: is on. If this capability is not specified, many programs assume ! 213: they can use the ASCII carriage return character for this. ! 214: ! 215: `le' ! 216: String of commands to move the cursor left one column. Unless the ! 217: `bw' flag capability is specified, the effect is undefined if the ! 218: cursor is at the left margin; do not use this command there. If ! 219: `bw' is present, this command may be used at the left margin, and ! 220: it wraps the cursor to the last column of the preceding line. ! 221: ! 222: `nd' ! 223: String of commands to move the cursor right one column. The effect is ! 224: undefined if the cursor is at the right margin; do not use this ! 225: command there, not even if `am' is present. ! 226: ! 227: `up' ! 228: String of commands to move the cursor vertically up one line. The ! 229: effect of sending this string when on the top line is undefined; ! 230: programs should never use it that way. ! 231: ! 232: `do' ! 233: String of commands to move the cursor vertically down one line. The ! 234: effect of sending this string when on the bottom line is undefined; ! 235: programs should never use it that way. ! 236: ! 237: The original idea was that this string would not contain a newline ! 238: character and therefore could be used without disabling the kernel's usual ! 239: habit of converting of newline into a carriage-return newline sequence. ! 240: But many terminal descriptions do use newline in the `do' string, so ! 241: this is not possible; a program which sends the `do' string must ! 242: disable output conversion in the kernel (*Note Initialize::). ! 243: ! 244: `bw' ! 245: Flag whose presence says that `le' may be used in column zero ! 246: to move to the last column of the preceding line. If this flag ! 247: is not present, `le' should not be used in column zero. ! 248: ! 249: `nw' ! 250: String of commands to move the cursor to start of next line, possibly ! 251: clearing rest of line (following the cursor) before moving. ! 252: ! 253: `DO', `UP', `LE', `RI' ! 254: Strings of commands to move the cursor N lines down vertically, ! 255: up vertically, or N columns left or right. Do not attempt to ! 256: move past any edge of the screen with these commands; the effect of ! 257: trying that is undefined. Only a few terminal descriptions provide ! 258: these commands, and most programs do not use them. ! 259: ! 260: `CM' ! 261: String of commands to position the cursor at line L, column ! 262: C, relative to display memory. Both parameters are origin-zero. ! 263: This capability is present only in terminals where there is a ! 264: difference between screen-relative and memory-relative addressing, and ! 265: not even in all such terminals. ! 266: ! 267: `ch' ! 268: String of commands to position the cursor at column C in the ! 269: same line it is on. This is a special case of `cm' in which the ! 270: vertical position is not changed. The `ch' capability is ! 271: provided only when it is faster to output than `cm' would be in ! 272: this special case. Programs should not assume most display terminals ! 273: have `ch'. ! 274: ! 275: `cv' ! 276: String of commands to position the cursor at line L in the same ! 277: column. This is a special case of `cm' in which the horizontal ! 278: position is not changed. The `cv' capability is provided only ! 279: when it is faster to output than `cm' would be in this special ! 280: case. Programs should not assume most display terminals have ! 281: `cv'. ! 282: ! 283: `sc' ! 284: String of commands to make the terminal save the current cursor ! 285: position. Only the last saved position can be used. If this ! 286: capability is present, `rc' should be provided also. Most ! 287: terminals have neither. ! 288: ! 289: `rc' ! 290: String of commands to make the terminal restore the last saved cursor ! 291: position. If this capability is present, `sc' should be provided ! 292: also. Most terminals have neither. ! 293: ! 294: `ff' ! 295: String of commands to advance to the next page, for a hardcopy ! 296: terminal. ! 297: ! 298: `ta' ! 299: String of commands to move the cursor right to the next hardware tab ! 300: stop column. Missing if the terminal does not have any kind of ! 301: hardware tabs. Do not send this command if the kernel's terminal ! 302: modes say that the kernel is expanding tabs into spaces. ! 303: ! 304: `bt' ! 305: String of commands to move the cursor left to the previous hardware ! 306: tab stop column. Missing if the terminal has no such ability; many ! 307: terminals do not. Do not send this command if the kernel's terminal ! 308: modes say that the kernel is expanding tabs into spaces. ! 309: ! 310: The following obsolete capabilities should be included in terminal ! 311: descriptions when appropriate, but should not be looked at by new programs. ! 312: ! 313: `nc' ! 314: Flag whose presence means the terminal does not support the ASCII ! 315: carriage return character as `cr'. This flag is needed because ! 316: old programs assume, when the `cr' capability is missing, that ! 317: ASCII carriage return can be used for the purpose. We use `nc' ! 318: to tell the old programs that carriage return may not be used. ! 319: ! 320: New programs should not assume any default for `cr', so they need ! 321: not look at `nc'. However, descriptions should contain `nc' ! 322: whenever they do not contain `cr'. ! 323: ! 324: `xt' ! 325: Flag whose presence means that the ASCII tab character may not be used ! 326: for cursor motion. This flag exists because old programs assume, when ! 327: the `ta' capability is missing, that ASCII tab can be used for ! 328: the purpose. We use `xt' to tell the old programs not to use tab. ! 329: ! 330: New programs should not assume any default for `ta', so they need ! 331: not look at `xt' in connection with cursor motion. Note that ! 332: `xt' also has implications for standout mode (*Note Standout::). ! 333: It is obsolete in regard to cursor motion but not in regard to ! 334: standout. ! 335: ! 336: In fact, `xt' means that the terminal is a Teleray 1061. ! 337: ! 338: `bc' ! 339: Very obsolete alternative name for the `le' capability. ! 340: ! 341: `bs' ! 342: Flag whose presence means that the ASCII character backspace may be ! 343: used to move the cursor left. Obsolete; look at `le' instead. ! 344: ! 345: `nl' ! 346: Obsolete capability which is a string that can either be used to move ! 347: the cursor down or to scroll. The same string must scroll when used ! 348: on the bottom line and move the cursor when used on any other line. ! 349: New programs should use `do' or `sf', and ignore `nl'. ! 350: ! 351: If there is no `nl' capability, some old programs assume they can ! 352: use the newline character for this purpose. These programs follow a ! 353: bad practice, but because they exist, it is still desirable to define ! 354: the `nl' capability in a terminal description if the best way to ! 355: move down is *not* a newline. ! 356: ! 357: ! 358: File: termcap Node: Wrapping, Prev: Cursor Motion, Up: Capabilities, Next: Scrolling ! 359: ! 360: Wrapping ! 361: ======== ! 362: ! 363: "Wrapping" means moving the cursor from the right margin to the left ! 364: margin of the following line. Some terminals wrap automatically when a ! 365: graphic character is output in the last column, while others do not. Most ! 366: application programs that use termcap need to know whether the terminal ! 367: wraps. There are two special flag capabilities to describe what the ! 368: terminal does when a graphic character is output in the last column. ! 369: ! 370: `am' ! 371: Flag whose presence means that writing a character in the last column ! 372: causes the cursor to wrap to the beginning of the next line. ! 373: ! 374: If `am' is not present, writing in the last column leaves the ! 375: cursor at the place where the character was written. ! 376: ! 377: Writing in the last column of the last line should be avoided on ! 378: terminals with `am', as it may or may not cause scrolling to ! 379: occur (*Note Scrolling::). Scrolling is surely not what you would ! 380: intend. ! 381: ! 382: If your program needs to check the `am' flag, then it also needs ! 383: to check the `xn' flag which indicates that wrapping happens in a ! 384: strange way. Many common terminals have the `xn' flag. ! 385: ! 386: `xn' ! 387: Flag whose presence means that the cursor wraps in a strange way. At ! 388: least two distinct kinds of strange behavior are known; the termcap ! 389: data base does not contain anything to distinguish the two. ! 390: ! 391: On Concept-100 terminals, output in the last column wraps the cursor ! 392: almost like an ordinary `am' terminal. But if the next thing ! 393: output is a newline, it is ignored. ! 394: ! 395: DEC VT-100 terminals (when the wrap switch is on) do a different ! 396: strange thing: the cursor wraps only if the next thing output is ! 397: another graphic character. In fact, the wrap occurs when the ! 398: following graphic character is received by the terminal, before the ! 399: character is placed on the screen. ! 400: ! 401: On both of these terminals, after writing in the last column a ! 402: following graphic character will be displayed in the first column of ! 403: the following line. But the effect of relative cursor motion ! 404: characters such as newline or backspace at such a time depends on the ! 405: terminal. The effect of erase or scrolling commands also depends on ! 406: the terminal. You can't assume anything about what they will do on a ! 407: terminal that has `xn'. So, to be safe, you should never do ! 408: these things at such a time on such a terminal. ! 409: ! 410: To be sure of reliable results on a terminal which has the `xn' ! 411: flag, output a `cm' absolute positioning command after writing in ! 412: the last column. Another safe thing to do is to output carriage-return ! 413: newline, which will leave the cursor at the beginning of the following ! 414: line. ! 415: ! 416: ! 417: File: termcap Node: Scrolling, Prev: Wrapping, Up: Capabilities, Next: Windows ! 418: ! 419: Scrolling ! 420: ========= ! 421: ! 422: "Scrolling" means moving the contents of the screen up or down one or ! 423: more lines. Moving the contents up is "forward scrolling"; moving them ! 424: down is "reverse scrolling". ! 425: ! 426: Scrolling happens after each line of output during ordinary output on most ! 427: display terminals. But in an application program that uses termcap for ! 428: random-access output, scrolling happens only when explicitly requested with ! 429: the commands in this section. ! 430: ! 431: Some terminals have a "scroll region" feature. This lets you limit ! 432: the effect of scrolling to a specified range of lines. Lines outside the ! 433: range are unaffected when scrolling happens. The scroll region feature ! 434: is available if either `cs' or `cS' is present. ! 435: ! 436: `sf' ! 437: String of commands to scroll the screen one line up, assuming it is ! 438: output with the cursor at the beginning of the bottom line. ! 439: ! 440: `sr' ! 441: String of commands to scroll the screen one line down, assuming it is ! 442: output with the cursor at the beginning of the top line. ! 443: ! 444: `SF' ! 445: String of commands to scroll the screen N lines up, assuming it ! 446: is output with the cursor at the beginning of the bottom line. ! 447: ! 448: `SR' ! 449: String of commands to scroll the screen N line down, assuming it ! 450: is output with the cursor at the beginning of the top line. ! 451: ! 452: `cs' ! 453: String of commands to set the scroll region. This command takes two ! 454: parameters, START and END, which are the line numbers ! 455: (origin-zero) of the first line to include in the scroll region and of ! 456: the last line to include in it. When a scroll region is set, ! 457: scrolling is limited to the specified range of lines; lines outside ! 458: the range are not affected by scroll commands. ! 459: ! 460: Do not try to move the cursor outside the scroll region. The region ! 461: remains set until explicitly removed. To remove the scroll region, ! 462: use another `cs' command specifying the full height of the ! 463: screen. ! 464: ! 465: The cursor position is undefined after the `cs' command is set, ! 466: so position the cursor with `cm' immediately afterward. ! 467: ! 468: `cS' ! 469: String of commands to set the scroll region using parameters in ! 470: different form. The effect is the same as if `cs' were used. ! 471: Four parameters are required: ! 472: ! 473: 1. Total number of lines on the screen. ! 474: 2. Number of lines above desired scroll region. ! 475: 3. Number of lines below (outside of) desired scroll region. ! 476: 4. Total number of lines on the screen, the same as the first parameter. ! 477: ! 478: This capability is a GNU extension that was invented to allow the Ann ! 479: Arbor Ambassador's scroll-region command to be described; it could ! 480: also be done by putting non-Unix `%'-sequences into a `cs' ! 481: string, but that would have confused Unix programs that used the ! 482: `cs' capability with the Unix termcap. Currently only GNU Emacs ! 483: uses the `cS' capability. ! 484: ! 485: `ns' ! 486: Flag which means that the terminal does not normally scroll for ! 487: ordinary sequential output. For modern terminals, this means that ! 488: outputting a newline in ordinary sequential output with the cursor on ! 489: the bottom line wraps to the top line. For some obsolete terminals, ! 490: other things may happen. ! 491: ! 492: The terminal may be able to scroll even if it does not normally do so. ! 493: If the `sf' capability is provided, it can be used for scrolling ! 494: regardless of `ns'. ! 495: ! 496: `da' ! 497: Flag whose presence means that lines scrolled up off the top of the ! 498: screen may come back if scrolling down is done subsequently. ! 499: ! 500: The `da' and `db' flags do not, strictly speaking, affect ! 501: how to scroll. But programs that scroll usually need to clear the ! 502: lines scrolled onto the screen, if these flags are present. ! 503: ! 504: `db' ! 505: Flag whose presence means that lines scrolled down off the bottom of ! 506: the screen may come back if scrolling up is done subsequently. ! 507: ! 508: `lm' ! 509: Numeric value, the number of lines of display memory that the terminal ! 510: has. A value of zero means that the terminal has more display memory ! 511: than can fit on the screen, but no fixed number of lines. (The number ! 512: of lines may depend on the amount of text in each line.) ! 513: ! 514: Any terminal description that defines `SF' should also define `sf'; ! 515: likewise for `SR' and `sr'. However, many terminals can only scroll by ! 516: one line at a time, so it is common to find `sf' and not `SF', or `sr' ! 517: without `SR'. ! 518: ! 519: Therefore, all programs that use the scrolling facilities should be ! 520: prepared to work with `sf' in the case that `SF' is absent, and likewise ! 521: with `sr'. On the other hand, an application program that uses only ! 522: `sf' and not `SF' is acceptable, though slow on some terminals. ! 523: ! 524: When outputting a scroll command with `tputs', the NLINES ! 525: argument should be the total number of lines in the portion of the screen ! 526: being scrolled. Very often these commands require padding proportional to ! 527: this number of lines. *Note Padding::. ! 528: ! 529: ! 530: File: termcap Node: Windows, Prev: Scrolling, Up: Capabilities, Next: Clearing ! 531: ! 532: Windows ! 533: ======= ! 534: ! 535: A "window", in termcap, is a rectangular portion of the screen to which ! 536: all display operations are restricted. Wrapping, clearing, scrolling, ! 537: insertion and deletion all operate as if the specified window were all the ! 538: screen there was. ! 539: ! 540: `wi' ! 541: String of commands to set the terminal output screen window. ! 542: This string requires four parameters, all origin-zero: ! 543: 1. The first line to include in the window. ! 544: 2. The last line to include in the window. ! 545: 3. The first column to include in the window. ! 546: 4. The last column to include in the window. ! 547: ! 548: Most terminals do not support windows. ! 549: ! 550: ! 551: File: termcap Node: Clearing, Prev: Windows, Up: Capabilities, Next: Insdel Line ! 552: ! 553: Clearing Parts of the Screen ! 554: ============================ ! 555: ! 556: There are several terminal capabilities for clearing parts of the screen ! 557: to blank. All display terminals support the `cl' string, and most ! 558: display terminals support all of these capabilities. ! 559: ! 560: `cl' ! 561: String of commands to clear the entire screen and position the cursor ! 562: at the upper left corner. ! 563: ! 564: `cd' ! 565: String of commands to clear the line the cursor is on, and all the ! 566: lines below it, down to the bottom of the screen. This command string ! 567: should be used only with the cursor in column zero; their effect is ! 568: undefined if the cursor is elsewhere. ! 569: ! 570: `ce' ! 571: String of commands to clear from the cursor to the end of the current ! 572: line. ! 573: ! 574: `ec' ! 575: String of commands to clear N characters, starting with the ! 576: character that the cursor is on. This command string is expected to ! 577: leave the cursor position unchanged. The parameter N should never ! 578: be large enough to reach past the right margin; the effect of such a ! 579: large parameter would be undefined. ! 580: ! 581: Clear to end of line (`ce') is extremely important in programs that ! 582: maintain an updating display. Nearly all display terminals support this ! 583: operation, so it is acceptable for a an application program to refuse to ! 584: work if `ce' is not present. However, if you do not want this ! 585: limitation, you can accomplish clearing to end of line by outputting spaces ! 586: until you reach the right margin. In order to do this, you must know the ! 587: current horizontal position. Also, this technique assumes that writing a ! 588: space will erase. But this happens to be true on all the display terminals ! 589: that fail to support `ce'. ! 590: ! 591: ! 592: File: termcap Node: Insdel Line, Prev: Clearing, Up: Capabilities, Next: Insdel Char ! 593: ! 594: Insert/Delete Line ! 595: ================== ! 596: ! 597: "Inserting a line" means creating a blank line in the middle ! 598: of the screen, and pushing the existing lines of text apart. In fact, ! 599: the lines above the insertion point do not change, while the lines below ! 600: move down, and one is normally lost at the bottom of the screen. ! 601: ! 602: "Deleting a line" means causing the line to disappear from the screen, ! 603: closing up the gap by moving the lines below it upward. A new line ! 604: appears at the bottom of the screen. Usually this line is blank, but ! 605: on terminals with the `db' flag it may be a line previously moved ! 606: off the screen bottom by scrolling or line insertion. ! 607: ! 608: Insertion and deletion of lines is useful in programs that maintain an ! 609: updating display some parts of which may get longer or shorter. They are ! 610: also useful in editors for scrolling parts of the screen, and for ! 611: redisplaying after lines of text are killed or inserted. ! 612: ! 613: Many terminals provide commands to insert or delete a single line at the ! 614: cursor position. Some provide the ability to insert or delete several ! 615: lines with one command, using the number of lines to insert or delete as a ! 616: parameter. Always move the cursor to column zero before using any of ! 617: these commands. ! 618: ! 619: `al' ! 620: String of commands to insert a blank line before the line the cursor ! 621: is on. The existing line, and all lines below it, are moved down. ! 622: The last line in the screen (or in the scroll region, if one is set) ! 623: disappears and in most circumstances is discarded. It may not be ! 624: discarded if the `db' is present (*Note Scrolling::). ! 625: ! 626: The cursor must be at the left margin before this command is used. ! 627: This command does not move the cursor. ! 628: ! 629: `dl' ! 630: String of commands to delete the line the cursor is on. The following ! 631: lines move up, and a blank line appears at the bottom of the screen ! 632: (or bottom of the scroll region). If the terminal has the `db' ! 633: flag, a nonblank line previously pushed off the screen bottom may ! 634: reappear at the bottom. ! 635: ! 636: The cursor must be at the left margin before this command is used. ! 637: This command does not move the cursor. ! 638: ! 639: `AL' ! 640: String of commands to insert N blank lines before the line that ! 641: the cursor is on. It is like `al' repeated N times, except ! 642: that it is as fast as one `al'. ! 643: ! 644: `DL' ! 645: String of commands to delete N lines starting with the line that ! 646: the cursor is on. It is like `dl' repeated N times, except ! 647: that it is as fast as one `dl'. ! 648: ! 649: Any terminal description that defines `AL' should also define `al'; ! 650: likewise for `DL' and `dl'. However, many terminals can only insert or ! 651: delete one line at a time, so it is common to find `al' and not `AL', or ! 652: `dl' without `DL'. ! 653: ! 654: Therefore, all programs that use the insert and delete facilities should ! 655: be prepared to work with `al' in the case that `AL' is absent, and ! 656: likewise with `dl'. On the other hand, it is acceptable to write an ! 657: application that uses only `al' and `dl' and does not look for `AL' or ! 658: `DL' at all. ! 659: ! 660: If a terminal does not support line insertion and deletion directly, ! 661: but does support a scroll region, the effect of insertion and deletion ! 662: can be obtained with scrolling. However, it is up to the individual ! 663: user program to check for this possibility and use the scrolling ! 664: commands to get the desired result. It is fairly important to implement ! 665: this alternate strategy, since it is the only way to get the effect of ! 666: line insertion and deletion on the popular VT100 terminal. ! 667: ! 668: Insertion and deletion of lines is affected by the scroll region on ! 669: terminals that have a settable scroll region. This is useful when it is ! 670: desirable to move any few consecutive lines up or down by a few lines. ! 671: *Note Scrolling::. ! 672: ! 673: The line pushed off the bottom of the screen is not lost if the terminal ! 674: has the `db' flag capability; instead, it is pushed into display ! 675: memory that does not appear on the screen. This is the same thing that ! 676: happens when scrolling pushes a line off the bottom of the screen. ! 677: Either reverse scrolling or deletion of a line can bring the apparently ! 678: lost line back onto the bottom of the screen. If the terminal has the ! 679: scroll region feature as well as `db', the pushed-out line really ! 680: is lost if a scroll region is in effect. ! 681: ! 682: When outputting an insert or delete command with `tputs', the ! 683: NLINES argument should be the total number of lines from the cursor ! 684: to the bottom of the screen (or scroll region). Very often these commands ! 685: require padding proportional to this number of lines. *Note Padding::. ! 686: ! 687: For `AL' and `DL' the NLINES argument should *not* ! 688: depend on the number of lines inserted or deleted; only the total number of ! 689: lines affected. This is because it is just as fast to insert two or ! 690: N lines with `AL' as to insert one line with `al'. ! 691: ! 692: ! 693: File: termcap Node: Insdel Char, Prev: Insdel Line, Up: Capabilities, Next: Standout ! 694: ! 695: Insert/Delete Character ! 696: ======================= ! 697: ! 698: "Inserting a character" means creating a blank space in the middle of a ! 699: line, and pushing the rest of the line rightward. The character in the ! 700: rightmost column is lost. ! 701: ! 702: "Deleting a character" means causing the character to disappear from ! 703: the screen, closing up the gap by moving the rest of the line leftward. A ! 704: blank space appears in the rightmost column. ! 705: ! 706: Insertion and deletion of characters is useful in programs that maintain an ! 707: updating display some parts of which may get longer or shorter. It is also ! 708: useful in editors for redisplaying the results of editing within a line. ! 709: ! 710: Many terminals provide commands to insert or delete a single character at ! 711: the cursor position. Some provide the ability to insert or delete several ! 712: characters with one command, using the number of characters to insert or ! 713: delete as a parameter. ! 714: ! 715: Many terminals provide an insert mode in which outputting a graphic ! 716: character has the added effect of inserting a position for that character. ! 717: A special command string is used to enter insert mode and another is used ! 718: to exit it. The reason for designing a terminal with an insert mode rather ! 719: than an insert command is that inserting character positions is usually ! 720: followed by writing characters into them. With insert mode, this is as ! 721: fast as simply writing the characters, except for the fixed overhead of ! 722: entering and leaving insert mode. However, when the line speed is great ! 723: enough, padding may be required for the graphic characters output in insert ! 724: mode. ! 725: ! 726: Some terminals require you to enter insert mode and then output a special ! 727: command for each position to be inserted. Or they may require special ! 728: commands to be output before or after each graphic character to be ! 729: inserted. ! 730: ! 731: Deletion of characters is usually accomplished by a straightforward command ! 732: to delete one or several positions; but on some terminals, it is necessary ! 733: to enter a special delete mode before using the delete command, and leave ! 734: delete mode afterward. Sometimes delete mode and insert mode are the same ! 735: mode. ! 736: ! 737: Some terminals make a distinction between character positions in which a ! 738: space character has been output and positions which have been cleared. On ! 739: these terminals, the effect of insert or delete character runs to the first ! 740: cleared position rather than to the end of the line. In fact, the effect ! 741: may run to more than one line if there is no cleared position to stop the ! 742: shift on the first line. These terminals are identified by the `in' ! 743: flag capability. ! 744: ! 745: On terminals with the `in' flag, the technique of skipping over ! 746: characters that you know were cleared, and then outputting text later on in ! 747: the same line, causes later insert and delete character operations on that ! 748: line to do nonstandard things. A program that has any chance of doing this ! 749: must check for the `in' flag and must be careful to write explicit ! 750: space characters into the intermediate columns when `in' is present. ! 751: ! 752: A plethora of terminal capabilities are needed to describe all of this ! 753: complexity. Here is a list of them all. Following the list, we present ! 754: an algorithm for programs to use to take proper account of all of these ! 755: capabilities. ! 756: ! 757: `im' ! 758: String of commands to enter insert mode. ! 759: ! 760: If the terminal has no special insert mode, but it can insert ! 761: characters with a special command, `im' should be defined with a ! 762: null value, because the `vi' editor assumes that insertion of a ! 763: character is impossible if `im' is not provided. ! 764: ! 765: New programs should not act like `vi'. They should pay attention ! 766: to `im' only if it is defined. ! 767: ! 768: `ei' ! 769: String of commands to leave insert mode. This capability must be ! 770: present if `im' is. ! 771: ! 772: On a few old terminals the same string is used to enter and exit ! 773: insert mode. This string turns insert mode on if it was off, and off ! 774: it it was on. You can tell these terminals because the `ei' ! 775: string equals the `im' string. If you want to support these ! 776: terminals, you must always remember accurately whether insert mode is ! 777: in effect. However, these terminals are obsolete, and it is ! 778: reasonable to refuse to support them. On all modern terminals, you ! 779: can safely output `ei' at any time to ensure that insert mode is ! 780: turned off. ! 781: ! 782: `ic' ! 783: String of commands to insert one character position at the cursor. ! 784: The cursor does not move. ! 785: ! 786: If outputting a graphic character while in insert mode is sufficient ! 787: to insert the character, then the `ic' capability should be ! 788: defined with a null value. ! 789: ! 790: If your terminal offers a choice of ways to insert---either use insert ! 791: mode or use a special command---then define `im' and do not define ! 792: `ic', since this gives the most efficient operation when several ! 793: characters are to be inserted. *Do not* define both strings, for ! 794: that means that *both* must be used each time insertion is done. ! 795: ! 796: `ip' ! 797: String of commands to output following an inserted graphic character ! 798: in insert mode. Often it is used just for a padding spec, when padding ! 799: is needed after an inserted character (*Note Padding::). ! 800: ! 801: `IC' ! 802: String of commands to insert N character positions at and after ! 803: the cursor. It has the same effect as repeating the `ic' string ! 804: and a space, N times. ! 805: ! 806: If `IC' is provided, application programs may use it without first ! 807: entering insert mode. ! 808: ! 809: `mi' ! 810: Flag whose presence means it is safe to move the cursor while in insert ! 811: mode and assume the terminal remains in insert mode. ! 812: ! 813: `in' ! 814: Flag whose presence means that the terminal distinguishes between ! 815: character positions in which space characters have been output and ! 816: positions which have been cleared. ! 817: ! 818: An application program can assume that the terminal can do character ! 819: insertion if *any one of* the capabilities `IC', `im', ! 820: `ic' or `ip' is provided. ! 821: ! 822: To insert N blank character positions, move the cursor to the place ! 823: to insert them and follow this algorithm: ! 824: ! 825: 1. If an `IC' string is provided, output it with parameter N ! 826: and you are finished. Otherwise (or if you don't want to bother to ! 827: look for an `IC' string) follow the remaining steps. ! 828: ! 829: 2. Output the `im' string, if there is one, unless the terminal is ! 830: already in insert mode. ! 831: ! 832: 3. Repeat steps 4 through 6, N times. ! 833: ! 834: 4. Output the `ic' string if any. ! 835: ! 836: 5. Output a space. ! 837: ! 838: 6. Output the `ip' string if any. ! 839: ! 840: 7. Output the `ei' string, eventually, to exit insert mode. There ! 841: is no need to do this right away. If the `mi' flag is present, ! 842: you can move the cursor and the cursor will remain in insert mode; ! 843: then you can do more insertion elsewhere without reentering insert ! 844: mode. ! 845: ! 846: To insert N graphic characters, position the cursor and follow this ! 847: algorithm: ! 848: ! 849: 1. If an `IC' string is provided, output it with parameter N, ! 850: then output the graphic characters, and you are finished. Otherwise ! 851: (or if you don't want to bother to look for an `IC' string) ! 852: follow the remaining steps. ! 853: ! 854: 2. Output the `im' string, if there is one, unless the terminal is ! 855: already in insert mode. ! 856: ! 857: 3. For each character to be output, repeat steps 4 through 6. ! 858: ! 859: 4. Output the `ic' string if any. ! 860: ! 861: 5. Output the next graphic character. ! 862: ! 863: 6. Output the `ip' string if any. ! 864: ! 865: 7. Output the `ei' string, eventually, to exit insert mode. There ! 866: is no need to do this right away. If the `mi' flag is present, ! 867: you can move the cursor and the cursor will remain in insert mode; ! 868: then you can do more insertion elsewhere without reentering insert ! 869: mode. ! 870: ! 871: Note that this is not the same as the original Unix termcap specifications ! 872: in one respect: it assumes that the `IC' string can be used without ! 873: entering insert mode. This is true as far as I know, and it allows you be ! 874: able to avoid entering and leaving insert mode, and also to be able to ! 875: avoid the inserted-character padding after the characters that go into the ! 876: inserted positions. ! 877: ! 878: Deletion of characters is less complicated; deleting one column is done by ! 879: outputting the `dc' string. However, there may be a delete mode that ! 880: must be entered with `dm' in order to make `dc' work. ! 881: ! 882: `dc' ! 883: String of commands to delete one character position at the cursor. If ! 884: `dc' is not present, the terminal cannot delete characters. ! 885: ! 886: `DC' ! 887: String of commands to delete N characters starting at the cursor. ! 888: It has the same effect as repeating the `dc' string N times. ! 889: Any terminal description that has `DC' also has `dc'. ! 890: ! 891: `dm' ! 892: String of commands to enter delete mode. If not present, there is no ! 893: delete mode, and `dc' can be used at any time (assuming there is ! 894: a `dc'). ! 895: ! 896: `ed' ! 897: String of commands to exit delete mode. This must be present if ! 898: `dm' is. ! 899: ! 900: To delete N character positions, position the cursor and follow these ! 901: steps: ! 902: ! 903: 1. If the `DC' string is present, output it with parameter N ! 904: and you are finished. Otherwise, follow the remaining steps. ! 905: ! 906: 2. Output the `dm' string, unless you know the terminal is already ! 907: in delete mode. ! 908: ! 909: 3. Output the `dc' string N times. ! 910: ! 911: 4. Output the `ed' string eventually. If the flag capability ! 912: `mi' is present, you can move the cursor and do more deletion ! 913: without leaving and reentering delete mode. ! 914: ! 915: As with the `IC' string, we have departed from the original termcap ! 916: specifications by assuming that `DC' works without entering delete ! 917: mode even though `dc' would not. ! 918: ! 919: If the `dm' and `im' capabilities are both present and have the ! 920: same value, it means that the terminal has one mode for both insertion and ! 921: deletion. It is useful for a program to know this, because then it can do ! 922: insertions after deletions, or vice versa, without leaving insert/delete ! 923: mode and reentering it. ! 924: ! 925: ! 926: File: termcap Node: Standout, Prev: Insdel Char, Up: Capabilities, Next: Underlining ! 927: ! 928: Standout and Appearance Modes ! 929: ============================= ! 930: ! 931: "Appearance modes" are modifications to the ways characters are ! 932: displayed. Typical appearance modes include reverse video, dim, bright, ! 933: blinking, underlined, invisible, and alternate character set. Each kind of ! 934: terminal supports various among these, or perhaps none. ! 935: ! 936: For each type of terminal, one appearance mode or combination of them that ! 937: looks good for highlighted text is chosen as the "standout mode". The ! 938: capabilities `so' and `se' say how to enter and leave standout ! 939: mode. Programs that use appearance modes only to highlight some text ! 940: generally use the standout mode so that they can work on as many terminals ! 941: as possible. Use of specific appearance modes other than "underlined" ! 942: and "alternate character set" is rare. ! 943: ! 944: Terminals that implement appearance modes fall into two general classes as ! 945: to how they do it. ! 946: ! 947: In some terminals, the presence or absence of any appearance mode is ! 948: recorded separately for each character position. In these terminals, each ! 949: graphic character written is given the appearance modes current at the time ! 950: it is written, and keeps those modes until it is erased or overwritten. ! 951: There are special commands to turn the appearance modes on or off for ! 952: characters to be written in the future. ! 953: ! 954: In other terminals, the change of appearance modes is represented by a ! 955: marker that belongs to a certain screen position but affects all following ! 956: screen positions until the next marker. These markers are traditionally ! 957: called "magic cookies". ! 958: ! 959: The same capabilities (`so', `se', `mb' and so on) for ! 960: turning appearance modes on and off are used for both magic-cookie ! 961: terminals and per-character terminals. On magic cookie terminals, these ! 962: give the commands to write the magic cookies. On per-character terminals, ! 963: they change the current modes that affect future output and erasure. Some ! 964: simple applications can use these commands without knowing whether or not ! 965: they work by means of cookies. ! 966: ! 967: However, a program that maintains and updates a display needs to know ! 968: whether the terminal uses magic cookies, and exactly what their effect is. ! 969: This information comes from the `sg' capability. ! 970: ! 971: The `sg' capability is a numeric capability whose presence indicates ! 972: that the terminal uses magic cookies for appearance modes. Its value is ! 973: the number of character positions that a magic cookie occupies. Usually ! 974: the cookie occupies one or more character positions on the screen, and these ! 975: character positions are displayed as blank, but in some terminals the ! 976: cookie has zero width. ! 977: ! 978: The `sg' capability describes both the magic cookie to turn standout ! 979: on and the cookie to turn it off. This makes the assumption that both ! 980: kinds of cookie have the same width on the screen. If that is not true, ! 981: the narrower cookie must be "widened" with spaces until it has the same ! 982: width as the other. ! 983: ! 984: On some magic cookie terminals, each line always starts with normal ! 985: display; in other words, the scope of a magic cookie never extends over ! 986: more than one line. But on other terminals, one magic cookie affects all ! 987: the lines below it unless explicitly canceled. Termcap does not define any ! 988: way to distinguish these two ways magic cookies can work. To be safe, it ! 989: is best to put a cookie at the beginning of each line. ! 990: ! 991: On some per-character terminals, standout mode or other appearance modes ! 992: may be canceled by moving the cursor. On others, moving the cursor has no ! 993: effect on the state of the appearance modes. The latter class of terminals ! 994: are given the flag capability `ms' ("can move in standout"). All ! 995: programs that might have occasion to move the cursor while appearance modes ! 996: are turned on must check for this flag; if it is not present, they should ! 997: reset appearance modes to normal before doing cursor motion. ! 998: ! 999: A program that has turned on only standout mode should use `se' to ! 1000: reset the standout mode to normal. A program that has turned on only ! 1001: alternate character set mode should use `ae' to return it to normal. ! 1002: If it is possible that any other appearance modes are turned on, use the ! 1003: `me' capability to return them to normal. ! 1004: ! 1005: Note that the commands to turn on one appearance mode, including `so' ! 1006: and `mb' ... `mr', if used while some other appearance modes ! 1007: are turned on, may combine the two modes on some terminals but may turn off ! 1008: the mode previously enabled on other terminals. This is because some ! 1009: terminals do not have a command to set or clear one appearance mode without ! 1010: changing the others. Programs should not attempt to use appearance modes ! 1011: in combination except with `sa', and when switching from one single ! 1012: mode to another should always turn off the previously enabled mode and then ! 1013: turn on the new desired mode. ! 1014: ! 1015: On some old terminals, the `so' and `se' commands may be the same ! 1016: command, which has the effect of turning standout on if it is off, or off ! 1017: it is on. It is therefore risky for a program to output extra `se' ! 1018: commands for good measure. Fortunately, all these terminals are obsolete. ! 1019: ! 1020: Programs that update displays in which standout-text may be replaced with ! 1021: non-standout text must check for the `xs' flag. In a per-character ! 1022: terminal, this flag says that the only way to remove standout once written is ! 1023: to clear that portion of the line with the `ce' string or something ! 1024: even more powerful (*Note Clearing::); just writing new characters at those ! 1025: screen positions will not change the modes in effect there. In a magic ! 1026: cookie terminal, `xs' says that the only way to remove a cookie is to ! 1027: clear a portion of the line that includes the cookie; writing a different ! 1028: cookie at the same position does not work. ! 1029: ! 1030: Such programs must also check for the `xt' flag, which means that the ! 1031: terminal is a Teleray 1061. On this terminal it is impossible to position ! 1032: the cursor at the front of a magic cookie, so the only two ways to remove a ! 1033: cookie are (1) to delete the line it is on or (2) to position the cursor at ! 1034: least one character before it (possibly on a previous line) and output the ! 1035: `se' string, which on these terminals finds and removes the next ! 1036: `so' magic cookie on the screen. (It may also be possible to remove a ! 1037: cookie which is not at the beginning of a line by clearing that line.) The ! 1038: `xt' capability also has implications for the use of tab characters, ! 1039: but in that regard it is obsolete (*Note Cursor Motion::). ! 1040: ! 1041: `so' ! 1042: String of commands to enter standout mode. ! 1043: ! 1044: `se' ! 1045: String of commands to leave standout mode. ! 1046: ! 1047: `sg' ! 1048: Numeric capability, the width on the screen of the magic cookie. This ! 1049: capability is absent in terminals that record appearance modes ! 1050: character by character. ! 1051: ! 1052: `ms' ! 1053: Flag whose presence means that it is safe to move the cursor while the ! 1054: appearance modes are not in the normal state. If this flag is absent, ! 1055: programs should always reset the appearance modes to normal before ! 1056: moving the cursor. ! 1057: ! 1058: `xs' ! 1059: Flag whose presence means that the only way to reset appearance modes ! 1060: already on the screen is to clear to end of line. On a per-character ! 1061: terminal, you must clear the area where the modes are set. On a magic ! 1062: cookie terminal, you must clear an area containing the cookie. ! 1063: See the discussion above. ! 1064: ! 1065: `xt' ! 1066: Flag whose presence means that the cursor cannot be positioned right ! 1067: in front of a magic cookie, and that `se' is a command to delete ! 1068: the next magic cookie following the cursor. See discussion above. ! 1069: ! 1070: `mb' ! 1071: String of commands to enter blinking mode. ! 1072: ! 1073: `md' ! 1074: String of commands to enter double-bright mode. ! 1075: ! 1076: `mh' ! 1077: String of commands to enter half-bright mode. ! 1078: ! 1079: `mk' ! 1080: String of commands to enter invisible mode. ! 1081: ! 1082: `mp' ! 1083: String of commands to enter protected mode. ! 1084: ! 1085: `mr' ! 1086: String of commands to enter reverse-video mode. ! 1087: ! 1088: `me' ! 1089: String of commands to turn off all appearance modes, including ! 1090: standout mode and underline mode. On some terminals it also turns off ! 1091: alternate character set mode; on others, it may not. This capability ! 1092: must be present if any of `mb' ... `mr' is present. ! 1093: ! 1094: `as' ! 1095: String of commands to turn on alternate character set mode. This mode ! 1096: assigns some or all graphic characters an alternate picture on the ! 1097: screen. There is no standard as to what the alternate pictures look ! 1098: like. ! 1099: ! 1100: `ae' ! 1101: String of commands to turn off alternate character set mode. ! 1102: ! 1103: `sa' ! 1104: String of commands to turn on an arbitrary combination of appearance ! 1105: modes. It accepts 9 parameters, each of which controls a particular ! 1106: kind of appearance mode. A parameter should be 1 to turn its appearance ! 1107: mode on, or zero to turn that mode off. Most terminals do not support ! 1108: the `sa' capability, even among those that do have various ! 1109: appearance modes. ! 1110: ! 1111: The nine parameters are, in order, STANDOUT, UNDERLINE, ! 1112: REVERSE, BLINK, HALF-BRIGHT, DOUBLE-BRIGHT, ! 1113: BLANK, PROTECT, ALT CHAR SET. ! 1114: ! 1115: ! 1116: File: termcap Node: Underlining, Prev: Standout, Up: Capabilities, Next: Cursor Visibility ! 1117: ! 1118: Underlining ! 1119: =========== ! 1120: ! 1121: Underlining on most terminals is a kind of appearance mode, much like ! 1122: standout mode. Therefore, it may be implemented using magic cookies or as ! 1123: a flag in the terminal whose current state affects each character that is ! 1124: output. *Note Standout::, for a full explanation. ! 1125: ! 1126: The `ug' capability is a numeric capability whose presence indicates ! 1127: that the terminal uses magic cookies for underlining. Its value is the ! 1128: number of character positions that a magic cookie for underlining occupies; ! 1129: it is used for underlining just as `sg' is used for standout. Aside ! 1130: from the simplest applications, it is impossible to use underlining ! 1131: correctly without paying attention to the value of `ug'. ! 1132: ! 1133: `us' ! 1134: String of commands to turn on underline mode or to output a magic cookie ! 1135: to start underlining. ! 1136: ! 1137: `ue' ! 1138: String of commands to turn off underline mode or to output a magic ! 1139: cookie to stop underlining. ! 1140: ! 1141: `ug' ! 1142: Width of magic cookie that represents a change of underline mode; ! 1143: or missing, if the terminal does not use a magic cookie for this. ! 1144: ! 1145: `ms' ! 1146: Flag whose presence means that it is safe to move the cursor while the ! 1147: appearance modes are not in the normal state. Underlining is an ! 1148: appearance mode. If this flag is absent, programs should always turn ! 1149: off underlining before moving the cursor. ! 1150: ! 1151: There are two other, older ways of doing underlining: there can be a ! 1152: command to underline a single character, or the output of `_', the ! 1153: ASCII underscore character, as an overstrike could cause a character to be ! 1154: underlined. New programs need not bother to handle these capabilities ! 1155: unless the author cares strongly about the obscure terminals which support ! 1156: them. However, terminal descriptions should provide these capabilities ! 1157: when appropriate. ! 1158: ! 1159: `uc' ! 1160: String of commands to underline the character under the cursor, and ! 1161: move the cursor right. ! 1162: ! 1163: `ul' ! 1164: Flag whose presence means that the terminal can underline by ! 1165: overstriking an underscore character (`_'); some terminals can do ! 1166: this even though they do not support overstriking in general. An ! 1167: implication of this flag is that when outputting new text to overwrite ! 1168: old text, underscore characters must be treated specially lest they ! 1169: underline the old text instead. ! 1170: ! 1171:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.