Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 1 | .\" $Id: terminfo.tail,v 1.49 2008/02/16 20:57:43 tom Exp $ |
| 2 | .\" Beginning of terminfo.tail file |
| 3 | .\" This file is part of ncurses. |
| 4 | .\" See "terminfo.head" for copyright. |
| 5 | .ps +1 |
| 6 | . |
| 7 | .SS A Sample Entry |
| 8 | . |
| 9 | The following entry, describing an ANSI-standard terminal, is representative |
| 10 | of what a \fBterminfo\fR entry for a modern terminal typically looks like. |
| 11 | .PP |
| 12 | .nf |
| 13 | .in -2 |
| 14 | .ta .3i |
| 15 | .ft CW |
| 16 | \s-2ansi|ansi/pc-term compatible with color, |
| 17 | mc5i, |
| 18 | colors#8, ncv#3, pairs#64, |
| 19 | cub=\\E[%p1%dD, cud=\\E[%p1%dB, cuf=\\E[%p1%dC, |
| 20 | cuu=\\E[%p1%dA, dch=\\E[%p1%dP, dl=\\E[%p1%dM, |
| 21 | ech=\\E[%p1%dX, el1=\\E[1K, hpa=\\E[%p1%dG, ht=\\E[I, |
| 22 | ich=\\E[%p1%d@, il=\\E[%p1%dL, indn=\\E[%p1%dS, .indn=\\E[%p1%dT, |
| 23 | kbs=^H, kcbt=\\E[Z, kcub1=\\E[D, kcud1=\\E[B, |
| 24 | kcuf1=\\E[C, kcuu1=\\E[A, kf1=\\E[M, kf10=\\E[V, |
| 25 | kf11=\\E[W, kf12=\\E[X, kf2=\\E[N, kf3=\\E[O, kf4=\\E[P, |
| 26 | kf5=\\E[Q, kf6=\\E[R, kf7=\\E[S, kf8=\\E[T, kf9=\\E[U, |
| 27 | kich1=\\E[L, mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S, |
| 28 | op=\\E[37;40m, rep=%p1%c\\E[%p2%{1}%-%db, |
| 29 | rin=\\E[%p1%dT, s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B, |
| 30 | s3ds=\\E+B, setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm, |
| 31 | setb=\\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, |
| 32 | setf=\\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, |
| 33 | sgr=\\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m, |
| 34 | sgr0=\\E[0;10m, tbc=\\E[2g, u6=\\E[%d;%dR, u7=\\E[6n, |
| 35 | u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%p1%dd,\s+2 |
| 36 | .in +2 |
| 37 | .fi |
| 38 | .ft R |
| 39 | .PP |
| 40 | Entries may continue onto multiple lines by placing white space at |
| 41 | the beginning of each line except the first. |
| 42 | Comments may be included on lines beginning with ``#''. |
| 43 | Capabilities in |
| 44 | .I terminfo |
| 45 | are of three types: |
| 46 | Boolean capabilities which indicate that the terminal has |
| 47 | some particular feature, numeric capabilities giving the size of the terminal |
| 48 | or the size of particular delays, and string |
| 49 | capabilities, which give a sequence which can be used to perform particular |
| 50 | terminal operations. |
| 51 | .PP |
| 52 | .SS Types of Capabilities |
| 53 | .PP |
| 54 | All capabilities have names. |
| 55 | For instance, the fact that |
| 56 | ANSI-standard terminals have |
| 57 | .I "automatic margins" |
| 58 | (i.e., an automatic return and line-feed |
| 59 | when the end of a line is reached) is indicated by the capability \fBam\fR. |
| 60 | Hence the description of ansi includes \fBam\fR. |
| 61 | Numeric capabilities are followed by the character `#' and then a positive value. |
| 62 | Thus \fBcols\fR, which indicates the number of columns the terminal has, |
| 63 | gives the value `80' for ansi. |
| 64 | Values for numeric capabilities may be specified in decimal, octal or hexadecimal, |
| 65 | using the C programming language conventions (e.g., 255, 0377 and 0xff or 0xFF). |
| 66 | .PP |
| 67 | Finally, string valued capabilities, such as \fBel\fR (clear to end of line |
| 68 | sequence) are given by the two-character code, an `=', and then a string |
| 69 | ending at the next following `,'. |
| 70 | .PP |
| 71 | A number of escape sequences are provided in the string valued capabilities |
| 72 | for easy encoding of characters there. |
| 73 | Both \fB\eE\fR and \fB\ee\fR |
| 74 | map to an \s-1ESCAPE\s0 character, |
| 75 | \fB^x\fR maps to a control-x for any appropriate x, and the sequences |
| 76 | \fB\en \el \er \et \eb \ef \es\fR give |
| 77 | a newline, line-feed, return, tab, backspace, form-feed, and space. |
| 78 | Other escapes include \fB\e^\fR for \fB^\fR, |
| 79 | \fB\e\e\fR for \fB\e\fR, |
| 80 | \fB\e\fR, for comma, |
| 81 | \fB\e:\fR for \fB:\fR, |
| 82 | and \fB\e0\fR for null. |
| 83 | (\fB\e0\fR will produce \e200, which does not terminate a string but behaves |
| 84 | as a null character on most terminals, providing CS7 is specified. |
| 85 | See stty(1).) |
| 86 | Finally, characters may be given as three octal digits after a \fB\e\fR. |
| 87 | .PP |
| 88 | A delay in milliseconds may appear anywhere in a string capability, enclosed in |
| 89 | $<..> brackets, as in \fBel\fP=\eEK$<5>, and padding characters are supplied by |
| 90 | .I tputs |
| 91 | to provide this delay. |
| 92 | The delay must be a number with at most one decimal |
| 93 | place of precision; it may be followed by suffixes `*' or '/' or both. |
| 94 | A `*' |
| 95 | indicates that the padding required is proportional to the number of lines |
| 96 | affected by the operation, and the amount given is the per-affected-unit |
| 97 | padding required. |
| 98 | (In the case of insert character, the factor is still the |
| 99 | number of |
| 100 | .IR lines |
| 101 | affected.) Normally, padding is advisory if the device has the \fBxon\fR |
| 102 | capability; it is used for cost computation but does not trigger delays. |
| 103 | A `/' |
| 104 | suffix indicates that the padding is mandatory and forces a delay of the given |
| 105 | number of milliseconds even on devices for which \fBxon\fR is present to |
| 106 | indicate flow control. |
| 107 | .PP |
| 108 | Sometimes individual capabilities must be commented out. |
| 109 | To do this, put a period before the capability name. |
| 110 | For example, see the second |
| 111 | .B ind |
| 112 | in the example above. |
| 113 | .br |
| 114 | .ne 5 |
| 115 | .PP |
| 116 | .SS Fetching Compiled Descriptions |
| 117 | .PP |
| 118 | If the environment variable TERMINFO is set, it is interpreted as the pathname |
| 119 | of a directory containing the compiled description you are working on. |
| 120 | Only |
| 121 | that directory is searched. |
| 122 | .PP |
| 123 | If TERMINFO is not set, the \fBncurses\fR version of the terminfo reader code |
| 124 | will instead look in the directory \fB$HOME/.terminfo\fR |
| 125 | for a compiled description. |
| 126 | If it fails to find one there, and the environment variable TERMINFO_DIRS is |
| 127 | set, it will interpret the contents of that variable as a list of colon- |
| 128 | separated directories to be searched (an empty entry is interpreted as a |
| 129 | command to search \fI\*d\fR). |
| 130 | If no description is found in any of the |
| 131 | TERMINFO_DIRS directories, the fetch fails. |
| 132 | .PP |
| 133 | If neither TERMINFO nor TERMINFO_DIRS is set, the last place tried will be the |
| 134 | system terminfo directory, \fI\*d\fR. |
| 135 | .PP |
| 136 | (Neither the \fB$HOME/.terminfo\fR lookups nor TERMINFO_DIRS extensions are |
| 137 | supported under stock System V terminfo/curses.) |
| 138 | .PP |
| 139 | .SS Preparing Descriptions |
| 140 | .PP |
| 141 | We now outline how to prepare descriptions of terminals. |
| 142 | The most effective way to prepare a terminal description is by imitating |
| 143 | the description of a similar terminal in |
| 144 | .I terminfo |
| 145 | and to build up a description gradually, using partial descriptions |
| 146 | with |
| 147 | .I vi |
| 148 | or some other screen-oriented program to check that they are correct. |
| 149 | Be aware that a very unusual terminal may expose deficiencies in |
| 150 | the ability of the |
| 151 | .I terminfo |
| 152 | file to describe it |
| 153 | or bugs in the screen-handling code of the test program. |
| 154 | .PP |
| 155 | To get the padding for insert line right (if the terminal manufacturer |
| 156 | did not document it) a severe test is to edit a large file at 9600 baud, |
| 157 | delete 16 or so lines from the middle of the screen, then hit the `u' |
| 158 | key several times quickly. |
| 159 | If the terminal messes up, more padding is usually needed. |
| 160 | A similar test can be used for insert character. |
| 161 | .PP |
| 162 | .SS Basic Capabilities |
| 163 | .PP |
| 164 | The number of columns on each line for the terminal is given by the |
| 165 | \fBcols\fR numeric capability. |
| 166 | If the terminal is a \s-1CRT\s0, then the |
| 167 | number of lines on the screen is given by the \fBlines\fR capability. |
| 168 | If the terminal wraps around to the beginning of the next line when |
| 169 | it reaches the right margin, then it should have the \fBam\fR capability. |
| 170 | If the terminal can clear its screen, leaving the cursor in the home |
| 171 | position, then this is given by the \fBclear\fR string capability. |
| 172 | If the terminal overstrikes |
| 173 | (rather than clearing a position when a character is struck over) |
| 174 | then it should have the \fBos\fR capability. |
| 175 | If the terminal is a printing terminal, with no soft copy unit, |
| 176 | give it both |
| 177 | .B hc |
| 178 | and |
| 179 | .BR os . |
| 180 | .RB ( os |
| 181 | applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010 |
| 182 | series, as well as hard copy and APL terminals.) |
| 183 | If there is a code to move the cursor to the left edge of the current |
| 184 | row, give this as |
| 185 | .BR cr . |
| 186 | (Normally this will be carriage return, control M.) |
| 187 | If there is a code to produce an audible signal (bell, beep, etc) |
| 188 | give this as |
| 189 | .BR bel . |
| 190 | .PP |
| 191 | If there is a code to move the cursor one position to the left |
| 192 | (such as backspace) that capability should be given as |
| 193 | .BR cub1 . |
| 194 | Similarly, codes to move to the right, up, and down should be |
| 195 | given as |
| 196 | .BR cuf1 , |
| 197 | .BR cuu1 , |
| 198 | and |
| 199 | .BR cud1 . |
| 200 | These local cursor motions should not alter the text they pass over, |
| 201 | for example, you would not normally use `\fBcuf1\fP=\ ' because the |
| 202 | space would erase the character moved over. |
| 203 | .PP |
| 204 | A very important point here is that the local cursor motions encoded |
| 205 | in |
| 206 | .I terminfo |
| 207 | are undefined at the left and top edges of a \s-1CRT\s0 terminal. |
| 208 | Programs should never attempt to backspace around the left edge, |
| 209 | unless |
| 210 | .B bw |
| 211 | is given, |
| 212 | and never attempt to go up locally off the top. |
| 213 | In order to scroll text up, a program will go to the bottom left corner |
| 214 | of the screen and send the |
| 215 | .B ind |
| 216 | (index) string. |
| 217 | .PP |
| 218 | To scroll text down, a program goes to the top left corner |
| 219 | of the screen and sends the |
| 220 | .B ri |
| 221 | (reverse index) string. |
| 222 | The strings |
| 223 | .B ind |
| 224 | and |
| 225 | .B ri |
| 226 | are undefined when not on their respective corners of the screen. |
| 227 | .PP |
| 228 | Parameterized versions of the scrolling sequences are |
| 229 | .B indn |
| 230 | and |
| 231 | .B rin |
| 232 | which have the same semantics as |
| 233 | .B ind |
| 234 | and |
| 235 | .B ri |
| 236 | except that they take one parameter, and scroll that many lines. |
| 237 | They are also undefined except at the appropriate edge of the screen. |
| 238 | .PP |
| 239 | The \fBam\fR capability tells whether the cursor sticks at the right |
| 240 | edge of the screen when text is output, but this does not necessarily |
| 241 | apply to a |
| 242 | .B cuf1 |
| 243 | from the last column. |
| 244 | The only local motion which is defined from the left edge is if |
| 245 | .B bw |
| 246 | is given, then a |
| 247 | .B cub1 |
| 248 | from the left edge will move to the right edge of the previous row. |
| 249 | If |
| 250 | .B bw |
| 251 | is not given, the effect is undefined. |
| 252 | This is useful for drawing a box around the edge of the screen, for example. |
| 253 | If the terminal has switch selectable automatic margins, |
| 254 | the |
| 255 | .I terminfo |
| 256 | file usually assumes that this is on; i.e., \fBam\fR. |
| 257 | If the terminal has a command which moves to the first column of the next |
| 258 | line, that command can be given as |
| 259 | .B nel |
| 260 | (newline). |
| 261 | It does not matter if the command clears the remainder of the current line, |
| 262 | so if the terminal has no |
| 263 | .B cr |
| 264 | and |
| 265 | .B lf |
| 266 | it may still be possible to craft a working |
| 267 | .B nel |
| 268 | out of one or both of them. |
| 269 | .PP |
| 270 | These capabilities suffice to describe hard-copy and \*(lqglass-tty\*(rq terminals. |
| 271 | Thus the model 33 teletype is described as |
| 272 | .PP |
| 273 | .DT |
| 274 | .nf |
| 275 | .ft CW |
| 276 | .\".in -2 |
| 277 | \s-133\||\|tty33\||\|tty\||\|model 33 teletype, |
| 278 | bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,\s+1 |
| 279 | .\".in +2 |
| 280 | .ft R |
| 281 | .PP |
| 282 | while the Lear Siegler \s-1ADM-3\s0 is described as |
| 283 | .PP |
| 284 | .DT |
| 285 | .nf |
| 286 | .ft CW |
| 287 | .\".in -2 |
| 288 | \s-1adm3\||\|3\||\|lsi adm3, |
| 289 | am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, |
| 290 | ind=^J, lines#24,\s+1 |
| 291 | .\".in +2 |
| 292 | .ft R |
| 293 | .fi |
| 294 | .PP |
| 295 | .SS Parameterized Strings |
| 296 | .PP |
| 297 | Cursor addressing and other strings requiring parameters |
| 298 | in the terminal are described by a |
| 299 | parameterized string capability, with |
| 300 | .IR printf (3) |
| 301 | like escapes \fB%x\fR in it. |
| 302 | For example, to address the cursor, the |
| 303 | .B cup |
| 304 | capability is given, using two parameters: |
| 305 | the row and column to address to. |
| 306 | (Rows and columns are numbered from zero and refer to the |
| 307 | physical screen visible to the user, not to any unseen memory.) |
| 308 | If the terminal has memory relative cursor addressing, |
| 309 | that can be indicated by |
| 310 | .BR mrcup . |
| 311 | .PP |
| 312 | The parameter mechanism uses a stack and special \fB%\fP codes |
| 313 | to manipulate it. |
| 314 | Typically a sequence will push one of the |
| 315 | parameters onto the stack and then print it in some format. |
| 316 | Print (e.g., "%d") is a special case. |
| 317 | Other operations, including "%t" pop their operand from the stack. |
| 318 | It is noted that more complex operations are often necessary, |
| 319 | e.g., in the \fBsgr\fP string. |
| 320 | .PP |
| 321 | The \fB%\fR encodings have the following meanings: |
| 322 | .PP |
| 323 | .TP 5 |
| 324 | \s-1%% |
| 325 | outputs `%' |
| 326 | .TP |
| 327 | %\fI[[\fP:\fI]flags][width[.precision]][\fPdoxXs\fI]\fP |
| 328 | as in \fBprintf\fP, flags are [-+#] and space. |
| 329 | Use a `:' to allow the next character to be a `-' flag, |
| 330 | avoiding interpreting "%-" as an operator. |
| 331 | .TP |
| 332 | %c |
| 333 | print pop() like %c in \fBprintf\fP |
| 334 | .TP |
| 335 | %s |
| 336 | print pop() like %s in \fBprintf\fP |
| 337 | .TP |
| 338 | %p[1-9] |
| 339 | push \fIi\fP'th parameter |
| 340 | .TP |
| 341 | %P[a-z] |
| 342 | set dynamic variable [a-z] to pop() |
| 343 | .TP |
| 344 | %g[a-z] |
| 345 | get dynamic variable [a-z] and push it |
| 346 | .TP |
| 347 | %P[A-Z] |
| 348 | set static variable [a-z] to pop() |
| 349 | .TP |
| 350 | %g[A-Z] |
| 351 | get static variable [a-z] and push it |
| 352 | .IP |
| 353 | The terms "static" and "dynamic" are misleading. |
| 354 | Historically, these are simply two different sets of variables, |
| 355 | whose values are not reset between calls to \fBtparm\fP. |
| 356 | However, that fact is not documented in other implementations. |
| 357 | Relying on it will adversely impact portability to other implementations. |
| 358 | .TP |
| 359 | %'\fIc\fP' |
| 360 | char constant \fIc\fP |
| 361 | .TP |
| 362 | %{\fInn\fP} |
| 363 | integer constant \fInn\fP |
| 364 | .TP |
| 365 | %l |
| 366 | push strlen(pop) |
| 367 | .TP |
| 368 | %+ %- %* %/ %m |
| 369 | arithmetic (%m is mod): push(pop() op pop()) |
| 370 | .TP |
| 371 | %& %| %^ |
| 372 | bit operations (AND, OR and exclusive-OR): push(pop() op pop()) |
| 373 | .TP |
| 374 | %= %> %< |
| 375 | logical operations: push(pop() op pop()) |
| 376 | .TP |
| 377 | %A, %O |
| 378 | logical AND and OR operations (for conditionals) |
| 379 | .TP |
| 380 | %! %~ |
| 381 | unary operations (logical and bit complement): push(op pop()) |
| 382 | .TP |
| 383 | %i |
| 384 | add 1 to first two parameters (for ANSI terminals) |
| 385 | .TP |
| 386 | %? \fIexpr\fP %t \fIthenpart\fP %e \fIelsepart\fP %; |
| 387 | This forms an if-then-else. |
| 388 | The %e \fIelsepart\fP is optional. |
| 389 | Usually the %? \fIexpr\fP part pushes a value onto the stack, |
| 390 | and %t pops it from the stack, testing if it is nonzero (true). |
| 391 | If it is zero (false), control passes to the %e (else) part. |
| 392 | .IP |
| 393 | It is possible to form else-if's a la Algol 68: |
| 394 | .RS |
| 395 | %? c\d1\u %t b\d1\u %e c\d2\u %t b\d2\u %e c\d3\u %t b\d3\u %e c\d4\u %t b\d4\u %e %; |
| 396 | .RE |
| 397 | .IP |
| 398 | where c\di\u are conditions, b\di\u are bodies. |
| 399 | .IP |
| 400 | Use the \fB-f\fP option of \fBtic\fP or \fB@INFOCMP@\fP to see |
| 401 | the structure of if-the-else's. |
| 402 | Some strings, e.g., \fBsgr\fP can be very complicated when written |
| 403 | on one line. |
| 404 | The \fB-f\fP option splits the string into lines with the parts indented. |
| 405 | .PP |
| 406 | Binary operations are in postfix form with the operands in the usual order. |
| 407 | That is, to get x-5 one would use "%gx%{5}%-". |
| 408 | %P and %g variables are |
| 409 | persistent across escape-string evaluations. |
| 410 | .PP |
| 411 | Consider the HP2645, which, to get to row 3 and column 12, needs |
| 412 | to be sent \eE&a12c03Y padded for 6 milliseconds. |
| 413 | Note that the order |
| 414 | of the rows and columns is inverted here, and that the row and column |
| 415 | are printed as two digits. |
| 416 | Thus its \fBcup\fR capability is \*(lqcup=6\eE&%p2%2dc%p1%2dY\*(rq. |
| 417 | .PP |
| 418 | The Microterm \s-1ACT-IV\s0 needs the current row and column sent |
| 419 | preceded by a \fB^T\fR, with the row and column simply encoded in binary, |
| 420 | \*(lqcup=^T%p1%c%p2%c\*(rq. |
| 421 | Terminals which use \*(lq%c\*(rq need to be able to |
| 422 | backspace the cursor (\fBcub1\fR), |
| 423 | and to move the cursor up one line on the screen (\fBcuu1\fR). |
| 424 | This is necessary because it is not always safe to transmit \fB\en\fR |
| 425 | \fB^D\fR and \fB\er\fR, as the system may change or discard them. |
| 426 | (The library routines dealing with terminfo set tty modes so that |
| 427 | tabs are never expanded, so \et is safe to send. |
| 428 | This turns out to be essential for the Ann Arbor 4080.) |
| 429 | .PP |
| 430 | A final example is the \s-1LSI ADM\s0-3a, which uses row and column |
| 431 | offset by a blank character, thus \*(lqcup=\eE=%p1%' '%+%c%p2%' '%+%c\*(rq. |
| 432 | After sending `\eE=', this pushes the first parameter, pushes the |
| 433 | ASCII value for a space (32), adds them (pushing the sum on the stack |
| 434 | in place of the two previous values) and outputs that value as a character. |
| 435 | Then the same is done for the second parameter. |
| 436 | More complex arithmetic is possible using the stack. |
| 437 | .PP |
| 438 | .SS Cursor Motions |
| 439 | .PP |
| 440 | If the terminal has a fast way to home the cursor |
| 441 | (to very upper left corner of screen) then this can be given as |
| 442 | \fBhome\fR; similarly a fast way of getting to the lower left-hand corner |
| 443 | can be given as \fBll\fR; this may involve going up with \fBcuu1\fR |
| 444 | from the home position, |
| 445 | but a program should never do this itself (unless \fBll\fR does) because it |
| 446 | can make no assumption about the effect of moving up from the home position. |
| 447 | Note that the home position is the same as addressing to (0,0): |
| 448 | to the top left corner of the screen, not of memory. |
| 449 | (Thus, the \eEH sequence on HP terminals cannot be used for |
| 450 | .BR home .) |
| 451 | .PP |
| 452 | If the terminal has row or column absolute cursor addressing, |
| 453 | these can be given as single parameter capabilities |
| 454 | .B hpa |
| 455 | (horizontal position absolute) |
| 456 | and |
| 457 | .B vpa |
| 458 | (vertical position absolute). |
| 459 | Sometimes these are shorter than the more general two parameter |
| 460 | sequence (as with the hp2645) and can be used in preference to |
| 461 | .BR cup . |
| 462 | If there are parameterized local motions (e.g., move |
| 463 | .I n |
| 464 | spaces to the right) these can be given as |
| 465 | .BR cud , |
| 466 | .BR cub , |
| 467 | .BR cuf , |
| 468 | and |
| 469 | .BR cuu |
| 470 | with a single parameter indicating how many spaces to move. |
| 471 | These are primarily useful if the terminal does not have |
| 472 | .BR cup , |
| 473 | such as the \s-1TEKTRONIX\s+1 4025. |
| 474 | .PP |
| 475 | If the terminal needs to be in a special mode when running |
| 476 | a program that uses these capabilities, |
| 477 | the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR. |
| 478 | This arises, for example, from terminals like the Concept with more than |
| 479 | one page of memory. |
| 480 | If the terminal has only memory relative cursor addressing and not screen |
| 481 | relative cursor addressing, a one screen-sized window must be fixed into |
| 482 | the terminal for cursor addressing to work properly. |
| 483 | This is also used for the \s-1TEKTRONIX\s+1 4025, |
| 484 | where |
| 485 | .B smcup |
| 486 | sets the command character to be the one used by terminfo. |
| 487 | If the \fBsmcup\fP sequence will not restore the screen after an |
| 488 | \fBrmcup\fP sequence is output (to the state prior to outputting |
| 489 | \fBrmcup\fP), specify \fBnrrmc\fP. |
| 490 | .PP |
| 491 | .SS Area Clears |
| 492 | .PP |
| 493 | If the terminal can clear from the current position to the end of the |
| 494 | line, leaving the cursor where it is, this should be given as \fBel\fR. |
| 495 | If the terminal can clear from the beginning of the line to the current |
| 496 | position inclusive, leaving |
| 497 | the cursor where it is, this should be given as \fBel1\fP. |
| 498 | If the terminal can clear from the current position to the end of the |
| 499 | display, then this should be given as \fBed\fR. |
| 500 | \fBEd\fR is only defined from the first column of a line. |
| 501 | (Thus, it can be simulated by a request to delete a large number of lines, |
| 502 | if a true |
| 503 | .B ed |
| 504 | is not available.) |
| 505 | .PP |
| 506 | .SS Insert/delete line and vertical motions |
| 507 | .PP |
| 508 | If the terminal can open a new blank line before the line where the cursor |
| 509 | is, this should be given as \fBil1\fR; this is done only from the first |
| 510 | position of a line. |
| 511 | The cursor must then appear on the newly blank line. |
| 512 | If the terminal can delete the line which the cursor is on, then this |
| 513 | should be given as \fBdl1\fR; this is done only from the first position on |
| 514 | the line to be deleted. |
| 515 | Versions of |
| 516 | .B il1 |
| 517 | and |
| 518 | .B dl1 |
| 519 | which take a single parameter and insert or delete that many lines can |
| 520 | be given as |
| 521 | .B il |
| 522 | and |
| 523 | .BR dl . |
| 524 | .PP |
| 525 | If the terminal has a settable scrolling region (like the vt100) |
| 526 | the command to set this can be described with the |
| 527 | .B csr |
| 528 | capability, which takes two parameters: |
| 529 | the top and bottom lines of the scrolling region. |
| 530 | The cursor position is, alas, undefined after using this command. |
| 531 | .PP |
| 532 | It is possible to get the effect of insert or delete line using |
| 533 | .B csr |
| 534 | on a properly chosen region; the |
| 535 | .B sc |
| 536 | and |
| 537 | .B rc |
| 538 | (save and restore cursor) commands may be useful for ensuring that |
| 539 | your synthesized insert/delete string does not move the cursor. |
| 540 | (Note that the \fBncurses\fR(3X) library does this synthesis |
| 541 | automatically, so you need not compose insert/delete strings for |
| 542 | an entry with \fBcsr\fR). |
| 543 | .PP |
| 544 | Yet another way to construct insert and delete might be to use a combination of |
| 545 | index with the memory-lock feature found on some terminals (like the HP-700/90 |
| 546 | series, which however also has insert/delete). |
| 547 | .PP |
| 548 | Inserting lines at the top or bottom of the screen can also be |
| 549 | done using |
| 550 | .B ri |
| 551 | or |
| 552 | .B ind |
| 553 | on many terminals without a true insert/delete line, |
| 554 | and is often faster even on terminals with those features. |
| 555 | .PP |
| 556 | The boolean \fBnon_dest_scroll_region\fR should be set if each scrolling |
| 557 | window is effectively a view port on a screen-sized canvas. |
| 558 | To test for |
| 559 | this capability, create a scrolling region in the middle of the screen, |
| 560 | write something to the bottom line, move the cursor to the top of the region, |
| 561 | and do \fBri\fR followed by \fBdl1\fR or \fBind\fR. |
| 562 | If the data scrolled |
| 563 | off the bottom of the region by the \fBri\fR re-appears, then scrolling |
| 564 | is non-destructive. |
| 565 | System V and XSI Curses expect that \fBind\fR, \fBri\fR, |
| 566 | \fBindn\fR, and \fBrin\fR will simulate destructive scrolling; their |
| 567 | documentation cautions you not to define \fBcsr\fR unless this is true. |
| 568 | This \fBcurses\fR implementation is more liberal and will do explicit erases |
| 569 | after scrolling if \fBndstr\fR is defined. |
| 570 | .PP |
| 571 | If the terminal has the ability to define a window as part of |
| 572 | memory, which all commands affect, |
| 573 | it should be given as the parameterized string |
| 574 | .BR wind . |
| 575 | The four parameters are the starting and ending lines in memory |
| 576 | and the starting and ending columns in memory, in that order. |
| 577 | .PP |
| 578 | If the terminal can retain display memory above, then the |
| 579 | \fBda\fR capability should be given; if display memory can be retained |
| 580 | below, then \fBdb\fR should be given. |
| 581 | These indicate |
| 582 | that deleting a line or scrolling may bring non-blank lines up from below |
| 583 | or that scrolling back with \fBri\fR may bring down non-blank lines. |
| 584 | .PP |
| 585 | .SS Insert/Delete Character |
| 586 | .PP |
| 587 | There are two basic kinds of intelligent terminals with respect to |
| 588 | insert/delete character which can be described using |
| 589 | .I terminfo. |
| 590 | The most common insert/delete character operations affect only the characters |
| 591 | on the current line and shift characters off the end of the line rigidly. |
| 592 | Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make |
| 593 | a distinction between typed and untyped blanks on the screen, shifting |
| 594 | upon an insert or delete only to an untyped blank on the screen which is |
| 595 | either eliminated, or expanded to two untyped blanks. |
| 596 | You can determine the |
| 597 | kind of terminal you have by clearing the screen and then typing |
| 598 | text separated by cursor motions. |
| 599 | Type \*(lqabc\ \ \ \ def\*(rq using local |
| 600 | cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq. |
| 601 | Then position the cursor before the \*(lqabc\*(rq and put the terminal in insert |
| 602 | mode. |
| 603 | If typing characters causes the rest of the line to shift |
| 604 | rigidly and characters to fall off the end, then your terminal does |
| 605 | not distinguish between blanks and untyped positions. |
| 606 | If the \*(lqabc\*(rq |
| 607 | shifts over to the \*(lqdef\*(rq which then move together around the end of the |
| 608 | current line and onto the next as you insert, you have the second type of |
| 609 | terminal, and should give the capability \fBin\fR, which stands for |
| 610 | \*(lqinsert null\*(rq. |
| 611 | While these are two logically separate attributes (one line versus multi-line |
| 612 | insert mode, and special treatment of untyped spaces) we have seen no |
| 613 | terminals whose insert mode cannot be described with the single attribute. |
| 614 | .PP |
| 615 | Terminfo can describe both terminals which have an insert mode, and terminals |
| 616 | which send a simple sequence to open a blank position on the current line. |
| 617 | Give as \fBsmir\fR the sequence to get into insert mode. |
| 618 | Give as \fBrmir\fR the sequence to leave insert mode. |
| 619 | Now give as \fBich1\fR any sequence needed to be sent just before sending |
| 620 | the character to be inserted. |
| 621 | Most terminals with a true insert mode |
| 622 | will not give \fBich1\fR; terminals which send a sequence to open a screen |
| 623 | position should give it here. |
| 624 | .PP |
| 625 | If your terminal has both, insert mode is usually preferable to \fBich1\fR. |
| 626 | Technically, you should not give both unless the terminal actually requires |
| 627 | both to be used in combination. |
| 628 | Accordingly, some non-curses applications get |
| 629 | confused if both are present; the symptom is doubled characters in an update |
| 630 | using insert. |
| 631 | This requirement is now rare; most \fBich\fR sequences do not |
| 632 | require previous smir, and most smir insert modes do not require \fBich1\fR |
| 633 | before each character. |
| 634 | Therefore, the new \fBcurses\fR actually assumes this |
| 635 | is the case and uses either \fBrmir\fR/\fBsmir\fR or \fBich\fR/\fBich1\fR as |
| 636 | appropriate (but not both). |
| 637 | If you have to write an entry to be used under |
| 638 | new curses for a terminal old enough to need both, include the |
| 639 | \fBrmir\fR/\fBsmir\fR sequences in \fBich1\fR. |
| 640 | .PP |
| 641 | If post insert padding is needed, give this as a number of milliseconds |
| 642 | in \fBip\fR (a string option). |
| 643 | Any other sequence which may need to be |
| 644 | sent after an insert of a single character may also be given in \fBip\fR. |
| 645 | If your terminal needs both to be placed into an `insert mode' and |
| 646 | a special code to precede each inserted character, then both |
| 647 | .BR smir / rmir |
| 648 | and |
| 649 | .B ich1 |
| 650 | can be given, and both will be used. |
| 651 | The |
| 652 | .B ich |
| 653 | capability, with one parameter, |
| 654 | .IR n , |
| 655 | will repeat the effects of |
| 656 | .B ich1 |
| 657 | .I n |
| 658 | times. |
| 659 | .PP |
| 660 | If padding is necessary between characters typed while not |
| 661 | in insert mode, give this as a number of milliseconds padding in \fBrmp\fP. |
| 662 | .PP |
| 663 | It is occasionally necessary to move around while in insert mode |
| 664 | to delete characters on the same line (e.g., if there is a tab after |
| 665 | the insertion position). |
| 666 | If your terminal allows motion while in |
| 667 | insert mode you can give the capability \fBmir\fR to speed up inserting |
| 668 | in this case. |
| 669 | Omitting \fBmir\fR will affect only speed. |
| 670 | Some terminals |
| 671 | (notably Datamedia's) must not have \fBmir\fR because of the way their |
| 672 | insert mode works. |
| 673 | .PP |
| 674 | Finally, you can specify |
| 675 | .B dch1 |
| 676 | to delete a single character, |
| 677 | .B dch |
| 678 | with one parameter, |
| 679 | .IR n , |
| 680 | to delete |
| 681 | .I n characters, |
| 682 | and delete mode by giving \fBsmdc\fR and \fBrmdc\fR |
| 683 | to enter and exit delete mode (any mode the terminal needs to be placed |
| 684 | in for |
| 685 | .B dch1 |
| 686 | to work). |
| 687 | .PP |
| 688 | A command to erase |
| 689 | .I n |
| 690 | characters (equivalent to outputting |
| 691 | .I n |
| 692 | blanks without moving the cursor) |
| 693 | can be given as |
| 694 | .B ech |
| 695 | with one parameter. |
| 696 | .PP |
| 697 | .SS "Highlighting, Underlining, and Visible Bells" |
| 698 | .PP |
| 699 | If your terminal has one or more kinds of display attributes, |
| 700 | these can be represented in a number of different ways. |
| 701 | You should choose one display form as |
| 702 | \f2standout mode\fR, |
| 703 | representing a good, high contrast, easy-on-the-eyes, |
| 704 | format for highlighting error messages and other attention getters. |
| 705 | (If you have a choice, reverse video plus half-bright is good, |
| 706 | or reverse video alone.) |
| 707 | The sequences to enter and exit standout mode |
| 708 | are given as \fBsmso\fR and \fBrmso\fR, respectively. |
| 709 | If the code to change into or out of standout |
| 710 | mode leaves one or even two blank spaces on the screen, |
| 711 | as the TVI 912 and Teleray 1061 do, |
| 712 | then \fBxmc\fR should be given to tell how many spaces are left. |
| 713 | .PP |
| 714 | Codes to begin underlining and end underlining can be given as \fBsmul\fR |
| 715 | and \fBrmul\fR respectively. |
| 716 | If the terminal has a code to underline the current character and move |
| 717 | the cursor one space to the right, |
| 718 | such as the Microterm Mime, |
| 719 | this can be given as \fBuc\fR. |
| 720 | .PP |
| 721 | Other capabilities to enter various highlighting modes include |
| 722 | .B blink |
| 723 | (blinking) |
| 724 | .B bold |
| 725 | (bold or extra bright) |
| 726 | .B dim |
| 727 | (dim or half-bright) |
| 728 | .B invis |
| 729 | (blanking or invisible text) |
| 730 | .B prot |
| 731 | (protected) |
| 732 | .B rev |
| 733 | (reverse video) |
| 734 | .B sgr0 |
| 735 | (turn off |
| 736 | .I all |
| 737 | attribute modes) |
| 738 | .B smacs |
| 739 | (enter alternate character set mode) |
| 740 | and |
| 741 | .B rmacs |
| 742 | (exit alternate character set mode). |
| 743 | Turning on any of these modes singly may or may not turn off other modes. |
| 744 | .PP |
| 745 | If there is a sequence to set arbitrary combinations of modes, |
| 746 | this should be given as |
| 747 | .B sgr |
| 748 | (set attributes), |
| 749 | taking 9 parameters. |
| 750 | Each parameter is either 0 or nonzero, as the corresponding attribute is on or off. |
| 751 | The 9 parameters are, in order: |
| 752 | standout, underline, reverse, blink, dim, bold, blank, protect, alternate |
| 753 | character set. |
| 754 | Not all modes need be supported by |
| 755 | .BR sgr , |
| 756 | only those for which corresponding separate attribute commands exist. |
| 757 | .PP |
| 758 | For example, the DEC vt220 supports most of the modes: |
| 759 | .PP |
| 760 | .TS |
| 761 | center; |
| 762 | l c c |
| 763 | l c c |
| 764 | lw28 lw6 lw2 lw20. |
| 765 | \fBtparm parameter attribute escape sequence\fP |
| 766 | |
| 767 | none none \\E[0m |
| 768 | p1 standout \\E[0;1;7m |
| 769 | p2 underline \\E[0;4m |
| 770 | p3 reverse \\E[0;7m |
| 771 | p4 blink \\E[0;5m |
| 772 | p5 dim not available |
| 773 | p6 bold \\E[0;1m |
| 774 | p7 invis \\E[0;8m |
| 775 | p8 protect not used |
| 776 | p9 altcharset ^O (off) ^N (on) |
| 777 | .TE |
| 778 | .PP |
| 779 | We begin each escape sequence by turning off any existing modes, since |
| 780 | there is no quick way to determine whether they are active. |
| 781 | Standout is set up to be the combination of reverse and bold. |
| 782 | The vt220 terminal has a protect mode, |
| 783 | though it is not commonly used in sgr |
| 784 | because it protects characters on the screen from the host's erasures. |
| 785 | The altcharset mode also is different in that it is either ^O or ^N, |
| 786 | depending on whether it is off or on. |
| 787 | If all modes are turned on, the resulting sequence is \\E[0;1;4;5;7;8m^N. |
| 788 | .PP |
| 789 | Some sequences are common to different modes. |
| 790 | For example, ;7 is output when either p1 or p3 is true, that is, if |
| 791 | either standout or reverse modes are turned on. |
| 792 | .PP |
| 793 | Writing out the above sequences, along with their dependencies yields |
| 794 | .PP |
| 795 | .TS |
| 796 | center; |
| 797 | l c c |
| 798 | l c c |
| 799 | lw28 lw6 lw2 lw20. |
| 800 | \fBsequence when to output terminfo translation\fP |
| 801 | |
| 802 | \\E[0 always \\E[0 |
| 803 | ;1 if p1 or p6 %?%p1%p6%|%t;1%; |
| 804 | ;4 if p2 %?%p2%|%t;4%; |
| 805 | ;5 if p4 %?%p4%|%t;5%; |
| 806 | ;7 if p1 or p3 %?%p1%p3%|%t;7%; |
| 807 | ;8 if p7 %?%p7%|%t;8%; |
| 808 | m always m |
| 809 | ^N or ^O if p9 ^N, else ^O %?%p9%t^N%e^O%; |
| 810 | .TE |
| 811 | .PP |
| 812 | Putting this all together into the sgr sequence gives: |
| 813 | .PP |
| 814 | .nf |
| 815 | sgr=\\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%; |
| 816 | %?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\\016%e\\017%;, |
| 817 | .fi |
| 818 | .PP |
| 819 | Remember that if you specify sgr, you must also specify sgr0. |
| 820 | Also, some implementations rely on sgr being given if sgr0 is, |
| 821 | Not all terminfo entries necessarily have an sgr string, however. |
| 822 | Many terminfo entries are derived from termcap entries |
| 823 | which have no sgr string. |
| 824 | The only drawback to adding an sgr string is that termcap also |
| 825 | assumes that sgr0 does not exit alternate character set mode. |
| 826 | .PP |
| 827 | Terminals with the ``magic cookie'' glitch |
| 828 | .RB ( xmc ) |
| 829 | deposit special ``cookies'' when they receive mode-setting sequences, |
| 830 | which affect the display algorithm rather than having extra bits for |
| 831 | each character. |
| 832 | Some terminals, such as the HP 2621, automatically leave standout |
| 833 | mode when they move to a new line or the cursor is addressed. |
| 834 | Programs using standout mode should exit standout mode before |
| 835 | moving the cursor or sending a newline, |
| 836 | unless the |
| 837 | .B msgr |
| 838 | capability, asserting that it is safe to move in standout mode, is present. |
| 839 | .PP |
| 840 | If the terminal has |
| 841 | a way of flashing the screen to indicate an error quietly (a bell replacement) |
| 842 | then this can be given as \fBflash\fR; it must not move the cursor. |
| 843 | .PP |
| 844 | If the cursor needs to be made more visible than normal when it is |
| 845 | not on the bottom line (to make, for example, a non-blinking underline into an |
| 846 | easier to find block or blinking underline) |
| 847 | give this sequence as |
| 848 | .BR cvvis . |
| 849 | If there is a way to make the cursor completely invisible, give that as |
| 850 | .BR civis . |
| 851 | The capability |
| 852 | .BR cnorm |
| 853 | should be given which undoes the effects of both of these modes. |
| 854 | .PP |
| 855 | If your terminal correctly generates underlined characters |
| 856 | (with no special codes needed) |
| 857 | even though it does not overstrike, |
| 858 | then you should give the capability \fBul\fR. |
| 859 | If a character overstriking another leaves both characters on the screen, |
| 860 | specify the capability \fBos\fP. |
| 861 | If overstrikes are erasable with a blank, |
| 862 | then this should be indicated by giving \fBeo\fR. |
| 863 | .PP |
| 864 | .SS Keypad and Function Keys |
| 865 | .PP |
| 866 | If the terminal has a keypad that transmits codes when the keys are pressed, |
| 867 | this information can be given. |
| 868 | Note that it is not possible to handle |
| 869 | terminals where the keypad only works in local (this applies, for example, |
| 870 | to the unshifted HP 2621 keys). |
| 871 | If the keypad can be set to transmit or not transmit, |
| 872 | give these codes as \fBsmkx\fR and \fBrmkx\fR. |
| 873 | Otherwise the keypad is assumed to always transmit. |
| 874 | The codes sent by the left arrow, right arrow, up arrow, down arrow, |
| 875 | and home keys can be given as |
| 876 | \fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fR respectively. |
| 877 | If there are function keys such as f0, f1, ..., f10, the codes they send |
| 878 | can be given as \fBkf0, kf1, ..., kf10\fR. |
| 879 | If these keys have labels other than the default f0 through f10, the labels |
| 880 | can be given as \fBlf0, lf1, ..., lf10\fR. |
| 881 | The codes transmitted by certain other special keys can be given: |
| 882 | .B kll |
| 883 | (home down), |
| 884 | .B kbs |
| 885 | (backspace), |
| 886 | .B ktbc |
| 887 | (clear all tabs), |
| 888 | .B kctab |
| 889 | (clear the tab stop in this column), |
| 890 | .B kclr |
| 891 | (clear screen or erase key), |
| 892 | .B kdch1 |
| 893 | (delete character), |
| 894 | .B kdl1 |
| 895 | (delete line), |
| 896 | .B krmir |
| 897 | (exit insert mode), |
| 898 | .B kel |
| 899 | (clear to end of line), |
| 900 | .B ked |
| 901 | (clear to end of screen), |
| 902 | .B kich1 |
| 903 | (insert character or enter insert mode), |
| 904 | .B kil1 |
| 905 | (insert line), |
| 906 | .B knp |
| 907 | (next page), |
| 908 | .B kpp |
| 909 | (previous page), |
| 910 | .B kind |
| 911 | (scroll forward/down), |
| 912 | .B kri |
| 913 | (scroll backward/up), |
| 914 | .B khts |
| 915 | (set a tab stop in this column). |
| 916 | In addition, if the keypad has a 3 by 3 array of keys including the four |
| 917 | arrow keys, the other five keys can be given as |
| 918 | .BR ka1 , |
| 919 | .BR ka3 , |
| 920 | .BR kb2 , |
| 921 | .BR kc1 , |
| 922 | and |
| 923 | .BR kc3 . |
| 924 | These keys are useful when the effects of a 3 by 3 directional pad are needed. |
| 925 | .PP |
| 926 | Strings to program function keys can be given as |
| 927 | .BR pfkey , |
| 928 | .BR pfloc , |
| 929 | and |
| 930 | .BR pfx . |
| 931 | A string to program screen labels should be specified as \fBpln\fP. |
| 932 | Each of these strings takes two parameters: the function key number to |
| 933 | program (from 0 to 10) and the string to program it with. |
| 934 | Function key numbers out of this range may program undefined keys in |
| 935 | a terminal dependent manner. |
| 936 | The difference between the capabilities is that |
| 937 | .B pfkey |
| 938 | causes pressing the given key to be the same as the user typing the |
| 939 | given string; |
| 940 | .B pfloc |
| 941 | causes the string to be executed by the terminal in local; and |
| 942 | .B pfx |
| 943 | causes the string to be transmitted to the computer. |
| 944 | .PP |
| 945 | The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP |
| 946 | define the number of programmable |
| 947 | screen labels and their width and height. |
| 948 | If there are commands to turn the labels on and off, |
| 949 | give them in \fBsmln\fP and \fBrmln\fP. |
| 950 | \fBsmln\fP is normally output after one or more pln |
| 951 | sequences to make sure that the change becomes visible. |
| 952 | .PP |
| 953 | .SS Tabs and Initialization |
| 954 | .PP |
| 955 | If the terminal has hardware tabs, the command to advance to the next |
| 956 | tab stop can be given as |
| 957 | .B ht |
| 958 | (usually control I). |
| 959 | A ``back-tab'' command which moves leftward to the preceding tab stop can |
| 960 | be given as |
| 961 | .BR cbt . |
| 962 | By convention, if the teletype modes indicate that tabs are being |
| 963 | expanded by the computer rather than being sent to the terminal, |
| 964 | programs should not use |
| 965 | .B ht |
| 966 | or |
| 967 | .B cbt |
| 968 | even if they are present, since the user may not have the tab stops |
| 969 | properly set. |
| 970 | If the terminal has hardware tabs which are initially set every |
| 971 | .I n |
| 972 | spaces when the terminal is powered up, |
| 973 | the numeric parameter |
| 974 | .B it |
| 975 | is given, showing the number of spaces the tabs are set to. |
| 976 | This is normally used by the |
| 977 | .IR tset |
| 978 | command to determine whether to set the mode for hardware tab expansion, |
| 979 | and whether to set the tab stops. |
| 980 | If the terminal has tab stops that can be saved in non-volatile memory, |
| 981 | the terminfo description can assume that they are properly set. |
| 982 | .PP |
| 983 | Other capabilities |
| 984 | include |
| 985 | .BR is1 , |
| 986 | .BR is2 , |
| 987 | and |
| 988 | .BR is3 , |
| 989 | initialization strings for the terminal, |
| 990 | .BR iprog , |
| 991 | the path name of a program to be run to initialize the terminal, |
| 992 | and \fBif\fR, the name of a file containing long initialization strings. |
| 993 | These strings are expected to set the terminal into modes consistent |
| 994 | with the rest of the terminfo description. |
| 995 | They are normally sent to the terminal, by the |
| 996 | .I init |
| 997 | option of the |
| 998 | .IR @TPUT@ |
| 999 | program, each time the user logs in. |
| 1000 | They will be printed in the following order: |
| 1001 | .RS |
| 1002 | .TP |
| 1003 | run the program |
| 1004 | .BR iprog |
| 1005 | .TP |
| 1006 | output |
| 1007 | .BR is1 |
| 1008 | .BR is2 |
| 1009 | .TP |
| 1010 | set the margins using |
| 1011 | .BR mgc , |
| 1012 | .BR smgl |
| 1013 | and |
| 1014 | .BR smgr |
| 1015 | .TP |
| 1016 | set tabs using |
| 1017 | .B tbc |
| 1018 | and |
| 1019 | .BR hts |
| 1020 | .TP |
| 1021 | print the file |
| 1022 | .BR if |
| 1023 | .TP |
| 1024 | and finally |
| 1025 | output |
| 1026 | .BR is3 . |
| 1027 | .RE |
| 1028 | .PP |
| 1029 | Most initialization is done with |
| 1030 | .BR is2 . |
| 1031 | Special terminal modes can be set up without duplicating strings |
| 1032 | by putting the common sequences in |
| 1033 | .B is2 |
| 1034 | and special cases in |
| 1035 | .B is1 |
| 1036 | and |
| 1037 | .BR is3 . |
| 1038 | .PP |
| 1039 | A set of sequences that does a harder reset from a totally unknown state |
| 1040 | can be given as |
| 1041 | .BR rs1 , |
| 1042 | .BR rs2 , |
| 1043 | .BR rf |
| 1044 | and |
| 1045 | .BR rs3 , |
| 1046 | analogous to |
| 1047 | .B is1 , |
| 1048 | .B is2 , |
| 1049 | .B if |
| 1050 | and |
| 1051 | .BR is3 |
| 1052 | respectively. |
| 1053 | These strings are output by the |
| 1054 | .IR reset |
| 1055 | program, which is used when the terminal gets into a wedged state. |
| 1056 | Commands are normally placed in |
| 1057 | .BR rs1 , |
| 1058 | .BR rs2 |
| 1059 | .B rs3 |
| 1060 | and |
| 1061 | .B rf |
| 1062 | only if they produce annoying effects on the screen and are not |
| 1063 | necessary when logging in. |
| 1064 | For example, the command to set the vt100 into 80-column mode would |
| 1065 | normally be part of |
| 1066 | .BR is2 , |
| 1067 | but it causes an annoying glitch of the screen and is not normally |
| 1068 | needed since the terminal is usually already in 80 column mode. |
| 1069 | .PP |
| 1070 | The |
| 1071 | .IR reset |
| 1072 | program writes strings |
| 1073 | including |
| 1074 | .BR iprog , |
| 1075 | etc., in the same order as the |
| 1076 | .IR init |
| 1077 | program, using |
| 1078 | .BR rs1 , |
| 1079 | etc., instead of |
| 1080 | .BR is1 , |
| 1081 | etc. |
| 1082 | If any of |
| 1083 | .BR rs1 , |
| 1084 | .BR rs2 , |
| 1085 | .BR rs3 , |
| 1086 | or |
| 1087 | .BR rf |
| 1088 | reset capability strings are missing, the |
| 1089 | .IR reset |
| 1090 | program falls back upon the corresponding initialization capability string. |
| 1091 | .PP |
| 1092 | If there are commands to set and clear tab stops, they can be given as |
| 1093 | .B tbc |
| 1094 | (clear all tab stops) |
| 1095 | and |
| 1096 | .B hts |
| 1097 | (set a tab stop in the current column of every row). |
| 1098 | If a more complex sequence is needed to set the tabs than can be |
| 1099 | described by this, the sequence can be placed in |
| 1100 | .B is2 |
| 1101 | or |
| 1102 | .BR if . |
| 1103 | .SS Delays and Padding |
| 1104 | .PP |
| 1105 | Many older and slower terminals do not support either XON/XOFF or DTR |
| 1106 | handshaking, including hard copy terminals and some very archaic CRTs |
| 1107 | (including, for example, DEC VT100s). |
| 1108 | These may require padding characters |
| 1109 | after certain cursor motions and screen changes. |
| 1110 | .PP |
| 1111 | If the terminal uses xon/xoff handshaking for flow control (that is, |
| 1112 | it automatically emits ^S back to the host when its input buffers are |
| 1113 | close to full), set |
| 1114 | .BR xon . |
| 1115 | This capability suppresses the emission of padding. |
| 1116 | You can also set it |
| 1117 | for memory-mapped console devices effectively that do not have a speed limit. |
| 1118 | Padding information should still be included so that routines can |
| 1119 | make better decisions about relative costs, but actual pad characters will |
| 1120 | not be transmitted. |
| 1121 | .PP |
| 1122 | If \fBpb\fR (padding baud rate) is given, padding is suppressed at baud rates |
| 1123 | below the value of \fBpb\fR. |
| 1124 | If the entry has no padding baud rate, then |
| 1125 | whether padding is emitted or not is completely controlled by \fBxon\fR. |
| 1126 | .PP |
| 1127 | If the terminal requires other than a null (zero) character as a pad, |
| 1128 | then this can be given as \fBpad\fR. |
| 1129 | Only the first character of the |
| 1130 | .B pad |
| 1131 | string is used. |
| 1132 | .PP |
| 1133 | .SS Status Lines |
| 1134 | Some terminals have an extra `status line' which is not normally used by |
| 1135 | software (and thus not counted in the terminal's \fBlines\fR capability). |
| 1136 | .PP |
| 1137 | The simplest case is a status line which is cursor-addressable but not |
| 1138 | part of the main scrolling region on the screen; the Heathkit H19 has |
| 1139 | a status line of this kind, as would a 24-line VT100 with a 23-line |
| 1140 | scrolling region set up on initialization. |
| 1141 | This situation is indicated |
| 1142 | by the \fBhs\fR capability. |
| 1143 | .PP |
| 1144 | Some terminals with status lines need special sequences to access the |
| 1145 | status line. |
| 1146 | These may be expressed as a string with single parameter |
| 1147 | \fBtsl\fR which takes the cursor to a given zero-origin column on the |
| 1148 | status line. |
| 1149 | The capability \fBfsl\fR must return to the main-screen |
| 1150 | cursor positions before the last \fBtsl\fR. |
| 1151 | You may need to embed the |
| 1152 | string values of \fBsc\fR (save cursor) and \fBrc\fR (restore cursor) |
| 1153 | in \fBtsl\fR and \fBfsl\fR to accomplish this. |
| 1154 | .PP |
| 1155 | The status line is normally assumed to be the same width as the width |
| 1156 | of the terminal. |
| 1157 | If this is untrue, you can specify it with the numeric |
| 1158 | capability \fBwsl\fR. |
| 1159 | .PP |
| 1160 | A command to erase or blank the status line may be specified as \fBdsl\fR. |
| 1161 | .PP |
| 1162 | The boolean capability \fBeslok\fR specifies that escape sequences, tabs, |
| 1163 | etc., work ordinarily in the status line. |
| 1164 | .PP |
| 1165 | The \fBncurses\fR implementation does not yet use any of these capabilities. |
| 1166 | They are documented here in case they ever become important. |
| 1167 | .PP |
| 1168 | .SS Line Graphics |
| 1169 | .PP |
| 1170 | Many terminals have alternate character sets useful for forms-drawing. |
| 1171 | Terminfo and \fBcurses\fR build in support for the drawing characters |
| 1172 | supported by the VT100, with some characters from the AT&T 4410v1 added. |
| 1173 | This alternate character set may be specified by the \fBacsc\fR capability. |
| 1174 | .PP |
| 1175 | .TS H |
| 1176 | center expand; |
| 1177 | c l l c |
| 1178 | c l l c |
| 1179 | lw28 lw6 lw2 lw20. |
| 1180 | .\".TH |
| 1181 | \fBGlyph ACS Ascii VT100\fR |
| 1182 | \fBName Name Default Name\fR |
| 1183 | UK pound sign ACS_STERLING f } |
| 1184 | arrow pointing down ACS_DARROW v . |
| 1185 | arrow pointing left ACS_LARROW < , |
| 1186 | arrow pointing right ACS_RARROW > + |
| 1187 | arrow pointing up ACS_UARROW ^ - |
| 1188 | board of squares ACS_BOARD # h |
| 1189 | bullet ACS_BULLET o ~ |
| 1190 | checker board (stipple) ACS_CKBOARD : a |
| 1191 | degree symbol ACS_DEGREE \e f |
| 1192 | diamond ACS_DIAMOND + ` |
| 1193 | greater-than-or-equal-to ACS_GEQUAL > z |
| 1194 | greek pi ACS_PI * { |
| 1195 | horizontal line ACS_HLINE - q |
| 1196 | lantern symbol ACS_LANTERN # i |
| 1197 | large plus or crossover ACS_PLUS + n |
| 1198 | less-than-or-equal-to ACS_LEQUAL < y |
| 1199 | lower left corner ACS_LLCORNER + m |
| 1200 | lower right corner ACS_LRCORNER + j |
| 1201 | not-equal ACS_NEQUAL ! | |
| 1202 | plus/minus ACS_PLMINUS # g |
| 1203 | scan line 1 ACS_S1 ~ o |
| 1204 | scan line 3 ACS_S3 - p |
| 1205 | scan line 7 ACS_S7 - r |
| 1206 | scan line 9 ACS_S9 \&_ s |
| 1207 | solid square block ACS_BLOCK # 0 |
| 1208 | tee pointing down ACS_TTEE + w |
| 1209 | tee pointing left ACS_RTEE + u |
| 1210 | tee pointing right ACS_LTEE + t |
| 1211 | tee pointing up ACS_BTEE + v |
| 1212 | upper left corner ACS_ULCORNER + l |
| 1213 | upper right corner ACS_URCORNER + k |
| 1214 | vertical line ACS_VLINE | x |
| 1215 | .TE |
| 1216 | .PP |
| 1217 | The best way to define a new device's graphics set is to add a column |
| 1218 | to a copy of this table for your terminal, giving the character which |
| 1219 | (when emitted between \fBsmacs\fR/\fBrmacs\fR switches) will be rendered |
| 1220 | as the corresponding graphic. |
| 1221 | Then read off the VT100/your terminal |
| 1222 | character pairs right to left in sequence; these become the ACSC string. |
| 1223 | .PP |
| 1224 | .SS Color Handling |
| 1225 | .PP |
| 1226 | Most color terminals are either `Tektronix-like' or `HP-like'. |
| 1227 | Tektronix-like |
| 1228 | terminals have a predefined set of N colors (where N usually 8), and can set |
| 1229 | character-cell foreground and background characters independently, mixing them |
| 1230 | into N * N color-pairs. |
| 1231 | On HP-like terminals, the use must set each color |
| 1232 | pair up separately (foreground and background are not independently settable). |
| 1233 | Up to M color-pairs may be set up from 2*M different colors. |
| 1234 | ANSI-compatible |
| 1235 | terminals are Tektronix-like. |
| 1236 | .PP |
| 1237 | Some basic color capabilities are independent of the color method. |
| 1238 | The numeric |
| 1239 | capabilities \fBcolors\fR and \fBpairs\fR specify the maximum numbers of colors |
| 1240 | and color-pairs that can be displayed simultaneously. |
| 1241 | The \fBop\fR (original |
| 1242 | pair) string resets foreground and background colors to their default values |
| 1243 | for the terminal. |
| 1244 | The \fBoc\fR string resets all colors or color-pairs to |
| 1245 | their default values for the terminal. |
| 1246 | Some terminals (including many PC |
| 1247 | terminal emulators) erase screen areas with the current background color rather |
| 1248 | than the power-up default background; these should have the boolean capability |
| 1249 | \fBbce\fR. |
| 1250 | .PP |
| 1251 | To change the current foreground or background color on a Tektronix-type |
| 1252 | terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI |
| 1253 | background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background). |
| 1254 | These take one parameter, the color number. |
| 1255 | The SVr4 documentation describes |
| 1256 | only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal |
| 1257 | supports ANSI escape sequences to set background and foreground, they should |
| 1258 | be coded as \fBsetaf\fR and \fBsetab\fR, respectively. |
| 1259 | If the terminal |
| 1260 | supports other escape sequences to set background and foreground, they should |
| 1261 | be coded as \fBsetf\fR and \fBsetb\fR, respectively. |
| 1262 | The \fIvidputs()\fR |
| 1263 | function and the refresh functions use \fBsetaf\fR and \fBsetab\fR if they are |
| 1264 | defined." |
| 1265 | .PP |
| 1266 | The \fBsetaf\fR/\fBsetab\fR and \fBsetf\fR/\fBsetb\fR capabilities take a |
| 1267 | single numeric argument each. |
| 1268 | Argument values 0-7 of \fBsetaf\fR/\fBsetab\fR are portably defined as |
| 1269 | follows (the middle column is the symbolic #define available in the header for |
| 1270 | the \fBcurses\fR or \fBncurses\fR libraries). |
| 1271 | The terminal hardware is free to |
| 1272 | map these as it likes, but the RGB values indicate normal locations in color |
| 1273 | space. |
| 1274 | .PP |
| 1275 | .TS H |
| 1276 | center; |
| 1277 | l c c c |
| 1278 | l l n l. |
| 1279 | \fBColor #define Value RGB\fR |
| 1280 | black \fBCOLOR_BLACK\fR 0 0, 0, 0 |
| 1281 | red \fBCOLOR_RED\ \fR 1 max,0,0 |
| 1282 | green \fBCOLOR_GREEN\fR 2 0,max,0 |
| 1283 | yellow \fBCOLOR_YELLOW\fR 3 max,max,0 |
| 1284 | blue \fBCOLOR_BLUE\fR 4 0,0,max |
| 1285 | magenta \fBCOLOR_MAGENTA\fR 5 max,0,max |
| 1286 | cyan \fBCOLOR_CYAN\fR 6 0,max,max |
| 1287 | white \fBCOLOR_WHITE\fR 7 max,max,max |
| 1288 | .TE |
| 1289 | .PP |
| 1290 | The argument values of \fBsetf\fR/\fBsetb\fR historically correspond to |
| 1291 | a different mapping, i.e., |
| 1292 | .TS H |
| 1293 | center; |
| 1294 | l c c c |
| 1295 | l l n l. |
| 1296 | \fBColor #define Value RGB\fR |
| 1297 | black \fBCOLOR_BLACK\fR 0 0, 0, 0 |
| 1298 | blue \fBCOLOR_BLUE\fR 1 0,0,max |
| 1299 | green \fBCOLOR_GREEN\fR 2 0,max,0 |
| 1300 | cyan \fBCOLOR_CYAN\fR 3 0,max,max |
| 1301 | red \fBCOLOR_RED\ \fR 4 max,0,0 |
| 1302 | magenta \fBCOLOR_MAGENTA\fR 5 max,0,max |
| 1303 | yellow \fBCOLOR_YELLOW\fR 6 max,max,0 |
| 1304 | white \fBCOLOR_WHITE\fR 7 max,max,max |
| 1305 | .TE |
| 1306 | It is important to not confuse the two sets of color capabilities; |
| 1307 | otherwise red/blue will be interchanged on the display. |
| 1308 | .PP |
| 1309 | On an HP-like terminal, use \fBscp\fR with a color-pair number parameter to set |
| 1310 | which color pair is current. |
| 1311 | .PP |
| 1312 | On a Tektronix-like terminal, the capability \fBccc\fR may be present to |
| 1313 | indicate that colors can be modified. |
| 1314 | If so, the \fBinitc\fR capability will |
| 1315 | take a color number (0 to \fBcolors\fR - 1)and three more parameters which |
| 1316 | describe the color. |
| 1317 | These three parameters default to being interpreted as RGB |
| 1318 | (Red, Green, Blue) values. |
| 1319 | If the boolean capability \fBhls\fR is present, |
| 1320 | they are instead as HLS (Hue, Lightness, Saturation) indices. |
| 1321 | The ranges are |
| 1322 | terminal-dependent. |
| 1323 | .PP |
| 1324 | On an HP-like terminal, \fBinitp\fR may give a capability for changing a |
| 1325 | color-pair value. |
| 1326 | It will take seven parameters; a color-pair number (0 to |
| 1327 | \fBmax_pairs\fR - 1), and two triples describing first background and then |
| 1328 | foreground colors. |
| 1329 | These parameters must be (Red, Green, Blue) or |
| 1330 | (Hue, Lightness, Saturation) depending on \fBhls\fR. |
| 1331 | .PP |
| 1332 | On some color terminals, colors collide with highlights. |
| 1333 | You can register |
| 1334 | these collisions with the \fBncv\fR capability. |
| 1335 | This is a bit-mask of |
| 1336 | attributes not to be used when colors are enabled. |
| 1337 | The correspondence with the |
| 1338 | attributes understood by \fBcurses\fR is as follows: |
| 1339 | .PP |
| 1340 | .TS |
| 1341 | center; |
| 1342 | l c c |
| 1343 | lw25 lw2 lw10. |
| 1344 | \fBAttribute Bit Decimal\fR |
| 1345 | A_STANDOUT 0 1 |
| 1346 | A_UNDERLINE 1 2 |
| 1347 | A_REVERSE 2 4 |
| 1348 | A_BLINK 3 8 |
| 1349 | A_DIM 4 16 |
| 1350 | A_BOLD 5 32 |
| 1351 | A_INVIS 6 64 |
| 1352 | A_PROTECT 7 128 |
| 1353 | A_ALTCHARSET 8 256 |
| 1354 | .TE |
| 1355 | .PP |
| 1356 | For example, on many IBM PC consoles, the underline attribute collides with the |
| 1357 | foreground color blue and is not available in color mode. |
| 1358 | These should have |
| 1359 | an \fBncv\fR capability of 2. |
| 1360 | .PP |
| 1361 | SVr4 curses does nothing with \fBncv\fR, ncurses recognizes it and optimizes |
| 1362 | the output in favor of colors. |
| 1363 | .PP |
| 1364 | .SS Miscellaneous |
| 1365 | If the terminal requires other than a null (zero) character as a pad, then this |
| 1366 | can be given as pad. |
| 1367 | Only the first character of the pad string is used. |
| 1368 | If the terminal does not have a pad character, specify npc. |
| 1369 | Note that ncurses implements the termcap-compatible \fBPC\fR variable; |
| 1370 | though the application may set this value to something other than |
| 1371 | a null, ncurses will test \fBnpc\fR first and use napms if the terminal |
| 1372 | has no pad character. |
| 1373 | .PP |
| 1374 | If the terminal can move up or down half a line, |
| 1375 | this can be indicated with |
| 1376 | .B hu |
| 1377 | (half-line up) |
| 1378 | and |
| 1379 | .B hd |
| 1380 | (half-line down). |
| 1381 | This is primarily useful for superscripts and subscripts on hard-copy terminals. |
| 1382 | If a hard-copy terminal can eject to the next page (form feed), give this as |
| 1383 | .B ff |
| 1384 | (usually control L). |
| 1385 | .PP |
| 1386 | If there is a command to repeat a given character a given number of |
| 1387 | times (to save time transmitting a large number of identical characters) |
| 1388 | this can be indicated with the parameterized string |
| 1389 | .BR rep . |
| 1390 | The first parameter is the character to be repeated and the second |
| 1391 | is the number of times to repeat it. |
| 1392 | Thus, tparm(repeat_char, 'x', 10) is the same as `xxxxxxxxxx'. |
| 1393 | .PP |
| 1394 | If the terminal has a settable command character, such as the \s-1TEKTRONIX\s+1 4025, |
| 1395 | this can be indicated with |
| 1396 | .BR cmdch . |
| 1397 | A prototype command character is chosen which is used in all capabilities. |
| 1398 | This character is given in the |
| 1399 | .B cmdch |
| 1400 | capability to identify it. |
| 1401 | The following convention is supported on some UNIX systems: |
| 1402 | The environment is to be searched for a |
| 1403 | .B CC |
| 1404 | variable, and if found, all |
| 1405 | occurrences of the prototype character are replaced with the character |
| 1406 | in the environment variable. |
| 1407 | .PP |
| 1408 | Terminal descriptions that do not represent a specific kind of known |
| 1409 | terminal, such as |
| 1410 | .IR switch , |
| 1411 | .IR dialup , |
| 1412 | .IR patch , |
| 1413 | and |
| 1414 | .IR network , |
| 1415 | should include the |
| 1416 | .B gn |
| 1417 | (generic) capability so that programs can complain that they do not know |
| 1418 | how to talk to the terminal. |
| 1419 | (This capability does not apply to |
| 1420 | .I virtual |
| 1421 | terminal descriptions for which the escape sequences are known.) |
| 1422 | .PP |
| 1423 | If the terminal has a ``meta key'' which acts as a shift key, |
| 1424 | setting the 8th bit of any character transmitted, this fact can |
| 1425 | be indicated with |
| 1426 | .BR km . |
| 1427 | Otherwise, software will assume that the 8th bit is parity and it |
| 1428 | will usually be cleared. |
| 1429 | If strings exist to turn this ``meta mode'' on and off, they |
| 1430 | can be given as |
| 1431 | .B smm |
| 1432 | and |
| 1433 | .BR rmm . |
| 1434 | .PP |
| 1435 | If the terminal has more lines of memory than will fit on the screen |
| 1436 | at once, the number of lines of memory can be indicated with |
| 1437 | .BR lm . |
| 1438 | A value of |
| 1439 | .BR lm #0 |
| 1440 | indicates that the number of lines is not fixed, |
| 1441 | but that there is still more memory than fits on the screen. |
| 1442 | .PP |
| 1443 | If the terminal is one of those supported by the \s-1UNIX\s+1 virtual |
| 1444 | terminal protocol, the terminal number can be given as |
| 1445 | .BR vt . |
| 1446 | .PP |
| 1447 | Media copy |
| 1448 | strings which control an auxiliary printer connected to the terminal |
| 1449 | can be given as |
| 1450 | .BR mc0 : |
| 1451 | print the contents of the screen, |
| 1452 | .BR mc4 : |
| 1453 | turn off the printer, and |
| 1454 | .BR mc5 : |
| 1455 | turn on the printer. |
| 1456 | When the printer is on, all text sent to the terminal will be sent |
| 1457 | to the printer. |
| 1458 | It is undefined whether the text is also displayed on the terminal screen |
| 1459 | when the printer is on. |
| 1460 | A variation |
| 1461 | .B mc5p |
| 1462 | takes one parameter, and leaves the printer on for as many characters |
| 1463 | as the value of the parameter, then turns the printer off. |
| 1464 | The parameter should not exceed 255. |
| 1465 | All text, including |
| 1466 | .BR mc4 , |
| 1467 | is transparently passed to the printer while an |
| 1468 | .B mc5p |
| 1469 | is in effect. |
| 1470 | .PP |
| 1471 | .SS Glitches and Braindamage |
| 1472 | .PP |
| 1473 | Hazeltine terminals, which do not allow `~' characters to be displayed should |
| 1474 | indicate \fBhz\fR. |
| 1475 | .PP |
| 1476 | Terminals which ignore a line-feed immediately after an \fBam\fR wrap, |
| 1477 | such as the Concept and vt100, |
| 1478 | should indicate \fBxenl\fR. |
| 1479 | .PP |
| 1480 | If |
| 1481 | .B el |
| 1482 | is required to get rid of standout |
| 1483 | (instead of merely writing normal text on top of it), |
| 1484 | \fBxhp\fP should be given. |
| 1485 | .PP |
| 1486 | Teleray terminals, where tabs turn all characters moved over to blanks, |
| 1487 | should indicate \fBxt\fR (destructive tabs). |
| 1488 | Note: the variable indicating this is now `dest_tabs_magic_smso'; in |
| 1489 | older versions, it was teleray_glitch. |
| 1490 | This glitch is also taken to mean that it is not possible to position |
| 1491 | the cursor on top of a ``magic cookie'', |
| 1492 | that to erase standout mode it is instead necessary to use |
| 1493 | delete and insert line. |
| 1494 | The ncurses implementation ignores this glitch. |
| 1495 | .PP |
| 1496 | The Beehive Superbee, which is unable to correctly transmit the escape |
| 1497 | or control C characters, has |
| 1498 | .BR xsb , |
| 1499 | indicating that the f1 key is used for escape and f2 for control C. |
| 1500 | (Only certain Superbees have this problem, depending on the ROM.) |
| 1501 | Note that in older terminfo versions, this capability was called |
| 1502 | `beehive_glitch'; it is now `no_esc_ctl_c'. |
| 1503 | .PP |
| 1504 | Other specific terminal problems may be corrected by adding more |
| 1505 | capabilities of the form \fBx\fR\fIx\fR. |
| 1506 | .PP |
| 1507 | .SS Similar Terminals |
| 1508 | .PP |
| 1509 | If there are two very similar terminals, one (the variant) can be defined as |
| 1510 | being just like the other (the base) with certain exceptions. |
| 1511 | In the |
| 1512 | definition of the variant, the string capability \fBuse\fR can be given with |
| 1513 | the name of the base terminal. |
| 1514 | The capabilities given before |
| 1515 | .B use |
| 1516 | override those in the base type named by |
| 1517 | .BR use . |
| 1518 | If there are multiple \fBuse\fR capabilities, they are merged in reverse order. |
| 1519 | That is, the rightmost \fBuse\fR reference is processed first, then the one to |
| 1520 | its left, and so forth. |
| 1521 | Capabilities given explicitly in the entry override |
| 1522 | those brought in by \fBuse\fR references. |
| 1523 | .PP |
| 1524 | A capability can be canceled by placing \fBxx@\fR to the left of the |
| 1525 | use reference that imports it, where \fIxx\fP is the capability. |
| 1526 | For example, the entry |
| 1527 | .PP |
| 1528 | 2621-nl, smkx@, rmkx@, use=2621, |
| 1529 | .PP |
| 1530 | defines a 2621-nl that does not have the \fBsmkx\fR or \fBrmkx\fR capabilities, |
| 1531 | and hence does not turn on the function key labels when in visual mode. |
| 1532 | This is useful for different modes for a terminal, or for different |
| 1533 | user preferences. |
| 1534 | .PP |
| 1535 | .SS Pitfalls of Long Entries |
| 1536 | .PP |
| 1537 | Long terminfo entries are unlikely to be a problem; to date, no entry has even |
| 1538 | approached terminfo's 4096-byte string-table maximum. |
| 1539 | Unfortunately, the termcap |
| 1540 | translations are much more strictly limited (to 1023 bytes), thus termcap translations |
| 1541 | of long terminfo entries can cause problems. |
| 1542 | .PP |
| 1543 | The man pages for 4.3BSD and older versions of \fBtgetent()\fP instruct the user to |
| 1544 | allocate a 1024-byte buffer for the termcap entry. |
| 1545 | The entry gets null-terminated by |
| 1546 | the termcap library, so that makes the maximum safe length for a termcap entry |
| 1547 | 1k-1 (1023) bytes. |
| 1548 | Depending on what the application and the termcap library |
| 1549 | being used does, and where in the termcap file the terminal type that \fBtgetent()\fP |
| 1550 | is searching for is, several bad things can happen. |
| 1551 | .PP |
| 1552 | Some termcap libraries print a warning message or exit if they find an |
| 1553 | entry that's longer than 1023 bytes; others do not; others truncate the |
| 1554 | entries to 1023 bytes. |
| 1555 | Some application programs allocate more than |
| 1556 | the recommended 1K for the termcap entry; others do not. |
| 1557 | .PP |
| 1558 | Each termcap entry has two important sizes associated with it: before |
| 1559 | "tc" expansion, and after "tc" expansion. |
| 1560 | "tc" is the capability that |
| 1561 | tacks on another termcap entry to the end of the current one, to add |
| 1562 | on its capabilities. |
| 1563 | If a termcap entry does not use the "tc" |
| 1564 | capability, then of course the two lengths are the same. |
| 1565 | .PP |
| 1566 | The "before tc expansion" length is the most important one, because it |
| 1567 | affects more than just users of that particular terminal. |
| 1568 | This is the |
| 1569 | length of the entry as it exists in /etc/termcap, minus the |
| 1570 | backslash-newline pairs, which \fBtgetent()\fP strips out while reading it. |
| 1571 | Some termcap libraries strip off the final newline, too (GNU termcap does not). |
| 1572 | Now suppose: |
| 1573 | .TP 5 |
| 1574 | * |
| 1575 | a termcap entry before expansion is more than 1023 bytes long, |
| 1576 | .TP 5 |
| 1577 | * |
| 1578 | and the application has only allocated a 1k buffer, |
| 1579 | .TP 5 |
| 1580 | * |
| 1581 | and the termcap library (like the one in BSD/OS 1.1 and GNU) reads |
| 1582 | the whole entry into the buffer, no matter what its length, to see |
| 1583 | if it is the entry it wants, |
| 1584 | .TP 5 |
| 1585 | * |
| 1586 | and \fBtgetent()\fP is searching for a terminal type that either is the |
| 1587 | long entry, appears in the termcap file after the long entry, or |
| 1588 | does not appear in the file at all (so that \fBtgetent()\fP has to search |
| 1589 | the whole termcap file). |
| 1590 | .PP |
| 1591 | Then \fBtgetent()\fP will overwrite memory, perhaps its stack, and probably core dump |
| 1592 | the program. |
| 1593 | Programs like telnet are particularly vulnerable; modern telnets |
| 1594 | pass along values like the terminal type automatically. |
| 1595 | The results are almost |
| 1596 | as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that |
| 1597 | prints warning messages when it reads an overly long termcap entry. |
| 1598 | If a |
| 1599 | termcap library truncates long entries, like OSF/1 3.0, it is immune to dying |
| 1600 | here but will return incorrect data for the terminal. |
| 1601 | .PP |
| 1602 | The "after tc expansion" length will have a similar effect to the |
| 1603 | above, but only for people who actually set TERM to that terminal |
| 1604 | type, since \fBtgetent()\fP only does "tc" expansion once it is found the |
| 1605 | terminal type it was looking for, not while searching. |
| 1606 | .PP |
| 1607 | In summary, a termcap entry that is longer than 1023 bytes can cause, |
| 1608 | on various combinations of termcap libraries and applications, a core |
| 1609 | dump, warnings, or incorrect operation. |
| 1610 | If it is too long even before |
| 1611 | "tc" expansion, it will have this effect even for users of some other |
| 1612 | terminal types and users whose TERM variable does not have a termcap |
| 1613 | entry. |
| 1614 | .PP |
| 1615 | When in -C (translate to termcap) mode, the \fBncurses\fR implementation of |
| 1616 | \fB@TIC@\fR(1M) issues warning messages when the pre-tc length of a termcap |
| 1617 | translation is too long. |
| 1618 | The -c (check) option also checks resolved (after tc |
| 1619 | expansion) lengths. |
| 1620 | .SS Binary Compatibility |
| 1621 | It is not wise to count on portability of binary terminfo entries between |
| 1622 | commercial UNIX versions. |
| 1623 | The problem is that there are at least two versions |
| 1624 | of terminfo (under HP-UX and AIX) which diverged from System V terminfo after |
| 1625 | SVr1, and have added extension capabilities to the string table that (in the |
| 1626 | binary format) collide with System V and XSI Curses extensions. |
| 1627 | .SH EXTENSIONS |
| 1628 | Some SVr4 \fBcurses\fR implementations, and all previous to SVr4, do not |
| 1629 | interpret the %A and %O operators in parameter strings. |
| 1630 | .PP |
| 1631 | SVr4/XPG4 do not specify whether \fBmsgr\fR licenses movement while in |
| 1632 | an alternate-character-set mode (such modes may, among other things, map |
| 1633 | CR and NL to characters that do not trigger local motions). |
| 1634 | The \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR |
| 1635 | mode. |
| 1636 | This raises the possibility that an XPG4 |
| 1637 | implementation making the opposite interpretation may need terminfo |
| 1638 | entries made for \fBncurses\fR to have \fBmsgr\fR turned off. |
| 1639 | .PP |
| 1640 | The \fBncurses\fR library handles insert-character and insert-character modes |
| 1641 | in a slightly non-standard way to get better update efficiency. |
| 1642 | See |
| 1643 | the \fBInsert/Delete Character\fR subsection above. |
| 1644 | .PP |
| 1645 | The parameter substitutions for \fBset_clock\fR and \fBdisplay_clock\fR are |
| 1646 | not documented in SVr4 or the XSI Curses standard. |
| 1647 | They are deduced from the |
| 1648 | documentation for the AT&T 505 terminal. |
| 1649 | .PP |
| 1650 | Be careful assigning the \fBkmous\fR capability. |
| 1651 | The \fBncurses\fR wants to |
| 1652 | interpret it as \fBKEY_MOUSE\fR, for use by terminals and emulators like xterm |
| 1653 | that can return mouse-tracking information in the keyboard-input stream. |
| 1654 | .PP |
| 1655 | Different commercial ports of terminfo and curses support different subsets of |
| 1656 | the XSI Curses standard and (in some cases) different extension sets. |
| 1657 | Here |
| 1658 | is a summary, accurate as of October 1995: |
| 1659 | .PP |
| 1660 | \fBSVR4, Solaris, ncurses\fR -- |
| 1661 | These support all SVr4 capabilities. |
| 1662 | .PP |
| 1663 | \fBSGI\fR -- |
| 1664 | Supports the SVr4 set, adds one undocumented extended string |
| 1665 | capability (\fBset_pglen\fR). |
| 1666 | .PP |
| 1667 | \fBSVr1, Ultrix\fR -- |
| 1668 | These support a restricted subset of terminfo capabilities. |
| 1669 | The booleans |
| 1670 | end with \fBxon_xoff\fR; the numerics with \fBwidth_status_line\fR; and the |
| 1671 | strings with \fBprtr_non\fR. |
| 1672 | .PP |
| 1673 | \fBHP/UX\fR -- |
| 1674 | Supports the SVr1 subset, plus the SVr[234] numerics \fBnum_labels\fR, |
| 1675 | \fBlabel_height\fR, \fBlabel_width\fR, plus function keys 11 through 63, plus |
| 1676 | \fBplab_norm\fR, \fBlabel_on\fR, and \fBlabel_off\fR, plus some incompatible |
| 1677 | extensions in the string table. |
| 1678 | .PP |
| 1679 | \fBAIX\fR -- |
| 1680 | Supports the SVr1 subset, plus function keys 11 through 63, plus a number |
| 1681 | of incompatible string table extensions. |
| 1682 | .PP |
| 1683 | \fBOSF\fR -- |
| 1684 | Supports both the SVr4 set and the AIX extensions. |
| 1685 | .SH FILES |
| 1686 | .TP 25 |
| 1687 | \*d/?/* |
| 1688 | files containing terminal descriptions |
| 1689 | .SH SEE ALSO |
| 1690 | \fB@TIC@\fR(1M), |
| 1691 | \fB@INFOCMP@\fR(1M), |
| 1692 | \fBcurses\fR(3X), |
| 1693 | \fBprintf\fR(3), |
| 1694 | \fBterm\fR(\*n). |
| 1695 | .SH AUTHORS |
| 1696 | Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey. |
| 1697 | Based on pcurses by Pavel Curtis. |
| 1698 | .\"# |
| 1699 | .\"# The following sets edit modes for GNU EMACS |
| 1700 | .\"# Local Variables: |
| 1701 | .\"# mode:nroff |
| 1702 | .\"# fill-column:79 |
| 1703 | .\"# End: |