Emacs 21 Antinews
*****************

For those users who live backwards in time, here is information about downgrading to Emacs version 21.4.  We hope you will enjoy the greater simplicity that results from the absence of many Emacs EMACSVER features.

Old Lisp Features in Emacs 21
=============================

  * Many unnecessary features of redisplay have been eliminated.  (The earlier major release, Emacs 20, will have a completely rewritten redisplay engine, which will be even simpler.)

       - The function redisplay has been removed.  To update the display without delay, call (sit-for 0).  Since it is generally considered wasteful to update the display if there are any pending input events, no replacement for (redisplay t) is provided.

       - The function force-window-update has been removed.  It shouldn't be needed, since changes in window contents are detected automatically.  In case they aren't, call redraw-display to redraw everything.

       - Point no longer moves out from underneath invisible text at the end of each command.  This allows the user to detect invisible text by moving the cursor around---if the cursor gets stuck, there is something invisible in the way.  If you really want cursor motion to ignore the text, try marking it as intangible.

       - Support for image maps and image slices has been removed.  Emacs was always meant for editing text, anyway.

       - The mode line now accepts all text properties, as well as :propertize and :eval forms, regardless of the risky-local-variable property.

       - The line-height and line-spacing properties no longer have any meaning for newline characters.  Such properties wouldn't make sense, since newlines are not really characters; they just tell you where to break a line.

       - Considerable simplifications have been made to the display specification (space . PROPS), which is used for displaying a space of specified width and height.  Pixel-based specifications and Lisp expressions are no longer accepted.

       - Many features associated with the fringe areas have been removed, to encourage people to concentrate on the main editing area (the fringe will be completely removed in Emacs 20.)  Arbitrary bitmaps can no longer be displayed in the fringe; an overlay arrow can still be displayed, but there can only be one overlay arrow at a time (any more would be confusing.)  The fringe widths cannot be adjusted, and individual windows cannot have their own fringe settings.  A mouse click on the fringe no longer generates a special event.

       - Individual windows cannot have their own scroll-bar settings.

       - You can no longer use default in a defface to specify defaults for subsequent faces.

       - The function display-supports-face-attributes-p has been removed.  In defface specifications, the supports predicate is no longer supported.

       - The functions merge-face-attribute and face-attribute-relative-p have been removed.

       - The priority of faces in a list supplied by the :inherit face attribute has been reversed.  We like to make changes like this once in a while, to keep Emacs Lisp programmers on their toes.

       - The min-colors face attribute, used for tailoring faces to limited-color displays, does not exist.  If in doubt, use colors like ``white'' and ``black'', which ought to be defined everywhere.

       - The tty-color-mode frame parameter does not exist.  You should just trust the terminal capabilities database.

  * Several simplifications have been made to mouse support:

       - Clicking mouse-1 won't follow links, as that is alien to the spirit of Emacs.  Therefore, the follow-link property doesn't has any special meaning, and the function mouse-on-link-p has been removed.

       - The variable void-text-area-pointer has been removed, so the mouse pointer shape remains unchanged when moving between valid text areas and void text areas.  The pointer image and text properties are no longer supported.

       - Mouse events will no longer specify the timestamp, the object clicked, equivalent buffer positions (for marginal or fringe areas), glyph coordinates, or relative pixel coordinates.

  * Simplifications have also been made to the way Emacs handles keymaps and key sequences:

       - The kbd macro is now obsolete and is no longer documented. It isn't that difficult to write key sequences using the string and vector representations, and we want to encourage users to learn.

       - Emacs no longer supports key remapping.  You can do pretty much the same thing with substitute-key-definition, or by advising the relevant command.

       - The keymap text and overlay property is now overridden by minor mode keymaps, and will not work at the ends of text properties and overlays.

       - The functions map-keymap, keymap-prompt, and current-active-maps have been removed.

  * Process support has been pared down to a functional minimum.  The functions call-process-shell-command and process-file have been deleted.  Processes no longer maintain property lists, and they won't ask any questions when the user tries to exit Emacs (which would simply be rude.)  The function signal-process won't accept a process object, only the process id; determining the process id from a process object is left as an exercise to the programmer.

  * Networking has also been simplified: make-network-process and its various associated function have all been replaced with a single easy-to-use function, open-network-stream, which can't use UDP, can't act as a server, and can't set up non-blocking connections. Also, deleting a network process with delete-process won't call the sentinel.

  * Many programming shortcuts have been deleted, to provide you with the enjoyment of ``rolling your own''.  The macros while-no-input, with-local-quit, and with-selected-window, along with dynamic-completion-table and lazy-completion-table no longer exist.  Also, there are no built-in progress reporters; with Emacs, you can take progress for granted.

  * Variable aliases are no longer supported.  Aliases are for functions, not for variables.

  * The variables most-positive-fixnum and most-negative-fixnum do not exist.  On 32 bit machines, the most positive integer is probably 134217727, and the most negative integer is probably -134217728.

  * The functions eql and macroexpand-all are no longer available.  However, you can find similar functions in the cl package.

  * The list returned by split-string won't include null substrings for separators at the beginning or end of a string.  If you want to check for such separators, do it separately.

  * The function assoc-string has been removed.  Use assoc-ignore-case or assoc-ignore-representation (which are no longer obsolete.)

  * The escape sequence \s is always interpreted as a super modifier, never a space.

  * The variable buffer-save-without-query has been removed, to prevent Emacs from sneakily saving buffers.  Also, the hook before-save-hook has been removed, so if you want something to be done before saving, advise or redefine basic-save-buffer.

  * The variable buffer-auto-save-file-format has been renamed to auto-save-file-format, and is no longer a permanent local.

  * The function visited-file-modtime now returns a cons, instead of a list of two integers.  The primitive set-file-times has been eliminated.

  * The function file-remote-p is no longer available.

  * When determining the filename extension, a leading dot in a filename is no longer ignored.  Thus, .emacs is considered to have extension emacs, rather than being extensionless.

  * Emacs looks for special file handlers in a more efficient manner: it will choose the first matching handler in file-name-handler-alist, rather than trying to figure out which provides the closest match.

  * The predicate argument for read-file-name has been removed, and so have the variables read-file-name-function and read-file-name-completion-ignore-case.  The function read-directory-name has also been removed.

  * The functions all-completions and try-completion will no longer accept lists of strings or hash tables (it will still accept alists, obarrays, and functions.)  In addition, the function test-completion is no longer available.

  * The G interactive code character is no longer supported. Use F instead.

  * Arbitrary Lisp functions can no longer be recorded into buffer-undo-list.  As a consequence, yank-undo-function is obsolete, and has been removed.

  * Emacs will never complain about commands that accumulate too much undo information, so you no longer have to worry about binding buffer-undo-list to t for such commands (though you may want to do that anyway, to avoid taking up unnecessary memory space.)

  * Atomic change groups are no longer supported.

  * The list returned by (match-data t) no longer records the buffer as a final element.

  * The function looking-back has been removed, so we no longer have the benefit of hindsight.

  * The variable search-spaces-regexp does not exist.  Spaces always stand for themselves in regular expression searches.

  * The functions skip-chars-forward and skip-chars-backward no longer accepts character classes such as [:alpha:].  All characters are created equal.

  * The yank-handler text property no longer has any meaning. Also, yank-excluded-properties, insert-for-yank, and insert-buffer-substring-as-yank have all been removed.

  * The variable char-property-alias-alist has been deleted. Aliases are for functions, not for properties.

  * The function get-char-property-and-overlay has been deleted. If you want the properties at a point, find the text properties at the point; then, find the overlays at the point, and find the properties on those overlays.

  * Font Lock mode only manages face properties; you can't use font-lock keywords to specify arbitrary text properties for it to manage.  After all, it is called Font Lock mode, not Arbitrary Properties Lock mode.

  * The arguments to remove-overlays are no longer optional.

  * In replace-match, the replacement text now inherits properties from the surrounding text.

  * The variable mode-line-format no longer supports the :propertize, %i, and %I constructs.  The function format-mode-line has been removed.

  * The functions window-inside-edges and window-body-height have been removed.  You should do the relevant calculations yourself, starting with window-width and window-height.

  * The functions window-pixel-edges and window-inside-pixel-edges have been removed.  We prefer to think in terms of lines and columns, not pixel coordinates.  (Sometime in the distant past, we will do away with graphical terminals entirely, in favor of text terminals.)  For similar reasons, the functions posn-at-point and posn-at-x-y have been removed, and pos-visible-in-window-p no longer worries about partially visible rows.

  * The macro save-selected-window only saves the selected window of the selected frame, so don't try selecting windows in other frames.

  * The function minibufferp is no longer available.

  * The function modify-all-frames-parameters has been removed (we always suspected the name was ungrammatical, anyway.)

  * The line-spacing variable no longer accepts float values.

  * The function tool-bar-local-item-from-menu has been deleted. If you need to make an entry in the tool bar, you can still use tool-bar-add-item-from-menu, but that modifies the binding in the source keymap instead of copying it into the local keymap.

  * When determining the major mode, the file name takes precedence over the interpreter magic line.  The variable magic-mode-alist, which associates certain buffer beginnings with major modes, has been eliminated.

  * The hook after-change-major-mode-hook is not defined, and neither are run-mode-hooks and delay-mode-hooks.

  * The variable minor-mode-list has been removed.

  * define-derived-mode will copy abbrevs from the parent mode's abbrev table, instead of creating a new, empty abbrev table.

  * There are no ``system'' abbrevs.  When the user saves into the abbrevs file, all abbrevs are saved.

  * The Warnings facility has been removed.  Just use error.

  * Several hook variables have been renamed to flout the Emacs naming conventions.  We feel that consistency is boring, and having non-standard hook names encourages users to check the documentation before using a hook.  For instance, the normal hook find-file-hook has been renamed to find-file-hooks, and the abnormal hook delete-frame-functions has been renamed to delete-frame-hook.

  * The function symbol-file does not exist.  If you want to know which file defined a function or variable, try grepping for it.

  * The variable load-history records function definitions just like variable definitions, instead of indicating which functions were previously autoloaded.

  * There is a new variable, recursive-load-depth-limit, which specifies how many times files can recursively load themselves; it is 50 by default, and nil means infinity.  Previously, Emacs signaled an error after just 3 recursive loads, which was boring.

  * Byte-compiler warnings and error messages will leave out the line and character positions, in order to exercise your debugging skills. Also, there is no with-no-warnings macro---instead of suppressing compiler warnings, fix your code to avoid them!

  * The function unsafep has been removed.

  * File local variables can now specify a string with text properties. Since arbitrary Lisp expressions can be embedded in text properties, this can provide you with a great deal of flexibility and power.  On the other hand, safe-local-eval-forms and the safe-local-eval-function function property have no special meaning.

  * You can no longer use char-displayable-p to test if Emacs can display a certain character.

  * The function string-to-multibyte is no longer available.

  * The translation-table-for-input translation table has been removed.  Also, translation hash tables are no longer available, so we don't need the functions lookup-character and lookup-integer.

  * The table argument to translate-region can no longer be a char-table; it has to be a string.

  * The two functions merge-coding-systems and decode-coding-inserted-region, and the variable auto-coding-functions, have been deleted.  The mime-text-unsuitable coding system property no longer has any special meaning.

  * If pure storage overflows while dumping, Emacs won't tell you how much additional pure storage it needs.  Try adding in increments of 20000, until you have enough.

  * The variables gc-elapsed, gcs-done, and post-gc-hook have been garbage-collected.