diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi index 49da473fa51..354f20e757e 100644 --- a/doc/emacs/anti.texi +++ b/doc/emacs/anti.texi @@ -4,156 +4,138 @@ @c See file emacs.texi for copying conditions. @node Antinews -@appendix Emacs 26 Antinews +@appendix Emacs 27 Antinews @c Update the emacs.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 26.3. We hope you will enjoy the +about downgrading to Emacs version 27.2. We hope you will enjoy the greater simplicity that results from the absence of many @w{Emacs @value{EMACSVER}} features. @itemize @bullet @item -Emacs no longer uses @acronym{GMP}, the GNU Multiple Precision -library, and doesn't support Lisp integers greater than -@code{most-positive-fixnum} or smaller than -@code{most-negative-fixnum}. We now have only one kind of a Lisp -integer. This simplifies many Lisp programs that use integers, and -makes integer calculations always fast. If you want larger values, -use Lisp floats, as Emacs has done since day one. +Emacs can no longer be built with support of native compilation of +Lisp programs. This means Emacs builds much faster, and the problems +that came with native compilation: the need to have GCC and Binutils +installed, the complications of managing your @file{eln-cache} +directories---all of that is now future history. The simplicity and +elegance of the Emacs byte-compiled code is now restored in all of its +pristine beauty. @item -Emacs no longer supports HarfBuzz as the engine for shaping complex -text. As you move back in time, we will gradually shed off all traces -of support for complex text shaping, and this is one step in that -direction. +Emacs no longer builds by default with Cairo, even if it's present. +The warnings about not using HarfBuzz are also gone, in preparation +for complete removal of HarfBuzz support in previous Emacs versions. +Fancy text shaping and display is becoming less important as you move +back in time. The @code{ftx} font backend is again part of Emacs, for +the same reasons. @item -We have removed support for building with the Jansson library, and -consequently the native support for JSON parsing is gone. The -importance of JSON decreases as we go back in time, so for now using -the Lisp code for handling it should be good enough; in one of the -past Emacs versions, we intend to remove even that, as useless bloat. - -The library for supporting JSONRPC applications was removed for the -same reason. +As Motif becomes more and more important with moving farther into the +past, we've reinstated the code which supports Motif in Emacs. @item -The ``portable dumper'' feature is gone. We are once again using the -field-proven ``unexec'' way of dumping Emacs. With that, the hope for -being able to re-dump your customized Emacs session is also gone: why -would anyone want to record their random customization experiments on -disk, and restore them the next time they start Emacs? And true -Emacsers don't restart their Emacs sessions anyway. +Emacs once again supports versions 5.3 and older OpenBSD system, which +will be needed as you move back in time. @item -We dropped the support for @acronym{XDG}-style configuration -directories and the @env{XDG_CONFIG_HOME} environment variable. -There's once again only one place where Emacs looks for its init -files: the @file{~/.emacs.d} directory, with the @file{~/.emacs} file -as fallback. We think this will go a long way towards preventing -confusion among users who for some reason have @env{XDG_CONFIG_HOME} -set, thus risking to have their init files randomly spread between two -places. In one of the past Emacs versions, we intend to further -simplify this, removing the @file{~/.emacs.d} place and leaving only -@file{~/.emacs}; stay tuned. - -For similar reasons, we've removed the ``early init'' file. You can -now again use all the tricks you want to initialize variables like -@code{package-user-dir} and @code{package-load-list} just in time for -the packages to load. - -@command{emacsclient} no longer supports @acronym{XDG}-style directory -trees, either. +We've dropped support for Secure Computing filter on GNU/Linux. The +past world is much more secure than the present, so the complexities +related with this stuff, which can only be explained by severe +paranoia, are no longer justified. @item -TLS connections are back to their lenient security settings. We -decided that too tight security settings are an annoyance for users, -and make little sense considering the world-wide tendency to have -fewer and fewer network security problems as we move back in time -(those issues will be completely gone when networks disappear in some -distant past). +Emacs reverted back to supporting Unicode 13.x, since the following +versions of the standards are not yet published where you are going. +The @samp{emoji} script and the support for displaying Emoji sequences +were removed for the same reasons: no one will produce them in the +past. @item -The @code{server-after-make-frame-hook} hook was deleted, in -preparation for removing the entire daemon business in some past Emacs -version. You will be glad to learn that setting up the GUI -customizations of your sessions is now once again as easy as it ever -was, with just the @code{after-make-frame-functions} to use. +Mode-specific commands and the @kbd{M-S-x} command that invokes them +were removed. As you move back in time, the command set in Emacs +becomes smaller, so any such filtering of applicable commands just +gets in the way. @item -The @code{flex} completion style was removed. We feel that it -unnecessarily complicates the Emacs user experience, and therefore -will continue to remove other tricky completion styles, until in some -past Emacs version we get to a single original style Emacs pioneered -decades ago. Long live simplicity; down with complications! +We have removed the system for displaying documentation of groups of +related functions, the @kbd{shortdoc-display-group} command to go with +it, and the corresponding ``See also'' button in the @file{*Help*} +buffer. That should make searching for certain functions simpler: +just use the venerable @samp{apropos} commands. @item -The optional display of the fill-column indicator is no longer -supported. With the display sizes becoming smaller and smaller as you -move back in time, we feel that the display itself will always show -you where to fill or wrap your text, and do this much more easily and -reliably than any such display indicator. +The @code{context-menu-mode} was removed, and with it the context +menus popped by pressing the right mouse button. This is one small +step towards freeing Emacs (and eventually, the whole world of +computing) from the tyranny of the GUI pointing devices in general, +and moving back to the simplicity of text-mode user interfaces. +Down with mice and other rodents! @item -We removed the features that made visiting large files easier. Thus, -Emacs will no longer suggest visiting a large file literally, nor -offer the @code{so-long} mode to deal with overly-long lines. We -decided that this simplification is worthwhile, given that the general -tendency of having very large files is becoming a rarity as we move -back in time. +The commands @kbd{C-x 4 4} and @kbd{C-x 5 5} for displaying the +results in a new window/frame re gone. We are quite certain that +creating a new window/frame before running a command is much simpler, +and doesn't require a complication of a new prefix. @item -We have removed the feature that displayed echo-area messages without -hiding content of the active minibuffer. This should prevent user -confusion from having two unrelated pieces of text staring at them, -with no clear separation between them. Users with good memories (and -Emacs users are all expected to be of that kind) will have no trouble -keeping the minibuffer text in their minds, and typing the responses -without actually seeing the prompts. +The behavior of active minibuffers when switching frames is now the +perfect mess it should be: sometimes the minibuffer moves to the new +selected frame, sometimes it doesn't, and sometimes you get an error. +This makes Emacs usage much more fun, as you get to guess the result, +instead of having it boringly consistent. @item -Horizontal scrolling using the mouse or touchpad has been removed. In -the past, wide monitors will become less popular, so horizontal -scrolling will no longer be needed. Removal of the mouse support for -horizontal scrolling is the first step towards its complete removal in -prior Emacs versions. +Compact mode-line display mode has been removed. The items displayed +on the mode line are now always in the same place, and if there's not +enough space for them, they are not displayed at all, instead of being +confusingly displayed in a different position. You no longer need to +think twice where to find a particular mode-line element on display. @item -The @code{main-thread} variable and @code{list-threads} were removed, -and @code{thread-join} no longer returns the result of the finished -thread. We intend to remove the support for Lisp threads in some past -Emacs version, so we continue removing the associated complexities and -features as we go back in time. +Many commands and options related to tab bars were removed, including +(but not limited to) frame-specific appearance of tab bars, the +@code{tab-bar-format} option, the @kbd{C-x t n}, @kbd{C-x t N}, +@kbd{C-x t M}, and @kbd{C-x t G} commands, and many mouse gestures on +the tab bar. We are going to delete the tab bar support from Emacs in +one of the past versions, and this is a step in that direction. @item -Tab bar and window tab-lines were removed. This should make the Emacs -display simpler and less cluttered, and help those users who disable -menu bar and tool bar in their GUI sessions. The fashion to provide -tabs in every GUI application out there is gaining less and less -popularity as we move back in time, and will completely disappear at -some past point; removing the tabs from Emacs is the step in that -direction. +The ``transient'' input methods have been removed; use @kbd{C-\} to +turn input methods on and off instead. This is in preparation for +complete removal of input methods from Emacs in version 19, and +consistent with the fact that the number of input methods we support +becomes smaller as you move back in time. @item -Displaying line numbers for a buffer is only possibly using add-on -features, such as @code{linum-mode}, which can only display the -numbers in the display margins. Line-number display using these -features is also slow, as we firmly believe such a feature is -un-Emacsy and should not have been included in Emacs to begin with. -Consequently, @code{display-line-numbers-mode} was removed. +We disabled @code{show-paren-mode} by default, since we think the +venerable @code{blink-matching-paren} feature is more than enough, and +better fits the simplicity of past Emacs versions. It will definitely +be better when colors are removed from Emacs in the distant past. + +For the same reason, sub-groups in interactive regexp searches are no +longer highlighted in distinct colors. @item -On our permanent quest for simplifying Emacs, we've removed the -support for changing the font size by turning the mouse wheel. +On our permanent quest for simplifying Emacs, we've removed the Ispell +command @code{ispell-comment-or-string-at-point}; the old-time friend +@code{ispell-comments-and-strings} should suffice. @item -Several commands, deemed to be unnecessary complications, have been -removed. Examples include @code{make-empty-file}, -@code{font-lock-refontify}, @code{xref-find-definitions-at-mouse}, -@code{make-frame-on-monitor}, and @code{diff-buffers}. +Many Gnus commands and options were deemed to unnecessarily complicate +the use of Gnus (which is too complex to begin with), and thus were +removed. This includes @code{gnus-topic-display-predicate}, +@code{gnus-process-mark-toggle}, @code{gnus-registry-register-all}, +@code{gnus-paging-select-next}, and many others. The @code{nnselect} +backend was deleted for the same reason. + +@item +The @file{project.el} package have been redesigned to remove many +unnecessary features, so that just the bare essentials remain. We +plan on removing this package from Emacs in a previous version, but +decided to begin with removing some extra features first. @item To keep up with decreasing computer memory capacity and disk space, many -other functions and files have been eliminated in Emacs 26.3. +other functions and files have been eliminated in Emacs 27.2. @end itemize diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 2fafb43e9fb..83847fb8f12 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -219,7 +219,7 @@ Appendices * GNU Free Documentation License:: The license for this documentation. * Emacs Invocation:: Hairy startup options. * X Resources:: X resources for customizing Emacs. -* Antinews:: Information about Emacs version 26. +* Antinews:: Information about Emacs version 27. * Mac OS / GNUstep:: Using Emacs under macOS and GNUstep. * Microsoft Windows:: Using Emacs on Microsoft Windows and MS-DOS. * Manifesto:: What's GNU? Gnu's Not Unix! diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 7e8b0e5914d..d1380bc297f 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -945,7 +945,7 @@ the author's description of the changes in the revision on the current line. @item w -Annotate the working revision--the one you are editing. If you used +Annotate the working revision---the one you are editing. If you used @kbd{p} and @kbd{n} to browse to other revisions, use this key to return to your working revision. diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi index ced8082f6a4..118df05c791 100644 --- a/doc/lispref/anti.texi +++ b/doc/lispref/anti.texi @@ -6,186 +6,179 @@ @c This node must have no pointers. @node Antinews -@appendix Emacs 26 Antinews +@appendix Emacs 27 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 26.3. We hope you will enjoy the greater +downgrading to Emacs version 27.2. We hope you will enjoy the greater simplicity that results from the absence of many @w{Emacs @value{EMACSVER}} features. @itemize @bullet @item -Lisp objects are again implemented on the C level as integer types, -not as pointers. This might be a small step for Emacs Lisp users, but -it's a giant leap for the Emacs developers who work on the C level, -since it is now again easy to print Lisp object in the debugger in the -decimal format, which is so much easier for debugging. It also makes -calling Emacs functions from the debugger easier, and allows us to -freely mix integers and Lisp objects in the C code. +The annoying @code{lexical-binding} local variable now heeds the +value of @code{enable-local-variables}: if it's @code{nil}, the +@code{lexical-binding} cookie is ignored. We are working hard on +removing the lexical-binding support in some past Emacs version, and +this small step advances us back to that change. @item -The test suite was removed from the distribution tarball. We believe -that tests need seldom if ever be run, certainly not by the end -users. Removing the tests from the tarball makes it much smaller, -which is important since disk space becomes more and more at premium -as you move back in time. +The @code{load-dangerous-libraries} variable is not obsolete, as it +must be used to allow loading Lisp compiled by XEmacs, which will +become more and more important as you move back in time. @item -Dynamic module support is disabled by default. This both makes Emacs -smaller (a worthy goal by itself), and removes the complications and -additional complexity related with installing module support files and -letting random shared objects an opportunity to be loaded into Emacs -and mess with it. +The optional @var{modes} argument of @code{interactive} is not +supported, and every command is deemed applicable to any major mode. +We believe this makes the life of Lisp programmers much simpler, as +there's now no need to tag commands with the modes where they make +sense. @item -You now must activate any installed packages only after loading your -init files. That requires an explicit call to -@code{package-initialize} in your init file, which is a Good Thing, as -it makes you think seriously where and indeed whether you'd like your -packages to become available to your sessions. Simplicity should -tramp convenience! +Shorthands for Lisp symbols have been removed, which makes loading +Lisp files and handling Lisp symbols much simpler and more efficient. +This is important for decent performance on slower CPUs as you move +back in time. @item To reduce the amount of code in Emacs related to unimportant features, -we've removed native rotation and resizing of images. You will have -to build Emacs with ImageMagick if you want to resize or rotate images -inside Emacs. We don't expect anyone to miss that. +we've removed the variables @code{global-minor-modes} and +@code{local-minor-modes}. If your Lisp program needs to determine +whether some minor mode is in effect, it will have to test explicitly +for every mode. We don't expect anyone to miss those fancy variables. @item -We've re-enabled color fonts usage by the XFT font back-end. We -consider the availability of these fonts more important than a random -crash here and there, especially since the use of these fonts for -displaying Emoji will become less and less important as we travel back -in time, and will completely disappear in some past Emacs version. +The default preference for servicing sub-processes that produce output +at a high rate, and the associated variable +@code{process-prioritize-lower-fds}, have been removed. Moving back +in time means fewer and fewer programs can produce such high-rate +output, so this features becomes just useless crud. @item -The function @code{network-interface-list} can now return only IPv4 -addresses. We consider the complexity introduced by IPv6 to be too -much to be justified, and on the other hand its removal is the step in -the right direction, given that IPv6 is expected to be completely -removed as we move back in time. +The encodings that are variants of EBCDIC were removed. This includes +@code{ibm256}, @code{ibm273}, and others---variants of the EBCDIC +encoding tailored for some Japanese and European locales. You won't +need those where you are going. @item -The limit on repetitions in regular expressions was reduced to -@ifnottex -2**15 @minus{} 1. -@end ifnottex -@tex -@math{2^{15}-1}. -@end tex -We envision that regular expressions will become more and more simple -as we move towards the distant past. +The ``Bindat type expression'' description language has been removed, +as the existing data layout specifications are perfectly suited for +this job. @item To simplify code and reduce complexity, we removed the capability of -searching programs on remote hosts in @code{executable-find}. If you -really need this feature (why would you?), you can always write your -own shell script and run it on the remote. +specifying the success handler in @code{condition-case} via the +@code{:success} keyword. If you really need this feature (why would +you?), you can always write some simple Lisp that has the same effect. @item -The @code{:extend} face attribute is no longer available; all faces -have their background color extended by default past end of line. -This should significantly simplify face management and remove -unnecessary code bloat, as well as make faces significantly simpler to -understand and use. +Emacs modules can no longer provide interactive functions, or install +finalizers, nor open channels to existing pipe sub-processes. All +this is extra ballast, especially since we plan on removing modules in +some past Emacs version. The @code{make_unibyte_string} module API +was removed for the same reason. @item -The predicates @code{display-blink-cursor-p} and -@code{display-symbol-keys-p} were deleted. They are rarely if ever -needed, and can easily be substituted by appropriate calls to old and -proven APIs like @code{display-graphic-p}. As an additional bonus, -writing Lisp programs that depend on this functionality will make sure -the programmer understands better what exactly is the required -features of the display terminal. +To keep Emacs clean and elegant, we've removed the +@code{print-integers-as-characters} option. Recognizing characters by +their decimal codes is a basic requirement for Emacs Lisp programmers, +and with the expected decrease in use of Unicode characters, this will +be soon limited to ASCII only: surely something you all can master! @item -Relative directories in the value of the @env{HOME} environment -variable are once again interpreted relative to the -@code{default-directory} of the current buffer. This is much simpler, -and also allows @env{HOME} to resolve to a different place in -different buffers, which allows some interesting applications. - -For the same reasons, @code{file-name-absolute-p} now again considers -@file{~foo} an absolute file name, even if there's no known user -@samp{foo}. This means a Lisp program which uses such file names will -always work the same on any system, regardless of its known users. +The optional @var{count} argument of the @code{directory-files} +function has been removed. Extracting the first @var{n} members from +the full list is trivial, so this is a significant simplification for +an insignificant cost. @item -File-related primitives like @code{file-attributes}, -@code{file-modes}, @code{file-newer-than-file-p}, and some others once -again return @code{nil} when the underlying low-level APIs fail, -instead of signaling an error. We decided that functions which signal -errors require more complex code from Lisp programs which use them, -and found this complexity unjustified when returning @code{nil} will -do. +Functions that create sub-processes and network connections no longer +accept the @code{:coding} argument; use +@code{set-process-coding-system} or bind +@code{coding-system-for-read/write} instead: again, a significant +reduction in Emacs complexity for little or no cost. @item -Similarly, old-style backquotes no longer signal errors; they generate -warnings instead. You can remove error handling from programs that -use backquotes. +We deleted from the macros @code{define-derived-mode} and +@code{define-minor-mode} the code which allowed using the +@code{:interactive} argument. The possibility of marking a mode +non-interactive makes very little sense, @item -Formatting floating-point numbers has been sped up by letting the -underlying implementation produce unpredictable values, instead of -signaling errors when the number is too large to format correctly. We -believe the Emacs Lisp programmers should always know what they are -doing when they deal with floating-point values. +The possibility of having links to man pages in doc strings has been +removed. Use plain text instead, if you need such references. @item -The function @code{read-char-from-minibuffer} was deleted. We decided -that @code{read-char} should be enough for any Lisp program that needs -to ask the user for a single-character input, 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. Consequently, -no history is provided for such responses (why would someone want -history of single-key strokes, anyway?). +Temporary buffers are no longer exempt from running any buffer-related +hooks. Programs that don't want such hooks in some buffer can always +disable it locally, whereas making that simpler complicates Emacs for +no good reason. @item -The function @code{ngettext} was deleted. Non-English languages will -become less and less widespread, let alone useful, as you move back in -time, so we took this small step in that direction, and simplified -Emacs as a nice bonus. +Several features that complicated the byte compiler have been removed: + +@itemize @minus +@item +The checks for missing declarations of dynamic variables. This will +continue making less and less sense as we move away of lexical-binding +support. @item -Focus-change notifications on text-mode frames are no longer -recognized or supported. You can now safely disregard the possibility -of receiving such notifications on TTY frames. This is one small step -on the long road of removing all non-character input events Emacs -supports on TTY frames. +The ability of compiling symlinked @file{*.el} files, which is really +gross: copy the files instead. @item -Face specifications in @code{face-remapping-alist} now have to be -buffer-specific, without any differences between windows showing the -same buffers. This allowed us to remove a lot of unneeded code bloat -from Emacs, and make the face handling much simpler. +The warnings about too-wide doc strings---that is just a nuisance, as +the programmers should be trusted to know what they are doing. +@end itemize + @item -The @samp{%o} and @samp{%x} formats now always produce unsigned -values, as you'd expect. This allows you to reveal the underlying -machine representation, which is different on each architecture, -something we consider a valuable feature. +We deleted several features of the @code{pcase} macro, in accordance +with our general plane to remove @code{pcase} from Emacs: + +@itemize @minus +@item +The @code{cl-type} pattern. @item -We no longer highlight in @code{font-lock-warning-face} symbols with -confusable quote characters, such as U+2018. Detecting them -needed non-trivial amount of code, and we firmly believe that Lisp -programmers always know what they are doing, and don't need to be -annoyed with typefaces that stand out and distract. +the @code{pcase-setq} macro. @item -The function @code{file-system-info} was dropped on Posix platforms, -since you can always invoke @command{df} instead and parse its -output. +The @code{pcase-compile-patterns} function. +@end itemize @item -The functions that implement the @samp{base64url} encoding were -removed, as they can always be emulated by suitable tweaking of the -normal base-64 encoding. No need to bloat Emacs and force Lisp -programmers learn more interfaces on this account. +Some of the keywords used in Edebug specification lists were deemed to +be of little use, and were therefore removed: @code{&interpose}, +@code{&error}, and @code{&name}. The long-term plane is for Emacs to +drop Edebug entirely, leaving only the trusted Lisp debugger, and we +continue working according to that plan. + +@item +The function @code{object-intervals} was dropped, as a Lisp program +can easily collect the intervals of a buffer or a string by iterating +through them one by one. + +@item +We decided that the @code{require-theme} function is an unnecessary +complication, so we deleted it. Lisp programs can easily search along +@code{custom-theme-load-path} instead. + +@item +The convenience functions @code{length<}, @code{length>}, and +@code{length=} were removed, as using @code{length} followed by a +comparison should be good enough for everyone, especially considering +that the typical length of a list keeps going down as you move back +through time. + +@item +The variable @code{current-minibuffer-command} is no longer available, +as we found little justification for keeping it. @item As part of the ongoing quest for simplicity, many other functions and -variables have been eliminated. +variables have been eliminated. Other functions and variables, that +were declared obsolete since Emacs 23, have been added back, in +preparation for releasing Emacs 23 in some distant past. @end itemize diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index e9e306fa0de..da3a3a84e9b 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -234,7 +234,7 @@ To view this manual in other formats, click Appendices -* Antinews:: Info for users downgrading to Emacs 26. +* Antinews:: Info for users downgrading to Emacs 27. * GNU Free Documentation License:: The license for this documentation. * GPL:: Conditions for copying and changing GNU Emacs. * Tips:: Advice and coding conventions for Emacs Lisp. diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi index 770a5b77493..440c61add8e 100644 --- a/doc/misc/ert.texi +++ b/doc/misc/ert.texi @@ -415,7 +415,7 @@ emacs -batch -l ert -l my-tests.el \ @end example By default, ERT test failure summaries are quite brief in batch -mode--only the names of the failed tests are listed. If the +mode---only the names of the failed tests are listed. If the EMACS_TEST_VERBOSE environment variable is set, the failure summaries will also include the data from the failing test. diff --git a/etc/NEWS.28 b/etc/NEWS.28 index 8f49d67ba9b..09537d7d313 100644 --- a/etc/NEWS.28 +++ b/etc/NEWS.28 @@ -911,6 +911,109 @@ now been updated to point to Libera.Chat. https://lists.gnu.org/archive/html/info-gnu-emacs/2021-06/msg00000.html + +* Incompatible Editing Changes in Emacs 28.1 + +--- +** 'toggle-truncate-lines' now disables 'visual-line-mode'. +This is for symmetry with 'visual-line-mode', which disables +'truncate-lines'. + +--- +** 'electric-indent-mode' now also indents inside strings and comments. +(This only happens when indentation function also supports this.) + +To recover the previous behavior you can use: + + (add-hook 'electric-indent-functions + (lambda (_) (if (nth 8 (syntax-ppss)) 'no-indent))) + +--- +** The 'M-o' ('facemenu-keymap') global binding has been removed. +To restore the old binding, say something like: + + (require 'facemenu) + (define-key global-map "\M-o" 'facemenu-keymap) + (define-key facemenu-keymap "\es" 'center-line) + (define-key facemenu-keymap "\eS" 'center-paragraph) + +The last two lines are not strictly necessary if you don't care about +having those two commands on the 'M-o' keymap; see the next section. + +--- +** The 'M-o M-s' and 'M-o M-S' global bindings have been removed. +Use 'M-x center-line' and 'M-x center-paragraph' instead. See the +previous section for how to get back the old bindings. Alternatively, +if you only want these two commands to have global bindings they had +before, you can add the following to your init file: + + (define-key global-map "\M-o\M-s" 'center-line) + (define-key global-map "\M-o\M-S" 'center-paragraph) + +--- +** The 'M-o M-o' global binding has been removed. +Use 'M-x font-lock-fontify-block' instead, or the new 'C-x x f' +command, which updates the syntax highlighting in the current buffer. + +--- +** The escape sequence '\e[29~' in Xterm is now mapped to 'menu'. +Xterm sends this sequence for both 'F16' and 'Menu' keys +It used to be mapped to 'print' but we couldn't find a terminal +that uses this sequence for any kind of 'Print' key. +This makes the Menu key (see https://en.wikipedia.org/wiki/Menu_key) +work for 'context-menu-mode' in Xterm. + +--- +** New user option 'xterm-store-paste-on-kill-ring'. +If non-nil (the default), Emacs pushes pasted text onto the kill ring +(if using an xterm-like terminal that supports bracketed paste). +Setting this to nil inhibits that. + +--- +** 'vc-print-branch-log' shows the change log from its root directory. +It previously used to use the default directory. + +--- +** 'project-shell' and 'shell' now use 'pop-to-buffer-same-window'. +This is to keep the same behavior as Eshell. + +--- +** In 'nroff-mode', 'center-line' is no longer bound to a key. +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. + +--- +** In 'f90-mode', the backslash character ('\') no longer escapes. +For about a decade, the backslash character has no longer had a +special escape syntax in Fortran F90. To get the old behavior back, +say something like: + + (modify-syntax-entry ?\\ "\\" f90-mode-syntax-table) + ++++ +** Setting 'fill-column' to nil is obsolete. +This undocumented use of 'fill-column' is now obsolete. To disable +auto filling, turn off 'auto-fill-mode' instead. + +For instance, you could add something like the following to your init +file: + + (add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1)) + +** Xref migrated from EIEIO to cl-defstruct for its core objects. +This means that 'oref' and 'with-slots' no longer works on them, and +'make-instance' can no longer be used to create those instances (which +wasn't recommended anyway). Packages should keep to using the +functions like 'xref-make', 'xref-make-match', 'xref-make-*-location', +as well as accessor functions 'xref-item-summary' and +'xref-item-location'. + +Among the benefits are better performance (noticeable when there are a +lot of matches) and improved flexibility: 'xref-match-item' instances +do not require that 'location' inherits from 'xref-location' anymore +(that class was removed), so packages can create new location types to +use with "match items" without adding EIEIO as a dependency. + * Editing Changes in Emacs 28.1 @@ -1090,7 +1193,7 @@ buffer to be able to move point to the inaccessible portion. 'goto-line-relative' is bound to 'C-x n g'. +++ -** 'got-char' prompts for the character position. +** 'goto-char' prompts for the character position. When called interactively, 'goto-char' now offers the position at point as the default. @@ -3169,109 +3272,6 @@ structures. This new 'etc-authors-mode' provides font-locking for displaying the "etc/AUTHORS" file from the Emacs distribution, and not much else. - -* Incompatible Editing Changes in Emacs 28.1 - ---- -** 'toggle-truncate-lines' now disables 'visual-line-mode'. -This is for symmetry with 'visual-line-mode', which disables -'truncate-lines'. - ---- -** 'electric-indent-mode' now also indents inside strings and comments. -(This only happens when indentation function also supports this.) - -To recover the previous behavior you can use: - - (add-hook 'electric-indent-functions - (lambda (_) (if (nth 8 (syntax-ppss)) 'no-indent))) - ---- -** The 'M-o' ('facemenu-keymap') global binding has been removed. -To restore the old binding, say something like: - - (require 'facemenu) - (define-key global-map "\M-o" 'facemenu-keymap) - (define-key facemenu-keymap "\es" 'center-line) - (define-key facemenu-keymap "\eS" 'center-paragraph) - -The last two lines are not strictly necessary if you don't care about -having those two commands on the 'M-o' keymap; see the next section. - ---- -** The 'M-o M-s' and 'M-o M-S' global bindings have been removed. -Use 'M-x center-line' and 'M-x center-paragraph' instead. See the -previous section for how to get back the old bindings. Alternatively, -if you only want these two commands to have global bindings they had -before, you can add the following to your init file: - - (define-key global-map "\M-o\M-s" 'center-line) - (define-key global-map "\M-o\M-S" 'center-paragraph) - ---- -** The 'M-o M-o' global binding has been removed. -Use 'M-x font-lock-fontify-block' instead, or the new 'C-x x f' -command, which updates the syntax highlighting in the current buffer. - ---- -** The escape sequence '\e[29~' in Xterm is now mapped to 'menu'. -Xterm sends this sequence for both 'F16' and 'Menu' keys -It used to be mapped to 'print' but we couldn't find a terminal -that uses this sequence for any kind of 'Print' key. -This makes the Menu key (see https://en.wikipedia.org/wiki/Menu_key) -work for 'context-menu-mode' in Xterm. - ---- -** New user option 'xterm-store-paste-on-kill-ring'. -If non-nil (the default), Emacs pushes pasted text onto the kill ring -(if using an xterm-like terminal that supports bracketed paste). -Setting this to nil inhibits that. - ---- -** 'vc-print-branch-log' shows the change log from its root directory. -It previously used to use the default directory. - ---- -** 'project-shell' and 'shell' now use 'pop-to-buffer-same-window'. -This is to keep the same behavior as Eshell. - ---- -** In 'nroff-mode', 'center-line' is no longer bound to a key. -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. - ---- -** In 'f90-mode', the backslash character ('\') no longer escapes. -For about a decade, the backslash character has no longer had a -special escape syntax in Fortran F90. To get the old behavior back, -say something like: - - (modify-syntax-entry ?\\ "\\" f90-mode-syntax-table) - -+++ -** Setting 'fill-column' to nil is obsolete. -This undocumented use of 'fill-column' is now obsolete. To disable -auto filling, turn off 'auto-fill-mode' instead. - -For instance, you could add something like the following to your init -file: - - (add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1)) - -** Xref migrated from EIEIO to cl-defstruct for its core objects. -This means that 'oref' and 'with-slots' no longer works on them, and -'make-instance' can no longer be used to create those instances (which -wasn't recommended anyway). Packages should keep to using the -functions like 'xref-make', 'xref-make-match', 'xref-make-*-location', -as well as accessor functions 'xref-item-summary' and -'xref-item-location'. - -Among the benefits are better performance (noticeable when there are a -lot of matches) and improved flexibility: 'xref-match-item' instances -do not require that 'location' inherits from 'xref-location' anymore -(that class was removed), so packages can create new location types to -use with "match items" without adding EIEIO as a dependency. - * Incompatible Lisp Changes in Emacs 28.1 diff --git a/lisp/bindings.el b/lisp/bindings.el index 1cd22167c5b..e397e44b2ff 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -505,7 +505,7 @@ mouse-1: Display Line and Column Mode Menu")) local-map ,mode-line-column-line-number-mode-map mouse-face mode-line-highlight ;; XXX needs better description - help-echo "Size indication mode\n\ + help-echo "Buffer Position mouse-1: Display Line and Column Mode Menu") (size-indication-mode (8 ,(propertize diff --git a/lisp/international/characters.el b/lisp/international/characters.el index 475a669dc40..5aefda23283 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el @@ -116,11 +116,11 @@ Base characters (Unicode General Category L,N,P,S,Zs)") Combining diacritic or mark (Unicode General Category M)") ;; bidi types -(define-category ?R "Right-to-left (strong) +(define-category ?R "Strong R2L Characters with \"strong\" right-to-left directionality, i.e. with R, AL, RLE, or RLO Unicode bidi character type.") -(define-category ?L "Left-to-right (strong) +(define-category ?L "Strong L2R Characters with \"strong\" left-to-right directionality, i.e. with L, LRE, or LRO Unicode bidi character type.") diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 8e81f79e429..82153ff0adb 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -283,6 +283,7 @@ are also supported; unsupported long options are silently ignored." (funcall orig-fun file switches wildcard full-directory-p) ;; We need the directory in order to find the right handler. + (setq switches (or switches "")) (let ((handler (find-file-name-handler (expand-file-name file) 'insert-directory)) (orig-file file) diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 0d51019f735..52a4e0c5435 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1,7 +1,7 @@ ;;; xref.el --- Cross-referencing commands -*-lexical-binding:t-*- ;; Copyright (C) 2014-2021 Free Software Foundation, Inc. -;; Version: 1.2.2 +;; Version: 1.3.0 ;; Package-Requires: ((emacs "26.1")) ;; This is a GNU ELPA :core package. Avoid functionality that is not @@ -956,13 +956,11 @@ GROUP is a string for decoration purposes and XREF is an `xref-item' object." (require 'compile) ; For the compilation faces. (cl-loop for (group . xrefs) in xref-alist - for max-line-width = - (cl-loop for xref in xrefs - maximize (let ((line (xref-location-line - (xref-item-location xref)))) - (and line (1+ (floor (log line 10)))))) - for line-format = (and max-line-width - (format "%%%dd: " max-line-width)) + for max-line = (cl-loop for xref in xrefs + maximize (xref-location-line + (xref-item-location xref))) + for line-format = (and max-line + (format "%%%dd: " (1+ (floor (log max-line 10))))) with item-text-props = (list 'mouse-face 'highlight 'keymap xref--button-map 'help-echo @@ -973,27 +971,27 @@ GROUP is a string for decoration purposes and XREF is an do (xref--insert-propertized '(face xref-file-header xref-group t) group "\n") - (cl-loop for xref in xrefs do - (pcase-let (((cl-struct xref-item summary location) xref)) - (let* ((line (xref-location-line location)) - (prefix - (cond - ((not line) " ") - ((and (equal line prev-line) - (equal prev-group group)) - "") - (t (propertize (format line-format line) - 'face 'xref-line-number))))) - ;; Render multiple matches on the same line, together. - (when (and (equal prev-group group) - (or (null line) - (not (equal prev-line line)))) - (insert "\n")) - (xref--insert-propertized (nconc (list 'xref-item xref) - item-text-props) - prefix summary) - (setq prev-line line - prev-group group)))) + (dolist (xref xrefs) + (pcase-let (((cl-struct xref-item summary location) xref)) + (let* ((line (xref-location-line location)) + (prefix + (cond + ((not line) " ") + ((and (equal line prev-line) + (equal prev-group group)) + "") + (t (propertize (format line-format line) + 'face 'xref-line-number))))) + ;; Render multiple matches on the same line, together. + (when (and (equal prev-group group) + (or (null line) + (not (equal prev-line line)))) + (insert "\n")) + (xref--insert-propertized (nconc (list 'xref-item xref) + item-text-props) + prefix summary) + (setq prev-line line + prev-group group)))) (insert "\n")) (add-to-invisibility-spec '(ellipsis . t)) (save-excursion @@ -1883,34 +1881,36 @@ Such as the current syntax table and the applied syntax properties." syntax-needed))))) (defun xref--collect-matches-1 (regexp file line line-beg line-end syntax-needed) - (let (match-pairs matches) + (let (matches + stop beg end + last-beg last-end + summary-end) (when syntax-needed (syntax-propertize line-end)) - (while (and - ;; REGEXP might match an empty string. Or line. - (or (null match-pairs) - (> (point) line-beg)) - (re-search-forward regexp line-end t)) - (push (cons (match-beginning 0) - (match-end 0)) - match-pairs)) - (setq match-pairs (nreverse match-pairs)) - (while match-pairs - (let* ((beg-end (pop match-pairs)) - (beg-column (- (car beg-end) line-beg)) - (end-column (- (cdr beg-end) line-beg)) - (loc (xref-make-file-location file line beg-column)) - (summary (buffer-substring (if matches (car beg-end) line-beg) - (if match-pairs - (caar match-pairs) - line-end)))) - (when matches - (cl-decf beg-column (- (car beg-end) line-beg)) - (cl-decf end-column (- (car beg-end) line-beg))) - (add-face-text-property beg-column end-column 'xref-match - t summary) - (push (xref-make-match summary loc (- end-column beg-column)) - matches))) + (while (not stop) + (if (and + ;; REGEXP might match an empty string. Or line. + (not (and last-beg (eql end line-beg))) + (re-search-forward regexp line-end t)) + (setq beg (match-beginning 0) + end (match-end 0) + summary-end beg) + (setq stop t + summary-end line-end)) + (when last-beg + (let* ((beg-column (- last-beg line-beg)) + (end-column (- last-end line-beg)) + (summary-start (if matches last-beg line-beg)) + (summary (buffer-substring summary-start + summary-end)) + (loc (xref-make-file-location file line beg-column))) + (add-face-text-property (- last-beg summary-start) + (- last-end summary-start) + 'xref-match t summary) + (push (xref-make-match summary loc (- end-column beg-column)) + matches))) + (setq last-beg beg + last-end end)) (nreverse matches))) (defun xref--find-file-buffer (file) diff --git a/lisp/subr.el b/lisp/subr.el index 33aa3ced446..cca6d53ba73 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3219,7 +3219,7 @@ PROMPT is also updated to show `help-char' like \"(y, n or C-h) \", where `help-char' is automatically bound to `help-form-show'. No confirmation of the answer is requested; a single character is -enough. SPC also means yes, and DEL means no. +enough. RET and SPC also means yes, and DEL means no. To be precise, this function translates user input into responses by consulting the bindings in `query-replace-map'; see the diff --git a/src/Makefile.in b/src/Makefile.in index 0326b4a8f22..6d75e3537a6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -803,6 +803,15 @@ elnlisp := $(addprefix ${lispsource}/,${elnlisp}) $(lisp:.elc=.eln) @$(MAKE) $(AM_V_NO_PD) -C ../lisp EMACS="../src/emacs$(EXEEXT)"\ THEFILE=$< $type. */ unsigned *char2b; int nchars;