GNU Emacs NEWS -- history of user-visible changes.  25 May 2000
Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
See the end for copying conditions.

Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
For older news, see the file ONEWS.

* Emacs 20.7 is a bug-fix release with few user-visible changes

** It is now possible to use CCL-based coding systems for keyboard
input.

** ange-ftp now handles FTP security extensions, like Kerberos.

** Rmail has been extended to recognize more forms of digest messages.

** Now, most coding systems set in keyboard coding system work not
only for character input, but also in incremental search.  The
exceptions are such coding systems that handle 2-byte character sets
(e.g euc-kr, euc-jp) and that use ISO's escape sequence
(e.g. iso-2022-jp).  They are ignored in incremental search.

** Support for Macintosh PowerPC-based machines running GNU/Linux has
been added.


* Emacs 20.6 is a bug-fix release with one user-visible change

** Support for ARM-based non-RISCiX machines has been added.


* Emacs 20.5 is a bug-fix release with no user-visible changes.

** Not new, but not mentioned before:
M-w when Transient Mark mode is enabled disables the mark.

* Changes in Emacs 20.4

** The location of the mail spool has been centralized.

[ This modification is currently only available in the Debian source,
  but the upstream authors and I are in the process of working out the
  appropriate upstream patch.  The internals may change, but the
  user-visible bits should not (i.e the elisp level mail-spool-directory
  variable and --with-mail-spool-directory should persist). ]

Determination of the location of the mail spool has now been
centralized.  There is a new lisp-level variable mail-spool-directory
that should always contain the location of the mail spool (normally a
directory like /usr/spool/mail).

There is also related configure option --with-mail-spool-directory
that allows you to override the default mail spool location detected,
if any, at configure time.  The proper setting for a particular
architecture may also be set in src/s/*.h with
SYSTEM_MAIL_SPOOL_DIRECTORY, but note that --with-mail-spool-directory
always takes precedence.

At the C level, the mail spool directory is available from
lib-src/mailspool.h which provides a MAIL_SPOOL_DIRECTORY definition.

nnmail, rmail, and movemail have all been modified to respect this new
arrangement.

** Movemail lock library detection has been improved.

[ This modification is currently only available in the Debian source,
  but the upstream authors and I are in the process of working out the
  appropriate upstream patch. ]

Configure now looks for liblockfile before libmail (liblockfile is a
free software replacement for libmail).  Either library, if found, is
propagated to the movemail (lib-src) Makefile through the
MOVEMAIL_LOCK_LIBS variable.

** Init file may be called .emacs.el.

You can now call the Emacs init file `.emacs.el'.
Formerly the name had to be `.emacs'.  If you use the name
`.emacs.el', you can byte-compile the file in the usual way.

If both `.emacs' and `.emacs.el' exist, the latter file
is the one that is used.

** shell-command, and shell-command-on-region, now return
the exit code of the command (unless it is asynchronous).
Also, you can specify a place to put the error output,
separate from the command's regular output.
Interactively, the variable shell-command-default-error-buffer
says where to put error output; set it to a buffer name.
In calls from Lisp, an optional argument ERROR-BUFFER specifies
the buffer name.

When you specify a non-nil error buffer (or buffer name), any error
output is inserted before point in that buffer, with \f\n to separate
it from the previous batch of error output.  The error buffer is not
cleared, so error output from successive commands accumulates there.

** Setting the default value of enable-multibyte-characters to nil in
the .emacs file, either explicitly using setq-default, or via Custom,
is now essentially equivalent to using --unibyte: all buffers
created during startup will be made unibyte after loading .emacs.

** C-x C-f now handles the wildcards * and ? in file names.  For
example, typing C-x C-f c*.c RET visits all the files whose names
match c*.c.  To visit a file whose name contains * or ?, add the
quoting sequence /: to the beginning of the file name.

** The M-x commands keep-lines, flush-lines and count-matches
now have the same feature as occur and query-replace:
if the pattern contains any upper case letters, then
they never ignore case.

** The end-of-line format conversion feature previously mentioned
under `* Emacs 20.1 changes for MS-DOS and MS-Windows' actually
applies to all operating systems.  Emacs recognizes from the contents
of a file what convention it uses to separate lines--newline, CRLF, or
just CR--and automatically converts the contents to the normal Emacs
convention (using newline to separate lines) for editing.  This is a
part of the general feature of coding system conversion.

If you subsequently save the buffer, Emacs converts the text back to
the same format that was used in the file before.

You can turn off end-of-line conversion by setting the variable
`inhibit-eol-conversion' to non-nil, e.g. with Custom in the MULE group.

** The character set property `prefered-coding-system' has been
renamed to `preferred-coding-system', for the sake of correct spelling.
This is a fairly internal feature, so few programs should be affected.

** Mode-line display of end-of-line format is changed.
The indication of the end-of-line format of the file visited by a
buffer is now more explicit when that format is not the usual one for
your operating system.  For example, the DOS-style end-of-line format
is displayed as "(DOS)" on Unix and GNU/Linux systems.  The usual
end-of-line format is still displayed as a single character (colon for
Unix, backslash for DOS and Windows, and forward slash for the Mac).

The values of the variables eol-mnemonic-unix, eol-mnemonic-dos,
eol-mnemonic-mac, and eol-mnemonic-undecided, which are strings,
control what is displayed in the mode line for each end-of-line
format.  You can now customize these variables.

** In the previous version of Emacs, tar-mode didn't work well if a
filename contained non-ASCII characters.  Now this is fixed.  Such a
filename is decoded by file-name-coding-system if the default value of
enable-multibyte-characters is non-nil.

** The command temp-buffer-resize-mode toggles a minor mode
in which temporary buffers (such as help buffers) are given
windows just big enough to hold the whole contents.

** If you use completion.el, you must now run the function
dynamic-completion-mode to enable it.  Just loading the file
doesn't have any effect.

** In Flyspell mode, the default is now to make just one Ispell process,
not one per buffer.

** If you use iswitchb but do not call (iswitchb-default-keybindings) to
use the default keybindings, you will need to add the following line:
  (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)

** Auto-show mode is no longer enabled just by loading auto-show.el.
To control it, set `auto-show-mode' via Custom or use the
`auto-show-mode' command.

** Handling of X fonts' ascent/descent parameters has been changed to
avoid redisplay problems.  As a consequence, compared with previous
versions the line spacing and frame size now differ with some font
choices, typically increasing by a pixel per line.  This change
occurred in version 20.3 but was not documented then.

** If you select the bar cursor style, it uses the frame's
cursor-color, rather than the cursor foreground pixel.

** In multibyte mode, Rmail decodes incoming MIME messages using the
character set specified in the message.  If you want to disable this
feature, set the variable rmail-decode-mime-charset to nil.

** Not new, but not mentioned previously in NEWS: when you use #! at
the beginning of a file to make it executable and specify an
interpreter program, Emacs looks on the second line for the -*- mode
and variable specification, as well as on the first line.

** Support for IBM codepage encoding of non-ASCII characters.

The new command M-x codepage-setup creates a special coding system
that can be used to convert text between a specific IBM codepage and
one of the character sets built into Emacs which matches that
codepage.  For example, codepage 850 corresponds to Latin-1 character
set, codepage 855 corresponds to Cyrillic-ISO character set, etc.

Windows codepages 1250, 1251 and some others, where Windows deviates
from the corresponding ISO character set, are also supported.

IBM box-drawing characters and other glyphs which don't have
equivalents in the corresponding ISO character set, are converted to
a character defined by dos-unsupported-char-glyph on MS-DOS, and to
`?' on other systems.

IBM codepages are widely used on MS-DOS and MS-Windows, so this
feature is most useful on those platforms, but it can also be used on
Unix.

Emacs compiled for MS-DOS automatically loads the support for the
current codepage when it starts.

** Mail changes

*** The new variable default-sendmail-coding-system specifies the
default way to encode outgoing mail.  This has higher priority than
default-buffer-file-coding-system but has lower priority than
sendmail-coding-system and the local value of
buffer-file-coding-system.

You should not set this variable manually.  Instead, set
sendmail-coding-system to specify a fixed encoding for all outgoing
mail.

*** When you try to send a message that contains non-ASCII characters,
if the coding system specified by those variables doesn't handle them,
Emacs will ask you to select a suitable coding system while showing a
list of possible coding systems.

** CC Mode changes

*** c-default-style can now take an association list that maps major
modes to style names.  When this variable is an alist, Java mode no
longer hardcodes a setting to "java" style.  See the variable's
docstring for details.

*** It's now possible to put a list as the offset on a syntactic
symbol.  The list is evaluated recursively until a non-nil offset is
found.  This is useful to combine several lineup functions to act in a
prioritized order on a single line.  However, none of the supplied
lineup functions use this feature currently.

*** New syntactic symbol catch-clause, which is used on the "catch" and
"finally" lines in try-catch constructs in C++ and Java.

*** New cleanup brace-catch-brace on c-cleanup-list, which does for
"catch" lines what brace-elseif-brace does for "else if" lines.

*** The braces of Java anonymous inner classes are treated separately
from the braces of other classes in auto-newline mode.  Two new
symbols inexpr-class-open and inexpr-class-close may be used on
c-hanging-braces-alist to control the automatic newlines used for
anonymous classes.

*** Support for the Pike language added, along with new Pike specific
syntactic symbols: inlambda, lambda-intro-cont

*** Support for Java anonymous classes via new syntactic symbol
inexpr-class.  New syntactic symbol inexpr-statement for Pike
support and gcc-style statements inside expressions.  New lineup
function c-lineup-inexpr-block.

*** New syntactic symbol brace-entry-open which is used in brace lists
(i.e. static initializers) when a list entry starts with an open
brace.  These used to be recognized as brace-list-entry's.
c-electric-brace also recognizes brace-entry-open braces
(brace-list-entry's can no longer be electrified).

*** New command c-indent-line-or-region, not bound by default.

*** `#' is only electric when typed in the indentation of a line.

*** Parentheses are now electric (via the new command c-electric-paren)
for auto-reindenting lines when parens are typed.

*** In "gnu" style, inline-open offset is now set to zero.

*** Uniform handling of the inclass syntactic symbol.  The indentation
associated with it is now always relative to the class opening brace.
This means that the indentation behavior has changed in some
circumstances, but only if you've put anything besides 0 on the
class-open syntactic symbol (none of the default styles do that).

** Gnus changes.

*** New functionality for using Gnus as an offline newsreader has been
added.  A plethora of new commands and modes have been added.  See the
Gnus manual for the full story.

*** The nndraft backend has returned, but works differently than
before.  All Message buffers are now also articles in the nndraft
group, which is created automatically.

*** `gnus-alter-header-function' can now be used to alter header
values.

*** `gnus-summary-goto-article' now accept Message-ID's.

*** A new Message command for deleting text in the body of a message
outside the region: `C-c C-v'.

*** You can now post to component group in nnvirtual groups with
`C-u C-c C-c'.

*** `nntp-rlogin-program' -- new variable to ease customization.

*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit
re-highlighting of the article buffer.

*** New element in `gnus-boring-article-headers' -- `long-to'.

*** `M-i' symbolic prefix command.  See the section "Symbolic
Prefixes" in the Gnus manual for details.

*** `L' and `I' in the summary buffer now take the symbolic prefix
`a' to add the score rule to the "all.SCORE" file.

*** `gnus-simplify-subject-functions' variable to allow greater
control over simplification.

*** `A T' -- new command for fetching the current thread.

*** `/ T' -- new command for including the current thread in the
limit.

*** `M-RET' is a new Message command for breaking cited text.

*** \\1-expressions are now valid in `nnmail-split-methods'.

*** The `custom-face-lookup' function has been removed.  
If you used this function in your initialization files, you must
rewrite them to use `face-spec-set' instead.

*** Cancelling now uses the current select method.  Symbolic prefix
`a' forces normal posting method.

*** New command to translate M******** sm*rtq**t*s into proper text
-- `W d'.

*** For easier debugging of nntp, you can set `nntp-record-commands'
to a non-nil value.

*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling
where and how to send AUTHINFO to NNTP servers.

*** A command for editing group parameters from the summary buffer
has been added.

*** A history of where mails have been split is available.

*** A new article date command has been added -- `article-date-iso8601'.

*** Subjects can be simplified when threading by setting
`gnus-score-thread-simplify'.

*** A new function for citing in Message has been added --
`message-cite-original-without-signature'.

*** `article-strip-all-blank-lines' -- new article command.

*** A new Message command to kill to the end of the article has
been added.

*** A minimum adaptive score can be specified by using the
`gnus-adaptive-word-minimum' variable.

*** The "lapsed date" article header can be kept continually
updated by the `gnus-start-date-timer' command.

*** Web listserv archives can be read with the nnlistserv backend.

*** Old dejanews archives can now be read by nnweb.

*** `gnus-posting-styles' has been re-activated.

** Changes to TeX and LaTeX mode

*** The new variable `tex-start-options-string' can be used to give
options for the TeX run.  The default value causes TeX to run in
nonstopmode.  For an interactive TeX run set it to nil or "".

*** The command `tex-feed-input' sends input to the Tex Shell.  In a
TeX buffer it is bound to the keys C-RET, C-c RET, and C-c C-m (some
of these keys may not work on all systems).  For instance, if you run
TeX interactively and if the TeX run stops because of an error, you
can continue it without leaving the TeX buffer by typing C-RET.

*** The Tex Shell Buffer is now in `compilation-shell-minor-mode'.
All error-parsing commands of the Compilation major mode are available
but bound to keys that don't collide with the shell.  Thus you can use
the Tex Shell for command line executions like a usual shell.

*** The commands `tex-validate-region' and `tex-validate-buffer' check
the matching of braces and $'s.  The errors are listed in a *Occur*
buffer and you can use C-c C-c or mouse-2 to go to a particular
mismatch.

** Changes to RefTeX mode

*** The table of contents buffer can now also display labels and
file boundaries in addition to sections. Use `l', `i', and `c' keys.

*** Labels derived from context (the section heading) are now
lowercase by default.  To make the label legal in LaTeX, latin-1
characters will lose their accent.  All Mule characters will be
removed from the label.

*** The automatic display of cross reference information can also use
a window instead of the echo area.  See variable `reftex-auto-view-crossref'.

*** kpsewhich can be used by RefTeX to find TeX and BibTeX files.  See the
customization group `reftex-finding-files'.

*** The option `reftex-bibfile-ignore-list' has been renamed to
`reftex-bibfile-ignore-regexps' and indeed can be fed with regular
expressions. 

*** Multiple Selection buffers are now hidden buffers.

** New/deleted modes and packages

*** The package snmp-mode.el provides major modes for editing SNMP and
SNMPv2 MIBs.  It has entries on `auto-mode-alist'.

*** The package sql.el provides a major mode, M-x sql-mode, for
editing SQL files, and M-x sql-interactive-mode for interacting with
SQL interpreters.  It has an entry on `auto-mode-alist'.

*** M-x highlight-changes-mode provides a minor mode displaying buffer
changes with a special face.

*** ispell4.el has been deleted.  It got in the way of ispell.el and
this was hard to fix reliably.  It has long been obsolete -- use
Ispell 3.1 and ispell.el.

* MS-DOS changes in Emacs 20.4

** Emacs compiled for MS-DOS now supports MULE features better.
This includes support for display of all ISO 8859-N character sets,
conversion to and from IBM codepage encoding of non-ASCII characters,
and automatic setup of the MULE environment at startup.  For details,
check out the section `MS-DOS and MULE' in the manual.

The MS-DOS installation procedure automatically configures and builds
Emacs with input method support if it finds an unpacked Leim
distribution when the config.bat script is run.

** Formerly, the value of lpr-command did not affect printing on
MS-DOS unless print-region-function was set to nil, but now it
controls whether an external program is invoked or output is written
directly to a printer port.  Similarly, in the previous version of
Emacs, the value of ps-lpr-command did not affect PostScript printing
on MS-DOS unless ps-printer-name was set to something other than a
string (eg. t or `pipe'), but now it controls whether an external
program is used.  (These changes were made so that configuration of
printing variables would be almost identical across all platforms.)

** In the previous version of Emacs, PostScript and non-PostScript
output was piped to external programs, but because most print programs
available for MS-DOS and MS-Windows cannot read data from their standard
input, on those systems the data to be output is now written to a
temporary file whose name is passed as the last argument to the external
program.

An exception is made for `print', a standard program on Windows NT,
and `nprint', a standard program on Novell Netware.  For both of these
programs, the command line is constructed in the appropriate syntax
automatically, using only the value of printer-name or ps-printer-name
as appropriate--the value of the relevant `-switches' variable is
ignored, as both programs have no useful switches.

** The value of the variable dos-printer (cf. dos-ps-printer), if it has
a value, overrides the value of printer-name (cf. ps-printer-name), on
MS-DOS and MS-Windows only.  This has been true since version 20.3, but
was not documented clearly before.

** All the Emacs games now work on MS-DOS terminals.
This includes Tetris and Snake.

* Lisp changes in Emacs 20.4

** New functions line-beginning-position and line-end-position
return the position of the beginning or end of the current line.
They both accept an optional argument, which has the same
meaning as the argument to beginning-of-line or end-of-line.

** find-file and allied functions now have an optional argument
WILDCARD.  If this is non-nil, they do wildcard processing,
and visit all files that match the wildcard pattern.

** Changes in the file-attributes function.

*** The file size returned by file-attributes may be an integer or a float.
It is an integer if the size fits in a Lisp integer, float otherwise.

*** The inode number returned by file-attributes may be an integer (if
the number fits in a Lisp integer) or a cons cell containing two
integers.

** The new function file-expand-wildcards expands a wildcard-pattern
to produce a list of existing files that match the pattern.

** New functions for base64 conversion:

The function base64-encode-region converts a part of the buffer
into the base64 code used in MIME.  base64-decode-region
performs the opposite conversion.  Line-breaking is supported
optionally.

Functions base64-encode-string and base64-decode-string do a similar
job on the text in a string.  They return the value as a new string.

**
The new function process-running-child-p
will tell you if a subprocess has given control of its
terminal to its own child process.

** interrupt-process and such functions have a new feature:
when the second argument is `lambda', they send a signal
to the running child of the subshell, if any, but if the shell
itself owns its terminal, no signal is sent.

** There are new widget types `plist' and `alist' which can
be used for customizing variables whose values are plists or alists.

** easymenu.el Now understands `:key-sequence' and `:style button'.
:included is an alias for :visible.

easy-menu-add-item now understands the values returned by
easy-menu-remove-item and easy-menu-item-present-p.  This can be used
to move or copy menu entries.

** Multibyte editing changes

*** The definitions of sref and char-bytes are changed.  Now, sref is
an alias of aref and char-bytes always returns 1.  This change is to
make some Emacs Lisp code which works on 20.2 and earlier also
work on the latest Emacs.  Such code uses a combination of sref and
char-bytes in a loop typically as below:
	(setq char (sref str idx)
	      idx (+ idx (char-bytes idx)))
The byte-compiler now warns that this is obsolete.

If you want to know how many bytes a specific multibyte character
(say, CH) occupies in a multibyte buffer, use this code:
	(charset-bytes (char-charset ch))

*** In multibyte mode, when you narrow a buffer to some region, and the
region is preceded or followed by non-ASCII codes, inserting or
deleting at the head or the end of the region may signal this error:

    Byte combining across boundary of accessible buffer text inhibitted

This is to avoid some bytes being combined together into a character
across the boundary.

*** The functions find-charset-region and find-charset-string include
`unknown' in the returned list in the following cases:
    o The current buffer or the target string is unibyte and
      contains 8-bit characters.
    o The current buffer or the target string is multibyte and
      contains invalid characters.

*** The functions decode-coding-region and encode-coding-region remove
text properties of the target region.  Ideally, they should correctly
preserve text properties, but for the moment, it's hard.  Removing
text properties is better than preserving them in a less-than-correct
way.

*** prefer-coding-system sets EOL conversion of default coding systems.
If the argument to prefer-coding-system specifies a certain type of
end of line conversion, the default coding systems set by
prefer-coding-system will specify that conversion type for end of line.

*** The new function thai-compose-string can be used to properly
compose Thai characters in a string.

** The primitive `define-prefix-command' now takes an optional third
argument NAME, which should be a string.  It supplies the menu name
for the created keymap.  Keymaps created in order to be displayed as
menus should always use the third argument.

** The meanings of optional second arguments for read-char,
read-event, and read-char-exclusive are flipped.  Now the second
arguments are INHERIT-INPUT-METHOD.  These functions use the current
input method (if any) if and only if INHERIT-INPUT-METHOD is non-nil.

** The new function clear-this-command-keys empties out the contents
of the vector that (this-command-keys) returns.  This is useful in
programs that read passwords, to prevent the passwords from echoing
inadvertently as part of the next command in certain cases.

** The new macro `with-temp-message' displays a temporary message in
the echo area, while executing some Lisp code.  Like `progn', it
returns the value of the last form, but it also restores the previous
echo area contents.

   (with-temp-message MESSAGE &rest BODY)

** The function `require' now takes an optional third argument
NOERROR.  If it is non-nil, then there is no error if the
requested feature cannot be loaded.

** In the function modify-face, an argument of (nil) for the
foreground color, background color or stipple pattern
means to clear out that attribute.  

** The `outer-window-id' frame property of an X frame
gives the window number of the outermost X window for the frame.

** Temporary buffers made with with-output-to-temp-buffer are now
read-only by default, and normally use the major mode Help mode
unless you put them in some other non-Fundamental mode before the
end of with-output-to-temp-buffer.

** The new functions gap-position and gap-size return information on
the gap of the current buffer.

** The new functions position-bytes and byte-to-position provide a way
to convert between character positions and byte positions in the
current buffer.

** vc.el defines two new macros, `edit-vc-file' and `with-vc-file', to
facilitate working with version-controlled files from Lisp programs.
These macros check out a given file automatically if needed, and check
it back in after any modifications have been made.

* Installation Changes in Emacs 20.3

** The default value of load-path now includes most subdirectories of
the site-specific directories /usr/local/share/emacs/site-lisp and
/usr/local/share/emacs/VERSION/site-lisp, in addition to those
directories themselves.  Both immediate subdirectories and
subdirectories multiple levels down are added to load-path.

Not all subdirectories are included, though.  Subdirectories whose
names do not start with a letter or digit are excluded.
Subdirectories named RCS or CVS are excluded.  Also, a subdirectory
which contains a file named `.nosearch' is excluded.  You can use
these methods to prevent certain subdirectories from being searched.

Emacs finds these subdirectories and adds them to load-path when it
starts up.  While it would be cleaner to find the subdirectories each
time Emacs loads a file, that would be much slower.

This feature is an incompatible change.  If you have stored some Emacs
Lisp files in a subdirectory of the site-lisp directory specifically
to prevent them from being used, you will need to rename the
subdirectory to start with a non-alphanumeric character, or create a
`.nosearch' file in it, in order to continue to achieve the desired
results.

** Emacs no longer includes an old version of the C preprocessor from
GCC.  This was formerly used to help compile Emacs with C compilers
that had limits on the significant length of an identifier, but in
fact we stopped supporting such compilers some time ago.

* Changes in Emacs 20.3

** The new command C-x z (repeat) repeats the previous command
including its argument.  If you repeat the z afterward,
it repeats the command additional times; thus, you can
perform many repetitions with one keystroke per repetition.

** Emacs now supports "selective undo" which undoes only within a
specified region.  To do this, set point and mark around the desired
region and type C-u C-x u (or C-u C-_).  You can then continue undoing
further, within the same region, by repeating the ordinary undo
command C-x u or C-_.  This will keep undoing changes that were made
within the region you originally specified, until either all of them
are undone, or it encounters a change which crosses the edge of that
region.

In Transient Mark mode, undoing when a region is active requests
selective undo.

** If you specify --unibyte when starting Emacs, then all buffers are
unibyte, except when a Lisp program specifically creates a multibyte
buffer.  Setting the environment variable EMACS_UNIBYTE has the same
effect.  The --no-unibyte option overrides EMACS_UNIBYTE and directs
Emacs to run normally in multibyte mode.

The option --unibyte does not affect the reading of Emacs Lisp files,
though.  If you want a Lisp file to be read in unibyte mode, use
-*-unibyte: t;-*- on its first line.  That will force Emacs to
load that file in unibyte mode, regardless of how Emacs was started.

** toggle-enable-multibyte-characters no longer has a key binding and
no longer appears in the menu bar.  We've realized that changing the
enable-multibyte-characters variable in an existing buffer is
something that most users not do.

** You can specify a coding system to use for the next cut or paste
operations through the window system with the command C-x RET X.
The coding system can make a difference for communication with other
applications.

C-x RET x specifies a coding system for all subsequent cutting and
pasting operations.

** You can specify the printer to use for commands that do printing by
setting the variable `printer-name'.  Just what a printer name looks
like depends on your operating system.  You can specify a different
printer for the Postscript printing commands by setting
`ps-printer-name'.

** Emacs now supports on-the-fly spell checking by the means of a
minor mode.  It is called M-x flyspell-mode.  You don't have to remember
any other special commands to use it, and you will hardly notice it
except when you make a spelling error.  Flyspell works by highlighting
incorrect words as soon as they are completed or as soon as the cursor
hits a new word.

Flyspell mode works with whichever dictionary you have selected for
Ispell in Emacs.  In TeX mode, it understands TeX syntax so as not
to be confused by TeX commands.

You can correct a misspelled word by editing it into something
correct.  You can also correct it, or accept it as correct, by
clicking on the word with Mouse-2; that gives you a pop-up menu
of various alternative replacements and actions.

Flyspell mode also proposes "automatic" corrections.  M-TAB replaces
the current misspelled word with a possible correction.  If several
corrections are made possible, M-TAB cycles through them in
alphabetical order, or in order of decreasing likelihood if
flyspell-sort-corrections is nil.

Flyspell mode also flags an error when a word is repeated, if
flyspell-mark-duplications-flag is non-nil.

** Changes in input method usage.

Now you can use arrow keys (right, left, down, up) for selecting among
the alternatives just the same way as you do by C-f, C-b, C-n, and C-p
respectively.

You can use the ENTER key to accept the current conversion.

If you type TAB to display a list of alternatives, you can select one
of the alternatives with Mouse-2.

The meaning of the variable `input-method-verbose-flag' is changed so
that you can set it to t, nil, `default', or `complex-only'.

  If the value is nil, extra guidance is never given.

  If the value is t, extra guidance is always given.

  If the value is `complex-only', extra guidance is always given only
  when you are using complex input methods such as chinese-py.

  If the value is `default' (this is the default), extra guidance is
  given in the following case: 
    o When you are using a complex input method.
    o When you are using a simple input method but not in the minibuffer.

If you are using Emacs through a very slow line, setting
input-method-verbose-flag to nil or to complex-only is a good choice,
and if you are using an input method you are not familiar with,
setting it to t is helpful.

The old command select-input-method is now called set-input-method.

In the language environment "Korean", you can use the following
keys:
	Shift-SPC	toggle-korean-input-method
	C-F9		quail-hangul-switch-symbol-ksc
	F9		quail-hangul-switch-hanja
These key bindings are canceled when you switch to another language
environment.

** The minibuffer history of file names now records the specified file
names, not the entire minibuffer input.  For example, if the
minibuffer starts out with /usr/foo/, you might type in /etc/passwd to
get

     /usr/foo//etc/passwd

which stands for the file /etc/passwd.

Formerly, this used to put /usr/foo//etc/passwd in the history list.
Now this puts just /etc/passwd in the history list.

** If you are root, Emacs sets backup-by-copying-when-mismatch to t
at startup, so that saving a file will be sure to preserve
its owner and group.

** find-func.el can now also find the place of definition of Emacs
Lisp variables in user-loaded libraries.

** C-x r t (string-rectangle) now deletes the existing rectangle
contents before inserting the specified string on each line.

** There is a new command delete-whitespace-rectangle
which deletes whitespace starting from a particular column
in all the lines on a rectangle.  The column is specified
by the left edge of the rectangle.

** You can now store a number into a register with C-u NUMBER C-x r n REG,
increment it by INC with C-u INC C-x r + REG (to increment by one, omit
C-u INC), and insert it in the buffer with C-x r g REG.  This is useful
for writing keyboard macros.

** The new command M-x speedbar displays a frame in which directories,
files, and tags can be displayed, manipulated, and jumped to.  The
frame defaults to 20 characters in width, and is the same height as
the frame that it was started from.  Some major modes define
additional commands for the speedbar, including Rmail, GUD/GDB, and
info.

** query-replace-regexp is now bound to C-M-%.

** In Transient Mark mode, when the region is active, M-x
query-replace and the other replace commands now operate on the region
contents only.

** M-x write-region, when used interactively, now asks for
confirmation before overwriting an existing file.  When you call
the function from a Lisp program, a new optional argument CONFIRM
says whether to ask for confirmation in this case.

** If you use find-file-literally and the file is already visited
non-literally, the command asks you whether to revisit the file
literally.  If you say no, it signals an error.

** Major modes defined with the "derived mode" feature
now use the proper name for the mode hook: WHATEVER-mode-hook.
Formerly they used the name WHATEVER-mode-hooks, but that is
inconsistent with Emacs conventions.

** shell-command-on-region (and shell-command) reports success or
failure if the command produces no output.

** Set focus-follows-mouse to nil if your window system or window
manager does not transfer focus to another window when you just move
the mouse.

** mouse-menu-buffer-maxlen has been renamed to
mouse-buffer-menu-maxlen to be consistent with the other related
function and variable names.

** The new variable auto-coding-alist specifies coding systems for
reading specific files.  This has higher priority than
file-coding-system-alist.

** If you set the variable unibyte-display-via-language-environment to
t, then Emacs displays non-ASCII characters are displayed by
converting them to the equivalent multibyte characters according to
the current language environment.  As a result, they are displayed
according to the current fontset.

** C-q's handling of codes in the range 0200 through 0377 is changed.

The codes in the range 0200 through 0237 are inserted as one byte of
that code regardless of the values of nonascii-translation-table and
nonascii-insert-offset.

For the codes in the range 0240 through 0377, if
enable-multibyte-characters is non-nil and nonascii-translation-table
nor nonascii-insert-offset can't convert them to valid multibyte
characters, they are converted to Latin-1 characters.

** If you try to find a file that is not read-accessible, you now get
an error, rather than an empty buffer and a warning.

** In the minibuffer history commands M-r and M-s, an upper case
letter in the regular expression forces case-sensitive search.

** In the *Help* buffer, cross-references to commands and variables
are inferred and hyperlinked.  Use C-h m in Help mode for the relevant
command keys.

** M-x apropos-command, with a prefix argument, no longer looks for
user option variables--instead it looks for noninteractive functions.

Meanwhile, the command apropos-variable normally searches for
user option variables; with a prefix argument, it looks at
all variables that have documentation.

** When you type a long line in the minibuffer, and the minibuffer
shows just one line, automatically scrolling works in a special way
that shows you overlap with the previous line of text.  The variable
minibuffer-scroll-overlap controls how many characters of overlap
it should show; the default is 20.

Meanwhile, Resize Minibuffer mode is still available; in that mode,
the minibuffer grows taller (up to a point) as needed to show the whole
of your input.

** The new command M-x customize-changed-options lets you customize
all the options whose meanings or default values have changed in
recent Emacs versions.  You specify a previous Emacs version number as
argument, and the command creates a customization buffer showing all
the customizable options which were changed since that version.
Newly added options are included as well.

If you don't specify a particular version number argument,
then the customization buffer shows all the customizable options
for which Emacs versions of changes are recorded.

This function is also bound to the Changed Options entry in the
Customize menu.

** When you run M-x grep with a prefix argument, it figures out
the tag around point and puts that into the default grep command.

** The new command M-* (pop-tag-mark) pops back through a history of
buffer positions from which M-. or other tag-finding commands were
invoked.

** The new variable comment-padding specifies the number of spaces
that `comment-region' will insert before the actual text of the comment.
The default is 1.

** In Fortran mode the characters `.', `_' and `$' now have symbol
syntax, not word syntax.  Fortran mode now supports `imenu' and has
new commands fortran-join-line (M-^) and fortran-narrow-to-subprogram
(C-x n d).  M-q can be used to fill a statement or comment block
sensibly.

** GUD now supports jdb, the Java debugger, and pdb, the Python debugger.

** If you set the variable add-log-keep-changes-together to a non-nil
value, the command `C-x 4 a' will automatically notice when you make
two entries in one day for one file, and combine them.

** You can use the command M-x diary-mail-entries to mail yourself a
reminder about upcoming diary entries.  See the documentation string
for a sample shell script for calling this function automatically
every night.

** All you need to do, to enable use of the Desktop package, is to set
the variable desktop-enable to t with Custom.

** There is no need to do anything special, now, to enable Gnus to
read and post multi-lingual articles.

** Outline mode has now support for showing hidden outlines when
doing an isearch.  In order for this to happen search-invisible should
be set to open (the default).  If an isearch match is inside a hidden
outline the outline is made visible.  If you continue pressing C-s and
the match moves outside the formerly invisible outline, the outline is
made invisible again. 

** Mail reading and sending changes

*** The Rmail e command now switches to displaying the whole header of
the message before it lets you edit the message.  This is so that any
changes you make in the header will not be lost if you subsequently
toggle.

*** The w command in Rmail, which writes the message body into a file,
now works in the summary buffer as well.  (The command to delete the
summary buffer is now Q.)  The default file name for the w command, if
the message has no subject, is stored in the variable
rmail-default-body-file.

*** Most of the commands and modes that operate on mail and netnews no
longer depend on the value of mail-header-separator.  Instead, they
handle whatever separator the buffer happens to use.

*** If you set mail-signature to a value which is not t, nil, or a string,
it should be an expression.  When you send a message, this expression
is evaluated to insert the signature.

*** The new Lisp library feedmail.el (version 8) enhances processing of
outbound email messages.  It works in coordination with other email
handling packages (e.g., rmail, VM, gnus) and is responsible for
putting final touches on messages and actually submitting them for
transmission.  Users of the emacs program "fakemail" might be
especially interested in trying feedmail.

feedmail is not enabled by default.  See comments at the top of
feedmail.el for set-up instructions.  Among the bigger features
provided by feedmail are:

**** you can park outgoing messages into a disk-based queue and
stimulate sending some or all of them later (handy for laptop users);
there is also a queue for draft messages

**** you can get one last look at the prepped outbound message and
be prompted for confirmation

**** does smart filling of address headers

**** can generate a MESSAGE-ID: line and a DATE: line; the date can be
the time the message was written or the time it is being sent; this
can make FCC copies more closely resemble copies that recipients get

**** you can specify an arbitrary function for actually transmitting
the message; included in feedmail are interfaces for /bin/[r]mail,
/usr/lib/sendmail, and elisp smtpmail; it's easy to write a new
function for something else (10-20 lines of elisp)

** Dired changes

*** The Dired function dired-do-toggle, which toggles marked and unmarked
files, is now bound to "t" instead of "T".

*** dired-at-point has been added to ffap.el.  It allows one to easily
run Dired on the directory name at point.

*** Dired has a new command: %g.  It searches the contents of
files in the directory and marks each file that contains a match
for a specified regexp.

** VC Changes

*** New option vc-ignore-vc-files lets you turn off version control
conveniently.

*** VC Dired has been completely rewritten.  It is now much
faster, especially for CVS, and works very similar to ordinary
Dired.

VC Dired is invoked by typing C-x v d and entering the name of the
directory to display.  By default, VC Dired gives you a recursive
listing of all files at or below the given directory which are
currently locked (for CVS, all files not up-to-date are shown).

You can change the listing format by setting vc-dired-recurse to nil,
then it shows only the given directory, and you may also set
vc-dired-terse-display to nil, then it shows all files under version
control plus the names of any subdirectories, so that you can type `i'
on such lines to insert them manually, as in ordinary Dired.

All Dired commands operate normally in VC Dired, except for `v', which
is redefined as the version control prefix.  That means you may type
`v l', `v =' etc. to invoke `vc-print-log', `vc-diff' and the like on
the file named in the current Dired buffer line.  `v v' invokes
`vc-next-action' on this file, or on all files currently marked.

The new command `v t' (vc-dired-toggle-terse-mode) allows you to
toggle between terse display (only locked files) and full display (all
VC files plus subdirectories).  There is also a special command, 
`* l', to mark all files currently locked.

Giving a prefix argument to C-x v d now does the same thing as in
ordinary Dired: it allows you to supply additional options for the ls
command in the minibuffer, to fine-tune VC Dired's output.

*** Under CVS, if you merge changes from the repository into a working
file, and CVS detects conflicts, VC now offers to start an ediff
session to resolve them.

Alternatively, you can use the new command `vc-resolve-conflicts' to
resolve conflicts in a file at any time.  It works in any buffer that
contains conflict markers as generated by rcsmerge (which is what CVS
uses as well).

*** You can now transfer changes between branches, using the new
command vc-merge (C-x v m).  It is implemented for RCS and CVS.  When
you invoke it in a buffer under version-control, you can specify
either an entire branch or a pair of versions, and the changes on that
branch or between the two versions are merged into the working file.
If this results in any conflicts, they may be resolved interactively,
using ediff.

** Changes in Font Lock

*** The face and variable previously known as font-lock-reference-face
are now called font-lock-constant-face to better reflect their typical
use for highlighting constants and labels.  (Its face properties are
unchanged.)  The variable font-lock-reference-face remains for now for
compatibility reasons, but its value is font-lock-constant-face.

** Frame name display changes

*** The command set-frame-name lets you set the name of the current
frame.  You can use the new command select-frame-by-name to select and
raise a frame; this is mostly useful on character-only terminals, or
when many frames are invisible or iconified.

*** On character-only terminal (not a window system), changing the
frame name is now reflected on the mode line and in the Buffers/Frames
menu.

** Comint (subshell) changes

*** In Comint modes, the commands to kill, stop or interrupt a
subjob now also kill pending input.  This is for compatibility
with ordinary shells, where the signal characters do this.

*** There are new commands in Comint mode.

C-c C-x fetches the "next" line from the input history;
that is, the line after the last line you got.
You can use this command to fetch successive lines, one by one.

C-c SPC accumulates lines of input.  More precisely, it arranges to
send the current line together with the following line, when you send
the following line.

C-c C-a if repeated twice consecutively now moves to the process mark,
which separates the pending input from the subprocess output and the
previously sent input.

C-c M-r now runs comint-previous-matching-input-from-input;
it searches for a previous command, using the current pending input
as the search string.

*** New option compilation-scroll-output can be set to scroll
automatically in compilation-mode windows.

** C mode changes

*** Multiline macros are now handled, both as they affect indentation,
and as recognized syntax.  New syntactic symbol cpp-macro-cont is
assigned to second and subsequent lines of a multiline macro
definition. 

*** A new style "user" which captures all non-hook-ified
(i.e. top-level) .emacs file variable settings and customizations.
Style "cc-mode" is an alias for "user" and is deprecated.  "gnu"
style is still the default however.

*** "java" style now conforms to Sun's JDK coding style.

*** There are new commands c-beginning-of-defun, c-end-of-defun which
are alternatives which you could bind to C-M-a and C-M-e if you prefer
them.  They do not have key bindings by default.

*** New and improved implementations of M-a (c-beginning-of-statement)
and M-e (c-end-of-statement).

*** C++ namespace blocks are supported, with new syntactic symbols
namespace-open, namespace-close, and innamespace.

*** File local variable settings of c-file-style and c-file-offsets
makes the style variables local to that buffer only.

*** New indentation functions c-lineup-close-paren,
c-indent-one-line-block, c-lineup-dont-change.

*** Improvements (hopefully!) to the way CC Mode is loaded.  You
should now be able to do a (require 'cc-mode) to get the entire
package loaded properly for customization in your .emacs file.  A new
variable c-initialize-on-load controls this and is t by default.

** Changes to hippie-expand.

*** New customization variable `hippie-expand-dabbrev-skip-space'. If 
non-nil, trailing spaces may be included in the abbreviation to search for,
which then gives the same behavior as the original `dabbrev-expand'.

*** New customization variable `hippie-expand-dabbrev-as-symbol'. If
non-nil, characters of syntax '_' is considered part of the word when
expanding dynamically.

*** New customization variable `hippie-expand-no-restriction'. If
non-nil, narrowed buffers are widened before they are searched.

*** New customization variable `hippie-expand-only-buffers'. If
non-empty, buffers searched are restricted to the types specified in
this list. Useful for example when constructing new special-purpose
expansion functions with `make-hippie-expand-function'.

*** Text properties of the expansion are no longer copied.

** Changes in BibTeX mode.

*** Any titleword matching a regexp in the new variable
bibtex-autokey-titleword-ignore (case sensitive) is ignored during
automatic key generation.  This replaces variable
bibtex-autokey-titleword-first-ignore, which only checked for matches
against the first word in the title.

*** Autokey generation now uses all words from the title, not just
capitalized words.  To avoid conflicts with existing customizations,
bibtex-autokey-titleword-ignore is set up such that words starting with
lowerkey characters will still be ignored.  Thus, if you want to use 
lowercase words from the title, you will have to overwrite the
bibtex-autokey-titleword-ignore standard setting. 

*** Case conversion of names and title words for automatic key
generation is more flexible.  Variable bibtex-autokey-preserve-case is
replaced by bibtex-autokey-titleword-case-convert and
bibtex-autokey-name-case-convert.

** Changes in vcursor.el.

*** Support for character terminals is available: there is a new keymap
and the vcursor will appear as an arrow between buffer text.  A
variable `vcursor-interpret-input' allows input from the vcursor to be
entered exactly as if typed.  Numerous functions, including
`vcursor-compare-windows', have been rewritten to improve consistency
in the selection of windows and corresponding keymaps.

*** vcursor options can now be altered with M-x customize under the
Editing group once the package is loaded.

*** Loading vcursor now does not define keys by default, as this is
generally a bad side effect.  Use M-x customize to set
vcursor-key-bindings to t to restore the old behaviour.

*** vcursor-auto-disable can be `copy', which turns off copying from the
vcursor, but doesn't disable it, after any non-vcursor command.

** Ispell changes.

*** You can now spell check comments and strings in the current 
buffer with M-x ispell-comments-and-strings.  Comments and strings 
are identified by syntax tables in effect.

*** Generic region skipping implemented.
A single buffer can be broken into a number of regions where text will
and will not be checked.  The definitions of the regions can be user
defined.  New applications and improvements made available by this
include: 

    o URLs are automatically skipped
    o EMail message checking is vastly improved.

*** Ispell can highlight the erroneous word even on non-window terminals.

** Changes to RefTeX mode

RefTeX has been updated in order to make it more usable with very
large projects (like a several volume math book).  The parser has been
re-written from scratch.  To get maximum speed from RefTeX, check the
section `Optimizations' in the manual.

*** New recursive parser.

The old version of RefTeX created a single large buffer containing the
entire multifile document in order to parse the document.  The new
recursive parser scans the individual files.

*** Parsing only part of a document.
    
Reparsing of changed document parts can now be made faster by enabling
partial scans.  To use this feature, read the documentation string of
the variable `reftex-enable-partial-scans' and set the variable to t.

    (setq reftex-enable-partial-scans t)

*** Storing parsing information in a file.

This can improve startup times considerably.  To turn it on, use

    (setq reftex-save-parse-info t)

*** Using multiple selection buffers

If the creation of label selection buffers is too slow (this happens
for large documents), you can reuse these buffers by setting

    (setq reftex-use-multiple-selection-buffers t)

*** References to external documents.

The LaTeX package `xr' allows to cross-reference labels in external
documents.  RefTeX can provide information about the external
documents as well.  To use this feature, set up the \externaldocument
macros required by the `xr' package and rescan the document with
RefTeX.  The external labels can then be accessed with the `x' key in
the selection buffer provided by `reftex-reference' (bound to `C-c )').
The `x' key also works in the table of contents buffer.

*** Many more labeled LaTeX environments are recognized by default.

The builtin command list now covers all the standard LaTeX commands,
and all of the major packages included in the LaTeX distribution.

Also, RefTeX now understands the \appendix macro and changes
the enumeration of sections in the *toc* buffer accordingly.

*** Mouse support for selection and *toc* buffers

The mouse can now be used to select items in the selection and *toc*
buffers.  See also the new option `reftex-highlight-selection'.

*** New keymaps for selection and table of contents modes.

The selection processes for labels and citation keys, and the table of
contents buffer now have their own keymaps: `reftex-select-label-map',
`reftex-select-bib-map', `reftex-toc-map'.  The selection processes
have a number of new keys predefined.  In particular, TAB lets you
enter a label with completion.  Check the on-the-fly help (press `?'
at the selection prompt) or read the Info documentation to find out
more.

*** Support for the varioref package

The `v' key in the label selection buffer toggles \ref versus \vref.

*** New hooks

Three new hooks can be used to redefine the way labels, references,
and citations are created. These hooks are
`reftex-format-label-function', `reftex-format-ref-function',
`reftex-format-cite-function'.

*** Citations outside LaTeX

The command `reftex-citation' may also be used outside LaTeX (e.g. in
a mail buffer).  See the Info documentation for details.

*** Short context is no longer fontified.

The short context in the label menu no longer copies the
fontification from the text in the buffer.  If you prefer it to be
fontified, use

   (setq reftex-refontify-context t)

** file-cache-minibuffer-complete now accepts a prefix argument.
With a prefix argument, it does not try to do completion of
the file name within its directory; it only checks for other
directories that contain the same file name.

Thus, given the file name Makefile, and assuming that a file
Makefile.in exists in the same directory, ordinary
file-cache-minibuffer-complete will try to complete Makefile to
Makefile.in and will therefore never look for other directories that
have Makefile.  A prefix argument tells it not to look for longer
names such as Makefile.in, so that instead it will look for other
directories--just as if the name were already complete in its present
directory.

** New modes and packages

*** There is a new alternative major mode for Perl, Cperl mode.
It has many more features than Perl mode, and some people prefer
it, but some do not.

*** There is a new major mode, M-x vhdl-mode, for editing files of VHDL
code.

*** M-x which-function-mode enables a minor mode that displays the
current function name continuously in the mode line, as you move
around in a buffer.

Which Function mode is effective in major modes which support Imenu.

*** Gametree is a major mode for editing game analysis trees.  The author
uses it for keeping notes about his postal Chess games, but it should
be helpful for other two-player games as well, as long as they have an
established system of notation similar to Chess.

*** The new minor mode checkdoc-minor-mode provides Emacs Lisp
documentation string checking for style and spelling.  The style
guidelines are found in the Emacs Lisp programming manual.

*** The net-utils package makes some common networking features
available in Emacs.  Some of these functions are wrappers around
system utilities (ping, nslookup, etc); others are implementations of
simple protocols (finger, whois) in Emacs Lisp.  There are also
functions to make simple connections to TCP/IP ports for debugging and
the like.

*** highlight-changes-mode is a minor mode that uses colors to
identify recently changed parts of the buffer text.

*** The new package `midnight' lets you specify things to be done
within Emacs at midnight--by default, kill buffers that you have not
used in a considerable time.  To use this feature, customize
the user option `midnight-mode' to t.

*** The file generic-x.el defines a number of simple major modes.

  apache-generic-mode: For Apache and NCSA httpd configuration files
  samba-generic-mode: Samba configuration files
  fvwm-generic-mode: For fvwm initialization files
  x-resource-generic-mode: For X resource files
  hosts-generic-mode: For hosts files (.rhosts, /etc/hosts, etc)
  mailagent-rules-generic-mode: For mailagent .rules files
  javascript-generic-mode: For JavaScript files
  vrml-generic-mode: For VRML files
  java-manifest-generic-mode: For Java MANIFEST files
  java-properties-generic-mode: For Java property files
  mailrc-generic-mode: For .mailrc files

  Platform-specific modes:

  prototype-generic-mode: For Solaris/Sys V prototype files
  pkginfo-generic-mode: For Solaris/Sys V pkginfo files
  alias-generic-mode: For C shell alias files
  inf-generic-mode: For MS-Windows INF files
  ini-generic-mode: For MS-Windows INI files
  reg-generic-mode: For MS-Windows Registry files
  bat-generic-mode: For MS-Windows BAT scripts
  rc-generic-mode: For MS-Windows Resource files
  rul-generic-mode: For InstallShield scripts

* Lisp changes in Emacs 20.3 since the Emacs Lisp Manual was published

** If you want a Lisp file to be read in unibyte mode,
use -*-unibyte: t;-*- on its first line.
That will force Emacs to read that file in unibyte mode.
Otherwise, the file will be loaded and byte-compiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables in it have the
default values changed, then just add a `:version' to that group. It
is recommended that new packages added to the distribution contain a
`:version' in the top level group.

This information is used to control the customize-changed-options command.

** It is now an error to change the value of a symbol whose name
starts with a colon--if it is interned in the standard obarray.

However, setting such a symbol to its proper value, which is that
symbol itself, is not an error.  This is for the sake of programs that
support previous Emacs versions by explicitly setting these variables
to themselves.

If you set the variable keyword-symbols-constant-flag to nil,
this error is suppressed, and you can set these symbols to any
values whatever.

** There is a new debugger command, R.
It evaluates an expression like e, but saves the result
in the buffer *Debugger-record*.

** Frame-local variables.

You can now make a variable local to various frames.  To do this, call
the function make-variable-frame-local; this enables frames to have
local bindings for that variable.

These frame-local bindings are actually frame parameters: you create a
frame-local binding in a specific frame by calling
modify-frame-parameters and specifying the variable name as the
parameter name.

Buffer-local bindings take precedence over frame-local bindings.
Thus, if the current buffer has a buffer-local binding, that binding is
active; otherwise, if the selected frame has a frame-local binding,
that binding is active; otherwise, the default binding is active.

It would not be hard to implement window-local bindings, but it is not
clear that this would be very useful; windows tend to come and go in a
very transitory fashion, so that trying to produce any specific effect
through a window-local binding would not be very robust.

** `sregexq' and `sregex' are two new functions for constructing
"symbolic regular expressions."  These are Lisp expressions that, when
evaluated, yield conventional string-based regexps.  The symbolic form
makes it easier to construct, read, and maintain complex patterns.
See the documentation in sregex.el.

** parse-partial-sexp's return value has an additional element which
is used to pass information along if you pass it to another call to
parse-partial-sexp, starting its scan where the first call ended.
The contents of this field are not yet finalized.

** eval-region now accepts a fourth optional argument READ-FUNCTION.
If it is non-nil, that function is used instead of `read'.

** unload-feature by default removes the feature's functions from
known hooks to avoid trouble, but a package providing FEATURE can
define a hook FEATURE-unload-hook to be run by unload-feature instead.

** read-from-minibuffer no longer returns the argument DEFAULT-VALUE
when the user enters empty input.  It now returns the null string, as
it did in Emacs 19.  The default value is made available in the
history via M-n, but it is not applied here as a default.

The other, more specialized minibuffer-reading functions continue to
return the default value (not the null string) when the user enters
empty input.

** The new variable read-buffer-function controls which routine to use
for selecting buffers.  For example, if you set this variable to
`iswitchb-read-buffer', iswitchb will be used to read buffer names.
Other functions can also be used if they accept the same arguments as
`read-buffer' and return the selected buffer name as a string.

** The new function read-passwd reads a password from the terminal,
echoing a period for each character typed.  It takes three arguments:
a prompt string, a flag which says "read it twice to make sure", and a
default password to use if the user enters nothing.

** The variable fill-nobreak-predicate gives major modes a way to
specify not to break a line at certain places.  Its value is a
function which is called with no arguments, with point located at the
place where a break is being considered.  If the function returns
non-nil, then the line won't be broken there.

** window-end now takes an optional second argument, UPDATE.
If this is non-nil, then the function always returns an accurate
up-to-date value for the buffer position corresponding to the
end of the window, even if this requires computation.

** other-buffer now takes an optional argument FRAME
which specifies which frame's buffer list to use.
If it is nil, that means use the selected frame's buffer list.

** The new variable buffer-display-time, always local in every buffer,
holds the value of (current-time) as of the last time that a window
was directed to display this buffer.

** It is now meaningful to compare two window-configuration objects
with `equal'.  Two window-configuration objects are equal if they
describe equivalent arrangements of windows, in the same frame--in
other words, if they would give the same results if passed to
set-window-configuration.

** compare-window-configurations is a new function that compares two
window configurations loosely.  It ignores differences in saved buffer
positions and scrolling, and considers only the structure and sizes of
windows and the choice of buffers to display.

** The variable minor-mode-overriding-map-alist allows major modes to
override the key bindings of a minor mode.  The elements of this alist
look like the elements of minor-mode-map-alist: (VARIABLE . KEYMAP).

If the VARIABLE in an element of minor-mode-overriding-map-alist has a
non-nil value, the paired KEYMAP is active, and totally overrides the
map (if any) specified for the same variable in minor-mode-map-alist.

minor-mode-overriding-map-alist is automatically local in all buffers,
and it is meant to be set by major modes.

** The function match-string-no-properties is like match-string
except that it discards all text properties from the result.

** The function load-average now accepts an optional argument
USE-Fsompiled in multibyte mode.

Thus, each lisp file is read in a consistent way regardless of whether
you started Emacs with --unibyte, so that a Lisp program gives
consistent results regardless of how Emacs was started.

** The new function assoc-default is useful for searching an alist,
and using a default value if the key is not found there.  You can
specify a comparison predicate, so this function is useful for
searching comparing a string against an alist of regular expressions.

** The functions unibyte-char-to-multibyte and
multibyte-char-to-unibyte convert between unibyte and multibyte
character codes, in a way that is appropriate for the current language
environment.

** The functions read-event, read-char and read-char-exclusive now
take two optional arguments.  PROMPT, if non-nil, specifies a prompt
string.  SUPPRESS-INPUT-METHOD, if non-nil, says to disable the
current input method for reading this one event.

** Two new variables print-escape-nonascii and print-escape-multibyte
now control whether to output certain characters as
backslash-sequences.  print-escape-nonascii applies to single-byte
non-ASCII characters; print-escape-multibyte applies to multibyte
characters.  Both of these variables are used only when printing
in readable fashion (prin1 uses them, princ does not).

* Lisp changes in Emacs 20.3 before the Emacs Lisp Manual was published

** Compiled Emacs Lisp files made with the modified "MBSK" version
of Emacs 20.2 do not work in Emacs 20.3.

** Buffer positions are now measured in characters, as they were
in Emacs 19 and before.  This means that (forward-char 1)
always increases point by 1.

The function chars-in-region now just subtracts its arguments.  It is
considered obsolete.  The function char-boundary-p has been deleted.

See below for additional changes relating to multibyte characters.

** defcustom, defface and defgroup now accept the keyword `:version'.
Use this to specify in which version of Emacs a certain variable's
default value changed.  For example,

   (defcustom foo-max 34 "*Maximum number of foo's allowed."
     :type 'integer
     :group 'foo
     :version "20.3")

   (defgroup foo-group nil "The foo group."  
     :version "20.3")

If an entire new group is added or the variables 