2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1998 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @node Antinews, Index, Standard Hooks, Top
6 @appendix Emacs 19 Antinews
8 For those users who live backwards in time, here is information about
9 downgrading to Emacs version 19.34. We hope you will enjoy the greater
10 simplicity that results from the absence of many Emacs 20 features. In
11 the following section, we carry this information back as far as Emacs
12 19.29, for which the previous printed edition of this manual was made.
14 @section Old Lisp Features in Emacs 19
16 Here are the most important of the features that you will learn
17 to do without in Emacs 19:
21 In a great simplification, Emacs 19 supports ASCII characters only.
22 There are no multibyte characters, character sets, language
23 environments, coding systems, or input methods; all the functions that
24 specifically relate to them are gone as well.
26 Valid character codes for text must be in the range 0 through 255.
27 Within this range, there are no invalid character codes.
30 The Custom facility has been replaced with a much simpler and more
31 general method of defining user option variables. Instead of
32 @code{defcustom}, which requires you to specify each user option's data
33 type and classify options into groups, all you have to do is write a
34 @code{defvar}. You should still start the documentation string with
38 Here are changes in the Lisp language itself:
42 Symbols whose names start with @samp{:} are no longer special
43 in any way. They start out void, like most other symbols.
46 The macros @code{when} and @code{unless} have been deleted.
49 The functions @code{caar}, @code{cadr}, @code{cdar} and @code{cddr}
53 The function @code{functionp} is now gone. If you don't know
54 by now whether something is a function, Emacs can't tell you.
57 Here are changes in handling strings and text.
61 The function @code{substring} works only on strings, not on vectors.
64 There are no more character categories.
67 When you compare strings with @code{equal}, it now compares
68 their string properties as well as their text. All must match,
69 or the strings are not equal.
72 @code{format-time-string} no longer supports specified field width
76 The functions @code{split-string} and @code{string} no longer exist.
77 Neither does @code{store-substring} or @code{sref}.
80 All printing characters have the same width. Therefore, we have deleted
81 @code{char-width}, @code{string-width} and
82 @code{truncate-string-to-width}.
85 We have eliminated the functions @code{next-char-property-change} and
86 @code{previous-char-property-change} also.
89 Syntax parsing now determines the syntax of each character from the
90 syntax table alone---not from text properties. This makes the syntax
91 codes @samp{|} and @samp{!}, which were meant for use with text
92 properties, useless; so we have deleted them.
95 In the function @code{parse-partial-sexp}, passing @code{syntax-table}
96 as the sixth argument @var{commentstop} no longer has any special meaning.
97 And the return value has only eight elements.
100 Here are changes in other areas of Emacs Lisp:
104 The macros @code{save-current-buffer}, @code{with-current-buffer},
105 @code{with-temp-buffer}, @code{with-temp-file}, @code{save-selected-window},
106 and @code{with-output-to-string} are gone.
109 The easy-mmode facility for defining minor modes is gone too.
112 Process filters and sentinels must explicitly save the match data, with
113 @code{save-match-data}, or they will clobber the match data and
114 something horrible will happen.
117 As part of our effort to loosen up, @code{batch-byte-compile-file} no
118 longer returns a nonzero status code if there is a compilation error.
121 The ``mail user agent'' feature is gone.
124 We have removed the functions @code{add-to-invisibility-spec} and
125 @code{remove-from-invisibility-spec}, so you should manipulate
126 the value of @code{buffer-invisibility-spec} by hand.
129 The functions @code{face-documentation}, @code{face-bold-p},
130 @code{face-italic-p}, @code{set-face-bold-p}, @code{set-face-italic-p}
131 are gone. Instead, use @code{make-face-bold} and friends.
134 All the functions that operate on a file now discard an extra redundant
135 directory name from the beginning of the file name---just like
136 @code{substitute-in-file-name}.
139 We have got rid of the function @code{access-file}.
142 Most of the minibuffer input functions no longer take a default value as
143 an argument. Also, they do not discard text properties from the result.
144 This means that if you insert text with text properties into the minibuffer,
145 the minibuffer value really will contain text properties.
148 Only the simple menu item format is supported (@pxref{Simple Menu Items}).
151 You can still bind @code{x-resource-class} around a call to
152 @code{x-get-resource}, but it won't do anything special.
155 Wave goodbye to the hooks @code{before-make-frame-hook},
156 @code{after-make-frame-functions}, and
157 @code{window-configuration-change-hook},
160 The functions and variables that deal with MS Windows NT/95
161 have been renamed to start with @samp{win32-} instead of @samp{w32-}.
162 This is because we admire Microsoft more each day as we go back
166 @section Onward into the Past!
168 Here we go even further back, as far as Emacs 19.29, for which the
169 previous printed edition of the Emacs Lisp manual was made.
173 There are no char-tables or bool-vectors. Syntax tables, display
174 tables, and case tables are all vectors now, and the value of
175 @code{keyboard-translate-table} should be a vector or a string.
178 There is only one kind of marker. When you insert text at the place
179 where a marker points, the marker always ends up before that text,
180 unless you use @code{insert-before-markers}, which puts all the markers
181 after the inserted text.
184 There is no function @code{overlays-in}.
187 The variable @code{print-length} applies only to lists, not to
191 The function @code{convert-standard-filename} no longer exists, so each
192 Lisp package must independently figure out which file names to use for
193 its initialization files on each kind of operating system.
196 The macro @code{with-timeout} has been eliminated, along with the
197 function @code{y-or-n-p-with-timeout}. Idle timers don't exist at all;
198 instead, maybe you can use @code{post-command-idle-hook} to do some of
202 The functions @code{keymap-parent} and @code{set-keymap-parent} are
203 gone. We expect keymaps to recognize their own parents.
206 When you delete text and then undo a deletion, markers that were
207 originally inside the deleted text end up either at the beginning
208 or the end of it---not back in their original places.
211 The interactive specification @samp{N} is gone now.
214 There is no more @code{safe-length}. Don't try to be so safe! Did you
215 expect to live forever?
218 We got rid of @code{insert-file-contents-literally}, because
219 programmers are too literal-minded anyway.
222 As part of our continuing effort to help Lisp programmers to relax, we
223 threw out the function @code{error-message-string}. Don't worry so much
224 about errors! We all make mistakes.
227 The keymap @code{special-event-map} is gone, because Emacs has no more
228 special events. If you want to hold a party in Emacs, please let us
232 You can't do date arithmetic with @code{encode-time} any more.
235 The functions @code{command-execute} and @code{call-interactively} no
236 longer accept the optional argument @var{keys}.
239 @code{get-buffer-window-list} is gone as well.
242 With the function @code{replace-match}, you can only replace the whole
243 match, not a subexpression of it.
246 We eliminated the hooks @code{buffer-access-fontify-functions},
247 @code{window-scroll-functions}, and @code{redisplay-end-trigger-functions}.