Commit | Line | Data |
---|---|---|
c00dedaf GM |
1 | \input texinfo |
2 | @setfilename ../../info/edt | |
3 | @settitle EDT Emulation for Emacs | |
c6ab4664 | 4 | @documentencoding UTF-8 |
c00dedaf GM |
5 | |
6 | @copying | |
7 | This file documents the EDT emulation package for Emacs. | |
8 | ||
6bc383b1 | 9 | Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2014 |
c00dedaf GM |
10 | Free Software Foundation, Inc. |
11 | ||
12 | @quotation | |
13 | Permission is granted to copy, distribute and/or modify this document | |
14 | under the terms of the GNU Free Documentation License, Version 1.3 or | |
15 | any later version published by the Free Software Foundation; with no | |
16 | Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' | |
17 | and with the Back-Cover Texts as in (a) below. A copy of the license | |
18 | is included in the section entitled ``GNU Free Documentation License''. | |
19 | ||
20 | (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and | |
6bf430d1 | 21 | modify this GNU manual.'' |
c00dedaf GM |
22 | @end quotation |
23 | @end copying | |
24 | ||
0c973505 | 25 | @dircategory Emacs misc features |
c00dedaf | 26 | @direntry |
62e034c2 | 27 | * EDT: (edt). An Emacs emulation of the EDT editor. |
c00dedaf GM |
28 | @end direntry |
29 | ||
30 | @titlepage | |
31 | @title EDT Emulation User's Manual | |
32 | @author Kevin Gallagher | |
33 | @author @email{Kevin.Gallagher@@boeing.com} | |
34 | @page | |
35 | @vskip 0pt plus 1filll | |
36 | @insertcopying | |
37 | @end titlepage | |
38 | ||
39 | @contents | |
40 | ||
41 | @ifnottex | |
42 | @node Top | |
43 | @top Emacs EDT emulation | |
44 | This manual describes the Emacs EDT package, which provides emulation | |
45 | of DEC's EDT editor. | |
46 | ||
47 | @insertcopying | |
48 | @end ifnottex | |
49 | ||
50 | @menu | |
51 | * Overview:: Overview of the EDT package. | |
52 | * Supported terminals:: Terminals/keyboards that are supported. | |
53 | * Starting emulation:: How to get started. | |
54 | * Platform-specific notes:: Notes specific to certain platforms. | |
55 | * Differences:: How does this EDT emulation differ from real EDT? | |
56 | * Highlights:: Some highlights, and comparisons to the | |
57 | original Emacs EDT emulation. | |
58 | * Customizing:: Customizing emulation. | |
93e01d46 | 59 | * GNU Free Documentation License:: The license for this manual. |
c00dedaf GM |
60 | @end menu |
61 | ||
62 | @node Overview | |
63 | @chapter Overview of the EDT Package | |
64 | ||
20989285 GM |
65 | This manual describes version 4.0 of the EDT Emulation for Emacs. |
66 | It comes with special functions which replicate nearly all of | |
c00dedaf | 67 | EDT's keypad mode behavior. It sets up default keypad and function key |
1df7defd | 68 | bindings which closely match those found in EDT@. Support is provided so |
c00dedaf GM |
69 | that users may reconfigure most keypad and function key bindings to |
70 | their own liking. | |
71 | ||
72 | Version 4.0 contains several enhancements (@pxref{Changes}). | |
73 | ||
74 | @menu | |
75 | * Quick start:: How to begin using EDT. | |
76 | * Changes:: What's new in version 4.0. | |
77 | * Goals:: The aims of this package. | |
78 | @end menu | |
79 | ||
80 | @node Quick start | |
81 | @section How to Begin Using EDT | |
82 | ||
83 | To start the EDT Emulation, first start Emacs and then enter @kbd{M-x | |
84 | edt-emulation-on} to begin the emulation. After initialization is | |
85 | complete, the following message will appear below the status line | |
86 | informing you that the emulation has been enabled: ``Default EDT keymap | |
87 | active''. | |
88 | ||
89 | You can have the EDT Emulation start up automatically, each time you | |
47301027 | 90 | initiate an Emacs session, by adding the following line to your |
c00dedaf GM |
91 | @file{.emacs} file: |
92 | ||
93 | @example | |
98bd6b32 | 94 | (add-hook 'emacs-startup-hook 'edt-emulation-on) |
c00dedaf GM |
95 | @end example |
96 | ||
97 | @noindent @strong{Important:} Be sure to read the rest of this manual. | |
98 | It contains very useful information on how the EDT Emulation behaves and | |
99 | how to customize it to your liking. | |
100 | ||
101 | @noindent The EDT emulation consists of the following files: | |
102 | ||
103 | @itemize | |
104 | ||
105 | @item | |
f99f1641 | 106 | @file{edt.texi}---This manual. |
c00dedaf GM |
107 | |
108 | @item | |
f99f1641 | 109 | @file{edt-user.el}---An example customization file. |
c00dedaf GM |
110 | |
111 | @item | |
f99f1641 | 112 | @file{edt.el}---EDT emulation functions and default configuration. |
c00dedaf GM |
113 | |
114 | @item | |
f99f1641 | 115 | @file{edt-lk201.el}---Built-in support for DEC LK-201 keyboards. |
c00dedaf GM |
116 | |
117 | @item | |
f99f1641 | 118 | @file{edt-vt100.el}---Built-in support for DEC VT-100 (and above) terminals. |
c00dedaf GM |
119 | |
120 | @item | |
f99f1641 | 121 | @file{edt-pc.el}---Built-in support for PC 101 Keyboards under MS-DOS. |
c00dedaf GM |
122 | |
123 | @item | |
f99f1641 | 124 | @file{edt-mapper.el}---Create an EDT LK-201 map file for keyboards |
c00dedaf GM |
125 | without built-in support. |
126 | ||
127 | @end itemize | |
128 | ||
129 | @node Changes | |
130 | @section What's New in Version 4.0 | |
131 | ||
132 | Version 4.0 contains the following enhancements: | |
133 | ||
134 | @enumerate | |
135 | ||
136 | @item | |
137 | Scroll margins at the top and bottom of the window are now supported. | |
138 | (The design was copied from @file{tpu-extras.el}.) By default, this | |
139 | feature is enabled with the top margin set to 10% of the window and the | |
140 | bottom margin set to 15% of the window. To change these settings, you | |
141 | can invoke the function @code{edt-set-scroll-margins} in your | |
142 | @file{.emacs} file. For example, the following line | |
143 | ||
144 | @example | |
145 | (edt-set-scroll-margins "20%" "25%") | |
146 | @end example | |
147 | ||
148 | @noindent sets the top margin to 20% of the window and the bottom margin | |
149 | to 25% of the window. To disable this feature, set each margin to 0%. | |
150 | You can also invoke @code{edt-set-scroll-margins} interactively while | |
151 | EDT Emulation is active to change the settings for that session. | |
152 | ||
153 | @strong{Please note:} Another way to set the scroll margins is to use | |
20989285 GM |
154 | the Emacs customization feature to set the following two variables |
155 | directly: @code{edt-top-scroll-margin} and @code{edt-bottom-scroll-margin}. | |
c00dedaf GM |
156 | |
157 | Enter the Emacs @code{customize} command. First select the | |
158 | @samp{Editing} group and then select the @samp{Emulations} group. | |
159 | Finally, select the @samp{Edt} group and follow the directions. | |
160 | ||
161 | @item | |
162 | The @samp{SUBS} command is now supported and bound to @kbd{GOLD-Enter} | |
163 | by default. (This design was copied from @file{tpu-edt.el}.) Note, in | |
164 | earlier versions of EDT Emulation, @kbd{GOLD-Enter} was assigned to the | |
165 | Emacs function @code{query-replace}. The binding of | |
166 | @code{query-replace} has been moved to @kbd{GOLD-/}. If you prefer to | |
167 | restore @code{query-replace} to @kbd{GOLD-Enter}, then use an EDT user | |
168 | customization file, @file{edt-user.el}, to do this | |
169 | (@pxref{Customizing}). | |
170 | ||
171 | @item | |
172 | EDT Emulation now also works in XEmacs, including the highlighting of | |
173 | selected text. | |
174 | ||
175 | @item | |
176 | If you access a workstation using an X Server, observe that the | |
177 | initialization file generated by @file{edt-mapper.el} will now contain | |
178 | the name of the X Server vendor. This is a convenience for those who | |
179 | have access to their Unix account from more than one type of X Server. | |
180 | Since different X Servers typically require different EDT emulation | |
181 | initialization files, @file{edt-mapper.el} will now generate these | |
182 | different initialization files and save them with different names. | |
183 | Then, the correct initialization file for the particular X server in use | |
184 | is loaded correctly automatically. | |
185 | ||
186 | @item | |
187 | Also, @file{edt-mapper.el} is now capable of binding an @acronym{ASCII} | |
188 | key sequence, providing the @acronym{ASCII} key sequence prefix is | |
189 | already known by Emacs to be a prefix. As a result of providing this | |
190 | support, some terminal/keyboard/window system configurations, which | |
191 | don't have a complete set of sensible function key bindings built into | |
192 | Emacs in @code{function-key-map}, can still be configured for use with | |
193 | EDT Emulation. (Note: In a few rare circumstances this does not work | |
194 | properly. In particular, it does not work if a subset of the leading | |
195 | @acronym{ASCII} characters in a key sequence are recognized by Emacs as | |
196 | having an existing binding. For example, if the keypad 7 (@key{KP7}) | |
197 | key generates the sequence @samp{<ESC>Ow} and @samp{<ESC>O} is already | |
198 | bound to a function, pressing @key{KP7} when told to do so by | |
199 | @file{edt-mapper.el} will result in @file{edt-mapper.el} incorrectly | |
200 | mapping @samp{<ESC>O} to @key{KP7} and @samp{w} to @key{KP8}. If | |
201 | something like this happens to you, it is probably a bug in the support | |
202 | for your keyboard within Emacs @strong{or} a bug in the Unix | |
203 | termcap/terminfo support for your terminal @strong{or} a bug in the | |
204 | terminal emulation software you are using.) | |
205 | ||
206 | @item | |
207 | The @code{edt-quit} function (bound to @kbd{GOLD-q} by default) has been | |
208 | modified to warn the user when file-related buffer modifications exist. | |
209 | It now cautions the user that those modifications will be lost if the | |
210 | user quits without saving those buffers. | |
211 | ||
212 | @end enumerate | |
213 | ||
214 | @node Goals | |
215 | @section The Aims of this Package | |
216 | ||
217 | @enumerate | |
218 | ||
219 | @item | |
220 | Emulate EDT Keypad Mode commands closely so that current EDT users will | |
47301027 | 221 | find that it easy and comfortable to use Emacs with a small learning |
c00dedaf GM |
222 | curve. |
223 | ||
224 | @item | |
225 | Make it easy for a user to customize EDT emulation key bindings without | |
226 | knowing much about Emacs Lisp. | |
227 | ||
228 | @item | |
229 | Make it easy to switch between the original EDT default bindings and the | |
230 | user's customized EDT bindings, without having to exit Emacs. | |
231 | ||
232 | @item | |
233 | Provide support for some TPU/EVE functions not supported in EDT. | |
234 | ||
235 | @item | |
236 | Provide an easy way to restore @strong{all} original Emacs key bindings, | |
237 | just as they existed before the EDT emulation was first invoked. | |
238 | ||
239 | @item | |
47301027 | 240 | Support Emacs and XEmacs 19 and higher. |
c00dedaf GM |
241 | |
242 | @item | |
243 | Supports highlighting of marked text within the EDT emulation on all | |
244 | platforms on which Emacs supports highlighting of marked text. | |
245 | ||
246 | @item | |
247 | Handle terminal configuration interactively for most terminal | |
248 | configurations, when the emulation is invoked for the first time. | |
249 | ||
250 | @item | |
251 | Support a PC AT keyboard under MS-DOS. | |
252 | ||
253 | @end enumerate | |
254 | ||
255 | @node Supported terminals | |
256 | @chapter Terminals/Keyboards that are Supported | |
257 | ||
258 | Keyboards used under a Window System are supported via the | |
259 | @code{edt-mapper} function. The first time you invoke the emulation | |
260 | under a window system, the @code{edt-mapper} function is run | |
261 | automatically and the user is prompted to identify which keys the | |
262 | emulation is to use for the standard keypad and function keys EDT | |
263 | expects (e.g., @key{PF1}, @key{PF2}, @key{KP0}, @key{KP1}, @key{F1}, | |
264 | @key{F2}, etc.). This configuration is saved to disk read each time the | |
265 | emulation is invoked. | |
266 | ||
267 | In character oriented connections not running a window manager, built-in | |
268 | support for the following terminals/keyboards is provided: | |
269 | ||
270 | @enumerate | |
271 | ||
272 | @item | |
273 | DEC VT-100 series and higher. This includes well behaved VT clones and | |
274 | emulators. If you are using a VT series terminal, be sure that the | |
275 | @env{TERM} environment variable is set properly before invoking emacs. | |
276 | ||
277 | @item | |
278 | PC AT keyboard under MS-DOS. | |
279 | ||
280 | @end enumerate | |
281 | ||
282 | Be sure to read @ref{Platform-specific notes} to see if those notes | |
283 | apply to you. | |
284 | ||
285 | @node Starting emulation | |
286 | @chapter How to Get Started | |
287 | ||
47301027 | 288 | Start up Emacs and enter @kbd{M-x edt-emulation-on} to begin the |
c00dedaf GM |
289 | emulation. After initialization is complete, the following message will |
290 | appear below the status line informing you that the emulation has been | |
291 | enabled: ``Default EDT keymap active''. | |
292 | ||
293 | You can have the EDT Emulation start up automatically, each time you | |
47301027 | 294 | initiate an Emacs session, by adding the following line to your |
c00dedaf GM |
295 | @file{.emacs} file: |
296 | ||
297 | @example | |
98bd6b32 | 298 | (add-hook 'emacs-startup-hook 'edt-emulation-on) |
c00dedaf GM |
299 | @end example |
300 | ||
301 | A reference sheet is included (later on) listing the default EDT | |
302 | Emulation key bindings. This sheet is also accessible on line from | |
303 | within Emacs by pressing @key{PF2}, @kbd{GOLD-H}, or @samp{HELP} (when | |
304 | in the EDT Default Mode). | |
305 | ||
306 | It is easy to customize key bindings in the EDT Emulation | |
307 | (@pxref{Customizing}). Customizations are placed in a file called | |
308 | @file{edt-user.el}. The Emacs @file{etc/} directory contains an | |
47301027 | 309 | example. If @file{edt-user.el} is found in your Emacs load path |
c00dedaf GM |
310 | during EDT Emulation initialization, then the following message will |
311 | appear below the status line indicating that the emulation has been | |
312 | enabled, enhanced by your own customizations: ``User EDT custom keymap | |
313 | active''. | |
314 | ||
315 | Once enabled, it is easy to switch back and forth between your | |
316 | customized EDT Emulation key bindings and the default EDT Emulation key | |
317 | bindings. (Look at the binding to @kbd{GOLD-Z} in the sample | |
318 | @file{edt-user.el} file.) It is also easy to turn off the emulation | |
319 | (via the command @code{edt-emulation-off}). Doing so completely | |
320 | restores the original key bindings in effect just prior to invoking the | |
321 | emulation. | |
322 | ||
323 | Emacs binds keys to @acronym{ASCII} control characters and so does the | |
1df7defd | 324 | real EDT@. Where EDT key bindings and Emacs key bindings conflict, |
47301027 | 325 | the default Emacs key bindings are retained by the EDT emulation by |
c00dedaf GM |
326 | default. If you are a diehard EDT user you may not like this. The |
327 | @ref{Control keys} section explains how to change this so that the EDT | |
328 | bindings to @acronym{ASCII} control characters override the default | |
329 | Emacs bindings. | |
330 | ||
331 | @node Platform-specific notes | |
332 | @chapter Notes Specific to Certain Platforms | |
333 | ||
334 | @menu | |
335 | * Sun workstations:: Sun workstations running X. | |
336 | * MS-DOS:: PC users running MS-DOS. | |
337 | * GNU/Linux:: PC users running GNU/Linux. | |
338 | * Unix:: Using @key{NumLock} for the @key{PF1} key on Unix systems. | |
339 | @end menu | |
340 | ||
341 | @node Sun workstations | |
342 | @section Sun Workstations Running X | |
343 | ||
344 | Some earlier Sun keyboards do not have arrow keys separate from the | |
345 | keypad keys. It is difficult to emulate the full EDT keypad and still | |
346 | retain use of the arrow keys on such keyboards. | |
347 | ||
348 | The Sun Type 5 and other more recent Sun keyboards, however, do have | |
349 | separate arrow keys. This makes them candidates for setting up a | |
350 | reasonable EDT keypad emulation. | |
351 | ||
352 | Depending upon the configuration of the version of X installed on your | |
353 | system, you may find the default X keynames for the keypad keys don't | |
354 | permit Emacs to interpret some or all the keypad keys as something other | |
355 | than arrow keys, numeric keys, @key{Home}, @key{PageUp}, etc. Both Sun | |
356 | and HP have been particularly guilty of making bizarre keysym | |
357 | assignments to the keypad keys. | |
358 | ||
359 | In most cases, the X Windows command, @code{xmodmap}, can be used to | |
360 | correct the problem. Here's a sample @file{.xmodmaprc} file which | |
361 | corrects this problem on one Sun workstation configuration using an | |
362 | older SunOS release configured with a Sun Type 5 keyboard: | |
363 | ||
364 | @example | |
365 | ! File: .xmodmaprc | |
366 | ! | |
47301027 | 367 | ! Set up Sun Type 5 keypad for use with the Emacs EDT Emulation |
c00dedaf GM |
368 | ! |
369 | keycode 53 = KP_Divide | |
370 | keycode 54 = KP_Multiply | |
371 | keycode 57 = KP_Decimal | |
372 | keycode 75 = KP_7 | |
373 | keycode 76 = KP_8 | |
374 | keycode 77 = KP_9 | |
375 | keycode 78 = KP_Subtract | |
376 | keycode 97 = KP_Enter | |
377 | keycode 98 = KP_4 | |
378 | keycode 99 = KP_5 | |
379 | keycode 100 = KP_6 | |
380 | keycode 101 = KP_0 | |
381 | keycode 105 = F24 | |
382 | keycode 119 = KP_1 | |
383 | keycode 120 = KP_2 | |
384 | keycode 121 = KP_3 | |
385 | keycode 132 = KP_Add | |
386 | @end example | |
387 | ||
388 | If @file{edt-mapper.el} does not recognize your keypad keys as unique | |
389 | keys, use the command @samp{xmodmap -pke} to get a listing of the actual | |
390 | key codes and the keysyms mapped to them and then generate you own | |
391 | custom @file{.xmodmaprc} similar to the one above. | |
392 | ||
393 | Next, feed @file{.xmodmaprc} to the @code{xmodmap} command and all the | |
394 | Sun Type 5 keypad keys will now be configurable for the emulation of an | |
395 | LK-201 keypad (less the @key{,} key). In this example, the line | |
396 | ||
397 | @example | |
398 | keycode 105 = F24 | |
399 | @end example | |
400 | ||
401 | @noindent changes the X Windows name of the keypad @key{NumLock} key to | |
402 | be known internally as the @key{F24} key. Doing so permits it to be | |
403 | configured to behave as the @key{PF1} (@key{GOLD}) key. | |
404 | ||
405 | The side effect of this change is that you will no longer have a | |
406 | @key{NumLock} key. If you are using other software under X which | |
407 | requires a @key{NumLock} key, then examine your keyboard and look for | |
408 | one you don't use and redefine it to be the @key{NumLock} key. | |
409 | Basically, you need to clear the @key{NumLock} key from being assigned | |
410 | as a modifier, assign it to the key of your choice, and then add it back | |
411 | as a modifier. (@ref{Unix} for further help on how to do this.) | |
412 | ||
413 | @node MS-DOS | |
414 | @section PC Users Running MS-DOS | |
415 | ||
416 | By default, F1 is configured to emulate the @key{PF1} (@key{GOLD}) key. | |
417 | But @key{NumLock} can be used instead if you load a freeware TSR | |
418 | distributed with MS-Kermit, call @samp{gold.com}. This was once | |
419 | distributed in a file called @file{gold22.zip} and came with the source | |
420 | code as well as a loadable binary image. (See @file{edt-pc.el} in the | |
421 | Emacs @file{lisp/emulation} directory for more information.) | |
422 | ||
423 | @node GNU/Linux | |
424 | @section PC Users Running GNU/Linux | |
425 | ||
426 | The default X server configuration varies from distribution to | |
427 | distribution and release to release of GNU/Linux. If your system fails | |
428 | to recognize the keypad keys as distinct keys, change the NumLock state, | |
429 | turning it on or off, as the case may be, then try again. If this | |
430 | doesn't solve your problem, you may have to modify the X keysym mappings | |
431 | with @code{xmodmap}. | |
432 | ||
433 | On one distribution on an Intel PC, the following @file{.xmodmaprc} set | |
434 | things up nicely. | |
435 | ||
436 | @example | |
437 | ! File: .xmodmaprc | |
438 | ! | |
47301027 | 439 | ! Set up PC keypad under GNU/Linux for the Emacs EDT Emulation |
c00dedaf GM |
440 | ! |
441 | clear mod2 | |
442 | keycode 77 = F12 | |
443 | keycode 96 = Num_Lock Pointer_EnableKeys | |
444 | add mod2 = Num_Lock | |
445 | @end example | |
446 | ||
447 | In this example, after feeding the file to the @code{xmodmap} command, | |
448 | the PC @key{NumLock} keypad key will be configurable for the emulation | |
449 | of the @key{PF1} key. The PC keypad can now emulate an LK-201 keypad | |
450 | (less the comma key), the standard keyboard supplied with DEC terminals | |
451 | VT-200 and above. This @file{.xmodmaprc} file switches the role of the | |
452 | @key{F12} and @key{NumLock} keys. It has been tested on RedHat | |
453 | GNU/Linux 5.2. Other versions of GNU/Linux may require different | |
454 | keycodes. (@ref{Unix} for further help on how to do this.) | |
455 | ||
456 | @strong{Please note:} Remember, it may be necessary to have @key{NumLock} in | |
457 | one position (ON) or the other (OFF) for the PC keypad to emulate the | |
458 | LK-201 keypad properly. | |
459 | ||
460 | @node Unix | |
461 | @section General Notes on Using @key{NumLock} for the @key{PF1} Key on Unix Systems | |
462 | ||
463 | Making the physical @key{NumLock} key available for use in the EDT Emulation | |
464 | requires some modification to the default X Window settings. Since the | |
465 | keycode assignments vary from system to system, some investigation is | |
466 | needed to see how to do this on a particular system. | |
467 | ||
468 | You will need to look at the output generated by @code{xmodmap} invoked | |
469 | with the "-pm" switch. For example, on RedHat GNU/Linux 5.2 on a PC, we | |
470 | get the following output when running @samp{xmodmap -pm}: | |
471 | ||
472 | @example | |
473 | xmodmap: up to 2 keys per modifier, (keycodes in parentheses): | |
474 | ||
475 | shift Shift_L (0x32), Shift_R (0x3e) | |
476 | lock Caps_Lock (0x42) | |
477 | control Control_L (0x25), Control_R (0x6d) | |
478 | mod1 Alt_L (0x40), Alt_R (0x71) | |
479 | mod2 Num_Lock (0x4d) | |
480 | mod3 | |
481 | mod4 | |
482 | mod5 Scroll_Lock (0x4e) | |
483 | @end example | |
484 | ||
485 | @noindent Note that Num_Lock is assigned to the modifier @samp{mod2}. This is | |
486 | what hides Num_Lock from being seen by Emacs. | |
487 | ||
488 | Now, @samp{xmodmap -pke} yields: | |
489 | ||
490 | @example | |
491 | . | |
492 | . | |
493 | . | |
494 | keycode 77 = Num_Lock Pointer_EnableKeys | |
495 | . | |
496 | . | |
497 | . | |
498 | keycode 96 = F12 | |
499 | . | |
500 | . | |
501 | . | |
502 | @end example | |
503 | ||
504 | @noindent So, in RedHat GNU/Linux 5.2 on a PC, Num_Lock generates keycode 77. | |
505 | The following steps are taken: | |
506 | ||
507 | @enumerate | |
508 | @item | |
509 | clear the assignment of Num_Lock to mod2; | |
510 | @item | |
511 | swap the keycodes assigned to F12 and Num_Lock; | |
512 | @item | |
513 | assign Num_Lock back to mod2. | |
514 | @end enumerate | |
515 | ||
516 | @noindent The @file{.xmodmaprc} file looks like this: | |
517 | ||
518 | @example | |
519 | ! File: .xmodmaprc | |
520 | ! | |
47301027 | 521 | ! Set up PC keypad under GNU/Linux for the Emacs EDT Emulation |
c00dedaf GM |
522 | ! |
523 | clear mod2 | |
524 | keycode 77 = F12 | |
525 | keycode 96 = Num_Lock Pointer_EnableKeys | |
526 | add mod2 = Num_Lock | |
527 | @end example | |
528 | ||
529 | So, after executing @samp{xmodmap .xmodmaprc}, a press of the physical | |
1df7defd | 530 | @key{F12} key looks like a Num_Lock keypress to X@. Also, a press of the |
c00dedaf GM |
531 | physical @key{NumLock} key looks like a press of the @key{F12} key to X. |
532 | ||
533 | Now, @file{edt-mapper.el} will see @samp{f12} when the physical | |
534 | @key{NumLock} key is pressed, allowing the @key{NumLock} key to be used | |
535 | as the EDT @key{PF1} (@key{GOLD}) key. | |
536 | ||
537 | @node Differences | |
538 | @chapter How Does this EDT Emulation Differ from Real EDT? | |
539 | ||
540 | In general, you will find that this emulation of EDT replicates most, | |
541 | but not all, of EDT's most used Keypad Mode editing functions and | |
542 | behavior. It is not perfect, but most EDT users who have tried the | |
543 | emulation agree that it is quite good enough to make it easy for | |
47301027 | 544 | die-hard EDT users to move over to using Emacs. |
c00dedaf GM |
545 | |
546 | Here's a list of the most important differences between EDT and this GNU | |
547 | Emacs EDT Emulation. The list is short but you must be aware of these | |
548 | differences if you are to use the EDT Emulation effectively. | |
549 | ||
550 | @enumerate | |
551 | ||
552 | @item | |
553 | Entering repeat counts works a little differently than in EDT. | |
554 | ||
555 | EDT allows users to enter a repeat count before entering a command that | |
556 | accepts repeat counts. For example, when using the real EDT, pressing | |
557 | these three keys in sequence, @kbd{GOLD 5 KP1}, will move the cursor in | |
558 | the current direction 5 words. This does @strong{not} work in Emacs! | |
559 | ||
560 | Emacs provides two ways to enter repeat counts and neither involves | |
561 | using the @key{GOLD} key. First, repeat counts can be entered in Emacs | |
562 | by using the @key{ESC} key. For example, pressing these keys in | |
563 | sequence, @kbd{ESC 1 0 KP1}, will move the cursor in the current | |
564 | direction 10 words. Second, Emacs provides another command called | |
565 | @code{universal-argument} that can be used to do the same thing. | |
566 | Normally, in Emacs has this bound to @kbd{C-u}. | |
567 | ||
568 | @item | |
569 | EDT's line mode commands and nokeypad mode commands are @strong{not} | |
570 | supported (with one important exception; see item 8 in | |
571 | @ref{Highlights}). Although, at first, this may seem like a big | |
572 | omission, the set of built-in Emacs commands provides a much richer set | |
573 | of capabilities which more than make up for this omission. | |
574 | ||
575 | To enter Emacs commands not bound to keys, you can press @kbd{GOLD KP7} | |
576 | or the @key{DO} key. Emacs will display its own command prompt "M-x". | |
577 | This stands for the keypress @kbd{Meta-x}, where @key{Meta} is a special | |
578 | shift key. The @key{Alt} key is often mapped to behave as a @key{Meta} | |
579 | key. So, you can also invoke this prompt by pressing @kbd{Meta-x}. | |
580 | Typing the sequence @kbd{ESC x} will also invoke the prompt. | |
581 | ||
582 | @item | |
583 | Selected text is highlighted @strong{only} on systems where Emacs | |
584 | supports the highlighting of text. | |
585 | ||
586 | @item | |
587 | Just like in TPU/EVE, the @key{ENTER} key is @strong{not} used to | |
588 | terminate input when the editor prompts you for input. The @key{RETURN} | |
589 | key is used, instead. (@key{KP4} and @key{KP5} (the direction keys) do | |
590 | terminate input for the @samp{FIND} command, just like in EDT, however.) | |
591 | ||
592 | @end enumerate | |
593 | ||
594 | @node Highlights | |
595 | @chapter Some Highlights, and Comparisons to the Original Emacs EDT Emulation | |
596 | ||
597 | @enumerate | |
598 | ||
599 | @item | |
600 | The EDT define key command is supported (@code{edt-define-key}) and is | |
601 | bound to @kbd{C-k} in the default EDT mode when EDT control sequence | |
602 | bindings are enabled, or when the sample @file{edt-user.el} | |
603 | customization file is used. The TPU/EVE learn command is supported but | |
604 | not bound to a key in the default EDT mode but is bound in the sample | |
605 | @file{edt-user.el} file. | |
606 | ||
607 | Unlike the TPU/EVE learn command, which uses one key to begin the learn | |
608 | sequence, @kbd{C-l}, and another command to remember the sequence, | |
609 | @kbd{C-r}, this version of the learn command (@code{edt-learn}) serves | |
610 | as a toggle to both begin and to remember the learn sequence. | |
611 | ||
612 | Many users who change the meaning of a key with the define key and the | |
613 | learn commands, would like to be able to restore the original key | |
614 | binding without having to quit and restart emacs. So a restore key | |
615 | command is provided to do just that. When invoked, it prompts you to | |
616 | press the key to which you wish the last replaced key definition | |
617 | restored. It is bound to @kbd{GOLD C-k} in the default EDT mode when | |
618 | EDT control sequence bindings are enabled or the sample | |
619 | @file{edt-user.el} customization file is used. | |
620 | ||
621 | @item | |
622 | Direction support is fully supported. | |
623 | ||
624 | @item | |
625 | All original Emacs bindings are fully restored when EDT emulation is | |
626 | turned off. So, if a fellow worker comes over to your terminal to help | |
627 | you with a software problem, for example, and is completely confused by | |
628 | your EDT emulation bindings, just enter the command, | |
629 | @code{edt-emulation-off}, at the @samp{M-x} prompt and the original | |
630 | Emacs bindings will be restored. To resume the EDT emulation, just | |
631 | enter @code{edt-emulation-on}. | |
632 | ||
633 | @item | |
634 | User custom EDT bindings are kept separate from the default EDT | |
635 | bindings. One can toggle back and forth between the custom EDT bindings | |
636 | and default EDT bindings. | |
637 | ||
638 | @item | |
639 | The Emacs functions in @file{edt.el} attempt to emulate, where | |
640 | practical, the exact behavior of the corresponding EDT keypad mode | |
641 | commands. In a few cases, the emulation is not exact, but we hope you | |
642 | will agree it is close enough. In a very few cases, we chose to use the | |
643 | Emacs way of handling things. As mentioned earlier, we do not emulate | |
644 | the EDT @samp{SUBS} command. Instead, we chose to use the Emacs | |
645 | @code{query-replace} function, which we find to be easier to use. | |
646 | ||
647 | @item | |
648 | Emacs uses the regexp assigned to @code{page-delimiter} to determine | |
649 | what marks a page break. This is normally @samp{^\f}, which causes the | |
650 | @code{edt-page} command to ignore form feeds not located at the | |
651 | beginning of a line. To emulate the EDT @samp{PAGE} command exactly, | |
652 | page-delimiter is set to @samp{\f} when EDT emulation is turned on, and | |
653 | restored to @samp{^\f} when EDT emulation is turned off. But, since | |
654 | some users prefer the Emacs definition of a page break, or may wish to | |
655 | preserve a customized definition of page break, one can override the EDT | |
656 | definition by placing | |
657 | ||
658 | @example | |
659 | (setq edt-keep-current-page-delimiter t) | |
660 | @end example | |
661 | ||
662 | @noindent in your @file{.emacs} file. Or, you can used the Emacs customize | |
663 | command to change its setting. | |
664 | ||
665 | @item | |
666 | The EDT definition of a section of a terminal window is hardwired to be | |
667 | 16 lines of its one-and-only 24-line window (the EDT @samp{SECT} command | |
668 | bound to @key{KP8}). That's two-thirds of the window at a time. Since | |
669 | Emacs, like TPU/EVE, can handle multiple windows of sizes of other than | |
670 | 24 lines, the definition of section used here has been modified to | |
671 | two-thirds of the current window. (There is also an | |
672 | @code{edt-scroll-window} function which you may prefer over the | |
673 | @samp{SECT} emulation.) | |
674 | ||
675 | @item | |
676 | Cursor movement and deletion involving word entities is identical to | |
1df7defd | 677 | EDT@. This, above all else, gives the die-hard EDT user a sense of being |
c00dedaf GM |
678 | at home. Also, an emulation of EDT's @samp{SET ENTITY WORD} command is |
679 | provided, for those users who like to customize movement by a word at a | |
680 | time to their own liking. | |
681 | ||
682 | @item | |
683 | EDT's @samp{FIND} and @samp{FNDNXT} are supported. | |
684 | ||
685 | @item | |
686 | EDT's @samp{APPEND}, @samp{REPLACE}, and @samp{SUBS} commands are supported. | |
687 | ||
688 | @item | |
689 | @samp{CHNGCASE} is supported. It works on individual characters or | |
690 | selected text, if @samp{SELECT} is active. In addition, two new | |
691 | commands are provided: @code{edt-lowercase} and @code{edt-uppercase}. | |
692 | They work on individual @strong{words} or selected text, if | |
693 | @samp{SELECT} is active. | |
694 | ||
695 | @item | |
696 | Form feed and tab insert commands are supported. | |
697 | ||
698 | @item | |
699 | A new command, @code{edt-duplicate-word}, is provided. If you | |
700 | experiment with it, you might find it to be surprisingly useful and may | |
701 | wonder how you ever got along without it! It is assigned to @kbd{C-j} | |
702 | in the sample @file{edt-user.el} customization file. | |
703 | ||
704 | @item | |
705 | TPU/EVE's Rectangular Cut and Paste functions (originally from the | |
706 | EVE-Plus package) are supported. But unlike the TPU/EVE versions, these | |
707 | here support both insert and overwrite modes. The seven rectangular | |
708 | functions are bound to @key{F7}, @key{F8}, @kbd{GOLD-F8}, @key{F9}, | |
709 | @kbd{GOLD-F9}, @key{F10}, and @kbd{GOLD-F10} in the default EDT mode. | |
710 | ||
711 | @item | |
712 | The original EDT emulation package set up many default regular and GOLD | |
713 | bindings. We tried to preserve most (but not all!) of these, so users | |
714 | of the original emulation package will feel more at home. | |
715 | ||
716 | Nevertheless, there are still many GOLD key sequences which are not | |
717 | bound to any functions. These are prime candidates to use for your own | |
718 | customizations. | |
719 | ||
720 | Also, there are several commands in @file{edt.el} not bound to any key. | |
721 | So, you will find it worthwhile to look through @file{edt.el} for | |
722 | functions you may wish to add to your personal customized bindings. | |
723 | ||
724 | @item | |
725 | The VT200/VT300 series terminals steal the function keys @key{F1} to | |
726 | @key{F5} for their own use. These do not generate signals which are | |
727 | sent to the host. So, @file{edt.el} does not assign any default | |
728 | bindings to @key{F1} through @key{F5}. | |
729 | ||
730 | In addition, our VT220 terminals generate an interrupt when the @key{F6} | |
731 | key is pressed (@samp{^C} or @samp{^Y}, can't remember which) and not | |
732 | the character sequence documented in the manual. So, binding Emacs | |
733 | commands to @key{F6} will not work if your terminal behaves the same | |
734 | way. | |
735 | ||
736 | @item | |
737 | The VT220 terminal has no @key{ESC}, @key{BS}, nor @key{LF} keys, as | |
738 | does a VT100. So the default EDT bindings adopt the standard DEC | |
739 | convention of having the @key{F11}, @key{F12}, and @key{F13} keys, on a | |
740 | VT200 series (and above) terminal, assigned to the same EDT functions | |
741 | that are bound to @key{ESC}, @key{BS}, and @key{LF} on a VT100 terminal. | |
742 | ||
743 | @item | |
744 | Each user, through the use of a private @file{edt-user.el} file, can | |
745 | customize, very easily, personal EDT emulation bindings. | |
746 | ||
747 | @item | |
748 | The EDT @samp{SELECT} and @samp{RESET} functions are supported. | |
749 | However, unlike EDT, pressing @samp{RESET} to cancel text selection does | |
750 | @strong{not} reset the existing setting of the current direction. | |
751 | ||
752 | We also provide a TPU/EVE like version of the single @samp{SELECT/RESET} | |
753 | function, called @code{edt-toggle-select}, which makes the EDT | |
754 | @samp{SELECT} function into a toggle on/off switch. That is, if | |
755 | selection is on, pressing @samp{SELECT} again turns selection off | |
756 | (cancels selection). This function is used in the sample | |
757 | @file{edt-user.el} customization file. | |
758 | ||
759 | @item | |
760 | EDT scroll margins are supported, but are disabled by default. | |
761 | (@ref{Scroll margins} for instructions on how to enable them.) | |
762 | ||
763 | @end enumerate | |
764 | ||
765 | @node Customizing | |
766 | @chapter Customizing Emulation | |
767 | ||
768 | Most EDT users, at one time or another, make some custom key bindings, | |
769 | or use someone else's custom key bindings, which they come to depend | |
770 | upon just as if they were built-in bindings. This EDT Emulation for GNU | |
771 | Emacs is designed to make it easy to customize bindings. | |
772 | ||
773 | If you wish to customize the EDT Emulation to use some of your own key | |
774 | bindings, you need to make a private version of @file{edt-user.el} in | |
775 | your own private lisp directory. The Emacs @file{etc/} directory | |
776 | contains an example for you to use as a template and for ideas. | |
777 | @c This seems to be untrue. | |
778 | @ignore | |
779 | There are two sample files @file{edt-user.el1} and @file{edt-user.el2} | |
780 | for you to use as templates and for ideas. Look at @file{edt-user.el1} | |
781 | first. Unless you will be using two or more very different types of | |
782 | terminals on the same system, you need not look at @file{edt-user.el2}. | |
783 | @end ignore | |
784 | ||
785 | First, you need to have your own private lisp directory, say | |
47301027 | 786 | @file{~/lisp}, and you should add it to the Emacs load path. |
c00dedaf GM |
787 | |
788 | @strong{Please note:} A few sites have different load-path requirements, | |
789 | so the above directions may need some modification if your site has such | |
790 | special needs. | |
791 | ||
792 | @menu | |
55f612f0 | 793 | * Init file:: Creating your own @file{edt-user.el} file. |
c00dedaf GM |
794 | * Words:: Specifying word entities. |
795 | * Control keys:: Enabling EDT control key sequence bindings. | |
796 | * Scroll margins:: Setting scroll margins. | |
c00dedaf GM |
797 | @end menu |
798 | ||
55f612f0 | 799 | @node Init file |
c00dedaf GM |
800 | @section Creating your own @file{edt-user.el} File |
801 | ||
802 | A sample @file{edt-user.el} file is provided in the Emacs @file{etc/} | |
803 | directory. You should use it as a guide to learn how you can customize | |
804 | EDT emulation bindings to your own liking. Names used to identify the | |
805 | set of LK-201 keypad and function keys are: | |
806 | ||
807 | @example | |
808 | Keypad Keys: | |
809 | PF1 PF2 PF3 PF4 | |
810 | KP7 KP8 KP9 KP- | |
811 | KP4 KP5 KP6 KP, | |
812 | KP1 KP2 KP3 | |
813 | KP0 KPP KPE | |
814 | @end example | |
815 | ||
816 | @example | |
817 | Arrow Keys: | |
818 | LEFT RIGHT DOWN UP | |
819 | @end example | |
820 | ||
821 | @example | |
822 | Function Keys: | |
823 | F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 | |
824 | HELP DO F17 F18 F19 F20 | |
825 | ||
826 | FIND INSERT REMOVE | |
827 | SELECT PREVIOUS NEXT | |
828 | @end example | |
829 | ||
830 | Note: Many VT-200 terminals, and above, steal function keys @key{F1} | |
831 | through @key{F5} for terminal setup control and don't send anything to | |
832 | the host if pressed. So customizing bindings to these keys may not work | |
833 | for you. | |
834 | ||
835 | There are three basic functions that do the EDT emulation custom | |
836 | bindings: @code{edt-bind-key}, @code{edt-bind-gold-key}, and | |
837 | @code{edt-bind-function-key}. | |
838 | ||
839 | The first two are for binding functions to keys which are standard | |
840 | across most keyboards. This makes them keyboard independent, making it | |
841 | possible to define these key bindings for all terminals in the file | |
842 | @file{edt.el}. | |
843 | ||
844 | The first, @code{edt-bind-key}, is used typically to bind emacs commands | |
845 | to control keys, although some people use it to bind commands to other | |
846 | keys, as well. (For example, some people use it to bind the VT200 | |
847 | seldom used back-tick key (@samp{`}) to the function @samp{ESC-prefix} | |
848 | so it will behave like an @key{ESC} key.) The second function, | |
849 | @code{edt-bind-gold-key}, is used to bind emacs commands to gold key | |
850 | sequences involving alpha-numeric keys, special character keys, and | |
851 | control keys. | |
852 | ||
853 | The third function, @code{edt-bind-function-key}, is terminal dependent | |
854 | and is defined in a terminal specific file (see @file{edt-vt100.el} for | |
855 | example). It is used to bind emacs commands to LK-201 function keys, to | |
856 | keypad keys, and to gold sequences of those keys. | |
857 | ||
858 | @node Words | |
859 | @section Specifying Word Entities | |
860 | ||
861 | The variable @code{edt-word-entities} is used to emulate EDT's @samp{SET | |
862 | ENTITY WORD} command. It contains a list of characters to be treated as | |
863 | words in themselves. If the user does not define | |
864 | @code{edt-word-entities} in his/her @file{.emacs} file, then it is set | |
865 | up with the EDT default containing only @key{TAB}. | |
866 | ||
867 | The characters are stored in the list by their numerical values, not as | |
868 | strings. Emacs supports several ways to specify the numerical value of | |
869 | a character. One method is to use the question mark: @samp{?A} means | |
870 | the numerical value for @samp{A}, @samp{?/} means the numerical value | |
871 | for @samp{/}, and so on. Several unprintable characters have special | |
872 | representations: | |
873 | ||
874 | @example | |
875 | ?\b specifies BS, C-h | |
876 | ?\t specifies TAB, C-i | |
877 | ?\n specifies LFD, C-j | |
878 | ?\v specifies VTAB, C-k | |
879 | ?\f specifies FF, C-l | |
880 | ?\r specifies CR, C-m | |
881 | ?\e specifies ESC, C-[ | |
882 | ?\\ specifies \ | |
883 | @end example | |
884 | ||
885 | Here are some examples: | |
886 | ||
887 | @example | |
888 | (setq edt-word-entities '(?\t ?- ?/)) ; specifies TAB, - , and / | |
889 | (setq edt-word-entities '(?\t) ; specifies TAB, the default | |
890 | @end example | |
891 | ||
892 | @noindent You can also specify characters by their decimal ascii values: | |
893 | ||
894 | @example | |
895 | (setq edt-word-entities '(9 45 47)) ; specifies TAB, - , and / | |
896 | @end example | |
897 | ||
898 | @node Control keys | |
899 | @section Enabling EDT Control Key Sequence Bindings | |
900 | ||
47301027 GM |
901 | Where EDT key bindings and Emacs key bindings conflict, the default |
902 | Emacs key bindings are retained by default. Some diehard EDT users | |
c00dedaf GM |
903 | may not like this. So, if the variable |
904 | @code{edt-use-EDT-control-key-bindings} is set to true in a user's | |
905 | @file{.emacs} file, then the default EDT Emulation mode will enable most | |
906 | of the original EDT control key sequence bindings. If you wish to do | |
907 | this, add the following line to your @file{.emacs} file: | |
908 | ||
909 | @example | |
910 | (setq edt-use-EDT-control-key-bindings t) | |
911 | @end example | |
912 | ||
913 | @node Scroll margins | |
914 | @section Setting Scroll Margins | |
915 | ||
916 | Scroll margins at the top and bottom of the window are now supported. | |
917 | (The design was copied from @file{tpu-extras.el}.) By default, this | |
918 | feature is enabled with the top margin set to 10% of the window and the | |
919 | bottom margin set to 15% of the window. To change these settings, you | |
920 | can invoke the function @code{edt-set-scroll-margins} in your | |
921 | @file{.emacs} file. For example, the following line | |
922 | ||
923 | @example | |
924 | (edt-set-scroll-margins "20%" "25%") | |
925 | @end example | |
926 | ||
927 | @noindent sets the top margin to 20% of the window and the bottom margin | |
928 | to 25% of the window. To disable this feature, set each margin to 0%. | |
929 | You can also invoke @code{edt-set-scroll-margins} interactively while | |
930 | EDT Emulation is active to change the settings for that session. | |
931 | ||
932 | @strong{Please note:} Another way to set the scroll margins is to use | |
20989285 GM |
933 | the Emacs customization feature to set the following two variables |
934 | directly: @code{edt-top-scroll-margin} and @code{edt-bottom-scroll-margin}. | |
c00dedaf GM |
935 | |
936 | Enter the Emacs @code{customize} command. First select the | |
937 | @samp{Editing} group and then select the @samp{Emulations} group. | |
938 | Finally, select the @samp{Edt} group and follow the directions. | |
939 | ||
93e01d46 GM |
940 | @node GNU Free Documentation License |
941 | @appendix GNU Free Documentation License | |
942 | @include doclicense.texi | |
943 | ||
c00dedaf | 944 | @bye |