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.)
+ +++ 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,
+ When you add a new item, use the appropriate mark if you are sure it
+ applies, and please also update docstrings as needed.
\f
- * Installation Changes in Emacs 27.1
+ * Installation Changes in Emacs 28.1
- ** Emacs now uses GMP, the GNU Multiple Precision library.
- By default, if 'configure' does not find a suitable libgmp, it
- arranges for the included mini-gmp library to be built and used.
- The new 'configure' option --without-libgmp uses mini-gmp even if a
- suitable libgmp is available.
+ ** 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.
- ** 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.
-
- ** The etags program now uses the C library's regular expression matcher
- when possible, and a compatible regex substitute otherwise. This will
- let developers maintain Emacs's own regex code without having to also
- support other programs. The new configure option '--without-included-regex'
- forces etags to use the C library's regex matcher even if the regex
- substitute ordinarily would be used to work around compatibility problems.
-
- ** 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.
-
- ** Ibuffer
-
- ---
- *** All mode filters can now accept a list of symbols.
- This means you can now easily filter several major modes, as well
- as a single mode.
-
- ** Gnus
-
- +++
- *** The nnimap backend now has support for IMAP namespaces.
- This feature can be enabled by setting the new 'nnimap-use-namespaces'
- server variable to non-nil.
-
- \f
- * 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).
-
- We recommend against putting any customizations in this file that
- don't need to be set up before initializing installed add-on packages,
- because the early init file is read too early into the startup
- process, and some important parts of the Emacs session, such as
- window-system and other GUI features, are not yet set up, which could
- make some customization fail to work.
-
- +++
- ** Installed packages are now activated *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', or sets 'package-enable-at-startup' to nil then it won't
- work right without some adjustment:
- - you can move that code to the early init file (see above), so those settings
- apply before Emacs tries to activate the packages.
- - you can use the new 'package-quickstart' so activation of packages does not
- need to pay attention to 'package-load-list' or 'package-user-dir' any more.
+ 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.
---
- ** Emacs now notifies systemd when startup finishes or shutdown begins.
- Units that are ordered after 'emacs.service' will only be started
- after Emacs has finished initialization and is ready for use.
- (If your Emacs is installed in a non-standard location and you copied the
- emacs.service file to eg ~/.config/systemd/user/, you will need to copy
- the new version of the file again.)
-
- \f
- * Changes in Emacs 27.1
-
- +++
- ** emacsclient now supports the 'EMACS_SOCKET_NAME' environment variable.
- The behavior is identical to 'EMACS_SERVER_FILE', in that the
- command-line value specified via '--socket-name' will override the
- environment, and the natural default to TMPDIR, then '/tmp', continues
- to apply.
-
- +++
- ** The function 'read-passwd' uses '*' as default character to hide passwords.
+ ** '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.
---
- ** 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.
+ ** '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.
---
- ** 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.
+ ** The ftx font backend driver has been removed.
+ It was declared obsolete in Emacs 27.1.
- +++
- ** 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.
-
- +++
- ** 'libxml-parse-xml-region' and 'libxml-parse-html' region take
- a parameter that's called DISCARD-COMMENTS, but it really only
- discards the top-level comment. Therefore this parameter is now
- obsolete, and the new utility function 'xml-remove-comments' can be
- used to remove comments before calling the libxml functions to parse
- the data.
-
- +++
- ** The Network Security Manager now allows more fine-grained control
- of what checks to run via the 'network-security-protocol-checks'
- variable.
-
- +++
- ** TLS connections have their security tightened by default.
- Most of the checks for outdated, believed-to-be-weak TLS algorithms
- and ciphers are now switched on by default. By default, the NSM will
- flag connections using these weak algorithms and ask users whether to
- allow them. To get the old behavior back (where certificates are
- checked for validity, but no warnings about weak cryptography are
- issued), you can either set 'network-security-protocol-checks' to nil,
- or adjust the elements in that variable to only happen on the 'high'
- security level (assuming you use the 'medium' level).
-
- +++
- ** 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\}
-
- ---
- ** The German prefix and postfix input methods now support Capital sharp S.
-
- ---
- ** New input methods hawaiian-postfix and hawaiian-prefix.
-
- +++
- ** New function 'exec-path'.
- This function by default returns the value of the corresponding
- variable, but can optionally return the equivalent of 'exec-path'
- from a remote host.
-
- +++
- ** The function 'executable-find' supports an optional argument REMOTE.
- This triggers to search the program on the remote host as indicated by
- 'default-directory'.
+ \f
+ * Startup Changes in Emacs 28.1
- +++
- ** New variable 'auto-save-no-message'.
- When set to t, no message will be shown when auto-saving (default
- value: nil).
+ \f
+ * Changes in Emacs 28.1
- ---
- ** The value of 'make-cursor-line-fully-visible' can now be a function.
- In addition to nil or non-nil, the value can now be a predicate
- function. Follow mode uses this to control scrolling of its windows
- when the last screen line in a window is not fully visible.
+ ** 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.
\f
- * Editing Changes in Emacs 27.1
+ * Editing Changes in Emacs 28.1
+++
- ** New command 'make-empty-file'.
-
- ---
- ** 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 command 'undo-redo'.
+ It undoes previous undo commands, but doesn't record itself as an
+ undoable command.
+++
- ** 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.
-
- ---
- ** New user option 'flyspell-case-fold-duplications'.
- This option controls whether Flyspell mode considers consecutive words
- to be duplicates if they are not in the same case. If non-nil, the
- default, words are considered to be duplicates even if their letters'
- case does not match.
-
- ---
- ** 'write-abbrev-file' now includes special properties.
- 'write-abbrev-file' now writes special properties like ':case-fixed'
- for abbrevs that have them.
+ ** '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.
+++
- ** 'write-abbrev-file' skips empty tables.
- 'write-abbrev-file' now skips inserting a 'define-abbrev-table' form for
- tables which do not have any non-system abbrevs to save.
+ ** 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.
+++
- ** The new functions and commands 'text-property-search-forward' and
- 'text-property-search-backward' have been added. These provide an
- interface that's more like functions like @code{search-forward}.
-
- ---
- ** More commands support noncontiguous rectangular regions, namely
- 'upcase-dwim', 'downcase-dwim', 'replace-string', 'replace-regexp'.
-
- +++
- ** When asked to visit a large file, Emacs now offers visiting it literally.
- Previously, Emacs would only ask for confirmation before visiting
- large files. Now it also offers a third alternative: to visit the
- file literally, as in 'find-file-literally', which speeds up
- navigation and editing of large files.
+ ** When 'suggest-key-bindings' is non-nil, the completion list of 'M-x'
+ shows equivalent key bindings for all commands that have them.
- ---
- ** add-dir-local-variable now uses dotted pair notation syntax
- to write alists of variables to .dir-locals.el. This is the same
- syntax that you can see in the example of a .dir-locals.el file
- in (info "(emacs) Directory Variables")
-
++++
+** Files can be visited asynchronously.
+If the new user option 'execute-file-commands-asynchronously' has a
+non-nil value, interactive file visiting commands load the file
+asynchronously into the respective buffer. I.e., Emacs is still
+responsive while loading the files, which is useful especially for
+remote files. If the value is a regular expression, files matching
+this expression are loaded asynchronously. See the node "(emacs)
+Visiting" in the user manual for the supported commands.
+
\f
- * Changes in Specialized Modes and Packages in Emacs 27.1
-
- ---
- ** Follow mode
- In the current follow group of windows, "ghost" cursors are no longer
- displayed in the non-selected follow windows. To get the old behavior
- back, customize follow-hide-ghost-cursors to nil.
-
- ** Octave mode
- The mode is automatically enabled in files that start with the
- 'function' keyword.
-
- ** project.el
- *** New commands project-search and project-query-replace
-
- ** Etags
- +++
- *** 'next-file' is now an obsolete alias of tags-next-file
- *** tags-loop-revert-buffers is an obsolete alias of multifile-revert-buffers
- *** The tags-loop-continue function along with the tags-loop-operate and
- tags-loop-scan variables are now obsolete; use the new multifile-initialize and
- multifile-continue functions instead.
-
- ---
- ** bibtex
- *** New commands 'bibtex-next-entry' and 'bibtex-previous-entry'.
- In bibtex-mode-map, forward-paragraph and backward-paragraph are
- remapped to these, respectively.
-
- +++
- ** Dired
-
- *** New command 'dired-create-empty-file'.
-
- ** Change Logs and VC
-
- *** Recording ChangeLog entries doesn't require an actual file.
- If a ChangeLog file doesn't exist, and if the new variable
- 'add-log-dont-create-changelog-file' is non-nil (which is the
- default), commands such as 'C-x 4 a' will add log entries to a
- suitable named temporary buffer. (An existing ChangeLog file will
- still be used if it exists.) Set the variable to nil to get the
- previous behavior of always creating a buffer that visits a ChangeLog
- file.
-
- *** New customizable variable 'vc-git-grep-template'.
- This new variable allows customizing the default arguments passed to
- git-grep when 'vc-git-grep' is used.
-
- *** Command 'vc-git-stash' now respects marks in the '*vc-dir*' buffer.
- When some files are marked, only those are stashed.
- When no files are marked, all modified files are stashed, as before.
-
- *** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag.
-
- ---
- *** 'vc-hg' now invokes 'smerge-mode' when visiting files.
- Code that attempted to invoke 'smerge-mode' when visiting an Hg file
- with conflicts existed in earlier versions of Emacs, but incorrectly
- never detected a conflict due to invalid assumptions about cached
- values.
-
- ** diff-mode
- *** Hunks are now automatically refined by default.
- To disable it, set the new defcustom 'diff-font-lock-refine' to nil.
-
- *** File headers can be shortened, mimicking Magit's diff format.
- To enable it, set the new defcustom 'diff-font-lock-prettify to t.
-
- ** Browse-url
-
- *** The function 'browse-url-emacs' can now visit a URL in selected window.
- It now treats the optional 2nd argument to mean that the URL should be
- shown in the currently selected window.
-
- ** Comint
-
- +++
- *** 'send-invisible' is now an obsolete alias for 'comint-send-invisible'.
- Also, 'shell-strip-ctrl-m' is declared obsolete.
-
- +++
- *** 'C-c .' (comint-insert-previous-argument) no longer interprets '&'.
- This feature caused problems when '&&' was present in the previous
- command. Since this command emulates 'M-.' in Bash and zsh, neither
- of which treats '&' specially, the feature was removed for
- compatibility with these shells.
-
- +++
- *** 'comint-insert-previous-argument' can now count arguments from the end.
- By default, invoking 'C-c .' with a numeric argument N would copy the
- Nth argument, counting from the first one. But if the new option
- 'comint-insert-previous-argument-from-end' is non-nil, it will copy
- the Nth argument counting from the last one. Thus 'C-c .' can now
- better emulate 'M-.' in both Bash and zsh, since the former counts
- from the beginning of the arguments, while the latter counts from the
- end.
-
- ** SQL
-
- *** Installation of 'sql-indent' from ELPA is strongly encouraged.
- This package support sophisticated rules for properly indenting SQL
- statements. SQL is not like other programming languages like C, Java,
- or Python where code is sparse and rules for formatting are fairly
- well established. Instead SQL is more like COBOL (from which it came)
- and code tends to be very dense and line ending decisions driven by
- syntax and line length considerations to make readable code.
- Experienced SQL developers may prefer to rely upon existing Emacs
- facilities for formatting code but the 'sql-indent' package provides
- facilities to aid more casual SQL developers layout queries and
- complex expressions.
-
- *** 'sql-use-indent-support' (default t) enables SQL indention support.
- The 'sql-indent' package from ELPA must be installed to get the
- indentation support in 'sql-mode' and 'sql-interactive-mode'.
-
- *** 'sql-mode-hook' and 'sql-interactive-mode-hook' changed.
- Both hook variables have had 'sql-indent-enable' added to their
- default values. If youhave existing customizations to these variables,
- you should make sure that the new default entry is included.
-
- ** Term
-
- ---
- *** 'term-read-noecho' is now obsolete, use 'read-passwd' instead.
-
- ** Flymake
-
- +++
- *** The variable 'flymake-diagnostic-types-alist' is obsolete.
- You should instead set properties on known diagnostic symbols, like
- ':error' and ':warning', as demonstrated in the Flymake manual.
-
- *** New customizable variable 'flymake-start-on-save-buffer'.
- Control whether Flymake starts checking the buffer on save.
-
- *** Flymake and backend functions may exchange hints about buffer changes.
- This enables more efficient backends. See the docstring of
- 'flymake-diagnostic-functions' or the Flymake manual for details.
-
- ** Package
-
- *** New function 'package-get-version' lets packages query their own version.
- Example use in auctex.el: (defconst auctex-version (package-get-version))
-
- *** New 'package-quickstart' feature.
- When 'package-quickstart' is non-nil, package.el precomputes a big autoloads
- file so that activation of packages can be done much faster, which can speed up
- your startup significantly.
- It also causes variables like package-user-dir and package-load-list to be
- consulted when 'package-quickstart-refresh' is run rather than at startup so
- you don't need to set them in your early init file.
-
- *** New function 'package-activate-all'.
-
- ** Info
-
- ---
- *** Info can now follow 'file://' protocol URLs.
- The 'file://' URLs in Info documents can now be followed by passing
- them to the 'browse-url' function, like the other protocols: ftp,
- http, and https. This allows to have references to local HTML files,
- for example.
-
- ** Xref
-
- +++
- *** New command 'xref-find-definitions-at-mouse'.
- This command finds definitions of the identifier at the place of a
- mouse click event, and is intended to be bound to a mouse event.
-
- ** 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
-
- +++
- *** A prefix argument to 'gnus-summary-limit-to-score' will limit reverse.
- Limit to articles with score at below.
-
- *** The function 'gnus-score-find-favorite-words' has been renamed
- from 'gnus-score-find-favourite-words'.
-
- ---
- *** Gmane has been removed as an nnir backend, since Gmane no longer
- has a search engine.
-
- +++
- *** Splitting mail on common mailing list headers has been added.
- See the concept index in the Gnus manual for the 'match-list' entry.
-
- +++
- *** nil is no longer an allowed value for 'mm-text-html-renderer'.
-
- +++
- *** A new Gnus summary mode command, 'S A'
- ('gnus-summary-attach-article') can be used to attach the current
- article(s) to a pre-existing Message buffer, or create a new Message
- buffer with the article(s) attached.
-
- ---
- *** New option 'nnir-notmuch-filter-group-names-function'.
- This option controls whether and how to use Gnus search groups as
- 'path:' search terms to 'notmuch'.
-
- ** erc
-
- ---
- *** 'erc-button-google-url' has been renamed 'erc-button-search-url'
- and its value has been changed to Duck Duck Go.
-
- ** EUDC
-
- *** XEmacs support has been removed.
-
- ** eww/shr
-
- *** When opening external links in eww/shr (typically with the
- 'C-u RET' keystroke on a link), the link will be flashed with the new
- 'shr-selected-link' face to give the user feedback that the command
- has been executed.
-
- +++
- *** New option 'shr-discard-aria-hidden'.
- If set, shr will not render tags with attribute 'aria-hidden="true"'.
- This attribute is meant to tell screen readers to ignore a tag.
-
- ** 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'.
-
- +++
- ** Enriched mode supports the 'charset' text property.
- You can add or modify the 'charset' text properties of text using the
- Edit->Text Properties->Special Properties menu, or by invoking the
- 'facemenu-set-charset' command. Documents in Enriched mode will be
- saved with the charset properties, and those properties will be
- restored when the file is visited.
-
- ** 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'.
-
- ---
- *** CSS mode, SCSS mode, and Less CSS mode now have support for Imenu.
-
- ** SGML mode
-
- ---
- *** 'sgml-quote' now handles double quotes and apostrophes
- when escaping text and in addition all numeric entities when
- unescaping text.
-
- ** Python mode
-
- ---
- *** Python mode supports three different font lock decoration levels.
- The maximum level is used by default; customize
- 'font-lock-maximum-decoration' to tone down the decoration.
-
- ** 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.
+ * Changes in Specialized Modes and Packages in Emacs 28.1
** Help
** Tramp
+---
+*** Tramp is now thread-safe.
+
+++
- *** New connection method "nextcloud", which allows to access OwnCloud
- or NextCloud hosted files and directories.
+ *** New connection method "media", which allows accessing media devices
+ like cell phones, tablets or cameras.
- +++
- *** Connection methods "obex" and "synce" are removed, because they
- are obsoleted in GVFS.
-
- +++
- *** Validated passwords are saved by auth-source backends which support this.
-
- +++
- *** During user and host name completion in the minibuffer, results
- from auth-source search are taken into account. This can be disabled
- by setting user option 'tramp-completion-use-auth-sources' to nil.
-
- +++
- *** The user option 'tramp-ignored-file-name-regexp' allows to disable
- Tramp for some look-alike remote file names.
-
- +++
- *** For some connection methods, like "su" or "sudo", the host name in
- ad-hoc multi-hop file names must match the previous hop.
-
- ** Rcirc
-
- ---
- *** New user option 'rcirc-url-max-length'.
- Setting this option to an integer causes URLs displayed in Rcirc
- buffers to be truncated to that many characters.
-
- ** Register
- ---
- *** The return value of method 'register-val-describe' includes the
- names of buffers shown by the windows of a window configuration.
-
- ---
- ** The options.el library has been removed.
- It was obsolete since Emacs 22.1, replaced by customize.
-
- ** The tls.el and starttls.el libraries are now marked obsolete.
- Use of built-in libgnutls based functionality (described in the Emacs
- GnuTLS manual) is recommended instead.
-
- ** Message
-
- +++
- *** Messages can now be systematically encrypted
- when the PGP keyring contains a public key for every recipient. To
- achieve this, add 'message-sign-encrypt-if-all-keys-available' to
- 'message-send-hook'.
-
- ---
- *** When replying a message that have addresses on the form
- '"foo@bar.com" <foo@bar.com>', Message will elide the repeated "name"
- from the address field in the response.
-
- ---
- *** The default of 'message-forward-as-mime' has changed from t to nil
- as it has been reported that many recipients can't read forwards that
- are formatted as MIME digests.
-
- +++
- *** 'message-forward-included-headers' has changed its default to
- exclude most headers when forwarding.
-
- ** EasyPG
-
- ---
- *** 'epa-pinentry-mode' is renamed to 'epg-pinentry-mode'.
- It now applies to epg functions as well as epa functions.
-
- ---
- *** The alias functions 'epa--encode-coding-string',
- 'epa--decode-coding-string', and 'epa--select-safe-coding-system' have
- been removed. Use 'encode-coding-string', 'decode-coding-string', and
- 'select-safe-coding-system' instead.
-
- ** Rmail
-
- +++
- *** New user option 'rmail-output-reset-deleted-flag'.
- If this option is non-nil, messages appended to an output file by the
- 'rmail-output' command have their Deleted flag reset.
-
- *** The command 'rmail-summary-by-senders' with an empty argument
- selects the messages to summarize with a regexp that matches the
- sender of the current message.
-
- ** Threads
-
- +++
- *** New variable 'main-thread' holds Emacs's main thread.
- This is handy in Lisp programs that run on a non-main thread and want
- to signal the main thread, e.g., when they encounter an error.
-
- +++
- *** 'thread-join' returns the result of the finished thread now.
-
- +++
- *** 'thread-signal' does not propagate errors to the main thread.
- Instead, error messages are just printed in the main thread.
-
- ---
- *** 'thread-alive-p' is now obsolete, use 'thread-live-p' instead.
-
- +++
- *** New command 'list-threads' shows Lisp threads.
- See the current list of live threads in a tabulated-list buffer which
- automatically updates. In the buffer, you can use 's q' or 's e' to
- signal a thread with quit or error respectively, or get a snapshot
- backtrace with 'b'.
-
- ---
- ** thingatpt.el supports a new "thing" called 'uuid'.
- A symbol 'uuid' can be passed to thing-at-point and it returns the
- UUID at point.
+ ** 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
- ** Interactive automatic highlighting
+++
- *** 'highlight-regexp' can now highlight subexpressions.
- The now command accepts a prefix numeric argument to choose the
- subexpression.
-
- ** Mouse display of minor mode menu
+ *** New functions to filter the package list.
+ The filter command key bindings are as follows:
- ---
- *** 'minor-mode-menu-from-indicator' now display full minor mode name.
- When there is no menu for a mode, display the mode name after the
- indicator instead of just the indicator (which is sometimes cryptic).
+ 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
\f
- * New Modes and Packages in Emacs 27.1
-
- ** multifile.el lets one setup multifile operations like search&replace
-
- +++
- ** 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.
-
- +++
- ** New library for writing JSONRPC applications (https://jsonrpc.org)
- The 'jsonrpc' library enables writing Emacs Lisp applications that
- rely on this protocol. Since the protocol is designed to be
- transport-agnostic, the library provides an API to implement new
- transport strategies as well as a separate API to use them. A
- transport implementation for process-based communication, such as is
- used by the Language Server Protocol (LSP), is readily available.
-
- +++
- ** Backtrace mode improves viewing of Elisp backtraces.
- Backtrace mode adds pretty printing, fontification and ellipsis
- expansion to backtrace buffers produced by the Lisp debugger, Edebug
- and ERT. See the node "Backtraces" in the Elisp manual for
- documentation of the new mode and its commands.
+ * New Modes and Packages in Emacs 28.1
\f
- * Incompatible Lisp Changes in Emacs 27.1
+ * Incompatible Lisp Changes in Emacs 28.1
- ** define-fringe-bitmap is always defined, even when Emacs is built
- without any GUI support.
+ ** '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.
---
- ** Just loading a theme's file no longer activates the theme's settings.
- Loading a theme with 'M-x load-theme' still activates the theme, as it
- did before. However, loading the theme's file with "M-x load-file",
- or using 'require' or 'load' in a Lisp program, doesn't actually apply
- the theme's settings until you either invoke 'M-x enable-theme' or
- type 'M-x load-theme'. (In a Lisp program, calling 'enable-theme' or
- invoking 'load-theme' with NO-ENABLE argument omitted or nil has the
- same effect of activating a theme whose file has been loaded.) The
- special case of the 'user' theme is an exception: it is frequently
- used for ad-hoc customizations, so the settings of that theme are by
- default applied immediately.
-
- The variable 'custom--inhibit-theme-enable' controls this behavior;
- its default value changed in Emacs 27.1.
+ ** The obsolete function 'thread-alive-p' has been removed.
- ** The 'repetitions' argument of 'benchmark-run' can now also be a variable.
+ ** '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 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.
-
- ---
- ** 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-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-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.
-
- ---
- ** Further functions and variables obsolete since Emacs 24 have been removed:
- default-directory-alist, dired-default-directory,
- dired-default-directory-alist, dired-enable-local-variables,
- dired-hack-local-variables, dired-local-variables-file, dired-omit-here-always.
-
- ** garbage collection no longer treats miscellaneous objects specially;
- they are now allocated like any other pseudovector. As a result, the
- 'garbage-collect' and 'memory-use-count' functions no longer return a
- 'misc' component, and the 'misc-objects-consed' variable has been
- removed.
+ ** 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.
\f
- * Lisp Changes in Emacs 27.1
-
- ** lookup-key can take a list of keymaps as argument.
-
- +++
- ** 'condition-case' now accepts 't' to match any error symbol.
-
- +++
- ** New function 'proper-list-p'.
- Given a proper list as argument, this predicate returns its length;
- otherwise, it returns nil. 'format-proper-list-p' is now an obsolete
- alias for the new function.
-
- +++
- ** Emacs Lisp integers can now be of arbitrary size.
- Emacs uses the GNU Multiple Precision (GMP) library to support
- integers whose size is too large to support natively. The integers
- supported natively are known as "fixnums", while the larger ones are
- "bignums". The new predicates 'bignump' and 'fixnump' can be used to
- distinguish between these two types of integers.
-
- All the arithmetic, comparison, and logical (a.k.a. "bitwise")
- operations where bignums make sense now support both fixnums and
- bignums. However, note that unlike fixnums, bignums will not compare
- equal with 'eq', you must use 'eql' instead. (Numerical comparison
- with '=' works on both, of course.)
-
- Since large bignums consume a lot of memory, Emacs limits the size of
- the largest bignum a Lisp program is allowed to create. The
- nonnegative value of the new variable 'integer-width' specifies the
- maximum number of bits allowed in a bignum. Emacs signals an integer
- overflow error if this limit is exceeded.
-
- Several primitive functions formerly returned floats or lists of
- integers to represent integers that did not fit into fixnums. These
- functions now simply return integers instead. Affected functions
- include functions like encode-char that compute code-points, functions
- like file-attributes that compute file sizes and other attributes,
- functions like process-id that compute process IDs, and functions like
- user-uid and group-gid that compute user and group IDs.
-
- +++
- ** Although the default timestamp format is still (HI LO US PS),
- it is planned to change in a future Emacs version, to exploit bignums.
- The documentation has been updated to mention that the timestamp
- format may change and that programs should use functions like
- format-time-string, decode-time, and encode-time rather than probing
- the innards of a timestamp directly, or creating a timestamp by hand.
-
- +++
- ** encode-time supports a new API (encode-time TIME &optional FORM).
- This can convert decoded times and Lisp time values to Lisp timestamps
- of various forms, including a new timestamp form (TICKS . HZ), where
- TICKS is an integer and HZ is a positive integer denoting a clock
- frequency. The old encode-time API is still supported.
-
- +++
- ** 'time-add', 'time-subtract', and 'time-less-p' now accept
- infinities and NaNs too, and propagate them or return nil like
- floating-point operators do.
-
- +++
- ** New function 'time-equal-p' compares time values for equality.
-
- ** define-minor-mode automatically documents the meaning of ARG.
-
- +++
- ** The function 'recenter' now accepts an additional optional argument.
- By default, calling 'recenter' will not redraw the frame even if
- 'recenter-redisplay' is non-nil. Call 'recenter' with the new second
- argument non-nil to force redisplay per 'recenter-redisplay's value.
-
- +++
- ** New functions 'major-mode-suspend' and 'major-mode-restore'.
- Use them when switching temporarily to another major mode, e.g. for
- 'hexl-mode', or to switch between 'c-mode' and 'image-mode' in XPM.
-
- +++
- ** New macro 'dolist-with-progress-reporter'.
- This works like 'dolist', but reports progress similar to
- 'dotimes-with-progress-reporter'.
-
- +++
- ** New hook 'after-delete-frame-functions'.
- This works like 'delete-frame-functions', but runs after the frame to
- be deleted has been made dead and removed from the frame list.
-
- ---
- ** The function 'provided-mode-derived-p' was extended to support aliases.
- The function now returns non-nil when the argument MODE is derived
- from any alias of any of MODES.
-
- +++
- ** New frame focus state inspection interface.
- The hooks 'focus-in-hook' and 'focus-out-hook' are now obsolete.
- Instead, attach to 'after-focus-change-function' using 'add-function'
- and inspect the focus state of each frame using 'frame-focus-state'.
-
- +++
- ** Emacs now requests and recognizes focus-change notifications from TTYs.
- On terminal emulators that support the feature, Emacs can now support
- 'focus-in-hook' and 'focus-out-hook' for TTY frames.
-
- +++
- ** Window-specific face remapping.
- Face specifications (of the kind used in 'face-remapping-alist')
- now support filters, allowing faces to vary between different windows
- displaying the same buffer. See the Info node "Face Remapping" of the
- Emacs Lisp Reference manual for more detail.
-
- +++
- ** Special handling of buffer-local 'window-size-change-functions'.
- A buffer-local value of this hook is now run only if at least one
- window showing the buffer has changed its size.
-
- +++
- ** The function assoc-delete-all now takes an optional predicate argument.
-
- +++
- ** New function 'string-distance' to calculate the Levenshtein distance
- between two strings.
-
- ** '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.
-
- +++
- ** Numbers formatted via %o or %x may now be formatted as signed integers.
- This avoids problems in calls like (read (format "#x%x" -1)), and is
- more compatible with bignums, a planned feature. To get this
- behavior, set the experimental variable binary-as-unsigned to nil,
- and if the new behavior breaks your code please email
- 32252@debbugs.gnu.org. Because %o and %x can now format signed
- integers, they now support the + and space flags.
-
- ** 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")
-
- +++
- ** Omitting variables after '&optional' and '&rest' is now allowed.
- For example (defun foo (&optional)) is no longer an error. This is
- sometimes convenient when writing macros. See the ChangeLog entry
- titled "Allow '&rest' or '&optional' without following variable
- (Bug#29165)" for a full listing of which arglists are accepted across
- versions.
-
- ** 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 passed to Emacs.
-
- ---
- ** 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.
-
- +++
- ** 'memory-limit' now returns a better estimate of memory consumption.
-
- +++
- ** New macro 'combine-change-calls' arranges to call the change hooks
- ('before-change-functions' and 'after-change-functions') just once
- each around a sequence of lisp forms, given a region. This is
- useful when a function makes a possibly large number of repetitive
- changes and the change hooks are time consuming.
-
- ---
- ** The function 'get-free-disk-space' returns now a non-nil value for
- remote systems, which support this check.
-
- +++
- ** 'eql', 'make-hash-table', etc. now treat NaNs consistently.
- Formerly, some of these functions ignored signs and significands of
- NaNs. Now, all these functions treat NaN signs and significands as
- significant. For example, (eql 0.0e+NaN -0.0e+NaN) now returns nil
- because the two NaNs have different signs; formerly it returned t.
- Also, Emacs now reads and prints NaN significands; e.g., if X is a
- NaN, (format "%s" X) now returns "0.0e+NaN", "1.0e+NaN", etc.,
- depending on X's significand.
-
- +++
- ** 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.
-
- +++
- ** In the DST slot, encode-time and parse-time-string now return -1
- if it is not known whether daylight saving time is in effect.
- Formerly they were inconsistent: encode-time returned t in this
- situation, whereas parse-time-string returned nil. Now they
- consistently use use nil to mean that DST is not in effect, and use -1
- to mean that it is not known whether DST is in effect.
-
- ** 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.
-
- ** Mailcap
-
- ---
- *** 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 default way the list of possible external viewers for MIME
- types is sorted and chosen has changed. Earlier, the most specific
- viewer was chosen, even if there was a general override in ~/.mailcap.
- For instance, if /etc/mailcap has an entry for image/gif, that one
- will be chosen even if you have an entry for image/* in your
- ~/.mailcap file. But with the new method, entries from ~/.mailcap
- overrides all system and Emacs-provided defaults. To get the old
- method back, set 'mailcap-prefer-mailcap-viewers' to nil.
-
- ** URL
+ * Lisp Changes in Emacs 28.1
- *** The file: handler no longer looks for index.html in directories if
- you ask it for a file:///dir URL. Since this is a low-level library,
- such decisions (if they are to be made at all) are left to
- higher-level functions.
+ ** The variable 'force-new-style-backquotes' has been removed.
+ This removes the final remaining trace of old-style backquotes.
- ** image-mode
+ ** The module header 'emacs-module.h' now contains type aliases
+ 'emacs_function' and 'emacs_finalizer' for module functions and
+ finalizers, respectively.
- *** image-mode started using ImageMagick by default for all images
- some years back. It now respects 'imagemagick-types-inhibit' as a way
- to disable that.
+ ** 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.
- ** 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.
-
- +++
- ** The function 'read-variable' now uses its own history list.
- The history of variable names read by 'read-variable' is recorded in
- the new variable 'custom-variable-history'.
-
- ---
- ** The function 'string-to-unibyte' is no longer declared obsolete.
- We have found that there are legitimate use cases for this function,
- where there's no better alternative. We believe that the incorrect
- uses of this function all but disappeared by now, so we are
- un-obsoleting it.
+ ** 'parse-time-string' can now parse ISO 8601 format strings,
+ such as "2020-01-15T16:12:21-08:00".
+--- (Needs better documentation)
+** There is a new command 'universal-async-argument', bound to 'C-x &'.
+If this command precedes another command, the value of variable
+'universal-async-argument' will be toggled. This indicates, that the
+following command shall be executed asynchronously. For example,
+file visiting commands would load files into buffers asynchronously.
+
\f
- * 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.
-
- ---
- ** New primitive 'w32-read-registry'.
- This primitive lets Lisp programs access the MS-Windows Registry by
- retrieving values stored under a given key. It is intended to be used
- for supporting features such as XDG-like location of important files
- and directories.
+ * Changes in Emacs 28.1 on Non-Free Operating Systems
+++
- ** The default value of 'w32-pipe-read-delay' is now zero.
- This speeds up reading output from sub-processes that produce a lot of
- data.
-
- This variable may need to be non-zero only when running DOS programs
- as Emacs subprocesses, which by now is not supported on modern
- versions of MS-Windows. Set this variable to 50 if for some reason
- you need the old behavior (and please report such situations to Emacs
- developers).
+ ** 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.
\f
----------------------------------------------------------------------