Emacs 20 Antinews
*****************

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

Old Lisp Features in Emacs 20
=============================

  * The push and pop macros are not defined. Neither are dolist and dotimes.

  * You can't display images in buffers.  (Emacs is meant for editing text.) With no images, there are no display margins, and no tool bars.

  * The display text property has no special meaning; you can use it freely in Lisp programs, with no effects except what you implement for yourself.  With no images, who needs the display text property?

  * The field text property has no special meaning; buffers are no longer subdivided into fields.  (The division of information into fields is always rather arbitrary.)

  * Faces have fewer attributes.  The attributes :family, :height, :width, :weight, and :slant, have been replaced with a font name, a ``bold'' flag, and an ``italic'' flag.

     The attributes :overline, :strike-through and :box have been eliminated too.  Underlining now always has the same color as the text---using any other color would be bad taste.

     With fewer font attributes, there are no functions set-face-attribute and face-attribute.  Instead, you access these attributes using functions such as face-font, and set them with functions such as set-face-font.  (These functions were available in Emacs 21, but are not as useful there.)

  * The standard faces scroll-bar, menu, border, cursor, and mouse have been eliminated.  They are rather strange, as faces, and therefore shouldn't really exist.  You can use set-border-color, set-cursor-color and set-mouse-color to specify the colors for the frame border, the text cursor, and the mouse cursor.  To specify menu colors, use X resources.

  * Colors and other face attributes are no longer supported on character terminals, so you no longer have to worry about terminals making faces at you.

  * Emacs will respect your peace and quiet, aside from occasional beeps, because there are no facilities for playing sounds.

  * Emacs 20 provides a complex and badly designed method for handling character composition for languages such as Thai that display several letters as a single combined image.  We are too ashamed of it to tell you any more than that.

  * delete-and-extract-region has been deleted; instead, use buffer-substring to extract the text, then use delete-region to delete it.

  * Regular expressions do not support the POSIX character classes such as [:alpha:].  All characters are created equal.

  * Hash tables have been eliminated; use alists instead.

  * The Lisp printer does not detect and report circular structure.  That is ok, because the Lisp reader cannot recreate circular structure anyway. However, there is a library cust-print.el which can report circular structure.

  * Emacs provides its own implementation of scroll bars, instead of using those of the X toolkit.  They always use the frame foreground and background colors, so you cannot specify different colors for the scroll bars.

  * For simplicity, all ASCII characters now have the same height and width. (Certain characters, such as Chinese characters, always have twice the standard width.)  All characters are created equal.

  * You can now resize any Emacs window, and size changes in one window can propagate to all others.  Windows can no longer use window-size-fixed to get special privileges.

  * The function intern-soft no longer accepts a symbol as argument.

  * The function bitmap-spec-p has been renamed to pixmap-spec-p to encourage users to practice Emacs' help system while trying to find it.

  * Tooltips operate using ordinary Emacs frames.

  * Areas of the mode line are not mouse-sensitive; however, some mouse commands are available for the mode line as a whole.

  * Windows cannot have header lines.  Conversely, there is no way to turn off the mode line of a window unless it is a minibuffer.

  * Plain dashes are the only separators you can use in a menu.

  * Vertical fractional scrolling does not exist.

  * The functions format and message ignore and discard text properties.

  * The function propertize does not exist; you can get the job done using set-text-properties.

  * Colors are supported only on window systems, not on text-only terminals. So the support functions for colors on text-only terminals are not needed, and have been eliminated.

  * The functions color-values, color-defined-p and defined-colors have been renamed to x-color-values, x-color-defined-p and x-defined-colors.

  * Windows cannot be made fixed-width or fixed-height; Emacs will adjust the size of all windows when it needs to.

  * The string used as the value of the before-string or after-string property must contain only characters that display as a single column---control characters, including tabs and newlines, will give strange results.

  * The minibuffer prompt does not actually appear in content of the minibuffer; it is displayed specially in the minibuffer window.

  * The ``exclusive open'' feature of write-region has been eliminated; any non-nil value for the seventh argument now means to ask the user for confirmation.

  * The function buffer-size always reports on the current buffer.

  * The function assoc-delete-all has itself been deleted. So there!

  * The keyword :set-after no longer does anything in defcustom.

  * The variable small-temporary-file-directory has no special meaning.  There's only one variable for specifying which directory to use for temporary files, temporary-file-directory, but not all Emacs features use it anyway.  Some use the TMP environment variable, and some use the TMPDIR environment variable.

  * If the second argument of save-some-buffers, PRED, is not nil, then the precise value no longer matters.  Any non-nil value means the same as t: offer to save each non-file buffer that has a non-nil value for buffer-offer-save.

  * The variable inhibit-modification-hooks has no special meaning.

  * The hook fontification-functions has been eliminated, but there are other hooks, such as window-scroll-functions, that you can use to do a similar job.

  * The variable  redisplay-dont-pause has no special meaning.

  * The hook calendar-move-hook has been deleted.

  * The function move-to-column treats any non-nil second argument just like t.

Old Lisp Features in Emacs 20.3
===============================

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

Here are changes in the Lisp language itself:

  * The functions line-beginning-position and line-end-position have been eliminated.

  * The functions directory-files-and-attributes, file-attributes-lessp, and file-expand-wildcards, have been eliminated.

  * The functions decode-coding-region and encode-coding-region leave text properties untouched, in case that is useful.  (It rarely makes any sense, though.)

  * The functions position-bytes and byte-to-position have been eliminated.

  * Temporary buffers made with with-output-to-temp-buffer are now modifiable by default, and use Fundamental mode rather than Help mode.

  * The functions sref interprets its INDEX argument as a number of bytes, not a number of characters.  And the function char-bytes actually tries to report on the number of bytes that a character occupies.

  * The function process-running-child-p has been eliminated.

  * The function interrupt-process and similar functions no longer do anything special when the second argument is lambda.

  * The function define-prefix-command accepts only two arguments.

  * The meaning of the second argument to read-char, read-event, and read-char-exclusive has been reversed: they use the current input method if the argument is if nil.

  * The function with-temp-message has been eliminated.

  * The function clear-this-command-keys has been eliminated.

  * The functions gap-position and gap-size have been eliminated.

  * In modify-face, an argument of (nil) has no special meaning.

  * The base64 conversion functions have been eliminated.

  * Wildcard support has been eliminated from find-file and allied functions.

  * file-attributes returns the file size and the file inode number only as a simple integer.