428
|
1 @\input texinfo @c -*-texinfo-*-
|
|
2 @setfilename ../info/term.info
|
696
|
3 @settitle XEmacs Terminal Emulator Mode
|
428
|
4
|
|
5 @titlepage
|
|
6 @sp 6
|
696
|
7 @center @titlefont(XEmacs Terminal Emulator Mode)
|
428
|
8 @end titlepage
|
|
9
|
|
10 @ifinfo
|
|
11 @dircategory XEmacs Editor
|
|
12 @direntry
|
696
|
13 * Term mode: (term). XEmacs Terminal Emulator Mode.
|
428
|
14 @end direntry
|
|
15
|
|
16 @node Top, , (DIR)
|
|
17 @top Terminal emulator mode
|
|
18 @end ifinfo
|
|
19
|
|
20 This is some notes about the term Emacs mode.
|
|
21
|
|
22 @menu
|
|
23 * term mode::
|
|
24 @end menu
|
|
25
|
|
26 @node term mode
|
696
|
27 @chapter XEmacs Terminal Emulator Mode
|
428
|
28
|
|
29 @menu
|
|
30 * Overview::
|
|
31 * Connecting to remote computers::
|
|
32 * Paging::
|
|
33 * Terminal escapes::
|
|
34 @end menu
|
|
35
|
|
36 The @code{term} package includes the major modes @code{term},
|
4312
|
37 @code{shell}, and @code{gud} (for running gdb or another debugger).
|
428
|
38 It is a replacement for the comint mode of Emacs 19,
|
|
39 as well as shell, gdb, terminal, and telnet modes.
|
|
40 The package works best with recent releases of Emacs 19,
|
|
41 but will also work reasonably well with Emacs 18 as well as Lucid Emacs 19.
|
|
42
|
|
43 The file @code{nshell.el} is a wrapper to use unless term mode
|
|
44 is built into Emacs. If works around some of the missing
|
|
45 in older Emacs versions.
|
|
46 To use it, edit the paths in @code{nshell.el}, appropriately,
|
|
47 and then @code{M-x load-file nshell.el RET}.
|
|
48 This will also load in replacement shell and gud modes.
|
|
49
|
|
50 @node Overview
|
|
51 @section Overview
|
|
52
|
|
53 The @code{term} mode is used to control a program (an "inferior process").
|
|
54 It sends most keyboard input characters to the program,
|
|
55 and displays output from the program in the buffer.
|
|
56 This is similar to the traditional comint mode, and
|
|
57 modes derived from it (such as shell and gdb modes).
|
|
58 You can do with the new term-based shell the same sort
|
|
59 of things you could do with the old shell mode,
|
|
60 using more or less the same interface. However, the
|
|
61 new mode is more flexible, and works somewhat differently.
|
|
62
|
|
63 @menu
|
|
64 * Output from the inferior::
|
|
65 * subbuffer:: The sub-buffer
|
|
66 * altsubbuffer:: The alternate sub-buffer
|
|
67 * Input to the inferior::
|
|
68 @end menu
|
|
69
|
|
70 @node Output from the inferior
|
|
71 @subsection Output from the inferior
|
|
72
|
|
73 In typical usage, output from the inferior is
|
|
74 added to the end of the buffer. If needed, the window
|
|
75 will be scrolled, just like a regular terminal.
|
|
76 (Only one line at a time will be scrolled, just like
|
|
77 regular terminals, and in contrast to the old shell mode.)
|
|
78 Thus the buffer becomes a log of your interaction with the
|
|
79 inferior, just like the old shell mode.
|
|
80
|
|
81 Like a real terminal, term maintains a "cursor position."
|
|
82 This is the @code{process-mark} of the inferior process.
|
|
83 If the process-mark is not at the end of the buffer, output from
|
|
84 the inferior will overwrite existing text in the buffer.
|
|
85 This is like a real terminal, but unlike the old shell mode
|
|
86 (which inserts the output, instead of overwriting).
|
|
87
|
|
88 Some programs (such as Emacs itself) need to control the
|
|
89 appearance on the screen in detail. They do this by
|
|
90 sending special control codes. The exact control
|
|
91 codes needed from terminal to terminal, but nowadays
|
|
92 most terminals and terminal emulators (including xterm)
|
|
93 understand the so-called "ANSI escape sequences" (first
|
|
94 popularized by the Digital's VT100 family of terminal).
|
|
95 The term mode also understands these escape sequences,
|
|
96 and for each control code does the appropriate thing
|
|
97 to change the buffer so that the appearance of the window
|
|
98 will match what it would be on a real terminal.
|
|
99 (In contrast, the old shell mode doesn't handle
|
|
100 terminal control codes at all.)
|
|
101
|
|
102 See <...> for the specific control codes.
|
|
103
|
|
104 @node subbuffer
|
|
105 @subsection The sub-buffer
|
|
106
|
|
107 A program that talks to terminal expects the terminal to have a fixed size.
|
|
108 If the program is talking a terminal emulator program such as @code{xterm},
|
|
109 that size can be changed (if the xterm window is re-sized), but programs
|
|
110 still assume a logical terminal that has a fixed size independent
|
|
111 of the amount of output transmitted by the programs.
|
|
112
|
|
113 To programs that use it, the Emacs terminal emulator acts as if it
|
|
114 too has a fixed size. The @dfn{sub-buffer} is the part of a @code{term}-mode
|
|
115 buffer that corresponds to a "normal" terminal. Most of the time
|
|
116 (unless you explicitly scroll the window displaying the buffer),
|
|
117 the sub-buffer is the part of the buffer that is displayed in a window.
|
|
118
|
|
119 The sub-buffer is defined in terms of three buffer-local-variable:
|
|
120
|
|
121 @defvar term-height
|
|
122 The height of the sub-buffer, in screen lines.
|
|
123 @end defvar
|
|
124
|
|
125 @defvar term-width
|
|
126 The width of the sub-buffer, in screen columns.
|
|
127 @end defvar
|
|
128
|
|
129 @defvar term-home-marker
|
|
130 The "home" position, that is the top left corner of the sub-buffer.
|
|
131 @end defvar
|
|
132
|
|
133 The sub-buffer is assumed to be the end part of the buffer;
|
|
134 the @code{term-home-marker} should never be more than
|
|
135 @code{term-height} screen lines from the end of the buffer.
|
|
136
|
|
137 @node altsubbuffer
|
|
138 @subsection The alternate sub-buffer
|
|
139
|
|
140 When a "graphical" program finishes, it is nice to
|
|
141 restore the screen state to what it was before the program started.
|
|
142 Many people are used to this behavior from @code{xterm}, and
|
|
143 its also offered by the @code{term} emulator.
|
|
144
|
|
145 @defun term-switch-to-alternate-sub-buffer set
|
|
146 If @var{set} is true, and we're not already using the alternate sub-buffer,
|
|
147 switch to it. What this means is that the @code{term-home-marker}
|
|
148 is saved (in the variable @code{term-saved-home-marker}), and the
|
|
149 @code{term-home-marker} is set to the end of the buffer.
|
|
150
|
|
151 If @var{set} is false and we're using the alternate sub-buffer,
|
|
152 switch back to the saved sub-buffer. What this means is that the
|
|
153 (current, alternate) sub-buffer is deleted (using
|
|
154 @code{(delete-region term-home-marker (point-max))}), and then the
|
|
155 @code{term-home-marker} is restored (from @code{term-saved-home-marker}).
|
|
156 @end defun
|
|
157
|
|
158 @node Input to the inferior
|
|
159 @subsection Input to the inferior
|
|
160
|
|
161 Characters typed by the user are sent to the inferior.
|
|
162 How this is done depends on whether the @code{term} buffer
|
|
163 is in "character" mode or "line" mode.
|
|
164 (A @code{term} buffer can also be in "pager" mode.
|
|
165 This is discussed <later>.)
|
|
166 Which of these is currently active is specified in the mode line.
|
|
167 The difference between them is the key-bindings available.
|
|
168
|
|
169 In character mode, one character (by default @key{C-c}) is special,
|
|
170 and is a prefix for various commands. All other characters are
|
|
171 sent directly to the inferior process, with no interpretation by Emacs.
|
|
172 Character mode looks and feels like a real terminal, or a conventional
|
|
173 terminal emulator such as xterm.
|
|
174
|
|
175 In line mode, key commands mostly have standard Emacs actions.
|
|
176 Regulars characters insert themselves into the buffer.
|
|
177 When return is typed, the entire current line of the buffer
|
|
178 (except possibly the prompt) is sent to the inferior process.
|
|
179 Line mode is basically the original shell mode from earlier Emacs versions.
|
|
180
|
936
|
181 To switch from line mode to character mode type @kbd{C-c C-k}.
|
|
182 To switch from character mode to line mode type @kbd{C-c C-j}.
|
428
|
183
|
|
184 In either mode, "echoing" of user input is handled by the inferior.
|
|
185 Therefor, in line mode after an input line at the end of the buffer
|
|
186 is sent to the inferior, it is deleted from the buffer.
|
|
187 This is so that the inferior can echo the input, if it wishes
|
|
188 (which it normally does).
|
|
189
|
|
190 @node Connecting to remote computers
|
|
191 @section Connecting to remote computers
|
|
192
|
|
193 If you want to login to a remove computer, you can do that just as
|
|
194 you would expect, using whatever commands you would normally use.
|
|
195
|
|
196 (This is worth emphasizing, because earlier versions of @code{shell}
|
|
197 mode would not work properly if you tried to log in to some other
|
|
198 computer, because of the way echoing was handled. That is why
|
|
199 there was a separate @code{telnet} mode to partially compensate for
|
|
200 these problems. The @code{telnet} mode is no longer needed, and
|
|
201 is basically obsolete.)
|
|
202
|
|
203 A program that asks you for a password will normally suppress
|
|
204 echoing of the password, so the password will not show up in the buffer.
|
|
205 This will happen just as if you were using a real terminal, if
|
|
206 the buffer is in char mode. If it is in line mode, the password
|
|
207 will be temporarily visible, but will be erased when you hit return.
|
|
208 (This happens automatically; there is no special password processing.)
|
|
209
|
|
210 When you log in to a different machine, you need to specify the
|
|
211 type of terminal your using. If you are talking to a Bourne-compatible
|
|
212 shell, and your system understands the @code{TERMCAP} variable,
|
|
213 you can use the command @kbd{M-x shell-send-termcap}, which
|
|
214 sends a string specifying the terminal type and size.
|
|
215 (This command is also useful after the window has changed size.)
|
|
216
|
|
217 If you need to specify the terminal type manually, you can try the
|
|
218 terminal types "ansi" or "vt100".
|
|
219
|
|
220 You can of course run gdb on that remote computer. One useful
|
|
221 trick: If you invoke gdb with the @code{--fullname} option,
|
|
222 it will send special commands to Emacs that will cause Emacs to
|
|
223 pop up the source files you're debugging. This will work
|
|
224 whether or not gdb is running on a different computer than Emacs,
|
|
225 assuming can access the source files specified by gdb.
|
|
226
|
|
227 @node Paging
|
|
228 @section Paging
|
|
229
|
|
230 When the pager is enabled, Emacs will "pause" after each screenful
|
|
231 of output (since the last input sent to the inferior).
|
|
232 It will enter "pager" mode, which feels a lot like the "more"
|
|
233 program: Typing a space requests another screenful of output.
|
|
234 Other commands request more or less output, or scroll backwards
|
|
235 in the @code{term} buffer. In pager mode, type @kbd{h} or @kbd{?}
|
|
236 to display a help message listing all the available pager mode commands.
|
|
237
|
|
238 In either character or line mode, type @kbd{C-c p} to enable paging,
|
|
239 and @kbd{C-c D} to disable it.
|
|
240
|
|
241 @node Terminal escapes
|
|
242 @section Terminal Escape sequences
|
|
243
|
|
244 A program that does "graphics" on a terminal controls the
|
|
245 terminal by sending strings called @dfn{terminal escape sequences}
|
|
246 that the terminal (or terminal emulator) interprets as special commands.
|
|
247 The @code{term} mode includes a terminal emulator that understands
|
|
248 standard ANSI escape sequences, originally popularized by VT100 terminals,
|
|
249 and now used by the @code{xterm} program and most modern terminal
|
|
250 emulator software.
|
|
251
|
|
252 @menu
|
|
253 * Cursor motion:: Escape sequences to move the cursor
|
|
254 * Erasing:: Escape commands for erasing text
|
|
255 * Inserting and deleting:: Escape sequences to insert and delete text
|
|
256 * Scrolling:: Escape sequences to scroll part of the visible window
|
|
257 * Command hook::
|
|
258 * Miscellaneous escapes::
|
|
259 @end menu
|
|
260
|
|
261 printing chars
|
|
262
|
|
263 tab
|
|
264
|
|
265 LF
|
|
266
|
|
267 @node Cursor motion
|
|
268 @subsection Escape sequences to move the cursor
|
|
269
|
|
270 @table @kbd
|
|
271 @item RETURN
|
|
272 Moves to the beginning of the current screen line.
|
|
273
|
|
274 @item C-b
|
|
275 Moves backwards one column. (Tabs are broken up if needed.)
|
|
276 @comment Line wrap FIXME
|
|
277
|
|
278 @item Esc [ R ; C H
|
|
279 Move to screen row R, screen column C, where (R=1) is the top row,
|
|
280 and (C=1) is the leftmost column. Defaults are R=1 and C=1.
|
|
281
|
|
282 @item Esc [ N A
|
|
283 Move N (default 1) screen lines up.
|
|
284 @item Esc [ N B
|
|
285 Move N (default 1) screen lines down.
|
|
286 @item Esc [ N C
|
|
287 Move N (default 1) columns right.
|
|
288 @item Esc [ N D
|
|
289 Move N (default 1) columns left.
|
|
290 @end table
|
|
291
|
|
292 @node Erasing
|
|
293 @subsection Escape commands for erasing text
|
|
294
|
|
295 These commands "erase" part of the sub-buffer.
|
|
296 Erasing means replacing by white space; it is not the same as deleting.
|
|
297 The relative screen positions of things that are not erased remain
|
|
298 unchanged with each other, as does the relative cursor position.
|
|
299
|
|
300 @table @kbd
|
|
301 @item E [ J
|
|
302 Erase from cursor to end of screen.
|
|
303 @item E [ 0 J
|
|
304 Same as E [ J.
|
|
305 @item E [ 1 J
|
|
306 Erase from home position to point.
|
|
307 @item E [ 2 J
|
|
308 Erase whole sub-buffer.
|
|
309 @item E [ K
|
|
310 Erase from point to end of screen line.
|
|
311 @item E [ 0 K
|
|
312 Same as E [ K.
|
|
313 @item E [ 1 K
|
|
314 Erase from beginning of screen line to point.
|
|
315 @item E [ 2 K
|
|
316 Erase whole screen line.
|
|
317 @end table
|
|
318
|
|
319 @node Inserting and deleting
|
|
320 @subsection Escape sequences to insert and delete text
|
|
321
|
|
322 @table @kbd
|
|
323 @item Esc [ N L
|
|
324 Insert N (default 1) blank lines.
|
|
325 @item Esc [ N M
|
|
326 Delete N (default 1) lines.
|
|
327 @item Esc [ N P
|
|
328 Delete N (default 1) characters.
|
|
329 @item Esc [ N @@
|
|
330 Insert N (default 1) spaces.
|
|
331 @end table
|
|
332
|
|
333 @node Scrolling
|
|
334 @subsection Escape sequences to scroll part of the visible window
|
|
335
|
|
336 @table @kbd
|
|
337 @item Esc D
|
|
338 Scroll forward one screen line.
|
|
339
|
|
340 @item Esc M
|
|
341 Scroll backwards one screen line.
|
|
342
|
|
343 @item Esc [ T ; B r
|
|
344 Set the scrolling region to be from lines T down to line B inclusive,
|
|
345 where line 1 is the topmost line.
|
|
346 @end table
|
|
347
|
|
348 @node Command hook
|
|
349 @subsection Command hook
|
|
350
|
|
351 If @kbd{C-z} is seen, any text up to a following @key{LF} is scanned.
|
|
352 The text in between (not counting the initial C-z or the final LF)
|
|
353 is passed to the function that is the value of @code{term-command-hook}.
|
|
354
|
|
355 The default value of the @code{term-command-hook} variable
|
|
356 is the function @code{term-command-hook}, which handles the following:
|
|
357
|
|
358 @table @kbd
|
|
359 @item C-z C-z FILENAME:LINENUMBER:IGNORED LF
|
|
360 Set term-pending-frame to @code{(cons "FILENAME" LINENUMBER)}.
|
|
361 When the buffer is displayed in the current window, show
|
|
362 the FILENAME in the other window, and show an arrow at LINENUMBER.
|
|
363 Gdb emits these strings when invoked with the flag --fullname.
|
|
364 This is used by gdb mode; you can also invoke gdb with this flag
|
|
365 from shell mode.
|
|
366
|
|
367 @item C-z / DIRNAME LF
|
|
368 Set the directory of the term buffer to DIRNAME
|
|
369
|
|
370 @item C-z ! LEXPR LF
|
|
371 Read and evaluate LEXPR as a Lisp expression.
|
|
372 The result is ignored.
|
|
373 @end table
|
|
374
|
|
375 @node Miscellaneous escapes
|
|
376 @subsection Miscellaneous escapes
|
|
377
|
|
378 @table @kbd
|
|
379 @item C-g (Bell)
|
|
380 Calls @code{(beep t)}.
|
|
381
|
|
382 @item Esc 7
|
|
383 Save cursor.
|
|
384
|
|
385 @item Esc 8
|
|
386 Restore cursor.
|
|
387
|
|
388 @item Esc [ 47 h
|
|
389 Switch to the alternate sub-buffer,
|
|
390 @item Esc [ 47 l
|
|
391 Switch back to the regular sub-buffer,
|
|
392 @end table
|
|
393
|
|
394 @bye
|