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
.