@c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. @c Copyright (C) 1999, 2002, 2003, 2004, 2005, @c 2006, 2007 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c This node must have no pointers. @node Antinews, GNU Free Documentation License, System Interface, Top @appendix 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 @value{EMACSVER} features. @section Old Lisp Features in Emacs 21 @itemize @bullet @item 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.) @itemize @minus @item The function @code{redisplay} has been removed. To update the display without delay, call @code{(sit-for 0)}. Since it is generally considered wasteful to update the display if there are any pending input events, no replacement for @code{(redisplay t)} is provided. @item The function @code{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 @code{redraw-display} to redraw everything. @item 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. @item Support for image maps and image slices has been removed. Emacs was always meant for editing text, anyway. @item The mode line now accepts all text properties, as well as @code{:propertize} and @code{:eval} forms, regardless of the @code{risky-local-variable} property. @item The @code{line-height} and @code{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. @item Considerable simplifications have been made to the display specification @code{(space . @var{props})}, which is used for displaying a space of specified width and height. Pixel-based specifications and Lisp expressions are no longer accepted. @item 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. @item Individual windows cannot have their own scroll-bar settings. @item You can no longer use @samp{default} in a @code{defface} to specify defaults for subsequent faces. @item The function @code{display-supports-face-attributes-p} has been removed. In @code{defface} specifications, the @code{supports} predicate is no longer supported. @item The functions @code{merge-face-attribute} and @code{face-attribute-relative-p} have been removed. @item The priority of faces in a list supplied by the @code{: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. @item The @code{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. @item The @code{tty-color-mode} frame parameter does not exist. You should just trust the terminal capabilities database. @end itemize @item Several simplifications have been made to mouse support: @itemize @minus @item Clicking @kbd{mouse-1} won't follow links, as that is alien to the spirit of Emacs. Therefore, the @code{follow-link} property doesn't have any special meaning, and the function @code{mouse-on-link-p} has been removed. @item The variable @code{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 @code{pointer} image and text properties are no longer supported. @item 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. @end itemize @item Simplifications have also been made to the way Emacs handles keymaps and key sequences: @itemize @minus @item The @code{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. @item Emacs no longer supports key remapping. You can do pretty much the same thing with @code{substitute-key-definition}, or by advising the relevant command. @item The @code{keymap} text and overlay property is now overridden by minor mode keymaps, and will not work at the ends of text properties and overlays. @item The functions @code{map-keymap}, @code{keymap-prompt}, and @code{current-active-maps} have been removed. @end itemize @item Process support has been pared down to a functional minimum. The functions @code{call-process-shell-command} and @code{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 @code{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. @item Networking has also been simplified: @code{make-network-process} and its various associated function have all been replaced with a single easy-to-use function, @code{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 @code{delete-process} won't call the sentinel. @item Many programming shortcuts have been deleted, to provide you with the enjoyment of ``rolling your own.'' The macros @code{while-no-input}, @code{with-local-quit}, and @code{with-selected-window}, along with @code{dynamic-completion-table} and @code{lazy-completion-table} no longer exist. Also, there are no built-in progress reporters; with Emacs, you can take progress for granted. @item Variable aliases are no longer supported. Aliases are for functions, not for variables. @item The variables @code{most-positive-fixnum} and @code{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. @item The functions @code{eql} and @code{macroexpand-all} are no longer available. However, you can find similar functions in the @code{cl} package. @item The list returned by @code{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. @item The function @code{assoc-string} has been removed. Use @code{assoc-ignore-case} or @code{assoc-ignore-representation} (which are no longer obsolete.) @item The escape sequence @samp{\s} is always interpreted as a super modifier, never a space. @item The variable @code{buffer-save-without-query} has been removed, to prevent Emacs from sneakily saving buffers. Also, the hook @code{before-save-hook} has been removed, so if you want something to be done before saving, advise or redefine @code{basic-save-buffer}. @item The variable @code{buffer-auto-save-file-format} has been renamed to @code{auto-save-file-format}, and is no longer a permanent local. @item The function @code{visited-file-modtime} now returns a cons, instead of a list of two integers. The primitive @code{set-file-times} has been eliminated. @item The function @code{file-remote-p} is no longer available. @item When determining the filename extension, a leading dot in a filename is no longer ignored. Thus, @file{.emacs} is considered to have extension @file{emacs}, rather than being extensionless. @item Emacs looks for special file handlers in a more efficient manner: it will choose the first matching handler in @code{file-name-handler-alist}, rather than trying to figure out which provides the closest match. @item The @code{predicate} argument for @code{read-file-name} has been removed, and so have the variables @code{read-file-name-function} and @code{read-file-name-completion-ignore-case}. The function @code{read-directory-name} has also been removed. @item The functions @code{all-completions} and @code{try-completion} will no longer accept lists of strings or hash tables (it will still accept alists, obarrays, and functions.) In addition, the function @code{test-completion} is no longer available. @item The @samp{G} interactive code character is no longer supported. Use @samp{F} instead. @item Arbitrary Lisp functions can no longer be recorded into @code{buffer-undo-list}. As a consequence, @code{yank-undo-function} is obsolete, and has been removed. @item Emacs will never complain about commands that accumulate too much undo information, so you no longer have to worry about binding @code{buffer-undo-list} to @code{t} for such commands (though you may want to do that anyway, to avoid taking up unnecessary memory space.) @item Atomic change groups are no longer supported. @item The list returned by @code{(match-data t)} no longer records the buffer as a final element. @item The function @code{looking-back} has been removed, so we no longer have the benefit of hindsight. @item The variable @code{search-spaces-regexp} does not exist. Spaces always stand for themselves in regular expression searches. @item The functions @code{skip-chars-forward} and @code{skip-chars-backward} no longer accepts character classes such as @samp{[:alpha:]}. All characters are created equal. @item The @code{yank-handler} text property no longer has any meaning. Also, @code{yank-excluded-properties}, @code{insert-for-yank}, and @code{insert-buffer-substring-as-yank} have all been removed. @item The variable @code{char-property-alias-alist} has been deleted. Aliases are for functions, not for properties. @item The function @code{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. @item Font Lock mode only manages @code{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. @item The arguments to @code{remove-overlays} are no longer optional. @item In @code{replace-match}, the replacement text now inherits properties from the surrounding text. @item The variable @code{mode-line-format} no longer supports the @code{:propertize}, @code{%i}, and @code{%I} constructs. The function @code{format-mode-line} has been removed. @item The functions @code{window-inside-edges} and @code{window-body-height} have been removed. You should do the relevant calculations yourself, starting with @code{window-width} and @code{window-height}. @item The functions @code{window-pixel-edges} and @code{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 @code{posn-at-point}, @code{posn-at-x-y}, and @code{window-line-height} have been removed, and @code{pos-visible-in-window-p} no longer worries about partially visible rows. @item The macro @code{save-selected-window} only saves the selected window of the selected frame, so don't try selecting windows in other frames. @item The function @code{minibufferp} is no longer available. @item The function @code{modify-all-frames-parameters} has been removed (we always suspected the name was ungrammatical, anyway.) @item The @code{line-spacing} variable no longer accepts float values. @item The function @code{tool-bar-local-item-from-menu} has been deleted. If you need to make an entry in the tool bar, you can still use @code{tool-bar-add-item-from-menu}, but that modifies the binding in the source keymap instead of copying it into the local keymap. @item When determining the major mode, the file name takes precedence over the interpreter magic line. The variable @code{magic-mode-alist}, which associates certain buffer beginnings with major modes, has been eliminated. @item The hook @code{after-change-major-mode-hook} is not defined, and neither are @code{run-mode-hooks} and @code{delay-mode-hooks}. @item The variable @code{minor-mode-list} has been removed. @item @code{define-derived-mode} will copy abbrevs from the parent mode's abbrev table, instead of creating a new, empty abbrev table. @item There are no ``system'' abbrevs. When the user saves into the abbrevs file, all abbrevs are saved. @item The Warnings facility has been removed. Just use @code{error}. @item 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 @code{find-file-hook} has been renamed to @code{find-file-hooks}, and the abnormal hook @code{delete-frame-functions} has been renamed to @code{delete-frame-hook}. @item The function @code{symbol-file} does not exist. If you want to know which file defined a function or variable, try grepping for it. @item The variable @code{load-history} records function definitions just like variable definitions, instead of indicating which functions were previously autoloaded. @item There is a new variable, @code{recursive-load-depth-limit}, which specifies how many times files can recursively load themselves; it is 50 by default, and @code{nil} means infinity. Previously, Emacs signaled an error after just 3 recursive loads, which was boring. @item 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 @code{with-no-warnings} macro---instead of suppressing compiler warnings, fix your code to avoid them! @item The function @code{unsafep} has been removed. @item 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, @code{safe-local-eval-forms} and the @code{safe-local-eval-function} function property have no special meaning. @item You can no longer use @code{char-displayable-p} to test if Emacs can display a certain character. @item The function @code{string-to-multibyte} is no longer available. @item The @code{translation-table-for-input} translation table has been removed. Also, translation hash tables are no longer available, so we don't need the functions @code{lookup-character} and @code{lookup-integer}. @item The @code{table} argument to @code{translate-region} can no longer be a char-table; it has to be a string. @item The variable @code{auto-coding-functions} and the two functions @code{merge-coding-systems} and @code{decode-coding-inserted-region} have been deleted. The coding system property @code{mime-text-unsuitable} no longer has any special meaning. @item 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. @item The variables @code{gc-elapsed}, @code{gcs-done}, and @code{post-gc-hook} have been garbage-collected. @end itemize @ignore arch-tag: 1d0ef137-2bad-430e-ae8e-d820d569b5a6 @end ignore