@c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. @c Copyright (C) 1999, 2002-2019 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c This node must have no pointers. @node Antinews @appendix Emacs 25 Antinews @c Update the elisp.texi Antinews menu entry with the above version number. For those users who live backwards in time, here is information about downgrading to Emacs version 25.3. We hope you will enjoy the greater simplicity that results from the absence of many @w{Emacs @value{EMACSVER}} features. @section Old Lisp Features in Emacs 25 @itemize @bullet @item The concurrency features have been removed. Even in its limited ``mostly cooperative'' form, with only one Lisp thread running at any given time, it made Emacs significantly more complex for Lisp programs that need to work correctly in the presence of additional threads. @item Handling of file attributes has been simplified by discarding the accessor functions, such as @code{file-attribute-type} and @code{file-attribute-modification-time}. Real Lisp programmers always access the individual attributes by their ordinal numbers, and can recite those numbers in their sleep. @item The networking code is back at its pristine simplicity, as we deleted the use of asynchronous DNS resolution, connection, and TLS negotiation for TLS streams. You no longer need to consider the resulting complexity and interesting race conditions when you write Lisp programs that use network communications. As a direct consequence, the @code{:complete-negotiation} parameter of @code{gnutls-boot} has become unnecessary, and was removed---just one example of how removal of asynchronicity simplifies Emacs. @item We've removed the @file{puny.el} library, so Web sites with non-@acronym{ASCII} URLs are no longer easily accessible. But such sites become more and more rare as you move back in time, so having a specialized library for their support was deemed an unnecessary maintenance burden. @item The time conversion functions @code{current-time-string}, @code{current-time-zone}, @code{decode-time}, @code{format-time-string}, and @code{set-time-zone-rule} no longer accept integer offsets as time zone rules, to make it more of a challenge to convert foreign timestamps. Also, @code{format-time-string} no longer converts @samp{%q} to the calendar quarter, as that is something you can easily do for yourself. @item Field numbers like @samp{%2$} in format specifiers are no longer available. We decided that their use makes code reading and comprehension much harder, and that having them is unjustified in the past where similar features in popular C libraries will also be gone. @item Since the built-in capability to display line numbers has been removed (@pxref{Antinews,,, emacs, The GNU Emacs Manual}), we've also deleted the @code{line-number-display-width} function and the support for the @code{display-line-numbers-disable} property, as Lisp programs that do their own display layout decisions no longer need to cater to this tricky feature. @item Regular expressions have been simplified by removing support for Unicode character properties in the @code{[:blank:]} regexp class. As result, this class will match only spaces and tabs. Once again, this is in line with diminishing importance of Unicode as you move back in time. @item For similar reasons, we removed the function @code{char-from-name}. It should be easy enough to access the full list of Unicode characters returned by @code{ucs-names} instead, for as long as Unicode support in Emacs exists (which shouldn't be too long). @item Various functions that accept file names as arguments, such as @code{file-attributes}, @code{file-symlink-p}, and @code{make-symbolic-link} gained back the special support for file names quoted with @samp{/:}, and they now interpret @samp{~} in symlink targets as you'd expect: to mean your home directory. The confusing differences between the operation of these functions in interactive and non-interactive invocations has been removed. @item Several functions that create or rename their files now treat their destination specially if it happens to be a directory, even when its name does not appear to be that of a directory. For example, @code{(rename-file "A" "B")} no longer renames @file{A} to @file{B} if @file{B} happens to be a directory. This is so that dealing with files becomes more of an adventure. @item The @code{format} function now returns new strings in more cases, to place more stress on the Emacs memory manager and thereby test Emacs better. @item The function @file{assoc} has been simplified by removing its third optional argument. It now always uses @code{equal} for comparison. Likewise, @code{alist-get} always uses @code{assq}, and @code{map-get} and @code{map-put} always use @code{eql} for their comparisons. @item Numeric comparisons and the functions @code{format}, @code{make-hash-table}, @code{min}, @code{max} and @code{logb} now occasionally round values internally to make their results less predictable. @item The functions @code{ffloor}, @code{fceiling}l, @code{ftruncate} and @code{fround} now accept integer arguments. Conversely, functions like @code{decode-char} that accept floating-point integers now accept arguments that are not integers. In both cases the results are amusingly nonsensical sometimes. @item GnuTLS cryptographic functions are no longer available in Emacs. We have decided that the needs for such functionality are deteriorating, and their cumbersome interfaces make them hard to use. @item We have removed support for records of user-defined types, and @code{cl-defstruct} no longer uses records. This removes the potential for quite a few places where existing and past code could be broken by records. @item You can again use @code{string-as-unibyte}, @code{string-make-multibyte}, and other similar functions, without being annoyed by messages about their deprecation. This is in preparation for removal of multibyte text from Emacs in the distant past. @item The @code{string-version-lessp} function has been removed, to encourage programmers to use their own idiosyncratic methods to determine whether one version string precedes another. @item The function @code{read-color} no longer displays color names using each color as the background. We have determined that this surprises users and produces funny inconsistent results on color-challenged terminals. @item Support for 24-bit color on text terminals has been dropped, since it wasn't needed long ago. @item We removed the function @code{file-name-case-insensitive-p}, as testing for the OS symbol should be enough for the observable past to come, and learning to use yet another API is a burden. @item The function @code{read-multiple-choice} is also gone, in recognition of the fact that nothing makes Emacs Lisp hackers rejoice more than the need to sit down and write yet another interactive question-and-answer function, and make it optimal for each specific case. @item The function @code{add-variable-watcher} and the corresponding debugger command @code{debug-on-variable-change} have been removed. They make debugging more complicated, while examining the value of a variable at each stop point is easy enough to cover the same use cases. Let simplicity rule! @item The function @code{mapcan} is gone; use @code{mapcar} instead, and process the resulting list as you see fit. @item Low-level list functions like @code{length} and @code{member} can now loop indefinitely when given cyclic lists, causing Emacs to freeze. This can help these functions run a tiny bit faster in the usual case where the input is not cyclic. @item The @code{write-region} function no longer propagates its @var{lockname} argument to file name handlers. @item You can once again write a Lisp program that returns funny random values from @code{file-attributes} by having another process alter the filesystem while Emacs is accessing the file. This can give rise to some interesting applications in the near past. @item The functions @code{file-attributes}, @code{file-symlink-p}, and @code{make-symbolic-link} now quietly mutate the target of a local symbolic link in some cases, to make it more of a challenge to deal with arbitrary symlinks in Emacs code. @item The error @code{file-missing} has been removed; operations now lump such errors into the @code{file-error} category instead. @item The function @code{delete-directory} now signals an error if operating recursively and some other process deletes the directory before this function gets to it. @item The @code{dutch} input method now attempts to support Turkish too, albeit incorrectly. Also, it converts @samp{IJ} and @samp{ij} to special characters instead of leaving them alone. @item Non-breaking hyphens and approximations to quotes are now displayed just with the @code{escape-glyph} face instead of having faces of their own. This is simpler and gives the user amusing puzzles to solve when viewing text containing these characters. @item The user option @code{electric-quote-context-sensitive} and the variable @code{electric-quote-inhibit-functions}, so that electric quoting is simpler and more likely to do the wrong thing. @item The user option @code{text-quoting-style} has been removed, and is now just a variable. @item We have removed the functions @code{file-name-quote}, @code{file-name-unquote}, and @code{file-name-quoted-p}. Writing code that checks whether a file name is already quoted is easy, and doubly quoting a file name should not produce any problems for well-written Lisp code. @item Frame parameters like @code{z-group}, @code{min-width}, @code{parent-frame}, @code{delete-before}, etc. have been removed. Emacs should not replace your window-manager, certainly not as window-managers become less and less capable. @item We decided that the format of mode line and header line should be customizable only based on buffers; the @code{mode-line-format} and @code{header-line-format} window parameters have been removed. @item Emacs now normally builds a limited @command{movemail} substitute that retrieves POP3 email only via insecure channels, and the configure-time option @option{--with-mailutils} has been removed. This simplifies Emacs setup when security is not important. @item The configure-time option @option{--enable-gcc-warnings=warn-only} has been removed, so that build-time warnings are always fatal now. @item The configure-time option @option{--disable-build-details} has been removed. This way, Emacs builds are unique and irreproducible. @item The variable @code{emacs-version} now includes the build number instead of storing it separately in @code{emacs-build-number}. @item Emacs has been ported to IRIX. @item Several options and variables have been removed to simplify Emacs and potentially make it less reliable. These include the @option{--module-assertions} option, the @code{attempt-stack-overflow-recovery} variable, and the @code{attempt-orderly-shutdown-on-fatal-signal} variable. @item As part of the ongoing quest for simplicity, many other functions and variables have been eliminated. @end itemize