TERMINFO(4) (Terminal Information Utilities) TERMINFO(4) NAME terminfo - terminal capability data base SYNOPSIS /usr/lib/terminfo/?/* DESCRIPTION terminfo is a database, produced by tic(1M), that describes the capabilities of devices, e.g., terminals and printers. Devices are described in terminfo source files by specifying a set of capabilities, quantifying certain aspects of the device, and specifying character sequences that effect particular results. This database is often used by screen oriented applications, e.g., vi(1) and curses(3X), as well as by some operating system commands, e.g., ls(1) and pg(1). This usage allows them to work with a variety of devices without changes to the programs. To obtain the source description for a device, use the infocmp(1M) command. terminfo source files consist of one or more device descriptions. Each description consists of a header (beginning in column 1) and one or more lines that list the features for that particular device. Every line in a terminfo source file must end in a comma (,). Every line in a terminfo source file except the header must be indented with one or more white spaces (either spaces or tabs). Entries in terminfo source files consist of a number of comma-separated fields. White space after each comma is ignored. Embedded commas must be escaped by using a backslash. The following example shows the format of a terminfo source file: Column 1 v alias | alias | ... | alias | longname, am, lines #24, n home=Eeh, The first line, commonly referred to as the header line, must begin in column one and it must contain at least two aliases, separated by vertical bars. The last field in the header line must be the long name of the device and it may contain any string. Alias names must be unique in the terminfo database and they must conform to the operating system file naming conventions (see tic(1M)); they cannot, for example, contain white space or slashes. Every device must be assigned a name, e.g., "att5425" (for the AT&T model 5425 device). Choose device names (except the long name) that do not contain hyphens; hyphens are reserved for use when adding suffixes that indicate special modes. These special modes may be modes that the hardware can be in, or user preferences. To assign a special mode to a particular device, append a suffix, consisting of a hyphen and an indicator of the mode, to the device name. For example, the -w suffix means "wide mode"; when specified, it allows for a width of 132 columns instead of the standard 80 columns. Therefore, if you want to use an AT&T 5425 device set to wide mode, name the device "att5425-w." Use the following suffixes where possible: Suffix Meaning Example ______ ____________________________________ _________ -w Wide mode (more than 80 columns) 5410-w -am With auto. margins (usually default) vt100-am -nam Without automatic margins vt100-nam -n Number of lines on the screen 2300-40 -na No arrow keys (leave them in local) c100-na np Number of pages of memory c100-4p -rv Reverse video 4415-rv The terminfo reference manual page is organized in two sections: DEVICE CAPABILITIES and PRINTER CAPABILITIES. PART 1: DEVICE CAPABILITIES Capabilities in terminfo are of three types: Boolean capabilities (show that a device has or does not have a particular feature), numeric capabilities (quantify particular features of a device), and string capabilities (provide sequences that can be used to perform particular operations on devices). In the following tables, a Variable is the name by which a C programmer accesses a capability (at the terminfo level). A Capname is the short name for a capability specified in the terminfo source file. It is used by a person updating the source file and by the tput(1) command. A Termcap Code is a two-letter sequence that corresponds to the termcap capability name. (Note that termcap is no longer supported.) Capability names have no hard length limit, but an informal limit of five characters has been adopted to keep them short. Whenever possible, capability names are chosen to be the same as or similar to those specified by the ANSI X3.64-1979 standard. Semantics are also intended to match those of the ANSI standard. All the following string capabilities may have padding specified, with the exception of those used for input. Input capabilities, listed under the Strings section in the following tables, have names beginning with key_. The #i symbol in the description field of the following tables refers to the ith parameter. Booleans: Cap- Termcap _____ ________________________ _______ _________________________________________________ am auto_right_margin am Terminal has automatic margins bw auto_left_margin bw cub1 wraps from column 0 to last column ccc can_change cc Terminal can re-define existing color chts hard_cursor HC Cursor is hard to see cpix cpi_changes_res YF Changing character pitch changes resolution crxm cr_cancels_micro_modem YB Using cr turns off micro mode da memory_above da Display may be retained above the screen daisy has_print_wheel YC Printer needs operator to change character set db memory_below db Display may be retained below the screen eo erase_overstrike eo Can erase overstrikes with a blank eslok status_line_esc_ok es Escape can be used on the status line gn generic_type gn Generic line type (e.g., dialup, switch) hc hard_copy hc Hardcopy terminal hls hue_lightness_saturation hl Terminal uses only HLS color notation (Tektronix) hs has_status_line hs Has extra "status line" hz tilde_glitch hz Hazeltine; can't print tilde (~) in insert_null_glitch in Insert mode distinguishes nulls km has_meta_key km Has a meta key (shift, sets parity bit) lpix lpi_changes_res YG Changing line pitch changes resolution mc5i prtr_silent 5i Printer won't echo on screen mir move_insert_mode mi Safe to move while in insert mode msgr move_standout_mode ms Safe to move in standout modes npc no_pad_char NP Pad character doesn't exist nrrmc non_rev_rmcup NR smcup does not reverse rmcup nxon needs_xon_xoff nx Padding won't work, xon/xoff required os over_strike os Terminal overstrikes on hard-copy terminal sam semi_auto_right_margin YE Printing in last column causes cr ul transparent_underline ul Underline character overstrikes xenl eat_newline_glitch xn Newline ignored after 80 columns (Concept) xhp ceol_standout_glitch xs Standout not erased by overwriting (hp) xhpa col_addr_glitch YA Only positive motion for hpa/mhpa caps xon xon_xoff xo Terminal uses xon/xoff handshaking xsb no_esc_ctlc xb Beehive (f1=escape, f2=ctrl C) xt dest_tabs_magic_smso xt Destructive tabs, magic smso char (t1061) xvpa row_addr_glitch YD Only positive motion for vpa/mvpa caps Numbers: Cap- Termcap ______ ____________________ _______ _______________________________________________ bufsz buffer_capacity Ya Number of bytes buffered before printing colors max_colors Co Maximum number of colors on the screen cols columns co Number of columns in a line cps print_rate Ym Average print rate in characters per second it init_tabs it Tabs initially every # spaces lh label_height lh Number of rows in each label lines lines li Number of lines on a screen or a page lm lines_of_memory lm Lines of memory if > lines; 0 means varies lw label_width lw Number of columns in each label maddr max_micro_address Yd Maximum value in micro_..._address mcs micro_col_size Yf Character step size when in micro mode mjump max_micro_jump Ye Maximum value in parm_..._micro mls micro_line_size Yg Line step size when in micro mode ncv no_color_video NC Video attributes that can't be used with colors nlab num_labels Nl Number of labels on screen (start at 1) npins number_of_pins Yh Number of pins in print-head orc output_res_char Yi Horizontal resolution in units per character orhi output_res_horz_inch Yk Horizontal resolution in units per inch orl output_res_line Yj Vertical resolution in units per line orvi output_res_vert_inch Yl Vertical resolution in units per inch pairs max_pairs pa Maximum number of color-pairs on the screen pb padding_baud_rate pb Lowest baud rate where padding needed spinh dot_horz_spacing Yc Spacing of dots horizontally in dots per inch spinv dot_vert_spacing Yb Spacing of pins vertically in pins per inch vt virtual_terminal vt Virtual terminal number (SYSTEM V/88) widcs wide_char_size Yn Character step size when in double wide mode wsl width_status_line ws Number of columns in status line Strings: Cap- Termcap _____ ____________________ _______ __________________________________________________ acsc acs_chars ac Graphic charset pairs aAbBcC - def=vt100 bel bell bl Audible signal (bell) blink enter_blink_mode mb Turn on blinking bold enter_bold_mode md Turn on bold (extra bright) mode cbt back_tab bt Back tab chr change_res_horz ZC Change horizontal resolution civis cursor_invisible vi Make cursor invisible clear clear_screen cl Clear screen and home cursor cmdch command_character CC Terminal settable cmd character in prototype cnorm cursor_normal ve Make cursor appear normal (undo vs/vi) cpi change_char_pitch ZA Change number of characters per inch cr carriage_return cr Carriage return csnm char_set_names Zy List of character set names csr change_scroll_region cs Change to lines #1 through #2 (vt100) cub parm_left_cursor LE Move cursor left #1 spaces cub1 cursor_left le Move left one space. cud parm_down_cursor DO Move down #1 lines. cuf parm_right_cursor RI Move right #1 spaces. cuf1 cursor_right nd Non-destructive space (cursor or carriage right) cup cursor_address cm Move to row #1 col #2 cuu parm_up_cursor UP Move cursor up #1 lines. cvr change_res_vert ZD Change vertical resolution cvvis cursor_visible vs Make cursor very visible dch parm_dch DC Delete #1 chars dch1 delete_character dc Delete character defc define_char ZE Define a character in a character set dim enter_dim_mode mh Turn on half-bright mode dl delete_line dl1 Delete line dl parm_delete_line DL Delete #1 lines do cursor_down do Down one line docr these_cause_cr Zw Printing any of these chars causes cr dsl dis_status_line ds Disable status line ech erase_chars ec Erase #1 characters ed clr_eos cd Clear to end of display el clr_eol ce Clear to end of line el1 clr_bol cb Clear to beginning of line, inclusive enacs ena_acs eA Enable alternate character set ff form_feed ff Hardcopy terminal page eject flash flash_screen vb Visible bell (may not move cursor) fsl from_status_line fs Return from status line hd down_half_line hd Half-line down (forward 1/2 linefeed) home cursor_home ho Home cursor (if no cup) hpa column_address ch Horizontal position absolute ht tab ta Tab to next 8-space hardware tab stop hts set_tab st Set a tab in all rows, current column hu up_half_line hu Half-line up (reverse 1/2 linefeed) ich parm_ich IC Insert #1 blank chars ich1 insert_character ic Insert character if init_file if Name of initialization file il parm_insert_line AL Add #1 new blank lines il1 insert_line al Add new blank line ind scroll_forward sf Scroll text up indn parm_index SF Scroll forward #1 lines initc initialize_color Ic Initialize the definition of color initp initialize_pair Ip Initialize color-pair invis enter_secure_mode mk Turn on blank mode (characters invisible) ip insert_padding ip Insert pad after character inserted iprog init_prog iP Path name of program for initialization is1 init_1string i1 Terminal or printer initialization string is2 init_2string is Terminal or printer initialization string is3 init_3string i3 Terminal or printer initialization string kBEG key_sbeg &9 KEY_SBEG, 0572, sent by shifted beginning key kCAN key_scancel &0 KEY_SCANCEL, 0573, sent by shifted cancel key kCMD key_scommand *1 KEY_SCOMMAND, 0574, sent by shifted command key kCPY key_scopy *2 KEY_SCOPY, 0575, sent by shifted copy key kCRT key_screate *3 KEY_SCREATE, 0576, sent by shifted create key kDC key_sdc *4 KEY_SDC, 0577, sent by shifted delete-char key kDL key_sdl *5 KEY_SDL, 0600, sent by shifted delete-line key kEND key_send *7 KEY_SEND, 0602, sent by shifted end key kEOL key_seol *8 KEY_SEOL, 0603, sent by shifted clear-line key kEXT key_sexit *9 KEY_SEXIT, 0604, sent by shifted exit key kFND key_sfind *0 KEY_SFIND, 0605, sent by shifted find key kHLP key_shelp #1 KEY_SHELP, 0606, sent by shifted help key kHOM key_shome #2 KEY_SHOME, 0607, sent by shifted home key kIC key_sic #3 KEY_SIC, 0610, sent by shifted input key kLFT key_sleft #4 KEY_SLEFT, 0611, sent by shifted left-arrow key kMOV key_smove %b KEY_SMOVE, 0613, sent by shifted move key kMSG key_smessage %a KEY_SMESSAGE, 0612, sent by shifted message key kNXT key_snext %c KEY_SNEXT, 0614, sent by shifted next key kOPT key_soptions %d KEY_SOPTIONS, 0615, sent by shifted options key kPRT key_sprint %f KEY_SPRINT, 0617, sent by shifted print key kPRV key_sprevious %e KEY_SPREVIOUS, 0616, sent by shifted prev key kRDO key_sredo %g KEY_SREDO, 0620, sent by shifted redo key kRES key_srsume %j KEY_SRSUME, 0623, sent by shifted resume key kRIT key_sright %i KEY_SRIGHT, 0622, sent by shifted right-arrow key kRPL key_sreplace %h KEY_SREPLACE, 0621, sent by shifted replace key kSAV key_ssave !1 KEY_SSAVE, 0624, sent by shifted save key kSPD key_ssuspend !2 KEY_SSUSPEND, 0625, sent by shifted suspend key kUND key_sundo !3 KEY_SUNDO, 0626, sent by shifted undo key ka1 key_a1 K1 KEY_A1, 0534, upper left of keypad ka3 key_a3 K3 KEY_A3, 0535, upper right of keypad kb2 key_b2 K2 KEY_B2, 0536, center of keypad kbeg key_beg @1 KEY_BEG, 0542, sent by beg(inning) key kbs key_backspace kb KEY_BACKSPACE, 0407, sent by backspace key kc1 key_c1 K4 KEY_C1, 0537, lower left of keypad kc3 key_c3 K5 KEY_C3, 0540, lower right of keypad kcan key_cancel @2 KEY_CANCEL, 0543, sent by cancel key kcbt key_btab kB KEY_BTAB, 0541, sent by back-tab key kclo key_close @3 KEY_CLOSE, 0544, sent by close key kclr key_clear kC KEY_CLEAR, 0515, sent by clear-screen or erase key kcmd key_command @4 KEY_COMMAND, 0545, sent by cmd (command) key kcpy key_copy @5 KEY_COPY, 0546, sent by copy key kcrt key_create @6 KEY_CREATE, 0547, sent by create key kctab key_ctab kt KEY_CTAB, 0525, sent by clear-tab key kcub1 key_left kl KEY_LEFT, 0404, sent by terminal left-arrow key kcud1 key_down kd KEY_DOWN, 0402, sent by terminal down-arrow key kcuf1 key_right kr KEY_RIGHT, 0405, sent by terminal right-arrow key kcuu1 key_up ku KEY_UP, 0403, sent by terminal up-arrow key kdch1 key_dc kD KEY_DC, 0512, sent by delete-character key kdl1 key_dl kL KEY_DL, 0510, sent by delete-line key ked key_eos ked KEY_EOS, 0516, sent by clear-to-end-of-screen key kel key_eol kE KEY_EOL, 0517, sent by clear-to-end-of-line key kend key_end @7 KEY_END, 0550, sent by end kee kent key_enter @8 KEY_ENTER, 0527, sent by enter/send key kext key_exit @9 KEY_EXIT, 0551, sent by exit key kf0 key_f0 k0 KEY_F(0), 0410, sent by function key f0 kf1 key_f1 k1 KEY_F(1), 0411, sent by function key f1 kf10 key_f10 k; KEY_F(10), 0422, sent by function key f10 kf11 key_f11 F1 KEY_F(11), 0423, sent by function key f11 kf12 key_f12 F2 KEY_F(12), 0424, sent by function key f12 kf13 key_f13 F3 KEY_F(13), 0425, sent by function key f13 kf14 key_f14 F4 KEY_F(14), 0426, sent by function key f14 kf15 key_f15 F5 KEY_F(15), 0427, sent by function key f15 kf16 key_f16 F6 KEY_F(16), 0430, sent by function key f16 kf17 key_f17 F7 KEY_F(17), 0431, sent by function key f17 kf18 key_f18 F8 KEY_F(18), 0432, sent by function key f18 kf19 key_f19 F9 KEY_F(19), 0433, sent by function key f19 kf2 key_f2 k2 KEY_F(2), 0412, sent by function key f2 kf20 key_f20 FA KEY_F(20), 0434, sent by function key f20 kf21 key_f21 FB KEY_F(21), 0435, sent by function key f21 kf22 key_f22 FC KEY_F(22), 0436, sent by function key f22 kf23 key_f23 FD KEY_F(23), 0437, sent by function key f23 kf24 key_f24 FE KEY_F(24), 0440, sent by function key f24 kf25 key_f25 FF KEY_F(25), 0441, sent by function key f25 kf26 key_f26 FG KEY_F(26), 0442, sent by function key f26 kf27 key_f27 FH KEY_F(27), 0443, sent by function key f27 kf28 key_f28 FI KEY_F(28), 0444, sent by function key f28 kf29 key_f29 FJ KEY_F(29), 0445, sent by function key f29 kf3 key_f3 k3 KEY_F(3), 0413, sent by function key f3 kf30 key_f30 FK KEY_F(30), 0446, sent by function key f30 kf31 key_f31 FL KEY_F(31), 0447, sent by function key f31 kf32 key_f32 FM KEY_F(32), 0450, sent by function key f32 kf33 key_f33 FN KEY_F(13), 0451, sent by function key f13 kf34 key_f34 FO KEY_F(34), 0452, sent by function key f34 kf35 key_f35 FP KEY_F(35), 0453, sent by function key f35 kf36 key_f36 FQ KEY_F(36), 0454, sent by function key f36 kf37 key_f37 FR KEY_F(37), 0455, sent by function key f37 kf38 key_f38 FS KEY_F(38), 0456, sent by function key f38 kf39 key_f39 FT KEY_F(39), 0457, sent by function key f39 kf4 key_f4 k4 KEY_F(4), 0414, sent by function key f4 kf40 key_f40 FU KEY_F(40), 0460, sent by function key f40 kf41 key_f41 FV KEY_F(41), 0461, sent by function key f41 kf42 key_f42 FW KEY_F(42), 0462, sent by function key f42 kf43 key_f43 FX KEY_F(43), 0463, sent by function key f43 kf44 key_f44 FY KEY_F(44), 0464, sent by function key f44 kf45 key_f45 FZ KEY_F(45), 0465, sent by function key f45 kf46 key_f46 Fa KEY_F(46), 0466, sent by function key f46 kf47 key_f47 Fb KEY_F(47), 0467, sent by function key f47 kf48 key_f48 Fc KEY_F(48), 0470, sent by function key f48 kf49 key_f49 Fd KEY_F(49), 0471, sent by function key f49 kf5 key_f5 k5 KEY_F(5), 0415, sent by function key f5 kf50 key_f50 Fe KEY_F(50), 0472, sent by function key f50 kf51 key_f51 Ff KEY_F(51), 0473, sent by function key f51 kf52 key_f52 Fg KEY_F(52), 0474, sent by function key f52 kf53 key_f53 Fh KEY_F(53), 0475, sent by function key f53 kf54 key_f54 Fi KEY_F(54), 0476, sent by function key f54 kf55 key_f55 Fj KEY_F(55), 0477, sent by function key f55 kf56 key_f56 Fk KEY_F(56), 0500, sent by function key f56 kf57 key_f57 Fl KEY_F(57), 0501, sent by function key f57 kf58 key_f58 Fm KEY_F(58), 0502, sent by function key f58 kf59 key_f59 Fn KEY_F(59), 0503, sent by function key f59 kf6 key_f6 k6 KEY_F(6), 0416, sent by function key f6 kf60 key_f60 Fo KEY_F(60), 0504, sent by function key f60 kf61 key_f61 Fp KEY_F(61), 0505, sent by function key f61 kf62 key_f62 Fq KEY_F(62), 0506, sent by function key f62 kf63 key_f63 Fr KEY_F(63), 0507, sent by function key f63 kf7 key_f7 k7 KEY_F(7), 0417, sent by function key f7 kf8 key_f8 k8 KEY_F(8), 0420, sent by function key f8 kf9 key_f9 k9 KEY_F(9), 0421, sent by function key f9 kfnd key_find @0 KEY_FIND, 0552, sent by find key khlp key_help %1 KEY_HELP, 0553, sent by help key khome key_home kh KEY_HOME, 0406, sent by home key khts key_stab kT KEY_STAB, 0524, sent by set-tab key kich1 key_ic kI KEY_IC, 0513, sent by ins-char/enter ins-mode key kil1 key_il kA KEY_IL, 0511, sent by insert-line key kind key_sf kF KEY_SF, 0520, sent by scroll-forward/down key kll key_ll kH KEY_LL, 0533, sent by home-down key kmov key_move %4 KEY_MOVE, 0556, sent by move key kmrk key_mark %2 KEY_MARK, 0554, sent by mark key kmsg key_message %3 KEY_MESSAGE, 0555, sent by message key knp key_npage kN KEY_NPAGE, 0522, sent by next-page key knxt key_next %5 KEY_NEXT, 0557, sent by next-object key kopn key_open %6 KEY_OPEN, 0560, sent by open key kopt key_options %7 KEY_OPTIONS, 0561, sent by options key kpp key_ppage kP KEY_PPAGE, 0523, sent by previous-page key kprt key_print %9 KEY_PRINT, 0532, sent by print or copy key kprv key_previous %8 KEY_PREVIOUS, 0562, sent by previous-object key krdo key_redo %0 KEY_REDO, 0563, sent by redo key kref key_reference &1 KEY_REFERENCE, 0564, sent by ref(erence) key kres key_resume &5 KEY_RESUME, 0570, sent by resume key krfr key_refresh &2 KEY_REFRESH, 0565, sent by refresh key kri key_sr kR KEY_SR, 0521, sent by scroll-backward/up key krmir key_eic kM KEY_EIC, 0514, sent by rmir or smir in insert mode krpl key_replace &3 KEY_REPLACE, 0566, sent by replace key krst key_restart &4 KEY_RESTART, 0567, sent by restart key ksav key_save &6 KEY_SAVE, 0571, sent by save key kslt key_select *6 KEY_SELECT, 0601, sent by select key kspd key_suspend &7 KEY_SUSPEND, 0627, sent by suspend key ktbc key_catab ka KEY_CATAB, 0526, sent by clear-all-tabs key kund key_undo &8 KEY_UNDO, 0630, sent by undo key lf0 lab_f0 l0 Labels on function key f0 if not f0 lf1 lab_f1 l1 Labels on function key f1 if not f1 lf10 lab_f10 la Labels on function key f10 if not f10 lf2 lab_f2 l2 Labels on function key f2 if not f2 lf3 lab_f3 l3 Labels on function key f3 if not f3 lf4 lab_f4 l4 Labels on function key f4 if not f4 lf5 lab_f5 l5 Labels on function key f5 if not f5 lf6 lab_f6 l6 Labels on function key f6 if not f6 lf7 lab_f7 l7 Labels on function key f7 if not f7 lf8 lab_f8 l8 Labels on function key f8 if not f8 lf9 lab_f9 l9 Labels on function key f9 if not f9 ll cursor_to_ll ll Last line, first column (if no cup) lpi change_line_pitch ZB Change number of lines per inch mc0 print_screen ps Print contents of the screen mc4 prtr_off pf Turn off the printer mc5 prtr_on po Turn on the printer mc5p prtr_non pO Turn on the printer for #1 bytes mcub parm_left_micro Zg Like parm_left_cursor for micro adjust mcub1 micro_left Za Like cursor_left for micro adjustment mcud parm_down_micro Zf Like parm_down_cursor for micro adjust mcud1 micro_down ZZ Like cursor_down for micro adjustment mcuf parm_right_micro Zh Like parm_right_cursor for micro adjust mcuf1 micro_right Zb Like cursor_right for micro adjustment mcuu parm_up_micro Zi Like parm_up_cursor for micro adjust mcuu1 micro_up Zd Like cursor_up for micro adjustment) mgc clear_margins MC Clear all margins (top, bottom, and sides) mhpa micro_column_address ZY Like column_address for micro adjustment mrcup cursor_mem_address CM Memory relative cursor addressing mvpa micro_row_address Zc Like row_address for micro adjustment nel newline nw Newline (behaves like cr followed by lf) oc orig_colors oc Set all color(-pair)s to the original ones op orig_pair op Set default color-pair to the original one pad pad_char pc Pad character (instead of null) pfkey pkey_key pk Prog funct key #1 to type string #2 pfloc pkey_local pl Prog funct key #1 to execute string #2 pfx pkey_xmit px Prog funct key #1 to xmit string #2 pln plab_norm pn Prog label #1 to show string #2 porderorder_of_pins Ze Matches software bits to print-head pins prot enter_protected_mode mp Turn on protected mode rbim stop_bit_image Zs End printing bit image graphics rc restore_cursor rc Restore cursor to position of last sc rcsd stop_char_set_def Zt End definition of a character set rep repeat_char rp Repeat char #1 #2 times rev enter_reverse_mode mr Turn on reverse video mode rf reset_file rf Name of file containing reset string rfi req_for_input RF Send next input char (for ptys) ri scroll_reverse sr Scroll text down rin parm_rindex SR Scroll backward #1 lines ritm exit_italics_mode ZR Disable italics rlm exit_leftward_mode ZS Enable rightward (normal) carriage motion rmacs exit_alt_charset_modeae End alternate character set rmam exit_am_mode RA Turn off automatic margins rmdc exit_delete_mode ed End delete mode rmicm exit_micro_mode ZT Disable micro motion capabilities rmir exit_insert_mode ei End insert mode rmkx keypad_local ke Out of ``keypad-transmit'' modey rmln label_off LF Turn off soft labels rmm meta_off mo Turn off "meta mode" rmp char_padding rP Like ip but when in replace mode rmso exit_standout_mode se End standout mode rmul exit_underline_mode ue End underscore mode rmxon exit_xon_mode RX Turn off xon/xoff handshaking rs1 reset_1string r1 Reset terminal completely to sane modes rs2 reset_2string r2 Reset terminal completely to sane modes rs3 reset_3string r3 Reset terminal completely to sane modes rshm exit_shadow_mode ZU Disable shadow printing rsubm exit_subscript_mode ZV Disable subscript printing rsupm exit_superscript_modeZW Disable superscript printing rum exit_upward_mode ZX Enable downward (normal) carriage motion rwidm exit_doublewide_mode ZQ Disable double wide printing sbim start_bit_image Zq Start printing bit image graphics sc save_cursor sc Save cursor position scp set_color_pair sp Set current color-pair scs select_char_set Zj Select character set scsc start_char_set_def Zr Start definition of a character set sdrfq enter_draft_quality ZG Set draft quality print setb set_background Sb Set current background color setf set_foreground Sf Set current foreground color sgr set_attributes sa Define the video attributes #1-#9 sgr0 exit_attribute_mode me Turn off all attributes sitm enter_italics_mode ZH Enable italics slm enter_leftward_mode ZI Enable leftward carriage motion smacs enter_alt_charset_modas Start alternate character set smam enter_am_mode SA Turn on automatic margins smdc enter_delete_mode dm Delete mode (enter) smgb set_bottom_margin Zk Set bottom margin at current line smgbp set_bottom_margin_parZl Set bottom margin at line #1 or #2 lines from bottom smgl set_left_margin ML Set left margin at current line smglp set_left_margin_parm Zm Set left (right) margin at column #1 (#2) smgr set_right_margin MR Set right margin at current column smgrp set_right_margin_parmZn Set right margin at column #1 smgt set_top_margin Zo Set top margin at current line smgtp set_top_margin_parm Zp Set top (bottom) margin at line #1 (#2) smicm enter_micro_mode ZJ Enable micro motion capabilities smir enter_insert_mode im Insert mode (enter) smkx keypad_xmit ks Put terminal in ``keypad-transmit'' mode smln label_on LO Turn on soft labels smm meta_on mm Turn on "meta mode" (8th bit) smso enter_standout_mode so Begin standout mode smul enter_underline_mode us Start underscore mode smxon enter_xon_mode SX Turn on xon/xoff handshaking snlq enter_near_letter_quaZKty Set near-letter quality print snrmq enter_normal_quality ZL Set normal quality print sshm enter_shadow_mode ZM Enable shadow printing ssubm enter_subscript_mode ZN Enable subscript printing ssupm enter_superscript_modZO Enable superscript printing subcs subscript_characters Zu List of ``subscript-able'' characters sum enter_upward_mode ZP Enable upward carriage motion supcs superscript_characterZv List of ``superscript-able'' characters swidm enter_doublewide_modeZF Enable double wide printing tbc clear_all_tabs ct Clear all tab stops tsl to_status_line ts Go to status line, col #1 uc underline_char uc Underscore one char and move past it up cursor_up cuu1 Upline (cursor up) vpa row_address cv Vertical position absolute wind set_window wi Current window is lines #1-#2 cols #3-#4 xoffc xoff_character XF X-off character xonc xon_character XN X-on character zerom zero_motion Zx No motion for the subsequent character SAMPLE ENTRY The following entry, which describes the AT&T 610 terminal, is among the more complex entries in the terminfo file as of this writing: 610|610bct|ATT610|att610|AT&T610;80column;98key keyboard am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{ | | }}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=\t, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m, is1=\E[8;0 | \E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0, is2=\E[0m^O, is3=\E(B\E)0, kLFT=\E[\s@, kRIT=\E[\sA, kbs=\b, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kind=\E[S, kri=\E[T, ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%p1%d;%p2%l%02dq\s\s\sF%p1%1d\s\s\s\s\s \s\s\s\s\s\s%p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%; %?%p3%p1% | %t;7%;%?%p7%t;8%;m%?%p9%t^N%e^O%;, sgr0=\E[m^O, smacs=^N, smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx, Types of Capabilities in the Sample Entry The sample entry shows the formats for the three types of terminfo capabilities listed: Boolean, numeric, and string. All capabilities specified in the terminfo source file must be followed by commas, including the last capability in the source file. In terminfo source files, capabilities are referenced by their capability names (as shown in the previous tables). Boolean capabilities are specified by their comma separated cap names. Numeric capabilities are followed by the character `#', then a positive integer value. Thus, in the sample, cols (which shows the number of columns available on a device) is assigned the value 80 for the AT&T 610. (Values for numeric capabilities may be specified in decimal, octal or hexadecimal, using normal C conventions.) Finally, string-valued capabilities, e.g., el (clear to end of line sequence) are listed by a two- to five-character capname, an `=', and a string ended by the next occurrence of a comma. A delay in milliseconds may appear anywhere in such a capability, enclosed in $<..> brackets, as in el=\EK$<3>. Padding characters are supplied by tputs(). The delay can be any of the following: a number (5), a number followed by an `*' (5*), a number followed by a `/' (5/), or a number followed by both (5*/). An `*' shows 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 characters, the factor is still the number of lines affected. This is always 1 unless the device has in and the software uses it.) When an `*' is specified, it is sometimes useful to give a delay of the form 3.5 to specify a delay per unit to tenths of milliseconds. (Only one decimal place is allowed.) A `/' indicates that the padding is mandatory. If a device has xon defined, the padding information is advisory and will only be used for cost estimates or when the device is in raw mode. Mandatory padding will be transmitted regardless of the setting of xon. If padding (whether advisory or mandatory) is specified for bel or flash, however, it will always be used, regardless of whether xon is specified. terminfo offers notation for encoding special characters. Both \E and \e map to an ESCAPE character, ^x maps to a control-x for any appropriate x, and the sequences \n, \l, \r, \t, \b, \f, and \s give a newline, linefeed, return, tab, backspace, formfeed, and space, respectively. Other escapes include: \^ for caret (^); \\ for backslash (\); \, for comma (,); \: for colon (:); and \0 for null. (\0 will actually produce \200, which does not terminate a string but behaves as a null character on most devices, providing CS7 is specified. (See stty(1).) Finally, characters may be given as three octal digits after a backslash (e.g., \123). Sometimes individual capabilities must be commented out. To do this, put a period before the capability name. For example, see the second ind in the example above. Note that capabilities are defined in a left-to-right order and, therefore, a prior definition will override a later definition. Preparing Descriptions The most effective way to prepare a device description is by imitating the description of a similar device in terminfo and building up a description gradually, using partial descriptions with vi(1) to check that they are correct. Be aware that an unusual device may expose deficiencies in the ability of the terminfo file to describe it or the inability of vi(1) to work with that device. To test a new device description, set the environment variable TERMINFO to the pathname of a directory containing the compiled description you are working on and programs will look there insted of in /usr/lib/terminfo. To get the padding for insert-line correct (if the device manufacturer did not document it), a severe test is to comment out xon, edit a large file at 9600 baud with vi(1), delete 16 or so lines from the middle of the screen, then hit the u key several times quickly. If the display is corrupted, more padding is usually needed. A similar test can be used for insert-character. Section 1-1: Basic Capabilities The number of columns on each line for the device is given by the cols numeric capability. If the device has a screen, the number of lines on the screen is given by the lines capability. If the device wraps around to the beginning of the next line when it reaches the right margin, it should have the am capability. If the terminal can clear its screen leaving the cursor in the home position, then this is given by the clear string capability. If the terminal overstrikes (instead of clearing a position when a character is struck over), it should have the os capability. If the device is a printing terminal, with no soft copy unit, specify both hc and os. If there is a way to move the cursor to the left edge of the current row, specify this as cr. (Normally, this is carriage return, control m.) If there is a way to produce an audible signal (e.g., a bell or a beep), specify it as bel. If, like most devices, the device uses the xon-xoff flow-control protocol, specify xon. If there is a way to move the cursor one position to the left (e.g., backspace), that capability should be given as cub1. Similarly, sequences to move to the right, up, and down should be given as cuf1, cuu1, and cud1, respectively. These local cursor motions must not alter the text they pass over; for example, you would not normally use ``cuf1=\s'' because the space would erase the character moved over. A very important point here is that the local cursor motions encoded in terminfo are undefined at the left and top edges of a screen terminal. Programs should never attempt to backspace around the left edge, unless bw is specified, and should never attempt to go up locally off the top. To scroll text up, a program goes to the bottom left corner of the screen and sends the ind (index) string. To scroll text down, a program goes to the top left corner of the screen and sends the ri (reverse index) string. The strings ind and ri are undefined when not on their respective corners of the screen. Parameterized versions of the scrolling sequences are indn and rin. These versions have the same semantics as ind and ri, except that they take one parameter and scroll the number of lines specified by that parameter. They are also undefined except at the appropriate edge of the screen. The am 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 cuf1 from the last column. Backward motion from the left edge of the screen is possible only when bw is specified. Here, cub1 will move to the right edge of the previous row. If 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 device has switch selectable automatic margins, am should be specified in the terminfo source file. Here, initialization strings should turn on this option, if possible. If the device has a command that moves to the first column of the next line, that command can be given as nel (newline). It does not matter if the command clears the remainder of the current line, so if the device has no cr and lf, it may still be possible to craft a working nel out of one or both of them. These capabilities suffice to describe hardcopy and screen terminals. Thus, the AT&T 5320 hardcopy terminal is described as: 5320|att5320|AT&T 5320 hardcopy terminal, am, hc, os, cols#132, bel=^G, cr=\r, cub1=\b, cnd1=\n, dch1=\E[P, dl1=\E[M, ind=\n, The Lear Siegler ADM-3 is described as: adm3|lsi adm3, am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, ind=^J, lines#24, Section 1-2: Parameterized Strings Cursor addressing and other strings requiring parameters are described by a parameterized string capability, with printf(3S)-like escapes (%x) in it. For example, to address the cursor, the cup, 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, indicate that by mrcup. The parameter mechanism uses a stack and special % codes to manipulate the stack in the manner of Reverse Polish Notation (postfix). Typically, a sequence will push one of the parameters onto the stack, then print it in some format. Often, more complex operations are necessary. Operations are in postfix form with the operands in the usual order. For example, to subtract 5 from the first parameter, use %p1%{5}%-. The % encodings have the following meanings: %% outputs `%' %[[:]flags][width[.precision]][doxXs] as in printf, flags are [-+#] and space %c print pop() gives %c %p[1-9] push ith parm %P[a-z] set variable [a-z] to pop() %g[a-z] get variable [a-z] and push it %'c' push char constant c %{nn} push decimal constant nn %l push strlen(pop()) %+ %- %* %/ %m arithmetic (%m is mod): push(pop integer () op pop integer ()) %& %| %^ bit operations: push(pop integer () op pop integersub1()) 1 %= %> %< logical operations: push(pop() op pop()) %A %O logical operations: and, or %! %~ unary operations: push(op pop()) %i (for ANSI terminals) add 1 to first parm, if one parm present, or first two parms, if more than one parm present %? expr %t thenpart %e elsepart %; if-then-else, %e elsepart is optional; else-if's are possible ala Algol 68: %? c %t b %e c %t b %e c %t b %e c %t b %e b % 1 1 2 2 3 3 4 4 5 c are conditions, b are bodies. i i If the ``-'' flag is used with ``%[doxXs]'', a colon (:) must be placed between the ``%'' and the ``-'' to differentiate the flag from the binary ``%-'' operator, .e.g., ``%:-16.16s''. Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs to be sent \E&a12c03Y padded for 6 milliseconds. Note that the order of the rows and columns is inverted here, and that the row and column are zero- padded as two digits. Thus, its cup capability is ``cup=\E&a%p2%2.2dc%p1%2.2dY$<6>''. The Micro-Term ACT-IV needs the current row and column sent preceded by a ^T, with the row and column encoded in binary, ``cup=^T%p1%c%p2%c''. Devices that use ``%c'' must be able to backspace the cursor (cub1), and move the cursor up one line on the screen (cuu1). This is necessary because it is not always safe to transmit \n, ^D, and \r, because the system may change or discard them. (The library routines dealing with terminfo set tty modes so that tabs are never expanded, so \t is safe to send. This turns out to be essential for the Ann Arbor 4080.) A final example is the LSI ADM-3a, which uses row and column offset by a blank character, thus, ``cup=\E=%p1%'\s'%+%c%p2%'\s'%+%c''. After sending ``\E='', 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. Section 1-3: Cursor Motions If the terminal has a fast way to home the cursor (to upper left corner of screen), this can be given as home; similarly, a fast way of getting to the lower left-hand corner can be given as ll. This may involve going up with cuu1 from the home position, but a program should never do this itself (unless ll 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 \EH sequence on Hewlett-Packard terminals cannot be used for home without losing some of the other terminal features.) If the device has row or column absolute-cursor addressing, these can be given as single parameter capabilities hpa (horizontal position absolute) and vpa (vertical position absolute). Sometimes, these are shorter than the more general two-parameter sequence (as with the Hewlett-Packard 2645) and can be used in preference to cup. If there are parameterized local motions (e.g., move n spaces to the right) these can be given as cud, cub, cuf, and cuu with a single parameter indicating how many spaces to move. These are primarily useful if the device does not have cup, e.g., the Tektronix 4025. If the device 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 smcup and rmcup. This arises, for example, from terminals, e.g., the Concept, with more than one page of memory. If the device has only memory relative cursor addressing and not screen relative cursor addressing, a one screen-sized window must be fixed into the device for cursor addressing to work properly. This is also used for the Tektronix 4025 where smcup sets the command character to be the one used by terminfo. If the smcup sequence will not restore the screen after an rmcup sequence is output (to the state prior to outputting rmcup), specify nrrmc. Section 1-4: 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 el. 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 el1. If the terminal can clear from the current position to the end of the display, this should be given as ed. ed 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 ed is not available.) Section 1-5: Insert/Delete Line If the terminal can open a new blank line before the line where the cursor is, this should be given as il1; 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 that the cursor is on, this should be given as dl1; this is done only from the first position on the line to be deleted. Versions of il1 and dl1 that take a single parameter and insert or delete that many lines can be given as il and dl. If the terminal has a settable destructive scrolling region (like the VT100), the command to set this can be described with the csr capability, which takes two parameters: the top and bottom lines of the scrolling region. The cursor position is undefined after using this command. It is possible to get the effect of insert or delete line using this command -the sc and rc (save and restore cursor) commands are also useful. Inserting lines at the top or bottom of the screen can also be done using ri or ind on many terminals without a true insert/delete line, and is often faster even on terminals with those features. To determine if a terminal has destructive scrolling regions or non-destructive scrolling regions, create a scrolling region in the middle of the screen, place data on the bottom line of the scrolling region, move the cursor to the top line of the scrolling region, and do a reverse index (ri) followed by a delete line (dl1) or index (ind). If the data that was originally on the bottom line of the scrolling region was restored into the scrolling region by the dl1 or ind, the terminal has non-destructive scrolling regions. Otherwise, it has destructive scrolling regions. Do not specify csr if the terminal has non-destructive scrolling regions, unless ind, ri, indn, rin, dl, and dl1 all simulate destructive scrolling. 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 wind. The four parameters are the starting and ending lines in memory and the starting and ending columns in memory, in that order. If the terminal can retain display memory above, the da capability should be given; if display memory can be retained below, db should be given. These indicate that deleting a line or scrolling a full screen may bring non- blank lines up from below or that scrolling back with ri may bring down non-blank lines. Section 1-6: Insert/Delete Character There are two basic kinds of intelligent terminals with respect to insert/delete character operations thata can be described using 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, e.g., 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. You can determine the kind of terminal you have by clearing the screen and 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, 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 in, which stands for ``insert null.'' While these are two logically separate attributes (one line versus multiline insert mode, and special treatment of untyped spaces) we have seen no terminals whose insert mode cannot be described with the single attribute. terminfo can describe both terminals that have an insert mode and terminals that send a simple sequence to open a blank position on the current line. Give as smir the sequence to get into insert mode. Give as rmir the sequence to leave insert mode. Now give as ich1 any sequence needed to be sent just before sending the character to be inserted. Most terminals with a true insert mode will not give ich1; terminals that send a sequence to open a screen position should give it here. (If your terminal has both, insert mode is usually preferable to ich1. Do not give both unless the terminal requires both to be used in combination.) If post-insert padding is needed, give this as a number of milliseconds padding in ip (a string option). Any other sequence that may need to be sent after an insert of a single character may also be given in ip. If your terminal needs both to be placed into an `insert mode' and a special code to precede each inserted character, both smir/rmir and ich1 can be given, and both will be used. The ich capability, with one parameter, n, will insert n blanks. If padding is necessary between characters typed while not in insert mode, give this as a number of milliseconds padding in rmp. 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 mir to speed up inserting in this case. Omitting mir will affect only speed. Some terminals (notably Datamedia's) must not have mir because of the way their insert mode works. Finally, you can specify dch1 to delete a single character, dch with one parameter, n, to delete n characters, and delete mode by giving smdc and rmdc to enter and exit delete mode (any mode the terminal needs to be placed in for dch1 to work). A command to erase n characters (equivalent to outputting n blanks without moving the cursor) can be given as ech with one parameter. Section 1-7: Highlighting, Underlining, and Visible Bells Your device may have one or more kinds of display attributes that allow you to highlight selected characters when they appear on the screen. The following display modes (shown with the names by which they are set) may be available: a blinking screen (blink), bold or extra-bright characters (bold), dim or half-bright characters (dim), blanking or invisible text (invis), protected text (prot), a reverse- video screen (rev), and an alternate character set (smacs to enter this mode and rmacs to exit it). (If a command is necessary before you can enter alternate character set mode, give the sequence in enacs or "enable alternate-character- set" mode.) Turning on any of these modes singly may or may not turn off other modes. sgr0 should be used to turn off all video enhancement capabilities. It should always be specified because it represents the only way to turn off some capabilities, e.g., dim or blink. You should choose one display method as standout mode (see curses(3X)) and use it to highlight error messages and other kinds of text to which you want to draw attention. Choose a form of display that provides strong contrast but that is easy on the eyes. (We recommend reverse-video plus half- bright or reverse-video alone.) The sequences to enter and exit standout mode are given as smso and rmso, 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, give xmc to tell how many spaces are left. Sequences to begin underlining and end underlining can be specified as smul and rmul, respectively. If the device has a sequence to underline the current character and to move the cursor one space to the right (e.g., the Micro-Term MIME), this sequence can be specified as uc. Terminals with the ``magic cookie'' glitch (xmc) deposit special ``cookies'' when they receive mode-setting sequences, which affect the display algorithm instead of having extra bits for each character. Some terminals, e.g., the Hewlett-Packard 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 msgr capability, asserting that it is safe to move in standout mode, is present. If the terminal has a way of flashing the screen to indicate an error quietly (a bell replacement), this can be given as flash; it must not move the cursor. A good flash can be done by changing the screen into reverse video, pad for 200 ms, then return the screen to normal video. 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 cvvis. The boolean chts should also be given. If there is a way to make the cursor completely invisible, give that as civis. The capability cnorm should be given which undoes the effects of either of these modes. If your terminal generates underlined characters by using the underline character (with no special sequences needed) even though it does not otherwise overstrike characters, you should specify the capability ul. For devices on which a character overstriking another leaves both characters on the screen, specify the capability os. If overstrikes are erasable with a blank, indicate this by specifying eo. If there is a sequence to set arbitrary combinations of modes, this should be given as sgr (set attributes), taking nine parameters. Each parameter is either 0 or non-zero, as the corresponding attribute is on or off. The nine parameters are, in order: standout, underline, reverse, blink, dim, bold, blank, protect, alternate character set. Not all modes need to be supported by sgr; only those for which corresponding separate attribute commands exist should be supported. For example, let's assume that the terminal in question needs the following escape sequences to turn on various modes. tparm Escape Parameter Attribute Sequence _________ __________ _______________ none \E[0m p1 standout \E[0;4;7m p2 underline \E[0;3m p3 reverse \E[0;4m p4 blink \E[0;5m p5 dim \E[0;7m p6 bold \E[0;3;4m p7 invis \E[0;8m p8 protect not available p9 altcharset ^O (off) ^N(on) Note that each escape sequence requires a 0 to turn off other modes before turning on its own mode. Also note that, as suggested above, standout is set up to be the combination of reverse and dim. Also, because this terminal has no bold mode, bold is set up as the combination of reverse and underline. In addition, to allow combinations, e.g., underline+blink, the sequence to use would be \E[0;3;5m. The terminal doesn't have protect mode, either, but that cannot be simulated in any way, so p8 is ignored. The altcharset mode is different in that it is either ^O or ^N, depending on whether it is off or on. If all modes were to be turned on, the sequence would be \E[0;3;4;5;7;8m^N. Now look at when different sequences are output. For example, ;3 is output when either p2 or p6 is true, i.e., if either underline or bold modes are turned on. Writing out the above sequences with their dependencies, gives the following: ________ _________________ _____________________ \E[0 always \E[0 ;3 if p2 or p6 %?%p2%p6%|%t;3%; ;4 if p1 or p3 or p6 %?%p1%p3%|%p6%|%t;4%; ;5 if p4 %?%p4%t;5%; ;7 if p1 or p5 %?%p1%p5%|%t;7%; ;8 if p7 %?%p7%t;8%; m always m ^N or ^O if p9 ^N, else ^O %?%p9%t^N%e^O%; Putting this all together into the sgr sequence gives: sgr=\E[0%?%p2%p6%|%t;3%;%?%p1%p3%|%p6%|%t;4%;%?%p5%t;5%;%?%p1%p5% |%t;7%;%?%p7%t;8%;m%?%p9%t^N%e^O%;, NOTE: sgr and sgr0 must always be specified. Section 1-8: Keypad If the device has a keypad that transmits sequences when the keys are pressed, this information can also be specified. Note that it is not possible to handle devices where the keypad only works in local (this applies, for example, to the unshifted Hewlett-Packard 2621 keys). If the keypad can be set to transmit or not transmit, specify these sequences as smkx and rmkx. Otherwise, the keypad is assumed to always transmit. The sequences sent by the left arrow, right arrow, up arrow, down arrow, and home keys can be given as kcub1, kcuf1, kcuu1, kcud1, and khome, respectively. If there are function keys, e.g., f0, f1, ..., f63, specify the sequences they send as kf0, kf1, ..., kf63. If the first 11 keys have labels other than the default f0 through f10, the labels can be given as lf0, lf1, ..., lf10. The codes transmitted by certain other special keys can be given: kll (home down), kbs (backspace), ktbc (clear all tabs), kctab (clear the tab stop in this column), kclr (clear screen or erase key), kdch1 (delete character), kdl1 (delete line), krmir (exit insert mode), kel (clear to end of line), ked (clear to end of screen), kich1 (insert character or enter insert mode), kil1 (insert line), knp (next page), kpp (previous page), kind (scroll forward/down), kri (scroll backward/up), khts (set a tab stop in this column). 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 ka1, ka3, kb2, kc1, and kc3. These keys are useful when the effects of a 3 by 3 directional pad are needed. Further keys are defined above in the capabilities list. Strings to program function keys can be specified as pfkey, pfloc, and pfx. A string to program screen labels should be specified as pln. Each of these strings takes two parameters: a function key identifier and a string with which to program it. pfkey causes pressing the given key to be the same as the user typing the given string; pfloc causes the string to be executed by the terminal in local mode; pfx causes the string to be transmitted to the computer. The capabilities nlab, lw and lh 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 smln and rmln. smln is normally output after one or more pln sequences to make sure that the change becomes visible. Section 1-9: Tabs and Initialization If the device has hardware tabs, the command to advance to the next tab stop can be given as ht (usually control I). A ``backtab'' command that moves leftward to the next tab stop can be given as cbt. By convention, if tty modes show that tabs are being expanded by the computer instead of being sent to the device, programs should not use ht or cbt (even if they are present) because the user may not have the tab stops properly set. If the device has hardware tabs that are initially set every n spaces when the device is powered up, the numeric parameter it is given, showing the number of spaces the tabs are set to. This is normally used by tput init (see tput(1)) to determine whether to set the mode for hardware tab expansion and whether to set the tab stops. If the device has tab stops that can be saved in nonvolatile memory, the terminfo description can assume that they are properly set. If there are commands to set and clear tab stops, they can be given as tbc (clear all tab stops) and hts (set a tab stop in the current column of every row). Other capabilities include: is1, is2, and is3, initialization strings for the device; iprog, the path name of a program to be run to initialize the device; and if, the name of a file containing long initialization strings. These strings are expected to set the device into modes consistent with the rest of the terminfo description. They must be sent to the device each time the user logs in and be output in the following order: run the program iprog; output is1; output is2; set the margins using mgc, smgl and smgr; set the tabs using tbc and hts; print the file if; and finally output is3. This is usually done using the init option of tput(1); see profile(4). Most initialization is done with is2. Special device modes can be set up without duplicating strings by putting the common sequences in is2 and special cases in is1 and is3. Sequences that do a harder reset from a totally unknown state can be given as rs1, rs2, rf, and rs3, analogous to is1, is2, is3, and if. (The method using files, if and rf, is used for a few terminals, from /usr/lib/tabset/*; however, the recommended method is to use the initialization and reset strings.) These strings are output by tput reset, which is used when the terminal gets into a wedged state. Commands are normally placed in rs1, rs2, rs3, and rf only if they produce annoying effects on the screen and are not necessary when logging in. For example, the command to set a terminal into 80-column mode would normally be part of is2, but on some terminals it causes an annoying glitch on the screen and is not normally needed because the terminal is usually already in 80-column mode. If a more complex sequence is needed to set the tabs than can be described by using tbc and hts, the sequence can be placed in is2 or if. Any margin can be cleared with mgc. (For instructions on how to specify commands to set and clear margins, see Margins under Printer Capabilities.) Section 1-10: Delays Certain capabilities control padding in the tty(7) driver. These are primarily needed by hard-copy terminals, and are used by tput init to set tty modes appropriately. Delays embedded in the capabilities cr, ind, cub1, ff, and tab can be used to set the appropriate delay bits to be set in the tty driver. If pb (padding baud rate) is given, these values can be ignored at baud rates below the value of pb. Section 1-11: Status Lines If the terminal has an extra ``status line'' that is not normally used by software, this fact can be indicated. If the status line is viewed as an extra line below the bottom line into which one can cursor address normally (e.g., the Heathkit h19's 25th line, or the 24th line of a VT100 that is set to a 23-line scrolling region), the capability hs should be given. Special strings that go to a given column of the status line and return from the status line can be given as tsl and fsl. (fsl must leave the cursor position in the same place it was before tsl. If necessary, the sc and rc strings can be included in tsl and fsl to get this effect.) The capability tsl takes one parameter, which is the column number of the status line to which the cursor is to be moved. If escape sequences and other special commands, e.g., tab, work while in the status line, the flag eslok can be given. A string that turns off the status line (or otherwise erases its contents) should be given as dsl. If the terminal has commands to save and restore the position of the cursor, give them as sc and rc. The status line is normally assumed to be the same width as the rest of the screen, e.g., cols. If the status line is a different width (possibly because the terminal does not allow an entire line to be loaded) the width, in columns, can be indicated with the numeric parameter wsl. Section 1-12: Line Graphics If the device has a line drawing alternate character set, the mapping of glyph to character would be given in acsc. The definition of this string is based on the alternate character set used in the DEC VT100 terminal, extended slightly with some characters from the AT&T 4410v1 terminal. vt100+ glyph Name Character _______________________ _________ arrow pointing right + arrow pointing left , arrow pointing down . solid square block 0 lantern symbol I arrow pointing up - diamond ` checker board (stipple) a degree symbol f plus/minus g board of squares h lower right corner j upper right corner k upper left corner l lower left corner m plus n scan line 1 o horizontal line q scan line 9 s left tee (-) t right tee (-|) u bottom te_ (|) v top tee (|) w vertical line x bullet ~ The best way to describe a new device's line graphics set is to add a third column to the above table with the characters for the new device that produce the appropriate glyph when the device is in the alternate character set mode. For example: vt100+ New tty __________________ _________ _________ upper left corner l R lower left corner m F upper right corner k T lower right corner j G horizontal line q , vertical line x . Now write down the characters left to right, as in ``acsc=lRmFkTjGq\,x.''. In addition, terminfo allows you to define multiple character sets (see Section 2-5 for details). Section 1-13: Color Manipulation Let us define two methods of color manipulation: the Tektronix method and the HP method. The Tektronix method uses a set of N predefined colors (usually 8) from which a user can select "current" foreground and background colors. Thus, a terminal can support up to N colors mixed into N*N color-pairs to display on the screen at the same time. When using an HP method, the user cannot define the foreground independently of the background or vice-versa. Instead, the user must define an entire color-pair at once. Up to M color-pairs, made from 2*M different colors, can be defined this way. Most existing color terminals belong to one of these two classes of terminals. The numeric variables colors and pairs define the number of colors and color-pairs that can display on the screen at the same time. If a terminal can change the definition of a color (e.g., the Tektronix 4100 and 4200 series terminals), this should be specified with ccc (can change color). To change the definition of a color (Tektronix method), use initc (initialize color). It requires four arguments: color number (ranging from 0 to colors-1) and three RGB (red, green, and blue) values (ranging from 0 to 1000). Tektronix 4100 series terminals use a type of color notation called HLS (Hue Lightness Saturation) instead of RGB color notation. For such terminals you must define a boolean variable hls. The last three arguments to the initc string would be HLS values: H, ranging from 0 to 360; and L and S, ranging from 0 to 100. If a terminal can change the definitions of colors, but uses a color notation different from RGB and HLS, a mapping to either RGB or HLS must be developed. To set current foreground or background to a given color, use setf (set foreground) and setb (set background). They require one parameter: the number of the color. To initialize a color-pair (HP method), use initp (initialize pair). It requires seven parameters: the number of a color-pair (range=0 to pairs-1), and six RGB values: three for the foreground followed by three for the background. (Each of these groups of three should be in the order RGB.) When initc or initp are used, RGB or HLS arguments should be in the order "red, green, blue" or "hue, lightness, saturation"), respectively. To make a color-pair current, use scp (set color-pair). It takes one parameter, the number of a color-pair. Some terminals (e.g., most color terminal emulators for PCs) erase areas of the screen with current background color. In such cases, bce (background color erase) should be defined. The variable op (original pair) contains a sequence for setting the foreground and the background colors to what they were at the terminal start-up time. Similarly, oc (original colors) contains a control sequence for setting all colors (for the Tektronix method) or color-pairs (for the HP method) to the values they had at the terminal start-up time. Some color terminals substitute color for video attributes. Such video attributes should not be combined with colors. Information about these video attributes should be packed into the ncv (no color video) variable. There is a one-to- one correspondence between the nine least significant bits of that variable and the video attributes. The following table depicts this correspondence: Bit Decimal Attribute Position Value ____________ ________ _______ A_STANDOUT 0 1 A_UNDERLINE 1 2 A_REVERSE 2 4 A_BLINK 3 8 A_DIM 4 16 A_BOLD 5 32 A_INVIS 6 64 A_PROTECT 7 128 A_ALTCHARSET 8 256 When a particular video attribute should not be used with colors, the corresponding ncv bit should be set to 1; otherwise, it should be set to zero. To determine the information to pack into the ncv variable, you must add together the decimal values corresponding to those attributes that cannot coexist with colors. For example, if the terminal uses colors to simulate reverse video (bit number 2 and decimal value 4) and bold (bit number 5 and decimal value 32), the resulting value for ncv is 36 (4 + 32). Section 1-14: Miscellaneous If the terminal requires other than a null (zero) character as a pad, 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. If the terminal can move up or down half a line, this can be indicated with hu (half-line up) and hd (half-line down). This is primarily useful for superscripts and subscripts on hardcopy terminals. If a hardcopy terminal can eject to the next page (form feed), give this as ff (usually control L). 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 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. If the terminal has a settable command character, e.g., Tektronix 4025, this can be indicated with cmdch. A prototype command character is chosen that is used in all capabilities. This character is given in the cmdch capability to identify it. The following convention is supported on some operating systems: if the environment variable CC exists, all occurrences of the prototype character are replaced with the character in CC. Terminal descriptions that do not represent a specific kind of known terminal, e.g., switch, dialup, patch, and network, should include the 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 virtual terminal descriptions for which the escape sequences are known.) If the terminal is one of those supported by the SYSTEM V/88 virtual terminal protocol, the terminal number can be given as vt. A line-turn-around sequence to be transmitted before doing reads should be specified in rfi. If the device uses xon/xoff handshaking for flow control, give xon. Padding information should still be included so that routines can make better decisions about costs, but actual pad characters will not be transmitted. Sequences to turn on and off xon/xoff handshaking may be given in smxon and rmxon. If the characters used for handshaking are not ^S and ^Q, they may be specified with xonc and xoffc. If the terminal has a ``meta key'' that acts as a shift key setting the 8th bit of any character transmitted, indicate with 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 smm and rmm. 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 lm. A value of lm#0 indicates that the number of lines is not fixed, but that there is still more memory than fits on the screen. Media copy strings that control an auxiliary printer connected to the terminal can be given as mc0: print the contents of the screen, mc4: turn off the printer, and mc5: turn on the printer. When the printer is on, all text sent to the terminal will be sent to the printer. A variation, 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. If the text is not displayed on the terminal screen when the printer is on, specify mc5i (silent printer). All text, including mc4, is transparently passed to the printer while an mc5p is in effect. Section 1-15: Special Cases The working model used by terminfo fits most terminals reasonably well. However, some terminals do not completely match that model, requiring special support by terminfo. These are not meant to be construed as deficiencies in the terminals; they are just differences between the working model and the actual hardware. They may be unusual devices or, for some reason, do not have all the features of the terminfo model implemented. Terminals that cannot display tilde ( ) characters, e.g., certain Hazeltine terminals, should indicate hz. Terminals that ignore a linefeed immediately after an am wrap, e.g., Concept 100, should indicate xenl. Those terminals whose cursor remains on the right-most column until another character has been received, instead of wrapping immediately upon receiving the right-most character, e.g., VT100, should also indicate xenl. If el is required to get rid of standout (instead of writing normal text on top of it), xhp should be given. The Teleray terminals whose tabs turn all characters moved over to blanks, should indicate xt (destructive tabs). This capability is also taken to mean that it is not possible to position the cursor on top of a ``magic cookie.'' Therefore, to erase standout mode, it is necessary, instead, to use delete and insert line. The Beehive Superbee terminals that do not transmit the escape or control-C characters, should specify xsb, indicating that the f1 key is to be used for escape and the f2 key for control-C. Section 1-16: Similar Terminals If there are two very similar terminals, one can be defined as being just like the other with certain exceptions. The string capability use can be given with the name of the similar terminal. The capabilities given before use override those in the terminal type invoked by use. A capability can be canceled by placing xx@ to the left of the capability definition, where xx is the capability. For example, the following entry defines an AT&T 4424 terminal that does not have the rev, sgr, and smul capabilities, therefore, cannot do highlighting: att4424-2|Teletype 4424 in display function group ii, rev@, sgr@, smul@, use=att4424, This is useful for different modes for a terminal, or for different user preferences. More than one use capability may be given. FILES /usr/lib/terminfo/?/* compiled terminal description database /usr/lib/.COREterm/?/* subset of compiled terminal description database /usr/lib/tabset/* tab settings for some terminals, in a format appropriate to be output to the terminal (escape sequences that set margins and tabs) SEE ALSO curses(3X), printf(3S) in the Programmer's Reference Manual. captoinfo(1M), infocmp(1M), tic(1M), term(5), tty(7) in the System Administrator's Reference Manual . tput(1) in the User's Reference Manual. Chapter 10 of the Programmer's Guide. WARNING As described in the Tabs and Initialization section, a terminal's initialization strings, is1, is2, and is3, if defined, must be output before a curses(3X) program is run. An available mechanism for outputting such strings is tput init (see tput(1) and profile(4)). If a null character (\0) is encountered in a string, the null and all characters after it are lost. Therefore, it is not possible to code a null character (\0) and send it to a device (either terminal or printer). The suggestion of sending a \0200, where a \0 (null) is needed can succeed only if the device (terminal or printer) ignores the eighth bit. For example, because all eight bits are used in the standard international ASCII character set, devices that adhere to this standard will treat \0200 differently from \0. Tampering with entries in /usr/lib/.COREterm/?/* or /usr/lib/terminfo/?/* (e.g., changing or removing an entry) can affect programs like vi(1) that expect the entry to be present and correct. In particular, removing the description for the "dumb" terminal will cause unexpected problems. NOTE The termcap database (from earlier releases of SYSTEM V/88 Release 3.2) may not be supplied in future releases.