Emacs 19 Antinews
*****************

For those users who live backwards in time, here is information about downgrading to Emacs version 19.34.  We hope you will enjoy the greater simplicity that results from the absence of many Emacs 20 features.  In the following section, we carry this information back as far as Emacs 19.29, for which the previous printed edition of this manual was made.

Old Lisp Features in Emacs 19
=============================

Here are the most important of the features that you will learn to do without in Emacs 19:

  * In a great simplification, Emacs 19 supports ASCII characters only. There are no multibyte characters, character sets, language environments, coding systems, or input methods; all the functions that specifically relate to them are gone as well.

     Valid character codes for text must be in the range 0 through 255. Within this range, there are no invalid character codes.

  * The Custom facility has been replaced with a much simpler and more general method of defining user option variables.  Instead of defcustom, which requires you to specify each user option's data type and classify options into groups, all you have to do is write a defvar.  You should still start the documentation string with *, though.

Here are changes in the Lisp language itself:

  * Symbols whose names start with : are no longer special in any way.  They start out void, like most other symbols.

  * The macros when and unless have been deleted.

  * The functions caar, cadr, cdar and cddr no longer exist.

  * The function functionp is now gone.  If you don't know by now whether something is a function, Emacs can't tell you.

Here are changes in handling strings and text.

  * The function substring works only on strings, not on vectors.

  * There are no more character categories.

  * When you compare strings with equal, it now compares their string properties as well as their text.  All must match, or the strings are not equal.

  * format-time-string no longer supports specified field width or specified padding.

  * The functions split-string and string no longer exist. Neither does store-substring or sref.

  * All printing characters have the same width.  Therefore, we have deleted char-width, string-width and truncate-string-to-width.

  * We have eliminated the functions next-char-property-change and previous-char-property-change also.

  * Syntax parsing now determines the syntax of each character from the syntax table alone---not from text properties.  This makes the syntax codes | and !, which were meant for use with text properties, useless; so we have deleted them.

  * In the function parse-partial-sexp, passing syntax-table as the sixth argument COMMENTSTOP no longer has any special meaning. And the return value has only eight elements.

Here are changes in other areas of Emacs Lisp:

  * The macros save-current-buffer, with-current-buffer, with-temp-buffer, with-temp-file, save-selected-window, and with-output-to-string are gone.

  * The easy-mmode facility for defining minor modes is gone too.

  * Process filters and sentinels must explicitly save the match data, with save-match-data, or they will clobber the match data and something horrible will happen.

  * As part of our effort to loosen up, batch-byte-compile-file no longer returns a nonzero status code if there is a compilation error.

  * The ``mail user agent'' feature is gone.

  * We have removed the functions add-to-invisibility-spec and remove-from-invisibility-spec, so you should manipulate the value of buffer-invisibility-spec by hand.

  * The functions face-documentation, face-bold-p, face-italic-p, set-face-bold-p, set-face-italic-p are gone.  Instead, use make-face-bold and friends.

  * All the functions that operate on a file now discard an extra redundant directory name from the beginning of the file name---just like substitute-in-file-name.

  * We have got rid of the function access-file.

  * Most of the minibuffer input functions no longer take a default value as an argument.  Also, they do not discard text properties from the result. This means that if you insert text with text properties into the minibuffer, the minibuffer value really will contain text properties.

  * Only the simple menu item format is supported (see Simple Menu Items).

  * You can still bind x-resource-class around a call to x-get-resource, but it won't do anything special.

  * Wave goodbye to the hooks before-make-frame-hook, after-make-frame-functions, and window-configuration-change-hook,

  * The functions and variables that deal with MS Windows NT/95 have been renamed to start with win32- instead of w32-. This is because we admire Microsoft more each day as we go back into the past.

Onward into the Past!
=====================

Here we go even further back, as far as Emacs 19.29, for which the previous printed edition of the Emacs Lisp manual was made.

  * There are no char-tables or bool-vectors.  Syntax tables, display tables, and case tables are all vectors now, and the value of keyboard-translate-table should be a vector or a string.

  * There is only one kind of marker.  When you insert text at the place where a marker points, the marker always ends up before that text, unless you use insert-before-markers, which puts all the markers after the inserted text.

  * There is no function overlays-in.

  * The variable print-length applies only to lists, not to vectors or strings.

  * The function convert-standard-filename no longer exists, so each Lisp package must independently figure out which file names to use for its initialization files on each kind of operating system.

  * The macro with-timeout has been eliminated, along with the function y-or-n-p-with-timeout.  Idle timers don't exist at all; instead, maybe you can use post-command-idle-hook to do some of the same job.

  * The functions keymap-parent and set-keymap-parent are gone.  We expect keymaps to recognize their own parents.

  * When you delete text and then undo a deletion, markers that were originally inside the deleted text end up either at the beginning or the end of it---not back in their original places.

  * The interactive specification N is gone now.

  * There is no more safe-length.  Don't try to be so safe!  Did you expect to live forever?

  * We got rid of insert-file-contents-literally, because programmers are too literal-minded anyway.

  * As part of our continuing effort to help Lisp programmers to relax, we threw out the function error-message-string.  Don't worry so much about errors!  We all make mistakes.

  * The keymap special-event-map is gone, because Emacs has no more special events.  If you want to hold a party in Emacs, please let us know.

  * You can't do date arithmetic with encode-time any more.

  * The functions command-execute and call-interactively no longer accept the optional argument KEYS.

  * get-buffer-window-list is gone as well.

  * With the function replace-match, you can only replace the whole match, not a subexpression of it.

  * We eliminated the hooks buffer-access-fontify-functions, window-scroll-functions, and redisplay-end-trigger-functions.