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.) * 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- 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- 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 .., 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