1.\" Copyright (c) 1985, 1991, 1993, 1994 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the University nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" @(#)termcap.5 8.3 (Berkeley) 4/16/94 29.\" 30.\" /*************************************************************************** 31.\" * COPYRIGHT NOTICE * 32.\" **************************************************************************** 33.\" * ncurses is copyright (C) 1992-1995 * 34.\" * Zeyd M. Ben-Halim * 35.\" * zmbenhal@netcom.com * 36.\" * Eric S. Raymond * 37.\" * esr@snark.thyrsus.com * 38.\" * * 39.\" * Permission is hereby granted to reproduce and distribute ncurses * 40.\" * by any means and for any fee, whether alone or as part of a * 41.\" * larger distribution, in source or in binary form, PROVIDED * 42.\" * this notice is included with any such distribution, and is not * 43.\" * removed from any of its header files. Mention of ncurses in any * 44.\" * applications linked with it is highly appreciated. * 45.\" * * 46.\" * ncurses comes AS IS with no warranty, implied or expressed. * 47.\" * * 48.\" ***************************************************************************/ 49.\" 50.\" $FreeBSD$ 51.\" 52.Dd December 13, 2009 53.Dt TERMCAP 5 54.Os 55.Sh NAME 56.Nm termcap 57.Nd terminal capability data base 58.Sh SYNOPSIS 59.Nm 60.Sh DESCRIPTION 61The 62.Nm 63file 64is a data base describing terminals, 65used, 66for example, 67by 68.Xr \&vi 1 69and 70.Xr ncurses 3 . 71Terminals are described in 72.Nm 73by giving a set of capabilities that they have and by describing 74how operations are performed. 75Padding requirements and initialization sequences 76are included in 77.Nm . 78.Pp 79Entries in 80.Nm 81consist of a number of `:'-separated fields. 82The first entry for each terminal gives the names that are known for the 83terminal, separated by `|' characters. 84The first name given is the most common abbreviation for the terminal. 85The last name given should be a long name fully identifying the terminal, 86and all others are understood as synonyms for the terminal name. 87All names but the last should be in lower case and contain no blanks; 88the last name may well contain upper case characters and blanks for 89readability. 90.Pp 91Terminal names (except for the last, verbose entry) 92should be chosen using the following conventions. 93The particular piece of hardware making up the terminal 94should have a root name chosen, thus 95.Dq hp2621 96This name should not contain hyphens. 97Modes that the hardware can be in 98or user preferences 99should be indicated by appending a hyphen and an indicator of the mode. 100Therefore, a 101.Dq vt100 102in 132-column mode would be 103.Dq vt100-w . 104The following suffixes should be used where possible: 105.Bl -column indent "With automatic margins (usually default)xx" -offset indent 106.Sy "Suffix Meaning Example" 107-w Wide mode (more than 80 columns) vt100-w 108-am With automatic margins (usually default) vt100-am 109-nam Without automatic margins vt100-nam 110.Pf \- Ar n Ta No "Number of lines on screen aaa-60" 111-na No arrow keys (leave them in local) concept100-na 112.Pf \- Ar \&np Ta No "Number of pages of memory concept100-4p" 113-rv Reverse video concept100-rv 114.El 115.Sh CAPABILITIES 116The description field attempts to convey the semantics of the 117capability. 118You may find some codes in the description field: 119.Bl -tag -width #[1-9] 120.It (P) 121indicates that padding may be specified. 122.It #[1-9] 123in the description field indicates that the string is passed through 124.Xr tparm 3 125or 126.Xr tgoto 3 127with parms as given (#\fIi\fP). 128.It (P*) 129indicates that padding may vary in proportion to the number of 130lines affected. 131.It (#\d\fIi\fP\u) 132indicates the \fIi\fP\uth\d parameter. 133.El 134.Pp 135These are the boolean capabilities: 136.Bd -literal 137\fBBoolean TCap Description\fR 138\fBVariables Code\fR 139auto_left_margin bw cursor_left wraps from column 0 to last 140 column 141auto_right_margin am terminal has automatic margins 142no_esc_ctlc xb beehive (f1=escape, f2=ctrl C) 143ceol_standout_glitch xs standout not erased by overwriting (hp) 144eat_newline_glitch xn newline ignored after 80 cols (concept) 145erase_overstrike eo can erase overstrikes with a blank 146generic_type gn generic line type 147hard_copy hc hardcopy terminal 148has_meta_key km Has a meta key, sets msb high 149has_status_line hs has extra status line 150insert_null_glitch in insert mode distinguishes nulls 151memory_above da display may be retained above the screen 152memory_below db display may be retained below the screen 153move_insert_mode mi safe to move while in insert mode 154move_standout_mode ms safe to move while in standout mode 155over_strike os terminal can overstrike 156status_line_esc_ok es escape can be used on the status line 157dest_tabs_magic_smso xt tabs destructive, magic so char (t1061) 158tilde_glitch hz cannot print ~'s (hazeltine) 159transparent_underline ul underline character overstrikes 160xon_xoff xo terminal uses xon/xoff handshaking 161needs_xon_xoff nx padding will not work, xon/xoff required 162prtr_silent 5i printer will not echo on screen 163hard_cursor HC cursor is hard to see 164non_rev_rmcup NR enter_ca_mode does not reverse exit_ca_mode 165no_pad_char NP pad character does not exist 166non_dest_scroll_region ND scrolling region is non-destructive 167can_change cc terminal can re-define existing colors 168back_color_erase ut screen erased with background color 169hue_lightness_saturation hl terminal uses only HLS color 170 notation (tektronix) 171col_addr_glitch YA only positive motion for column address and 172 micro_column_address caps 173cr_cancels_micro_mode YB using cr turns off micro mode 174has_print_wheel YC printer needs operator to change character 175 set 176row_addr_glitch YD only positive motion for row_address and 177 micro_row_address caps 178semi_auto_right_margin YE printing in last column causes cr 179cpi_changes_res YF changing character pitch changes resolution 180lpi_changes_res YG changing line pitch changes resolution 181.Ed 182.Pp 183These are the numeric capabilities: 184.Bd -literal 185\fBNumeric TCap Description\fR 186\fBVariables Code\fR 187columns co number of columns in aline 188init_tabs it tabs initially every # spaces 189lines li number of lines on screen or page 190lines_of_memory lm lines of memory if > line. 0 => varies 191magic_cookie_glitch sg number of blank chars left by 192 enter_standout_mode or exit_standout_mode 193padding_baud_rate pb lowest baud rate where padding needed 194virtual_terminal vt virtual terminal number (CB/unix) 195width_status_line ws columns in status line 196num_labels Nl number of labels on screen 197label_height lh rows in each label 198label_width lw columns in each label 199max_attributes ma maximum combined attributes terminal can 200 handle 201maximum_windows MW maximum number of definable windows 202magic_cookie_glitch_ul ug number of blanks left by underline 203# 204# These came in with SVr4's color support 205# 206max_colors Co maximum numbers of colors on screen 207max_pairs pa maximum number of color-pairs on the screen 208no_color_video NC video attributes that cannot be used with 209 colors 210# 211# The following numeric capabilities are present in the SVr4.0 term 212# structure, but are not yet documented in the man page. 213# They came in with SVr4's printer support. 214# 215buffer_capacity Ya numbers of bytes buffered before printing 216dot_vert_spacing Yb spacing of pins vertically in pins per inch 217dot_horz_spacing Yc spacing of dots horizontally in dots per 218 inch 219max_micro_address Yd maximum value in micro_..._address 220max_micro_jump Ye maximum value in parm_..._micro 221micro_char_size Yf character size when in micro mode 222micro_line_size Yg line size when in micro mode 223number_of_pins Yh numbers of pins in print-head 224output_res_char Yi horizontal resolution in units per line 225output_res_line Yj vertical resolution in units per line 226output_res_horz_inch Yk horizontal resolution in units per inch 227output_res_vert_inch Yl vertical resolution in units per inch 228print_rate Ym print rate in chars per second 229wide_char_size Yn character step size when in double wide 230 mode 231buttons BT number of buttons on mouse 232bit_image_entwining Yo number of passed for each bit-image row 233bit_image_type Yp type of bit-image device 234.Ed 235.Pp 236These are the string capabilities: 237.Bd -literal 238\fBString TCap Description\fR 239\fBVariables Code\fR 240back_tab bt back tab (P) 241bell bl audible signal (bell) (P) 242carriage_return cr carriage return (P*) 243change_scroll_region cs change region to line #1 to line #2 (P) 244clear_all_tabs ct clear all tab stops (P) 245clear_screen cl clear screen and home cursor (P*) 246clr_eol ce clear to end of line (P) 247clr_eos cd clear to end of screen (P*) 248column_address ch horizontal position #1, absolute (P) 249command_character CC terminal settable cmd character in 250 prototype 251cursor_address cm move to row #1 columns #2 252cursor_down do down one line 253cursor_home ho home cursor 254cursor_invisible vi make cursor invisible 255cursor_left le move left one space 256cursor_mem_address CM memory relative cursor addressing 257cursor_normal ve make cursor appear normal (undo 258 cursor_invisible/cursor_visible) 259cursor_right nd move right one space 260cursor_to_ll ll last line, first column 261cursor_up up up one line 262cursor_visible vs make cursor very visible 263delete_character dc delete character (P*) 264delete_line dl delete line (P*) 265dis_status_line ds disable status line 266down_half_line hd half a line down 267enter_alt_charset_mode as start alternate character set (P) 268enter_blink_mode mb turn on blinking 269enter_bold_mode md turn on bold (extra bright) mode 270enter_ca_mode ti string to start programs using 271 cursor_address 272enter_delete_mode dm enter delete mode 273enter_dim_mode mh turn on half-bright mode 274enter_insert_mode im enter insert mode 275enter_secure_mode mk turn on blank mode (characters invisible) 276enter_protected_mode mp turn on protected mode 277enter_reverse_mode mr turn on reverse video mode 278enter_standout_mode so begin standout mode 279enter_underline_mode us begin underline mode 280erase_chars ec erase #1 characters (P) 281exit_alt_charset_mode ae end alternate character set (P) 282exit_attribute_mode me turn off all attributes 283exit_ca_mode te strings to end programs using cup 284exit_delete_mode ed end delete mode 285exit_insert_mode ei exit insert mode 286exit_standout_mode se exit standout mode 287exit_underline_mode ue exit underline mode 288flash_screen vb visible bell (may not move cursor) 289form_feed ff hardcopy terminal page eject (P*) 290from_status_line fs return from status line 291init_1string i1 initialization string 292init_2string is initialization string 293init_3string i3 initialization string 294init_file if name of initialization file 295insert_character ic insert character (P) 296insert_line al insert line (P*) 297insert_padding ip insert padding after inserted character 298key_backspace kb backspace key 299key_catab ka clear-all-tabs key 300key_clear kC clear-screen or erase key 301key_ctab kt clear-tab key 302key_dc kD delete-character key 303key_dl kL delete-line key 304key_down kd down-arrow key 305key_eic kM sent by rmir or smir in insert mode 306key_eol kE clear-to-end-of-line key 307key_eos kS clear-to-end-of-screen key 308key_f0 k0 F0 function key 309key_f1 k1 F1 function key 310key_f10 k; F10 function key 311key_f2 k2 F2 function key 312key_f3 k3 F3 function key 313key_f4 k4 F4 function key 314key_f5 k5 F5 function key 315key_f6 k6 F6 function key 316key_f7 k7 F7 function key 317key_f8 k8 F8 function key 318key_f9 k9 F9 function key 319key_home kh home key 320key_ic kI insert-character key 321key_il kA insert-line key 322key_left kl left-arrow key 323key_ll kH last-line key 324key_npage kN next-page key 325key_ppage kP prev-page key 326key_right kr right-arrow key 327key_sf kF scroll-forward key 328key_sr kR scroll-backward key 329key_stab kT set-tab key 330key_up ku up-arrow key 331keypad_local ke leave 'keyboard_transmit' mode 332keypad_xmit ks enter 'keyboard_transmit' mode 333lab_f0 l0 label on function key f0 if not f0 334lab_f1 l1 label on function key f1 if not f1 335lab_f10 la label on function key f10 if not f10 336lab_f2 l2 label on function key f2 if not f2 337lab_f3 l3 label on function key f3 if not f3 338lab_f4 l4 label on function key f4 if not f4 339lab_f5 l5 label on function key f5 if not f5 340lab_f6 l6 label on function key f6 if not f6 341lab_f7 l7 label on function key f7 if not f7 342lab_f8 l8 label on function key f8 if not f8 343lab_f9 l9 label on function key f9 if not f9 344meta_off mo turn off meta mode 345meta_on mm turn on meta mode (8th-bit on) 346newline nw newline (behave like cr followed by lf) 347pad_char pc padding char (instead of null) 348parm_dch DC delete #1 chars (P*) 349parm_delete_line DL delete #1 lines (P*) 350parm_down_cursor DO down #1 lines (P*) 351parm_ich IC insert #1 chars (P*) 352parm_index SF scroll forward #1 lines (P) 353parm_insert_line AL insert #1 lines (P*) 354parm_left_cursor LE move #1 chars to the left (P) 355parm_right_cursor RI move #1 chars to the right (P*) 356parm_rindex SR scroll back #1 lines (P) 357parm_up_cursor UP up #1 lines (P*) 358pkey_key pk program function key #1 to type string #2 359pkey_local pl program function key #1 to execute 360 string #2 361pkey_xmit px program function key #1 to transmit 362 string #2 363print_screen ps print contents of screen 364prtr_off pf turn off printer 365prtr_on po turn on printer 366repeat_char rp repeat char #1 #2 times (P*) 367reset_1string r1 reset string 368reset_2string r2 reset string 369reset_3string r3 reset string 370reset_file rf name of reset file 371restore_cursor rc restore cursor to last position of 372 save_cursor 373row_address cv vertical position #1 absolute (P) 374save_cursor sc save current cursor position (P) 375scroll_forward sf scroll text up (P) 376scroll_reverse sr scroll text down (P) 377set_attributes sa define video attributes #1-#9 (PG9) 378set_tab st set a tab in every row, current columns 379set_window wi current window is lines #1-#2 cols #3-#4 380tab ta tab to next 8-space hardware tab stop 381to_status_line ts move to status line 382underline_char uc underline char and move past it 383up_half_line hu half a line up 384init_prog iP path name of program for initialization 385key_a1 K1 upper left of keypad 386key_a3 K3 upper right of keypad 387key_b2 K2 center of keypad 388key_c1 K4 lower left of keypad 389key_c3 K5 lower right of keypad 390prtr_non pO turn on printer for #1 bytes 391termcap_init2 i2 secondary initialization string 392termcap_reset rs terminal reset string 393# 394# SVr1 capabilities stop here. IBM's version of terminfo is the same as 395# SVr4 up to this point, but has a different set afterwards. 396# 397char_padding rP like insert_padding but when in insert mode 398acs_chars ac graphics charset pairs - def=vt100 399plab_norm pn program label #1 to show string #2 400key_btab kB back-tab key 401enter_xon_mode SX turn on xon/xoff handshaking 402exit_xon_mode RX turn off xon/xoff handshaking 403enter_am_mode SA turn on automatic margins 404exit_am_mode RA turn off automatic margins 405xon_character XN XON character 406xoff_character XF XOFF character 407ena_acs eA enable alternate char set 408label_on LO turn on soft labels 409label_off LF turn off soft labels 410key_beg @1 begin key 411key_cancel @2 cancel key 412key_close @3 close key 413key_command @4 command key 414key_copy @5 copy key 415key_create @6 create key 416key_end @7 end key 417key_enter @8 enter/send key 418key_exit @9 exit key 419key_find @0 find key 420key_help %1 help key 421key_mark %2 mark key 422key_message %3 message key 423key_move %4 move key 424key_next %5 next key 425key_open %6 open key 426key_options %7 options key 427key_previous %8 previous key 428key_print %9 print key 429key_redo %0 redo key 430key_reference &1 reference key 431key_refresh &2 refresh key 432key_replace &3 replace key 433key_restart &4 restart key 434key_resume &5 resume key 435key_save &6 save key 436key_suspend &7 suspend key 437key_undo &8 undo key 438key_sbeg &9 shifted key 439key_scancel &0 shifted key 440key_scommand *1 shifted key 441key_scopy *2 shifted key 442key_screate *3 shifted key 443key_sdc *4 shifted key 444key_sdl *5 shifted key 445key_select *6 select key 446key_send *7 shifted key 447key_seol *8 shifted key 448key_sexit *9 shifted key 449key_sfind *0 shifted key 450key_shelp #1 shifted key 451key_shome #2 shifted key 452key_sic #3 shifted key 453key_sleft #4 shifted key 454key_smessage %a shifted key 455key_smove %b shifted key 456key_snext %c shifted key 457key_soptions %d shifted key 458key_sprevious %e shifted key 459key_sprint %f shifted key 460key_sredo %g shifted key 461key_sreplace %h shifted key 462key_sright %i shifted key 463key_srsume %j shifted key 464key_ssave !1 shifted key 465key_ssuspend !2 shifted key 466key_sundo !3 shifted key 467req_for_input RF send next input char (for ptys) 468key_f11 F1 F11 function key 469key_f12 F2 F12 function key 470key_f13 F3 F13 function key 471key_f14 F4 F14 function key 472key_f15 F5 F15 function key 473key_f16 F6 F16 function key 474key_f17 F7 F17 function key 475key_f18 F8 F18 function key 476key_f19 F9 F19 function key 477key_f20 FA F20 function key 478key_f21 FB F21 function key 479key_f22 FC F22 function key 480key_f23 FD F23 function key 481key_f24 FE F24 function key 482key_f25 FF F25 function key 483key_f26 FG F26 function key 484key_f27 FH F27 function key 485key_f28 FI F28 function key 486key_f29 FJ F29 function key 487key_f30 FK F30 function key 488key_f31 FL F31 function key 489key_f32 FM F32 function key 490key_f33 FN F33 function key 491key_f34 FO F34 function key 492key_f35 FP F35 function key 493key_f36 FQ F36 function key 494key_f37 FR F37 function key 495key_f38 FS F38 function key 496key_f39 FT F39 function key 497key_f40 FU F40 function key 498key_f41 FV F41 function key 499key_f42 FW F42 function key 500key_f43 FX F43 function key 501key_f44 FY F44 function key 502key_f45 FZ F45 function key 503key_f46 Fa F46 function key 504key_f47 Fb F47 function key 505key_f48 Fc F48 function key 506key_f49 Fd F49 function key 507key_f50 Fe F50 function key 508key_f51 Ff F51 function key 509key_f52 Fg F52 function key 510key_f53 Fh F53 function key 511key_f54 Fi F54 function key 512key_f55 Fj F55 function key 513key_f56 Fk F56 function key 514key_f57 Fl F57 function key 515key_f58 Fm F58 function key 516key_f59 Fn F59 function key 517key_f60 Fo F60 function key 518key_f61 Fp F61 function key 519key_f62 Fq F62 function key 520key_f63 Fr F63 function key 521clr_bol cb Clear to beginning of line 522clear_margins MC clear right and left soft margins 523set_left_margin ML set left soft margin 524set_right_margin MR set right soft margin 525label_format Lf label format 526set_clock SC set clock, #1 hrs #2 mins #3 secs 527display_clock DK display clock at (#1,#2) 528remove_clock RC remove clock 529create_window CW define a window #1 from #2, #3 to #4, #5 530goto_window WG go to window #1 531hangup HU hang-up phone 532dial_phone DI dial number #1 533quick_dial QD dial number #1 without checking 534tone TO select touch tone dialing 535pulse PU select pulse dialling 536flash_hook fh flash switch hook 537fixed_pause PA pause for 2-3 seconds 538wait_tone WA wait for dial-tone 539user0 u0 User string #0 540user1 u1 User string #1 541user2 u2 User string #2 542user3 u3 User string #3 543user4 u4 User string #4 544user5 u5 User string #5 545user6 u6 User string #6 546user7 u7 User string #7 547user8 u8 User string #8 548user9 u9 User string #9 549# 550# SVr4 added these capabilities to support color 551# 552orig_pair op Set default pair to its original value 553orig_colors oc Set all color pairs to the original ones 554initialize_color Ic initialize color #1 to (#2,#3,#4) 555initialize_pair Ip Initialize color pair #1 to fg=(#2,#3,#4), 556 bg=(#5,#6,#7) 557set_color_pair sp Set current color pair to #1 558set_foreground Sf Set foreground color #1 559set_background Sb Set background color #1 560# 561# SVr4 added these capabilities to support printers 562# 563change_char_pitch ZA Change number of characters per inch 564change_line_pitch ZB Change number of lines per inch 565change_res_horz ZC Change horizontal resolution 566change_res_vert ZD Change vertical resolution 567define_char ZE Define a character 568enter_doublewide_mode ZF Enter double-wide mode 569enter_draft_quality ZG Enter draft-quality mode 570enter_italics_mode ZH Enter italic mode 571enter_leftward_mode ZI Start leftward carriage motion 572enter_micro_mode ZJ Start micro-motion mode 573enter_near_letter_quality ZK Enter NLQ mode 574enter_normal_quality ZL Enter normal-quality mode 575enter_shadow_mode ZM Enter shadow-print mode 576enter_subscript_mode ZN Enter subscript mode 577enter_superscript_mode ZO Enter superscript mode 578enter_upward_mode ZP Start upward carriage motion 579exit_doublewide_mode ZQ End double-wide mode 580exit_italics_mode ZR End italic mode 581exit_leftward_mode ZS End left-motion mode 582exit_micro_mode ZT End micro-motion mode 583exit_shadow_mode ZU End shadow-print mode 584exit_subscript_mode ZV End subscript mode 585exit_superscript_mode ZW End superscript mode 586exit_upward_mode ZX End reverse character motion 587micro_column_address ZY Like column_address in micro mode 588micro_down ZZ Like cursor_down in micro mode 589micro_left Za Like cursor_left in micro mode 590micro_right Zb Like cursor_right in micro mode 591micro_row_address Zc Like row_address in micro mode 592micro_up Zd Like cursor_up in micro mode 593order_of_pins Ze Match software bits to print-head pins 594parm_down_micro Zf Like parm_down_cursor in micro mode 595parm_left_micro Zg Like parm_left_cursor in micro mode 596parm_right_micro Zh Like parm_right_cursor in micro mode 597parm_up_micro Zi Like parm_up_cursor in micro mode 598select_char_set Zj Select character set 599set_bottom_margin Zk Set bottom margin at current line 600set_bottom_margin_parm Zl Set bottom margin at line #1 or #2 lines 601 from bottom 602set_left_margin_parm Zm Set left (right) margin at column #1 (#2) 603set_right_margin_parm Zn Set right margin at column #1 604set_top_margin Zo Set top margin at current line 605set_top_margin_parm Zp Set top (bottom) margin at row #1 (#2) 606start_bit_image Zq Start printing bit image graphics 607start_char_set_def Zr Start character set definition 608stop_bit_image Zs Stop printing bit image graphics 609stop_char_set_def Zt End definition of character aet 610subscript_characters Zu List of subscriptible characters 611superscript_characters Zv List of superscriptible characters 612these_cause_cr Zw Printing any of these chars causes CR 613zero_motion Zx No motion for subsequent character 614# 615# The following string capabilities are present in the SVr4.0 term 616# structure, but are not documented in the man page. 617# 618char_set_names Zy List of character set names 619key_mouse Km Mouse event has occurred 620mouse_info Mi Mouse status information 621req_mouse_pos RQ Request mouse position 622get_mouse Gm Curses should get button events 623set_a_foreground AF Set ANSI foreground color 624set_a_background AB Set ANSI background color 625pkey_plab xl Program function key #1 to type string #2 626 and show string #3 627device_type dv Indicate language/codeset support 628code_set_init ci Init sequence for multiple codesets 629set0_des_seq s0 Shift to code set 0 (EUC set 0, ASCII) 630set1_des_seq s1 Shift to code set 1 631set2_des_seq s2 Shift to code set 2 632set3_des_seq s3 Shift to code set 3 633set_lr_margin ML Set both left and right margins to #1, #2 634set_tb_margin MT Sets both top and bottom margins to #1, #2 635bit_image_repeat Xy Repeat bit image cell #1 #2 times 636bit_image_newline Zz Move to next row of the bit image 637bit_image_carriage_return Yv Move to beginning of same row 638color_names Yw Give name for color #1 639define_bit_image_region Yx Define rectangular bit image region 640end_bit_image_region Yy End a bit-image region 641set_color_band Yz Change to ribbon color #1 642set_page_length YZ Set page length to #1 lines 643# 644# SVr4 added these capabilities for direct PC-clone support 645# 646display_pc_char S1 Display PC character 647enter_pc_charset_mode S2 Enter PC character display mode 648exit_pc_charset_mode S3 Exit PC character display mode 649enter_scancode_mode S4 Enter PC scancode mode 650exit_scancode_mode S5 Exit PC scancode mode 651pc_term_options S6 PC terminal options 652scancode_escape S7 Escape for scancode emulation 653alt_scancode_esc S8 Alternate escape for scancode emulation 654# 655# The XSI Curses standard added these. 656# 657enter_horizontal_hl_mode Xh Enter horizontal highlight mode 658enter_left_hl_mode Xl Enter left highlight mode 659enter_low_hl_mode Xo Enter low highlight mode 660enter_right_hl_mode Xr Enter right highlight mode 661enter_top_hl_mode Xt Enter top highlight mode 662enter_vertical_hl_mode Xv Enter vertical highlight mode 663.Ed 664.Pp 665Obsolete termcap capabilities. 666New software should not rely on them at all. 667.Bd -literal 668\fBBoolean TCap Description\fR 669\fBVariables Code\fR 670linefeed_is_newline NL move down with ^J 671even_parity EP terminal requires even parity 672odd_parity OP terminal requires odd parity 673half_duplex HD terminal is half-duplex 674lower_case_only LC terminal has only lower case 675upper_case_only UC terminal has only upper case 676has_hardware_tabs pt has 8-char tabs invoked with ^I 677return_does_clr_eol xr return clears the line 678tek_4025_insert_line xx Tektronix 4025 insert-line glitch 679backspaces_with_bs bs uses ^H to move left 680crt_no_scrolling ns crt cannot scroll 681no_correctly_working_cr nc no way to go to start of line 682.Ed 683.Bd -literal 684\fBNumber TCap Description\fR 685\fBVariables Code\fR 686backspace_delay dB padding required for ^H 687form_feed_delay dF padding required for ^L 688horizontal_tab_delay dT padding required for ^I 689vertical_tab_delay dV padding required for ^V 690number_of_function_keys kn count of function keys 691carriage_return_delay dC pad needed for CR 692new_line_delay dN pad needed for LF 693.Ed 694.Bd -literal 695\fBString TCap Description\fR 696\fBVariables Code\fR 697other_non_function_keys ko list of self-mapped keycaps 698arrow_key_map ma map arrow keys 699memory_lock_above ml lock visible screen memory above the 700 current line 701memory_unlock mu unlock visible screen memory above the 702 current line 703linefeed_if_not_lf nl use to move down 704backspace_if_not_bs bc move left, if not ^H 705.Ed 706.Ss A Sample Entry 707The following entry, which describes the Concept\-100, is among the more 708complex entries in the 709.Nm 710file as of this writing. 711.Bd -literal 712ca\||\|concept100\||\|c100\||\|concept\||\|c104\||\|concept100-4p\||\|HDS Concept\-100:\e 713 :al=3*\eE^R:am:bl=^G:cd=16*\eE^C:ce=16\eE^U:cl=2*^L:cm=\eEa%+ %+ :\e 714 :co#80:.cr=9^M:db:dc=16\eE^A:dl=3*\eE^B:do=^J:ei=\eE\e200:eo:im=\eE^P:in:\e 715 :ip=16*:is=\eEU\eEf\eE7\eE5\eE8\eEl\eENH\eEK\eE\e200\eEo&\e200\eEo\e47\eE:k1=\eE5:\e 716 :k2=\eE6:k3=\eE7:kb=^h:kd=\eE<:ke=\eEx:kh=\eE?:kl=\eE>:kr=\eE=:ks=\eEX:\e 717 :ku=\eE;:le=^H:li#24:mb=\eEC:me=\eEN\e200:mh=\eEE:mi:mk=\eEH:mp=\eEI:\e 718 :mr=\eED:nd=\eE=:pb#9600:rp=0.2*\eEr%.%+ :se=\eEd\eEe:sf=^J:so=\eEE\eED:\e 719 :.ta=8\et:te=\eEv \e200\e200\e200\e200\e200\e200\eEp\er\en:\e 720 :ti=\eEU\eEv 8p\eEp\er:ue=\eEg:ul:up=\eE;:us=\eEG:\e 721 :vb=\eEk\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\eEK:\e 722 :ve=\eEw:vs=\eEW:vt#8:xn:\e 723 :bs:cr=^M:dC#9:dT#8:nl=^J:ta=^I:pt: 724.Ed 725.Pp 726Entries may continue onto multiple lines by giving a \e as the last 727character of a line, and empty fields 728may be included for readability (here between the last field on a line 729and the first field on the next). 730Comments may be included on lines beginning with 731.Dq # . 732.Ss Types of Capabilities 733Capabilities in 734.Nm 735are of three types: Boolean capabilities, 736which indicate particular features that the terminal has; 737numeric capabilities, 738giving the size of the display or the size of other attributes; 739and string capabilities, 740which give character sequences that can be used to perform particular 741terminal operations. 742All capabilities have two-letter codes. 743For instance, the fact that 744the Concept has 745.Em automatic margins 746(an automatic return and linefeed 747when the end of a line is reached) is indicated by the Boolean capability 748.Sy \&am . 749Hence the description of the Concept includes 750.Sy \&am . 751.Pp 752Numeric capabilities are followed by the character `#' then the value. 753In the example above 754.Sy \&co , 755which indicates the number of columns the display has, 756gives the value `80' for the Concept. 757.Pp 758Finally, string-valued capabilities, such as 759.Sy \&ce 760(clear-to-end-of-line 761sequence) are given by the two-letter code, an `=', then a string 762ending at the next following `:'. 763A delay in milliseconds may appear after 764the `=' in such a capability, 765which causes padding characters to be supplied by 766.Xr tputs 3 767after the remainder of the string is sent to provide this delay. 768The delay can be either a number, 769such as `20', or a number followed by 770an `*', 771such as `3*'. 772An `*' indicates that the padding required is proportional 773to the number of lines affected by the operation, and the amount given is 774the per-affected-line padding required. 775(In the case of insert-character, 776the factor is still the number of 777.Em lines 778affected; 779this is always 1 unless the terminal has 780.Sy \&in 781and the software uses it.) 782When an `*' is specified, it is sometimes useful to give a delay of the form 783`3.5' to specify a delay per line to tenths of milliseconds. 784(Only one decimal place is allowed.) 785.Pp 786A number of escape sequences are provided in the string-valued capabilities 787for easy encoding of control characters there. 788.Sy \&\eE 789maps to an 790.Dv ESC 791character, 792.Sy \&^X 793maps to a control-X for any appropriate X, 794and the sequences 795.Sy \&\en 796.Sy \&\er 797.Sy \&\et 798.Sy \&\eb 799.Sy \&\ef 800map to linefeed, return, tab, backspace, and formfeed, respectively. 801Finally, characters may be given as three octal digits after a 802.Sy \&\e , 803and the characters 804.Sy \&^ 805and 806.Sy \&\e 807may be given as 808.Sy \&\e^ 809and 810.Sy \&\e\e . 811If it is necessary to place a 812.Sy \&: 813in a capability it must be escaped as 814.Sy \e: 815or be encoded as 816.Sy \&\e072 . 817If it is necessary to place a 818.Dv NUL 819character in a string capability it 820must be encoded as 821.Sy \&\e200 . 822(The routines that deal with 823.Nm 824use C strings and strip the high bits of the output very late, so that 825a 826.Sy \&\e200 827comes out as a 828.Sy \&\e000 829would.) 830.Pp 831Sometimes individual capabilities must be commented out. 832To do this, put a period before the capability name. 833For example, see the first 834.Sy \&cr 835and 836.Sy \&ta 837in the example above. 838.Ss Preparing Descriptions 839The most effective way to prepare a terminal description is by imitating 840the description of a similar terminal in 841.Nm 842and to build up a description gradually, using partial descriptions 843with 844.Xr \&vi 1 845to check that they are correct. 846Be aware that a very unusual terminal may expose deficiencies in 847the ability of the 848.Nm 849file to describe it 850or bugs in 851.Xr \&vi 1 . 852To easily test a new terminal description you are working on 853you can put it in your home directory in a file called 854.Pa .termcap 855and programs will look there before looking in 856.Pa /usr/share/misc/termcap . 857You can also set the environment variable 858.Ev TERMPATH 859to a list of absolute file pathnames (separated by spaces or colons), 860one of which contains the description you are working on, 861and programs will search them in the order listed, and nowhere else. 862See 863.Xr termcap 3 . 864The 865.Ev TERMCAP 866environment variable is usually set to the 867.Nm 868entry itself 869to avoid reading files when starting up a program. 870.Pp 871To get the padding for insert-line right 872(if the terminal manufacturer did not document it), 873a severe test is to use 874.Xr \&vi 1 875to edit 876.Pa /etc/passwd 877at 9600 baud, delete roughly 16 lines from the middle of the screen, 878then hit the `u' key several times quickly. 879If the display messes up, more padding is usually needed. 880A similar test can be used for insert-character. 881.Ss Basic Capabilities 882The number of columns on each line of the display is given by the 883.Sy \&co 884numeric capability. 885If the display is a 886.Tn CRT , 887then the 888number of lines on the screen is given by the 889.Sy \&li 890capability. 891If the display wraps around to the beginning of the next line when 892the cursor reaches the right margin, then it should have the 893.Sy \&am 894capability. 895If the terminal can clear its screen, 896the code to do this is given by the 897.Sy \&cl 898string capability. 899If the terminal overstrikes 900(rather than clearing the position when a character is overwritten), 901it should have the 902.Sy \&os 903capability. 904If the terminal is a printing terminal, 905with no soft copy unit, 906give it both 907.Sy \&hc 908and 909.Sy \&os . 910.Pf ( Sy \&os 911applies to storage scope terminals, 912such as the Tektronix 4010 series, 913as well as to hard copy and 914.Tn APL 915terminals.) 916If there is a code to move the cursor to the left edge of the current row, 917give this as 918.Sy \&cr . 919(Normally this will be carriage-return, 920.Sy \&^M . ) 921If there is a code to produce an audible signal (bell, beep, 922etc.), 923give this as 924.Sy \&bl . 925.Pp 926If there is a code (such as backspace) 927to move the cursor one position to the left, 928that capability should be given as 929.Sy \&le . 930Similarly, 931codes to move to the right, up, and down 932should be given as 933.Sy \&nd , 934.Sy \&up , 935and 936.Sy \&do , 937respectively. 938These 939.Em local cursor motions 940should not alter the text they pass over; 941for example, you would not normally use 942.Dq nd=\ \& 943unless the terminal has the 944.Sy \&os 945capability, 946because the space would erase the character moved over. 947.Pp 948A very important point here is that the local cursor motions encoded 949in 950.Nm 951have undefined behavior at the left and top edges of a 952.Tn CRT 953display. 954Programs should never attempt to backspace around the left edge, 955unless 956.Sy \&bw 957is given, and never attempt to go up off the top 958using local cursor motions. 959.Pp 960In order to scroll text up, 961a program goes to the bottom left corner of the screen and sends the 962.Sy \&sf 963(index) string. 964To scroll text down, 965a program goes to the top left corner of the screen and sends the 966.Sy \&sr 967(reverse index) string. 968The strings 969.Sy \&sf 970and 971.Sy \&sr 972have undefined behavior 973when not on their respective corners of the screen. 974Parameterized versions of the scrolling sequences are 975.Sy \&SF 976and 977.Sy \&SR , 978which have the same semantics as 979.Sy \&sf 980and 981.Sy \&sr 982except that they take one parameter 983and scroll that many lines. 984They also have undefined behavior 985except at the appropriate corner of the screen. 986.Pp 987The 988.Sy \&am 989capability tells whether the cursor sticks at the right 990edge of the screen when text is output there, 991but this does not necessarily apply to 992.Sy \&nd 993from the last column. 994Leftward local motion is defined from the left edge only when 995.Sy \&bw 996is given; then an 997.Sy \&le 998from the left edge will move to the right edge of the previous row. 999This is useful for drawing a box around the edge of the screen, 1000for example. 1001If the terminal has switch-selectable automatic margins, 1002the 1003.Nm 1004description usually assumes that this feature is on, 1005.Em i.e . , 1006.Sy \&am . 1007If the terminal has a command 1008that moves to the first column of the next line, 1009that command can be given as 1010.Sy \&nw 1011(newline). 1012It is permissible for this to clear the remainder of the current line, 1013so if the terminal has no correctly-working 1014.Tn \&CR 1015and 1016.Tn \&LF 1017it may still be possible to craft a working 1018.Sy \&nw 1019out of one or both of them. 1020.Pp 1021These capabilities suffice to describe hardcopy and 1022.Dq glass-tty 1023terminals. 1024Thus the Teletype model 33 is described as 1025.Bd -literal -offset indent 1026T3\||\|tty33\||\|33\||\|tty\||\|Teletype model 33:\e 1027 :bl=^G:co#72:cr=^M:do=^J:hc:os: 1028.Ed 1029.Pp 1030and the Lear Siegler 1031.Tn ADM Ns \-3 1032is described as 1033.Bd -literal -offset indent 1034l3\||\|adm3\||\|3\||\|LSI ADM-3:\e 1035:am:bl=^G:cl=^Z:co#80:cr=^M:do=^J:le=^H:li#24:sf=^J: 1036.Ed 1037.Ss Parameterized Strings 1038Cursor addressing and other strings requiring parameters 1039are described by a 1040parameterized string capability, with 1041.Xr printf 3 Ns \-like 1042escapes 1043.Sy \&%x 1044in it, 1045while other characters are passed through unchanged. 1046For example, to address the cursor the 1047.Sy \&cm 1048capability is given, using two parameters: the row and column to move to. 1049(Rows and columns are numbered from zero and refer to the physical screen 1050visible to the user, not to any unseen memory. 1051If the terminal has memory-relative cursor addressing, 1052that can be indicated by an analogous 1053.Sy \&CM 1054capability.) 1055.Pp 1056The 1057.Sy \&% 1058encodings have the following meanings: 1059.Bl -column xxxxx 1060.It "%% output `%'" 1061.It "%d output value as in" 1062.Xr printf 3 1063%d 1064.It "%2 output value as in" 1065.Xr printf 3 1066%2d 1067.It "%3 output value as in" 1068.Xr printf 3 1069%3d 1070.It "%. output value as in" 1071.Xr printf 3 1072%c 1073.It "%+" Ns Em x Ta No add 1074.Em x 1075to value, then do %. 1076.It "%>" Ns Em \&xy Ta No if 1077value > 1078.Em x 1079then add 1080.Em y , 1081no output 1082.It "%r reverse order of two parameters, no output" 1083.It "%i increment by one, no output" 1084.It "%n exclusive-or all parameters with 0140 (Datamedia 2500)" 1085.It "\&%B" Ta Tn BCD No "(16*(value/10)) + (value%10), no output" 1086.It "%D Reverse coding (value \- 2*(value%16)), no output (Delta Data)." 1087.El 1088.Pp 1089Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs 1090to be sent 1091.Dq \eE&a12c03Y 1092padded for 6 milliseconds. 1093Note that the order 1094of the row and column coordinates is reversed here 1095and that the row and column 1096are sent as two-digit integers. 1097Thus its 1098.Sy \&cm 1099capability is 1100.Dq Li cm=6\eE&%r%2c%2Y . 1101.Pp 1102The Datamedia 2500 needs the current row and column sent 1103encoded in binary using 1104.Dq \&%. . 1105Terminals that use 1106.Dq %.\& 1107need to be able to 1108backspace the cursor 1109.Pq Sy \&le 1110and to move the cursor up one line on the screen 1111.Pq Sy \&up . 1112This is necessary because it is not always safe to transmit 1113.Sy \&\en , 1114.Sy \&^D , 1115and 1116.Sy \&\er , 1117as the system may change or discard them. 1118(Programs using 1119.Nm 1120must set terminal modes so that tabs are not expanded, so 1121.Sy \&\et 1122is safe to send. 1123This turns out to be essential for the Ann Arbor 4080.) 1124.Pp 1125A final example is the Lear Siegler 1126.Tn ADM Ns \-3a , 1127which offsets row and column 1128by a blank character, thus 1129.Dq Li cm=\eE=%+ %+\ \& . 1130.Pp 1131Row or column absolute cursor addressing 1132can be given as single parameter capabilities 1133.Sy \&ch 1134(horizontal position absolute) and 1135.Sy \&cv 1136(vertical position absolute). 1137Sometimes these are shorter than the more general two-parameter sequence 1138(as with the Hewlett-Packard 2645) and can be used in preference to 1139.Sy \&cm . 1140If there are parameterized local motions 1141.Pf ( Em e.g . , 1142move 1143.Ar n 1144positions to the right) 1145these can be given as 1146.Sy \&DO , 1147.Sy \&LE , 1148.Sy \&RI , 1149and 1150.Sy \&UP 1151with a single parameter indicating how many positions to move. 1152These are primarily useful if the terminal does not have 1153.Sy \&cm , 1154such as the Tektronix 4025. 1155.Ss Cursor Motions 1156If the terminal has a fast way to home the cursor 1157(to the very upper left corner of the screen), this can be given as 1158.Sy \&ho . 1159Similarly, a fast way of getting to the lower left-hand corner 1160can be given as 1161.Sy \&ll ; 1162this may involve going up with 1163.Sy \&up 1164from the home position, 1165but a program should never do this itself (unless 1166.Sy \&ll 1167does), because it can 1168make no assumption about the effect of moving up from the home position. 1169Note that the home position is the same as 1170cursor address (0,0): to the top left corner of the screen, not of memory. 1171(Therefore, the 1172.Dq \eEH 1173sequence on Hewlett-Packard terminals 1174cannot be used for 1175.Sy \&ho . ) 1176.Ss Area Clears 1177If the terminal can clear from the current position to the end of the 1178line, leaving the cursor where it is, this should be given as 1179.Sy \&ce . 1180If the terminal can clear from the current position to the end of the 1181display, this should be given as 1182.Sy \&cd . 1183.Sy \&cd 1184must only be invoked from the first column of a line. 1185(Therefore, 1186it can be simulated by a request to delete a large number of lines, 1187if a true 1188.Sy \&cd 1189is not available.) 1190.Ss Insert/Delete Line 1191If the terminal can open a new blank line 1192before the line containing the cursor, 1193this should be given as 1194.Sy \&al ; 1195this must be invoked only from the first 1196position of a line. 1197The cursor must then appear at the left of the newly blank line. 1198If the terminal can delete the line that the cursor is on, this 1199should be given as 1200.Sy \&dl ; 1201this must only be used from the first position on 1202the line to be deleted. 1203Versions of 1204.Sy \&al 1205and 1206.Sy \&dl 1207which take a single parameter 1208and insert or delete that many lines 1209can be given as 1210.Sy \&AL 1211and 1212.Sy \&DL . 1213If the terminal has a settable scrolling region 1214(like the VT100), 1215the command to set this can be described with the 1216.Sy \&cs 1217capability, 1218which takes two parameters: the top and bottom lines of the scrolling region. 1219The cursor position is, alas, undefined after using this command. 1220It is possible to get the effect of insert or delete line 1221using this command \(em the 1222.Sy \&sc 1223and 1224.Sy \&rc 1225(save and restore cursor) commands are also useful. 1226Inserting lines at the top or bottom of the screen can also be done using 1227.Sy \&sr 1228or 1229.Sy \&sf 1230on many terminals without a true insert/delete line, 1231and is often faster even on terminals with those features. 1232.Pp 1233If the terminal has the ability to define a window as part of memory 1234which all commands affect, it should be given as the parameterized string 1235.Sy \&wi . 1236The four parameters are the starting and ending lines in memory 1237and the starting and ending columns in memory, in that order. 1238(This 1239.Xr terminfo 5 1240capability is described for completeness. 1241It is unlikely that any 1242.Nm Ns \-using 1243program will support it.) 1244.Pp 1245If the terminal can retain display memory above the screen, then the 1246.Sy \&da 1247capability should be given; 1248if display memory can be retained 1249below, then 1250.Sy \&db 1251should be given. 1252These indicate 1253that deleting a line or scrolling may bring non-blank lines up from below 1254or that scrolling back with 1255.Sy \&sr 1256may bring down non-blank lines. 1257.Ss Insert/Delete Character 1258There are two basic kinds of intelligent terminals with respect to 1259insert/delete character that can be described using 1260.Nm . 1261The most common insert/delete character operations affect only the characters 1262on the current line and shift characters off the end of the line rigidly. 1263Other terminals, such as the Concept\-100 and the Perkin Elmer Owl, make 1264a distinction between typed and untyped blanks on the screen, shifting 1265upon an insert or delete only to an untyped blank on the screen which is 1266either eliminated or expanded to two untyped blanks. 1267You can determine 1268the kind of terminal you have by clearing the screen then typing 1269text separated by cursor motions. 1270Type 1271.Dq Li abc\ \ \ \ def 1272using local 1273cursor motions (not spaces) between the 1274.Dq abc 1275and the 1276.Dq def . 1277Then position the cursor before the 1278.Dq abc 1279and put the terminal in insert 1280mode. 1281If typing characters causes the rest of the line to shift 1282rigidly and characters to fall off the end, then your terminal does 1283not distinguish between blanks and untyped positions. 1284If the 1285.Dq abc 1286shifts over to the 1287.Dq def 1288which then move together around the end of the 1289current line and onto the next as you insert, then you have the second type of 1290terminal and should give the capability 1291.Sy \&in , 1292which stands for 1293.Dq insert null . 1294While these are two logically separate attributes 1295(one line 1296.Em \&vs . 1297multi-line insert mode, 1298and special treatment of untyped spaces), 1299we have seen no terminals whose insert 1300mode cannot be described with the single attribute. 1301.Pp 1302The 1303.Nm 1304entries can describe both terminals that have an insert mode and terminals 1305that send a simple sequence to open a blank position on the current line. 1306Give as 1307.Sy \&im 1308the sequence to get into insert mode. 1309Give as 1310.Sy \&ei 1311the sequence to leave insert mode. 1312Now give as 1313.Sy \&ic 1314any sequence that needs to be sent just before 1315each character to be inserted. 1316Most terminals with a true insert mode 1317will not give 1318.Sy \&ic ; 1319terminals that use a sequence to open a screen 1320position should give it here. 1321(If your terminal has both, 1322insert mode is usually preferable to 1323.Sy \&ic . 1324Do not give both unless the terminal actually requires both to be used 1325in combination.) 1326If post-insert padding is needed, give this as a number of milliseconds 1327in 1328.Sy \&ip 1329(a string option). 1330Any other sequence that may need to be 1331sent after insertion of a single character can also be given in 1332.Sy \&ip . 1333If your terminal needs to be placed into an `insert mode' 1334and needs a special code preceding each inserted character, 1335then both 1336.Sy \&im Ns / Sy \&ei 1337and 1338.Sy \&ic 1339can be given, and both will be used. 1340The 1341.Sy \&IC 1342capability, with one parameter 1343.Em n , 1344will repeat the effects of 1345.Sy \&ic 1346.Em n 1347times. 1348.Pp 1349It is occasionally necessary to move around while in insert mode 1350to delete characters on the same line 1351.Pf ( Em e.g . , 1352if there is a tab after 1353the insertion position). 1354If your terminal allows motion while in 1355insert mode, you can give the capability 1356.Sy \&mi 1357to speed up inserting 1358in this case. 1359Omitting 1360.Sy \&mi 1361will affect only speed. 1362Some terminals 1363(notably Datamedia's) must not have 1364.Sy \&mi 1365because of the way their 1366insert mode works. 1367.Pp 1368Finally, you can specify 1369.Sy \&dc 1370to delete a single character, 1371.Sy \&DC 1372with one parameter 1373.Em n 1374to delete 1375.Em n 1376characters, 1377and delete mode by giving 1378.Sy \&dm 1379and 1380.Sy \&ed 1381to enter and exit delete mode 1382(which is any mode the terminal needs to be placed in for 1383.Sy \&dc 1384to work). 1385.Ss Highlighting, Underlining, and Visible Bells 1386If your terminal has one or more kinds of display attributes, 1387these can be represented in a number of different ways. 1388You should choose one display form as 1389.Em standout mode , 1390representing a good high-contrast, easy-on-the-eyes format 1391for highlighting error messages and other attention getters. 1392(If you have a choice, reverse video plus half-bright is good, 1393or reverse video alone.) 1394The sequences to enter and exit standout mode 1395are given as 1396.Sy \&so 1397and 1398.Sy \&se , 1399respectively. 1400If the code to change into or out of standout 1401mode leaves one or even two blank spaces or garbage characters on the screen, 1402as the 1403.Tn TVI 1404912 and Teleray 1061 do, 1405then 1406.Sy \&sg 1407should be given to tell how many characters are left. 1408.Pp 1409Codes to begin underlining and end underlining can be given as 1410.Sy \&us 1411and 1412.Sy \&ue , 1413respectively. 1414Underline mode change garbage is specified by 1415.Sy \&ug , 1416similar to 1417.Sy \&sg . 1418If the terminal has a code to underline the current character and move 1419the cursor one position to the right, 1420such as the Microterm Mime, 1421this can be given as 1422.Sy \&uc . 1423.Pp 1424Other capabilities to enter various highlighting modes include 1425.Sy \&mb 1426(blinking), 1427.Sy \&md 1428(bold or extra bright), 1429.Sy \&mh 1430(dim or half-bright), 1431.Sy \&mk 1432(blanking or invisible text), 1433.Sy \&mp 1434(protected), 1435.Sy \&mr 1436(reverse video), 1437.Sy \&me 1438(turn off 1439.Em all 1440attribute modes), 1441.Sy \&as 1442(enter alternate character set mode), and 1443.Sy \&ae 1444(exit alternate character set mode). 1445Turning on any of these modes singly may or may not turn off other modes. 1446.Pp 1447If there is a sequence to set arbitrary combinations of mode, 1448this should be given as 1449.Sy \&sa 1450(set attributes), taking 9 parameters. 1451Each parameter is either 0 or 1, 1452as the corresponding attributes is on or off. 1453The 9 parameters are, in order: standout, underline, reverse, blink, 1454dim, bold, blank, protect, and alternate character set. 1455Not all modes need be supported by 1456.Sy \&sa , 1457only those for which corresponding attribute commands exist. 1458(It is unlikely that a 1459.Nm Ns \-using 1460program will support this capability, which is defined for compatibility 1461with 1462.Xr terminfo 5 . ) 1463.Pp 1464Terminals with the 1465.Dq magic cookie 1466glitches 1467.Pf ( Sy \&sg 1468and 1469.Sy \&ug ) , 1470rather than maintaining extra attribute bits for each character cell, 1471instead deposit special 1472.Dq cookies , 1473or 1474.Dq garbage characters , 1475when they receive mode-setting sequences, 1476which affect the display algorithm. 1477.Pp 1478Some terminals, 1479such as the Hewlett-Packard 2621, 1480automatically leave standout 1481mode when they move to a new line or when the cursor is addressed. 1482Programs using standout mode 1483should exit standout mode on such terminals 1484before moving the cursor or sending a newline. 1485On terminals where this is not a problem, 1486the 1487.Sy \&ms 1488capability should be present 1489to say that this overhead is unnecessary. 1490.Pp 1491If the terminal has 1492a way of flashing the screen to indicate an error quietly 1493(a bell replacement), 1494this can be given as 1495.Sy \&vb ; 1496it must not move the cursor. 1497.Pp 1498If the cursor needs to be made more visible than normal 1499when it is not on the bottom line 1500(to change, for example, a non-blinking underline into an easier-to-find 1501block or blinking underline), 1502give this sequence as 1503.Sy \&vs . 1504If there is a way to make the cursor completely invisible, give that as 1505.Sy \&vi . 1506The capability 1507.Sy \&ve , 1508which undoes the effects of both of these modes, 1509should also be given. 1510.Pp 1511If your terminal correctly displays underlined characters 1512(with no special codes needed) 1513even though it does not overstrike, 1514then you should give the capability 1515.Sy \&ul . 1516If overstrikes are erasable with a blank, 1517this should be indicated by giving 1518.Sy \&eo . 1519.Ss Keypad 1520If the terminal has a keypad that transmits codes when the keys are pressed, 1521this information can be given. 1522Note that it is not possible to handle 1523terminals where the keypad only works in local mode 1524(this applies, for example, to the unshifted Hewlett-Packard 2621 keys). 1525If the keypad can be set to transmit or not transmit, 1526give these codes as 1527.Sy \&ks 1528and 1529.Sy \&ke . 1530Otherwise the keypad is assumed to always transmit. 1531The codes sent by the left-arrow, right-arrow, up-arrow, down-arrow, 1532and home keys can be given as 1533.Sy \&kl , 1534.Sy \&kr , 1535.Sy \&ku , 1536.Sy \&kd , 1537and 1538.Sy \&kh , 1539respectively. 1540If there are function keys such as f0, f1, ..., f9, the codes they send 1541can be given as 1542.Sy \&k0 , 1543.Sy \&k1 , 1544\&..., 1545.Sy \&k9 . 1546If these keys have labels other than the default f0 through f9, the labels 1547can be given as 1548.Sy \&l0 , 1549.Sy \&l1 , 1550\&..., 1551.Sy \&l9 . 1552The codes transmitted by certain other special keys can be given: 1553.Sy \&kH 1554(home down), 1555.Sy \&kb 1556(backspace), 1557.Sy \&ka 1558(clear all tabs), 1559.Sy \&kt 1560(clear the tab stop in this column), 1561.Sy \&kC 1562(clear screen or erase), 1563.Sy \&kD 1564(delete character), 1565.Sy \&kL 1566(delete line), 1567.Sy \&kM 1568(exit insert mode), 1569.Sy \&kE 1570(clear to end of line), 1571.Sy \&kS 1572(clear to end of screen), 1573.Sy \&kI 1574(insert character or enter insert mode), 1575.Sy \&kA 1576(insert line), 1577.Sy \&kN 1578(next page), 1579.Sy \&kP 1580(previous page), 1581.Sy \&kF 1582(scroll forward/down), 1583.Sy \&kR 1584(scroll backward/up), and 1585.Sy \&kT 1586(set a tab stop in this column). 1587In addition, if the keypad has a 3 by 3 array of keys 1588including the four arrow keys, then the other five keys can be given as 1589.Sy \&K1 , 1590.Sy \&K2 , 1591.Sy \&K3 , 1592.Sy \&K4 , 1593and 1594.Sy \&K5 . 1595These keys are useful when the effects of a 3 by 3 directional pad are needed. 1596The obsolete 1597.Sy \&ko 1598capability formerly used to describe 1599.Dq other 1600function keys has been 1601completely supplanted by the above capabilities. 1602.Pp 1603The 1604.Sy \&ma 1605entry is also used to indicate arrow keys on terminals that have 1606single-character arrow keys. 1607It is obsolete but still in use in 1608version 2 of 1609.Sy \&vi 1610which must be run on some minicomputers due to 1611memory limitations. 1612This field is redundant with 1613.Sy \&kl , 1614.Sy \&kr , 1615.Sy \&ku , 1616.Sy \&kd , 1617and 1618.Sy \&kh . 1619It consists of groups of two characters. 1620In each group, the first character is what an arrow key sends, and the 1621second character is the corresponding 1622.Sy \&vi 1623command. 1624These commands are 1625.Ar h 1626for 1627.Sy \&kl , 1628.Ar j 1629for 1630.Sy \&kd , 1631.Ar k 1632for 1633.Sy \&ku , 1634.Ar l 1635for 1636.Sy \&kr , 1637and 1638.Ar H 1639for 1640.Sy \&kh . 1641For example, the Mime would have 1642.Dq Li ma=^Hh^Kj^Zk^Xl 1643indicating arrow keys left (^H), down (^K), up (^Z), and right (^X). 1644(There is no home key on the Mime.) 1645.Ss Tabs and Initialization 1646If the terminal needs to be in a special mode when running 1647a program that uses these capabilities, 1648the codes to enter and exit this mode can be given as 1649.Sy \&ti 1650and 1651.Sy \&te . 1652This arises, for example, from terminals like the Concept with more than 1653one page of memory. 1654If the terminal has only memory-relative cursor addressing and not 1655screen-relative cursor addressing, 1656a screen-sized window must be fixed into 1657the display for cursor addressing to work properly. 1658This is also used for the Tektronix 4025, where 1659.Sy \&ti 1660sets the command character to be the one used by 1661.Nm . 1662.Pp 1663Other capabilities 1664include 1665.Sy \&is , 1666an initialization string for the terminal, 1667and 1668.Sy \&if , 1669the name of a file containing long initialization strings. 1670These strings are expected to set the terminal into modes 1671consistent with the rest of the 1672.Nm 1673description. 1674They are normally sent to the terminal by the 1675.Xr tset 1 1676program each time the user logs in. 1677They will be printed in the following order: 1678.Sy \&is ; 1679setting tabs using 1680.Sy \&ct 1681and 1682.Sy \&st ; 1683and finally 1684.Sy \&if . 1685.Pf ( Xr Terminfo 1686uses 1687.Sy \&i\&1-i2 1688instead of 1689.Sy \&is 1690and runs the program 1691.Sy \&iP 1692and prints 1693.Sy "\&i\&3" 1694after the other initializations.) 1695A pair of sequences that does a harder reset from a totally unknown state 1696can be analogously given as 1697.Sy \&rs 1698and 1699.Sy \&if . 1700These strings are output by the 1701.Xr reset 1 1702program, which is used when the terminal gets into a wedged state. 1703.Pf ( Xr Terminfo 1704uses 1705.Sy "\&r1-r3" 1706instead of 1707.Sy \&rs . ) 1708Commands are normally placed in 1709.Sy \&rs 1710and 1711.Sy \&rf 1712only if they produce annoying effects on the screen and are not necessary 1713when logging in. 1714For example, the command to set the VT100 into 80-column mode 1715would normally be part of 1716.Sy \&is , 1717but it causes an annoying glitch of the screen and is not normally needed 1718since the terminal is usually already in 80-column mode. 1719.Pp 1720If the terminal has hardware tabs, 1721the command to advance to the next tab stop can be given as 1722.Sy \&ta 1723(usually 1724.Sy \&^I ) . 1725A 1726.Dq backtab 1727command which moves leftward to the previous tab stop 1728can be given as 1729.Sy \&bt . 1730By convention, 1731if the terminal driver modes indicate that tab stops are being expanded 1732by the computer rather than being sent to the terminal, 1733programs should not use 1734.Sy \&ta 1735or 1736.Sy \&bt 1737even if they are present, 1738since the user may not have the tab stops properly set. 1739If the terminal has hardware tabs that are initially set every 1740.Ar n 1741positions when the terminal is powered up, then the numeric parameter 1742.Sy \&it 1743is given, showing the number of positions between tab stops. 1744This is normally used by the 1745.Xr tset 1 1746command to determine whether to set the driver mode for hardware tab 1747expansion, and whether to set the tab stops. 1748If the terminal has tab stops that can be saved in nonvolatile memory, the 1749.Nm 1750description can assume that they are properly set. 1751.Pp 1752If there are commands to set and clear tab stops, they can be given as 1753.Sy \&ct 1754(clear all tab stops) and 1755.Sy \&st 1756(set a tab stop in the current column of every row). 1757If a more complex sequence is needed to set the tabs than can be 1758described by this, the sequence can be placed in 1759.Sy \&is 1760or 1761.Sy \&if . 1762.Ss Delays 1763Certain capabilities control padding in the terminal driver. 1764These are primarily needed by hardcopy terminals and are used by the 1765.Xr tset 1 1766program to set terminal driver modes appropriately. 1767Delays embedded in the capabilities 1768.Sy \&cr , 1769.Sy \&sf , 1770.Sy \&le , 1771.Sy \&ff , 1772and 1773.Sy \&ta 1774will cause the appropriate delay bits to be set in the terminal driver. 1775If 1776.Sy \&pb 1777(padding baud rate) is given, these values can be ignored at baud rates 1778below the value of 1779.Sy \&pb . 1780For 1781.Bx 4.2 1782.Xr tset 1 , 1783the delays are given as numeric capabilities 1784.Sy \&dC , 1785.Sy \&dN , 1786.Sy \&dB , 1787.Sy \&dF , 1788and 1789.Sy \&dT 1790instead. 1791.Ss Miscellaneous 1792If the terminal requires other than a 1793.Dv NUL 1794(zero) character as a pad, 1795this can be given as 1796.Sy \&pc . 1797Only the first character of the 1798.Sy \&pc 1799string is used. 1800.Pp 1801If the terminal has commands to save and restore the position of the 1802cursor, give them as 1803.Sy \&sc 1804and 1805.Sy \&rc . 1806.Pp 1807If the terminal has an extra 1808.Dq status line 1809that is not normally used by 1810software, this fact can be indicated. 1811If the status line is viewed as an extra line below the bottom line, 1812then the capability 1813.Sy \&hs 1814should be given. 1815Special strings to go to a position in the status line and to return 1816from the status line can be given as 1817.Sy \&ts 1818and 1819.Sy \&fs . 1820.Pf ( Sy \&fs 1821must leave the cursor position in the same place that it was before 1822.Sy \&ts . 1823If necessary, the 1824.Sy \&sc 1825and 1826.Sy \&rc 1827strings can be included in 1828.Sy \&ts 1829and 1830.Sy \&fs 1831to get this effect.) 1832The capability 1833.Sy \&ts 1834takes one parameter, which is the column number of the status line 1835to which the cursor is to be moved. 1836If escape sequences and other special commands such as tab work while in 1837the status line, the flag 1838.Sy \&es 1839can be given. 1840A string that turns off the status line (or otherwise erases its contents) 1841should be given as 1842.Sy \&ds . 1843The status line is normally assumed to be the same width as the 1844rest of the screen, 1845.Em i.e . , 1846.Sy \&co . 1847If the status line is a different width (possibly because the terminal 1848does not allow an entire line to be loaded), then its width in columns 1849can be indicated with the numeric parameter 1850.Sy \&ws . 1851.Pp 1852If the terminal can move up or down half a line, this can be 1853indicated with 1854.Sy \&hu 1855(half-line up) and 1856.Sy \&hd 1857(half-line down). 1858This is primarily useful for superscripts and subscripts on hardcopy 1859terminals. 1860If a hardcopy terminal can eject to the next page (form feed), 1861give this as 1862.Sy \&ff 1863(usually 1864.Sy \&^L ) . 1865.Pp 1866If there is a command to repeat a given character a given number of times 1867(to save time transmitting a large number of identical characters), 1868this can be indicated with the parameterized string 1869.Sy \&rp . 1870The first parameter is the character to be repeated and the second is 1871the number of times to repeat it. 1872(This is a 1873.Xr terminfo 5 1874feature that is unlikely to be supported by a program that uses 1875.Nm . ) 1876.Pp 1877If the terminal has a settable command character, such as the 1878Tektronix 4025, this can be indicated with 1879.Sy \&CC . 1880A prototype command character is chosen which is used in all capabilities. 1881This character is given in the 1882.Sy \&CC 1883capability to identify it. 1884The following convention is supported on some 1885.Ux 1886systems: 1887The environment is to be searched for a 1888.Ev \&CC 1889variable, 1890and if found, 1891all occurrences of the prototype character are replaced by the character 1892in the environment variable. 1893This use of the 1894.Ev \&CC 1895environment variable 1896is a very bad idea, as it conflicts with 1897.Xr make 1 . 1898.Pp 1899Terminal descriptions that do not represent a specific kind of known 1900terminal, such as 1901.Em switch , 1902.Em dialup , 1903.Em patch , 1904and 1905.Em network , 1906should include the 1907.Sy \&gn 1908(generic) capability so that programs can complain that they do not know 1909how to talk to the terminal. 1910(This capability does not apply to 1911.Em virtual 1912terminal descriptions for which the escape sequences are known.) 1913.Pp 1914If the terminal uses xoff/xon 1915.Pq Tn DC3 Ns / Ns Tn DC1 1916handshaking for flow control, give 1917.Sy \&xo . 1918Padding information should still be included so that routines can make 1919better decisions about costs, but actual pad characters will not be 1920transmitted. 1921.Pp 1922If the terminal has a 1923.Dq meta key 1924which acts as a shift key, setting the 19258th bit of any character transmitted, then this fact can be indicated with 1926.Sy \&km . 1927Otherwise, software will assume that the 8th bit is parity and it will 1928usually be cleared. 1929If strings exist to turn this 1930.Dq meta mode 1931on and off, they can be given as 1932.Sy \&mm 1933and 1934.Sy \&mo . 1935.Pp 1936If the terminal has more lines of memory than will fit on the screen at once, 1937the number of lines of memory can be indicated with 1938.Sy \&lm . 1939An explicit value of 0 indicates that the number of lines is not fixed, 1940but that there is still more memory than fits on the screen. 1941.Pp 1942If the terminal is one of those supported by the 1943.Ux 1944system virtual 1945terminal protocol, the terminal number can be given as 1946.Sy \&vt . 1947.Pp 1948Media copy strings which control an auxiliary printer 1949connected to the terminal can be given as 1950.Sy \&ps : 1951print the contents of the screen; 1952.Sy \&pf : 1953turn off the printer; and 1954.Sy \&po : 1955turn on the printer. 1956When the printer is on, all text sent to the terminal will be sent to the 1957printer. 1958It is undefined whether the text is also displayed on the terminal screen 1959when the printer is on. 1960A variation 1961.Sy \&pO 1962takes one parameter and leaves the printer on for as many characters as the 1963value of the parameter, then turns the printer off. 1964The parameter should not exceed 255. 1965All text, including 1966.Sy \&pf , 1967is transparently passed to the printer while 1968.Sy \&pO 1969is in effect. 1970.Pp 1971Strings to program function keys can be given as 1972.Sy \&pk , 1973.Sy \&pl , 1974and 1975.Sy \&px . 1976Each of these strings takes two parameters: the function key number 1977to program (from 0 to 9) and the string to program it with. 1978Function key numbers out of this range may program undefined keys 1979in a terminal-dependent manner. 1980The differences among the capabilities are that 1981.Sy \&pk 1982causes pressing the given key to be the same as the user typing the given 1983string; 1984.Sy \&pl 1985causes the string to be executed by the terminal in local mode; 1986and 1987.Sy \&px 1988causes the string to be transmitted to the computer. 1989Unfortunately, due to lack of a definition for string parameters in 1990.Nm , 1991only 1992.Xr terminfo 5 1993supports these capabilities. 1994.Pp 1995For the 1996.Xr xterm 1 Pq Pa ports/x11/xterm 1997terminal emulator the traditional behavior in 1998.Fx 1999when exiting a pager such as 2000.Xr less 1 2001or 2002.Xr more 1 , 2003or an editor such as 2004.Xr vi 1 2005is 2006.Em NOT 2007to clear the screen after the program exits. 2008If you prefer to clear the screen there are a number of 2009.Dq xterm-clear 2010entries that add this capability in the 2011.Nm 2012file that you can use directly, or as examples. 2013.Ss Glitches and Braindamage 2014Hazeltine terminals, which do not allow `~' characters to be displayed, 2015should indicate 2016.Sy \&hz . 2017.Pp 2018The 2019.Sy \&nc 2020capability, now obsolete, formerly indicated Datamedia terminals, 2021which echo 2022.Sy \&\er \en 2023for 2024carriage return then ignore a following linefeed. 2025.Pp 2026Terminals that ignore a linefeed immediately after an 2027.Sy \&am 2028wrap, such as the Concept, should indicate 2029.Sy \&xn . 2030.Pp 2031If 2032.Sy \&ce 2033is required to get rid of standout 2034(instead of merely writing normal text on top of it), 2035.Sy \&xs 2036should be given. 2037.Pp 2038Teleray terminals, where tabs turn all characters moved over to blanks, 2039should indicate 2040.Sy \&xt 2041(destructive tabs). 2042This glitch is also taken to mean that it is not possible 2043to position the cursor on top of a 2044.Dq magic cookie , 2045and that 2046to erase standout mode it is necessary to use delete and insert line. 2047.Pp 2048The Beehive Superbee, which is unable to correctly transmit the 2049.Dv ESC 2050or 2051.Sy \&^C 2052characters, has 2053.Sy \&xb , 2054indicating that the 2055.Dq \&f\&1 2056key is used for 2057.Dv ESC 2058and 2059.Dq \&f\&2 2060for ^C. 2061(Only certain Superbees have this problem, depending on the 2062.Tn ROM . ) 2063.Pp 2064Other specific terminal problems may be corrected by adding more 2065capabilities of the form 2066.Sy x Ns Em x . 2067.Ss Similar Terminals 2068If there are two very similar terminals, 2069one can be defined as being just like the other with certain exceptions. 2070The string capability 2071.Sy \&tc 2072can be given 2073with the name of the similar terminal. 2074This capability must be 2075.Em last , 2076and the combined length of the entries 2077must not exceed 1024. 2078The capabilities given before 2079.Sy \&tc 2080override those in the terminal type invoked by 2081.Sy \&tc . 2082A capability can be canceled by placing 2083.Sy \&xx@ 2084to the left of the 2085.Sy \&tc 2086invocation, where 2087.Sy \&xx 2088is the capability. 2089For example, the entry 2090.Bd -literal -offset indent 2091hn\||\|2621\-nl:ks@:ke@:tc=2621: 2092.Ed 2093.Pp 2094defines a 2095.Dq 2621\-nl 2096that does not have the 2097.Sy \&ks 2098or 2099.Sy \&ke 2100capabilities, 2101hence does not turn on the function key labels when in visual mode. 2102This is useful for different modes for a terminal, or for different 2103user preferences. 2104.Sh FILES 2105.Bl -tag -width /usr/share/misc/termcap.db -compact 2106.It Pa /usr/share/misc/termcap 2107File containing terminal descriptions. 2108.It Pa /usr/share/misc/termcap.db 2109Hash database file containing terminal descriptions (see 2110.Xr cap_mkdb 1 ) . 2111.El 2112.Sh SEE ALSO 2113.Xr cap_mkdb 1 , 2114.Xr ex 1 , 2115.Xr more 1 , 2116.Xr tset 1 , 2117.Xr ul 1 , 2118.Xr vi 1 , 2119.Xr xterm 1 Pq Pa ports/x11/xterm , 2120.Xr ncurses 3 , 2121.Xr printf 3 , 2122.Xr termcap 3 , 2123.Xr term 5 2124.Sh CAVEATS AND BUGS 2125The 2126.Em Note : 2127.Nm 2128functions 2129were replaced by 2130.Xr terminfo 5 2131in 2132.At V 2133Release 2.0. 2134The transition will be relatively painless if capabilities flagged as 2135.Dq obsolete 2136are avoided. 2137.Pp 2138Lines and columns are now stored by the kernel as well as in the termcap 2139entry. 2140Most programs now use the kernel information primarily; the information 2141in this file is used only if the kernel does not have any information. 2142.Pp 2143The 2144.Xr \&vi 1 2145program allows only 256 characters for string capabilities, and the routines 2146in 2147.Xr termlib 3 2148do not check for overflow of this buffer. 2149The total length of a single entry (excluding only escaped newlines) 2150may not exceed 1024. 2151.Pp 2152Not all programs support all entries. 2153.Sh HISTORY 2154The 2155.Nm 2156file format appeared in 2157.Bx 3 . 2158