\f
* Changes in Emacs 21.1
+** Emacs can now support 'wheeled' mice (such as the MS IntelliMouse)
+under XFree86. To enable this, simply put (mwheel-install) in your
+.emacs file.
+
+The variables `mwheel-follow-mouse' and `mwheel-scroll-amount'
+determine where and by how much buffers are scrolled.
+
+** Listing buffers with M-x list-buffers (C-x C-b) now shows
+abbreviated file names. Abbreviations can be customized by changing
+`directory-abbrev-alist'.
+
** Reading from the mini-buffer now reads from standard input if Emacs
is running in batch mode. For example,
** LessTif/Motif file selection dialog.
When Emacs is configured to use LessTif or Motif, reading a file name
-from a menu will pop up a file selection dialog if `use-dialogs' is
+from a menu will pop up a file selection dialog if `use-dialog-box' is
non-nil.
** Emacs can display faces on TTY frames.
Default is 0.25.
+** Changes to hideshow.el
+
+Hideshow is now at version 5.x. It uses a new algorithms for block
+selection and traversal and includes more isearch support.
+
+*** Generalized block selection and traversal
+
+A block is now recognized by three things: its start and end regexps
+(both strings), and a match-data selector (an integer) specifying
+which sub-expression in the start regexp serves as the place where a
+`forward-sexp'-like function can operate. Hideshow always adjusts
+point to this sub-expression before calling `hs-forward-sexp-func'
+(which for most modes evaluates to `forward-sexp').
+
+If the match-data selector is not specified, it defaults to zero,
+i.e., the entire start regexp is valid, w/ no prefix. This is
+backwards compatible with previous versions of hideshow. Please see
+the docstring for variable `hs-special-modes-alist' for details.
+
+*** Isearch support for updating mode line
+
+During incremental search, if Hideshow minor mode is active, hidden
+blocks are temporarily shown. The variable `hs-headline' records the
+line at the beginning of the opened block (preceding the hidden
+portion of the buffer), and the mode line is refreshed. When a block
+is re-hidden, the variable is set to nil.
+
+To show `hs-headline' in the mode line, you may wish to include
+something like this in your .emacs.
+
+ (add-hook 'hs-minor-mode-hook
+ (lambda ()
+ (add-to-list 'mode-line-format 'hs-headline)))
+
+** Changes to Change Log mode
+
+Change Log mode now adds a file's version number to change log entries
+if user-option `change-log-version-info-enabled' is non-nil.
+
+The search for a file's version number is performed based on regular
+expressions from `change-log-version-number-regexp-list' which can be
+cutomized. Version numbers are only found in the first 10 percent of
+a file.
+
+** Changes in Font Lock
+
+*** The new function `font-lock-remove-keywords' can be used to remove
+font-lock keywords from the current buffer or from a specific major
+mode.
+
+** Comint (subshell) changes
+
+Comint now includes new features to send commands to running processes
+and redirect the output to a designated buffer or buffers.
+
+The command M-x comint-redirect-send-command reads a command and
+buffer name from the mini-buffer. The command is sent to the current
+buffer's process, and its output is inserted into the specified buffer.
+
+The command M-x comint-redirect-send-command-to-process acts like
+M-x comint-redirect-send-command but additionally reads the name of
+the buffer whose process should be used from the mini-buffer.
+
+** Changes to Rmail mode
+
+RET is now bound in the Rmail summary to rmail-summary-goto-msg, like
+`j'.
+
** Changes to TeX mode
The default mode has been changed from `plain-tex-mode' to
to show locations in LaTeX documents where a particular entry has
been cited.
+** Emacs Lisp mode now allows multiple levels of outline headings.
+The level of a heading is determined from the number of leading
+semicolons in a heading line. Toplevel forms starting with a `('
+in column 1 are always made leaves.
+
** The M-x time-stamp command (most commonly used on write-file-hooks)
has the following new features:
Custom buffers when you've done with them or just bury them (the
default).
+*** The keyword :set-after in defcustom allows to specify dependencies
+between custom options. Example:
+
+ (defcustom default-input-method nil
+ "*Default input method for multilingual text (a string).
+ This is the input method activated automatically by the command
+ `toggle-input-method' (\\[toggle-input-method])."
+ :group 'mule
+ :type '(choice (const nil) string)
+ :set-after '(current-language-environment))
+
+This specifies that default-input-method should be set after
+current-language-environment even if default-input-method appears
+first in a custom-set-variables statement.
+
** New features in evaluation commands
The commands to evaluate Lisp expressions, such as C-M-x in Lisp
command will copy directories recursively. The default is, do not
copy directories recursively.
+*** In command `dired-do-shell-command' (usually bound to `!') a `?'
+in the shell command has a special meaning similar to `*', but with
+the difference that the command will be run on each file individually.
+
** The variable mail-specify-envelope-from controls whether to
use the -f option when sending mail.
-** In Isearch mode, mouse-2 in the echo area now yanks the current
+** CC mode changes.
+
+Note: This release contains changes that might not be compatible with
+current user setups (although it's believed that these
+incompatibilities will only show in very uncommon circumstances).
+However, since the impact is uncertain, these changes may be rolled
+back depending on user feedback. Therefore there's no forward
+compatibility guarantee wrt the new features introduced in this
+release.
+
+*** New initialization procedure for the style system.
+When the initial style for a buffer is determined by CC Mode (from the
+variable c-default-style), the global values of style variables now
+take precedence over the values specified by the chosen style. This
+is different than the old behavior: previously, the style-specific
+settings would override the global settings. This change makes it
+possible to do simple configuration in the intuitive way with
+Customize or with setq lines in one's .emacs file.
+
+By default, the global value of every style variable is the new
+special symbol set-from-style, which causes the value to be taken from
+the style system. This means that in effect, only an explicit setting
+of a style variable will cause the "overriding" behavior described
+above.
+
+Also note that global settings override style-specific settings *only*
+when the initial style of a buffer is chosen by a CC Mode major mode
+function. When a style is chosen in other ways --- for example, by a
+call like (c-set-style "gnu") in a hook, or via M-x c-set-style ---
+then the style-specific values take precedence over any global style
+values. In Lisp terms, global values override style-specific values
+only when the new second argument to c-set-style is non-nil; see the
+function documentation for more info.
+
+The purpose of these changes is to make it easier for users,
+especially novice users, to do simple customizations with Customize or
+with setq in their .emacs files. On the other hand, the new system is
+intended to be compatible with advanced users' customizations as well,
+such as those that choose styles in hooks or whatnot. This new system
+is believed to be almost entirely compatible with current
+configurations, in spite of the changed precedence between style and
+global variable settings when a buffer's default style is set.
+
+(Thanks to Eric Eide for clarifying this explanation a bit.)
+
+**** c-offsets-alist is now a customizable variable.
+This became possible as a result of the new initialization behavior.
+
+This variable is treated slightly differently from the other style
+variables; instead of using the symbol set-from-style, it will be
+completed with the syntactic symbols it doesn't already contain when
+the style is first initialized. This means it now defaults to the
+empty list to make all syntactic elements get their values from the
+style system.
+
+**** Compatibility variable to restore the old behavior.
+In case your configuration doesn't work with this change, you can set
+c-old-style-variable-behavior to non-nil to get the old behavior back
+as far as possible.
+
+*** Improvements to line breaking and text filling.
+CC Mode now handles this more intelligently and seamlessly wrt the
+surrounding code, especially inside comments. For details see the new
+chapter about this in the manual.
+
+**** New variable to recognize comment line prefix decorations.
+The variable c-comment-prefix-regexp has been added to properly
+recognize the line prefix in both block and line comments. It's
+primarily used to initialize the various paragraph recognition and
+adaptive filling variables that the text handling functions uses.
+
+**** New variable c-block-comment-prefix.
+This is a generalization of the now obsolete variable
+c-comment-continuation-stars to handle arbitrary strings.
+
+**** CC Mode now uses adaptive fill mode.
+This to make it adapt better to the paragraph style inside comments.
+
+It's also possible to use other adaptive filling packages inside CC
+Mode, notably Kyle E. Jones' Filladapt mode (http://wonderworks.com/).
+A new convenience function c-setup-filladapt sets up Filladapt for use
+inside CC Mode.
+
+Note though that the 2.12 version of Filladapt lacks a feature that
+causes it to work suboptimally when c-comment-prefix-regexp can match
+the empty string (which it commonly does). A patch for that is
+available from the CC Mode web site (http://www.python.org/emacs/
+cc-mode/).
+
+**** It's now possible to selectively turn off auto filling.
+The variable c-ignore-auto-fill is used to ignore auto fill mode in
+specific contexts, e.g. in preprocessor directives and in string
+literals.
+
+**** New context sensitive line break function c-context-line-break.
+It works like newline-and-indent in normal code, and adapts the line
+prefix according to the comment style when used inside comments. If
+you're normally using newline-and-indent, you might want to switch to
+this function.
+
+*** Fixes to IDL mode.
+It now does a better job in recognizing only the constructs relevant
+to IDL. E.g. it no longer matches "class" as the beginning of a
+struct block, but it does match the CORBA 2.3 "valuetype" keyword.
+Thanks to Eric Eide.
+
+*** Improvements to the Whitesmith style.
+It now keeps the style consistently on all levels and both when
+opening braces hangs and when they don't.
+
+**** New lineup function c-lineup-whitesmith-in-block.
+
+*** New lineup functions c-lineup-template-args and c-indent-multi-line-block.
+See their docstrings for details. c-lineup-template-args does a
+better job of tracking the brackets used as parens in C++ templates,
+and is used by default to line up continued template arguments.
+
+*** c-lineup-comment now preserves alignment with a comment on the
+previous line. It used to instead preserve comments that started in
+the column specified by comment-column.
+
+*** c-lineup-C-comments handles "free form" text comments.
+In comments with a long delimiter line at the start, the indentation
+is kept unchanged for lines that start with an empty comment line
+prefix. This is intended for the type of large block comments that
+contain documentation with its own formatting. In these you normally
+don't want CC Mode to change the indentation.
+
+*** The `c' syntactic symbol is now relative to the comment start
+instead of the previous line, to make integers usable as lineup
+arguments.
+
+*** All lineup functions have gotten docstrings.
+
+*** More preprocessor directive movement functions.
+c-down-conditional does the reverse of c-up-conditional.
+c-up-conditional-with-else and c-down-conditional-with-else are
+variants of these that also stops at "#else" lines (suggested by Don
+Provan).
+
+*** Minor improvements to many movement functions in tricky situations.
+
+** Isearch changes
+
+*** In Isearch mode, mouse-2 in the echo area now yanks the current
selection into the search string rather than giving an error.
+*** There is a new lazy highlighting feature in incremental search.
+
+Lazy highlighting is switched on/off by customizing variable
+`isearch-lazy-highlight'. When active, all matches for the current
+search string are highlighted. The current match is highlighted as
+before using face `isearch' or `region'. All other matches are
+highlighted using face `isearch-lazy-highlight-face' which defaults to
+`secondary-selection'.
+
+The extra highlighting makes it easier to anticipate where the cursor
+will end up each time you press C-s or C-r to repeat a pending search.
+Highlighting of these additional matches happens in a deferred fashion
+using "idle timers," so the cycles needed do not rob isearch of its
+usual snappy response.
+
+If `isearch-lazy-highlight-cleanup' is set to t, highlights for
+matches are automatically cleared when you end the search. If it is
+set to nil, you can remove the highlights manually with `M-x
+isearch-lazy-highlight-cleanup'.
+
+
** Ange-ftp allows you to specify of a port number in remote file
names cleanly. It is appended to the host name, separated by a hash
sign, e.g. `/foo@bar.org#666:mumble'. (This syntax comes from EFS.)
*** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is
for PSWrap.
+** Changes in etags.el
+
+*** You can display additional output with M-x tags-apropos by setting
+the new variable tags-apropos-additional-actions.
+
+If non-nil, the variable's value should be a list of triples (TITLE
+FUNCTION TO-SEARCH). For each triple, M-x tags-apropos processes
+TO-SEARCH and lists tags from it. TO-SEARCH should be an alist,
+obarray, or symbol. If it is a symbol, the symbol's value is used.
+
+TITLE is a string to use to label the list of tags from TO-SEARCH.
+
+FUNCTION is a function to call when an entry is selected in the Tags
+List buffer. It is called with one argument, the selected symbol.
+
+A useful example value for this variable might be something like:
+
+ '(("Emacs Lisp" Info-goto-emacs-command-node obarray)
+ ("Common Lisp" common-lisp-hyperspec common-lisp-hyperspec-obarray)
+ ("SCWM" scwm-documentation scwm-obarray))
+
+*** The face tags-tag-face can be used to customize the appearance
+of tags in the output of M-x tags-apropos.
+
+*** Setting tags-apropos-verbose to a non-nil value displays the
+names of tags files in the *Tags List* buffer.
+
** Emacs now attempts to determine the initial language environment
and preferred and locale coding systems systematically from the
LC_ALL, LC_CTYPE, and LANG environment variables during startup.
(Celtic) and 8859-15 (updated Latin-1, with the Euro sign). There is
currently no specific input method support for them.
+** Fortran mode has a new command `fortran-strip-sqeuence-nos' to
+remove text past column 72. The syntax class of `\' in Fortran is now
+appropriate for C-style escape sequences in strings.
+
+** SGML mode's default `sgml-validate-command' is now `nsgmls'.
+
+** A new command `view-emacs-problems' (C-h P) displays the PROBLEMS file.
+
** New modes and packages
+*** bs.el is a new package for buffer selection similar to
+list-buffers or electric-buffer-list. Use M-x bs-show to display a
+buffer menu with this package. You can use M-x bs-customize to
+customize the package.
+
+*** The minor modes cwarn-mode and global-cwarn-mode highlights
+suspicious C and C++ constructions. Currently, assignments inside
+expressions, semicolon following `if', `for' and `while' (except, of
+course, after a `do .. while' statement), and C++ functions with
+reference parameters are recognized. The modes require font-lock mode
+to be enabled.
+
*** 5x5.el is a simple puzzle game.
*** hl-line.el provides a minor mode to highlight the current line.
*** elide-head.el provides a mechanism for eliding boilerplate header
text.
+*** footnote.el provides `footnote-mode', a minor mode supporting use
+of footnotes. It is intended for use with Message mode, but isn't
+specific to Message mode.
+
+*** diff-mode.el provides `diff-mode', a major mode for
+viewing/editing context diffs (patches). It is selected for files
+with extension `.diff', `.diffs', `.patch' and `.rej'.
+
** Withdrawn packages
*** mldrag.el has been removed. mouse.el provides the same
functionality with aliases for the mldrag functions.
*** eval-reg.el has been obsoleted by changes to edebug.el.
-
-** Not new, but not mentioned before:
-M-w when Transient Mark mode is enabled disables the mark.
-
\f
* Lisp changes in Emacs 21.1 (see following page for display-related features)
When you add a new item, please add it without either +++ or ---
so I will know I still need to look at it -- rms.
+** If an abbrevs has only a hook, and that hooks has a non-nil
+`no-self-insert' property, the return value of the hook specifies
+whether an expansion has been done or not. If it returns nil, no
+expansion has been performed. The character leading to the call of
+the hook will then be self-inserted.
+
+** The function `intern-soft' now accepts a symbol as first argument.
+In this case, that exact symbol is looked up in the specified obarray,
+and the function's value is nil if it is not found.
+
+** The new macro `with-syntax-table' can be used to evaluate forms
+with the syntax table of the current buffer temporarily set to a
+specified table.
+
+ (with-syntax-table TABLE &rest BODY)
+
+Evaluate BODY with syntax table of current buffer set to a copy of
+TABLE. The current syntax table is saved, BODY is evaluated, and the
+saved table is restored, even in case of an abnormal exit. Value is
+what BODY returns.
+
** The optional argument BUFFER of function file-local-copy has been
removed since it wasn't used by anything.
The new variable `locale-coding-system' specifies how to encode and
decode strings passed to low-level message functions like strerror and
-time functions like strftime. The new variables `messages-locale' and
-`time-locale' give the system locales to be used during the next
-invocations of these two types of functions; the new variables
-`previous-messages-locale' and `previous-time-locale' give the locales
-most recently used.
+time functions like strftime. The new variables
+`system-messages-locale' and `system-time-locale' give the system
+locales to be used when invoking these two types of functions.
The new function `set-locale-environment' sets the language
environment, preferred coding system, and locale coding system from
the system locale as specified by the LC_ALL, LC_CTYPE, and LANG
-environment variables. It is normally invoked during startup. It
-uses the new variables `locale-language-names',
-`locale-charset-language-names', and `locale-preferred-coding-systems'
-to make its decisions.
+environment variables. Normally, it is invoked during startup and need
+not be invoked thereafter. It uses the new variables
+`locale-language-names', `locale-charset-language-names', and
+`locale-preferred-coding-systems' to make its decisions.
** syntax tables now understand nested comments.
To declare a comment syntax as allowing nesting, just add an `n'
Other properties are ignored.
** `multimedia' is a new Finder keyword and Custom group.
+
+** keywordp is a new predicate to test efficiently for an object being
+a keyword symbol.
\f
* New Lisp-level Display features in Emacs 21.1
+++
** Support functions for colors on text-only terminals.
-The function `face-register-tty-color' can be used to define colors
-for use on TTY frames. It maps a color name to a color number on the
-terminal. Emacs defines a couple of default color mappings by
+The function `tty-color-define' can be used to define colors for use
+on TTY and MSDOS frames. It maps a color name to a color number on
+the terminal. Emacs defines a couple of common color mappings by
default. You can get defined colors with a call to
-`tty-defined-colors'. The function `face-clear-tty-colors' can be
+`defined-colors'. The function `tty-color-clear' can be
used to clear the mapping table.
+** Unified support for colors independent of frame type.
+
+The new functions `defined-colors', `color-defined-p', `color-values',
+and `display-color-p' work for any type of frame. On frames whose
+type is neither x nor w32, these functions transparently map X-style
+color specifications to the closest colors supported by the frame
+display. Lisp programs should use these new functions instead of the
+old `x-defined-colors', `x-color-defined-p', `x-color-values', and
+`x-display-color-p'. (The old function names are still available for
+compatibility; they are now aliases of the new names.) Lisp programs
+should no more look at the value of the variable window-system to
+modify their color-related behavior.
+
+The primitives `color-gray-p' and `color-supported-p' also work for
+any frame type.
+
+++
** The minibuffer prompt is now actually inserted in the minibuffer.
building images from data. When this is done, no `:file' property
may be present in the image specification.
+`:data DATA'
+
+Get image data from DATA. (As of this writing, this is not yet
+supported for image type `postscript'). Either :file or :data may be
+present in an image specification, but not both. All image types
+support strings as DATA, some types allow additional types of DATA.
+
*** Supported image types
**** XBM, image type `xbm'.
XPM images can be built from memory instead of files. In that case,
add a `:data' property instead of a `:file' property.
-`:data DATA'
-
-DATA must be a string containing an XPM image. The contents of the
-string are of the same format as that of XPM files.
-
The XPM library uses libz in its implementation so that it is able
to display compressed images.
**** JPEG, image type `jpeg'
Support for JPEG images requires the external library `libjpeg',
-package `jpegsrc.v6a.tar.gz', or later. There are no additional image
-properties defined.
+package `jpegsrc.v6a.tar.gz', or later. Additional image properties
+are:
**** TIFF, image type `tiff'
(defun display-anim (buffer file idx max first-time)
(when (= idx max)
(setq idx 0))
- (let ((img (create-image file nil :index idx)))
+ (let ((img (create-image file nil nil :index idx)))
(save-excursion
(set-buffer buffer)
(goto-char (point-min))
Likewise, an attempt to split a fixed-height window vertically,
or a fixed-width window horizontally results in a error.
+^L
+* 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.
\f
* Changes in Emacs 20.4