[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/transient 02607dd9d9 04/41: manual: Move comparisons to
From: |
Jonas Bernoulli |
Subject: |
[elpa] externals/transient 02607dd9d9 04/41: manual: Move comparisons to wiki |
Date: |
Sun, 12 Nov 2023 20:04:07 -0500 (EST) |
branch: externals/transient
commit 02607dd9d925540df654c939172a698f2fa409d6
Author: Jonas Bernoulli <jonas@bernoul.li>
Commit: Jonas Bernoulli <jonas@bernoul.li>
manual: Move comparisons to wiki
---
docs/transient.org | 321 +++----------------------------------------------
docs/transient.texi | 336 ++--------------------------------------------------
2 files changed, 24 insertions(+), 633 deletions(-)
diff --git a/docs/transient.org b/docs/transient.org
index 07cfa7c6fc..c197ec37c4 100644
--- a/docs/transient.org
+++ b/docs/transient.org
@@ -1961,313 +1961,6 @@ and 7. ~level~ controls whether a suffix or a group
should be
available depending on user preference.
See [[*Enabling and Disabling Suffixes]].
-* Related Abstractions and Packages
-** Comparison With Prefix Keys and Prefix Arguments
-
-While transient commands were inspired by regular prefix keys and
-prefix arguments, they are also quite different and much more complex.
-
-The following diagrams illustrate some of the differences.
-
-- =(c)= represents a return to the command loop.
-- =(+)= represents the user's choice to press one key or another.
-- ={WORD}= are possible behaviors.
-- ={NUMBER}= is a footnote.
-
-*** Regular Prefix Commands
-:PROPERTIES:
-:UNNUMBERED: notoc
-:END:
-
-See [[info:elisp#Prefix Keys]].
-
-#+begin_example
- ,--> command1 --> (c)
- |
- (c)-(+)-> prefix command or key --+--> command2 --> (c)
- |
- `--> command3 --> (c)
-#+end_example
-
-*** Regular Prefix Arguments
-:PROPERTIES:
-:UNNUMBERED: notoc
-:END:
-
-See [[info:elisp#Prefix Command Arguments]].
-
-#+begin_example
- ,----------------------------------,
- | |
- v |
- (c)-(+)---> prefix argument command --(c)-(+)-> any command --> (c)
- | ^ |
- | | |
- `-- sets or changes --, ,-- maybe used --' |
- | | |
- v | |
- prefix argument state |
- ^ |
- | |
- `-------- discards --------'
-#+end_example
-
-*** Transients
-:PROPERTIES:
-:UNNUMBERED: notoc
-:END:
-
-(∩`-´)⊃━☆゚.*・。゚
-
-This diagram ignores the infix value and external state:
-
-#+begin_example
- (c)
- | ,- {stay} ------<-,-<------------<-,-<---,
- (+) | | | |
- | | | | |
- | | ,--> infix1 --| | |
- | | | | | |
- | | |--> infix2 --| | |
- v v | | | |
- prefix -(c)-(+)-> infix3 --' ^ |
- | | |
- |---------------> suffix1 -->--| |
- | | |
- |---------------> suffix2 ----{1}------> {exit} --> (c)
- | |
- |---------------> suffix3 -------------> {exit} --> (c)
- | |
- `--> any command --{2}-> {warn} -->--|
- | |
- |--> {noop} -->--|
- | |
- |--> {call} -->--'
- |
- `------------------> {exit} --> (c)
-#+end_example
-
-This diagram takes the infix value into account to an extend, while
-still ignoring external state:
-
-#+begin_example
- (c)
- | ,- {stay} ------<-,-<------------<-,-<---,
- (+) | | | |
- | | | | |
- | | ,--> infix1 --| | |
- | | | | | | |
- | | ,--> infix2 --| | |
- v v | | | | |
- prefix -(c)-(+)-> infix3 --' | |
- | | ^ |
- | | | |
- |---------------> suffix1 -->--| |
- | | ^ | |
- | | | | |
- |---------------> suffix2 ----{1}------> {exit} --> (c)
- | | ^ | |
- | | | | v
- | | | | |
- |---------------> suffix3 -------------> {exit} --> (c)
- | | ^ | |
- | sets | | v
- | | maybe | |
- | | used | |
- | | | | |
- | | infix --' | |
- | `---> value | |
- | ^ | |
- | | | |
- | hides | |
- | | | |
- | `--------------------------<---|
- | | |
- `--> any command --{2}-> {warn} -->--| |
- | | |
- |--> {noop} -->--| |
- | | |
- |--> {call} -->--' ^
- | |
- `------------------> {exit} --> (c)
-#+end_example
-
-This diagram provides more information about the infix value
-and also takes external state into account.
-
-#+begin_example
- ,----sets--- "anything"
- |
- v
- ,---------> external
- | state
- | | |
- | initialized | ☉‿⚆
- sets from |
- | | maybe
- | ,----------' used
- | | |
- (c) | | v
- | ,- {stay} --|---<-,-<------|-----<-,-<---,
- (+) | | | | | | |
- | | | v | | | |
- | | ,--> infix1 --| | | |
- | | | | | | | | |
- | | | | v | | | |
- | | ,--> infix2 --| | | |
- | | | | ^ | | | |
- v v | | | | | | |
- prefix -(c)-(+)-> infix3 --' | | |
- | | ^ | ^ |
- | | | v | |
- |---------------> suffix1 -->--| |
- | | | ^ | | |
- | | | | v | |
- |---------------> suffix2 ----{1}------> {exit} --> (c)
- | | | ^ | | |
- | | | | | | v
- | | | | v | |
- |---------------> suffix3 -------------> {exit} --> (c)
- | | | ^ | |
- | sets | | | v
- | | initialized maybe | |
- | | from used | |
- | | | | | |
- | | `-- infix ---' | |
- | `---> value -----------------------------> persistent
- | ^ ^ | | across
- | | | | | invocations -,
- | hides | | | |
- | | `----------------------------------------------'
- | | | |
- | `--------------------------<---|
- | | |
- `--> any command --{2}-> {warn} -->--| |
- | | |
- |--> {noop} -->--| |
- | | |
- |--> {call} -->--' ^
- | |
- `------------------> {exit} --> (c)
-#+end_example
-
-- ={1}= Transients can be configured to be exited when a suffix command
- is invoked. The default is to do so for all suffixes except for
- those that are common to all transients and which are used to
- perform tasks such as providing help and saving the value of the
- infix arguments for future invocations. The behavior can also be
- specified for individual suffix commands and may even depend on
- state.
-
-- ={2}= Transients can be configured to allow the user to invoke
- non-suffix commands. The default is to not allow that and instead
- warn the user.
-
-Despite already being rather complex, even the last diagram leaves out
-many details. Most importantly it implies that the decision whether
-to remain transient is made later than it actually is made (for the
-most part a function on ~pre-command-hook~ is responsible). But such
-implementation details are of little relevance to users and are
-covered elsewhere.
-
-** Comparison With Other Packages
-*** Magit-Popup
-:PROPERTIES:
-:UNNUMBERED: notoc
-:END:
-
-Transient is the successor to Magit-Popup (see [[info:magit-popup]]).
-
-One major difference between these two implementations of the same
-ideas is that while Transient uses transient keymaps and embraces the
-command-loop, Magit-Popup implemented an inferior mechanism that does
-not use transient keymaps and that instead of using the command-loop
-implements a naive alternative based on ~read-char~.
-
-Magit-Popup does not use classes and generic functions and defining a
-new command type is near impossible as it involves adding hard-coded
-special-cases to many functions. Because of that only a single new
-type was added, which was not already part of Magit-Popup's initial
-release.
-
-A lot of things are hard-coded in Magit-Popup. One random example is
-that the key bindings for switches must begin with ~-~ and those for
-options must begin with ~=~.
-
-*** Hydra
-:PROPERTIES:
-:UNNUMBERED: notoc
-:END:
-
-Hydra (see https://github.com/abo-abo/hydra) is another package that
-provides features similar to those of Transient.
-
-Both packages use transient keymaps to make a set of commands
-temporarily available and show the available commands in a popup
-buffer.
-
-A Hydra “body” is equivalent to a Transient “prefix” and a Hydra
-“head” is equivalent to a Transient “suffix”. Hydra has no equivalent
-of a Transient “infix”.
-
-Both hydras and transients can be used as simple command dispatchers.
-Used like this they are similar to regular prefix commands and prefix
-keys, except that the available commands are shown in the popup buffer.
-
-(Another package that does this is ~which-key~. It does so automatically
-for any incomplete key sequence. The advantage of that approach is
-that no additional work is necessary; the disadvantage is that the
-available commands are not organized semantically.)
-
-Both Hydra and Transient provide features that go beyond simple
-command dispatchers:
-
-- Invoking a command from a hydra does not necessarily exit the hydra.
- That makes it possible to invoke the same command again, but using a
- shorter key sequence (i.e., the key that was used to enter the hydra
- does not have to be pressed again).
-
- Transient supports that too, but for now this feature is not a focus
- and the interface is a bit more complicated. A very basic example
- using the current interface:
-
- #+BEGIN_SRC emacs-lisp
- (transient-define-prefix outline-navigate ()
- :transient-suffix 'transient--do-stay
- :transient-non-suffix 'transient--do-warn
- [("p" "previous visible heading" outline-previous-visible-heading)
- ("n" "next visible heading" outline-next-visible-heading)])
- #+END_SRC
-
-- Transient supports infix arguments; values that are set by infix
- commands and then consumed by the invoked suffix command(s).
-
- To my knowledge, Hydra does not support that.
-
-Both packages make it possible to specify how exactly the available
-commands are outlined:
-
-- With Hydra this is often done using an explicit format string, which
- gives authors a lot of flexibility and makes it possible to do fancy
- things.
-
- The downside of this is that it becomes harder for a user to add
- additional commands to an existing hydra and to change key bindings.
-
-- Transient allows the author of a transient to organize the commands
- into groups and the use of generic functions allows authors of
- transients to control exactly how a certain command type is
- displayed.
-
- However while Transient supports giving sections a heading it does
- not currently support giving the displayed information more
- structure by, for example, using box-drawing characters.
-
- That could be implemented by defining a new group class, which lets
- the author specify a format string. It should be possible to
- implement that without modifying any existing code, but it does not
- currently exist.
-
* FAQ
:PROPERTIES:
:APPENDIX: t
@@ -2296,6 +1989,20 @@ you will be able to yank it another buffer.
#'transient--do-stay)
#+end_src
+** How does Transient compare to prefix keys and universal arguments?
+:PROPERTIES:
+:UNNUMBERED: notoc
+:END:
+
+See
https://github.com/magit/transient/wiki/Comparison-with-prefix-keys-and-universal-arguments.
+
+** How does Transient compare to Magit-Popup and Hydra?
+:PROPERTIES:
+:UNNUMBERED: notoc
+:END:
+
+See https://github.com/magit/transient/wiki/Comparison-with-other-packages.
+
** Why did some of the key bindings change?
:PROPERTIES:
:UNNUMBERED: notoc
diff --git a/docs/transient.texi b/docs/transient.texi
index 8c11a8b67c..ab211d4911 100644
--- a/docs/transient.texi
+++ b/docs/transient.texi
@@ -85,7 +85,6 @@ This manual is for Transient version 0.4.3.
* Modifying Existing Transients::
* Defining New Commands::
* Classes and Methods::
-* Related Abstractions and Packages::
* FAQ::
* Keystroke Index::
* Command and Function Index::
@@ -139,11 +138,6 @@ Suffix Methods
* Suffix Format Methods::
-Related Abstractions and Packages
-
-* Comparison With Prefix Keys and Prefix Arguments::
-* Comparison With Other Packages::
-
@end detailmenu
@end menu
@@ -2257,326 +2251,6 @@ and 7. @code{level} controls whether a suffix or a
group should be
available depending on user preference.
See @ref{Enabling and Disabling Suffixes}.
-@node Related Abstractions and Packages
-@chapter Related Abstractions and Packages
-
-@node Comparison With Prefix Keys and Prefix Arguments
-@section Comparison With Prefix Keys and Prefix Arguments
-
-While transient commands were inspired by regular prefix keys and
-prefix arguments, they are also quite different and much more complex.
-
-The following diagrams illustrate some of the differences.
-
-@itemize
-@item
-@samp{(c)} represents a return to the command loop.
-@item
-@samp{(+)} represents the user's choice to press one key or another.
-@item
-@samp{@{WORD@}} are possible behaviors.
-@item
-@samp{@{NUMBER@}} is a footnote.
-@end itemize
-
-@anchor{Regular Prefix Commands}
-@subheading Regular Prefix Commands
-
-See @ref{Prefix Keys,,,elisp,}.
-
-@example
- ,--> command1 --> (c)
- |
-(c)-(+)-> prefix command or key --+--> command2 --> (c)
- |
- `--> command3 --> (c)
-@end example
-
-@anchor{Regular Prefix Arguments}
-@subheading Regular Prefix Arguments
-
-See @ref{Prefix Command Arguments,,,elisp,}.
-
-@example
- ,----------------------------------,
- | |
- v |
-(c)-(+)---> prefix argument command --(c)-(+)-> any command --> (c)
- | ^ |
- | | |
- `-- sets or changes --, ,-- maybe used --' |
- | | |
- v | |
- prefix argument state |
- ^ |
- | |
- `-------- discards --------'
-@end example
-
-@anchor{Transients}
-@subheading Transients
-
-(∩`-´)⊃━☆゚.*・。゚
-
-This diagram ignores the infix value and external state:
-
-@example
-(c)
- | ,- @{stay@} ------<-,-<------------<-,-<---,
-(+) | | | |
- | | | | |
- | | ,--> infix1 --| | |
- | | | | | |
- | | |--> infix2 --| | |
- v v | | | |
- prefix -(c)-(+)-> infix3 --' ^ |
- | | |
- |---------------> suffix1 -->--| |
- | | |
- |---------------> suffix2 ----@{1@}------> @{exit@} --> (c)
- | |
- |---------------> suffix3 -------------> @{exit@} --> (c)
- | |
- `--> any command --@{2@}-> @{warn@} -->--|
- | |
- |--> @{noop@} -->--|
- | |
- |--> @{call@} -->--'
- |
- `------------------> @{exit@} --> (c)
-@end example
-
-This diagram takes the infix value into account to an extend, while
-still ignoring external state:
-
-@example
-(c)
- | ,- @{stay@} ------<-,-<------------<-,-<---,
-(+) | | | |
- | | | | |
- | | ,--> infix1 --| | |
- | | | | | | |
- | | ,--> infix2 --| | |
- v v | | | | |
- prefix -(c)-(+)-> infix3 --' | |
- | | ^ |
- | | | |
- |---------------> suffix1 -->--| |
- | | ^ | |
- | | | | |
- |---------------> suffix2 ----@{1@}------> @{exit@} --> (c)
- | | ^ | |
- | | | | v
- | | | | |
- |---------------> suffix3 -------------> @{exit@} --> (c)
- | | ^ | |
- | sets | | v
- | | maybe | |
- | | used | |
- | | | | |
- | | infix --' | |
- | `---> value | |
- | ^ | |
- | | | |
- | hides | |
- | | | |
- | `--------------------------<---|
- | | |
- `--> any command --@{2@}-> @{warn@} -->--| |
- | | |
- |--> @{noop@} -->--| |
- | | |
- |--> @{call@} -->--' ^
- | |
- `------------------> @{exit@} --> (c)
-@end example
-
-This diagram provides more information about the infix value
-and also takes external state into account.
-
-@example
- ,----sets--- "anything"
- |
- v
- ,---------> external
- | state
- | | |
- | initialized | ☉‿⚆
- sets from |
- | | maybe
- | ,----------' used
- | | |
-(c) | | v
- | ,- @{stay@} --|---<-,-<------|-----<-,-<---,
-(+) | | | | | | |
- | | | v | | | |
- | | ,--> infix1 --| | | |
- | | | | | | | | |
- | | | | v | | | |
- | | ,--> infix2 --| | | |
- | | | | ^ | | | |
- v v | | | | | | |
- prefix -(c)-(+)-> infix3 --' | | |
- | | ^ | ^ |
- | | | v | |
- |---------------> suffix1 -->--| |
- | | | ^ | | |
- | | | | v | |
- |---------------> suffix2 ----@{1@}------> @{exit@} --> (c)
- | | | ^ | | |
- | | | | | | v
- | | | | v | |
- |---------------> suffix3 -------------> @{exit@} --> (c)
- | | | ^ | |
- | sets | | | v
- | | initialized maybe | |
- | | from used | |
- | | | | | |
- | | `-- infix ---' | |
- | `---> value -----------------------------> persistent
- | ^ ^ | | across
- | | | | | invocations -,
- | hides | | | |
- | | `----------------------------------------------'
- | | | |
- | `--------------------------<---|
- | | |
- `--> any command --@{2@}-> @{warn@} -->--| |
- | | |
- |--> @{noop@} -->--| |
- | | |
- |--> @{call@} -->--' ^
- | |
- `------------------> @{exit@} --> (c)
-@end example
-
-@itemize
-@item
-@samp{@{1@}} Transients can be configured to be exited when a suffix command
-is invoked. The default is to do so for all suffixes except for
-those that are common to all transients and which are used to
-perform tasks such as providing help and saving the value of the
-infix arguments for future invocations. The behavior can also be
-specified for individual suffix commands and may even depend on
-state.
-
-@item
-@samp{@{2@}} Transients can be configured to allow the user to invoke
-non-suffix commands. The default is to not allow that and instead
-warn the user.
-@end itemize
-
-Despite already being rather complex, even the last diagram leaves out
-many details. Most importantly it implies that the decision whether
-to remain transient is made later than it actually is made (for the
-most part a function on @code{pre-command-hook} is responsible). But such
-implementation details are of little relevance to users and are
-covered elsewhere.
-
-@node Comparison With Other Packages
-@section Comparison With Other Packages
-
-@anchor{Magit-Popup}
-@subheading Magit-Popup
-
-Transient is the successor to Magit-Popup (see @ref{Top,,,magit-popup,}).
-
-One major difference between these two implementations of the same
-ideas is that while Transient uses transient keymaps and embraces the
-command-loop, Magit-Popup implemented an inferior mechanism that does
-not use transient keymaps and that instead of using the command-loop
-implements a naive alternative based on @code{read-char}.
-
-Magit-Popup does not use classes and generic functions and defining a
-new command type is near impossible as it involves adding hard-coded
-special-cases to many functions. Because of that only a single new
-type was added, which was not already part of Magit-Popup's initial
-release.
-
-A lot of things are hard-coded in Magit-Popup. One random example is
-that the key bindings for switches must begin with @code{-} and those for
-options must begin with @code{=}.
-
-@anchor{Hydra}
-@subheading Hydra
-
-Hydra (see @uref{https://github.com/abo-abo/hydra}) is another package that
-provides features similar to those of Transient.
-
-Both packages use transient keymaps to make a set of commands
-temporarily available and show the available commands in a popup
-buffer.
-
-A Hydra ``body'' is equivalent to a Transient “prefix” and a Hydra
-``head'' is equivalent to a Transient “suffix”. Hydra has no equivalent
-of a Transient ``infix''.
-
-Both hydras and transients can be used as simple command dispatchers.
-Used like this they are similar to regular prefix commands and prefix
-keys, except that the available commands are shown in the popup buffer.
-
-(Another package that does this is @code{which-key}. It does so automatically
-for any incomplete key sequence. The advantage of that approach is
-that no additional work is necessary; the disadvantage is that the
-available commands are not organized semantically.)
-
-Both Hydra and Transient provide features that go beyond simple
-command dispatchers:
-
-@itemize
-@item
-Invoking a command from a hydra does not necessarily exit the hydra.
-That makes it possible to invoke the same command again, but using a
-shorter key sequence (i.e., the key that was used to enter the hydra
-does not have to be pressed again).
-
-Transient supports that too, but for now this feature is not a focus
-and the interface is a bit more complicated. A very basic example
-using the current interface:
-
-@lisp
-(transient-define-prefix outline-navigate ()
- :transient-suffix 'transient--do-stay
- :transient-non-suffix 'transient--do-warn
- [("p" "previous visible heading" outline-previous-visible-heading)
- ("n" "next visible heading" outline-next-visible-heading)])
-@end lisp
-
-@item
-Transient supports infix arguments; values that are set by infix
-commands and then consumed by the invoked suffix command(s).
-
-To my knowledge, Hydra does not support that.
-@end itemize
-
-Both packages make it possible to specify how exactly the available
-commands are outlined:
-
-@itemize
-@item
-With Hydra this is often done using an explicit format string, which
-gives authors a lot of flexibility and makes it possible to do fancy
-things.
-
-The downside of this is that it becomes harder for a user to add
-additional commands to an existing hydra and to change key bindings.
-
-@item
-Transient allows the author of a transient to organize the commands
-into groups and the use of generic functions allows authors of
-transients to control exactly how a certain command type is
-displayed.
-
-However while Transient supports giving sections a heading it does
-not currently support giving the displayed information more
-structure by, for example, using box-drawing characters.
-
-That could be implemented by defining a new group class, which lets
-the author specify a format string. It should be possible to
-implement that without modifying any existing code, but it does not
-currently exist.
-@end itemize
-
@node FAQ
@appendix FAQ
@@ -2599,6 +2273,16 @@ you will be able to yank it another buffer.
#'transient--do-stay)
@end lisp
+@anchor{How does Transient compare to prefix keys and universal arguments?}
+@appendixsec How does Transient compare to prefix keys and universal arguments?
+
+See
@uref{https://github.com/magit/transient/wiki/Comparison-with-prefix-keys-and-universal-arguments}.
+
+@anchor{How does Transient compare to Magit-Popup and Hydra?}
+@appendixsec How does Transient compare to Magit-Popup and Hydra?
+
+See
@uref{https://github.com/magit/transient/wiki/Comparison-with-other-packages}.
+
@anchor{Why did some of the key bindings change?}
@appendixsec Why did some of the key bindings change?
- [elpa] externals/transient ed5bd6fdc3 23/41: transient-infix-set(argument): Fix disabling incompatible options, (continued)
- [elpa] externals/transient ed5bd6fdc3 23/41: transient-infix-set(argument): Fix disabling incompatible options, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient bad91f79ec 29/41: transient-with-shadowed-buffer: Move definition, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient cf32cf6f98 39/41: transient--get-face: Favor face over function, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 4b9d831d28 10/41: transient--make-predicate-map: Drop obsolete condition, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 784887b781 14/41: Account for t as transient-suffix for nested prefixes, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 2eb214a6ec 24/41: transient-infix-set(argument): Also disable based on concrete value, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 94661e0ccd 34/41: transient--do-replace: Replace with two variants, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 9617b6c77c 35/41: transient--make-predicate-map: Support shorthands, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 3a2b936a67 36/41: Fix highlighting infix for which user input is being read, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 222c2bfbeb 38/41: transient--get-face: New function, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 02607dd9d9 04/41: manual: Move comparisons to wiki,
Jonas Bernoulli <=
- [elpa] externals/transient 0677e2c3d8 26/41: transient-format-description: Operate in transient--shadowed-buffer, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient b4a2963636 33/41: transient-format(around:suffix): Update for transient-information, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient d44c4fce39 40/41: transient--get-face: Use for inapt-face, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient eaf062a921 11/41: transient--make-predicate-map: Refactor, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 5ad5b627f6 15/41: transient--setup-recursion: When initiated by outer transient-suffix, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 2b7219cf6a 28/41: transient--current-buffer: Fix obsolete variable alias, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 0a0ba1aa90 01/41: transient--do-leave: Actually behave as documented, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 8bfd92993f 17/41: manual: Update "Transient State" section, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient 0dda40e8b6 27/41: transient-with-shadowed-buffer: New macro, Jonas Bernoulli, 2023/11/12
- [elpa] externals/transient b1d1c36966 37/41: Prevent temporary faces from leaking back into objects, Jonas Bernoulli, 2023/11/12