+** Code can now use lexical scoping by default instead of dynamic scoping.
+The `lexical-binding' variable lets code use lexical scoping for local
+variables. It is typically set via file-local variables, in which case it
+applies to all the code in that file.
+
+*** `eval' takes a new optional argument `lexical' to choose the new lexical
+binding instead of the old dynamic binding mode.
+
+*** Lexically scoped interpreted functions are represented with a new form
+of function value which looks like (closure ENV ARGS &rest BODY).
+
+*** New macro `letrec' to define recursive local functions.
+
+*** New function `special-variable-p' to check whether a variable is
+declared as dynamically bound.
+
+** An Emacs Lisp testing tool is now included.
+Emacs Lisp developers can use this tool to write automated tests for
+their code. See the ERT info manual for details.
+
+** Changes for bidirectional display and editing
+
++++
+*** New function `current-bidi-paragraph-direction'.
+This returns the actual value of base direction of the paragraph at
+point.
+
++++
+*** New function `bidi-string-mark-left-to-right'.
+Given a string containing characters from right-to-left (RTL) scripts,
+this function returns another string which can be safely inserted into
+a buffer, such that any following text will be always displayed to the
+right of that string. (This works by appending the Unicode
+"LEFT-TO-RIGHT MARK" character when the argument string might need that.)
+
+This is useful when the buffer has overall left-to-right (LTR)
+paragraph direction and you need to insert a string whose contents and
+directionality are not known in advance, without disrupting the layout
+of the line.
+
+** Window changes
+
++++
+*** Window tree functions are accessible in Elisp.
+Functions are provided to return the parent, siblings or child windows
+of any window including internal windows (windows not associated with a
+buffer) in the window tree.
+
++++
+*** Window manipulation can deal with internal windows.
+Many window handling functions like `split-window', `delete-window', or
+`delete-other-windows' as well as the window resizing functions can now
+act on any window including internal ones.
+
++++
+*** window-total-height/-width vs window-body-height/-width.
+The function `window-height' has been renamed to `window-total-height'
+and `window-width' has been renamed to `window-body-width'. The old
+names are provided as aliases. Two new functions `window-total-width'
+and `window-body-height' are provided.
+
++++
+*** Window parameters specific to window handling functions.
+For each window you can specify a parameter to override the default
+behavior of a number of functions like `split-window', `delete-window'
+and `delete-other-windows'. The variable `ignore-window-parameters'
+allows to ignore processing such parameters.
+
++++
+*** New semantics of third argument of `split-window'.
+The third argument of `split-window' has been renamed to SIDE and can be
+set to any of the values 'below, 'right, 'above, or 'left to make the
+new window appear on the corresponding side of the window that shall be
+split. Any other value of SIDE will cause `split-window' to split the
+window into two side-by-side windows as before.
+
++++
+*** Window resizing functions.
+A new standard function for resizing windows called `window-resize' has
+been introduced. This and all other functions for resizing windows no
+longer delete any windows when they become too small.
+
++++
+*** `adjust-window-trailing-edge' adjustments.
+`adjust-window-trailing-edge' can now deal with fixed-size windows and
+is able to resize other windows if a window adjacent to the trailing
+edge cannot be shrunk any more. This makes its behavior more similar to
+that of Emacs 21 without compromising, however, its inability to delete
+windows which was introduced in Emacs 22.
+
++++
+*** Window-local buffer lists.
+Windows now have local buffer lists. This means that removing a buffer
+from display in a window will preferably show the buffer previously
+shown in that window with its previous window-start and window-point
+positions. This also means that the same buffer may be automatically
+shown twice even if it already appears in another window.
+
++++
+*** `switch-to-buffer' has a new optional argument FORCE-SAME-WINDOW,
+which if non-nil requires the buffer to be displayed in the currently
+selected window, signaling an error otherwise. If nil, another window
+can be used, e.g. if the selected one is strongly dedicated.
+
+*** `split-window-vertically' and `split-window-horizontally' renamed
+to `split-window-above-each-other' and `split-window-side-by-side'
+respectively. The old names are kept as aliases.
+
+*** Display actions
+
+**** The second arg to `display-buffer' and `pop-to-buffer' is now
+named ACTION, and takes a display action of the same form as
+`display-buffer-base-action' (see Changes, above). A non-nil,
+non-list value is treated specially, as the old meaning.
+
+**** New variable `display-buffer-overriding-action'.
+
+**** The procedure of `display-buffer' etc. to choose a window is
+determined by combining `display-buffer-overriding-action',
+`display-buffer-alist', the ACTION arg, `display-buffer-base-action',
+and `display-buffer-fallback-action'. The second and fourth of these
+are user-customizable variables.
+
+See the docstring of `display-buffer' for details.
+
++++
+*** New behavior of `quit-window'.
+The behavior of `quit-window' has been changed in order to restore the
+state before the last buffer display operation in that window.
+