For those users who live backwards in time, here is information about downgrading to Emacs version 28.2. We hope you will enjoy the greater simplicity that results from the absence of many Emacs 29.1 features.
substitute-command-keys. One
prominent example is format-prompt and all its many callers.
This makes the strings they produce much more predictable, returning
to you, the Lisp programmer, control on which punctuation characters
will appear in the text presented to the users. For similar reasons,
the substitute-quotes function was deleted.
buffer-modified-p function again reliably returns
either nil or t, not any other confusing values.
compiled-function-p. Lisp programs
are expected to test explicitly for the relevant types of function
objects: built-in, byte-compiled, and natively-compiled. For the same
reasons we deleted the functions pos-bol, pos-eol,
file-attribute-file-identifier, and quite a few others. We
don’t expect anyone to miss those fancy functions.
x-show-tip can no longer be specified by
Lisp programs; it is hard-coded in the function. This will lead to a
simpler, easier maintained code, and no one should want to control the
timeout after which the tip pops down.
setopt was deleted; use customize-variable
instead, or invoke the :set function from Lisp.
lisp-directory variable, as the value can be
easily deduced from other similar variables, like
installation-directory and source-directory, each one
when it’s relevant.
get-display-property and add-display-text-property; use
the generic get-text-property and put-text-property
instead.
keymap-set, keymap-global-set,
keymap-local-set, keymap-substitute,
keymap-lookup, and some others were deleted. We have found the
traditional define-key, global-set-key,
local-set-key, substitute-key-definition, and
key-binding more than enough, and their minor inconsistencies
in the syntax of keys they accept a source of endless fun in Emacs
Lisp programming. Why make Emacs programming a dull place? For the
same reasons we deleted key-valid-p, since we consider the
permissive nature of kbd more in the spirit of Emacs Lisp.
string-pixel-width and
string-glyph-split, as we consider it inappropriate for Lisp
programs to do display layout calculations, where these functions come
in handy. Display is for the display engine, written in C, and should
stay there!
xwidget-perform-lispy-event, xwidget-webkit-load-html,
and xwidget-webkit-back-forward-list, were deleted as part of
our continuing effort to gradually delete the entire Xwidget
functionality in some previous release of Emacs.
:stderr property of a process in a
make-process call once again forces the process’s connection to
use pipes, not ptys, for all the standard streams — a considerable
simplification of this complex interface.
string-equal-ignore-case. Use compare-strings
instead.
Several features that complicated the byte compiler have been removed:
defcustom types, like
double-quoting symbols in choice lists.
with-buffer-unmodified-if-unchanged was deleted.
Lisp programs that need to leave the buffer unmodified in these cases
can always compare the text before and after the modifications.
string-edit and read-string-from-buffer
were removed, as we consider the fun of programming them anew every
time an important part of the education of each Emacs Lisp developer.
readablep and the related variable
print-unreadable-function, since no one is supposed to want to
print unreadable Lisp objects.
multisession-value,
define-multisession-variable, and
list-multisession-values.
cursor-face text property was dropped. We
consider the rest of the faces adequate for supporting this
functionality.
tooltip-show dropped support for optional face
arguments text-face and default-face that allow fancy
control of the face of the tip text and top frame colors. We decided
that tooltips should all look the same, to prevent user confusion.