This file is about changes in Emacs version 25.
+See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.24, NEWS.23, NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18,
and NEWS.1-17 for changes in older Emacs versions.
+++
** Building Emacs now requires C99 or later.
++++
** Building Emacs now requires GNU make, version 3.81 or later.
++++
** New configure option --with-cairo.
-Maybe add text based on http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00689.html
+This builds Emacs with Cairo drawing. As a side effect, it provides
+support for built-in printing, when Emacs was built with GTK+.
+
+** New configure option --with-modules.
+This enables support for loading dynamic modules; see below.
+---
** By default, Emacs no longer works on IRIX. We expect that Emacs
users are not affected by this, as SGI stopped supporting IRIX in
December 2013. If you are affected, please send a bug report. You
undumping code to GCC under IRIX, or by configuring --with-wide-int,
or by sticking with Emacs 24.4.
+---
+** The Emacs garbage collector assumes GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS.
+The GC_MAKE_GCPROS_NOOPS stack-marking variant has been the default
+since Emacs 24.4, and the other variants were undocumented and were
+obstacles to maintenance and development. GC_MARK_STACK and its
+related symbols have been removed from the C internals.
+
+---
** 'configure' now prefers gnustep-config when configuring GNUstep.
If gnustep-config is not available, the old heuristics are used.
+---
+** 'configure' now prefers inotify to gfile for file notification,
+unless gfile is explicitly requested via --with-file-notification='gfile'.
+
---
** The configure option '--with-pkg-config-prog' has been removed.
Use './configure PKG_CONFIG=/full/name/of/pkg-config' if you need to.
This affects only the 'movemail' utility; Emacs itself can still
process MMDF-format files as before.
++++
** The configure option '--enable-silent-rules' is now the default,
and silent rules are now quieter. To get the old behavior where
'make' chatters a lot, configure with '--disable-silent-rules' or
It has no particular connection to Emacs and has not changed in years,
so if you want to use it, you can always take a copy from an older Emacs.
+---
+** Emacs 25 comes with a new set of icons.
+Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
+The old Emacs logo icons are available as `emacs23.png' in the same location.
+
\f
* Startup Changes in Emacs 25.1
and *Buffer List*. This makes Emacs convenient to use from the
command line when `initial-buffer-choice' is non-nil.
++++
+** The value of ‘initial-scratch-message’ is now treated as a doc string
+and can contain escape sequences for command keys, quotes, and the like.
+
\f
* Changes in Emacs 25.1
-** New doc command `describe-symbol'. Works for functions, vars, faces, etc...
-
-** `isearch' and `query-replace' now perform character folding in matches.
-This is analogous to case-folding, but applies between Unicode
-characters and their ASCII counterparts. This means many characters
-will match entire groups of characters.
-
-For instance, the " will match all variants of unicode double quotes
-(like “ and ”), and the letter a will match all of its accented
-cousins, even those composed of multiple characters, as well as many
-other symbols like ℀, ℁, ⒜, and ⓐ.
-
-** New function `character-folded-regexp' can be used
-by searching commands to produce a a regexp matching anything that
-character-folds into STRING.
++++
+** Any file of the form .dir-locals*.el is now considered a dir-local
+file, and multiple such files can be used in the same directory. See
+the variable `dir-locals-file' for more information.
-** New command `checkdoc-package-keywords' checks if the
-current package keywords are recognized. Set the new option
-`checkdoc-package-keywords-flag' to non-nil to make
-`checkdoc-current-buffer' call this function automatically.
+---
+** `xref-find-definitions' and `describe-function' now display
+information about mode local overrides (defined by cedet/mode-local.el
+`define-overloadable-function' `define-mode-local-overrides').
-** New function `checkdoc-file' checks for style errors.
-It's meant for use together with `compile':
-emacs -batch --eval "(checkdoc-file \"subr.el\")"
++++
+** New `display-buffer' action function `display-buffer-use-some-frame'.
+This displays the buffer in an existing frame other than the current
+frame, and allows the caller to specify a frame predicate to exclude
+frames.
-** New command `comment-line' bound to `C-x C-;'.
++++
+** New documentation command `describe-symbol'.
+Works for functions, variables, faces, etc. It is bound to `C-h o' by
+default.
** New function `custom-prompt-customize-unsaved-options' checks for
unsaved customizations and prompts user to customize (if found).
** C-h l now also lists the commands that were run.
----
-** The new M-s M-w key binding uses eww to search the web for the
-text in the region.
-
** M-x suggests shorthands and ignores obsolete commands for completion.
** x-select-enable-clipboard is renamed select-enable-clipboard.
x-select-enable-primary and renamed select-enable-primary.
which specifies an alternative printing method which is faster when
few or no entries have changed.
+** Emacs can now load shared/dynamic libraries (modules).
+A dynamic Emacs module is a shared library that provides additional
+functionality for use in Emacs Lisp programs, just like a package
+written in Emacs Lisp would. The functions `load', `require',
+`load-file', etc. were extended to load such modules, as they do with
+Emacs Lisp packages. The new variable `module-file-suffix' holds the
+system-dependent value of the file-name extension (`.so' on Posix
+hosts) of the module files.
+
+A module should export a C-callable function named
+`emacs_module_init', which Emacs will call as part of the call to
+`load' or `require' which loads the module. It should also export a
+symbol named `plugin_is_GPL_compatible' to indicate that its code is
+released under the GPL or compatible license; Emacs will refuse to
+load modules that don't export such a symbol.
+
+If a module needs to call Emacs functions, it should do so through the
+API defined and documented in the header file `emacs-module.h'. Note
+that any module that provides Lisp-callable functions will have to use
+Emacs functions such as `fset' and `funcall', in order to register its
+functions with the Emacs Lisp interpreter.
+
+Modules can create `user-ptr' Lisp objects that embed pointers to C
+struct's defined by the module. This is useful for keeping around
+complex data structures created by a module, to be passed back to the
+module's functions. User-ptr objects can also have associated
+"finalizers" -- functions to be run when the object is GC'ed; this is
+useful for freeing any resources allocated for the underlying data
+structure, such as memory, open file descriptors, etc. A new
+predicate `user-ptr-p' returns non-nil if its argument is a `usr-ptr'
+object.
+
+Loadable modules in Emacs are an experimental feature, and subject to
+change in future releases. For that reason, their support is disabled
+by default, and must be enabled by using the `--with-modules' option
+at configure time.
+
+** New input method: `tamil-dvorak'.
+
\f
* Editing Changes in Emacs 25.1
** Successive single-char deletions are collapsed in the undo-log just like
successive char insertions.
++++
+** New command `comment-line' bound to `C-x C-;'.
+
** Unicode names entered via C-x 8 RET now use substring completion by default.
** C-x 8 now has shorthands for these chars: ‐ ‑ ‒ – — ― ‘ ’ “ ” † ‡ • ′ ″
€ № ← → ↔ − ≈ ≠ ≤ ≥. As before, you can type C-x 8 C-h to list shorthands.
-** New minor mode electric-quote-mode for quoting ‘like this’ and “like this”.
+** New minor mode electric-quote-mode for quoting ‘like this’ and “like this”
+as you type. See also the new variable ‘text-quoting-style’.
** New minor mode global-eldoc-mode is enabled by default.
\f
* Changes in Specialized Modes and Packages in Emacs 25.1
+** Checkdoc
+
++++
+*** New command `checkdoc-package-keywords' checks if the
+current package keywords are recognized. Set the new option
+`checkdoc-package-keywords-flag' to non-nil to make
+`checkdoc-current-buffer' call this function automatically.
+
++++
+*** New function `checkdoc-file' checks for style errors.
+It's meant for use together with `compile':
+emacs -batch --eval "(checkdoc-file \"subr.el\")"
+
+** New function `bookmark-set-no-overwrite' bound to C-x r M.
+It raises an error if a bookmark of that name already exists,
+unlike `bookmark-set' which silently updates an existing bookmark.
+
+** JSON
+---
+*** `json-pretty-print' and `json-pretty-print-buffer' now maintain
+the ordering of object keys by default.
+---
+*** New commands `json-pretty-print-ordered' and
+`json-pretty-print-buffer-ordered' pretty prints JSON objects with
+object keys sorted alphabetically.
+
+** You can recompute the VC state of a file buffer with `M-x vc-refresh-state'
** Prog mode has some support for multi-mode indentation.
See `prog-indentation-context' and `prog-widen'.
+** Prettify Symbols mode
+*** Prettify Symbols mode supports custom composition predicates. By
+overriding the default `prettify-symbols-compose-predicate', modes can
+specify in which contexts a symbol map be composed to some unicode
+character. `prettify-symbols-default-compose-p' is the default which
+is suitable for most programming languages such as C or Lisp (but not
+(La)TeX).
+
+*** Symbols can be unprettified while point is inside them.
+New variable `prettify-symbols-unprettify-at-point' configures this.
+
** New `xterm-screen-extra-capabilities' config.
** The `save-place' variable is replaced by a `save-place-mode'.
** ERC
-*** Hide message types by network or channel. `erc-hide-list' will
+*** Hide message types by network or channel. `erc-hide-list' will
hide all messages of the specified type, where `erc-network-hide-list'
and `erc-channel-hide-list' will only hide the specified message types
for the respective specified targets.
*** If a package is available on multiple archives and one has higher
priority (as per `package-archive-priorities') only that one is
-listed. This can be configured with `package-menu-hide-low-priority'.
+listed. This can be configured with `package-menu-hide-low-priority'.
*** `package-menu-toggle-hiding' now toggles the hiding of packages.
This includes the above-mentioned low-priority packages, as well as
*** New custom variable `package-selected-packages' tracks packages
which were installed by the user (as opposed to installed as
-dependencies). This variable can also be manually customized.
+dependencies). This variable can also be manually customized.
*** New command `package-install-user-selected-packages' installs all
packages from `package-selected-packages' which are currently missing.
(add-to-list 'display-buffer-alist
'("^\\*shell\\*$" . (display-buffer-same-window))).
-
** EIEIO
+++
*** The `:protection' slot option is not obeyed any more.
** Search and Replace
++++
+*** New user option `search-default-regexp-mode'
+specifies the default mode for I-search.
+
++++
+*** `isearch' and `query-replace' can now perform character folding in matches.
+Isearch does that by default, while `query-replace' will do that if
+the new variable `replace-character-fold' is customized to a non-nil
+value. This is analogous to case folding, but instead of disregarding
+case variants, it disregards wider classes of distinctions between
+similar characters. (Case folding is a special case of character
+folding.) This means many characters in the search string will match
+entire groups of characters instead of just themselves.
+
+For instance, the " will match all variants of double quotes (like “
+and ”), and the letter a will match all of its accented cousins, even
+those composed of multiple characters, as well as many other symbols
+like ℀, ℁, ⒜, and ⓐ.
+
++++
+*** New function `character-fold-to-regexp' can be used
+by searching commands to produce a regexp matching anything that
+character-folds into STRING.
+
++++
+*** The new M-s M-w key binding uses eww to search the web for the
+text in the region. The search engine to use for this is specified by
+the customizable variable `eww-search-prefix'.
+
++++
*** Query-replace history is enhanced.
When query-replace reads the FROM string from the minibuffer, typing
`M-p' will now show previous replacements as "FROM SEP TO", where FROM
*** If `quick-calc' is called with a prefix argument, insert the
result of the calculation into the current buffer.
++++
+** In Edebug, you can now set the initial mode with C-x C-a C-m. With
+this you can tell Edebug not to stop at the start of the first
+instrumented function.
+
** ElDoc
*** New minor mode `global-eldoc-mode'
*** `eldoc-documentation-function' now defaults to `ignore'
** cl-lib
*** New functions cl-fresh-line, cl-digit-char-p and cl-parse-integer.
-** seq
-*** New seq library:
-The seq library adds sequence manipulation functions and macros that
-complement basic functions provided by subr.el. All functions are
-prefixed with `seq-' and work on lists, strings and vectors.
-
-** map
-*** New map library:
-The map library provides map-manipulation functions that work on alists,
-hash-table and arrays. All functions are prefixed with "map-".
-
** Calendar and diary
+++
*** The option `calendar-mode-line-format' can now be nil,
which means to do nothing special with the mode line in calendars.
++++
+*** New option `calendar-weekend-days'.
+The option customizes which day headers receive the
+`calendar-weekend-header' face.
+
+---
+*** New optional args N and STRING for ‘holiday-greek-orthodox-easter’.
+
---
*** Many items obsolete since at least version 23.1 have been removed.
The majority were function/variable/face aliases, too numerous to list here.
** SES now supports local printer functions; see `ses-define-local-printer'.
-** In sh-mode, you can now use `sh-shell' as a file-local variable to
+** sh-script
+*** In sh-mode you can now use `sh-shell' as a file-local variable to
specify the type of shell in use (bash, csh, etc).
+*** New value `always' for sh-indent-after-continuation.
+This provides old-style ("dumb") indentation of continued lines.
+
** TLS
---
*** Fatal TLS errors are now silent by default.
** Tramp
++++
+*** New connection method "afp", which allows to access Mac OS X
+volumes via the Apple Filing Protocol.
+
++++
*** New connection method "nc", which allows to access dumb busyboxes.
++++
+*** Method-specific parameters can be overwritten now with variable
+`tramp-connection-properties'.
+
+---
+*** Handler for `file-notify-valid-p' for remote machines that support
+filesystem notifications.
+
** SQL mode
*** New user variable `sql-default-directory' enables remote
interactive macro evaluation and automatic scanning of #defined symbols.
*** New custom variable `hide-ifdef-header-regexp' to define C/C++ header file
-name patterns. Default case-insensitive .h, .hh, .hpp and .hxx.
+name patterns. Default case-insensitive .h, .hh, .hpp, .hxx, and .h++.
*** New custom variable `hide-ifdef-expand-reinclusion-protection' to prevent
reinclusion protected header files from being fully hidden.
*** New custom variable `hide-ifdef-exclude-define-regexp' to define symbol
-name patterns (e.x. all "FOR_DOXYGEN_ONLY_*") to be excluded.
+name patterns (e.g. all "FOR_DOXYGEN_ONLY_*") to be excluded.
** TeX mode
*** New custom variable `tex-print-file-extension' to help users who
use PDF instead of DVI.
+*** TeX mode now supports Prettify Symbols mode. When enabling
+`prettify-symbols-mode' in a tex-mode buffer, \alpha ... \omega, and
+many other math macros are displayed using unicode characters.
+
** whitespace-mode: new 'big-indent style highlighting too much indentation.
By default, 32 spaces and four TABs are considered to be too much but
`whitespace-big-indent-regexp' can be configured to change that.
allow overriding the regular expression that recognizes the ldapsearch
command line's password prompt.
+EUDC's BBDB backend now supports BBDB 3.
+
** Eshell
+++
** tar-mode: new `tar-new-entry' command, allowing for new members to
be added to the archive.
+---
** Autorevert: dired buffers are also auto-reverted via file
notifications, if Emacs is compiled with file notification support.
+** File Notifications
+
++++
+*** The new event `stopped' signals, that a file notification watch is
+not active any longer.
+
++++
+*** The new function `file-notify-valid-p' checks, whether a file
+notification descriptor still corresponds to an activate watch.
+
+** Dired
+
++++
+*** The command `dired-do-compress' bound to `Z' now can compress
+directories and decompress zip files.
+
++++
+*** New command `dired-do-compress-to' bound to `c' can be used to
+compress many marked files into a single named archive. The
+compression command is determined from the new
+`dired-compress-files-alist' variable.
+
** Obsolete packages
---
*** landmark.el (moved to elpa.gnu.org)
-+++
-** The character classes [:graph:] and [:print:] in regular expressions
-no longer match every multibyte character. Instead, Emacs now
-consults the Unicode character properties to determine which
-characters are graphic or printable. In particular, surrogates and
-unassigned codepoints are now rejected. If you want the old behavior,
-use [:multibyte:] instead.
-
\f
* New Modes and Packages in Emacs 25.1
forbidden by Czech and Polish typography (and may be discouraged in
other languages), so `auto-tildify-mode' makes it easier to create
a typographically-correct documents.
+
+** The `seq' library adds sequence manipulation functions and macros
+that complement basic functions provided by subr.el. All functions
+are prefixed with `seq-' and work on lists, strings and vectors.
+
+** The `map' library provides map-manipulation functions that work on
+alists, hash-table and arrays. All functions are prefixed with
+`map-'.
+
+** The `thunk' library provides functions and macros to control the
+evaluation of forms.
+
+** js-jsx-mode (a minor variant of js-mode) provides indentation
+support for JSX, an XML-like syntax extension to ECMAScript.
+
\f
* Incompatible Lisp Changes in Emacs 25.1
+---
+** `setq' and `setf' must now be called with an even number of
+arguments. The earlier behavior of silently supplying a nil to the
+last variable when there was an odd number of arguments has been
+eliminated.
+
+** `syntax-begin-function' is declared obsolete.
+Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
+slot in font-lock-defaults.
+
++++
+** `package-initialize' now sets `package-enable-at-startup' to nil if
+called during startup. Users who call this function in their init
+file and still expect it to be run after startup should set
+`package-enable-at-startup' to t after the call to
+`package-initialize'.
+
** `:global' minor mode use `setq-default' rather than `setq'.
This means that you can't use `make-local-variable' and expect them to
"magically" become buffer-local.
denied" instead of "permission denied". The old behavior was problematic
in languages like German where downcasing rules depend on grammar.
++++
+** New variable ‘text-quoting-style’ to control how Emacs translates quotes.
+Set it to ‘curve’ for curved single quotes ‘like this’, to ‘straight’
+for straight apostrophes 'like this', and to ‘grave’ for grave accent
+and apostrophe `like this'. The default value nil acts like ‘curve’
+if curved single quotes are displayable, and like ‘grave’ otherwise.
+The new variable affects display of diagnostics and help, but not of info.
+
++++
** substitute-command-keys now replaces quotes.
-That is, it replaces left single quotation marks (‘) by left quotes
-and right single quotation marks (’) by right quotes. It also
-replaces grave accents by left quotes, and apostrophes that match
-grave accents by right quotes. As before, isolated apostrophes and
-characters preceded by \= are output as-is. Left and right quotes are
-determined by new custom variable ‘help-quote-translation’. ?‘ means
-quote ‘like this’, ?' means quote 'like this', ?` means quote `like
-this', and nil (default) means quote ‘like this’ if displayable and
-'like this' otherwise.
+That is, it converts documentation strings’ quoting style as per the
+value of ‘text-quoting-style’. Doc strings in source code can use
+either curved single quotes or grave accents and apostrophes. As
+before, characters preceded by \= are output as-is.
+
++++
+** Message-issuing functions ‘error’, ‘message’, etc. now convert quotes.
+They use the new ‘format-message’ function instead of plain ‘format’,
+so that they now follow user preference as per ‘text-quoting-style’
+when processing curved single quotes, grave accents, and apostrophes
+in their format argument.
+++
** The character classes [:alpha:] and [:alnum:] in regular expressions
If you want the old behavior where they matched any character with
word syntax, use `\sw' instead.
++++
+** The character classes [:graph:] and [:print:] in regular expressions
+no longer match every multibyte character. Instead, Emacs now
+consults the Unicode character properties to determine which
+characters are graphic or printable. In particular, surrogates and
+unassigned codepoints are now rejected. If you want the old behavior,
+use [:multibyte:] instead.
+
+++
** The `diff' command uses the unified format now. To restore the old
behavior, set `diff-switches' to `-c'.
-** `grep-template' and `grep-find-template' values don't include the
---color argument anymore. It's added at the <C> place holder position
-dynamically.
-
** `grep-template' and `grep-find-template' values don't include the
--color argument anymore. It's added at the <C> place holder position
dynamically. Any third-party code that changes these templates should
be updated accordingly.
++++
+** ‘(/ N)’ is now equivalent to ‘(/ 1 N)’ rather than to ‘(/ N 1)’.
+The new behavior is compatible with Common Lisp and with XEmacs.
+This change does not affect Lisp code intended to be portable to
+Emacs 24.2 and earlier, which did not support unary ‘/’.
+
++++
+** The `default-directory' value doesn't have to end slash. To make
+that happen, `unhandled-file-name-directory' now defaults to calling
+`file-name-as-directory'.
+
\f
* Lisp Changes in Emacs 25.1
+** syntax-propertize is now automatically called on-demand during forward
+parsing functions like `forward-sexp'.
+
+** New hooks prefix-command-echo-keystrokes-functions and
+prefix-command-preserve-state-hook, to allow the definition of prefix
+commands other than the predefined C-u.
+
** New functions `filepos-to-bufferpos' and `bufferpos-to-filepos'.
** The default value of `load-read-function' is now `read'.
*** New macros `thread-first' and `thread-last' allow threading a form
as the first or last argument of subsequent forms.
++++
** Documentation strings now support quoting with curved single quotes
‘like-this’ in addition to the old style with grave accent and
apostrophe `like-this'. The new style looks better on today's displays.
In the new Electric Quote mode, you can enter curved single quotes
into documentation by typing ` and '. Outside Electric Quote mode,
you can enter them by typing ‘C-x 8 [’ and ‘C-x 8 ]’, or (if your Alt
-key works) by typing ‘A-[’ and ‘A-]’.
+key works) by typing ‘A-[’ and ‘A-]’. As described above under
+‘text-quoting-style’, the user can specify how to display doc string
+quotes.
+
++++
+** New function ‘format-message’ is like ‘format’ and also converts
+curved single quotes, grave accents and apostrophes as per
+‘text-quoting-style’.
+
++++
+** show-help-function's arg is converted via substitute-command-keys
+before being passed to the function. Help strings, help-echo
+properties, etc. can therefore contain command key escapes and
+quotation marks.
+++
** Time-related changes:
+*** Time conversion functions now accept an optional ZONE argument
+that specifies the time zone rules for conversion. ZONE is omitted or
+nil for Emacs local time, t for Universal Time, ‘wall’ for system wall
+clock time, or a string as in ‘set-time-zone-rule’ for a time zone
+rule. The affected functions are ‘current-time-string’,
+‘current-time-zone’, ‘decode-time’, and ‘format-time-string’. The
+function ‘encode-time’, which already accepted a simple time zone rule
+argument, has been extended to accept all the new forms.
+
*** Time-related functions now consistently accept numbers
(representing seconds since the epoch) and nil (representing the
current time) as well as the usual list-of-integer representation.
** New function `set-binary-mode' allows to switch a standard stream
of the Emacs process to binary I/O mode.
-** In locales that cannot display curved quotes, ASCII approximations
-are installed in standard-display-table.
+** ASCII approximations to curved quotes are put in standard-display-table
+if the terminal cannot display curved quotes.
** Standard output and error streams now transliterate characters via
standard-display-table, and encode output using locale-coding-system.
*** New buffer-local variables `horizontal-scroll-bar' and
`scroll-bar-height'.
++++
+** New functions `frame-geometry' and `frame-edges' give access to a
+frame's geometry.
+
++++
+** New functions `mouse-absolute-pixel-position' and
+`set-mouse-absolute-pixel-position' get/set screen coordinates of the
+mouse cursor.
+
++++
+** The function `window-edges' now accepts three additional arguments to
+retrieve body, absolute and pixel edges of the window.
+
++++
+** The functions `window-inside-edges', `window-inside-pixel-edges' and
+`window-inside-absolute-pixel-edges' have been renamed to respectively
+`window-body-edges', `window-body-pixel-edges' and
+`window-absolute-body-pixel-edges'. The old names are kept as aliases.
+
++++
+** New function `window-absolute-pixel-position' to get the screen
+coordinates of a visible buffer position.
+
+++
** The height of a frame's menu and tool bar are no longer counted in the
frame's text height. This means that the text height stands only for
how `switch-to-buffer' proceeds interactively when the selected window
is strongly dedicated to its buffer.
++++
+** The option `even-window-heights' has been renamed to
+`even-window-sizes' and now handles window widths as well.
+
** Tearoff menus and detachable toolbars for Gtk+ has been removed.
Those features have been deprecated in Gtk+ for a long time.
\f
* Changes in Emacs 25.1 on Non-Free Operating Systems
+---
+** MS-Windows specific Emacs build scripts are no longer in the distribution
+This includes the makefile.w32-in files in various subdirectories, and
+the support files. The file nt/configure.bat now just tells the user
+to use the procedure described in nt/INSTALL, by running the Posix
+`configure' script in the top-level directory.
+
---
** Building Emacs for MS-Windows requires at least Windows XP
or Windows Server 2003. The built binaries still run on all versions