1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
|
Advantages of Gosling Emacs:
1. The program itself is much smaller.
GNU Emacs uses about 250k more pure storage.
As a result, Gosling Emacs can run on machines
that cannot run GNU Emacs. There is not much difference
in the amount of impure storage in the two programs.
2. In some versions there is support for other forks to
establish communications channels to Emacs (using sockets?).
3. There is a direct interface to dbm (data bases).
Advantages of GNU Emacs:
* True Lisp, not Mocklisp.
GNU Emacs's extension language has real symbols, lists
and vectors. Many extensions are much simpler, and some
become possible that were nearly impossible in Gosling Emacs.
Many primitives can have cleaner interfaces, and some features
need not be put in as special primitives because you can do
them easily yourself.
* But Mocklisp still works.
An automatic conversion package plus a run-time library
allows you to convert a Mocklisp library into a Lisp library.
* Commands are better crafted.
For example, nearly every editing function for which a
numeric argument would make sense as a repeat count does
accept a repeat count, and does handle a negative argument
in the way you would expect.
* The manual is clearer.
Everyone tells me it is a very good manual.
* Better on-line documentation.
Both functions and variables have documentation strings that
describe exactly how to use them.
* C mode is smart.
It really knows how to indent each line correctly,
for most popular indentation styles. (Some variables
control which style is used.)
* Compatible with PDP-10 Emacs, Multics Emacs and Zmacs.
The commands in GNU Emacs are nearly the same as in the
original Emacs and the other Emacses which imitated it.
(A few have been changed to fit the Unix environment better.)
* Support for Gosling's Emacs commands.
M-x set-gosmacs-bindings rebinds many editing commands for
compatibility with Gosling's Emacs.
M-x set-gnu-bindings reverses the change.
* Side-by-side windows.
You can split a GNU Emacs window either horizontally or
vertically.
* Redisplay is faster.
GNU Emacs sends about the same stuff to the terminal that
Gosling's does, but GNU Emacs uses much less CPU time to
decide what to do.
* Entirely termcap-driven.
GNU Emacs has nearly no special code for any terminal type. Various
new termcap strings make it possible to handle all terminals nearly as
fast as they could be handled by special-case code.
* Display-hiding features.
For example, Outline Mode makes it possible for you to edit
an outline, making entire sub-branches of the outline visible
or invisible when you wish.
* You can interrupt with Control-G.
Even a looping Lisp program can be stopped this way.
And even a loop in C code does not stop you from killing
Emacs and getting back to your shell.
* Per-buffer Undo.
You can undo the last several changes, in each buffer
independently.
* The editor code itself is clean.
Many people have remarked on how much they enjoy reading
the code for GNU Emacs.
One other note: The program etc/cvtmail that comes with GNU Emacs can
be used to convert a mail directory for Gosling Emacs's Rmail into a
Unix mail file that you could read into GNU Emacs's Rmail.
A detailed comparison by Rodney Zykowitz (rtgvax!ramin@eddie.mit.edu)
Enclosed are two difference listings. The first one is a cross-reference
by Key bindings. The second is by alphabetized function name.
Only those functions normally bound to keys in a
"standard" version are included. As far as I know it excludes
bindings added here locally (but what do I know...)
The Gosling's is version 2.02 and runs on VMS 4.2. The Gnu is
version 16.56.1 running under Ultrix 1.1.
And could someone send me some info on Gnu on VMS. I seem to have entirely
missed that posting. If it is hopeless, I just might sit down and write
a Gnu emulator for Unipress and a Unipress emulator for Gnu... But the
thought of that already makes me wanna....
ramin...
Standard disclaimer excluded for humanitarian purposes.
Command Binding Cross-references. By key code:
VMS (Unipress) GNU Emacs
Key Binding Binding
--- ------- ---------------
^@ set-mark set-mark-command
^A beginning-of-line beginning-of-line
^B backward-character backward-char
^C exit-emacs exit-recursive-edit
^D delete-next-character delete-char
^E end-of-line end-of-line
^F forward-character forward-char
^G illegal-operation
^H delete-previous-character help-command
^H-v describe-variable
^H-w where-is
^H-t help-with-tutorial
^H-s describe-syntax
^H-n view-emacs-news
^H-^N view-emacs-news
^H-m describe-mode
^H-l view-lossage
^H-i info
^H-f describe-function
^H-d describe-function
^H-k describe-key
^H-c describe-key-briefly
^H-b describe-bindings
^H-a command-apropos
^H-^D describe-distribution
^H-^C describe-copying
^H-? help-for-help
^H-^H help-for-help
^I self-insert indent-for-tab-command
^J newline-and-indent newline-and-indent
^K kill-to-end-of-line kill-line
^L redraw-display recenter
^M newline newline
^N next-line next-line
^O newline-and-backup open-line
^P previous-line previous-line
^Q quote-character quoted-insert
^R search-reverse isearch-backward
^S search-forward isearch-forward
^T transpose-characters transpose-chars
^U argument-prefix universal-argument
^V next-page scroll-up
^W delete-to-killbuffer kill-region
^X ^X-prefix Control-x-prefix
^X-^A add-mode-abbrev
^X-^B list-buffers list-buffers
^X-^C exit-emacs save-buffers-kill-emacs
^X-^D describe-word-in-buffer list-directory
^X-^E compile-it eval-last-sexp
^X-^F write-pause-or-exit find-file
^X-^H inverse-add-mode-abbrev
^X-^I insert-file indent-rigidly
^X-^L downcase-region
^X-^M write-modified-files
^X-^N next-error set-goal-column
^X-^O use-old-buffer delete-blank-linkes
^X-^P mark-page
^X-^Q toggle-read-only
^X-^R read-file find-file-read-only
^X-^S write-current-file save-buffer
^X-^T transpose-lines
^X-^U new-undo upcase-region
^X-^V visit-file find-alternate-file
^X-^W write-named-file write-file
^X-^X exchange-dot-and-mark exchange-dot-and-mark
^X-^Z shrink-window suspend-emacs
^X-ESC repeat-complex-command
^X-! execute-monitor-command
^X-$ set-selective-display
^X-( start-remembering start-kbd-macro
^X-) stop-remembering end-kbd-macro
^X-+ add-global-abbrev
^X-- inverse-add-global-abbrev
^X-. set-fill-prefix
^X-/ dot-to-register
^X-0 delete-window
^X-1 delete-other-windows delete-other-windows
^X-2 split-current-window split-window-vertically
^X-4 ctl-x-4-prefix
^X-4-^F find-file-other-window
^X-4-. find-tag-other-window
^X-4-b pop-to-buffer
^X-4-d dired-other-window
^X-4-f find-file-other-window
^X-4-m mail-other-window
^X-5 split-window-horizontally
^X-; set-comment-column
^X-< scroll-left
^X-= what-cursor-position
^X-> scroll-right
^X-[ backward-page
^X-] forward-page
^X-^ enlarge-window
^X-` next-error
^X-a append-to-buffer
^X-b switch-to-buffer switch-to-buffer
^X-d delete-window dired
^X-e execute-keyboard-macro call-last-kbd-macro
^X-f set-fill-column
^X-g insert-register
^X-h mark-whole-buffer
^X-i insert-file
^X-j register-to-dot
^X-k kill-buffer
^X-l count-lines-page
^X-m mail
^X-n next-window narrow-to-region
^X-o other-window
^X-p previous-window narrow-to-page
^X-q kbd-macro-query
^X-r copy-rectangle-to-register
^X-s save-some-buffers
^X-u advertised-undo
^X-w widen
^X-x copy-to-register
^X-z enlarge-window
^X-{ shrink-window-horizontally
^X-} enlarge-window-horizontally
^X-DEL backward-kill-sentence
^Y yank-from-killbuffer yank
^Z scroll-one-line-up suspend-emacs
ESC ESC-prefix
ESC-^@ mark-sexp
ESC-^A beginning-of-defun
ESC-^B backward-sexp
ESC-^C exit-emacs exit-recursive-edit
ESC-^D down-list
ESC-^E end-of-defun
ESC-^F forward-sexp
ESC-^H mark-defun
ESC-^J indent-new-comment-line
ESC-^K kill-sexp
ESC-^N forward-list
ESC-^O split-line
ESC-^P backward-list
ESC-^S isearch-forward-regexp
ESC-^T transpose-sexps
ESC-^U backward-up-list
ESC-^V page-next-window scroll-other-window
ESC-^W delete-region-to-buffer append-next-kill
ESC-^Y yank-buffer
ESC-ESC execute-mlisp-line eval-expression
ESC-^^ case-region-invert
ESC-^\ indent-region
ESC-<SP> just-one-space
ESC-! line-to-top-of-window shell-command
ESC-$ spell-word
ESC-% query-replace
ESC-' abbrev-prefix-mark
ESC-( backward-paragraph insert-parentheses
ESC-) forward-paragraph move-past-close-and-reindent
ESC-, beginning-of-window tags-loop-continue
ESC-- meta-minus negative-argument
ESC-. end-of-window find-tag
ESC-0..ESC-9 meta-digit digit-argument
ESC-; indent-for-comment
ESC-< beginning-of-file beginning-of-buffer
ESC-= count-lines-region
ESC-> end-of-file end-of-buffer
ESC-@ mark-word
ESC-[ backward-paragraph
ESC-\ delete-horizontal-space
ESC-] forward-paragraph
ESC-? apropos
ESC-^ case-word-invert delete-indentation
ESC-a backward-sentence backward-sentence
ESC-b backward-word backward-word
ESC-d delete-next-word kill-word
ESC-e forward-sentence forward-sentence
ESC-f forward-word forward-word
ESC-g fill-region
ESC-h delete-previous-word mark-paragraph
ESC-j indent-C-procedure indent-new-comment-line
ESC-k kill-sentence
ESC-l case-word-lower downcase-word
ESC-q query-replace-string fill-paragraph
ESC-r replace-string move-to-window-line
ESC-t transpose-words
ESC-u case-word-upper upcase-word
ESC-v previous-page scroll-down
ESC-w copy-region-as-kill
ESC-x execute-extended-command execute-extended-command
ESC-y yank-pop
ESC-z scroll-one-line-down zap-to-char
ESC-| shell-command-on-region
ESC-~ not-modified
ESC-DEL backward-kill-word
^_ return-to-monitor
.., self-insert
- minus
.../ self-insert
0..9 digit
:..~ self-insert
^? delete-previous-character
Command Binding Cross-references. By name:
Command VMS (Unipress) Key GNU Key
----------------------------- --------------------- ------------
abbrev-prefix-mark ESC-'
add-global-abbrev ^X-+
add-mode-abbrev ^X-^A
advertised-undo ^X-u
append-next-kill ESC-^W
append-to-buffer ^X-a
apropos ESC-?
argument-prefix ^U
backward-char ^B
backward-character ^B
backward-kill-sentence ^X-DEL
backward-kill-word ESC-DEL
backward-list ESC-^P
backward-page ^X-[
backward-paragraph ESC-(
backward-paragraph ESC-[
backward-sentence ESC-a
backward-sentence ESC-a
backward-sexp ESC-^B
backward-up-list ESC-^U
backward-word ESC-b
backward-word ESC-b
beginning-of-buffer ESC-<
beginning-of-defun ESC-^A
beginning-of-file ESC-<
beginning-of-line ^A
beginning-of-line ^A
beginning-of-window ESC-,
call-last-kbd-macro ^X-e
case-region-invert ESC-^^
case-word-invert ESC-^
case-word-lower ESC-l
case-word-upper ESC-u
command-apropos ^H-a
compile-it ^X-^E
control-x-prefix ^X
control-x-prefix ^X
copy-rectangle-to-register ^X-r
copy-region-as-kill ESC-w
copy-to-register ^X-x
count-lines-page ^X-l
count-lines-region ESC-=
ctl-x-4-prefix ^X-4
delete-blank-linkes ^X-^O
delete-char ^D
delete-horizontal-space ESC-\
delete-indentation ESC-^
delete-next-character ^D
delete-next-word ESC-d
delete-other-windows ^X-1
delete-other-windows ^X-1
delete-previous-character ^H ^?
delete-previous-character ^?
delete-previous-word ESC-h
delete-region-to-buffer ESC-^W
delete-to-killbuffer ^W
delete-window ^X-0
delete-window ^X-d
describe-bindings ^H-b
describe-copying ^H-^C
describe-distribution ^H-^D
describe-function ^H-f
describe-function ^H-d
describe-key ^H-k
describe-key-briefly ^H-c
describe-mode ^H-m
describe-syntax ^H-s
describe-variable ^H-v
describe-word-in-buffer ^X-^D
digit 0..9
digit 0..9
digit-argument ESC-0..ESC-9
dired ^X-d
dired-other-window ^X-4-d
dot-to-register ^X-/
down-list ESC-^D
downcase-region ^X-^L
downcase-word ESC-l
end-kbd-macro ^X-)
end-of-buffer ESC->
end-of-defun ESC-^E
end-of-file ESC->
end-of-line ^E
end-of-line ^E
end-of-window ESC-.
enlarge-window ^X-^
enlarge-window ^X-z
enlarge-window-horizontally ^X-}
esc-prefix ESC
esc-prefix ESC
eval-expression ESC-ESC
eval-last-sexp ^X-^E
exchange-dot-and-mark ^X-^X
exchange-dot-and-mark ^X-^X
execute-extended-command ESC-x
execute-extended-command ESC-x
execute-keyboard-macro ^X-e
execute-mlisp-line ESC-ESC
execute-monitor-command ^X-!
exit-emacs ^C
exit-emacs ^X-^C
exit-emacs ESC-^C
exit-recursive-edit ^C
exit-recursive-edit ESC-^C
fill-paragraph ESC-q
fill-region ESC-g
find-alternate-file ^X-^V
find-file ^X-^F
find-file-other-window ^X-4-^F
find-file-other-window ^X-4-f
find-file-read-only ^X-^R
find-tag ESC-.
find-tag-other-window ^X-4-.
forward-char ^F
forward-character ^F
forward-list ESC-^N
forward-page ^X-]
forward-paragraph ESC-)
forward-paragraph ESC-]
forward-sentence ESC-e
forward-sentence ESC-e
forward-sexp ESC-^F
forward-word ESC-f
forward-word ESC-f
help-command ^H
help-for-help ^H-?
help-for-help ^H-^H
help-with-tutorial ^H-t
illegal-operation ^G
indent-C-procedure ESC-j
indent-for-comment ESC-;
indent-for-tab-command ^I
indent-new-comment-line ESC-^J
indent-new-comment-line ESC-j
indent-region ESC-^\
indent-rigidly ^X-^I
info ^H-i
insert-file ^X-^I
insert-file ^X-i
insert-parentheses ESC-(
insert-register ^X-g
inverse-add-global-abbrev ^X--
inverse-add-mode-abbrev ^X-^H
isearch-backward ^R
isearch-forward ^S
isearch-forward-regexp ESC-^S
just-one-space ESC-<SP>
kbd-macro-query ^X-q
kill-buffer ^X-k
kill-line ^K
kill-region ^W
kill-sentence ESC-k
kill-sexp ESC-^K
kill-to-end-of-line ^K
kill-word ESC-d
line-to-top-of-window ESC-!
list-buffers ^X-^B
list-buffers ^X-^B
list-directory ^X-^D
mail ^X-m
mail-other-window ^X-4-m
mark-defun ^X-^H
mark-page ^X-^P
mark-paragraph ESC-h
mark-sexp ESC-^@
mark-whole-buffer ^X-h
mark-word ESC-@
meta-digit ESC-0..ESC-9
meta-minus ESC--
minus -
minus -
move-past-close-and-reindent ESC-)
move-to-window-line ESC-r
narrow-to-page ^X-p
narrow-to-region ^X-n
negative-argument ESC--
new-undo ^X-^U
newline ^M
newline ^M
newline-and-backup ^O
newline-and-indent ^J
newline-and-indent ^J
next-error ^X-^N
next-error ^X-`
next-line ^N
next-line ^N
next-page ^V
next-window ^X-n
not-modified ESC-~
open-line ^O
other-window ^X-o
page-next-window ESC-^V
pop-to-buffer ^X-4-b
previous-line ^P
previous-line ^P
previous-page ESC-v
previous-window ^X-p
query-replace ESC-%
query-replace-string ESC-q
quote-character ^Q
quoted-insert ^Q
read-file ^X-^R
recenter ^L
redraw-display ^L
register-to-dot ^X-j
repeat-complex-command ^X-ESC
replace-string ESC-r
return-to-monitor ^_(CTL-/)
save-buffer ^X-^S
save-buffers-kill-emacs ^X-^C
save-some-buffers ^X-s
scroll-down ESC-v
scroll-left ^X-<
scroll-one-line-down ESC-z
scroll-one-line-up ^Z
scroll-other-window ESC-^V
scroll-right ^X->
scroll-up ^V
search-forward ^S
search-reverse ^R
self-insert ^I
self-insert <SP>..,
self-insert .../
self-insert :..~
set-comment-column ^X-;
set-fill-column ^X-f
set-fill-prefix ^X-.
set-goal-column ^X-^N
set-mark ^@
set-mark-command ^@
set-selective-display ^X-$
shell-command ESC-!
shell-command-on-region ESC-|
shrink-window ^X-^Z
shrink-window-horizontally ^X-{
spell-word ESC-$
split-current-window ^X-2
split-line ESC-^O
split-window-horizontally ^X-5
split-window-vertically ^X-2
start-kbd-macro ESC-(
start-remembering ^X-(
stop-remembering ^X-)
suspend-emacs ^X-^Z
suspend-emacs ^Z
switch-to-buffer ^X-b
switch-to-buffer ^X-b
tags-loop-continue ESC-,
toggle-read-only ^X-^Q
transpose-characters ^T
transpose-chars ^T
transpose-lines ^X-^T
transpose-sexps ESC-^T
transpose-words ESC-t
universal-argument ^U
upcase-region ^X-^U
upcase-word ESC-u
use-old-buffer ^X-^O
view-emacs-news ^H-^N
view-emacs-news ^H-n
view-lossage ^H-l
visit-file ^X-^V
what-cursor-position ^X-=
where-is ^H-w
widen ^X-w
write-current-file ^X-^S
write-file ^X-^W
write-modified-files ^X-^M
write-named-file ^X-^W
write-pause-or-exit ^X-^F
yank ^Y
yank-buffer ESC-^Y
yank-from-killbuffer ^Y
yank-pop ESC-y
zap-to-char ESC-z
|