Emacs 23 Antinews
*****************

For those users who live backwards in time, here is information about downgrading to Emacs version 23.4.  We hope you will enjoy the greater simplicity that results from the absence of many Emacs EMACSVER features.

Old Lisp Features in Emacs 23
=============================

  * Support for lexical scoping has been removed; all variables are dynamically scoped.  The lexical-binding variable has been removed, and so has the LEXICAL argument to eval.  The defvar and defconst forms no longer mark variables as dynamic, since all variables are dynamic.

     Having only dynamic binding follows the spirit of Emacs extensibility, for it allows any Emacs code to access any defined variable with a minimum of fuss.  But see Dynamic Binding Tips, for tips to avoid making your programs hard to understand.

  * Calling a minor mode function from Lisp with a nil or omitted argument does not enable the minor mode unconditionally; instead, it toggles the minor mode---which is the straightforward thing to do, since that is the behavior when invoked interactively.  One downside is that it is more troublesome to enable minor modes from hooks; you have to do something like

          (add-hook 'foo-hook (lambda () (bar-mode 1)))

     or define turn-on-bar-mode and call that from the hook.

  * The prog-mode dummy major mode has been removed.  Instead of using it as a crutch to meet programming mode conventions, you should explicitly ensure that your mode follows those conventions. See Major Mode Conventions.

  * Emacs no longer supports bidirectional display and editing.  Since there is no need to worry about the insertion of right-to-left text messing up how lines and paragraphs are displayed, the function bidi-string-mark-left-to-right has been removed; so have many other functions and variables related to bidirectional display. Unicode directionality characters like U+200E ("left-to-right mark") have no special effect on display.

  * Emacs windows now have most of their internal state hidden from Lisp. Internal windows are no longer visible to Lisp; functions such as window-parent, window parameters related to window arrangement, and window-local buffer lists have all been removed.  Functions for resizing windows can delete windows if they become too small.

     The ``action function'' feature for controlling buffer display has been removed, including display-buffer-overriding-action and related variables, as well as the ACTION argument to display-buffer and other functions.  The way to programmatically control how Emacs chooses a window to display a buffer is to bind the right combination of special-display-regexps, pop-up-frames, and other variables.

  * The standard completion interface has been simplified, eliminating the completion-extra-properties variable, the metadata action flag for completion functions, and the concept of ``completion categories''.  Lisp programmers may now find the choice of methods for tuning completion less bewildering, but if a package finds the streamlined interface insufficient for its needs, it must implement its own specialized completion feature.

  * copy-directory now behaves the same whether or not the destination is an existing directory: if the destination exists, the contents of the first directory are copied into it (with subdirectories handled recursively), rather than copying the first directory into a subdirectory.

  * The TRASH arguments for delete-file and delete-directory have been removed.  The variable delete-by-moving-to-trash must now be used with care; whenever it is non-nil, all calls to delete-file or delete-directory use the trash.

  * Because Emacs no longer supports SELinux file contexts, the PRESERVE-SELINUX-CONTEXT argument to copy-file has been removed.  The return value of backup-buffer no longer has an entry for the SELinux file context.

  * For mouse click input events in the text area, the Y pixel coordinate in the POSITION list (see Click Events) now counts from the top of the header line, if there is one, rather than the top of the text area.

  * Bindings in menu keymaps (see Format of Keymaps) now sometimes get an additional CACHE entry in their definitions, like this:

          (TYPE ITEM-NAME CACHE . BINDING)

     The CACHE entry is used internally by Emacs to record equivalent keyboard key sequences for invoking the same command; Lisp programs should never use it.

  * The gnutls library has been removed, and the function open-network-stream correspondingly simplified. Lisp programs that want an encrypted network connection must now call external utilities such as starttls or gnutls-cli.

  * Tool bars can no longer display separators, which frees up several pixels of space on each graphical frame.

  * As part of the ongoing quest for simplicity, many other functions and variables have been eliminated.