]> code.delx.au - gnu-emacs/blobdiff - lispref/anti.texi
(Searching and Matching): Move node.
[gnu-emacs] / lispref / anti.texi
index c42982ce8fb71b956f4c35a93e55ef0879691ace..d6ae30f210657837af48e3e444e856dbc6e87df3 100644 (file)
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1993 Free Software Foundation, Inc. 
+@c Copyright (C) 1999, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
-@node Antinews, Index, Standard Hooks, Top
-@appendix Emacs 18 Antinews
 
-For those users who live backwards in time, here is information about
-downgrading to Emacs version 18.  We hope you will enjoy the greater
-simplicity that results from the absence of many Emacs 19 features.
+@c This node must have no pointers.
+
+@node Antinews, GNU Free Documentation License, System Interface, Top
+@appendix Emacs 21 Antinews
 
-@section Old Features in the Lisp Language
+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.
 
-The following functions are missing or different in Emacs version 18.
+@section Old Lisp Features in Emacs 21
 
 @itemize @bullet
 @item
-The functions @code{delete}, @code{member}, @code{indirect-function},
-@code{map-y-or-n-p}, and @code{invocation-name} have been removed.
+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{read} now skips a terminator character that
-terminates a symbol when reading from a buffer.  Thus, if you use
-@code{read} on a buffer containing @samp{foo(bar)} following point, it
-returns @code{foo} and leaves point after the open-parenthesis.  This
-means there's no way you can properly read the list @samp{(bar)}, but
-that's the way the cookie crumbles.
-
-Because of this simplification, it's no longer necessary for an input
-stream function to accept an optional argument.  In Emacs 18, an input
-stream is always called with no arguments, and should always return
-the next character of input.
+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
-The function @code{documentation} takes just one argument;
-@code{documentation-property} takes just two.
+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
-@code{random} no longer has the optional argument @var{n}.
-
-@item 
-You can no longer arrange to run a hook if a particular Lisp library is
-loaded.  The variable @code{after-load-alist} and the function
-@code{eval-after-load} have been removed.
+Support for image maps and image slices has been removed.  Emacs was
+always meant for editing text, anyway.
 
 @item
-The function @code{autoload} no longer supports autoloading a keymap.
+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
-``Magic'' comments of the form @samp{;;;###autoload} are now just
-comments.  They don't do anything in particular except look pretty.
-If you want a function to be autoloaded by default, edit @file{loaddefs.h}
-by hand.  What do you think editors are for? 
+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
-We took out the @samp{%S} from the @code{format} function, and the
-optional argument @var{noescap} from @code{prin1-to-string}.  We removed
-the @code{print-level} variable.
-@end itemize
-
-@section Compilation Features
-
-@itemize @bullet
-@item
-Inline functions are nonexistent in Emacs 18.  We find they make the
-calling function unnecessarily large.  (Small size is one of the 
-features of Emacs 18.)
+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
-We eliminated the two special forms, @code{eval-when-compile} and
-@code{eval-and-compile}, as well as the @code{compile-defun} command.
+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
-When you load a Lisp file or library, you will no longer receive a
-warning if the directory contains both a @samp{.elc} file and a new
-@samp{.el} file that is newer.  So be on your toes.
+Individual windows cannot have their own scroll-bar settings.
 
 @item
-We removed the special data type for byte-code functions.  Compiled
-functions now work by means of an interpreted function which calls
-the function @code{bytecode}.  That function runs the byte code
-interpreter.
-@end itemize
-
-@section Floating Point Numbers
-
-Emacs 18 doesn't have or need floating point arithmetic built in.
-It has a handy Lisp program that allows you to emulate floating point.
-You'll have to write programs specially to use it, though.
+You can no longer use @samp{default} in a @code{defface} to specify
+defaults for subsequent faces.
 
-As a result, certain macros, functions, and predicates no longer handle
-specifications for floating point numbers.
-
-The function @code{string-to-number}, the predicate @code{floatp}, and
-the variable @code{float-output-format} have all been eliminated.
-
-The functions @code{float}, @code{truncate}, @code{floor}, @code{ceil},
-@code{round}, and @code{logb} do not exist; neither do the functions
-@code{abs}, @code{cos}, @code{sin}, @code{tan}, @code{acos},
-@code{asin}, @code{atan}, @code{exp}, @code{expt}, @code{log10},
-@code{log}, or @code{sqrt}.
-
-The @code{format} function no longer handles the specifications
-@samp{%e}, @samp{%f} and @samp{%g} for printing floating point numbers;
-likewise for @code{message}.
-
-@section Changes in Basic Editing Functions
-
-@itemize @bullet
 @item
-@code{kill-new} and @code{kill-append}, the primitives for putting text
-in the kill ring, have been eliminated.
-@c @code{kill-append} seems to exist as a non-documented (no doc string)
-@c primitive in emacs 18.  but news.texi said it was new for 19.
+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 variables @code{interprogram-paste-function} and
-@code{interprogram-cut-function} have been removed in Emacs 18.
-
-In addition, there's no need for @code{mark-active} and
-@code{deactivate-mark} because there is no Transient Mark mode.  We also
-removed the hooks @code{activate-mark-hook} and
-@code{deactivate-mark-hook}.
+@code{face-attribute-relative-p} and @code{merge-face-attribute} have
+been removed.
 
 @item
-The @code{kill-region} function can no longer be used in read-only
-buffers.  The @code{compare-buffer-substrings} and @code{current-kill}
-functions have been removed.
+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 variable @code{overwrite-mode-binary} has been removed.
+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 function @code{move-to-column} allows just one argument,
-@var{column}. 
-
-@item 
-The search functions now just return @code{t} when successful.  This
-affects the functions @code{search-forward}, @code{search-backward},
-@code{word-search-forward}, @code{word-search-backward},
-@code{re-search-forward}, and @code{re-search-backward}.
+The @code{tty-color-mode} frame parameter does not exist.  You should
+just trust the terminal capabilities database.
+@end itemize
 
 @item
-When you do regular expression searching or matching, there is a fixed
-limit of ten @samp{\(@dots{}\)} pairs that you can get information about
-with @code{match-beginning} and @code{match-end}.  Moreover,
-@code{save-match-data} does not exist; you must use an explicit
-@code{unwind-protect} to save the match data.
+Several simplifications have been made to mouse support:
 
+@itemize @minus
 @item
-@code{translate-region} is gone.
+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
+has any special meaning, and the function @code{mouse-on-link-p} has
+been removed.
 
 @item
-The variables @code{before-change-function},
-@code{after-change-function}, and @code{first-change-hook} have been
-eliminated.
+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
-The second argument to @code{insert-abbrev-table-description} is no
-longer optional.
+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
 
-@section Text Properties
-
-We eliminated text properties.
-
-@section Features for Files
-Many file-related functions have been eliminated or simplified.  Here is
-a basic listing of these functions.
-
-The functions @code{file-accessible-directory-p}, @code{file-truename},
-@code{make-directory}, @code{delete-directory},
-@code{set-visited-file-modtime}, @code{directory-abbrev-alist},
-@code{abbreviate-file-name}, @code{write-region},
-@code{write-contents-hooks}, @code{after-save-hook},
-@code{set-default-file-modes}, @code{default-file-modes}, and
-@code{unix-sync} have been eliminated.
-
-We got rid of the ``initial file name'' argument to
-@code{read-file-name}.
-
-Additionally, we removed the 12th element from the list returned by
-@code{file-attributes}.
-
-@code{directory-files} always sorts the list of files.  It's not user
-friendly to process the files in any haphazard order.
-
-We eliminated the variables @code{write-contents-hooks} and
-@code{local-write-file-hooks}.
-
-@section Making Certain File Names ``Magic''
-
-There are no more magic filenames.  Sorry, but all the mana has been
-used up.
-
-@section Frames
-
-There is only one frame in Emacs 18, so all of the frame functions have
-been eliminated.
-
-@section X Window System Features
-
-We have simplified the way Emacs and X interact by removing a great deal
-of creeping featurism.
-
-@itemize @bullet
 @item
-The functions @code{mouse-position} and @code{set-mouse-position}, and
-the special form @code{track-mouse} have been eliminated.
+Simplifications have also been made to the way Emacs handles keymaps
+and key sequences:
 
+@itemize @minus
 @item
-Likewise, the functions @code{x-set-selection}, @code{x-set-cut-buffer},
-@code{x-close-current-connection}, and @code{x-open-connection} have all
-been removed from Emacs Lisp 18.
+The @code{kbd} macro has been removed.  It isn't that difficult to
+write key sequences using the string and vector representations, and
+we want to encourage users to learn.
 
 @item
-We removed a series of functions that gave information about the X
-server and the screen you were using; after all, the whole point of X is
-that all servers are equivalent.  The names of the removed functions
-are: @code{x-display-screens}, @code{x-server-version},
-@code{x-server-vendor}, @code{x-display-pixel-height},
-@code{x-display-mm-height}, @code{x-display-pixel-width},
-@code{x-display-mm-width}, @code{x-display-backing-store},
-@code{x-display-save-under}, @code{x-display-planes},
-@code{x-display-visual-class}, @code{x-display-color-p}, and
-@code{x-display-color-cells}.
-
-Additionally, we removed the variable @code{x-no-window-manager} and the
-functions @code{x-synchronize} and @code{x-get-resource}.
-
-We didn't abolish @code{x-display-color-p}, but we renamed it to
-@code{x-color-display-p}.  We did abolish @code{x-color-defined-p}.
+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
-@code{x-popup-menu} no longer accepts a keymap for its first argument.
+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
-We removed both the function @code{x-rebind-key} and the related
-function @code{x-rebind-keys}.
-
-@item 
-We abolished @code{x-parse-geometry}.
+The functions @code{map-keymap}, @code{keymap-prompt}, and
+@code{current-active-maps} have been removed.
 @end itemize
 
-@section Window Actions that Were No Longer Useful
-
-Various behaviors of windows in Emacs 19 were obsolete by the time Emacs
-18 was due to come out.  We have removed them.  These changes are listed
-below. 
-
-@itemize @bullet
 @item
-We removed the functions @code{window-at}, @code{window-minibuffer-p},
-@code{set-window-dedicated-p}, @code{coordinates-in-window-p},
-@code{walk-windows}, @code{window-dedicated-p}, and @code{window-end}.
+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
-We removed the variables @code{pop-up-frames},
-@code{pop-up-frame-function}, @code{display-buffer-function}, and
-@code{other-window-scroll-buffer}.
+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
-The function @code{minibuffer-window} no longer accepts a frame as
-argument, since frames as objects do not exist in Emacs version 18.  It
-returns the window used for minibuffers.
+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
-The functions @code{next-window} and @code{previous-window} no longer
-accept the @var{all-frames} argument since there is just one frame.
+Variable aliases are no longer supported.  Aliases are for functions,
+not for variables.
 
 @item
-The functions @code{get-lru-window}, @code{get-largest-window},
-@code{get-buffer-window}, and @code{get-buffer-window} also no longer
-take the optional argument @var{all-frames} because there is just one
-frame to search.
-@end itemize
-
-@section Display Features
+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.
 
-@itemize @bullet
 @item
-There are no overlays, and no faces.
+The functions @code{eql} and @code{macroexpand-all} are no longer
+available.  However, you can find similar functions in the @code{cl}
+package.
 
 @item
-We eliminated the mode line spec @samp{%l} that in later versions used
-to display the current line number.  We removed the variables
-@code{line-number-mode} and @code{line-number-display-limit}.
+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
-@code{baud-rate} is now a function rather than a variable.
+The function @code{assoc-string} has been removed.  Use
+@code{assoc-ignore-case} or @code{assoc-ignore-representation} (which
+are no longer obsolete.)
 
 @item
-You can no longer call @code{message} with @code{nil} as the only
-argument; therefore, you can not reliably make the contents of the
-minibuffer visible.
+The escape sequence @samp{\s} is always interpreted as a super
+modifier, never a space.
 
 @item
-The variable @code{temp-buffer-show-function} has been renamed
-@code{temp-buffer-show-hook}.
+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
-We removed the function @code{force-mode-line-update}.  Use
-the following idiom instead:
-
-@example
-(set-buffer-modified-p (buffer-modified-p))
-@end example
+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
-Display tables no longer exist.  We know what the @sc{ASCII} characters
-should look like, and we made them look that way.
-@end itemize
-
-@section Working with Input Events
-
-The big news about input events is that we got rid of function key
-and mouse events.  Now the only input events are characters.
-What's more, these characters now have to be in the range of 0 to 127,
-optionally with a meta bit.  This makes for big simplifications.
+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.
 
-@itemize @bullet
 @item
-Functions like @code{define-key}, @code{global-set-key},
-@code{read-key-sequence}, and @code{local-set-key} used to accept
-strings or vectors in Emacs 19; now they only accept strings.
+The function @code{file-remote-p} is no longer available.
 
 @item
-The documentation functions (@code{single-key-description},
-@code{key-description}, etc.) also no longer accept vectors, but they do
-accept strings.
+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
-We removed the @code{read-event}, @code{event-start},
-@code{posn-window}, @code{posn-point}, @code{posn-col-row},
-@code{posn-timestamp}, @code{scroll-bar-scale}, and @code{event-end}
-functions, since they were only useful for non-character events.
+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
-We removed the @code{unread-command-events} and @code{last-event-frame}
-variables.
+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{this-command-keys} and @code{recent-keys} now always
-return a string.  Likewise, a keyboard macro's definition can only be a
-string, not a vector.
+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
-We eliminated @samp{e} as an interactive specification since it
-was useful only with non-character events.
+The @samp{G} interactive code character is no longer supported.
+Use @samp{F} instead.
 
 @item
-In Emacs 18, we represent Meta characters as character objects with the
-same encoding used in strings: 128 plus the corresponding non-Meta
-@sc{ASCII} character.
-@end itemize
-
-@section Menus
-
-You can no longer define menus as keymaps; good system design requires
-crafting a special-purpose interface for each facility, so it can
-precisely fit the requirements of that facility.  We decided that
-unifying keymaps and menus was simply too much of a strain.
-
-In Emacs 18, you can only activate menus with the mouse.  Using them
-with a keyboard was too confusing for too many users.
-
-Emacs 18 has no menu bars.  All functions and variables related to the
-menu bar have been eliminated.
-
-@section Changes in Minibuffer Features
-
-The minibuffer history feature has been eliminated.  Thus, we removed
-the optional argument @var{hist} from the minibuffer input functions
-@code{read-from-minibuffer} and @code{completing-read}.
-
-The @var{initial} argument to @code{read-from-minibuffer} and other
-minibuffer input functions can no longer be a cons cell
-@code{(@var{string} . @var{position})}.
-
-In the function @code{read-no-blanks-input}, the @var{initial} argument
-is no longer optional.
-
-@section New Features for Defining Commands
+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.
 
-@itemize @bullet
 @item
-The special meaning of @samp{@@} in an interactive specification has
-been eliminated.
+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
-Emacs 18 does not support use of format-style @samp{%}-sequences in the
-prompt strings in interactive specifications.
+Atomic change groups are no longer supported.
 
 @item
-The property @code{enable-recursive-minibuffers} no longer has any
-special meaning.
-@end itemize
-
-@section Removed Features for Reading Input
-
-We removed the third argument (@var{meta}) from the function
-@code{set-input-mode}.  Consequently, we added the variable
-@code{meta-flag}; set it to @code{t} to enable use of a Meta key, and
-to @code{nil} to disable it.  (Those are the only two alternatives.)
+The list returned by @code{(match-data t)} no longer records the
+buffer as a final element.
 
-We also removed the variable @code{extra-keyboard-modifiers}.
-
-We removed the function @code{keyboard-translate} and the variables
-@code{num-input-keys} and @code{function-key-map}.
-
-@section Removed Syntax Table Features
-
-@itemize @bullet
 @item
-We eliminated the functions @code{skip-syntax-forward},
-@code{skip-syntax-backward}, @code{forward-comment}.
+The function @code{looking-back} has been removed, so we no longer
+have the benefit of hindsight.
 
 @item
-We removed the syntax flag for ``prefix syntax'' and the flag for the
-alternate comment style.  Emacs 18 supports only one style of comment
-in any given syntax table.
+The variable @code{search-spaces-regexp} does not exist.  Spaces
+always stand for themselves in regular expression searches.
 
 @item
-We abolished the variable @code{words-include-escapes}.
-@end itemize
-
-@section The Case Table
+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.
 
-Case tables do not exist in Emacs 18.  Due to this change, we have
-removed the associated functions @code{set-standard-case-table},
-@code{standard-case-table}, @code{current-case-table},
-@code{set-case-table}, and @code{set-case-syntax-pair}.
-
-@section Features for Dealing with Buffers
-
-@itemize @bullet
 @item
-We eliminated several functions for dealing with buffers:
-@code{buffer-modified-tick} and @code{generate-new-buffer-name}.
+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
-We renamed @code{buffer-disable-undo} to @code{buffer-flush-undo}---a
-more picturesque name, you will agree.
+The variable @code{char-property-alias-alist} has been deleted.
+Aliases are for functions, not for properties.
 
 @item
-The function @code{other-buffer} takes just one argument in Emacs 18.
+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
-The function @code{rename-buffer} now requires you to specify precisely
-the new name you want.
+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
-We removed the local variable @code{list-buffers-directory}.
+The arguments to @code{remove-overlays} are no longer optional.
 
 @item
-We got rid of the hook @code{kill-buffer-hook}.
-@end itemize
+In @code{replace-match}, the replacement text now inherits properties
+from the surrounding text.
 
-@section Local Variables Features
-
-@itemize @bullet
 @item
-The function @code{kill-all-local-variables} always eliminates all
-buffer-local variables of the current buffer.  No more exceptions.
+@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
-Making a variable buffer-local when it is void now sets it to
-@code{nil}.
+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
-We eliminated the functions @code{default-boundp}, because it is no
-longer possible for the default binding of a variable to be void.
+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{pos-visible-in-window-p} have been removed.
 
 @item
-The special forms @code{defconst} and @code{defvar} now set the
-variable's local value rather than its default value when the variable
-is local in the current buffer.
-@end itemize
+The macro @code{save-selected-window} only saves the selected window
+of the selected frame, so don't try selecting windows in other frames.
 
-@section Features for Subprocesses
-
-@code{call-process} and @code{call-process-region} no longer indicate
-the termination status of the subprocess.  We call on users to have faith
-that the subprocess executed properly.
+@item
+The function @code{minibufferp} is no longer available.
 
-@itemize
 @item
-The standard asynchronous subprocess features do not work on VMS;
-instead, special VMS asynchronous subprocess functions have been added.
-Since they are only for VMS, we can't be bothered documenting them;
-sorry.  Use the source, Luke!
+The function @code{modify-all-frames-parameters} has been removed (we
+always suspected the name was ungrammatical, anyway.)
 
 @item
-The function @code{signal-process} has been removed.
+The @code{line-spacing} variable no longer accepts float values.
 
 @item
-We eliminated the transaction queue feature, and the associated
-functions @code{tq-create}, @code{tq-enqueue}, and @code{tq-close}.
-@end itemize
+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.
 
-@section Dealing with Times And Time Delays
+@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.
 
-@itemize @bullet
 @item
-We removed the functions @code{current-time}, @code{current-time-zone},
-@code{run-at-time}, and @code{cancel-timer}. 
+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 function @code{current-time-string} no longer accepts any optional
-arguments.
+The variable @code{minor-mode-list} has been removed.
 
 @item
-The functions @code{sit-for} and @code{sleep-for} no longer allow an
-optional argument to let you specify the time period in milliseconds;
-just in seconds.  Additionally, we took out the optional third argument
-@var{nodisp} from @code{sit-for}.
+@code{define-derived-mode} will copy abbrevs from the parent mode's
+abbrev table, instead of creating a new, empty abbrev table.
 
 @item
-We removed the optional second and third arguments from the
-@code{accept-process-output} function.  It accepts just one argument,
-the process.
-@end itemize
+There are no ``system'' abbrevs.  When the user saves into the abbrevs
+file, all abbrevs are saved.
 
-@need 3000
+@item
+The Warnings facility has been removed.  Just use @code{error}.
 
-@section Features not Available for Lisp Debuggers
+@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}.
 
-@itemize @bullet
 @item
-In Emacs 18, you can no longer specify to invoke the Lisp debugger only
-upon encountering certain types of errors.  Any non-@code{nil} value for
-the variable @code{debug-on-error} says to invoke the debugger for any
-error whatever.
+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
-We removed the variable @code{command-debug-status} and the function
-@code{backtrace-frame}. 
-@end itemize
+The variable @code{load-history} records function definitions just
+like variable definitions, instead of indicating which functions were
+previously autoloaded.
 
-@section Memory Allocation Changes
+@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.
 
-We removed the function @code{memory-limit}.
+@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!
 
-The list returned by @code{garbage-collect} no longer contains an
-element to describe floating point numbers, since there aren't any
-floating point numbers in Emacs 18.
+@item
+The function @code{unsafep} has been removed.
 
-@section Hook Changes
+@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.
 
-@itemize @bullet
 @item
-We removed the hooks @code{pre-abbrev-expand-hook},
-@code{pre-command-hook}, @code{post-command-hook}, and
-@code{auto-save-hook}.
+You can no longer use @code{char-displayable-p} to test if Emacs can
+display a certain character.
 
 @item
-We removed the variable
-@code{revert-buffer-insert-file-contents-function}.
+The function @code{string-to-multibyte} is no longer available.
 
 @item
-We also removed the new function @code{add-hook}; you will have to set
-your hooks by hand.  If you want to get really into the swing of things,
-set your hook variables the archaic way: store just one function rather
-than a list of functions.  But that is optional.
+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 variable @code{lisp-indent-hook} has been renamed to
-@code{lisp-indent-function}.
+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-fill-function} has been renamed to
-@code{auto-fill-hook}.
+The functions @code{merge-coding-systems} and
+@code{decode-coding-inserted-region}, and the variable
+@code{auto-coding-functions}, have been deleted.  The
+@code{mime-text-unsuitable} coding system property no longer has any
+special meaning.
 
 @item
-The @code{blink-paren-function} has been renamed to
-@code{blink-paren-hook}.
+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 variable @code{temp-buffer-show-function} has been renamed to
-@code{temp-buffer-show-hook}.
+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