| '\" t |
| .\" DO NOT EDIT THIS FILE BY HAND! |
| .\" It is generated from terminfo.head, ./../include/Caps ./../include/Caps-ncurses, and terminfo.tail. |
| .\" |
| .\" Note: this must be run through tbl before nroff. |
| .\" The magic cookie on the first line triggers this under some man programs. |
| .\"*************************************************************************** |
| .\" Copyright 2018-2023,2024 Thomas E. Dickey * |
| .\" Copyright 1998-2016,2017 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: terminfo.head,v 1.65 2024/04/20 21:14:00 tom Exp $ |
| .TH terminfo 5 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "File formats" |
| .ie \n(.g \{\ |
| .ds `` \(lq |
| .ds '' \(rq |
| .ds ' \(aq |
| .ds ^ \(ha |
| .ds ~ \(ti |
| .\} |
| .el \{\ |
| .ie t .ds `` `` |
| .el .ds `` "" |
| .ie t .ds '' '' |
| .el .ds '' "" |
| .ds ' ' |
| .ds ^ ^ |
| .ds ~ ~ |
| .\} |
| . |
| .de bP |
| .ie n .IP \(bu 4 |
| .el .IP \(bu 2 |
| .. |
| . |
| .ds d @TERMINFO@ |
| .SH NAME |
| \fB\%terminfo\fP \- |
| terminal capability database |
| .SH SYNOPSIS |
| \*d/*/* |
| .SH DESCRIPTION |
| .I Terminfo |
| is a database describing terminals, |
| used by screen-oriented programs such as |
| \fBnvi\fP(1), |
| \fBlynx\fP(1), |
| \fBmutt\fP(1), |
| and other curses applications, |
| using high-level calls to libraries such as \fBcurses\fP(3X). |
| It is also used via low-level calls by non-curses applications |
| which may be screen-oriented (such as \fB@CLEAR@\fP(1)) |
| or non-screen (such as \fB@TABS@\fP(1)). |
| .PP |
| .I Terminfo |
| describes terminals by giving a set of capabilities which they |
| have, by specifying how to perform screen operations, and by |
| specifying padding requirements and initialization sequences. |
| .PP |
| This document describes |
| .I \%ncurses |
| version @NCURSES_MAJOR@.@NCURSES_MINOR@ |
| (patch @NCURSES_PATCH@). |
| .SS "\fIterminfo\fP Entry Syntax" |
| Entries in |
| .I terminfo |
| consist of a sequence of fields: |
| .bP |
| Each field ends with a comma \*(``,\*('' |
| (embedded commas may be |
| escaped with a backslash or written as \*(``\e054\*(''). |
| .bP |
| White space between fields is ignored. |
| .bP |
| The first field in a \fIterminfo\fP entry begins in the first column. |
| .bP |
| Newlines and leading whitespace (spaces or tabs) |
| may be used for formatting entries for readability. |
| These are removed from parsed entries. |
| .IP |
| The \fB@INFOCMP@\fP \fB\-f\fP and \fB\-W\fP options rely on this to |
| format if-then-else expressions, |
| or to enforce maximum line-width. |
| The resulting formatted terminal description can be read by \fB@TIC@\fP. |
| .bP |
| The first field for each terminal gives the names which are known for the |
| terminal, separated by \*(``|\*('' characters. |
| .IP |
| The first name given is the most common abbreviation for the terminal |
| (its primary name), |
| the last name given should be a long name fully identifying the terminal |
| (see \fBlongname\fP(3X)), |
| and all others are treated as synonyms (aliases) for the primary terminal name. |
| .IP |
| X/Open Curses advises that all names but the last should be in lower case |
| and contain no blanks; |
| the last name may well contain upper case and blanks for readability. |
| .IP |
| This implementation is not so strict; |
| it allows mixed case in the primary name and aliases. |
| If the last name has no embedded blanks, |
| it allows that to be both an alias and a verbose name |
| (but will warn about this ambiguity). |
| .bP |
| Lines beginning with a \*(``#\*('' in the first column are treated as comments. |
| .IP |
| While comment lines are valid at any point, the output of \fB@CAPTOINFO@\fP |
| and \fB@INFOTOCAP@\fP (aliases for \fB@TIC@\fP) |
| will move comments so they occur only between entries. |
| .PP |
| Terminal names (except for the last, verbose entry) should |
| be chosen using the following conventions. |
| The particular piece of hardware making up the terminal should |
| have a root name, thus \*(``hp2621\*(''. |
| This name should not contain hyphens. |
| Modes that the hardware can be in, or user preferences, should |
| be indicated by appending a hyphen and a mode suffix. |
| Thus, a vt100 in 132-column mode would be vt100\-w. |
| The following suffixes should be used where possible: |
| .PP |
| .TS |
| center; |
| Lb Lb Lb |
| L L Lx. |
| Suffix Example Meaning |
| _ |
| \-\fInn\fP aaa\-60 Number of lines on the screen |
| \-\fIn\fPp c100\-4p Number of pages of memory |
| \-am vt100\-am With automargins (usually the default) |
| \-m ansi\-m Mono mode; suppress color |
| \-mc wy30\-mc Magic cookie; spaces when highlighting |
| \-na c100\-na No arrow keys (leave them in local) |
| \-nam vt100\-nam Without automatic margins |
| \-nl hp2621\-nl No status line |
| \-ns hp2626\-ns No status line |
| \-rv c100\-rv Reverse video |
| \-s vt100\-s Enable status line |
| \-vb wy370\-vb Use visible bell instead of beep |
| \-w vt100\-w Wide mode (> 80 columns, usually 132) |
| .TE |
| .PP |
| For more on terminal naming conventions, see the \fBterm\fP(7) manual page. |
| .SS "\fIterminfo\fP Capabilities Syntax" |
| The terminfo entry consists of several \fIcapabilities\fP, |
| i.e., features that the terminal has, |
| or methods for exercising the terminal's features. |
| .PP |
| After the first field (giving the name(s) of the terminal entry), |
| there should be one or more \fIcapability\fP fields. |
| These are Boolean, numeric or string names with corresponding values: |
| .bP |
| Boolean capabilities are true when present, false when absent. |
| There is no explicit value for Boolean capabilities. |
| .bP |
| Numeric capabilities have a \*(``#\*('' following the name, |
| then an unsigned decimal integer value. |
| .bP |
| String capabilities have a \*(``=\*('' following the name, |
| then an string of characters making up the capability value. |
| .IP |
| String capabilities can be split into multiple lines, |
| just as the fields comprising a terminal entry can be |
| split into multiple lines. |
| While blanks between fields are ignored, |
| blanks embedded within a string value are retained, |
| except for leading blanks on a line. |
| .PP |
| Any capability can be \fIcanceled\fP, |
| i.e., suppressed from the terminal entry, |
| by following its name with \*(``@\*('' |
| rather than a capability value. |
| .SS "Similar Terminals" |
| If there are two very similar terminals, one (the variant) can be defined as |
| being just like the other (the base) with certain exceptions. |
| In the |
| definition of the variant, the string capability \fBuse\fP can be given with |
| the name of the base terminal: |
| .bP |
| The capabilities given before |
| .B use |
| override those in the base type named by |
| .BR use . |
| .bP |
| If there are multiple \fBuse\fP capabilities, they are merged in reverse order. |
| That is, the rightmost \fBuse\fP reference is processed first, then the one to |
| its left, and so forth. |
| .bP |
| Capabilities given explicitly in the entry override |
| those brought in by \fBuse\fP references. |
| .PP |
| A capability can be canceled by placing \fBxx@\fP to the left of the |
| use reference that imports it, where \fIxx\fP is the capability. |
| For example, the entry |
| .RS |
| .PP |
| 2621\-nl, smkx@, rmkx@, use=2621, |
| .RE |
| .PP |
| defines a 2621\-nl that does not have the \fBsmkx\fP or \fBrmkx\fP capabilities, |
| and hence does not turn on the function key labels when in visual mode. |
| This is useful for different modes for a terminal, or for different |
| user preferences. |
| .PP |
| An entry included via \fBuse\fP can contain canceled capabilities, |
| which have the same effect as if those cancels were inline in the |
| using terminal entry. |
| .SS "Predefined Capabilities" |
| .\" Head of terminfo man page ends here |
| .ps -1 |
| Tables of capabilities |
| .I \%ncurses |
| recognizes in a |
| .I \%term\%info |
| terminal type description and available to |
| .IR \%term\%info -using |
| code follow. |
| .bP |
| The capability name identifies the symbol by which the programmer |
| using the |
| .I \%term\%info |
| API accesses the capability. |
| .bP |
| The TI |
| .RI ( \%term\%info ) |
| code is the short name used by a person composing or updating a |
| terminal type entry. |
| .IP |
| Whenever possible, |
| these codes are the same as or similar to those of the ANSI X3.64-1979 |
| standard |
| (now superseded by ECMA-48, |
| which uses identical or very similar names). |
| Semantics are also intended to match those of the specification. |
| .IP |
| .I \%term\%info |
| codes have no hard length limit, |
| but |
| .I \%ncurses |
| maintains an informal one of 5 characters to keep them short and to |
| allow the tabs in the source file |
| .I Caps |
| to line up nicely. |
| (Some standard codes exceed this limit regardless.) |
| .bP |
| The TC |
| .RI ( termcap ) |
| code is that used by the corresponding API of |
| .IR \%ncurses . |
| (Some capabilities are new, |
| and have names that BSD |
| .I termcap |
| did not originate.) |
| .bP |
| The description field attempts to convey the capability's semantics. |
| .PP |
| The description field employs a handful of notations. |
| .TP |
| .B (P) |
| indicates that padding may be specified. |
| .TP |
| .B (P*) |
| indicates that padding may vary in proportion to the number of output |
| lines affected. |
| .TP |
| .BI # i |
| indicates the |
| .IR i th |
| parameter of a string capability; |
| the programmer should pass the string to \fB\%tparm\fP(3X) with the |
| parameters listed. |
| .IP |
| If the description lists no parameters, |
| passing the string to \fB\%tparm\fP(3X) may produce unexpected |
| behavior, |
| for instance if the string contains percent signs. |
| . |
| .PP |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| Boolean Capability Name TI TC Description |
| _ |
| auto_left_margin bw bw T{ |
| .ad l |
| cub1 wraps from column 0 to last column |
| T} |
| auto_right_margin am am T{ |
| .ad l |
| terminal has automatic margins |
| T} |
| no_esc_ctlc xsb xb T{ |
| .ad l |
| beehive (f1=escape, f2=ctrl C) |
| T} |
| ceol_standout_glitch xhp xs T{ |
| .ad l |
| standout not erased by overwriting (hp) |
| T} |
| eat_newline_glitch xenl xn T{ |
| .ad l |
| newline ignored after 80 cols (concept) |
| T} |
| erase_overstrike eo eo T{ |
| .ad l |
| can erase overstrikes with a blank |
| T} |
| generic_type gn gn T{ |
| .ad l |
| generic line type |
| T} |
| hard_copy hc hc T{ |
| .ad l |
| hardcopy terminal |
| T} |
| has_meta_key km km T{ |
| .ad l |
| Has a meta key (i.e., sets 8th-bit) |
| T} |
| has_status_line hs hs T{ |
| .ad l |
| has extra status line |
| T} |
| insert_null_glitch in in T{ |
| .ad l |
| insert mode distinguishes nulls |
| T} |
| memory_above da da T{ |
| .ad l |
| display may be retained above the screen |
| T} |
| memory_below db db T{ |
| .ad l |
| display may be retained below the screen |
| T} |
| move_insert_mode mir mi T{ |
| .ad l |
| safe to move while in insert mode |
| T} |
| move_standout_mode msgr ms T{ |
| .ad l |
| safe to move while in standout mode |
| T} |
| over_strike os os T{ |
| .ad l |
| terminal can overstrike |
| T} |
| status_line_esc_ok eslok es T{ |
| .ad l |
| escape can be used on the status line |
| T} |
| dest_tabs_magic_smso xt xt T{ |
| .ad l |
| tabs destructive, magic so char (t1061) |
| T} |
| tilde_glitch hz hz T{ |
| .ad l |
| cannot print ~'s (Hazeltine) |
| T} |
| transparent_underline ul ul T{ |
| .ad l |
| underline character overstrikes |
| T} |
| xon_xoff xon xo T{ |
| .ad l |
| terminal uses xon/xoff handshaking |
| T} |
| needs_xon_xoff nxon nx T{ |
| .ad l |
| padding will not work, xon/xoff required |
| T} |
| prtr_silent mc5i 5i T{ |
| .ad l |
| printer will not echo on screen |
| T} |
| hard_cursor chts HC T{ |
| .ad l |
| cursor is hard to see |
| T} |
| non_rev_rmcup nrrmc NR T{ |
| .ad l |
| smcup does not reverse rmcup |
| T} |
| no_pad_char npc NP T{ |
| .ad l |
| pad character does not exist |
| T} |
| non_dest_scroll_region ndscr ND T{ |
| .ad l |
| scrolling region is non-destructive |
| T} |
| can_change ccc cc T{ |
| .ad l |
| terminal can re-define existing colors |
| T} |
| back_color_erase bce ut T{ |
| .ad l |
| screen erased with background color |
| T} |
| hue_lightness_saturation hls hl T{ |
| .ad l |
| terminal uses only HLS color notation (Tektronix) |
| T} |
| col_addr_glitch xhpa YA T{ |
| .ad l |
| only positive motion for hpa/mhpa caps |
| T} |
| cr_cancels_micro_mode crxm YB T{ |
| .ad l |
| using cr turns off micro mode |
| T} |
| has_print_wheel daisy YC T{ |
| .ad l |
| printer needs operator to change character set |
| T} |
| row_addr_glitch xvpa YD T{ |
| .ad l |
| only positive motion for vpa/mvpa caps |
| T} |
| semi_auto_right_margin sam YE T{ |
| .ad l |
| printing in last column causes cr |
| T} |
| cpi_changes_res cpix YF T{ |
| .ad l |
| changing character pitch changes resolution |
| T} |
| lpi_changes_res lpix YG T{ |
| .ad l |
| changing line pitch changes resolution |
| T} |
| .TE |
| .PP |
| . |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| Numeric Capability Name TI TC Description |
| _ |
| columns cols co T{ |
| .ad l |
| number of columns in a line |
| T} |
| init_tabs it it T{ |
| .ad l |
| tabs initially every # spaces |
| T} |
| lines lines li T{ |
| .ad l |
| number of lines on screen or page |
| T} |
| lines_of_memory lm lm T{ |
| .ad l |
| lines of memory if > line. 0 means varies |
| T} |
| magic_cookie_glitch xmc sg T{ |
| .ad l |
| number of blank characters left by smso or rmso |
| T} |
| padding_baud_rate pb pb T{ |
| .ad l |
| lowest baud rate where padding needed |
| T} |
| virtual_terminal vt vt T{ |
| .ad l |
| virtual terminal number (CB/unix) |
| T} |
| width_status_line wsl ws T{ |
| .ad l |
| number of columns in status line |
| T} |
| num_labels nlab Nl T{ |
| .ad l |
| number of labels on screen |
| T} |
| label_height lh lh T{ |
| .ad l |
| rows in each label |
| T} |
| label_width lw lw T{ |
| .ad l |
| columns in each label |
| T} |
| max_attributes ma ma T{ |
| .ad l |
| maximum combined attributes terminal can handle |
| T} |
| maximum_windows wnum MW T{ |
| .ad l |
| maximum number of definable windows |
| T} |
| max_colors colors Co T{ |
| .ad l |
| maximum number of colors on screen |
| T} |
| max_pairs pairs pa T{ |
| .ad l |
| maximum number of color-pairs on the screen |
| T} |
| no_color_video ncv NC T{ |
| .ad l |
| video attributes that cannot be used with colors |
| T} |
| .TE |
| .PP |
| . |
| The following numeric capabilities are present in the SVr4.0 term structure, |
| but are not yet documented in the man page. |
| They came in with SVr4's printer support. |
| . |
| .PP |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| Numeric Capability Name TI TC Description |
| _ |
| buffer_capacity bufsz Ya T{ |
| .ad l |
| numbers of bytes buffered before printing |
| T} |
| dot_vert_spacing spinv Yb T{ |
| .ad l |
| spacing of pins vertically in pins per inch |
| T} |
| dot_horz_spacing spinh Yc T{ |
| .ad l |
| spacing of dots horizontally in dots per inch |
| T} |
| max_micro_address maddr Yd T{ |
| .ad l |
| maximum value in micro_..._address |
| T} |
| max_micro_jump mjump Ye T{ |
| .ad l |
| maximum value in parm_..._micro |
| T} |
| micro_col_size mcs Yf T{ |
| .ad l |
| character step size when in micro mode |
| T} |
| micro_line_size mls Yg T{ |
| .ad l |
| line step size when in micro mode |
| T} |
| number_of_pins npins Yh T{ |
| .ad l |
| numbers of pins in print-head |
| T} |
| output_res_char orc Yi T{ |
| .ad l |
| horizontal resolution in units per line |
| T} |
| output_res_line orl Yj T{ |
| .ad l |
| vertical resolution in units per line |
| T} |
| output_res_horz_inch orhi Yk T{ |
| .ad l |
| horizontal resolution in units per inch |
| T} |
| output_res_vert_inch orvi Yl T{ |
| .ad l |
| vertical resolution in units per inch |
| T} |
| print_rate cps Ym T{ |
| .ad l |
| print rate in characters per second |
| T} |
| wide_char_size widcs Yn T{ |
| .ad l |
| character step size when in double wide mode |
| T} |
| buttons btns BT T{ |
| .ad l |
| number of buttons on mouse |
| T} |
| bit_image_entwining bitwin Yo T{ |
| .ad l |
| number of passes for each bit-image row |
| T} |
| bit_image_type bitype Yp T{ |
| .ad l |
| type of bit-image device |
| T} |
| .TE |
| .PP |
| . |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| String Capability Name TI TC Description |
| _ |
| back_tab cbt bt T{ |
| .ad l |
| back tab (P) |
| T} |
| bell bel bl T{ |
| .ad l |
| audible signal (bell) (P) |
| T} |
| carriage_return cr cr T{ |
| .ad l |
| carriage return (P*) (P*) |
| T} |
| change_scroll_region csr cs T{ |
| .ad l |
| change region to line #1 to line #2 (P) |
| T} |
| clear_all_tabs tbc ct T{ |
| .ad l |
| clear all tab stops (P) |
| T} |
| clear_screen clear cl T{ |
| .ad l |
| clear screen and home cursor (P*) |
| T} |
| clr_eol el ce T{ |
| .ad l |
| clear to end of line (P) |
| T} |
| clr_eos ed cd T{ |
| .ad l |
| clear to end of screen (P*) |
| T} |
| column_address hpa ch T{ |
| .ad l |
| horizontal position #1, absolute (P) |
| T} |
| command_character cmdch CC T{ |
| .ad l |
| terminal settable cmd character in prototype !? |
| T} |
| cursor_address cup cm T{ |
| .ad l |
| move to row #1 columns #2 |
| T} |
| cursor_down cud1 do T{ |
| .ad l |
| down one line |
| T} |
| cursor_home home ho T{ |
| .ad l |
| home cursor (if no cup) |
| T} |
| cursor_invisible civis vi T{ |
| .ad l |
| make cursor invisible |
| T} |
| cursor_left cub1 le T{ |
| .ad l |
| move left one space |
| T} |
| cursor_mem_address mrcup CM T{ |
| .ad l |
| memory relative cursor addressing, move to row #1 columns #2 |
| T} |
| cursor_normal cnorm ve T{ |
| .ad l |
| make cursor appear normal (undo civis/cvvis) |
| T} |
| cursor_right cuf1 nd T{ |
| .ad l |
| non-destructive space (move right one space) |
| T} |
| cursor_to_ll ll ll T{ |
| .ad l |
| last line, first column (if no cup) |
| T} |
| cursor_up cuu1 up T{ |
| .ad l |
| up one line |
| T} |
| cursor_visible cvvis vs T{ |
| .ad l |
| make cursor very visible |
| T} |
| delete_character dch1 dc T{ |
| .ad l |
| delete character (P*) |
| T} |
| delete_line dl1 dl T{ |
| .ad l |
| delete line (P*) |
| T} |
| dis_status_line dsl ds T{ |
| .ad l |
| disable status line |
| T} |
| down_half_line hd hd T{ |
| .ad l |
| half a line down |
| T} |
| enter_alt_charset_mode smacs as T{ |
| .ad l |
| start alternate character set (P) |
| T} |
| enter_blink_mode blink mb T{ |
| .ad l |
| turn on blinking |
| T} |
| enter_bold_mode bold md T{ |
| .ad l |
| turn on bold (extra bright) mode |
| T} |
| enter_ca_mode smcup ti T{ |
| .ad l |
| string to start programs using cup |
| T} |
| enter_delete_mode smdc dm T{ |
| .ad l |
| enter delete mode |
| T} |
| enter_dim_mode dim mh T{ |
| .ad l |
| turn on half-bright mode |
| T} |
| enter_insert_mode smir im T{ |
| .ad l |
| enter insert mode |
| T} |
| enter_secure_mode invis mk T{ |
| .ad l |
| turn on blank mode (characters invisible) |
| T} |
| enter_protected_mode prot mp T{ |
| .ad l |
| turn on protected mode |
| T} |
| enter_reverse_mode rev mr T{ |
| .ad l |
| turn on reverse video mode |
| T} |
| enter_standout_mode smso so T{ |
| .ad l |
| begin standout mode |
| T} |
| enter_underline_mode smul us T{ |
| .ad l |
| begin underline mode |
| T} |
| erase_chars ech ec T{ |
| .ad l |
| erase #1 characters (P) |
| T} |
| exit_alt_charset_mode rmacs ae T{ |
| .ad l |
| end alternate character set (P) |
| T} |
| exit_attribute_mode sgr0 me T{ |
| .ad l |
| turn off all attributes |
| T} |
| exit_ca_mode rmcup te T{ |
| .ad l |
| strings to end programs using cup |
| T} |
| exit_delete_mode rmdc ed T{ |
| .ad l |
| end delete mode |
| T} |
| exit_insert_mode rmir ei T{ |
| .ad l |
| exit insert mode |
| T} |
| exit_standout_mode rmso se T{ |
| .ad l |
| exit standout mode |
| T} |
| exit_underline_mode rmul ue T{ |
| .ad l |
| exit underline mode |
| T} |
| flash_screen flash vb T{ |
| .ad l |
| visible bell (may not move cursor) |
| T} |
| form_feed ff ff T{ |
| .ad l |
| hardcopy terminal page eject (P*) |
| T} |
| from_status_line fsl fs T{ |
| .ad l |
| return from status line |
| T} |
| init_1string is1 i1 T{ |
| .ad l |
| initialization string |
| T} |
| init_2string is2 is T{ |
| .ad l |
| initialization string |
| T} |
| init_3string is3 i3 T{ |
| .ad l |
| initialization string |
| T} |
| init_file if if T{ |
| .ad l |
| name of initialization file |
| T} |
| insert_character ich1 ic T{ |
| .ad l |
| insert character (P) |
| T} |
| insert_line il1 al T{ |
| .ad l |
| insert line (P*) |
| T} |
| insert_padding ip ip T{ |
| .ad l |
| insert padding after inserted character |
| T} |
| key_backspace kbs kb T{ |
| .ad l |
| backspace key |
| T} |
| key_catab ktbc ka T{ |
| .ad l |
| clear-all-tabs key |
| T} |
| key_clear kclr kC T{ |
| .ad l |
| clear-screen or erase key |
| T} |
| key_ctab kctab kt T{ |
| .ad l |
| clear-tab key |
| T} |
| key_dc kdch1 kD T{ |
| .ad l |
| delete-character key |
| T} |
| key_dl kdl1 kL T{ |
| .ad l |
| delete-line key |
| T} |
| key_down kcud1 kd T{ |
| .ad l |
| down-arrow key |
| T} |
| .TE |
| .TS |
| center; |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| key_eic krmir kM T{ |
| .ad l |
| sent by rmir or smir in insert mode |
| T} |
| key_eol kel kE T{ |
| .ad l |
| clear-to-end-of-line key |
| T} |
| key_eos ked kS T{ |
| .ad l |
| clear-to-end-of-screen key |
| T} |
| key_f0 kf0 k0 T{ |
| .ad l |
| F0 function key |
| T} |
| key_f1 kf1 k1 T{ |
| .ad l |
| F1 function key |
| T} |
| key_f10 kf10 k; T{ |
| .ad l |
| F10 function key |
| T} |
| key_f2 kf2 k2 T{ |
| .ad l |
| F2 function key |
| T} |
| key_f3 kf3 k3 T{ |
| .ad l |
| F3 function key |
| T} |
| key_f4 kf4 k4 T{ |
| .ad l |
| F4 function key |
| T} |
| key_f5 kf5 k5 T{ |
| .ad l |
| F5 function key |
| T} |
| key_f6 kf6 k6 T{ |
| .ad l |
| F6 function key |
| T} |
| key_f7 kf7 k7 T{ |
| .ad l |
| F7 function key |
| T} |
| key_f8 kf8 k8 T{ |
| .ad l |
| F8 function key |
| T} |
| key_f9 kf9 k9 T{ |
| .ad l |
| F9 function key |
| T} |
| key_home khome kh T{ |
| .ad l |
| home key |
| T} |
| key_ic kich1 kI T{ |
| .ad l |
| insert-character key |
| T} |
| key_il kil1 kA T{ |
| .ad l |
| insert-line key |
| T} |
| key_left kcub1 kl T{ |
| .ad l |
| left-arrow key |
| T} |
| key_ll kll kH T{ |
| .ad l |
| lower-left key (home down) |
| T} |
| key_npage knp kN T{ |
| .ad l |
| next-page key |
| T} |
| key_ppage kpp kP T{ |
| .ad l |
| previous-page key |
| T} |
| key_right kcuf1 kr T{ |
| .ad l |
| right-arrow key |
| T} |
| key_sf kind kF T{ |
| .ad l |
| scroll-forward key |
| T} |
| key_sr kri kR T{ |
| .ad l |
| scroll-backward key |
| T} |
| key_stab khts kT T{ |
| .ad l |
| set-tab key |
| T} |
| key_up kcuu1 ku T{ |
| .ad l |
| up-arrow key |
| T} |
| keypad_local rmkx ke T{ |
| .ad l |
| leave keyboard transmit mode |
| T} |
| keypad_xmit smkx ks T{ |
| .ad l |
| enter keyboard transmit mode |
| T} |
| lab_f0 lf0 l0 T{ |
| .ad l |
| label on function key f0 if not f0 |
| T} |
| lab_f1 lf1 l1 T{ |
| .ad l |
| label on function key f1 if not f1 |
| T} |
| lab_f10 lf10 la T{ |
| .ad l |
| label on function key f10 if not f10 |
| T} |
| lab_f2 lf2 l2 T{ |
| .ad l |
| label on function key f2 if not f2 |
| T} |
| lab_f3 lf3 l3 T{ |
| .ad l |
| label on function key f3 if not f3 |
| T} |
| lab_f4 lf4 l4 T{ |
| .ad l |
| label on function key f4 if not f4 |
| T} |
| lab_f5 lf5 l5 T{ |
| .ad l |
| label on function key f5 if not f5 |
| T} |
| lab_f6 lf6 l6 T{ |
| .ad l |
| label on function key f6 if not f6 |
| T} |
| lab_f7 lf7 l7 T{ |
| .ad l |
| label on function key f7 if not f7 |
| T} |
| lab_f8 lf8 l8 T{ |
| .ad l |
| label on function key f8 if not f8 |
| T} |
| lab_f9 lf9 l9 T{ |
| .ad l |
| label on function key f9 if not f9 |
| T} |
| meta_off rmm mo T{ |
| .ad l |
| turn off meta mode |
| T} |
| meta_on smm mm T{ |
| .ad l |
| turn on meta mode (8th-bit on) |
| T} |
| newline nel nw T{ |
| .ad l |
| newline (behave like cr followed by lf) |
| T} |
| pad_char pad pc T{ |
| .ad l |
| padding char (instead of null) |
| T} |
| parm_dch dch DC T{ |
| .ad l |
| delete #1 characters (P*) |
| T} |
| parm_delete_line dl DL T{ |
| .ad l |
| delete #1 lines (P*) |
| T} |
| parm_down_cursor cud DO T{ |
| .ad l |
| down #1 lines (P*) |
| T} |
| parm_ich ich IC T{ |
| .ad l |
| insert #1 characters (P*) |
| T} |
| parm_index indn SF T{ |
| .ad l |
| scroll forward #1 lines (P) |
| T} |
| parm_insert_line il AL T{ |
| .ad l |
| insert #1 lines (P*) |
| T} |
| parm_left_cursor cub LE T{ |
| .ad l |
| move #1 characters to the left (P) |
| T} |
| parm_right_cursor cuf RI T{ |
| .ad l |
| move #1 characters to the right (P*) |
| T} |
| parm_rindex rin SR T{ |
| .ad l |
| scroll back #1 lines (P) |
| T} |
| parm_up_cursor cuu UP T{ |
| .ad l |
| up #1 lines (P*) |
| T} |
| pkey_key pfkey pk T{ |
| .ad l |
| program function key #1 to type string #2 |
| T} |
| pkey_local pfloc pl T{ |
| .ad l |
| program function key #1 to execute string #2 |
| T} |
| pkey_xmit pfx px T{ |
| .ad l |
| program function key #1 to transmit string #2 |
| T} |
| print_screen mc0 ps T{ |
| .ad l |
| print contents of screen |
| T} |
| prtr_off mc4 pf T{ |
| .ad l |
| turn off printer |
| T} |
| prtr_on mc5 po T{ |
| .ad l |
| turn on printer |
| T} |
| repeat_char rep rp T{ |
| .ad l |
| repeat char #1 #2 times (P*) |
| T} |
| reset_1string rs1 r1 T{ |
| .ad l |
| reset string |
| T} |
| reset_2string rs2 r2 T{ |
| .ad l |
| reset string |
| T} |
| .TE |
| .TS |
| center; |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| reset_3string rs3 r3 T{ |
| .ad l |
| reset string |
| T} |
| reset_file rf rf T{ |
| .ad l |
| name of reset file |
| T} |
| restore_cursor rc rc T{ |
| .ad l |
| restore cursor to position of last save_cursor |
| T} |
| row_address vpa cv T{ |
| .ad l |
| vertical position #1 absolute (P) |
| T} |
| save_cursor sc sc T{ |
| .ad l |
| save current cursor position (P) |
| T} |
| scroll_forward ind sf T{ |
| .ad l |
| scroll text up (P) |
| T} |
| scroll_reverse ri sr T{ |
| .ad l |
| scroll text down (P) |
| T} |
| set_attributes sgr sa T{ |
| .ad l |
| define video attributes #1-#9 (PG9) |
| T} |
| set_tab hts st T{ |
| .ad l |
| set a tab in every row, current columns |
| T} |
| set_window wind wi T{ |
| .ad l |
| current window is lines #1-#2 cols #3-#4 |
| T} |
| tab ht ta T{ |
| .ad l |
| tab to next 8-space hardware tab stop |
| T} |
| to_status_line tsl ts T{ |
| .ad l |
| move to status line, column #1 |
| T} |
| underline_char uc uc T{ |
| .ad l |
| underline char and move past it |
| T} |
| up_half_line hu hu T{ |
| .ad l |
| half a line up |
| T} |
| init_prog iprog iP T{ |
| .ad l |
| path name of program for initialization |
| T} |
| key_a1 ka1 K1 T{ |
| .ad l |
| upper left of keypad |
| T} |
| key_a3 ka3 K3 T{ |
| .ad l |
| upper right of keypad |
| T} |
| key_b2 kb2 K2 T{ |
| .ad l |
| center of keypad |
| T} |
| key_c1 kc1 K4 T{ |
| .ad l |
| lower left of keypad |
| T} |
| key_c3 kc3 K5 T{ |
| .ad l |
| lower right of keypad |
| T} |
| prtr_non mc5p pO T{ |
| .ad l |
| turn on printer for #1 bytes |
| T} |
| char_padding rmp rP T{ |
| .ad l |
| like ip but when in insert mode |
| T} |
| acs_chars acsc ac T{ |
| .ad l |
| graphics charset pairs, based on vt100 |
| T} |
| plab_norm pln pn T{ |
| .ad l |
| program label #1 to show string #2 |
| T} |
| key_btab kcbt kB T{ |
| .ad l |
| back-tab key |
| T} |
| enter_xon_mode smxon SX T{ |
| .ad l |
| turn on xon/xoff handshaking |
| T} |
| exit_xon_mode rmxon RX T{ |
| .ad l |
| turn off xon/xoff handshaking |
| T} |
| enter_am_mode smam SA T{ |
| .ad l |
| turn on automatic margins |
| T} |
| exit_am_mode rmam RA T{ |
| .ad l |
| turn off automatic margins |
| T} |
| xon_character xonc XN T{ |
| .ad l |
| XON character |
| T} |
| xoff_character xoffc XF T{ |
| .ad l |
| XOFF character |
| T} |
| ena_acs enacs eA T{ |
| .ad l |
| enable alternate char set |
| T} |
| label_on smln LO T{ |
| .ad l |
| turn on soft labels |
| T} |
| label_off rmln LF T{ |
| .ad l |
| turn off soft labels |
| T} |
| key_beg kbeg @1 T{ |
| .ad l |
| begin key |
| T} |
| key_cancel kcan @2 T{ |
| .ad l |
| cancel key |
| T} |
| key_close kclo @3 T{ |
| .ad l |
| close key |
| T} |
| key_command kcmd @4 T{ |
| .ad l |
| command key |
| T} |
| key_copy kcpy @5 T{ |
| .ad l |
| copy key |
| T} |
| key_create kcrt @6 T{ |
| .ad l |
| create key |
| T} |
| key_end kend @7 T{ |
| .ad l |
| end key |
| T} |
| key_enter kent @8 T{ |
| .ad l |
| enter/send key |
| T} |
| key_exit kext @9 T{ |
| .ad l |
| exit key |
| T} |
| key_find kfnd @0 T{ |
| .ad l |
| find key |
| T} |
| key_help khlp %1 T{ |
| .ad l |
| help key |
| T} |
| key_mark kmrk %2 T{ |
| .ad l |
| mark key |
| T} |
| key_message kmsg %3 T{ |
| .ad l |
| message key |
| T} |
| key_move kmov %4 T{ |
| .ad l |
| move key |
| T} |
| key_next knxt %5 T{ |
| .ad l |
| next key |
| T} |
| key_open kopn %6 T{ |
| .ad l |
| open key |
| T} |
| key_options kopt %7 T{ |
| .ad l |
| options key |
| T} |
| key_previous kprv %8 T{ |
| .ad l |
| previous key |
| T} |
| key_print kprt %9 T{ |
| .ad l |
| print key |
| T} |
| key_redo krdo %0 T{ |
| .ad l |
| redo key |
| T} |
| key_reference kref &1 T{ |
| .ad l |
| reference key |
| T} |
| key_refresh krfr &2 T{ |
| .ad l |
| refresh key |
| T} |
| key_replace krpl &3 T{ |
| .ad l |
| replace key |
| T} |
| key_restart krst &4 T{ |
| .ad l |
| restart key |
| T} |
| key_resume kres &5 T{ |
| .ad l |
| resume key |
| T} |
| key_save ksav &6 T{ |
| .ad l |
| save key |
| T} |
| key_suspend kspd &7 T{ |
| .ad l |
| suspend key |
| T} |
| key_undo kund &8 T{ |
| .ad l |
| undo key |
| T} |
| .TE |
| .TS |
| center; |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| key_sbeg kBEG &9 T{ |
| .ad l |
| shifted begin key |
| T} |
| key_scancel kCAN &0 T{ |
| .ad l |
| shifted cancel key |
| T} |
| key_scommand kCMD *1 T{ |
| .ad l |
| shifted command key |
| T} |
| key_scopy kCPY *2 T{ |
| .ad l |
| shifted copy key |
| T} |
| key_screate kCRT *3 T{ |
| .ad l |
| shifted create key |
| T} |
| key_sdc kDC *4 T{ |
| .ad l |
| shifted delete-character key |
| T} |
| key_sdl kDL *5 T{ |
| .ad l |
| shifted delete-line key |
| T} |
| key_select kslt *6 T{ |
| .ad l |
| select key |
| T} |
| key_send kEND *7 T{ |
| .ad l |
| shifted end key |
| T} |
| key_seol kEOL *8 T{ |
| .ad l |
| shifted clear-to-end-of-line key |
| T} |
| key_sexit kEXT *9 T{ |
| .ad l |
| shifted exit key |
| T} |
| key_sfind kFND *0 T{ |
| .ad l |
| shifted find key |
| T} |
| key_shelp kHLP #1 T{ |
| .ad l |
| shifted help key |
| T} |
| key_shome kHOM #2 T{ |
| .ad l |
| shifted home key |
| T} |
| key_sic kIC #3 T{ |
| .ad l |
| shifted insert-character key |
| T} |
| key_sleft kLFT #4 T{ |
| .ad l |
| shifted left-arrow key |
| T} |
| key_smessage kMSG %a T{ |
| .ad l |
| shifted message key |
| T} |
| key_smove kMOV %b T{ |
| .ad l |
| shifted move key |
| T} |
| key_snext kNXT %c T{ |
| .ad l |
| shifted next key |
| T} |
| key_soptions kOPT %d T{ |
| .ad l |
| shifted options key |
| T} |
| key_sprevious kPRV %e T{ |
| .ad l |
| shifted previous key |
| T} |
| key_sprint kPRT %f T{ |
| .ad l |
| shifted print key |
| T} |
| key_sredo kRDO %g T{ |
| .ad l |
| shifted redo key |
| T} |
| key_sreplace kRPL %h T{ |
| .ad l |
| shifted replace key |
| T} |
| key_sright kRIT %i T{ |
| .ad l |
| shifted right-arrow key |
| T} |
| key_srsume kRES %j T{ |
| .ad l |
| shifted resume key |
| T} |
| key_ssave kSAV !1 T{ |
| .ad l |
| shifted save key |
| T} |
| key_ssuspend kSPD !2 T{ |
| .ad l |
| shifted suspend key |
| T} |
| key_sundo kUND !3 T{ |
| .ad l |
| shifted undo key |
| T} |
| req_for_input rfi RF T{ |
| .ad l |
| send next input char (for ptys) |
| T} |
| key_f11 kf11 F1 T{ |
| .ad l |
| F11 function key |
| T} |
| key_f12 kf12 F2 T{ |
| .ad l |
| F12 function key |
| T} |
| key_f13 kf13 F3 T{ |
| .ad l |
| F13 function key |
| T} |
| key_f14 kf14 F4 T{ |
| .ad l |
| F14 function key |
| T} |
| key_f15 kf15 F5 T{ |
| .ad l |
| F15 function key |
| T} |
| key_f16 kf16 F6 T{ |
| .ad l |
| F16 function key |
| T} |
| key_f17 kf17 F7 T{ |
| .ad l |
| F17 function key |
| T} |
| key_f18 kf18 F8 T{ |
| .ad l |
| F18 function key |
| T} |
| key_f19 kf19 F9 T{ |
| .ad l |
| F19 function key |
| T} |
| key_f20 kf20 FA T{ |
| .ad l |
| F20 function key |
| T} |
| key_f21 kf21 FB T{ |
| .ad l |
| F21 function key |
| T} |
| key_f22 kf22 FC T{ |
| .ad l |
| F22 function key |
| T} |
| key_f23 kf23 FD T{ |
| .ad l |
| F23 function key |
| T} |
| key_f24 kf24 FE T{ |
| .ad l |
| F24 function key |
| T} |
| key_f25 kf25 FF T{ |
| .ad l |
| F25 function key |
| T} |
| key_f26 kf26 FG T{ |
| .ad l |
| F26 function key |
| T} |
| key_f27 kf27 FH T{ |
| .ad l |
| F27 function key |
| T} |
| key_f28 kf28 FI T{ |
| .ad l |
| F28 function key |
| T} |
| key_f29 kf29 FJ T{ |
| .ad l |
| F29 function key |
| T} |
| key_f30 kf30 FK T{ |
| .ad l |
| F30 function key |
| T} |
| key_f31 kf31 FL T{ |
| .ad l |
| F31 function key |
| T} |
| key_f32 kf32 FM T{ |
| .ad l |
| F32 function key |
| T} |
| key_f33 kf33 FN T{ |
| .ad l |
| F33 function key |
| T} |
| key_f34 kf34 FO T{ |
| .ad l |
| F34 function key |
| T} |
| key_f35 kf35 FP T{ |
| .ad l |
| F35 function key |
| T} |
| key_f36 kf36 FQ T{ |
| .ad l |
| F36 function key |
| T} |
| key_f37 kf37 FR T{ |
| .ad l |
| F37 function key |
| T} |
| key_f38 kf38 FS T{ |
| .ad l |
| F38 function key |
| T} |
| key_f39 kf39 FT T{ |
| .ad l |
| F39 function key |
| T} |
| key_f40 kf40 FU T{ |
| .ad l |
| F40 function key |
| T} |
| key_f41 kf41 FV T{ |
| .ad l |
| F41 function key |
| T} |
| key_f42 kf42 FW T{ |
| .ad l |
| F42 function key |
| T} |
| .TE |
| .TS |
| center; |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| key_f43 kf43 FX T{ |
| .ad l |
| F43 function key |
| T} |
| key_f44 kf44 FY T{ |
| .ad l |
| F44 function key |
| T} |
| key_f45 kf45 FZ T{ |
| .ad l |
| F45 function key |
| T} |
| key_f46 kf46 Fa T{ |
| .ad l |
| F46 function key |
| T} |
| key_f47 kf47 Fb T{ |
| .ad l |
| F47 function key |
| T} |
| key_f48 kf48 Fc T{ |
| .ad l |
| F48 function key |
| T} |
| key_f49 kf49 Fd T{ |
| .ad l |
| F49 function key |
| T} |
| key_f50 kf50 Fe T{ |
| .ad l |
| F50 function key |
| T} |
| key_f51 kf51 Ff T{ |
| .ad l |
| F51 function key |
| T} |
| key_f52 kf52 Fg T{ |
| .ad l |
| F52 function key |
| T} |
| key_f53 kf53 Fh T{ |
| .ad l |
| F53 function key |
| T} |
| key_f54 kf54 Fi T{ |
| .ad l |
| F54 function key |
| T} |
| key_f55 kf55 Fj T{ |
| .ad l |
| F55 function key |
| T} |
| key_f56 kf56 Fk T{ |
| .ad l |
| F56 function key |
| T} |
| key_f57 kf57 Fl T{ |
| .ad l |
| F57 function key |
| T} |
| key_f58 kf58 Fm T{ |
| .ad l |
| F58 function key |
| T} |
| key_f59 kf59 Fn T{ |
| .ad l |
| F59 function key |
| T} |
| key_f60 kf60 Fo T{ |
| .ad l |
| F60 function key |
| T} |
| key_f61 kf61 Fp T{ |
| .ad l |
| F61 function key |
| T} |
| key_f62 kf62 Fq T{ |
| .ad l |
| F62 function key |
| T} |
| key_f63 kf63 Fr T{ |
| .ad l |
| F63 function key |
| T} |
| clr_bol el1 cb T{ |
| .ad l |
| Clear to beginning of line |
| T} |
| clear_margins mgc MC T{ |
| .ad l |
| clear right and left soft margins |
| T} |
| set_left_margin smgl ML T{ |
| .ad l |
| set left soft margin at current column (not in BSD \fItermcap\fP) |
| T} |
| set_right_margin smgr MR T{ |
| .ad l |
| set right soft margin at current column |
| T} |
| label_format fln Lf T{ |
| .ad l |
| label format |
| T} |
| set_clock sclk SC T{ |
| .ad l |
| set clock, #1 hrs #2 mins #3 secs |
| T} |
| display_clock dclk DK T{ |
| .ad l |
| display clock |
| T} |
| remove_clock rmclk RC T{ |
| .ad l |
| remove clock |
| T} |
| create_window cwin CW T{ |
| .ad l |
| define a window #1 from #2,#3 to #4,#5 |
| T} |
| goto_window wingo WG T{ |
| .ad l |
| go to window #1 |
| T} |
| hangup hup HU T{ |
| .ad l |
| hang-up phone |
| T} |
| dial_phone dial DI T{ |
| .ad l |
| dial number #1 |
| T} |
| quick_dial qdial QD T{ |
| .ad l |
| dial number #1 without checking |
| T} |
| tone tone TO T{ |
| .ad l |
| select touch tone dialing |
| T} |
| pulse pulse PU T{ |
| .ad l |
| select pulse dialing |
| T} |
| flash_hook hook fh T{ |
| .ad l |
| flash switch hook |
| T} |
| fixed_pause pause PA T{ |
| .ad l |
| pause for 2-3 seconds |
| T} |
| wait_tone wait WA T{ |
| .ad l |
| wait for dial-tone |
| T} |
| user0 u0 u0 T{ |
| .ad l |
| User string #0 |
| T} |
| user1 u1 u1 T{ |
| .ad l |
| User string #1 |
| T} |
| user2 u2 u2 T{ |
| .ad l |
| User string #2 |
| T} |
| user3 u3 u3 T{ |
| .ad l |
| User string #3 |
| T} |
| user4 u4 u4 T{ |
| .ad l |
| User string #4 |
| T} |
| user5 u5 u5 T{ |
| .ad l |
| User string #5 |
| T} |
| user6 u6 u6 T{ |
| .ad l |
| User string #6 |
| T} |
| user7 u7 u7 T{ |
| .ad l |
| User string #7 |
| T} |
| user8 u8 u8 T{ |
| .ad l |
| User string #8 |
| T} |
| user9 u9 u9 T{ |
| .ad l |
| User string #9 |
| T} |
| orig_pair op op T{ |
| .ad l |
| Set default pair to its original value |
| T} |
| orig_colors oc oc T{ |
| .ad l |
| Set all color pairs to the original ones |
| T} |
| initialize_color initc Ic T{ |
| .ad l |
| initialize color #1 to (#2,#3,#4) |
| T} |
| initialize_pair initp Ip T{ |
| .ad l |
| Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) |
| T} |
| set_color_pair scp sp T{ |
| .ad l |
| Set current color pair to #1 |
| T} |
| set_foreground setf Sf T{ |
| .ad l |
| Set foreground color #1 |
| T} |
| set_background setb Sb T{ |
| .ad l |
| Set background color #1 |
| T} |
| change_char_pitch cpi ZA T{ |
| .ad l |
| Change number of characters per inch to #1 |
| T} |
| change_line_pitch lpi ZB T{ |
| .ad l |
| Change number of lines per inch to #1 |
| T} |
| change_res_horz chr ZC T{ |
| .ad l |
| Change horizontal resolution to #1 |
| T} |
| change_res_vert cvr ZD T{ |
| .ad l |
| Change vertical resolution to #1 |
| T} |
| define_char defc ZE T{ |
| .ad l |
| Define a character #1, #2 dots wide, descender #3 |
| T} |
| enter_doublewide_mode swidm ZF T{ |
| .ad l |
| Enter double-wide mode |
| T} |
| .TE |
| .TS |
| center; |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| enter_draft_quality sdrfq ZG T{ |
| .ad l |
| Enter draft-quality mode |
| T} |
| enter_italics_mode sitm ZH T{ |
| .ad l |
| Enter italic mode |
| T} |
| enter_leftward_mode slm ZI T{ |
| .ad l |
| Start leftward carriage motion |
| T} |
| enter_micro_mode smicm ZJ T{ |
| .ad l |
| Start micro-motion mode |
| T} |
| enter_near_letter_quality snlq ZK T{ |
| .ad l |
| Enter NLQ mode |
| T} |
| enter_normal_quality snrmq ZL T{ |
| .ad l |
| Enter normal-quality mode |
| T} |
| enter_shadow_mode sshm ZM T{ |
| .ad l |
| Enter shadow-print mode |
| T} |
| enter_subscript_mode ssubm ZN T{ |
| .ad l |
| Enter subscript mode |
| T} |
| enter_superscript_mode ssupm ZO T{ |
| .ad l |
| Enter superscript mode |
| T} |
| enter_upward_mode sum ZP T{ |
| .ad l |
| Start upward carriage motion |
| T} |
| exit_doublewide_mode rwidm ZQ T{ |
| .ad l |
| End double-wide mode |
| T} |
| exit_italics_mode ritm ZR T{ |
| .ad l |
| End italic mode |
| T} |
| exit_leftward_mode rlm ZS T{ |
| .ad l |
| End left-motion mode |
| T} |
| exit_micro_mode rmicm ZT T{ |
| .ad l |
| End micro-motion mode |
| T} |
| exit_shadow_mode rshm ZU T{ |
| .ad l |
| End shadow-print mode |
| T} |
| exit_subscript_mode rsubm ZV T{ |
| .ad l |
| End subscript mode |
| T} |
| exit_superscript_mode rsupm ZW T{ |
| .ad l |
| End superscript mode |
| T} |
| exit_upward_mode rum ZX T{ |
| .ad l |
| End reverse character motion |
| T} |
| micro_column_address mhpa ZY T{ |
| .ad l |
| Like column_address in micro mode |
| T} |
| micro_down mcud1 ZZ T{ |
| .ad l |
| Like cursor_down in micro mode |
| T} |
| micro_left mcub1 Za T{ |
| .ad l |
| Like cursor_left in micro mode |
| T} |
| micro_right mcuf1 Zb T{ |
| .ad l |
| Like cursor_right in micro mode |
| T} |
| micro_row_address mvpa Zc T{ |
| .ad l |
| Like row_address #1 in micro mode |
| T} |
| micro_up mcuu1 Zd T{ |
| .ad l |
| Like cursor_up in micro mode |
| T} |
| order_of_pins porder Ze T{ |
| .ad l |
| Match software bits to print-head pins |
| T} |
| parm_down_micro mcud Zf T{ |
| .ad l |
| Like parm_down_cursor in micro mode |
| T} |
| parm_left_micro mcub Zg T{ |
| .ad l |
| Like parm_left_cursor in micro mode |
| T} |
| parm_right_micro mcuf Zh T{ |
| .ad l |
| Like parm_right_cursor in micro mode |
| T} |
| parm_up_micro mcuu Zi T{ |
| .ad l |
| Like parm_up_cursor in micro mode |
| T} |
| select_char_set scs Zj T{ |
| .ad l |
| Select character set, #1 |
| T} |
| set_bottom_margin smgb Zk T{ |
| .ad l |
| Set bottom margin at current line |
| T} |
| set_bottom_margin_parm smgbp Zl T{ |
| .ad l |
| Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom |
| T} |
| set_left_margin_parm smglp Zm T{ |
| .ad l |
| Set left (right) margin at column #1 |
| T} |
| set_right_margin_parm smgrp Zn T{ |
| .ad l |
| Set right margin at column #1 |
| T} |
| set_top_margin smgt Zo T{ |
| .ad l |
| Set top margin at current line |
| T} |
| set_top_margin_parm smgtp Zp T{ |
| .ad l |
| Set top (bottom) margin at row #1 |
| T} |
| start_bit_image sbim Zq T{ |
| .ad l |
| Start printing bit image graphics |
| T} |
| start_char_set_def scsd Zr T{ |
| .ad l |
| Start character set definition #1, with #2 characters in the set |
| T} |
| stop_bit_image rbim Zs T{ |
| .ad l |
| Stop printing bit image graphics |
| T} |
| stop_char_set_def rcsd Zt T{ |
| .ad l |
| End definition of character set #1 |
| T} |
| subscript_characters subcs Zu T{ |
| .ad l |
| List of subscriptable characters |
| T} |
| superscript_characters supcs Zv T{ |
| .ad l |
| List of superscriptable characters |
| T} |
| these_cause_cr docr Zw T{ |
| .ad l |
| Printing any of these characters causes CR |
| T} |
| zero_motion zerom Zx T{ |
| .ad l |
| No motion for subsequent character |
| T} |
| .TE |
| .PP |
| . |
| The following string capabilities are present in the SVr4.0 term structure, |
| but were originally not documented in the man page. |
| . |
| .PP |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| String Capability Name TI TC Description |
| _ |
| char_set_names csnm Zy T{ |
| .ad l |
| Produce #1'th item from list of character set names |
| T} |
| key_mouse kmous Km T{ |
| .ad l |
| Mouse event has occurred |
| T} |
| mouse_info minfo Mi T{ |
| .ad l |
| Mouse status information |
| T} |
| req_mouse_pos reqmp RQ T{ |
| .ad l |
| Request mouse position |
| T} |
| get_mouse getm Gm T{ |
| .ad l |
| Curses should get button events, parameter #1 not documented. |
| T} |
| set_a_foreground setaf AF T{ |
| .ad l |
| Set foreground color to #1, using ANSI escape |
| T} |
| set_a_background setab AB T{ |
| .ad l |
| Set background color to #1, using ANSI escape |
| T} |
| pkey_plab pfxl xl T{ |
| .ad l |
| Program function key #1 to type string #2 and show string #3 |
| T} |
| device_type devt dv T{ |
| .ad l |
| Indicate language, codeset support |
| T} |
| code_set_init csin ci T{ |
| .ad l |
| Init sequence for multiple codesets |
| T} |
| set0_des_seq s0ds s0 T{ |
| .ad l |
| Shift to codeset 0 (EUC set 0, ASCII) |
| T} |
| set1_des_seq s1ds s1 T{ |
| .ad l |
| Shift to codeset 1 |
| T} |
| set2_des_seq s2ds s2 T{ |
| .ad l |
| Shift to codeset 2 |
| T} |
| set3_des_seq s3ds s3 T{ |
| .ad l |
| Shift to codeset 3 |
| T} |
| set_lr_margin smglr ML T{ |
| .ad l |
| Set both left and right margins to #1, #2. (ML is not in BSD termcap). |
| T} |
| set_tb_margin smgtb MT T{ |
| .ad l |
| Sets both top and bottom margins to #1, #2 |
| T} |
| bit_image_repeat birep Xy T{ |
| .ad l |
| Repeat bit image cell #1 #2 times |
| T} |
| bit_image_newline binel Zz T{ |
| .ad l |
| Move to next row of the bit image |
| T} |
| bit_image_carriage_return bicr Yv T{ |
| .ad l |
| Move to beginning of same row |
| T} |
| color_names colornm Yw T{ |
| .ad l |
| Give name for color #1 |
| T} |
| define_bit_image_region defbi Yx T{ |
| .ad l |
| Define rectangular bit image region |
| T} |
| end_bit_image_region endbi Yy T{ |
| .ad l |
| End a bit-image region |
| T} |
| set_color_band setcolor Yz T{ |
| .ad l |
| Change to ribbon color #1 |
| T} |
| set_page_length slines YZ T{ |
| .ad l |
| Set page length to #1 lines |
| T} |
| display_pc_char dispc S1 T{ |
| .ad l |
| Display PC character #1 |
| T} |
| enter_pc_charset_mode smpch S2 T{ |
| .ad l |
| Enter PC character display mode |
| T} |
| exit_pc_charset_mode rmpch S3 T{ |
| .ad l |
| Exit PC character display mode |
| T} |
| enter_scancode_mode smsc S4 T{ |
| .ad l |
| Enter PC scancode mode |
| T} |
| exit_scancode_mode rmsc S5 T{ |
| .ad l |
| Exit PC scancode mode |
| T} |
| pc_term_options pctrm S6 T{ |
| .ad l |
| PC terminal options |
| T} |
| scancode_escape scesc S7 T{ |
| .ad l |
| Escape for scancode emulation |
| T} |
| alt_scancode_esc scesa S8 T{ |
| .ad l |
| Alternate escape for scancode emulation |
| T} |
| .TE |
| .PP |
| . |
| The XSI Curses standard added these hardcopy capabilities. |
| They were used in some post-4.1 versions of System V curses, |
| e.g., Solaris 2.5 and IRIX 6.x. |
| Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented. |
| According to the XSI Curses standard, they have no termcap names. |
| If your compiled terminfo entries use these, |
| they may not be binary-compatible with System V terminfo |
| entries after SVr4.1; beware! |
| . |
| .PP |
| .TS |
| center; |
| Lb Cb S Lb |
| Lb Lb Lb Lb |
| Lbw(25n)2 Lbw(8n)2 Lb2 Lx. |
| \& Code \& |
| String Capability Name TI TC Description |
| _ |
| enter_horizontal_hl_mode ehhlm Xh T{ |
| .ad l |
| Enter horizontal highlight mode |
| T} |
| enter_left_hl_mode elhlm Xl T{ |
| .ad l |
| Enter left highlight mode |
| T} |
| enter_low_hl_mode elohlm Xo T{ |
| .ad l |
| Enter low highlight mode |
| T} |
| enter_right_hl_mode erhlm Xr T{ |
| .ad l |
| Enter right highlight mode |
| T} |
| enter_top_hl_mode ethlm Xt T{ |
| .ad l |
| Enter top highlight mode |
| T} |
| enter_vertical_hl_mode evhlm Xv T{ |
| .ad l |
| Enter vertical highlight mode |
| T} |
| set_a_attributes sgr1 sA T{ |
| .ad l |
| Define second set of video attributes #1-#6 |
| T} |
| set_pglen_inch slength YI T{ |
| .ad l |
| Set page length to #1 hundredth of an inch (some implementations use sL for termcap). |
| T} |
| .TE |
| .\"*************************************************************************** |
| .\" Copyright 2018-2023,2024 Thomas E. Dickey * |
| .\" Copyright 1998-2016,2017 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: terminfo.tail,v 1.148 2024/04/20 21:24:19 tom Exp $ |
| .ps +1 |
| .SS "User-Defined Capabilities" |
| . |
| The preceding section listed the \fIpredefined\fP capabilities. |
| They deal with some special features for terminals no longer |
| (or possibly never) produced. |
| Occasionally there are special features of newer terminals which |
| are awkward or impossible to represent by reusing the predefined |
| capabilities. |
| .PP |
| \fI\%ncurses\fP addresses this limitation by allowing user-defined |
| capabilities. |
| The \fB@TIC@\fP and \fB@INFOCMP@\fP programs provide |
| the \fB\-x\fP option for this purpose. |
| When \fB\-x\fP is set, |
| \fB@TIC@\fP treats unknown capabilities as user-defined. |
| That is, if \fB@TIC@\fP encounters a capability name |
| which it does not recognize, |
| it infers its type (Boolean, number or string) from the syntax |
| and makes an extended table entry for that capability. |
| The \fBuse_extended_names\fP(3X) function makes this information |
| conditionally available to applications. |
| The \fI\%ncurses\fP library provides the data leaving most of the |
| behavior to applications: |
| .bP |
| User-defined capability strings whose name begins |
| with \*(``k\*('' are treated as function keys. |
| .bP |
| The types (Boolean, number, string) determined by \fB@TIC@\fP |
| can be inferred by successful calls on \fBtigetflag\fP, etc. |
| .bP |
| If the capability name happens to be two characters, |
| the capability is also available through the termcap interface. |
| .PP |
| While termcap is said to be extensible because it does not use a predefined set |
| of capabilities, |
| in practice it has been limited to the capabilities defined by |
| terminfo implementations. |
| As a rule, |
| user-defined capabilities intended for use by termcap applications should |
| be limited to Booleans and numbers to avoid running past the 1023 byte |
| limit assumed by termcap implementations and their applications. |
| In particular, providing extended sets of function keys (past the 60 |
| numbered keys and the handful of special named keys) is best done using |
| the longer names available using terminfo. |
| .PP |
| The \fI\%ncurses\fP library uses a few of these user-defined |
| capabilities, |
| as described in \fBuser_caps\fR(5). |
| Other user-defined capabilities (including function keys) are |
| described in the terminal database, in the section on |
| .I "NCURSES USER-DEFINABLE CAPABILITIES" |
| . |
| .SS "A Sample Entry" |
| . |
| The following entry, describing an ANSI-standard terminal, is representative |
| of what a \fBterminfo\fP entry for a modern terminal typically looks like. |
| .PP |
| .EX |
| \s-2ansi|ansi/pc\-term compatible with color, |
| am, mc5i, mir, msgr, |
| colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64, |
| acsc=+\e020\e,\e021\-\e030.\*^Y0\e333\(ga\e004a\e261f\e370g\e361h\e260 |
| j\e331k\e277l\e332m\e300n\e305o\*~p\e304q\e304r\e304s_t\e303 |
| u\e264v\e301w\e302x\e263y\e363z\e362{\e343|\e330}\e234\*~\e376, |
| bel=\*^G, blink=\eE[5m, bold=\eE[1m, cbt=\eE[Z, clear=\eE[H\eE[J, |
| cr=\*^M, cub=\eE[%p1%dD, cub1=\eE[D, cud=\eE[%p1%dB, cud1=\eE[B, |
| cuf=\eE[%p1%dC, cuf1=\eE[C, cup=\eE[%i%p1%d;%p2%dH, |
| cuu=\eE[%p1%dA, cuu1=\eE[A, dch=\eE[%p1%dP, dch1=\eE[P, |
| dl=\eE[%p1%dM, dl1=\eE[M, ech=\eE[%p1%dX, ed=\eE[J, el=\eE[K, |
| el1=\eE[1K, home=\eE[H, hpa=\eE[%i%p1%dG, ht=\eE[I, hts=\eEH, |
| ich=\eE[%p1%d@, il=\eE[%p1%dL, il1=\eE[L, ind=\*^J, |
| indn=\eE[%p1%dS, invis=\eE[8m, kbs=\*^H, kcbt=\eE[Z, kcub1=\eE[D, |
| kcud1=\eE[B, kcuf1=\eE[C, kcuu1=\eE[A, khome=\eE[H, kich1=\eE[L, |
| mc4=\eE[4i, mc5=\eE[5i, nel=\er\eE[S, op=\eE[39;49m, |
| rep=%p1%c\eE[%p2%{1}%\-%db, rev=\eE[7m, rin=\eE[%p1%dT, |
| rmacs=\eE[10m, rmpch=\eE[10m, rmso=\eE[m, rmul=\eE[m, |
| s0ds=\eE(B, s1ds=\eE)B, s2ds=\eE*B, s3ds=\eE+B, |
| setab=\eE[4%p1%dm, setaf=\eE[3%p1%dm, |
| sgr=\eE[0;10%?%p1%t;7%; |
| %?%p2%t;4%; |
| %?%p3%t;7%; |
| %?%p4%t;5%; |
| %?%p6%t;1%; |
| %?%p7%t;8%; |
| %?%p9%t;11%;m, |
| sgr0=\eE[0;10m, smacs=\eE[11m, smpch=\eE[11m, smso=\eE[7m, |
| smul=\eE[4m, tbc=\eE[3g, u6=\eE[%i%d;%dR, u7=\eE[6n, |
| u8=\eE[?%[;0123456789]c, u9=\eE[c, vpa=\eE[%i%p1%dd, |
| .EE |
| .PP |
| Entries may continue onto multiple lines by placing white space at |
| the beginning of each line except the first. |
| Comments may be included on lines beginning with \*(``#\*(''. |
| Capabilities in |
| .I terminfo |
| are of three types: |
| .bP |
| Boolean capabilities which indicate that the terminal has |
| some particular feature, |
| .bP |
| numeric capabilities giving the size of the terminal |
| or the size of particular delays, and |
| .bP |
| string |
| capabilities, which give a sequence which can be used to perform particular |
| terminal operations. |
| .SS "Types of Capabilities" |
| All capabilities have names. |
| For instance, the fact that |
| ANSI-standard terminals have |
| .I "automatic margins" |
| (i.e., an automatic return and line-feed |
| when the end of a line is reached) is indicated by the capability \fBam\fP. |
| Hence the description of ansi includes \fBam\fP. |
| Numeric capabilities are followed by the character \*(``#\*('' |
| and then a positive value. |
| Thus \fBcols\fP, which indicates the number of columns the terminal has, |
| gives the value \*(``80\*('' for ansi. |
| Values for numeric capabilities may be specified in |
| decimal, |
| octal, or |
| hexadecimal, |
| using the C programming language conventions |
| (e.g., 255, 0377 and 0xff or 0xFF). |
| .PP |
| Finally, string valued capabilities, |
| such as \fBel\fP (clear to end of line sequence) |
| are given by the two-character code, |
| an \*(``=\*('', and then |
| a string ending at the next following \*(``,\*(''. |
| .PP |
| A number of escape sequences are provided in the string valued capabilities |
| for easy encoding of characters there: |
| .bP |
| Both \fB\eE\fP and \fB\ee\fP |
| map to an \s-1ESCAPE\s0 character, |
| .bP |
| \fB\*^\f(BIx\fR maps to a control-\fIx\fP for any appropriate \fIx\fP, |
| and |
| .bP |
| the sequences |
| .RS 6 |
| .PP |
| \fB\en\fP, \fB\el\fP, \fB\er\fP, \fB\et\fP, \fB\eb\fP, \fB\ef\fP, and \fB\es\fP |
| .RE |
| .IP |
| produce |
| .RS 6 |
| .PP |
| \fInewline\fP, \fIline-feed\fP, \fIreturn\fP, \fItab\fP, \fIbackspace\fP, \fIform-feed\fP, and \fIspace\fP, |
| .RE |
| .IP |
| respectively. |
| .PP |
| X/Open Curses does not say what \*(``appropriate \fIx\fP\*('' might be. |
| In practice, that is a printable ASCII graphic character. |
| The special case \*(``\*^?\*('' is interpreted as DEL (127). |
| In all other cases, the character value is AND'd with 0x1f, |
| mapping to ASCII control codes in the range 0 through 31. |
| .PP |
| Other escapes include |
| .bP |
| \fB\e\*^\fP for \fB\*^\fP, |
| .bP |
| \fB\e\e\fP for \fB\e\fP, |
| .bP |
| \fB\e\fP, for comma, |
| .bP |
| \fB\e:\fP for \fB:\fP, |
| .bP |
| and \fB\e0\fP for null. |
| .IP |
| \fB\e0\fP will produce \e200, which does not terminate a string but behaves |
| as a null character on most terminals, providing CS7 is specified. |
| See \fBstty\fP(1). |
| .IP |
| The reason for this quirk is to maintain binary compatibility of the |
| compiled terminfo files with other implementations, |
| e.g., the SVr4 systems, which document this. |
| Compiled terminfo files use null-terminated strings, with no lengths. |
| Modifying this would require a new binary format, |
| which would not work with other implementations. |
| .PP |
| Finally, characters may be given as three octal digits after a \fB\e\fP. |
| .PP |
| A delay in milliseconds may appear anywhere in a string capability, enclosed in |
| $<..> brackets, as in \fBel\fP=\eEK$<5>, |
| and padding characters are supplied by \fBtputs\fP(3X) |
| to provide this delay. |
| .bP |
| The delay must be a number with at most one decimal |
| place of precision; |
| it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both. |
| .bP |
| A \*(``*\*('' |
| indicates that the padding required is proportional to the number of lines |
| affected by the operation, and the amount given is the per-affected-unit |
| padding required. |
| (In the case of insert character, the factor is still the |
| number of \fIlines\fP affected.) |
| .IP |
| Normally, padding is advisory if the device has the \fBxon\fP |
| capability; it is used for cost computation but does not trigger delays. |
| .bP |
| A \*(``/\*('' |
| suffix indicates that the padding is mandatory and forces a delay of the given |
| number of milliseconds even on devices for which \fBxon\fP is present to |
| indicate flow control. |
| .PP |
| Sometimes individual capabilities must be commented out. |
| To do this, put a period before the capability name. |
| For example, see the second |
| .B ind |
| in the example above. |
| .br |
| .ne 5 |
| .SS "Fetching Compiled Descriptions" |
| Terminal descriptions in \fI\%ncurses\fP are stored in terminal |
| databases. |
| These databases, which are found by their pathname, |
| may be configured either as directory trees or hashed databases |
| (see \fBterm\fR(5)), |
| .PP |
| The library uses a compiled-in list of pathnames, |
| which can be overridden by environment variables. |
| Before starting to search, |
| \fI\%ncurses\fP checks the search list, |
| eliminating duplicates and pathnames where no terminal database is found. |
| The \fI\%ncurses\fP library reads the first description |
| which passes its consistency checks. |
| .bP |
| The environment variable \fBTERMINFO\fR is checked first, for |
| a terminal database containing the terminal description. |
| .bP |
| Next, |
| \fI\%ncurses\fP looks in \fI$HOME/.terminfo\fP |
| for a compiled description. |
| .IP |
| This is an optional feature which may be omitted entirely from |
| the library, or limited to prevent accidental use by privileged applications. |
| .bP |
| Next, |
| if the environment variable \fI\%TERMINFO_DIRS\fP is set, |
| \fI\%ncurses\fP interprets the contents of that variable |
| as a list of colon-separated pathnames of terminal databases to be searched. |
| .IP |
| An empty pathname (i.e., if the variable begins or ends |
| with a colon, or contains adjacent colons) |
| is interpreted as the system location \fI\*d\fP. |
| .bP |
| Finally, \fI\%ncurses\fP searches these compiled-in locations: |
| .RS |
| .bP |
| a list of directories (@TERMINFO_DIRS@), and |
| .bP |
| the system terminfo directory, \fI\*d\fP |
| .RE |
| .PP |
| The \fBTERMINFO\fP variable can contain a terminal description instead |
| of the pathname of a terminal database. |
| If this variable begins with \*(``hex:\*('' or \*(``b64:\*('' |
| then \fI\%ncurses\fP reads a terminal description from |
| hexadecimal- or base64-encoded data, |
| and if that description matches the name sought, will use that. |
| This encoded data can be set using the \*(``\-Q\*('' option of |
| \fB@TIC@\fR or \fB@INFOCMP@\fR. |
| .PP |
| The preceding addresses the usual configuration of \fI\%ncurses\fP, |
| which uses terminal descriptions prepared in \fIterminfo\fP format. |
| While \fItermcap\fP is less expressive, |
| \fI\%ncurses\fP can also be configured to read \fItermcap\fP |
| descriptions. |
| In that configuration, |
| it checks the \fI\%TERMCAP\fP and \fI\%TERMPATH\fP variables |
| (for content and search path, |
| respectively) |
| after the system terminal database. |
| .SS "Preparing Descriptions" |
| We now outline how to prepare descriptions of terminals. |
| The most effective way to prepare a terminal description is by imitating |
| the description of a similar terminal in |
| .I terminfo |
| and to build up a description gradually, using partial descriptions |
| with |
| .I vi |
| or some other screen-oriented program to check that they are correct. |
| Be aware that a very unusual terminal may expose deficiencies in |
| the ability of the |
| .I terminfo |
| file to describe it |
| or bugs in the screen-handling code of the test program. |
| .PP |
| To get the padding for insert line right (if the terminal manufacturer |
| did not document it) a severe test is to edit a large file at 9600 baud, |
| delete 16 or so lines from the middle of the screen, then hit the \*(``u\*('' |
| key several times quickly. |
| If the terminal messes up, more padding is usually needed. |
| A similar test can be used for insert character. |
| .SS "Basic Capabilities" |
| The number of columns on each line for the terminal is given by the |
| \fBcols\fP numeric capability. |
| If the terminal is a \s-1CRT\s0, then the |
| number of lines on the screen is given by the \fBlines\fP capability. |
| If the terminal wraps around to the beginning of the next line when |
| it reaches the right margin, then it should have the \fBam\fP capability. |
| If the terminal can clear its screen, leaving the cursor in the home |
| position, then this is given by the \fBclear\fP string capability. |
| If the terminal overstrikes |
| (rather than clearing a position when a character is struck over) |
| then it should have the \fBos\fP capability. |
| If the terminal is a printing terminal, with no soft copy unit, |
| give it both |
| .B hc |
| and |
| .BR os . |
| .RB ( os |
| applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010 |
| series, as well as hard copy and APL terminals.) |
| If there is a code to move the cursor to the left edge of the current |
| row, give this as |
| .BR cr . |
| (Normally this will be carriage return, control/M.) |
| If there is a code to produce an audible signal (bell, beep, etc) |
| give this as |
| .BR bel . |
| .PP |
| If there is a code to move the cursor one position to the left |
| (such as backspace) that capability should be given as |
| .BR cub1 . |
| Similarly, codes to move to the right, up, and down should be |
| given as |
| .BR cuf1 , |
| .BR cuu1 , |
| and |
| .BR cud1 . |
| These local cursor motions should not alter the text they pass over, |
| for example, you would not normally use \*(``\fBcuf1\fP=\ \*('' because the |
| space would erase the character moved over. |
| .PP |
| A very important point here is that the local cursor motions encoded |
| in |
| .I terminfo |
| are undefined at the left and top edges of a \s-1CRT\s0 terminal. |
| Programs should never attempt to backspace around the left edge, |
| unless |
| .B bw |
| is given, |
| and never attempt to go up locally off the top. |
| In order to scroll text up, a program will go to the bottom left corner |
| of the screen and send the |
| .B ind |
| (index) string. |
| .PP |
| To scroll text down, a program goes to the top left corner |
| of the screen and sends the |
| .B ri |
| (reverse index) string. |
| The strings |
| .B ind |
| and |
| .B ri |
| are undefined when not on their respective corners of the screen. |
| .PP |
| Parameterized versions of the scrolling sequences are |
| .B indn |
| and |
| .B rin |
| which have the same semantics as |
| .B ind |
| and |
| .B ri |
| except that they take one parameter, and scroll that many lines. |
| They are also undefined except at the appropriate edge of the screen. |
| .PP |
| The \fBam\fP capability tells whether the cursor sticks at the right |
| edge of the screen when text is output, but this does not necessarily |
| apply to a |
| .B cuf1 |
| from the last column. |
| The only local motion which is defined from the left edge is if |
| .B bw |
| is given, then a |
| .B cub1 |
| from the left edge will move to the right edge of the previous row. |
| If |
| .B bw |
| is not given, the effect is undefined. |
| This is useful for drawing a box around the edge of the screen, for example. |
| If the terminal has switch selectable automatic margins, |
| the |
| .I terminfo |
| file usually assumes that this is on; i.e., \fBam\fP. |
| If the terminal has a command which moves to the first column of the next |
| line, that command can be given as |
| .B nel |
| (newline). |
| It does not matter if the command clears the remainder of the current line, |
| so if the terminal has no |
| .B cr |
| and |
| .B lf |
| it may still be possible to craft a working |
| .B nel |
| out of one or both of them. |
| .PP |
| These capabilities suffice to describe |
| hard-copy and \*(``glass-tty\*('' terminals. |
| Thus the model 33 teletype is described as |
| .PP |
| .EX |
| .\".in -2 |
| \s-133\||\|tty33\||\|tty\||\|model 33 teletype, |
| bel=\*^G, cols#72, cr=\*^M, cud1=\*^J, hc, ind=\*^J, os,\s+1 |
| .\".in +2 |
| .EE |
| .PP |
| while the Lear Siegler \s-1ADM-3\s0 is described as |
| .PP |
| .EX |
| .\".in -2 |
| \s-1adm3\||\|3\||\|lsi adm3, |
| am, bel=\*^G, clear=\*^Z, cols#80, cr=\*^M, cub1=\*^H, cud1=\*^J, |
| ind=\*^J, lines#24,\s+1 |
| .\".in +2 |
| .EE |
| .SS "Parameterized Strings" |
| Cursor addressing and other strings requiring parameters |
| in the terminal are described by a |
| parameterized string capability, |
| with \fIprintf\fP-like escapes such as \fI%x\fP in it. |
| For example, to address the cursor, the |
| .B cup |
| capability is given, using two parameters: |
| the row and column to address to. |
| (Rows and columns are numbered from zero and refer to the |
| physical screen visible to the user, not to any unseen memory.) |
| If the terminal has memory relative cursor addressing, |
| that can be indicated by |
| .BR mrcup . |
| .PP |
| The parameter mechanism uses a stack and special \fB%\fP codes |
| to manipulate it. |
| Typically a sequence will push one of the |
| parameters onto the stack and then print it in some format. |
| Print (e.g., \*(``%d\*('') is a special case. |
| Other operations, including \*(``%t\*('' pop their operand from the stack. |
| It is noted that more complex operations are often necessary, |
| e.g., in the \fBsgr\fP string. |
| .PP |
| The \fB%\fP encodings have the following meanings: |
| .TP 5 |
| \fB%%\fP |
| outputs \*(``%\*('' |
| .TP |
| \fB%\fI[[\fR:\fI]flags][width[.precision]][\fBdoxXs\fI]\fR |
| as in \fBprintf\fP(3), flags are \fI[\-+#]\fP and \fIspace\fP. |
| Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag, |
| avoiding interpreting \*(``%\-\*('' as an operator. |
| .TP |
| \fB%c\fP |
| print \fIpop()\fP like %c in \fBprintf\fP |
| .TP |
| \fB%s\fP |
| print \fIpop()\fP like %s in \fBprintf\fP |
| .TP |
| \fB%p\fI[1\-9]\fR |
| push \fIi\fP'th parameter |
| .TP |
| \fB%P\fI[a\-z]\fR |
| set dynamic variable \fI[a\-z]\fP to \fIpop()\fP |
| .TP |
| \fB%g\fI[a\-z]\fR |
| get dynamic variable \fI[a\-z]\fP and push it |
| .TP |
| \fB%P\fI[A\-Z]\fR |
| set static variable \fI[a\-z]\fP to \fIpop()\fP |
| .TP |
| \fB%g\fI[A\-Z]\fR |
| get static variable \fI[a\-z]\fP and push it |
| .IP |
| The terms \*(``static\*('' and \*(``dynamic\*('' are misleading. |
| Historically, these are simply two different sets of variables, |
| whose values are not reset between calls to \fBtparm\fP(3X). |
| However, that fact is not documented in other implementations. |
| Relying on it will adversely impact portability to other implementations: |
| .RS |
| .bP |
| SVr2 curses supported \fIdynamic\fP variables. |
| Those are set only by a \fB%P\fP operator. |
| A \fB%g\fP for a given variable without first setting it with \fB%P\fP |
| will give unpredictable results, because dynamic variables are |
| an uninitialized local array on the stack in the \fBtparm\fP function. |
| .bP |
| SVr3.2 curses supported \fIstatic\fP variables. |
| Those are an array in the \fI\%TERMINAL\fP |
| structure (declared in \fBterm.h\fP), |
| and are zeroed automatically when the \fBsetupterm\fP function |
| allocates the data. |
| .bP |
| SVr4 curses made no further improvements |
| to the \fIdynamic/static\fP variable feature. |
| .bP |
| Solaris XPG4 curses does not distinguish between \fIdynamic\fP and |
| \fIstatic\fP variables. |
| They are the same. |
| Like SVr4 curses, XPG4 curses does not initialize these explicitly. |
| .bP |
| Before version 6.3, |
| \fI\%ncurses\fP stores both \fIdynamic\fP and \fIstatic\fP |
| variables in persistent storage, initialized to zeros. |
| .bP |
| Beginning with version 6.3, |
| \fI\%ncurses\fP stores \fIstatic\fP and \fIdynamic\fP |
| variables in the same manner as SVr4. |
| .RS |
| .bP |
| Unlike other implementations, \fI\%ncurses\fP zeros dynamic variables |
| before the first \fB%g\fP or \fB%P\fP operator. |
| .bP |
| Like SVr2, |
| the scope of dynamic variables in \fI\%ncurses\fP |
| is within the current call to |
| \fBtparm\fP. |
| Use static variables if persistent storage is needed. |
| .RE |
| .RE |
| .TP |
| \fB%\*'\fIc\fB\*'\fR |
| char constant \fIc\fP |
| .TP |
| \fB%{\fInn\fB}\fR |
| integer constant \fInn\fP |
| .TP |
| \fB%l\fP |
| push strlen(pop) |
| .TP |
| \fB%+\fP, \fB%\-\fP, \fB%*\fP, \fB%/\fP, \fB%m\fP |
| arithmetic (%m is \fImod\fP): \fIpush(pop() op pop())\fP |
| .TP |
| \fB%&\fP, \fB%|\fP, \fB%\*^\fP |
| bit operations (AND, OR and exclusive-OR): \fIpush(pop() op pop())\fP |
| .TP |
| \fB%=\fP, \fB%>\fP, \fB%<\fP |
| logical operations: \fIpush(pop() op pop())\fP |
| .TP |
| \fB%A\fP, \fB%O\fP |
| logical AND and OR operations (for conditionals) |
| .TP |
| \fB%!\fP, \fB%\*~\fP |
| unary operations (logical and bit complement): \fIpush(op pop())\fP |
| .TP |
| \fB%i\fP |
| add 1 to first two parameters (for ANSI terminals) |
| .TP |
| \fB%?\fP \fIexpr\fP \fB%t\fP \fIthenpart\fP \fB%e\fP \fIelsepart\fP \fB%;\fP |
| This forms an if-then-else. |
| The \fB%e\fP \fIelsepart\fP is optional. |
| Usually the \fB%?\fP \fIexpr\fP part pushes a value onto the stack, |
| and \fB%t\fP pops it from the stack, testing if it is nonzero (true). |
| If it is zero (false), control passes to the \fB%e\fP (else) part. |
| .IP |
| It is possible to form else-if's a la Algol 68: |
| .RS |
| \fB%?\fP c\d1\u \fB%t\fP b\d1\u \fB%e\fP c\d2\u \fB%t\fP b\d2\u \fB%e\fP c\d3\u \fB%t\fP b\d3\u \fB%e\fP c\d4\u \fB%t\fP b\d4\u \fB%e\fP \fB%;\fP |
| .RE |
| .IP |
| where c\di\u are conditions, b\di\u are bodies. |
| .IP |
| Use the \fB\-f\fP option of \fB@TIC@\fP or \fB@INFOCMP@\fP to see |
| the structure of if-then-else's. |
| Some strings, e.g., \fBsgr\fP can be very complicated when written |
| on one line. |
| The \fB\-f\fP option splits the string into lines with the parts indented. |
| .PP |
| Binary operations are in postfix form with the operands in the usual order. |
| That is, to get x\-5 one would use \*(``%gx%{5}%\-\*(''. |
| \fB%P\fP and \fB%g\fP variables are |
| persistent across escape-string evaluations. |
| .PP |
| Consider the HP2645, which, to get to row 3 and column 12, needs |
| to be sent \eE&a12c03Y padded for 6 milliseconds. |
| The order of the rows and columns is inverted here, |
| and the row and column are printed as two digits. |
| The corresponding terminal description is expressed thus: |
| .RS |
| cup=\eE&a%p2%dc%p1%dY$<6>, |
| .RE |
| .PP |
| The Microterm \s-1ACT-IV\s0 needs the current row and column sent |
| preceded by a \fB\*^T\fP, with the row and column simply encoded in binary, |
| .RS |
| cup=\*^T%p1%c%p2%c |
| .RE |
| .PP |
| Terminals which use \*(``%c\*('' need to be able to |
| backspace the cursor (\fBcub1\fP), |
| and to move the cursor up one line on the screen (\fBcuu1\fP). |
| This is necessary because it is not always safe to transmit \fB\en\fP |
| \fB\*^D\fP and \fB\er\fP, as the system may change or discard them. |
| (The library routines dealing with terminfo set tty modes so that |
| tabs are never expanded, so \et is safe to send. |
| This turns out to be essential for the Ann Arbor 4080.) |
| .PP |
| A final example is the \s-1LSI ADM\s0-3a, which uses row and column |
| offset by a blank character, thus |
| .RS |
| cup=\eE=%p1%\*' \*'%+%c%p2%\*' \*'%+%c |
| .RE |
| .PP |
| After sending \*(``\eE=\*('', this pushes the first parameter, pushes the |
| ASCII value for a space (32), adds them (pushing the sum on the stack |
| in place of the two previous values) and outputs that value as a character. |
| Then the same is done for the second parameter. |
| More complex arithmetic is possible using the stack. |
| .SS "Cursor Motions" |
| If the terminal has a fast way to home the cursor |
| (to very upper left corner of screen) then this can be given as |
| \fBhome\fP; similarly a fast way of getting to the lower left-hand corner |
| can be given as \fBll\fP; this may involve going up with \fBcuu1\fP |
| from the home position, |
| but a program should never do this itself (unless \fBll\fP does) because it |
| can make no assumption about the effect of moving up from the home position. |
| Note that the home position is the same as addressing to (0,0): |
| to the top left corner of the screen, not of memory. |
| (Thus, the \eEH sequence on HP terminals cannot be used for |
| .BR home .) |
| .PP |
| If the terminal has row or column absolute cursor addressing, |
| these can be given as single parameter capabilities |
| .B hpa |
| (horizontal position absolute) |
| and |
| .B vpa |
| (vertical position absolute). |
| Sometimes these are shorter than the more general two parameter |
| sequence (as with the hp2645) and can be used in preference to |
| .BR cup . |
| If there are parameterized local motions (e.g., move |
| .I n |
| spaces to the right) these can be given as |
| .BR cud , |
| .BR cub , |
| .BR cuf , |
| and |
| .B cuu |
| with a single parameter indicating how many spaces to move. |
| These are primarily useful if the terminal does not have |
| .BR cup , |
| such as the \s-1TEKTRONIX\s+1 4025. |
| .PP |
| If the terminal needs to be in a special mode when running |
| a program that uses these capabilities, |
| the codes to enter and exit this mode can be given |
| as \fBsmcup\fP and \fBrmcup\fP. |
| This arises, for example, from terminals like the Concept with more than |
| one page of memory. |
| If the terminal has only memory relative cursor addressing and not screen |
| relative cursor addressing, a one screen-sized window must be fixed into |
| the terminal for cursor addressing to work properly. |
| This is also used for the \s-1TEKTRONIX\s+1 4025, |
| where |
| .B smcup |
| sets the command character to be the one used by terminfo. |
| If the \fBsmcup\fP sequence will not restore the screen after an |
| \fBrmcup\fP sequence is output (to the state prior to outputting |
| \fBrmcup\fP), specify \fBnrrmc\fP. |
| .SS Margins |
| SVr4 (and X/Open Curses) |
| list several string capabilities for setting margins. |
| Two were intended for use with terminals, |
| and another six were intended for use with printers. |
| .bP |
| The two terminal capabilities assume that the terminal may have |
| the capability of setting the left and/or right margin at the current |
| cursor column position. |
| .bP |
| The printer capabilities assume that the printer may have |
| two types of capability: |
| .RS |
| .bP |
| the ability to set a top and/or bottom margin using the current |
| line position, and |
| .bP |
| parameterized capabilities for setting the top, bottom, left, right margins |
| given the number of rows or columns. |
| .RE |
| .PP |
| In practice, the categorization into \*(``terminal\*('' and \*(``printer\*('' |
| is not suitable: |
| .bP |
| The AT&T SVr4 terminal database uses \fBsmgl\fP four times, |
| for AT&T hardware. |
| .IP |
| Three of the four are printers. |
| They lack the ability to set left/right margins by specifying the column. |
| .bP |
| Other (non-AT&T) terminals may support margins |
| but using different assumptions from AT&T. |
| .IP |
| For instance, the DEC VT420 supports left/right margins, |
| but only using a column parameter. |
| As an added complication, the VT420 uses two settings to fully enable |
| left/right margins (left/right margin mode, and origin mode). |
| The former enables the margins, which causes printed text |
| to wrap within margins, but the latter is needed to prevent |
| cursor-addressing outside those margins. |
| .bP |
| Both DEC VT420 left/right margins are set with a single control sequence. |
| If either is omitted, the corresponding margin is set to the left or |
| right edge of the display (rather than leaving the margin unmodified). |
| .PP |
| These are the margin-related capabilities: |
| .PP |
| .TS |
| center; |
| lb lb |
| lb l . |
| Name Description |
| _ |
| smgl Set left margin at current column |
| smgr Set right margin at current column |
| smgb Set bottom margin at current line |
| smgt Set top margin at current line |
| smgbp Set bottom margin at line \fIN\fP |
| smglp Set left margin at column \fIN\fP |
| smgrp Set right margin at column \fIN\fP |
| smgtp Set top margin at line \fIN\fP |
| smglr Set both left and right margins to \fIL\fP and \fIR\fP |
| smgtb Set both top and bottom margins to \fIT\fP and \fIB\fP |
| .TE |
| .PP |
| When writing an application that |
| uses these string capabilities, |
| the pairs should be first checked to see |
| if each capability in the pair is set or only one is set: |
| .bP |
| If both \fBsmglp\fP and \fBsmgrp\fP are set, |
| each is used with a single argument, \fIN\fP, |
| that gives the column number of the left and right margin, respectively. |
| .bP |
| If both \fBsmgtp\fP and \fBsmgbp\fP are set, |
| each is used to set the top and bottom margin, |
| respectively: |
| .RS 4 |
| .bP |
| \fBsmgtp\fP is used with a single argument, \fIN\fP, |
| the line number of the top margin. |
| .bP |
| \fBsmgbp\fP is used with two arguments, \fIN\fP and \fIM\fP, |
| that give the line number of the bottom margin, |
| the first counting from the top of the |
| page and the second counting from the bottom. |
| This accommodates the two styles of specifying |
| the bottom margin in different manufacturers' printers. |
| .RE |
| .IP |
| When designing a terminfo entry for a |
| printer that has a settable bottom margin, |
| only the first or second argument should be used, depending on the printer. |
| When developing an application that uses \fBsmgbp\fP to set the bottom margin, |
| both arguments must be given. |
| .PP |
| Conversely, when only one capability in the pair is set: |
| .bP |
| If only one of \fBsmglp\fP and \fBsmgrp\fP is set, |
| then it is used with two arguments, |
| the column number of the left and right margins, in that order. |
| .bP |
| Likewise, if only one of \fBsmgtp\fP and \fBsmgbp\fP is set, then it |
| is used with two arguments that give the top and bottom margins, |
| in that order, counting from the top of the page. |
| .IP |
| When designing a terminfo entry for a printer that requires setting both |
| left and right or top and bottom margins simultaneously, |
| only one capability in the pairs |
| \fBsmglp\fP and \fBsmgrp\fP or |
| \fBsmgtp\fP and \fBsmgbp\fP should be defined, |
| leaving the other unset. |
| .PP |
| Except for very old terminal descriptions, e.g., those developed for SVr4, |
| the scheme just described should be considered obsolete. |
| An improved set of capabilities was added late in the SVr4 releases |
| (\fBsmglr\fP and \fBsmgtb\fP), |
| which explicitly use two parameters for setting the left/right or top/bottom |
| margins. |
| .PP |
| When setting margins, the line- and column-values are zero-based. |
| .PP |
| The \fBmgc\fP string capability should be defined. |
| Applications such as \fBtabs\fP(1) rely upon this to reset all margins. |
| .\" |
| .SS "Area Clears" |
| If the terminal can clear from the current position to the end of the |
| line, leaving the cursor where it is, this should be given as \fBel\fP. |
| If the terminal can clear from the beginning of the line to the current |
| position inclusive, leaving |
| the cursor where it is, this should be given as \fBel1\fP. |
| If the terminal can clear from the current position to the end of the |
| display, then this should be given as \fBed\fP. |
| \fBEd\fP is only defined from the first column of a line. |
| (Thus, it can be simulated by a request to delete a large number of lines, |
| if a true |
| .B ed |
| is not available.) |
| .\" |
| .SS "Insert/Delete Line and Vertical Motions" |
| If the terminal can open a new blank line before the line where the cursor |
| is, this should be given as \fBil1\fP; this is done only from the first |
| position of a line. |
| The cursor must then appear on the newly blank line. |
| If the terminal can delete the line which the cursor is on, then this |
| should be given as \fBdl1\fP; this is done only from the first position on |
| the line to be deleted. |
| Versions of |
| .B il1 |
| and |
| .B dl1 |
| which take a single parameter and insert or delete that many lines can |
| be given as |
| .B il |
| and |
| .BR dl . |
| .PP |
| If the terminal has a settable scrolling region (like the vt100) |
| the command to set this can be described with the |
| .B csr |
| capability, which takes two parameters: |
| the top and bottom lines of the scrolling region. |
| The cursor position is, alas, undefined after using this command. |
| .PP |
| It is possible to get the effect of insert or delete line using |
| .B csr |
| on a properly chosen region; the |
| .B sc |
| and |
| .B rc |
| (save and restore cursor) commands may be useful for ensuring that |
| your synthesized insert/delete string does not move the cursor. |
| (Note that the \fB\%ncurses\fP(3X) library does this synthesis |
| automatically, so you need not compose insert/delete strings for |
| an entry with \fBcsr\fP). |
| .PP |
| Yet another way to construct insert and delete might be to use a combination of |
| index with the memory-lock feature found on some terminals (like the HP-700/90 |
| series, which however also has insert/delete). |
| .PP |
| Inserting lines at the top or bottom of the screen can also be |
| done using |
| .B ri |
| or |
| .B ind |
| on many terminals without a true insert/delete line, |
| and is often faster even on terminals with those features. |
| .PP |
| The Boolean \fBnon_dest_scroll_region\fP should be set if each scrolling |
| window is effectively a view port on a screen-sized canvas. |
| To test for |
| this capability, create a scrolling region in the middle of the screen, |
| write something to the bottom line, move the cursor to the top of the region, |
| and do \fBri\fP followed by \fBdl1\fP or \fBind\fP. |
| If the data scrolled |
| off the bottom of the region by the \fBri\fP re-appears, then scrolling |
| is non-destructive. |
| System V and X/Open Curses expect that \fBind\fP, \fBri\fP, |
| \fBindn\fP, and \fBrin\fP will simulate destructive scrolling; their |
| documentation cautions you not to define \fBcsr\fP unless this is true. |
| This \fBcurses\fP implementation is more liberal and will do explicit erases |
| after scrolling if \fBndsrc\fP is defined. |
| .PP |
| If the terminal has the ability to define a window as part of |
| memory, which all commands affect, |
| it should be given as the parameterized string |
| .BR wind . |
| The four parameters are the starting and ending lines in memory |
| and the starting and ending columns in memory, in that order. |
| .PP |
| If the terminal can retain display memory above, then the |
| \fBda\fP capability should be given; if display memory can be retained |
| below, then \fBdb\fP should be given. |
| These indicate |
| that deleting a line or scrolling may bring non-blank lines up from below |
| or that scrolling back with \fBri\fP may bring down non-blank lines. |
| .SS "Insert/Delete Character" |
| There are two basic kinds of intelligent terminals with respect to |
| insert/delete character which can be described using |
| .IR terminfo . |
| The most common insert/delete character operations affect only the characters |
| on the current line and shift characters off the end of the line rigidly. |
| Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make |
| a distinction between typed and untyped blanks on the screen, shifting |
| upon an insert or delete only to an untyped blank on the screen which is |
| either eliminated, or expanded to two untyped blanks. |
| .PP |
| You can determine the |
| kind of terminal you have by clearing the screen and then typing |
| text separated by cursor motions. |
| Type \*(``abc\ \ \ \ def\*('' using local |
| cursor motions (not spaces) between the \*(``abc\*('' and the \*(``def\*(''. |
| Then position the cursor before the \*(``abc\*('' and put the terminal in insert |
| mode. |
| If typing characters causes the rest of the line to shift |
| rigidly and characters to fall off the end, then your terminal does |
| not distinguish between blanks and untyped positions. |
| If the \*(``abc\*('' |
| shifts over to the \*(``def\*('' which then move together around the end of the |
| current line and onto the next as you insert, you have the second type of |
| terminal, and should give the capability \fBin\fP, which stands for |
| \*(``insert null\*(''. |
| .PP |
| While these are two logically separate attributes (one line versus multi-line |
| insert mode, and special treatment of untyped spaces) we have seen no |
| terminals whose insert mode cannot be described with the single attribute. |
| .PP |
| Terminfo can describe both terminals which have an insert mode, and terminals |
| which send a simple sequence to open a blank position on the current line. |
| Give as \fBsmir\fP the sequence to get into insert mode. |
| Give as \fBrmir\fP the sequence to leave insert mode. |
| Now give as \fBich1\fP any sequence needed to be sent just before sending |
| the character to be inserted. |
| Most terminals with a true insert mode |
| will not give \fBich1\fP; terminals which send a sequence to open a screen |
| position should give it here. |
| .PP |
| If your terminal has both, insert mode is usually preferable to \fBich1\fP. |
| Technically, you should not give both unless the terminal actually requires |
| both to be used in combination. |
| Accordingly, some non-curses applications get |
| confused if both are present; the symptom is doubled characters in an update |
| using insert. |
| This requirement is now rare; most \fBich\fP sequences do not |
| require previous smir, and most smir insert modes do not require \fBich1\fP |
| before each character. |
| Therefore, the new \fBcurses\fP actually assumes this |
| is the case and uses either \fBrmir\fP/\fBsmir\fP or \fBich\fP/\fBich1\fP as |
| appropriate (but not both). |
| If you have to write an entry to be used under |
| new curses for a terminal old enough to need both, include the |
| \fBrmir\fP/\fBsmir\fP sequences in \fBich1\fP. |
| .PP |
| If post insert padding is needed, give this as a number of milliseconds |
| in \fBip\fP (a string option). |
| Any other sequence which may need to be |
| sent after an insert of a single character may also be given in \fBip\fP. |
| If your terminal needs both to be placed into an \*(``insert mode\*('' and |
| a special code to precede each inserted character, then both |
| .BR smir / rmir |
| and |
| .B ich1 |
| can be given, and both will be used. |
| The |
| .B ich |
| capability, with one parameter, |
| .IR n , |
| will repeat the effects of |
| .B ich1 |
| .I n |
| times. |
| .PP |
| If padding is necessary between characters typed while not |
| in insert mode, give this as a number of milliseconds padding in \fBrmp\fP. |
| .PP |
| It is occasionally necessary to move around while in insert mode |
| to delete characters on the same line (e.g., if there is a tab after |
| the insertion position). |
| If your terminal allows motion while in |
| insert mode you can give the capability \fBmir\fP to speed up inserting |
| in this case. |
| Omitting \fBmir\fP will affect only speed. |
| Some terminals |
| (notably Datamedia's) must not have \fBmir\fP because of the way their |
| insert mode works. |
| .PP |
| Finally, you can specify |
| .B dch1 |
| to delete a single character, |
| .B dch |
| with one parameter, |
| .IR n , |
| to delete |
| .IR n "characters," |
| and delete mode by giving \fBsmdc\fP and \fBrmdc\fP |
| to enter and exit delete mode (any mode the terminal needs to be placed |
| in for |
| .B dch1 |
| to work). |
| .PP |
| A command to erase |
| .I n |
| characters (equivalent to outputting |
| .I n |
| blanks without moving the cursor) |
| can be given as |
| .B ech |
| with one parameter. |
| .SS "Highlighting, Underlining, and Visible Bells" |
| If your terminal has one or more kinds of display attributes, |
| these can be represented in a number of different ways. |
| You should choose one display form as |
| \f2standout mode\fP, |
| representing a good, high contrast, easy-on-the-eyes, |
| format for highlighting error messages and other attention getters. |
| (If you have a choice, reverse video plus half-bright is good, |
| or reverse video alone.) |
| The sequences to enter and exit standout mode |
| are given as \fBsmso\fP and \fBrmso\fP, respectively. |
| If the code to change into or out of standout |
| mode leaves one or even two blank spaces on the screen, |
| as the TVI 912 and Teleray 1061 do, |
| then \fBxmc\fP should be given to tell how many spaces are left. |
| .PP |
| Codes to begin underlining and end underlining can be given as \fBsmul\fP |
| and \fBrmul\fP respectively. |
| If the terminal has a code to underline the current character and move |
| the cursor one space to the right, |
| such as the Microterm Mime, |
| this can be given as \fBuc\fP. |
| .PP |
| Other capabilities to enter various highlighting modes include |
| .B blink |
| (blinking) |
| .B bold |
| (bold or extra bright) |
| .B dim |
| (dim or half-bright) |
| .B invis |
| (blanking or invisible text) |
| .B prot |
| (protected) |
| .B rev |
| (reverse video) |
| .B sgr0 |
| (turn off |
| .I all |
| attribute modes) |
| .B smacs |
| (enter alternate character set mode) |
| and |
| .B rmacs |
| (exit alternate character set mode). |
| Turning on any of these modes singly may or may not turn off other modes. |
| .PP |
| If there is a sequence to set arbitrary combinations of modes, |
| this should be given as |
| .B sgr |
| (set attributes), |
| taking 9 parameters. |
| Each parameter is either zero (0) or nonzero, |
| as the corresponding attribute is on or off. |
| The 9 parameters are, in order: |
| standout, underline, reverse, blink, dim, bold, blank, protect, alternate |
| character set. |
| Not all modes need be supported by |
| .BR sgr , |
| only those for which corresponding separate attribute commands exist. |
| .PP |
| For example, the DEC vt220 supports most of the modes: |
| .PP |
| .TS |
| center; |
| lb lb lb |
| l l l . |
| tparm Parameter Attribute Escape Sequence |
| _ |
| none none \eE[0m |
| p1 standout \eE[0;1;7m |
| p2 underline \eE[0;4m |
| p3 reverse \eE[0;7m |
| p4 blink \eE[0;5m |
| p5 dim not available |
| p6 bold \eE[0;1m |
| p7 invis \eE[0;8m |
| p8 protect not used |
| p9 altcharset \*^O (off) \*^N (on) |
| .TE |
| .PP |
| We begin each escape sequence by turning off any existing modes, since |
| there is no quick way to determine whether they are active. |
| Standout is set up to be the combination of reverse and bold. |
| The vt220 terminal has a protect mode, |
| though it is not commonly used in sgr |
| because it protects characters on the screen from the host's erasures. |
| The altcharset mode also is different in that it is either \*^O or \*^N, |
| depending on whether it is off or on. |
| If all modes are turned on, the resulting sequence is \eE[0;1;4;5;7;8m\*^N. |
| .PP |
| Some sequences are common to different modes. |
| For example, ;7 is output when either p1 or p3 is true, that is, if |
| either standout or reverse modes are turned on. |
| .PP |
| Writing out the above sequences, along with their dependencies yields |
| .PP |
| .ne 11 |
| .TS |
| center; |
| lb lb lb |
| l l l . |
| Sequence When to Output terminfo Translation |
| _ |
| \eE[0 always \eE[0 |
| ;1 if p1 or p6 %?%p1%p6%|%t;1%; |
| ;4 if p2 %?%p2%|%t;4%; |
| ;5 if p4 %?%p4%|%t;5%; |
| ;7 if p1 or p3 %?%p1%p3%|%t;7%; |
| ;8 if p7 %?%p7%|%t;8%; |
| m always m |
| \*^N or \*^O if p9 \*^N, else \*^O %?%p9%t\*^N%e\*^O%; |
| .TE |
| .PP |
| Putting this all together into the sgr sequence gives: |
| .PP |
| .EX |
| sgr=\eE[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%; |
| %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\e016%e\e017%;, |
| .EE |
| .PP |
| Remember that if you specify sgr, you must also specify sgr0. |
| Also, some implementations rely on sgr being given if sgr0 is, |
| Not all terminfo entries necessarily have an sgr string, however. |
| Many terminfo entries are derived from termcap entries |
| which have no sgr string. |
| The only drawback to adding an sgr string is that termcap also |
| assumes that sgr0 does not exit alternate character set mode. |
| .PP |
| Terminals with the \*(``magic cookie\*('' glitch |
| .RB ( xmc ) |
| deposit special \*(``cookies\*('' when they receive mode-setting sequences, |
| which affect the display algorithm rather than having extra bits for |
| each character. |
| Some terminals, such as the HP 2621, automatically leave standout |
| mode when they move to a new line or the cursor is addressed. |
| Programs using standout mode should exit standout mode before |
| moving the cursor or sending a newline, |
| unless the |
| .B msgr |
| capability, asserting that it is safe to move in standout mode, is present. |
| .PP |
| If the terminal has |
| a way of flashing the screen to indicate an error quietly (a bell replacement) |
| then this can be given as \fBflash\fP; it must not move the cursor. |
| .PP |
| If the cursor needs to be made more visible than normal when it is |
| not on the bottom line (to make, for example, a non-blinking underline into an |
| easier to find block or blinking underline) |
| give this sequence as |
| .BR cvvis . |
| If there is a way to make the cursor completely invisible, give that as |
| .BR civis . |
| The capability |
| .B cnorm |
| should be given which undoes the effects of both of these modes. |
| .PP |
| If your terminal correctly generates underlined characters |
| (with no special codes needed) |
| even though it does not overstrike, |
| then you should give the capability \fBul\fP. |
| If a character overstriking another leaves both characters on the screen, |
| specify the capability \fBos\fP. |
| If overstrikes are erasable with a blank, |
| then this should be indicated by giving \fBeo\fP. |
| .SS "Keypad and Function Keys" |
| If the terminal has a keypad that transmits codes when the keys are pressed, |
| this information can be given. |
| Note that it is not possible to handle |
| terminals where the keypad only works in local (this applies, for example, |
| to the unshifted HP 2621 keys). |
| If the keypad can be set to transmit or not transmit, |
| give these codes as \fBsmkx\fP and \fBrmkx\fP. |
| Otherwise the keypad is assumed to always transmit. |
| .PP |
| The codes sent by the left arrow, right arrow, up arrow, down arrow, |
| and home keys can be given as |
| \fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fP respectively. |
| If there are function keys such as f0, f1, ..., f10, the codes they send |
| can be given as \fBkf0, kf1, ..., kf10\fP. |
| If these keys have labels other than the default f0 through f10, the labels |
| can be given as \fBlf0, lf1, ..., lf10\fP. |
| .PP |
| The codes transmitted by certain other special keys can be given: |
| .bP |
| .B kll |
| (home down), |
| .bP |
| .B kbs |
| (backspace), |
| .bP |
| .B ktbc |
| (clear all tabs), |
| .bP |
| .B kctab |
| (clear the tab stop in this column), |
| .bP |
| .B kclr |
| (clear screen or erase key), |
| .bP |
| .B kdch1 |
| (delete character), |
| .bP |
| .B kdl1 |
| (delete line), |
| .bP |
| .B krmir |
| (exit insert mode), |
| .bP |
| .B kel |
| (clear to end of line), |
| .bP |
| .B ked |
| (clear to end of screen), |
| .bP |
| .B kich1 |
| (insert character or enter insert mode), |
| .bP |
| .B kil1 |
| (insert line), |
| .bP |
| .B knp |
| (next page), |
| .bP |
| .B kpp |
| (previous page), |
| .bP |
| .B kind |
| (scroll forward/down), |
| .bP |
| .B kri |
| (scroll backward/up), |
| .bP |
| .B khts |
| (set a tab stop in this column). |
| .PP |
| In addition, if the keypad has a 3 by 3 array of keys including the four |
| arrow keys, the other five keys can be given as |
| .BR ka1 , |
| .BR ka3 , |
| .BR kb2 , |
| .BR kc1 , |
| and |
| .BR kc3 . |
| These keys are useful when the effects of a 3 by 3 directional pad are needed. |
| .PP |
| Strings to program function keys can be given as |
| .BR pfkey , |
| .BR pfloc , |
| and |
| .BR pfx . |
| A string to program screen labels should be specified as \fBpln\fP. |
| Each of these strings takes two parameters: the function key number to |
| program (from 0 to 10) and the string to program it with. |
| Function key numbers out of this range may program undefined keys in |
| a terminal dependent manner. |
| The difference between the capabilities is that |
| .B pfkey |
| causes pressing the given key to be the same as the user typing the |
| given string; |
| .B pfloc |
| causes the string to be executed by the terminal in local; and |
| .B pfx |
| causes the string to be transmitted to the computer. |
| .PP |
| The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP |
| define the number of programmable |
| screen labels and their width and height. |
| If there are commands to turn the labels on and off, |
| give them in \fBsmln\fP and \fBrmln\fP. |
| \fBsmln\fP is normally output after one or more pln |
| sequences to make sure that the change becomes visible. |
| .SS "Tabs and Initialization" |
| A few capabilities are used only for tabs: |
| .bP |
| If the terminal has hardware tabs, the command to advance to the next |
| tab stop can be given as |
| .B ht |
| (usually control/I). |
| .bP |
| A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can |
| be given as |
| .BR cbt . |
| .IP |
| By convention, if the teletype modes indicate that tabs are being |
| expanded by the computer rather than being sent to the terminal, |
| programs should not use |
| .B ht |
| or |
| .B cbt |
| even if they are present, since the user may not have the tab stops |
| properly set. |
| .bP |
| If the terminal has hardware tabs which are initially set every |
| .I n |
| spaces when the terminal is powered up, |
| the numeric parameter |
| .B it |
| is given, showing the number of spaces the tabs are set to. |
| .IP |
| The \fBit\fP capability is normally used by the \fB@TSET@\fP |
| command to determine whether to set the mode for hardware tab expansion, |
| and whether to set the tab stops. |
| If the terminal has tab stops that can be saved in non-volatile memory, |
| the terminfo description can assume that they are properly set. |
| .PP |
| Other capabilities |
| include |
| .bP |
| .BR is1 , |
| .BR is2 , |
| and |
| .BR is3 , |
| initialization strings for the terminal, |
| .bP |
| .BR iprog , |
| the path name of a program to be run to initialize the terminal, |
| .bP |
| and \fBif\fP, the name of a file containing long initialization strings. |
| .PP |
| These strings are expected to set the terminal into modes consistent |
| with the rest of the terminfo description. |
| They are normally sent to the terminal, by the |
| .I init |
| option of the \fB@TPUT@\fP program, each time the user logs in. |
| They will be printed in the following order: |
| .RS |
| .TP |
| run the program |
| .B iprog |
| .TP |
| output |
| .br |
| \fBis1\fP and |
| .br |
| \fBis2\fP |
| .TP |
| set the margins using |
| \fBmgc\fP or |
| .br |
| \fBsmglp\fP and \fBsmgrp\fP or |
| .br |
| \fBsmgl\fP and \fBsmgr\fP |
| .TP |
| set tabs using |
| .B tbc |
| and |
| .B hts |
| .TP |
| print the file |
| \fBif\fP |
| .TP |
| and finally output |
| \fBis3\fP. |
| .RE |
| .PP |
| Most initialization is done with |
| .BR is2 . |
| Special terminal modes can be set up without duplicating strings |
| by putting the common sequences in |
| .B is2 |
| and special cases in |
| .B is1 |
| and |
| .BR is3 . |
| .PP |
| A set of sequences that does a harder reset from a totally unknown state |
| can be given as |
| .BR rs1 , |
| .BR rs2 , |
| .B rf |
| and |
| .BR rs3 , |
| analogous to |
| .B is1 , |
| .B is2 , |
| .B if |
| and |
| .B is3 |
| respectively. |
| These strings are output |
| by \fIreset\fP option of \fB@TPUT@\fP, |
| or by the \fB@RESET@\fP program |
| (an alias of \fB@TSET@\fP), |
| which is used when the terminal gets into a wedged state. |
| Commands are normally placed in |
| .BR rs1 , |
| .B rs2 |
| .B rs3 |
| and |
| .B rf |
| only if they produce annoying effects on the screen and are not |
| necessary when logging in. |
| For example, the command to set the vt100 into 80-column mode would |
| normally be part of |
| .BR is2 , |
| but it causes an annoying glitch of the screen and is not normally |
| needed since the terminal is usually already in 80-column mode. |
| .PP |
| The \fB@RESET@\fP program writes strings including |
| .BR iprog , |
| etc., in the same order as the |
| .I init |
| program, using |
| .BR rs1 , |
| etc., instead of |
| .BR is1 , |
| etc. |
| If any of |
| .BR rs1 , |
| .BR rs2 , |
| .BR rs3 , |
| or |
| .B rf |
| reset capability strings are missing, |
| the \fB@RESET@\fP program |
| falls back upon the corresponding initialization capability string. |
| .PP |
| If there are commands to set and clear tab stops, they can be given as |
| .B tbc |
| (clear all tab stops) |
| and |
| .B hts |
| (set a tab stop in the current column of every row). |
| If a more complex sequence is needed to set the tabs than can be |
| described by this, the sequence can be placed in |
| .B is2 |
| or |
| .BR if . |
| .PP |
| The \fB@TPUT@ reset\fP command uses the same capability strings |
| as the \fB@RESET@\fP command, |
| although the two programs (\fB@TPUT@\fP and \fB@RESET@\fP) |
| provide different command-line options. |
| .PP |
| In practice, these terminfo capabilities are not often used in |
| initialization of tabs |
| (though they are required for the \fB@TABS@\fP program): |
| .bP |
| Almost all hardware terminals (at least those which supported tabs) |
| initialized those to every \fIeight\fP columns: |
| .IP |
| The only exception was the AT&T 2300 series, |
| which set tabs to every \fIfive\fP columns. |
| .bP |
| In particular, developers of the hardware terminals which are commonly used |
| as models for modern terminal emulators provided documentation demonstrating |
| that \fIeight\fP columns were the standard. |
| .bP |
| Because of this, the terminal initialization programs |
| \fB@TPUT@\fP and \fB@TSET@\fP |
| use the |
| \fBtbc\fP (\fBclear_all_tabs\fP) and |
| \fBhts\fP (\fBset_tab\fP) capabilities directly |
| only when the \fBit\fP (\fBinit_tabs\fP) capability |
| is set to a value other than \fIeight\fP. |
| .SS "Delays and Padding" |
| Many older and slower terminals do not support either XON/XOFF or DTR |
| handshaking, including hard copy terminals and some very archaic CRTs |
| (including, for example, DEC VT100s). |
| These may require padding characters |
| after certain cursor motions and screen changes. |
| .PP |
| If the terminal uses xon/xoff handshaking for flow control (that is, |
| it automatically emits \*^S back to the host when its input buffers are |
| close to full), set |
| .BR xon . |
| This capability suppresses the emission of padding. |
| You can also set it |
| for memory-mapped console devices effectively that do not have a speed limit. |
| Padding information should still be included so that routines can |
| make better decisions about relative costs, but actual pad characters will |
| not be transmitted. |
| .PP |
| If \fBpb\fP (padding baud rate) is given, padding is suppressed at baud rates |
| below the value of \fBpb\fP. |
| If the entry has no padding baud rate, then |
| whether padding is emitted or not is completely controlled by \fBxon\fP. |
| .PP |
| If the terminal requires other than a null (zero) character as a pad, |
| then this can be given as \fBpad\fP. |
| Only the first character of the |
| .B pad |
| string is used. |
| .SS "Status Lines" |
| Some terminals have an extra \*(``status line\*('' which is not normally used by |
| software (and thus not counted in the terminal's \fBlines\fP capability). |
| .PP |
| The simplest case is a status line which is cursor-addressable but not |
| part of the main scrolling region on the screen; the Heathkit H19 has |
| a status line of this kind, as would a 24-line VT100 with a 23-line |
| scrolling region set up on initialization. |
| This situation is indicated |
| by the \fBhs\fP capability. |
| .PP |
| Some terminals with status lines need special sequences to access the |
| status line. |
| These may be expressed as a string with single parameter |
| \fBtsl\fP which takes the cursor to a given zero-origin column on the |
| status line. |
| The capability \fBfsl\fP must return to the main-screen |
| cursor positions before the last \fBtsl\fP. |
| You may need to embed the |
| string values of \fBsc\fP (save cursor) and \fBrc\fP (restore cursor) |
| in \fBtsl\fP and \fBfsl\fP to accomplish this. |
| .PP |
| The status line is normally assumed to be the same width as the width |
| of the terminal. |
| If this is untrue, you can specify it with the numeric |
| capability \fBwsl\fP. |
| .PP |
| A command to erase or blank the status line may be specified as \fBdsl\fP. |
| .PP |
| The Boolean capability \fBeslok\fP specifies that escape sequences, tabs, |
| etc., work ordinarily in the status line. |
| .PP |
| The \fI\%ncurses\fP implementation does not yet use any of these |
| capabilities. |
| They are documented here in case they ever become important. |
| .SS "Line Graphics" |
| Many terminals have alternate character sets useful for forms-drawing. |
| Terminfo and \fBcurses\fP have built-in support |
| for most of the drawing characters |
| supported by the VT100, with some characters from the AT&T 4410v1 added. |
| This alternate character set may be specified by the \fBacsc\fP capability. |
| .PP |
| .TS |
| center; |
| Lb Cb S L Lb |
| Lb2 Lb2 Lb Lb1 S |
| Lb L C Lb Lx. |
| \& acsc \& \& |
| ACS Name Value Symbol ASCII Fallback / Glyph Name |
| _ |
| ACS_RARROW 0x2b + > arrow pointing right |
| ACS_LARROW 0x2c , < arrow pointing left |
| ACS_UARROW 0x2d \- \*^ arrow pointing up |
| ACS_DARROW 0x2e . v arrow pointing down |
| ACS_BLOCK 0x30 0 # solid square block |
| ACS_DIAMOND 0x60 \(ga + diamond |
| ACS_CKBOARD 0x61 a : checker board (stipple) |
| ACS_DEGREE 0x66 f \e degree symbol |
| ACS_PLMINUS 0x67 g # plus/minus |
| ACS_BOARD 0x68 h # board of squares |
| ACS_LANTERN 0x69 i # lantern symbol |
| ACS_LRCORNER 0x6a j + lower right corner |
| ACS_URCORNER 0x6b k + upper right corner |
| ACS_ULCORNER 0x6c l + upper left corner |
| ACS_LLCORNER 0x6d m + lower left corner |
| ACS_PLUS 0x6e n + large plus or crossover |
| ACS_S1 0x6f o \*~ scan line 1 |
| ACS_S3 0x70 p \- scan line 3 |
| ACS_HLINE 0x71 q \- horizontal line |
| ACS_S7 0x72 r \- scan line 7 |
| ACS_S9 0x73 s \&_ scan line 9 |
| ACS_LTEE 0x74 t + tee pointing right |
| ACS_RTEE 0x75 u + tee pointing left |
| ACS_BTEE 0x76 v + tee pointing up |
| ACS_TTEE 0x77 w + tee pointing down |
| ACS_VLINE 0x78 x | vertical line |
| ACS_LEQUAL 0x79 y < less-than-or-equal-to |
| ACS_GEQUAL 0x7a z > greater-than-or-equal-to |
| ACS_PI 0x7b { * greek pi |
| ACS_NEQUAL 0x7c | ! not-equal |
| ACS_STERLING 0x7d } f UK pound sign |
| ACS_BULLET 0x7e \*~ o bullet |
| .TE |
| .PP |
| A few notes apply to the table itself: |
| .bP |
| X/Open Curses incorrectly states that the mapping for \fIlantern\fP is |
| uppercase \*(``I\*('' although Unix implementations use the |
| lowercase \*(``i\*('' mapping. |
| .bP |
| The DEC VT100 implemented graphics using the alternate character set |
| feature, temporarily switching \fImodes\fP and sending characters |
| in the range 0x60 (96) to 0x7e (126) |
| (the \fBacsc Value\fP column in the table). |
| .bP |
| The AT&T terminal added graphics characters outside that range. |
| .IP |
| Some of the characters within the range do not match the VT100; |
| presumably they were used in the AT&T terminal: |
| \fIboard of squares\fP replaces the VT100 \fInewline\fP symbol, while |
| \fIlantern symbol\fP replaces the VT100 \fIvertical tab\fP symbol. |
| The other VT100 symbols for control characters (\fIhorizontal tab\fP, |
| \fIcarriage return\fP and \fIline-feed\fP) are not (re)used in curses. |
| .PP |
| The best way to define a new device's graphics set is to add a column |
| to a copy of this table for your terminal, giving the character which |
| (when emitted between \fBsmacs\fP/\fBrmacs\fP switches) will be rendered |
| as the corresponding graphic. |
| Then read off the VT100/your terminal |
| character pairs right to left in sequence; these become the ACSC string. |
| .SS "Color Handling" |
| The curses library functions \fBinit_pair\fP and \fBinit_color\fP |
| manipulate the \fIcolor pairs\fP and \fIcolor values\fP discussed in this |
| section |
| (see \fBcurs_color\fP(3X) for details on these and related functions). |
| .PP |
| Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*('': |
| .bP |
| Tektronix-like |
| terminals have a predefined set of \fIN\fP colors |
| (where \fIN\fP is usually 8), |
| and can set |
| character-cell foreground and background characters independently, mixing them |
| into \fIN\fP\ *\ \fIN\fP color pairs. |
| .bP |
| On HP-like terminals, the user must set each color |
| pair up separately (foreground and background are not independently settable). |
| Up to \fIM\fP color pairs may be set up from 2*\fIM\fP different colors. |
| ANSI-compatible terminals are Tektronix-like. |
| .PP |
| Some basic color capabilities are independent of the color method. |
| The numeric |
| capabilities \fBcolors\fP and \fBpairs\fP specify the maximum numbers of colors |
| and color pairs that can be displayed simultaneously. |
| The \fBop\fP (original |
| pair) string resets foreground and background colors to their default values |
| for the terminal. |
| The \fBoc\fP string resets all colors or color pairs to |
| their default values for the terminal. |
| Some terminals (including many PC |
| terminal emulators) erase screen areas with the current background color rather |
| than the power-up default background; these should have the Boolean capability |
| \fBbce\fP. |
| .PP |
| While the curses library works with \fIcolor pairs\fP |
| (reflecting the inability of some devices to set foreground |
| and background colors independently), |
| there are separate capabilities for setting these features: |
| .bP |
| To change the current foreground or background color on a Tektronix-type |
| terminal, use \fBsetaf\fP (set ANSI foreground) and \fBsetab\fP (set ANSI |
| background) or \fBsetf\fP (set foreground) and \fBsetb\fP (set background). |
| These take one parameter, the color number. |
| The SVr4 documentation describes |
| only \fBsetaf\fP/\fBsetab\fP; the XPG4 draft says that "If the terminal |
| supports ANSI escape sequences to set background and foreground, they should |
| be coded as \fBsetaf\fP and \fBsetab\fP, respectively. |
| .bP |
| If the terminal |
| supports other escape sequences to set background and foreground, they should |
| be coded as \fBsetf\fP and \fBsetb\fP, respectively. |
| The \fBvidputs\fP and the \fBrefresh\fP(3X) functions |
| use the \fBsetaf\fP and \fBsetab\fP capabilities if they are defined. |
| .PP |
| The \fBsetaf\fP/\fBsetab\fP and \fBsetf\fP/\fBsetb\fP capabilities take a |
| single numeric argument each. |
| Argument values 0-7 of \fBsetaf\fP/\fBsetab\fP are portably defined as |
| follows (the middle column is the symbolic #define available in the header for |
| the \fBcurses\fP or \fI\%ncurses\fP libraries). |
| The terminal hardware is free to |
| map these as it likes, but the RGB values indicate normal locations in color |
| space. |
| .PP |
| .TS |
| center; |
| cb cb cb cb s s |
| l lb c l1 l1 l . |
| Color #define Value RGB |
| _ |
| black COLOR_BLACK 0 0, 0, 0 |
| red COLOR_RED 1 max, 0, 0 |
| green COLOR_GREEN 2 0, max, 0 |
| yellow COLOR_YELLOW 3 max, max, 0 |
| blue COLOR_BLUE 4 0, 0, max |
| magenta COLOR_MAGENTA 5 max, 0, max |
| cyan COLOR_CYAN 6 0, max, max |
| white COLOR_WHITE 7 max, max, max |
| .TE |
| .br |
| .if t .ne 6v |
| .PP |
| The argument values of \fBsetf\fP/\fBsetb\fP historically correspond to |
| a different mapping, i.e., |
| .PP |
| .TS |
| center; |
| cb cb cb cb s s |
| l lb c l1 l1 l . |
| Color #define Value RGB |
| _ |
| black COLOR_BLACK 0 0, 0, 0 |
| blue COLOR_BLUE 1 0, 0, max |
| green COLOR_GREEN 2 0, max, 0 |
| cyan COLOR_CYAN 3 0, max, max |
| red COLOR_RED 4 max, 0, 0 |
| magenta COLOR_MAGENTA 5 max, 0, max |
| yellow COLOR_YELLOW 6 max, max, 0 |
| white COLOR_WHITE 7 max, max, max |
| .TE |
| .PP |
| It is important to not confuse the two sets of color capabilities; |
| otherwise red/blue will be interchanged on the display. |
| .PP |
| On an HP-like terminal, use \fBscp\fP with a color pair number parameter to set |
| which color pair is current. |
| .PP |
| Some terminals allow the \fIcolor values\fP to be modified: |
| .bP |
| On a Tektronix-like terminal, the capability \fBccc\fP may be present to |
| indicate that colors can be modified. |
| If so, the \fBinitc\fP capability will |
| take a color number (0 to \fBcolors\fP \- 1)and three more parameters which |
| describe the color. |
| These three parameters default to being interpreted as RGB |
| (Red, Green, Blue) values. |
| If the Boolean capability \fBhls\fP is present, |
| they are instead as HLS (Hue, Lightness, Saturation) indices. |
| The ranges are |
| terminal-dependent. |
| .bP |
| On an HP-like terminal, \fBinitp\fP may give a capability for changing a |
| color pair value. |
| It will take seven parameters; a color pair number (0 to |
| \fBmax_pairs\fP \- 1), and two triples describing first background and then |
| foreground colors. |
| These parameters must be (Red, Green, Blue) or |
| (Hue, Lightness, Saturation) depending on \fBhls\fP. |
| .PP |
| On some color terminals, colors collide with highlights. |
| You can register |
| these collisions with the \fBncv\fP capability. |
| This is a bit mask of |
| attributes not to be used when colors are enabled. |
| The correspondence with the |
| attributes understood by \fBcurses\fP is as follows: |
| .PP |
| .TS |
| center; |
| cb cb cb cb |
| lb n n lb. |
| Attribute Bit Decimal Set by |
| _ |
| A_STANDOUT 0 1 sgr |
| A_UNDERLINE 1 2 sgr |
| A_REVERSE 2 4 sgr |
| A_BLINK 3 8 sgr |
| A_DIM 4 16 sgr |
| A_BOLD 5 32 sgr |
| A_INVIS 6 64 sgr |
| A_PROTECT 7 128 sgr |
| A_ALTCHARSET 8 256 sgr |
| A_HORIZONTAL 9 512 sgr1 |
| A_LEFT 10 1024 sgr1 |
| A_LOW 11 2048 sgr1 |
| A_RIGHT 12 4096 sgr1 |
| A_TOP 13 8192 sgr1 |
| A_VERTICAL 14 16384 sgr1 |
| A_ITALIC 15 32768 sitm |
| .TE |
| .PP |
| For example, on many IBM PC consoles, the underline attribute collides with the |
| foreground color blue and is not available in color mode. |
| These should have |
| an \fBncv\fP capability of 2. |
| .PP |
| SVr4 curses does nothing with \fBncv\fP, |
| \fI\%ncurses\fP recognizes it and optimizes |
| the output in favor of colors. |
| .SS Miscellaneous |
| If the terminal requires other than a null (zero) character as a pad, then this |
| can be given as pad. |
| Only the first character of the pad string is used. |
| If the terminal does not have a pad character, specify npc. |
| Note that \fI\%ncurses\fP implements the termcap-compatible \fBPC\fP |
| variable; |
| though the application may set this value to something other than |
| a null, |
| \fI\%ncurses\fP will test \fBnpc\fP first and use napms if the terminal |
| has no pad character. |
| .PP |
| If the terminal can move up or down half a line, |
| this can be indicated with |
| .B hu |
| (half-line up) |
| and |
| .B hd |
| (half-line down). |
| This is primarily useful for superscripts and subscripts on hard-copy terminals. |
| If a hard-copy terminal can eject to the next page (form feed), give this as |
| .B ff |
| (usually control/L). |
| .PP |
| If there is a command to repeat a given character a given number of |
| times (to save time transmitting a large number of identical characters) |
| this can be indicated with the parameterized string |
| .BR rep . |
| The first parameter is the character to be repeated and the second |
| is the number of times to repeat it. |
| Thus, tparm(repeat_char, \*'x\*', 10) is the same as \*(``xxxxxxxxxx\*(''. |
| .PP |
| If the terminal has a settable command character, |
| such as the \s-1TEKTRONIX\s+1 4025, |
| this can be indicated with |
| .BR cmdch . |
| A prototype command character is chosen which is used in all capabilities. |
| This character is given in the |
| .B cmdch |
| capability to identify it. |
| The following convention is supported on some Unix systems: |
| The environment is to be searched for a |
| .B CC |
| variable, and if found, all |
| occurrences of the prototype character are replaced with the character |
| in the environment variable. |
| .PP |
| Terminal descriptions that do not represent a specific kind of known |
| terminal, such as |
| .IR switch , |
| .IR dialup , |
| .IR patch , |
| and |
| .IR network , |
| should include the |
| .B gn |
| (generic) capability so that programs can complain that they do not know |
| how to talk to the terminal. |
| (This capability does not apply to |
| .I virtual |
| terminal descriptions for which the escape sequences are known.) |
| .PP |
| If the terminal has a \*(``meta key\*('' which acts as a shift key, |
| setting the 8th bit of any character transmitted, this fact can |
| be indicated with |
| .BR km . |
| Otherwise, software will assume that the 8th bit is parity and it |
| will usually be cleared. |
| If strings exist to turn this \*(``meta mode\*('' on and off, they |
| can be given as |
| .B smm |
| and |
| .BR rmm . |
| .PP |
| If the terminal has more lines of memory than will fit on the screen |
| at once, the number of lines of memory can be indicated with |
| .BR lm . |
| A value of |
| .BR lm #0 |
| indicates that the number of lines is not fixed, |
| but that there is still more memory than fits on the screen. |
| .PP |
| If the terminal is one of those supported by the Unix virtual |
| terminal protocol, the terminal number can be given as |
| .BR vt . |
| .PP |
| Media copy |
| strings which control an auxiliary printer connected to the terminal |
| can be given as |
| .BR mc0 : |
| print the contents of the screen, |
| .BR mc4 : |
| turn off the printer, and |
| .BR mc5 : |
| turn on the printer. |
| When the printer is on, all text sent to the terminal will be sent |
| to the printer. |
| It is undefined whether the text is also displayed on the terminal screen |
| when the printer is on. |
| A variation |
| .B mc5p |
| takes one parameter, and leaves the printer on for as many characters |
| as the value of the parameter, then turns the printer off. |
| The parameter should not exceed 255. |
| All text, including |
| .BR mc4 , |
| is transparently passed to the printer while an |
| .B mc5p |
| is in effect. |
| .SS "Glitches and Brain Damage" |
| Hazeltine terminals, |
| which do not allow \*(``\*~\*('' characters to be displayed should |
| indicate \fBhz\fP. |
| .PP |
| Terminals which ignore a line-feed immediately after an \fBam\fP wrap, |
| such as the Concept and vt100, |
| should indicate \fBxenl\fP. |
| .PP |
| If |
| .B el |
| is required to get rid of standout |
| (instead of merely writing normal text on top of it), |
| \fBxhp\fP should be given. |
| .PP |
| Teleray terminals, where tabs turn all characters moved over to blanks, |
| should indicate \fBxt\fP (destructive tabs). |
| Note: the variable indicating this is now \*(``dest_tabs_magic_smso\*(''; in |
| older versions, it was teleray_glitch. |
| This glitch is also taken to mean that it is not possible to position |
| the cursor on top of a \*(``magic cookie\*('', |
| that to erase standout mode it is instead necessary to use |
| delete and insert line. |
| The \fI\%ncurses\fP implementation ignores this glitch. |
| .PP |
| The Beehive Superbee, which is unable to correctly transmit the escape |
| or control/C characters, has |
| .BR xsb , |
| indicating that the f1 key is used for escape and f2 for control/C. |
| (Only certain Superbees have this problem, depending on the ROM.) |
| Note that in older terminfo versions, this capability was called |
| \*(``beehive_glitch\*(''; it is now \*(``no_esc_ctl_c\*(''. |
| .PP |
| Other specific terminal problems may be corrected by adding more |
| capabilities of the form \fBx\fIx\fR. |
| .SS "Pitfalls of Long Entries" |
| Long terminfo entries are unlikely to be a problem; to date, no entry has even |
| approached terminfo's 4096-byte string-table maximum. |
| Unfortunately, the termcap |
| translations are much more strictly limited (to 1023 bytes), |
| thus termcap translations of long terminfo entries can cause problems. |
| .PP |
| The man pages for 4.3BSD |
| and older versions of \fBtgetent\fP instruct the user to |
| allocate a 1024-byte buffer for the termcap entry. |
| The entry gets null-terminated by |
| the termcap library, so that makes the maximum safe length for a termcap entry |
| 1k\-1 (1023) bytes. |
| Depending on what the application and the termcap library being used does, |
| and where in the termcap file the terminal type that \fBtgetent\fP |
| is searching for is, several bad things can happen: |
| .bP |
| some termcap libraries print a warning message, |
| .bP |
| some exit if they find an entry that's longer than 1023 bytes, |
| .bP |
| some neither exit nor warn, doing nothing useful, and |
| .bP |
| some simply truncate the entries to 1023 bytes. |
| .PP |
| Some application programs allocate more than |
| the recommended 1K for the termcap entry; others do not. |
| .PP |
| Each termcap entry has two important sizes associated with it: before |
| \*(``tc\*('' expansion, and after \*(``tc\*('' expansion. |
| \*(``tc\*('' is the capability that |
| tacks on another termcap entry to the end of the current one, to add |
| on its capabilities. |
| If a termcap entry does not use the \*(``tc\*('' |
| capability, then of course the two lengths are the same. |
| .PP |
| The \*(``before tc expansion\*('' length is the most important one, because it |
| affects more than just users of that particular terminal. |
| This is the |
| length of the entry as it exists in /etc/termcap, minus the |
| backslash-newline pairs, which \fBtgetent\fP strips out while reading it. |
| Some termcap libraries strip off the final newline, too (GNU termcap does not). |
| Now suppose: |
| .bP |
| a termcap entry before expansion is more than 1023 bytes long, |
| .bP |
| and the application has only allocated a 1k buffer, |
| .bP |
| and the termcap library (like the one in BSD/OS 1.1 and GNU) reads |
| the whole entry into the buffer, no matter what its length, to see |
| if it is the entry it wants, |
| .bP |
| and \fBtgetent\fP is searching for a terminal type that either is the |
| long entry, appears in the termcap file after the long entry, or |
| does not appear in the file at all (so that \fBtgetent\fP has to search |
| the whole termcap file). |
| .PP |
| Then \fBtgetent\fP will overwrite memory, |
| perhaps its stack, |
| and probably core dump the program. |
| Programs like telnet are particularly vulnerable; modern telnets |
| pass along values like the terminal type automatically. |
| The results are almost |
| as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that |
| prints warning messages when it reads an overly long termcap entry. |
| If a |
| termcap library truncates long entries, like OSF/1 3.0, it is immune to dying |
| here but will return incorrect data for the terminal. |
| .PP |
| The \*(``after tc expansion\*('' length will have a similar effect to the |
| above, but only for people who actually set \fITERM\fP to that terminal |
| type, since \fBtgetent\fP only does \*(``tc\*('' expansion once it is found the |
| terminal type it was looking for, not while searching. |
| .PP |
| In summary, a termcap entry that is longer than 1023 bytes can cause, |
| on various combinations of termcap libraries and applications, a core |
| dump, warnings, or incorrect operation. |
| If it is too long even before |
| \*(``tc\*('' expansion, it will have this effect even for users of some other |
| terminal types and users whose \fITERM\fP variable does not have a termcap |
| entry. |
| .PP |
| When in \-C (translate to termcap) mode, |
| the \fI\%ncurses\fP implementation of |
| \fB@TIC@\fP(1M) issues warning messages when the pre-tc length of a termcap |
| translation is too long. |
| The \-c (check) option also checks resolved (after tc |
| expansion) lengths. |
| .SH FILES |
| .TP |
| .I \*d |
| compiled terminal description database directory |
| .SH EXTENSIONS |
| Searching for terminal descriptions in |
| \fI$HOME/.terminfo\fP and \fI\%TERMINFO_DIRS\fP |
| is not supported by older implementations. |
| .PP |
| Some SVr4 \fBcurses\fP implementations, and all previous to SVr4, do not |
| interpret the %A and %O operators in parameter strings. |
| .PP |
| SVr4/XPG4 do not specify whether \fBmsgr\fP licenses movement while in |
| an alternate-character-set mode (such modes may, among other things, map |
| CR and NL to characters that do not trigger local motions). |
| The \fI\%ncurses\fP implementation ignores \fBmsgr\fP in |
| \fBALTCHARSET\fP mode. |
| This raises the possibility that an XPG4 |
| implementation making the opposite interpretation may need terminfo |
| entries made for \fI\%ncurses\fP to have \fBmsgr\fP turned off. |
| .PP |
| The \fI\%ncurses\fP library handles insert-character and |
| insert-character modes in a slightly non-standard way to get better |
| update efficiency. |
| See |
| the \fBInsert/Delete Character\fP subsection above. |
| .PP |
| The parameter substitutions for \fBset_clock\fP and \fBdisplay_clock\fP are |
| not documented in SVr4 or X/Open Curses. |
| They are deduced from the |
| documentation for the AT&T 505 terminal. |
| .PP |
| Be careful assigning the \fBkmous\fP capability. |
| The \fI\%ncurses\fP library wants to interpret it as \fBKEY_MOUSE\fP, |
| for use by terminals and emulators like xterm |
| that can return mouse-tracking information in the keyboard-input stream. |
| .PP |
| X/Open Curses does not mention italics. |
| Portable applications must assume that numeric capabilities are |
| signed 16-bit values. |
| This includes the \fIno_color_video\fP (\fBncv\fP) capability. |
| The 32768 mask value used for italics with \fBncv\fP can be confused with |
| an absent or cancelled \fBncv\fP. |
| If italics should work with colors, |
| then the \fBncv\fP value must be specified, even if it is zero. |
| .PP |
| Different commercial ports of \fI\%terminfo\fP and \fIcurses\fP support |
| different subsets of X/Open Curses and |
| (in some cases) |
| different extensions. |
| Here is a summary, |
| accurate as of October 1995, |
| after which the commercial Unix market contracted and lost diversity. |
| .bP |
| SVr4, |
| Solaris, |
| and \fI\%ncurses\fP support all SVr4 capabilities. |
| .bP |
| IRIX supports the SVr4 set and adds one undocumented extended string |
| capability (\fB\%set_pglen\fP). |
| .bP |
| SVr1 and Ultrix support a restricted subset of \fI\%terminfo\fP |
| capabilities. |
| The Booleans end with \fB\%xon_xoff\fP; |
| the numerics with \fB\%width_status_line\fP; |
| and the strings with \fB\%prtr_non\fP. |
| .bP |
| HP/UX supports the SVr1 subset, |
| plus the SVr[234] numerics |
| \fB\%num_labels\fP, |
| \fB\%label_height\fP, |
| \fB\%label_width\fP, |
| plus function keys 11 through 63, |
| plus |
| \fB\%plab_norm\fP, |
| \fB\%label_on\fP, |
| and |
| \fB\%label_off\fP, |
| plus a number of incompatible string table extensions. |
| .bP |
| AIX supports the SVr1 subset, |
| plus function keys 11 through 63, |
| plus a number of incompatible string table extensions. |
| .bP |
| OSF/1 supports both the SVr4 set and the AIX extensions. |
| .SH PORTABILITY |
| Do not count on compiled (binary) \fI\%terminfo\fP entries being |
| portable between commercial Unix systems. |
| At least two implementations of \fI\%terminfo\fP |
| (those of HP-UX and AIX) |
| diverged from those of other System V Unices after SVr1, |
| adding extension capabilities to the string table that |
| (in the binary format) |
| collide with subsequent System V and X/Open Curses extensions. |
| .SH AUTHORS |
| Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey. |
| Based on \fIpcurses\fP by Pavel Curtis. |
| .SH SEE ALSO |
| \fB\%@INFOCMP@\fP(1M), |
| \fB\%@TABS@\fP(1), |
| \fB\%@TIC@\fP(1M), |
| \fB\%curses\fP(3X), |
| \fB\%curs_color\fP(3X), |
| \fB\%curs_terminfo\fP(3X), |
| \fB\%curs_variables\fP(3X), |
| \fB\%printf\fP(3), |
| \fB\%term_variables\fP(3X), |
| \fB\%term\fP(5), |
| \fB\%user_caps\fP(5) |