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.
The following functions are missing or different in Emacs version 18.
delete, member, indirect-function,
map-y-or-n-p, and invocation-name have been removed.
read now skips a terminator character that
terminates a symbol when reading from a buffer. Thus, if you use
read on a buffer containing `foo(bar)' following point, it
returns foo and leaves point after the open-parenthesis. This
means there's no way you can properly read the list `(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.
documentation takes just one argument;
documentation-property takes just two.
random no longer has the optional argument n.
after-load-alist and the function
eval-after-load have been removed.
autoload no longer supports autoloading a keymap.
format function, and the
optional argument noescap from prin1-to-string. We removed
the print-level variable.
eval-when-compile and
eval-and-compile, as well as the compile-defun command.
bytecode. That function runs the byte code
interpreter.
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.
As a result, certain macros, functions, and predicates no longer handle specifications for floating point numbers.
The function string-to-number, the predicate floatp, and
the variable float-output-format have all been eliminated.
The functions float, truncate, floor, ceil,
round, and logb do not exist; neither do the functions
abs, cos, sin, tan, acos,
asin, atan, exp, expt, log10,
log, or sqrt.
The format function no longer handles the specifications
`%e', `%f' and `%g' for printing floating point numbers;
likewise for message.
kill-new and kill-append, the primitives for putting text
in the kill ring, have been eliminated.
interprogram-paste-function and
interprogram-cut-function have been removed in Emacs 18.
In addition, there's no need for mark-active and
deactivate-mark because there is no Transient Mark mode. We also
removed the hooks activate-mark-hook and
deactivate-mark-hook.
kill-region function can no longer be used in read-only
buffers. The compare-buffer-substrings and current-kill
functions have been removed.
overwrite-mode-binary has been removed.
move-to-column allows just one argument,
column.
t when successful. This
affects the functions search-forward, search-backward,
word-search-forward, word-search-backward,
re-search-forward, and re-search-backward.
match-beginning and match-end. Moreover,
save-match-data does not exist; you must use an explicit
unwind-protect to save the match data.
translate-region is gone.
before-change-function,
after-change-function, and first-change-hook have been
eliminated.
insert-abbrev-table-description is no
longer optional.
We eliminated text properties.
Many file-related functions have been eliminated or simplified. Here is a basic listing of these functions.
The functions file-accessible-directory-p, file-truename,
make-directory, delete-directory,
set-visited-file-modtime, directory-abbrev-alist,
abbreviate-file-name, write-region,
write-contents-hooks, after-save-hook,
set-default-file-modes, default-file-modes, and
unix-sync have been eliminated.
We got rid of the "initial file name" argument to
read-file-name.
Additionally, we removed the 12th element from the list returned by
file-attributes.
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 write-contents-hooks and
local-write-file-hooks.
There are no more magic filenames. Sorry, but all the mana has been used up.
There is only one frame in Emacs 18, so all of the frame functions have been eliminated.
We have simplified the way Emacs and X interact by removing a great deal of creeping featurism.
mouse-position and set-mouse-position, and
the special form track-mouse have been eliminated.
x-set-selection, x-set-cut-buffer,
x-close-current-connection, and x-open-connection have all
been removed from Emacs Lisp 18.
x-display-screens, x-server-version,
x-server-vendor, x-display-pixel-height,
x-display-mm-height, x-display-pixel-width,
x-display-mm-width, x-display-backing-store,
x-display-save-under, x-display-planes,
x-display-visual-class, x-display-color-p, and
x-display-color-cells.
Additionally, we removed the variable x-no-window-manager and the
functions x-synchronize and x-get-resource.
We didn't abolish x-display-color-p, but we renamed it to
x-color-display-p. We did abolish x-color-defined-p.
x-popup-menu no longer accepts a keymap for its first argument.
x-rebind-key and the related
function x-rebind-keys.
x-parse-geometry.
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.
window-at, window-minibuffer-p,
set-window-dedicated-p, coordinates-in-window-p,
walk-windows, window-dedicated-p, and window-end.
pop-up-frames,
pop-up-frame-function, display-buffer-function, and
other-window-scroll-buffer.
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.
next-window and previous-window no longer
accept the all-frames argument since there is just one frame.
get-lru-window, get-largest-window,
get-buffer-window, and get-buffer-window also no longer
take the optional argument all-frames because there is just one
frame to search.
line-number-mode and line-number-display-limit.
baud-rate is now a function rather than a variable.
message with nil as the only
argument; therefore, you can not reliably make the contents of the
minibuffer visible.
temp-buffer-show-function has been renamed
temp-buffer-show-hook.
force-mode-line-update. Use
the following idiom instead:
(set-buffer-modified-p (buffer-modified-p))
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.
define-key, global-set-key,
read-key-sequence, and local-set-key used to accept
strings or vectors in Emacs 19; now they only accept strings.
single-key-description,
key-description, etc.) also no longer accept vectors, but they do
accept strings.
read-event, event-start,
posn-window, posn-point, posn-col-row,
posn-timestamp, scroll-bar-scale, and event-end
functions, since they were only useful for non-character events.
unread-command-events and last-event-frame
variables.
this-command-keys and recent-keys now always
return a string. Likewise, a keyboard macro's definition can only be a
string, not a vector.
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.
The minibuffer history feature has been eliminated. Thus, we removed
the optional argument hist from the minibuffer input functions
read-from-minibuffer and completing-read.
The initial argument to read-from-minibuffer and other
minibuffer input functions can no longer be a cons cell
(string . position).
In the function read-no-blanks-input, the initial argument
is no longer optional.
enable-recursive-minibuffers no longer has any
special meaning.
We removed the third argument (meta) from the function
set-input-mode. Consequently, we added the variable
meta-flag; set it to t to enable use of a Meta key, and
to nil to disable it. (Those are the only two alternatives.)
We also removed the variable extra-keyboard-modifiers.
We removed the function keyboard-translate and the variables
num-input-keys and function-key-map.
skip-syntax-forward,
skip-syntax-backward, forward-comment.
words-include-escapes.
Case tables do not exist in Emacs 18. Due to this change, we have
removed the associated functions set-standard-case-table,
standard-case-table, current-case-table,
set-case-table, and set-case-syntax-pair.
buffer-modified-tick and generate-new-buffer-name.
buffer-disable-undo to buffer-flush-undo---a
more picturesque name, you will agree.
other-buffer takes just one argument in Emacs 18.
rename-buffer now requires you to specify precisely
the new name you want.
list-buffers-directory.
kill-buffer-hook.
kill-all-local-variables always eliminates all
buffer-local variables of the current buffer. No more exceptions.
nil.
default-boundp, because it is no
longer possible for the default binding of a variable to be void.
defconst and defvar now set the
variable's local value rather than its default value when the variable
is local in the current buffer.
call-process and call-process-region no longer indicate
the termination status of the subprocess. We call on users to have faith
that the subprocess executed properly.
signal-process has been removed.
tq-create, tq-enqueue, and tq-close.
current-time, current-time-zone,
run-at-time, and cancel-timer.
current-time-string no longer accepts any optional
arguments.
sit-for and 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
nodisp from sit-for.
accept-process-output function. It accepts just one argument,
the process.
nil value for
the variable debug-on-error says to invoke the debugger for any
error whatever.
command-debug-status and the function
backtrace-frame.
We removed the function memory-limit.
The list returned by garbage-collect no longer contains an
element to describe floating point numbers, since there aren't any
floating point numbers in Emacs 18.
pre-abbrev-expand-hook,
pre-command-hook, post-command-hook, and
auto-save-hook.
revert-buffer-insert-file-contents-function.
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.
lisp-indent-hook has been renamed to
lisp-indent-function.
auto-fill-function has been renamed to
auto-fill-hook.
blink-paren-function has been renamed to
blink-paren-hook.
temp-buffer-show-function has been renamed to
temp-buffer-show-hook.