GNU Emacs NEWS -- history of user-visible changes.

Copyright (C) 2017-2018 Free Software Foundation, Inc.
See the end of the file for license conditions.

Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
If possible, use M-x report-emacs-bug.

This file is about changes in Emacs version 27.

See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.26, NEWS.25, ..., NEWS.18, and NEWS.1-17 for changes
in older Emacs versions.

You can narrow news to a specific version by calling 'view-emacs-news'
with a prefix argument or by typing C-u C-h C-n.

Temporary note:
+++ indicates that all necessary documentation updates are complete.
    (This means all relevant manuals in doc/ AND lisp doc-strings.)
--- means no change in the manuals is needed.
When you add a new item, use the appropriate mark if you are sure it applies,


* Installation Changes in Emacs 27.1

** The new configure option '--with-json' adds support for JSON using
the Jansson library.  It is on by default; use 'configure
--with-json=no' to build without Jansson support.  The new JSON
functions 'json-serialize', 'json-insert', 'json-parse-string', and
'json-parse-buffer' are typically much faster than their Lisp
counterparts from json.el.

** Emacs has been ported to the -fcheck-pointer-bounds option of GCC.
This causes Emacs to check bounds of some arrays addressed by its
internal pointers, which can be helpful when debugging the Emacs
interpreter or modules that it uses.  If your platform supports it you
can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2
-mmpx -fcheck-pointer-bounds"' on Intel MPX platforms.

** Emacs now normally uses a C pointer type instead of a C integer
type to implement Lisp_Object, which is the fundamental machine word
type internal to the Emacs Lisp interpreter.  This change aims to
catch typos and support -fcheck-pointer-bounds.  The 'configure'
option --enable-check-lisp-object-type is therefore no longer as
useful and so is no longer enabled by default in developer builds,
to reduce differences between developer and production builds.


* Startup Changes in Emacs 27.1

+++
** Emacs can now be configured using an early init file.
The file is called 'early-init.el', in 'user-emacs-directory'.  It is
loaded very early in the startup process: before graphical elements
such as the tool bar are initialized, and before the package manager
is initialized.  The primary purpose is to allow customizing how the
package system is initialized given that initialization now happens
before loading the regular init file (see below).

+++
** Emacs now calls 'package-initialize' before loading the init file.
This is part of a change intended to eliminate the behavior of
package.el inserting a call to 'package-initialize' into the init
file, which was previously done when Emacs was started.  As a result
of this change, it is no longer necessary to call 'package-initialize'
in your init file.  However, if your init file changes the values of
'package-load-list' or 'package-user-dir', then that code needs to be
moved to the early init file (see above).


* Changes in Emacs 27.1

---
** The new option 'tooltip-resize-echo-area' avoids truncating tooltip text
on GUI frames when tooltips are displayed in the echo area.  Instead,
it resizes the echo area as needed to accommodate the full tool-tip
text.

---
** Show modeline tooltips only if the corresponding action applies.
Customize the option 'mode-line-default-help-echo' to restore the old
behavior where the tooltip text is also shown when the corresponding
action does not apply.

+++
** New hook 'server-after-make-frame-hook'.
This hook is a convenient place to perform initializations in daemon
mode which require GUI features to be available.  One example is
restoration of the previous session using the desktop.el package: put
the call to 'desktop-read' in this hook, if you want the GUI settings
to be restored, or if desktop.el needs to interact with you during
restoration of the session.

+++
** New function 'logcount' calculates an integer's Hamming weight.

+++
** New function 'libxml-available-p'.
This function returns non-nil if libxml support is both compiled in
and available at run time.  Lisp programs should use this function to
detect built-in libxml support, instead of testing for that
indirectly, e.g., by checking that functions like
'libxml-parse-html-region' return nil.

+++
** New function 'fill-polish-nobreak-p', to be used in 'fill-nobreak-predicate'.
It blocks line breaking after a one-letter word, also in the case when
this word is preceded by a non-space, but non-alphanumeric character.

+++
** The limit on repetitions in regexps has been raised to 2^16-1.
It was previously limited to 2^15-1.  For example, the following
regular expression was previously invalid, but is now accepted:

   x\{32768\}


* Editing Changes in Emacs 27.1

+++
** New isearch bindings.
'C-M-w' in isearch changed from isearch-del-char to the new function
isearch-yank-symbol-or-char. isearch-del-char is now bound to 'C-M-d'.

---
** New variable 'x-wait-for-event-timeout'.
This controls how long Emacs will wait for updates to the graphical
state to take effect (making a frame visible, for example).

+++
** New user option 'electric-quote-replace-double'.
This option controls whether '"' is replaced in 'electric-quote-mode',
in addition to other quote characters.  If non-nil, ASCII double-quote
characters that quote text "like this" are replaced by double
typographic quotes, “like this”, in text modes, and in comments in
non-text modes.

---
** 'write-abbrev-file' now includes special properties.
'write-abbrev-file' now writes special properties like ':case-fixed'
for abbrevs that have them.


* Changes in Specialized Modes and Packages in Emacs 27.1

** Ecomplete
*** The ecomplete sorting has changed to a decay-based algorithm.
This can be controlled by the new `ecomplete-sort-predicate' variable.

*** The 'ecompleterc' file is now placed in ~/.emacs.d/ecompleterc by default
Of course it will still find it if you have it in ~/.ecompleterc

** Gnus
*** The function 'gnus-score-find-favorite-words' has been renamed
from 'gnus-score-find-favourite-words'.

** Htmlfontify
*** The functions 'hfy-color', 'hfy-color-vals' and
'hfy-fallback-color-values' and the variables 'hfy-fallback-color-map'
and 'hfy-rgb-txt-color-map' have been renamed from names that used
'colour' instead of 'color'.

** Smtpmail
Authentication mechanisms can be added via external packages, by
defining new cl-defmethod of smtpmail-try-auth-method.

** Footnote-mode
*** Support Hebrew-style footnotes
*** Footnote text lines are now aligned.
Can be controlled via the new variable 'footnote-align-to-fn-text'.

** CSS mode

---
*** A new command 'css-cycle-color-format' for cycling between color
formats (e.g. "black" => "#000000" => "rgb(0, 0, 0)") has been added,
bound to 'C-c C-f'.

** Dired

+++
*** The new user option 'dired-create-destination-dirs' controls whether
'dired-do-copy' and 'dired-rename-file' should create non-existent
directories in the destination.

** Help

---
*** Output format of 'C-h l' (view-lossage) has changed.
For convenience, 'view-lossage' now displays the last keystrokes
and commands in the same format as the edit buffer of
'edit-last-kbd-macro'.  This makes it possible to copy the lines from
the buffer generated by 'view-lossage' to the "*Edit Macro*" buffer
created by 'edit-last-kbd-macro', and to save the macro by 'C-c C-c'.

** Ibuffer

---
*** New filter ibuffer-filter-by-process; bound to '/E'.

** Search and Replace

*** 'search-exit-option' provides new options 'move' and 'shift-move'
to extend the search string by yanking text that ends at the new
position after moving point in the current buffer.  'shift-move'
extends the search string by motion commands while holding down
the shift key.

** Edebug

+++
*** The runtime behavior of Edebug's instrumentation can be changed
using the new variables 'edebug-behavior-alist',
'edebug-after-instrumentation-function' and
'edebug-new-definition-function'. Edebug's behavior can be changed
globally or for individual definitions.

** Enhanced xterm support

*** New variable 'xterm-set-window-title' controls whether Emacs sets
the XTerm window title.  This feature is experimental and is disabled
by default.

** Gamegrid

** grep

*** rgrep, lgrep and zrgrep now hide part of the command line
that contains a list of ignored directories and files.
Clicking on the button with ellipsis unhides it.
The abbreviation can be disabled by the new option
'grep-find-abbreviate'.  The new command
'grep-find-toggle-abbreviation' toggles it interactively.

** ERT

+++
*** New variable 'ert-quiet' allows to make ERT output in batch mode
less verbose by removing non-essential information.

---
*** Gamegrid now determines its default glyph size based on display
dimensions, instead of always using 16 pixels. As a result, Tetris,
Snake and Pong are more playable on HiDPI displays.

** Filecache

---
*** Completing filenames in the minibuffer via 'C-TAB' now uses the
styles as configured by the variable 'completion-styles'.

** New macros 'thunk-let' and 'thunk-let*'.
These macros are analogue to 'let' and 'let*', but create bindings that
are evaluated lazily.

** next-error

*** New customizable variable next-error-find-buffer-function
defines the logic of finding a next-error capable buffer.
It has an option to use a single such buffer on selected frame, or
by default use the last buffer that navigated to the current buffer.

** Eshell

---
*** Expansion of history event designators is disabled by default.
To restore the old behavior, use

    (add-hook 'eshell-expand-input-functions
              #'eshell-expand-history-references)

*** The function 'shell-uniquify-list' has been renamed from
'eshell-uniqify-list'.

** Pcomplete
*** The function 'pcomplete-uniquify-list' has been renamed from
'pcomplete-uniqify-list'.

** Tramp

+++
*** New connection method "owncloud", which allows to access OwnCloud
or NextCloud hosted files and directories.

---
** The options.el library has been removed.
It was obsolete since Emacs 22.1, replaced by customize.


* New Modes and Packages in Emacs 27.1

+++
** Emacs can now visit files in archives as if they were directories.
This feature uses Tramp and works only on systems which support GVFS,
i.e. GNU/Linux, roughly spoken.  See the chapter "(tramp) Archive file
names" in the Tramp manual for full documentation of these facilities.


* Incompatible Lisp Changes in Emacs 27.1

** The FILENAME argument to 'file-name-base' is now mandatory and no
longer defaults to 'buffer-file-name'.

---
** The function 'eldoc-message' now accepts a single argument.
Programs that called it with multiple arguments before should pass
them through 'format' first.  Even that is discouraged: for ElDoc
support, you should set 'eldoc-documentation-function' instead of
calling 'eldoc-message' directly.

** Old-style backquotes now generate an error.  They have been
generating warnings for a decade.  To interpret old-style backquotes
as new-style, bind the new variable 'force-new-style-backquotes' to t.

** Defining a Common Lisp structure using 'cl-defstruct' or
'cl-struct-define' whose name clashes with a builtin type (e.g.,
'integer' or 'hash-table') now signals an error.

** When formatting a floating-point number as an octal or hexadecimal
integer, Emacs now signals an error if the number is too large for the
implementation to format (Bug#30408).

---
** Some functions and variables obsolete since Emacs 22 have been removed:
archive-mouse-extract, assoc-ignore-case, assoc-ignore-representation,
backward-text-line, blink-cursor, bookmark-exit-hooks,
comint-use-prompt-regexp-instead-of-fields, compilation-finish-function,
count-text-lines, cperl-vc-header-alist, custom-face-save-command,
cvs-display-full-path, cvs-fileinfo->full-path, delete-frame-hook,
derived-mode-class, describe-char-after, describe-project,
desktop-basefilename, desktop-buffer-handlers,
desktop-buffer-misc-functions, desktop-buffer-modes-to-save,
desktop-enable, desktop-load-default, dired-omit-files-p,
disabled-command-hook, dungeon-mode-map, electric-nroff-mode,
electric-nroff-newline, electric-perl-terminator, focus-frame,
forward-text-line, generic-define-mswindows-modes, generic-define-unix-modes,
generic-font-lock-defaults, goto-address-at-mouse,
highlight-changes-colours, ibuffer-elide-long-columns, ibuffer-hooks,
ibuffer-mode-hooks, icalendar-convert-diary-to-ical,
icalendar-extract-ical-from-buffer, imenu-always-use-completion-buffer-p,
ipconfig-program, ipconfig-program-options, isearch-lazy-highlight-cleanup,
isearch-lazy-highlight-cleanup, isearch-lazy-highlight-initial-delay,
isearch-lazy-highlight-interval, isearch-lazy-highlight-max-at-a-time,
iswitchb-use-fonts, latin1-char-displayable-p, mouse-wheel-click-button,
mouse-wheel-down-button, mouse-wheel-up-button, new-frame, pascal-outline,
process-kill-without-query, recentf-menu-append-commands-p,
rmail-pop-password, rmail-pop-password-required, savehist-load,
set-default-font, spam-list-of-processors,
speedbar-add-ignored-path-regexp, speedbar-buffers-line-path,
speedbar-buffers-line-path, speedbar-ignored-path-expressions,
speedbar-ignored-path-regexp, speedbar-line-path, speedbar-path-line,
timer-set-time-with-usecs, tooltip-gud-display, tooltip-gud-modes,
tooltip-gud-toggle-dereference, unfocus-frame, unload-hook-features-list,
update-autoloads-from-directories, vc-comment-ring, vc-comment-ring-index,
vc-comment-search-forward, vc-comment-search-reverse, vc-comment-to-change-log,
vc-diff-switches-list, vc-next-comment, vc-previous-comment, view-todo,
x-lost-selection-hooks, x-sent-selection-hooks


* Lisp Changes in Emacs 27.1

+++
** New function assoc-delete-all.

** 'print-quoted' now defaults to t, so if you want to see
(quote x) instead of 'x you will have to bind it to nil where applicable.

** To avoid confusion caused by "smart quotes", the reader signals an
error when reading Lisp symbols which begin with one of the following
quotation characters: ‘’‛“”‟〞＂＇.  A symbol beginning with such a
character can be written by escaping the quotation character with a
backslash.  For example:

    (read "‘smart") => (invalid-read-syntax "strange quote" "‘")
    (read "\\‘smart") == (intern "‘smart")

** Internal parsing commands now use syntax-ppss and disregard
open-paren-in-column-0-is-defun-start.  This affects mostly things like
forward-comment, scan-sexps, and forward-sexp when parsing backward.
The new variable 'comment-use-syntax-ppss' can be set to nil to recover the old
behavior if needed.

** The `server-name' and `server-socket-dir' variables are set when a
socket has been pased to Emacs (Bug#24218).

---
** The 'file-system-info' function is now available on all platforms.
instead of just Microsoft platforms.  This fixes a 'get-free-disk-space'
bug on OS X 10.8 and later (Bug#28639).

---
** The function 'get-free-disk-space' returns now a non-nil value for
remote systems, which support this check.

+++
** The function 'make-string' accepts an additional optional argument.
If the optional third argument is non-nil, 'make-string' will produce
a multibyte string even if its second argument is an ASCII character.

** (format "%d" X) no longer mishandles a floating-point number X that
does not fit in a machine integer (Bug#30408).

** New JSON parsing and serialization functions 'json-serialize',
'json-insert', 'json-parse-string', and 'json-parse-buffer'.  These
are implemented in C using the Jansson library.

---
** The new function `mailcap-file-name-to-mime-type' has been added.
It's a simple convenience function for looking up MIME types based on
file name extensions.

+++
** The new function 'read-answer' accepts either long or short answers
depending on the new customizable variable 'read-answer-short'.


* Changes in Emacs 27.1 on Non-Free Operating Systems

---
** Battery status is now supported in all Cygwin builds.
Previously it was supported only in the Cygwin-w32 build.


* Changes in Emacs 27.1 on Non-Free Operating Systems
||||||||| merged common ancestors
* Lisp Changes in Emacs 26.1

+++
** The function 'assoc' now takes an optional third argument TESTFN.
This argument, when non-nil, is used for comparison instead of
'equal'.

+++
** New optional argument TESTFN in 'alist-get', 'map-elt' and 'map-put'.
If non-nil, the argument specifies a function to use for comparison,
instead of, respectively, 'assq' and 'eql'.

+++
** New function 'seq-set-equal-p' to check if SEQUENCE1 and SEQUENCE2
contain the same elements, regardless of the order.

+++
** The new function 'mapbacktrace' applies a function to all frames of
the current stack trace.

+++
** The new function 'file-name-case-insensitive-p' tests whether a
given file is on a case-insensitive filesystem.

+++
** Several accessors for the value returned by 'file-attributes'
have been added.  They are: 'file-attribute-type',
'file-attribute-link-number', 'file-attribute-user-id',
'file-attribute-group-id', 'file-attribute-access-time',
'file-attribute-modification-time',
'file-attribute-status-change-time', 'file-attribute-size',
'file-attribute-modes', 'file-attribute-inode-number',
'file-attribute-device-number' and 'file-attribute-collect'.

+++
** The new function 'buffer-hash' computes a fast, non-consing hash of
a buffer's contents.

+++
** 'interrupt-process' now consults the list 'interrupt-process-functions',
to determine which function has to be called in order to deliver the
SIGINT signal.  This allows Tramp to send the SIGINT signal to remote
asynchronous processes.  The hitherto existing implementation has been
moved to 'internal-default-interrupt-process'.

+++
** The new function 'read-multiple-choice' prompts for multiple-choice
questions, with a handy way to display help texts.

---
** 'comment-indent-function' values may now return a cons to specify a
range of indentation.

+++
** New optional argument TEXT in 'make-temp-file'.

---
** New function 'define-symbol-prop'.

+++
** New function 'secure-hash-algorithms' to list the algorithms that
'secure-hash' supports.
See the node "(elisp) Checksum/Hash" in the ELisp manual for details.

+++
** Emacs now exposes the GnuTLS cryptographic API with the functions
'gnutls-macs' and 'gnutls-hash-mac'; 'gnutls-digests' and
'gnutls-hash-digest'; 'gnutls-ciphers' and 'gnutls-symmetric-encrypt'
and 'gnutls-symmetric-decrypt'.
See the node "(elisp) GnuTLS Cryptography" in the ELisp manual for details.

+++
** The function 'gnutls-available-p' now returns a list of capabilities
supported by the GnuTLS library used by Emacs.

+++
** Emacs now supports records for user-defined types, via the new
functions 'make-record', 'record', and 'recordp'.  Records are now
used internally to represent cl-defstruct and defclass instances, for
example.

If your program defines new record types, you should use
package-naming conventions for naming those types.  This is so any
potential conflicts with other types are avoided.

+++
** 'save-some-buffers' now uses 'save-some-buffers-default-predicate'
to decide which buffers to ask about, if the PRED argument is nil.
The default value of 'save-some-buffers-default-predicate' is nil,
which means ask about all file-visiting buffers.

---
** string-(to|as|make)-(uni|multi)byte are now declared obsolete.

+++
** New variable 'while-no-input-ignore-events' which allow
setting which special events 'while-no-input' should ignore.
It is a list of symbols.

---
** New function 'undo-amalgamate-change-group' to get rid of
undo-boundaries between two states.

---
** New var 'definition-prefixes' is a hash table mapping prefixes to
the files where corresponding definitions can be found.  This can be
used to fetch definitions that are not yet loaded, for example for
'C-h f'.

---
** New var 'syntax-ppss-table' to control the syntax-table used in
'syntax-ppss'.

+++
** 'define-derived-mode' can now specify an :after-hook form, which
gets evaluated after the new mode's hook has run.  This can be used to
incorporate configuration changes made in the mode hook into the
mode's setup.

---
** Autoload files can be generated without timestamps,
by setting 'autoload-timestamps' to nil.
FIXME As an experiment, nil is the current default.
If no insurmountable problems before next release, it can stay that way.

---
** 'gnutls-boot' now takes a parameter ':complete-negotiation' that
says that negotiation should complete even on non-blocking sockets.

---
** There is now a new variable 'flyspell-sort-corrections-function'
that allows changing the way corrections are sorted.

---
** The new command 'fortune-message' has been added, which displays
fortunes in the echo area.

+++
** New function 'func-arity' returns information about the argument list
of an arbitrary function.  This generalizes 'subr-arity' for functions
that are not built-in primitives.  We recommend using this new
function instead of 'subr-arity'.

---
** New function 'region-bounds' can be used in the interactive spec
to provide region boundaries (for rectangular regions more than one)
to an interactively callable function as a single argument instead of
two separate arguments 'region-beginning' and 'region-end'.

+++
** 'parse-partial-sexp' state has a new element.  Element 10 is
non-nil when the last character scanned might be the first character
of a two character construct, i.e., a comment delimiter or escaped
character.  Its value is the syntax of that last character.

+++
** 'parse-partial-sexp's state, element 9, has now been confirmed as
permanent and documented, and may be used by Lisp programs.  Its value
is a list of currently open parenthesis positions, starting with the
outermost parenthesis.

---
** 'read-color' will now display the color names using the color itself
as the background color.

---
** The function 'redirect-debugging-output' now works on platforms
other than GNU/Linux.

+++
** The new function 'string-version-lessp' compares strings by
interpreting consecutive runs of numerical characters as numbers, and
compares their numerical values.  According to this predicate,
"foo2.png" is smaller than "foo12.png".

---
** Numeric comparisons and 'logb' no longer return incorrect answers
due to internal rounding errors.  For example, '(< most-positive-fixnum
(+ 1.0 most-positive-fixnum))' now correctly returns t on 64-bit hosts.

---
** The functions 'ffloor', 'fceiling', 'ftruncate' and 'fround' now
accept only floating-point arguments, as per their documentation.
Formerly, they quietly accepted integer arguments and sometimes
returned nonsensical answers, e.g., '(< N (ffloor N))' could return t.

---
** On hosts like GNU/Linux x86-64 where a 'long double' fraction
contains at least EMACS_INT_WIDTH - 3 bits, 'format' no longer returns
incorrect answers due to internal rounding errors when formatting
Emacs integers with '%e', '%f', or '%g' conversions.  For example, on
these hosts '(eql N (string-to-number (format "%.0f" N)))' now returns
t for all Emacs integers N.

---
** Calls that accept floating-point integers (for use on hosts with
limited integer range) now signal an error if arguments are not
integral.  For example '(decode-char 'ascii 0.5)' now signals an error.

+++
** The new function 'char-from-name' converts a Unicode name string
to the corresponding character code.

+++
** New functions 'sxhash-eq' and 'sxhash-eql' return hash codes of a
Lisp object suitable for use with 'eq' and 'eql' correspondingly.  If
two objects are 'eq' ('eql'), then the result of 'sxhash-eq'
('sxhash-eql') on them will be the same.

+++
** Function 'sxhash' has been renamed to 'sxhash-equal' for
consistency with the new functions.  For compatibility, 'sxhash'
remains as an alias to 'sxhash-equal'.

+++
** 'make-hash-table' now defaults to a rehash threshold of 0.8125
instead of 0.8, to avoid rounding glitches.

+++
** New function 'add-variable-watcher' can be used to call a function
when a symbol's value is changed.  This is used to implement the new
debugger command 'debug-on-variable-change'.

+++
** Time conversion functions that accept a time zone rule argument now
allow it to be OFFSET or a list (OFFSET ABBR), where the integer
OFFSET is a count of seconds east of Universal Time, and the string
ABBR is a time zone abbreviation.  The affected functions are
'current-time-string', 'current-time-zone', 'decode-time',
'format-time-string', and 'set-time-zone-rule'.

+++
** 'format-time-string' now formats '%q' to the calendar quarter.

+++
** New built-in function 'mapcan'.
It avoids unnecessary consing (and garbage collection).

+++
** 'car' and 'cdr' compositions 'cXXXr' and 'cXXXXr' are now part of Elisp.

+++
** 'gensym' is now part of Elisp.

---
** Low-level list functions like 'length' and 'member' now do a better
job of signaling list cycles instead of looping indefinitely.

+++
** The new functions 'make-nearby-temp-file' and 'temporary-file-directory'
can be used for creation of temporary files on remote or mounted directories.

+++
** On GNU platforms when operating on a local file, 'file-attributes'
no longer suffers from a race when called while another process is
altering the filesystem.  On non-GNU platforms 'file-attributes'
attempts to detect the race, and returns nil if it does so.

+++
** The new function 'file-local-name' can be used to specify arguments
of remote processes.

+++
** The new functions 'file-name-quote', 'file-name-unquote' and
'file-name-quoted-p' can be used to quote / unquote file names with
the prefix "/:".

+++
** The new error 'file-missing', a subcategory of 'file-error', is now
signaled instead of 'file-error' if a file operation acts on a file
that does not exist.

+++
** The function 'delete-directory' no longer signals an error when
operating recursively and when some other process deletes the directory
or its files before 'delete-directory' gets to them.

+++
** New error type 'user-search-failed' like 'search-failed' but
avoids debugger like 'user-error'.

+++
** The function 'line-number-at-pos' now takes a second optional
argument 'absolute'.  If this parameter is nil, the default, this
function keeps on returning the line number taking potential narrowing
into account.  If this parameter is non-nil, the function ignores
narrowing and returns the absolute line number.

---
** The function 'color-distance' now takes a second optional argument
'metric'.  When non-nil, it should be a function of two arguments that
accepts two colors and returns a number.

** Changes in Frame and Window Handling

+++
*** Resizing a frame no longer runs 'window-configuration-change-hook'.
'window-size-change-functions' should be used instead.

+++
*** The new function 'frame-size-changed-p' can tell whether a frame has
been resized since the last time 'window-size-change-functions' has been
run.

+++
*** The function 'frame-geometry' now also returns the width of a
frame's outer border.

+++
*** New frame parameters and changed semantics for older ones:

+++
**** 'z-group' positions a frame above or below all others.

+++
**** 'min-width' and 'min-height' specify the absolute minimum size of a
frame.

+++
**** 'parent-frame' makes a frame the child frame of another Emacs
frame.  The section "(elisp) Child Frames" in the ELisp manual
describes the intrinsics of that relationship.

+++
**** 'delete-before' triggers deletion of one frame before that of
another.

+++
**** 'mouse-wheel-frame' specifies another frame whose windows shall be
scrolled instead.

+++
**** 'no-other-frame' has 'next-frame' and 'previous-frame' skip this
frame.

+++
**** 'skip-taskbar' removes a frame's icon from the taskbar and has
'Alt-<TAB>' skip this frame.

+++
**** 'no-focus-on-map' avoids that a frame gets input focus when mapped.

+++
**** 'no-accept-focus' means that a frame does not want to get input
focus via the mouse.

+++
**** 'undecorated' removes the window manager decorations from a frame.

+++
**** 'override-redirect' tells the window manager to disregard this
frame.

+++
**** 'width' and 'height' allow to specify pixel values and ratios now.

+++
**** 'left' and 'top' allow to specify ratios now.

+++
**** 'keep-ratio' preserves size and position of child frames when their
parent frame is resized.

+++
**** 'no-special-glyphs' suppresses display of truncation and
continuation glyphs in a frame.

+++
**** 'auto-hide-function' and 'minibuffer-exit' handle auto hiding of
frames and exiting from minibuffer individually.

+++
**** 'fit-frame-to-buffer-margins' and 'fit-frame-to-buffer-sizes'
handle fitting a frame to its buffer individually.

+++
**** 'drag-internal-border', 'drag-with-header-line',
'drag-with-mode-line', 'snap-width', 'top-visible' and 'bottom-visible'
allow to drag and resize frames with the mouse.

+++
**** 'minibuffer' is now set to the default minibuffer window when
initially specified as nil and is not reset to nil when initially
specifying a minibuffer window.

*** The new function 'frame-list-z-order' returns a list of all frames
in Z (stacking) order.

+++
*** The function 'x-focus-frame' optionally tries to not activate its
frame.

+++
*** The variable 'focus-follows-mouse' has a third meaningful value
'auto-raise' to indicate that the window manager automatically raises a
frame when the mouse pointer enters it.

+++
*** The new function 'frame-restack' puts a frame above or below
another on the display.

+++
*** The new face 'internal-border' specifies the background of a frame's
internal border.

+++
*** The NORECORD argument of 'select-window' now has a meaningful value
'mark-for-redisplay' which is like any other non-nil value but marks
WINDOW for redisplay.

+++
*** Support for side windows is now official.  The display action
function 'display-buffer-in-side-window' will display its buffer in a
side window.  Functions for toggling all side windows on a frame,
changing and reversing the layout of side windows and returning the
main (major non-side) window of a frame are provided.  For details
consult the section "(elisp) Side Windows" in the ELisp manual.

+++
*** Support for atomic windows - rectangular compositions of windows
treated by 'split-window', 'delete-window' and 'delete-other-windows'
like a single live window - is now official.  For details consult the
section "(elisp) Atomic Windows" in the ELisp manual.

+++
*** New 'display-buffer' alist entry 'window-parameters' allows to
assign window parameters to the window used for displaying the buffer.

+++
*** New function 'display-buffer-reuse-mode-window' is an action function
suitable for use in 'display-buffer-alist'.  For example, to avoid
creating a new window when opening man pages when there's already one,
use

(add-to-list 'display-buffer-alist
     '("\\`\\*Man .*\\*\\'" .
       (display-buffer-reuse-mode-window
        (inhibit-same-window . nil)
        (mode . Man-mode))))

+++
*** New window parameter 'no-delete-other-windows' prevents that
its window gets deleted by 'delete-other-windows'.

+++
*** New window parameters 'mode-line-format' and 'header-line-format'
allow to override the buffer-local formats for this window.

+++
*** New command 'window-swap-states' swaps the states of two live
windows.

+++
*** New functions 'window-pixel-width-before-size-change' and
'window-pixel-height-before-size-change' support detecting which
window changed size when 'window-size-change-functions' are run.

+++
*** The new function 'window-lines-pixel-dimensions' returns the pixel
dimensions of a window's text lines.

+++
*** The new function 'window-largest-empty-rectangle' returns the
dimensions of the largest rectangular area not occupying any text in a
window's body.

+++
*** The semantics of 'mouse-autoselect-window' has changed slightly.
For details see the section "(elisp) Mouse Window Auto-selection" in
the ELisp manual.

---
*** 'select-frame-by-name' now may return a frame on another display
if it does not find a suitable one on the current display.

---
** 'tcl-auto-fill-mode' is now declared obsolete.  Its functionality
can be replicated simply by setting 'comment-auto-fill-only-comments'.

** New pcase pattern 'rx' to match against an rx-style regular expression.
For details, see the doc string of 'rx--pcase-macroexpander'.

---
** New functions to set region from secondary selection and vice versa.
The new functions 'secondary-selection-to-region' and
'secondary-selection-from-region' let you set the beginning and the
end of the region from those of the secondary selection and vice
versa.

** New function 'lgstring-remove-glyph' can be used to modify a
gstring returned by the underlying layout engine (e.g. m17n-flt,
uniscribe).


* Changes in Emacs 26.1 on Non-Free Operating Systems

+++
** Intercepting hotkeys on Windows 7 and later now works better.
The new keyboard hooking code properly grabs system hotkeys such as
'Win-*' and 'Alt-TAB', in a way that Emacs can get at them before the
system.  This makes the 'w32-register-hot-key' functionality work
again on all versions of MS-Windows starting with Windows 7.  On
Windows NT and later you can now register any hotkey combination.  (On
Windows 9X, the previous limitations, spelled out in the Emacs manual,
still apply.)

---
** 'convert-standard-filename' no longer mirrors slashes on MS-Windows.
Previously, on MS-Windows this function converted slash characters in
file names into backslashes.  It no longer does that.  If your Lisp
program used 'convert-standard-filename' to prepare file names to be
passed to subprocesses (which is not the recommended usage of that
function), you will now have to mirror slashes in your application
code.  One possible way is this:

         (let ((start 0))
           (while (string-match "/" file-name start)
             (aset file-name (match-beginning 0) ?\\)
             (setq start (match-end 0))))

---
** GUI sessions on MS-Windows now treat SIGINT like Posix platforms do.
The effect of delivering a Ctrl-C (SIGINT) signal to a GUI Emacs on
MS-Windows is now the same as on Posix platforms -- Emacs saves the
session and exits.  In particular, this will happen if you start
emacs.exe from the Windows shell, then type Ctrl-C into that shell's
window.

---
** 'signal-process' supports SIGTRAP on Windows XP and later.
The 'kill' emulation on Windows now maps SIGTRAP to a call to the
'DebugBreakProcess' API.  This causes the receiving process to break
execution and return control to the debugger.  If no debugger is
attached to the receiving process, the call is typically ignored.
This is in contrast to the default action on POSIX Systems, where it
causes the receiving process to terminate with a core dump if no
debugger has been attached to it.

---
** 'set-mouse-position' and 'set-mouse-absolute-pixel-position' work
on macOS.

---
** Emacs can now be run as a GUI application from the command line on
macOS.

+++
** 'ns-appearance' and 'ns-transparent-titlebar' change the appearance
of frame decorations on macOS 10.9+.

---
** 'ns-use-thin-smoothing' enables thin font smoothing on macOS 10.8+.

---
** 'process-attributes' on Darwin systems now returns more information.
=========
* Lisp Changes in Emacs 26.1

+++
** The function 'assoc' now takes an optional third argument TESTFN.
This argument, when non-nil, is used for comparison instead of
'equal'.

+++
** New optional argument TESTFN in 'alist-get', 'map-elt' and 'map-put'.
If non-nil, the argument specifies a function to use for comparison,
instead of, respectively, 'assq' and 'eql'.

+++
** New function 'seq-set-equal-p' to check if SEQUENCE1 and SEQUENCE2
contain the same elements, regardless of the order.

+++
** The new function 'mapbacktrace' applies a function to all frames of
the current stack trace.

+++
** The new function 'file-name-case-insensitive-p' tests whether a
given file is on a case-insensitive filesystem.

+++
** Several accessors for the value returned by 'file-attributes'
have been added.  They are: 'file-attribute-type',
'file-attribute-link-number', 'file-attribute-user-id',
'file-attribute-group-id', 'file-attribute-access-time',
'file-attribute-modification-time',
'file-attribute-status-change-time', 'file-attribute-size',
'file-attribute-modes', 'file-attribute-inode-number',
'file-attribute-device-number' and 'file-attribute-collect'.

+++
** The new function 'buffer-hash' computes a fast, non-consing hash of
a buffer's contents.

+++
** 'interrupt-process' now consults the list 'interrupt-process-functions',
to determine which function has to be called in order to deliver the
SIGINT signal.  This allows Tramp to send the SIGINT signal to remote
asynchronous processes.  The hitherto existing implementation has been
moved to 'internal-default-interrupt-process'.

+++
** The new function 'read-multiple-choice' prompts for multiple-choice
questions, with a handy way to display help texts.

---
** 'comment-indent-function' values may now return a cons to specify a
range of indentation.

+++
** New optional argument TEXT in 'make-temp-file'.

---
** New function 'define-symbol-prop'.

+++
** New function 'secure-hash-algorithms' to list the algorithms that
'secure-hash' supports.
See the node "(elisp) Checksum/Hash" in the ELisp manual for details.

+++
** Emacs now exposes the GnuTLS cryptographic API with the functions
'gnutls-macs' and 'gnutls-hash-mac'; 'gnutls-digests' and
'gnutls-hash-digest'; 'gnutls-ciphers' and 'gnutls-symmetric-encrypt'
and 'gnutls-symmetric-decrypt'.
See the node "(elisp) GnuTLS Cryptography" in the ELisp manual for details.

+++
** The function 'gnutls-available-p' now returns a list of capabilities
supported by the GnuTLS library used by Emacs.

+++
** Emacs now supports records for user-defined types, via the new
functions 'make-record', 'record', and 'recordp'.  Records are now
used internally to represent cl-defstruct and defclass instances, for
example.

If your program defines new record types, you should use
package-naming conventions for naming those types.  This is so any
potential conflicts with other types are avoided.

+++
** 'save-some-buffers' now uses 'save-some-buffers-default-predicate'
to decide which buffers to ask about, if the PRED argument is nil.
The default value of 'save-some-buffers-default-predicate' is nil,
which means ask about all file-visiting buffers.

---
** string-(to|as|make)-(uni|multi)byte are now declared obsolete.

+++
** New variable 'while-no-input-ignore-events' which allow
setting which special events 'while-no-input' should ignore.
It is a list of symbols.

---
** New function 'undo-amalgamate-change-group' to get rid of
undo-boundaries between two states.

---
** New var 'definition-prefixes' is a hash table mapping prefixes to
the files where corresponding definitions can be found.  This can be
used to fetch definitions that are not yet loaded, for example for
'C-h f'.

---
** New var 'syntax-ppss-table' to control the syntax-table used in
'syntax-ppss'.

+++
** 'define-derived-mode' can now specify an :after-hook form, which
gets evaluated after the new mode's hook has run.  This can be used to
incorporate configuration changes made in the mode hook into the
mode's setup.

---
** Autoload files can be generated without timestamps,
by setting 'autoload-timestamps' to nil.
FIXME As an experiment, nil is the current default.
If no insurmountable problems before next release, it can stay that way.

---
** 'gnutls-boot' now takes a parameter ':complete-negotiation' that
says that negotiation should complete even on non-blocking sockets.

---
** There is now a new variable 'flyspell-sort-corrections-function'
that allows changing the way corrections are sorted.

---
** The new command 'fortune-message' has been added, which displays
fortunes in the echo area.

+++
** New function 'func-arity' returns information about the argument list
of an arbitrary function.  This generalizes 'subr-arity' for functions
that are not built-in primitives.  We recommend using this new
function instead of 'subr-arity'.

---
** New function 'region-bounds' can be used in the interactive spec
to provide region boundaries (for rectangular regions more than one)
to an interactively callable function as a single argument instead of
two separate arguments 'region-beginning' and 'region-end'.

+++
** 'parse-partial-sexp' state has a new element.  Element 10 is
non-nil when the last character scanned might be the first character
of a two character construct, i.e., a comment delimiter or escaped
character.  Its value is the syntax of that last character.

+++
** 'parse-partial-sexp's state, element 9, has now been confirmed as
permanent and documented, and may be used by Lisp programs.  Its value
is a list of currently open parenthesis positions, starting with the
outermost parenthesis.

---
** 'read-color' will now display the color names using the color itself
as the background color.

---
** The function 'redirect-debugging-output' now works on platforms
other than GNU/Linux.

+++
** The new function 'string-version-lessp' compares strings by
interpreting consecutive runs of numerical characters as numbers, and
compares their numerical values.  According to this predicate,
"foo2.png" is smaller than "foo12.png".

---
** Numeric comparisons and 'logb' no longer return incorrect answers
due to internal rounding errors.  For example, '(< most-positive-fixnum
(+ 1.0 most-positive-fixnum))' now correctly returns t on 64-bit hosts.

---
** The functions 'ffloor', 'fceiling', 'ftruncate' and 'fround' now
accept only floating-point arguments, as per their documentation.
Formerly, they quietly accepted integer arguments and sometimes
returned nonsensical answers, e.g., '(< N (ffloor N))' could return t.

---
** On hosts like GNU/Linux x86-64 where a 'long double' fraction
contains at least EMACS_INT_WIDTH - 3 bits, 'format' no longer returns
incorrect answers due to internal rounding errors when formatting
Emacs integers with '%e', '%f', or '%g' conversions.  For example, on
these hosts '(eql N (string-to-number (format "%.0f" N)))' now returns
t for all Emacs integers N.

---
** Calls that accept floating-point integers (for use on hosts with
limited integer range) now signal an error if arguments are not
integral.  For example '(decode-char 'ascii 0.5)' now signals an error.

+++
** The new function 'char-from-name' converts a Unicode name string
to the corresponding character code.

+++
** New functions 'sxhash-eq' and 'sxhash-eql' return hash codes of a
Lisp object suitable for use with 'eq' and 'eql' correspondingly.  If
two objects are 'eq' ('eql'), then the result of 'sxhash-eq'
('sxhash-eql') on them will be the same.

+++
** Function 'sxhash' has been renamed to 'sxhash-equal' for
consistency with the new functions.  For compatibility, 'sxhash'
remains as an alias to 'sxhash-equal'.

+++
** 'make-hash-table' now defaults to a rehash threshold of 0.8125
instead of 0.8, to avoid rounding glitches.

+++
** New function 'add-variable-watcher' can be used to call a function
when a symbol's value is changed.  This is used to implement the new
debugger command 'debug-on-variable-change'.

+++
** New variable 'print-escape-control-characters' causes 'prin1' and
'print' to output control characters as backslash sequences.

+++
** Time conversion functions that accept a time zone rule argument now
allow it to be OFFSET or a list (OFFSET ABBR), where the integer
OFFSET is a count of seconds east of Universal Time, and the string
ABBR is a time zone abbreviation.  The affected functions are
'current-time-string', 'current-time-zone', 'decode-time',
'format-time-string', and 'set-time-zone-rule'.

+++
** 'format-time-string' now formats '%q' to the calendar quarter.

+++
** New built-in function 'mapcan'.
It avoids unnecessary consing (and garbage collection).

+++
** 'car' and 'cdr' compositions 'cXXXr' and 'cXXXXr' are now part of Elisp.

+++
** 'gensym' is now part of Elisp.

---
** Low-level list functions like 'length' and 'member' now do a better
job of signaling list cycles instead of looping indefinitely.

+++
** The new functions 'make-nearby-temp-file' and 'temporary-file-directory'
can be used for creation of temporary files on remote or mounted directories.

+++
** On GNU platforms when operating on a local file, 'file-attributes'
no longer suffers from a race when called while another process is
altering the filesystem.  On non-GNU platforms 'file-attributes'
attempts to detect the race, and returns nil if it does so.

+++
** The new function 'file-local-name' can be used to specify arguments
of remote processes.

+++
** The new functions 'file-name-quote', 'file-name-unquote' and
'file-name-quoted-p' can be used to quote / unquote file names with
the prefix "/:".

+++
** The new error 'file-missing', a subcategory of 'file-error', is now
signaled instead of 'file-error' if a file operation acts on a file
that does not exist.

+++
** The function 'delete-directory' no longer signals an error when
operating recursively and when some other process deletes the directory
or its files before 'delete-directory' gets to them.

+++
** New error type 'user-search-failed' like 'search-failed' but
avoids debugger like 'user-error'.

+++
** The function 'line-number-at-pos' now takes a second optional
argument 'absolute'.  If this parameter is nil, the default, this
function keeps on returning the line number taking potential narrowing
into account.  If this parameter is non-nil, the function ignores
narrowing and returns the absolute line number.

---
** The function 'color-distance' now takes a second optional argument
'metric'.  When non-nil, it should be a function of two arguments that
accepts two colors and returns a number.

** Changes in Frame and Window Handling

+++
*** Resizing a frame no longer runs 'window-configuration-change-hook'.
'window-size-change-functions' should be used instead.

+++
*** The new function 'frame-size-changed-p' can tell whether a frame has
been resized since the last time 'window-size-change-functions' has been
run.

+++
*** The function 'frame-geometry' now also returns the width of a
frame's outer border.

+++
*** New frame parameters and changed semantics for older ones:

+++
**** 'z-group' positions a frame above or below all others.

+++
**** 'min-width' and 'min-height' specify the absolute minimum size of a
frame.

+++
**** 'parent-frame' makes a frame the child frame of another Emacs
frame.  The section "(elisp) Child Frames" in the ELisp manual
describes the intrinsics of that relationship.

+++
**** 'delete-before' triggers deletion of one frame before that of
another.

+++
**** 'mouse-wheel-frame' specifies another frame whose windows shall be
scrolled instead.

+++
**** 'no-other-frame' has 'next-frame' and 'previous-frame' skip this
frame.

+++
**** 'skip-taskbar' removes a frame's icon from the taskbar and has
'Alt-<TAB>' skip this frame.

+++
**** 'no-focus-on-map' avoids that a frame gets input focus when mapped.

+++
**** 'no-accept-focus' means that a frame does not want to get input
focus via the mouse.

+++
**** 'undecorated' removes the window manager decorations from a frame.

+++
**** 'override-redirect' tells the window manager to disregard this
frame.

+++
**** 'width' and 'height' now allow the specification of pixel values
and ratios.

+++
**** 'left' and 'top' now allow the specification of ratios.

+++
**** 'keep-ratio' preserves size and position of child frames when their
parent frame is resized.

+++
**** 'no-special-glyphs' suppresses display of truncation and
continuation glyphs in a frame.

+++
**** 'auto-hide-function' and 'minibuffer-exit' handle auto hiding of
frames and exiting from minibuffer individually.

+++
**** 'fit-frame-to-buffer-margins' and 'fit-frame-to-buffer-sizes'
handle fitting a frame to its buffer individually.

+++
**** 'drag-internal-border', 'drag-with-header-line',
'drag-with-mode-line', 'snap-width', 'top-visible' and 'bottom-visible'
allow dragging and resizing frames with the mouse.

+++
**** 'minibuffer' is now set to the default minibuffer window when
initially specified as nil and is not reset to nil when initially
specifying a minibuffer window.

*** The new function 'frame-list-z-order' returns a list of all frames
in Z (stacking) order.

+++
*** The function 'x-focus-frame' optionally tries to not activate its
frame.

+++
*** The variable 'focus-follows-mouse' has a third meaningful value
'auto-raise' to indicate that the window manager automatically raises a
frame when the mouse pointer enters it.

+++
*** The new function 'frame-restack' puts a frame above or below
another on the display.

+++
*** The new face 'internal-border' specifies the background of a frame's
internal border.

+++
*** The NORECORD argument of 'select-window' now has a meaningful value
'mark-for-redisplay' which is like any other non-nil value but marks
WINDOW for redisplay.

+++
*** Support for side windows is now official.  The display action
function 'display-buffer-in-side-window' will display its buffer in a
side window.  Functions for toggling all side windows on a frame,
changing and reversing the layout of side windows and returning the
main (major non-side) window of a frame are provided.  For details
consult the section "(elisp) Side Windows" in the ELisp manual.

+++
*** Support for atomic windows - rectangular compositions of windows
treated by 'split-window', 'delete-window' and 'delete-other-windows'
like a single live window - is now official.  For details consult the
section "(elisp) Atomic Windows" in the ELisp manual.

+++
*** New 'display-buffer' alist entry 'window-parameters' allows the
assignment of window parameters to the window used for displaying the
buffer.

+++
*** New function 'display-buffer-reuse-mode-window' is an action function
suitable for use in 'display-buffer-alist'.  For example, to avoid
creating a new window when opening man pages when there's already one,
use

(add-to-list 'display-buffer-alist
     '("\\`\\*Man .*\\*\\'" .
       (display-buffer-reuse-mode-window
        (inhibit-same-window . nil)
        (mode . Man-mode))))

+++
*** New window parameter 'no-delete-other-windows' prevents that
its window gets deleted by 'delete-other-windows'.

+++
*** New window parameters 'mode-line-format' and 'header-line-format'
allow the buffer-local formats for this window to be overridden.

+++
*** New command 'window-swap-states' swaps the states of two live
windows.

+++
*** New functions 'window-pixel-width-before-size-change' and
'window-pixel-height-before-size-change' support detecting which
window changed size when 'window-size-change-functions' are run.

+++
*** The new function 'window-lines-pixel-dimensions' returns the pixel
dimensions of a window's text lines.

+++
*** The new function 'window-largest-empty-rectangle' returns the
dimensions of the largest rectangular area not occupying any text in a
window's body.

+++
*** The semantics of 'mouse-autoselect-window' has changed slightly.
For details see the section "(elisp) Mouse Window Auto-selection" in
the ELisp manual.

---
*** 'select-frame-by-name' now may return a frame on another display
if it does not find a suitable one on the current display.

---
** 'tcl-auto-fill-mode' is now declared obsolete.  Its functionality
can be replicated simply by setting 'comment-auto-fill-only-comments'.

** New pcase pattern 'rx' to match against an rx-style regular expression.
For details, see the doc string of 'rx--pcase-macroexpander'.

---
** New functions to set region from secondary selection and vice versa.
The new functions 'secondary-selection-to-region' and
'secondary-selection-from-region' let you set the beginning and the
end of the region from those of the secondary selection and vice
versa.

** New function 'lgstring-remove-glyph' can be used to modify a
gstring returned by the underlying layout engine (e.g. m17n-flt,
uniscribe).


* Changes in Emacs 26.1 on Non-Free Operating Systems

+++
** Intercepting hotkeys on Windows 7 and later now works better.
The new keyboard hooking code properly grabs system hotkeys such as
'Win-*' and 'Alt-TAB', in a way that Emacs can get at them before the
system.  This makes the 'w32-register-hot-key' functionality work
again on all versions of MS-Windows starting with Windows 7.  On
Windows NT and later you can now register any hotkey combination.  (On
Windows 9X, the previous limitations, spelled out in the Emacs manual,
still apply.)

---
** 'convert-standard-filename' no longer mirrors slashes on MS-Windows.
Previously, on MS-Windows this function converted slash characters in
file names into backslashes.  It no longer does that.  If your Lisp
program used 'convert-standard-filename' to prepare file names to be
passed to subprocesses (which is not the recommended usage of that
function), you will now have to mirror slashes in your application
code.  One possible way is this:

         (let ((start 0))
           (while (string-match "/" file-name start)
             (aset file-name (match-beginning 0) ?\\)
             (setq start (match-end 0))))

---
** GUI sessions on MS-Windows now treat SIGINT like Posix platforms do.
The effect of delivering a Ctrl-C (SIGINT) signal to a GUI Emacs on
MS-Windows is now the same as on Posix platforms -- Emacs saves the
session and exits.  In particular, this will happen if you start
emacs.exe from the Windows shell, then type Ctrl-C into that shell's
window.

---
** 'signal-process' supports SIGTRAP on Windows XP and later.
The 'kill' emulation on Windows now maps SIGTRAP to a call to the
'DebugBreakProcess' API.  This causes the receiving process to break
execution and return control to the debugger.  If no debugger is
attached to the receiving process, the call is typically ignored.
This is in contrast to the default action on POSIX Systems, where it
causes the receiving process to terminate with a core dump if no
debugger has been attached to it.

---
** 'set-mouse-position' and 'set-mouse-absolute-pixel-position' work
on macOS.

---
** Emacs can now be run as a GUI application from the command line on
macOS.

+++
** 'ns-appearance' and 'ns-transparent-titlebar' change the appearance
of frame decorations on macOS 10.9+.

---
** 'ns-use-thin-smoothing' enables thin font smoothing on macOS 10.8+.

---
** 'process-attributes' on Darwin systems now returns more information.

---
** Battery status is now supported in all Cygwin builds.
Previously it was supported only in the Cygwin-w32 build.

** The function 'load' now behaves correctly when loading modules.
Specifically, it puts the module name into 'load-history', prints
loading messages if requested, and protects against recursive loads.


* Changes in Emacs 27.1 on Non-Free Operating Systems

---
** Battery status is now supported in all Cygwin builds.
Previously it was supported only in the Cygwin-w32 build.

** Emacs now handles key combinations involving the macOS "command"
and "option" modifier keys more correctly.

** The special handling of `frame-title-format' on NS where setting it
to `t' would enable the macOS proxy icon has been replaced with a
separate variable, `ns-use-proxy-icon'. `frame-title-format' will now
work as on other platforms.


----------------------------------------------------------------------
This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.


Local variables:
coding: utf-8
mode: outline
paragraph-separate: "[ 	]*$"
end:
