Skip to content

Commit

Permalink
The version in Emacs' master branch
Browse files Browse the repository at this point in the history
To update:

1. Backport from Emacs' "emacs-29" to Transient.

2. In Transient, rebase "builtin" onto "main".

   Now we have to DISCARD the changes that revert modifications
   that have happened in Transient since the last round.  Only
   the following differences should remain:

   Differences in "transient.texi":

   - Drop the whitespace change in @direntry at the top.
   - Drop the "-git" suffix from version strings, but keep ".50".
   - Replace @ref{}.
     ox-texinfo uses @ref, but other link types are preferred in Emacs.
   - Use @dots{}.
     It is not possible to put @dots{} inside the term part of a
     description list (see example below).  It is also not possible
     to do this inside code blocks.

   Differences in "transient.el":

   - Use "URL" instead of "Homepage".
     I consistently use "Homepage" for all my packages and they
     consistently use "URL".
   - Drop the "-git" suffix from version strings, but keep ".50".
   - Don't depend on Compat.
     The stand-alone version still supports Emacs 25.1 with a little
     help from the "compat" package.
   - Autoloading transient-define-prefix only works for the built-in
     version.

3. In Transient, amend and run "git describe" to get DESC.

4. Copy from Transient's "builtin" to Emacs' "emacs-29".

   cp ~/.config/emacs/lib/transient/lisp/transient.el \
      ~/src/emacs/emacs/emacs-29/lisp/
   cp ~/.config/emacs/lib/transient/docs/transient.texi \
      ~/src/emacs/emacs/emacs-29/doc/misc/

5. In Emacs, stage and commit using "Update to Transient DESC" as message.

------

- Function: foo arg@@texinfo:@dots{}@@ rest ::

  This works @@texinfo:@dots{}@@.

- Function: bar arg{{{dots()}}} rest ::

  This works {{{dots()}}}.

- This works {{{dots()}}} also.
  • Loading branch information
tarsius committed Jun 2, 2023
1 parent a1575e5 commit aa5986c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 40 deletions.
83 changes: 46 additions & 37 deletions docs/transient.texi
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ General Public License for more details.

@dircategory Emacs misc features
@direntry
* Transient: (transient). Transient Commands.
* Transient: (transient). Transient Commands.
@end direntry

@finalout
Expand Down Expand Up @@ -254,14 +254,14 @@ One benefit of the Transient interface is that it remembers history
not only on a global level (“this command was invoked using these
arguments, and previously it was invoked using those other arguments”),
but also remembers the values of individual arguments independently.
See @ref{Using History}.
@xref{Using History}.

After a transient prefix command is invoked, @kbd{C-h @var{KEY}} can be used to
show the documentation for the infix or suffix command that @var{KEY} is
bound to (see @ref{Getting Help for Suffix Commands}), and infixes and
suffixes can be removed from the transient using @kbd{C-x l @var{KEY}}. Infixes
show the documentation for the infix or suffix command that @kbd{@var{KEY}} is
bound to (@pxref{Getting Help for Suffix Commands}), and infixes and
suffixes can be removed from the transient using @kbd{C-x l @var{KEY}}. Infixes
and suffixes that are disabled by default can be enabled the same way.
See @ref{Enabling and Disabling Suffixes}.
@xref{Enabling and Disabling Suffixes}.

Transient ships with support for a few different types of specialized
infix commands. A command that sets a command line option, for example,
Expand Down Expand Up @@ -441,7 +441,7 @@ than outlined above and even customizable.}
If the user does not save the value and just exits using a regular
suffix command, then the value is merely saved to the transient's
history. That value won't be used when the transient is next invoked,
but it is easily accessible (see @ref{Using History}).
but it is easily accessible (@pxref{Using History}).

@table @asis
@item @kbd{C-x s} (@code{transient-set})
Expand Down Expand Up @@ -502,8 +502,8 @@ to cycle through previously used values. Usually the same keys as
those mentioned above are bound to those commands.

Authors of transients should arrange for different infix commands that
read the same kind of value to also use the same history key (see
@ref{Suffix Slots}).
read the same kind of value to also use the same history key
(@pxref{Suffix Slots}).

Both kinds of history are saved to a file when Emacs is exited.

Expand Down Expand Up @@ -710,7 +710,7 @@ buffer. The transient popup buffer is displayed in a window using
The value of this option has the form @code{(@var{FUNCTION} . @var{ALIST})},
where @var{FUNCTION} is a function or a list of functions. Each such
function should accept two arguments: a buffer to display and an
alist of the same form as @var{ALIST}. See @ref{Choosing Window,,,elisp,},
alist of the same form as @var{ALIST}. @xref{Choosing Window,,,elisp,},
for details.

The default is:
Expand All @@ -725,7 +725,8 @@ The default is:
This displays the window at the bottom of the selected frame.
Another useful @var{FUNCTION} is @code{display-buffer-below-selected}, which
is what @code{magit-popup} used by default. For more alternatives see
@ref{Buffer Display Action Functions,,,elisp,}, and @ref{Buffer Display Action Alists,,,elisp,}.
@ref{Buffer Display Action Functions,,,elisp,}, and see @ref{Buffer Display
Action Alists,,,elisp,}.

Note that the buffer that was current before the transient buffer
is shown should remain the current buffer. Many suffix commands
Expand Down Expand Up @@ -769,7 +770,8 @@ thin line is drawn instead, using the background color of the face
@code{transient-separator}. Text-mode frames cannot display thin lines,
and therefore fall back to treating @code{line} like @code{nil}.

Otherwise this can be any mode-line format. See @ref{Mode Line Format,,,elisp,}, for details.
Otherwise this can be any mode-line format. @xref{Mode Line
Format,,,elisp,}, for details.
@end defopt

@defopt transient-semantic-coloring
Expand Down Expand Up @@ -922,10 +924,10 @@ The following functions share a few arguments:
as expected by @code{transient-define-prefix}. Note that an infix is a
special kind of suffix. Depending on context “suffixes” means
“suffixes (including infixes)” or “non-infix suffixes”. Here it
means the former. See @ref{Suffix Specifications}.
means the former. @xref{Suffix Specifications}.

@var{SUFFIX} may also be a group in the same form as expected by
@code{transient-define-prefix}. See @ref{Group Specifications}.
@code{transient-define-prefix}. @xref{Group Specifications}.

@item
@var{LOC} is a command, a key vector, a key description (a string as
Expand Down Expand Up @@ -1013,7 +1015,7 @@ binds the transient's infix and suffix commands. In other words, it
defines the complete transient, not just the transient prefix command
that is used to invoke that transient.

@defmac transient-define-prefix name arglist [docstring] [keyword value]... group... [body...]
@defmac transient-define-prefix name arglist [docstring] [keyword value]@dots{} group@dots{} [body@dots{}]
This macro defines @var{NAME} as a transient prefix command and binds the
transient's infix and suffix commands.

Expand All @@ -1028,7 +1030,7 @@ explicitly.

@var{GROUP}s add key bindings for infix and suffix commands and specify
how these bindings are presented in the popup buffer. At least one
@var{GROUP} has to be specified. See @ref{Binding Suffix and Infix Commands}.
@var{GROUP} has to be specified. @xref{Binding Suffix and Infix Commands}.

The @var{BODY} is optional. If it is omitted, then @var{ARGLIST} is ignored and
the function definition becomes:
Expand Down Expand Up @@ -1063,13 +1065,15 @@ the branch whose variables are being configured.
@section Binding Suffix and Infix Commands

The macro @code{transient-define-prefix} is used to define a transient.
This defines the actual transient prefix command (see @ref{Defining Transients}) and adds the transient's infix and suffix bindings, as
This defines the actual transient prefix command (@pxref{Defining
Transients}) and adds the transient's infix and suffix bindings, as
described below.

Users and third-party packages can add additional bindings using
functions such as @code{transient-insert-suffix} (See @ref{Modifying Existing Transients}). These functions take a “suffix specification” as one of
their arguments, which has the same form as the specifications used in
@code{transient-define-prefix}.
functions such as @code{transient-insert-suffix} (@pxref{Modifying
Existing Transients}). These functions take a “suffix
specification” as one of their arguments, which has the same form as
the specifications used in @code{transient-define-prefix}.

@menu
* Group Specifications::
Expand Down Expand Up @@ -1098,10 +1102,13 @@ brackets to do the latter.
Group specifications then have this form:

@lisp
[@{LEVEL@} @{DESCRIPTION@} @{KEYWORD VALUE@}... ELEMENT...]
[@{@var{LEVEL}@} @{@var{DESCRIPTION}@}
@{@var{KEYWORD} @var{VALUE}@}...
@var{ELEMENT}...]
@end lisp

The @var{LEVEL} is optional and defaults to 4. See @ref{Enabling and Disabling Suffixes}.
The @var{LEVEL} is optional and defaults to 4. @xref{Enabling and
Disabling Suffixes}.

The @var{DESCRIPTION} is optional. If present, it is used as the heading of
the group.
Expand Down Expand Up @@ -1206,7 +1213,9 @@ suffixes”. Here it means the former.
Suffix specifications have this form:

@lisp
([LEVEL] [KEY [DESCRIPTION]] COMMAND|ARGUMENT [KEYWORD VALUE]...)
([@var{LEVEL}]
[@var{KEY} [@var{DESCRIPTION}]]
@var{COMMAND}|@var{ARGUMENT} [@var{KEYWORD} @var{VALUE}]...)
@end lisp

@var{LEVEL}, @var{KEY} and @var{DESCRIPTION} can also be specified using the @var{KEYWORD}s
Expand All @@ -1217,8 +1226,8 @@ the object's values just for the binding inside this transient.

@itemize
@item
@var{LEVEL} is the suffix level, an integer between 1 and 7. See
@ref{Enabling and Disabling Suffixes}.
@var{LEVEL} is the suffix level, an integer between 1 and 7.
@xref{Enabling and Disabling Suffixes}.

@item
@var{KEY} is the key binding, either a vector or key description string.
Expand Down Expand Up @@ -1296,7 +1305,7 @@ Note that an infix is a special kind of suffix. Depending on context
“suffixes” means “suffixes (including infixes)” or “non-infix
suffixes”.

@defmac transient-define-suffix name arglist [docstring] [keyword value]... body...
@defmac transient-define-suffix name arglist [docstring] [keyword value]@dots{} body@dots{}
This macro defines @var{NAME} as a transient suffix command.

@var{ARGLIST} are the arguments that the command takes.
Expand All @@ -1313,7 +1322,7 @@ The infix arguments are usually accessed by using @code{transient-args}
inside @code{interactive}.
@end defmac

@defmac transient-define-infix name arglist [docstring] [keyword value]...
@defmac transient-define-infix name arglist [docstring] [keyword value]@dots{}
This macro defines @var{NAME} as a transient infix command.

@var{ARGLIST} is always ignored (but mandatory never-the-less) and
Expand Down Expand Up @@ -1350,7 +1359,7 @@ define your own infix command class. In that case you have to use
value of the @code{:transient} keyword.
@end defmac

@defmac transient-define-argument name arglist [docstring] [keyword value]...
@defmac transient-define-argument name arglist [docstring] [keyword value]@dots{}
This macro defines @var{NAME} as a transient infix command.

This is an alias for @code{transient-define-infix}. Only use this alias
Expand Down Expand Up @@ -1803,7 +1812,7 @@ object should not affect later invocations.
@item
All suffix and infix classes derive from @code{transient-suffix}, which in
turn derives from @code{transient-child}, from which @code{transient-group} also
derives (see @ref{Group Classes}).
derives (@pxref{Group Classes}).

@item
All infix classes derive from the abstract @code{transient-infix} class,
Expand All @@ -1817,7 +1826,7 @@ that does not do so. If you do that then you get to implement many
methods.

Also, infixes and non-infix suffixes are usually defined using
different macros (see @ref{Defining Suffix and Infix Commands}).
different macros (@pxref{Defining Suffix and Infix Commands}).

@item
Classes used for infix commands that represent arguments should
Expand Down Expand Up @@ -1991,7 +2000,7 @@ probably don't want that.
@code{transient-suffix} and @code{transient-non-suffix} play a part when
determining whether the currently active transient prefix command
remains active/transient when a suffix or arbitrary non-suffix
command is invoked. See @ref{Transient State}.
command is invoked. @xref{Transient State}.

@item
@code{incompatible} A list of lists. Each sub-list specifies a set of
Expand Down Expand Up @@ -2024,7 +2033,7 @@ of the same symbol.

@item
@code{level} The level of the prefix commands. The suffix commands whose
layer is equal or lower are displayed. See @ref{Enabling and Disabling Suffixes}.
layer is equal or lower are displayed. @pxref{Enabling and Disabling Suffixes}.

@item
@code{value} The likely outdated value of the prefix. Instead of accessing
Expand Down Expand Up @@ -2057,7 +2066,7 @@ Also see @ref{Suffix Classes}.
@code{command} The command, a symbol.

@item
@code{transient} Whether to stay transient. See @ref{Transient State}.
@code{transient} Whether to stay transient. @xref{Transient State}.

@item
@code{format} The format used to display the suffix in the popup buffer.
Expand Down Expand Up @@ -2220,7 +2229,7 @@ the slots documented above, it is a predicate, but it is used for a
different purpose. The value has to be an integer between 1
and 7. @code{level} controls whether a suffix or a group should be
available depending on user preference.
See @ref{Enabling and Disabling Suffixes}.
@xref{Enabling and Disabling Suffixes}.

@node Related Abstractions and Packages
@chapter Related Abstractions and Packages
Expand Down Expand Up @@ -2252,7 +2261,7 @@ The following diagrams illustrate some of the differences.
@anchor{Regular Prefix Commands}
@subheading Regular Prefix Commands

See @ref{Prefix Keys,,,elisp,}.
@xref{Prefix Keys,,,elisp,}.

@example
,--> command1 --> (c)
Expand All @@ -2265,7 +2274,7 @@ See @ref{Prefix Keys,,,elisp,}.
@anchor{Regular Prefix Arguments}
@subheading Regular Prefix Arguments

See @ref{Prefix Command Arguments,,,elisp,}.
@xref{Prefix Command Arguments,,,elisp,}.

@example
,----------------------------------,
Expand Down Expand Up @@ -2449,7 +2458,7 @@ covered elsewhere.
@anchor{Magit-Popup}
@subheading Magit-Popup

Transient is the successor to Magit-Popup (see @ref{Top,,,magit-popup,}).
Transient is the successor to Magit-Popup (@pxref{Top,,,magit-popup,}).

One major difference between these two implementations of the same
ideas is that while Transient uses transient keymaps and embraces the
Expand Down
6 changes: 3 additions & 3 deletions lisp/transient.el
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
;; Copyright (C) 2018-2023 Free Software Foundation, Inc.

;; Author: Jonas Bernoulli <jonas@bernoul.li>
;; Homepage: https://github.com/magit/transient
;; URL: https://github.com/magit/transient
;; Keywords: extensions

;; Package-Version: 0.4.1
;; Package-Requires: ((emacs "25.1") (compat "29.1.4.1"))
;; Package-Requires: ((emacs "26.1"))

;; SPDX-License-Identifier: GPL-3.0-or-later

Expand Down Expand Up @@ -53,7 +53,6 @@
;;; Code:

(require 'cl-lib)
(require 'compat)
(require 'eieio)
(require 'edmacro)
(require 'format-spec)
Expand Down Expand Up @@ -813,6 +812,7 @@ elements themselves.")

;;; Define

;;;###autoload
(defmacro transient-define-prefix (name arglist &rest args)
"Define NAME as a transient prefix command.
Expand Down

0 comments on commit aa5986c

Please sign in to comment.