mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-04 11:00:45 -08:00
Introduce ‘c-lineup-ternary-bodies’ function which, when used as
a c lineup function, aligns question mark and colon of a ternary
operator. For example:
return arg % 2 == 0 ? arg / 2
: (3 * arg + 1);
* lisp/progmodes/cc-align.el (c-lineup-ternary-bodies): New function.
* doc/misc/cc-mode.texi (Operator Line-Up Functions): Document the
new function.
* test/lisp/progmodes/cc-mode-tests.el (c-lineup-ternary-bodies): New
test case.
496 lines
18 KiB
Text
496 lines
18 KiB
Text
GNU Emacs NEWS -- history of user-visible changes.
|
||
|
||
Copyright (C) 2017-2020 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 28.
|
||
|
||
See file HISTORY for a list of GNU Emacs versions and release dates.
|
||
See files NEWS.27, NEWS.26, ..., 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 relevant manuals in doc/ have been updated.
|
||
--- means no change in the manuals is needed.
|
||
When you add a new item, use the appropriate mark if you are sure it
|
||
applies, and please also update docstrings as needed.
|
||
|
||
|
||
* Installation Changes in Emacs 28.1
|
||
|
||
** Cairo graphics library is now used by default if found.
|
||
'--with-cairo' is now the default, if the appropriate development files
|
||
are found by 'configure'. Note that building with Cairo means using
|
||
Pango instead of libXFT for font support. Since Pango 1.44 has
|
||
removed support for bitmapped fonts, this may require you to adjust
|
||
your font settings.
|
||
|
||
Note also that 'FontBackend' settings in ".Xdefaults" or
|
||
".Xresources", or 'font-backend' frame parameter settings in your init
|
||
files, may need to be adjusted, as 'xft' is no longer a valid backend
|
||
when using Cairo. Use 'ftcrhb' if your Emacs was built with HarfBuzz
|
||
text shaping support, and 'ftcr' otherwise. You can determine this by
|
||
checking 'system-configuration-features'. The 'ftcr' backend will
|
||
still be available when HarfBuzz is supported, but will not be used by
|
||
default. We strongly recommend building with HarBuzz support. 'x' is
|
||
still a valid backend.
|
||
|
||
---
|
||
** 'configure' now warns about building with libXft support.
|
||
libXft is unmaintained, and causes a number of problems with modern
|
||
fonts including but not limited to crashes; support for it may be
|
||
removed in a future version of Emacs. Please consider using
|
||
Cairo + HarfBuzz instead.
|
||
|
||
---
|
||
** 'configure' now warns about not using HarfBuzz if using Cairo.
|
||
We want to encourage people to use the most modern font features
|
||
available, and this is the Cairo graphics library + HarfBuzz for font
|
||
shaping, so 'configure' now recommends that combination.
|
||
|
||
---
|
||
** The ftx font backend driver has been removed.
|
||
It was declared obsolete in Emacs 27.1.
|
||
|
||
|
||
* Startup Changes in Emacs 28.1
|
||
|
||
|
||
* Changes in Emacs 28.1
|
||
|
||
** Support for '(box . SIZE)' 'cursor-type'.
|
||
By default, 'box' cursor always has a filled box shape. But if you
|
||
specify 'cursor-type' to be '(box . SIZE)', the cursor becomes a hollow
|
||
box if the point is on an image larger than 'SIZE' pixels in any
|
||
dimension.
|
||
|
||
|
||
* Editing Changes in Emacs 28.1
|
||
|
||
+++
|
||
** New command 'undo-redo'.
|
||
It undoes previous undo commands, but doesn't record itself as an
|
||
undoable command.
|
||
|
||
+++
|
||
** 'read-number' now has its own history variable.
|
||
Additionally, the function now accepts a HIST argument which can be
|
||
used to specify a custom history variable.
|
||
|
||
+++
|
||
** Input history for 'goto-line' is now local to every buffer.
|
||
Each buffer will keep a separate history of line numbers used with
|
||
'goto-line'. This should help making faster the process of finding
|
||
line numbers that were previously jumped to.
|
||
|
||
+++
|
||
** When 'suggest-key-bindings' is non-nil, the completion list of 'M-x'
|
||
shows equivalent key bindings for all commands that have them.
|
||
|
||
---
|
||
** Movement commands in 'gomoku-mode' are fixed.
|
||
'gomoku-move-sw' and 'gomoku-move-ne' now work correctly, and
|
||
horizontal movements now stop at the edge of the board.
|
||
|
||
|
||
* Changes in Specialized Modes and Packages in Emacs 28.1
|
||
|
||
** EIEIO: 'oset' and 'oset-default' are declared obsolete
|
||
|
||
** New minor mode 'cl-font-lock-built-in-mode' for `lisp-mode'
|
||
The mode provides refined highlighting of built-in functions, types,
|
||
and variables.
|
||
|
||
** archive-mode
|
||
*** Can now modify members of 'ar' archives.
|
||
*** Display of summaries unified between backends
|
||
*** New var 'archive-hidden-columns' and cmd 'archive-hideshow-column'
|
||
These let you control which columns are displayed and which are kept hidden
|
||
|
||
** Emacs-Lisp mode
|
||
|
||
*** The mode-line now indicates whether we're using lexical or dynamic scoping.
|
||
|
||
** Dired
|
||
|
||
*** New user option 'dired-mark-region' affects all Dired commands
|
||
that mark files. When non-nil and the region is active in Transient
|
||
Mark mode, then Dired commands operate only on files in the active
|
||
region. The values 'file' and 'line' of this user option define the
|
||
details of marking the file at the end of the region.
|
||
|
||
*** State changing VC operations are supported in Dired on files and
|
||
directories with the help of new command 'dired-vc-next-action'.
|
||
|
||
** Change Logs and VC
|
||
|
||
*** New command 'vc-dir-root' uses the root directory without asking.
|
||
|
||
*** New commands 'vc-dir-mark-registered-files' (bound to '* r') and
|
||
'vc-dir-mark-unregistered-files'.
|
||
|
||
** Gnus
|
||
|
||
---
|
||
*** Change to default value of 'message-draft-headers' user option.
|
||
The 'Date' symbol has been removed from the default value, meaning that
|
||
draft or delayed messages will get a date reflecting when the message
|
||
was sent. To restore the original behavior of dating a message
|
||
from when it is first saved or delayed, add the symbol 'Date' back to
|
||
this user option.
|
||
|
||
** Help
|
||
|
||
+++
|
||
*** New command 'describe-keymap' describes keybindings in a keymap.
|
||
|
||
---
|
||
** The old non-SMIE indentation of 'sh-mode' has been removed.
|
||
|
||
---
|
||
** The sb-image.el library is now marked obsolete.
|
||
This file was a compatibility kludge which is no longer needed.
|
||
|
||
---
|
||
** 'lisp-mode' now uses 'common-lisp-indent-function'.
|
||
To revert to the previous behaviour,
|
||
'(setq lisp-indent-function 'lisp-indent-function)' from 'lisp-mode-hook'.
|
||
|
||
** Edebug
|
||
|
||
+++
|
||
*** Edebug specification lists can use the new keyword '&error', which
|
||
unconditionally aborts the current edebug instrumentation with the
|
||
supplied error message.
|
||
|
||
+++
|
||
** ElDoc
|
||
|
||
*** New hook 'eldoc-documentation-functions' to be used for registering
|
||
doc string functions. This makes the results of all doc string
|
||
functions accessible to the user through the existing single function hook
|
||
'eldoc-documentation-function'.
|
||
|
||
*** 'eldoc-documentation-function' is now a user option.
|
||
Modes should use the new hook instead of this user option to register
|
||
their backends.
|
||
|
||
** Eshell
|
||
|
||
---
|
||
*** Environment variable INSIDE_EMACS is now copied to subprocesses.
|
||
Its value equals the result of evaluating '(format "%s,eshell" emacs-version)'.
|
||
|
||
** Tramp
|
||
|
||
+++
|
||
*** New connection method "media", which allows accessing media devices
|
||
like cell phones, tablets or cameras.
|
||
|
||
** Tempo
|
||
|
||
---
|
||
*** 'tempo-define-template' can now re-assign templates to tags.
|
||
Previously, assigning a new template to an already defined tag had no
|
||
effect.
|
||
|
||
** map.el
|
||
|
||
*** Pcase 'map' pattern added keyword symbols abbreviation.
|
||
A pattern like '(map :sym)' binds the map's value for ':sym' to 'sym',
|
||
equivalent to '(map (:sym sym))'.
|
||
|
||
** Package
|
||
|
||
+++
|
||
*** New functions to filter the package list.
|
||
The filter command key bindings are as follows:
|
||
|
||
key binding
|
||
--- -------
|
||
/ a package-menu-filter-by-archive
|
||
/ k package-menu-filter-by-keyword
|
||
/ n package-menu-filter-by-name
|
||
/ s package-menu-filter-by-status
|
||
/ v package-menu-filter-by-version
|
||
/ / package-menu-filter-clear
|
||
|
||
** gdb-mi
|
||
|
||
+++
|
||
*** gdb-mi can now store and restore window configurations.
|
||
Use 'gdb-save-window-configuration' to save window configuration to a
|
||
file and 'gdb-load-window-configuration' to load from a file. These
|
||
commands can also be accessed through the menu bar under 'Gud --
|
||
GDB-Windows'. 'gdb-default-window-configuration-file', when non-nil,
|
||
is loaded when GDB starts up.
|
||
|
||
+++
|
||
*** gdb-mi can now restore window configuration after quit.
|
||
Set 'gdb-restore-window-configuration-after-quit' to non-nil and Emacs
|
||
will remember the window configuration before GDB started and restore
|
||
it after GDB quits. A toggle button is also provided under 'Gud --
|
||
GDB-Windows'.
|
||
|
||
+++
|
||
*** gdb-mi now has a better logic for displaying source buffers
|
||
Now GDB only uses one source window to display source file by default.
|
||
Customize 'gdb-max-source-window-count' to use more than one window.
|
||
Control source file display by 'gdb-display-source-buffer-action'.
|
||
|
||
** Gravatar
|
||
|
||
---
|
||
*** New user option 'gravatar-service' for host to query for gravatars.
|
||
Defaults to 'libravatar', with 'unicornify' and 'gravatar' as options.
|
||
|
||
** Compilation mode
|
||
|
||
*** Regexp matching of messages is now case-sensitive by default.
|
||
The variable 'compilation-error-case-fold-search' can be set for
|
||
case-insensitive matching of messages when the old behaviour is
|
||
required, but the recommended solution is to use a correctly matching
|
||
regexp instead.
|
||
|
||
** Hi-Lock
|
||
|
||
---
|
||
*** Matching in 'hi-lock-mode' is case-sensitive when regexp contains
|
||
upper case characters and `search-upper-case' is non-nil.
|
||
'highlight-phrase' also uses 'search-whitespace-regexp'
|
||
to substitute spaces in regexp search.
|
||
|
||
---
|
||
*** The default value of 'hi-lock-highlight-range' was enlarged.
|
||
The new default value is 2000000 (2 megabytes).
|
||
|
||
** Texinfo
|
||
|
||
---
|
||
*** New customizable option 'texinfo-texi2dvi-options'.
|
||
This is used when invoking 'texi2dvi' from 'texinfo-tex-buffer'.
|
||
|
||
** Rmail
|
||
|
||
---
|
||
*** New customizable option 'rmail-re-abbrevs'.
|
||
Its default value matches localized abbreviations of the "reply"
|
||
prefix on the Subject line in various languages.
|
||
|
||
** Apropos
|
||
|
||
*** New commands 'apropos-next-symbol' and 'apropos-previous-symbol'.
|
||
These new navigation commands are bound to 'n' and 'p' in
|
||
'apropos-mode'.
|
||
|
||
** cc-mode
|
||
|
||
*** Added support for Doxygen documentation style.
|
||
‘doxygen’ is now valid ‘c-doc-comment-style’ which recognises all
|
||
comment styles supported by Doxygen (namely ‘///’, ‘//!’, ‘/** … */’
|
||
and ‘/*! … */’. ‘gtkdoc’ remains the default for C and C++ modes; to
|
||
use ‘doxygen’ by default one might evaluate:
|
||
|
||
(setq-default c-doc-comment-style
|
||
'((java-mode . javadoc)
|
||
(pike-mode . autodoc)
|
||
(c-mode . doxygen)
|
||
(c++-mode . doxygen)))
|
||
|
||
or use it in a custom ‘c-style’.
|
||
|
||
*** Added support to line up ‘?’ and ‘:’ of a ternary operator.
|
||
The new ‘c-lineup-ternary-bodies’ function can be used as a lineup
|
||
function to align question mark and colon which are part of a ternary
|
||
operator (‘?:’). For example:
|
||
|
||
return arg % 2 == 0 ? arg / 2
|
||
: (3 * arg + 1);
|
||
|
||
To enable, add it to appropriate entries in ‘c-offsets-alist’, e.g.:
|
||
|
||
(c-set-offset 'arglist-cont '(c-lineup-ternary-bodies
|
||
c-lineup-gcc-asm-reg))
|
||
(c-set-offset 'arglist-cont-nonempty '(c-lineup-ternary-bodies
|
||
c-lineup-gcc-asm-reg
|
||
c-lineup-arglist))
|
||
(c-set-offset 'statement-cont '(c-lineup-ternary-bodies +))
|
||
|
||
** browse-url
|
||
|
||
*** Added support for custom URL handlers
|
||
|
||
There is a new defvar 'browse-url-default-handlers' and a defcustom
|
||
'browse-url-handlers' being alists with (REGEXP-OR-PREDICATE
|
||
. FUNCTION) entries allowing to define different browsing FUNCTIONs
|
||
depending on the URL to be browsed. The defvar is for default
|
||
handlers provided by Emacs itself or external packages, the defcustom
|
||
is for the user (and allows for overriding the default handlers).
|
||
|
||
Formerly, one could do the same by setting
|
||
'browse-url-browser-function' to such an alist. This usage is still
|
||
supported but deprecated.
|
||
|
||
*** Categorization of browsing functions in internal vs. external
|
||
|
||
All standard browsing functions such as 'browse-url-firefox',
|
||
'browse-url-mail', or 'eww' have been categorized into internal (URL
|
||
is browsed in Emacs) or external (an external application is spawned
|
||
with the URL). This is done by adding a 'browse-url-browser-kind'
|
||
symbol property to the browsing functions. With a new command
|
||
'browse-url-with-browser-kind', an URL can explicitly be browsed with
|
||
either an internal or external browser.
|
||
|
||
|
||
* New Modes and Packages in Emacs 28.1
|
||
|
||
*** Lisp Data mode
|
||
The new command 'lisp-data-mode' enables a major mode for buffers
|
||
composed of Lisp symbolic expressions that do not form a computer
|
||
program. The '.dir-locals.el' file is automatically set to use this
|
||
mode, as are other data files produced by Emacs.
|
||
|
||
|
||
* Incompatible Editing Changes in Emacs 28.1
|
||
|
||
** In 'nroff-mode', 'center-line' is now bound to 'M-o M-s'.
|
||
The original key binding was 'M-s', which interfered with I-search,
|
||
since the latter uses 'M-s' as a prefix key of the search prefix map.
|
||
|
||
** 'vc-print-branch-log' shows the change log for BRANCH from its root
|
||
directory instead of the default directory.
|
||
|
||
|
||
* Incompatible Lisp Changes in Emacs 28.1
|
||
|
||
** 'equal' no longer examines some contents of window configurations.
|
||
Instead, it considers window configurations to be equal only if they
|
||
are 'eq'. To compare contents, use 'compare-window-configurations'
|
||
instead. This change helps fix a bug in 'sxhash-equal', which returned
|
||
incorrect hashes for window configurations and some other objects.
|
||
|
||
---
|
||
** The obsolete function 'thread-alive-p' has been removed.
|
||
|
||
** 'dns-query' now consistently uses Lisp integers to represent integers.
|
||
Formerly it made an exception for integer components of SOA records,
|
||
because SOA serial numbers can exceed fixnum ranges on 32-bit platforms.
|
||
Emacs now supports bignums so this old glitch is no longer needed.
|
||
|
||
** The Lisp variables 'previous-system-messages-locale' and
|
||
'previous-system-time-locale' have been removed, as they were created
|
||
by mistake and were not useful to Lisp code.
|
||
|
||
** The 'load-dangerous-libraries' variable is now obsolete.
|
||
It was used to allow loading Lisp libraries compiled by XEmacs, a
|
||
modified version of Emacs which is no longer actively maintained.
|
||
This is no longer supported, and setting this variable has no effect.
|
||
|
||
+++
|
||
** The macro 'with-displayed-buffer-window' is now obsolete.
|
||
Use macro 'with-current-buffer-window' with action alist entry 'body-function'.
|
||
|
||
|
||
* Lisp Changes in Emacs 28.1
|
||
|
||
** New macro 'dlet' to dynamically bind variables.
|
||
|
||
** The variable 'force-new-style-backquotes' has been removed.
|
||
This removes the final remaining trace of old-style backquotes.
|
||
|
||
** The module header 'emacs-module.h' now contains type aliases
|
||
'emacs_function' and 'emacs_finalizer' for module functions and
|
||
finalizers, respectively.
|
||
|
||
** Module functions can now install an optional finalizer that is
|
||
called when the function object is garbage-collected. Use
|
||
'set_function_finalizer' to set the finalizer and
|
||
'get_function_finalizer' to retrieve it.
|
||
|
||
** Modules can now open a channel to an existing pipe process using
|
||
the new module function 'open_channel'. Modules can use this
|
||
functionality to asynchronously send data back to Emacs.
|
||
|
||
** 'file-modes', 'set-file-modes', and 'set-file-times' now have an
|
||
optional argument specifying whether to follow symbolic links.
|
||
|
||
** 'parse-time-string' can now parse ISO 8601 format strings,
|
||
such as "2020-01-15T16:12:21-08:00".
|
||
|
||
+++
|
||
** The new function 'dom-remove-attribute' has been added.
|
||
|
||
---
|
||
** 'make-network-process', 'make-serial-process' :coding behavior change.
|
||
Previously, passing ":coding nil" to either of these functions would
|
||
override any non-nil binding for 'coding-system-for-read' and
|
||
'coding-system-for-write'. For consistency with 'make-process' and
|
||
'make-pipe-process', passing ":coding nil" is now ignored. No code in
|
||
Emacs depended on the previous behavior; if you really want the
|
||
process' coding-system to be nil, use 'set-process-coding-system'
|
||
after the process has been created, or pass in ":coding '(nil nil)".
|
||
|
||
+++
|
||
** 'open-network-stream' now accepts a :coding argument.
|
||
This allows specifying the coding systems used by a network process
|
||
for encoding and decoding without having to bind
|
||
coding-system-for-{read,write} or call 'set-process-coding-system'.
|
||
|
||
+++
|
||
** 'open-gnutls-stream' now also accepts a :coding argument.
|
||
|
||
|
||
* Changes in Emacs 28.1 on Non-Free Operating Systems
|
||
|
||
+++
|
||
** On macOS, Emacs can now load dynamic modules with a ".dylib" suffix.
|
||
'module-file-suffix' now has the value ".dylib" on macOS, but the
|
||
".so" suffix is supported as well.
|
||
|
||
+++
|
||
** On MS-Windows, Emacs can now toggle the IME.
|
||
A new function 'w32-set-ime-open-status' can now be used to disable
|
||
and enable the MS-Windows native Input Method Editor (IME) at run
|
||
time. A companion function 'w32-get-ime-open-status' returns the
|
||
current IME activation status.
|
||
|
||
+++
|
||
** On MS-Windows, Emacs can now use the native image API to display images.
|
||
Emacs can now use the MS-Windows GDI+ library to load and display
|
||
images in JPEG, PNG, GIF and TIFF formats. This support is enabled
|
||
unless Emacs was configured --without-native-image-api.
|
||
|
||
This feature is experimental, and needs to be turned on to be used.
|
||
To turn this on, set the variable 'w32-use-native-image-API' to a
|
||
non-nil value. Please report any bugs you find while using the native
|
||
image API via "M-x report-emacs-bug".
|
||
|
||
|
||
----------------------------------------------------------------------
|
||
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:
|