|
|
1.1 ! root 1: Differences between GNU Emacs and CCA Emacs. ! 2: Copyright (c) 1985 Richard M. Stallman ! 3: ! 4: Permission is granted to anyone to make or distribute verbatim copies ! 5: of this document as received, in any medium, provided that the ! 6: copyright notice and permission notice are preserved, ! 7: and that the distributor grants the recipient permission ! 8: for further redistribution as permitted by this notice. ! 9: ! 10: * GNU Emacs Lisp vs CCA Elisp. ! 11: ! 12: GNU Emacs Lisp does not have a distinction between Lisp functions ! 13: and Emacs functions, or between Lisp variables and Emacs variables. ! 14: The Lisp and the editor are integrated. A Lisp function defined ! 15: with defun is callable as an editor command if you put an ! 16: interactive calling spec in it; for example, ! 17: (defun forward-character (n) ! 18: (interactive "p") ! 19: (goto-char (+ (point) n))) ! 20: defines a function of one argument that moves point forward by ! 21: a specified number of characters. Programs could call this function, ! 22: as in (forward-character 6), or it could be assigned to a key, ! 23: in which case the "p" says to pass the prefix numeric arg as ! 24: the function's argument. As a result of this feature, you often ! 25: need not have two different functions, one to be called by programs ! 26: and another to read arguments from the user conveniently; the same ! 27: function can do both. ! 28: ! 29: CCA Elisp tries to be a subset of Common Lisp and tries to ! 30: have as many Common Lisp functions as possible (though it is still ! 31: only a small fraction of full Common Lisp). GNU Emacs Lisp ! 32: is somewhat similar to Common Lisp just because of my Maclisp ! 33: and Lisp Machine background, but it has several distinct incompatibilities ! 34: in both syntax and semantics. Also, I have not attempted to ! 35: provide many Common Lisp functions that you could write in Lisp, ! 36: or others that provide no new capability in the circumstances. ! 37: ! 38: GNU Emacs Lisp does not have packages, readtables, or character objects ! 39: (it uses integers to represent characters). ! 40: ! 41: On the other hand, windows, buffers, relocatable markers and processes ! 42: are first class objects in GNU Emacs Lisp. You can get information about them ! 43: and do things to them in a Lispy fashion. Not so in CCA Emacs. ! 44: ! 45: In GNU Emacs Lisp, you cannot open a file and read or write characters ! 46: or Lisp objects from it. This feature is painful to support, and ! 47: is not fundamentally necessary in an Emacs, because instead you ! 48: can read the file into a buffer, read or write characters or ! 49: Lisp objects in the buffer, and then write the buffer into the file. ! 50: ! 51: On the other hand, GNU Emacs Lisp does allow you to rename, delete, add ! 52: names to, and copy files; also to find out whether a file is a ! 53: directory, whether it is a symbolic link and to what name, whether ! 54: you can read it or write it, find out its directory component, ! 55: expand a relative pathname, find completions of a file name, etc., ! 56: which you cannot do in CCA Elisp. ! 57: ! 58: GNU Emacs Lisp uses dynamic scope exclusively. This enables you to ! 59: bind variables which affect the execution of the editor, such as ! 60: indent-tabs-mode. ! 61: ! 62: GNU Emacs Lisp code is normally compiled into byte code. Most of the ! 63: standard editing commands are written in Lisp, and many are ! 64: dumped, pure, in the Emacs that users normally run. ! 65: ! 66: GNU Emacs allows you to interrupt a runaway Lisp program with ! 67: Control-g. ! 68: ! 69: * GNU Emacs Editing Advantages ! 70: ! 71: GNU Emacs is faster for many things, especially insertion of text ! 72: and file I/O. ! 73: ! 74: GNU Emacs allows you to undo more than just the last command ! 75: with the undo command (C-x u, or C-_). You can undo quite a ways back. ! 76: Undo information is separate for each buffer; changes in one buffer ! 77: do not affect your ability to undo in another buffer. ! 78: ! 79: GNU Emacs commands that want to display some output do so by putting ! 80: it in a buffer and displaying that buffer in a window. This ! 81: technique comes from Gosling Emacs. It has both advantages and ! 82: disadvantages when compared with the technique, copied by CCA Emacs ! 83: from my original Emacs which inherited it from TECO, of having "type ! 84: out" which appears on top of the text in the current window but ! 85: disappears automatically at the next input character. ! 86: ! 87: GNU Emacs does not use the concept of "subsystems". Instead, it uses ! 88: highly specialized major modes. For example, dired in GNU Emacs has ! 89: the same commands as dired does in other versions of Emacs, give or ! 90: take a few, but it is a major mode, not a subsystem. The advantage ! 91: of this is that you do not have to "exit" from dired and lose the ! 92: state of dired in order to edit files again. You can simply switch ! 93: to another buffer, and switch back to the dired buffer later. You ! 94: can also have several dired buffers, looking at different directories. ! 95: ! 96: It is still possible to write a subsystem--your own command loop-- ! 97: in GNU Emacs, but it is not recommended, since writing a major mode ! 98: for a special buffer is better. ! 99: ! 100: Recursive edits are also rarely used, for the same reason: it is better ! 101: to make a new buffer and put it in a special major mode. Sending ! 102: mail is done this way. ! 103: ! 104: GNU Emacs expects everyone to use find-file (C-x C-f) for reading ! 105: in files; its C-x C-v command kills the current buffer and then finds ! 106: the specified file. ! 107: ! 108: As a result, users do not need to think about the complexities ! 109: of subsystems, recursive edits, and various ways to read in files ! 110: or what to do if a buffer contains changes to some other file. ! 111: ! 112: GNU Emacs uses its own format of tag table, made by the "etags" ! 113: program. This format makes finding a tag much faster. ! 114: ! 115: Dissociated Press is supported. ! 116: ! 117: ! 118: * GNU Emacs Editing Disadvantages. ! 119: ! 120: GNU Emacs does not display the location of the mark. ! 121: ! 122: GNU Emacs does not have a concept of numbers of buffers, ! 123: or a permanent ordering of buffers, or searching through multiple ! 124: buffers. The tags-search command provides a way to search ! 125: through several buffers automatically. ! 126: ! 127: GNU Emacs does not provide commands to visit files without ! 128: setting the buffer's default directory. Users can write such ! 129: commands in Lisp by copying the code of the standard file ! 130: visiting commands and modifying them. ! 131: ! 132: GNU Emacs does not support "plus options" in the command ! 133: arguments or in buffer-selection commands, except for line numbers. ! 134: ! 135: GNU Emacs does not support encryption. Down with security! ! 136: ! 137: GNU Emacs does not support replaying keystroke files, ! 138: and does not normally write keystroke files. ! 139: ! 140: GNU Emacs does not support the Life game. ! 141: ! 142: ! 143: * Neutral Differences ! 144: ! 145: GNU Emacs uses TAB, not ESC, to complete file names, buffer names, ! 146: command names, etc. ! 147: ! 148: GNU Emacs uses ESC to terminate searches, instead of ! 149: the C-d uses by CCA Emacs. (Actually, this character is controlled ! 150: by a parameter in GNU Emacs.) C-M-s in GNU Emacs is an interactive ! 151: regular expression search, but you can get to a noninteractive ! 152: one by typing ESC right after the C-M-s. GNU Emacs searches ! 153: never wrap around at beginning or end of buffer. ! 154: ! 155: In GNU Emacs, C-x s asks, for each modified file buffer, whether ! 156: to save it. ! 157: ! 158: GNU Emacs indicates line continuation with "\" and line ! 159: truncation (at either margin) with "$". ! 160: ! 161: The command to resume a tags-search or tags-query-replace in ! 162: GNU Emacs is Meta-Comma.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.