386BSD 0.1 development
[unix-history] / usr / src / usr.bin / elvis / doc / termcap.ms
.Go 10 "TERMCAP"
.PP
\*E uses fairly standard termcap fields for most things.
I invented the cursor shape names
but other than that there should be few surprises.
.SH
Required numeric fields
.if n .ul 0
.ID
:co#: number of columns on the screen (chars per line)
:li#: number of lines on the screen
.DE
.SH
Required string fields
.ID
.if n .ul 0
:ce=: clear to end-of-line
:cl=: home the cursor & clear the screen
:cm=: move the cursor to a given row/column
:up=: move the cursor up one line
.DE
.SH
Boolean fields
.if n .ul 0
.ID
:am: auto margins - wrap when char is written in last column?
:xn: brain-damaged auto margins - newline ignored after wrap
:pt: physical tabs?
.DE
.SH
Optional string fields
.if n .ul 0
.ID
:al=: insert a blank row on the screen
:dl=: delete a row from the screen
:cd=: clear to end of display
:ei=: end insert mode
:ic=: insert a blank character
:im=: start insert mode
:dc=: delete a character
:sr=: scroll reverse (insert row at top of screen)
:vb=: visible bell
:ti=: terminal initialization string, to start full-screen mode
:te=: terminal termination, to end full-screen mode
:ks=: enables the cursor keypad
:ke=: disables the cursor keypad
.DE
.SH
Optional strings received from the keyboard
.if n .ul 0
.ID
:kd=: sequence sent by the <down arrow> key
:kl=: sequence sent by the <left arrow> key
:kr=: sequence sent by the <right arrow> key
:ku=: sequence sent by the <up arrow> key
:kP=: sequence sent by the <PgUp> key
:kN=: sequence sent by the <PgDn> key
:kh=: sequence sent by the <Home> key
:kH=: sequence sent by the <End> key
:kI=: sequence sent by the <Insert> key
.DE
.PP
Originally, termcap didn't have any names for the <PgUp>, <PgDn>, <Home>,
and <End> keys.
Although the capability names shown in the table above are the most common,
they are \fInot\fR universal.
SCO Xenix uses :PU=:PD=:HM=:EN=: for those keys.
Also, if the four arrow keys happen to be part of a 3x3 keypad,
then the five non-arrow keys may be named :K1=: through :K5=:,
so an IBM PC keyboard may be described using those names instead.
\*E can find any of these names.
.SH
Optional strings sent by function keys
.if n .ul 0
.ID
:k1=:...:k9=:k0=: codes sent by <F1> through <F10> keys
:s1=:...:s9=:s0=: codes sent by <Shift F1> ... <Shift F10>
:c1=:...:c9=:c0=: codes sent by <Ctrl F1> ... <Ctrl F10>
:a1=:...:a9=:a0=: codes sent by <Alt F1> ... <Alt F10>
.DE
.PP
Note that :k0=: is used to describe the <F10> key.
Some termcap documents recommend :ka=: or even :k;=: for describing
the <F10> key, but \*E doesn't support that.
.PP
Also, the :s1=:..., :c1=:..., and :a1=:... codes are very non-standard.
The terminfo library doesn't support them.
.SH
Optional fields that describe character attributes
.if n .ul 0
.ID
:so=:se=: start/end standout mode (We don't care about :sg#:)
:us=:ue=: start/end underlined mode
:md=:me=: start/end boldface mode
:as=:ae=: start/end alternate character set (italics)
:ug#: visible gap left by :us=:ue=:md=:me=:as=:ae=:
.DE
.SH
Optional fields that affect the cursor's shape
.PP
The :cQ=: string is used by \*E immediately before exiting to undo
the effects of the other cursor shape strings.
If :cQ=: is not given, then all other cursor shape strings are ignored.
.ID
:cQ=: normal cursor
:cX=: cursor used for reading EX command
:cV=: cursor used for reading VI commands
:cI=: cursor used during VI input mode
:cR=: cursor used during VI replace mode
.DE
.PP
If the capabilities above aren't given, then \*E will try to use the
following values instead.
.ID
:ve=: normal cursor, used as :cQ=:cX=:cI=:cR=:
:vs=: gaudy cursor, used as :cV=:
.DE
.SH
An example
.PP
Here's the termcap entry I use on my Minix-ST system.
Some of the fields in it have nothing to do with \*E.
Some can only work on my system;
I have modified my kernel's screen driver.
.sp
.LD
.ne 14
mx|minix|minixst|ansi:\\
:is=\\E[0~:co#80:li#25:bs:pt:\\
:cm=\\E[%i%d;%dH:up=\\E[A:do=^J:nd=\\E[C:sr=\\EM:\\
:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:\\
:al=\\E[L:dl=\\E[M:ic=\\E[@:dc=\\E[P:im=:ei=:\\
:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:\\
:md=\\E[1m:me=\\E[m:as=\\E[1;3m:ae=\\E[m:\\
:ku=\\E[A:kd=\\E[B:kr=\\E[C:kl=\\E[D:\\
:k1=\\E[1~:k2=\\E[2~:k3=\\E[3~:k4=\\E[4~:k5=\\E[5~:\\
:k6=\\E[6~:k7=\\E[17~:k8=\\E[18~:k9=\\E[19~:k0=\\E[20~:\\
:kU=\\E[36~:kQ=\\E[32~:kH=\\E[28~:\\
:GV=3:GH=D:G1=?:G2=Z:G3=@:G4=Y:GC=E:GL=4:GR=C:GU=A:GD=B:\\
:cQ=\\E[k:cX=\\E[2;0k:cV=\\E[16;0k:cI=\\E[k:cR=\\E[16;20k:
.DE