|
|
1.1 root 1: The terminal support for EMACS is driven from a directory of terminal
2: type descriptions. This directory contains one file (or link) for
3: each terminal type. The file contains a set of lines of the form:
4:
5: parameter=value
6:
7: EMACS comes with terminal type files to support many of the common types.
8: These are normally kept in the TERMINALS archive file and will be put
9: in the terminals sub-directory of the directory from which emacs is made
10: by the makefile. You can change the makefile to change the location of
11: these files for your location.
12:
13: If you wish to create your own private terminal file for emacs, you
14: can use it without installing it in the terminals directory by
15: setting your terminal type (either setting TERM or using M-t in
16: emacs) to the full pathname of the terminal file.
17:
18: The best way to construct a new description is to start with a
19: description of a similar terminal and modify it. You can find the
20: description of a particular terminal by reading
21: "~EMACS/terminals/name>" where name is the name of the terminal you
22: want to look at when in emacs. (Don't type "emacs ~EMACS ... to the
23: shelll, run emacs and use ^X^R or ^X^F)
24:
25: The terminal support is not the same as the termcap file used by vi.
26:
27: The format that I have chosen is simple, easy to parse by both human
28: and machine, and easy to extend. Each parameter is identified by a
29: two character code. Those parameters that are exactly as in termcap
30: are named as so.
31:
32: The format of the parameter values is quite simple, so as to allow
33: parsing with a simple, efficient, parser. Parameters are either a
34: decimal number, starting with any digit, or are a string, starting
35: with anything else. String parameters contain exactly the
36: characters desired (up to a newline). The only mapping done on
37: string parameters is to map sequences starting with a backslash (\)
38: as follows:
39:
40: \n maps to a newline
41:
42: \(anything else) maps to the backslashed character. (useful
43: for backslashes or for parameters starting with digits.
44:
45: Notice that I do not map octal character specifications, or any of
46: the other commonly used character specifications. The parameters
47: can appear in any order, and only those that apply to a particular
48: terminal should be specified. String parameters contain a printf
49: style string to be sent to the terminal to produce the desired
50: effect. Because printf strings are used, If you need to put a '%'
51: in a string parameter put two % characters (%%) to get a single % output.
52:
53: The exact mappings used are similar to printf, with some
54: limitations. The general format is: %nc, where n is an optional
55: field width (one or more ascii characters), and c is a character
56: specifier. What is done depends on c as follows:
57:
58: %%: Print a single % sign
59: %c: Print the next arg as a character
60: %o: Print the next arg (an int) in octal, with width at least n.
61: %d: Like o, only decimal
62: %p: Print width milliseconds of pad characters.
63: %P: Print width*region number of pad characters. Region
64: is the number of lines or characters in the region effected
65: by the current command.
66: %m: Print the substring in tm determined by the next arg.
67: Width*arg is used as an index into the string parameter "tm",
68: (terminal map) and the next width characters are put out.
69: This is an "escape hatch", which allows you to specify the
70: cursor positioning algorithm for any terminal not covered by the
71: above mechanisms. See the description of the "tm" parameter
72: for more details.
73: %M: Like %m above, except that the map is taken from the
74: parameter "tM". This is provided for terminals which need
75: 2 maps, one for horizantal and one for vertical.
76:
77: The following parameters are available:
78:
79: up=(string) move up one line
80:
81: do=(string) move down one line
82:
83: bc=(string) backward one character
84:
85: nd=(string) forward one character (use only if this is a single
86: character, otherwise omit)
87:
88: cr=(string) carriage return without linefeed. (^M)
89:
90: ho=(string) home (not currently used by emacs)
91:
92: cl=(string) clear entire screen (from any position,
93: leaving cursor at home)
94:
95: cd=(string) clear from here to end of screen (not currently used by emacs)
96:
97: ce=(string) clear from cursor to end of line
98:
99: bl=(string) ring the bell
100:
101: cm=(string) absolute cursor addressing (a printf style character
102: string that will produce the correct escape sequence when
103: evaluated with the row and column.) see xbase and ybase.
104:
105: ru=(string) relative up (see relative cursor addressing below)
106: rd=(string) relative down (see relative cursor addressing below)
107: rl=(string) relative left (see relative cursor addressing below)
108: rr=(string) relative right (see relative cursor addressing below)
109:
110: relative cursor addressing:
111: same as cm (above) except moves the cursor relative
112: to its current position. This is meant for terminals like
113: the Tektronix 4025 which have only relative cursor movement
114: commands. If you specify any of the relative
115: values you must specify them all. Don't specify both absolute
116: (cm) and relative cursor positioning because EMACS will
117: use absolute (cm) cursor positioning if both are specified.
118:
119: tm=(string) Terminal Map.
120: tM=(string) Alternate Terminal Map.
121:
122: Terminal maps. These specify the output produced by %m or %M
123: conversions in cursor positioning strings.
124: A "terminal map" is used for terminals that use cursor
125: positioning addresses that are not decimal or octal numbers.
126: The "tm" and "tM" string are tables that EMACS will go into
127: for cursor position addresses.
128: As an example, suppose a terminal with a view width of 80 and
129: a view height of 24. Suppose also that the terminal accepts
130: three digit decimal cursor addresses except that only even
131: numbers are used. EMACS will calculate cursor addresses in
132: ranges of 00-23 and 00-79. The terminal map would look like:
133: tm=\000002004006008010...158
134: (Note the leading zero must be backslashed to make this a
135: character string.)
136: The corresponding "cm" string might look like:
137: cm=^W%3m%3m
138: If the number of position-dependent characters
139: varies, null characters in tm should be used in tm to pad
140: out shorter map entries. (Real nulls to be output should be
141: have the high order bit set (enter with M-q in EMACS)).
142:
143: pc=(string) pad character. (string containing a single character to be
144: used for padding).
145:
146: al=(string) insert line sequence (see below).
147:
148: dl=(string) delete line sequence These two parameters are used to
149: cause the screen to scroll selectively. The insert line
150: sequence is assumed to insert a single blank line at the
151: line containing the cursor, and scroll the remaining lines
152: on the screen downward. The delete line sequence is
153: assumed to delete the current line, scrolling the remaining
154: lines upward.)
155:
156: AL=(string) like 'al' but inserts several lines with printf string.
157:
158: DL=(string) like 'dl' but deletes several lines with printf string.
159:
160: im=(string) enter insert character mode. This function is assumed
161: to put the terminal into insert character mode. Insert
162: character mode is assumed to push the character under the
163: cursor and those beyond it to the right to accomodate new
164: characters. See the description of "in" for more
165: information on what insert character is expected to do.
166:
167: ic=(string) insert character sequence. If the terminal has no
168: insert character mode, but has a sequence that opens up one
169: blank position at the cursor, specify it with ic, and leave
170: im and ei blank. For terminals that need to go into a mode
171: to do inserts, and need a special sequence to open up each
172: position, give both im and ic.
173:
174: ip (string) Insert padding. This string will be printed after every
175: character inserted. It should be a padding specification
176: (%P or %p) to specify delay. Note that you only need to
177: specify this on a terminal that needs padding, and has an
178: insert mode but no ic. Otherwise, just put the padding into ic.
179:
180: ei=(string)overwrite mode sequence (see above).
181:
182: dc=(string)delete character sequence (the character sequence which
183: deletes the character under the cursor and causes the remaining
184: characters on the screen line to move over by one).
185:
186: dm=(int) delete mode. If absent or set to zero, emacs assumes that
187: delete character and insert mode are independent and delete
188: character can be done at any time. If dm is set to 1, then
189: emacs puts the terminal in insert mode before deleting
190: characters. This is needed, for example, on some datamedia
191: and ann arbor terminals. If dm is set to 2, then emacs
192: makes sure that the terminal is not in insert mode before
193: deleting characters.
194:
195: in=(int) insert mode type. If this is 0, insert and delete
196: character are assumed to move all of the characters to the
197: right of the curssor on the same line, like the adm31, and
198: hp terminals. If this is 1, then insert and delete are
199: assumed to move every character in the rest of the display
200: until a position that has not been written since the last
201: clear is encountered, like the concept-100.
202:
203: sf=(string) scroll sequence (the character sequence needed to scroll the
204: screen with the cursor at the bottom. NULL if the screen
205: can't be scrolled simply.)
206:
207: SF=(string) scroll several lines with printf sequence.
208:
209: sr=(string) scroll in reverse (The character sequence needed to
210: scroll the screen down when the cursor is at the top. This
211: is only used to scroll in a region with a terminal like the
212: vt100. This should be NULL if there is no such capability)
213:
214: SR=(string) scroll reverse several lines with printf sequence.
215:
216: cs=(string) Scrolling region sequence. If non null, this is a printf style
217: string that will define the scrolling region on the screen
218: when given the top and bottom lines (offset by xbase) as
219: parameters. The only known terminal which uses this feature
220: is the vt100 and its relatives. If cs is set sr, sf and cm
221: must also be set.
222:
223: vs=(string) initialization escape sequence needed to put terminal in the
224: mode described by these parameters.
225:
226: ve=(string) exit sequence. If present, this sequence is printed
227: whenever you exit from emacs to undo the effects of vs. Vs
228: will be printed whenever you enter emacs.
229:
230: bx=(number) xbase. offset to add to first cursor address parameter
231:
232: by=(number) ybase. offset to add to second cursor address parameter. To
233: accommodate the variety of cursor address escape sequences,
234: the curad parameter is a printf string that when evaluated
235: with the row and column positions, with xbase and ybase
236: added to them, will move to the proper position.
237:
238: rc=(number) 1 if cursor addressing is row and column, 0 if column and row.
239:
240: co=(number) width of screen
241:
242: li=(number) number of lines on screen
243:
244: am=(number) 1 if cursor moves to next line after end of line, 0 otherwise
245:
246: vc=(number) milliseconds of real time needed by terminal for insert/delete
247: line sequence
248:
249: ul= Underline (see below)
250:
251: ue = End underline (see below)
252:
253: eo = (see below)
254:
255: Underscore processing. relevant variables are 'eo', 'ul' and 'ue'.
256: 'eo' should be one if writing over an underlined position clears
257: it, otherwise, make it zero, and emacs will clear the line to get
258: rid of unwanted underscores. 'ul' is a string parameter that
259: contains whatever is needed to print the character with an
260: underline. If the terminal underscores naturally, then 'ul' is
261: %c<BS>_. If the terminal has an underscore character mode,
262: then 'ul' is underscore mode on and 'ue' is underscore mode
263: off. If the terminal has an underscore single character
264: command, then 'ul' is 'underscore character command' %c.
265: This is inefficient in underscoring giant blocks of text,
266: but this should be rare.
267:
268: If the terminal does not have underscore but does have reverse
269: video you may use reverse video for underscore.
270:
271: mi=(int) If this is set to 1, then emacs assumes that it can use the
272: cursor movement capabilities such as up, bc, cm, etc. while
273: the terminal is in insert mode. If the parameters is
274: missing or set to zero, emacs will take the terminal out of
275: insert mode before doing any cursor motion. On some
276: terminals, the movement commands cause characters or lines
277: to be inserted when sent in insert mode.
278:
279: CM=(int) Terminal handles "compressed" output. Emacs can be
280: compiled with code to compress output sent to the terminal,
281: using character codes with the eighth bit on to represent
282: common multi-character sequences. If you have a terminal
283: that will interpret these and have it set up compatibly with
284: emacs, this can be used. I do not recommend it at this
285: time.
286:
287: Any escape sequence not available should be omitted. emacs needs
288: clear and some form of cursor addressing (absolute or relative).
289: Emacs can use 'up', 'do' and either 'bc' or 'cr' rather than
290: cursor addressing (this often needed for PCs running as terminal
291: emulator) but it will be very slow. Users with terminals or PCs
292: providing only these capabilities are strongly advised to obtain
293: better terminals or PC terminal emulators.
294:
295: Other capabilities speed up the display or enhance what is
296: displayed, but are not strictly necessary.
297:
298: The program ttest (made by "make ttest") can be used to test out a new
299: terminal description file. The output is relatively self-explanatory.
300:
301:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.