diff options
| author | Stefan Kangas | 2022-12-26 06:30:21 +0100 |
|---|---|---|
| committer | Stefan Kangas | 2022-12-26 06:30:21 +0100 |
| commit | 419ca81809c2eda9c9f102b7da820a6eb9685cc8 (patch) | |
| tree | 4320cb1d05bb999ad2752a426d93aae991b31649 | |
| parent | 48db8b68a8eb5c12d5682f2eb31cadc53186f5d7 (diff) | |
| parent | 6c00d126e7fe1f6e42a0c9454c2ab4a29dcd5989 (diff) | |
| download | emacs-419ca81809c2eda9c9f102b7da820a6eb9685cc8.tar.gz emacs-419ca81809c2eda9c9f102b7da820a6eb9685cc8.zip | |
Merge from origin/emacs-29
6c00d126e7f Remove remaining mentions of 'eval-current-buffer'
1073e96170b ; * doc/lispref/text.texi (Database): Fix a typo. (Bug#6...
b1e68a33d89 Update to Org 9.6-61-g63e073f
dad73e4de19 ; Review and fix NEWS and related documentation
72786ae237e ; Restore ARGS argument in c-ts-mode--fontify-declarator
940ab2423ca ; Always consider :lisp-dir when locating main file of VC...
9ab98cd42aa Add heuristic to locate lisp code in source packages
dda011c78d1 ; * doc/lispref/parsing.texi (Tree-sitter major modes): F...
d62b634d8fc ; * src/process.c (Fprocess_running_child_p): Doc fix.
f6c5b3d635e ; * doc/lispref/parsing.texi: Add a reminder.
e6c49c0454e ; Fix byte-copmiler warning in c-ts-mode--fontify-declarator
4234033a47a ; * lisp/treesit.el: Add some comments.
79584a206b9 Further generalize treesit-defun functions
a819ca5a93c Generalize treesit-defun functions to "things"
e8b34109eeb Reorder optional arguments to 'package-vc-install'
b38e56d8a98 Handle missing dependencies for source packages
7bc7b6b4dd9 ; Partial revert of f3e7820b
2cec78254ea ; * nt/INSTALL.W64: Fix wording.
ecee3bd4209 ; Fix recent changes in treesit documentation
# Conflicts:
# etc/NEWS
| -rw-r--r-- | doc/lispref/display.texi | 14 | ||||
| -rw-r--r-- | doc/lispref/edebug.texi | 23 | ||||
| -rw-r--r-- | doc/lispref/eval.texi | 3 | ||||
| -rw-r--r-- | doc/lispref/parsing.texi | 35 | ||||
| -rw-r--r-- | doc/lispref/text.texi | 2 | ||||
| -rw-r--r-- | etc/NEWS.29 | 559 | ||||
| -rw-r--r-- | lisp/emacs-lisp/edebug.el | 6 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package-vc.el | 263 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/subr-x.el | 5 | ||||
| -rw-r--r-- | lisp/org/ob-core.el | 10 | ||||
| -rw-r--r-- | lisp/org/ob-tangle.el | 3 | ||||
| -rw-r--r-- | lisp/org/oc-basic.el | 18 | ||||
| -rw-r--r-- | lisp/org/org-element.el | 16 | ||||
| -rw-r--r-- | lisp/org/org-persist.el | 46 | ||||
| -rw-r--r-- | lisp/org/org-version.el | 2 | ||||
| -rw-r--r-- | lisp/org/org.el | 5 | ||||
| -rw-r--r-- | lisp/org/ox-html.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/c-ts-mode.el | 2 | ||||
| -rw-r--r-- | lisp/treesit.el | 180 | ||||
| -rw-r--r-- | nt/INSTALL.W64 | 37 | ||||
| -rw-r--r-- | src/process.c | 11 |
22 files changed, 774 insertions, 470 deletions
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 2332bf3ecf4..37434994548 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi | |||
| @@ -346,6 +346,20 @@ The default value is the function that clears the message displayed in | |||
| 346 | an active minibuffer. | 346 | an active minibuffer. |
| 347 | @end defvar | 347 | @end defvar |
| 348 | 348 | ||
| 349 | @defopt set-message-functions | ||
| 350 | The value of this user option is a list of functions to be called for | ||
| 351 | handling display of echo-area messages. Each function is called with | ||
| 352 | one argument, the text of the message to display. If the function | ||
| 353 | returns a string, that string replaces the original message, and the | ||
| 354 | next function in the list is called with the new message text. If the | ||
| 355 | function returns @code{nil}, the next function in the list is called | ||
| 356 | with the same text; if the last function in the list returns | ||
| 357 | @code{nil}, the message text is displayed in the echo area. If the | ||
| 358 | function returns a non-@code{nil} value that is not a string, the | ||
| 359 | message is considered to be handled, and no further functions in the | ||
| 360 | list are called. | ||
| 361 | @end defopt | ||
| 362 | |||
| 349 | @defvar inhibit-message | 363 | @defvar inhibit-message |
| 350 | When this variable is non-@code{nil}, @code{message} and related functions | 364 | When this variable is non-@code{nil}, @code{message} and related functions |
| 351 | will not use the Echo Area to display messages. | 365 | will not use the Echo Area to display messages. |
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 1562a378421..93bafce1f38 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi | |||
| @@ -171,14 +171,13 @@ of the variable @code{edebug-all-defs}. | |||
| 171 | 171 | ||
| 172 | @findex eval-region @r{(Edebug)} | 172 | @findex eval-region @r{(Edebug)} |
| 173 | @findex eval-buffer @r{(Edebug)} | 173 | @findex eval-buffer @r{(Edebug)} |
| 174 | @findex eval-current-buffer @r{(Edebug)} | ||
| 175 | If @code{edebug-all-defs} is non-@code{nil}, then the commands | 174 | If @code{edebug-all-defs} is non-@code{nil}, then the commands |
| 176 | @code{eval-region}, @code{eval-current-buffer}, and @code{eval-buffer} | 175 | @code{eval-region}, and @code{eval-buffer} also instrument any |
| 177 | also instrument any definitions they evaluate. Similarly, | 176 | definitions they evaluate. Similarly, @code{edebug-all-forms} |
| 178 | @code{edebug-all-forms} controls whether @code{eval-region} should | 177 | controls whether @code{eval-region} should instrument @emph{any} form, |
| 179 | instrument @emph{any} form, even non-defining forms. This doesn't apply | 178 | even non-defining forms. This doesn't apply to loading or evaluations |
| 180 | to loading or evaluations in the minibuffer. The command @kbd{M-x | 179 | in the minibuffer. The command @kbd{M-x edebug-all-forms} toggles |
| 181 | edebug-all-forms} toggles this option. | 180 | this option. |
| 182 | 181 | ||
| 183 | @findex edebug-eval-top-level-form | 182 | @findex edebug-eval-top-level-form |
| 184 | @findex edebug-defun | 183 | @findex edebug-defun |
| @@ -1635,8 +1634,8 @@ but only when you also use Edebug. | |||
| 1635 | @defopt edebug-all-defs | 1634 | @defopt edebug-all-defs |
| 1636 | If this is non-@code{nil}, normal evaluation of defining forms such as | 1635 | If this is non-@code{nil}, normal evaluation of defining forms such as |
| 1637 | @code{defun} and @code{defmacro} instruments them for Edebug. This | 1636 | @code{defun} and @code{defmacro} instruments them for Edebug. This |
| 1638 | applies to @code{eval-defun}, @code{eval-region}, @code{eval-buffer}, | 1637 | applies to @code{eval-defun}, @code{eval-region} and |
| 1639 | and @code{eval-current-buffer}. | 1638 | @code{eval-buffer}. |
| 1640 | 1639 | ||
| 1641 | Use the command @kbd{M-x edebug-all-defs} to toggle the value of this | 1640 | Use the command @kbd{M-x edebug-all-defs} to toggle the value of this |
| 1642 | option. @xref{Instrumenting}. | 1641 | option. @xref{Instrumenting}. |
| @@ -1644,9 +1643,9 @@ option. @xref{Instrumenting}. | |||
| 1644 | 1643 | ||
| 1645 | @defopt edebug-all-forms | 1644 | @defopt edebug-all-forms |
| 1646 | If this is non-@code{nil}, the commands @code{eval-defun}, | 1645 | If this is non-@code{nil}, the commands @code{eval-defun}, |
| 1647 | @code{eval-region}, @code{eval-buffer}, and @code{eval-current-buffer} | 1646 | @code{eval-region} and @code{eval-buffer} instrument all forms, even |
| 1648 | instrument all forms, even those that don't define anything. | 1647 | those that don't define anything. This doesn't apply to loading or |
| 1649 | This doesn't apply to loading or evaluations in the minibuffer. | 1648 | evaluations in the minibuffer. |
| 1650 | 1649 | ||
| 1651 | Use the command @kbd{M-x edebug-all-forms} to toggle the value of this | 1650 | Use the command @kbd{M-x edebug-all-forms} to toggle the value of this |
| 1652 | option. @xref{Instrumenting}. | 1651 | option. @xref{Instrumenting}. |
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index 11c321b32ed..159e440a989 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi | |||
| @@ -819,9 +819,6 @@ output of the output functions is printed in the echo area. | |||
| 819 | (@pxref{Unloading}), and defaults to @code{buffer-file-name} | 819 | (@pxref{Unloading}), and defaults to @code{buffer-file-name} |
| 820 | (@pxref{Buffer File Name}). If @var{unibyte} is non-@code{nil}, | 820 | (@pxref{Buffer File Name}). If @var{unibyte} is non-@code{nil}, |
| 821 | @code{read} converts strings to unibyte whenever possible. | 821 | @code{read} converts strings to unibyte whenever possible. |
| 822 | |||
| 823 | @findex eval-current-buffer | ||
| 824 | @code{eval-current-buffer} is an alias for this command. | ||
| 825 | @end deffn | 822 | @end deffn |
| 826 | 823 | ||
| 827 | @defopt max-lisp-eval-depth | 824 | @defopt max-lisp-eval-depth |
diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi index 918e197676e..6baa253cfdf 100644 --- a/doc/lispref/parsing.texi +++ b/doc/lispref/parsing.texi | |||
| @@ -580,8 +580,8 @@ If @var{parser-or-lang} is a parser object, this function uses that | |||
| 580 | parser; if @var{parser-or-lang} is a language, this function uses the | 580 | parser; if @var{parser-or-lang} is a language, this function uses the |
| 581 | first parser for that language in the current buffer, or creates one | 581 | first parser for that language in the current buffer, or creates one |
| 582 | if none exists; if @var{parser-or-lang} is @code{nil}, this function | 582 | if none exists; if @var{parser-or-lang} is @code{nil}, this function |
| 583 | tries to guess the language at @var{pos} by | 583 | tries to guess the language at @var{pos} by calling |
| 584 | @code{treesit-language-at}. | 584 | @code{treesit-language-at} (@pxref{Multiple Languages}). |
| 585 | 585 | ||
| 586 | If this function cannot find a suitable node to return, it returns | 586 | If this function cannot find a suitable node to return, it returns |
| 587 | @code{nil}. | 587 | @code{nil}. |
| @@ -616,7 +616,7 @@ If @var{parser-or-lang} is a parser object, this function uses that | |||
| 616 | parser; if @var{parser-or-lang} is a language, this function uses the | 616 | parser; if @var{parser-or-lang} is a language, this function uses the |
| 617 | first parser for that language in the current buffer, or creates one | 617 | first parser for that language in the current buffer, or creates one |
| 618 | if none exists; if @var{parser-or-lang} is @code{nil}, this function | 618 | if none exists; if @var{parser-or-lang} is @code{nil}, this function |
| 619 | tries to guess the language at @var{beg} by | 619 | tries to guess the language at @var{beg} by calling |
| 620 | @code{treesit-language-at}. | 620 | @code{treesit-language-at}. |
| 621 | 621 | ||
| 622 | If @var{named} is non-@code{nil}, this function looks for a named node | 622 | If @var{named} is non-@code{nil}, this function looks for a named node |
| @@ -1717,16 +1717,22 @@ This function activates some tree-sitter features for a major mode. | |||
| 1717 | 1717 | ||
| 1718 | Currently, it sets up the following features: | 1718 | Currently, it sets up the following features: |
| 1719 | @itemize | 1719 | @itemize |
| 1720 | @vindex treesit-font-lock-settings | ||
| 1720 | @item | 1721 | @item |
| 1721 | If @code{treesit-font-lock-settings} is non-@code{nil}, it sets up | 1722 | If @code{treesit-font-lock-settings} is non-@code{nil}, it sets up |
| 1722 | fontification. | 1723 | fontification. |
| 1724 | |||
| 1725 | @vindex treesit-simple-indent-rules | ||
| 1723 | @item | 1726 | @item |
| 1724 | If @code{treesit-simple-indent-rules} is non-@code{nil}, it sets up | 1727 | If @code{treesit-simple-indent-rules} is non-@code{nil}, it sets up |
| 1725 | indentation. | 1728 | indentation. |
| 1729 | |||
| 1730 | @vindex treesit-defun-type-regexp | ||
| 1726 | @item | 1731 | @item |
| 1727 | If @code{treesit-defun-type-regexp} is non-@code{nil}, it sets up | 1732 | If @code{treesit-defun-type-regexp} is non-@code{nil}, it sets up |
| 1728 | navigation functions for @code{beginning-of-defun} and | 1733 | navigation functions for @code{beginning-of-defun} and |
| 1729 | @code{end-of-defun}. | 1734 | @code{end-of-defun}. |
| 1735 | |||
| 1730 | @item | 1736 | @item |
| 1731 | If @code{treesit-defun-name-function} is non-@code{nil}, it sets up | 1737 | If @code{treesit-defun-name-function} is non-@code{nil}, it sets up |
| 1732 | add-log functions used by @code{add-log-current-defun}. | 1738 | add-log functions used by @code{add-log-current-defun}. |
| @@ -1745,11 +1751,13 @@ provides some additional functions for working with defuns: | |||
| 1745 | @code{treesit-defun-at-point} returns the defun node at point, and | 1751 | @code{treesit-defun-at-point} returns the defun node at point, and |
| 1746 | @code{treesit-defun-name} returns the name of a defun node. | 1752 | @code{treesit-defun-name} returns the name of a defun node. |
| 1747 | 1753 | ||
| 1754 | @c FIXME: Cross-reference to treesit-defun-tactic once we have it in | ||
| 1755 | @c the user manual. | ||
| 1748 | @defun treesit-defun-at-point | 1756 | @defun treesit-defun-at-point |
| 1749 | This function returns the defun node at point, or @code{nil} if none | 1757 | This function returns the defun node at point, or @code{nil} if none |
| 1750 | is found. It respects @code{treesit-defun-tactic}: it returns the | 1758 | is found. It respects @code{treesit-defun-tactic}: if its value is |
| 1751 | top-level defun if the value is @code{top-level}, and returns the | 1759 | @code{top-level}, this function returns the top-level defun, and if |
| 1752 | immediate enclosing defun if the value is @code{nested}. | 1760 | its value is @code{nested}, it returns the immediate enclosing defun. |
| 1753 | 1761 | ||
| 1754 | This function requires @code{treesit-defun-type-regexp} to work. If | 1762 | This function requires @code{treesit-defun-type-regexp} to work. If |
| 1755 | it is @code{nil}, this function simply returns @code{nil}. | 1763 | it is @code{nil}, this function simply returns @code{nil}. |
| @@ -1760,19 +1768,20 @@ This function returns the defun name of @var{node}. It returns | |||
| 1760 | @code{nil} if there is no defun name for @var{node}, or if @var{node} | 1768 | @code{nil} if there is no defun name for @var{node}, or if @var{node} |
| 1761 | is not a defun node, or if @var{node} is @code{nil}. | 1769 | is not a defun node, or if @var{node} is @code{nil}. |
| 1762 | 1770 | ||
| 1763 | The defun name is names like function name, class name, struct name, | 1771 | Depending on the language and major mode, the defun names are names |
| 1764 | etc. | 1772 | like function name, class name, struct name, etc. |
| 1765 | 1773 | ||
| 1766 | If @code{treesit-defun-name-function} is @code{nil}, this function | 1774 | If @code{treesit-defun-name-function} is @code{nil}, this function |
| 1767 | always returns @code{nil}. | 1775 | always returns @code{nil}. |
| 1768 | @end defun | 1776 | @end defun |
| 1769 | 1777 | ||
| 1770 | @defvar treesit-defun-name-function | 1778 | @defvar treesit-defun-name-function |
| 1771 | If non-@code{nil}, this variable should store a function that is | 1779 | If non-@code{nil}, this variable's value should be a function that is |
| 1772 | called with a node and returns the defun name of it. The function | 1780 | called with a node as its argument, and returns the defun name of the |
| 1773 | should have the same semantic as @code{treesit-defun-name}: if the | 1781 | node. The function should have the same semantic as |
| 1774 | node is not a defun node, or the node is a defun node but doesn't have | 1782 | @code{treesit-defun-name}: if the node is not a defun node, or the |
| 1775 | a name, or the node is @code{nil}, return @code{nil}. | 1783 | node is a defun node but doesn't have a name, or the node is |
| 1784 | @code{nil}, it should return @code{nil}. | ||
| 1776 | @end defvar | 1785 | @end defvar |
| 1777 | 1786 | ||
| 1778 | @node Tree-sitter C API | 1787 | @node Tree-sitter C API |
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index ef938e88ecf..98349099930 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi | |||
| @@ -5351,7 +5351,7 @@ called @var{gif}, you have to mark it specially to let | |||
| 5351 | 5351 | ||
| 5352 | @end defun | 5352 | @end defun |
| 5353 | 5353 | ||
| 5354 | @defun sqlite-select db query &optional values result-type | 5354 | @defun sqlite-select db query &optional values return-type |
| 5355 | Select some data from @var{db} and return them. For instance: | 5355 | Select some data from @var{db} and return them. For instance: |
| 5356 | 5356 | ||
| 5357 | @lisp | 5357 | @lisp |
diff --git a/etc/NEWS.29 b/etc/NEWS.29 index 6f2f74fab46..5b804b82b7f 100644 --- a/etc/NEWS.29 +++ b/etc/NEWS.29 | |||
| @@ -106,7 +106,7 @@ If a constant file name is required, the file can be renamed to | |||
| 106 | "emacs.pdmp", and Emacs will find it during startup anyway. | 106 | "emacs.pdmp", and Emacs will find it during startup anyway. |
| 107 | 107 | ||
| 108 | --- | 108 | --- |
| 109 | ** Emacs now uses XInput 2 for input events. | 109 | ** Emacs on X now uses XInput 2 for input events. |
| 110 | If your X server has support and you have the XInput 2 development | 110 | If your X server has support and you have the XInput 2 development |
| 111 | headers installed, Emacs will use the X Input Extension for handling | 111 | headers installed, Emacs will use the X Input Extension for handling |
| 112 | input. If this causes problems, you can configure Emacs with the | 112 | input. If this causes problems, you can configure Emacs with the |
| @@ -115,6 +115,19 @@ option '--without-xinput2' to disable this support. | |||
| 115 | '(featurep 'xinput2)' can be used to test for the presence of XInput 2 | 115 | '(featurep 'xinput2)' can be used to test for the presence of XInput 2 |
| 116 | support from Lisp programs. | 116 | support from Lisp programs. |
| 117 | 117 | ||
| 118 | +++ | ||
| 119 | ** Emacs now supports being built with pure GTK. | ||
| 120 | To use this option, make sure the GTK 3 (version 3.22.23 or later) and | ||
| 121 | Cairo development files are installed, and configure Emacs with the | ||
| 122 | option '--with-pgtk'. Unlike the default X and GTK build, the | ||
| 123 | resulting Emacs binary will work on any underlying window system | ||
| 124 | supported by GDK, such as Wayland and Broadway. We recommend that you | ||
| 125 | use this configuration only if you are running a window system other | ||
| 126 | than X that's supported by GDK. Running this configuration on X is | ||
| 127 | known to have problems, such as undesirable frame positioning and | ||
| 128 | various issues with keyboard input of sequences such as 'C-;' and | ||
| 129 | 'C-S-u'. | ||
| 130 | |||
| 118 | --- | 131 | --- |
| 119 | ** Emacs no longer reduces the size of the Japanese dictionary. | 132 | ** Emacs no longer reduces the size of the Japanese dictionary. |
| 120 | Building Emacs includes generation of a Japanese dictionary, which is | 133 | Building Emacs includes generation of a Japanese dictionary, which is |
| @@ -130,23 +143,10 @@ by saying | |||
| 130 | 143 | ||
| 131 | after deleting "lisp/leim/ja-dic/ja-dic.el". | 144 | after deleting "lisp/leim/ja-dic/ja-dic.el". |
| 132 | 145 | ||
| 133 | +++ | ||
| 134 | ** Emacs now supports being built with pure GTK. | ||
| 135 | To use this option, make sure the GTK 3 (version 3.22.23 or later) and | ||
| 136 | Cairo development files are installed, and configure Emacs with the | ||
| 137 | option '--with-pgtk'. Unlike the default X and GTK build, the | ||
| 138 | resulting Emacs binary will work on any underlying window system | ||
| 139 | supported by GDK, such as Wayland and Broadway. We do not recommend | ||
| 140 | that you use this configuration, unless you are running a window | ||
| 141 | system that's supported by GDK other than X. Running this | ||
| 142 | configuration on X is known to have problems, such as undesirable | ||
| 143 | frame positioning and various issues with keyboard input of sequences | ||
| 144 | such as 'C-;' and 'C-S-u'. | ||
| 145 | |||
| 146 | --- | 146 | --- |
| 147 | ** The docstrings of preloaded files are not in "etc/DOC" any more. | 147 | ** The docstrings of preloaded files are not in "etc/DOC" any more. |
| 148 | Instead, they're fetched as needed from the corresponding ".elc" file, | 148 | Instead, they're fetched as needed from the corresponding ".elc" |
| 149 | as was already the case for all the non-preloaded files. | 149 | files, as was already the case for all the non-preloaded files. |
| 150 | 150 | ||
| 151 | 151 | ||
| 152 | * Startup Changes in Emacs 29.1 | 152 | * Startup Changes in Emacs 29.1 |
| @@ -172,16 +172,18 @@ the value of the final form. | |||
| 172 | 172 | ||
| 173 | +++ | 173 | +++ |
| 174 | ** Emacs now supports setting 'user-emacs-directory' via '--init-directory'. | 174 | ** Emacs now supports setting 'user-emacs-directory' via '--init-directory'. |
| 175 | Use the '--init-directory' command-line option to set | ||
| 176 | 'user-emacs-directory'. | ||
| 175 | 177 | ||
| 176 | +++ | 178 | +++ |
| 177 | ** Emacs now has a '--fingerprint' option. | 179 | ** Emacs now has a '--fingerprint' option. |
| 178 | This will output a string identifying the current Emacs build. | 180 | This will output a string identifying the current Emacs build, and exit. |
| 179 | 181 | ||
| 180 | +++ | 182 | +++ |
| 181 | ** New hook 'after-pdump-load-hook'. | 183 | ** New hook 'after-pdump-load-hook'. |
| 182 | This is run at the end of the Emacs startup process, and is meant to | 184 | This is run at the end of the Emacs startup process, and is meant to |
| 183 | be used to reinitialize structures that would normally be done at load | 185 | be used to reinitialize data structures that would normally be done at |
| 184 | time. | 186 | load time. |
| 185 | 187 | ||
| 186 | ** Native Compilation | 188 | ** Native Compilation |
| 187 | 189 | ||
| @@ -189,13 +191,15 @@ time. | |||
| 189 | *** New variable 'inhibit-automatic-native-compilation'. | 191 | *** New variable 'inhibit-automatic-native-compilation'. |
| 190 | If set, Emacs will inhibit native compilation (and won't write | 192 | If set, Emacs will inhibit native compilation (and won't write |
| 191 | anything to the eln cache automatically). The variable is initialized | 193 | anything to the eln cache automatically). The variable is initialized |
| 192 | from the 'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION' environment | 194 | during Emacs startup from the environment variable |
| 193 | variable on Emacs startup. | 195 | 'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'. |
| 194 | 196 | ||
| 195 | --- | 197 | --- |
| 196 | *** New command 'native-compile-prune-cache'. | 198 | *** New command 'native-compile-prune-cache'. |
| 197 | This command deletes older eln cache entries (but not the ones for | 199 | This command deletes old subdirectories of the eln cache (but not the |
| 198 | the current Emacs version). | 200 | ones for the current Emacs version). Note that subdirectories of the |
| 201 | system directory where the "*.eln" files are installed (usually, the | ||
| 202 | last entry in 'native-comp-eln-load-path') are not deleted. | ||
| 199 | 203 | ||
| 200 | --- | 204 | --- |
| 201 | *** New function 'startup-redirect-eln-cache'. | 205 | *** New function 'startup-redirect-eln-cache'. |
| @@ -219,12 +223,12 @@ moved to the 'i' keymap, so '+' is now 'i +', '-' is now 'i -', and | |||
| 219 | you can rotate an image twice by saying 'i r r', for instance. | 223 | you can rotate an image twice by saying 'i r r', for instance. |
| 220 | 224 | ||
| 221 | +++ | 225 | +++ |
| 222 | ** Emacs now picks the correct coding system for X input methods. | 226 | ** Emacs now picks the correct coding-system for X input methods. |
| 223 | Previously, Emacs would use the locale coding system for input | 227 | Previously, Emacs would use 'locale-coding-system' for input |
| 224 | methods, which could in some circumstances be incorrect, especially | 228 | methods, which could in some circumstances be incorrect, especially |
| 225 | when the input method chose to fall back to some other coding system. | 229 | when the input method chose to fall back to some other coding system. |
| 226 | 230 | ||
| 227 | Now, Emacs automatically detects the coding system used by input | 231 | Emacs now automatically detects the coding-system used by input |
| 228 | methods, and uses that to decode input in preference to the value of | 232 | methods, and uses that to decode input in preference to the value of |
| 229 | 'locale-coding-system'. This unfortunately means that users who have | 233 | 'locale-coding-system'. This unfortunately means that users who have |
| 230 | changed the coding system used to decode X keyboard input must adjust | 234 | changed the coding system used to decode X keyboard input must adjust |
| @@ -244,7 +248,7 @@ names to be excluded from adding such excerpts. | |||
| 244 | In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted | 248 | In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted |
| 245 | off. In Emacs 28.1, the mode was switched on in all buffers. In | 249 | off. In Emacs 28.1, the mode was switched on in all buffers. In |
| 246 | Emacs 29.1, this was changed to be switched on in all editing-related | 250 | Emacs 29.1, this was changed to be switched on in all editing-related |
| 247 | buffers, but not in buffers that inherit from 'special-mode'. To get | 251 | buffers, but not in buffers that inherit from 'special-mode'. To go |
| 248 | back to how things worked in Emacs 28.1, put the following in your | 252 | back to how things worked in Emacs 28.1, put the following in your |
| 249 | init file: | 253 | init file: |
| 250 | 254 | ||
| @@ -291,7 +295,7 @@ mouse (in 'transient-mark-mode') and then hitting 'd' would skip dot | |||
| 291 | files. These now work equivalently. | 295 | files. These now work equivalently. |
| 292 | 296 | ||
| 293 | +++ | 297 | +++ |
| 294 | ** Warning about "eager macro-expansion failure" is changed into an error. | 298 | ** Warning about "eager macro-expansion failure" is now an error. |
| 295 | 299 | ||
| 296 | --- | 300 | --- |
| 297 | ** Previously, the X "reverseVideo" value at startup was heeded for all frames. | 301 | ** Previously, the X "reverseVideo" value at startup was heeded for all frames. |
| @@ -324,9 +328,9 @@ this off, disable the new 'isearch-fold-quotes-mode' minor mode. | |||
| 324 | ** Sorting commands no longer necessarily change modification status. | 328 | ** Sorting commands no longer necessarily change modification status. |
| 325 | In earlier Emacs versions, commands like 'M-x sort-lines' would always | 329 | In earlier Emacs versions, commands like 'M-x sort-lines' would always |
| 326 | change buffer modification status to "modified", whether they changed | 330 | change buffer modification status to "modified", whether they changed |
| 327 | something in the buffer or not. This has been changed: The buffer is | 331 | something in the buffer or not. This has been changed: the buffer is |
| 328 | marked as modified only if the sorting ended up changing the contents | 332 | marked as modified only if the sorting ended up actually changing the |
| 329 | of the buffer. | 333 | contents of the buffer. |
| 330 | 334 | ||
| 331 | --- | 335 | --- |
| 332 | ** 'string-lines' handles trailing newlines differently. | 336 | ** 'string-lines' handles trailing newlines differently. |
| @@ -355,7 +359,7 @@ your Init file: | |||
| 355 | 359 | ||
| 356 | --- | 360 | --- |
| 357 | ** New user option 'term-clear-full-screen-programs'. | 361 | ** New user option 'term-clear-full-screen-programs'. |
| 358 | By default, term will now work like most terminals when displaying | 362 | By default, term.el will now work like most terminals when displaying |
| 359 | full-screen programs: When they exit, the output is cleared, leaving | 363 | full-screen programs: When they exit, the output is cleared, leaving |
| 360 | what was displayed in the window before the programs started. Set | 364 | what was displayed in the window before the programs started. Set |
| 361 | this user option to nil to revert back to the old behavior. | 365 | this user option to nil to revert back to the old behavior. |
| @@ -452,8 +456,8 @@ Names of thumbnail files generated when 'image-dired-thumbnail-storage' | |||
| 452 | is 'image-dired' now always end in ".jpg". This fixes various issues | 456 | is 'image-dired' now always end in ".jpg". This fixes various issues |
| 453 | on different platforms, but means that thumbnails generated in Emacs 28 | 457 | on different platforms, but means that thumbnails generated in Emacs 28 |
| 454 | will not be used in Emacs 29, and vice-versa. If disk space is an | 458 | will not be used in Emacs 29, and vice-versa. If disk space is an |
| 455 | issue, consider deleting the 'image-dired-dir' directory after | 459 | issue, consider deleting the 'image-dired-dir' directory (usually |
| 456 | upgrading (usually "~/.emacs.d/image-dired/"). | 460 | "~/.emacs.d/image-dired/") after upgrading to Emacs 29. |
| 457 | 461 | ||
| 458 | --- | 462 | --- |
| 459 | ** The 'rlogin' method in the URL library is now obsolete. | 463 | ** The 'rlogin' method in the URL library is now obsolete. |
| @@ -506,7 +510,7 @@ We recommend using 'M-x image-dired' instead. | |||
| 506 | ** The autoarg.el library is now marked obsolete. | 510 | ** The autoarg.el library is now marked obsolete. |
| 507 | This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor | 511 | This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor |
| 508 | modes to emulate the behavior of the historical editor Twenex Emacs. | 512 | modes to emulate the behavior of the historical editor Twenex Emacs. |
| 509 | It is believed to no longer be useful. | 513 | We believe it is no longer useful. |
| 510 | 514 | ||
| 511 | --- | 515 | --- |
| 512 | ** The quickurl.el library is now obsolete. | 516 | ** The quickurl.el library is now obsolete. |
| @@ -521,7 +525,7 @@ Use something like 'M-x shell RET ssh <host> RET' instead. | |||
| 521 | 525 | ||
| 522 | --- | 526 | --- |
| 523 | ** The autoload.el library is now obsolete. | 527 | ** The autoload.el library is now obsolete. |
| 524 | It is superseded by the loaddefs-gen.el library. | 528 | It is superseded by the new loaddefs-gen.el library. |
| 525 | 529 | ||
| 526 | --- | 530 | --- |
| 527 | ** The netrc.el library is now obsolete. | 531 | ** The netrc.el library is now obsolete. |
| @@ -566,7 +570,8 @@ optimizations are in effect. | |||
| 566 | 570 | ||
| 567 | A companion variable 'large-hscroll-threshold' controls when another | 571 | A companion variable 'large-hscroll-threshold' controls when another |
| 568 | set of display optimizations are in effect, which are aimed | 572 | set of display optimizations are in effect, which are aimed |
| 569 | specifically at speeding up display of long lines that are truncated. | 573 | specifically at speeding up display of long lines that are truncated |
| 574 | on display. | ||
| 570 | 575 | ||
| 571 | If you still experience slowdowns while editing files with long lines, | 576 | If you still experience slowdowns while editing files with long lines, |
| 572 | this may be due to line truncation, or to one of the enabled minor | 577 | this may be due to line truncation, or to one of the enabled minor |
| @@ -594,14 +599,15 @@ increase and decrease the font size globally. Additionally, the | |||
| 594 | user option 'global-text-scale-adjust-resizes-frames' controls whether | 599 | user option 'global-text-scale-adjust-resizes-frames' controls whether |
| 595 | the frames are resized when the font size is changed. | 600 | the frames are resized when the font size is changed. |
| 596 | 601 | ||
| 602 | --- | ||
| 597 | ** New config variable 'syntax-wholeline-max' to reduce the cost of long lines. | 603 | ** New config variable 'syntax-wholeline-max' to reduce the cost of long lines. |
| 598 | This variable is used by some operations (mostly syntax-propertization | 604 | This variable is used by some operations (mostly syntax-propertization |
| 599 | and font-locking) to treat lines longer than this variable as if they | 605 | and font-locking) to treat lines longer than this variable as if they |
| 600 | were made up of various smaller lines. This can help reduce the | 606 | were made up of various smaller lines. This can help reduce the |
| 601 | slowdowns seen in buffers made of a single long line, but can also | 607 | slowdowns seen in buffers made of a single long line, but can also |
| 602 | cause misbehavior in the presence of such long lines (tho most of that | 608 | cause misbehavior in the presence of such long lines (though most of |
| 603 | misbehavior should usually be limited to mis-highlighting). You can | 609 | that misbehavior should usually be limited to mis-highlighting). You |
| 604 | recover the previous behavior with: | 610 | can recover the previous behavior with: |
| 605 | 611 | ||
| 606 | (setq syntax-wholeline-max most-positive-fixnum) | 612 | (setq syntax-wholeline-max most-positive-fixnum) |
| 607 | 613 | ||
| @@ -616,7 +622,7 @@ and 'C-x 5 L' is now bound to 'find-library-other-frame'. | |||
| 616 | Emacs allows different completion predicates to be used with 'M-x' | 622 | Emacs allows different completion predicates to be used with 'M-x' |
| 617 | (i.e., 'execute-extended-command') via the | 623 | (i.e., 'execute-extended-command') via the |
| 618 | 'read-extended-command-predicate' user option. Emacs also has the | 624 | 'read-extended-command-predicate' user option. Emacs also has the |
| 619 | 'M-X' (note upper case) command, which only displays commands | 625 | 'M-X' (note upper case X) command, which only displays commands |
| 620 | especially relevant to the current buffer. Emacs now allows toggling | 626 | especially relevant to the current buffer. Emacs now allows toggling |
| 621 | between these modes while the user is inputting a command by hitting | 627 | between these modes while the user is inputting a command by hitting |
| 622 | 'M-X' while in the minibuffer. | 628 | 'M-X' while in the minibuffer. |
| @@ -662,7 +668,8 @@ match those regexps will be ignored by 'switch-to-prev-buffer' and | |||
| 662 | +++ | 668 | +++ |
| 663 | ** New command 'rename-visited-file'. | 669 | ** New command 'rename-visited-file'. |
| 664 | This command renames the file visited by the current buffer by moving | 670 | This command renames the file visited by the current buffer by moving |
| 665 | it to a new location, and also makes the buffer visit this new file. | 671 | it to a new name or location, and also makes the buffer visit this new |
| 672 | file. | ||
| 666 | 673 | ||
| 667 | ** Menus | 674 | ** Menus |
| 668 | 675 | ||
| @@ -687,19 +694,21 @@ the current Emacs process at the end, it starts a new Emacs process | |||
| 687 | optional parameters to restart instead of just killing the current | 694 | optional parameters to restart instead of just killing the current |
| 688 | process. | 695 | process. |
| 689 | 696 | ||
| 697 | ** Drag and Drop | ||
| 698 | |||
| 690 | +++ | 699 | +++ |
| 691 | ** New user option 'mouse-drag-mode-line-buffer'. | 700 | *** New user option 'mouse-drag-mode-line-buffer'. |
| 692 | If non-nil, dragging on the buffer name part of the mode-line will | 701 | If non-nil, dragging on the buffer name part of the mode-line will |
| 693 | drag the buffer's associated file to other programs. This option is | 702 | drag the buffer's associated file to other programs. This option is |
| 694 | currently only available on X, Haiku and Nextstep (GNUstep or macOS). | 703 | currently only available on X, Haiku and Nextstep (GNUstep or macOS). |
| 695 | 704 | ||
| 696 | +++ | 705 | +++ |
| 697 | ** New user option 'mouse-drag-and-drop-region-cross-program'. | 706 | *** New user option 'mouse-drag-and-drop-region-cross-program'. |
| 698 | If non-nil, this option allows dragging text in the region from Emacs | 707 | If non-nil, this option allows dragging text in the region from Emacs |
| 699 | to another program. | 708 | to another program. |
| 700 | 709 | ||
| 701 | --- | 710 | --- |
| 702 | ** New user option 'mouse-drag-and-drop-region-scroll-margin'. | 711 | *** New user option 'mouse-drag-and-drop-region-scroll-margin'. |
| 703 | If non-nil, this option allows scrolling a window while dragging text | 712 | If non-nil, this option allows scrolling a window while dragging text |
| 704 | around without a scroll wheel. | 713 | around without a scroll wheel. |
| 705 | 714 | ||
| @@ -709,12 +718,12 @@ This prevents mouse drag gestures from putting empty strings onto the | |||
| 709 | kill ring. | 718 | kill ring. |
| 710 | 719 | ||
| 711 | +++ | 720 | +++ |
| 712 | ** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'. | 721 | *** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'. |
| 713 | These options allow adjusting point and scrolling a window when | 722 | These options allow adjusting point and scrolling a window when |
| 714 | dragging items from another program. | 723 | dragging items from another program. |
| 715 | 724 | ||
| 716 | +++ | 725 | +++ |
| 717 | ** The X Direct Save (XDS) protocol is now supported. | 726 | *** The X Direct Save (XDS) protocol is now supported. |
| 718 | This means dropping an image or file link from programs such as | 727 | This means dropping an image or file link from programs such as |
| 719 | Firefox will no longer create a temporary file in a random directory, | 728 | Firefox will no longer create a temporary file in a random directory, |
| 720 | instead asking you where to save the file first. | 729 | instead asking you where to save the file first. |
| @@ -746,6 +755,7 @@ part of the buffer. | |||
| 746 | +++ | 755 | +++ |
| 747 | ** 'count-words' will now report sentence count when used interactively. | 756 | ** 'count-words' will now report sentence count when used interactively. |
| 748 | 757 | ||
| 758 | +++ | ||
| 749 | ** New user option 'set-message-functions'. | 759 | ** New user option 'set-message-functions'. |
| 750 | It allows selecting more functions for 'set-message-function' | 760 | It allows selecting more functions for 'set-message-function' |
| 751 | in addition to the default function that handles messages | 761 | in addition to the default function that handles messages |
| @@ -884,6 +894,7 @@ This is in addition to previously-supported ways of discovering 24-bit | |||
| 884 | color support: either via the "RGB" or "setf24" capabilities, or if | 894 | color support: either via the "RGB" or "setf24" capabilities, or if |
| 885 | the 'COLORTERM' environment variable is set to the value "truecolor". | 895 | the 'COLORTERM' environment variable is set to the value "truecolor". |
| 886 | 896 | ||
| 897 | --- | ||
| 887 | *** Select active regions with xterm selection support. | 898 | *** Select active regions with xterm selection support. |
| 888 | On terminals with xterm setSelection support, the active region may be | 899 | On terminals with xterm setSelection support, the active region may be |
| 889 | saved to the X primary selection, following the | 900 | saved to the X primary selection, following the |
| @@ -895,7 +906,8 @@ saved to the X primary selection, following the | |||
| 895 | The new command 'standard-display-by-replacement-char' produces Lisp | 906 | The new command 'standard-display-by-replacement-char' produces Lisp |
| 896 | code that sets up the 'standard-display-table' to use a replacement | 907 | code that sets up the 'standard-display-table' to use a replacement |
| 897 | character for display of characters that the text-mode terminal | 908 | character for display of characters that the text-mode terminal |
| 898 | doesn't support. It is most useful with the Linux console and similar | 909 | doesn't support. This code is intended to be used in your init files. |
| 910 | This feature is most useful with the Linux console and similar | ||
| 899 | terminals, where Emacs has a reliable way of determining which | 911 | terminals, where Emacs has a reliable way of determining which |
| 900 | characters have glyphs in the font loaded into the terminal's memory. | 912 | characters have glyphs in the font loaded into the terminal's memory. |
| 901 | 913 | ||
| @@ -936,7 +948,7 @@ This affects the 'ert-select-tests' function and its callers. | |||
| 936 | ** Emoji | 948 | ** Emoji |
| 937 | 949 | ||
| 938 | +++ | 950 | +++ |
| 939 | *** Emacs now has several new methods for inserting Emojis. | 951 | *** Emacs now has several new methods for inserting Emoji. |
| 940 | The Emoji commands are under the new 'C-x 8 e' prefix. | 952 | The Emoji commands are under the new 'C-x 8 e' prefix. |
| 941 | 953 | ||
| 942 | +++ | 954 | +++ |
| @@ -946,42 +958,42 @@ combinations in a graphical menu system. | |||
| 946 | 958 | ||
| 947 | +++ | 959 | +++ |
| 948 | *** New command 'emoji-search' (bound to 'C-x 8 e s'). | 960 | *** New command 'emoji-search' (bound to 'C-x 8 e s'). |
| 949 | This command lets you search for Emojis based on names. | 961 | This command lets you search for Emoji based on names. |
| 950 | 962 | ||
| 951 | +++ | 963 | +++ |
| 952 | *** New command 'emoji-list' (bound to 'C-x 8 e l'). | 964 | *** New command 'emoji-list' (bound to 'C-x 8 e l'). |
| 953 | This command lists all Emojis (categorized by themes) in a special | 965 | This command lists all Emoji (categorized by themes) in a special |
| 954 | buffer and lets you choose one of them. | 966 | buffer and lets you choose one of them. |
| 955 | 967 | ||
| 956 | --- | 968 | --- |
| 957 | *** New command 'emoji-recent' (bound to 'C-x 8 e r'). | 969 | *** New command 'emoji-recent' (bound to 'C-x 8 e r'). |
| 958 | This command lets you choose among the Emojis you have recently | 970 | This command lets you choose among the Emoji you have recently |
| 959 | inserted. | 971 | inserted. |
| 960 | 972 | ||
| 961 | +++ | 973 | +++ |
| 962 | *** New command 'emoji-describe' (bound to 'C-x 8 e d'). | 974 | *** New command 'emoji-describe' (bound to 'C-x 8 e d'). |
| 963 | This command will tell you the name of the Emoji at point. (This | 975 | This command will tell you the name of the Emoji at point. (It also |
| 964 | command also works for non-Emoji characters.) | 976 | works for non-Emoji characters.) |
| 965 | 977 | ||
| 966 | --- | 978 | --- |
| 967 | *** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'. | 979 | *** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'. |
| 968 | These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively. They | 980 | These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively. They |
| 969 | can be used on any character, but are mainly useful for emoji. | 981 | can be used on any character, but are mainly useful for Emoji. |
| 970 | 982 | ||
| 971 | --- | 983 | --- |
| 972 | *** New input method 'emoji'. | 984 | *** New input method 'emoji'. |
| 973 | This allows you to enter emoji using short strings, eg ':face_palm:' | 985 | This allows you to enter Emoji using short strings, eg ':face_palm:' |
| 974 | or ':scream:'. | 986 | or ':scream:'. |
| 975 | 987 | ||
| 976 | ** Help | 988 | ** Help |
| 977 | 989 | ||
| 978 | --- | 990 | --- |
| 979 | *** Variable values displayed by 'C-h v' in "*Help*" are now font-locked. | 991 | *** Variable values displayed by 'C-h v' in "*Help*" are now fontified. |
| 980 | 992 | ||
| 981 | +++ | 993 | +++ |
| 982 | *** New user option 'help-clean-buttons'. | 994 | *** New user option 'help-clean-buttons'. |
| 983 | If non-nil, link buttons in "*Help*" will have any surrounding quotes | 995 | If non-nil, link buttons in "*Help*" buffers will have any surrounding |
| 984 | removed. | 996 | quotes removed. |
| 985 | 997 | ||
| 986 | --- | 998 | --- |
| 987 | *** 'M-x apropos-variable' output now includes values of variables. | 999 | *** 'M-x apropos-variable' output now includes values of variables. |
| @@ -992,13 +1004,13 @@ When displaying docstrings in "*Help*" buffers, strings that are | |||
| 992 | "`like-this'" are made into links (if they point to a bound | 1004 | "`like-this'" are made into links (if they point to a bound |
| 993 | function/variable). This can lead to false positives when talking | 1005 | function/variable). This can lead to false positives when talking |
| 994 | about values that are symbols that happen to have the same names as | 1006 | about values that are symbols that happen to have the same names as |
| 995 | functions/variables. To inhibit this buttonification, the new | 1007 | functions/variables. To inhibit this buttonification, use the new |
| 996 | "\\+`like-this'" syntax can be used. | 1008 | "\\+`like-this'" syntax. |
| 997 | 1009 | ||
| 998 | +++ | 1010 | +++ |
| 999 | *** New user option 'help-window-keep-selected'. | 1011 | *** New user option 'help-window-keep-selected'. |
| 1000 | If non-nil, commands to show the info manual and the source will reuse | 1012 | If non-nil, commands to show the info manual and the source will reuse |
| 1001 | the same window the "*Help*" buffer is shown in. | 1013 | the same window in which the "*Help*" buffer is shown. |
| 1002 | 1014 | ||
| 1003 | --- | 1015 | --- |
| 1004 | *** Commands like 'C-h f' have changed how they describe menu bindings. | 1016 | *** Commands like 'C-h f' have changed how they describe menu bindings. |
| @@ -1027,19 +1039,19 @@ it's easy to make an edit that yields an invalid result. | |||
| 1027 | 1039 | ||
| 1028 | --- | 1040 | --- |
| 1029 | *** 'C-h b' uses outlining by default. | 1041 | *** 'C-h b' uses outlining by default. |
| 1030 | Set 'describe-bindings-outline' to nil to get the old behavior. | 1042 | Set 'describe-bindings-outline' to nil to get back the old behavior. |
| 1031 | 1043 | ||
| 1032 | --- | 1044 | --- |
| 1033 | *** Jumping to function/variable source now saves mark before moving point. | 1045 | *** Jumping to function/variable source now saves mark before moving point. |
| 1034 | Jumping to source from "*Help*" buffer moves the point when the source | 1046 | Jumping to source from a "*Help*" buffer moves point when the source |
| 1035 | buffer is already open. Now, the old point is pushed to mark ring. | 1047 | buffer is already open. Now, the old point is pushed onto mark ring. |
| 1036 | 1048 | ||
| 1037 | +++ | 1049 | +++ |
| 1038 | *** New key bindings in "*Help*" buffers: 'n' and 'p'. | 1050 | *** New key bindings in "*Help*" buffers: 'n' and 'p'. |
| 1039 | These will take you (respectively) to the next and previous "page". | 1051 | These will take you (respectively) to the next and previous "page". |
| 1040 | 1052 | ||
| 1041 | --- | 1053 | --- |
| 1042 | *** 'describe-char' now also outputs the name of emoji combinations. | 1054 | *** 'describe-char' now also outputs the name of Emoji sequences. |
| 1043 | 1055 | ||
| 1044 | +++ | 1056 | +++ |
| 1045 | *** New key binding in "*Help*" buffer: 'I'. | 1057 | *** New key binding in "*Help*" buffer: 'I'. |
| @@ -1067,7 +1079,7 @@ The command pops up a buffer at the bottom of the screen with a few | |||
| 1067 | helpful commands for various tasks. You can toggle the display using | 1079 | helpful commands for various tasks. You can toggle the display using |
| 1068 | 'C-h q'. | 1080 | 'C-h q'. |
| 1069 | 1081 | ||
| 1070 | ** Emacs 29.1 comes with Org v9.6. | 1082 | ** Emacs now comes with Org v9.6. |
| 1071 | See the file ORG-NEWS for user-visible changes in Org. | 1083 | See the file ORG-NEWS for user-visible changes in Org. |
| 1072 | 1084 | ||
| 1073 | ** Outline Mode | 1085 | ** Outline Mode |
| @@ -1075,12 +1087,12 @@ See the file ORG-NEWS for user-visible changes in Org. | |||
| 1075 | +++ | 1087 | +++ |
| 1076 | *** Support for customizing the default visibility state of headings. | 1088 | *** Support for customizing the default visibility state of headings. |
| 1077 | Customize the user option 'outline-default-state' to define what | 1089 | Customize the user option 'outline-default-state' to define what |
| 1078 | headings will be visible after Outline mode is turned on. When equal | 1090 | headings will be visible initially, after Outline mode is turned on. |
| 1079 | to a number, the user option 'outline-default-rules' determines the | 1091 | When the value is a number, the user option 'outline-default-rules' |
| 1080 | visibility of the subtree starting at the corresponding level. Values | 1092 | determines the visibility of the subtree starting at the corresponding |
| 1081 | are provided to control showing a heading subtree depending on whether | 1093 | level. Values are provided to control showing a heading subtree |
| 1082 | the heading matches a regexp, or on whether its subtree has long lines | 1094 | depending on whether the heading matches a regexp, or on whether its |
| 1083 | or is itself too long. | 1095 | subtree has long lines or is itself too long. |
| 1084 | 1096 | ||
| 1085 | ** Outline Minor Mode | 1097 | ** Outline Minor Mode |
| 1086 | 1098 | ||
| @@ -1088,10 +1100,10 @@ or is itself too long. | |||
| 1088 | *** New user option 'outline-minor-mode-use-buttons'. | 1100 | *** New user option 'outline-minor-mode-use-buttons'. |
| 1089 | If non-nil, Outline Minor Mode will use buttons to hide/show outlines | 1101 | If non-nil, Outline Minor Mode will use buttons to hide/show outlines |
| 1090 | in addition to the ellipsis. The default is nil, but in 'help-mode' | 1102 | in addition to the ellipsis. The default is nil, but in 'help-mode' |
| 1091 | it has the value 'insert' that inserts the buttons directly to the | 1103 | it has the value 'insert' that inserts the buttons directly into the |
| 1092 | buffer where you can use 'RET' to cycle outline visibility. When | 1104 | buffer, and you can use 'RET' to cycle outline visibility. When |
| 1093 | the value is 'in-margins', Outline Minor Mode uses the window margins | 1105 | the value is 'in-margins', Outline Minor Mode uses the window margins |
| 1094 | to hide/show outlines. | 1106 | to hide/show buttons. |
| 1095 | 1107 | ||
| 1096 | ** Windows | 1108 | ** Windows |
| 1097 | 1109 | ||
| @@ -1099,17 +1111,19 @@ to hide/show outlines. | |||
| 1099 | *** New commands 'split-root-window-below' and 'split-root-window-right'. | 1111 | *** New commands 'split-root-window-below' and 'split-root-window-right'. |
| 1100 | These commands split the root window in two, and are bound to 'C-x w 2' | 1112 | These commands split the root window in two, and are bound to 'C-x w 2' |
| 1101 | and 'C-x w 3', respectively. A number of other useful window-related | 1113 | and 'C-x w 3', respectively. A number of other useful window-related |
| 1102 | commands are now available on the 'C-x w' prefix. | 1114 | commands are now available with key sequences that start with the |
| 1115 | 'C-x w' prefix. | ||
| 1103 | 1116 | ||
| 1104 | +++ | 1117 | +++ |
| 1105 | *** New user option 'display-buffer-avoid-small-windows'. | 1118 | *** New user option 'display-buffer-avoid-small-windows'. |
| 1106 | If non-nil, this should be a window height, a number. Windows smaller | 1119 | If non-nil, this should be a window height in lines, a number. |
| 1107 | than this will be avoided by 'display-buffer', if possible. | 1120 | Windows smaller than this will be avoided by 'display-buffer', if |
| 1121 | possible. | ||
| 1108 | 1122 | ||
| 1109 | +++ | 1123 | +++ |
| 1110 | *** New display action 'display-buffer-full-frame'. | 1124 | *** New display action 'display-buffer-full-frame'. |
| 1111 | This action removes other windows on the frame when displaying a | 1125 | This action removes other windows from the frame when displaying a |
| 1112 | buffer. | 1126 | buffer on that frame. |
| 1113 | 1127 | ||
| 1114 | +++ | 1128 | +++ |
| 1115 | *** 'display-buffer' now can set up the body size of the chosen window. | 1129 | *** 'display-buffer' now can set up the body size of the chosen window. |
| @@ -1118,10 +1132,10 @@ For example, a 'display-buffer-alist' entry of | |||
| 1118 | '(window-width . (body-columns . 40))' | 1132 | '(window-width . (body-columns . 40))' |
| 1119 | 1133 | ||
| 1120 | will make the body of the chosen window 40 columns wide. For the | 1134 | will make the body of the chosen window 40 columns wide. For the |
| 1121 | height use 'window-height' in combination with 'body-lines'. | 1135 | height use 'window-height' and 'body-lines', respectively. |
| 1122 | 1136 | ||
| 1123 | --- | 1137 | --- |
| 1124 | *** You can customize which window 'scroll-other-window' operates on. | 1138 | *** You can customize on which window 'scroll-other-window' operates. |
| 1125 | This is controlled by the new 'other-window-scroll-default' user option. | 1139 | This is controlled by the new 'other-window-scroll-default' user option. |
| 1126 | 1140 | ||
| 1127 | ** Frames | 1141 | ** Frames |
| @@ -1145,6 +1159,8 @@ before its name on display is truncated. | |||
| 1145 | 1159 | ||
| 1146 | --- | 1160 | --- |
| 1147 | *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. | 1161 | *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist. |
| 1162 | It prompts for the name of a tab and switches to it, creating a new | ||
| 1163 | tab if no tab exists by that name. | ||
| 1148 | 1164 | ||
| 1149 | --- | 1165 | --- |
| 1150 | *** New keymap 'tab-bar-history-mode-map'. | 1166 | *** New keymap 'tab-bar-history-mode-map'. |
| @@ -1211,7 +1227,7 @@ Most IRC clients (including rcirc) support basic formatting using | |||
| 1211 | control codes. Under the 'C-c C-f' prefix a few commands have been | 1227 | control codes. Under the 'C-c C-f' prefix a few commands have been |
| 1212 | added to insert these automatically. For example, if a region is | 1228 | added to insert these automatically. For example, if a region is |
| 1213 | active and 'C-c C-f C-b' is invoked, markup is inserted for the region | 1229 | active and 'C-c C-f C-b' is invoked, markup is inserted for the region |
| 1214 | to be highlighted bold. | 1230 | to be highlighted in bold. |
| 1215 | 1231 | ||
| 1216 | ** Imenu | 1232 | ** Imenu |
| 1217 | 1233 | ||
| @@ -1223,13 +1239,16 @@ to be highlighted bold. | |||
| 1223 | Use it if you want Imenu to forget the buffer's index alist and | 1239 | Use it if you want Imenu to forget the buffer's index alist and |
| 1224 | recreate it anew next time 'imenu' is invoked. | 1240 | recreate it anew next time 'imenu' is invoked. |
| 1225 | 1241 | ||
| 1226 | +++ | 1242 | --- |
| 1227 | ** Emacs is now capable of abandoning a window's redisplay that takes too long. | 1243 | ** Emacs is now capable of abandoning a window's redisplay that takes too long. |
| 1228 | This is controlled by the new variable 'max-redisplay-ticks'. If that | 1244 | This is controlled by the new variable 'max-redisplay-ticks'. If that |
| 1229 | variable is set to a non-zero value, display of a window will be | 1245 | variable is set to a non-zero value, display of a window will be |
| 1230 | aborted after that many low-level redisplay operations, thus | 1246 | aborted after that many low-level redisplay operations, thus |
| 1231 | preventing Emacs from becoming wedged when visiting files with very | 1247 | preventing Emacs from becoming wedged when visiting files with very |
| 1232 | long lines. | 1248 | long lines. The default is zero, which disables the feature: Emacs |
| 1249 | will wait forever for redisplay to finish. (We believe you won't need | ||
| 1250 | this feature, given the ability to display buffers with very long | ||
| 1251 | lines.) | ||
| 1233 | 1252 | ||
| 1234 | * Editing Changes in Emacs 29.1 | 1253 | * Editing Changes in Emacs 29.1 |
| 1235 | 1254 | ||
| @@ -1242,15 +1261,15 @@ option 'cycle-spacing-actions'. | |||
| 1242 | --- | 1261 | --- |
| 1243 | ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars. | 1262 | ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars. |
| 1244 | These commands now behave as case-sensitive for interactive calls when | 1263 | These commands now behave as case-sensitive for interactive calls when |
| 1245 | they are invoked with an uppercase character, regardless of the | 1264 | they are invoked with an uppercase character, regardless of the value |
| 1246 | 'case-fold-search' value. | 1265 | of 'case-fold-search'. |
| 1247 | 1266 | ||
| 1248 | --- | 1267 | --- |
| 1249 | ** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping. | 1268 | ** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping. |
| 1250 | These commands (bound to 'C-M-v' and 'C-M-V') used to scroll the other | 1269 | These commands (bound to 'C-M-v' and 'C-M-V') used to scroll the other |
| 1251 | windows without looking a customizations in that other window. These | 1270 | windows without looking at customizations in that other window. These |
| 1252 | functions now check whether they have been rebound in the buffer in | 1271 | functions now check whether they have been rebound in the buffer shown |
| 1253 | that other window, and then call the remapped function instead. In | 1272 | in that other window, and then call the remapped function instead. In |
| 1254 | addition, these commands now also respect the | 1273 | addition, these commands now also respect the |
| 1255 | 'scroll-error-top-bottom' user option. | 1274 | 'scroll-error-top-bottom' user option. |
| 1256 | 1275 | ||
| @@ -1267,8 +1286,8 @@ This change also affects 'cl-macrolet', 'cl-flet*' and | |||
| 1267 | 1286 | ||
| 1268 | +++ | 1287 | +++ |
| 1269 | ** New user option 'translate-upper-case-key-bindings'. | 1288 | ** New user option 'translate-upper-case-key-bindings'. |
| 1270 | Set this option to nil to inhibit translating upper case keys to lower | 1289 | Set this option to nil to inhibit the default translation of upper |
| 1271 | case keys. | 1290 | case keys to their lower case variants. |
| 1272 | 1291 | ||
| 1273 | +++ | 1292 | +++ |
| 1274 | ** New command 'ensure-empty-lines'. | 1293 | ** New command 'ensure-empty-lines'. |
| @@ -1279,8 +1298,8 @@ point. | |||
| 1279 | ** Improved mouse behavior with auto-scrolling modes. | 1298 | ** Improved mouse behavior with auto-scrolling modes. |
| 1280 | When clicking inside the 'scroll-margin' or 'hscroll-margin' region, | 1299 | When clicking inside the 'scroll-margin' or 'hscroll-margin' region, |
| 1281 | point is now moved only when releasing the mouse button. This no | 1300 | point is now moved only when releasing the mouse button. This no |
| 1282 | longer results in a bogus selection, unless the mouse has been | 1301 | longer results in a bogus selection, unless the mouse has also been |
| 1283 | effectively dragged. | 1302 | dragged. |
| 1284 | 1303 | ||
| 1285 | +++ | 1304 | +++ |
| 1286 | ** 'kill-ring-max' now defaults to 120. | 1305 | ** 'kill-ring-max' now defaults to 120. |
| @@ -1301,10 +1320,11 @@ When non-nil, if the point is in a closing delimiter and the opening | |||
| 1301 | delimiter is offscreen, shows some context around the opening | 1320 | delimiter is offscreen, shows some context around the opening |
| 1302 | delimiter in the echo area. The default is nil. | 1321 | delimiter in the echo area. The default is nil. |
| 1303 | 1322 | ||
| 1304 | May also be set to the symbols 'overlay' or 'child-frame', in which | 1323 | This option can also be set to the symbols 'overlay' or 'child-frame', |
| 1305 | case the context is shown in an overlay or child-frame at the top-left | 1324 | in which case the context is shown in an overlay or child-frame at the |
| 1306 | of the current window. The latter option requires a graphical frame. | 1325 | top-left of the current window. The latter option requires a |
| 1307 | On non-graphical frames, the context is shown in the echo area. | 1326 | graphical frame. On non-graphical frames, the context is shown in the |
| 1327 | echo area. | ||
| 1308 | 1328 | ||
| 1309 | ** Comint | 1329 | ** Comint |
| 1310 | 1330 | ||
| @@ -1318,7 +1338,7 @@ change the terminal used on a remote host. | |||
| 1318 | *** New user option 'comint-delete-old-input'. | 1338 | *** New user option 'comint-delete-old-input'. |
| 1319 | When nil, this prevents comint from deleting the current input when | 1339 | When nil, this prevents comint from deleting the current input when |
| 1320 | inserting previous input using '<mouse-2>'. The default is t, to | 1340 | inserting previous input using '<mouse-2>'. The default is t, to |
| 1321 | preserve past behavior. | 1341 | preserve previous behavior. |
| 1322 | 1342 | ||
| 1323 | --- | 1343 | --- |
| 1324 | *** New minor mode 'comint-fontify-input-mode'. | 1344 | *** New minor mode 'comint-fontify-input-mode'. |
| @@ -1339,55 +1359,88 @@ support systems where two kinds of wheel events can be received. | |||
| 1339 | 1359 | ||
| 1340 | ** Internationalization changes | 1360 | ** Internationalization changes |
| 1341 | 1361 | ||
| 1362 | --- | ||
| 1342 | *** The <Delete> function key now allows deleting the entire composed sequence. | 1363 | *** The <Delete> function key now allows deleting the entire composed sequence. |
| 1343 | For the details, see the item about the 'delete-forward-char' command | 1364 | For the details, see the item about the 'delete-forward-char' command |
| 1344 | above. | 1365 | above. |
| 1345 | 1366 | ||
| 1367 | --- | ||
| 1346 | *** New user option 'composition-break-at-point'. | 1368 | *** New user option 'composition-break-at-point'. |
| 1347 | Setting it to a non-nil value temporarily disables automatic | 1369 | Setting it to a non-nil value temporarily disables automatic |
| 1348 | composition of character sequences at point, and thus makes it easier | 1370 | composition of character sequences at point, and thus makes it easier |
| 1349 | to edit such sequences by allowing point to "enter" the sequence. | 1371 | to edit such sequences by allowing point to "enter" the composed |
| 1372 | sequence. | ||
| 1350 | 1373 | ||
| 1351 | --- | 1374 | --- |
| 1352 | *** Support for many old scripts and writing systems. | 1375 | *** Support for many old scripts and writing systems. |
| 1353 | Emacs now supports and has language-environments and input methods for | 1376 | Emacs now supports, and has language-environments and input methods, |
| 1354 | several dozens of old scripts that were used in the past for various | 1377 | for several dozens of old scripts that were used in the past for |
| 1355 | languages. For each such script Emacs now has font-selection and | 1378 | various languages. For each such script Emacs now has font-selection |
| 1356 | character composition rules, a language environment, and an input | 1379 | and character composition rules, a language environment, and an input |
| 1357 | method. The newly-added scripts and the corresponding language | 1380 | method. The newly-added scripts and the corresponding language |
| 1358 | environments are: | 1381 | environments are: |
| 1359 | 1382 | ||
| 1360 | Tai Tham script and the Northern Thai language environment | 1383 | Tai Tham script and the Northern Thai language environment |
| 1361 | Brahmi script and language environment | 1384 | |
| 1362 | Kaithi script and language environment | 1385 | Brahmi script and language environment |
| 1363 | Tirhuta script and language environment | 1386 | |
| 1364 | Sharada script and language environment | 1387 | Kaithi script and language environment |
| 1365 | Siddham script and language environment | 1388 | |
| 1366 | Syloti Nagri script and language environment | 1389 | Tirhuta script and language environment |
| 1367 | Modi script and language environment | 1390 | |
| 1368 | Baybayin script and Tagalog language environment | 1391 | Sharada script and language environment |
| 1369 | Hanunoo script and language environment | 1392 | |
| 1370 | Buhid script and language environment | 1393 | Siddham script and language environment |
| 1371 | Tagbanwa script and language environment | 1394 | |
| 1372 | Limbu script and language environment | 1395 | Syloti Nagri script and language environment |
| 1373 | Balinese script and language environment | 1396 | |
| 1374 | Javanese script and language environment | 1397 | Modi script and language environment |
| 1375 | Sundanese script and language environment | 1398 | |
| 1376 | Batak script and language environment | 1399 | Baybayin script and Tagalog language environment |
| 1377 | Rejang script and language environment | 1400 | |
| 1378 | Makasar script and language environment | 1401 | Hanunoo script and language environment |
| 1379 | Lontara script and language environment | 1402 | |
| 1380 | Hanifi Rohingya script and language environment | 1403 | Buhid script and language environment |
| 1381 | Grantha script and language environment | 1404 | |
| 1382 | Kharoshthi script and language environment | 1405 | Tagbanwa script and language environment |
| 1383 | Lepcha script and language environment | 1406 | |
| 1384 | Meetei Mayek script and language environment | 1407 | Limbu script and language environment |
| 1385 | Adlam script and language environment | 1408 | |
| 1386 | Mende Kikakui script and language environment | 1409 | Balinese script and language environment |
| 1387 | Wancho script and language environment | 1410 | |
| 1388 | Toto script and language environment | 1411 | Javanese script and language environment |
| 1389 | Gothic script and language environment | 1412 | |
| 1390 | Coptic script and language environment | 1413 | Sundanese script and language environment |
| 1414 | |||
| 1415 | Batak script and language environment | ||
| 1416 | |||
| 1417 | Rejang script and language environment | ||
| 1418 | |||
| 1419 | Makasar script and language environment | ||
| 1420 | |||
| 1421 | Lontara script and language environment | ||
| 1422 | |||
| 1423 | Hanifi Rohingya script and language environment | ||
| 1424 | |||
| 1425 | Grantha script and language environment | ||
| 1426 | |||
| 1427 | Kharoshthi script and language environment | ||
| 1428 | |||
| 1429 | Lepcha script and language environment | ||
| 1430 | |||
| 1431 | Meetei Mayek script and language environment | ||
| 1432 | |||
| 1433 | Adlam script and language environment | ||
| 1434 | |||
| 1435 | Mende Kikakui script and language environment | ||
| 1436 | |||
| 1437 | Wancho script and language environment | ||
| 1438 | |||
| 1439 | Toto script and language environment | ||
| 1440 | |||
| 1441 | Gothic script and language environment | ||
| 1442 | |||
| 1443 | Coptic script and language environment | ||
| 1391 | 1444 | ||
| 1392 | --- | 1445 | --- |
| 1393 | *** The "Oriya" language environment was renamed to "Odia". | 1446 | *** The "Oriya" language environment was renamed to "Odia". |
| @@ -1423,8 +1476,9 @@ the QWERTY Slovak keyboards. | |||
| 1423 | 1476 | ||
| 1424 | --- | 1477 | --- |
| 1425 | *** New input method 'cyrillic-chuvash'. | 1478 | *** New input method 'cyrillic-chuvash'. |
| 1426 | This input method is based on the russian-computer, and is intended | 1479 | This input method is based on the russian-computer input method, and |
| 1427 | for the Chuvash language written in the Cyrillic script. | 1480 | is intended for typing in the Chuvash language written in the Cyrillic |
| 1481 | script. | ||
| 1428 | 1482 | ||
| 1429 | 1483 | ||
| 1430 | * Changes in Specialized Modes and Packages in Emacs 29.1 | 1484 | * Changes in Specialized Modes and Packages in Emacs 29.1 |
| @@ -1506,6 +1560,40 @@ the following to your Init file: | |||
| 1506 | *** New command 'dired-do-eww'. | 1560 | *** New command 'dired-do-eww'. |
| 1507 | This command visits the file on the current line with EWW. | 1561 | This command visits the file on the current line with EWW. |
| 1508 | 1562 | ||
| 1563 | --- | ||
| 1564 | *** New user option 'dired-omit-lines'. | ||
| 1565 | This is used by 'dired-omit-mode', and now allows you to hide based on | ||
| 1566 | other things than just the file names. | ||
| 1567 | |||
| 1568 | +++ | ||
| 1569 | *** New user option 'dired-mouse-drag-files'. | ||
| 1570 | If non-nil, dragging file names with the mouse in a Dired buffer will | ||
| 1571 | initiate a drag-and-drop session allowing them to be opened in other | ||
| 1572 | programs. | ||
| 1573 | |||
| 1574 | +++ | ||
| 1575 | *** New user option 'dired-free-space'. | ||
| 1576 | Dired will now, by default, include the free space in the first line | ||
| 1577 | instead of having it on a separate line. To get the previous behavior | ||
| 1578 | back, say: | ||
| 1579 | |||
| 1580 | (setq dired-free-space 'separate) | ||
| 1581 | |||
| 1582 | --- | ||
| 1583 | *** New user option 'dired-make-directory-clickable'. | ||
| 1584 | If non-nil (which is the default), hitting 'RET' or 'mouse-1' on | ||
| 1585 | the directory components at the directory displayed at the start of | ||
| 1586 | the buffer will take you to that directory. | ||
| 1587 | |||
| 1588 | --- | ||
| 1589 | *** Search and replace in Dired/Wdired supports more regexps. | ||
| 1590 | For example, the regexp ".*" will match only characters that are part | ||
| 1591 | of the file name. Also "^.*$" can be used to match at the beginning | ||
| 1592 | of the file name and at the end of the file name. This is used only | ||
| 1593 | when searching on file names. In Wdired this can be used when the new | ||
| 1594 | user option 'wdired-search-replace-filenames' is non-nil (which is the | ||
| 1595 | default). | ||
| 1596 | |||
| 1509 | ** Elisp | 1597 | ** Elisp |
| 1510 | 1598 | ||
| 1511 | --- | 1599 | --- |
| @@ -1522,7 +1610,7 @@ byte-compile the visited file and the current buffer, respectively. | |||
| 1522 | --- | 1610 | --- |
| 1523 | *** New user option 'tetris-allow-repetitions'. | 1611 | *** New user option 'tetris-allow-repetitions'. |
| 1524 | This controls how randomness is implemented (whether to use pure | 1612 | This controls how randomness is implemented (whether to use pure |
| 1525 | randomness as before or whether to use a bag). | 1613 | randomness as before, or to use a bag). |
| 1526 | 1614 | ||
| 1527 | ** Battery | 1615 | ** Battery |
| 1528 | 1616 | ||
| @@ -1553,7 +1641,7 @@ command is installed. | |||
| 1553 | ** CC Mode | 1641 | ** CC Mode |
| 1554 | 1642 | ||
| 1555 | --- | 1643 | --- |
| 1556 | *** C++ Mode now supports most of the new features in the C++20 standard. | 1644 | *** C++ Mode now supports most of the new features in the C++20 Standard. |
| 1557 | 1645 | ||
| 1558 | ** Cperl Mode | 1646 | ** Cperl Mode |
| 1559 | 1647 | ||
| @@ -1566,8 +1654,8 @@ be used as a file-local variable. | |||
| 1566 | 1654 | ||
| 1567 | --- | 1655 | --- |
| 1568 | *** 'gud-go' is now bound to 'C-c C-v'. | 1656 | *** 'gud-go' is now bound to 'C-c C-v'. |
| 1569 | If given a prefix, it will query the user for an argument to use for | 1657 | If given a prefix, it will prompt for an argument to use for the |
| 1570 | the run/continue command. | 1658 | run/continue command. |
| 1571 | 1659 | ||
| 1572 | --- | 1660 | --- |
| 1573 | *** 'perldb' now recognizes '-E'. | 1661 | *** 'perldb' now recognizes '-E'. |
| @@ -1588,7 +1676,7 @@ contents. | |||
| 1588 | *** New user option 'diff-whitespace-style'. | 1676 | *** New user option 'diff-whitespace-style'. |
| 1589 | Sets the value of the buffer-local variable 'whitespace-style' in | 1677 | Sets the value of the buffer-local variable 'whitespace-style' in |
| 1590 | 'diff-mode' buffers. By default, this variable is '(face trailing)', | 1678 | 'diff-mode' buffers. By default, this variable is '(face trailing)', |
| 1591 | which preserves behavior from previous Emacs versions. | 1679 | which preserves behavior of previous Emacs versions. |
| 1592 | 1680 | ||
| 1593 | +++ | 1681 | +++ |
| 1594 | *** New user option 'diff-add-log-use-relative-names'. | 1682 | *** New user option 'diff-add-log-use-relative-names'. |
| @@ -1636,8 +1724,8 @@ it isn't already, and remove it if it is installed. | |||
| 1636 | 1724 | ||
| 1637 | +++ | 1725 | +++ |
| 1638 | *** New command 'package-vc-install'. | 1726 | *** New command 'package-vc-install'. |
| 1639 | Packages can now be installed directly from source by cloning from a | 1727 | Packages can now be installed directly from source by cloning from |
| 1640 | repository. | 1728 | their repository. |
| 1641 | 1729 | ||
| 1642 | +++ | 1730 | +++ |
| 1643 | *** New command 'package-vc-install-from-checkout'. | 1731 | *** New command 'package-vc-install-from-checkout'. |
| @@ -1673,7 +1761,7 @@ The option 'desktop-load-locked-desktop' can now be set to the value | |||
| 1673 | file if the Emacs process which locked it is no longer running on the | 1761 | file if the Emacs process which locked it is no longer running on the |
| 1674 | local machine. This allows avoiding questions about locked desktop | 1762 | local machine. This allows avoiding questions about locked desktop |
| 1675 | files when the Emacs session which locked it crashes, or was otherwise | 1763 | files when the Emacs session which locked it crashes, or was otherwise |
| 1676 | interrupted, and didn't exit gracefully. See the "(emacs) Saving | 1764 | interrupted and didn't exit gracefully. See the "(emacs) Saving |
| 1677 | Emacs Sessions" node in the Emacs manual for more details. | 1765 | Emacs Sessions" node in the Emacs manual for more details. |
| 1678 | 1766 | ||
| 1679 | ** Miscellaneous | 1767 | ** Miscellaneous |
| @@ -1732,9 +1820,10 @@ only jump if the location of the first error is known), and | |||
| 1732 | 1820 | ||
| 1733 | +++ | 1821 | +++ |
| 1734 | *** New user option 'compilation-max-output-line-length'. | 1822 | *** New user option 'compilation-max-output-line-length'. |
| 1735 | Lines longer than this will have the ends hidden, with a button to | 1823 | Lines longer than the value of this variable will have their ends |
| 1736 | reveal the hidden text. This speeds up operations like grepping on | 1824 | hidden, with a button to reveal the hidden text. This speeds up |
| 1737 | files that have few newlines. | 1825 | operations like grepping on files that have few newlines. The default |
| 1826 | value is 400; set to nil to disable hiding. | ||
| 1738 | 1827 | ||
| 1739 | ** Flymake | 1828 | ** Flymake |
| 1740 | 1829 | ||
| @@ -1748,12 +1837,12 @@ characters instead of just 'SPC' and 'TAB'. | |||
| 1748 | 1837 | ||
| 1749 | --- | 1838 | --- |
| 1750 | ** New mode, 'emacs-news-mode', for editing the NEWS file. | 1839 | ** New mode, 'emacs-news-mode', for editing the NEWS file. |
| 1751 | This mode adds some highlighting, fixes the 'M-q' command, and has | 1840 | This mode adds some highlighting, makes the 'M-q' command aware of the |
| 1752 | commands for doing maintenance of the Emacs NEWS files. In addition, | 1841 | format of NEWS entries, and has special commands for doing maintenance |
| 1753 | this mode turns on 'outline-minor-mode', and thus displays | 1842 | of the Emacs NEWS files. In addition, this mode turns on |
| 1754 | customizable icons (see 'icon-preference') in the margins. To | 1843 | 'outline-minor-mode', and thus displays customizable icons (see |
| 1755 | disable these icons, set 'outline-minor-mode-use-buttons' to a | 1844 | 'icon-preference') in the margins. To disable these icons, set |
| 1756 | nil value. | 1845 | 'outline-minor-mode-use-buttons' to a nil value. |
| 1757 | 1846 | ||
| 1758 | --- | 1847 | --- |
| 1759 | ** Kmacro | 1848 | ** Kmacro |
| @@ -1808,6 +1897,7 @@ to complete. The value 'visual' is like 'always', but only updates | |||
| 1808 | the completions if they are already visible. The default value t | 1897 | the completions if they are already visible. The default value t |
| 1809 | always hides the completion buffer after some completion is made. | 1898 | always hides the completion buffer after some completion is made. |
| 1810 | 1899 | ||
| 1900 | --- | ||
| 1811 | *** New commands to complete the minibuffer history. | 1901 | *** New commands to complete the minibuffer history. |
| 1812 | 'minibuffer-complete-history' ('C-x <up>') is like 'minibuffer-complete' | 1902 | 'minibuffer-complete-history' ('C-x <up>') is like 'minibuffer-complete' |
| 1813 | but completes on the history items instead of the default completion | 1903 | but completes on the history items instead of the default completion |
| @@ -1830,16 +1920,17 @@ This option limits the height of the "*Completions*" buffer. | |||
| 1830 | 1920 | ||
| 1831 | +++ | 1921 | +++ |
| 1832 | *** New user option 'completions-header-format'. | 1922 | *** New user option 'completions-header-format'. |
| 1833 | This is a string to control the heading line to show in the | 1923 | This is a string to control the header line to show in the |
| 1834 | "*Completions*" buffer before the list of completions. | 1924 | "*Completions*" buffer before the list of completions. |
| 1835 | If it contains "%s", that is replaced with the number of completions. | 1925 | If it contains "%s", that is replaced with the number of completions. |
| 1836 | If nil, the heading line is not shown. | 1926 | If nil, the header line is not shown. |
| 1837 | 1927 | ||
| 1838 | +++ | 1928 | +++ |
| 1839 | *** New user option 'completions-highlight-face'. | 1929 | *** New user option 'completions-highlight-face'. |
| 1840 | When this user option names a face, the current | 1930 | When this user option names a face, the current |
| 1841 | candidate in the "*Completions*" buffer is highlighted with that face. | 1931 | candidate in the "*Completions*" buffer is highlighted with that face. |
| 1842 | The nil value disables this highlighting. | 1932 | The nil value disables this highlighting. The default is to highlight |
| 1933 | using the 'completions-highlight' face. | ||
| 1843 | 1934 | ||
| 1844 | +++ | 1935 | +++ |
| 1845 | *** Choosing a completion with a prefix argument doesn't exit the minibuffer. | 1936 | *** Choosing a completion with a prefix argument doesn't exit the minibuffer. |
| @@ -1848,7 +1939,7 @@ This means that typing 'C-u RET' on a completion candidate in the | |||
| 1848 | but doesn't exit the minibuffer. | 1939 | but doesn't exit the minibuffer. |
| 1849 | 1940 | ||
| 1850 | +++ | 1941 | +++ |
| 1851 | *** You can now define abbrevs for the fundamental minibuffer modes. | 1942 | *** You can now define abbrevs for the minibuffer modes. |
| 1852 | 'minibuffer-mode-abbrev-table' and | 1943 | 'minibuffer-mode-abbrev-table' and |
| 1853 | 'minibuffer-inactive-mode-abbrev-table' are now defined. | 1944 | 'minibuffer-inactive-mode-abbrev-table' are now defined. |
| 1854 | 1945 | ||
| @@ -1944,7 +2035,7 @@ This is in addition to the old keybindings 'C-c C-n' and 'C-c C-p'. | |||
| 1944 | --- | 2035 | --- |
| 1945 | *** New command 'vc-pull-and-push'. | 2036 | *** New command 'vc-pull-and-push'. |
| 1946 | This commands first does a "pull" command, and if that is successful, | 2037 | This commands first does a "pull" command, and if that is successful, |
| 1947 | do a "push" command afterwards. | 2038 | does a "push" command afterwards. |
| 1948 | 2039 | ||
| 1949 | +++ | 2040 | +++ |
| 1950 | *** 'C-x v b' prefix key is used now for branch commands. | 2041 | *** 'C-x v b' prefix key is used now for branch commands. |
| @@ -1983,7 +2074,7 @@ in the Git repository in "~/foo/bar". This makes this command | |||
| 1983 | consistent with 'vc-responsible-backend'. | 2074 | consistent with 'vc-responsible-backend'. |
| 1984 | 2075 | ||
| 1985 | --- | 2076 | --- |
| 1986 | *** Log Edit now font locks long Git commit summary lines. | 2077 | *** Log Edit now fontifies long Git commit summary lines. |
| 1987 | Writing shorter summary lines avoids truncation in contexts in which | 2078 | Writing shorter summary lines avoids truncation in contexts in which |
| 1988 | Git commands display summary lines. See the two new user options | 2079 | Git commands display summary lines. See the two new user options |
| 1989 | 'vc-git-log-edit-summary-target-len' and 'vc-git-log-edit-summary-max-len'. | 2080 | 'vc-git-log-edit-summary-target-len' and 'vc-git-log-edit-summary-max-len'. |
| @@ -2192,13 +2283,13 @@ All other 'gnus-header-*' faces inherit from this face now. | |||
| 2192 | 2283 | ||
| 2193 | +++ | 2284 | +++ |
| 2194 | *** New user option 'gnus-treat-emojize-symbols'. | 2285 | *** New user option 'gnus-treat-emojize-symbols'. |
| 2195 | If non-nil, symbols that have an emoji representation will be | 2286 | If non-nil, symbols that have an Emoji representation will be |
| 2196 | displayed as emojis. The default is nil. | 2287 | displayed as emojis. The default is nil. |
| 2197 | 2288 | ||
| 2198 | +++ | 2289 | +++ |
| 2199 | *** New command 'gnus-article-emojize-symbols'. | 2290 | *** New command 'gnus-article-emojize-symbols'. |
| 2200 | This is bound to 'W D e' and will display symbols that have emoji | 2291 | This is bound to 'W D e' and will display symbols that have Emoji |
| 2201 | representation as emojis. | 2292 | representation as Emoji. |
| 2202 | 2293 | ||
| 2203 | +++ | 2294 | +++ |
| 2204 | *** New mu backend for gnus-search. | 2295 | *** New mu backend for gnus-search. |
| @@ -2310,6 +2401,11 @@ or projects outside of VCS repositories. | |||
| 2310 | As a consequence, the 'VC project backend' is formally renamed to | 2401 | As a consequence, the 'VC project backend' is formally renamed to |
| 2311 | 'VC-aware project backend'. | 2402 | 'VC-aware project backend'. |
| 2312 | 2403 | ||
| 2404 | +++ | ||
| 2405 | *** New user option 'project-vc-include-untracked'. | ||
| 2406 | If non-nil, files untracked by a VCS are considered to be part of | ||
| 2407 | the project by a VC project based on that VCS. | ||
| 2408 | |||
| 2313 | ** Xref | 2409 | ** Xref |
| 2314 | 2410 | ||
| 2315 | +++ | 2411 | +++ |
| @@ -2494,7 +2590,7 @@ PDF file in the thumbnail buffer to visit the corresponding PDF. | |||
| 2494 | --- | 2590 | --- |
| 2495 | *** Support GraphicsMagick command line tools. | 2591 | *** Support GraphicsMagick command line tools. |
| 2496 | Support for the GraphicsMagick command line tool ("gm") has been | 2592 | Support for the GraphicsMagick command line tool ("gm") has been |
| 2497 | added, and is used instead of ImageMagick when it is available. | 2593 | added, and is used when it is available instead of ImageMagick. |
| 2498 | 2594 | ||
| 2499 | --- | 2595 | --- |
| 2500 | *** Support Thumbnail Managing Standard v0.9.0 (Dec 2020). | 2596 | *** Support Thumbnail Managing Standard v0.9.0 (Dec 2020). |
| @@ -2582,42 +2678,6 @@ some commands and user options are no longer needed and are now obsolete: | |||
| 2582 | 'image-dired-display-window-width-correction', | 2678 | 'image-dired-display-window-width-correction', |
| 2583 | 'image-dired-temp-image-file'. | 2679 | 'image-dired-temp-image-file'. |
| 2584 | 2680 | ||
| 2585 | ** Dired | ||
| 2586 | |||
| 2587 | --- | ||
| 2588 | *** New user option 'dired-omit-lines'. | ||
| 2589 | This is used by 'dired-omit-mode', and now allows you to hide based on | ||
| 2590 | other things than just the file names. | ||
| 2591 | |||
| 2592 | +++ | ||
| 2593 | *** New user option 'dired-mouse-drag-files'. | ||
| 2594 | If non-nil, dragging file names with the mouse in a Dired buffer will | ||
| 2595 | initiate a drag-and-drop session allowing them to be opened in other | ||
| 2596 | programs. | ||
| 2597 | |||
| 2598 | +++ | ||
| 2599 | *** New user option 'dired-free-space'. | ||
| 2600 | Dired will now, by default, include the free space in the first line | ||
| 2601 | instead of having it on a separate line. To get the previous behavior | ||
| 2602 | back, say: | ||
| 2603 | |||
| 2604 | (setq dired-free-space 'separate) | ||
| 2605 | |||
| 2606 | --- | ||
| 2607 | *** New user option 'dired-make-directory-clickable'. | ||
| 2608 | If non-nil (which is the default), hitting 'RET' or 'mouse-1' on | ||
| 2609 | the directory components at the directory displayed at the start of | ||
| 2610 | the buffer will take you to that directory. | ||
| 2611 | |||
| 2612 | --- | ||
| 2613 | *** Search and replace in Dired/Wdired supports more regexps. | ||
| 2614 | For example, the regexp ".*" will match only characters that are part | ||
| 2615 | of the file name. Also "^.*$" can be used to match at the beginning | ||
| 2616 | of the file name and at the end of the file name. This is used only | ||
| 2617 | when searching on file names. In Wdired this can be used when the new | ||
| 2618 | user option 'wdired-search-replace-filenames' is non-nil (which is the | ||
| 2619 | default). | ||
| 2620 | |||
| 2621 | ** Bookmarks | 2681 | ** Bookmarks |
| 2622 | 2682 | ||
| 2623 | --- | 2683 | --- |
| @@ -2830,7 +2890,7 @@ if only one line of output). Previously, this only converted numbers | |||
| 2830 | when there was a single line of output. | 2890 | when there was a single line of output. |
| 2831 | 2891 | ||
| 2832 | --- | 2892 | --- |
| 2833 | *** Built-in Eshell commands now follow POSIX/GNU argument syntax conventions. | 2893 | *** Built-in Eshell commands now follow Posix/GNU argument syntax conventions. |
| 2834 | Built-in commands in Eshell now accept command-line options with | 2894 | Built-in commands in Eshell now accept command-line options with |
| 2835 | values passed as a single token, such as '-oVALUE' or | 2895 | values passed as a single token, such as '-oVALUE' or |
| 2836 | '--option=VALUE'. New commands can take advantage of this with the | 2896 | '--option=VALUE'. New commands can take advantage of this with the |
| @@ -2944,11 +3004,6 @@ filtered out. | |||
| 2944 | The list of handlers (already covering OSC 7 and 8) has been extended | 3004 | The list of handlers (already covering OSC 7 and 8) has been extended |
| 2945 | with a handler for OSC 2, the command to set a window title. | 3005 | with a handler for OSC 2, the command to set a window title. |
| 2946 | 3006 | ||
| 2947 | +++ | ||
| 2948 | *** New user option 'project-vc-include-untracked'. | ||
| 2949 | If non-nil, files untracked by a VCS are considered to be part of | ||
| 2950 | the project by a VC project based on that VCS. | ||
| 2951 | |||
| 2952 | --- | 3007 | --- |
| 2953 | *** 'recentf-mode' now uses abbreviated file names by default. | 3008 | *** 'recentf-mode' now uses abbreviated file names by default. |
| 2954 | This means that e.g. "/home/foo/bar" is now displayed as "~/bar". | 3009 | This means that e.g. "/home/foo/bar" is now displayed as "~/bar". |
| @@ -3012,7 +3067,7 @@ Protocol (LSP). | |||
| 3012 | 3067 | ||
| 3013 | +++ | 3068 | +++ |
| 3014 | *** use-package: Declarative package configuration. | 3069 | *** use-package: Declarative package configuration. |
| 3015 | use-package is shipped with Emacs. It provides the 'use-package' | 3070 | use-package is now shipped with Emacs. It provides the 'use-package' |
| 3016 | macro, which allows you to isolate package configuration in your init | 3071 | macro, which allows you to isolate package configuration in your init |
| 3017 | file in a way that is declarative, tidy, and performance-oriented. | 3072 | file in a way that is declarative, tidy, and performance-oriented. |
| 3018 | See the new Info manual "(use-package) Top" for more. | 3073 | See the new Info manual "(use-package) Top" for more. |
| @@ -3037,8 +3092,8 @@ manually if needed, using the new user options 'wallpaper-command' and | |||
| 3037 | 3092 | ||
| 3038 | +++ | 3093 | +++ |
| 3039 | ** New package 'oclosure'. | 3094 | ** New package 'oclosure'. |
| 3040 | Allows the creation of "functions with slots" or "function objects" | 3095 | This allows the creation of "functions with slots" or "function |
| 3041 | via the macros 'oclosure-define' and 'oclosure-lambda'. | 3096 | objects" via the macros 'oclosure-define' and 'oclosure-lambda'. |
| 3042 | 3097 | ||
| 3043 | +++ | 3098 | +++ |
| 3044 | *** New generic function 'oclosure-interactive-form'. | 3099 | *** New generic function 'oclosure-interactive-form'. |
| @@ -3061,10 +3116,12 @@ Emacs buffers, like indentation and the like. The new ert function | |||
| 3061 | This is a lightweight variant of 'js-mode' that is used by default | 3116 | This is a lightweight variant of 'js-mode' that is used by default |
| 3062 | when visiting JSON files. | 3117 | when visiting JSON files. |
| 3063 | 3118 | ||
| 3119 | +++ | ||
| 3064 | ** New major mode 'csharp-mode'. | 3120 | ** New major mode 'csharp-mode'. |
| 3065 | A major mode based on CC Mode for editing programs in the C# language. | 3121 | A major mode based on CC Mode for editing programs in the C# language. |
| 3066 | This mode is auto-enabled for files with the ".cs" extension. | 3122 | This mode is auto-enabled for files with the ".cs" extension. |
| 3067 | 3123 | ||
| 3124 | +++ | ||
| 3068 | ** New major modes based on the tree-sitter library. | 3125 | ** New major modes based on the tree-sitter library. |
| 3069 | These new major modes are available if Emacs was built with the | 3126 | These new major modes are available if Emacs was built with the |
| 3070 | tree-sitter library. They provide support for font-locking, | 3127 | tree-sitter library. They provide support for font-locking, |
| @@ -3095,77 +3152,94 @@ If a language grammar library required by a mode is not found in any | |||
| 3095 | of the above places, the mode will signal an error when you try to | 3152 | of the above places, the mode will signal an error when you try to |
| 3096 | turn it on. | 3153 | turn it on. |
| 3097 | 3154 | ||
| 3155 | +++ | ||
| 3098 | *** New major mode 'typescript-ts-mode'. | 3156 | *** New major mode 'typescript-ts-mode'. |
| 3099 | A major mode based on the tree-sitter library for editing programs | 3157 | A major mode based on the tree-sitter library for editing programs |
| 3100 | in the TypeScript language. This mode is auto-enabled for files with | 3158 | in the TypeScript language. This mode is auto-enabled for files with |
| 3101 | the ".ts" extension. | 3159 | the ".ts" extension. |
| 3102 | 3160 | ||
| 3161 | +++ | ||
| 3103 | *** New major mode 'tsx-ts-mode'. | 3162 | *** New major mode 'tsx-ts-mode'. |
| 3104 | A major mode based on the tree-sitter library for editing programs | 3163 | A major mode based on the tree-sitter library for editing programs |
| 3105 | in the TypeScript language, with support for TSX. This mode is | 3164 | in the TypeScript language, with support for TSX. This mode is |
| 3106 | auto-enabled for files with the ".tsx" extension. | 3165 | auto-enabled for files with the ".tsx" extension. |
| 3107 | 3166 | ||
| 3167 | +++ | ||
| 3108 | *** New major mode 'c-ts-mode'. | 3168 | *** New major mode 'c-ts-mode'. |
| 3109 | An optional major mode based on the tree-sitter library for editing | 3169 | An optional major mode based on the tree-sitter library for editing |
| 3110 | programs in the C language. | 3170 | programs in the C language. |
| 3111 | 3171 | ||
| 3172 | +++ | ||
| 3112 | *** New major mode 'c++-ts-mode'. | 3173 | *** New major mode 'c++-ts-mode'. |
| 3113 | An optional major mode based on the tree-sitter library for editing | 3174 | An optional major mode based on the tree-sitter library for editing |
| 3114 | programs in the C++ language. | 3175 | programs in the C++ language. |
| 3115 | 3176 | ||
| 3177 | +++ | ||
| 3116 | *** New major mode 'java-ts-mode'. | 3178 | *** New major mode 'java-ts-mode'. |
| 3117 | An optional major mode based on the tree-sitter library for editing | 3179 | An optional major mode based on the tree-sitter library for editing |
| 3118 | programs in the Java language. | 3180 | programs in the Java language. |
| 3119 | 3181 | ||
| 3182 | +++ | ||
| 3120 | *** New major mode 'python-ts-mode'. | 3183 | *** New major mode 'python-ts-mode'. |
| 3121 | An optional major mode based on the tree-sitter library for editing | 3184 | An optional major mode based on the tree-sitter library for editing |
| 3122 | programs in the Python language. | 3185 | programs in the Python language. |
| 3123 | 3186 | ||
| 3187 | +++ | ||
| 3124 | *** New major mode 'css-ts-mode'. | 3188 | *** New major mode 'css-ts-mode'. |
| 3125 | An optional major mode based on the tree-sitter library for editing | 3189 | An optional major mode based on the tree-sitter library for editing |
| 3126 | CSS (Cascading Style Sheets). | 3190 | CSS (Cascading Style Sheets). |
| 3127 | 3191 | ||
| 3192 | +++ | ||
| 3128 | *** New major mode 'json-ts-mode'. | 3193 | *** New major mode 'json-ts-mode'. |
| 3129 | An optional major mode based on the tree-sitter library for editing | 3194 | An optional major mode based on the tree-sitter library for editing |
| 3130 | programs in the JSON language. | 3195 | programs in the JSON language. |
| 3131 | 3196 | ||
| 3197 | +++ | ||
| 3132 | *** New major mode 'csharp-ts-mode'. | 3198 | *** New major mode 'csharp-ts-mode'. |
| 3133 | An optional major mode based on the tree-sitter library for editing | 3199 | An optional major mode based on the tree-sitter library for editing |
| 3134 | programs in the C# language. | 3200 | programs in the C# language. |
| 3135 | 3201 | ||
| 3202 | +++ | ||
| 3136 | *** New major mode 'bash-ts-mode'. | 3203 | *** New major mode 'bash-ts-mode'. |
| 3137 | Am optional major mode based on the tree-sitter library for editing | 3204 | Am optional major mode based on the tree-sitter library for editing |
| 3138 | Bash shell scripts. | 3205 | Bash shell scripts. |
| 3139 | 3206 | ||
| 3207 | +++ | ||
| 3140 | *** New major mode 'dockerfile-ts-mode'. | 3208 | *** New major mode 'dockerfile-ts-mode'. |
| 3141 | A major mode based on the tree-sitter library for editing | 3209 | A major mode based on the tree-sitter library for editing |
| 3142 | Dockerfiles. This mode is auto-enabled for files which are named | 3210 | Dockerfiles. This mode is auto-enabled for files which are named |
| 3143 | "Dockerfile", have the "Dockerfile." prefix, or have the ".dockerfile" | 3211 | "Dockerfile", have the "Dockerfile." prefix, or have the ".dockerfile" |
| 3144 | extension. | 3212 | extension. |
| 3145 | 3213 | ||
| 3214 | +++ | ||
| 3146 | *** New major mode 'cmake-ts-mode'. | 3215 | *** New major mode 'cmake-ts-mode'. |
| 3147 | A major mode based on the tree-sitter library for editing CMake files. | 3216 | A major mode based on the tree-sitter library for editing CMake files. |
| 3148 | It is auto-enabled for files whose name is "CMakeLists.txt" or whose | 3217 | It is auto-enabled for files whose name is "CMakeLists.txt" or whose |
| 3149 | extension is ".cmake". | 3218 | extension is ".cmake". |
| 3150 | 3219 | ||
| 3220 | +++ | ||
| 3151 | *** New major mode 'toml-ts-mode'. | 3221 | *** New major mode 'toml-ts-mode'. |
| 3152 | A major mode based on the tree-sitter library for editing files | 3222 | A major mode based on the tree-sitter library for editing files |
| 3153 | written in TOML, a format for writing configuration files. It is | 3223 | written in TOML, a format for writing configuration files. It is |
| 3154 | auto-enabled for files with the ".toml" extension. | 3224 | auto-enabled for files with the ".toml" extension. |
| 3155 | 3225 | ||
| 3226 | +++ | ||
| 3156 | *** New major mode 'go-ts-mode'. | 3227 | *** New major mode 'go-ts-mode'. |
| 3157 | A major mode based on the tree-sitter library for editing programs in | 3228 | A major mode based on the tree-sitter library for editing programs in |
| 3158 | the Go language. It is auto-enabled for files with the ".go" extension. | 3229 | the Go language. It is auto-enabled for files with the ".go" extension. |
| 3159 | 3230 | ||
| 3231 | +++ | ||
| 3160 | *** New major mode 'go-mod-ts-mode'. | 3232 | *** New major mode 'go-mod-ts-mode'. |
| 3161 | A major mode based on the tree-sitter library for editing "go.mod" | 3233 | A major mode based on the tree-sitter library for editing "go.mod" |
| 3162 | files. It is auto-enabled for files which are named "go.mod". | 3234 | files. It is auto-enabled for files which are named "go.mod". |
| 3163 | 3235 | ||
| 3236 | +++ | ||
| 3164 | *** New major mode 'yaml-ts-mode'. | 3237 | *** New major mode 'yaml-ts-mode'. |
| 3165 | A major mode based on the tree-sitter library for editing files | 3238 | A major mode based on the tree-sitter library for editing files |
| 3166 | written in YAML. It is auto-enabled for files with the ".yaml" or | 3239 | written in YAML. It is auto-enabled for files with the ".yaml" or |
| 3167 | ".yml" extensions. | 3240 | ".yml" extensions. |
| 3168 | 3241 | ||
| 3242 | +++ | ||
| 3169 | *** New major mode 'rust-ts-mode'. | 3243 | *** New major mode 'rust-ts-mode'. |
| 3170 | A major mode based on the tree-sitter library for editing programs in | 3244 | A major mode based on the tree-sitter library for editing programs in |
| 3171 | the Rust language. It is auto-enabled for files with the ".rs" extension. | 3245 | the Rust language. It is auto-enabled for files with the ".rs" extension. |
| @@ -3187,15 +3261,17 @@ or user level, with the exception of better performance and the order | |||
| 3187 | of overlays returned by functions that don't promise any particular | 3261 | of overlays returned by functions that don't promise any particular |
| 3188 | order. | 3262 | order. |
| 3189 | 3263 | ||
| 3264 | --- | ||
| 3190 | *** The function 'overlay-recenter' is now a no-op. | 3265 | *** The function 'overlay-recenter' is now a no-op. |
| 3191 | This function does nothing, and in particular has no effect on the | 3266 | This function does nothing, and in particular has no effect on the |
| 3192 | value returned by 'overlay-lists'. The purpose of 'overlay-recenter' | 3267 | value returned by 'overlay-lists'. The purpose of 'overlay-recenter' |
| 3193 | was to allow more efficient lookup of overlays around certain buffer | 3268 | was to allow more efficient lookup of overlays around a certain buffer |
| 3194 | position; however with the new implementation the lookup of overlays | 3269 | position; however with the new implementation the lookup of overlays |
| 3195 | is efficient regardless of their position, and there's no longer any | 3270 | is efficient regardless of their position, and there's no longer any |
| 3196 | need to "optimize" the lookup, nor any notion of "center" of the | 3271 | need to "optimize" the lookup, nor any notion of a "center" of the |
| 3197 | overlays. | 3272 | overlays. |
| 3198 | 3273 | ||
| 3274 | --- | ||
| 3199 | *** The function 'overlay-lists' returns one unified list of overlays. | 3275 | *** The function 'overlay-lists' returns one unified list of overlays. |
| 3200 | This function used to return a cons of two lists, one with overlays | 3276 | This function used to return a cons of two lists, one with overlays |
| 3201 | before the "center" position, the other after that "center". It now | 3277 | before the "center" position, the other after that "center". It now |
| @@ -3219,7 +3295,7 @@ auto-scaling applied. (This only makes a difference on HiDPI | |||
| 3219 | displays.) | 3295 | displays.) |
| 3220 | 3296 | ||
| 3221 | +++ | 3297 | +++ |
| 3222 | ** Changes to "raw" in-memory xbm images are specified. | 3298 | ** Changes in how "raw" in-memory xbm images are specified. |
| 3223 | Some years back Emacs gained the ability to scale images, and you | 3299 | Some years back Emacs gained the ability to scale images, and you |
| 3224 | could then specify ':width' and ':height' when using 'create-image' on all | 3300 | could then specify ':width' and ':height' when using 'create-image' on all |
| 3225 | image types -- except xbm images, because this format already used the | 3301 | image types -- except xbm images, because this format already used the |
| @@ -3244,7 +3320,7 @@ signal an error in any file.) | |||
| 3244 | In addition, files are scanned in a slightly different way. | 3320 | In addition, files are scanned in a slightly different way. |
| 3245 | Previously, ';;;###' specs inside a top-level form (i.e., something | 3321 | Previously, ';;;###' specs inside a top-level form (i.e., something |
| 3246 | like '(when ... ;;;### ...)' would be ignored. They are now parsed as | 3322 | like '(when ... ;;;### ...)' would be ignored. They are now parsed as |
| 3247 | normal. | 3323 | usual. |
| 3248 | 3324 | ||
| 3249 | --- | 3325 | --- |
| 3250 | ** Themes have special autoload cookies. | 3326 | ** Themes have special autoload cookies. |
| @@ -3284,7 +3360,7 @@ they will still be escaped, so the '.foo' symbol is still printed as | |||
| 3284 | "\.foo" and the '?bar' symbol is still printed as "\?bar". | 3360 | "\.foo" and the '?bar' symbol is still printed as "\?bar". |
| 3285 | 3361 | ||
| 3286 | +++ | 3362 | +++ |
| 3287 | ** Remapping 'mode-line' no longer works as expected. | 3363 | ** Remapping 'mode-line' face no longer works as expected. |
| 3288 | 'mode-line' is now the parent face of the new 'mode-line-active' face, | 3364 | 'mode-line' is now the parent face of the new 'mode-line-active' face, |
| 3289 | and remapping parent of basic faces does not work reliably. | 3365 | and remapping parent of basic faces does not work reliably. |
| 3290 | Instead of remapping 'mode-line', you have to remap 'mode-line-active'. | 3366 | Instead of remapping 'mode-line', you have to remap 'mode-line-active'. |
| @@ -3307,10 +3383,10 @@ needed. | |||
| 3307 | *** Emacs now supports 'medium' fonts. | 3383 | *** Emacs now supports 'medium' fonts. |
| 3308 | Emacs previously didn't distinguish between the 'regular'/'normal' | 3384 | Emacs previously didn't distinguish between the 'regular'/'normal' |
| 3309 | weight and the 'medium' weight, but it now also supports the (heavier) | 3385 | weight and the 'medium' weight, but it now also supports the (heavier) |
| 3310 | 'medium' weight. However, this means that if you previously specified | 3386 | 'medium' weight. However, this means that if you specify a weight of |
| 3311 | a weight of 'normal' and the font doesn't have this weight, Emacs | 3387 | 'normal' and the font doesn't have this weight, Emacs won't find the |
| 3312 | won't find the font spec. In these cases, replacing ":weight 'normal" | 3388 | font spec. In these cases, replacing ":weight 'normal" with ":weight |
| 3313 | with ":weight 'medium" should fix the issue. | 3389 | 'medium" should fix the issue. |
| 3314 | 3390 | ||
| 3315 | --- | 3391 | --- |
| 3316 | ** Keymap descriptions have changed. | 3392 | ** Keymap descriptions have changed. |
| @@ -3505,9 +3581,8 @@ but switching to 'ash' is generally much preferable. | |||
| 3505 | 3581 | ||
| 3506 | +++ | 3582 | +++ |
| 3507 | ** New generic function 'function-documentation'. | 3583 | ** New generic function 'function-documentation'. |
| 3508 | Can dynamically generate a raw docstring depending on the type of | 3584 | It can dynamically generate a raw docstring depending on the type of a |
| 3509 | a function. | 3585 | function. Used mainly for docstrings of OClosures. |
| 3510 | Used mainly for docstrings of OClosures. | ||
| 3511 | 3586 | ||
| 3512 | +++ | 3587 | +++ |
| 3513 | ** Base64 encoding no longer tolerates latin-1 input. | 3588 | ** Base64 encoding no longer tolerates latin-1 input. |
| @@ -3515,7 +3590,7 @@ The functions 'base64-encode-string', 'base64url-encode-string', | |||
| 3515 | 'base64-encode-region' and 'base64url-encode-region' no longer accept | 3590 | 'base64-encode-region' and 'base64url-encode-region' no longer accept |
| 3516 | characters in the range U+0080..U+00FF as substitutes for single bytes | 3591 | characters in the range U+0080..U+00FF as substitutes for single bytes |
| 3517 | in the range 128..255, but signal an error for all multibyte characters. | 3592 | in the range 128..255, but signal an error for all multibyte characters. |
| 3518 | The input must be encoded text. | 3593 | The input must be unibyte encoded text. |
| 3519 | 3594 | ||
| 3520 | +++ | 3595 | +++ |
| 3521 | ** The 'clone-indirect-buffer-hook' is now run by 'make-indirect-buffer'. | 3596 | ** The 'clone-indirect-buffer-hook' is now run by 'make-indirect-buffer'. |
| @@ -3667,7 +3742,7 @@ These function now take an optional comparison predicate argument. | |||
| 3667 | 3742 | ||
| 3668 | +++ | 3743 | +++ |
| 3669 | ** 'completing-read' now allows a function as its REQUIRE-MATCH argument. | 3744 | ** 'completing-read' now allows a function as its REQUIRE-MATCH argument. |
| 3670 | This function is called to see whether what the user has typed in is a | 3745 | This function is called to see whether what the user has typed is a |
| 3671 | match. This is also available from functions that call | 3746 | match. This is also available from functions that call |
| 3672 | 'completing-read', like 'read-file-name'. | 3747 | 'completing-read', like 'read-file-name'. |
| 3673 | 3748 | ||
| @@ -3679,10 +3754,10 @@ Previously, it reported data only based on the frame. | |||
| 3679 | ** 'file-expand-wildcards' can now also take a regexp as PATTERN argument. | 3754 | ** 'file-expand-wildcards' can now also take a regexp as PATTERN argument. |
| 3680 | 3755 | ||
| 3681 | --- | 3756 | --- |
| 3682 | ** vc-mtn (the backend for Monotone) has been made obsolete. | 3757 | ** vc-mtn (the VC backend for Monotone) has been made obsolete. |
| 3683 | 3758 | ||
| 3684 | +++ | 3759 | +++ |
| 3685 | ** 'gui-set-selection' can now specify different values for different data types. | 3760 | ** 'gui-set-selection' can specify different values for different data types. |
| 3686 | If DATA is a string, then its text properties are searched for values | 3761 | If DATA is a string, then its text properties are searched for values |
| 3687 | for each specific data type while the selection is being converted. | 3762 | for each specific data type while the selection is being converted. |
| 3688 | 3763 | ||
| @@ -3702,6 +3777,7 @@ things to be saved. | |||
| 3702 | ** New function 'string-equal-ignore-case'. | 3777 | ** New function 'string-equal-ignore-case'. |
| 3703 | This compares strings ignoring case differences. | 3778 | This compares strings ignoring case differences. |
| 3704 | 3779 | ||
| 3780 | +++ | ||
| 3705 | ** 'symbol-file' can now report natively-compiled ".eln" files. | 3781 | ** 'symbol-file' can now report natively-compiled ".eln" files. |
| 3706 | If Emacs was built with native-compilation enabled, Lisp programs can | 3782 | If Emacs was built with native-compilation enabled, Lisp programs can |
| 3707 | now call 'symbol-file' with the new optional 3rd argument non-nil to | 3783 | now call 'symbol-file' with the new optional 3rd argument non-nil to |
| @@ -3838,7 +3914,7 @@ available only when Emacs was built with glibc as the C library. | |||
| 3838 | 3914 | ||
| 3839 | --- | 3915 | --- |
| 3840 | ** 'x-show-tip' no longer hard-codes a timeout default. | 3916 | ** 'x-show-tip' no longer hard-codes a timeout default. |
| 3841 | The new 'x-show-tooltip-timeout' variable allows the user to alter | 3917 | The new variable 'x-show-tooltip-timeout' allows the user to alter |
| 3842 | this for packages that don't use 'tooltip-show', but instead call the | 3918 | this for packages that don't use 'tooltip-show', but instead call the |
| 3843 | lower level function directly. | 3919 | lower level function directly. |
| 3844 | 3920 | ||
| @@ -3850,8 +3926,8 @@ example for benchmarking purposes. | |||
| 3850 | --- | 3926 | --- |
| 3851 | ** New function 'string-edit'. | 3927 | ** New function 'string-edit'. |
| 3852 | This is meant to be used when the user has to edit a (potentially) | 3928 | This is meant to be used when the user has to edit a (potentially) |
| 3853 | long string. It pops you to a new buffer where you can edit the | 3929 | long string. It pops up a new buffer where you can edit the string, |
| 3854 | string, and a callback is called when the user types 'C-c C-c'. | 3930 | and a callback is called when the user types 'C-c C-c'. |
| 3855 | 3931 | ||
| 3856 | +++ | 3932 | +++ |
| 3857 | ** New function 'read-string-from-buffer'. | 3933 | ** New function 'read-string-from-buffer'. |
| @@ -3870,8 +3946,8 @@ putting the modes on the first line of a file). | |||
| 3870 | 3946 | ||
| 3871 | +++ | 3947 | +++ |
| 3872 | ** New function 'flush-standard-output'. | 3948 | ** New function 'flush-standard-output'. |
| 3873 | This enables you to display incomplete lines from batch-based Emacs | 3949 | This enables display of lines that don't end in a newline from |
| 3874 | scripts. | 3950 | batch-based Emacs scripts. |
| 3875 | 3951 | ||
| 3876 | +++ | 3952 | +++ |
| 3877 | ** New convenience function 'buttonize-region'. | 3953 | ** New convenience function 'buttonize-region'. |
| @@ -3891,7 +3967,7 @@ from which the last input event originated, and 'device-class' can be | |||
| 3891 | used to determine the type of an input device. | 3967 | used to determine the type of an input device. |
| 3892 | 3968 | ||
| 3893 | +++ | 3969 | +++ |
| 3894 | ** 'track-mouse' can be a new value 'drag-source'. | 3970 | ** 'track-mouse' can have a new value 'drag-source'. |
| 3895 | This means the same as 'dropping', but modifies the mouse position | 3971 | This means the same as 'dropping', but modifies the mouse position |
| 3896 | list in reported motion events if there is no frame underneath the | 3972 | list in reported motion events if there is no frame underneath the |
| 3897 | mouse pointer. | 3973 | mouse pointer. |
| @@ -3940,7 +4016,10 @@ frequently than once in a second. | |||
| 3940 | --- | 4016 | --- |
| 3941 | ** New function 'bidi-string-strip-control-characters'. | 4017 | ** New function 'bidi-string-strip-control-characters'. |
| 3942 | This utility function is meant for displaying strings when it's | 4018 | This utility function is meant for displaying strings when it's |
| 3943 | essential that there's no bidirectional context. | 4019 | essential that there's no bidirectional context. It removes all the |
| 4020 | bidirectional formatting control characters (such as RLM, LRO, PDF, | ||
| 4021 | etc.) from its argument string. The characters it removes are listed | ||
| 4022 | in the value of 'bidi-control-characters'. | ||
| 3944 | 4023 | ||
| 3945 | --- | 4024 | --- |
| 3946 | ** The Gnus range functions have been moved to a new library, range.el. | 4025 | ** The Gnus range functions have been moved to a new library, range.el. |
| @@ -4037,8 +4116,8 @@ to attackers trying to confuse the users will use the textsec library | |||
| 4037 | to mark suspicious text. For instance shr/eww will mark suspicious | 4116 | to mark suspicious text. For instance shr/eww will mark suspicious |
| 4038 | URLs and links, Gnus will mark suspicious From addresses, and | 4117 | URLs and links, Gnus will mark suspicious From addresses, and |
| 4039 | Message mode will query the user if the user is sending mail to a | 4118 | Message mode will query the user if the user is sending mail to a |
| 4040 | suspicious address. If this variable is nil, these checks aren't | 4119 | suspicious address. If this variable is nil, these checks are |
| 4041 | performed. | 4120 | disabled. |
| 4042 | 4121 | ||
| 4043 | +++ | 4122 | +++ |
| 4044 | *** New function 'textsec-suspicious-p'. | 4123 | *** New function 'textsec-suspicious-p'. |
| @@ -4357,7 +4436,8 @@ aren't integer multiples of the default font. | |||
| 4357 | ** New function 'string-glyph-split'. | 4436 | ** New function 'string-glyph-split'. |
| 4358 | This function splits a string into a list of strings representing | 4437 | This function splits a string into a list of strings representing |
| 4359 | separate glyphs. This takes into account combining characters and | 4438 | separate glyphs. This takes into account combining characters and |
| 4360 | grapheme clusters. | 4439 | grapheme clusters, by treating each sequence of characters composed on |
| 4440 | display as a single unit. | ||
| 4361 | 4441 | ||
| 4362 | --- | 4442 | --- |
| 4363 | ** 'lookup-key' is more permissive when searching for extended menu items. | 4443 | ** 'lookup-key' is more permissive when searching for extended menu items. |
| @@ -4448,9 +4528,10 @@ temporary transition aid for Emacs 27, has served its purpose. | |||
| 4448 | '(encode-time (list SECOND MINUTE HOUR DAY MONTH YEAR nil -1 nil))'. | 4528 | '(encode-time (list SECOND MINUTE HOUR DAY MONTH YEAR nil -1 nil))'. |
| 4449 | 4529 | ||
| 4450 | +++ | 4530 | +++ |
| 4451 | ** 'date-to-time' now assumes earliest values if its argument lacks | 4531 | ** 'date-to-time' now accepts arguments that lacks month, day, or time. |
| 4452 | month, day, or time. For example, (date-to-time "2021-12-04") now | 4532 | The function now assumes the earliest possible values if its argument |
| 4453 | assumes a time of 00:00 instead of signaling an error. | 4533 | lacks month, day, or time. For example, (date-to-time "2021-12-04") |
| 4534 | now assumes a time of 00:00 instead of signaling an error. | ||
| 4454 | 4535 | ||
| 4455 | +++ | 4536 | +++ |
| 4456 | ** 'format-seconds' now allows suppressing zero-value trailing elements. | 4537 | ** 'format-seconds' now allows suppressing zero-value trailing elements. |
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 67704bdb51c..9e792889c89 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el | |||
| @@ -92,9 +92,9 @@ using, but only when you also use Edebug." | |||
| 92 | ;;;###autoload | 92 | ;;;###autoload |
| 93 | (defcustom edebug-all-defs nil | 93 | (defcustom edebug-all-defs nil |
| 94 | "If non-nil, evaluating defining forms instruments for Edebug. | 94 | "If non-nil, evaluating defining forms instruments for Edebug. |
| 95 | This applies to `eval-defun', `eval-region', `eval-buffer', and | 95 | This applies to `eval-defun', `eval-region' and `eval-buffer'. |
| 96 | `eval-current-buffer'. `eval-region' is also called by | 96 | `eval-region' is also called by `eval-last-sexp', and |
| 97 | `eval-last-sexp', and `eval-print-last-sexp'. | 97 | `eval-print-last-sexp'. |
| 98 | 98 | ||
| 99 | You can use the command `edebug-all-defs' to toggle the value of this | 99 | You can use the command `edebug-all-defs' to toggle the value of this |
| 100 | variable. You may wish to make it local to each buffer with | 100 | variable. You may wish to make it local to each buffer with |
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index 8f0eedd2f88..b01f87d0494 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el | |||
| @@ -131,7 +131,7 @@ the `clone' function." | |||
| 131 | ((null spec) | 131 | ((null spec) |
| 132 | (package-vc-install name)) | 132 | (package-vc-install name)) |
| 133 | ((stringp spec) | 133 | ((stringp spec) |
| 134 | (package-vc-install name nil spec)) | 134 | (package-vc-install name spec)) |
| 135 | ((listp spec) | 135 | ((listp spec) |
| 136 | (package-vc--archives-initialize) | 136 | (package-vc--archives-initialize) |
| 137 | (package-vc--unpack (cadr pkg-descs) spec))))))) | 137 | (package-vc--unpack (cadr pkg-descs) spec))))))) |
| @@ -306,7 +306,9 @@ asynchronously." | |||
| 306 | (directory (file-name-concat | 306 | (directory (file-name-concat |
| 307 | (or (package-desc-dir pkg-desc) | 307 | (or (package-desc-dir pkg-desc) |
| 308 | (expand-file-name name package-user-dir)) | 308 | (expand-file-name name package-user-dir)) |
| 309 | (plist-get pkg-spec :lisp-dir))) | 309 | (plist-get pkg-spec :lisp-dir) |
| 310 | (and-let* ((extras (package-desc-extras pkg-desc))) | ||
| 311 | (alist-get :lisp-dir extras)))) | ||
| 310 | (file (or (plist-get pkg-spec :main-file) | 312 | (file (or (plist-get pkg-spec :main-file) |
| 311 | (expand-file-name | 313 | (expand-file-name |
| 312 | (concat name ".el") | 314 | (concat name ".el") |
| @@ -406,99 +408,156 @@ otherwise it's assumed to be an Info file." | |||
| 406 | (when clean-up | 408 | (when clean-up |
| 407 | (delete-file file)))) | 409 | (delete-file file)))) |
| 408 | 410 | ||
| 411 | (defun package-vc-install-dependencies (requirements) | ||
| 412 | "Install missing dependencies, and return missing ones. | ||
| 413 | The return value will be nil if everything was found, or a list | ||
| 414 | of (NAME VERSION) pairs of all packages that couldn't be found. | ||
| 415 | |||
| 416 | REQUIREMENTS should be a list of additional requirements; each | ||
| 417 | element in this list should have the form (PACKAGE VERSION-LIST), | ||
| 418 | where PACKAGE is a package name and VERSION-LIST is the required | ||
| 419 | version of that package." | ||
| 420 | (let ((to-install '()) (missing '())) | ||
| 421 | (cl-labels ((search (pkg) | ||
| 422 | "Attempt to find all dependencies for PKG." | ||
| 423 | (cond | ||
| 424 | ((assq (car pkg) to-install)) ;inhibit cycles | ||
| 425 | ((package-installed-p (car pkg))) | ||
| 426 | ((let* ((pac package-archive-contents) | ||
| 427 | (desc (cadr (assoc (car pkg) pac)))) | ||
| 428 | (if desc | ||
| 429 | (let ((reqs (package-desc-reqs pkg))) | ||
| 430 | (push pkg to-install) | ||
| 431 | (mapc #'search reqs)) | ||
| 432 | (push pkg missing)))))) | ||
| 433 | (version-order (a b) | ||
| 434 | "Predicate to sort packages in order." | ||
| 435 | (version-list-< (cadr b) (cadr a))) | ||
| 436 | (duplicate-p (a b) | ||
| 437 | "Are A and B the same package?" | ||
| 438 | (eq (car a) (car b))) | ||
| 439 | (depends-on-p (target package) | ||
| 440 | "Does PACKAGE depend on TARGET?" | ||
| 441 | (or (eq target package) | ||
| 442 | (let* ((pac package-archive-contents) | ||
| 443 | (desc (cadr (assoc package pac)))) | ||
| 444 | (seq-some | ||
| 445 | (apply-partially #'depends-on-p target) | ||
| 446 | (package-desc-reqs desc))))) | ||
| 447 | (dependent-order (a b) | ||
| 448 | (or (not (depends-on-p (car b) (car a))) | ||
| 449 | (depends-on-p (car a) (car b))))) | ||
| 450 | (mapc #'search requirements) | ||
| 451 | (cl-callf sort to-install #'version-order) | ||
| 452 | (cl-callf seq-uniq to-install #'duplicate-p) | ||
| 453 | (cl-callf sort to-install #'dependent-order)) | ||
| 454 | (mapc #'package-install-from-archive to-install) | ||
| 455 | missing)) | ||
| 456 | |||
| 409 | (defun package-vc--unpack-1 (pkg-desc pkg-dir) | 457 | (defun package-vc--unpack-1 (pkg-desc pkg-dir) |
| 410 | "Prepare PKG-DESC that is already checked-out in PKG-DIR. | 458 | "Prepare PKG-DESC that is already checked-out in PKG-DIR. |
| 411 | This includes downloading missing dependencies, generating | 459 | This includes downloading missing dependencies, generating |
| 412 | autoloads, generating a package description file (used to | 460 | autoloads, generating a package description file (used to |
| 413 | identify a package as a VC package later on), building | 461 | identify a package as a VC package later on), building |
| 414 | documentation and marking the package as installed." | 462 | documentation and marking the package as installed." |
| 415 | ;; Remove any previous instance of PKG-DESC from `package-alist' | 463 | (let (missing) |
| 416 | (let ((pkgs (assq (package-desc-name pkg-desc) package-alist))) | 464 | ;; Remove any previous instance of PKG-DESC from `package-alist' |
| 417 | (when pkgs | 465 | (let ((pkgs (assq (package-desc-name pkg-desc) package-alist))) |
| 418 | (setf (cdr pkgs) (seq-remove #'package-vc-p (cdr pkgs))))) | 466 | (when pkgs |
| 419 | 467 | (setf (cdr pkgs) (seq-remove #'package-vc-p (cdr pkgs))))) | |
| 420 | ;; In case the package was installed directly from source, the | 468 | |
| 421 | ;; dependency list wasn't know beforehand, and they might have | 469 | ;; In case the package was installed directly from source, the |
| 422 | ;; to be installed explicitly. | 470 | ;; dependency list wasn't know beforehand, and they might have |
| 423 | (let ((deps '())) | 471 | ;; to be installed explicitly. |
| 424 | (dolist (file (directory-files pkg-dir t "\\.el\\'" t)) | 472 | (let ((deps '())) |
| 425 | (with-temp-buffer | 473 | (dolist (file (directory-files pkg-dir t "\\.el\\'" t)) |
| 426 | (insert-file-contents file) | 474 | (with-temp-buffer |
| 427 | (when-let* ((require-lines (lm-header-multiline "package-requires"))) | 475 | (insert-file-contents file) |
| 428 | (thread-last | 476 | (when-let* ((require-lines (lm-header-multiline "package-requires"))) |
| 429 | (mapconcat #'identity require-lines " ") | 477 | (thread-last |
| 430 | package-read-from-string | 478 | (mapconcat #'identity require-lines " ") |
| 431 | package--prepare-dependencies | 479 | package-read-from-string |
| 432 | (nconc deps) | 480 | package--prepare-dependencies |
| 433 | (setq deps))))) | 481 | (nconc deps) |
| 434 | (dolist (dep deps) | 482 | (setq deps))))) |
| 435 | (cl-callf version-to-list (cadr dep))) | 483 | (dolist (dep deps) |
| 436 | (package-download-transaction | 484 | (cl-callf version-to-list (cadr dep))) |
| 437 | (package-compute-transaction nil (delete-dups deps)))) | 485 | (setf missing (package-vc-install-dependencies (delete-dups deps))) |
| 438 | 486 | (setf missing (delq (assq (package-desc-name pkg-desc) | |
| 439 | (let ((default-directory (file-name-as-directory pkg-dir)) | 487 | missing) |
| 440 | (pkg-file (expand-file-name (package--description-file pkg-dir) pkg-dir))) | 488 | missing))) |
| 441 | ;; Generate autoloads | 489 | |
| 442 | (let* ((name (package-desc-name pkg-desc)) | 490 | (let ((default-directory (file-name-as-directory pkg-dir)) |
| 443 | (auto-name (format "%s-autoloads.el" name)) | 491 | (pkg-file (expand-file-name (package--description-file pkg-dir) pkg-dir))) |
| 444 | (extras (package-desc-extras pkg-desc)) | 492 | ;; Generate autoloads |
| 445 | (lisp-dir (alist-get :lisp-dir extras))) | 493 | (let* ((name (package-desc-name pkg-desc)) |
| 446 | (package-generate-autoloads | 494 | (auto-name (format "%s-autoloads.el" name)) |
| 447 | name (file-name-concat pkg-dir lisp-dir)) | 495 | (extras (package-desc-extras pkg-desc)) |
| 448 | (when lisp-dir | 496 | (lisp-dir (alist-get :lisp-dir extras))) |
| 449 | (write-region | 497 | (package-generate-autoloads |
| 450 | (with-temp-buffer | 498 | name (file-name-concat pkg-dir lisp-dir)) |
| 451 | (insert ";; Autoload indirection for package-vc\n\n") | 499 | (when lisp-dir |
| 452 | (prin1 `(load (expand-file-name | 500 | (write-region |
| 453 | ,(file-name-concat lisp-dir auto-name) | 501 | (with-temp-buffer |
| 454 | (or (and load-file-name | 502 | (insert ";; Autoload indirection for package-vc\n\n") |
| 455 | (file-name-directory load-file-name)) | 503 | (prin1 `(load (expand-file-name |
| 456 | (car load-path)))) | 504 | ,(file-name-concat lisp-dir auto-name) |
| 457 | (current-buffer)) | 505 | (or (and load-file-name |
| 458 | (buffer-string)) | 506 | (file-name-directory load-file-name)) |
| 459 | nil (expand-file-name auto-name pkg-dir)))) | 507 | (car load-path)))) |
| 460 | 508 | (current-buffer)) | |
| 461 | ;; Generate package file | 509 | (buffer-string)) |
| 462 | (package-vc--generate-description-file pkg-desc pkg-file) | 510 | nil (expand-file-name auto-name pkg-dir)))) |
| 463 | 511 | ||
| 464 | ;; Detect a manual | 512 | ;; Generate package file |
| 465 | (when-let ((pkg-spec (package-vc--desc->spec pkg-desc)) | 513 | (package-vc--generate-description-file pkg-desc pkg-file) |
| 466 | ((executable-find "install-info"))) | 514 | |
| 467 | (dolist (doc-file (ensure-list (plist-get pkg-spec :doc))) | 515 | ;; Detect a manual |
| 468 | (package-vc--build-documentation pkg-desc doc-file)))) | 516 | (when-let ((pkg-spec (package-vc--desc->spec pkg-desc)) |
| 469 | 517 | ((executable-find "install-info"))) | |
| 470 | ;; Update package-alist. | 518 | (dolist (doc-file (ensure-list (plist-get pkg-spec :doc))) |
| 471 | (let ((new-desc (package-load-descriptor pkg-dir))) | 519 | (package-vc--build-documentation pkg-desc doc-file)))) |
| 472 | ;; Activation has to be done before compilation, so that if we're | 520 | |
| 473 | ;; upgrading and macros have changed we load the new definitions | 521 | ;; Update package-alist. |
| 474 | ;; before compiling. | 522 | (let ((new-desc (package-load-descriptor pkg-dir))) |
| 475 | (when (package-activate-1 new-desc :reload :deps) | 523 | ;; Activation has to be done before compilation, so that if we're |
| 476 | ;; FIXME: Compilation should be done as a separate, optional, step. | 524 | ;; upgrading and macros have changed we load the new definitions |
| 477 | ;; E.g. for multi-package installs, we should first install all packages | 525 | ;; before compiling. |
| 478 | ;; and then compile them. | 526 | (when (package-activate-1 new-desc :reload :deps) |
| 479 | (package--compile new-desc) | 527 | ;; FIXME: Compilation should be done as a separate, optional, step. |
| 480 | (when package-native-compile | 528 | ;; E.g. for multi-package installs, we should first install all packages |
| 481 | (package--native-compile-async new-desc)) | 529 | ;; and then compile them. |
| 482 | ;; After compilation, load again any files loaded by | 530 | (package--compile new-desc) |
| 483 | ;; `activate-1', so that we use the byte-compiled definitions. | 531 | (when package-native-compile |
| 484 | (package--reload-previously-loaded new-desc))) | 532 | (package--native-compile-async new-desc)) |
| 485 | 533 | ;; After compilation, load again any files loaded by | |
| 486 | ;; Mark package as selected | 534 | ;; `activate-1', so that we use the byte-compiled definitions. |
| 487 | (package--save-selected-packages | 535 | (package--reload-previously-loaded new-desc))) |
| 488 | (cons (package-desc-name pkg-desc) | 536 | |
| 489 | package-selected-packages)) | 537 | ;; Mark package as selected |
| 490 | (package--quickstart-maybe-refresh) | 538 | (package--save-selected-packages |
| 491 | 539 | (cons (package-desc-name pkg-desc) | |
| 492 | ;; Confirm that the installation was successful | 540 | package-selected-packages)) |
| 493 | (let ((main-file (package-vc--main-file pkg-desc))) | 541 | (package--quickstart-maybe-refresh) |
| 494 | (message "VC package `%s' installed (Version %s, Revision %S)." | 542 | |
| 495 | (package-desc-name pkg-desc) | 543 | ;; Confirm that the installation was successful |
| 496 | (lm-with-file main-file | 544 | (let ((main-file (package-vc--main-file pkg-desc))) |
| 497 | (package-strip-rcs-id | 545 | (message "VC package `%s' installed (Version %s, Revision %S).%s" |
| 498 | (or (lm-header "package-version") | 546 | (package-desc-name pkg-desc) |
| 499 | (lm-header "version")))) | 547 | (lm-with-file main-file |
| 500 | (vc-working-revision main-file))) | 548 | (package-strip-rcs-id |
| 501 | t) | 549 | (or (lm-header "package-version") |
| 550 | (lm-header "version")))) | ||
| 551 | (vc-working-revision main-file) | ||
| 552 | (if missing | ||
| 553 | (format | ||
| 554 | " Failed to install the following dependencies: %s" | ||
| 555 | (mapconcat | ||
| 556 | (lambda (p) | ||
| 557 | (format "%s (%s)" (car p) (cadr p))) | ||
| 558 | missing ", ")) | ||
| 559 | ""))) | ||
| 560 | t)) | ||
| 502 | 561 | ||
| 503 | (defun package-vc--guess-backend (url) | 562 | (defun package-vc--guess-backend (url) |
| 504 | "Guess the VC backend for URL. | 563 | "Guess the VC backend for URL. |
| @@ -552,6 +611,20 @@ checkout. This overrides the `:branch' attribute in PKG-SPEC." | |||
| 552 | (error "There already exists a checkout for %s" name))) | 611 | (error "There already exists a checkout for %s" name))) |
| 553 | (package-vc--clone pkg-desc pkg-spec pkg-dir rev) | 612 | (package-vc--clone pkg-desc pkg-spec pkg-dir rev) |
| 554 | 613 | ||
| 614 | ;; When nothing is specified about a `lisp-dir', then should | ||
| 615 | ;; heuristically check if there is a sub-directory with lisp | ||
| 616 | ;; files. These are conventionally just called "lisp". If this | ||
| 617 | ;; directory exists and contains non-zero number of lisp files, we | ||
| 618 | ;; will use that instead of `pkg-dir'. | ||
| 619 | (when-let* (((null lisp-dir)) | ||
| 620 | (dir (expand-file-name "lisp" pkg-dir)) | ||
| 621 | ((file-directory-p dir)) | ||
| 622 | ((directory-files dir nil "\\`[^.].+\\.el\\'" t 1))) | ||
| 623 | ;; We won't use `dir', since dir is an absolute path and we | ||
| 624 | ;; don't want `lisp-dir' to depend on the current location of | ||
| 625 | ;; the package installation, ie. to break if moved around the | ||
| 626 | ;; file system or between installations. | ||
| 627 | (setq lisp-dir "lisp")) | ||
| 555 | (when lisp-dir | 628 | (when lisp-dir |
| 556 | (push (cons :lisp-dir lisp-dir) | 629 | (push (cons :lisp-dir lisp-dir) |
| 557 | (package-desc-extras pkg-desc))) | 630 | (package-desc-extras pkg-desc))) |
| @@ -661,7 +734,7 @@ If no such revision can be found, return nil." | |||
| 661 | (line-number-at-pos nil t)))))))) | 734 | (line-number-at-pos nil t)))))))) |
| 662 | 735 | ||
| 663 | ;;;###autoload | 736 | ;;;###autoload |
| 664 | (defun package-vc-install (package &optional name rev backend) | 737 | (defun package-vc-install (package &optional rev backend name) |
| 665 | "Fetch a PACKAGE and set it up for using with Emacs. | 738 | "Fetch a PACKAGE and set it up for using with Emacs. |
| 666 | 739 | ||
| 667 | If PACKAGE is a string containing an URL, download the package | 740 | If PACKAGE is a string containing an URL, download the package |
| @@ -685,7 +758,9 @@ the package's repository; this is only possible if NAME-OR-URL is a URL, | |||
| 685 | a string. If BACKEND is omitted or nil, the function | 758 | a string. If BACKEND is omitted or nil, the function |
| 686 | uses `package-vc-heuristic-alist' to guess the backend. | 759 | uses `package-vc-heuristic-alist' to guess the backend. |
| 687 | Note that by default, a VC package will be prioritized over a | 760 | Note that by default, a VC package will be prioritized over a |
| 688 | regular package, but it will not remove a VC package." | 761 | regular package, but it will not remove a VC package. |
| 762 | |||
| 763 | \(fn PACKAGE &optional REV BACKEND)" | ||
| 689 | (interactive | 764 | (interactive |
| 690 | (progn | 765 | (progn |
| 691 | ;; Initialize the package system to get the list of package | 766 | ;; Initialize the package system to get the list of package |
| @@ -694,8 +769,10 @@ regular package, but it will not remove a VC package." | |||
| 694 | (let* ((name-or-url (package-vc--read-package-name | 769 | (let* ((name-or-url (package-vc--read-package-name |
| 695 | "Fetch and install package: " t)) | 770 | "Fetch and install package: " t)) |
| 696 | (name (file-name-base name-or-url))) | 771 | (name (file-name-base name-or-url))) |
| 697 | (list name-or-url (intern (string-remove-prefix "emacs-" name)) | 772 | (list name-or-url |
| 698 | (and current-prefix-arg :last-release))))) | 773 | (and current-prefix-arg :last-release) |
| 774 | nil | ||
| 775 | (intern (string-remove-prefix "emacs-" name)))))) | ||
| 699 | (package-vc--archives-initialize) | 776 | (package-vc--archives-initialize) |
| 700 | (cond | 777 | (cond |
| 701 | ((null package) | 778 | ((null package) |
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 1cc978923e0..1ab70eb2fe9 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el | |||
| @@ -2094,7 +2094,7 @@ if all the in-between dependencies are also in PACKAGE-LIST." | |||
| 2094 | (defun package-install-from-archive (pkg-desc) | 2094 | (defun package-install-from-archive (pkg-desc) |
| 2095 | "Download and install a package defined by PKG-DESC." | 2095 | "Download and install a package defined by PKG-DESC." |
| 2096 | ;; This won't happen, unless the archive is doing something wrong. | 2096 | ;; This won't happen, unless the archive is doing something wrong. |
| 2097 | (when (package-vc-p pkg-desc) | 2097 | (when (eq (package-desc-kind pkg-desc) 'dir) |
| 2098 | (error "Can't install directory package from archive")) | 2098 | (error "Can't install directory package from archive")) |
| 2099 | (let* ((location (package-archive-base pkg-desc)) | 2099 | (let* ((location (package-archive-base pkg-desc)) |
| 2100 | (file (concat (package-desc-full-name pkg-desc) | 2100 | (file (concat (package-desc-full-name pkg-desc) |
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el index 4896f4c2937..415f8db52ca 100644 --- a/lisp/emacs-lisp/subr-x.el +++ b/lisp/emacs-lisp/subr-x.el | |||
| @@ -333,7 +333,10 @@ as the new values of the bound variables in the recursive invocation." | |||
| 333 | ;;;###autoload | 333 | ;;;###autoload |
| 334 | (defun string-glyph-split (string) | 334 | (defun string-glyph-split (string) |
| 335 | "Split STRING into a list of strings representing separate glyphs. | 335 | "Split STRING into a list of strings representing separate glyphs. |
| 336 | This takes into account combining characters and grapheme clusters." | 336 | This takes into account combining characters and grapheme clusters: |
| 337 | if compositions are enbaled, each sequence of characters composed | ||
| 338 | on display into a single grapheme cluster is treated as a single | ||
| 339 | indivisible unit." | ||
| 337 | (let ((result nil) | 340 | (let ((result nil) |
| 338 | (start 0) | 341 | (start 0) |
| 339 | comp) | 342 | comp) |
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el index f69538f78c9..c2a3673752e 100644 --- a/lisp/org/ob-core.el +++ b/lisp/org/ob-core.el | |||
| @@ -2464,7 +2464,11 @@ INFO may provide the values of these header arguments (in the | |||
| 2464 | (cons 'unordered | 2464 | (cons 'unordered |
| 2465 | (mapcar | 2465 | (mapcar |
| 2466 | (lambda (e) | 2466 | (lambda (e) |
| 2467 | (list (if (stringp e) e (format "%S" e)))) | 2467 | (cond |
| 2468 | ((stringp e) (list e)) | ||
| 2469 | ((listp e) | ||
| 2470 | (mapcar (lambda (x) (format "%S" x)) e)) | ||
| 2471 | (t (list (format "%S" e))))) | ||
| 2468 | (if (listp result) result | 2472 | (if (listp result) result |
| 2469 | (split-string result "\n" t)))) | 2473 | (split-string result "\n" t)))) |
| 2470 | '(:splicep nil :istart "- " :iend "\n"))) | 2474 | '(:splicep nil :istart "- " :iend "\n"))) |
| @@ -3183,8 +3187,8 @@ situations in which is it not appropriate." | |||
| 3183 | (if (and (memq (string-to-char cell) '(?\( ?`)) | 3187 | (if (and (memq (string-to-char cell) '(?\( ?`)) |
| 3184 | (not (org-babel-confirm-evaluate | 3188 | (not (org-babel-confirm-evaluate |
| 3185 | ;; See `org-babel-get-src-block-info'. | 3189 | ;; See `org-babel-get-src-block-info'. |
| 3186 | (list "emacs-lisp" (format "%S" cell) | 3190 | (list "emacs-lisp" cell |
| 3187 | '((:eval . yes)) nil (format "%S" cell) | 3191 | '((:eval . yes)) nil (format "%s" cell) |
| 3188 | nil nil)))) | 3192 | nil nil)))) |
| 3189 | ;; Not allowed. | 3193 | ;; Not allowed. |
| 3190 | (user-error "Evaluation of elisp code %S aborted." cell) | 3194 | (user-error "Evaluation of elisp code %S aborted." cell) |
diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el index bd17bda32ba..fd6b6f3b943 100644 --- a/lisp/org/ob-tangle.el +++ b/lisp/org/ob-tangle.el | |||
| @@ -500,7 +500,8 @@ The PARAMS are the 3rd element of the info for the same src block." | |||
| 500 | (cl-letf (((symbol-function 'org-store-link-functions) | 500 | (cl-letf (((symbol-function 'org-store-link-functions) |
| 501 | (lambda () nil))) | 501 | (lambda () nil))) |
| 502 | (org-store-link nil)))) | 502 | (org-store-link nil)))) |
| 503 | (bare (and (string-match org-link-bracket-re l) | 503 | (bare (and l |
| 504 | (string-match org-link-bracket-re l) | ||
| 504 | (match-string 1 l)))) | 505 | (match-string 1 l)))) |
| 505 | (when bare | 506 | (when bare |
| 506 | (if (and org-babel-tangle-use-relative-file-links | 507 | (if (and org-babel-tangle-use-relative-file-links |
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el index 3ef7a37e3b3..01e314bfdba 100644 --- a/lisp/org/oc-basic.el +++ b/lisp/org/oc-basic.el | |||
| @@ -162,17 +162,17 @@ Return a hash table with citation references as keys and fields alist as values. | |||
| 162 | (puthash (cdr (assq 'id item)) | 162 | (puthash (cdr (assq 'id item)) |
| 163 | (mapcar (pcase-lambda (`(,field . ,value)) | 163 | (mapcar (pcase-lambda (`(,field . ,value)) |
| 164 | (pcase field | 164 | (pcase field |
| 165 | ('author | 165 | ((or 'author 'editors) |
| 166 | ;; Author is an array of objects, each | 166 | ;; Author and editors are arrays of |
| 167 | ;; of them designing a person. These | 167 | ;; objects, each of them designing a |
| 168 | ;; objects may contain multiple | 168 | ;; person. These objects may contain |
| 169 | ;; properties, but for this basic | 169 | ;; multiple properties, but for this |
| 170 | ;; processor, we'll focus on `given' and | 170 | ;; basic processor, we'll focus on |
| 171 | ;; `family'. | 171 | ;; `given' and `family'. |
| 172 | ;; | 172 | ;; |
| 173 | ;; For compatibility with BibTeX, add | 173 | ;; For compatibility with BibTeX, add |
| 174 | ;; "and" between authors. | 174 | ;; "and" between authors and editors. |
| 175 | (cons 'author | 175 | (cons field |
| 176 | (mapconcat | 176 | (mapconcat |
| 177 | (lambda (alist) | 177 | (lambda (alist) |
| 178 | (concat (alist-get 'family alist) | 178 | (concat (alist-get 'family alist) |
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el index 230937c4e60..ace1cc1a984 100644 --- a/lisp/org/org-element.el +++ b/lisp/org/org-element.el | |||
| @@ -1365,7 +1365,16 @@ Assume point is at beginning of the inline task." | |||
| 1365 | (priority (and (looking-at "\\[#.\\][ \t]*") | 1365 | (priority (and (looking-at "\\[#.\\][ \t]*") |
| 1366 | (progn (goto-char (match-end 0)) | 1366 | (progn (goto-char (match-end 0)) |
| 1367 | (aref (match-string 0) 2)))) | 1367 | (aref (match-string 0) 2)))) |
| 1368 | (title-start (point)) | 1368 | (commentedp |
| 1369 | (and (let ((case-fold-search nil)) | ||
| 1370 | (looking-at org-element-comment-string)) | ||
| 1371 | (goto-char (match-end 0)) | ||
| 1372 | (when (looking-at-p "\\(?:[ \t]\\|$\\)") | ||
| 1373 | (point)))) | ||
| 1374 | (title-start (prog1 (point) | ||
| 1375 | (unless (or todo priority commentedp) | ||
| 1376 | ;; Headline like "* :tag:" | ||
| 1377 | (skip-chars-backward " \t")))) | ||
| 1369 | (tags (when (re-search-forward | 1378 | (tags (when (re-search-forward |
| 1370 | "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$" | 1379 | "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$" |
| 1371 | (line-end-position) | 1380 | (line-end-position) |
| @@ -1375,6 +1384,7 @@ Assume point is at beginning of the inline task." | |||
| 1375 | (title-end (point)) | 1384 | (title-end (point)) |
| 1376 | (raw-value (org-trim | 1385 | (raw-value (org-trim |
| 1377 | (buffer-substring-no-properties title-start title-end))) | 1386 | (buffer-substring-no-properties title-start title-end))) |
| 1387 | (archivedp (member org-element-archive-tag tags)) | ||
| 1378 | (task-end (save-excursion | 1388 | (task-end (save-excursion |
| 1379 | (end-of-line) | 1389 | (end-of-line) |
| 1380 | (and (re-search-forward org-element-headline-re limit t) | 1390 | (and (re-search-forward org-element-headline-re limit t) |
| @@ -1410,7 +1420,9 @@ Assume point is at beginning of the inline task." | |||
| 1410 | :todo-keyword todo | 1420 | :todo-keyword todo |
| 1411 | :todo-type todo-type | 1421 | :todo-type todo-type |
| 1412 | :post-blank (1- (count-lines (or task-end begin) end)) | 1422 | :post-blank (1- (count-lines (or task-end begin) end)) |
| 1413 | :post-affiliated begin) | 1423 | :post-affiliated begin |
| 1424 | :archivedp archivedp | ||
| 1425 | :commentedp commentedp) | ||
| 1414 | time-props | 1426 | time-props |
| 1415 | standard-props)))) | 1427 | standard-props)))) |
| 1416 | (org-element-put-property | 1428 | (org-element-put-property |
diff --git a/lisp/org/org-persist.el b/lisp/org/org-persist.el index 6ccf357784e..60291e5187f 100644 --- a/lisp/org/org-persist.el +++ b/lisp/org/org-persist.el | |||
| @@ -874,15 +874,21 @@ When IGNORE-RETURN is non-nil, just return t on success without calling | |||
| 874 | When ASSOCIATED is non-nil, only save the matching data." | 874 | When ASSOCIATED is non-nil, only save the matching data." |
| 875 | (unless org-persist--index (org-persist--load-index)) | 875 | (unless org-persist--index (org-persist--load-index)) |
| 876 | (setq associated (org-persist--normalize-associated associated)) | 876 | (setq associated (org-persist--normalize-associated associated)) |
| 877 | (unless | 877 | (if |
| 878 | (and (equal 1 (length org-persist--index)) | 878 | (and (equal 1 (length org-persist--index)) |
| 879 | ;; The single collection only contains a single container | 879 | ;; The single collection only contains a single container |
| 880 | ;; in the container list. | 880 | ;; in the container list. |
| 881 | (equal 1 (length (plist-get (car org-persist--index) :container))) | 881 | (equal 1 (length (plist-get (car org-persist--index) :container))) |
| 882 | ;; The container is an `index' container. | 882 | ;; The container is an `index' container. |
| 883 | (eq 'index (caar (plist-get (car org-persist--index) :container))) | 883 | (eq 'index (caar (plist-get (car org-persist--index) :container))) |
| 884 | ;; No `org-persist-directory' exists yet. | 884 | (or (not (file-exists-p org-persist-directory)) |
| 885 | (not (file-exists-p org-persist-directory))) | 885 | (org-directory-empty-p org-persist-directory))) |
| 886 | ;; Do not write anything, and clear up `org-persist-directory' to reduce | ||
| 887 | ;; clutter. | ||
| 888 | (when (and (file-exists-p org-persist-directory) | ||
| 889 | (org-directory-empty-p org-persist-directory)) | ||
| 890 | (delete-directory org-persist-directory)) | ||
| 891 | ;; Write the data. | ||
| 886 | (let (all-containers) | 892 | (let (all-containers) |
| 887 | (dolist (collection org-persist--index) | 893 | (dolist (collection org-persist--index) |
| 888 | (if associated | 894 | (if associated |
| @@ -963,6 +969,30 @@ Also, remove containers associated with non-existing files." | |||
| 963 | (push collection new-index))))) | 969 | (push collection new-index))))) |
| 964 | (setq org-persist--index (nreverse new-index)))) | 970 | (setq org-persist--index (nreverse new-index)))) |
| 965 | 971 | ||
| 972 | (defun org-persist-clear-storage-maybe () | ||
| 973 | "Clear `org-persist-directory' according to `org-persist--disable-when-emacs-Q'. | ||
| 974 | |||
| 975 | When `org-persist--disable-when-emacs-Q' is non-nil and Emacs is called with -Q | ||
| 976 | command line argument, `org-persist-directory' is created in potentially public | ||
| 977 | system temporary directory. Remove everything upon existing Emacs in | ||
| 978 | such scenario." | ||
| 979 | (when (and org-persist--disable-when-emacs-Q | ||
| 980 | ;; FIXME: This is relying on undocumented fact that | ||
| 981 | ;; Emacs sets `user-init-file' to nil when loaded with | ||
| 982 | ;; "-Q" argument. | ||
| 983 | (not user-init-file) | ||
| 984 | (file-exists-p org-persist-directory)) | ||
| 985 | (delete-directory org-persist-directory 'recursive))) | ||
| 986 | |||
| 987 | ;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set. | ||
| 988 | (when (and org-persist--disable-when-emacs-Q | ||
| 989 | ;; FIXME: This is relying on undocumented fact that | ||
| 990 | ;; Emacs sets `user-init-file' to nil when loaded with | ||
| 991 | ;; "-Q" argument. | ||
| 992 | (not user-init-file)) | ||
| 993 | (setq org-persist-directory | ||
| 994 | (make-temp-file "org-persist-" 'dir))) | ||
| 995 | |||
| 966 | ;; Automatically write the data, but only when we have write access. | 996 | ;; Automatically write the data, but only when we have write access. |
| 967 | (let ((dir (directory-file-name | 997 | (let ((dir (directory-file-name |
| 968 | (file-name-as-directory org-persist-directory)))) | 998 | (file-name-as-directory org-persist-directory)))) |
| @@ -972,20 +1002,12 @@ Also, remove containers associated with non-existing files." | |||
| 972 | (if (not (file-writable-p dir)) | 1002 | (if (not (file-writable-p dir)) |
| 973 | (message "Missing write access rights to org-persist-directory: %S" | 1003 | (message "Missing write access rights to org-persist-directory: %S" |
| 974 | org-persist-directory) | 1004 | org-persist-directory) |
| 1005 | (add-hook 'kill-emacs-hook #'org-persist-clear-storage-maybe) ; Run last. | ||
| 975 | (add-hook 'kill-emacs-hook #'org-persist-write-all) | 1006 | (add-hook 'kill-emacs-hook #'org-persist-write-all) |
| 976 | ;; `org-persist-gc' should run before `org-persist-write-all'. | 1007 | ;; `org-persist-gc' should run before `org-persist-write-all'. |
| 977 | ;; So we are adding the hook after `org-persist-write-all'. | 1008 | ;; So we are adding the hook after `org-persist-write-all'. |
| 978 | (add-hook 'kill-emacs-hook #'org-persist-gc))) | 1009 | (add-hook 'kill-emacs-hook #'org-persist-gc))) |
| 979 | 1010 | ||
| 980 | ;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set. | ||
| 981 | (if (and org-persist--disable-when-emacs-Q | ||
| 982 | ;; FIXME: This is relying on undocumented fact that | ||
| 983 | ;; Emacs sets `user-init-file' to nil when loaded with | ||
| 984 | ;; "-Q" argument. | ||
| 985 | (not user-init-file)) | ||
| 986 | (setq org-persist-directory | ||
| 987 | (make-temp-file "org-persist-" 'dir))) | ||
| 988 | |||
| 989 | (add-hook 'after-init-hook #'org-persist-load-all) | 1011 | (add-hook 'after-init-hook #'org-persist-load-all) |
| 990 | 1012 | ||
| 991 | (provide 'org-persist) | 1013 | (provide 'org-persist) |
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el index 8de0d1a4a97..a0016265f02 100644 --- a/lisp/org/org-version.el +++ b/lisp/org/org-version.el | |||
| @@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made." | |||
| 11 | (defun org-git-version () | 11 | (defun org-git-version () |
| 12 | "The Git version of Org mode. | 12 | "The Git version of Org mode. |
| 13 | Inserted by installing Org or when a release is made." | 13 | Inserted by installing Org or when a release is made." |
| 14 | (let ((org-git-version "release_9.6-49-g47d129")) | 14 | (let ((org-git-version "release_9.6-61-g63e073f")) |
| 15 | org-git-version)) | 15 | org-git-version)) |
| 16 | 16 | ||
| 17 | (provide 'org-version) | 17 | (provide 'org-version) |
diff --git a/lisp/org/org.el b/lisp/org/org.el index 6aa2a16219d..ab8b76b926a 100644 --- a/lisp/org/org.el +++ b/lisp/org/org.el | |||
| @@ -20213,7 +20213,10 @@ interactive command with similar behavior." | |||
| 20213 | (defun org-back-to-heading (&optional invisible-ok) | 20213 | (defun org-back-to-heading (&optional invisible-ok) |
| 20214 | "Go back to beginning of heading." | 20214 | "Go back to beginning of heading." |
| 20215 | (beginning-of-line) | 20215 | (beginning-of-line) |
| 20216 | (or (org-at-heading-p (not invisible-ok)) | 20216 | (or (and (org-at-heading-p (not invisible-ok)) |
| 20217 | (not (and (featurep 'org-inlinetask) | ||
| 20218 | (fboundp 'org-inlinetask-end-p) | ||
| 20219 | (org-inlinetask-end-p)))) | ||
| 20217 | (if (org-element--cache-active-p) | 20220 | (if (org-element--cache-active-p) |
| 20218 | (let ((heading (org-element-lineage (org-element-at-point) | 20221 | (let ((heading (org-element-lineage (org-element-at-point) |
| 20219 | '(headline inlinetask) | 20222 | '(headline inlinetask) |
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el index 86b10cbf785..19cdf4c5a26 100644 --- a/lisp/org/ox-html.el +++ b/lisp/org/ox-html.el | |||
| @@ -3337,7 +3337,7 @@ INFO is a plist holding contextual information. See | |||
| 3337 | ((org-html-standalone-image-p destination info) | 3337 | ((org-html-standalone-image-p destination info) |
| 3338 | (org-export-get-ordinal | 3338 | (org-export-get-ordinal |
| 3339 | (org-element-map destination 'link #'identity info t) | 3339 | (org-element-map destination 'link #'identity info t) |
| 3340 | info 'link 'org-html-standalone-image-p)) | 3340 | info '(link) 'org-html-standalone-image-p)) |
| 3341 | (t (org-export-get-ordinal | 3341 | (t (org-export-get-ordinal |
| 3342 | destination info nil counter-predicate)))) | 3342 | destination info nil counter-predicate)))) |
| 3343 | (desc | 3343 | (desc |
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index edd81b8bf78..161e01d4411 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el | |||
| @@ -402,7 +402,7 @@ MODE is either `c' or `cpp'." | |||
| 402 | ((or "identifier" "field_identifier") | 402 | ((or "identifier" "field_identifier") |
| 403 | node))) | 403 | node))) |
| 404 | 404 | ||
| 405 | (defun c-ts-mode--fontify-declarator (node override start end &rest args) | 405 | (defun c-ts-mode--fontify-declarator (node override start end &rest _args) |
| 406 | "Fontify a declarator (whatever under the \"declarator\" field). | 406 | "Fontify a declarator (whatever under the \"declarator\" field). |
| 407 | For NODE, OVERRIDE, START, END, and ARGS, see | 407 | For NODE, OVERRIDE, START, END, and ARGS, see |
| 408 | `treesit-font-lock-rules'." | 408 | `treesit-font-lock-rules'." |
diff --git a/lisp/treesit.el b/lisp/treesit.el index 1de0da19c25..cefbed1a168 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el | |||
| @@ -174,8 +174,7 @@ only look for named nodes. | |||
| 174 | If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG | 174 | If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG |
| 175 | is a language, find the first parser for that language in the | 175 | is a language, find the first parser for that language in the |
| 176 | current buffer, or create one if none exists; If PARSER-OR-LANG | 176 | current buffer, or create one if none exists; If PARSER-OR-LANG |
| 177 | is nil, try to guess the language at POS by | 177 | is nil, try to guess the language at POS using `treesit-language-at'." |
| 178 | `treesit-language-at'." | ||
| 179 | (let* ((root (if (treesit-parser-p parser-or-lang) | 178 | (let* ((root (if (treesit-parser-p parser-or-lang) |
| 180 | (treesit-parser-root-node parser-or-lang) | 179 | (treesit-parser-root-node parser-or-lang) |
| 181 | (treesit-buffer-root-node | 180 | (treesit-buffer-root-node |
| @@ -224,8 +223,7 @@ named node. | |||
| 224 | If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG | 223 | If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG |
| 225 | is a language, find the first parser for that language in the | 224 | is a language, find the first parser for that language in the |
| 226 | current buffer, or create one if none exists; If PARSER-OR-LANG | 225 | current buffer, or create one if none exists; If PARSER-OR-LANG |
| 227 | is nil, try to guess the language at BEG by | 226 | is nil, try to guess the language at BEG using `treesit-language-at'." |
| 228 | `treesit-language-at'." | ||
| 229 | (let ((root (if (treesit-parser-p parser-or-lang) | 227 | (let ((root (if (treesit-parser-p parser-or-lang) |
| 230 | (treesit-parser-root-node parser-or-lang) | 228 | (treesit-parser-root-node parser-or-lang) |
| 231 | (treesit-buffer-root-node | 229 | (treesit-buffer-root-node |
| @@ -1584,7 +1582,35 @@ BACKWARD and ALL are the same as in `treesit-search-forward'." | |||
| 1584 | (goto-char current-pos))) | 1582 | (goto-char current-pos))) |
| 1585 | node)) | 1583 | node)) |
| 1586 | 1584 | ||
| 1587 | ;;; Navigation | 1585 | ;;; Navigation, defun, things |
| 1586 | ;; | ||
| 1587 | ;; Emacs lets you define "things" by a regexp that matches the type of | ||
| 1588 | ;; a node, and here are some functions that lets you find the "things" | ||
| 1589 | ;; at/around point, navigate backward/forward a "thing", etc. | ||
| 1590 | ;; | ||
| 1591 | ;; The most obvious "thing" is a defun, and there are thin wrappers | ||
| 1592 | ;; around thing functions for defun for convenience. | ||
| 1593 | ;; | ||
| 1594 | ;; We have more command-like functions like: | ||
| 1595 | ;; - treesit-beginning-of-thing/defun | ||
| 1596 | ;; - treesit-end-of-thing/defun | ||
| 1597 | ;; - treesit-thing/defun-at-point | ||
| 1598 | ;; | ||
| 1599 | ;; And more generic functions like: | ||
| 1600 | ;; - treesit--things-around | ||
| 1601 | ;; - treesit--top-level-thing | ||
| 1602 | ;; - treesit--navigate-thing | ||
| 1603 | ;; | ||
| 1604 | ;; There are also some defun-specific functions, like | ||
| 1605 | ;; treesit-defun-name, treesit-add-log-current-defun. | ||
| 1606 | ;; | ||
| 1607 | ;; TODO: I'm not entirely sure how would this go, so I only documented | ||
| 1608 | ;; the "defun" functions and didn't document any "thing" functions. | ||
| 1609 | ;; We should also document `treesit-block-type-regexp' and support it | ||
| 1610 | ;; in major modes if we can meaningfully intergrate hideshow: I tried | ||
| 1611 | ;; and failed, we need SomeOne that understands hideshow to look at | ||
| 1612 | ;; it. (BTW, hideshow should use its own | ||
| 1613 | ;; `treesit-hideshow-block-type-regexp'.) | ||
| 1588 | 1614 | ||
| 1589 | (defvar-local treesit-defun-type-regexp nil | 1615 | (defvar-local treesit-defun-type-regexp nil |
| 1590 | "A regexp that matches the node type of defun nodes. | 1616 | "A regexp that matches the node type of defun nodes. |
| @@ -1598,6 +1624,9 @@ for invalid node. | |||
| 1598 | 1624 | ||
| 1599 | This is used by `treesit-beginning-of-defun' and friends.") | 1625 | This is used by `treesit-beginning-of-defun' and friends.") |
| 1600 | 1626 | ||
| 1627 | (defvar-local treesit-block-type-regexp nil | ||
| 1628 | "Like `treesit-defun-type-regexp', but for blocks.") | ||
| 1629 | |||
| 1601 | (defvar-local treesit-defun-tactic 'nested | 1630 | (defvar-local treesit-defun-tactic 'nested |
| 1602 | "Determines how does Emacs treat nested defuns. | 1631 | "Determines how does Emacs treat nested defuns. |
| 1603 | If the value is `top-level', Emacs only moves across top-level | 1632 | If the value is `top-level', Emacs only moves across top-level |
| @@ -1613,8 +1642,8 @@ newline after a defun, or the beginning of a defun. | |||
| 1613 | If the value is nil, no skipping is performed.") | 1642 | If the value is nil, no skipping is performed.") |
| 1614 | 1643 | ||
| 1615 | (defvar-local treesit-defun-name-function nil | 1644 | (defvar-local treesit-defun-name-function nil |
| 1616 | "A function called with a node and returns the name of it. | 1645 | "A function that is called with a node and returns its defun name or nil. |
| 1617 | If the node is a defun node, return the defun name. E.g., the | 1646 | If the node is a defun node, return the defun name, e.g., the |
| 1618 | function name of a function. If the node is not a defun node, or | 1647 | function name of a function. If the node is not a defun node, or |
| 1619 | the defun node doesn't have a name, or the node is nil, return | 1648 | the defun node doesn't have a name, or the node is nil, return |
| 1620 | nil.") | 1649 | nil.") |
| @@ -1623,6 +1652,47 @@ nil.") | |||
| 1623 | "The delimiter used to connect several defun names. | 1652 | "The delimiter used to connect several defun names. |
| 1624 | This is used in `treesit-add-log-current-defun'.") | 1653 | This is used in `treesit-add-log-current-defun'.") |
| 1625 | 1654 | ||
| 1655 | (defsubst treesit--thing-unpack-pattern (pattern) | ||
| 1656 | "Unpack PATTERN in the shape of `treesit-defun-type-regexp'. | ||
| 1657 | |||
| 1658 | Basically, | ||
| 1659 | |||
| 1660 | (unpack REGEXP) = (REGEXP . nil) | ||
| 1661 | (unpack (REGEXP . PRED)) = (REGEXP . PRED)" | ||
| 1662 | (if (consp pattern) | ||
| 1663 | pattern | ||
| 1664 | (cons pattern nil))) | ||
| 1665 | |||
| 1666 | (defun treesit-beginning-of-thing (pattern &optional arg) | ||
| 1667 | "Like `beginning-of-defun', but generalized into things. | ||
| 1668 | |||
| 1669 | PATTERN is like `treesit-defun-type-regexp', ARG | ||
| 1670 | is the same as in `beginning-of-defun'. | ||
| 1671 | |||
| 1672 | Return non-nil if successfully moved, nil otherwise." | ||
| 1673 | (pcase-let* ((arg (or arg 1)) | ||
| 1674 | (`(,regexp . ,pred) (treesit--thing-unpack-pattern | ||
| 1675 | pattern)) | ||
| 1676 | (dest (treesit--navigate-thing | ||
| 1677 | (point) (- arg) 'beg regexp pred))) | ||
| 1678 | (when dest | ||
| 1679 | (goto-char dest)))) | ||
| 1680 | |||
| 1681 | (defun treesit-end-of-thing (pattern &optional arg) | ||
| 1682 | "Like `end-of-defun', but generalized into things. | ||
| 1683 | |||
| 1684 | PATTERN is like `treesit-defun-type-regexp', ARG is the same as | ||
| 1685 | in `end-of-defun'. | ||
| 1686 | |||
| 1687 | Return non-nil if successfully moved, nil otherwise." | ||
| 1688 | (pcase-let* ((arg (or arg 1)) | ||
| 1689 | (`(,regexp . ,pred) (treesit--thing-unpack-pattern | ||
| 1690 | pattern)) | ||
| 1691 | (dest (treesit--navigate-thing | ||
| 1692 | (point) arg 'end regexp pred))) | ||
| 1693 | (when dest | ||
| 1694 | (goto-char dest)))) | ||
| 1695 | |||
| 1626 | (defun treesit-beginning-of-defun (&optional arg) | 1696 | (defun treesit-beginning-of-defun (&optional arg) |
| 1627 | "Move backward to the beginning of a defun. | 1697 | "Move backward to the beginning of a defun. |
| 1628 | 1698 | ||
| @@ -1635,9 +1705,7 @@ This is a tree-sitter equivalent of `beginning-of-defun'. | |||
| 1635 | Behavior of this function depends on `treesit-defun-type-regexp' | 1705 | Behavior of this function depends on `treesit-defun-type-regexp' |
| 1636 | and `treesit-defun-skipper'." | 1706 | and `treesit-defun-skipper'." |
| 1637 | (interactive "^p") | 1707 | (interactive "^p") |
| 1638 | (when-let* ((arg (or arg 1)) | 1708 | (when (treesit-beginning-of-thing treesit-defun-type-regexp arg) |
| 1639 | (dest (treesit--navigate-defun (point) (- arg) 'beg))) | ||
| 1640 | (goto-char dest) | ||
| 1641 | (when treesit-defun-skipper | 1709 | (when treesit-defun-skipper |
| 1642 | (funcall treesit-defun-skipper)) | 1710 | (funcall treesit-defun-skipper)) |
| 1643 | t)) | 1711 | t)) |
| @@ -1652,9 +1720,7 @@ This is a tree-sitter equivalent of `end-of-defun'. Behavior of | |||
| 1652 | this function depends on `treesit-defun-type-regexp' and | 1720 | this function depends on `treesit-defun-type-regexp' and |
| 1653 | `treesit-defun-skipper'." | 1721 | `treesit-defun-skipper'." |
| 1654 | (interactive "^p\nd") | 1722 | (interactive "^p\nd") |
| 1655 | (when-let* ((arg (or arg 1)) | 1723 | (when (treesit-end-of-thing treesit-defun-type-regexp arg) |
| 1656 | (dest (treesit--navigate-defun (point) arg 'end))) | ||
| 1657 | (goto-char dest) | ||
| 1658 | (when treesit-defun-skipper | 1724 | (when treesit-defun-skipper |
| 1659 | (funcall treesit-defun-skipper)))) | 1725 | (funcall treesit-defun-skipper)))) |
| 1660 | 1726 | ||
| @@ -1691,17 +1757,15 @@ the current line if the beginning of the defun is indented." | |||
| 1691 | ;; parent: | 1757 | ;; parent: |
| 1692 | ;; 1. node covers pos | 1758 | ;; 1. node covers pos |
| 1693 | ;; 2. smallest such node | 1759 | ;; 2. smallest such node |
| 1694 | (defun treesit--defuns-around (pos regexp &optional pred) | 1760 | (defun treesit--things-around (pos regexp &optional pred) |
| 1695 | "Return the previous, next, and parent defun around POS. | 1761 | "Return the previous, next, and parent thing around POS. |
| 1696 | 1762 | ||
| 1697 | Return a list of (PREV NEXT PARENT), where PREV and NEXT are | 1763 | Return a list of (PREV NEXT PARENT), where PREV and NEXT are |
| 1698 | previous and next sibling defuns around POS, and PARENT is the | 1764 | previous and next sibling things around POS, and PARENT is the |
| 1699 | parent defun surrounding POS. All of three could be nil if no | 1765 | parent thing surrounding POS. All of three could be nil if no |
| 1700 | sound defun exists. | 1766 | sound things exists. |
| 1701 | |||
| 1702 | REGEXP and PRED are the same as in `treesit-defun-type-regexp'. | ||
| 1703 | 1767 | ||
| 1704 | Assumes `treesit-defun-type-regexp' is set." | 1768 | REGEXP and PRED are the same as in `treesit-thing-at-point'." |
| 1705 | (let* ((node (treesit-node-at pos)) | 1769 | (let* ((node (treesit-node-at pos)) |
| 1706 | ;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE, | 1770 | ;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE, |
| 1707 | ;; but if not, that means point could be in between two | 1771 | ;; but if not, that means point could be in between two |
| @@ -1761,9 +1825,9 @@ Assumes `treesit-defun-type-regexp' is set." | |||
| 1761 | return cursor)) | 1825 | return cursor)) |
| 1762 | result)) | 1826 | result)) |
| 1763 | 1827 | ||
| 1764 | (defun treesit--top-level-defun (node regexp &optional pred) | 1828 | (defun treesit--top-level-thing (node regexp &optional pred) |
| 1765 | "Return the top-level parent defun of NODE. | 1829 | "Return the top-level parent thing of NODE. |
| 1766 | REGEXP and PRED are the same as in `treesit-defun-type-regexp'." | 1830 | REGEXP and PRED are the same as in `treesit-thing-at-point'." |
| 1767 | (let* ((pred (or pred (lambda (_) t)))) | 1831 | (let* ((pred (or pred (lambda (_) t)))) |
| 1768 | ;; `treesit-search-forward-goto' will make sure the matched node | 1832 | ;; `treesit-search-forward-goto' will make sure the matched node |
| 1769 | ;; is before POS. | 1833 | ;; is before POS. |
| @@ -1803,25 +1867,23 @@ REGEXP and PRED are the same as in `treesit-defun-type-regexp'." | |||
| 1803 | ;; -> Obviously we don't want to go to parent's end, instead, we | 1867 | ;; -> Obviously we don't want to go to parent's end, instead, we |
| 1804 | ;; want to go to parent's prev-sibling's end. Again, we recurse | 1868 | ;; want to go to parent's prev-sibling's end. Again, we recurse |
| 1805 | ;; in the function to do that. | 1869 | ;; in the function to do that. |
| 1806 | (defun treesit--navigate-defun (pos arg side &optional recursing) | 1870 | (defun treesit--navigate-thing (pos arg side regexp &optional pred recursing) |
| 1807 | "Navigate defun ARG steps from POS. | 1871 | "Navigate thing ARG steps from POS. |
| 1808 | 1872 | ||
| 1809 | If ARG is positive, move forward that many steps, if negative, | 1873 | If ARG is positive, move forward that many steps, if negative, |
| 1810 | move backward. If SIDE is `beg', stop at the beginning of a | 1874 | move backward. If SIDE is `beg', stop at the beginning of a |
| 1811 | defun, if SIDE is `end', stop at the end. | 1875 | thing, if SIDE is `end', stop at the end. |
| 1812 | 1876 | ||
| 1813 | This function doesn't actually move point, it just returns the | 1877 | This function doesn't actually move point, it just returns the |
| 1814 | position it would move to. If there aren't enough defuns to move | 1878 | position it would move to. If there aren't enough things to move |
| 1815 | across, return nil. | 1879 | across, return nil. |
| 1816 | 1880 | ||
| 1881 | REGEXP and PRED are the same as in `treesit-thing-at-point'. | ||
| 1882 | |||
| 1817 | RECURSING is an internal parameter, if non-nil, it means this | 1883 | RECURSING is an internal parameter, if non-nil, it means this |
| 1818 | function is called recursively." | 1884 | function is called recursively." |
| 1819 | (pcase-let* | 1885 | (pcase-let* |
| 1820 | ((counter (abs arg)) | 1886 | ((counter (abs arg)) |
| 1821 | (`(,regexp . ,pred) | ||
| 1822 | (if (consp treesit-defun-type-regexp) | ||
| 1823 | treesit-defun-type-regexp | ||
| 1824 | (cons treesit-defun-type-regexp nil))) | ||
| 1825 | ;; Move POS to the beg/end of NODE. If NODE is nil, terminate. | 1887 | ;; Move POS to the beg/end of NODE. If NODE is nil, terminate. |
| 1826 | ;; Return the position we moved to. | 1888 | ;; Return the position we moved to. |
| 1827 | (advance (lambda (node) | 1889 | (advance (lambda (node) |
| @@ -1835,13 +1897,13 @@ function is called recursively." | |||
| 1835 | (while (> counter 0) | 1897 | (while (> counter 0) |
| 1836 | (pcase-let | 1898 | (pcase-let |
| 1837 | ((`(,prev ,next ,parent) | 1899 | ((`(,prev ,next ,parent) |
| 1838 | (treesit--defuns-around pos regexp pred))) | 1900 | (treesit--things-around pos regexp pred))) |
| 1839 | ;; When PARENT is nil, nested and top-level are the same, if | 1901 | ;; When PARENT is nil, nested and top-level are the same, if |
| 1840 | ;; there is a PARENT, make PARENT to be the top-level parent | 1902 | ;; there is a PARENT, make PARENT to be the top-level parent |
| 1841 | ;; and pretend there is no nested PREV and NEXT. | 1903 | ;; and pretend there is no nested PREV and NEXT. |
| 1842 | (when (and (eq treesit-defun-tactic 'top-level) | 1904 | (when (and (eq treesit-defun-tactic 'top-level) |
| 1843 | parent) | 1905 | parent) |
| 1844 | (setq parent (treesit--top-level-defun | 1906 | (setq parent (treesit--top-level-thing |
| 1845 | parent regexp pred) | 1907 | parent regexp pred) |
| 1846 | prev nil | 1908 | prev nil |
| 1847 | next nil)) | 1909 | next nil)) |
| @@ -1862,9 +1924,9 @@ function is called recursively." | |||
| 1862 | ;; (recursing) until we got out of the parents until | 1924 | ;; (recursing) until we got out of the parents until |
| 1863 | ;; (1) there is a next sibling defun, or (2) no more | 1925 | ;; (1) there is a next sibling defun, or (2) no more |
| 1864 | ;; parents [2]. | 1926 | ;; parents [2]. |
| 1865 | (setq pos (or (treesit--navigate-defun | 1927 | (setq pos (or (treesit--navigate-thing |
| 1866 | (treesit-node-end (or next parent)) | 1928 | (treesit-node-end (or next parent)) |
| 1867 | 1 'beg t) | 1929 | 1 'beg regexp pred t) |
| 1868 | (throw 'term nil))) | 1930 | (throw 'term nil))) |
| 1869 | ;; Normal case. | 1931 | ;; Normal case. |
| 1870 | (setq pos (funcall advance (or next parent)))) | 1932 | (setq pos (funcall advance (or next parent)))) |
| @@ -1874,9 +1936,9 @@ function is called recursively." | |||
| 1874 | (parent t) | 1936 | (parent t) |
| 1875 | (t nil))) | 1937 | (t nil))) |
| 1876 | ;; Special case: go to prev end-of-defun. | 1938 | ;; Special case: go to prev end-of-defun. |
| 1877 | (setq pos (or (treesit--navigate-defun | 1939 | (setq pos (or (treesit--navigate-thing |
| 1878 | (treesit-node-start (or prev parent)) | 1940 | (treesit-node-start (or prev parent)) |
| 1879 | -1 'end t) | 1941 | -1 'end regexp pred t) |
| 1880 | (throw 'term nil))) | 1942 | (throw 'term nil))) |
| 1881 | ;; Normal case. | 1943 | ;; Normal case. |
| 1882 | (setq pos (funcall advance (or prev parent))))) | 1944 | (setq pos (funcall advance (or prev parent))))) |
| @@ -1886,6 +1948,31 @@ function is called recursively." | |||
| 1886 | (if (eq counter 0) pos nil))) | 1948 | (if (eq counter 0) pos nil))) |
| 1887 | 1949 | ||
| 1888 | ;; TODO: In corporate into thing-at-point. | 1950 | ;; TODO: In corporate into thing-at-point. |
| 1951 | (defun treesit-thing-at-point (pattern tactic) | ||
| 1952 | "Return the thing node at point or nil if none is found. | ||
| 1953 | |||
| 1954 | \"Thing\" is defined by PATTERN, which can be either a string | ||
| 1955 | REGEXP or a cons cell (REGEXP . PRED): if a node's type matches | ||
| 1956 | REGEXP, it is a thing. The \"thing\" could be further restricted | ||
| 1957 | by PRED: if non-nil, PRED should be a function that takes a node | ||
| 1958 | and returns t if the node is a \"thing\", and nil if not. | ||
| 1959 | |||
| 1960 | Return the top-level defun if TACTIC is `top-level', return the | ||
| 1961 | immediate parent thing if TACTIC is `nested'." | ||
| 1962 | (pcase-let* ((`(,regexp . ,pred) | ||
| 1963 | (treesit--thing-unpack-pattern pattern)) | ||
| 1964 | (`(,_ ,next ,parent) | ||
| 1965 | (treesit--things-around (point) regexp pred)) | ||
| 1966 | ;; If point is at the beginning of a thing, we | ||
| 1967 | ;; prioritize that thing over the parent in nested | ||
| 1968 | ;; mode. | ||
| 1969 | (node (or (and (eq (treesit-node-start next) (point)) | ||
| 1970 | next) | ||
| 1971 | parent))) | ||
| 1972 | (if (eq tactic 'top-level) | ||
| 1973 | (treesit--top-level-thing node regexp pred) | ||
| 1974 | node))) | ||
| 1975 | |||
| 1889 | (defun treesit-defun-at-point () | 1976 | (defun treesit-defun-at-point () |
| 1890 | "Return the defun node at point or nil if none is found. | 1977 | "Return the defun node at point or nil if none is found. |
| 1891 | 1978 | ||
| @@ -1895,21 +1982,8 @@ is `top-level', return the immediate parent defun if it is | |||
| 1895 | 1982 | ||
| 1896 | Return nil if `treesit-defun-type-regexp' is not set." | 1983 | Return nil if `treesit-defun-type-regexp' is not set." |
| 1897 | (when treesit-defun-type-regexp | 1984 | (when treesit-defun-type-regexp |
| 1898 | (pcase-let* ((`(,regexp . ,pred) | 1985 | (treesit-thing-at-point |
| 1899 | (if (consp treesit-defun-type-regexp) | 1986 | treesit-defun-type-regexp treesit-defun-tactic))) |
| 1900 | treesit-defun-type-regexp | ||
| 1901 | (cons treesit-defun-type-regexp nil))) | ||
| 1902 | (`(,_ ,next ,parent) | ||
| 1903 | (treesit--defuns-around (point) regexp pred)) | ||
| 1904 | ;; If point is at the beginning of a defun, we | ||
| 1905 | ;; prioritize that defun over the parent in nested | ||
| 1906 | ;; mode. | ||
| 1907 | (node (or (and (eq (treesit-node-start next) (point)) | ||
| 1908 | next) | ||
| 1909 | parent))) | ||
| 1910 | (if (eq treesit-defun-tactic 'top-level) | ||
| 1911 | (treesit--top-level-defun node regexp pred) | ||
| 1912 | node)))) | ||
| 1913 | 1987 | ||
| 1914 | (defun treesit-defun-name (node) | 1988 | (defun treesit-defun-name (node) |
| 1915 | "Return the defun name of NODE. | 1989 | "Return the defun name of NODE. |
diff --git a/nt/INSTALL.W64 b/nt/INSTALL.W64 index b1f5dabaaff..b543034e479 100644 --- a/nt/INSTALL.W64 +++ b/nt/INSTALL.W64 | |||
| @@ -31,7 +31,7 @@ build tools for MinGW-w64 -- see https://msys2.org/. | |||
| 31 | 31 | ||
| 32 | ** Download and install MinGW-w64 and MSYS2 | 32 | ** Download and install MinGW-w64 and MSYS2 |
| 33 | 33 | ||
| 34 | Go to https://msys2.org and follow the instructions. It is not | 34 | Go to https://msys2.org and follow the instructions. It is not |
| 35 | necessary to install the packages suggested on those instructions. | 35 | necessary to install the packages suggested on those instructions. |
| 36 | 36 | ||
| 37 | ** Download and install the necessary packages | 37 | ** Download and install the necessary packages |
| @@ -70,9 +70,9 @@ You now have a complete build environment for Emacs. | |||
| 70 | 70 | ||
| 71 | * Install Git (optional) and disable autocrlf | 71 | * Install Git (optional) and disable autocrlf |
| 72 | 72 | ||
| 73 | If you're going to be building the development version of Emacs from the Git | 73 | If you're going to be building the development version of Emacs from |
| 74 | repository, and you don't already have Git on your system, you can install it | 74 | the Git repository (see below), and you don't already have Git on your |
| 75 | in your MSYS2 environment with: | 75 | system, you can install it in your MSYS2 environment with: |
| 76 | 76 | ||
| 77 | pacman -S git | 77 | pacman -S git |
| 78 | 78 | ||
| @@ -95,19 +95,22 @@ Savannah Emacs site, https://savannah.gnu.org/projects/emacs. | |||
| 95 | The Emacs ftp site is located at https://ftp.gnu.org/gnu/emacs/ - download the | 95 | The Emacs ftp site is located at https://ftp.gnu.org/gnu/emacs/ - download the |
| 96 | version you want to build and put the file into a location like C:\emacs\, | 96 | version you want to build and put the file into a location like C:\emacs\, |
| 97 | then uncompress it with tar. This will put the Emacs source into a folder like | 97 | then uncompress it with tar. This will put the Emacs source into a folder like |
| 98 | C:\emacs\emacs-24.5: | 98 | C:\emacs\emacs-29.1: |
| 99 | 99 | ||
| 100 | cd /c/emacs | 100 | cd /c/emacs |
| 101 | tar xJf emacs-24.5.tar.xz | 101 | tar xJf emacs-29.1.tar.xz |
| 102 | 102 | ||
| 103 | ** From the Git repository | 103 | ** From the Git repository |
| 104 | 104 | ||
| 105 | To download the Git repository, do something like the following -- this will | 105 | To clone the Git repository, do something like the following -- this will |
| 106 | put the Emacs source into C:\emacs\emacs-26: | 106 | put the Emacs source into C:\emacs\emacs-master: |
| 107 | 107 | ||
| 108 | mkdir /c/emacs | 108 | mkdir /c/emacs |
| 109 | cd /c/emacs | 109 | cd /c/emacs |
| 110 | git clone git://git.sv.gnu.org/emacs.git emacs-26 | 110 | git clone git://git.sv.gnu.org/emacs.git emacs-master |
| 111 | |||
| 112 | This will produce the development sources, i.e. the master branch of | ||
| 113 | the Emacs Git repository, in the directory C:\emacs\emacs-master. | ||
| 111 | 114 | ||
| 112 | (We recommend using the command shown on Savannah Emacs project page.) | 115 | (We recommend using the command shown on Savannah Emacs project page.) |
| 113 | 116 | ||
| @@ -116,11 +119,12 @@ put the Emacs source into C:\emacs\emacs-26: | |||
| 116 | Now you're ready to build and install Emacs with autogen, configure, make, | 119 | Now you're ready to build and install Emacs with autogen, configure, make, |
| 117 | and make install. | 120 | and make install. |
| 118 | 121 | ||
| 119 | cd /c/emacs/emacs-26 | 122 | cd /c/emacs/emacs-29.1 (if building a source tarball) |
| 123 | cd /c/emacs/emacs-master (if building from Git) | ||
| 120 | 124 | ||
| 121 | ** Run autogen | 125 | ** Run autogen |
| 122 | 126 | ||
| 123 | If you are building the development sources, run autogen to generate the | 127 | If you are building from Git, run autogen to generate the |
| 124 | configure script (note: this step is not necessary if you are using a | 128 | configure script (note: this step is not necessary if you are using a |
| 125 | release source tarball, as the configure file is included): | 129 | release source tarball, as the configure file is included): |
| 126 | 130 | ||
| @@ -132,15 +136,16 @@ Now you can run configure, which will build the various Makefiles -- note | |||
| 132 | that the example given here is just a simple one - for more information | 136 | that the example given here is just a simple one - for more information |
| 133 | on the options available please see the INSTALL file in this directory. | 137 | on the options available please see the INSTALL file in this directory. |
| 134 | 138 | ||
| 135 | The '--prefix' option specifies a location for the resulting binary files, | 139 | The '--prefix' option specifies a location for the resulting binary |
| 136 | which 'make install' will use - in this example we set it to C:\emacs\emacs-26. | 140 | files, which 'make install' will use - in this example we set it to |
| 137 | If a prefix is not specified the files will be put in the standard Unix | 141 | C:\programs\emacs. If a prefix is not specified the files will be put |
| 138 | directories located in your C:\msys64 directory, but this is not recommended. | 142 | in the standard Unix directories located in your C:\msys64 directory, |
| 143 | but this is not recommended. | ||
| 139 | 144 | ||
| 140 | Note also that we need to disable D-Bus because Emacs does not yet | 145 | Note also that we need to disable D-Bus because Emacs does not yet |
| 141 | support them on Windows. | 146 | support them on Windows. |
| 142 | 147 | ||
| 143 | ./configure --prefix=/c/emacs/emacs-26 --without-dbus | 148 | ./configure --prefix=/c/programs/emacs --without-dbus |
| 144 | 149 | ||
| 145 | ** Run make | 150 | ** Run make |
| 146 | 151 | ||
diff --git a/src/process.c b/src/process.c index 5144c5d6c92..cab8a1d5cf2 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -6795,10 +6795,13 @@ emacs_get_tty_pgrp (struct Lisp_Process *p) | |||
| 6795 | 6795 | ||
| 6796 | DEFUN ("process-running-child-p", Fprocess_running_child_p, | 6796 | DEFUN ("process-running-child-p", Fprocess_running_child_p, |
| 6797 | Sprocess_running_child_p, 0, 1, 0, | 6797 | Sprocess_running_child_p, 0, 1, 0, |
| 6798 | doc: /* Return non-nil if PROCESS has given the terminal to a | 6798 | doc: /* Return non-nil if PROCESS has given control of its terminal to a child. |
| 6799 | child. If the operating system does not make it possible to find out, | 6799 | If the operating system does not make it possible to find out, return t. |
| 6800 | return t. If we can find out, return the numeric ID of the foreground | 6800 | If it's possible to find out, return the numeric ID of the foreground |
| 6801 | process group. */) | 6801 | process group if PROCESS did give control of its terminal to a |
| 6802 | child process, and return nil if it didn't. | ||
| 6803 | |||
| 6804 | PROCESS must be a real subprocess, not a connection. */) | ||
| 6802 | (Lisp_Object process) | 6805 | (Lisp_Object process) |
| 6803 | { | 6806 | { |
| 6804 | /* Initialize in case ioctl doesn't exist or gives an error, | 6807 | /* Initialize in case ioctl doesn't exist or gives an error, |