aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2024-09-07 06:25:15 -0400
committerEli Zaretskii2024-09-07 06:25:15 -0400
commit6dcd3d24045113fb0afec0d7f43e322c9baa06ab (patch)
tree4c14a10f8c558b2086c53ae822109c7da127078e
parent358208dfaa374cc71c4a1c081c2d5bff9127c55a (diff)
parentb420e149b1ebc41dd183ab460930d78321e2e339 (diff)
downloademacs-6dcd3d24045113fb0afec0d7f43e322c9baa06ab.tar.gz
emacs-6dcd3d24045113fb0afec0d7f43e322c9baa06ab.zip
Merge from origin/emacs-30
b420e149b1e Fix a typo in ediff-init.el e1304e9b1bb Fix 'chart-space-usage' on MS-Windows 04c44405bf6 Fix alignment and documentation of vtable.el 4d6fadb8d21 ; * lisp/which-key.el: Fix ':package-version' (bug#73072). 54071b9cef2 ; Improve doc strings of 'tab-bar-mode' and 'tab-line-mode' 87a8b12a0c4 Fix test failure in erc-networks-tests dad0935cfcb ; * doc/emacs/building.texi (Lisp Libraries): Update (bug... e4dc6711b02 Fix :hook in 'use-package' c1cd036d27a ; * doc/lispref/modes.texi (Mode Line Data): Fox wording. ae2463796f2 ; Caveats about using :eval in 'mode-line-format' 4047072c7d8 Update FSF's address 24f12bdd77e Support the new option in ruby-ts-mode too 6c15b7710d4 Add new option ruby-bracketed-args-indent 7799ef43354 Fix Rmail base64 and qp decoding of MIME payloads 0def396fa8f Update to Org 9.7.11 8c044bd9726 ; Fix recent changes in documentation e0d8879bcd5 * test/lisp/emacs-lisp/tabulated-list-tests.el: Add missi... 4ff4b78f922 ; Small doc fixes da980ad838e ; Reword some "allows Xing" 2ca7d5649c6 ; More accurate text about how `equal` compares various o... # Conflicts: # etc/NEWS
-rw-r--r--doc/emacs/anti.texi2
-rw-r--r--doc/emacs/building.texi6
-rw-r--r--doc/emacs/dired.texi6
-rw-r--r--doc/emacs/emacs.texi8
-rw-r--r--doc/emacs/mini.texi9
-rw-r--r--doc/emacs/programs.texi2
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi8
-rw-r--r--doc/lispref/elisp.texi4
-rw-r--r--doc/lispref/minibuf.texi4
-rw-r--r--doc/lispref/modes.texi5
-rw-r--r--doc/lispref/objects.texi10
-rw-r--r--doc/lispref/positions.texi11
-rw-r--r--doc/misc/efaq.texi2
-rw-r--r--doc/misc/org.org4
-rw-r--r--doc/misc/vtable.texi19
-rw-r--r--etc/NEWS.2910
-rw-r--r--etc/NEWS.3038
-rw-r--r--etc/ORG-NEWS20
-rw-r--r--etc/refcards/orgcard.tex2
-rw-r--r--etc/tutorials/TUTORIAL.eo4
-rw-r--r--lisp/elide-head.el2
-rw-r--r--lisp/emacs-lisp/chart.el71
-rw-r--r--lisp/emacs-lisp/vtable.el28
-rw-r--r--lisp/mail/rmailmm.el12
-rw-r--r--lisp/org/ob-gnuplot.el3
-rw-r--r--lisp/org/org-version.el4
-rw-r--r--lisp/org/org.el2
-rw-r--r--lisp/org/ox.el7
-rw-r--r--lisp/progmodes/ruby-mode.el23
-rw-r--r--lisp/progmodes/ruby-ts-mode.el10
-rw-r--r--lisp/tab-bar.el14
-rw-r--r--lisp/tab-line.el10
-rw-r--r--lisp/textmodes/page-ext.el4
-rw-r--r--lisp/use-package/use-package-core.el17
-rw-r--r--lisp/vc/ediff-init.el2
-rw-r--r--lisp/vc/vc-git.el6
-rw-r--r--lisp/which-key.el124
-rw-r--r--test/lisp/emacs-lisp/tabulated-list-tests.el27
-rw-r--r--test/lisp/erc/erc-networks-tests.el2
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-bracketed-args-indent.rb42
-rw-r--r--test/lisp/progmodes/ruby-mode-tests.el1
-rw-r--r--test/lisp/progmodes/ruby-ts-mode-tests.el1
42 files changed, 407 insertions, 179 deletions
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index 97110dc8cdb..f64dd104f60 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -71,7 +71,7 @@ tool bars on the bottom. For the same reasons @code{modifier-bar-mode}
71is now gone. 71is now gone.
72 72
73@item 73@item
74The command @code{recover-file} no longer allows displaying the diffs 74The command @code{recover-file} no longer lets you display the diffs
75between a file and its auto-save file. You either want to recover a 75between a file and its auto-save file. You either want to recover a
76file or you don't; confusing users with a third alternative when they 76file or you don't; confusing users with a third alternative when they
77are anxious already by the possibility of losing precious edits is 77are anxious already by the possibility of losing precious edits is
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 1b079c2cef9..bb03d8cf325 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -1689,9 +1689,9 @@ command or function is invoked. For example:
1689 1689
1690 Note that installing a package using @code{package-install} 1690 Note that installing a package using @code{package-install}
1691(@pxref{Package Installation}) takes care of placing the package's 1691(@pxref{Package Installation}) takes care of placing the package's
1692Lisp files in a directory where Emacs will find it, and also writes 1692Lisp files in a directory where Emacs will find it, and also extends
1693the necessary initialization code into your init files, making the 1693@code{load-path} as needed, making the above manual customizations
1694above manual customizations unnecessary. 1694unnecessary for such packages.
1695 1695
1696@node Lisp Eval 1696@node Lisp Eval
1697@section Evaluating Emacs Lisp Expressions 1697@section Evaluating Emacs Lisp Expressions
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index cf57350743f..88638190d7f 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -816,9 +816,9 @@ Like the other commands in this section, this command operates on the
816@findex dired-do-open 816@findex dired-do-open
817@kindex E @r{(Dired)} 817@kindex E @r{(Dired)}
818@item E 818@item E
819``Open'' the specified files using an external program. The program is 819``Open'' the specified files using an external program (@code{dired-do-open}).
820selected according to the system conventions, as determined by the 820The program is selected according to the system conventions, as
821variable @code{shell-command-guess-open}. 821determined by the variable @code{shell-command-guess-open}.
822 822
823@findex dired-do-rename 823@findex dired-do-rename
824@kindex R @r{(Dired)} 824@kindex R @r{(Dired)}
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index fc22e8d7296..5932af301f9 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -89,8 +89,8 @@ developing GNU and promoting software freedom.''
89 89
90@sp 2 90@sp 2
91Published by the Free Software Foundation @* 91Published by the Free Software Foundation @*
9251 Franklin Street, Fifth Floor @* 9231 Milk Street, # 960789 @*
93Boston, MA 02110-1301 USA @* 93Boston, MA 02196 @*
94ISBN 978-0-9831592-8-5 94ISBN 978-0-9831592-8-5
95 95
96@sp 2 96@sp 2
@@ -1432,8 +1432,8 @@ If you need to contact the Free Software Foundation, see
1432 1432
1433@display 1433@display
1434Free Software Foundation 1434Free Software Foundation
143551 Franklin Street, Fifth Floor 143531 Milk Street # 960789
1436Boston, MA 02110-1301 1436Boston, MA 02196
1437USA 1437USA
1438@end display 1438@end display
1439 1439
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index 6b604412e88..8a13cabb837 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -711,10 +711,11 @@ completions list buffer, and the second one will switch to it.
711 When the window showing the completions is selected, either because 711 When the window showing the completions is selected, either because
712you customized @code{completion-auto-select} or because you switched to 712you customized @code{completion-auto-select} or because you switched to
713it by typing @kbd{C-x o}, the @kbd{@key{UP}} and @kbd{@key{DOWN}} arrow 713it by typing @kbd{C-x o}, the @kbd{@key{UP}} and @kbd{@key{DOWN}} arrow
714keys move by lines between completion candidates; with a prefix numeric 714keys (@code{previous-line-completion} and @code{next-line-completion},
715argument, they move that many lines. If @code{completion-auto-wrap} is 715respectively) move by lines between completion candidates; with a prefix
716non-@code{nil}, these commands will wrap at bottom and top of the 716numeric argument, they move that many lines. If
717candidate list. 717@code{completion-auto-wrap} is non-@code{nil}, these commands will wrap
718at bottom and top of the candidate list.
718 719
719@vindex completion-cycle-threshold 720@vindex completion-cycle-threshold
720 If @code{completion-cycle-threshold} is non-@code{nil}, completion 721 If @code{completion-cycle-threshold} is non-@code{nil}, completion
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index 3b863eefd72..42b57143bf1 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1430,7 +1430,7 @@ line shows how many manual pages are available.
1430@vindex Man-prefer-synchronous-call 1430@vindex Man-prefer-synchronous-call
1431 By default, @kbd{M-x man} calls the @code{man} program 1431 By default, @kbd{M-x man} calls the @code{man} program
1432asynchronously. You can force the invocation to be synchronous by 1432asynchronously. You can force the invocation to be synchronous by
1433customizing @code{Man-prefer-synchronous-calls} to a non-@code{nil} 1433customizing @code{Man-prefer-synchronous-call} to a non-@code{nil}
1434value. 1434value.
1435 1435
1436@vindex Man-support-remote-systems 1436@vindex Man-support-remote-systems
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index bc4dc31bf4c..49916235fbf 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -125,8 +125,8 @@ Published by the:@*
125GNU Press, @hfill @uref{https://www.fsf.org/licensing/gnu-press/}@* 125GNU Press, @hfill @uref{https://www.fsf.org/licensing/gnu-press/}@*
126a division of the @hfill email: @email{sales@@fsf.org}@* 126a division of the @hfill email: @email{sales@@fsf.org}@*
127Free Software Foundation, Inc. @hfill Tel: +1 (617) 542-5942@* 127Free Software Foundation, Inc. @hfill Tel: +1 (617) 542-5942@*
12851 Franklin Street, Fifth Floor @hfill Fax: +1 (617) 542-2652@* 12831 Milk Street, # 960789 @hfill Fax: +1 (617) 542-2652@*
129Boston, MA 02110-1301 USA 129Boston, MA 02196 USA
130@end iftex 130@end iftex
131 131
132@ifnottex 132@ifnottex
@@ -136,8 +136,8 @@ Printed copies available from @uref{https://shop.fsf.org/}. Published by:
136GNU Press, https://www.fsf.org/licensing/gnu-press/ 136GNU Press, https://www.fsf.org/licensing/gnu-press/
137a division of the email: sales@@fsf.org 137a division of the email: sales@@fsf.org
138Free Software Foundation, Inc. Tel: +1 (617) 542-5942 138Free Software Foundation, Inc. Tel: +1 (617) 542-5942
13951 Franklin Street, Fifth Floor Fax: +1 (617) 542-2652 13931 Milk Street, # 960789 Fax: +1 (617) 542-2652
140Boston, MA 02110-1301 USA 140Boston, MA 02196 USA
141@end example 141@end example
142@end ifnottex 142@end ifnottex
143 143
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index f464bcfe94f..1ce89c6431f 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -140,8 +140,8 @@ developing GNU and promoting software freedom.''
140 140
141@sp 2 141@sp 2
142Published by the Free Software Foundation @* 142Published by the Free Software Foundation @*
14351 Franklin St, Fifth Floor @* 14331 Milk Street, # 960789 @*
144Boston, MA 02110-1301 @* 144Boston, MA 02196 @*
145USA @* 145USA @*
146ISBN 1-882114-74-4 146ISBN 1-882114-74-4
147 147
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 73ff170401e..f0b7fef30c7 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -1910,8 +1910,8 @@ pairs. The following properties are supported:
1910@item :category 1910@item :category
1911The value should be a symbol describing what kind of text the 1911The value should be a symbol describing what kind of text the
1912completion function is trying to complete. If the symbol matches one 1912completion function is trying to complete. If the symbol matches one
1913of the keys in @code{completion-category-overrides}, the usual 1913of the keys in @code{completion-category-overrides} described above,
1914completion behavior is overridden. @xref{Completion Variables}. 1914the usual completion behavior is overridden.
1915 1915
1916@item :annotation-function 1916@item :annotation-function
1917The value should be a function to add annotations in the completions 1917The value should be a function to add annotations in the completions
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 27b74a9d233..ddb6c4bf2fb 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -2227,8 +2227,9 @@ construct.)
2227@item (:eval @var{form}) 2227@item (:eval @var{form})
2228A list whose first element is the symbol @code{:eval} says to evaluate 2228A list whose first element is the symbol @code{:eval} says to evaluate
2229@var{form}, and use the result as a string to display. Make sure this 2229@var{form}, and use the result as a string to display. Make sure this
2230evaluation cannot load any files, as doing so could cause infinite 2230evaluation neither loads any files nor calls functions like
2231recursion. 2231@code{posn-at-point} or @code{window-in-direction}, which themselves
2232evaluate the mode line, as doing so could cause infinite recursion.
2232 2233
2233@item (:propertize @var{elt} @var{props}@dots{}) 2234@item (:propertize @var{elt} @var{props}@dots{})
2234A list whose first element is the symbol @code{:propertize} says to 2235A list whose first element is the symbol @code{:propertize} says to
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 399a1d169c2..34ea7cf4996 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -2413,10 +2413,12 @@ the converse is not always true.
2413@end group 2413@end group
2414@end example 2414@end example
2415 2415
2416The @code{equal} function recursively compares the contents of objects 2416The @code{equal} function compares strings and bool-vectors by value.
2417if they are integers, strings, markers, lists, cons cells, vectors, 2417Numbers are compared by type and numeric value, using @code{eql}.
2418bool-vectors, byte-code function objects, char-tables, records, or font 2418Lists, cons cells, vectors, records, markers, char-tables, font objects,
2419objects. 2419and function objects (closures)@footnote{However, equality of distinct
2420function objects cannot be guaranteed in general.} are compared
2421recursively by using @code{equal} on their constituent parts.
2420 2422
2421Comparison of strings is case-sensitive, but does not take account of 2423Comparison of strings is case-sensitive, but does not take account of
2422text properties---it compares only the characters in the strings. 2424text properties---it compares only the characters in the strings.
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 37cfe264157..d813fc6b20e 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -788,6 +788,14 @@ other kinds, such as words and string constants.
788---------- Buffer: foo ---------- 788---------- Buffer: foo ----------
789@end group 789@end group
790@end example 790@end example
791
792@vindex forward-sexp-function
793@code{forward-sexp} calls the function that is the value of the variable
794@code{forward-sexp-function}, if that is non-@code{nil}, to do the
795actual work, passing it the same arguments as those with which the
796command was called. Major modes can define their own functions for
797moving over balanced expressions as appropriate for the mode, and set
798this variable to that function.
791@end deffn 799@end deffn
792 800
793@deffn Command backward-sexp &optional arg 801@deffn Command backward-sexp &optional arg
@@ -898,7 +906,8 @@ If Emacs is compiled with tree-sitter, it can use the tree-sitter
898parser information to move across syntax constructs. Since what 906parser information to move across syntax constructs. Since what
899exactly is considered a sexp varies between languages, a major mode 907exactly is considered a sexp varies between languages, a major mode
900should set @code{treesit-thing-settings} to determine that. Then 908should set @code{treesit-thing-settings} to determine that. Then
901the mode can get navigation-by-sexp functionality for free, by using 909@code{forward-sexp-function} will be set to @code{treesit-forward-sexp},
910and the mode can get navigation-by-sexp functionality for free, by using
902@code{forward-sexp} and @code{backward-sexp}(@pxref{Expressions, 911@code{forward-sexp} and @code{backward-sexp}(@pxref{Expressions,
903,, emacs, The extensible self-documenting text editor}). 912,, emacs, The extensible self-documenting text editor}).
904 913
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 521361250b8..c0e78966d45 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -954,7 +954,7 @@ used.
954@item 954@item
955New major modes based on the 955New major modes based on the
956@uref{https://tree-sitter.github.io/tree-sitter/, tree-sitter library} 956@uref{https://tree-sitter.github.io/tree-sitter/, tree-sitter library}
957library for editing Elixir, HTML, Lua, HEEx, and PHP. 957library for editing Elixir, HEEx, HTML, Lua, and PHP.
958 958
959@item 959@item
960Support for the EditorConfig standard has been added, an editor-neutral 960Support for the EditorConfig standard has been added, an editor-neutral
diff --git a/doc/misc/org.org b/doc/misc/org.org
index dcc1ddc7f44..e595d0be195 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -3788,8 +3788,8 @@ argument.
3788 3788
3789With the above setting, you could link to a specific bug with 3789With the above setting, you could link to a specific bug with
3790=[[bugzilla:129]]=, search the web for =OrgMode= with =[[duckduckgo:OrgMode]]=, 3790=[[bugzilla:129]]=, search the web for =OrgMode= with =[[duckduckgo:OrgMode]]=,
3791show the map location of the Free Software Foundation =[[gmap:51 3791show the map location of the Free Software Foundation =[[omap:31
3792Franklin Street, Boston]]= or of Carsten office =[[omap:Science Park 904, 3792Milk Street, Boston]]= or of Carsten's office =[[omap:Science Park 904,
3793Amsterdam, The Netherlands]]= and find out what the Org author is doing 3793Amsterdam, The Netherlands]]= and find out what the Org author is doing
3794besides Emacs hacking with =[[ads:Dominik,C]]=. 3794besides Emacs hacking with =[[ads:Dominik,C]]=.
3795 3795
diff --git a/doc/misc/vtable.texi b/doc/misc/vtable.texi
index 2e0adfb235a..795d7fad037 100644
--- a/doc/misc/vtable.texi
+++ b/doc/misc/vtable.texi
@@ -337,7 +337,9 @@ width (in pixels), and @var{table} is the table.
337@end defun 337@end defun
338 338
339@item align 339@item align
340Should be either @code{right} or @code{left}. 340Should be either @code{right} or @code{left}. If not specified,
341numerical values will be flushed to the right, and all other values will
342be flushed to the left.
341@end table 343@end table
342 344
343@item :getter 345@item :getter
@@ -426,14 +428,19 @@ current line, they can use the @code{vtable-current-object} function
426(@pxref{Interface Functions}) to determine what that object is. 428(@pxref{Interface Functions}) to determine what that object is.
427 429
428@item :separator-width 430@item :separator-width
429The width of the blank space between columns. 431The width of the blank space between columns. If not specified, it
432defaults to 1.
430 433
431@item :divider-width 434@item :divider-width
432@itemx :divider 435@itemx :divider
433You can have a divider inserted between the columns. This can either 436You can have a divider inserted between the columns. This can either be
434be specified by using @code{:divider}, which should be a string to be 437specified by using @code{:divider}, which should be a string to be
435displayed between the columns, or @code{:divider-width}, which 438displayed between the columns, or @code{:divider-width}, which specifies
436specifies the width of the space to be used as the divider. 439the width of the space to be used as the divider, in units of characters
440of the face used to display the table. If not specified,
441@code{:divider} defaults to @code{nil}, but specifying
442@code{:divider-width} effectively sets the divider to a whitespace
443string of that width.
437 444
438@item :sort-by 445@item :sort-by
439This should be a list of tuples, and specifies how the table is to be 446This should be a list of tuples, and specifies how the table is to be
diff --git a/etc/NEWS.29 b/etc/NEWS.29
index bd893c04446..d213c4b8010 100644
--- a/etc/NEWS.29
+++ b/etc/NEWS.29
@@ -2032,7 +2032,7 @@ The intention is that this command can be used to access a wide
2032variety of version control system-specific functionality from VC 2032variety of version control system-specific functionality from VC
2033without complexifying either the VC command set or the backend API. 2033without complexifying either the VC command set or the backend API.
2034 2034
2035*** 'C-x v v' in a diffs buffer allows committing only some of the changes. 2035*** 'C-x v v' in a diffs buffer lets you commit only some of the changes.
2036This command is intended to allow you to commit only some of the 2036This command is intended to allow you to commit only some of the
2037changes you have in your working tree. Begin by creating a buffer 2037changes you have in your working tree. Begin by creating a buffer
2038with the changes against the last commit, e.g. with 'C-x v D' 2038with the changes against the last commit, e.g. with 'C-x v D'
@@ -3529,8 +3529,8 @@ The variables 'connection-local-profile-alist' and
3529make it more convenient to inspect and modify them. 3529make it more convenient to inspect and modify them.
3530 3530
3531*** New function 'connection-local-update-profile-variables'. 3531*** New function 'connection-local-update-profile-variables'.
3532This function allows modifying the settings of an existing 3532You can use this to modify the settings of an existing connection-local
3533connection-local profile. 3533profile.
3534 3534
3535*** New macro 'with-connection-local-application-variables'. 3535*** New macro 'with-connection-local-application-variables'.
3536This macro works like 'with-connection-local-variables', but it allows 3536This macro works like 'with-connection-local-variables', but it allows
@@ -4046,8 +4046,8 @@ measured will be counted for the purpose of calculating the text
4046dimensions. 4046dimensions.
4047 4047
4048** 'window-text-pixel-size' understands a new meaning of FROM. 4048** 'window-text-pixel-size' understands a new meaning of FROM.
4049Specifying a cons as the FROM argument allows starting the measurement 4049The FROM argument can now be a cons, which means to start measuring text
4050of text from a specified amount of pixels above or below a position. 4050from a specified number of pixels above or below a position.
4051 4051
4052** 'window-body-width' and 'window-body-height' can use remapped faces. 4052** 'window-body-width' and 'window-body-height' can use remapped faces.
4053Specifying 'remap' as the PIXELWISE argument now checks if the default 4053Specifying 'remap' as the PIXELWISE argument now checks if the default
diff --git a/etc/NEWS.30 b/etc/NEWS.30
index 0766900a495..a61bdc4a7f3 100644
--- a/etc/NEWS.30
+++ b/etc/NEWS.30
@@ -380,11 +380,6 @@ It can be used to add, remove and reorder functions that change the
380appearance of every tab on the tab bar. 380appearance of every tab on the tab bar.
381 381
382--- 382---
383*** New user option 'tab-line-tabs-buffer-group-function'.
384It provides two choices to group tab buffers by major mode and by
385project name.
386
387---
388*** New hook 'tab-bar-tab-post-select-functions'. 383*** New hook 'tab-bar-tab-post-select-functions'.
389 384
390--- 385---
@@ -401,7 +396,7 @@ you want to use these keys for the commands 'previous-buffer' and
401'next-buffer'. 396'next-buffer'.
402 397
403--- 398---
404*** Default list of tabs is changed to support a fixed order. 399*** Default list of tab-line tabs is changed to support a fixed order.
405This means that 'tab-line-tabs-fixed-window-buffers', the new default 400This means that 'tab-line-tabs-fixed-window-buffers', the new default
406tabs function, is like the previous 'tab-line-tabs-window-buffers' where 401tabs function, is like the previous 'tab-line-tabs-window-buffers' where
407both of them show only buffers that were previously displayed in the 402both of them show only buffers that were previously displayed in the
@@ -411,7 +406,12 @@ these buffers. You can drag the tabs and release at a new position
411to manually reorder the buffers on the tab line. 406to manually reorder the buffers on the tab line.
412 407
413--- 408---
414*** Buffers on group tabs are now sorted alphabetically. 409*** New user option 'tab-line-tabs-buffer-group-function'.
410It provides two choices to group tab buffers by major mode and by
411project name.
412
413---
414*** Buffers on tab-line group tabs are now sorted alphabetically.
415This will keep the fixed order of tabs, even after switching between 415This will keep the fixed order of tabs, even after switching between
416them. 416them.
417 417
@@ -945,7 +945,7 @@ Customizing it to 'relativize' makes commands like 'project-find-file'
945and 'project-find-dir' display previous history entries relative to 945and 'project-find-dir' display previous history entries relative to
946the current project. 946the current project.
947 947
948-- 948---
949*** New user option 'project-key-prompt-style'. 949*** New user option 'project-key-prompt-style'.
950The look of the key prompt in the project switcher has been changed 950The look of the key prompt in the project switcher has been changed
951slightly. To get the previous one, set this option to 'brackets'. 951slightly. To get the previous one, set this option to 'brackets'.
@@ -1102,7 +1102,7 @@ in size.
1102 1102
1103+++ 1103+++
1104*** 'dired-listing-switches' handles connection-local values if exist. 1104*** 'dired-listing-switches' handles connection-local values if exist.
1105This allows customizing different switches for different remote machines. 1105This allows you to customize different switches for different remote machines.
1106 1106
1107** Ediff 1107** Ediff
1108 1108
@@ -1973,6 +1973,10 @@ By default it retains the previous behavior: read the contents of
1973Gemfile and act accordingly. But you can also set it to t or nil to 1973Gemfile and act accordingly. But you can also set it to t or nil to
1974skip the check. 1974skip the check.
1975 1975
1976*** New user option 'ruby-bracketed-args-indent'.
1977When it is set to nil, multiple consecutive open braces/brackets/parens
1978result in only one additional indentation level.
1979
1976** Thingatpt 1980** Thingatpt
1977 1981
1978--- 1982---
@@ -1993,12 +1997,7 @@ providers for "things" that are defined by text properties.
1993Now, calling '(thing-at-point 'url)' when point is on a bug reference 1997Now, calling '(thing-at-point 'url)' when point is on a bug reference
1994will return the URL for that bug. 1998will return the URL for that bug.
1995 1999
1996** Miscellaneous 2000** Buffer-menu
1997
1998+++
1999*** New user option 'rcirc-log-time-format'.
2000This allows for rcirc logs to use a custom timestamp format, which the
2001chat buffers use by default.
2002 2001
2003--- 2002---
2004*** New user option 'Buffer-menu-group-by'. 2003*** New user option 'Buffer-menu-group-by'.
@@ -2013,6 +2012,13 @@ that is, buffers not visiting a file and whose names start with a space.
2013Previously, such buffers were never shown. This command is bound to 'I' 2012Previously, such buffers were never shown. This command is bound to 'I'
2014in Buffer Menu mode. 2013in Buffer Menu mode.
2015 2014
2015** Miscellaneous
2016
2017+++
2018*** New user option 'rcirc-log-time-format'.
2019This allows for rcirc logs to use a custom timestamp format, which the
2020chat buffers use by default.
2021
2016--- 2022---
2017*** 'ffap-lax-url' now defaults to nil. 2023*** 'ffap-lax-url' now defaults to nil.
2018Previously, it was set to t, but this broke remote file name detection. 2024Previously, it was set to t, but this broke remote file name detection.
@@ -2506,7 +2512,7 @@ sorts by the return value of 'age', then by 'size', then by 'cost'.
2506The old signature, '(sort SEQ PREDICATE)', can still be used and sorts 2512The old signature, '(sort SEQ PREDICATE)', can still be used and sorts
2507its input in-place as before. 2513its input in-place as before.
2508 2514
2509** New API for 'derived-mode-p' and control of the graph of major modes. 2515** New API for 'derived-mode-p' and control of the graph of major modes
2510 2516
2511+++ 2517+++
2512*** 'derived-mode-p' now takes the list of modes as a single argument. 2518*** 'derived-mode-p' now takes the list of modes as a single argument.
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 22212fa6d07..eeab970e3e1 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -284,6 +284,26 @@ respected.
284Images dropped also respect the value of ~org-yank-image-save-method~ 284Images dropped also respect the value of ~org-yank-image-save-method~
285when ~org-yank-dnd-method~ is =attach=. 285when ~org-yank-dnd-method~ is =attach=.
286 286
287*** Alignment of image previews can be customized
288
289Previously, all the image previews where always left-aligned.
290
291Now, you can customize image previews to be left-aligned, centered, or right-aligned.
292
293The customization can be done globally, via ~org-image-align~, or per
294image, using =#+attr_...:=. Example:
295
296: #+attr_org: :align center
297: [[/path/to/image/file/png]]
298:
299: or
300:
301: #+attr_org: :center t
302: [[/path/to/image/file/png]]
303
304When =#+attr_org= is not present, ~:align~ and ~:center~ attributes
305from other =#+attr_...:= keywords will be used.
306
287*** =id:= links support search options; ~org-id-store-link~ adds search option by default 307*** =id:= links support search options; ~org-id-store-link~ adds search option by default
288 308
289Adding search option by ~org-id-store-link~ can be disabled by setting 309Adding search option by ~org-id-store-link~ can be disabled by setting
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index 65e9caa26d2..1a525289987 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
1% Reference Card for Org Mode 1% Reference Card for Org Mode
2\def\orgversionnumber{9.7.10} 2\def\orgversionnumber{9.7.11}
3\def\versionyear{2024} % latest update 3\def\versionyear{2024} % latest update
4\input emacsver.tex 4\input emacsver.tex
5 5
diff --git a/etc/tutorials/TUTORIAL.eo b/etc/tutorials/TUTORIAL.eo
index 01423a04f50..633fa224c5d 100644
--- a/etc/tutorials/TUTORIAL.eo
+++ b/etc/tutorials/TUTORIAL.eo
@@ -1098,8 +1098,8 @@ kondiĉoj estas observataj:
1098 1098
1099 Ekzemplero de la GNUa Ĝenerala Publika Permesilo devas esti 1099 Ekzemplero de la GNUa Ĝenerala Publika Permesilo devas esti
1100 liverita al vi kun ĉi tiu programo; se vi ĝin ne ricevis, turnu vin 1100 liverita al vi kun ĉi tiu programo; se vi ĝin ne ricevis, turnu vin
1101 al: Free Software Foundation, Inc., 51 Franklin Street, Fifth 1101 al: Free Software Foundation, Inc., 31 Milk Street, # 960789,
1102 Floor, Boston, MA 02110-1301, USA. 1102 Boston, MA 02196, USA.
1103 1103
1104Bonvole legu la dosieron COPYING kaj sekve donu kopiojn de GNU Emakso 1104Bonvole legu la dosieron COPYING kaj sekve donu kopiojn de GNU Emakso
1105al viaj amikoj. Helpu ekstermi programaran obstrukcismon 1105al viaj amikoj. Helpu ekstermi programaran obstrukcismon
diff --git a/lisp/elide-head.el b/lisp/elide-head.el
index 808bf55a05f..800d2c27d35 100644
--- a/lisp/elide-head.el
+++ b/lisp/elide-head.el
@@ -68,7 +68,7 @@
68 "http" (? "s") "://www.gnu.org/licenses" 68 "http" (? "s") "://www.gnu.org/licenses"
69 (? "/") (? ">") (? " ")) 69 (? "/") (? ">") (? " "))
70 (seq "Boston," delim "MA" delim 70 (seq "Boston," delim "MA" delim
71 (or "02111-1307" "02110-1301" "02111-1301") 71 (or "02111-1307" "02110-1301" "02111-1301" "02196")
72 (? ",") delim 72 (? ",") delim
73 "USA") 73 "USA")
74 "675 Mass Ave, Cambridge, MA 02139, USA") 74 "675 Mass Ave, Cambridge, MA 02139, USA")
diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el
index da61e45213d..2ca9b64be33 100644
--- a/lisp/emacs-lisp/chart.el
+++ b/lisp/emacs-lisp/chart.el
@@ -641,27 +641,68 @@ SORT-PRED if desired."
641 (lambda (a b) (> (cdr a) (cdr b)))) 641 (lambda (a b) (> (cdr a) (cdr b))))
642 )) 642 ))
643 643
644;; This assumes 4KB blocks
645(defun chart--file-size (size)
646 (* (/ (+ size 4095) 4096) 4096))
647
648(defun chart--directory-size (dir)
649 "Compute total size of files in directory DIR and its subdirectories.
650DIR is assumed to be a directory, verified by the caller."
651 (let ((size 0))
652 (dolist (file (directory-files-recursively dir "." t))
653 (let ((fsize (nth 7 (file-attributes file))))
654 (if (> fsize 0)
655 (setq size
656 (+ size (chart--file-size fsize))))))
657 size))
658
644(defun chart-space-usage (d) 659(defun chart-space-usage (d)
645 "Display a top usage chart for directory D." 660 "Display a top usage chart for directory D."
646 (interactive "DDirectory: ") 661 (interactive "DDirectory: ")
647 (message "Collecting statistics...") 662 (message "Collecting statistics...")
648 (let ((nmlst nil) 663 (let ((nmlst nil)
649 (cntlst nil) 664 (cntlst nil)
650 (b (get-buffer-create " *du-tmp*"))) 665 b)
651 (set-buffer b) 666 (if (executable-find "du")
652 (erase-buffer) 667 (progn
653 (insert "cd " d ";du -sk * \n") 668 (setq b (get-buffer-create " *du-tmp*"))
654 (message "Running `cd %s;du -sk *'..." d) 669 (set-buffer b)
655 (call-process-region (point-min) (point-max) shell-file-name t 670 (erase-buffer)
656 (current-buffer) nil) 671 (if (and (memq system-type '(windows-nt ms-dos))
657 (goto-char (point-min)) 672 (fboundp 'w32-shell-dos-semantics)
658 (message "Scanning output ...") 673 (w32-shell-dos-semantics))
659 (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) 674 (progn
660 (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) 675 ;; With Windows shells, 'cd' does not change the drive,
661 (num (buffer-substring (match-beginning 1) (match-end 1)))) 676 ;; and ';' is not reliable for running multiple
662 (setq nmlst (cons nam nmlst) 677 ;; commands, so use alternatives. We quote the
663 ;; * 1000 to put it into bytes 678 ;; directory because otherwise pushd will barf on a
664 cntlst (cons (* (string-to-number num) 1000) cntlst)))) 679 ;; directory with forward slashes. Note that * will not
680 ;; skip dotfiles with Windows shells, unlike on Unix.
681 (insert "pushd \"" d "\" && du -sk * \n")
682 (message "Running `pushd \"%s\" && du -sk *'..." d))
683 (insert "cd " d ";du -sk * \n")
684 (message "Running `cd %s;du -sk *'..." d))
685 (call-process-region (point-min) (point-max) shell-file-name t
686 (current-buffer) nil)
687 (goto-char (point-min))
688 (message "Scanning output ...")
689 (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t)
690 (let* ((nam (buffer-substring (match-beginning 2) (match-end 2)))
691 (num (buffer-substring (match-beginning 1) (match-end 1))))
692 (setq nmlst (cons nam nmlst)
693 ;; * 1000 to put it into bytes
694 cntlst (cons (* (string-to-number num) 1000) cntlst)))))
695 (dolist (file (directory-files d t directory-files-no-dot-files-regexp))
696 (let ((fbase (file-name-nondirectory file)))
697 ;; Typical shells exclude files and subdirectories whose names
698 ;; begin with a period when it expands *, so we do the same.
699 (unless (string-match-p "\\`\\." fbase)
700 (setq nmlst (cons fbase nmlst))
701 (if (file-regular-p file)
702 (setq cntlst (cons (chart--file-size
703 (nth 7 (file-attributes file)))
704 cntlst))
705 (setq cntlst (cons (chart--directory-size file) cntlst)))))))
665 (if (not nmlst) 706 (if (not nmlst)
666 (error "No files found!")) 707 (error "No files found!"))
667 (chart-bar-quickie 'vertical (format "Largest files in %s" d) 708 (chart-bar-quickie 'vertical (format "Largest files in %s" d)
diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index cb7ea397314..d58c6894c16 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -722,15 +722,17 @@ This also updates the displayed table."
722 (vtable--limit-string 722 (vtable--limit-string
723 name (- (elt widths index) indicator-width)) 723 name (- (elt widths index) indicator-width))
724 name)) 724 name))
725 (let ((fill-width 725 (let* ((indicator-lead-width
726 (+ (- (elt widths index) 726 ;; We want the indicator to not be quite flush right.
727 (string-pixel-width displayed) 727 (/ (vtable--char-width table) 2.0))
728 indicator-width 728 (indicator-pad-width (- (vtable--char-width table)
729 (vtable-separator-width table) 729 indicator-lead-width))
730 ;; We want the indicator to not be quite flush 730 (fill-width
731 ;; right. 731 (+ (- (elt widths index)
732 (/ (vtable--char-width table) 2.0)) 732 (string-pixel-width displayed)
733 (if last 0 spacer)))) 733 indicator-width
734 indicator-lead-width)
735 (if last 0 spacer))))
734 (if (or (not last) 736 (if (or (not last)
735 (zerop indicator-width) 737 (zerop indicator-width)
736 (< (seq-reduce #'+ widths 0) (window-width nil t))) 738 (< (seq-reduce #'+ widths 0) (window-width nil t)))
@@ -739,7 +741,9 @@ This also updates the displayed table."
739 displayed 741 displayed
740 (propertize " " 'display 742 (propertize " " 'display
741 (list 'space :width (list fill-width))) 743 (list 'space :width (list fill-width)))
742 indicator) 744 indicator
745 (propertize " " 'display
746 (list 'space :width (list indicator-pad-width))))
743 ;; This is the final column, and we have a sorting 747 ;; This is the final column, and we have a sorting
744 ;; indicator, and the table is too wide for the window. 748 ;; indicator, and the table is too wide for the window.
745 (let* ((pre-indicator (string-pixel-width 749 (let* ((pre-indicator (string-pixel-width
@@ -758,10 +762,6 @@ This also updates the displayed table."
758 (list (- fill-width pre-fill)))))))) 762 (list (- fill-width pre-fill))))))))
759 (when (and divider (not last)) 763 (when (and divider (not last))
760 (insert (propertize divider 'keymap dmap))) 764 (insert (propertize divider 'keymap dmap)))
761 (insert (propertize
762 " " 'display
763 (list 'space :width (list
764 (/ (vtable--char-width table) 2.0)))))
765 (put-text-property start (point) 'vtable-column index))) 765 (put-text-property start (point) 'vtable-column index)))
766 (vtable-columns table)) 766 (vtable-columns table))
767 (insert "\n") 767 (insert "\n")
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index b4a0e92136e..a5ce5b65cd7 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -579,7 +579,11 @@ HEADER is a header component of a MIME-entity object (see
579 (ignore-errors (base64-decode-region pos (point)))) 579 (ignore-errors (base64-decode-region pos (point))))
580 ((string= transfer-encoding "quoted-printable") 580 ((string= transfer-encoding "quoted-printable")
581 (quoted-printable-decode-region pos (point)))))) 581 (quoted-printable-decode-region pos (point))))))
582 (decode-coding-region pos (point) coding-system) 582 (decode-coding-region
583 pos (point)
584 ;; Use -dos decoding, to remove ^M characters left from base64 or
585 ;; rogue qp-encoded text.
586 (coding-system-change-eol-conversion coding-system 1))
583 (if (and 587 (if (and
584 (or (not rmail-mime-coding-system) (consp rmail-mime-coding-system)) 588 (or (not rmail-mime-coding-system) (consp rmail-mime-coding-system))
585 (not (eq (coding-system-base coding-system) 'us-ascii))) 589 (not (eq (coding-system-base coding-system) 'us-ascii)))
@@ -691,7 +695,11 @@ HEADER is a header component of a MIME-entity object (see
691 (if (and (eq coding-system 'undecided) 695 (if (and (eq coding-system 'undecided)
692 (not (null coding-system-for-read))) 696 (not (null coding-system-for-read)))
693 (setq coding-system coding-system-for-read)))) 697 (setq coding-system coding-system-for-read))))
694 (decode-coding-region (point-min) (point) coding-system) 698 (decode-coding-region
699 (point-min) (point)
700 ;; Use -dos decoding, to remove ^M characters left from base64 or
701 ;; rogue qp-encoded text.
702 (coding-system-change-eol-conversion coding-system 1))
695 (if (and 703 (if (and
696 (or (not rmail-mime-coding-system) (consp rmail-mime-coding-system)) 704 (or (not rmail-mime-coding-system) (consp rmail-mime-coding-system))
697 (not (eq (coding-system-base coding-system) 'us-ascii))) 705 (not (eq (coding-system-base coding-system) 'us-ascii)))
diff --git a/lisp/org/ob-gnuplot.el b/lisp/org/ob-gnuplot.el
index 956763c587e..10192cb9a32 100644
--- a/lisp/org/ob-gnuplot.el
+++ b/lisp/org/ob-gnuplot.el
@@ -45,7 +45,6 @@
45 45
46(require 'ob) 46(require 'ob)
47(require 'org-macs) 47(require 'org-macs)
48(require 'ox-ascii)
49 48
50(declare-function org-time-string-to-time "org" (s)) 49(declare-function org-time-string-to-time "org" (s))
51(declare-function orgtbl-to-generic "org-table" (table params)) 50(declare-function orgtbl-to-generic "org-table" (table params))
@@ -295,6 +294,8 @@ then create one. Return the initialized session. The current
295 "Export TABLE to DATA-FILE in a format readable by gnuplot. 294 "Export TABLE to DATA-FILE in a format readable by gnuplot.
296Pass PARAMS through to `orgtbl-to-generic' when exporting TABLE." 295Pass PARAMS through to `orgtbl-to-generic' when exporting TABLE."
297 (require 'ox-org) 296 (require 'ox-org)
297 (require 'ox-ascii)
298 (declare-function org-export-create-backend "ox")
298 (with-temp-file data-file 299 (with-temp-file data-file
299 (insert (let ((org-babel-gnuplot-timestamp-fmt 300 (insert (let ((org-babel-gnuplot-timestamp-fmt
300 (or (plist-get params :timefmt) "%Y-%m-%d-%H:%M:%S")) 301 (or (plist-get params :timefmt) "%Y-%m-%d-%H:%M:%S"))
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 989fadf69fa..657d657d2ab 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
5(defun org-release () 5(defun org-release ()
6 "The release version of Org. 6 "The release version of Org.
7Inserted by installing Org mode or when a release is made." 7Inserted by installing Org mode or when a release is made."
8 (let ((org-release "9.7.10")) 8 (let ((org-release "9.7.11"))
9 org-release)) 9 org-release))
10;;;###autoload 10;;;###autoload
11(defun org-git-version () 11(defun org-git-version ()
12 "The Git version of Org mode. 12 "The Git version of Org mode.
13Inserted by installing Org or when a release is made." 13Inserted by installing Org or when a release is made."
14 (let ((org-git-version "release_9.7.10")) 14 (let ((org-git-version "release_9.7.11"))
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 26812bbfb29..5bee96fb0b5 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
9;; URL: https://orgmode.org 9;; URL: https://orgmode.org
10;; Package-Requires: ((emacs "26.1")) 10;; Package-Requires: ((emacs "26.1"))
11 11
12;; Version: 9.7.10 12;; Version: 9.7.11
13 13
14;; This file is part of GNU Emacs. 14;; This file is part of GNU Emacs.
15;; 15;;
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 1024bdc4bae..7cdf622ec44 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -156,8 +156,11 @@
156 (:cite-export "CITE_EXPORT" nil org-cite-export-processors)) 156 (:cite-export "CITE_EXPORT" nil org-cite-export-processors))
157 "Alist between export properties and ways to set them. 157 "Alist between export properties and ways to set them.
158 158
159The key of the alist is the property name, and the value is a list 159Each element of the alist is a list like
160like (KEYWORD OPTION DEFAULT BEHAVIOR) where: 160(ALIST-KEY KEYWORD OPTION DEFAULT BEHAVIOR)
161
162ALIST-KEY is the key of the alist - a symbol like `:option', and the
163value is (KEYWORD OPTION ...).
161 164
162KEYWORD is a string representing a buffer keyword, or nil. Each 165KEYWORD is a string representing a buffer keyword, or nil. Each
163 property defined this way can also be set, during subtree 166 property defined this way can also be set, during subtree
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 3bcfa9ee7df..d953ec8b25c 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -472,6 +472,26 @@ Only has effect when `ruby-use-smie' is t."
472 :safe 'booleanp 472 :safe 'booleanp
473 :version "29.1") 473 :version "29.1")
474 474
475(defcustom ruby-bracketed-args-indent t
476 "Non-nil to align the contents of bracketed arguments with the brackets.
477
478Example:
479
480 qux({
481 foo => bar
482 })
483
484Set it to nil to align to the beginning of the statement:
485
486 qux({
487 foo => bar
488 })
489
490Only has effect when `ruby-use-smie' is t."
491 :type 'boolean
492 :safe 'booleanp
493 :version "30.1")
494
475(defcustom ruby-deep-arglist t 495(defcustom ruby-deep-arglist t
476 "Deep indent lists in parenthesis when non-nil. 496 "Deep indent lists in parenthesis when non-nil.
477Also ignores spaces after parenthesis when `space'. 497Also ignores spaces after parenthesis when `space'.
@@ -826,6 +846,9 @@ This only affects the output of the command `ruby-toggle-block'."
826 )) 846 ))
827 (`(:before . ,(or "(" "[" "{")) 847 (`(:before . ,(or "(" "[" "{"))
828 (cond 848 (cond
849 ((and (not (eq ruby-bracketed-args-indent t))
850 (smie-rule-prev-p "," "(" "["))
851 (cons 'column (current-indentation)))
829 ((and (equal token "{") 852 ((and (equal token "{")
830 (not (smie-rule-prev-p "(" "{" "[" "," "=>" "=" "return" ";" "do")) 853 (not (smie-rule-prev-p "(" "{" "[" "," "=>" "=" "return" ";" "do"))
831 (save-excursion 854 (save-excursion
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index 5f4e11e0b4c..adcdf15c7ad 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -842,6 +842,16 @@ a statement container is a node that matches
842 ;; No paren/curly/brace found on the same line. 842 ;; No paren/curly/brace found on the same line.
843 ((< (treesit-node-start found) parent-bol) 843 ((< (treesit-node-start found) parent-bol)
844 parent-bol) 844 parent-bol)
845 ;; Nesting of brackets args.
846 ((and
847 (not (eq ruby-bracketed-args-indent t))
848 (string-match-p "\\`array\\|hash\\'" (treesit-node-type parent))
849 (equal (treesit-node-parent parent) found)
850 ;; Grandparent is not a parenless call.
851 (or (not (equal (treesit-node-type found) "argument_list"))
852 (equal (treesit-node-type (treesit-node-child found 0))
853 "(")))
854 parent-bol)
845 ;; Hash or array opener on the same line. 855 ;; Hash or array opener on the same line.
846 ((string-match-p "\\`array\\|hash\\'" (treesit-node-type found)) 856 ((string-match-p "\\`array\\|hash\\'" (treesit-node-type found))
847 (save-excursion 857 (save-excursion
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 80d66097bce..2efc2b8f85b 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -257,7 +257,15 @@ a list of frames to update."
257 "Tab Bar mode map.") 257 "Tab Bar mode map.")
258 258
259(define-minor-mode tab-bar-mode 259(define-minor-mode tab-bar-mode
260 "Toggle the tab bar in all graphical frames (Tab Bar mode)." 260 "Toggle the tab bar in all graphical frames (Tab Bar mode).
261
262When this mode is enabled, Emacs displays a tab bar on top of each frame.
263The tab bar is a row of tabs -- buttons that you can click
264to switch the frame between different window configurations.
265See `current-window-configuration' for more about window configurations.
266To add a button (which can then record one more window configuration),
267click on the \"+\" button. Clicking on the \"x\" icon of a button
268deletes the button."
261 :global t 269 :global t
262 ;; It's defined in C/cus-start, this stops the d-m-m macro defining it again. 270 ;; It's defined in C/cus-start, this stops the d-m-m macro defining it again.
263 :variable tab-bar-mode 271 :variable tab-bar-mode
@@ -1517,8 +1525,8 @@ in the same window to give information about the killed buffer."
1517 1525
1518(defun tab-bar-select-restore-windows (_frame windows _type) 1526(defun tab-bar-select-restore-windows (_frame windows _type)
1519 "Display a placeholder buffer in the window whose buffer was killed. 1527 "Display a placeholder buffer in the window whose buffer was killed.
1520A button in the window allows restoring the killed buffer, 1528There is a button in the window which you can press to restore the
1521if it was visiting a file." 1529killed buffer, if that buffer was visiting a file."
1522 (dolist (quad windows) 1530 (dolist (quad windows)
1523 (when (window-live-p (nth 0 quad)) 1531 (when (window-live-p (nth 0 quad))
1524 (let* ((window (nth 0 quad)) 1532 (let* ((window (nth 0 quad))
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index 462a0a27692..92b52b6936c 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -1141,7 +1141,15 @@ However, return the correct mouse position list if EVENT is a
1141 1141
1142;;;###autoload 1142;;;###autoload
1143(define-minor-mode tab-line-mode 1143(define-minor-mode tab-line-mode
1144 "Toggle display of tab line in the windows displaying the current buffer." 1144 "Toggle display of tab line in the windows displaying the current buffer.
1145
1146When this mode is enabled, each window displays a tab line on its
1147top screen line. The tab line is a row of tabs -- buttons which
1148you can click to have the window display the buffer whose name is
1149shown on the button. Clicking on the \"x\" icon of the button
1150removes the button (but does not kill the corresponding buffer).
1151In addition, the tab line shows a \"+\" button which adds a new
1152button, so you could have one more buffer shown on the tab line."
1145 :lighter nil 1153 :lighter nil
1146 (let ((default-value '(:eval (tab-line-format)))) 1154 (let ((default-value '(:eval (tab-line-format))))
1147 ;; Preserve the existing tab-line set outside of this mode 1155 ;; Preserve the existing tab-line set outside of this mode
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index 1681f86b343..7a225ff7338 100644
--- a/lisp/textmodes/page-ext.el
+++ b/lisp/textmodes/page-ext.el
@@ -119,8 +119,8 @@
119;; 119;;
120;; FSF 120;; FSF
121;; Free Software Foundation 121;; Free Software Foundation
122;; 51 Franklin Street, Fifth Floor 122;; 31 Milk Street, # 960789
123;; Boston, MA 02110-1301 USA. 123;; Boston, MA 02196 USA.
124;; (617) 542-5942 124;; (617) 542-5942
125;; gnu@gnu.org 125;; gnu@gnu.org
126;; 126;;
diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el
index 85091b8338b..1b9a4332f25 100644
--- a/lisp/use-package/use-package-core.el
+++ b/lisp/use-package/use-package-core.el
@@ -1415,13 +1415,16 @@ enable gathering statistics."
1415 (when fun 1415 (when fun
1416 (mapcar 1416 (mapcar
1417 #'(lambda (sym) 1417 #'(lambda (sym)
1418 (if (boundp sym) 1418 (let ((symname (symbol-name sym)))
1419 `(add-hook (quote ,sym) (function ,fun)) 1419 (if (and (boundp sym)
1420 `(add-hook 1420 ;; Mode variables are usually bound, but
1421 (quote ,(intern 1421 ;; their hooks are named FOO-mode-hook.
1422 (concat (symbol-name sym) 1422 (not (string-suffix-p "-mode" symname)))
1423 use-package-hook-name-suffix))) 1423 `(add-hook (quote ,sym) (function ,fun))
1424 (function ,fun)))) 1424 `(add-hook
1425 (quote ,(intern
1426 (concat symname use-package-hook-name-suffix)))
1427 (function ,fun)))))
1425 (use-package-hook-handler-normalize-mode-symbols syms))))) 1428 (use-package-hook-handler-normalize-mode-symbols syms)))))
1426 (use-package-normalize-commands args)))) 1429 (use-package-normalize-commands args))))
1427 1430
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index 1b478d3f9b7..72dae9b678f 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -1451,7 +1451,7 @@ This default should work without changes."
1451 (ediff-abbreviate-file-name (file-name-directory dir)))) 1451 (ediff-abbreviate-file-name (file-name-directory dir))))
1452 1452
1453(defsubst ediff-nonempty-string-p (string) 1453(defsubst ediff-nonempty-string-p (string)
1454 (and (stringp string) (string-empty-p string))) 1454 (and (stringp string) (not (string-empty-p string))))
1455 1455
1456(defun ediff-abbrev-jobname (jobname) 1456(defun ediff-abbrev-jobname (jobname)
1457 (cond ((eq jobname 'ediff-directories) 1457 (cond ((eq jobname 'ediff-directories)
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 3ae08a59105..76388211545 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1459,9 +1459,9 @@ the file renames. The downsides is that the log produced this
1459way may omit certain (merge) commits, and that `log-view-diff' 1459way may omit certain (merge) commits, and that `log-view-diff'
1460fails on commits that used the previous name, in that log buffer. 1460fails on commits that used the previous name, in that log buffer.
1461 1461
1462When this variable is nil, and the log ends with a rename, we 1462When this variable is nil, and the log ends with a rename, there is a
1463show a button below that which allows showing the log for the 1463button which you can press to show the log for the file name before the
1464file name before the rename." 1464rename."
1465 :type 'boolean 1465 :type 'boolean
1466 :version "26.1") 1466 :version "26.1")
1467 1467
diff --git a/lisp/which-key.el b/lisp/which-key.el
index f3f437eb7d2..208f90b3d46 100644
--- a/lisp/which-key.el
+++ b/lisp/which-key.el
@@ -70,7 +70,7 @@ This makes it possible to shorten the delay for subsequent popups
70in the same key sequence. The default is for this value to be 70in the same key sequence. The default is for this value to be
71nil, which disables this behavior." 71nil, which disables this behavior."
72 :type '(choice float (const :tag "Disabled" nil)) 72 :type '(choice float (const :tag "Disabled" nil))
73 :package-version "1.0" :version "30.1") 73 :package-version '(which-key "1.0") :version "30.1")
74 74
75(defcustom which-key-echo-keystrokes (if (and echo-keystrokes 75(defcustom which-key-echo-keystrokes (if (and echo-keystrokes
76 (> (+ echo-keystrokes 0.01) 76 (> (+ echo-keystrokes 0.01)
@@ -83,7 +83,7 @@ This only applies if `which-key-popup-type' is minibuffer or
83`which-key-idle-delay' or else the keystroke echo will erase the 83`which-key-idle-delay' or else the keystroke echo will erase the
84which-key popup." 84which-key popup."
85 :type 'float 85 :type 'float
86 :package-version "1.0" :version "30.1") 86 :package-version '(which-key . "1.0") :version "30.1")
87 87
88(defcustom which-key-max-description-length 27 88(defcustom which-key-max-description-length 27
89 "Truncate the description of keys to this length. 89 "Truncate the description of keys to this length.
@@ -96,17 +96,17 @@ before. Truncation is done using `which-key-ellipsis'."
96 (integer :tag "Width in characters") 96 (integer :tag "Width in characters")
97 (float :tag "Use fraction of available width") 97 (float :tag "Use fraction of available width")
98 function) 98 function)
99 :package-version "1.0" :version "30.1") 99 :package-version '(which-key . "1.0") :version "30.1")
100 100
101(defcustom which-key-min-column-description-width 0 101(defcustom which-key-min-column-description-width 0
102 "Every column should at least have this width." 102 "Every column should at least have this width."
103 :type 'natnum 103 :type 'natnum
104 :package-version "1.0" :version "30.1") 104 :package-version '(which-key . "1.0") :version "30.1")
105 105
106(defcustom which-key-add-column-padding 0 106(defcustom which-key-add-column-padding 0
107 "Additional spaces to add to the left of each key column." 107 "Additional spaces to add to the left of each key column."
108 :type 'integer 108 :type 'integer
109 :package-version "1.0" :version "30.1") 109 :package-version '(which-key . "1.0") :version "30.1")
110 110
111(defcustom which-key-unicode-correction 3 111(defcustom which-key-unicode-correction 3
112 "Correction for wide unicode characters. 112 "Correction for wide unicode characters.
@@ -122,7 +122,7 @@ additional ASCII character in the which-key buffer. Increase this
122number if you are seeing characters get cutoff on the right side 122number if you are seeing characters get cutoff on the right side
123of the which-key popup." 123of the which-key popup."
124 :type 'integer 124 :type 'integer
125 :package-version "1.0" :version "30.1") 125 :package-version '(which-key . "1.0") :version "30.1")
126 126
127(defcustom which-key-dont-use-unicode t 127(defcustom which-key-dont-use-unicode t
128 "If non-nil, don't use any unicode characters in default setup. 128 "If non-nil, don't use any unicode characters in default setup.
@@ -136,7 +136,7 @@ For affected settings, see `which-key-replacement-alist', `which-key-ellipsis'
136 (custom-reevaluate-setting sym)))) 136 (custom-reevaluate-setting sym))))
137 :initialize #'custom-initialize-changed 137 :initialize #'custom-initialize-changed
138 :type 'boolean 138 :type 'boolean
139 :package-version "1.0" :version "30.1") 139 :package-version '(which-key . "1.0") :version "30.1")
140 140
141(defcustom which-key-separator 141(defcustom which-key-separator
142 (if which-key-dont-use-unicode " : " " → ") 142 (if which-key-dont-use-unicode " : " " → ")
@@ -145,7 +145,7 @@ Default is \" → \", unless `which-key-dont-use-unicode' is non
145nil, in which case the default is \" : \"." 145nil, in which case the default is \" : \"."
146 :type 'string 146 :type 'string
147 :set-after '(which-key-dont-use-unicode) 147 :set-after '(which-key-dont-use-unicode)
148 :package-version "1.0" :version "30.1") 148 :package-version '(which-key . "1.0") :version "30.1")
149 149
150(defcustom which-key-ellipsis 150(defcustom which-key-ellipsis
151 (if which-key-dont-use-unicode ".." "…") 151 (if which-key-dont-use-unicode ".." "…")
@@ -155,20 +155,20 @@ in which case the default is \"..\". This can also be the empty
155string to truncate without using any ellipsis." 155string to truncate without using any ellipsis."
156 :type 'string 156 :type 'string
157 :set-after '(which-key-dont-use-unicode) 157 :set-after '(which-key-dont-use-unicode)
158 :package-version "1.0" :version "30.1") 158 :package-version '(which-key . "1.0") :version "30.1")
159 159
160(defcustom which-key-prefix-prefix "+" 160(defcustom which-key-prefix-prefix "+"
161 "Prefix string to indicate a key bound to a keymap. 161 "Prefix string to indicate a key bound to a keymap.
162Default is \"+\"." 162Default is \"+\"."
163 :type 'string 163 :type 'string
164 :package-version "1.0" :version "30.1") 164 :package-version '(which-key . "1.0") :version "30.1")
165 165
166(defcustom which-key-compute-remaps nil 166(defcustom which-key-compute-remaps nil
167 "If non-nil, show remapped commands. 167 "If non-nil, show remapped commands.
168This applies to commands that have been remapped given the 168This applies to commands that have been remapped given the
169currently active keymaps." 169currently active keymaps."
170 :type 'boolean 170 :type 'boolean
171 :package-version "1.0" :version "30.1") 171 :package-version '(which-key . "1.0") :version "30.1")
172 172
173(defcustom which-key-replacement-alist 173(defcustom which-key-replacement-alist
174 `(((nil . "which-key-show-next-page-no-cycle") . (nil . "wk next pg")) 174 `(((nil . "which-key-show-next-page-no-cycle") . (nil . "wk next pg"))
@@ -211,7 +211,7 @@ non-nil value."
211 (choice regexp (const nil))) 211 (choice regexp (const nil)))
212 :value-type (cons (choice string (const nil)) 212 :value-type (cons (choice string (const nil))
213 (choice string (const nil)))) 213 (choice string (const nil))))
214 :package-version "1.0" :version "30.1") 214 :package-version '(which-key . "1.0") :version "30.1")
215 215
216(defcustom which-key-allow-multiple-replacements nil 216(defcustom which-key-allow-multiple-replacements nil
217 "Allow a key binding to be modified by multiple elements. 217 "Allow a key binding to be modified by multiple elements.
@@ -220,7 +220,7 @@ patterns in `which-key-replacement-alist'. When nil, only the
220first match is used to perform replacements from 220first match is used to perform replacements from
221`which-key-replacement-alist'." 221`which-key-replacement-alist'."
222 :type 'boolean 222 :type 'boolean
223 :package-version "1.0" :version "30.1") 223 :package-version '(which-key . "1.0") :version "30.1")
224 224
225(defcustom which-key-show-docstrings nil 225(defcustom which-key-show-docstrings nil
226 "If non-nil, show each command's docstring in the which-key popup. 226 "If non-nil, show each command's docstring in the which-key popup.
@@ -233,7 +233,7 @@ you use this feature."
233 (const :tag "Do not show docstrings" nil) 233 (const :tag "Do not show docstrings" nil)
234 (const :tag "Add docstring to command names" t) 234 (const :tag "Add docstring to command names" t)
235 (const :tag "Replace command name with docstring" docstring-only)) 235 (const :tag "Replace command name with docstring" docstring-only))
236 :package-version "1.0" :version "30.1") 236 :package-version '(which-key . "1.0") :version "30.1")
237 237
238(defcustom which-key-extra-keymaps '(key-translation-map) 238(defcustom which-key-extra-keymaps '(key-translation-map)
239 "List of extra keymaps to show entries from. 239 "List of extra keymaps to show entries from.
@@ -242,7 +242,7 @@ The default is to check `key-translation-map', which contains the
242 :type '(choice (list :tag "Translation map" (const key-translation-map)) 242 :type '(choice (list :tag "Translation map" (const key-translation-map))
243 (const :tag "None" nil) 243 (const :tag "None" nil)
244 (repeat :tag "Custom" symbol)) 244 (repeat :tag "Custom" symbol))
245 :package-version "1.0" :version "30.1") 245 :package-version '(which-key . "1.0") :version "30.1")
246 246
247(defcustom which-key-highlighted-command-list '() 247(defcustom which-key-highlighted-command-list '()
248 "Rules used to highlight certain commands. 248 "Rules used to highlight certain commands.
@@ -252,7 +252,7 @@ matching command names and use
252the element is a cons cell, it should take the form (regexp . 252the element is a cons cell, it should take the form (regexp .
253face to apply)." 253face to apply)."
254 :type '(repeat (choice string (cons regexp face))) 254 :type '(repeat (choice string (cons regexp face)))
255 :package-version "1.0" :version "30.1") 255 :package-version '(which-key . "1.0") :version "30.1")
256 256
257(defcustom which-key-special-keys '() 257(defcustom which-key-special-keys '()
258 "These keys will automatically be truncated to one character. 258 "These keys will automatically be truncated to one character.
@@ -261,12 +261,12 @@ is disabled by default. An example configuration is
261 261
262\(setq which-key-special-keys \\='(\"SPC\" \"TAB\" \"RET\" \"ESC\" \"DEL\")\)" 262\(setq which-key-special-keys \\='(\"SPC\" \"TAB\" \"RET\" \"ESC\" \"DEL\")\)"
263 :type '(repeat string) 263 :type '(repeat string)
264 :package-version "1.0" :version "30.1") 264 :package-version '(which-key . "1.0") :version "30.1")
265 265
266(defcustom which-key-buffer-name " *which-key*" 266(defcustom which-key-buffer-name " *which-key*"
267 "Name of which-key buffer." 267 "Name of which-key buffer."
268 :type 'string 268 :type 'string
269 :package-version "1.0" :version "30.1") 269 :package-version '(which-key . "1.0") :version "30.1")
270 270
271(defcustom which-key-show-prefix 'echo 271(defcustom which-key-show-prefix 'echo
272 "Whether to and where to display the current prefix sequence. 272 "Whether to and where to display the current prefix sequence.
@@ -278,7 +278,7 @@ and nil. nil turns the feature off."
278 (const :tag "In the echo area" echo) 278 (const :tag "In the echo area" echo)
279 (const :tag "In the mode-line" mode-line) 279 (const :tag "In the mode-line" mode-line)
280 (const :tag "Hide" nil)) 280 (const :tag "Hide" nil))
281 :package-version "1.0" :version "30.1") 281 :package-version '(which-key . "1.0") :version "30.1")
282 282
283(defcustom which-key-popup-type 'side-window 283(defcustom which-key-popup-type 'side-window
284 "Supported types are minibuffer, side-window, frame, and custom." 284 "Supported types are minibuffer, side-window, frame, and custom."
@@ -286,18 +286,18 @@ and nil. nil turns the feature off."
286 (const :tag "Show in side window" side-window) 286 (const :tag "Show in side window" side-window)
287 (const :tag "Show in popup frame" frame) 287 (const :tag "Show in popup frame" frame)
288 (const :tag "Use your custom display functions" custom)) 288 (const :tag "Use your custom display functions" custom))
289 :package-version "1.0" :version "30.1") 289 :package-version '(which-key . "1.0") :version "30.1")
290 290
291(defcustom which-key-min-display-lines 1 291(defcustom which-key-min-display-lines 1
292 "Minimum number of horizontal lines to display in the which-key buffer." 292 "Minimum number of horizontal lines to display in the which-key buffer."
293 :type 'integer 293 :type 'integer
294 :package-version "1.0" :version "30.1") 294 :package-version '(which-key . "1.0") :version "30.1")
295 295
296(defcustom which-key-max-display-columns nil 296(defcustom which-key-max-display-columns nil
297 "Maximum number of columns to display in the which-key buffer. 297 "Maximum number of columns to display in the which-key buffer.
298A value of nil means don't impose a maximum." 298A value of nil means don't impose a maximum."
299 :type '(choice integer (const :tag "Unbounded" nil)) 299 :type '(choice integer (const :tag "Unbounded" nil))
300 :package-version "1.0" :version "30.1") 300 :package-version '(which-key . "1.0") :version "30.1")
301 301
302(defcustom which-key-side-window-location 'bottom 302(defcustom which-key-side-window-location 'bottom
303 "Location of which-key popup when `which-key-popup-type' is side-window. 303 "Location of which-key popup when `which-key-popup-type' is side-window.
@@ -311,7 +311,7 @@ location is tried."
311 (const top) 311 (const top)
312 (const (right bottom)) 312 (const (right bottom))
313 (const (bottom right))) 313 (const (bottom right)))
314 :package-version "1.0" :version "30.1") 314 :package-version '(which-key . "1.0") :version "30.1")
315 315
316(defcustom which-key-side-window-slot 0 316(defcustom which-key-side-window-slot 0
317 "The `slot' to use for `display-buffer-in-side-window'. 317 "The `slot' to use for `display-buffer-in-side-window'.
@@ -325,31 +325,31 @@ preceding (that is, above or on the left of) the middle slot. A
325positive value means use a slot following (that is, below or on 325positive value means use a slot following (that is, below or on
326the right of) the middle slot. The default is zero." 326the right of) the middle slot. The default is zero."
327 :type 'integer 327 :type 'integer
328 :package-version "1.0" :version "30.1") 328 :package-version '(which-key . "1.0") :version "30.1")
329 329
330(defcustom which-key-side-window-max-width 0.333 330(defcustom which-key-side-window-max-width 0.333
331 "Maximum width of which-key popup when type is side-window. 331 "Maximum width of which-key popup when type is side-window.
332This variable can also be a number between 0 and 1. In that case, 332This variable can also be a number between 0 and 1. In that case,
333it denotes a percentage out of the frame's width." 333it denotes a percentage out of the frame's width."
334 :type 'float 334 :type 'float
335 :package-version "1.0" :version "30.1") 335 :package-version '(which-key . "1.0") :version "30.1")
336 336
337(defcustom which-key-side-window-max-height 0.25 337(defcustom which-key-side-window-max-height 0.25
338 "Maximum height of which-key popup when type is side-window. 338 "Maximum height of which-key popup when type is side-window.
339This variable can also be a number between 0 and 1. In that case, it denotes 339This variable can also be a number between 0 and 1. In that case, it denotes
340a percentage out of the frame's height." 340a percentage out of the frame's height."
341 :type 'float 341 :type 'float
342 :package-version "1.0" :version "30.1") 342 :package-version '(which-key . "1.0") :version "30.1")
343 343
344(defcustom which-key-frame-max-width 60 344(defcustom which-key-frame-max-width 60
345 "Maximum width of which-key popup when type is frame." 345 "Maximum width of which-key popup when type is frame."
346 :type 'natnum 346 :type 'natnum
347 :package-version "1.0" :version "30.1") 347 :package-version '(which-key . "1.0") :version "30.1")
348 348
349(defcustom which-key-frame-max-height 20 349(defcustom which-key-frame-max-height 20
350 "Maximum height of which-key popup when type is frame." 350 "Maximum height of which-key popup when type is frame."
351 :type 'natnum 351 :type 'natnum
352 :package-version "1.0" :version "30.1") 352 :package-version '(which-key . "1.0") :version "30.1")
353 353
354(defcustom which-key-allow-imprecise-window-fit (not (display-graphic-p)) 354(defcustom which-key-allow-imprecise-window-fit (not (display-graphic-p))
355 "Allow which-key to use a simpler method for resizing the popup. 355 "Allow which-key to use a simpler method for resizing the popup.
@@ -359,13 +359,13 @@ this on may help.
359See https://github.com/justbur/emacs-which-key/issues/130 359See https://github.com/justbur/emacs-which-key/issues/130
360and https://github.com/justbur/emacs-which-key/issues/225." 360and https://github.com/justbur/emacs-which-key/issues/225."
361 :type 'boolean 361 :type 'boolean
362 :package-version "1.0" :version "30.1") 362 :package-version '(which-key . "1.0") :version "30.1")
363 363
364(defcustom which-key-show-remaining-keys nil 364(defcustom which-key-show-remaining-keys nil
365 "Show remaining keys in last slot, when keys are hidden." 365 "Show remaining keys in last slot, when keys are hidden."
366 :type '(radio (const :tag "Yes" t) 366 :type '(radio (const :tag "Yes" t)
367 (const :tag "No" nil)) 367 (const :tag "No" nil))
368 :package-version "1.0" :version "30.1") 368 :package-version '(which-key . "1.0") :version "30.1")
369 369
370(defcustom which-key-sort-order #'which-key-key-order 370(defcustom which-key-sort-order #'which-key-key-order
371 "Order in which the key bindings are sorted. 371 "Order in which the key bindings are sorted.
@@ -385,25 +385,25 @@ information."
385 (function-item which-key-description-order) 385 (function-item which-key-description-order)
386 (function-item which-key-prefix-then-key-order) 386 (function-item which-key-prefix-then-key-order)
387 (function-item which-key-local-then-key-order)) 387 (function-item which-key-local-then-key-order))
388 :package-version "1.0" :version "30.1") 388 :package-version '(which-key . "1.0") :version "30.1")
389 389
390(defcustom which-key-sort-uppercase-first t 390(defcustom which-key-sort-uppercase-first t
391 "If non-nil, uppercase comes before lowercase in sorting. 391 "If non-nil, uppercase comes before lowercase in sorting.
392This applies to the function chosen in 392This applies to the function chosen in
393`which-key-sort-order'. Otherwise, the order is reversed." 393`which-key-sort-order'. Otherwise, the order is reversed."
394 :type 'boolean 394 :type 'boolean
395 :package-version "1.0" :version "30.1") 395 :package-version '(which-key . "1.0") :version "30.1")
396 396
397(defcustom which-key-paging-prefixes '() 397(defcustom which-key-paging-prefixes '()
398 "Enable paging for these prefixes." 398 "Enable paging for these prefixes."
399 :type '(repeat string) 399 :type '(repeat string)
400 :package-version "1.0" :version "30.1") 400 :package-version '(which-key . "1.0") :version "30.1")
401 401
402(defcustom which-key-paging-key "<f5>" 402(defcustom which-key-paging-key "<f5>"
403 "Key to use for changing pages. 403 "Key to use for changing pages.
404Bound after each of the prefixes in `which-key-paging-prefixes'" 404Bound after each of the prefixes in `which-key-paging-prefixes'"
405 :type 'string 405 :type 'string
406 :package-version "1.0" :version "30.1") 406 :package-version '(which-key . "1.0") :version "30.1")
407 407
408;; (defcustom which-key-undo-key nil 408;; (defcustom which-key-undo-key nil
409;; "Key (string) to use for undoing keypresses. Bound recursively 409;; "Key (string) to use for undoing keypresses. Bound recursively
@@ -422,7 +422,7 @@ Normally `help-char' after a prefix calls
422`describe-prefix-bindings'. This changes that command to a 422`describe-prefix-bindings'. This changes that command to a
423which-key paging command when `which-key-mode' is active." 423which-key paging command when `which-key-mode' is active."
424 :type 'boolean 424 :type 'boolean
425 :package-version "1.0" :version "30.1") 425 :package-version '(which-key . "1.0") :version "30.1")
426 426
427(defcustom which-key-show-early-on-C-h nil 427(defcustom which-key-show-early-on-C-h nil
428 "Allow \\`C-h' (`help-char') to trigger which-key popup before timer. 428 "Allow \\`C-h' (`help-char') to trigger which-key popup before timer.
@@ -438,7 +438,7 @@ using \\`C-h'.
438Note that `which-key-idle-delay' should be set before turning on 438Note that `which-key-idle-delay' should be set before turning on
439`which-key-mode'." 439`which-key-mode'."
440 :type 'boolean 440 :type 'boolean
441 :package-version "1.0" :version "30.1") 441 :package-version '(which-key . "1.0") :version "30.1")
442 442
443(defcustom which-key-preserve-window-configuration nil 443(defcustom which-key-preserve-window-configuration nil
444 "Save and restore window configuration around which-key popup display. 444 "Save and restore window configuration around which-key popup display.
@@ -448,7 +448,7 @@ prevents which-key from changing window position of visible
448buffers. Only taken into account when popup type is 448buffers. Only taken into account when popup type is
449side-window." 449side-window."
450 :type 'boolean 450 :type 'boolean
451 :package-version "1.0" :version "30.1") 451 :package-version '(which-key . "1.0") :version "30.1")
452 452
453(defvar which-key-C-h-map-prompt 453(defvar which-key-C-h-map-prompt
454 (concat " \\<which-key-C-h-map>" 454 (concat " \\<which-key-C-h-map>"
@@ -516,7 +516,7 @@ of terminals issue META modifier for the Alt key.
516 516
517See Info node `(emacs)Modifier Keys'." 517See Info node `(emacs)Modifier Keys'."
518 :type 'boolean 518 :type 'boolean
519 :package-version "1.0" :version "30.1") 519 :package-version '(which-key . "1.0") :version "30.1")
520 520
521(defcustom which-key-delay-functions nil 521(defcustom which-key-delay-functions nil
522 "List of functions that may delay the which-key popup. 522 "List of functions that may delay the which-key popup.
@@ -532,7 +532,7 @@ this list to return a value is the value that is used.
532The delay time is effectively added to the normal 532The delay time is effectively added to the normal
533`which-key-idle-delay'." 533`which-key-idle-delay'."
534 :type '(repeat function) 534 :type '(repeat function)
535 :package-version "1.0" :version "30.1") 535 :package-version '(which-key . "1.0") :version "30.1")
536 536
537(defcustom which-key-allow-regexps nil 537(defcustom which-key-allow-regexps nil
538 "A list of regexp strings to use to filter key sequences. 538 "A list of regexp strings to use to filter key sequences.
@@ -540,7 +540,7 @@ When non-nil, for a key sequence to trigger the which-key popup
540it must match one of the regexps in this list. The format of the 540it must match one of the regexps in this list. The format of the
541key sequences is what is produced by `key-description'." 541key sequences is what is produced by `key-description'."
542 :type '(repeat regexp) 542 :type '(repeat regexp)
543 :package-version "1.0" :version "30.1") 543 :package-version '(which-key . "1.0") :version "30.1")
544 544
545(defcustom which-key-inhibit-regexps nil 545(defcustom which-key-inhibit-regexps nil
546 "A list of regexp strings to use to filter key sequences. 546 "A list of regexp strings to use to filter key sequences.
@@ -548,7 +548,7 @@ When non-nil, for a key sequence to trigger the which-key popup
548it cannot match one of the regexps in this list. The format of 548it cannot match one of the regexps in this list. The format of
549the key sequences is what is produced by `key-description'." 549the key sequences is what is produced by `key-description'."
550 :type '(repeat regexp) 550 :type '(repeat regexp)
551 :package-version "1.0" :version "30.1") 551 :package-version '(which-key . "1.0") :version "30.1")
552 552
553(defcustom which-key-show-transient-maps nil 553(defcustom which-key-show-transient-maps nil
554 "Show keymaps created by `set-transient-map' when applicable. 554 "Show keymaps created by `set-transient-map' when applicable.
@@ -557,7 +557,7 @@ More specifically, detect when `overriding-terminal-local-map' is
557set (this is the keymap used by `set-transient-map') and display 557set (this is the keymap used by `set-transient-map') and display
558it." 558it."
559 :type 'boolean 559 :type 'boolean
560 :package-version "1.0" :version "30.1") 560 :package-version '(which-key . "1.0") :version "30.1")
561 561
562(make-obsolete-variable 562(make-obsolete-variable
563 'which-key-enable-extended-define-key 563 'which-key-enable-extended-define-key
@@ -568,7 +568,7 @@ it."
568(defcustom which-key-init-buffer-hook '() 568(defcustom which-key-init-buffer-hook '()
569 "Hook run when which-key buffer is initialized." 569 "Hook run when which-key buffer is initialized."
570 :type 'hook 570 :type 'hook
571 :package-version "1.0" :version "30.1") 571 :package-version '(which-key . "1.0") :version "30.1")
572 572
573;;;; Faces 573;;;; Faces
574 574
@@ -581,31 +581,31 @@ it."
581 '((t . (:inherit font-lock-constant-face))) 581 '((t . (:inherit font-lock-constant-face)))
582 "Face for which-key keys." 582 "Face for which-key keys."
583 :group 'which-key-faces 583 :group 'which-key-faces
584 :package-version "1.0" :version "30.1") 584 :package-version '(which-key . "1.0") :version "30.1")
585 585
586(defface which-key-separator-face 586(defface which-key-separator-face
587 '((t . (:inherit font-lock-comment-face))) 587 '((t . (:inherit font-lock-comment-face)))
588 "Face for the separator (default separator is an arrow)." 588 "Face for the separator (default separator is an arrow)."
589 :group 'which-key-faces 589 :group 'which-key-faces
590 :package-version "1.0" :version "30.1") 590 :package-version '(which-key . "1.0") :version "30.1")
591 591
592(defface which-key-note-face 592(defface which-key-note-face
593 '((t . (:inherit which-key-separator-face))) 593 '((t . (:inherit which-key-separator-face)))
594 "Face for notes or hints occasionally provided." 594 "Face for notes or hints occasionally provided."
595 :group 'which-key-faces 595 :group 'which-key-faces
596 :package-version "1.0" :version "30.1") 596 :package-version '(which-key . "1.0") :version "30.1")
597 597
598(defface which-key-command-description-face 598(defface which-key-command-description-face
599 '((t . (:inherit font-lock-function-name-face))) 599 '((t . (:inherit font-lock-function-name-face)))
600 "Face for the key description when it is a command." 600 "Face for the key description when it is a command."
601 :group 'which-key-faces 601 :group 'which-key-faces
602 :package-version "1.0" :version "30.1") 602 :package-version '(which-key . "1.0") :version "30.1")
603 603
604(defface which-key-local-map-description-face 604(defface which-key-local-map-description-face
605 '((t . (:inherit which-key-command-description-face))) 605 '((t . (:inherit which-key-command-description-face)))
606 "Face for the key description when it is found in `current-local-map'." 606 "Face for the key description when it is found in `current-local-map'."
607 :group 'which-key-faces 607 :group 'which-key-faces
608 :package-version "1.0" :version "30.1") 608 :package-version '(which-key . "1.0") :version "30.1")
609 609
610(defface which-key-highlighted-command-face 610(defface which-key-highlighted-command-face
611 '((t . (:inherit (which-key-command-description-face highlight)))) 611 '((t . (:inherit (which-key-command-description-face highlight))))
@@ -613,25 +613,25 @@ it."
613A command is highlighted, when it matches a string in 613A command is highlighted, when it matches a string in
614`which-key-highlighted-command-list'." 614`which-key-highlighted-command-list'."
615 :group 'which-key-faces 615 :group 'which-key-faces
616 :package-version "1.0" :version "30.1") 616 :package-version '(which-key . "1.0") :version "30.1")
617 617
618(defface which-key-group-description-face 618(defface which-key-group-description-face
619 '((t . (:inherit font-lock-keyword-face))) 619 '((t . (:inherit font-lock-keyword-face)))
620 "Face for the key description when it is a group or prefix." 620 "Face for the key description when it is a group or prefix."
621 :group 'which-key-faces 621 :group 'which-key-faces
622 :package-version "1.0" :version "30.1") 622 :package-version '(which-key . "1.0") :version "30.1")
623 623
624(defface which-key-special-key-face 624(defface which-key-special-key-face
625 '((t . (:inherit which-key-key-face :inverse-video t :weight bold))) 625 '((t . (:inherit which-key-key-face :inverse-video t :weight bold)))
626 "Face for special keys (\\`SPC', \\`TAB', \\`RET')." 626 "Face for special keys (\\`SPC', \\`TAB', \\`RET')."
627 :group 'which-key-faces 627 :group 'which-key-faces
628 :package-version "1.0" :version "30.1") 628 :package-version '(which-key . "1.0") :version "30.1")
629 629
630(defface which-key-docstring-face 630(defface which-key-docstring-face
631 '((t . (:inherit which-key-note-face))) 631 '((t . (:inherit which-key-note-face)))
632 "Face for docstrings." 632 "Face for docstrings."
633 :group 'which-key-faces 633 :group 'which-key-faces
634 :package-version "1.0" :version "30.1") 634 :package-version '(which-key . "1.0") :version "30.1")
635 635
636;;;; Custom popup 636;;;; Custom popup
637 637
@@ -642,14 +642,14 @@ return the maximum height in lines and width in characters of the
642which-key popup in the form a cons cell (height . width)." 642which-key popup in the form a cons cell (height . width)."
643 :group 'which-key 643 :group 'which-key
644 :type '(choice function (const nil)) 644 :type '(choice function (const nil))
645 :package-version "1.0" :version "30.1") 645 :package-version '(which-key . "1.0") :version "30.1")
646 646
647(defcustom which-key-custom-hide-popup-function nil 647(defcustom which-key-custom-hide-popup-function nil
648 "Set a custom hide-popup function. 648 "Set a custom hide-popup function.
649It takes no arguments and the return value is ignored." 649It takes no arguments and the return value is ignored."
650 :group 'which-key 650 :group 'which-key
651 :type '(choice function (const nil)) 651 :type '(choice function (const nil))
652 :package-version "1.0" :version "30.1") 652 :package-version '(which-key . "1.0") :version "30.1")
653 653
654(defcustom which-key-custom-show-popup-function nil 654(defcustom which-key-custom-show-popup-function nil
655 "Set a custom show-popup function. 655 "Set a custom show-popup function.
@@ -658,13 +658,13 @@ width) in lines and characters respectively. The return value is
658ignored." 658ignored."
659 :group 'which-key 659 :group 'which-key
660 :type '(choice function (const nil)) 660 :type '(choice function (const nil))
661 :package-version "1.0" :version "30.1") 661 :package-version '(which-key . "1.0") :version "30.1")
662 662
663(defcustom which-key-lighter " WK" 663(defcustom which-key-lighter " WK"
664 "Minor mode lighter to use in the mode-line." 664 "Minor mode lighter to use in the mode-line."
665 :group 'which-key 665 :group 'which-key
666 :type 'string 666 :type 'string
667 :package-version "1.0" :version "30.1") 667 :package-version '(which-key . "1.0") :version "30.1")
668 668
669(defvar which-key-inhibit nil 669(defvar which-key-inhibit nil
670 "Prevent which-key from popping up momentarily. 670 "Prevent which-key from popping up momentarily.
@@ -681,7 +681,7 @@ popup. If any function returns a non-nil value, the popup will
681not display." 681not display."
682 :group 'which-key 682 :group 'which-key
683 :type 'hook 683 :type 'hook
684 :package-version "1.0" :version "30.1") 684 :package-version '(which-key . "1.0") :version "30.1")
685 685
686(defvar which-key-keymap-history nil 686(defvar which-key-keymap-history nil
687 "History of keymap selections. 687 "History of keymap selections.
@@ -812,7 +812,7 @@ allow which-key to support packages that insert non-standard
812`keys' into the key sequence being read by Emacs." 812`keys' into the key sequence being read by Emacs."
813 :group 'which-key 813 :group 'which-key
814 :type 'function 814 :type 'function
815 :package-version "1.0" :version "30.1") 815 :package-version '(which-key . "1.0") :version "30.1")
816 816
817 817
818;;;; Evil 818;;;; Evil
@@ -826,7 +826,7 @@ setting this to non-nil will override this behavior for evil
826operators." 826operators."
827 :group 'which-key 827 :group 'which-key
828 :type 'boolean 828 :type 'boolean
829 :package-version "1.0" :version "30.1") 829 :package-version '(which-key . "1.0") :version "30.1")
830 830
831(defcustom which-key-show-operator-state-maps nil 831(defcustom which-key-show-operator-state-maps nil
832 "Show the keys following an evil command that reads a motion. 832 "Show the keys following an evil command that reads a motion.
@@ -836,7 +836,7 @@ might be some valid keys missing and it might be showing some
836invalid keys." 836invalid keys."
837 :group 'which-key 837 :group 'which-key
838 :type 'boolean 838 :type 'boolean
839 :package-version "1.0" :version "30.1") 839 :package-version '(which-key . "1.0") :version "30.1")
840 840
841(defun which-key-evil-this-operator-p () 841(defun which-key-evil-this-operator-p ()
842 (and which-key-allow-evil-operators 842 (and which-key-allow-evil-operators
@@ -948,6 +948,10 @@ given your settings)."
948 #'which-key--hide-popup-on-frame-size-change) 948 #'which-key--hide-popup-on-frame-size-change)
949 (which-key--stop-timer))) 949 (which-key--stop-timer)))
950 950
951;; Update `customize-package-emacs-version-alist'.
952(add-to-list 'customize-package-emacs-version-alist
953 '(which-key ("1.0" . "30.1")))
954
951(defun which-key--init-buffer () 955(defun which-key--init-buffer ()
952 "Initialize which-key buffer." 956 "Initialize which-key buffer."
953 (unless (buffer-live-p which-key--buffer) 957 (unless (buffer-live-p which-key--buffer)
diff --git a/test/lisp/emacs-lisp/tabulated-list-tests.el b/test/lisp/emacs-lisp/tabulated-list-tests.el
index e53268b3f14..7edcaaf9441 100644
--- a/test/lisp/emacs-lisp/tabulated-list-tests.el
+++ b/test/lisp/emacs-lisp/tabulated-list-tests.el
@@ -171,4 +171,31 @@
171 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions 171 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions
172"))))) 172")))))
173 173
174(ert-deftest tabulated-list-groups-with-path ()
175 (with-temp-buffer
176 (tabulated-list-mode)
177 (setq tabulated-list-groups
178 (tabulated-list-groups
179 tabulated-list--test-entries
180 `( :path-function (lambda (entry)
181 (list (list (aref (cadr entry) 3))))
182 :sort-function (lambda (groups _level)
183 (sort groups :in-place t :key #'car)))))
184 (setq tabulated-list-format tabulated-list--test-format)
185 (setq tabulated-list-padding 7)
186 (tabulated-list-init-header)
187 (tabulated-list-print)
188 ;; Basic printing.
189 (should (string-equal
190 (buffer-substring-no-properties (point-min) (point-max))
191 "\
192* available
193 abc-mode abc-mode 944 available Major mode for editing abc music files
194* installed
195 zzzz-game zzzz-game 2113 installed play zzzz in Emacs
196 mode mode 1128 installed A simple mode for editing Actionscript 3 files
197* obsolete
198 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions
199"))))
200
174;;; tabulated-list-tests.el ends here 201;;; tabulated-list-tests.el ends here
diff --git a/test/lisp/erc/erc-networks-tests.el b/test/lisp/erc/erc-networks-tests.el
index f0a7c37ddf2..e84cca68cdd 100644
--- a/test/lisp/erc/erc-networks-tests.el
+++ b/test/lisp/erc/erc-networks-tests.el
@@ -133,10 +133,12 @@
133 (with-temp-buffer 133 (with-temp-buffer
134 (setq erc-networks--id (erc-networks--id-fixed-create 'oldest) 134 (setq erc-networks--id (erc-networks--id-fixed-create 'oldest)
135 oldest (current-buffer)) 135 oldest (current-buffer))
136 (sleep-for 0.02)
136 137
137 (with-temp-buffer 138 (with-temp-buffer
138 (setq erc-networks--id (erc-networks--id-fixed-create 'middle) 139 (setq erc-networks--id (erc-networks--id-fixed-create 'middle)
139 middle (current-buffer)) 140 middle (current-buffer))
141 (sleep-for 0.02)
140 142
141 (with-temp-buffer 143 (with-temp-buffer
142 (setq erc-networks--id (erc-networks--id-fixed-create 'newest) 144 (setq erc-networks--id (erc-networks--id-fixed-create 'newest)
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-bracketed-args-indent.rb b/test/lisp/progmodes/ruby-mode-resources/ruby-bracketed-args-indent.rb
new file mode 100644
index 00000000000..c1aaff78ac9
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-bracketed-args-indent.rb
@@ -0,0 +1,42 @@
1foo
2 .update({
3 key => value,
4 other_key:
5 }, {
6 key => value,
7 other_key:
8 })
9
10update([
11 1,
12 2
13], [
14 3,
15 4
16])
17
18update([{
19 key: "value"
20}, {
21 key: "value"
22}])
23
24update(arg1, {
25 foo: "bar"
26}, [
27 1,
28 2
29], arg2)
30
31def foo
32 foo.update(
33 {
34 key => value,
35 other_key: foo
36 }
37 )
38end
39
40# Local Variables:
41# ruby-bracketed-args-indent: nil
42# End:
diff --git a/test/lisp/progmodes/ruby-mode-tests.el b/test/lisp/progmodes/ruby-mode-tests.el
index 2b8506a7adc..c9cde791baa 100644
--- a/test/lisp/progmodes/ruby-mode-tests.el
+++ b/test/lisp/progmodes/ruby-mode-tests.el
@@ -992,6 +992,7 @@ VALUES-PLIST is a list with alternating index and value elements."
992(ruby-deftest-indent "ruby-method-call-indent.rb") 992(ruby-deftest-indent "ruby-method-call-indent.rb")
993(ruby-deftest-indent "ruby-method-params-indent.rb") 993(ruby-deftest-indent "ruby-method-params-indent.rb")
994(ruby-deftest-indent "ruby-parenless-call-arguments-indent.rb") 994(ruby-deftest-indent "ruby-parenless-call-arguments-indent.rb")
995(ruby-deftest-indent "ruby-bracketed-args-indent.rb")
995 996
996(ert-deftest ruby--test-chained-indentation () 997(ert-deftest ruby--test-chained-indentation ()
997 (with-temp-buffer 998 (with-temp-buffer
diff --git a/test/lisp/progmodes/ruby-ts-mode-tests.el b/test/lisp/progmodes/ruby-ts-mode-tests.el
index 61ef80eb610..05d98974acf 100644
--- a/test/lisp/progmodes/ruby-ts-mode-tests.el
+++ b/test/lisp/progmodes/ruby-ts-mode-tests.el
@@ -326,6 +326,7 @@ The whitespace before and including \"|\" on each line is removed."
326(ruby-ts-deftest-indent "ruby-method-call-indent.rb") 326(ruby-ts-deftest-indent "ruby-method-call-indent.rb")
327(ruby-ts-deftest-indent "ruby-method-params-indent.rb") 327(ruby-ts-deftest-indent "ruby-method-params-indent.rb")
328(ruby-ts-deftest-indent "ruby-parenless-call-arguments-indent.rb") 328(ruby-ts-deftest-indent "ruby-parenless-call-arguments-indent.rb")
329(ruby-ts-deftest-indent "ruby-bracketed-args-indent.rb")
329 330
330(provide 'ruby-ts-mode-tests) 331(provide 'ruby-ts-mode-tests)
331 332